@kortyx/hooks 0.34.0 → 0.34.1

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
@@ -380,7 +380,7 @@ var import_node = require("@kortyx/usage-telemetry/node");
380
380
  // package.json
381
381
  var package_default = {
382
382
  name: "@kortyx/hooks",
383
- version: "0.34.0",
383
+ version: "0.34.1",
384
384
  private: false,
385
385
  description: "Lifecycle hooks and extension points for Kortyx.",
386
386
  keywords: [
@@ -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/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"]}
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.1\",\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.34.0",
3
+ "version": "0.34.1",
4
4
  "private": false,
5
5
  "description": "Lifecycle hooks and extension points for Kortyx.",
6
6
  "keywords": [
@@ -38,10 +38,10 @@
38
38
  "dependencies": {
39
39
  "zod": "^4.3.6",
40
40
  "@kortyx/core": "0.13.1",
41
- "@kortyx/providers": "0.9.2",
42
- "@kortyx/telemetry-contracts": "0.17.0",
41
+ "@kortyx/telemetry-contracts": "0.17.1",
43
42
  "@kortyx/prompts": "0.2.0",
44
- "@kortyx/usage-telemetry": "0.2.0"
43
+ "@kortyx/usage-telemetry": "0.2.0",
44
+ "@kortyx/providers": "0.9.2"
45
45
  },
46
46
  "devDependencies": {
47
47
  "turbo": "2.9.14",