@kortyx/hooks 0.10.0 → 0.10.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/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.10.1](https://github.com/kortyx-io/kortyx/compare/hooks-v0.10.0...hooks-v0.10.1) (2026-05-03)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * update vulnerable dependency versions ([274bc41](https://github.com/kortyx-io/kortyx/commit/274bc410fe04d53da9db941ef8d62407dadd4c54))
9
+
10
+
11
+ ### Dependencies
12
+
13
+ * The following workspace dependencies were updated
14
+ * dependencies
15
+ * @kortyx/core bumped to 0.5.1
16
+
3
17
  ## [0.10.0](https://github.com/kortyx-io/kortyx/compare/hooks-v0.9.1...hooks-v0.10.0) (2026-04-25)
4
18
 
5
19
 
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/context.ts","../src/validation.ts","../src/interrupt.ts","../src/structured.ts","../src/structured-path.ts","../src/reason/checkpoint.ts","../src/reason/engine.ts","../src/reason-engine.ts","../src/reason/parsing.ts","../src/reason/prompting.ts","../src/reason/structured-stream.ts","../src/reason/use-reason.ts","../src/hooks.ts"],"sourcesContent":["// release-test: 2026-01-22\n/**\n * @kortyx/hooks\n *\n * Internal hook implementations resolved via async-local context.\n */\n\nexport type { HookRuntimeContext } from \"./context\";\nexport { runWithHookContext } from \"./context\";\nexport type {\n UseInterruptArgs,\n UseReasonArgs,\n UseReasonResult,\n UseStructuredDataArgs,\n} from \"./hooks\";\nexport {\n useInterrupt,\n useNodeState,\n useReason,\n useStructuredData,\n useWorkflowState,\n} from \"./hooks\";\nexport type {\n ReasonTraceAdapter,\n ReasonTraceAttributes,\n ReasonTraceSpan,\n ReasonTraceSpanEndArgs,\n ReasonTraceSpanStartArgs,\n} from \"./tracing\";\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport type { GraphState, NodeContext, TokenUsage } from \"@kortyx/core\";\nimport type { KortyxUsage } from \"@kortyx/providers\";\nimport type { ReasonTraceAdapter } from \"./tracing\";\n\ntype NodeStateStore = {\n byIndex: unknown[];\n byKey: Record<string, unknown>;\n};\n\ntype HookRuntimeState = {\n nodeState?: Record<string, unknown>;\n workflowState?: Record<string, unknown>;\n};\n\ntype StoredNodeStateEnvelope = {\n nodeId?: unknown;\n state?: unknown;\n};\n\ntype HookStatePatchedError = {\n __kortyxHookStatePatch?: Record<string, unknown>;\n};\n\nexport type HookRuntimeContext = {\n node: NodeContext;\n state: GraphState;\n reasonTrace?: ReasonTraceAdapter | undefined;\n};\n\ntype HookInternalContext = HookRuntimeContext & {\n nodeStateIndex: number;\n reasonCallIndex: number;\n currentNodeState: NodeStateStore;\n workflowState: Record<string, unknown>;\n tokenUsage?: TokenUsage | undefined;\n stateDirty: boolean;\n runtimeDirty: boolean;\n};\n\nconst storage = new AsyncLocalStorage<HookInternalContext>();\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n\nconst normalizeNodeState = (value: unknown): NodeStateStore => {\n if (Array.isArray(value)) {\n return { byIndex: [...value], byKey: {} };\n }\n\n if (isRecord(value)) {\n const byIndex = Array.isArray(value.byIndex) ? [...value.byIndex] : [];\n const byKey = isRecord(value.byKey) ? { ...value.byKey } : {};\n return { byIndex, byKey };\n }\n\n return { byIndex: [], byKey: {} };\n};\n\nconst cloneWorkflowState = (value: unknown): Record<string, unknown> =>\n isRecord(value) ? { ...value } : {};\n\nconst cloneTokenUsage = (value: unknown): TokenUsage | undefined => {\n if (!isRecord(value)) return undefined;\n const input = typeof value.input === \"number\" ? value.input : undefined;\n const output = typeof value.output === \"number\" ? value.output : undefined;\n const total = typeof value.total === \"number\" ? value.total : undefined;\n if (input === undefined && output === undefined && total === undefined) {\n return undefined;\n }\n return {\n input: input ?? 0,\n output: output ?? 0,\n total: total ?? 0,\n };\n};\n\nconst getHookRuntimeState = (state: GraphState): HookRuntimeState => {\n const runtime = (state.runtime ?? {}) as Record<string, unknown>;\n const internal = isRecord(runtime.__kortyx) ? runtime.__kortyx : undefined;\n const result: HookRuntimeState = {};\n if (isRecord(internal?.nodeState)) result.nodeState = internal?.nodeState;\n if (isRecord(internal?.workflowState)) {\n result.workflowState = internal?.workflowState;\n }\n return result;\n};\n\nconst createInternalContext = (\n ctx: HookRuntimeContext,\n): HookInternalContext => {\n const hookRuntimeState = getHookRuntimeState(ctx.state);\n const nodeId = ctx.node.graph.node;\n const storedNodeState = isRecord(hookRuntimeState.nodeState)\n ? (hookRuntimeState.nodeState as StoredNodeStateEnvelope)\n : undefined;\n const storedNodeId =\n typeof storedNodeState?.nodeId === \"string\"\n ? String(storedNodeState.nodeId)\n : \"\";\n const storedState = storedNodeState?.state;\n const currentNodeState =\n storedNodeId && storedNodeId === nodeId\n ? normalizeNodeState(storedState)\n : { byIndex: [], byKey: {} };\n\n return {\n ...ctx,\n nodeStateIndex: 0,\n reasonCallIndex: 0,\n currentNodeState,\n workflowState: cloneWorkflowState(hookRuntimeState.workflowState),\n tokenUsage: cloneTokenUsage(ctx.state.runtime?.tokenUsage),\n stateDirty: false,\n runtimeDirty: false,\n };\n};\n\nconst buildRuntimeStateUpdates = (ctx: HookInternalContext) => {\n const updates: Record<string, unknown> = {};\n\n if (ctx.stateDirty) {\n updates.__kortyx = {\n nodeState: {\n nodeId: ctx.node.graph.node,\n state: ctx.currentNodeState,\n },\n workflowState: ctx.workflowState,\n };\n }\n\n if (ctx.runtimeDirty && ctx.tokenUsage) {\n updates.tokenUsage = ctx.tokenUsage;\n }\n\n return Object.keys(updates).length > 0 ? updates : null;\n};\n\nconst toTokenUsageDelta = (\n usage: KortyxUsage | undefined,\n): TokenUsage | undefined => {\n if (!usage) return undefined;\n\n const input = usage.input ?? 0;\n const output = usage.output ?? 0;\n const total = usage.total ?? input + output + (usage.reasoning ?? 0);\n\n if (input === 0 && output === 0 && total === 0) {\n return undefined;\n }\n\n return {\n input,\n output,\n total,\n };\n};\n\nexport function accumulateTokenUsage(usage: KortyxUsage | undefined): void {\n const delta = toTokenUsageDelta(usage);\n if (!delta) return;\n\n const ctx = getHookContext();\n const current = ctx.tokenUsage ?? {\n input: 0,\n output: 0,\n total: 0,\n };\n\n ctx.tokenUsage = {\n input: current.input + delta.input,\n output: current.output + delta.output,\n total: current.total + delta.total,\n };\n ctx.runtimeDirty = true;\n}\n\nexport function getReasonTraceAdapter(): ReasonTraceAdapter | undefined {\n return getHookContext().reasonTrace;\n}\n\nexport async function runWithHookContext<T>(\n ctx: HookRuntimeContext,\n fn: () => Promise<T>,\n): Promise<{ result: T; runtimeUpdates: Record<string, unknown> | null }> {\n const internal = createInternalContext(ctx);\n try {\n const result = await storage.run(internal, fn);\n return { result, runtimeUpdates: buildRuntimeStateUpdates(internal) };\n } catch (err) {\n const runtimeUpdates = buildRuntimeStateUpdates(internal);\n if (runtimeUpdates) {\n const currentRuntime = isRecord(internal.state.runtime)\n ? (internal.state.runtime as Record<string, unknown>)\n : {};\n internal.state.runtime = {\n ...currentRuntime,\n ...runtimeUpdates,\n } as unknown as GraphState[\"runtime\"];\n if (err && typeof err === \"object\") {\n (err as HookStatePatchedError).__kortyxHookStatePatch = runtimeUpdates;\n }\n }\n throw err;\n }\n}\n\nexport function getHookContext(): HookInternalContext {\n const ctx = storage.getStore();\n if (!ctx) {\n throw new Error(\"Hooks can only be used while a node is executing.\");\n }\n return ctx;\n}\n","import type { SchemaLike } from \"./types\";\n\nexport const parseWithSchema = <T>(\n schema: SchemaLike<T> | undefined,\n value: unknown,\n label: string,\n): T => {\n if (!schema) return value as T;\n\n const parsed = schema.safeParse(value);\n if (parsed.success) return parsed.data;\n\n const parsedError =\n \"error\" in parsed && parsed.error ? parsed.error : undefined;\n const reason =\n typeof parsedError?.message === \"string\" && parsedError.message.length > 0\n ? parsedError.message\n : \"invalid payload\";\n throw new Error(`${label} validation failed: ${reason}`);\n};\n","import type { InterruptInput, InterruptResult } from \"@kortyx/core\";\nimport { getHookContext } from \"./context\";\nimport type { UseInterruptArgs } from \"./types\";\nimport { parseWithSchema } from \"./validation\";\n\nexport const awaitInterruptInternal = <\n TRequest extends InterruptInput = InterruptInput,\n TResponse = InterruptResult,\n>(\n args: UseInterruptArgs<TRequest, TResponse>,\n): Promise<TResponse> => {\n const ctx = getHookContext();\n\n const request = parseWithSchema(\n args.requestSchema,\n args.request,\n \"useInterrupt request\",\n );\n\n const enrichedRequest = {\n ...request,\n ...(typeof args.schemaId === \"string\" && args.schemaId.length > 0\n ? { schemaId: args.schemaId }\n : {}),\n ...(typeof args.schemaVersion === \"string\" && args.schemaVersion.length > 0\n ? { schemaVersion: args.schemaVersion }\n : {}),\n ...(typeof args.id === \"string\" && args.id.length > 0\n ? { id: args.id }\n : {}),\n ...(args.meta && typeof args.meta === \"object\" && !Array.isArray(args.meta)\n ? { meta: args.meta }\n : {}),\n } as InterruptInput;\n\n const raw = ctx.node.awaitInterrupt(enrichedRequest);\n const response = parseWithSchema(\n args.responseSchema,\n raw,\n \"useInterrupt response\",\n );\n\n return Promise.resolve(response);\n};\n","import { randomUUID } from \"node:crypto\";\nimport { getHookContext } from \"./context\";\nimport { assertStructuredPath } from \"./structured-path\";\nimport type { UseReasonStructuredConfig, UseStructuredDataArgs } from \"./types\";\nimport { parseWithSchema } from \"./validation\";\n\nconst createStructuredStreamId = (): string => {\n try {\n return randomUUID();\n } catch {\n return `${Date.now()}-${Math.random().toString(36).slice(2)}`;\n }\n};\n\nexport const emitStructuredData = <TData = unknown>(\n args: UseStructuredDataArgs<TData>,\n): void => {\n const ctx = getHookContext();\n const streamId =\n typeof args.streamId === \"string\" && args.streamId.length > 0\n ? args.streamId\n : createStructuredStreamId();\n const dataType =\n typeof args.dataType === \"string\" && args.dataType.length > 0\n ? args.dataType\n : \"generic\";\n\n const base = {\n node: ctx.node.graph.node,\n streamId,\n dataType,\n ...(typeof args.schemaId === \"string\" && args.schemaId.length > 0\n ? { schemaId: args.schemaId }\n : {}),\n ...(typeof args.schemaVersion === \"string\" && args.schemaVersion.length > 0\n ? { schemaVersion: args.schemaVersion }\n : {}),\n ...(typeof args.id === \"string\" && args.id.length > 0\n ? { id: args.id }\n : {}),\n };\n\n if (args.kind === \"set\") {\n assertStructuredPath(args.path, \"useStructuredData\");\n const value = parseWithSchema(\n args.valueSchema,\n args.value,\n \"useStructuredData value\",\n );\n ctx.node.emit(\"structured_data\", {\n ...base,\n kind: \"set\",\n path: args.path,\n value,\n });\n return;\n }\n\n if (args.kind === \"append\") {\n assertStructuredPath(args.path, \"useStructuredData\");\n const items = args.items.map((item) =>\n parseWithSchema(args.itemSchema, item, \"useStructuredData append item\"),\n );\n ctx.node.emit(\"structured_data\", {\n ...base,\n kind: \"append\",\n path: args.path,\n items,\n });\n return;\n }\n\n if (args.kind === \"text-delta\") {\n assertStructuredPath(args.path, \"useStructuredData\");\n ctx.node.emit(\"structured_data\", {\n ...base,\n kind: \"text-delta\",\n path: args.path,\n delta: args.delta,\n });\n return;\n }\n\n const validated = parseWithSchema(\n args.dataSchema,\n args.data,\n \"useStructuredData data\",\n );\n\n ctx.node.emit(\"structured_data\", {\n ...base,\n kind: \"final\",\n data: validated,\n });\n};\n\nexport const shouldEmitStructured = (\n cfg: UseReasonStructuredConfig | undefined,\n): boolean => Boolean(cfg) && (cfg?.stream ?? true);\n","export const parseStructuredPath = (path: string, source: string): string[] => {\n if (path.length === 0) {\n throw new Error(`${source} path must be a non-empty dot-separated string.`);\n }\n\n const parts = path.split(\".\");\n if (parts.some((part) => part.length === 0)) {\n throw new Error(\n `${source} path \"${path}\" must not contain empty segments.`,\n );\n }\n\n return parts;\n};\n\nexport const assertStructuredPath = (path: string, source: string): void => {\n parseStructuredPath(path, source);\n};\n","import type { InterruptInput } from \"@kortyx/core\";\nimport type {\n KortyxFinishReason,\n KortyxProviderMetadata,\n KortyxUsage,\n KortyxWarning,\n} from \"@kortyx/providers\";\n\nexport type ReasonInterruptCheckpoint = {\n status: \"awaiting_interrupt\";\n request: InterruptInput;\n firstText: string;\n firstRaw?: unknown;\n firstUsage?: KortyxUsage;\n firstFinishReason?: KortyxFinishReason;\n firstProviderMetadata?: KortyxProviderMetadata;\n firstWarnings?: KortyxWarning[];\n firstOutput?: unknown;\n};\n\nexport const resolveReasonCheckpointKey = (args: {\n id?: string;\n autoIndex: number;\n}): string =>\n typeof args.id === \"string\" && args.id.length > 0\n ? `__useReason:${args.id}`\n : `__useReason:auto:${args.autoIndex}`;\n\nexport const readReasonCheckpoint = (\n raw: unknown,\n): ReasonInterruptCheckpoint | undefined => {\n if (!raw || typeof raw !== \"object\") return undefined;\n const value = raw as Record<string, unknown>;\n if (value.status !== \"awaiting_interrupt\") return undefined;\n if (typeof value.firstText !== \"string\") return undefined;\n if (!value.request || typeof value.request !== \"object\") return undefined;\n return {\n status: \"awaiting_interrupt\",\n request: value.request as InterruptInput,\n firstText: value.firstText,\n ...(Object.hasOwn(value, \"firstRaw\") ? { firstRaw: value.firstRaw } : {}),\n ...(Object.hasOwn(value, \"firstUsage\")\n ? { firstUsage: value.firstUsage as KortyxUsage }\n : {}),\n ...(Object.hasOwn(value, \"firstFinishReason\")\n ? { firstFinishReason: value.firstFinishReason as KortyxFinishReason }\n : {}),\n ...(Object.hasOwn(value, \"firstProviderMetadata\")\n ? {\n firstProviderMetadata:\n value.firstProviderMetadata as KortyxProviderMetadata,\n }\n : {}),\n ...(Object.hasOwn(value, \"firstWarnings\")\n ? { firstWarnings: value.firstWarnings as KortyxWarning[] }\n : {}),\n ...(Object.hasOwn(value, \"firstOutput\")\n ? { firstOutput: value.firstOutput }\n : {}),\n };\n};\n\nexport const resolveHookStatePatch = (args: {\n nodeId: string;\n currentNodeState: unknown;\n workflowState: Record<string, unknown>;\n}): Record<string, unknown> => ({\n __kortyx: {\n nodeState: {\n nodeId: args.nodeId,\n state: args.currentNodeState,\n },\n workflowState: args.workflowState,\n },\n});\n","import { randomUUID } from \"node:crypto\";\nimport type {\n KortyxReasoningOptions,\n KortyxResponseFormat,\n ProviderModelRef,\n} from \"@kortyx/providers\";\nimport { getHookContext } from \"../context\";\nimport type { RunReasonEngineResult } from \"../reason-engine\";\nimport { runReasonEngine } from \"../reason-engine\";\n\nexport type ReasonEngineInput = {\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 emit?: boolean | undefined;\n stream?: boolean | undefined;\n onTextChunk?: ((text: string) => void) | undefined;\n};\n\nexport const createRuntimeId = (): string => {\n try {\n return randomUUID();\n } catch {\n return `${Date.now()}-${Math.random().toString(36).slice(2)}`;\n }\n};\n\nexport async function reasonEngine(\n args: ReasonEngineInput,\n meta: { id?: string; opId: string },\n inputOverride?: string,\n): Promise<RunReasonEngineResult> {\n const ctx = getHookContext();\n\n return runReasonEngine({\n model: args.model,\n input: inputOverride ?? args.input,\n system: args.system,\n temperature: args.temperature,\n maxOutputTokens: args.maxOutputTokens,\n stopSequences: args.stopSequences,\n abortSignal: args.abortSignal,\n reasoning: args.reasoning,\n responseFormat: args.responseFormat,\n providerOptions: args.providerOptions,\n defaultTemperature: ctx.node.config?.model?.temperature,\n stream: args.stream,\n emit: args.emit,\n onTextChunk: args.onTextChunk,\n nodeId: ctx.node.graph.node,\n emitEvent: ctx.node.emit,\n reasonTrace: ctx.reasonTrace,\n id: meta.id,\n opId: meta.opId,\n });\n}\n","import { randomUUID } from \"node:crypto\";\nimport type {\n KortyxFinishReason,\n KortyxPromptMessage,\n KortyxProviderMetadata,\n KortyxReasoningOptions,\n KortyxResponseFormat,\n KortyxStreamPart,\n KortyxUsage,\n KortyxWarning,\n ProviderModelRef,\n} from \"@kortyx/providers\";\nimport type { ReasonTraceAdapter, ReasonTraceSpan } from \"./tracing\";\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 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 reasonTrace?: ReasonTraceAdapter | undefined;\n}\n\nexport interface RunReasonEngineResult {\n text: string;\n raw?: unknown;\n usage?: KortyxUsage;\n finishReason?: KortyxFinishReason;\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 async function runReasonEngine(\n args: RunReasonEngineArgs,\n): Promise<RunReasonEngineResult> {\n const 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 =\n args.providerOptions ?? args.model.options?.providerOptions;\n\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 ...(providerOptions !== undefined ? { providerOptions } : {}),\n });\n\n const messages: KortyxPromptMessage[] = [];\n if (typeof args.system === \"string\" && args.system.length > 0) {\n messages.push({ role: \"system\", content: args.system });\n }\n messages.push({ role: \"user\", content: String(args.input ?? \"\") });\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 = args.reasonTrace?.startSpan({\n name: \"runReasonEngine\",\n attributes: {\n ...commonMeta,\n providerId: args.model.provider.id,\n modelId: args.model.modelId,\n stream,\n emit,\n ...(typeof args.nodeId === \"string\" && args.nodeId.length > 0\n ? { nodeId: args.nodeId }\n : {}),\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 },\n });\n };\n\n const failTrace = (\n span: ReasonTraceSpan | undefined,\n error: unknown,\n ): void => {\n span?.fail?.(error, {\n attributes: {\n providerId: args.model.provider.id,\n modelId: args.model.modelId,\n },\n });\n };\n\n try {\n if (stream) {\n let final = \"\";\n let raw: unknown;\n let usage: KortyxUsage | undefined;\n let finishReason: KortyxFinishReason | 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 switch (chunk.type) {\n case \"text-delta\": {\n if (chunk.delta.length === 0) break;\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 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.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 if (emit) {\n emitNodeEvent(args.emitEvent, args.nodeId, \"text-end\", {\n ...commonMeta,\n });\n }\n\n const result = {\n text: final,\n ...(raw !== undefined ? { raw } : {}),\n ...(usage !== undefined ? { usage } : {}),\n ...(finishReason !== undefined ? { finishReason } : {}),\n ...(providerMetadata !== undefined ? { providerMetadata } : {}),\n ...(warnings !== undefined ? { warnings } : {}),\n };\n endTrace(traceSpan, result);\n return result;\n }\n\n const response = await model.invoke(messages);\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.raw !== undefined ? { raw: response.raw } : {}),\n ...(response.usage !== undefined ? { usage: response.usage } : {}),\n ...(response.finishReason !== undefined\n ? { finishReason: response.finishReason }\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 failTrace(traceSpan, error);\n throw error;\n }\n}\n","import type { InterruptInput } from \"@kortyx/core\";\nimport type { KortyxFinishReason } from \"@kortyx/providers\";\nimport type { SchemaLike } from \"../types\";\nimport { parseWithSchema } from \"../validation\";\n\nconst tryJsonParse = (\n value: string,\n): { ok: true; value: unknown } | { ok: false; error?: string | undefined } => {\n try {\n return { ok: true, value: JSON.parse(value) };\n } catch (error) {\n return {\n ok: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n};\n\nconst extractJsonCodeBlock = (value: string): string | null => {\n const match = value.match(/```(?:json)?\\s*([\\s\\S]*?)```/i);\n if (!match || typeof match[1] !== \"string\") return null;\n const inner = match[1].trim();\n return inner.length > 0 ? inner : null;\n};\n\nconst tryStringify = (value: unknown): string => {\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n\nexport const resolveOutputCandidate = (text: string): unknown => {\n const trimmed = text.trim();\n if (!trimmed) return text;\n\n const direct = tryJsonParse(trimmed);\n if (direct.ok) return direct.value;\n\n const block = extractJsonCodeBlock(trimmed);\n if (block) {\n const parsedBlock = tryJsonParse(block);\n if (parsedBlock.ok) return parsedBlock.value;\n }\n\n return text;\n};\n\nconst looksLikeStructuredJsonAttempt = (value: string): boolean => {\n const trimmed = value.trim();\n if (!trimmed) return false;\n\n return (\n trimmed.startsWith(\"{\") ||\n trimmed.startsWith(\"[\") ||\n /^```(?:json)?/i.test(trimmed)\n );\n};\n\nconst isLikelyTruncatedStructuredOutput = (text: string): boolean => {\n const trimmed = text.trim();\n if (!looksLikeStructuredJsonAttempt(trimmed)) return false;\n\n const direct = tryJsonParse(trimmed);\n if (!direct.ok && direct.error) return true;\n\n const block = extractJsonCodeBlock(trimmed);\n if (!block) return false;\n\n const parsedBlock = tryJsonParse(block);\n return !parsedBlock.ok && Boolean(parsedBlock.error);\n};\n\nconst createTruncatedStructuredOutputError = (label: string): Error =>\n new Error(\n `${label} was truncated before producing valid structured output. The model stopped due to output length. Increase maxOutputTokens or simplify the requested output.`,\n );\n\nconst createInvalidStructuredOutputError = (label: string): Error =>\n new Error(\n `${label} did not produce valid structured output. The model returned text instead of the expected JSON payload. This often happens when output is truncated or the provider does not follow JSON mode. Increase maxOutputTokens or simplify the requested output.`,\n );\n\nexport const parseReasonOutputWithSchema = <TOutput>(args: {\n text: string;\n schema: SchemaLike<TOutput>;\n finishReason?: KortyxFinishReason;\n label: string;\n}): TOutput => {\n const candidate = resolveOutputCandidate(args.text);\n\n try {\n return parseWithSchema(args.schema, candidate, args.label);\n } catch (error) {\n if (\n args.finishReason?.unified === \"length\" ||\n isLikelyTruncatedStructuredOutput(args.text)\n ) {\n throw createTruncatedStructuredOutputError(args.label);\n }\n if (typeof candidate === \"string\" && candidate.trim().length > 0) {\n throw createInvalidStructuredOutputError(args.label);\n }\n throw error;\n }\n};\n\nexport const parseInterruptFirstPassResult = <\n TRequest extends InterruptInput = InterruptInput,\n TOutput = unknown,\n>(args: {\n text: string;\n requestSchema: SchemaLike<TRequest>;\n outputSchema?: SchemaLike<TOutput>;\n finishReason?: KortyxFinishReason;\n}): {\n draftText: string;\n request: TRequest;\n output?: TOutput;\n} => {\n const candidate = resolveOutputCandidate(args.text);\n if (!isRecord(candidate)) {\n if (\n args.finishReason?.unified === \"length\" ||\n isLikelyTruncatedStructuredOutput(args.text)\n ) {\n throw createTruncatedStructuredOutputError(\"useReason output\");\n }\n if (typeof candidate === \"string\" && candidate.trim().length > 0) {\n throw createInvalidStructuredOutputError(\"useReason output\");\n }\n throw new Error(\n \"useReason first pass with interrupt must return a JSON object.\",\n );\n }\n\n const requestCandidates: unknown[] = [\n candidate.interruptRequest,\n candidate.request,\n candidate.interrupt,\n candidate,\n ];\n const requestPayload = requestCandidates.find(\n (value) => value !== null && value !== undefined,\n );\n\n const request = parseWithSchema(\n args.requestSchema,\n requestPayload,\n \"useReason interrupt.request\",\n );\n\n let output: TOutput | undefined;\n if (args.outputSchema) {\n const outputPayload = Object.hasOwn(candidate, \"output\")\n ? candidate.output\n : candidate;\n try {\n output = parseWithSchema(\n args.outputSchema,\n outputPayload,\n \"useReason output\",\n );\n } catch (error) {\n if (\n args.finishReason?.unified === \"length\" ||\n isLikelyTruncatedStructuredOutput(args.text)\n ) {\n throw createTruncatedStructuredOutputError(\"useReason output\");\n }\n if (\n typeof outputPayload === \"string\" &&\n outputPayload.trim().length > 0\n ) {\n throw createInvalidStructuredOutputError(\"useReason output\");\n }\n throw error;\n }\n }\n\n const explicitDraft =\n typeof candidate.draftText === \"string\" && candidate.draftText.length > 0\n ? candidate.draftText\n : typeof candidate.text === \"string\" && candidate.text.length > 0\n ? candidate.text\n : undefined;\n\n if (!args.outputSchema && !explicitDraft) {\n throw new Error(\n \"useReason first pass with interrupt requires `draftText` when outputSchema is not provided.\",\n );\n }\n\n const draftText =\n explicitDraft ??\n (output !== undefined ? tryStringify(output) : String(args.text ?? \"\"));\n\n return {\n draftText,\n request,\n ...(output !== undefined ? { output } : {}),\n };\n};\n","import type { InterruptInput } from \"@kortyx/core\";\nimport { toJSONSchema } from \"zod\";\nimport type { SchemaLike } from \"../types\";\n\nconst tryStringify = (value: unknown): string => {\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n};\n\nconst tryGetSchemaHint = (schema: unknown): string | undefined => {\n try {\n const hint = toJSONSchema(schema as never);\n return JSON.stringify(hint, null, 2);\n } catch {\n return undefined;\n }\n};\n\nconst withSchemaHint = (\n input: string,\n label: string,\n schema: unknown,\n): string => {\n const hint = tryGetSchemaHint(schema);\n if (!hint) return input;\n return `${input}\\n\\n${label}:\\n${hint}`;\n};\n\nexport const defaultInterruptFirstPassInput = (args: {\n input: string;\n requestSchema: SchemaLike<unknown>;\n outputSchema?: SchemaLike<unknown>;\n}): string => {\n const base = args.outputSchema\n ? [\n args.input,\n \"Output rules:\",\n \"- Return JSON only. No markdown fences.\",\n \"- Return an object with keys: output, interruptRequest, draftText.\",\n \"- output must match the expected output JSON schema.\",\n \"- interruptRequest must match the expected interrupt request JSON schema.\",\n \"- interruptRequest must be a non-null object.\",\n \"- draftText should be a concise plain-language summary of output.\",\n \"- If uncertain, still return a valid interruptRequest with safe default options.\",\n ].join(\"\\n\\n\")\n : [\n args.input,\n \"Output rules:\",\n \"- Return JSON only. No markdown fences.\",\n \"- Return an object with keys: draftText, interruptRequest.\",\n \"- draftText should be the current draft answer text.\",\n \"- interruptRequest must match the expected interrupt request JSON schema.\",\n \"- interruptRequest must be a non-null object.\",\n \"- If uncertain, still return a valid interruptRequest with safe default options.\",\n ].join(\"\\n\\n\");\n\n const withInterruptSchema = withSchemaHint(\n base,\n \"Expected interrupt request JSON schema (for `interruptRequest`)\",\n args.requestSchema,\n );\n\n if (!args.outputSchema) return withInterruptSchema;\n const withOutputSchema = withSchemaHint(\n withInterruptSchema,\n \"Expected output JSON schema (for `output`)\",\n args.outputSchema,\n );\n return [\n withOutputSchema,\n \"JSON template:\",\n '{ \"output\": { ... }, \"interruptRequest\": { ... }, \"draftText\": \"...\" }',\n ].join(\"\\n\\n\");\n};\n\nexport const defaultContinuationInput = (args: {\n input: string;\n draftText: string;\n draftOutput?: unknown;\n request: InterruptInput;\n response: unknown;\n}): string =>\n [\n \"You are continuing a paused reasoning task after user input.\",\n \"Update the previous result using the user response and return the final answer only.\",\n \"If the previous output was JSON, return JSON in the same schema.\",\n \"\",\n `Original request:\\n${args.input}`,\n `Draft answer text:\\n${args.draftText}`,\n `Draft output object:\\n${tryStringify(args.draftOutput ?? args.draftText)}`,\n `Interrupt request shown to user:\\n${tryStringify(args.request)}`,\n `User response:\\n${tryStringify(args.response)}`,\n ].join(\"\\n\\n\");\n\nexport const withOutputGuardrails = (\n input: string,\n schema?: SchemaLike<unknown>,\n): string => {\n const base = [\n input,\n \"Output rules:\",\n \"- Return only JSON, no markdown fences.\",\n \"- Ensure the response conforms to the expected output schema.\",\n \"- Do not include explanatory text outside the JSON object.\",\n ].join(\"\\n\\n\");\n return withSchemaHint(base, \"Expected output JSON schema\", schema);\n};\n\nexport const withStructuredStreamHints = (\n input: string,\n args: {\n setFieldPaths?: string[];\n appendFieldPaths?: string[];\n textDeltaFieldPaths?: string[];\n },\n): string => {\n const rules: string[] = [];\n\n for (const path of args.setFieldPaths ?? []) {\n rules.push(\n `- For the top-level field \\`${path}\\`, write one stable final value and do not rewrite it after it is complete.`,\n );\n }\n\n for (const path of args.appendFieldPaths ?? []) {\n rules.push(\n `- For the top-level array field \\`${path}\\`, write items in final order and finish each item before starting the next.`,\n );\n rules.push(\n `- Once an item in \\`${path}\\` is complete, do not rewrite or reorder earlier items.`,\n );\n }\n\n for (const path of args.textDeltaFieldPaths ?? []) {\n rules.push(\n `- For the top-level string field \\`${path}\\`, write the value progressively by appending text to the end.`,\n );\n rules.push(\n `- Do not rewrite or replace the earlier prefix of \\`${path}\\` once emitted.`,\n );\n }\n\n if (rules.length === 0) return input;\n\n return [\n input,\n \"Streaming rules:\",\n ...rules,\n \"- Keep the overall response as valid JSON.\",\n ].join(\"\\n\\n\");\n};\n","import { assertStructuredPath } from \"../structured-path\";\nimport type { UseReasonStructuredConfig } from \"../types\";\n\nconst escapeRegex = (value: string): string =>\n value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\nconst findTopLevelArrayStart = (text: string, path: string): number => {\n const match = new RegExp(`\"${escapeRegex(path)}\"\\\\s*:\\\\s*\\\\[`).exec(text);\n return match ? match.index + match[0].length : -1;\n};\n\nexport const resolveAppendFieldPaths = (\n cfg: UseReasonStructuredConfig | undefined,\n): string[] => {\n const fields = cfg?.fields;\n if (!fields) return [];\n\n const appendPaths = Object.entries(fields)\n .filter(([, mode]) => mode === \"append\")\n .map(([path]) => path);\n\n for (const path of appendPaths) {\n assertStructuredPath(path, \"useReason structured append\");\n if (path.includes(\".\")) {\n throw new Error(\n \"useReason structured append streaming requires non-empty top-level array field keys.\",\n );\n }\n }\n\n return appendPaths;\n};\n\nexport const resolveSetFieldPaths = (\n cfg: UseReasonStructuredConfig | undefined,\n): string[] => {\n const fields = cfg?.fields;\n if (!fields) return [];\n\n const setPaths = Object.entries(fields)\n .filter(([, mode]) => mode === \"set\")\n .map(([path]) => path);\n\n for (const path of setPaths) {\n assertStructuredPath(path, \"useReason structured set\");\n if (path.includes(\".\")) {\n throw new Error(\n \"useReason structured set streaming requires non-empty top-level field keys.\",\n );\n }\n }\n\n return setPaths;\n};\n\nexport const resolveTextDeltaFieldPaths = (\n cfg: UseReasonStructuredConfig | undefined,\n): string[] => {\n const fields = cfg?.fields;\n if (!fields) return [];\n\n const textPaths = Object.entries(fields)\n .filter(([, mode]) => mode === \"text-delta\")\n .map(([path]) => path);\n\n for (const path of textPaths) {\n assertStructuredPath(path, \"useReason structured text-delta\");\n if (path.includes(\".\")) {\n throw new Error(\n \"useReason structured text-delta streaming requires non-empty top-level string field keys.\",\n );\n }\n }\n\n return textPaths;\n};\n\nconst findTopLevelFieldValueStart = (text: string, path: string): number => {\n const match = new RegExp(`\"${escapeRegex(path)}\"\\\\s*:\\\\s*`).exec(text);\n return match ? match.index + match[0].length : -1;\n};\n\nconst findTopLevelStringStart = (text: string, path: string): number => {\n const match = new RegExp(`\"${escapeRegex(path)}\"\\\\s*:\\\\s*\"`).exec(text);\n return match ? match.index + match[0].length : -1;\n};\n\nconst extractCompletedStringValueAt = (args: {\n text: string;\n start: number;\n}): { complete: boolean; value?: string } => {\n let value = \"\";\n\n for (let i = args.start; i < args.text.length; i += 1) {\n const ch = args.text[i];\n if (ch === undefined) break;\n\n if (ch === '\"') {\n return {\n complete: true,\n value,\n };\n }\n\n if (ch !== \"\\\\\") {\n value += ch;\n continue;\n }\n\n const next = args.text[i + 1];\n if (!next) {\n return {\n complete: false,\n };\n }\n\n if (\n next === '\"' ||\n next === \"\\\\\" ||\n next === \"/\" ||\n next === \"b\" ||\n next === \"f\" ||\n next === \"n\" ||\n next === \"r\" ||\n next === \"t\"\n ) {\n value +=\n next === \"b\"\n ? \"\\b\"\n : next === \"f\"\n ? \"\\f\"\n : next === \"n\"\n ? \"\\n\"\n : next === \"r\"\n ? \"\\r\"\n : next === \"t\"\n ? \"\\t\"\n : next;\n i += 1;\n continue;\n }\n\n if (next === \"u\") {\n const hex = args.text.slice(i + 2, i + 6);\n if (!/^[0-9a-fA-F]{4}$/.test(hex)) {\n return {\n complete: false,\n };\n }\n value += String.fromCharCode(Number.parseInt(hex, 16));\n i += 5;\n continue;\n }\n\n return {\n complete: false,\n };\n }\n\n return {\n complete: false,\n };\n};\n\nconst extractCompletedNestedValueAt = (args: {\n text: string;\n start: number;\n opener: \"{\" | \"[\";\n closer: \"}\" | \"]\";\n}): { complete: boolean; value?: unknown } => {\n let inString = false;\n let isEscaped = false;\n let nesting = 0;\n\n for (let i = args.start; i < args.text.length; i += 1) {\n const ch = args.text[i];\n if (ch === undefined) break;\n\n if (inString) {\n if (isEscaped) {\n isEscaped = false;\n continue;\n }\n if (ch === \"\\\\\") {\n isEscaped = true;\n continue;\n }\n if (ch === '\"') {\n inString = false;\n }\n continue;\n }\n\n if (ch === '\"') {\n inString = true;\n continue;\n }\n\n if (ch === args.opener) {\n nesting += 1;\n continue;\n }\n\n if (ch === args.closer) {\n nesting -= 1;\n if (nesting === 0) {\n const raw = args.text.slice(args.start, i + 1);\n try {\n return {\n complete: true,\n value: JSON.parse(raw),\n };\n } catch {\n return {\n complete: false,\n };\n }\n }\n }\n }\n\n return {\n complete: false,\n };\n};\n\nexport const extractCompletedFieldValue = (args: {\n text: string;\n path: string;\n}): { found: boolean; complete: boolean; value?: unknown } => {\n const start = findTopLevelFieldValueStart(args.text, args.path);\n if (start < 0) {\n return {\n found: false,\n complete: false,\n };\n }\n\n const first = args.text[start];\n if (!first) {\n return {\n found: true,\n complete: false,\n };\n }\n\n if (first === '\"') {\n const parsed = extractCompletedStringValueAt({\n text: args.text,\n start: start + 1,\n });\n return parsed.complete\n ? {\n found: true,\n complete: true,\n value: parsed.value,\n }\n : {\n found: true,\n complete: false,\n };\n }\n\n if (first === \"{\") {\n const parsed = extractCompletedNestedValueAt({\n text: args.text,\n start,\n opener: \"{\",\n closer: \"}\",\n });\n return parsed.complete\n ? {\n found: true,\n complete: true,\n value: parsed.value,\n }\n : {\n found: true,\n complete: false,\n };\n }\n\n if (first === \"[\") {\n const parsed = extractCompletedNestedValueAt({\n text: args.text,\n start,\n opener: \"[\",\n closer: \"]\",\n });\n return parsed.complete\n ? {\n found: true,\n complete: true,\n value: parsed.value,\n }\n : {\n found: true,\n complete: false,\n };\n }\n\n for (let i = start; i < args.text.length; i += 1) {\n const ch = args.text[i];\n if (ch === undefined) break;\n if (ch !== \",\" && ch !== \"}\") continue;\n\n const raw = args.text.slice(start, i).trim();\n if (!raw) {\n return {\n found: true,\n complete: false,\n };\n }\n\n try {\n return {\n found: true,\n complete: true,\n value: JSON.parse(raw),\n };\n } catch {\n return {\n found: true,\n complete: false,\n };\n }\n }\n\n return {\n found: true,\n complete: false,\n };\n};\n\nexport const extractCompletedArrayItems = (args: {\n text: string;\n path: string;\n}): unknown[] => {\n const start = findTopLevelArrayStart(args.text, args.path);\n if (start < 0) return [];\n\n const items: unknown[] = [];\n let inString = false;\n let isEscaped = false;\n let nesting = 0;\n let itemStart = -1;\n\n for (let i = start; i < args.text.length; i += 1) {\n const ch = args.text[i];\n if (ch === undefined) break;\n\n if (inString) {\n if (isEscaped) {\n isEscaped = false;\n continue;\n }\n if (ch === \"\\\\\") {\n isEscaped = true;\n continue;\n }\n if (ch === '\"') {\n inString = false;\n }\n continue;\n }\n\n if (ch === '\"') {\n inString = true;\n if (itemStart < 0) itemStart = i;\n continue;\n }\n\n if (itemStart < 0) {\n if (/\\s/.test(ch) || ch === \",\") continue;\n if (ch === \"]\") break;\n itemStart = i;\n if (ch === \"{\" || ch === \"[\") {\n nesting = 1;\n } else {\n nesting = 0;\n }\n continue;\n }\n\n if (ch === \"{\" || ch === \"[\") {\n nesting += 1;\n continue;\n }\n\n if (ch === \"}\" || ch === \"]\") {\n if (nesting > 0) {\n nesting -= 1;\n if (nesting > 0) continue;\n }\n\n if (ch === \"]\") {\n const raw = args.text.slice(itemStart, i).trim();\n if (raw) {\n try {\n items.push(JSON.parse(raw));\n } catch {}\n }\n break;\n }\n }\n\n if (nesting === 0 && (ch === \",\" || ch === \"]\")) {\n const raw = args.text.slice(itemStart, i).trim();\n if (raw) {\n try {\n items.push(JSON.parse(raw));\n } catch {}\n }\n itemStart = -1;\n if (ch === \"]\") break;\n }\n }\n\n return items;\n};\n\nexport const extractStreamingStringValue = (args: {\n text: string;\n path: string;\n}): { found: boolean; complete: boolean; value: string } => {\n const start = findTopLevelStringStart(args.text, args.path);\n if (start < 0) {\n return {\n found: false,\n complete: false,\n value: \"\",\n };\n }\n\n let value = \"\";\n\n for (let i = start; i < args.text.length; i += 1) {\n const ch = args.text[i];\n if (ch === undefined) break;\n\n if (ch === '\"') {\n return {\n found: true,\n complete: true,\n value,\n };\n }\n\n if (ch !== \"\\\\\") {\n value += ch;\n continue;\n }\n\n const next = args.text[i + 1];\n if (!next) {\n return {\n found: true,\n complete: false,\n value,\n };\n }\n\n if (\n next === '\"' ||\n next === \"\\\\\" ||\n next === \"/\" ||\n next === \"b\" ||\n next === \"f\" ||\n next === \"n\" ||\n next === \"r\" ||\n next === \"t\"\n ) {\n value +=\n next === \"b\"\n ? \"\\b\"\n : next === \"f\"\n ? \"\\f\"\n : next === \"n\"\n ? \"\\n\"\n : next === \"r\"\n ? \"\\r\"\n : next === \"t\"\n ? \"\\t\"\n : next;\n i += 1;\n continue;\n }\n\n if (next === \"u\") {\n const hex = args.text.slice(i + 2, i + 6);\n if (!/^[0-9a-fA-F]{4}$/.test(hex)) {\n return {\n found: true,\n complete: false,\n value,\n };\n }\n value += String.fromCharCode(Number.parseInt(hex, 16));\n i += 5;\n continue;\n }\n\n return {\n found: true,\n complete: false,\n value,\n };\n }\n\n return {\n found: true,\n complete: false,\n value,\n };\n};\n","import type { InterruptInput, InterruptResult } from \"@kortyx/core\";\nimport type {\n KortyxFinishReason,\n KortyxProviderMetadata,\n KortyxUsage,\n KortyxWarning,\n} from \"@kortyx/providers\";\nimport {\n accumulateTokenUsage,\n getHookContext,\n getReasonTraceAdapter,\n} from \"../context\";\nimport { awaitInterruptInternal } from \"../interrupt\";\nimport { emitStructuredData, shouldEmitStructured } from \"../structured\";\nimport type { ReasonTraceSpan } from \"../tracing\";\nimport type { SchemaLike, UseReasonArgs, UseReasonResult } from \"../types\";\nimport { parseWithSchema } from \"../validation\";\nimport {\n type ReasonInterruptCheckpoint,\n readReasonCheckpoint,\n resolveHookStatePatch,\n resolveReasonCheckpointKey,\n} from \"./checkpoint\";\nimport { createRuntimeId, reasonEngine } from \"./engine\";\nimport {\n parseInterruptFirstPassResult,\n parseReasonOutputWithSchema,\n} from \"./parsing\";\nimport {\n defaultContinuationInput,\n defaultInterruptFirstPassInput,\n withOutputGuardrails,\n withStructuredStreamHints,\n} from \"./prompting\";\nimport {\n extractCompletedArrayItems,\n extractCompletedFieldValue,\n extractStreamingStringValue,\n resolveAppendFieldPaths,\n resolveSetFieldPaths,\n resolveTextDeltaFieldPaths,\n} from \"./structured-stream\";\n\nconst mergeUsage = (\n left: KortyxUsage | undefined,\n right: KortyxUsage | undefined,\n): KortyxUsage | undefined => {\n if (!left) return right;\n if (!right) return left;\n\n const sum = (\n a: number | undefined,\n b: number | undefined,\n ): number | undefined =>\n a === undefined && b === undefined ? undefined : (a ?? 0) + (b ?? 0);\n\n const raw =\n left.raw || right.raw\n ? {\n ...(left.raw ?? {}),\n ...(right.raw ?? {}),\n }\n : undefined;\n const input = sum(left.input, right.input);\n const output = sum(left.output, right.output);\n const total = sum(left.total, right.total);\n const reasoning = sum(left.reasoning, right.reasoning);\n const cacheRead = sum(left.cacheRead, right.cacheRead);\n const cacheWrite = sum(left.cacheWrite, right.cacheWrite);\n const merged: KortyxUsage = {};\n\n if (input !== undefined) merged.input = input;\n if (output !== undefined) merged.output = output;\n if (total !== undefined) merged.total = total;\n if (reasoning !== undefined) merged.reasoning = reasoning;\n if (cacheRead !== undefined) merged.cacheRead = cacheRead;\n if (cacheWrite !== undefined) merged.cacheWrite = cacheWrite;\n if (raw) merged.raw = raw;\n\n return merged;\n};\n\nconst mergeWarnings = (\n left: KortyxWarning[] | undefined,\n right: KortyxWarning[] | undefined,\n): KortyxWarning[] | undefined => {\n if (!left?.length) return right;\n if (!right?.length) return left;\n\n const seen = new Set<string>();\n const merged: KortyxWarning[] = [];\n for (const warning of [...left, ...right]) {\n const key = JSON.stringify(warning);\n if (seen.has(key)) continue;\n seen.add(key);\n merged.push(warning);\n }\n return merged;\n};\n\nconst mergeProviderMetadata = (\n left: KortyxProviderMetadata | undefined,\n right: KortyxProviderMetadata | undefined,\n): KortyxProviderMetadata | undefined => {\n if (!left) return right;\n if (!right) return left;\n return {\n ...left,\n ...right,\n };\n};\n\nconst emitReasonStructuredOutput = <TOutput>(args: {\n id?: string;\n opId: string;\n output: TOutput;\n structured: UseReasonArgs<TOutput>[\"structured\"];\n emit: boolean;\n}): void => {\n if (!args.emit || !shouldEmitStructured(args.structured)) return;\n\n emitStructuredData<TOutput>({\n dataType: args.structured?.dataType ?? \"reason-output\",\n data: args.output,\n kind: \"final\",\n ...(args.structured?.schemaId\n ? { schemaId: args.structured.schemaId }\n : {}),\n ...(args.structured?.schemaVersion\n ? { schemaVersion: args.structured.schemaVersion }\n : {}),\n ...(args.id ? { id: args.id } : {}),\n streamId: args.opId,\n });\n};\n\nconst shouldEmitReasonStructured = <\n TOutput,\n TRequest extends InterruptInput,\n TResponse,\n>(\n args: UseReasonArgs<TOutput, TRequest, TResponse>,\n): boolean => (args.emit ?? true) && shouldEmitStructured(args.structured);\n\nconst resolveEffectiveReasoningIncludeThoughts = <\n TOutput,\n TRequest extends InterruptInput,\n TResponse,\n>(\n args: UseReasonArgs<TOutput, TRequest, TResponse>,\n): boolean =>\n args.reasoning?.includeThoughts ??\n args.model.options?.reasoning?.includeThoughts ??\n false;\n\nconst resolveEffectiveResponseFormatType = <\n TOutput,\n TRequest extends InterruptInput,\n TResponse,\n>(\n args: UseReasonArgs<TOutput, TRequest, TResponse>,\n): \"text\" | \"json\" | undefined =>\n args.responseFormat?.type ?? args.model.options?.responseFormat?.type;\n\nconst assertReasoningThoughtsCompatibility = <\n TOutput,\n TRequest extends InterruptInput,\n TResponse,\n>(\n args: UseReasonArgs<TOutput, TRequest, TResponse>,\n): void => {\n if (!resolveEffectiveReasoningIncludeThoughts(args)) return;\n\n const usesStructuredOutput =\n Boolean(args.outputSchema) ||\n Boolean(args.interrupt) ||\n Boolean(args.structured) ||\n resolveEffectiveResponseFormatType(args) === \"json\";\n\n if (!usesStructuredOutput) return;\n\n throw new Error(\n \"useReason does not support reasoning.includeThoughts with structured output, interrupt mode, or JSON responseFormat. Disable includeThoughts for this call.\",\n );\n};\n\nexport async function useReason<\n TOutput = unknown,\n TRequest extends InterruptInput = InterruptInput,\n TResponse = InterruptResult,\n>(\n args: UseReasonArgs<TOutput, TRequest, TResponse>,\n): Promise<UseReasonResult<TOutput, TResponse>> {\n assertReasoningThoughtsCompatibility(args);\n const ctx = getHookContext();\n const id =\n typeof args.id === \"string\" && args.id.length > 0 ? args.id : undefined;\n const opId = createRuntimeId();\n const checkpointKey = resolveReasonCheckpointKey({\n ...(id ? { id } : {}),\n autoIndex: ctx.reasonCallIndex++,\n });\n const existingCheckpoint = readReasonCheckpoint(\n ctx.currentNodeState.byKey[checkpointKey],\n );\n\n const reasonMeta =\n typeof id === \"string\" ? ({ id, opId } as const) : ({ opId } as const);\n const traceSpan: ReasonTraceSpan | undefined =\n getReasonTraceAdapter()?.startSpan({\n name: \"useReason\",\n attributes: {\n ...(id ? { id } : {}),\n opId,\n nodeId: ctx.node.graph.node,\n providerId: args.model.provider.id,\n modelId: args.model.modelId,\n stream: args.stream ?? args.model.options?.streaming ?? true,\n emit: args.emit ?? true,\n hasOutputSchema: Boolean(args.outputSchema),\n hasInterrupt: Boolean(args.interrupt),\n hasStructured: Boolean(args.structured),\n },\n });\n const suppressTextStream = Boolean(args.outputSchema || args.interrupt);\n const setFieldPaths = resolveSetFieldPaths(args.structured);\n const appendFieldPaths = resolveAppendFieldPaths(args.structured);\n const textDeltaFieldPaths = resolveTextDeltaFieldPaths(args.structured);\n const useStructuredIncrementalStreaming = Boolean(\n args.outputSchema &&\n !args.interrupt &&\n (setFieldPaths.length > 0 ||\n appendFieldPaths.length > 0 ||\n textDeltaFieldPaths.length > 0) &&\n args.stream !== false &&\n shouldEmitReasonStructured(args),\n );\n\n let firstText = \"\";\n let firstRaw: unknown;\n let firstOutput: TOutput | undefined;\n let firstInterruptRequest: TRequest | undefined;\n\n let finalText = \"\";\n let finalRaw: unknown;\n let finalOutput: TOutput | undefined;\n let aggregatedUsage: KortyxUsage | undefined;\n let finalFinishReason: KortyxFinishReason | undefined;\n let aggregatedProviderMetadata: KortyxProviderMetadata | undefined;\n let aggregatedWarnings: KortyxWarning[] | undefined;\n const emittedSetValues = new Map<string, string>();\n const emittedAppendCounts = new Map<string, number>();\n const emittedTextValues = new Map<string, string>();\n\n if (existingCheckpoint) {\n firstText = existingCheckpoint.firstText;\n firstRaw = existingCheckpoint.firstRaw;\n firstOutput = existingCheckpoint.firstOutput as TOutput | undefined;\n finalText = firstText;\n finalRaw = firstRaw;\n finalOutput = firstOutput;\n aggregatedUsage = existingCheckpoint.firstUsage;\n finalFinishReason = existingCheckpoint.firstFinishReason;\n aggregatedProviderMetadata = existingCheckpoint.firstProviderMetadata;\n aggregatedWarnings = existingCheckpoint.firstWarnings;\n traceSpan?.addEvent?.(\"useReason.resume\", {\n checkpointKey,\n });\n } else {\n const first = await reasonEngine(\n {\n ...args,\n emit: suppressTextStream ? false : args.emit,\n stream: useStructuredIncrementalStreaming\n ? true\n : suppressTextStream\n ? false\n : args.stream,\n ...(useStructuredIncrementalStreaming\n ? {\n onTextChunk: (delta: string) => {\n firstText += delta;\n finalText = firstText;\n\n for (const path of setFieldPaths) {\n const current = extractCompletedFieldValue({\n text: firstText,\n path,\n });\n if (!current.found || !current.complete) continue;\n\n const nextSerialized = JSON.stringify(current.value);\n if (emittedSetValues.get(path) === nextSerialized) continue;\n\n emittedSetValues.set(path, nextSerialized);\n emitStructuredData({\n kind: \"set\",\n path,\n value: current.value,\n dataType: args.structured?.dataType ?? \"reason-output\",\n ...(args.structured?.schemaId\n ? { schemaId: args.structured.schemaId }\n : {}),\n ...(args.structured?.schemaVersion\n ? { schemaVersion: args.structured.schemaVersion }\n : {}),\n ...(id ? { id } : {}),\n streamId: opId,\n });\n }\n\n for (const path of appendFieldPaths) {\n const items = extractCompletedArrayItems({\n text: firstText,\n path,\n });\n const emittedAppendCount = emittedAppendCounts.get(path) ?? 0;\n if (items.length <= emittedAppendCount) continue;\n\n const nextItems = items.slice(emittedAppendCount);\n emittedAppendCounts.set(path, items.length);\n emitStructuredData({\n kind: \"append\",\n path,\n items: nextItems,\n dataType: args.structured?.dataType ?? \"reason-output\",\n ...(args.structured?.schemaId\n ? { schemaId: args.structured.schemaId }\n : {}),\n ...(args.structured?.schemaVersion\n ? { schemaVersion: args.structured.schemaVersion }\n : {}),\n ...(id ? { id } : {}),\n streamId: opId,\n });\n }\n\n for (const path of textDeltaFieldPaths) {\n const current = extractStreamingStringValue({\n text: firstText,\n path,\n });\n const emittedTextValue = emittedTextValues.get(path) ?? \"\";\n if (\n !current.found ||\n current.value.length <= emittedTextValue.length ||\n !current.value.startsWith(emittedTextValue)\n ) {\n continue;\n }\n\n const nextDelta = current.value.slice(\n emittedTextValue.length,\n );\n emittedTextValues.set(path, current.value);\n if (nextDelta.length === 0) continue;\n\n emitStructuredData({\n kind: \"text-delta\",\n path,\n delta: nextDelta,\n dataType: args.structured?.dataType ?? \"reason-output\",\n ...(args.structured?.schemaId\n ? { schemaId: args.structured.schemaId }\n : {}),\n ...(args.structured?.schemaVersion\n ? { schemaVersion: args.structured.schemaVersion }\n : {}),\n ...(id ? { id } : {}),\n streamId: opId,\n });\n }\n },\n }\n : {}),\n },\n reasonMeta,\n args.interrupt\n ? defaultInterruptFirstPassInput({\n input: args.input,\n requestSchema: args.interrupt.requestSchema,\n ...(args.outputSchema\n ? { outputSchema: args.outputSchema as SchemaLike<unknown> }\n : {}),\n })\n : args.outputSchema\n ? withOutputGuardrails(\n withStructuredStreamHints(args.input, {\n ...(setFieldPaths.length > 0 ? { setFieldPaths } : {}),\n ...(appendFieldPaths.length > 0 ? { appendFieldPaths } : {}),\n ...(textDeltaFieldPaths.length > 0\n ? { textDeltaFieldPaths }\n : {}),\n }),\n args.outputSchema as SchemaLike<unknown>,\n )\n : undefined,\n );\n firstRaw = first.raw;\n finalRaw = first.raw;\n accumulateTokenUsage(first.usage);\n aggregatedUsage = mergeUsage(aggregatedUsage, first.usage);\n finalFinishReason = first.finishReason;\n aggregatedProviderMetadata = mergeProviderMetadata(\n aggregatedProviderMetadata,\n first.providerMetadata,\n );\n aggregatedWarnings = mergeWarnings(aggregatedWarnings, first.warnings);\n traceSpan?.addEvent?.(\"useReason.first-pass.complete\", {\n textLength: first.text.length,\n hasInterrupt: Boolean(args.interrupt),\n });\n\n if (args.interrupt) {\n const firstPass = parseInterruptFirstPassResult<TRequest, TOutput>({\n text: first.text,\n requestSchema: args.interrupt.requestSchema,\n ...(first.finishReason ? { finishReason: first.finishReason } : {}),\n ...(args.outputSchema\n ? { outputSchema: args.outputSchema as SchemaLike<TOutput> }\n : {}),\n });\n firstText = firstPass.draftText;\n finalText = firstPass.draftText;\n firstInterruptRequest = firstPass.request;\n firstOutput = firstPass.output;\n finalOutput = firstPass.output;\n } else {\n firstText = first.text;\n finalText = first.text;\n if (args.outputSchema) {\n firstOutput = parseReasonOutputWithSchema({\n text: first.text,\n schema: args.outputSchema,\n ...(first.finishReason ? { finishReason: first.finishReason } : {}),\n label: \"useReason output\",\n });\n }\n finalOutput = firstOutput;\n }\n }\n\n let interruptResponse: TResponse | undefined;\n\n if (args.interrupt) {\n const requestSchema = args.interrupt.requestSchema;\n\n const interruptRequest = existingCheckpoint\n ? parseWithSchema(\n requestSchema,\n existingCheckpoint.request,\n \"useReason interrupt.request\",\n )\n : firstInterruptRequest;\n\n if (!interruptRequest) {\n throw new Error(\n \"useReason interrupt request is missing; first pass did not produce a valid interrupt payload.\",\n );\n }\n\n if (!existingCheckpoint) {\n ctx.currentNodeState.byKey[checkpointKey] = {\n status: \"awaiting_interrupt\",\n request: interruptRequest,\n firstText,\n ...(firstRaw !== undefined ? { firstRaw } : {}),\n ...(aggregatedUsage !== undefined\n ? { firstUsage: aggregatedUsage }\n : {}),\n ...(finalFinishReason !== undefined\n ? { firstFinishReason: finalFinishReason }\n : {}),\n ...(aggregatedProviderMetadata !== undefined\n ? { firstProviderMetadata: aggregatedProviderMetadata }\n : {}),\n ...(aggregatedWarnings !== undefined\n ? { firstWarnings: aggregatedWarnings }\n : {}),\n ...(firstOutput !== undefined ? { firstOutput } : {}),\n } satisfies ReasonInterruptCheckpoint;\n ctx.stateDirty = true;\n }\n\n const resumeStatePatch = resolveHookStatePatch({\n nodeId: ctx.node.graph.node,\n currentNodeState: ctx.currentNodeState,\n workflowState: ctx.workflowState,\n });\n\n interruptResponse = await awaitInterruptInternal<TRequest, TResponse>({\n request: interruptRequest,\n requestSchema,\n responseSchema: args.interrupt.responseSchema,\n ...(args.interrupt.schemaId ? { schemaId: args.interrupt.schemaId } : {}),\n ...(args.interrupt.schemaVersion\n ? { schemaVersion: args.interrupt.schemaVersion }\n : {}),\n ...(id ? { id } : {}),\n meta: {\n __kortyxResumeStatePatch: resumeStatePatch,\n },\n });\n traceSpan?.addEvent?.(\"useReason.interrupt.resolved\", {\n checkpointKey,\n });\n\n if (Object.hasOwn(ctx.currentNodeState.byKey, checkpointKey)) {\n delete ctx.currentNodeState.byKey[checkpointKey];\n ctx.stateDirty = true;\n }\n\n const continuationInput = defaultContinuationInput({\n input: args.input,\n draftText: firstText,\n ...(firstOutput !== undefined ? { draftOutput: firstOutput } : {}),\n request: interruptRequest,\n response: interruptResponse,\n });\n\n const second = await reasonEngine(\n {\n ...args,\n emit: suppressTextStream ? false : args.emit,\n stream: suppressTextStream ? false : args.stream,\n },\n reasonMeta,\n args.outputSchema\n ? withOutputGuardrails(\n continuationInput,\n args.outputSchema as SchemaLike<unknown>,\n )\n : continuationInput,\n );\n finalText = second.text;\n finalRaw = second.raw;\n accumulateTokenUsage(second.usage);\n aggregatedUsage = mergeUsage(aggregatedUsage, second.usage);\n finalFinishReason = second.finishReason;\n aggregatedProviderMetadata = mergeProviderMetadata(\n aggregatedProviderMetadata,\n second.providerMetadata,\n );\n aggregatedWarnings = mergeWarnings(aggregatedWarnings, second.warnings);\n traceSpan?.addEvent?.(\"useReason.continuation.complete\", {\n textLength: second.text.length,\n });\n\n if (args.outputSchema) {\n finalOutput = parseReasonOutputWithSchema({\n text: finalText,\n schema: args.outputSchema,\n ...(second.finishReason ? { finishReason: second.finishReason } : {}),\n label: \"useReason output\",\n });\n }\n }\n\n if (finalOutput !== undefined) {\n emitReasonStructuredOutput<TOutput>({\n ...(id ? { id } : {}),\n opId,\n output: finalOutput,\n structured: args.structured,\n emit: args.emit ?? true,\n });\n }\n\n const result = {\n ...(id ? { id } : {}),\n opId,\n text: finalText,\n ...(finalRaw !== undefined ? { raw: finalRaw } : {}),\n ...(aggregatedUsage !== undefined ? { usage: aggregatedUsage } : {}),\n ...(finalFinishReason !== undefined\n ? { finishReason: finalFinishReason }\n : {}),\n ...(aggregatedProviderMetadata !== undefined\n ? { providerMetadata: aggregatedProviderMetadata }\n : {}),\n ...(aggregatedWarnings !== undefined\n ? { warnings: aggregatedWarnings }\n : {}),\n ...(finalOutput !== undefined ? { output: finalOutput } : {}),\n ...(interruptResponse !== undefined ? { interruptResponse } : {}),\n };\n\n traceSpan?.end?.({\n ...(aggregatedUsage !== undefined ? { usage: aggregatedUsage } : {}),\n ...(finalFinishReason !== undefined\n ? { finishReason: finalFinishReason }\n : {}),\n ...(aggregatedProviderMetadata !== undefined\n ? { providerMetadata: aggregatedProviderMetadata }\n : {}),\n ...(aggregatedWarnings !== undefined\n ? { warnings: aggregatedWarnings }\n : {}),\n attributes: {\n textLength: finalText.length,\n resumedFromCheckpoint: Boolean(existingCheckpoint),\n interrupted: Boolean(interruptResponse !== undefined),\n },\n });\n\n return result;\n}\n","import type { InterruptInput, InterruptResult } from \"@kortyx/core\";\nimport { getHookContext } from \"./context\";\nimport { awaitInterruptInternal } from \"./interrupt\";\nimport { useReason as useReasonInternal } from \"./reason/use-reason\";\nimport { emitStructuredData } from \"./structured\";\nimport type {\n UseInterruptArgs,\n UseReasonArgs,\n UseReasonResult,\n UseStructuredDataArgs,\n} from \"./types\";\n\nexport type {\n SchemaLike,\n StructuredDataKind,\n UseInterruptArgs,\n UseReasonArgs,\n UseReasonInterruptConfig,\n UseReasonResult,\n UseReasonStructuredConfig,\n UseStructuredDataAppendArgs,\n UseStructuredDataArgs,\n UseStructuredDataFinalArgs,\n UseStructuredDataSetArgs,\n UseStructuredDataTextDeltaArgs,\n} from \"./types\";\n\ntype StateSetter<T> = (next: T | ((prev: T) => T)) => void;\n\nexport function useStructuredData<TData = unknown>(\n args: UseStructuredDataArgs<TData>,\n): void {\n emitStructuredData(args);\n}\n\nexport function useReason<\n TOutput = unknown,\n TRequest extends InterruptInput = InterruptInput,\n TResponse = InterruptResult,\n>(\n args: UseReasonArgs<TOutput, TRequest, TResponse>,\n): Promise<UseReasonResult<TOutput, TResponse>> {\n return useReasonInternal(args);\n}\n\nexport function useInterrupt<\n TRequest extends InterruptInput = InterruptInput,\n TResponse = InterruptResult,\n>(args: UseInterruptArgs<TRequest, TResponse>): Promise<TResponse> {\n return awaitInterruptInternal(args);\n}\n\nexport function useNodeState<T>(initialValue: T): [T, StateSetter<T>] {\n const ctx = getHookContext();\n const nodeState = ctx.currentNodeState;\n\n const index = ctx.nodeStateIndex++;\n if (index >= nodeState.byIndex.length) {\n nodeState.byIndex[index] = initialValue as T;\n ctx.stateDirty = true;\n }\n\n const getValue = () => nodeState.byIndex[index] as T;\n const setValue: StateSetter<T> = (next) => {\n const prev = getValue();\n const resolved =\n typeof next === \"function\" ? (next as (p: T) => T)(prev) : next;\n nodeState.byIndex[index] = resolved;\n ctx.stateDirty = true;\n };\n\n return [getValue(), setValue];\n}\n\nexport function useWorkflowState<T>(\n key: string,\n ...rest: [] | [T]\n): [T, StateSetter<T>] {\n const ctx = getHookContext();\n const workflowState = ctx.workflowState;\n const hasInitial = rest.length > 0;\n const initialValue = rest[0];\n\n if (!Object.hasOwn(workflowState, key) && hasInitial) {\n workflowState[key] = initialValue as T;\n ctx.stateDirty = true;\n }\n\n const getValue = () => workflowState[key] as T;\n const setValue: StateSetter<T> = (next) => {\n const prev = getValue();\n const resolved =\n typeof next === \"function\" ? (next as (p: T) => T)(prev) : next;\n workflowState[key] = resolved;\n ctx.stateDirty = true;\n };\n\n return [getValue(), setValue];\n}\n"],"mappings":"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","names":["useReason","import_node_crypto","import_node_crypto","response","result","createRuntimeId","isRecord","tryStringify","createRuntimeId","useReason"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/context.ts","../src/validation.ts","../src/interrupt.ts","../src/structured.ts","../src/structured-path.ts","../src/reason/checkpoint.ts","../src/reason/engine.ts","../src/reason-engine.ts","../src/reason/parsing.ts","../src/reason/prompting.ts","../src/reason/structured-stream.ts","../src/reason/use-reason.ts","../src/hooks.ts"],"sourcesContent":["// release-test: 2026-01-22\n/**\n * @kortyx/hooks\n *\n * Internal hook implementations resolved via async-local context.\n */\n\nexport type { HookRuntimeContext } from \"./context\";\nexport { runWithHookContext } from \"./context\";\nexport type {\n UseInterruptArgs,\n UseReasonArgs,\n UseReasonResult,\n UseStructuredDataArgs,\n} from \"./hooks\";\nexport {\n useInterrupt,\n useNodeState,\n useReason,\n useStructuredData,\n useWorkflowState,\n} from \"./hooks\";\nexport type {\n ReasonTraceAdapter,\n ReasonTraceAttributes,\n ReasonTraceSpan,\n ReasonTraceSpanEndArgs,\n ReasonTraceSpanStartArgs,\n} from \"./tracing\";\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport type { GraphState, NodeContext, TokenUsage } from \"@kortyx/core\";\nimport type { KortyxUsage } from \"@kortyx/providers\";\nimport type { ReasonTraceAdapter } from \"./tracing\";\n\ntype NodeStateStore = {\n byIndex: unknown[];\n byKey: Record<string, unknown>;\n};\n\ntype HookRuntimeState = {\n nodeState?: Record<string, unknown>;\n workflowState?: Record<string, unknown>;\n};\n\ntype StoredNodeStateEnvelope = {\n nodeId?: unknown;\n state?: unknown;\n};\n\ntype HookStatePatchedError = {\n __kortyxHookStatePatch?: Record<string, unknown>;\n};\n\nexport type HookRuntimeContext = {\n node: NodeContext;\n state: GraphState;\n reasonTrace?: ReasonTraceAdapter | undefined;\n};\n\ntype HookInternalContext = HookRuntimeContext & {\n nodeStateIndex: number;\n reasonCallIndex: number;\n currentNodeState: NodeStateStore;\n workflowState: Record<string, unknown>;\n tokenUsage?: TokenUsage | undefined;\n stateDirty: boolean;\n runtimeDirty: boolean;\n};\n\nconst storage = new AsyncLocalStorage<HookInternalContext>();\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n\nconst normalizeNodeState = (value: unknown): NodeStateStore => {\n if (Array.isArray(value)) {\n return { byIndex: [...value], byKey: {} };\n }\n\n if (isRecord(value)) {\n const byIndex = Array.isArray(value.byIndex) ? [...value.byIndex] : [];\n const byKey = isRecord(value.byKey) ? { ...value.byKey } : {};\n return { byIndex, byKey };\n }\n\n return { byIndex: [], byKey: {} };\n};\n\nconst cloneWorkflowState = (value: unknown): Record<string, unknown> =>\n isRecord(value) ? { ...value } : {};\n\nconst cloneTokenUsage = (value: unknown): TokenUsage | undefined => {\n if (!isRecord(value)) return undefined;\n const input = typeof value.input === \"number\" ? value.input : undefined;\n const output = typeof value.output === \"number\" ? value.output : undefined;\n const total = typeof value.total === \"number\" ? value.total : undefined;\n if (input === undefined && output === undefined && total === undefined) {\n return undefined;\n }\n return {\n input: input ?? 0,\n output: output ?? 0,\n total: total ?? 0,\n };\n};\n\nconst getHookRuntimeState = (state: GraphState): HookRuntimeState => {\n const runtime = (state.runtime ?? {}) as Record<string, unknown>;\n const internal = isRecord(runtime.__kortyx) ? runtime.__kortyx : undefined;\n const result: HookRuntimeState = {};\n if (isRecord(internal?.nodeState)) result.nodeState = internal?.nodeState;\n if (isRecord(internal?.workflowState)) {\n result.workflowState = internal?.workflowState;\n }\n return result;\n};\n\nconst createInternalContext = (\n ctx: HookRuntimeContext,\n): HookInternalContext => {\n const hookRuntimeState = getHookRuntimeState(ctx.state);\n const nodeId = ctx.node.graph.node;\n const storedNodeState = isRecord(hookRuntimeState.nodeState)\n ? (hookRuntimeState.nodeState as StoredNodeStateEnvelope)\n : undefined;\n const storedNodeId =\n typeof storedNodeState?.nodeId === \"string\"\n ? String(storedNodeState.nodeId)\n : \"\";\n const storedState = storedNodeState?.state;\n const currentNodeState =\n storedNodeId && storedNodeId === nodeId\n ? normalizeNodeState(storedState)\n : { byIndex: [], byKey: {} };\n\n return {\n ...ctx,\n nodeStateIndex: 0,\n reasonCallIndex: 0,\n currentNodeState,\n workflowState: cloneWorkflowState(hookRuntimeState.workflowState),\n tokenUsage: cloneTokenUsage(ctx.state.runtime?.tokenUsage),\n stateDirty: false,\n runtimeDirty: false,\n };\n};\n\nconst buildRuntimeStateUpdates = (ctx: HookInternalContext) => {\n const updates: Record<string, unknown> = {};\n\n if (ctx.stateDirty) {\n updates.__kortyx = {\n nodeState: {\n nodeId: ctx.node.graph.node,\n state: ctx.currentNodeState,\n },\n workflowState: ctx.workflowState,\n };\n }\n\n if (ctx.runtimeDirty && ctx.tokenUsage) {\n updates.tokenUsage = ctx.tokenUsage;\n }\n\n return Object.keys(updates).length > 0 ? updates : null;\n};\n\nconst toTokenUsageDelta = (\n usage: KortyxUsage | undefined,\n): TokenUsage | undefined => {\n if (!usage) return undefined;\n\n const input = usage.input ?? 0;\n const output = usage.output ?? 0;\n const total = usage.total ?? input + output + (usage.reasoning ?? 0);\n\n if (input === 0 && output === 0 && total === 0) {\n return undefined;\n }\n\n return {\n input,\n output,\n total,\n };\n};\n\nexport function accumulateTokenUsage(usage: KortyxUsage | undefined): void {\n const delta = toTokenUsageDelta(usage);\n if (!delta) return;\n\n const ctx = getHookContext();\n const current = ctx.tokenUsage ?? {\n input: 0,\n output: 0,\n total: 0,\n };\n\n ctx.tokenUsage = {\n input: current.input + delta.input,\n output: current.output + delta.output,\n total: current.total + delta.total,\n };\n ctx.runtimeDirty = true;\n}\n\nexport function getReasonTraceAdapter(): ReasonTraceAdapter | undefined {\n return getHookContext().reasonTrace;\n}\n\nexport async function runWithHookContext<T>(\n ctx: HookRuntimeContext,\n fn: () => Promise<T>,\n): Promise<{ result: T; runtimeUpdates: Record<string, unknown> | null }> {\n const internal = createInternalContext(ctx);\n try {\n const result = await storage.run(internal, fn);\n return { result, runtimeUpdates: buildRuntimeStateUpdates(internal) };\n } catch (err) {\n const runtimeUpdates = buildRuntimeStateUpdates(internal);\n if (runtimeUpdates) {\n const currentRuntime = isRecord(internal.state.runtime)\n ? (internal.state.runtime as Record<string, unknown>)\n : {};\n internal.state.runtime = {\n ...currentRuntime,\n ...runtimeUpdates,\n } as unknown as GraphState[\"runtime\"];\n if (err && typeof err === \"object\") {\n (err as HookStatePatchedError).__kortyxHookStatePatch = runtimeUpdates;\n }\n }\n throw err;\n }\n}\n\nexport function getHookContext(): HookInternalContext {\n const ctx = storage.getStore();\n if (!ctx) {\n throw new Error(\"Hooks can only be used while a node is executing.\");\n }\n return ctx;\n}\n","import type { SchemaLike } from \"./types\";\n\nexport const parseWithSchema = <T>(\n schema: SchemaLike<T> | undefined,\n value: unknown,\n label: string,\n): T => {\n if (!schema) return value as T;\n\n const parsed = schema.safeParse(value);\n if (parsed.success) return parsed.data;\n\n const parsedError =\n \"error\" in parsed && parsed.error ? parsed.error : undefined;\n const reason =\n typeof parsedError?.message === \"string\" && parsedError.message.length > 0\n ? parsedError.message\n : \"invalid payload\";\n throw new Error(`${label} validation failed: ${reason}`);\n};\n","import type { InterruptInput, InterruptResult } from \"@kortyx/core\";\nimport { getHookContext } from \"./context\";\nimport type { UseInterruptArgs } from \"./types\";\nimport { parseWithSchema } from \"./validation\";\n\nexport const awaitInterruptInternal = <\n TRequest extends InterruptInput = InterruptInput,\n TResponse = InterruptResult,\n>(\n args: UseInterruptArgs<TRequest, TResponse>,\n): Promise<TResponse> => {\n const ctx = getHookContext();\n\n const request = parseWithSchema(\n args.requestSchema,\n args.request,\n \"useInterrupt request\",\n );\n\n const enrichedRequest = {\n ...request,\n ...(typeof args.schemaId === \"string\" && args.schemaId.length > 0\n ? { schemaId: args.schemaId }\n : {}),\n ...(typeof args.schemaVersion === \"string\" && args.schemaVersion.length > 0\n ? { schemaVersion: args.schemaVersion }\n : {}),\n ...(typeof args.id === \"string\" && args.id.length > 0\n ? { id: args.id }\n : {}),\n ...(args.meta && typeof args.meta === \"object\" && !Array.isArray(args.meta)\n ? { meta: args.meta }\n : {}),\n } as InterruptInput;\n\n const raw = ctx.node.awaitInterrupt(enrichedRequest);\n const response = parseWithSchema(\n args.responseSchema,\n raw,\n \"useInterrupt response\",\n );\n\n return Promise.resolve(response);\n};\n","import { randomUUID } from \"node:crypto\";\nimport { getHookContext } from \"./context\";\nimport { assertStructuredPath } from \"./structured-path\";\nimport type { UseReasonStructuredConfig, UseStructuredDataArgs } from \"./types\";\nimport { parseWithSchema } from \"./validation\";\n\nconst createStructuredStreamId = (): string => {\n try {\n return randomUUID();\n } catch {\n return `${Date.now()}-${Math.random().toString(36).slice(2)}`;\n }\n};\n\nexport const emitStructuredData = <TData = unknown>(\n args: UseStructuredDataArgs<TData>,\n): void => {\n const ctx = getHookContext();\n const streamId =\n typeof args.streamId === \"string\" && args.streamId.length > 0\n ? args.streamId\n : createStructuredStreamId();\n const dataType =\n typeof args.dataType === \"string\" && args.dataType.length > 0\n ? args.dataType\n : \"generic\";\n\n const base = {\n node: ctx.node.graph.node,\n streamId,\n dataType,\n ...(typeof args.schemaId === \"string\" && args.schemaId.length > 0\n ? { schemaId: args.schemaId }\n : {}),\n ...(typeof args.schemaVersion === \"string\" && args.schemaVersion.length > 0\n ? { schemaVersion: args.schemaVersion }\n : {}),\n ...(typeof args.id === \"string\" && args.id.length > 0\n ? { id: args.id }\n : {}),\n };\n\n if (args.kind === \"set\") {\n assertStructuredPath(args.path, \"useStructuredData\");\n const value = parseWithSchema(\n args.valueSchema,\n args.value,\n \"useStructuredData value\",\n );\n ctx.node.emit(\"structured_data\", {\n ...base,\n kind: \"set\",\n path: args.path,\n value,\n });\n return;\n }\n\n if (args.kind === \"append\") {\n assertStructuredPath(args.path, \"useStructuredData\");\n const items = args.items.map((item) =>\n parseWithSchema(args.itemSchema, item, \"useStructuredData append item\"),\n );\n ctx.node.emit(\"structured_data\", {\n ...base,\n kind: \"append\",\n path: args.path,\n items,\n });\n return;\n }\n\n if (args.kind === \"text-delta\") {\n assertStructuredPath(args.path, \"useStructuredData\");\n ctx.node.emit(\"structured_data\", {\n ...base,\n kind: \"text-delta\",\n path: args.path,\n delta: args.delta,\n });\n return;\n }\n\n const validated = parseWithSchema(\n args.dataSchema,\n args.data,\n \"useStructuredData data\",\n );\n\n ctx.node.emit(\"structured_data\", {\n ...base,\n kind: \"final\",\n data: validated,\n });\n};\n\nexport const shouldEmitStructured = (\n cfg: UseReasonStructuredConfig | undefined,\n): boolean => Boolean(cfg) && (cfg?.stream ?? true);\n","export const parseStructuredPath = (path: string, source: string): string[] => {\n if (path.length === 0) {\n throw new Error(`${source} path must be a non-empty dot-separated string.`);\n }\n\n const parts = path.split(\".\");\n if (parts.some((part) => part.length === 0)) {\n throw new Error(\n `${source} path \"${path}\" must not contain empty segments.`,\n );\n }\n\n return parts;\n};\n\nexport const assertStructuredPath = (path: string, source: string): void => {\n parseStructuredPath(path, source);\n};\n","import type { InterruptInput } from \"@kortyx/core\";\nimport type {\n KortyxFinishReason,\n KortyxProviderMetadata,\n KortyxUsage,\n KortyxWarning,\n} from \"@kortyx/providers\";\n\nexport type ReasonInterruptCheckpoint = {\n status: \"awaiting_interrupt\";\n request: InterruptInput;\n firstText: string;\n firstRaw?: unknown;\n firstUsage?: KortyxUsage;\n firstFinishReason?: KortyxFinishReason;\n firstProviderMetadata?: KortyxProviderMetadata;\n firstWarnings?: KortyxWarning[];\n firstOutput?: unknown;\n};\n\nexport const resolveReasonCheckpointKey = (args: {\n id?: string;\n autoIndex: number;\n}): string =>\n typeof args.id === \"string\" && args.id.length > 0\n ? `__useReason:${args.id}`\n : `__useReason:auto:${args.autoIndex}`;\n\nexport const readReasonCheckpoint = (\n raw: unknown,\n): ReasonInterruptCheckpoint | undefined => {\n if (!raw || typeof raw !== \"object\") return undefined;\n const value = raw as Record<string, unknown>;\n if (value.status !== \"awaiting_interrupt\") return undefined;\n if (typeof value.firstText !== \"string\") return undefined;\n if (!value.request || typeof value.request !== \"object\") return undefined;\n return {\n status: \"awaiting_interrupt\",\n request: value.request as InterruptInput,\n firstText: value.firstText,\n ...(Object.hasOwn(value, \"firstRaw\") ? { firstRaw: value.firstRaw } : {}),\n ...(Object.hasOwn(value, \"firstUsage\")\n ? { firstUsage: value.firstUsage as KortyxUsage }\n : {}),\n ...(Object.hasOwn(value, \"firstFinishReason\")\n ? { firstFinishReason: value.firstFinishReason as KortyxFinishReason }\n : {}),\n ...(Object.hasOwn(value, \"firstProviderMetadata\")\n ? {\n firstProviderMetadata:\n value.firstProviderMetadata as KortyxProviderMetadata,\n }\n : {}),\n ...(Object.hasOwn(value, \"firstWarnings\")\n ? { firstWarnings: value.firstWarnings as KortyxWarning[] }\n : {}),\n ...(Object.hasOwn(value, \"firstOutput\")\n ? { firstOutput: value.firstOutput }\n : {}),\n };\n};\n\nexport const resolveHookStatePatch = (args: {\n nodeId: string;\n currentNodeState: unknown;\n workflowState: Record<string, unknown>;\n}): Record<string, unknown> => ({\n __kortyx: {\n nodeState: {\n nodeId: args.nodeId,\n state: args.currentNodeState,\n },\n workflowState: args.workflowState,\n },\n});\n","import { randomUUID } from \"node:crypto\";\nimport type {\n KortyxReasoningOptions,\n KortyxResponseFormat,\n ProviderModelRef,\n} from \"@kortyx/providers\";\nimport { getHookContext } from \"../context\";\nimport type { RunReasonEngineResult } from \"../reason-engine\";\nimport { runReasonEngine } from \"../reason-engine\";\n\nexport type ReasonEngineInput = {\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 emit?: boolean | undefined;\n stream?: boolean | undefined;\n onTextChunk?: ((text: string) => void) | undefined;\n};\n\nexport const createRuntimeId = (): string => {\n try {\n return randomUUID();\n } catch {\n return `${Date.now()}-${Math.random().toString(36).slice(2)}`;\n }\n};\n\nexport async function reasonEngine(\n args: ReasonEngineInput,\n meta: { id?: string; opId: string },\n inputOverride?: string,\n): Promise<RunReasonEngineResult> {\n const ctx = getHookContext();\n\n return runReasonEngine({\n model: args.model,\n input: inputOverride ?? args.input,\n system: args.system,\n temperature: args.temperature,\n maxOutputTokens: args.maxOutputTokens,\n stopSequences: args.stopSequences,\n abortSignal: args.abortSignal,\n reasoning: args.reasoning,\n responseFormat: args.responseFormat,\n providerOptions: args.providerOptions,\n defaultTemperature: ctx.node.config?.model?.temperature,\n stream: args.stream,\n emit: args.emit,\n onTextChunk: args.onTextChunk,\n nodeId: ctx.node.graph.node,\n emitEvent: ctx.node.emit,\n reasonTrace: ctx.reasonTrace,\n id: meta.id,\n opId: meta.opId,\n });\n}\n","import { randomUUID } from \"node:crypto\";\nimport type {\n KortyxFinishReason,\n KortyxPromptMessage,\n KortyxProviderMetadata,\n KortyxReasoningOptions,\n KortyxResponseFormat,\n KortyxStreamPart,\n KortyxUsage,\n KortyxWarning,\n ProviderModelRef,\n} from \"@kortyx/providers\";\nimport type { ReasonTraceAdapter, ReasonTraceSpan } from \"./tracing\";\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 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 reasonTrace?: ReasonTraceAdapter | undefined;\n}\n\nexport interface RunReasonEngineResult {\n text: string;\n raw?: unknown;\n usage?: KortyxUsage;\n finishReason?: KortyxFinishReason;\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 async function runReasonEngine(\n args: RunReasonEngineArgs,\n): Promise<RunReasonEngineResult> {\n const 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 =\n args.providerOptions ?? args.model.options?.providerOptions;\n\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 ...(providerOptions !== undefined ? { providerOptions } : {}),\n });\n\n const messages: KortyxPromptMessage[] = [];\n if (typeof args.system === \"string\" && args.system.length > 0) {\n messages.push({ role: \"system\", content: args.system });\n }\n messages.push({ role: \"user\", content: String(args.input ?? \"\") });\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 = args.reasonTrace?.startSpan({\n name: \"runReasonEngine\",\n attributes: {\n ...commonMeta,\n providerId: args.model.provider.id,\n modelId: args.model.modelId,\n stream,\n emit,\n ...(typeof args.nodeId === \"string\" && args.nodeId.length > 0\n ? { nodeId: args.nodeId }\n : {}),\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 },\n });\n };\n\n const failTrace = (\n span: ReasonTraceSpan | undefined,\n error: unknown,\n ): void => {\n span?.fail?.(error, {\n attributes: {\n providerId: args.model.provider.id,\n modelId: args.model.modelId,\n },\n });\n };\n\n try {\n if (stream) {\n let final = \"\";\n let raw: unknown;\n let usage: KortyxUsage | undefined;\n let finishReason: KortyxFinishReason | 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 switch (chunk.type) {\n case \"text-delta\": {\n if (chunk.delta.length === 0) break;\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 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.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 if (emit) {\n emitNodeEvent(args.emitEvent, args.nodeId, \"text-end\", {\n ...commonMeta,\n });\n }\n\n const result = {\n text: final,\n ...(raw !== undefined ? { raw } : {}),\n ...(usage !== undefined ? { usage } : {}),\n ...(finishReason !== undefined ? { finishReason } : {}),\n ...(providerMetadata !== undefined ? { providerMetadata } : {}),\n ...(warnings !== undefined ? { warnings } : {}),\n };\n endTrace(traceSpan, result);\n return result;\n }\n\n const response = await model.invoke(messages);\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.raw !== undefined ? { raw: response.raw } : {}),\n ...(response.usage !== undefined ? { usage: response.usage } : {}),\n ...(response.finishReason !== undefined\n ? { finishReason: response.finishReason }\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 failTrace(traceSpan, error);\n throw error;\n }\n}\n","import type { InterruptInput } from \"@kortyx/core\";\nimport type { KortyxFinishReason } from \"@kortyx/providers\";\nimport type { SchemaLike } from \"../types\";\nimport { parseWithSchema } from \"../validation\";\n\nconst tryJsonParse = (\n value: string,\n):\n | { ok: true; value: unknown; error?: never }\n | { ok: false; error: string } => {\n try {\n return { ok: true, value: JSON.parse(value) };\n } catch (error) {\n return {\n ok: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n};\n\nconst extractJsonCodeBlock = (value: string): string | null => {\n const match = value.match(/```(?:json)?\\s*([\\s\\S]*?)```/i);\n if (!match || typeof match[1] !== \"string\") return null;\n const inner = match[1].trim();\n return inner.length > 0 ? inner : null;\n};\n\nconst tryStringify = (value: unknown): string => {\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n\nexport const resolveOutputCandidate = (text: string): unknown => {\n const trimmed = text.trim();\n if (!trimmed) return text;\n\n const direct = tryJsonParse(trimmed);\n if (direct.ok) return direct.value;\n\n const block = extractJsonCodeBlock(trimmed);\n if (block) {\n const parsedBlock = tryJsonParse(block);\n if (parsedBlock.ok) return parsedBlock.value;\n }\n\n return text;\n};\n\nconst looksLikeStructuredJsonAttempt = (value: string): boolean => {\n const trimmed = value.trim();\n if (!trimmed) return false;\n\n return (\n trimmed.startsWith(\"{\") ||\n trimmed.startsWith(\"[\") ||\n /^```(?:json)?/i.test(trimmed)\n );\n};\n\nconst isLikelyTruncatedStructuredOutput = (text: string): boolean => {\n const trimmed = text.trim();\n if (!looksLikeStructuredJsonAttempt(trimmed)) return false;\n\n const direct = tryJsonParse(trimmed);\n if (!direct.ok && direct.error) return true;\n\n const block = extractJsonCodeBlock(trimmed);\n if (!block) return false;\n\n const parsedBlock = tryJsonParse(block);\n return !parsedBlock.ok && Boolean(parsedBlock.error);\n};\n\nconst createTruncatedStructuredOutputError = (label: string): Error =>\n new Error(\n `${label} was truncated before producing valid structured output. The model stopped due to output length. Increase maxOutputTokens or simplify the requested output.`,\n );\n\nconst createInvalidStructuredOutputError = (label: string): Error =>\n new Error(\n `${label} did not produce valid structured output. The model returned text instead of the expected JSON payload. This often happens when output is truncated or the provider does not follow JSON mode. Increase maxOutputTokens or simplify the requested output.`,\n );\n\nexport const parseReasonOutputWithSchema = <TOutput>(args: {\n text: string;\n schema: SchemaLike<TOutput>;\n finishReason?: KortyxFinishReason;\n label: string;\n}): TOutput => {\n const candidate = resolveOutputCandidate(args.text);\n\n try {\n return parseWithSchema(args.schema, candidate, args.label);\n } catch (error) {\n if (\n args.finishReason?.unified === \"length\" ||\n isLikelyTruncatedStructuredOutput(args.text)\n ) {\n throw createTruncatedStructuredOutputError(args.label);\n }\n if (typeof candidate === \"string\" && candidate.trim().length > 0) {\n throw createInvalidStructuredOutputError(args.label);\n }\n throw error;\n }\n};\n\nexport const parseInterruptFirstPassResult = <\n TRequest extends InterruptInput = InterruptInput,\n TOutput = unknown,\n>(args: {\n text: string;\n requestSchema: SchemaLike<TRequest>;\n outputSchema?: SchemaLike<TOutput>;\n finishReason?: KortyxFinishReason;\n}): {\n draftText: string;\n request: TRequest;\n output?: TOutput;\n} => {\n const candidate = resolveOutputCandidate(args.text);\n if (!isRecord(candidate)) {\n if (\n args.finishReason?.unified === \"length\" ||\n isLikelyTruncatedStructuredOutput(args.text)\n ) {\n throw createTruncatedStructuredOutputError(\"useReason output\");\n }\n if (typeof candidate === \"string\" && candidate.trim().length > 0) {\n throw createInvalidStructuredOutputError(\"useReason output\");\n }\n throw new Error(\n \"useReason first pass with interrupt must return a JSON object.\",\n );\n }\n\n const requestCandidates: unknown[] = [\n candidate.interruptRequest,\n candidate.request,\n candidate.interrupt,\n candidate,\n ];\n const requestPayload = requestCandidates.find(\n (value) => value !== null && value !== undefined,\n );\n\n const request = parseWithSchema(\n args.requestSchema,\n requestPayload,\n \"useReason interrupt.request\",\n );\n\n let output: TOutput | undefined;\n if (args.outputSchema) {\n const outputPayload = Object.hasOwn(candidate, \"output\")\n ? candidate.output\n : candidate;\n try {\n output = parseWithSchema(\n args.outputSchema,\n outputPayload,\n \"useReason output\",\n );\n } catch (error) {\n if (\n args.finishReason?.unified === \"length\" ||\n isLikelyTruncatedStructuredOutput(args.text)\n ) {\n throw createTruncatedStructuredOutputError(\"useReason output\");\n }\n if (\n typeof outputPayload === \"string\" &&\n outputPayload.trim().length > 0\n ) {\n throw createInvalidStructuredOutputError(\"useReason output\");\n }\n throw error;\n }\n }\n\n const explicitDraft =\n typeof candidate.draftText === \"string\" && candidate.draftText.length > 0\n ? candidate.draftText\n : typeof candidate.text === \"string\" && candidate.text.length > 0\n ? candidate.text\n : undefined;\n\n if (!args.outputSchema && !explicitDraft) {\n throw new Error(\n \"useReason first pass with interrupt requires `draftText` when outputSchema is not provided.\",\n );\n }\n\n const draftText =\n explicitDraft ??\n (output !== undefined ? tryStringify(output) : String(args.text ?? \"\"));\n\n return {\n draftText,\n request,\n ...(output !== undefined ? { output } : {}),\n };\n};\n","import type { InterruptInput } from \"@kortyx/core\";\nimport { toJSONSchema } from \"zod\";\nimport type { SchemaLike } from \"../types\";\n\nconst tryStringify = (value: unknown): string => {\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n};\n\nconst tryGetSchemaHint = (schema: unknown): string | undefined => {\n try {\n const hint = toJSONSchema(schema as never);\n return JSON.stringify(hint, null, 2);\n } catch {\n return undefined;\n }\n};\n\nconst withSchemaHint = (\n input: string,\n label: string,\n schema: unknown,\n): string => {\n const hint = tryGetSchemaHint(schema);\n if (!hint) return input;\n return `${input}\\n\\n${label}:\\n${hint}`;\n};\n\nexport const defaultInterruptFirstPassInput = (args: {\n input: string;\n requestSchema: SchemaLike<unknown>;\n outputSchema?: SchemaLike<unknown>;\n}): string => {\n const base = args.outputSchema\n ? [\n args.input,\n \"Output rules:\",\n \"- Return JSON only. No markdown fences.\",\n \"- Return an object with keys: output, interruptRequest, draftText.\",\n \"- output must match the expected output JSON schema.\",\n \"- interruptRequest must match the expected interrupt request JSON schema.\",\n \"- interruptRequest must be a non-null object.\",\n \"- draftText should be a concise plain-language summary of output.\",\n \"- If uncertain, still return a valid interruptRequest with safe default options.\",\n ].join(\"\\n\\n\")\n : [\n args.input,\n \"Output rules:\",\n \"- Return JSON only. No markdown fences.\",\n \"- Return an object with keys: draftText, interruptRequest.\",\n \"- draftText should be the current draft answer text.\",\n \"- interruptRequest must match the expected interrupt request JSON schema.\",\n \"- interruptRequest must be a non-null object.\",\n \"- If uncertain, still return a valid interruptRequest with safe default options.\",\n ].join(\"\\n\\n\");\n\n const withInterruptSchema = withSchemaHint(\n base,\n \"Expected interrupt request JSON schema (for `interruptRequest`)\",\n args.requestSchema,\n );\n\n if (!args.outputSchema) return withInterruptSchema;\n const withOutputSchema = withSchemaHint(\n withInterruptSchema,\n \"Expected output JSON schema (for `output`)\",\n args.outputSchema,\n );\n return [\n withOutputSchema,\n \"JSON template:\",\n '{ \"output\": { ... }, \"interruptRequest\": { ... }, \"draftText\": \"...\" }',\n ].join(\"\\n\\n\");\n};\n\nexport const defaultContinuationInput = (args: {\n input: string;\n draftText: string;\n draftOutput?: unknown;\n request: InterruptInput;\n response: unknown;\n}): string =>\n [\n \"You are continuing a paused reasoning task after user input.\",\n \"Update the previous result using the user response and return the final answer only.\",\n \"If the previous output was JSON, return JSON in the same schema.\",\n \"\",\n `Original request:\\n${args.input}`,\n `Draft answer text:\\n${args.draftText}`,\n `Draft output object:\\n${tryStringify(args.draftOutput ?? args.draftText)}`,\n `Interrupt request shown to user:\\n${tryStringify(args.request)}`,\n `User response:\\n${tryStringify(args.response)}`,\n ].join(\"\\n\\n\");\n\nexport const withOutputGuardrails = (\n input: string,\n schema?: SchemaLike<unknown>,\n): string => {\n const base = [\n input,\n \"Output rules:\",\n \"- Return only JSON, no markdown fences.\",\n \"- Ensure the response conforms to the expected output schema.\",\n \"- Do not include explanatory text outside the JSON object.\",\n ].join(\"\\n\\n\");\n return withSchemaHint(base, \"Expected output JSON schema\", schema);\n};\n\nexport const withStructuredStreamHints = (\n input: string,\n args: {\n setFieldPaths?: string[];\n appendFieldPaths?: string[];\n textDeltaFieldPaths?: string[];\n },\n): string => {\n const rules: string[] = [];\n\n for (const path of args.setFieldPaths ?? []) {\n rules.push(\n `- For the top-level field \\`${path}\\`, write one stable final value and do not rewrite it after it is complete.`,\n );\n }\n\n for (const path of args.appendFieldPaths ?? []) {\n rules.push(\n `- For the top-level array field \\`${path}\\`, write items in final order and finish each item before starting the next.`,\n );\n rules.push(\n `- Once an item in \\`${path}\\` is complete, do not rewrite or reorder earlier items.`,\n );\n }\n\n for (const path of args.textDeltaFieldPaths ?? []) {\n rules.push(\n `- For the top-level string field \\`${path}\\`, write the value progressively by appending text to the end.`,\n );\n rules.push(\n `- Do not rewrite or replace the earlier prefix of \\`${path}\\` once emitted.`,\n );\n }\n\n if (rules.length === 0) return input;\n\n return [\n input,\n \"Streaming rules:\",\n ...rules,\n \"- Keep the overall response as valid JSON.\",\n ].join(\"\\n\\n\");\n};\n","import { assertStructuredPath } from \"../structured-path\";\nimport type { UseReasonStructuredConfig } from \"../types\";\n\nconst escapeRegex = (value: string): string =>\n value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\nconst findTopLevelArrayStart = (text: string, path: string): number => {\n const match = new RegExp(`\"${escapeRegex(path)}\"\\\\s*:\\\\s*\\\\[`).exec(text);\n return match ? match.index + match[0].length : -1;\n};\n\nexport const resolveAppendFieldPaths = (\n cfg: UseReasonStructuredConfig | undefined,\n): string[] => {\n const fields = cfg?.fields;\n if (!fields) return [];\n\n const appendPaths = Object.entries(fields)\n .filter(([, mode]) => mode === \"append\")\n .map(([path]) => path);\n\n for (const path of appendPaths) {\n assertStructuredPath(path, \"useReason structured append\");\n if (path.includes(\".\")) {\n throw new Error(\n \"useReason structured append streaming requires non-empty top-level array field keys.\",\n );\n }\n }\n\n return appendPaths;\n};\n\nexport const resolveSetFieldPaths = (\n cfg: UseReasonStructuredConfig | undefined,\n): string[] => {\n const fields = cfg?.fields;\n if (!fields) return [];\n\n const setPaths = Object.entries(fields)\n .filter(([, mode]) => mode === \"set\")\n .map(([path]) => path);\n\n for (const path of setPaths) {\n assertStructuredPath(path, \"useReason structured set\");\n if (path.includes(\".\")) {\n throw new Error(\n \"useReason structured set streaming requires non-empty top-level field keys.\",\n );\n }\n }\n\n return setPaths;\n};\n\nexport const resolveTextDeltaFieldPaths = (\n cfg: UseReasonStructuredConfig | undefined,\n): string[] => {\n const fields = cfg?.fields;\n if (!fields) return [];\n\n const textPaths = Object.entries(fields)\n .filter(([, mode]) => mode === \"text-delta\")\n .map(([path]) => path);\n\n for (const path of textPaths) {\n assertStructuredPath(path, \"useReason structured text-delta\");\n if (path.includes(\".\")) {\n throw new Error(\n \"useReason structured text-delta streaming requires non-empty top-level string field keys.\",\n );\n }\n }\n\n return textPaths;\n};\n\nconst findTopLevelFieldValueStart = (text: string, path: string): number => {\n const match = new RegExp(`\"${escapeRegex(path)}\"\\\\s*:\\\\s*`).exec(text);\n return match ? match.index + match[0].length : -1;\n};\n\nconst findTopLevelStringStart = (text: string, path: string): number => {\n const match = new RegExp(`\"${escapeRegex(path)}\"\\\\s*:\\\\s*\"`).exec(text);\n return match ? match.index + match[0].length : -1;\n};\n\nconst extractCompletedStringValueAt = (args: {\n text: string;\n start: number;\n}): { complete: boolean; value?: string } => {\n let value = \"\";\n\n for (let i = args.start; i < args.text.length; i += 1) {\n const ch = args.text[i];\n if (ch === undefined) break;\n\n if (ch === '\"') {\n return {\n complete: true,\n value,\n };\n }\n\n if (ch !== \"\\\\\") {\n value += ch;\n continue;\n }\n\n const next = args.text[i + 1];\n if (!next) {\n return {\n complete: false,\n };\n }\n\n if (\n next === '\"' ||\n next === \"\\\\\" ||\n next === \"/\" ||\n next === \"b\" ||\n next === \"f\" ||\n next === \"n\" ||\n next === \"r\" ||\n next === \"t\"\n ) {\n value +=\n next === \"b\"\n ? \"\\b\"\n : next === \"f\"\n ? \"\\f\"\n : next === \"n\"\n ? \"\\n\"\n : next === \"r\"\n ? \"\\r\"\n : next === \"t\"\n ? \"\\t\"\n : next;\n i += 1;\n continue;\n }\n\n if (next === \"u\") {\n const hex = args.text.slice(i + 2, i + 6);\n if (!/^[0-9a-fA-F]{4}$/.test(hex)) {\n return {\n complete: false,\n };\n }\n value += String.fromCharCode(Number.parseInt(hex, 16));\n i += 5;\n continue;\n }\n\n return {\n complete: false,\n };\n }\n\n return {\n complete: false,\n };\n};\n\nconst extractCompletedNestedValueAt = (args: {\n text: string;\n start: number;\n opener: \"{\" | \"[\";\n closer: \"}\" | \"]\";\n}): { complete: boolean; value?: unknown } => {\n let inString = false;\n let isEscaped = false;\n let nesting = 0;\n\n for (let i = args.start; i < args.text.length; i += 1) {\n const ch = args.text[i];\n if (ch === undefined) break;\n\n if (inString) {\n if (isEscaped) {\n isEscaped = false;\n continue;\n }\n if (ch === \"\\\\\") {\n isEscaped = true;\n continue;\n }\n if (ch === '\"') {\n inString = false;\n }\n continue;\n }\n\n if (ch === '\"') {\n inString = true;\n continue;\n }\n\n if (ch === args.opener) {\n nesting += 1;\n continue;\n }\n\n if (ch === args.closer) {\n nesting -= 1;\n if (nesting === 0) {\n const raw = args.text.slice(args.start, i + 1);\n try {\n return {\n complete: true,\n value: JSON.parse(raw),\n };\n } catch {\n return {\n complete: false,\n };\n }\n }\n }\n }\n\n return {\n complete: false,\n };\n};\n\nexport const extractCompletedFieldValue = (args: {\n text: string;\n path: string;\n}): { found: boolean; complete: boolean; value?: unknown } => {\n const start = findTopLevelFieldValueStart(args.text, args.path);\n if (start < 0) {\n return {\n found: false,\n complete: false,\n };\n }\n\n const first = args.text[start];\n if (!first) {\n return {\n found: true,\n complete: false,\n };\n }\n\n if (first === '\"') {\n const parsed = extractCompletedStringValueAt({\n text: args.text,\n start: start + 1,\n });\n return parsed.complete\n ? {\n found: true,\n complete: true,\n value: parsed.value,\n }\n : {\n found: true,\n complete: false,\n };\n }\n\n if (first === \"{\") {\n const parsed = extractCompletedNestedValueAt({\n text: args.text,\n start,\n opener: \"{\",\n closer: \"}\",\n });\n return parsed.complete\n ? {\n found: true,\n complete: true,\n value: parsed.value,\n }\n : {\n found: true,\n complete: false,\n };\n }\n\n if (first === \"[\") {\n const parsed = extractCompletedNestedValueAt({\n text: args.text,\n start,\n opener: \"[\",\n closer: \"]\",\n });\n return parsed.complete\n ? {\n found: true,\n complete: true,\n value: parsed.value,\n }\n : {\n found: true,\n complete: false,\n };\n }\n\n for (let i = start; i < args.text.length; i += 1) {\n const ch = args.text[i];\n if (ch === undefined) break;\n if (ch !== \",\" && ch !== \"}\") continue;\n\n const raw = args.text.slice(start, i).trim();\n if (!raw) {\n return {\n found: true,\n complete: false,\n };\n }\n\n try {\n return {\n found: true,\n complete: true,\n value: JSON.parse(raw),\n };\n } catch {\n return {\n found: true,\n complete: false,\n };\n }\n }\n\n return {\n found: true,\n complete: false,\n };\n};\n\nexport const extractCompletedArrayItems = (args: {\n text: string;\n path: string;\n}): unknown[] => {\n const start = findTopLevelArrayStart(args.text, args.path);\n if (start < 0) return [];\n\n const items: unknown[] = [];\n let inString = false;\n let isEscaped = false;\n let nesting = 0;\n let itemStart = -1;\n\n for (let i = start; i < args.text.length; i += 1) {\n const ch = args.text[i];\n if (ch === undefined) break;\n\n if (inString) {\n if (isEscaped) {\n isEscaped = false;\n continue;\n }\n if (ch === \"\\\\\") {\n isEscaped = true;\n continue;\n }\n if (ch === '\"') {\n inString = false;\n }\n continue;\n }\n\n if (ch === '\"') {\n inString = true;\n if (itemStart < 0) itemStart = i;\n continue;\n }\n\n if (itemStart < 0) {\n if (/\\s/.test(ch) || ch === \",\") continue;\n if (ch === \"]\") break;\n itemStart = i;\n if (ch === \"{\" || ch === \"[\") {\n nesting = 1;\n } else {\n nesting = 0;\n }\n continue;\n }\n\n if (ch === \"{\" || ch === \"[\") {\n nesting += 1;\n continue;\n }\n\n if (ch === \"}\" || ch === \"]\") {\n if (nesting > 0) {\n nesting -= 1;\n if (nesting > 0) continue;\n }\n\n if (ch === \"]\") {\n const raw = args.text.slice(itemStart, i).trim();\n if (raw) {\n try {\n items.push(JSON.parse(raw));\n } catch {}\n }\n break;\n }\n }\n\n if (nesting === 0 && (ch === \",\" || ch === \"]\")) {\n const raw = args.text.slice(itemStart, i).trim();\n if (raw) {\n try {\n items.push(JSON.parse(raw));\n } catch {}\n }\n itemStart = -1;\n if (ch === \"]\") break;\n }\n }\n\n return items;\n};\n\nexport const extractStreamingStringValue = (args: {\n text: string;\n path: string;\n}): { found: boolean; complete: boolean; value: string } => {\n const start = findTopLevelStringStart(args.text, args.path);\n if (start < 0) {\n return {\n found: false,\n complete: false,\n value: \"\",\n };\n }\n\n let value = \"\";\n\n for (let i = start; i < args.text.length; i += 1) {\n const ch = args.text[i];\n if (ch === undefined) break;\n\n if (ch === '\"') {\n return {\n found: true,\n complete: true,\n value,\n };\n }\n\n if (ch !== \"\\\\\") {\n value += ch;\n continue;\n }\n\n const next = args.text[i + 1];\n if (!next) {\n return {\n found: true,\n complete: false,\n value,\n };\n }\n\n if (\n next === '\"' ||\n next === \"\\\\\" ||\n next === \"/\" ||\n next === \"b\" ||\n next === \"f\" ||\n next === \"n\" ||\n next === \"r\" ||\n next === \"t\"\n ) {\n value +=\n next === \"b\"\n ? \"\\b\"\n : next === \"f\"\n ? \"\\f\"\n : next === \"n\"\n ? \"\\n\"\n : next === \"r\"\n ? \"\\r\"\n : next === \"t\"\n ? \"\\t\"\n : next;\n i += 1;\n continue;\n }\n\n if (next === \"u\") {\n const hex = args.text.slice(i + 2, i + 6);\n if (!/^[0-9a-fA-F]{4}$/.test(hex)) {\n return {\n found: true,\n complete: false,\n value,\n };\n }\n value += String.fromCharCode(Number.parseInt(hex, 16));\n i += 5;\n continue;\n }\n\n return {\n found: true,\n complete: false,\n value,\n };\n }\n\n return {\n found: true,\n complete: false,\n value,\n };\n};\n","import type { InterruptInput, InterruptResult } from \"@kortyx/core\";\nimport type {\n KortyxFinishReason,\n KortyxProviderMetadata,\n KortyxUsage,\n KortyxWarning,\n} from \"@kortyx/providers\";\nimport {\n accumulateTokenUsage,\n getHookContext,\n getReasonTraceAdapter,\n} from \"../context\";\nimport { awaitInterruptInternal } from \"../interrupt\";\nimport { emitStructuredData, shouldEmitStructured } from \"../structured\";\nimport type { ReasonTraceSpan } from \"../tracing\";\nimport type { SchemaLike, UseReasonArgs, UseReasonResult } from \"../types\";\nimport { parseWithSchema } from \"../validation\";\nimport {\n type ReasonInterruptCheckpoint,\n readReasonCheckpoint,\n resolveHookStatePatch,\n resolveReasonCheckpointKey,\n} from \"./checkpoint\";\nimport { createRuntimeId, reasonEngine } from \"./engine\";\nimport {\n parseInterruptFirstPassResult,\n parseReasonOutputWithSchema,\n} from \"./parsing\";\nimport {\n defaultContinuationInput,\n defaultInterruptFirstPassInput,\n withOutputGuardrails,\n withStructuredStreamHints,\n} from \"./prompting\";\nimport {\n extractCompletedArrayItems,\n extractCompletedFieldValue,\n extractStreamingStringValue,\n resolveAppendFieldPaths,\n resolveSetFieldPaths,\n resolveTextDeltaFieldPaths,\n} from \"./structured-stream\";\n\nconst mergeUsage = (\n left: KortyxUsage | undefined,\n right: KortyxUsage | undefined,\n): KortyxUsage | undefined => {\n if (!left) return right;\n if (!right) return left;\n\n const sum = (\n a: number | undefined,\n b: number | undefined,\n ): number | undefined =>\n a === undefined && b === undefined ? undefined : (a ?? 0) + (b ?? 0);\n\n const raw =\n left.raw || right.raw\n ? {\n ...(left.raw ?? {}),\n ...(right.raw ?? {}),\n }\n : undefined;\n const input = sum(left.input, right.input);\n const output = sum(left.output, right.output);\n const total = sum(left.total, right.total);\n const reasoning = sum(left.reasoning, right.reasoning);\n const cacheRead = sum(left.cacheRead, right.cacheRead);\n const cacheWrite = sum(left.cacheWrite, right.cacheWrite);\n const merged: KortyxUsage = {};\n\n if (input !== undefined) merged.input = input;\n if (output !== undefined) merged.output = output;\n if (total !== undefined) merged.total = total;\n if (reasoning !== undefined) merged.reasoning = reasoning;\n if (cacheRead !== undefined) merged.cacheRead = cacheRead;\n if (cacheWrite !== undefined) merged.cacheWrite = cacheWrite;\n if (raw) merged.raw = raw;\n\n return merged;\n};\n\nconst mergeWarnings = (\n left: KortyxWarning[] | undefined,\n right: KortyxWarning[] | undefined,\n): KortyxWarning[] | undefined => {\n if (!left?.length) return right;\n if (!right?.length) return left;\n\n const seen = new Set<string>();\n const merged: KortyxWarning[] = [];\n for (const warning of [...left, ...right]) {\n const key = JSON.stringify(warning);\n if (seen.has(key)) continue;\n seen.add(key);\n merged.push(warning);\n }\n return merged;\n};\n\nconst mergeProviderMetadata = (\n left: KortyxProviderMetadata | undefined,\n right: KortyxProviderMetadata | undefined,\n): KortyxProviderMetadata | undefined => {\n if (!left) return right;\n if (!right) return left;\n return {\n ...left,\n ...right,\n };\n};\n\nconst emitReasonStructuredOutput = <TOutput>(args: {\n id?: string;\n opId: string;\n output: TOutput;\n structured: UseReasonArgs<TOutput>[\"structured\"];\n emit: boolean;\n}): void => {\n if (!args.emit || !shouldEmitStructured(args.structured)) return;\n\n emitStructuredData<TOutput>({\n dataType: args.structured?.dataType ?? \"reason-output\",\n data: args.output,\n kind: \"final\",\n ...(args.structured?.schemaId\n ? { schemaId: args.structured.schemaId }\n : {}),\n ...(args.structured?.schemaVersion\n ? { schemaVersion: args.structured.schemaVersion }\n : {}),\n ...(args.id ? { id: args.id } : {}),\n streamId: args.opId,\n });\n};\n\nconst shouldEmitReasonStructured = <\n TOutput,\n TRequest extends InterruptInput,\n TResponse,\n>(\n args: UseReasonArgs<TOutput, TRequest, TResponse>,\n): boolean => (args.emit ?? true) && shouldEmitStructured(args.structured);\n\nconst resolveEffectiveReasoningIncludeThoughts = <\n TOutput,\n TRequest extends InterruptInput,\n TResponse,\n>(\n args: UseReasonArgs<TOutput, TRequest, TResponse>,\n): boolean =>\n args.reasoning?.includeThoughts ??\n args.model.options?.reasoning?.includeThoughts ??\n false;\n\nconst resolveEffectiveResponseFormatType = <\n TOutput,\n TRequest extends InterruptInput,\n TResponse,\n>(\n args: UseReasonArgs<TOutput, TRequest, TResponse>,\n): \"text\" | \"json\" | undefined =>\n args.responseFormat?.type ?? args.model.options?.responseFormat?.type;\n\nconst assertReasoningThoughtsCompatibility = <\n TOutput,\n TRequest extends InterruptInput,\n TResponse,\n>(\n args: UseReasonArgs<TOutput, TRequest, TResponse>,\n): void => {\n if (!resolveEffectiveReasoningIncludeThoughts(args)) return;\n\n const usesStructuredOutput =\n Boolean(args.outputSchema) ||\n Boolean(args.interrupt) ||\n Boolean(args.structured) ||\n resolveEffectiveResponseFormatType(args) === \"json\";\n\n if (!usesStructuredOutput) return;\n\n throw new Error(\n \"useReason does not support reasoning.includeThoughts with structured output, interrupt mode, or JSON responseFormat. Disable includeThoughts for this call.\",\n );\n};\n\nexport async function useReason<\n TOutput = unknown,\n TRequest extends InterruptInput = InterruptInput,\n TResponse = InterruptResult,\n>(\n args: UseReasonArgs<TOutput, TRequest, TResponse>,\n): Promise<UseReasonResult<TOutput, TResponse>> {\n assertReasoningThoughtsCompatibility(args);\n const ctx = getHookContext();\n const id =\n typeof args.id === \"string\" && args.id.length > 0 ? args.id : undefined;\n const opId = createRuntimeId();\n const checkpointKey = resolveReasonCheckpointKey({\n ...(id ? { id } : {}),\n autoIndex: ctx.reasonCallIndex++,\n });\n const existingCheckpoint = readReasonCheckpoint(\n ctx.currentNodeState.byKey[checkpointKey],\n );\n\n const reasonMeta =\n typeof id === \"string\" ? ({ id, opId } as const) : ({ opId } as const);\n const traceSpan: ReasonTraceSpan | undefined =\n getReasonTraceAdapter()?.startSpan({\n name: \"useReason\",\n attributes: {\n ...(id ? { id } : {}),\n opId,\n nodeId: ctx.node.graph.node,\n providerId: args.model.provider.id,\n modelId: args.model.modelId,\n stream: args.stream ?? args.model.options?.streaming ?? true,\n emit: args.emit ?? true,\n hasOutputSchema: Boolean(args.outputSchema),\n hasInterrupt: Boolean(args.interrupt),\n hasStructured: Boolean(args.structured),\n },\n });\n const suppressTextStream = Boolean(args.outputSchema || args.interrupt);\n const setFieldPaths = resolveSetFieldPaths(args.structured);\n const appendFieldPaths = resolveAppendFieldPaths(args.structured);\n const textDeltaFieldPaths = resolveTextDeltaFieldPaths(args.structured);\n const useStructuredIncrementalStreaming = Boolean(\n args.outputSchema &&\n !args.interrupt &&\n (setFieldPaths.length > 0 ||\n appendFieldPaths.length > 0 ||\n textDeltaFieldPaths.length > 0) &&\n args.stream !== false &&\n shouldEmitReasonStructured(args),\n );\n\n let firstText = \"\";\n let firstRaw: unknown;\n let firstOutput: TOutput | undefined;\n let firstInterruptRequest: TRequest | undefined;\n\n let finalText = \"\";\n let finalRaw: unknown;\n let finalOutput: TOutput | undefined;\n let aggregatedUsage: KortyxUsage | undefined;\n let finalFinishReason: KortyxFinishReason | undefined;\n let aggregatedProviderMetadata: KortyxProviderMetadata | undefined;\n let aggregatedWarnings: KortyxWarning[] | undefined;\n const emittedSetValues = new Map<string, string>();\n const emittedAppendCounts = new Map<string, number>();\n const emittedTextValues = new Map<string, string>();\n\n if (existingCheckpoint) {\n firstText = existingCheckpoint.firstText;\n firstRaw = existingCheckpoint.firstRaw;\n firstOutput = existingCheckpoint.firstOutput as TOutput | undefined;\n finalText = firstText;\n finalRaw = firstRaw;\n finalOutput = firstOutput;\n aggregatedUsage = existingCheckpoint.firstUsage;\n finalFinishReason = existingCheckpoint.firstFinishReason;\n aggregatedProviderMetadata = existingCheckpoint.firstProviderMetadata;\n aggregatedWarnings = existingCheckpoint.firstWarnings;\n traceSpan?.addEvent?.(\"useReason.resume\", {\n checkpointKey,\n });\n } else {\n const first = await reasonEngine(\n {\n ...args,\n emit: suppressTextStream ? false : args.emit,\n stream: useStructuredIncrementalStreaming\n ? true\n : suppressTextStream\n ? false\n : args.stream,\n ...(useStructuredIncrementalStreaming\n ? {\n onTextChunk: (delta: string) => {\n firstText += delta;\n finalText = firstText;\n\n for (const path of setFieldPaths) {\n const current = extractCompletedFieldValue({\n text: firstText,\n path,\n });\n if (!current.found || !current.complete) continue;\n\n const nextSerialized = JSON.stringify(current.value);\n if (emittedSetValues.get(path) === nextSerialized) continue;\n\n emittedSetValues.set(path, nextSerialized);\n emitStructuredData({\n kind: \"set\",\n path,\n value: current.value,\n dataType: args.structured?.dataType ?? \"reason-output\",\n ...(args.structured?.schemaId\n ? { schemaId: args.structured.schemaId }\n : {}),\n ...(args.structured?.schemaVersion\n ? { schemaVersion: args.structured.schemaVersion }\n : {}),\n ...(id ? { id } : {}),\n streamId: opId,\n });\n }\n\n for (const path of appendFieldPaths) {\n const items = extractCompletedArrayItems({\n text: firstText,\n path,\n });\n const emittedAppendCount = emittedAppendCounts.get(path) ?? 0;\n if (items.length <= emittedAppendCount) continue;\n\n const nextItems = items.slice(emittedAppendCount);\n emittedAppendCounts.set(path, items.length);\n emitStructuredData({\n kind: \"append\",\n path,\n items: nextItems,\n dataType: args.structured?.dataType ?? \"reason-output\",\n ...(args.structured?.schemaId\n ? { schemaId: args.structured.schemaId }\n : {}),\n ...(args.structured?.schemaVersion\n ? { schemaVersion: args.structured.schemaVersion }\n : {}),\n ...(id ? { id } : {}),\n streamId: opId,\n });\n }\n\n for (const path of textDeltaFieldPaths) {\n const current = extractStreamingStringValue({\n text: firstText,\n path,\n });\n const emittedTextValue = emittedTextValues.get(path) ?? \"\";\n if (\n !current.found ||\n current.value.length <= emittedTextValue.length ||\n !current.value.startsWith(emittedTextValue)\n ) {\n continue;\n }\n\n const nextDelta = current.value.slice(\n emittedTextValue.length,\n );\n emittedTextValues.set(path, current.value);\n if (nextDelta.length === 0) continue;\n\n emitStructuredData({\n kind: \"text-delta\",\n path,\n delta: nextDelta,\n dataType: args.structured?.dataType ?? \"reason-output\",\n ...(args.structured?.schemaId\n ? { schemaId: args.structured.schemaId }\n : {}),\n ...(args.structured?.schemaVersion\n ? { schemaVersion: args.structured.schemaVersion }\n : {}),\n ...(id ? { id } : {}),\n streamId: opId,\n });\n }\n },\n }\n : {}),\n },\n reasonMeta,\n args.interrupt\n ? defaultInterruptFirstPassInput({\n input: args.input,\n requestSchema: args.interrupt.requestSchema,\n ...(args.outputSchema\n ? { outputSchema: args.outputSchema as SchemaLike<unknown> }\n : {}),\n })\n : args.outputSchema\n ? withOutputGuardrails(\n withStructuredStreamHints(args.input, {\n ...(setFieldPaths.length > 0 ? { setFieldPaths } : {}),\n ...(appendFieldPaths.length > 0 ? { appendFieldPaths } : {}),\n ...(textDeltaFieldPaths.length > 0\n ? { textDeltaFieldPaths }\n : {}),\n }),\n args.outputSchema as SchemaLike<unknown>,\n )\n : undefined,\n );\n firstRaw = first.raw;\n finalRaw = first.raw;\n accumulateTokenUsage(first.usage);\n aggregatedUsage = mergeUsage(aggregatedUsage, first.usage);\n finalFinishReason = first.finishReason;\n aggregatedProviderMetadata = mergeProviderMetadata(\n aggregatedProviderMetadata,\n first.providerMetadata,\n );\n aggregatedWarnings = mergeWarnings(aggregatedWarnings, first.warnings);\n traceSpan?.addEvent?.(\"useReason.first-pass.complete\", {\n textLength: first.text.length,\n hasInterrupt: Boolean(args.interrupt),\n });\n\n if (args.interrupt) {\n const firstPass = parseInterruptFirstPassResult<TRequest, TOutput>({\n text: first.text,\n requestSchema: args.interrupt.requestSchema,\n ...(first.finishReason ? { finishReason: first.finishReason } : {}),\n ...(args.outputSchema\n ? { outputSchema: args.outputSchema as SchemaLike<TOutput> }\n : {}),\n });\n firstText = firstPass.draftText;\n finalText = firstPass.draftText;\n firstInterruptRequest = firstPass.request;\n firstOutput = firstPass.output;\n finalOutput = firstPass.output;\n } else {\n firstText = first.text;\n finalText = first.text;\n if (args.outputSchema) {\n firstOutput = parseReasonOutputWithSchema({\n text: first.text,\n schema: args.outputSchema,\n ...(first.finishReason ? { finishReason: first.finishReason } : {}),\n label: \"useReason output\",\n });\n }\n finalOutput = firstOutput;\n }\n }\n\n let interruptResponse: TResponse | undefined;\n\n if (args.interrupt) {\n const requestSchema = args.interrupt.requestSchema;\n\n const interruptRequest = existingCheckpoint\n ? parseWithSchema(\n requestSchema,\n existingCheckpoint.request,\n \"useReason interrupt.request\",\n )\n : firstInterruptRequest;\n\n if (!interruptRequest) {\n throw new Error(\n \"useReason interrupt request is missing; first pass did not produce a valid interrupt payload.\",\n );\n }\n\n if (!existingCheckpoint) {\n ctx.currentNodeState.byKey[checkpointKey] = {\n status: \"awaiting_interrupt\",\n request: interruptRequest,\n firstText,\n ...(firstRaw !== undefined ? { firstRaw } : {}),\n ...(aggregatedUsage !== undefined\n ? { firstUsage: aggregatedUsage }\n : {}),\n ...(finalFinishReason !== undefined\n ? { firstFinishReason: finalFinishReason }\n : {}),\n ...(aggregatedProviderMetadata !== undefined\n ? { firstProviderMetadata: aggregatedProviderMetadata }\n : {}),\n ...(aggregatedWarnings !== undefined\n ? { firstWarnings: aggregatedWarnings }\n : {}),\n ...(firstOutput !== undefined ? { firstOutput } : {}),\n } satisfies ReasonInterruptCheckpoint;\n ctx.stateDirty = true;\n }\n\n const resumeStatePatch = resolveHookStatePatch({\n nodeId: ctx.node.graph.node,\n currentNodeState: ctx.currentNodeState,\n workflowState: ctx.workflowState,\n });\n\n interruptResponse = await awaitInterruptInternal<TRequest, TResponse>({\n request: interruptRequest,\n requestSchema,\n responseSchema: args.interrupt.responseSchema,\n ...(args.interrupt.schemaId ? { schemaId: args.interrupt.schemaId } : {}),\n ...(args.interrupt.schemaVersion\n ? { schemaVersion: args.interrupt.schemaVersion }\n : {}),\n ...(id ? { id } : {}),\n meta: {\n __kortyxResumeStatePatch: resumeStatePatch,\n },\n });\n traceSpan?.addEvent?.(\"useReason.interrupt.resolved\", {\n checkpointKey,\n });\n\n if (Object.hasOwn(ctx.currentNodeState.byKey, checkpointKey)) {\n delete ctx.currentNodeState.byKey[checkpointKey];\n ctx.stateDirty = true;\n }\n\n const continuationInput = defaultContinuationInput({\n input: args.input,\n draftText: firstText,\n ...(firstOutput !== undefined ? { draftOutput: firstOutput } : {}),\n request: interruptRequest,\n response: interruptResponse,\n });\n\n const second = await reasonEngine(\n {\n ...args,\n emit: suppressTextStream ? false : args.emit,\n stream: suppressTextStream ? false : args.stream,\n },\n reasonMeta,\n args.outputSchema\n ? withOutputGuardrails(\n continuationInput,\n args.outputSchema as SchemaLike<unknown>,\n )\n : continuationInput,\n );\n finalText = second.text;\n finalRaw = second.raw;\n accumulateTokenUsage(second.usage);\n aggregatedUsage = mergeUsage(aggregatedUsage, second.usage);\n finalFinishReason = second.finishReason;\n aggregatedProviderMetadata = mergeProviderMetadata(\n aggregatedProviderMetadata,\n second.providerMetadata,\n );\n aggregatedWarnings = mergeWarnings(aggregatedWarnings, second.warnings);\n traceSpan?.addEvent?.(\"useReason.continuation.complete\", {\n textLength: second.text.length,\n });\n\n if (args.outputSchema) {\n finalOutput = parseReasonOutputWithSchema({\n text: finalText,\n schema: args.outputSchema,\n ...(second.finishReason ? { finishReason: second.finishReason } : {}),\n label: \"useReason output\",\n });\n }\n }\n\n if (finalOutput !== undefined) {\n emitReasonStructuredOutput<TOutput>({\n ...(id ? { id } : {}),\n opId,\n output: finalOutput,\n structured: args.structured,\n emit: args.emit ?? true,\n });\n }\n\n const result = {\n ...(id ? { id } : {}),\n opId,\n text: finalText,\n ...(finalRaw !== undefined ? { raw: finalRaw } : {}),\n ...(aggregatedUsage !== undefined ? { usage: aggregatedUsage } : {}),\n ...(finalFinishReason !== undefined\n ? { finishReason: finalFinishReason }\n : {}),\n ...(aggregatedProviderMetadata !== undefined\n ? { providerMetadata: aggregatedProviderMetadata }\n : {}),\n ...(aggregatedWarnings !== undefined\n ? { warnings: aggregatedWarnings }\n : {}),\n ...(finalOutput !== undefined ? { output: finalOutput } : {}),\n ...(interruptResponse !== undefined ? { interruptResponse } : {}),\n };\n\n traceSpan?.end?.({\n ...(aggregatedUsage !== undefined ? { usage: aggregatedUsage } : {}),\n ...(finalFinishReason !== undefined\n ? { finishReason: finalFinishReason }\n : {}),\n ...(aggregatedProviderMetadata !== undefined\n ? { providerMetadata: aggregatedProviderMetadata }\n : {}),\n ...(aggregatedWarnings !== undefined\n ? { warnings: aggregatedWarnings }\n : {}),\n attributes: {\n textLength: finalText.length,\n resumedFromCheckpoint: Boolean(existingCheckpoint),\n interrupted: Boolean(interruptResponse !== undefined),\n },\n });\n\n return result;\n}\n","import type { InterruptInput, InterruptResult } from \"@kortyx/core\";\nimport { getHookContext } from \"./context\";\nimport { awaitInterruptInternal } from \"./interrupt\";\nimport { useReason as useReasonInternal } from \"./reason/use-reason\";\nimport { emitStructuredData } from \"./structured\";\nimport type {\n UseInterruptArgs,\n UseReasonArgs,\n UseReasonResult,\n UseStructuredDataArgs,\n} from \"./types\";\n\nexport type {\n SchemaLike,\n StructuredDataKind,\n UseInterruptArgs,\n UseReasonArgs,\n UseReasonInterruptConfig,\n UseReasonResult,\n UseReasonStructuredConfig,\n UseStructuredDataAppendArgs,\n UseStructuredDataArgs,\n UseStructuredDataFinalArgs,\n UseStructuredDataSetArgs,\n UseStructuredDataTextDeltaArgs,\n} from \"./types\";\n\ntype StateSetter<T> = (next: T | ((prev: T) => T)) => void;\n\nexport function useStructuredData<TData = unknown>(\n args: UseStructuredDataArgs<TData>,\n): void {\n emitStructuredData(args);\n}\n\nexport function useReason<\n TOutput = unknown,\n TRequest extends InterruptInput = InterruptInput,\n TResponse = InterruptResult,\n>(\n args: UseReasonArgs<TOutput, TRequest, TResponse>,\n): Promise<UseReasonResult<TOutput, TResponse>> {\n return useReasonInternal(args);\n}\n\nexport function useInterrupt<\n TRequest extends InterruptInput = InterruptInput,\n TResponse = InterruptResult,\n>(args: UseInterruptArgs<TRequest, TResponse>): Promise<TResponse> {\n return awaitInterruptInternal(args);\n}\n\nexport function useNodeState<T>(initialValue: T): [T, StateSetter<T>] {\n const ctx = getHookContext();\n const nodeState = ctx.currentNodeState;\n\n const index = ctx.nodeStateIndex++;\n if (index >= nodeState.byIndex.length) {\n nodeState.byIndex[index] = initialValue as T;\n ctx.stateDirty = true;\n }\n\n const getValue = () => nodeState.byIndex[index] as T;\n const setValue: StateSetter<T> = (next) => {\n const prev = getValue();\n const resolved =\n typeof next === \"function\" ? (next as (p: T) => T)(prev) : next;\n nodeState.byIndex[index] = resolved;\n ctx.stateDirty = true;\n };\n\n return [getValue(), setValue];\n}\n\nexport function useWorkflowState<T>(\n key: string,\n ...rest: [] | [T]\n): [T, StateSetter<T>] {\n const ctx = getHookContext();\n const workflowState = ctx.workflowState;\n const hasInitial = rest.length > 0;\n const initialValue = rest[0];\n\n if (!Object.hasOwn(workflowState, key) && hasInitial) {\n workflowState[key] = initialValue as T;\n ctx.stateDirty = true;\n }\n\n const getValue = () => workflowState[key] as T;\n const setValue: StateSetter<T> = (next) => {\n const prev = getValue();\n const resolved =\n typeof next === \"function\" ? (next as (p: T) => T)(prev) : next;\n workflowState[key] = resolved;\n ctx.stateDirty = true;\n };\n\n return [getValue(), setValue];\n}\n"],"mappings":"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","names":["useReason","import_node_crypto","import_node_crypto","response","result","createRuntimeId","isRecord","tryStringify","createRuntimeId","useReason"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kortyx/hooks",
3
- "version": "0.10.0",
3
+ "version": "0.10.1",
4
4
  "private": false,
5
5
  "description": "Lifecycle hooks and extension points for Kortyx.",
6
6
  "keywords": [
@@ -36,15 +36,15 @@
36
36
  "CHANGELOG.md"
37
37
  ],
38
38
  "dependencies": {
39
- "zod": "^4.1.13",
40
- "@kortyx/core": "0.5.0",
39
+ "zod": "^4.3.6",
40
+ "@kortyx/core": "0.5.1",
41
41
  "@kortyx/providers": "0.4.0"
42
42
  },
43
43
  "devDependencies": {
44
- "turbo": "^2.5.4",
45
- "typescript": "5.7.2",
44
+ "turbo": "2.6.1",
45
+ "typescript": "5.9.3",
46
46
  "tsup": "^8.5.1",
47
- "vitest": "^3.2.4"
47
+ "vitest": "^4.1.5"
48
48
  },
49
49
  "sideEffects": false,
50
50
  "repository": {