axiom 0.49.1 → 0.49.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/dist/bin.js +5 -5
  2. package/dist/{chunk-MOSVZZAN.js → chunk-LMH3H6LA.js} +2 -2
  3. package/dist/{chunk-JX4IMYH5.js → chunk-OMTDFDPH.js} +7 -7
  4. package/dist/{chunk-4S2HLGZW.js → chunk-PRNAL6ER.js} +3 -3
  5. package/dist/{chunk-3MMFYPFN.js → chunk-SHGWFFCE.js} +2 -2
  6. package/dist/{chunk-WO6AVN5J.js → chunk-WTL3K72D.js} +2 -2
  7. package/dist/{chunk-WO6AVN5J.js.map → chunk-WTL3K72D.js.map} +1 -1
  8. package/dist/docs/README.md +2 -2
  9. package/dist/docs/config/README.md +1 -1
  10. package/dist/docs/config/functions/defineConfig.md +1 -1
  11. package/dist/docs/config/interfaces/AxiomConfig.md +1 -1
  12. package/dist/docs/config/type-aliases/AxiomEvalInstrumentationHook.md +1 -1
  13. package/dist/docs/evals/README.md +1 -1
  14. package/dist/docs/evals/classes/AxiomReporter.md +1 -1
  15. package/dist/docs/evals/functions/Eval.md +1 -1
  16. package/dist/docs/evals/interfaces/EvalBuilder.md +1 -1
  17. package/dist/docs/evals/interfaces/EvalContextData.md +1 -1
  18. package/dist/docs/evals/online/README.md +1 -1
  19. package/dist/docs/evals/online/functions/onlineEval.md +1 -1
  20. package/dist/docs/evals/online/type-aliases/OnlineEvalParams.md +1 -1
  21. package/dist/docs/evals/online/type-aliases/OnlineEvalScorerEntry.md +1 -1
  22. package/dist/docs/evals/online/type-aliases/OnlineEvalScorerInput.md +1 -1
  23. package/dist/docs/evals/online/type-aliases/SampledOnlineEvalScorer.md +1 -1
  24. package/dist/docs/evals/online/type-aliases/ScorerSampling.md +1 -1
  25. package/dist/docs/evals/type-aliases/Case.md +1 -1
  26. package/dist/docs/evals/type-aliases/Chat.md +1 -1
  27. package/dist/docs/evals/type-aliases/EvalParams.md +1 -1
  28. package/dist/docs/evals/type-aliases/EvalTask.md +1 -1
  29. package/dist/docs/evals/type-aliases/Evaluation.md +1 -1
  30. package/dist/docs/evals/type-aliases/Task.md +1 -1
  31. package/dist/docs/feedback/README.md +1 -1
  32. package/dist/docs/feedback/functions/createFeedbackClient.md +1 -1
  33. package/dist/docs/feedback/type-aliases/FeedbackClient.md +1 -1
  34. package/dist/docs/feedback/type-aliases/FeedbackConfig.md +1 -1
  35. package/dist/docs/feedback/type-aliases/FeedbackErrorContext.md +1 -1
  36. package/dist/docs/feedback/type-aliases/FeedbackEvent.md +1 -1
  37. package/dist/docs/feedback/type-aliases/FeedbackInput.md +1 -1
  38. package/dist/docs/feedback/type-aliases/FeedbackLinks.md +1 -1
  39. package/dist/docs/feedback/type-aliases/FeedbackSettings.md +1 -1
  40. package/dist/docs/feedback/type-aliases/SendFeedbackFn.md +1 -1
  41. package/dist/docs/feedback/variables/Feedback.md +1 -1
  42. package/dist/docs/index/README.md +1 -1
  43. package/dist/docs/index/functions/axiomAIMiddleware.md +1 -1
  44. package/dist/docs/index/functions/axiomAIMiddlewareV1.md +1 -1
  45. package/dist/docs/index/functions/axiomAIMiddlewareV2.md +1 -1
  46. package/dist/docs/index/functions/axiomAIMiddlewareV3.md +1 -1
  47. package/dist/docs/index/functions/createAppScope.md +1 -1
  48. package/dist/docs/index/functions/experimental_parse.md +1 -1
  49. package/dist/docs/index/functions/getGlobalTracer.md +1 -1
  50. package/dist/docs/index/functions/initAxiomAI.md +1 -1
  51. package/dist/docs/index/functions/resetAxiomAI.md +1 -1
  52. package/dist/docs/index/functions/withSpan.md +1 -1
  53. package/dist/docs/index/functions/wrapAISDKModel.md +1 -1
  54. package/dist/docs/index/functions/wrapTool.md +1 -1
  55. package/dist/docs/index/functions/wrapTools.md +1 -1
  56. package/dist/docs/index/interfaces/AxiomTelemetryConfig.md +1 -1
  57. package/dist/docs/index/interfaces/experimental_AxiomPromptMetadata.md +1 -1
  58. package/dist/docs/index/interfaces/experimental_ParsedMessage.md +1 -1
  59. package/dist/docs/index/type-aliases/AxiomAIRedactionPolicy.md +1 -1
  60. package/dist/docs/index/type-aliases/WithSpanOptions.md +1 -1
  61. package/dist/docs/index/type-aliases/experimental_InferContext.md +1 -1
  62. package/dist/docs/index/type-aliases/experimental_InferSchema.md +1 -1
  63. package/dist/docs/index/type-aliases/experimental_ParsedMessagesArray.md +1 -1
  64. package/dist/docs/index/type-aliases/experimental_Prompt.md +1 -1
  65. package/dist/docs/index/type-aliases/experimental_TSchema.md +1 -1
  66. package/dist/docs/index/variables/RedactionPolicy.md +1 -1
  67. package/dist/docs/index/variables/experimental_Type.md +1 -1
  68. package/dist/docs/index/variables/onlineEval.md +1 -1
  69. package/dist/docs/scorers/aggregations/README.md +1 -1
  70. package/dist/docs/scorers/aggregations/functions/Mean.md +1 -1
  71. package/dist/docs/scorers/aggregations/functions/Median.md +1 -1
  72. package/dist/docs/scorers/aggregations/functions/PassAtK.md +1 -1
  73. package/dist/docs/scorers/aggregations/functions/PassHatK.md +1 -1
  74. package/dist/docs/scorers/aggregations/type-aliases/Aggregation.md +1 -1
  75. package/dist/docs/scorers/aggregations/variables/AllTrialsPass.md +1 -1
  76. package/dist/docs/scorers/aggregations/variables/AtLeastOneTrialPasses.md +1 -1
  77. package/dist/docs/scorers/scorers/README.md +1 -1
  78. package/dist/docs/scorers/scorers/functions/Scorer.md +1 -1
  79. package/dist/docs/scorers/scorers/type-aliases/Score.md +1 -1
  80. package/dist/docs/scorers/scorers/type-aliases/ScoreWithName.md +1 -1
  81. package/dist/docs/scorers/scorers/type-aliases/ScorerLike.md +1 -1
  82. package/dist/docs/scorers/scorers/type-aliases/ScorerOptions.md +1 -1
  83. package/dist/docs/scorers/scorers/type-aliases/ScorerType.md +1 -1
  84. package/dist/evals/online.js +2 -2
  85. package/dist/evals.js +4 -4
  86. package/dist/index.js +3 -3
  87. package/dist/{run-vitest-QMZWFYSW.js → run-vitest-NC5WCNAI.js} +25 -9
  88. package/dist/run-vitest-NC5WCNAI.js.map +1 -0
  89. package/package.json +1 -1
  90. package/dist/run-vitest-QMZWFYSW.js.map +0 -1
  91. /package/dist/{chunk-MOSVZZAN.js.map → chunk-LMH3H6LA.js.map} +0 -0
  92. /package/dist/{chunk-JX4IMYH5.js.map → chunk-OMTDFDPH.js.map} +0 -0
  93. /package/dist/{chunk-4S2HLGZW.js.map → chunk-PRNAL6ER.js.map} +0 -0
  94. /package/dist/{chunk-3MMFYPFN.js.map → chunk-SHGWFFCE.js.map} +0 -0
package/dist/bin.js CHANGED
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  extractOverrides,
4
4
  loadEvalCommand
