@kortyx/hooks 0.32.1 → 0.34.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/dist/internal.js CHANGED
@@ -374,6 +374,92 @@ async function withSafeTraceSpan(adapter, args, fn) {
374
374
  return execution ?? invoke(safeSpan(void 0));
375
375
  }
376
376
 
377
+ // src/usage.ts
378
+ var import_node = require("@kortyx/usage-telemetry/node");
379
+
380
+ // package.json
381
+ var package_default = {
382
+ name: "@kortyx/hooks",
383
+ version: "0.34.0",
384
+ private: false,
385
+ description: "Lifecycle hooks and extension points for Kortyx.",
386
+ keywords: [
387
+ "ai",
388
+ "agent",
389
+ "agents",
390
+ "orchestration",
391
+ "framework",
392
+ "hooks",
393
+ "kortyx"
394
+ ],
395
+ license: "Apache-2.0",
396
+ homepage: "https://kortyx.io/",
397
+ bugs: {
398
+ url: "https://github.com/kortyx-io/kortyx/issues"
399
+ },
400
+ author: "Kortyx (https://github.com/kortyx-io)",
401
+ main: "./dist/index.js",
402
+ types: "./dist/index.d.ts",
403
+ exports: {
404
+ ".": {
405
+ types: "./dist/index.d.ts",
406
+ default: "./dist/index.js"
407
+ },
408
+ "./internal": {
409
+ types: "./dist/internal.d.ts",
410
+ default: "./dist/internal.js"
411
+ }
412
+ },
413
+ files: [
414
+ "dist/**",
415
+ "README.md",
416
+ "CHANGELOG.md"
417
+ ],
418
+ scripts: {
419
+ build: "tsup",
420
+ predev: "tsc -p tsconfig.build.json",
421
+ dev: "tsc --watch",
422
+ lint: "biome check src",
423
+ test: "vitest run && pnpm -s type-check",
424
+ coverage: "vitest run --coverage && pnpm -s type-check",
425
+ "test:watch": "vitest",
426
+ "type-check": "tsc --noEmit -p tsconfig.test.json"
427
+ },
428
+ dependencies: {
429
+ "@kortyx/core": "workspace:*",
430
+ "@kortyx/providers": "workspace:*",
431
+ "@kortyx/telemetry-contracts": "workspace:*",
432
+ zod: "catalog:",
433
+ "@kortyx/prompts": "workspace:*",
434
+ "@kortyx/usage-telemetry": "workspace:*"
435
+ },
436
+ devDependencies: {
437
+ turbo: "catalog:",
438
+ typescript: "catalog:",
439
+ tsup: "catalog:",
440
+ vitest: "catalog:",
441
+ "@vitest/coverage-v8": "catalog:"
442
+ },
443
+ sideEffects: false,
444
+ repository: {
445
+ type: "git",
446
+ url: "https://github.com/kortyx-io/kortyx.git",
447
+ directory: "packages/hooks"
448
+ },
449
+ publishConfig: {
450
+ access: "public"
451
+ }
452
+ };
453
+
454
+ // src/usage.ts
455
+ var client = () => (0, import_node.getUsageTelemetry)("hooks", package_default.version);
456
+ var usage = {
457
+ start: (...args) => client().start(...args),
458
+ feature: (...args) => client().feature(...args),
459
+ measure: (...args) => client().measure(...args),
460
+ flush: () => client().flush()
461
+ };
462
+
377
463
  // src/reason-engine.ts
378
464
  function assertModelFinish(result) {
379
465
  if (result.finishReason?.unified !== "content-filter") return;
@@ -414,7 +500,7 @@ var resolveProviderOptions = (defaults, overrides) => {
414
500
  }
415
501
  return providerOptions;
416
502
  };
