@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/CHANGELOG.md +38 -0
- package/dist/index.d.ts +23 -3
- package/dist/index.js +267 -38
- package/dist/index.js.map +1 -1
- package/dist/internal.js +104 -5
- package/dist/internal.js.map +1 -1
- package/package.json +6 -4
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
|
|
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
|
|
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
|
-
|
|
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
|
-
...
|
|
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)$/;
|
package/dist/internal.js.map
CHANGED
|
@@ -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.
|
|
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.
|
|
41
|
-
"@kortyx/
|
|
42
|
-
"@kortyx/
|
|
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",
|