5
- } from "./chunk-4S2HLGZW.js";
5
+ } from "./chunk-PRNAL6ER.js";
6
6
  import {
7
7
  OAuth,
8
8
  fetchOrganizations,
@@ -15,11 +15,11 @@ import {
15
15
  verifyToken,
16
16
  waitForCallback
17
17
  } from "./chunk-3VKWOZAQ.js";
18
- import "./chunk-3MMFYPFN.js";
18
+ import "./chunk-SHGWFFCE.js";
19
19
  import {
20
20
  AxiomCLIError
21
21
  } from "./chunk-ISSDOC43.js";
22
- import "./chunk-WO6AVN5J.js";
22
+ import "./chunk-WTL3K72D.js";
23
23
  import "./chunk-MM5FFQJT.js";
24
24
  import "./chunk-4TKUTT24.js";
25
25
  import "./chunk-KEXKKQVW.js";
@@ -389,7 +389,7 @@ import { Command } from "commander";
389
389
  var loadVersionCommand = (program2) => {
390
390
  return program2.addCommand(
391
391
  new Command("version").description("cli version").action(() => {
392
- console.log("0.49.1");
392
+ console.log("0.49.2");
393
393
  })
394
394
  );
395
395
  };
@@ -399,7 +399,7 @@ var { loadEnvConfig } = pkg;
399
399
  loadEnvConfig(process.cwd());
400
400
  var { cleanedArgv, overrides } = extractOverrides(process.argv.slice(2));
401
401
  var program = new Command2();
402
- program.name("axiom").description("Axiom's CLI to manage your objects and run evals").version("0.49.1");
402
+ program.name("axiom").description("Axiom's CLI to manage your objects and run evals").version("0.49.2");
403
403
  program.hook("preAction", async (_, actionCommand) => {
404
404
  const commandName = actionCommand.name();
405
405
  const parentCommand = actionCommand.parent;
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getGlobalTracer
3
- } from "./chunk-WO6AVN5J.js";
3
+ } from "./chunk-WTL3K72D.js";
4
4
  import {
5
5
  isValidName
6
6
  } from "./chunk-MM5FFQJT.js";
@@ -280,4 +280,4 @@ async function executeOnlineEvalInternal(name, params, linkContexts) {
280
280
  export {
281
281
  onlineEval
282
282
  };
283
- //# sourceMappingURL=chunk-MOSVZZAN.js.map
283
+ //# sourceMappingURL=chunk-LMH3H6LA.js.map
@@ -2,19 +2,19 @@ import {
2
2
  getConsoleUrl,
3
3
  loadConfig,
4
4
  u
5
- } from "./chunk-4S2HLGZW.js";
5
+ } from "./chunk-PRNAL6ER.js";
6
6
  import {
7
7
  dotNotationToNested,
8
8
  flattenObject,
9
9
  getAxiomConfig
10
- } from "./chunk-3MMFYPFN.js";
10
+ } from "./chunk-SHGWFFCE.js";
11
11
  import {
12
12
  AxiomCLIError,
13
13
  errorToString
14
14
  } from "./chunk-ISSDOC43.js";
15
15
  import {
16
16
  initAxiomAI
17
- } from "./chunk-WO6AVN5J.js";
17
+ } from "./chunk-WTL3K72D.js";
18
18
  import {
19
19
  __publicField
20
20
  } from "./chunk-KEXKKQVW.js";
@@ -649,11 +649,11 @@ function setupEvalProvider(connection) {
649
649
  axiomProvider = new NodeTracerProvider({
650
650
  resource: resourceFromAttributes({
651
651
  ["service.name"]: "axiom",
652
- ["service.version"]: "0.49.1"
652
+ ["service.version"]: "0.49.2"
653
653
  }),
654
654
  spanProcessors: [processor]
655
655
  });
656
- axiomTracer = axiomProvider.getTracer("axiom", "0.49.1");
656
+ axiomTracer = axiomProvider.getTracer("axiom", "0.49.2");
657
657
  }