417
- async function runReasonEngine(args) {
503
+ async function runReasonEngineInternal(args) {
418
504
  let stream = args.stream ?? args.model.options?.streaming ?? true;
419
505
  const emit = args.emit ?? true;
420
506
  const temperature = args.temperature ?? args.model.options?.temperature ?? args.defaultTemperature;
@@ -441,6 +527,11 @@ async function runReasonEngine(args) {
441
527
  ...providerOptions !== void 0 ? { providerOptions } : {}
442
528
  });
443
529
  if (tools?.length && !model.supportsToolStreaming) stream = false;
530
+ usage.feature("sdk.model", {
531
+ streaming: stream,
532
+ tools: Boolean(tools?.length),
533
+ provider: args.model.provider.id
534
+ });
444
535
  const messages = args.messages !== void 0 ? args.messages : [
445
536
  ...typeof args.system === "string" && args.system.length > 0 ? [{ role: "system", content: args.system }] : [],
446
537
  { role: "user", content: String(args.input ?? "") }
@@ -520,7 +611,7 @@ async function runReasonEngine(args) {
520
611
  let continuation;
521
612
  let final = "";
522
613
  let raw;
523
- let usage;
614
+ let usage2;
524
615
  let finishReason;
525
616
  let toolCalls;
526
617
  let providerMetadata;
@@ -561,7 +652,7 @@ async function runReasonEngine(args) {
561
652
  raw = chunk.raw;
562
653
  }
563
654
  if (chunk.usage !== void 0) {
564
- usage = chunk.usage;
655
+ usage2 = chunk.usage;
565
656
  }
566
657
  if (chunk.finishReason !== void 0) {
567
658
  finishReason = chunk.finishReason;
@@ -599,7 +690,7 @@ async function runReasonEngine(args) {
599
690
  }
600
691
  }
601
692
  (0, import_core.throwIfExecutionAborted)(abortSignal);
602
- assertModelFinish({ finishReason, usage });
693
+ assertModelFinish({ finishReason, usage: usage2 });
603
694
  if (emit) {
604
695
  emitNodeEvent(args.emitEvent, args.nodeId, "text-end", {
605
696
  ...commonMeta
@@ -609,7 +700,7 @@ async function runReasonEngine(args) {
609
700
  text: final,
610
701
  ...continuation ? { continuation } : {},
611
702
  ...raw !== void 0 ? { raw } : {},
612
- ...usage !== void 0 ? { usage } : {},
703
+ ...usage2 !== void 0 ? { usage: usage2 } : {},
613
704
  ...finishReason !== void 0 ? { finishReason } : {},
614
705
  ...toolCalls !== void 0 ? { toolCalls } : {},
615
706
  ...providerMetadata !== void 0 ? { providerMetadata } : {},
@@ -655,6 +746,14 @@ async function runReasonEngine(args) {
655
746
  throw failure;
656
747
  }
657
748
  }
749
+ function runReasonEngine(args) {
750
+ return usage.measure("sdk.model", () => runReasonEngineInternal(args), {
751
+ provider: args.model.provider.id,
752
+ requested_streaming: args.stream ?? args.model.options?.streaming ?? true,
753
+ tools: Boolean((args.tools ?? args.model.options?.tools)?.length),
754
+ format: args.responseFormat?.type ?? args.model.options?.responseFormat?.type ?? "text"
755
+ });
756
+ }
658
757
 
659
758
  // src/telemetry-privacy.ts
660
759
  var privateField = /^(?:password|passwd|secret|clientsecret|privatekey|credential|credentials|authorization|bearer|bearertoken|jwt|token|accesstoken|refreshtoken|authtoken|apikey|apisecret|cookie|setcookie|resumehandle|resumetoken)$/;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/internal.ts","../src/diagnostic-capture.ts","../src/error-diagnostics.ts","../src/reason-engine.ts","../src/safe-tracing.ts","../src/telemetry-privacy.ts"],"sourcesContent":["export { summarizeDiagnostic } from \"@kortyx/telemetry-contracts\";\nexport { captureDiagnosticContent } from \"./diagnostic-capture\";\nexport {\n errorDiagnostics,\n exceptionDiagnostics,\n isModelTraceSpan,\n} from \"./error-diagnostics\";\nexport type {\n RunReasonEngineArgs,\n RunReasonEngineResult,\n} from \"./reason-engine\";\nexport { runReasonEngine } from \"./reason-engine\";\nexport { safeSpan, safeStartSpan, withSafeTraceSpan } from \"./safe-tracing\";\nexport { safeTelemetryMetadata } from \"./telemetry-privacy\";\nexport type {\n KortyxTelemetryConfig,\n KortyxTraceAdapter,\n KortyxTraceMetadata,\n ReasonTraceAdapter,\n} from \"./tracing\";\n","import { errorProperty } from \"@kortyx/core/errors\";\nimport {\n DIAGNOSTIC_LIMITS,\n type DiagnosticContent,\n type DiagnosticNote,\n isPrivateDiagnosticField,\n redactDiagnosticText,\n} from \"@kortyx/telemetry-contracts\";\nimport type { KortyxTraceErrorProjection } from \"./tracing\";\n\nconst encoder = new TextEncoder();\n// Node 24 stores even assigned stacks behind a shared native lazy accessor.\nconst nativeStackGetter = Object.getOwnPropertyDescriptor(\n new Error(),\n \"stack\",\n)?.get;\nfunction nativeStack(\n object: object,\n getter: (() => unknown) | undefined,\n): unknown {\n if (!getter || getter !== nativeStackGetter)\n throw new Error(\"Custom stack accessor\");\n for (const key of [\"name\", \"message\"]) {\n let cursor: object | null = object;\n while (cursor) {\n const descriptor = Object.getOwnPropertyDescriptor(cursor, key);\n if (descriptor) {\n if (!(\"value\" in descriptor) || typeof descriptor.value !== \"string\")\n throw new Error(\"Custom error formatting\");\n break;\n }\n cursor = Object.getPrototypeOf(cursor);\n }\n }\n const formatter = Object.getOwnPropertyDescriptor(Error, \"prepareStackTrace\");\n if (formatter && (!(\"value\" in formatter) || !formatter.writable))\n throw new Error(\"Custom stack formatter\");\n // Synchronous formatting must not invoke an application's prepareStackTrace.\n Object.defineProperty(Error, \"prepareStackTrace\", {\n ...(formatter ?? { configurable: true, writable: true }),\n value: undefined,\n });\n try {\n return getter.call(object);\n } finally {\n if (formatter) Object.defineProperty(Error, \"prepareStackTrace\", formatter);\n else Reflect.deleteProperty(Error, \"prepareStackTrace\");\n }\n}\nconst pointer = (key: string) => key.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n\n/** Data-only graph capture. Getters and application toJSON methods are never invoked. */\nexport function captureDiagnosticContent(\n error: unknown,\n project?: KortyxTraceErrorProjection,\n): DiagnosticContent | null {\n const omissions: DiagnosticNote[] = [];\n const redactions: DiagnosticNote[] = [];\n const seen = new WeakMap<object, string>();\n let nodes = 0;\n let remaining = DIAGNOSTIC_LIMITS.bytes - 64 * 1024;\n const omit = (\n path: string,\n reason: string,\n extra: Partial<DiagnosticNote> = {},\n ) => {\n if (omissions.length < 1000)\n omissions.push({ path: path.slice(0, 4096), reason, ...extra });\n return { $omitted: reason };\n };\n const visit = (value: unknown, path: string, depth: number): unknown => {\n if (++nodes > DIAGNOSTIC_LIMITS.nodes) return omit(path, \"node_limit\");\n if (depth > DIAGNOSTIC_LIMITS.depth) return omit(path, \"depth_limit\");\n if (typeof value === \"string\") {\n const clean = redactDiagnosticText(value);\n if (clean !== value && redactions.length < 1000)\n redactions.push({\n path: path.slice(0, 4096),\n reason: \"credential_text\",\n });\n const bytes = encoder.encode(JSON.stringify(clean)).length;\n if (bytes > remaining)\n return omit(path, \"byte_limit\", {\n originalBytes: encoder.encode(value).length,\n });\n remaining -= bytes;\n return clean;\n }\n if (value === null || typeof value === \"boolean\") return value;\n if (typeof value === \"number\")\n return Number.isFinite(value)\n ? value\n : { $type: \"number\", value: String(value) };\n if (typeof value === \"bigint\")\n return { $type: \"bigint\", value: value.toString() };\n if (typeof value === \"undefined\") return { $type: \"undefined\" };\n if (typeof value === \"function\" || typeof value === \"symbol\")\n return omit(path, `unsupported_${typeof value}`);\n const object = value as object;\n const reference = seen.get(object);\n if (reference) return { $ref: reference };\n seen.set(object, path);\n remaining -= 32;\n if (remaining < 0) return omit(path, \"byte_limit\");\n try {\n if (value instanceof Date)\n return { $type: \"Date\", value: Date.prototype.toISOString.call(value) };\n if (value instanceof Map || value instanceof Set) {\n const isMap = value instanceof Map;\n const iterator = isMap\n ? Map.prototype.entries.call(value)\n : Set.prototype.values.call(value);\n const count = Object.getOwnPropertyDescriptor(\n isMap ? Map.prototype : Set.prototype,\n \"size\",\n )?.get?.call(value) as number;\n const entries: unknown[] = [];\n for (\n let index = 0;\n index < Math.min(count, DIAGNOSTIC_LIMITS.properties);\n index++\n )\n entries.push(iterator.next().value);\n if (count > entries.length)\n omissions.push({\n path,\n reason: \"collection_limit\",\n originalCount: count,\n });\n return isMap\n ? {\n $type: \"Map\",\n entries: visit(entries, `${path}/entries`, depth + 1),\n }\n : {\n $type: \"Set\",\n values: visit(entries, `${path}/values`, depth + 1),\n };\n }\n if (Array.isArray(value)) {\n const count = Math.min(value.length, DIAGNOSTIC_LIMITS.properties);\n const items = Array.from({ length: count }, (_, index) =>\n read(value, String(index), `${path}/${index}`, depth),\n );\n if (count < value.length)\n items.push(\n omit(path, \"collection_limit\", { originalCount: value.length }),\n );\n return items;\n }\n const keys = Object.getOwnPropertyNames(object);\n const result: Record<string, unknown> = Object.create(null);\n if (value instanceof Error) {\n const ownName = Object.getOwnPropertyDescriptor(object, \"name\");\n let type: unknown =\n ownName && \"value\" in ownName ? ownName.value : undefined;\n if (typeof type !== \"string\") {\n const name = Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(value),\n \"name\",\n );\n type = name && \"value\" in name ? name.value : \"Error\";\n }\n result.type = visit(\n typeof type === \"string\" ? type : \"Error\",\n `${path}/type`,\n depth + 1,\n );\n }\n for (const key of keys.slice(0, DIAGNOSTIC_LIMITS.properties)) {\n if ([\"__proto__\", \"constructor\", \"prototype\"].includes(key)) {\n result[key] = omit(`${path}/${pointer(key)}`, \"unsafe_key\");\n continue;\n }\n remaining -= encoder.encode(key).length + 4;\n result[key] = read(object, key, `${path}/${pointer(key)}`, depth);\n }\n if (keys.length > DIAGNOSTIC_LIMITS.properties)\n result.$omittedProperties = omit(path, \"property_limit\", {\n originalCount: keys.length,\n });\n return result;\n } catch {\n return omit(path, \"unreadable_object\");\n }\n };\n const read = (\n object: object,\n key: string,\n path: string,\n depth: number,\n ): unknown => {\n if (isPrivateDiagnosticField(key)) {\n if (redactions.length < 1000)\n redactions.push({\n path: path.slice(0, 4096),\n reason: \"credential_field\",\n });\n return \"[REDACTED]\";\n }\n try {\n const property = Object.getOwnPropertyDescriptor(object, key);\n if (property && \"value\" in property)\n return visit(property.value, path, depth + 1);\n if (\n key === \"stack\" &&\n object instanceof Error &&\n property?.get &&\n property.get === nativeStackGetter\n )\n return visit(nativeStack(object, property.get), path, depth + 1);\n return omit(\n path,\n property ? \"accessor_not_evaluated\" : \"unavailable_property\",\n );\n } catch {\n return omit(path, \"unreadable_property\");\n }\n };\n try {\n const original = project ? project(error) : error;\n if (project && original === null) return null;\n const captured = visit(original, \"#/data\", 0);\n const upstreamOmissions = errorProperty(original, \"diagnosticOmissions\");\n if (Array.isArray(upstreamOmissions))\n for (const note of upstreamOmissions.slice(0, 1000)) {\n const path = errorProperty(note, \"path\");\n const reason = errorProperty(note, \"reason\");\n if (typeof path === \"string\" && typeof reason === \"string\")\n omissions.push({\n path: redactDiagnosticText(path).slice(0, 4096),\n reason: redactDiagnosticText(reason).slice(0, 128),\n });\n }\n const data: Record<string, unknown> =\n captured && typeof captured === \"object\" && !Array.isArray(captured)\n ? (captured as Record<string, unknown>)\n : {\n type: \"Error\",\n message:\n typeof captured === \"string\"\n ? captured\n : \"Execution reported a fault.\",\n value: captured,\n };\n if (typeof data.message !== \"string\" && !(\"message\" in data))\n data.message = \"Execution reported a fault.\";\n if (!(\"type\" in data))\n data.type = typeof data.name === \"string\" ? data.name : \"Error\";\n const content: DiagnosticContent = {\n schemaVersion: 1,\n data,\n capture: {\n status: omissions.length ? \"partial\" : \"complete\",\n omissions,\n redactions,\n },\n };\n if (\n encoder.encode(JSON.stringify(content)).length > DIAGNOSTIC_LIMITS.bytes\n )\n return {\n schemaVersion: 1,\n data: {\n type: \"Error\",\n message: \"Diagnostic exceeded the capture budget.\",\n },\n capture: {\n status: \"partial\",\n redactions: [],\n omissions: [{ path: \"#/data\", reason: \"serialized_byte_limit\" }],\n },\n };\n return content;\n } catch {\n return {\n schemaVersion: 1,\n data: { type: \"Error\", message: \"Diagnostic capture failed.\" },\n capture: {\n status: \"failed\",\n redactions: [],\n omissions: [{ path: \"#/data\", reason: \"projection_or_capture_failed\" }],\n },\n };\n }\n}\n","import { summarizeDiagnostic } from \"@kortyx/telemetry-contracts\";\nimport { captureDiagnosticContent } from \"./diagnostic-capture\";\nimport type { KortyxErrorDetails, KortyxTraceErrorProjection } from \"./tracing\";\n\n/** Redacted observer diagnostic; bounded summaries are produced separately. */\nexport function exceptionDiagnostics(\n error: unknown,\n project?: KortyxTraceErrorProjection,\n): KortyxErrorDetails | null {\n const content = captureDiagnosticContent(error, project);\n return !content || content.capture.status === \"failed\"\n ? null\n : (content.data as KortyxErrorDetails);\n}\n\n/** Internal tracing diagnostics only; never changes client-facing failure contracts. */\nexport function errorDiagnostics(\n error: unknown,\n project?: KortyxTraceErrorProjection,\n): { errorType?: string; errorMessage?: string } {\n const captured = exceptionDiagnostics(error, project);\n const details = captured ? summarizeDiagnostic(captured) : null;\n return details\n ? {\n errorMessage: details.message.slice(0, 8192),\n ...(details.type ? { errorType: details.type.slice(0, 256) } : {}),\n }\n : {};\n}\nexport function isModelTraceSpan(name: string) {\n return name === \"runReasonEngine\" || name === \"useReason\";\n}\n","import { randomUUID } from \"node:crypto\";\nimport {\n createExecutionCancelledError,\n throwIfExecutionAborted,\n} from \"@kortyx/core\";\nimport { KortyxError } from \"@kortyx/core/errors\";\nimport type {\n KortyxContinuation,\n KortyxFinishReason,\n KortyxPromptMessage,\n KortyxProviderMetadata,\n KortyxReasoningOptions,\n KortyxResponseFormat,\n KortyxToolCall,\n KortyxToolDefinition,\n KortyxUsage,\n KortyxWarning,\n ProviderModelRef,\n} from \"@kortyx/providers\";\nimport { safeStartSpan } from \"./safe-tracing\";\nimport type {\n KortyxTraceMetadata,\n ReasonTraceAdapter,\n ReasonTraceSpan,\n} from \"./tracing\";\n\nfunction assertModelFinish(result: {\n finishReason?: KortyxFinishReason | undefined;\n usage?: KortyxUsage | undefined;\n}): void {\n if (result.finishReason?.unified !== \"content-filter\") return;\n throw Object.assign(\n new KortyxError(\"PROVIDER_REFUSAL\", \"The provider refused the request.\", {\n category: \"provider\",\n retryable: false,\n safeMessage: \"The provider refused the request.\",\n }),\n {\n ...(result.usage ? { usage: result.usage } : {}),\n finishReason: result.finishReason,\n },\n );\n}\n\nexport interface RunReasonEngineArgs {\n model: ProviderModelRef;\n input: string;\n system?: string | undefined;\n temperature?: number | undefined;\n maxOutputTokens?: number | undefined;\n stopSequences?: string[] | undefined;\n abortSignal?: AbortSignal | undefined;\n reasoning?: KortyxReasoningOptions | undefined;\n responseFormat?: KortyxResponseFormat | undefined;\n providerOptions?: Record<string, unknown> | undefined;\n tools?: KortyxToolDefinition[] | undefined;\n messages?: KortyxPromptMessage[] | undefined;\n defaultTemperature?: number | undefined;\n stream?: boolean | undefined;\n emit?: boolean | undefined;\n nodeId?: string | undefined;\n emitEvent?: ((event: string, payload: unknown) => void) | undefined;\n onTextChunk?: ((text: string) => void) | undefined;\n id?: string | undefined;\n opId?: string | undefined;\n segmentId?: string | undefined;\n telemetry?: KortyxTraceMetadata | undefined;\n reasonTrace?: ReasonTraceAdapter | undefined;\n}\n\nexport interface RunReasonEngineResult {\n continuation?: KortyxContinuation;\n text: string;\n raw?: unknown;\n usage?: KortyxUsage;\n finishReason?: KortyxFinishReason;\n toolCalls?: KortyxToolCall[];\n providerMetadata?: KortyxProviderMetadata;\n warnings?: KortyxWarning[];\n}\n\nconst toError = (value: unknown): Error =>\n value instanceof Error ? value : new Error(String(value));\n\nconst createRuntimeId = (): string => {\n try {\n return randomUUID();\n } catch {\n return `${Date.now()}-${Math.random().toString(36).slice(2)}`;\n }\n};\n\nconst emitNodeEvent = (\n emitEvent: RunReasonEngineArgs[\"emitEvent\"],\n nodeId: string | undefined,\n event: string,\n payload: Record<string, unknown>,\n): void => {\n if (!emitEvent) return;\n emitEvent(event, {\n ...payload,\n ...(typeof nodeId === \"string\" && nodeId.length > 0\n ? { node: nodeId }\n : {}),\n });\n};\n\nexport const resolveProviderOptions = (\n defaults: Record<string, unknown> | undefined,\n overrides: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined => {\n const providerOptions =\n defaults || overrides ? { ...defaults, ...overrides } : undefined;\n // Provider namespaces inherit model defaults (including transport) while\n // allowing individual call settings to override them.\n for (const [key, value] of Object.entries(overrides ?? {})) {\n const previous = defaults?.[key];\n if (\n previous &&\n value &&\n typeof previous === \"object\" &&\n typeof value === \"object\" &&\n !Array.isArray(previous) &&\n !Array.isArray(value)\n ) {\n if (providerOptions) providerOptions[key] = { ...previous, ...value };\n }\n }\n return providerOptions;\n};\n\nexport async function runReasonEngine(\n args: RunReasonEngineArgs,\n): Promise<RunReasonEngineResult> {\n let stream = args.stream ?? args.model.options?.streaming ?? true;\n const emit = args.emit ?? true;\n const temperature =\n args.temperature ??\n args.model.options?.temperature ??\n args.defaultTemperature;\n const maxOutputTokens =\n args.maxOutputTokens ?? args.model.options?.maxOutputTokens;\n const stopSequences = args.stopSequences ?? args.model.options?.stopSequences;\n const abortSignal = args.abortSignal ?? args.model.options?.abortSignal;\n const reasoning = args.reasoning ?? args.model.options?.reasoning;\n const responseFormat =\n args.responseFormat ?? args.model.options?.responseFormat;\n const providerOptions = resolveProviderOptions(\n args.model.options?.providerOptions,\n args.providerOptions,\n );\n const tools = args.tools ?? args.model.options?.tools;\n\n throwIfExecutionAborted(abortSignal);\n const model = args.model.provider.getModel(args.model.modelId, {\n ...(temperature !== undefined ? { temperature } : {}),\n streaming: stream,\n ...(maxOutputTokens !== undefined ? { maxOutputTokens } : {}),\n ...(stopSequences !== undefined ? { stopSequences } : {}),\n ...(abortSignal !== undefined ? { abortSignal } : {}),\n ...(reasoning !== undefined ? { reasoning } : {}),\n ...(responseFormat !== undefined ? { responseFormat } : {}),\n ...(tools !== undefined ? { tools } : {}),\n ...(providerOptions !== undefined ? { providerOptions } : {}),\n });\n\n if (tools?.length && !model.supportsToolStreaming) stream = false;\n\n const messages: KortyxPromptMessage[] =\n args.messages !== undefined\n ? args.messages\n : [\n ...(typeof args.system === \"string\" && args.system.length > 0\n ? [{ role: \"system\" as const, content: args.system }]\n : []),\n { role: \"user\" as const, content: String(args.input ?? \"\") },\n ];\n\n const opId =\n typeof args.opId === \"string\" && args.opId.length > 0\n ? args.opId\n : createRuntimeId();\n const segmentId =\n typeof args.segmentId === \"string\" && args.segmentId.length > 0\n ? args.segmentId\n : createRuntimeId();\n\n const commonMeta: Record<string, unknown> = {\n ...(typeof args.id === \"string\" && args.id.length > 0\n ? { id: args.id }\n : {}),\n opId,\n segmentId,\n };\n const traceSpan = safeStartSpan(args.reasonTrace, {\n name: \"runReasonEngine\",\n attributes: {\n ...commonMeta,\n providerId: args.model.provider.id,\n modelId: args.model.modelId,\n stream,\n emit,\n ...(args.telemetry?.operation\n ? { operation: args.telemetry.operation }\n : {}),\n ...(args.telemetry?.prompt?.name\n ? { promptName: args.telemetry.prompt.name }\n : {}),\n ...(args.telemetry?.prompt?.version !== undefined\n ? { promptVersion: args.telemetry.prompt.version }\n : {}),\n ...(args.telemetry?.prompt?.type\n ? { promptType: args.telemetry.prompt.type }\n : {}),\n ...(typeof args.nodeId === \"string\" && args.nodeId.length > 0\n ? { nodeId: args.nodeId }\n : {}),\n },\n telemetry: {\n ...(args.telemetry ?? {}),\n input:\n args.telemetry?.input ??\n messages.map(\n ({ continuation: _continuation, raw: _raw, ...message }) => message,\n ),\n },\n });\n const modelRequestStartedAt = Date.now();\n let firstTextTokenAt: number | undefined;\n let lastTextTokenAt: number | undefined;\n\n const generationTimingAttributes = (): Record<string, number> =>\n firstTextTokenAt === undefined || lastTextTokenAt === undefined\n ? {}\n : {\n ttftMs: Math.max(0, firstTextTokenAt - modelRequestStartedAt),\n streamDurationMs: Math.max(0, lastTextTokenAt - firstTextTokenAt),\n timeToLastTokenMs: Math.max(\n 0,\n lastTextTokenAt - modelRequestStartedAt,\n ),\n };\n\n const endTrace = (\n span: ReasonTraceSpan | undefined,\n result: RunReasonEngineResult,\n ): void => {\n span?.end?.({\n ...(result.usage !== undefined ? { usage: result.usage } : {}),\n ...(result.finishReason !== undefined\n ? { finishReason: result.finishReason }\n : {}),\n ...(result.providerMetadata !== undefined\n ? { providerMetadata: result.providerMetadata }\n : {}),\n ...(result.warnings !== undefined ? { warnings: result.warnings } : {}),\n attributes: {\n textLength: result.text.length,\n ...generationTimingAttributes(),\n },\n telemetry: {\n ...(args.telemetry ?? {}),\n output: args.telemetry?.output ?? result.text,\n },\n });\n };\n\n const failTrace = (\n span: ReasonTraceSpan | undefined,\n error: unknown,\n ): void => {\n const detail = error as Partial<RunReasonEngineResult> | undefined;\n try {\n span?.fail?.(error, {\n ...(detail?.usage ? { usage: detail.usage } : {}),\n ...(detail?.finishReason ? { finishReason: detail.finishReason } : {}),\n ...(detail?.providerMetadata\n ? { providerMetadata: detail.providerMetadata }\n : {}),\n attributes: {\n providerId: args.model.provider.id,\n modelId: args.model.modelId,\n },\n });\n } catch {\n /* Reporting must not replace the execution failure. */\n }\n };\n\n try {\n if (stream) {\n let continuation: KortyxContinuation | undefined;\n let final = \"\";\n let raw: unknown;\n let usage: KortyxUsage | undefined;\n let finishReason: KortyxFinishReason | undefined;\n let toolCalls: KortyxToolCall[] | undefined;\n let providerMetadata: KortyxProviderMetadata | undefined;\n let warnings: KortyxWarning[] | undefined;\n\n if (emit) {\n emitNodeEvent(args.emitEvent, args.nodeId, \"text-start\", {\n ...commonMeta,\n });\n }\n\n const response = await model.stream(messages);\n for await (const chunk of response) {\n throwIfExecutionAborted(abortSignal);\n switch (chunk.type) {\n case \"text-delta\": {\n if (chunk.delta.length === 0) break;\n const tokenAt = Date.now();\n firstTextTokenAt ??= tokenAt;\n lastTextTokenAt = tokenAt;\n final += chunk.delta;\n args.onTextChunk?.(chunk.delta);\n if (chunk.raw !== undefined) {\n raw = chunk.raw;\n }\n if (chunk.providerMetadata !== undefined) {\n providerMetadata = chunk.providerMetadata;\n }\n if (emit) {\n emitNodeEvent(args.emitEvent, args.nodeId, \"text-delta\", {\n ...commonMeta,\n delta: chunk.delta,\n });\n }\n break;\n }\n case \"finish\": {\n continuation = chunk.continuation;\n if (chunk.raw !== undefined) {\n raw = chunk.raw;\n }\n if (chunk.usage !== undefined) {\n usage = chunk.usage;\n }\n if (chunk.finishReason !== undefined) {\n finishReason = chunk.finishReason;\n }\n if (chunk.toolCalls !== undefined) {\n toolCalls = chunk.toolCalls;\n }\n if (chunk.providerMetadata !== undefined) {\n providerMetadata = chunk.providerMetadata;\n }\n if (chunk.warnings !== undefined) {\n warnings = chunk.warnings;\n }\n break;\n }\n case \"raw\": {\n raw = chunk.raw;\n if (chunk.providerMetadata !== undefined) {\n providerMetadata = chunk.providerMetadata;\n }\n break;\n }\n case \"error\": {\n if (chunk.raw !== undefined) {\n raw = chunk.raw;\n }\n if (chunk.providerMetadata !== undefined) {\n providerMetadata = chunk.providerMetadata;\n }\n if (chunk.warnings !== undefined) {\n warnings = chunk.warnings;\n }\n throw toError(chunk.error);\n }\n }\n }\n\n throwIfExecutionAborted(abortSignal);\n assertModelFinish({ finishReason, usage });\n if (emit) {\n emitNodeEvent(args.emitEvent, args.nodeId, \"text-end\", {\n ...commonMeta,\n });\n }\n\n const result = {\n text: final,\n ...(continuation ? { continuation } : {}),\n ...(raw !== undefined ? { raw } : {}),\n ...(usage !== undefined ? { usage } : {}),\n ...(finishReason !== undefined ? { finishReason } : {}),\n ...(toolCalls !== undefined ? { toolCalls } : {}),\n ...(providerMetadata !== undefined ? { providerMetadata } : {}),\n ...(warnings !== undefined ? { warnings } : {}),\n };\n throwIfExecutionAborted(abortSignal);\n endTrace(traceSpan, result);\n return result;\n }\n\n const response = await model.invoke(messages);\n throwIfExecutionAborted(abortSignal);\n assertModelFinish(response);\n if (response.content) args.onTextChunk?.(response.content);\n\n if (emit) {\n emitNodeEvent(args.emitEvent, args.nodeId, \"text-start\", {\n ...commonMeta,\n });\n if (response.content) {\n emitNodeEvent(args.emitEvent, args.nodeId, \"text-delta\", {\n ...commonMeta,\n delta: response.content,\n });\n }\n emitNodeEvent(args.emitEvent, args.nodeId, \"text-end\", {\n ...commonMeta,\n });\n }\n\n const result = {\n text: response.content,\n ...(response.continuation ? { continuation: response.continuation } : {}),\n ...(response.raw !== undefined ? { raw: response.raw } : {}),\n ...(response.usage !== undefined ? { usage: response.usage } : {}),\n ...(response.finishReason !== undefined\n ? { finishReason: response.finishReason }\n : {}),\n ...(response.toolCalls !== undefined\n ? { toolCalls: response.toolCalls }\n : {}),\n ...(response.providerMetadata !== undefined\n ? { providerMetadata: response.providerMetadata }\n : {}),\n ...(response.warnings !== undefined\n ? { warnings: response.warnings }\n : {}),\n };\n endTrace(traceSpan, result);\n return result;\n } catch (error) {\n const failure = abortSignal?.aborted\n ? createExecutionCancelledError()\n : error;\n failTrace(traceSpan, failure);\n throw failure;\n }\n}\n","import type {\n ReasonTraceAdapter,\n ReasonTraceAttributes,\n ReasonTraceSpan,\n ReasonTraceSpanEndArgs,\n ReasonTraceSpanStartArgs,\n} from \"./tracing\";\n\n/** Observation callbacks never participate in execution's error path. */\nexport function safeSpan(span: ReasonTraceSpan | undefined): ReasonTraceSpan {\n const guard =\n <T extends unknown[]>(fn: ((...args: T) => void) | undefined) =>\n (...args: T) => {\n try {\n fn?.(...args);\n } catch {}\n };\n let ended = false;\n const finish =\n <T extends unknown[]>(fn: ((...args: T) => void) | undefined) =>\n (...args: T) => {\n if (ended) return;\n ended = true;\n guard(fn)(...args);\n };\n return {\n addEvent: guard((name: string, attributes?: ReasonTraceAttributes) =>\n span?.addEvent?.(name, attributes),\n ),\n setAttributes: guard((attributes: ReasonTraceAttributes) =>\n span?.setAttributes?.(attributes),\n ),\n end: finish((args?: ReasonTraceSpanEndArgs) => span?.end?.(args)),\n fail: finish((error: unknown, args?: ReasonTraceSpanEndArgs) => {\n if (span?.fail) span.fail(error, args);\n else span?.end?.(args);\n }),\n };\n}\n\nexport function safeStartSpan(\n adapter: Partial<ReasonTraceAdapter> | undefined,\n args: ReasonTraceSpanStartArgs,\n): ReasonTraceSpan {\n try {\n return safeSpan(adapter?.startSpan?.(args));\n } catch {\n return safeSpan(undefined);\n }\n}\n\n/** Retains active adapter context, and never retries a callback if observation fails. */\nexport async function withSafeTraceSpan<T>(\n adapter: Partial<ReasonTraceAdapter> | undefined,\n args: ReasonTraceSpanStartArgs,\n fn: (span: ReasonTraceSpan) => Promise<T>,\n): Promise<T> {\n let execution: Promise<T> | undefined;\n const invoke = (span: ReasonTraceSpan) => {\n execution ??= Promise.resolve().then(async () => {\n const observed = safeSpan(span);\n try {\n const result = await fn(observed);\n observed.end?.();\n return result;\n } catch (error) {\n observed.fail?.(error);\n throw error;\n }\n });\n return execution;\n };\n let activeScope: ReasonTraceAdapter[\"withSpan\"];\n try {\n activeScope = adapter?.withSpan?.bind(adapter);\n } catch {}\n if (activeScope) {\n let started: (() => void) | undefined;\n const invoked = new Promise<void>((resolve) => {\n started = resolve;\n });\n const observe = async () => {\n try {\n await activeScope(args, (span) => {\n const result = invoke(span);\n started?.();\n return result;\n });\n } catch {\n /* The execution promise preserves its own failure. */\n }\n };\n const observation = observe();\n // Delivery or adapter work after the callback must not hold up execution.\n if (!execution) await Promise.race([invoked, observation]);\n } else {\n await invoke(safeStartSpan(adapter, args)).catch(() => {});\n }\n return execution ?? invoke(safeSpan(undefined));\n}\n","/** Strip credential-shaped fields before metadata reaches any adapter/exporter. */\nconst privateField =\n /^(?:password|passwd|secret|clientsecret|privatekey|credential|credentials|authorization|bearer|bearertoken|jwt|token|accesstoken|refreshtoken|authtoken|apikey|apisecret|cookie|setcookie|resumehandle|resumetoken)$/;\nexport function safeTelemetryMetadata(\n value: Record<string, unknown>,\n): Record<string, unknown> {\n const seen = new WeakSet<object>();\n const visit = (input: unknown, depth: number): unknown => {\n if (depth > 8 || typeof input === \"function\" || typeof input === \"symbol\")\n return undefined;\n if (!input || typeof input !== \"object\") return input;\n if (seen.has(input)) return undefined;\n seen.add(input);\n if (Array.isArray(input))\n return input.map((item) => visit(item, depth + 1));\n return Object.fromEntries(\n Object.entries(input).flatMap(([key, nested]) =>\n privateField.test(key.toLowerCase().replace(/[^a-z0-9]/g, \"\"))\n ? []\n : [[key, visit(nested, depth + 1)]],\n ),\n );\n };\n try {\n return visit(value, 0) as Record<string, unknown>;\n } catch {\n return {};\n }\n}\n"],"mappings":"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","names":["import_telemetry_contracts","import_telemetry_contracts","import_errors","response","result"]}
1
+ {"version":3,"sources":["../src/internal.ts","../src/diagnostic-capture.ts","../src/error-diagnostics.ts","../src/reason-engine.ts","../src/safe-tracing.ts","../src/usage.ts","../package.json","../src/telemetry-privacy.ts"],"sourcesContent":["export { summarizeDiagnostic } from \"@kortyx/telemetry-contracts\";\nexport { captureDiagnosticContent } from \"./diagnostic-capture\";\nexport {\n errorDiagnostics,\n exceptionDiagnostics,\n isModelTraceSpan,\n} from \"./error-diagnostics\";\nexport type {\n RunReasonEngineArgs,\n RunReasonEngineResult,\n} from \"./reason-engine\";\nexport { runReasonEngine } from \"./reason-engine\";\nexport { safeSpan, safeStartSpan, withSafeTraceSpan } from \"./safe-tracing\";\nexport { safeTelemetryMetadata } from \"./telemetry-privacy\";\nexport type {\n KortyxTelemetryConfig,\n KortyxTraceAdapter,\n KortyxTraceMetadata,\n ReasonTraceAdapter,\n} from \"./tracing\";\n","import { errorProperty } from \"@kortyx/core/errors\";\nimport {\n DIAGNOSTIC_LIMITS,\n type DiagnosticContent,\n type DiagnosticNote,\n isPrivateDiagnosticField,\n redactDiagnosticText,\n} from \"@kortyx/telemetry-contracts\";\nimport type { KortyxTraceErrorProjection } from \"./tracing\";\n\nconst encoder = new TextEncoder();\n// Node 24 stores even assigned stacks behind a shared native lazy accessor.\nconst nativeStackGetter = Object.getOwnPropertyDescriptor(\n new Error(),\n \"stack\",\n)?.get;\nfunction nativeStack(\n object: object,\n getter: (() => unknown) | undefined,\n): unknown {\n if (!getter || getter !== nativeStackGetter)\n throw new Error(\"Custom stack accessor\");\n for (const key of [\"name\", \"message\"]) {\n let cursor: object | null = object;\n while (cursor) {\n const descriptor = Object.getOwnPropertyDescriptor(cursor, key);\n if (descriptor) {\n if (!(\"value\" in descriptor) || typeof descriptor.value !== \"string\")\n throw new Error(\"Custom error formatting\");\n break;\n }\n cursor = Object.getPrototypeOf(cursor);\n }\n }\n const formatter = Object.getOwnPropertyDescriptor(Error, \"prepareStackTrace\");\n if (formatter && (!(\"value\" in formatter) || !formatter.writable))\n throw new Error(\"Custom stack formatter\");\n // Synchronous formatting must not invoke an application's prepareStackTrace.\n Object.defineProperty(Error, \"prepareStackTrace\", {\n ...(formatter ?? { configurable: true, writable: true }),\n value: undefined,\n });\n try {\n return getter.call(object);\n } finally {\n if (formatter) Object.defineProperty(Error, \"prepareStackTrace\", formatter);\n else Reflect.deleteProperty(Error, \"prepareStackTrace\");\n }\n}\nconst pointer = (key: string) => key.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n\n/** Data-only graph capture. Getters and application toJSON methods are never invoked. */\nexport function captureDiagnosticContent(\n error: unknown,\n project?: KortyxTraceErrorProjection,\n): DiagnosticContent | null {\n const omissions: DiagnosticNote[] = [];\n const redactions: DiagnosticNote[] = [];\n const seen = new WeakMap<object, string>();\n let nodes = 0;\n let remaining = DIAGNOSTIC_LIMITS.bytes - 64 * 1024;\n const omit = (\n path: string,\n reason: string,\n extra: Partial<DiagnosticNote> = {},\n ) => {\n if (omissions.length < 1000)\n omissions.push({ path: path.slice(0, 4096), reason, ...extra });\n return { $omitted: reason };\n };\n const visit = (value: unknown, path: string, depth: number): unknown => {\n if (++nodes > DIAGNOSTIC_LIMITS.nodes) return omit(path, \"node_limit\");\n if (depth > DIAGNOSTIC_LIMITS.depth) return omit(path, \"depth_limit\");\n if (typeof value === \"string\") {\n const clean = redactDiagnosticText(value);\n if (clean !== value && redactions.length < 1000)\n redactions.push({\n path: path.slice(0, 4096),\n reason: \"credential_text\",\n });\n const bytes = encoder.encode(JSON.stringify(clean)).length;\n if (bytes > remaining)\n return omit(path, \"byte_limit\", {\n originalBytes: encoder.encode(value).length,\n });\n remaining -= bytes;\n return clean;\n }\n if (value === null || typeof value === \"boolean\") return value;\n if (typeof value === \"number\")\n return Number.isFinite(value)\n ? value\n : { $type: \"number\", value: String(value) };\n if (typeof value === \"bigint\")\n return { $type: \"bigint\", value: value.toString() };\n if (typeof value === \"undefined\") return { $type: \"undefined\" };\n if (typeof value === \"function\" || typeof value === \"symbol\")\n return omit(path, `unsupported_${typeof value}`);\n const object = value as object;\n const reference = seen.get(object);\n if (reference) return { $ref: reference };\n seen.set(object, path);\n remaining -= 32;\n if (remaining < 0) return omit(path, \"byte_limit\");\n try {\n if (value instanceof Date)\n return { $type: \"Date\", value: Date.prototype.toISOString.call(value) };\n if (value instanceof Map || value instanceof Set) {\n const isMap = value instanceof Map;\n const iterator = isMap\n ? Map.prototype.entries.call(value)\n : Set.prototype.values.call(value);\n const count = Object.getOwnPropertyDescriptor(\n isMap ? Map.prototype : Set.prototype,\n \"size\",\n )?.get?.call(value) as number;\n const entries: unknown[] = [];\n for (\n let index = 0;\n index < Math.min(count, DIAGNOSTIC_LIMITS.properties);\n index++\n )\n entries.push(iterator.next().value);\n if (count > entries.length)\n omissions.push({\n path,\n reason: \"collection_limit\",\n originalCount: count,\n });\n return isMap\n ? {\n $type: \"Map\",\n entries: visit(entries, `${path}/entries`, depth + 1),\n }\n : {\n $type: \"Set\",\n values: visit(entries, `${path}/values`, depth + 1),\n };\n }\n if (Array.isArray(value)) {\n const count = Math.min(value.length, DIAGNOSTIC_LIMITS.properties);\n const items = Array.from({ length: count }, (_, index) =>\n read(value, String(index), `${path}/${index}`, depth),\n );\n if (count < value.length)\n items.push(\n omit(path, \"collection_limit\", { originalCount: value.length }),\n );\n return items;\n }\n const keys = Object.getOwnPropertyNames(object);\n const result: Record<string, unknown> = Object.create(null);\n if (value instanceof Error) {\n const ownName = Object.getOwnPropertyDescriptor(object, \"name\");\n let type: unknown =\n ownName && \"value\" in ownName ? ownName.value : undefined;\n if (typeof type !== \"string\") {\n const name = Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(value),\n \"name\",\n );\n type = name && \"value\" in name ? name.value : \"Error\";\n }\n result.type = visit(\n typeof type === \"string\" ? type : \"Error\",\n `${path}/type`,\n depth + 1,\n );\n }\n for (const key of keys.slice(0, DIAGNOSTIC_LIMITS.properties)) {\n if ([\"__proto__\", \"constructor\", \"prototype\"].includes(key)) {\n result[key] = omit(`${path}/${pointer(key)}`, \"unsafe_key\");\n continue;\n }\n remaining -= encoder.encode(key).length + 4;\n result[key] = read(object, key, `${path}/${pointer(key)}`, depth);\n }\n if (keys.length > DIAGNOSTIC_LIMITS.properties)\n result.$omittedProperties = omit(path, \"property_limit\", {\n originalCount: keys.length,\n });\n return result;\n } catch {\n return omit(path, \"unreadable_object\");\n }\n };\n const read = (\n object: object,\n key: string,\n path: string,\n depth: number,\n ): unknown => {\n if (isPrivateDiagnosticField(key)) {\n if (redactions.length < 1000)\n redactions.push({\n path: path.slice(0, 4096),\n reason: \"credential_field\",\n });\n return \"[REDACTED]\";\n }\n try {\n const property = Object.getOwnPropertyDescriptor(object, key);\n if (property && \"value\" in property)\n return visit(property.value, path, depth + 1);\n if (\n key === \"stack\" &&\n object instanceof Error &&\n property?.get &&\n property.get === nativeStackGetter\n )\n return visit(nativeStack(object, property.get), path, depth + 1);\n return omit(\n path,\n property ? \"accessor_not_evaluated\" : \"unavailable_property\",\n );\n } catch {\n return omit(path, \"unreadable_property\");\n }\n };\n try {\n const original = project ? project(error) : error;\n if (project && original === null) return null;\n const captured = visit(original, \"#/data\", 0);\n const upstreamOmissions = errorProperty(original, \"diagnosticOmissions\");\n if (Array.isArray(upstreamOmissions))\n for (const note of upstreamOmissions.slice(0, 1000)) {\n const path = errorProperty(note, \"path\");\n const reason = errorProperty(note, \"reason\");\n if (typeof path === \"string\" && typeof reason === \"string\")\n omissions.push({\n path: redactDiagnosticText(path).slice(0, 4096),\n reason: redactDiagnosticText(reason).slice(0, 128),\n });\n }\n const data: Record<string, unknown> =\n captured && typeof captured === \"object\" && !Array.isArray(captured)\n ? (captured as Record<string, unknown>)\n : {\n type: \"Error\",\n message:\n typeof captured === \"string\"\n ? captured\n : \"Execution reported a fault.\",\n value: captured,\n };\n if (typeof data.message !== \"string\" && !(\"message\" in data))\n data.message = \"Execution reported a fault.\";\n if (!(\"type\" in data))\n data.type = typeof data.name === \"string\" ? data.name : \"Error\";\n const content: DiagnosticContent = {\n schemaVersion: 1,\n data,\n capture: {\n status: omissions.length ? \"partial\" : \"complete\",\n omissions,\n redactions,\n },\n };\n if (\n encoder.encode(JSON.stringify(content)).length > DIAGNOSTIC_LIMITS.bytes\n )\n return {\n schemaVersion: 1,\n data: {\n type: \"Error\",\n message: \"Diagnostic exceeded the capture budget.\",\n },\n capture: {\n status: \"partial\",\n redactions: [],\n omissions: [{ path: \"#/data\", reason: \"serialized_byte_limit\" }],\n },\n };\n return content;\n } catch {\n return {\n schemaVersion: 1,\n data: { type: \"Error\", message: \"Diagnostic capture failed.\" },\n capture: {\n status: \"failed\",\n redactions: [],\n omissions: [{ path: \"#/data\", reason: \"projection_or_capture_failed\" }],\n },\n };\n }\n}\n","import { summarizeDiagnostic } from \"@kortyx/telemetry-contracts\";\nimport { captureDiagnosticContent } from \"./diagnostic-capture\";\nimport type { KortyxErrorDetails, KortyxTraceErrorProjection } from \"./tracing\";\n\n/** Redacted observer diagnostic; bounded summaries are produced separately. */\nexport function exceptionDiagnostics(\n error: unknown,\n project?: KortyxTraceErrorProjection,\n): KortyxErrorDetails | null {\n const content = captureDiagnosticContent(error, project);\n return !content || content.capture.status === \"failed\"\n ? null\n : (content.data as KortyxErrorDetails);\n}\n\n/** Internal tracing diagnostics only; never changes client-facing failure contracts. */\nexport function errorDiagnostics(\n error: unknown,\n project?: KortyxTraceErrorProjection,\n): { errorType?: string; errorMessage?: string } {\n const captured = exceptionDiagnostics(error, project);\n const details = captured ? summarizeDiagnostic(captured) : null;\n return details\n ? {\n errorMessage: details.message.slice(0, 8192),\n ...(details.type ? { errorType: details.type.slice(0, 256) } : {}),\n }\n : {};\n}\nexport function isModelTraceSpan(name: string) {\n return name === \"runReasonEngine\" || name === \"useReason\";\n}\n","import { randomUUID } from \"node:crypto\";\nimport {\n createExecutionCancelledError,\n throwIfExecutionAborted,\n} from \"@kortyx/core\";\nimport { KortyxError } from \"@kortyx/core/errors\";\nimport type {\n KortyxContinuation,\n KortyxFinishReason,\n KortyxPromptMessage,\n KortyxProviderMetadata,\n KortyxReasoningOptions,\n KortyxResponseFormat,\n KortyxToolCall,\n KortyxToolDefinition,\n KortyxUsage,\n KortyxWarning,\n ProviderModelRef,\n} from \"@kortyx/providers\";\nimport { safeStartSpan } from \"./safe-tracing\";\nimport type {\n KortyxTraceMetadata,\n ReasonTraceAdapter,\n ReasonTraceSpan,\n} from \"./tracing\";\nimport { usage } from \"./usage\";\n\nfunction assertModelFinish(result: {\n finishReason?: KortyxFinishReason | undefined;\n usage?: KortyxUsage | undefined;\n}): void {\n if (result.finishReason?.unified !== \"content-filter\") return;\n throw Object.assign(\n new KortyxError(\"PROVIDER_REFUSAL\", \"The provider refused the request.\", {\n category: \"provider\",\n retryable: false,\n safeMessage: \"The provider refused the request.\",\n }),\n {\n ...(result.usage ? { usage: result.usage } : {}),\n finishReason: result.finishReason,\n },\n );\n}\n\nexport interface RunReasonEngineArgs {\n model: ProviderModelRef;\n input: string;\n system?: string | undefined;\n temperature?: number | undefined;\n maxOutputTokens?: number | undefined;\n stopSequences?: string[] | undefined;\n abortSignal?: AbortSignal | undefined;\n reasoning?: KortyxReasoningOptions | undefined;\n responseFormat?: KortyxResponseFormat | undefined;\n providerOptions?: Record<string, unknown> | undefined;\n tools?: KortyxToolDefinition[] | undefined;\n messages?: KortyxPromptMessage[] | undefined;\n defaultTemperature?: number | undefined;\n stream?: boolean | undefined;\n emit?: boolean | undefined;\n nodeId?: string | undefined;\n emitEvent?: ((event: string, payload: unknown) => void) | undefined;\n onTextChunk?: ((text: string) => void) | undefined;\n id?: string | undefined;\n opId?: string | undefined;\n segmentId?: string | undefined;\n telemetry?: KortyxTraceMetadata | undefined;\n reasonTrace?: ReasonTraceAdapter | undefined;\n}\n\nexport interface RunReasonEngineResult {\n continuation?: KortyxContinuation;\n text: string;\n raw?: unknown;\n usage?: KortyxUsage;\n finishReason?: KortyxFinishReason;\n toolCalls?: KortyxToolCall[];\n providerMetadata?: KortyxProviderMetadata;\n warnings?: KortyxWarning[];\n}\n\nconst toError = (value: unknown): Error =>\n value instanceof Error ? value : new Error(String(value));\n\nconst createRuntimeId = (): string => {\n try {\n return randomUUID();\n } catch {\n return `${Date.now()}-${Math.random().toString(36).slice(2)}`;\n }\n};\n\nconst emitNodeEvent = (\n emitEvent: RunReasonEngineArgs[\"emitEvent\"],\n nodeId: string | undefined,\n event: string,\n payload: Record<string, unknown>,\n): void => {\n if (!emitEvent) return;\n emitEvent(event, {\n ...payload,\n ...(typeof nodeId === \"string\" && nodeId.length > 0\n ? { node: nodeId }\n : {}),\n });\n};\n\nexport const resolveProviderOptions = (\n defaults: Record<string, unknown> | undefined,\n overrides: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined => {\n const providerOptions =\n defaults || overrides ? { ...defaults, ...overrides } : undefined;\n // Provider namespaces inherit model defaults (including transport) while\n // allowing individual call settings to override them.\n for (const [key, value] of Object.entries(overrides ?? {})) {\n const previous = defaults?.[key];\n if (\n previous &&\n value &&\n typeof previous === \"object\" &&\n typeof value === \"object\" &&\n !Array.isArray(previous) &&\n !Array.isArray(value)\n ) {\n if (providerOptions) providerOptions[key] = { ...previous, ...value };\n }\n }\n return providerOptions;\n};\n\nasync function runReasonEngineInternal(\n args: RunReasonEngineArgs,\n): Promise<RunReasonEngineResult> {\n let stream = args.stream ?? args.model.options?.streaming ?? true;\n const emit = args.emit ?? true;\n const temperature =\n args.temperature ??\n args.model.options?.temperature ??\n args.defaultTemperature;\n const maxOutputTokens =\n args.maxOutputTokens ?? args.model.options?.maxOutputTokens;\n const stopSequences = args.stopSequences ?? args.model.options?.stopSequences;\n const abortSignal = args.abortSignal ?? args.model.options?.abortSignal;\n const reasoning = args.reasoning ?? args.model.options?.reasoning;\n const responseFormat =\n args.responseFormat ?? args.model.options?.responseFormat;\n const providerOptions = resolveProviderOptions(\n args.model.options?.providerOptions,\n args.providerOptions,\n );\n const tools = args.tools ?? args.model.options?.tools;\n\n throwIfExecutionAborted(abortSignal);\n const model = args.model.provider.getModel(args.model.modelId, {\n ...(temperature !== undefined ? { temperature } : {}),\n streaming: stream,\n ...(maxOutputTokens !== undefined ? { maxOutputTokens } : {}),\n ...(stopSequences !== undefined ? { stopSequences } : {}),\n ...(abortSignal !== undefined ? { abortSignal } : {}),\n ...(reasoning !== undefined ? { reasoning } : {}),\n ...(responseFormat !== undefined ? { responseFormat } : {}),\n ...(tools !== undefined ? { tools } : {}),\n ...(providerOptions !== undefined ? { providerOptions } : {}),\n });\n\n if (tools?.length && !model.supportsToolStreaming) stream = false;\n usage.feature(\"sdk.model\", {\n streaming: stream,\n tools: Boolean(tools?.length),\n provider: args.model.provider.id,\n });\n\n const messages: KortyxPromptMessage[] =\n args.messages !== undefined\n ? args.messages\n : [\n ...(typeof args.system === \"string\" && args.system.length > 0\n ? [{ role: \"system\" as const, content: args.system }]\n : []),\n { role: \"user\" as const, content: String(args.input ?? \"\") },\n ];\n\n const opId =\n typeof args.opId === \"string\" && args.opId.length > 0\n ? args.opId\n : createRuntimeId();\n const segmentId =\n typeof args.segmentId === \"string\" && args.segmentId.length > 0\n ? args.segmentId\n : createRuntimeId();\n\n const commonMeta: Record<string, unknown> = {\n ...(typeof args.id === \"string\" && args.id.length > 0\n ? { id: args.id }\n : {}),\n opId,\n segmentId,\n };\n const traceSpan = safeStartSpan(args.reasonTrace, {\n name: \"runReasonEngine\",\n attributes: {\n ...commonMeta,\n providerId: args.model.provider.id,\n modelId: args.model.modelId,\n stream,\n emit,\n ...(args.telemetry?.operation\n ? { operation: args.telemetry.operation }\n : {}),\n ...(args.telemetry?.prompt?.name\n ? { promptName: args.telemetry.prompt.name }\n : {}),\n ...(args.telemetry?.prompt?.version !== undefined\n ? { promptVersion: args.telemetry.prompt.version }\n : {}),\n ...(args.telemetry?.prompt?.type\n ? { promptType: args.telemetry.prompt.type }\n : {}),\n ...(typeof args.nodeId === \"string\" && args.nodeId.length > 0\n ? { nodeId: args.nodeId }\n : {}),\n },\n telemetry: {\n ...(args.telemetry ?? {}),\n input:\n args.telemetry?.input ??\n messages.map(\n ({ continuation: _continuation, raw: _raw, ...message }) => message,\n ),\n },\n });\n const modelRequestStartedAt = Date.now();\n let firstTextTokenAt: number | undefined;\n let lastTextTokenAt: number | undefined;\n\n const generationTimingAttributes = (): Record<string, number> =>\n firstTextTokenAt === undefined || lastTextTokenAt === undefined\n ? {}\n : {\n ttftMs: Math.max(0, firstTextTokenAt - modelRequestStartedAt),\n streamDurationMs: Math.max(0, lastTextTokenAt - firstTextTokenAt),\n timeToLastTokenMs: Math.max(\n 0,\n lastTextTokenAt - modelRequestStartedAt,\n ),\n };\n\n const endTrace = (\n span: ReasonTraceSpan | undefined,\n result: RunReasonEngineResult,\n ): void => {\n span?.end?.({\n ...(result.usage !== undefined ? { usage: result.usage } : {}),\n ...(result.finishReason !== undefined\n ? { finishReason: result.finishReason }\n : {}),\n ...(result.providerMetadata !== undefined\n ? { providerMetadata: result.providerMetadata }\n : {}),\n ...(result.warnings !== undefined ? { warnings: result.warnings } : {}),\n attributes: {\n textLength: result.text.length,\n ...generationTimingAttributes(),\n },\n telemetry: {\n ...(args.telemetry ?? {}),\n output: args.telemetry?.output ?? result.text,\n },\n });\n };\n\n const failTrace = (\n span: ReasonTraceSpan | undefined,\n error: unknown,\n ): void => {\n const detail = error as Partial<RunReasonEngineResult> | undefined;\n try {\n span?.fail?.(error, {\n ...(detail?.usage ? { usage: detail.usage } : {}),\n ...(detail?.finishReason ? { finishReason: detail.finishReason } : {}),\n ...(detail?.providerMetadata\n ? { providerMetadata: detail.providerMetadata }\n : {}),\n attributes: {\n providerId: args.model.provider.id,\n modelId: args.model.modelId,\n },\n });\n } catch {\n /* Reporting must not replace the execution failure. */\n }\n };\n\n try {\n if (stream) {\n let continuation: KortyxContinuation | undefined;\n let final = \"\";\n let raw: unknown;\n let usage: KortyxUsage | undefined;\n let finishReason: KortyxFinishReason | undefined;\n let toolCalls: KortyxToolCall[] | undefined;\n let providerMetadata: KortyxProviderMetadata | undefined;\n let warnings: KortyxWarning[] | undefined;\n\n if (emit) {\n emitNodeEvent(args.emitEvent, args.nodeId, \"text-start\", {\n ...commonMeta,\n });\n }\n\n const response = await model.stream(messages);\n for await (const chunk of response) {\n throwIfExecutionAborted(abortSignal);\n switch (chunk.type) {\n case \"text-delta\": {\n if (chunk.delta.length === 0) break;\n const tokenAt = Date.now();\n firstTextTokenAt ??= tokenAt;\n lastTextTokenAt = tokenAt;\n final += chunk.delta;\n args.onTextChunk?.(chunk.delta);\n if (chunk.raw !== undefined) {\n raw = chunk.raw;\n }\n if (chunk.providerMetadata !== undefined) {\n providerMetadata = chunk.providerMetadata;\n }\n if (emit) {\n emitNodeEvent(args.emitEvent, args.nodeId, \"text-delta\", {\n ...commonMeta,\n delta: chunk.delta,\n });\n }\n break;\n }\n case \"finish\": {\n continuation = chunk.continuation;\n if (chunk.raw !== undefined) {\n raw = chunk.raw;\n }\n if (chunk.usage !== undefined) {\n usage = chunk.usage;\n }\n if (chunk.finishReason !== undefined) {\n finishReason = chunk.finishReason;\n }\n if (chunk.toolCalls !== undefined) {\n toolCalls = chunk.toolCalls;\n }\n if (chunk.providerMetadata !== undefined) {\n providerMetadata = chunk.providerMetadata;\n }\n if (chunk.warnings !== undefined) {\n warnings = chunk.warnings;\n }\n break;\n }\n case \"raw\": {\n raw = chunk.raw;\n if (chunk.providerMetadata !== undefined) {\n providerMetadata = chunk.providerMetadata;\n }\n break;\n }\n case \"error\": {\n if (chunk.raw !== undefined) {\n raw = chunk.raw;\n }\n if (chunk.providerMetadata !== undefined) {\n providerMetadata = chunk.providerMetadata;\n }\n if (chunk.warnings !== undefined) {\n warnings = chunk.warnings;\n }\n throw toError(chunk.error);\n }\n }\n }\n\n throwIfExecutionAborted(abortSignal);\n assertModelFinish({ finishReason, usage });\n if (emit) {\n emitNodeEvent(args.emitEvent, args.nodeId, \"text-end\", {\n ...commonMeta,\n });\n }\n\n const result = {\n text: final,\n ...(continuation ? { continuation } : {}),\n ...(raw !== undefined ? { raw } : {}),\n ...(usage !== undefined ? { usage } : {}),\n ...(finishReason !== undefined ? { finishReason } : {}),\n ...(toolCalls !== undefined ? { toolCalls } : {}),\n ...(providerMetadata !== undefined ? { providerMetadata } : {}),\n ...(warnings !== undefined ? { warnings } : {}),\n };\n throwIfExecutionAborted(abortSignal);\n endTrace(traceSpan, result);\n return result;\n }\n\n const response = await model.invoke(messages);\n throwIfExecutionAborted(abortSignal);\n assertModelFinish(response);\n if (response.content) args.onTextChunk?.(response.content);\n\n if (emit) {\n emitNodeEvent(args.emitEvent, args.nodeId, \"text-start\", {\n ...commonMeta,\n });\n if (response.content) {\n emitNodeEvent(args.emitEvent, args.nodeId, \"text-delta\", {\n ...commonMeta,\n delta: response.content,\n });\n }\n emitNodeEvent(args.emitEvent, args.nodeId, \"text-end\", {\n ...commonMeta,\n });\n }\n\n const result = {\n text: response.content,\n ...(response.continuation ? { continuation: response.continuation } : {}),\n ...(response.raw !== undefined ? { raw: response.raw } : {}),\n ...(response.usage !== undefined ? { usage: response.usage } : {}),\n ...(response.finishReason !== undefined\n ? { finishReason: response.finishReason }\n : {}),\n ...(response.toolCalls !== undefined\n ? { toolCalls: response.toolCalls }\n : {}),\n ...(response.providerMetadata !== undefined\n ? { providerMetadata: response.providerMetadata }\n : {}),\n ...(response.warnings !== undefined\n ? { warnings: response.warnings }\n : {}),\n };\n endTrace(traceSpan, result);\n return result;\n } catch (error) {\n const failure = abortSignal?.aborted\n ? createExecutionCancelledError()\n : error;\n failTrace(traceSpan, failure);\n throw failure;\n }\n}\n\nexport function runReasonEngine(\n args: RunReasonEngineArgs,\n): Promise<RunReasonEngineResult> {\n return usage.measure(\"sdk.model\", () => runReasonEngineInternal(args), {\n provider: args.model.provider.id,\n requested_streaming: args.stream ?? args.model.options?.streaming ?? true,\n tools: Boolean((args.tools ?? args.model.options?.tools)?.length),\n format:\n args.responseFormat?.type ??\n args.model.options?.responseFormat?.type ??\n \"text\",\n });\n}\n","import type {\n ReasonTraceAdapter,\n ReasonTraceAttributes,\n ReasonTraceSpan,\n ReasonTraceSpanEndArgs,\n ReasonTraceSpanStartArgs,\n} from \"./tracing\";\n\n/** Observation callbacks never participate in execution's error path. */\nexport function safeSpan(span: ReasonTraceSpan | undefined): ReasonTraceSpan {\n const guard =\n <T extends unknown[]>(fn: ((...args: T) => void) | undefined) =>\n (...args: T) => {\n try {\n fn?.(...args);\n } catch {}\n };\n let ended = false;\n const finish =\n <T extends unknown[]>(fn: ((...args: T) => void) | undefined) =>\n (...args: T) => {\n if (ended) return;\n ended = true;\n guard(fn)(...args);\n };\n return {\n addEvent: guard((name: string, attributes?: ReasonTraceAttributes) =>\n span?.addEvent?.(name, attributes),\n ),\n setAttributes: guard((attributes: ReasonTraceAttributes) =>\n span?.setAttributes?.(attributes),\n ),\n end: finish((args?: ReasonTraceSpanEndArgs) => span?.end?.(args)),\n fail: finish((error: unknown, args?: ReasonTraceSpanEndArgs) => {\n if (span?.fail) span.fail(error, args);\n else span?.end?.(args);\n }),\n };\n}\n\nexport function safeStartSpan(\n adapter: Partial<ReasonTraceAdapter> | undefined,\n args: ReasonTraceSpanStartArgs,\n): ReasonTraceSpan {\n try {\n return safeSpan(adapter?.startSpan?.(args));\n } catch {\n return safeSpan(undefined);\n }\n}\n\n/** Retains active adapter context, and never retries a callback if observation fails. */\nexport async function withSafeTraceSpan<T>(\n adapter: Partial<ReasonTraceAdapter> | undefined,\n args: ReasonTraceSpanStartArgs,\n fn: (span: ReasonTraceSpan) => Promise<T>,\n): Promise<T> {\n let execution: Promise<T> | undefined;\n const invoke = (span: ReasonTraceSpan) => {\n execution ??= Promise.resolve().then(async () => {\n const observed = safeSpan(span);\n try {\n const result = await fn(observed);\n observed.end?.();\n return result;\n } catch (error) {\n observed.fail?.(error);\n throw error;\n }\n });\n return execution;\n };\n let activeScope: ReasonTraceAdapter[\"withSpan\"];\n try {\n activeScope = adapter?.withSpan?.bind(adapter);\n } catch {}\n if (activeScope) {\n let started: (() => void) | undefined;\n const invoked = new Promise<void>((resolve) => {\n started = resolve;\n });\n const observe = async () => {\n try {\n await activeScope(args, (span) => {\n const result = invoke(span);\n started?.();\n return result;\n });\n } catch {\n /* The execution promise preserves its own failure. */\n }\n };\n const observation = observe();\n // Delivery or adapter work after the callback must not hold up execution.\n if (!execution) await Promise.race([invoked, observation]);\n } else {\n await invoke(safeStartSpan(adapter, args)).catch(() => {});\n }\n return execution ?? invoke(safeSpan(undefined));\n}\n","import type { UsageTelemetry } from \"@kortyx/usage-telemetry\";\nimport { getUsageTelemetry } from \"@kortyx/usage-telemetry/node\";\nimport packageJson from \"../package.json\";\n\nconst client = () => getUsageTelemetry(\"hooks\", packageJson.version);\nexport const usage: Pick<\n UsageTelemetry,\n \"start\" | \"feature\" | \"measure\" | \"flush\"\n> = {\n start: (...args) => client().start(...args),\n feature: (...args) => client().feature(...args),\n measure: (...args) => client().measure(...args),\n flush: () => client().flush(),\n};\n","{\n \"name\": \"@kortyx/hooks\",\n \"version\": \"0.34.0\",\n \"private\": false,\n \"description\": \"Lifecycle hooks and extension points for Kortyx.\",\n \"keywords\": [\n \"ai\",\n \"agent\",\n \"agents\",\n \"orchestration\",\n \"framework\",\n \"hooks\",\n \"kortyx\"\n ],\n \"license\": \"Apache-2.0\",\n \"homepage\": \"https://kortyx.io/\",\n \"bugs\": {\n \"url\": \"https://github.com/kortyx-io/kortyx/issues\"\n },\n \"author\": \"Kortyx (https://github.com/kortyx-io)\",\n \"main\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n },\n \"./internal\": {\n \"types\": \"./dist/internal.d.ts\",\n \"default\": \"./dist/internal.js\"\n }\n },\n \"files\": [\n \"dist/**\",\n \"README.md\",\n \"CHANGELOG.md\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"predev\": \"tsc -p tsconfig.build.json\",\n \"dev\": \"tsc --watch\",\n \"lint\": \"biome check src\",\n \"test\": \"vitest run && pnpm -s type-check\",\n \"coverage\": \"vitest run --coverage && pnpm -s type-check\",\n \"test:watch\": \"vitest\",\n \"type-check\": \"tsc --noEmit -p tsconfig.test.json\"\n },\n \"dependencies\": {\n \"@kortyx/core\": \"workspace:*\",\n \"@kortyx/providers\": \"workspace:*\",\n \"@kortyx/telemetry-contracts\": \"workspace:*\",\n \"zod\": \"catalog:\",\n \"@kortyx/prompts\": \"workspace:*\",\n \"@kortyx/usage-telemetry\": \"workspace:*\"\n },\n \"devDependencies\": {\n \"turbo\": \"catalog:\",\n \"typescript\": \"catalog:\",\n \"tsup\": \"catalog:\",\n \"vitest\": \"catalog:\",\n \"@vitest/coverage-v8\": \"catalog:\"\n },\n \"sideEffects\": false,\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/kortyx-io/kortyx.git\",\n \"directory\": \"packages/hooks\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","/** Strip credential-shaped fields before metadata reaches any adapter/exporter. */\nconst privateField =\n /^(?:password|passwd|secret|clientsecret|privatekey|credential|credentials|authorization|bearer|bearertoken|jwt|token|accesstoken|refreshtoken|authtoken|apikey|apisecret|cookie|setcookie|resumehandle|resumetoken)$/;\nexport function safeTelemetryMetadata(\n value: Record<string, unknown>,\n): Record<string, unknown> {\n const seen = new WeakSet<object>();\n const visit = (input: unknown, depth: number): unknown => {\n if (depth > 8 || typeof input === \"function\" || typeof input === \"symbol\")\n return undefined;\n if (!input || typeof input !== \"object\") return input;\n if (seen.has(input)) return undefined;\n seen.add(input);\n if (Array.isArray(input))\n return input.map((item) => visit(item, depth + 1));\n return Object.fromEntries(\n Object.entries(input).flatMap(([key, nested]) =>\n privateField.test(key.toLowerCase().replace(/[^a-z0-9]/g, \"\"))\n ? []\n : [[key, visit(nested, depth + 1)]],\n ),\n );\n };\n try {\n return visit(value, 0) as Record<string, unknown>;\n } catch {\n return {};\n }\n}\n"],"mappings":"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","names":["import_telemetry_contracts","import_telemetry_contracts","import_errors","usage","response","result"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kortyx/hooks",
3
- "version": "0.32.1",
3
+ "version": "0.34.0",
4
4
  "private": false,
5
5
  "description": "Lifecycle hooks and extension points for Kortyx.",
6
6
  "keywords": [
@@ -37,9 +37,11 @@
37
37
  ],
38
38
  "dependencies": {
39
39
  "zod": "^4.3.6",
40
- "@kortyx/core": "0.13.0",
41
- "@kortyx/telemetry-contracts": "0.15.0",
42
- "@kortyx/providers": "0.9.1"
40
+ "@kortyx/core": "0.13.1",
41
+ "@kortyx/providers": "0.9.2",
42
+ "@kortyx/telemetry-contracts": "0.17.0",
43
+ "@kortyx/prompts": "0.2.0",
44
+ "@kortyx/usage-telemetry": "0.2.0"
43
45
  },
44
46
  "devDependencies": {
45
47
  "turbo": "2.9.14",