658
658
  async function initInstrumentation(config) {
659
659
  if (initialized) {
@@ -665,7 +665,7 @@ async function initInstrumentation(config) {
665
665
  }
666
666
  initializationPromise = (async () => {
667
667
  if (!config.enabled) {
668
- axiomTracer = trace.getTracer("axiom", "0.49.1");
668
+ axiomTracer = trace.getTracer("axiom", "0.49.2");
669
669
  initialized = true;
670
670
  return;
671
671
  }
@@ -780,4 +780,4 @@ export {
780
780
  startSpan,
781
781
  startActiveSpan
782
782
  };
783
- //# sourceMappingURL=chunk-JX4IMYH5.js.map
783
+ //# sourceMappingURL=chunk-OMTDFDPH.js.map
@@ -16,7 +16,7 @@ import {
16
16
  putOnSpan,
17
17
  setGlobalFlagOverrides,
18
18
  withEvalContext
19
- } from "./chunk-3MMFYPFN.js";
19
+ } from "./chunk-SHGWFFCE.js";
20
20
  import {
21
21
  AxiomCLIError,
22
22
  errorToString
@@ -422,7 +422,7 @@ var loadEvalCommand = (program, flagOverrides = {}) => {
422
422
  consoleUrl = options.consoleUrl;
423
423
  let runVitestModule;
424
424
  try {
425
- runVitestModule = await import("./run-vitest-QMZWFYSW.js");
425
+ runVitestModule = await import("./run-vitest-NC5WCNAI.js");
426
426
  } catch (err) {
427
427
  if (err && typeof err === "object" && "code" in err && (err.code === "ERR_MODULE_NOT_FOUND" || err.code === "MODULE_NOT_FOUND")) {
428
428
  throw new AxiomCLIError("Failed to load vitest.");
@@ -465,4 +465,4 @@ export {
465
465
  getConsoleUrl,
466
466
  loadEvalCommand
467
467
  };
468
- //# sourceMappingURL=chunk-4S2HLGZW.js.map
468
+ //# sourceMappingURL=chunk-PRNAL6ER.js.map
@@ -5,7 +5,7 @@ import {
5
5
  getRedactionPolicy,
6
6
  handleMaybeRedactedAttribute,
7
7
  package_default
8
- } from "./chunk-WO6AVN5J.js";
8
+ } from "./chunk-WTL3K72D.js";
9
9
  import {
10
10
  isValidName
11
11
  } from "./chunk-MM5FFQJT.js";
@@ -3146,4 +3146,4 @@ export {
3146
3146
  withEvalContext,
3147
3147
  getConfigScope
3148
3148
  };
3149
- //# sourceMappingURL=chunk-3MMFYPFN.js.map
3149
+ //# sourceMappingURL=chunk-SHGWFFCE.js.map
@@ -62,7 +62,7 @@ import { trace } from "@opentelemetry/api";
62
62
  // package.json
63
63
  var package_default = {
64
64
  name: "axiom",
65
- version: "0.49.1",
65
+ version: "0.49.2",
66
66
  type: "module",
67
67
  author: "Axiom, Inc.",
68
68
  contributors: [
@@ -259,4 +259,4 @@ export {
259
259
  getGlobalTracer,
260
260
  resetAxiomAI
261
261
  };
262
- //# sourceMappingURL=chunk-WO6AVN5J.js.map
262
+ //# sourceMappingURL=chunk-WTL3K72D.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/otel/utils/redaction.ts","../src/otel/withSpanBaggageKey.ts","../src/otel/initAxiomAI.ts","../package.json"],"sourcesContent":["import { context, propagation, type Baggage, type Span } from '@opentelemetry/api';\nimport { WITHSPAN_REDACTION_POLICY_KEY } from '../withSpanBaggageKey';\n\ntype CaptureMessageContent = 'full' | 'off';\n\nexport type AxiomAIRedactionPolicy = {\n captureMessageContent?: CaptureMessageContent;\n mirrorToolPayloadOnToolSpan?: boolean;\n};\n\nexport const RedactionPolicy = {\n /**\n * Includes message content on chat spans, and mirrors tool\n * payload on tool spans for more convenient querying.\n */\n AxiomDefault: {\n captureMessageContent: 'full',\n mirrorToolPayloadOnToolSpan: true,\n },\n /**\n * Redacts message content on chat spans, and does not put\n * tool payload on tool spans.\n */\n OpenTelemetryDefault: {\n captureMessageContent: 'off',\n mirrorToolPayloadOnToolSpan: false,\n },\n} as const satisfies Record<string, AxiomAIRedactionPolicy>;\n\n// Global key to store redaction policy across all execution contexts\nexport const AXIOM_AI_REDACTION_KEY = Symbol.for('__axiom_ai_redaction__');\n\n/**\n * Get the globally stored redaction policy\n * @returns The global redaction policy or undefined if not set\n */\nfunction getGlobalRedactionPolicy(): AxiomAIRedactionPolicy | undefined {\n return (globalThis as any)[AXIOM_AI_REDACTION_KEY];\n}\n\n/**\n * Resolves the effective redaction policy by merging global and per-call policies.\n * Per-call policies take precedence over global policies.\n *\n * @param globalPolicy - The global redaction policy from initAxiomAI\n * @param localPolicy - The per-call redaction policy from withSpan or middleware\n * @returns The effective redaction policy with all fields resolved\n */\nfunction getEffectiveRedactionPolicy(\n globalPolicy?: AxiomAIRedactionPolicy,\n localPolicy?: AxiomAIRedactionPolicy,\n): AxiomAIRedactionPolicy {\n // Per-call policy overrides global policy, with defaults\n return {\n captureMessageContent:\n localPolicy?.captureMessageContent ??\n globalPolicy?.captureMessageContent ??\n RedactionPolicy.AxiomDefault.captureMessageContent,\n mirrorToolPayloadOnToolSpan:\n localPolicy?.mirrorToolPayloadOnToolSpan ??\n globalPolicy?.mirrorToolPayloadOnToolSpan ??\n RedactionPolicy.AxiomDefault.mirrorToolPayloadOnToolSpan,\n };\n}\n\n/**\n * Get the active redaction policy\n */\nexport function getRedactionPolicy() {\n return getEffectiveRedactionPolicy(getGlobalRedactionPolicy(), getPerCallRedactionPolicy());\n}\n\n/**\n * Conditionally sets a span attribute based on the capture message content policy.\n * When policy is 'off', the attribute is not set at all.\n *\n * @param span - The OpenTelemetry span to set the attribute on\n * @param attribute - The attribute name/key\n * @param value - The attribute value\n * @param captureMessageContent - The capture policy ('full' sets attribute, 'off' skips it)\n */\nexport function handleMaybeRedactedAttribute(\n span: Span,\n attribute: string,\n value: any,\n captureMessageContent?: CaptureMessageContent,\n): void {\n if (captureMessageContent === 'full') {\n span.setAttribute(attribute, value);\n }\n\n // For 'off', don't set the attribute at all\n // Future: Could add callback-based redaction here\n}\n\n/**\n * Extracts the per-call redaction policy from OpenTelemetry baggage context.\n * This allows middleware and tools to access redaction policies passed via withSpan.\n *\n * @returns The per-call redaction policy or undefined if not set\n */\nfunction getPerCallRedactionPolicy(): AxiomAIRedactionPolicy | undefined {\n const baggage: Baggage = propagation.getBaggage(context.active()) || propagation.createBaggage();\n const serializedPolicy = baggage.getEntry(WITHSPAN_REDACTION_POLICY_KEY)?.value;\n\n if (!serializedPolicy) {\n return undefined;\n }\n\n try {\n return JSON.parse(serializedPolicy) as AxiomAIRedactionPolicy;\n } catch (error) {\n console.warn('[AxiomAI] Failed to parse redaction policy from baggage:', error);\n return undefined;\n }\n}\n","/**\n * We need a way to know that we're inside `withSpan`\n * Because we don't own `generateText` and similar functions,\n * we use OTel Baggage to propagate this information. Another\n * consideration might be to use AsyncLocalStorage in Node and\n * some kind of KV in workerd.\n */\nexport const WITHSPAN_BAGGAGE_KEY = '__withspan_gen_ai_call';\nexport const WITHSPAN_REDACTION_POLICY_KEY = '__withspan_redaction_policy';\n","import type { Tracer } from '@opentelemetry/api';\nimport { trace } from '@opentelemetry/api';\nimport packageJson from '../../package.json';\nimport { AXIOM_AI_REDACTION_KEY, type AxiomAIRedactionPolicy } from './utils/redaction';\n\n// Global key to store tracer scope information across all execution contexts\nconst AXIOM_AI_SCOPE_KEY = Symbol.for('__axiom_ai_scope__');\n\ninterface TracerScope {\n name: string;\n version?: string;\n}\n\n/**\n * Extract scope information from a tracer, with fallback to package.json\n */\nfunction extractTracerScope(tracer: Tracer): TracerScope {\n const tracerAny = tracer as any;\n\n // Guard access to private fields with optional chaining\n // Note: These are internal OTEL fields that may change in future versions\n // _instrumentationScope is modern, instrumentationLibrary is legacy (<1.16)\n const name =\n tracerAny._instrumentationScope?.name ||\n tracerAny.instrumentationLibrary?.name ||\n packageJson.name;\n\n const version =\n tracerAny._instrumentationScope?.version ||\n tracerAny.instrumentationLibrary?.version ||\n packageJson.version;\n\n return { name, version };\n}\n\n/**\n * Register this in your `instrumentation.ts` to set up axiom.\n * This function stores the tracer's scope information globally to enable Context Propagation\n * and Instrumentation Scope. The tracer will be available across all execution contexts including Next.js.\n *\n * This function is idempotent - calling it multiple times with the same scope has no additional cost.\n *\n * @param config\n * @param config.tracer - The tracer that you are using in your application.\n * @param config.redactionPolicy - Optional redaction policy to control what data is captured in spans.\n */\nexport function initAxiomAI(config: { tracer: Tracer; redactionPolicy?: AxiomAIRedactionPolicy }) {\n const newScope = extractTracerScope(config.tracer);\n const existingScope = (globalThis as any)[AXIOM_AI_SCOPE_KEY] as TracerScope | undefined;\n\n // Check if already initialized with same scope (idempotent behavior)\n if (\n existingScope &&\n existingScope.name === newScope.name &&\n existingScope.version === newScope.version\n ) {\n return;\n }\n\n // Warn about double initialization with different scopes\n if (existingScope) {\n console.warn(\n '[AxiomAI] initAxiomAI() called multiple times with different scopes. ' +\n `Previous: ${existingScope.name}@${existingScope.version}, ` +\n `New: ${newScope.name}@${newScope.version}`,\n );\n }\n\n // Store scope information globally (works across Next.js contexts)\n (globalThis as any)[AXIOM_AI_SCOPE_KEY] = newScope;\n\n // Store redaction policy globally if provided\n if (config.redactionPolicy) {\n (globalThis as any)[AXIOM_AI_REDACTION_KEY] = config.redactionPolicy;\n }\n}\n\n/**\n * Get a tracer using the globally stored scope information\n * Fall back to package.json defaults if not set\n */\nexport function getGlobalTracer(): Tracer {\n // Get stored scope information or fall back to package defaults\n const scope = (globalThis as any)[AXIOM_AI_SCOPE_KEY] as TracerScope | undefined;\n\n // Warn if initAxiomAI was never called\n if (!scope) {\n const isDebug = process.env.AXIOM_DEBUG === 'true';\n if (!isDebug) {\n console.warn(\n '[AxiomAI] AXIOM_AI_SCOPE_KEY is undefined. This probably means that ' +\n 'initAxiomAI() was never called. ' +\n 'Make sure to call initAxiomAI({ tracer }) in your instrumentation setup.',\n );\n }\n }\n\n let { name, version } = scope || { name: packageJson.name, version: packageJson.version };\n\n if (!name || !version) {\n name = packageJson.name;\n version = packageJson.version;\n if (!name || !version) {\n name = 'axiom';\n version = 'unknown';\n }\n }\n\n // Use OpenTelemetry's standard global provider mechanism\n return trace.getTracer(name, version);\n}\n\n/**\n * Reset AxiomAI configuration (useful for testing)\n */\nexport function resetAxiomAI() {\n (globalThis as any)[AXIOM_AI_SCOPE_KEY] = undefined;\n (globalThis as any)[AXIOM_AI_REDACTION_KEY] = undefined;\n}\n","{\n \"name\": \"axiom\",\n \"version\": \"0.49.1\",\n \"type\": \"module\",\n \"author\": \"Axiom, Inc.\",\n \"contributors\": [\n \"Islam Shehata <islam@axiom.co>\",\n \"Chris Ehrlich <chris@axiom.co>\",\n \"Gabriel de Andrade <gabriel@axiom.co>\"\n ],\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"build\": \"tsup && chmod +x dist/bin.js && typedoc && pnpm check:vitest-entrypoints\",\n \"check:vitest-entrypoints\": \"node ./scripts/check-vitest-entrypoints.mjs\",\n \"format\": \"prettier --write .\",\n \"format:check\": \"prettier --check .\",\n \"lint\": \"eslint './**/*.{js,ts}'\",\n \"typecheck\": \"tsc --noEmit\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest --watch\",\n \"test:wrangler-smoke\": \"pnpm build && vitest run --config vitest.smoke.config.ts\",\n \"publint\": \"npx publint\"\n },\n \"types\": \"./dist/index.d.ts\",\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.js\",\n \"bin\": {\n \"axiom\": \"./dist/bin.js\"\n },\n \"exports\": {\n \"./ai\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n },\n \"./ai/evals\": {\n \"types\": \"./dist/evals.d.ts\",\n \"default\": \"./dist/evals.js\"\n },\n \"./ai/evals/online\": {\n \"types\": \"./dist/evals/online.d.ts\",\n \"default\": \"./dist/evals/online.js\"\n },\n \"./ai/scorers\": {\n \"types\": \"./dist/scorers/scorers.d.ts\",\n \"default\": \"./dist/scorers/scorers.js\"\n },\n \"./ai/scorers/aggregations\": {\n \"types\": \"./dist/scorers/aggregations.d.ts\",\n \"default\": \"./dist/scorers/aggregations.js\"\n },\n \"./ai/config\": {\n \"types\": \"./dist/config.d.ts\",\n \"default\": \"./dist/config.js\"\n },\n \"./ai/feedback\": {\n \"types\": \"./dist/feedback.d.ts\",\n \"default\": \"./dist/feedback.js\"\n }\n },\n \"keywords\": [\n \"axiom\",\n \"logging\",\n \"ai\",\n \"otel\",\n \"opentelemetry\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/axiomhq/ai.git\",\n \"directory\": \"packages/ai\"\n },\n \"license\": \"MIT\",\n \"dependencies\": {\n \"@next/env\": \"^15.4.2\",\n \"@opentelemetry/auto-instrumentations-node\": \"^0.60.1\",\n \"@opentelemetry/context-async-hooks\": \"^2.0.1\",\n \"@opentelemetry/exporter-trace-otlp-http\": \"^0.202.0\",\n \"@opentelemetry/resources\": \"^2.0.1\",\n \"@opentelemetry/sdk-trace-node\": \"^2.0.1\",\n \"@opentelemetry/semantic-conventions\": \"^1.38.0\",\n \"@sinclair/typebox\": \"^0.34.37\",\n \"c12\": \"^3.3.3\",\n \"commander\": \"^14.0.0\",\n \"defu\": \"^6.1.4\",\n \"handlebars\": \"^4.7.8\",\n \"nanoid\": \"^5.1.5\",\n \"open\": \"^10.1.0\",\n \"vite-tsconfig-paths\": \"^5.1.4\",\n \"vitest\": \"^4.0.0\"\n },\n \"peerDependencies\": {\n \"@opentelemetry/api\": \"^1.9.0\",\n \"typescript\": \">=5.4\",\n \"zod\": \"^3.25.0 || ^4.0.0\"\n },\n \"peerDependenciesMeta\": {\n \"typescript\": {\n \"optional\": true\n }\n },\n \"devDependencies\": {\n \"@ai-sdk/anthropicv1\": \"npm:@ai-sdk/anthropic@^1.2.12\",\n \"@ai-sdk/anthropicv2\": \"npm:@ai-sdk/anthropic@^2.0.57\",\n \"@ai-sdk/anthropicv3\": \"npm:@ai-sdk/anthropic@^3.0.9\",\n \"@ai-sdk/openaiv1\": \"npm:@ai-sdk/openai@^1.3.24\",\n \"@ai-sdk/openaiv2\": \"npm:@ai-sdk/openai@^2.0.88\",\n \"@ai-sdk/openaiv3\": \"npm:@ai-sdk/openai@^3.0.7\",\n \"@ai-sdk/providerv1\": \"npm:@ai-sdk/provider@^1.1.3\",\n \"@ai-sdk/providerv2\": \"npm:@ai-sdk/provider@^2.0.1\",\n \"@ai-sdk/providerv3\": \"npm:@ai-sdk/provider@^3.0.2\",\n \"@opentelemetry/api\": \"^1.9.0\",\n \"@opentelemetry/core\": \"^2.0.1\",\n \"@opentelemetry/sdk-trace-base\": \"^2.0.1\",\n \"@opentelemetry/sdk-trace-node\": \"^2.0.1\",\n \"@repo/eslint-config\": \"workspace:*\",\n \"@types/node\": \"^22.15.29\",\n \"@vitest/coverage-v8\": \"^4.0.0\",\n \"aiv4\": \"npm:ai@^4.3.19\",\n \"aiv5\": \"npm:ai@^5.0.118\",\n \"aiv6\": \"npm:ai@^6.0.6\",\n \"esbuild\": \"^0.25.8\",\n \"eslint\": \"catalog:\",\n \"msw\": \"^2.12.2\",\n \"prettier\": \"catalog:\",\n \"tinyrainbow\": \"^2.0.0\",\n \"tsup\": \"catalog:\",\n \"typedoc\": \"^0.28.17\",\n \"typedoc-plugin-markdown\": \"^4.10.0\",\n \"typescript\": \"catalog:\",\n \"vitest\": \"catalog:\",\n \"zod\": \"catalog:\"\n },\n \"files\": [\n \"dist\"\n ],\n \"packageManager\": \"pnpm@10.16.1\"\n}\n"],"mappings":";AAAA,SAAS,SAAS,mBAA4C;;;ACOvD,IAAM,uBAAuB;AAC7B,IAAM,gCAAgC;;;ADEtC,IAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,EAK7B,cAAc;AAAA,IACZ,uBAAuB;AAAA,IACvB,6BAA6B;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,sBAAsB;AAAA,IACpB,uBAAuB;AAAA,IACvB,6BAA6B;AAAA,EAC/B;AACF;AAGO,IAAM,yBAAyB,OAAO,IAAI,wBAAwB;AAMzE,SAAS,2BAA+D;AACtE,SAAQ,WAAmB,sBAAsB;AACnD;AAUA,SAAS,4BACP,cACA,aACwB;AAExB,SAAO;AAAA,IACL,uBACE,aAAa,yBACb,cAAc,yBACd,gBAAgB,aAAa;AAAA,IAC/B,6BACE,aAAa,+BACb,cAAc,+BACd,gBAAgB,aAAa;AAAA,EACjC;AACF;AAKO,SAAS,qBAAqB;AACnC,SAAO,4BAA4B,yBAAyB,GAAG,0BAA0B,CAAC;AAC5F;AAWO,SAAS,6BACd,MACA,WACA,OACA,uBACM;AACN,MAAI,0BAA0B,QAAQ;AACpC,SAAK,aAAa,WAAW,KAAK;AAAA,EACpC;AAIF;AAQA,SAAS,4BAAgE;AACvE,QAAM,UAAmB,YAAY,WAAW,QAAQ,OAAO,CAAC,KAAK,YAAY,cAAc;AAC/F,QAAM,mBAAmB,QAAQ,SAAS,6BAA6B,GAAG;AAE1E,MAAI,CAAC,kBAAkB;AACrB,WAAO;AAAA,EACT;AAEA,MAAI;AACF,WAAO,KAAK,MAAM,gBAAgB;AAAA,EACpC,SAAS,OAAO;AACd,YAAQ,KAAK,4DAA4D,KAAK;AAC9E,WAAO;AAAA,EACT;AACF;;;AElHA,SAAS,aAAa;;;ACDtB;AAAA,EACE,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,QAAU;AAAA,EACV,cAAgB;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,KAAO;AAAA,IACP,OAAS;AAAA,IACT,4BAA4B;AAAA,IAC5B,QAAU;AAAA,IACV,gBAAgB;AAAA,IAChB,MAAQ;AAAA,IACR,WAAa;AAAA,IACb,MAAQ;AAAA,IACR,cAAc;AAAA,IACd,uBAAuB;AAAA,IACvB,SAAW;AAAA,EACb;AAAA,EACA,OAAS;AAAA,EACT,MAAQ;AAAA,EACR,QAAU;AAAA,EACV,KAAO;AAAA,IACL,OAAS;AAAA,EACX;AAAA,EACA,SAAW;AAAA,IACT,QAAQ;AAAA,MACN,OAAS;AAAA,MACT,SAAW;AAAA,IACb;AAAA,IACA,cAAc;AAAA,MACZ,OAAS;AAAA,MACT,SAAW;AAAA,IACb;AAAA,IACA,qBAAqB;AAAA,MACnB,OAAS;AAAA,MACT,SAAW;AAAA,IACb;AAAA,IACA,gBAAgB;AAAA,MACd,OAAS;AAAA,MACT,SAAW;AAAA,IACb;AAAA,IACA,6BAA6B;AAAA,MAC3B,OAAS;AAAA,MACT,SAAW;AAAA,IACb;AAAA,IACA,eAAe;AAAA,MACb,OAAS;AAAA,MACT,SAAW;AAAA,IACb;AAAA,IACA,iBAAiB;AAAA,MACf,OAAS;AAAA,MACT,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,UAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,YAAc;AAAA,IACZ,MAAQ;AAAA,IACR,KAAO;AAAA,IACP,WAAa;AAAA,EACf;AAAA,EACA,SAAW;AAAA,EACX,cAAgB;AAAA,IACd,aAAa;AAAA,IACb,6CAA6C;AAAA,IAC7C,sCAAsC;AAAA,IACtC,2CAA2C;AAAA,IAC3C,4BAA4B;AAAA,IAC5B,iCAAiC;AAAA,IACjC,uCAAuC;AAAA,IACvC,qBAAqB;AAAA,IACrB,KAAO;AAAA,IACP,WAAa;AAAA,IACb,MAAQ;AAAA,IACR,YAAc;AAAA,IACd,QAAU;AAAA,IACV,MAAQ;AAAA,IACR,uBAAuB;AAAA,IACvB,QAAU;AAAA,EACZ;AAAA,EACA,kBAAoB;AAAA,IAClB,sBAAsB;AAAA,IACtB,YAAc;AAAA,IACd,KAAO;AAAA,EACT;AAAA,EACA,sBAAwB;AAAA,IACtB,YAAc;AAAA,MACZ,UAAY;AAAA,IACd;AAAA,EACF;AAAA,EACA,iBAAmB;AAAA,IACjB,uBAAuB;AAAA,IACvB,uBAAuB;AAAA,IACvB,uBAAuB;AAAA,IACvB,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,IACpB,sBAAsB;AAAA,IACtB,sBAAsB;AAAA,IACtB,sBAAsB;AAAA,IACtB,sBAAsB;AAAA,IACtB,uBAAuB;AAAA,IACvB,iCAAiC;AAAA,IACjC,iCAAiC;AAAA,IACjC,uBAAuB;AAAA,IACvB,eAAe;AAAA,IACf,uBAAuB;AAAA,IACvB,MAAQ;AAAA,IACR,MAAQ;AAAA,IACR,MAAQ;AAAA,IACR,SAAW;AAAA,IACX,QAAU;AAAA,IACV,KAAO;AAAA,IACP,UAAY;AAAA,IACZ,aAAe;AAAA,IACf,MAAQ;AAAA,IACR,SAAW;AAAA,IACX,2BAA2B;AAAA,IAC3B,YAAc;AAAA,IACd,QAAU;AAAA,IACV,KAAO;AAAA,EACT;AAAA,EACA,OAAS;AAAA,IACP;AAAA,EACF;AAAA,EACA,gBAAkB;AACpB;;;ADlIA,IAAM,qBAAqB,OAAO,IAAI,oBAAoB;AAU1D,SAAS,mBAAmB,QAA6B;AACvD,QAAM,YAAY;AAKlB,QAAM,OACJ,UAAU,uBAAuB,QACjC,UAAU,wBAAwB,QAClC,gBAAY;AAEd,QAAM,UACJ,UAAU,uBAAuB,WACjC,UAAU,wBAAwB,WAClC,gBAAY;AAEd,SAAO,EAAE,MAAM,QAAQ;AACzB;AAaO,SAAS,YAAY,QAAsE;AAChG,QAAM,WAAW,mBAAmB,OAAO,MAAM;AACjD,QAAM,gBAAiB,WAAmB,kBAAkB;AAG5D,MACE,iBACA,cAAc,SAAS,SAAS,QAChC,cAAc,YAAY,SAAS,SACnC;AACA;AAAA,EACF;AAGA,MAAI,eAAe;AACjB,YAAQ;AAAA,MACN,kFACe,cAAc,IAAI,IAAI,cAAc,OAAO,UAChD,SAAS,IAAI,IAAI,SAAS,OAAO;AAAA,IAC7C;AAAA,EACF;AAGA,EAAC,WAAmB,kBAAkB,IAAI;AAG1C,MAAI,OAAO,iBAAiB;AAC1B,IAAC,WAAmB,sBAAsB,IAAI,OAAO;AAAA,EACvD;AACF;AAMO,SAAS,kBAA0B;AAExC,QAAM,QAAS,WAAmB,kBAAkB;AAGpD,MAAI,CAAC,OAAO;AACV,UAAM,UAAU,QAAQ,IAAI,gBAAgB;AAC5C,QAAI,CAAC,SAAS;AACZ,cAAQ;AAAA,QACN;AAAA,MAGF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,EAAE,MAAM,QAAQ,IAAI,SAAS,EAAE,MAAM,gBAAY,MAAM,SAAS,gBAAY,QAAQ;AAExF,MAAI,CAAC,QAAQ,CAAC,SAAS;AACrB,WAAO,gBAAY;AACnB,cAAU,gBAAY;AACtB,QAAI,CAAC,QAAQ,CAAC,SAAS;AACrB,aAAO;AACP,gBAAU;AAAA,IACZ;AAAA,EACF;AAGA,SAAO,MAAM,UAAU,MAAM,OAAO;AACtC;AAKO,SAAS,eAAe;AAC7B,EAAC,WAAmB,kBAAkB,IAAI;AAC1C,EAAC,WAAmB,sBAAsB,IAAI;AAChD;","names":[]}
1
+ {"version":3,"sources":["../src/otel/utils/redaction.ts","../src/otel/withSpanBaggageKey.ts","../src/otel/initAxiomAI.ts","../package.json"],"sourcesContent":["import { context, propagation, type Baggage, type Span } from '@opentelemetry/api';\nimport { WITHSPAN_REDACTION_POLICY_KEY } from '../withSpanBaggageKey';\n\ntype CaptureMessageContent = 'full' | 'off';\n\nexport type AxiomAIRedactionPolicy = {\n captureMessageContent?: CaptureMessageContent;\n mirrorToolPayloadOnToolSpan?: boolean;\n};\n\nexport const RedactionPolicy = {\n /**\n * Includes message content on chat spans, and mirrors tool\n * payload on tool spans for more convenient querying.\n */\n AxiomDefault: {\n captureMessageContent: 'full',\n mirrorToolPayloadOnToolSpan: true,\n },\n /**\n * Redacts message content on chat spans, and does not put\n * tool payload on tool spans.\n */\n OpenTelemetryDefault: {\n captureMessageContent: 'off',\n mirrorToolPayloadOnToolSpan: false,\n },\n} as const satisfies Record<string, AxiomAIRedactionPolicy>;\n\n// Global key to store redaction policy across all execution contexts\nexport const AXIOM_AI_REDACTION_KEY = Symbol.for('__axiom_ai_redaction__');\n\n/**\n * Get the globally stored redaction policy\n * @returns The global redaction policy or undefined if not set\n */\nfunction getGlobalRedactionPolicy(): AxiomAIRedactionPolicy | undefined {\n return (globalThis as any)[AXIOM_AI_REDACTION_KEY];\n}\n\n/**\n * Resolves the effective redaction policy by merging global and per-call policies.\n * Per-call policies take precedence over global policies.\n *\n * @param globalPolicy - The global redaction policy from initAxiomAI\n * @param localPolicy - The per-call redaction policy from withSpan or middleware\n * @returns The effective redaction policy with all fields resolved\n */\nfunction getEffectiveRedactionPolicy(\n globalPolicy?: AxiomAIRedactionPolicy,\n localPolicy?: AxiomAIRedactionPolicy,\n): AxiomAIRedactionPolicy {\n // Per-call policy overrides global policy, with defaults\n return {\n captureMessageContent:\n localPolicy?.captureMessageContent ??\n globalPolicy?.captureMessageContent ??\n RedactionPolicy.AxiomDefault.captureMessageContent,\n mirrorToolPayloadOnToolSpan:\n localPolicy?.mirrorToolPayloadOnToolSpan ??\n globalPolicy?.mirrorToolPayloadOnToolSpan ??\n RedactionPolicy.AxiomDefault.mirrorToolPayloadOnToolSpan,\n };\n}\n\n/**\n * Get the active redaction policy\n */\nexport function getRedactionPolicy() {\n return getEffectiveRedactionPolicy(getGlobalRedactionPolicy(), getPerCallRedactionPolicy());\n}\n\n/**\n * Conditionally sets a span attribute based on the capture message content policy.\n * When policy is 'off', the attribute is not set at all.\n *\n * @param span - The OpenTelemetry span to set the attribute on\n * @param attribute - The attribute name/key\n * @param value - The attribute value\n * @param captureMessageContent - The capture policy ('full' sets attribute, 'off' skips it)\n */\nexport function handleMaybeRedactedAttribute(\n span: Span,\n attribute: string,\n value: any,\n captureMessageContent?: CaptureMessageContent,\n): void {\n if (captureMessageContent === 'full') {\n span.setAttribute(attribute, value);\n }\n\n // For 'off', don't set the attribute at all\n // Future: Could add callback-based redaction here\n}\n\n/**\n * Extracts the per-call redaction policy from OpenTelemetry baggage context.\n * This allows middleware and tools to access redaction policies passed via withSpan.\n *\n * @returns The per-call redaction policy or undefined if not set\n */\nfunction getPerCallRedactionPolicy(): AxiomAIRedactionPolicy | undefined {\n const baggage: Baggage = propagation.getBaggage(context.active()) || propagation.createBaggage();\n const serializedPolicy = baggage.getEntry(WITHSPAN_REDACTION_POLICY_KEY)?.value;\n\n if (!serializedPolicy) {\n return undefined;\n }\n\n try {\n return JSON.parse(serializedPolicy) as AxiomAIRedactionPolicy;\n } catch (error) {\n console.warn('[AxiomAI] Failed to parse redaction policy from baggage:', error);\n return undefined;\n }\n}\n","/**\n * We need a way to know that we're inside `withSpan`\n * Because we don't own `generateText` and similar functions,\n * we use OTel Baggage to propagate this information. Another\n * consideration might be to use AsyncLocalStorage in Node and\n * some kind of KV in workerd.\n */\nexport const WITHSPAN_BAGGAGE_KEY = '__withspan_gen_ai_call';\nexport const WITHSPAN_REDACTION_POLICY_KEY = '__withspan_redaction_policy';\n","import type { Tracer } from '@opentelemetry/api';\nimport { trace } from '@opentelemetry/api';\nimport packageJson from '../../package.json';\nimport { AXIOM_AI_REDACTION_KEY, type AxiomAIRedactionPolicy } from './utils/redaction';\n\n// Global key to store tracer scope information across all execution contexts\nconst AXIOM_AI_SCOPE_KEY = Symbol.for('__axiom_ai_scope__');\n\ninterface TracerScope {\n name: string;\n version?: string;\n}\n\n/**\n * Extract scope information from a tracer, with fallback to package.json\n */\nfunction extractTracerScope(tracer: Tracer): TracerScope {\n const tracerAny = tracer as any;\n\n // Guard access to private fields with optional chaining\n // Note: These are internal OTEL fields that may change in future versions\n // _instrumentationScope is modern, instrumentationLibrary is legacy (<1.16)\n const name =\n tracerAny._instrumentationScope?.name ||\n tracerAny.instrumentationLibrary?.name ||\n packageJson.name;\n\n const version =\n tracerAny._instrumentationScope?.version ||\n tracerAny.instrumentationLibrary?.version ||\n packageJson.version;\n\n return { name, version };\n}\n\n/**\n * Register this in your `instrumentation.ts` to set up axiom.\n * This function stores the tracer's scope information globally to enable Context Propagation\n * and Instrumentation Scope. The tracer will be available across all execution contexts including Next.js.\n *\n * This function is idempotent - calling it multiple times with the same scope has no additional cost.\n *\n * @param config\n * @param config.tracer - The tracer that you are using in your application.\n * @param config.redactionPolicy - Optional redaction policy to control what data is captured in spans.\n */\nexport function initAxiomAI(config: { tracer: Tracer; redactionPolicy?: AxiomAIRedactionPolicy }) {\n const newScope = extractTracerScope(config.tracer);\n const existingScope = (globalThis as any)[AXIOM_AI_SCOPE_KEY] as TracerScope | undefined;\n\n // Check if already initialized with same scope (idempotent behavior)\n if (\n existingScope &&\n existingScope.name === newScope.name &&\n existingScope.version === newScope.version\n ) {\n return;\n }\n\n // Warn about double initialization with different scopes\n if (existingScope) {\n console.warn(\n '[AxiomAI] initAxiomAI() called multiple times with different scopes. ' +\n `Previous: ${existingScope.name}@${existingScope.version}, ` +\n `New: ${newScope.name}@${newScope.version}`,\n );\n }\n\n // Store scope information globally (works across Next.js contexts)\n (globalThis as any)[AXIOM_AI_SCOPE_KEY] = newScope;\n\n // Store redaction policy globally if provided\n if (config.redactionPolicy) {\n (globalThis as any)[AXIOM_AI_REDACTION_KEY] = config.redactionPolicy;\n }\n}\n\n/**\n * Get a tracer using the globally stored scope information\n * Fall back to package.json defaults if not set\n */\nexport function getGlobalTracer(): Tracer {\n // Get stored scope information or fall back to package defaults\n const scope = (globalThis as any)[AXIOM_AI_SCOPE_KEY] as TracerScope | undefined;\n\n // Warn if initAxiomAI was never called\n if (!scope) {\n const isDebug = process.env.AXIOM_DEBUG === 'true';\n if (!isDebug) {\n console.warn(\n '[AxiomAI] AXIOM_AI_SCOPE_KEY is undefined. This probably means that ' +\n 'initAxiomAI() was never called. ' +\n 'Make sure to call initAxiomAI({ tracer }) in your instrumentation setup.',\n );\n }\n }\n\n let { name, version } = scope || { name: packageJson.name, version: packageJson.version };\n\n if (!name || !version) {\n name = packageJson.name;\n version = packageJson.version;\n if (!name || !version) {\n name = 'axiom';\n version = 'unknown';\n }\n }\n\n // Use OpenTelemetry's standard global provider mechanism\n return trace.getTracer(name, version);\n}\n\n/**\n * Reset AxiomAI configuration (useful for testing)\n */\nexport function resetAxiomAI() {\n (globalThis as any)[AXIOM_AI_SCOPE_KEY] = undefined;\n (globalThis as any)[AXIOM_AI_REDACTION_KEY] = undefined;\n}\n","{\n \"name\": \"axiom\",\n \"version\": \"0.49.2\",\n \"type\": \"module\",\n \"author\": \"Axiom, Inc.\",\n \"contributors\": [\n \"Islam Shehata <islam@axiom.co>\",\n \"Chris Ehrlich <chris@axiom.co>\",\n \"Gabriel de Andrade <gabriel@axiom.co>\"\n ],\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"build\": \"tsup && chmod +x dist/bin.js && typedoc && pnpm check:vitest-entrypoints\",\n \"check:vitest-entrypoints\": \"node ./scripts/check-vitest-entrypoints.mjs\",\n \"format\": \"prettier --write .\",\n \"format:check\": \"prettier --check .\",\n \"lint\": \"eslint './**/*.{js,ts}'\",\n \"typecheck\": \"tsc --noEmit\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest --watch\",\n \"test:wrangler-smoke\": \"pnpm build && vitest run --config vitest.smoke.config.ts\",\n \"publint\": \"npx publint\"\n },\n \"types\": \"./dist/index.d.ts\",\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.js\",\n \"bin\": {\n \"axiom\": \"./dist/bin.js\"\n },\n \"exports\": {\n \"./ai\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n },\n \"./ai/evals\": {\n \"types\": \"./dist/evals.d.ts\",\n \"default\": \"./dist/evals.js\"\n },\n \"./ai/evals/online\": {\n \"types\": \"./dist/evals/online.d.ts\",\n \"default\": \"./dist/evals/online.js\"\n },\n \"./ai/scorers\": {\n \"types\": \"./dist/scorers/scorers.d.ts\",\n \"default\": \"./dist/scorers/scorers.js\"\n },\n \"./ai/scorers/aggregations\": {\n \"types\": \"./dist/scorers/aggregations.d.ts\",\n \"default\": \"./dist/scorers/aggregations.js\"\n },\n \"./ai/config\": {\n \"types\": \"./dist/config.d.ts\",\n \"default\": \"./dist/config.js\"\n },\n \"./ai/feedback\": {\n \"types\": \"./dist/feedback.d.ts\",\n \"default\": \"./dist/feedback.js\"\n }\n },\n \"keywords\": [\n \"axiom\",\n \"logging\",\n \"ai\",\n \"otel\",\n \"opentelemetry\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/axiomhq/ai.git\",\n \"directory\": \"packages/ai\"\n },\n \"license\": \"MIT\",\n \"dependencies\": {\n \"@next/env\": \"^15.4.2\",\n \"@opentelemetry/auto-instrumentations-node\": \"^0.60.1\",\n \"@opentelemetry/context-async-hooks\": \"^2.0.1\",\n \"@opentelemetry/exporter-trace-otlp-http\": \"^0.202.0\",\n \"@opentelemetry/resources\": \"^2.0.1\",\n \"@opentelemetry/sdk-trace-node\": \"^2.0.1\",\n \"@opentelemetry/semantic-conventions\": \"^1.38.0\",\n \"@sinclair/typebox\": \"^0.34.37\",\n \"c12\": \"^3.3.3\",\n \"commander\": \"^14.0.0\",\n \"defu\": \"^6.1.4\",\n \"handlebars\": \"^4.7.8\",\n \"nanoid\": \"^5.1.5\",\n \"open\": \"^10.1.0\",\n \"vite-tsconfig-paths\": \"^5.1.4\",\n \"vitest\": \"^4.0.0\"\n },\n \"peerDependencies\": {\n \"@opentelemetry/api\": \"^1.9.0\",\n \"typescript\": \">=5.4\",\n \"zod\": \"^3.25.0 || ^4.0.0\"\n },\n \"peerDependenciesMeta\": {\n \"typescript\": {\n \"optional\": true\n }\n },\n \"devDependencies\": {\n \"@ai-sdk/anthropicv1\": \"npm:@ai-sdk/anthropic@^1.2.12\",\n \"@ai-sdk/anthropicv2\": \"npm:@ai-sdk/anthropic@^2.0.57\",\n \"@ai-sdk/anthropicv3\": \"npm:@ai-sdk/anthropic@^3.0.9\",\n \"@ai-sdk/openaiv1\": \"npm:@ai-sdk/openai@^1.3.24\",\n \"@ai-sdk/openaiv2\": \"npm:@ai-sdk/openai@^2.0.88\",\n \"@ai-sdk/openaiv3\": \"npm:@ai-sdk/openai@^3.0.7\",\n \"@ai-sdk/providerv1\": \"npm:@ai-sdk/provider@^1.1.3\",\n \"@ai-sdk/providerv2\": \"npm:@ai-sdk/provider@^2.0.1\",\n \"@ai-sdk/providerv3\": \"npm:@ai-sdk/provider@^3.0.2\",\n \"@opentelemetry/api\": \"^1.9.0\",\n \"@opentelemetry/core\": \"^2.0.1\",\n \"@opentelemetry/sdk-trace-base\": \"^2.0.1\",\n \"@opentelemetry/sdk-trace-node\": \"^2.0.1\",\n \"@repo/eslint-config\": \"workspace:*\",\n \"@types/node\": \"^22.15.29\",\n \"@vitest/coverage-v8\": \"^4.0.0\",\n \"aiv4\": \"npm:ai@^4.3.19\",\n \"aiv5\": \"npm:ai@^5.0.118\",\n \"aiv6\": \"npm:ai@^6.0.6\",\n \"esbuild\": \"^0.25.8\",\n \"eslint\": \"catalog:\",\n \"msw\": \"^2.12.2\",\n \"prettier\": \"catalog:\",\n \"tinyrainbow\": \"^2.0.0\",\n \"tsup\": \"catalog:\",\n \"typedoc\": \"^0.28.17\",\n \"typedoc-plugin-markdown\": \"^4.10.0\",\n \"typescript\": \"catalog:\",\n \"vitest\": \"catalog:\",\n \"zod\": \"catalog:\"\n },\n \"files\": [\n \"dist\"\n ],\n \"packageManager\": \"pnpm@10.16.1\"\n}\n"],"mappings":"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","names":[]}
@@ -1,8 +1,8 @@
1
- **axiom v0.49.1**
1
+ **axiom v0.49.2**
2
2
 
3
3
  ***
4
4
 
5
- # axiom v0.49.1
5
+ # axiom v0.49.2
6
6
 
7
7
  ## Modules
8
8
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../README.md)
1
+ [**axiom v0.49.2**](../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../README.md)
1
+ [**axiom v0.49.2**](../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../../README.md)
1
+ [**axiom v0.49.2**](../../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../../README.md)
1
+ [**axiom v0.49.2**](../../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../../README.md)
1
+ [**axiom v0.49.2**](../../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../../README.md)
1
+ [**axiom v0.49.2**](../../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../../README.md)
1
+ [**axiom v0.49.2**](../../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../../README.md)
1
+ [**axiom v0.49.2**](../../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../README.md)
1
+ [**axiom v0.49.2**](../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../README.md)
1
+ [**axiom v0.49.2**](../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../../README.md)
1
+ [**axiom v0.49.2**](../../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../../README.md)
1
+ [**axiom v0.49.2**](../../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../../README.md)
1
+ [**axiom v0.49.2**](../../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../../README.md)
1
+ [**axiom v0.49.2**](../../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../../README.md)
1
+ [**axiom v0.49.2**](../../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../../README.md)
1
+ [**axiom v0.49.2**](../../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../../README.md)
1
+ [**axiom v0.49.2**](../../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../README.md)
1
+ [**axiom v0.49.2**](../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../../README.md)
1
+ [**axiom v0.49.2**](../../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../../README.md)
1
+ [**axiom v0.49.2**](../../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../../README.md)
1
+ [**axiom v0.49.2**](../../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../../README.md)
1
+ [**axiom v0.49.2**](../../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../../README.md)
1
+ [**axiom v0.49.2**](../../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**axiom v0.49.1**](../../../README.md)
1
+ [**axiom v0.49.2**](../../../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  onlineEval
3
- } from "../chunk-MOSVZZAN.js";
4
- import "../chunk-WO6AVN5J.js";
3
+ } from "../chunk-LMH3H6LA.js";
4
+ import "../chunk-WTL3K72D.js";
5
5
  import "../chunk-MM5FFQJT.js";
6
6
  import "../chunk-FGLJO4BD.js";
7
7
  import "../chunk-4TKUTT24.js";
package/dist/evals.js CHANGED
@@ -5,8 +5,8 @@ import {
5
5
  resolveAxiomConnection,
6
6
  startActiveSpan,
7
7
  startSpan
8
- } from "./chunk-JX4IMYH5.js";
9
- import "./chunk-4S2HLGZW.js";
8
+ } from "./chunk-OMTDFDPH.js";
9
+ import "./chunk-PRNAL6ER.js";
10
10
  import "./chunk-3VKWOZAQ.js";
11
11
  import {
12
12
  dotNotationToNested,
@@ -15,7 +15,7 @@ import {
15
15
  getGlobalFlagOverrides,
16
16
  setGlobalFlagOverrides,
17
17
  withEvalContext
18
- } from "./chunk-3MMFYPFN.js";
18
+ } from "./chunk-SHGWFFCE.js";
19
19
  import {
20
20
  recordName
21
21
  } from "./chunk-FWPCBQBZ.js";
@@ -23,7 +23,7 @@ import {
23
23
  AxiomCLIError,
24
24
  errorToString
25
25
  } from "./chunk-ISSDOC43.js";
26
- import "./chunk-WO6AVN5J.js";
26
+ import "./chunk-WTL3K72D.js";
27
27
  import "./chunk-MM5FFQJT.js";
28
28
  import {
29
29
  Mean
package/dist/index.js CHANGED
@@ -11,10 +11,10 @@ import {
11
11
  setScopeAttributes,
12
12
  withSpan,
13
13
  wrapAISDKModel
14
- } from "./chunk-3MMFYPFN.js";
14
+ } from "./chunk-SHGWFFCE.js";
15
15
  import {
16
16
  onlineEval
17
- } from "./chunk-MOSVZZAN.js";
17
+ } from "./chunk-LMH3H6LA.js";
18
18
  import {
19
19
  RedactionPolicy,
20
20
  getGlobalTracer,
@@ -22,7 +22,7 @@ import {
22
22
  handleMaybeRedactedAttribute,
23
23
  initAxiomAI,
24
24
  resetAxiomAI
25
- } from "./chunk-WO6AVN5J.js";
25
+ } from "./chunk-WTL3K72D.js";
26
26
  import "./chunk-MM5FFQJT.js";
27
27
  import "./chunk-FGLJO4BD.js";
28
28
  import {
@@ -2,16 +2,16 @@ import {
2
2
  AxiomReporter,
3
3
  flush,
4
4
  initInstrumentation
5
- } from "./chunk-JX4IMYH5.js";
5
+ } from "./chunk-OMTDFDPH.js";
6
6
  import {
7
7
  u
8
- } from "./chunk-4S2HLGZW.js";
8
+ } from "./chunk-PRNAL6ER.js";
9
9
  import "./chunk-3VKWOZAQ.js";
10
10
  import {
11
11
  setAxiomConfig
12
- } from "./chunk-3MMFYPFN.js";
12
+ } from "./chunk-SHGWFFCE.js";
13
13
  import "./chunk-ISSDOC43.js";
14
- import "./chunk-WO6AVN5J.js";
14
+ import "./chunk-WTL3K72D.js";
15
15
  import "./chunk-MM5FFQJT.js";
16
16
  import "./chunk-4TKUTT24.js";
17
17
  import "./chunk-KEXKKQVW.js";
@@ -53,6 +53,17 @@ var printCollectedEvals = (result, rootDir) => {
53
53
  console.log(u.bold(`Total: ${totalEvals} evaluations, ${totalCases} test cases
54
54
  `));
55
55
  };
56
+ var hasVitestFailures = (result, failedTestCount, dangerouslyIgnoreUnhandledErrors) => {
57
+ if (failedTestCount > 0) {
58
+ return true;
59
+ }
60
+ if (result.unhandledErrors.length > 0 && !dangerouslyIgnoreUnhandledErrors) {
61
+ return true;
62
+ }
63
+ return result.testModules.some(
64
+ (testModule) => testModule.state() === "failed" || !testModule.ok()
65
+ );
66
+ };
56
67
  var runVitest = async (dir, opts) => {
57
68
  setAxiomConfig(opts.config);
58
69
  await initInstrumentation({
@@ -120,12 +131,12 @@ var runVitest = async (dir, opts) => {
120
131
  }
121
132
  );
122
133
  if (opts.list) {
123
- const result = await vi.collect();
124
- printCollectedEvals(result, dir || process.cwd());
134
+ const result2 = await vi.collect();
135
+ printCollectedEvals(result2, dir || process.cwd());
125
136
  await vi.close();
126
137
  process.exit(0);
127
138
  }
128
- await vi.start();
139
+ const result = await vi.start();
129
140
  if (existsSync(abortFile)) {
130
141
  const message = readFileSync(abortFile, "utf8");
131
142
  console.error("\n" + message);
@@ -134,14 +145,19 @@ var runVitest = async (dir, opts) => {
134
145
  }
135
146
  const dispose = registerConsoleShortcuts(vi, process.stdin, process.stdout);
136
147
  if (!vi.shouldKeepServer()) {
148
+ const exitCode = hasVitestFailures(
149
+ result,
150
+ vi.state.getCountOfFailedTests(),
151
+ vi.config.dangerouslyIgnoreUnhandledErrors
152
+ ) ? 1 : 0;
137
153
  dispose();
138
154
  await flush();
139
155
  await vi.close();
140
- process.exit(0);
156
+ process.exit(exitCode);
141
157
  }
142
158
  await flush();
143
159
  };
144
160
  export {
145
161
  runVitest
146
162
  };
147
- //# sourceMappingURL=run-vitest-QMZWFYSW.js.map
163
+ //# sourceMappingURL=run-vitest-NC5WCNAI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/evals/run-vitest.ts"],"sourcesContent":["import c from 'tinyrainbow';\nimport { resolve, join } from 'node:path';\nimport { mkdirSync, writeFileSync, unlinkSync, existsSync, readFileSync } from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport { fileURLToPath } from 'node:url';\nimport path from 'node:path';\nimport tsconfigPaths from 'vite-tsconfig-paths';\n\nimport { createVitest, registerConsoleShortcuts } from 'vitest/node';\nimport type { TestRunResult } from 'vitest/node';\nimport { AxiomReporter } from './reporter';\nimport { flush, initInstrumentation } from './instrument';\nimport { setAxiomConfig } from './context/storage';\nimport type { ResolvedAxiomConfig } from '../config/index';\n\nconst getCurrentDir = (): string => {\n if (typeof __dirname !== 'undefined') {\n return __dirname;\n }\n\n return path.dirname(fileURLToPath(import.meta.url));\n};\n\nconst evalsRunnerPath = resolve(getCurrentDir(), 'evals', 'custom-runner.js');\n\nconst printCollectedEvals = (result: TestRunResult, rootDir: string) => {\n if (!result.testModules || result.testModules.length === 0) {\n console.log(c.yellow('\\nNo evaluations found\\n'));\n return;\n }\n\n console.log(c.bold('\\nFound evaluations:\\n'));\n\n let totalEvals = 0;\n let totalCases = 0;\n\n for (const module of result.testModules) {\n const relativePath = path.relative(rootDir, module.moduleId);\n\n for (const suite of module.children.suites()) {\n totalEvals++;\n const caseCount = suite.children.size;\n totalCases += caseCount;\n console.log(c.green(`✓ ${suite.name} (${caseCount} cases)`));\n console.log(c.dim(` ${relativePath}`));\n console.log('');\n }\n }\n\n console.log(c.bold(`Total: ${totalEvals} evaluations, ${totalCases} test cases\\n`));\n};\n\nconst hasVitestFailures = (\n result: TestRunResult,\n failedTestCount: number,\n dangerouslyIgnoreUnhandledErrors: boolean,\n): boolean => {\n if (failedTestCount > 0) {\n return true;\n }\n\n if (result.unhandledErrors.length > 0 && !dangerouslyIgnoreUnhandledErrors) {\n return true;\n }\n\n return result.testModules.some(\n (testModule) => testModule.state() === 'failed' || !testModule.ok(),\n );\n};\n\nexport const runVitest = async (\n dir: string,\n opts: {\n watch: boolean;\n baseline?: string;\n include: string[];\n exclude?: string[];\n testNamePattern?: RegExp;\n debug?: boolean;\n list?: boolean;\n overrides?: Record<string, any>;\n config: ResolvedAxiomConfig;\n runId: string;\n consoleUrl?: string;\n },\n) => {\n // Store config globally so reporters can access it\n setAxiomConfig(opts.config);\n // Initialize instrumentation explicitly based on debug or list flag\n await initInstrumentation({\n enabled: !opts.debug && !opts.list,\n config: opts.config,\n });\n\n const providedConfig: ResolvedAxiomConfig = {\n ...opts.config,\n eval: {\n ...opts.config.eval,\n // These can't be serialized, so we need to remove them\n instrumentation: null,\n flagSchema: null,\n },\n };\n\n if (opts.debug) {\n console.log(c.bgWhite(c.blackBright(' Debug mode enabled ')));\n }\n\n // Setup temp files for cross-worker name validation\n const tmpDir = join(tmpdir(), 'axiom-eval', opts.runId);\n mkdirSync(tmpDir, { recursive: true });\n\n const nameRegistryFile = join(tmpDir, 'names.jsonl');\n const abortFile = join(tmpDir, 'abort.txt');\n\n // Clear registry file and remove any stale abort file\n writeFileSync(nameRegistryFile, '', 'utf8');\n if (existsSync(abortFile)) {\n unlinkSync(abortFile);\n }\n\n // Make paths available to workers and reporters\n process.env.AXIOM_NAME_REGISTRY_FILE = nameRegistryFile;\n process.env.AXIOM_ABORT_FILE = abortFile;\n\n if (opts.list) {\n console.log(c.bgWhite(c.blackBright(' List mode ')));\n }\n\n const vi = await createVitest(\n 'test',\n {\n root: dir ? dir : process.cwd(),\n mode: 'test',\n include: opts.include,\n exclude: opts.exclude,\n testNamePattern: opts.testNamePattern,\n reporters: ['verbose', new AxiomReporter()],\n environment: 'node',\n browser: undefined,\n watch: opts.watch,\n setupFiles: [], // ignore user vitest.config.ts etc\n name: 'axiom:eval',\n printConsoleTrace: true,\n silent: false,\n disableConsoleIntercept: true,\n testTimeout: opts.config?.eval?.timeoutMs || 60_000,\n globals: true,\n runner: evalsRunnerPath,\n provide: {\n baseline: opts.baseline,\n debug: opts.debug,\n list: opts.list,\n overrides: opts.overrides,\n axiomConfig: providedConfig,\n runId: opts.runId,\n consoleUrl: opts.consoleUrl,\n },\n },\n {\n plugins: [tsconfigPaths({ root: dir || process.cwd() })],\n },\n );\n\n // List mode: just list tests without running them\n if (opts.list) {\n const result = await vi.collect();\n printCollectedEvals(result, dir || process.cwd());\n await vi.close();\n process.exit(0);\n }\n\n // Start collection and execution\n const result = await vi.start();\n\n // After execution, check if validation failed\n if (existsSync(abortFile)) {\n const message = readFileSync(abortFile, 'utf8');\n console.error('\\n' + message);\n await vi.close();\n process.exit(1);\n }\n\n const dispose = registerConsoleShortcuts(vi, process.stdin, process.stdout);\n\n if (!vi.shouldKeepServer()) {\n const exitCode = hasVitestFailures(\n result,\n vi.state.getCountOfFailedTests(),\n vi.config.dangerouslyIgnoreUnhandledErrors,\n )\n ? 1\n : 0;\n dispose();\n await flush();\n await vi.close();\n process.exit(exitCode);\n }\n\n await flush();\n};\n"],"mappings":"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","names":["result"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "axiom",
3
- "version": "0.49.1",
3
+ "version": "0.49.2",
4
4
  "type": "module",
5
5
  "author": "Axiom, Inc.",
6
6
  "contributors": [
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/evals/run-vitest.ts"],"sourcesContent":["import c from 'tinyrainbow';\nimport { resolve, join } from 'node:path';\nimport { mkdirSync, writeFileSync, unlinkSync, existsSync, readFileSync } from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport { fileURLToPath } from 'node:url';\nimport path from 'node:path';\nimport tsconfigPaths from 'vite-tsconfig-paths';\n\nimport { createVitest, registerConsoleShortcuts } from 'vitest/node';\nimport type { TestRunResult } from 'vitest/node';\nimport { AxiomReporter } from './reporter';\nimport { flush, initInstrumentation } from './instrument';\nimport { setAxiomConfig } from './context/storage';\nimport type { ResolvedAxiomConfig } from '../config/index';\n\nconst getCurrentDir = (): string => {\n if (typeof __dirname !== 'undefined') {\n return __dirname;\n }\n\n return path.dirname(fileURLToPath(import.meta.url));\n};\n\nconst evalsRunnerPath = resolve(getCurrentDir(), 'evals', 'custom-runner.js');\n\nconst printCollectedEvals = (result: TestRunResult, rootDir: string) => {\n if (!result.testModules || result.testModules.length === 0) {\n console.log(c.yellow('\\nNo evaluations found\\n'));\n return;\n }\n\n console.log(c.bold('\\nFound evaluations:\\n'));\n\n let totalEvals = 0;\n let totalCases = 0;\n\n for (const module of result.testModules) {\n const relativePath = path.relative(rootDir, module.moduleId);\n\n for (const suite of module.children.suites()) {\n totalEvals++;\n const caseCount = suite.children.size;\n totalCases += caseCount;\n console.log(c.green(`✓ ${suite.name} (${caseCount} cases)`));\n console.log(c.dim(` ${relativePath}`));\n console.log('');\n }\n }\n\n console.log(c.bold(`Total: ${totalEvals} evaluations, ${totalCases} test cases\\n`));\n};\n\nexport const runVitest = async (\n dir: string,\n opts: {\n watch: boolean;\n baseline?: string;\n include: string[];\n exclude?: string[];\n testNamePattern?: RegExp;\n debug?: boolean;\n list?: boolean;\n overrides?: Record<string, any>;\n config: ResolvedAxiomConfig;\n runId: string;\n consoleUrl?: string;\n },\n) => {\n // Store config globally so reporters can access it\n setAxiomConfig(opts.config);\n // Initialize instrumentation explicitly based on debug or list flag\n await initInstrumentation({\n enabled: !opts.debug && !opts.list,\n config: opts.config,\n });\n\n const providedConfig: ResolvedAxiomConfig = {\n ...opts.config,\n eval: {\n ...opts.config.eval,\n // These can't be serialized, so we need to remove them\n instrumentation: null,\n flagSchema: null,\n },\n };\n\n if (opts.debug) {\n console.log(c.bgWhite(c.blackBright(' Debug mode enabled ')));\n }\n\n // Setup temp files for cross-worker name validation\n const tmpDir = join(tmpdir(), 'axiom-eval', opts.runId);\n mkdirSync(tmpDir, { recursive: true });\n\n const nameRegistryFile = join(tmpDir, 'names.jsonl');\n const abortFile = join(tmpDir, 'abort.txt');\n\n // Clear registry file and remove any stale abort file\n writeFileSync(nameRegistryFile, '', 'utf8');\n if (existsSync(abortFile)) {\n unlinkSync(abortFile);\n }\n\n // Make paths available to workers and reporters\n process.env.AXIOM_NAME_REGISTRY_FILE = nameRegistryFile;\n process.env.AXIOM_ABORT_FILE = abortFile;\n\n if (opts.list) {\n console.log(c.bgWhite(c.blackBright(' List mode ')));\n }\n\n const vi = await createVitest(\n 'test',\n {\n root: dir ? dir : process.cwd(),\n mode: 'test',\n include: opts.include,\n exclude: opts.exclude,\n testNamePattern: opts.testNamePattern,\n reporters: ['verbose', new AxiomReporter()],\n environment: 'node',\n browser: undefined,\n watch: opts.watch,\n setupFiles: [], // ignore user vitest.config.ts etc\n name: 'axiom:eval',\n printConsoleTrace: true,\n silent: false,\n disableConsoleIntercept: true,\n testTimeout: opts.config?.eval?.timeoutMs || 60_000,\n globals: true,\n runner: evalsRunnerPath,\n provide: {\n baseline: opts.baseline,\n debug: opts.debug,\n list: opts.list,\n overrides: opts.overrides,\n axiomConfig: providedConfig,\n runId: opts.runId,\n consoleUrl: opts.consoleUrl,\n },\n },\n {\n plugins: [tsconfigPaths({ root: dir || process.cwd() })],\n },\n );\n\n // List mode: just list tests without running them\n if (opts.list) {\n const result = await vi.collect();\n printCollectedEvals(result, dir || process.cwd());\n await vi.close();\n process.exit(0);\n }\n\n // Start collection and execution\n await vi.start();\n\n // After execution, check if validation failed\n if (existsSync(abortFile)) {\n const message = readFileSync(abortFile, 'utf8');\n console.error('\\n' + message);\n await vi.close();\n process.exit(1);\n }\n\n const dispose = registerConsoleShortcuts(vi, process.stdin, process.stdout);\n\n if (!vi.shouldKeepServer()) {\n dispose();\n await flush();\n await vi.close();\n process.exit(0);\n }\n\n await flush();\n};\n"],"mappings":"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","names":[]}