@cognidesk/core 0.0.3-dev.2 → 0.0.3-dev.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2881 -441
- package/dist/index.js +4197 -454
- package/package.json +4 -3
- package/dist/index.js.map +0 -1
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/errors.ts","../src/runtime/facade-events.ts","../src/telemetry.ts","../src/runtime/history.ts","../src/runtime/context.ts","../src/runtime/journey-state.ts","../src/runtime/rendering.ts","../src/runtime/replay.ts","../src/runtime/facade-conversations.ts","../src/logging.ts","../src/runtime/snapshots.ts","../src/runtime/lifecycle.ts","../src/runtime/facade-lifecycle.ts","../src/runtime/errors.ts","../src/runtime/schemas.ts","../src/runtime/citations.ts","../src/runtime/compaction.ts","../src/runtime/prompt-profiles.ts","../src/runtime/privacy.ts","../src/runtime/state-runners/retry.ts","../src/runtime/state-runners/action-runs.ts","../src/runtime/state-runners/tool-runs.ts","../src/runtime/tools.ts","../src/runtime/model-runner.ts","../src/runtime/facade-models.ts","../src/runtime/kernel-core.ts","../src/journey-index/embeddings.ts","../src/journey-index/schema.ts","../src/journey-index/hashing.ts","../src/journey-index/build.ts","../src/journey-index/validation.ts","../src/journey-index/selection.ts","../src/runtime/journey-selection/delegation.ts","../src/runtime/journey-selection/knowledge.ts","../src/runtime/journey-selection.ts","../src/runtime/transitions.ts","../src/runtime/facade-routing.ts","../src/runtime/kernel-routing.ts","../src/runtime/prompts.ts","../src/runtime/state-machine.ts","../src/runtime/state-machine/entry.ts","../src/runtime/state-machine/context.ts","../src/runtime/state-machine/extraction.ts","../src/runtime/state-interactions/state-lifecycle.ts","../src/runtime/state-interactions/journey-event.ts","../src/runtime/state-interactions/widget-submission.ts","../src/builtins.ts","../src/definition/capability-scope.ts","../src/definition/primitives.ts","../src/definition/state-builder-utils.ts","../src/definition/state-builder.ts","../src/definition/utils.ts","../src/definition/journey-builders.ts","../src/definition/agent-builder.ts","../src/runtime/facade-state.ts","../src/runtime/kernel-state.ts","../src/runtime/active-turns.ts","../src/runtime/knowledge-markers.ts","../src/runtime/response-messages.ts","../src/runtime/user-turn.ts","../src/runtime/kernel.ts","../src/runtime/voice.ts","../src/runtime.ts"],"sourcesContent":["export class DefinitionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"DefinitionError\";\n }\n}\n","import { randomUUID } from \"node:crypto\";\nimport type { CompiledAgent, EventRoutingMode, JourneyEventDefinition } from \"../definition.js\";\nimport type { ConversationRecord, RuntimeEventInput } from \"../storage.js\";\nimport {\n activeRuntimeEventTelemetry,\n recordRuntimeEventMetric,\n telemetryEventNames,\n addTelemetryContentEvent,\n} from \"../telemetry.js\";\nimport type {\n AgentModelSet,\n CustomRuntimeEventDefinition,\n ModelAdapter,\n ModelMessage,\n RuntimeEvent,\n RuntimeSnapshot,\n TextGenerationInput,\n TextGenerationOutput,\n} from \"../types.js\";\nimport { listConversationMessages } from \"./history.js\";\nimport {\n createGeneratedPreambleMessages,\n normalizeGeneratedPreamble,\n} from \"./rendering.js\";\nimport type {\n EmitCustomEventInput,\n EmitGeneratedPreambleInput,\n EmitGeneratedPreambleResult,\n EmitIntermediateMessageInput,\n EmitJourneyEventInput,\n EmitJourneyEventResult,\n RuntimeEventEmitter,\n RuntimeOptions,\n} from \"./types.js\";\n\nexport async function emitRuntimeEvent<TEvent extends RuntimeEventInput>(\n options: RuntimeOptions,\n event: TEvent,\n): Promise<RuntimeEvent> {\n const stored = await options.storage.appendEvent({\n ...event,\n id: event.id ?? randomUUID(),\n createdAt: event.createdAt ?? new Date().toISOString(),\n telemetry: activeRuntimeEventTelemetry(options),\n });\n recordRuntimeEventMetric(options, {\n \"cognidesk.runtime.event.type\": stored.type,\n });\n addTelemetryContentEvent(options, telemetryEventNames.runtimeEvent, {\n \"cognidesk.runtime.event.type\": stored.type,\n \"cognidesk.runtime.event.offset\": stored.offset,\n \"cognidesk.runtime.event.data\": stored.data,\n });\n return stored;\n}\n\nexport async function emitRuntimeIntermediateMessage(\n options: RuntimeOptions,\n requireConversation: (conversationId: string) => Promise<ConversationRecord>,\n emit: RuntimeEventEmitter,\n input: EmitIntermediateMessageInput,\n): Promise<{ events: RuntimeEvent[] }> {\n await requireConversation(input.conversationId);\n const events: RuntimeEvent[] = [];\n const started = await emit({\n conversationId: input.conversationId,\n type: \"message.started\",\n data: { role: \"assistant\" },\n });\n events.push(started);\n if (options.streaming?.syntheticDeltas && input.text.length > 0) {\n const delta = await emit({\n conversationId: input.conversationId,\n type: \"message.delta\",\n data: { textDelta: input.text },\n });\n events.push(delta);\n }\n const completed = await emit({\n conversationId: input.conversationId,\n type: \"message.completed\",\n data: {\n text: input.text,\n intermediate: true,\n ...(input.visibleToModel ? { visibleToModel: true } : {}),\n },\n });\n events.push(completed);\n return { events };\n}\n\nexport async function emitRuntimeGeneratedPreamble(\n deps: {\n options: RuntimeOptions;\n requireAgent: () => CompiledAgent;\n requireModels: () => AgentModelSet;\n requireConversation: (conversationId: string) => Promise<ConversationRecord>;\n generateTextWithTrace: (input: {\n conversationId: string;\n model: ModelAdapter;\n input: TextGenerationInput;\n }) => Promise<TextGenerationOutput>;\n redactModelMessages: (\n conversation: ConversationRecord,\n messages: ModelMessage[],\n ) => Promise<ModelMessage[]>;\n redactAssistantMessage: (conversation: ConversationRecord, text: string) => Promise<string>;\n emitIntermediateMessage: (input: EmitIntermediateMessageInput) => Promise<{ events: RuntimeEvent[] }>;\n },\n input: EmitGeneratedPreambleInput,\n): Promise<EmitGeneratedPreambleResult> {\n const agent = deps.requireAgent();\n const models = deps.requireModels();\n const conversation = await deps.requireConversation(input.conversationId);\n const history = await listConversationMessages(deps.options.storage, conversation.id);\n const messages = await deps.redactModelMessages(conversation, createGeneratedPreambleMessages({\n agent,\n history,\n maxWords: input.maxWords ?? 24,\n ...(input.purpose ? { purpose: input.purpose } : {}),\n }));\n const output = await deps.generateTextWithTrace({\n conversationId: conversation.id,\n model: models.response,\n input: {\n role: \"response\",\n promptTask: \"generated-preamble\",\n promptPayload: {\n agent: {\n id: agent.id,\n instructions: agent.instructions,\n },\n history,\n purpose: input.purpose ?? null,\n maxWords: input.maxWords ?? 24,\n },\n messages,\n ...(input.signal ? { signal: input.signal } : {}),\n },\n });\n const text = await deps.redactAssistantMessage(\n conversation,\n normalizeGeneratedPreamble(output.text, input.maxWords ?? 24),\n );\n const emitted = await deps.emitIntermediateMessage({\n conversationId: conversation.id,\n text,\n });\n return { text, events: emitted.events };\n}\n\nexport async function emitRuntimeCustomEvent<TEvent extends CustomRuntimeEventDefinition>(\n requireConversationRecord: (conversationId: string) => Promise<ConversationRecord>,\n resolveCustomRuntimeEvent: (event: TEvent) => TEvent,\n emit: RuntimeEventEmitter,\n input: EmitCustomEventInput<TEvent>,\n): Promise<RuntimeEvent> {\n await requireConversationRecord(input.conversationId);\n const definition = resolveCustomRuntimeEvent(input.event);\n const payload = definition.payload.parse(input.payload);\n return emit({\n conversationId: input.conversationId,\n type: `custom.${definition.name}`,\n data: payload,\n });\n}\n\nexport async function emitRuntimeJourneyEvent<TEvent extends JourneyEventDefinition>(\n deps: {\n options: RuntimeOptions;\n requireConversation: (conversationId: string) => Promise<ConversationRecord>;\n emit: RuntimeEventEmitter;\n processJourneyEvent: (args: {\n conversation: ConversationRecord;\n eventName: string;\n routing: EventRoutingMode;\n target?: { journeyId?: string; stateId?: string };\n app: unknown;\n signal?: AbortSignal;\n emit: RuntimeEventEmitter;\n }) => Promise<RuntimeSnapshot | null>;\n },\n input: EmitJourneyEventInput<TEvent>,\n): Promise<EmitJourneyEventResult> {\n const conversation = await deps.requireConversation(input.conversationId);\n const routing = input.routing ?? input.event.routing ?? \"activeJourneyOnly\";\n const payload = input.event.payload.parse(input.payload);\n const emitted: RuntimeEvent[] = [];\n const emit = async <TRuntimeEvent extends RuntimeEventInput>(event: TRuntimeEvent) => {\n const stored = await deps.emit(event);\n emitted.push(stored);\n return stored;\n };\n const event = await emit({\n conversationId: input.conversationId,\n type: \"journey.event.emitted\",\n data: {\n name: input.event.name,\n payload,\n routing,\n ...(input.target ? { target: input.target } : {}),\n },\n });\n if (routing === \"none\") {\n return {\n event,\n snapshot: await deps.options.storage.getSnapshot(input.conversationId),\n events: emitted,\n };\n }\n const snapshot = await deps.processJourneyEvent({\n conversation,\n eventName: input.event.name,\n routing,\n app: input.app ?? deps.options.app ?? {},\n emit,\n ...(input.target ? { target: input.target } : {}),\n ...(input.signal ? { signal: input.signal } : {}),\n });\n return { event, snapshot, events: emitted };\n}\n\nexport function resolveRuntimeCustomEvent<TEvent extends CustomRuntimeEventDefinition>(\n agent: CompiledAgent | undefined,\n event: TEvent,\n) {\n if (!agent) return event;\n const registered = agent.customEvents.find((candidate) => candidate.name === event.name);\n if (!registered) {\n throw new Error(`Custom runtime event '${event.name}' is not registered on agent '${agent.id}'.`);\n }\n return registered as TEvent;\n}\n","import {\n INVALID_SPAN_CONTEXT,\n SpanStatusCode,\n context,\n metrics,\n trace,\n type Attributes,\n type Span,\n} from \"@opentelemetry/api\";\n\ntype MaybePromise<T> = Promise<T> | T;\n\nexport type TelemetryContentMode = \"redacted\" | \"full\";\n\nexport interface RuntimeTelemetryOptions {\n enabled?: boolean;\n content?: TelemetryContentMode;\n}\n\nexport interface RuntimeEventTelemetry {\n traceId: string;\n spanId?: string;\n}\n\nexport interface TelemetryContextSpanOptions {\n attributes?: Attributes;\n}\n\nexport type TelemetrySpanRunner<T> = (span: Span) => MaybePromise<T>;\n\nexport interface TelemetryContext {\n startSpan(name: string, options?: TelemetryContextSpanOptions): Span;\n withSpan<T>(name: string, run: TelemetrySpanRunner<T>): Promise<T>;\n withSpan<T>(name: string, options: TelemetryContextSpanOptions, run: TelemetrySpanRunner<T>): Promise<T>;\n setAttribute(name: string, value: string | number | boolean): void;\n addEvent(name: string, attributes?: Attributes): void;\n recordException(error: unknown): void;\n}\n\nexport const telemetrySpanNames = {\n runtimeInitialize: \"cognidesk.runtime.initialize\",\n runtimeCreateConversation: \"cognidesk.runtime.create_conversation\",\n runtimeEmitEvent: \"cognidesk.runtime.emit_event\",\n runtimeEmitIntermediateMessage: \"cognidesk.runtime.emit_intermediate_message\",\n runtimeEmitGeneratedPreamble: \"cognidesk.runtime.emit_generated_preamble\",\n runtimeEmitCustomEvent: \"cognidesk.runtime.emit_custom_event\",\n runtimeEmitJourneyEvent: \"cognidesk.runtime.emit_journey_event\",\n runtimeListEvents: \"cognidesk.runtime.list_events\",\n runtimeReplayConversation: \"cognidesk.runtime.replay_conversation\",\n runtimeSubmitWidget: \"cognidesk.runtime.submit_widget\",\n runtimeGetSnapshot: \"cognidesk.runtime.get_snapshot\",\n runtimeHandleUserMessage: \"cognidesk.runtime.handle_user_message\",\n runtimeCloseConversation: \"cognidesk.runtime.close_conversation\",\n runtimeRequestHandoff: \"cognidesk.runtime.request_handoff\",\n runtimeResumeConversation: \"cognidesk.runtime.resume_conversation\",\n runtimeCompactConversation: \"cognidesk.runtime.compact_conversation\",\n journeySelect: \"cognidesk.journey.select\",\n modelGenerate: \"cognidesk.model.generate\",\n toolExecute: \"cognidesk.tool.execute\",\n actionExecute: \"cognidesk.action.execute\",\n knowledgeRetrieve: \"cognidesk.knowledge.retrieve\",\n} as const;\n\nexport const telemetryAttributes = {\n agentId: \"cognidesk.agent.id\",\n conversationId: \"cognidesk.conversation.id\",\n journeyId: \"cognidesk.journey.id\",\n stateId: \"cognidesk.state.id\",\n operation: \"cognidesk.operation\",\n modelRole: \"cognidesk.model.role\",\n modelProvider: \"cognidesk.model.provider\",\n modelName: \"cognidesk.model.name\",\n promptTask: \"cognidesk.prompt.task\",\n toolName: \"cognidesk.tool.name\",\n actionName: \"cognidesk.action.name\",\n knowledgeSourceName: \"cognidesk.knowledge.source.name\",\n success: \"cognidesk.success\",\n errorType: \"cognidesk.error.type\",\n} as const;\n\nexport const telemetryEventNames = {\n runtimeEvent: \"cognidesk.runtime.event\",\n userMessage: \"cognidesk.user.message\",\n modelInput: \"cognidesk.model.input\",\n modelOutput: \"cognidesk.model.output\",\n toolInput: \"cognidesk.tool.input\",\n toolOutput: \"cognidesk.tool.output\",\n knowledgeItems: \"cognidesk.knowledge.items\",\n} as const;\n\ntype TelemetryOptionsCarrier = {\n telemetry?: RuntimeTelemetryOptions;\n};\n\ntype MetricKind = \"runtime\" | \"model\" | \"tool\" | \"action\" | \"knowledge\";\n\ntype TelemetryMetricOptions = {\n kind: MetricKind;\n attributes?: Attributes;\n tokenUsage?: {\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n };\n};\n\nexport interface TelemetrySpanOptions {\n name: string;\n attributes?: Attributes;\n metric?: TelemetryMetricOptions;\n}\n\ntype TelemetryInstruments = ReturnType<typeof createTelemetryInstruments>;\n\nlet telemetryInstruments: TelemetryInstruments | undefined;\n\nfunction getTracer() {\n return trace.getTracer(\"cognidesk.core\");\n}\n\nfunction getTelemetryInstruments() {\n telemetryInstruments ??= createTelemetryInstruments();\n return telemetryInstruments;\n}\n\nfunction createTelemetryInstruments() {\n const meter = metrics.getMeter(\"cognidesk.core\");\n return {\n runtimeOperations: meter.createCounter(\"cognidesk.runtime.operations\", {\n description: \"Runtime SDK operations.\",\n }),\n runtimeOperationDuration: meter.createHistogram(\"cognidesk.runtime.operation.duration\", {\n description: \"Runtime SDK operation duration.\",\n unit: \"ms\",\n }),\n runtimeEvents: meter.createCounter(\"cognidesk.runtime.events\", {\n description: \"Runtime events emitted by the SDK.\",\n }),\n runtimeFailures: meter.createCounter(\"cognidesk.runtime.failures\", {\n description: \"Runtime SDK operation failures.\",\n }),\n modelCalls: meter.createCounter(\"cognidesk.model.calls\", {\n description: \"Model calls made by the SDK.\",\n }),\n modelDuration: meter.createHistogram(\"cognidesk.model.duration\", {\n description: \"Model call duration.\",\n unit: \"ms\",\n }),\n modelTokens: meter.createHistogram(\"cognidesk.model.tokens\", {\n description: \"Model token usage reported by providers.\",\n }),\n toolExecutions: meter.createCounter(\"cognidesk.tool.executions\", {\n description: \"Tool executions made by the SDK.\",\n }),\n toolDuration: meter.createHistogram(\"cognidesk.tool.duration\", {\n description: \"Tool execution duration.\",\n unit: \"ms\",\n }),\n actionExecutions: meter.createCounter(\"cognidesk.action.executions\", {\n description: \"State action executions made by the SDK.\",\n }),\n actionDuration: meter.createHistogram(\"cognidesk.action.duration\", {\n description: \"State action execution duration.\",\n unit: \"ms\",\n }),\n knowledgeRetrievals: meter.createCounter(\"cognidesk.knowledge.retrievals\", {\n description: \"Knowledge retrieval calls made by the SDK.\",\n }),\n knowledgeDuration: meter.createHistogram(\"cognidesk.knowledge.duration\", {\n description: \"Knowledge retrieval duration.\",\n unit: \"ms\",\n }),\n };\n}\n\nexport function telemetryEnabled(options: TelemetryOptionsCarrier) {\n return options.telemetry?.enabled !== false;\n}\n\nexport function telemetryContentMode(options: TelemetryOptionsCarrier): TelemetryContentMode {\n return options.telemetry?.content ?? \"redacted\";\n}\n\nexport async function withTelemetrySpan<T>(\n options: TelemetryOptionsCarrier,\n spanOptions: TelemetrySpanOptions,\n run: (span: Span) => MaybePromise<T>,\n): Promise<T> {\n if (!telemetryEnabled(options)) {\n return run(trace.wrapSpanContext(INVALID_SPAN_CONTEXT));\n }\n\n const startedAt = performance.now();\n return getTracer().startActiveSpan(spanOptions.name, {\n attributes: cleanAttributes(spanOptions.attributes),\n }, async (span) => {\n let success = false;\n try {\n const result = await run(span);\n success = true;\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : \"Operation failed.\",\n });\n recordExceptionOnSpan(span, error);\n throw error;\n } finally {\n const durationMs = performance.now() - startedAt;\n recordSpanMetric(spanOptions.metric, success, durationMs);\n span.end();\n }\n });\n}\n\nexport function recordRuntimeEventMetric(options: TelemetryOptionsCarrier, attributes: Attributes = {}) {\n if (!telemetryEnabled(options)) return;\n getTelemetryInstruments().runtimeEvents.add(1, cleanAttributes(attributes));\n}\n\nexport function addTelemetryContentEvent(\n options: TelemetryOptionsCarrier,\n name: string,\n attributes: Record<string, unknown>,\n) {\n if (!telemetryEnabled(options) || telemetryContentMode(options) !== \"full\") return;\n trace.getActiveSpan()?.addEvent(name, serializeEventAttributes(attributes));\n}\n\nexport function activeRuntimeEventTelemetry(options: TelemetryOptionsCarrier): RuntimeEventTelemetry | undefined {\n if (!telemetryEnabled(options)) return undefined;\n const spanContext = trace.getActiveSpan()?.spanContext();\n if (!spanContext || spanContext.traceId === \"00000000000000000000000000000000\") return undefined;\n return {\n traceId: spanContext.traceId,\n spanId: spanContext.spanId,\n };\n}\n\nexport function createTelemetryContext(options: TelemetryOptionsCarrier): TelemetryContext {\n return {\n startSpan(name, spanOptions = {}) {\n if (!telemetryEnabled(options)) return trace.wrapSpanContext(INVALID_SPAN_CONTEXT);\n return getTracer().startSpan(name, {\n attributes: cleanAttributes(spanOptions.attributes),\n }, context.active());\n },\n async withSpan<T>(\n name: string,\n optionsOrRun: TelemetryContextSpanOptions | TelemetrySpanRunner<T>,\n maybeRun?: TelemetrySpanRunner<T>,\n ) {\n const run = typeof optionsOrRun === \"function\" ? optionsOrRun : maybeRun;\n const spanOptions = typeof optionsOrRun === \"function\" ? {} : optionsOrRun;\n if (!run) throw new Error(\"TelemetryContext.withSpan requires a span runner.\");\n return withTelemetrySpan(options, {\n name,\n ...(spanOptions.attributes ? { attributes: spanOptions.attributes } : {}),\n }, run);\n },\n setAttribute(name, value) {\n if (!telemetryEnabled(options)) return;\n trace.getActiveSpan()?.setAttribute(name, value);\n },\n addEvent(name, attributes = {}) {\n if (!telemetryEnabled(options)) return;\n trace.getActiveSpan()?.addEvent(name, cleanAttributes(attributes));\n },\n recordException(error) {\n if (!telemetryEnabled(options)) return;\n const span = trace.getActiveSpan();\n if (span) recordExceptionOnSpan(span, error);\n },\n };\n}\n\nfunction recordSpanMetric(metric: TelemetryMetricOptions | undefined, success: boolean, durationMs: number) {\n if (!metric) return;\n const attributes = cleanAttributes({\n ...metric.attributes,\n [telemetryAttributes.success]: success,\n });\n const instruments = getTelemetryInstruments();\n if (!success) instruments.runtimeFailures.add(1, attributes);\n switch (metric.kind) {\n case \"runtime\":\n instruments.runtimeOperations.add(1, attributes);\n instruments.runtimeOperationDuration.record(durationMs, attributes);\n return;\n case \"model\":\n instruments.modelCalls.add(1, attributes);\n instruments.modelDuration.record(durationMs, attributes);\n if (metric.tokenUsage?.inputTokens !== undefined) {\n instruments.modelTokens.record(metric.tokenUsage.inputTokens, { ...attributes, \"cognidesk.token.kind\": \"input\" });\n }\n if (metric.tokenUsage?.outputTokens !== undefined) {\n instruments.modelTokens.record(metric.tokenUsage.outputTokens, { ...attributes, \"cognidesk.token.kind\": \"output\" });\n }\n if (metric.tokenUsage?.totalTokens !== undefined) {\n instruments.modelTokens.record(metric.tokenUsage.totalTokens, { ...attributes, \"cognidesk.token.kind\": \"total\" });\n }\n return;\n case \"tool\":\n instruments.toolExecutions.add(1, attributes);\n instruments.toolDuration.record(durationMs, attributes);\n return;\n case \"action\":\n instruments.actionExecutions.add(1, attributes);\n instruments.actionDuration.record(durationMs, attributes);\n return;\n case \"knowledge\":\n instruments.knowledgeRetrievals.add(1, attributes);\n instruments.knowledgeDuration.record(durationMs, attributes);\n return;\n }\n}\n\nfunction recordExceptionOnSpan(span: Span, error: unknown) {\n if (error instanceof Error) {\n span.recordException(error);\n span.setAttribute(telemetryAttributes.errorType, error.name);\n return;\n }\n span.recordException(String(error));\n span.setAttribute(telemetryAttributes.errorType, typeof error);\n}\n\nfunction cleanAttributes(attributes: Attributes | undefined): Attributes {\n if (!attributes) return {};\n return Object.fromEntries(\n Object.entries(attributes).filter((entry): entry is [string, NonNullable<Attributes[string]>] => (\n entry[1] !== undefined && entry[1] !== null\n )),\n );\n}\n\nfunction serializeEventAttributes(attributes: Record<string, unknown>): Attributes {\n return Object.fromEntries(\n Object.entries(attributes)\n .filter(([, value]) => value !== undefined && value !== null)\n .map(([key, value]) => [key, serializeAttributeValue(value)]),\n );\n}\n\nfunction serializeAttributeValue(value: unknown): string | number | boolean {\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") return value;\n return JSON.stringify(value);\n}\n","import type { CompiledAgent } from \"../definition.js\";\nimport type { StorageAdapter } from \"../storage.js\";\nimport type { RuntimeEvent } from \"../types.js\";\nimport type { ConversationMessage, VisibleCustomEventContext } from \"./types.js\";\n\nexport async function listVisibleCustomEventContext(\n storage: StorageAdapter,\n agent: CompiledAgent,\n conversationId: string,\n): Promise<VisibleCustomEventContext[]> {\n const visibleTypes = new Set(\n agent.customEvents\n .filter((event) => event.visibleToModel)\n .map((event) => `custom.${event.name}`),\n );\n if (visibleTypes.size === 0) return [];\n const events = await storage.listEvents({ conversationId });\n return events\n .filter((event) => visibleTypes.has(event.type))\n .map((event) => ({\n type: event.type,\n offset: event.offset,\n data: event.data,\n }));\n}\n\nexport async function listConversationMessages(\n storage: StorageAdapter,\n conversationId: string,\n): Promise<ConversationMessage[]> {\n const events = await storage.listEvents({ conversationId });\n return conversationMessagesFromEvents(events);\n}\n\nexport function conversationMessagesFromEvents(events: RuntimeEvent[]): ConversationMessage[] {\n const messages: ConversationMessage[] = [];\n let pendingRole: ConversationMessage[\"role\"] | null = null;\n for (const event of events) {\n if (event.type === \"message.started\") {\n pendingRole = event.data.role;\n continue;\n }\n if (event.type === \"message.aborted\") {\n pendingRole = null;\n continue;\n }\n if (event.type !== \"message.completed\") continue;\n if (event.data.intermediate && !event.data.visibleToModel) {\n pendingRole = null;\n continue;\n }\n if (!pendingRole) continue;\n messages.push({\n role: pendingRole,\n content: event.data.text,\n });\n pendingRole = null;\n }\n return messages;\n}\n","import { z } from \"zod\";\nimport type { GuardResult, JourneyContextRecord } from \"../types.js\";\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function getPathValue(context: Record<string, unknown>, path: string) {\n let current: unknown = context;\n for (const part of path.split(\".\")) {\n if (!isRecord(current)) return undefined;\n current = current[part];\n }\n return current;\n}\n\nexport function setPathValue(context: Record<string, unknown>, path: string, value: unknown) {\n const parts = path.split(\".\");\n let current = context;\n for (const part of parts.slice(0, -1)) {\n const next = current[part];\n if (!isRecord(next)) current[part] = {};\n current = current[part] as Record<string, unknown>;\n }\n const last = parts.at(-1);\n if (last) current[last] = value;\n}\n\nexport function selectContextFields(context: Record<string, unknown>, fields: string[]) {\n const selected: Record<string, unknown> = {};\n for (const field of fields) {\n const value = getPathValue(context, field);\n if (value !== undefined) setPathValue(selected, field, structuredClone(value));\n }\n return selected;\n}\n\nexport function hasUsableValue(value: unknown) {\n if (value === undefined || value === null) return false;\n if (typeof value === \"string\") return value.trim().length > 0;\n if (Array.isArray(value)) return value.length > 0;\n return true;\n}\n\nexport function guardAllows(result: GuardResult) {\n if (typeof result === \"boolean\") return result;\n return result.allow;\n}\n\nexport function isStructuredGuardDenial(result: GuardResult): result is Extract<GuardResult, { allow: false }> {\n return typeof result === \"object\" && result !== null && result.allow === false;\n}\n\nexport function createJourneyContextView(\n input: unknown,\n activeContext: Record<string, unknown>,\n storedContexts: JourneyContextRecord[],\n) {\n const parsed = z.object({\n journeyId: z.string(),\n fields: z.array(z.string()).optional(),\n }).parse(input);\n const stored = storedContexts.find((record) => record.journeyId === parsed.journeyId);\n const context = isRecord(stored?.context) ? stored.context : activeContext;\n if (!parsed.fields?.length) {\n return {\n journeyId: parsed.journeyId,\n context: structuredClone(context),\n };\n }\n const selected: Record<string, unknown> = {};\n for (const field of parsed.fields) {\n const value = getPathValue(context, field);\n if (value !== undefined) setPathValue(selected, field, structuredClone(value));\n }\n return {\n journeyId: parsed.journeyId,\n context: selected,\n };\n}\n","import type { CompiledJourney } from \"../definition.js\";\nimport type { JourneyContextRecord, JourneySummary, RuntimeSnapshot } from \"../types.js\";\nimport { getPathValue, hasUsableValue, isRecord, setPathValue } from \"./context.js\";\nimport type { StateMachineTurnResult } from \"./types.js\";\n\nexport function findJourneyState(journey: CompiledJourney, stateId: string | undefined) {\n if (!stateId) return undefined;\n return journey.states.find((state) => state.id === stateId);\n}\n\nexport function findJourneyStates(journey: CompiledJourney, stateIds: string[]) {\n const stateById = new Map(journey.states.map((state) => [state.id, state]));\n return stateIds\n .map((stateId) => stateById.get(stateId))\n .filter((state): state is CompiledJourney[\"states\"][number] => Boolean(state));\n}\n\nexport function mergeActiveStates(...stateGroups: CompiledJourney[\"states\"][]) {\n const byId = new Map<string, CompiledJourney[\"states\"][number]>();\n for (const state of stateGroups.flat()) byId.set(state.id, state);\n return [...byId.values()];\n}\n\nexport function resolveWidgetPromptState(\n journey: CompiledJourney,\n snapshot: RuntimeSnapshot | null,\n promptId: string,\n) {\n const activeStateIds = new Set(snapshot?.activeStateIds ?? []);\n const fieldGroupPrompt = parseFieldGroupPromptId(promptId);\n if (fieldGroupPrompt && fieldGroupPrompt.journeyId === journey.id && activeStateIds.has(fieldGroupPrompt.stateId)) {\n return findJourneyState(journey, fieldGroupPrompt.stateId);\n }\n const fieldPrompt = parseFieldPromptId(promptId);\n if (fieldPrompt && fieldPrompt.journeyId === journey.id && activeStateIds.has(fieldPrompt.stateId)) {\n return findJourneyState(journey, fieldPrompt.stateId);\n }\n const fieldConfirmationPrompt = parseFieldConfirmationPromptId(promptId);\n if (\n fieldConfirmationPrompt\n && fieldConfirmationPrompt.journeyId === journey.id\n && activeStateIds.has(fieldConfirmationPrompt.stateId)\n ) {\n return findJourneyState(journey, fieldConfirmationPrompt.stateId);\n }\n const confirmationPrompt = parseToolConfirmationPromptId(promptId);\n if (confirmationPrompt && confirmationPrompt.journeyId === journey.id && activeStateIds.has(confirmationPrompt.stateId)) {\n return findJourneyState(journey, confirmationPrompt.stateId);\n }\n return findJourneyState(journey, snapshot?.activeStateIds[0]);\n}\n\nexport function createJourneyCompletion(journeyId: string, activeStates: CompiledJourney[\"states\"]): StateMachineTurnResult[\"completed\"] | undefined {\n if (activeStates.length === 0 || activeStates.some((state) => state.type !== \"final\")) return undefined;\n const onlyState = activeStates.length === 1 ? activeStates[0] : undefined;\n return {\n journeyId,\n ...(onlyState ? { stateId: onlyState.id } : {}),\n };\n}\n\nexport function appendJourneySummary(existing: JourneySummary[], next: JourneySummary | null) {\n if (!next) return existing;\n return [\n ...existing.filter((summary) => summary.journeyId !== next.journeyId),\n next,\n ];\n}\n\nexport function appendJourneyContext(existing: JourneyContextRecord[], next: JourneyContextRecord | null) {\n if (!next) return existing;\n return [\n ...existing.filter((record) => record.journeyId !== next.journeyId),\n next,\n ];\n}\n\nexport function createJourneyContextRecord(args: {\n journeyId: string;\n completed: NonNullable<StateMachineTurnResult[\"completed\"]>;\n context: Record<string, unknown>;\n updatedAt: string;\n}): JourneyContextRecord {\n return {\n journeyId: args.journeyId,\n context: structuredClone(args.context),\n updatedAt: args.updatedAt,\n ...(args.completed.stateId ? { stateId: args.completed.stateId } : {}),\n };\n}\n\nexport function createJourneySummary(args: {\n journey: CompiledJourney;\n completedAt: string;\n stateMachineTurn: StateMachineTurnResult | null;\n delegationCompletion: { journeyId: string; reason?: string } | null;\n}): JourneySummary {\n const completed = args.stateMachineTurn?.completed;\n const context = args.stateMachineTurn?.journeyContext;\n const contextSummary = context && Object.keys(context).length > 0\n ? ` Context: ${JSON.stringify(context)}`\n : \"\";\n const reason = args.delegationCompletion?.reason;\n return {\n journeyId: args.journey.id,\n kind: args.journey.kind,\n completedAt: args.completedAt,\n summary: reason\n ?? `${args.journey.condition}${completed?.stateId ? ` Completed at state '${completed.stateId}'.` : \"\"}${contextSummary}`,\n ...(completed?.stateId ? { stateId: completed.stateId } : {}),\n ...(reason ? { reason } : {}),\n };\n}\n\nexport function resolveActiveStates(journey: CompiledJourney | null, stateMachineTurn: StateMachineTurnResult | null) {\n if (!journey || journey.kind !== \"stateMachine\" || !stateMachineTurn) return [];\n const activeStateIds = new Set(stateMachineTurn.activeStateIds);\n return journey.states.filter((state) => activeStateIds.has(state.id));\n}\n\nexport function isFieldRequired(\n field: CompiledJourney[\"states\"][number][\"collected\"][number],\n context: Record<string, unknown>,\n) {\n if (field.requiredWhen) return field.requiredWhen({ context });\n return field.required;\n}\n\nexport function hasEventTransition(state: CompiledJourney[\"states\"][number], eventName: string) {\n return state.transitions.some((transition) => (\n transition.kind === \"event\" && (transition.eventName ?? transition.description) === eventName\n ));\n}\n\nexport function createToolConfirmationPromptId(journeyId: string, stateId: string, toolName: string) {\n return `confirm:${journeyId}:${stateId}:${toolName}`;\n}\n\nexport function createGuardPromptId(journeyId: string, stateId: string | undefined, code: string) {\n return `guard:${journeyId}:${stateId ?? \"journey\"}:${encodeURIComponent(code)}`;\n}\n\nexport function createFieldPromptId(journeyId: string, stateId: string, path: string) {\n return `field:${journeyId}:${stateId}:${encodeURIComponent(path)}`;\n}\n\nexport function createFieldGroupPromptId(journeyId: string, stateId: string) {\n return `fields:${journeyId}:${stateId}`;\n}\n\nexport function createFieldConfirmationPromptId(journeyId: string, stateId: string, path: string) {\n return `confirm-field:${journeyId}:${stateId}:${encodeURIComponent(path)}`;\n}\n\nexport function parseFieldGroupPromptId(promptId: string) {\n const [kind, journeyId, stateId] = promptId.split(\":\");\n if (kind !== \"fields\" || !journeyId || !stateId) return null;\n return {\n journeyId,\n stateId,\n };\n}\n\nexport function parseFieldPromptId(promptId: string) {\n const [kind, journeyId, stateId, encodedPath] = promptId.split(\":\");\n if (kind !== \"field\" || !journeyId || !stateId || !encodedPath) return null;\n return {\n journeyId,\n stateId,\n path: decodeURIComponent(encodedPath),\n };\n}\n\nexport function parseFieldConfirmationPromptId(promptId: string) {\n const [kind, journeyId, stateId, encodedPath] = promptId.split(\":\");\n if (kind !== \"confirm-field\" || !journeyId || !stateId || !encodedPath) return null;\n return {\n journeyId,\n stateId,\n path: decodeURIComponent(encodedPath),\n };\n}\n\nexport function parseToolConfirmationPromptId(promptId: string) {\n const [kind, journeyId, stateId, ...toolNameParts] = promptId.split(\":\");\n const toolName = toolNameParts.join(\":\");\n if (kind !== \"confirm\" || !journeyId || !stateId || !toolName) return null;\n return {\n journeyId,\n stateId,\n toolName,\n };\n}\n\nexport function extractWidgetFieldValue(output: unknown) {\n if (isRecord(output) && \"value\" in output) return output.value;\n if (isRecord(output) && \"selectedId\" in output) return output.selectedId;\n if (isRecord(output) && \"values\" in output) return output.values;\n return output;\n}\n\nexport { getPathValue, hasUsableValue, setPathValue };\n","import type { JourneyCandidate } from \"../journey-index.js\";\nimport type { CompiledAgent, CompiledJourney } from \"../definition.js\";\nimport type { ModelMessage, RuntimeEvent } from \"../types.js\";\nimport { resolveActiveStates } from \"./journey-state.js\";\nimport type { ConversationMessage, RankedJourneyCandidate, StateMachineTurnResult } from \"./types.js\";\n\nexport function normalizeConfidence(candidate: RankedJourneyCandidate) {\n if (candidate.matchConfidence !== undefined) return candidate.matchConfidence;\n if (candidate.reason === \"always\") return 1;\n if (candidate.reason === \"matcher\") return 0.99;\n return Math.max(0, Math.min(1, (candidate.similarity + 1) / 2));\n}\n\nexport function clampConfidence(value: number) {\n return Math.max(0, Math.min(1, value));\n}\n\nexport function renderJourneyCandidateForMatcher(candidate: JourneyCandidate) {\n const journey = candidate.journey;\n return [\n `- journeyId: ${journey.id}`,\n ` kind: ${journey.kind}`,\n ` condition: ${journey.condition}`,\n ` indexReason: ${candidate.reason}`,\n ` indexScore: ${candidate.score.toFixed(4)}`,\n ` stickiness: ${journey.stickiness}`,\n journey.tags.length > 0 ? ` tags: ${journey.tags.join(\", \")}` : \"\",\n journey.examples.length > 0 ? ` examples: ${journey.examples.join(\" | \")}` : \"\",\n ].filter(Boolean).join(\"\\n\");\n}\n\nexport function renderConversationTranscript(history: ConversationMessage[]) {\n if (history.length === 0) return \"No prior conversation messages.\";\n return history.map((message) => `${message.role}: ${message.content}`).join(\"\\n\");\n}\n\nexport function renderJourneyRuntimeContext(journey: CompiledJourney, stateMachineTurn: StateMachineTurnResult | null) {\n const lines = [\n `Active journey: ${journey.id}`,\n `Journey kind: ${journey.kind}`,\n `Journey condition: ${journey.condition}`,\n ];\n if (journey.kind === \"delegation\" && journey.delegation) {\n lines.push(`Delegation goal: ${journey.delegation.goal}`);\n if (journey.delegation.instructions) lines.push(`Delegation instructions: ${journey.delegation.instructions}`);\n if (journey.delegation.completeWhen.length > 0) {\n lines.push(`Delegation completion criteria: ${journey.delegation.completeWhen.join(\"; \")}`);\n }\n if (journey.delegation.tools.length > 0) {\n lines.push(`Delegation tools: ${journey.delegation.tools.map((toolDefinition) => toolDefinition.name).join(\", \")}`);\n }\n } else {\n const activeStates = resolveActiveStates(journey, stateMachineTurn);\n lines.push(\n stateMachineTurn?.activeStateIds.length\n ? `Active state: ${stateMachineTurn.activeStateIds.join(\", \")}`\n : journey.initialStateId ? `Initial state: ${journey.initialStateId}` : \"\",\n );\n const renderedInstructions = new Set<string>();\n for (const state of activeStates) {\n for (const line of renderStateInstructionStack(journey, state).split(\"\\n\").filter(Boolean)) {\n if (renderedInstructions.has(line)) continue;\n renderedInstructions.add(line);\n lines.push(line);\n }\n }\n if (stateMachineTurn) lines.push(`Journey context: ${JSON.stringify(stateMachineTurn.journeyContext)}`);\n }\n return lines.filter(Boolean).join(\"\\n\");\n}\n\nexport function renderStateInstructionStack(journey: CompiledJourney, state: CompiledJourney[\"states\"][number]) {\n const stateById = new Map(journey.states.map((candidate) => [candidate.id, candidate]));\n const stack: string[] = [];\n let current: CompiledJourney[\"states\"][number] | undefined = state;\n while (current) {\n if (current.instructions) stack.unshift(`State ${current.id} instructions: ${current.instructions}`);\n current = current.parentId ? stateById.get(current.parentId) : undefined;\n }\n return stack.join(\"\\n\");\n}\n\nexport function renderEventsForCompaction(events: RuntimeEvent[]) {\n return events.map((event) => JSON.stringify({\n offset: event.offset,\n type: event.type,\n data: event.data,\n createdAt: event.createdAt,\n })).join(\"\\n\");\n}\n\nexport function createGeneratedPreambleMessages(args: {\n agent: CompiledAgent;\n history: ConversationMessage[];\n purpose?: string;\n maxWords: number;\n}): ModelMessage[] {\n return [\n {\n role: \"system\",\n content: [\n args.agent.instructions,\n `Write one brief wait-time preamble for the customer in ${args.maxWords} words or fewer.`,\n \"Acknowledge that work is continuing, but do not claim a result, policy, tool output, queue status, or completion.\",\n \"Return only the customer-facing sentence.\",\n args.purpose ? `Current work: ${args.purpose}` : \"\",\n ].filter(Boolean).join(\"\\n\"),\n },\n {\n role: \"user\",\n content: args.history.length > 0\n ? args.history.map((message) => `${message.role}: ${message.content}`).join(\"\\n\")\n : \"No prior customer-visible conversation messages.\",\n },\n ];\n}\n\nexport function normalizeGeneratedPreamble(text: string, maxWords: number) {\n const singleLine = text.replace(/\\s+/g, \" \").trim();\n if (!singleLine) return \"I am still checking that for you.\";\n const words = singleLine.split(\" \");\n const clipped = words.length > maxWords ? words.slice(0, maxWords).join(\" \") : singleLine;\n return clipped.replace(/[\"']$/g, \"\");\n}\n","import type { MessageSegment, RuntimeEvent } from \"../types.js\";\nimport { parseFieldConfirmationPromptId, parseFieldPromptId } from \"./journey-state.js\";\n\nexport interface ReplayedMessage {\n id: string;\n offset: number;\n role: \"user\" | \"assistant\";\n text: string;\n intermediate: boolean;\n aborted: boolean;\n reason?: string;\n segments?: MessageSegment[];\n}\n\nexport interface ReplayedPrompt {\n promptId: string;\n offset: number;\n widgetKind: string;\n input: unknown;\n}\n\nexport function replayRuntimeEvents(events: RuntimeEvent[]) {\n const messages: ReplayedMessage[] = [];\n const openPrompts = new Map<string, ReplayedPrompt>();\n let pendingRole: ReplayedMessage[\"role\"] | null = null;\n let pendingStarted: RuntimeEvent | null = null;\n\n for (const event of events) {\n if (event.type === \"message.started\") {\n pendingRole = event.data.role;\n pendingStarted = event;\n continue;\n }\n if (event.type === \"message.completed\") {\n if (!pendingRole) continue;\n messages.push({\n id: event.id,\n offset: event.offset,\n role: pendingRole,\n text: event.data.text,\n intermediate: event.data.intermediate ?? false,\n aborted: false,\n ...(event.data.segments ? { segments: event.data.segments } : {}),\n });\n pendingRole = null;\n pendingStarted = null;\n continue;\n }\n if (event.type === \"message.aborted\") {\n messages.push({\n id: event.id,\n offset: event.offset,\n role: pendingRole ?? \"assistant\",\n text: event.data.partialText ?? \"\",\n intermediate: false,\n aborted: true,\n reason: event.data.reason,\n });\n pendingRole = null;\n pendingStarted = null;\n continue;\n }\n if (event.type === \"ui.prompted\") {\n openPrompts.set(event.data.promptId, {\n promptId: event.data.promptId,\n offset: event.offset,\n widgetKind: event.data.widgetKind,\n input: event.data.input,\n });\n continue;\n }\n if (event.type === \"ui.submitted\") {\n openPrompts.delete(event.data.promptId);\n continue;\n }\n if (event.type === \"journey.extraction.accepted\") {\n for (const prompt of openPrompts.values()) {\n const fieldPrompt = parseFieldPromptId(prompt.promptId) ?? parseFieldConfirmationPromptId(prompt.promptId);\n if (\n fieldPrompt\n && fieldPrompt.journeyId === event.data.journeyId\n && fieldPrompt.stateId === event.data.stateId\n && event.data.fields.includes(fieldPrompt.path)\n ) {\n openPrompts.delete(prompt.promptId);\n }\n }\n }\n }\n\n if (pendingStarted && pendingRole) {\n messages.push({\n id: pendingStarted.id,\n offset: pendingStarted.offset,\n role: pendingRole,\n text: \"\",\n intermediate: false,\n aborted: true,\n reason: \"missing_message_completion\",\n });\n }\n\n return { messages, openPrompts: [...openPrompts.values()] };\n}\n","import { replayRuntimeEvents } from \"./replay.js\";\nimport type {\n CreateRuntimeConversationInput,\n ReplayConversationInput,\n ReplayConversationResult,\n RuntimeEventEmitter,\n RuntimeOptions,\n SubmitWidgetInput,\n} from \"./types.js\";\nimport type { ConversationRecord, RuntimeEventInput } from \"../storage.js\";\nimport type { RuntimeEvent } from \"../types.js\";\n\nexport async function createRuntimeConversation<TConversationContext = unknown>(\n options: RuntimeOptions,\n emit: RuntimeEventEmitter,\n input: CreateRuntimeConversationInput<TConversationContext>,\n): Promise<ConversationRecord<TConversationContext>> {\n const conversation = await options.storage.createConversation(input);\n await options.storage.saveSnapshot({\n conversationId: conversation.id,\n lifecycle: conversation.lifecycle,\n activeStateIds: [],\n updatedAt: conversation.updatedAt,\n });\n await emit({\n conversationId: conversation.id,\n type: \"custom.conversation.created\",\n data: {\n agentId: conversation.agentId,\n },\n });\n return conversation;\n}\n\nexport function listRuntimeEvents(\n options: RuntimeOptions,\n conversationId: string,\n afterOffset?: number,\n) {\n return options.storage.listEvents({\n conversationId,\n ...(afterOffset !== undefined ? { afterOffset } : {}),\n });\n}\n\nexport async function listAllRuntimeEvents(\n options: RuntimeOptions,\n input: {\n conversationId: string;\n afterOffset?: number;\n },\n) {\n const events: RuntimeEvent[] = [];\n let afterOffset = input.afterOffset ?? 0;\n const pageSize = 500;\n while (true) {\n const page = await options.storage.listEvents({\n conversationId: input.conversationId,\n afterOffset,\n limit: pageSize,\n });\n events.push(...page);\n if (page.length < pageSize) return events;\n afterOffset = page[page.length - 1]?.offset ?? afterOffset;\n }\n}\n\nexport async function replayRuntimeConversation(\n options: RuntimeOptions,\n requireConversationRecord: (conversationId: string) => Promise<ConversationRecord>,\n input: ReplayConversationInput,\n): Promise<ReplayConversationResult> {\n const conversation = await requireConversationRecord(input.conversationId);\n const events = await listAllRuntimeEvents(options, {\n conversationId: input.conversationId,\n ...(input.afterOffset !== undefined ? { afterOffset: input.afterOffset } : {}),\n });\n const snapshot = await options.storage.getSnapshot(input.conversationId);\n const replayed = replayRuntimeEvents(events);\n return {\n conversation,\n snapshot,\n events,\n messages: replayed.messages,\n openPrompts: replayed.openPrompts,\n };\n}\n\nexport async function submitRuntimeWidget(\n requireConversation: (conversationId: string) => Promise<ConversationRecord>,\n emit: RuntimeEventEmitter,\n processWidgetSubmission: (args: {\n conversation: ConversationRecord;\n promptId: string;\n output: unknown;\n }) => Promise<unknown>,\n validateWidgetSubmission: (args: {\n conversation: ConversationRecord;\n promptId: string;\n widgetKind: string;\n output: unknown;\n }) => Promise<{ output: unknown }>,\n input: SubmitWidgetInput,\n): Promise<RuntimeEvent> {\n const conversation = await requireConversation(input.conversationId);\n const validated = await validateWidgetSubmission({\n conversation,\n promptId: input.promptId,\n widgetKind: input.widgetKind,\n output: input.output,\n });\n const submitted = await emit({\n conversationId: input.conversationId,\n type: \"ui.submitted\",\n data: {\n promptId: input.promptId,\n widgetKind: input.widgetKind,\n output: validated.output,\n },\n });\n await processWidgetSubmission({\n conversation,\n promptId: input.promptId,\n output: validated.output,\n });\n return submitted;\n}\n\nexport type RuntimeEventInputForFacade = RuntimeEventInput;\n","import pino, { type Logger } from \"pino\";\nimport type { AgentLogLevel } from \"./definition.js\";\nimport type { RuntimeOptions } from \"./runtime/types.js\";\n\nexport type SdkLogLevel = AgentLogLevel;\nexport type SdkLogger = Pick<Logger, \"trace\" | \"debug\" | \"info\" | \"warn\" | \"error\" | \"child\">;\n\nexport interface RuntimeLogContext {\n agentId?: string;\n conversationId?: string;\n journeyId?: string;\n stateId?: string;\n}\n\nexport function createRuntimeLogger(options: RuntimeOptions): SdkLogger {\n const level = options.logLevel ?? options.agent?.logLevel;\n return pino({\n name: \"cognidesk\",\n level: level ?? \"silent\",\n base: {\n sdk: \"cognidesk\",\n ...(options.agent ? { agentId: options.agent.id } : {}),\n },\n });\n}\n\nexport function runtimeLogger(options: RuntimeOptions, context: RuntimeLogContext = {}) {\n const logger = options.logger ?? createRuntimeLogger(options);\n return Object.keys(context).length > 0 ? logger.child(context) : logger;\n}\n","import type { CompiledJourney } from \"../definition.js\";\nimport type { ConversationRecord } from \"../storage.js\";\nimport type { RuntimeSnapshot } from \"../types.js\";\nimport {\n appendJourneyContext,\n appendJourneySummary,\n createJourneyContextRecord,\n createJourneySummary,\n} from \"./journey-state.js\";\nimport type { StateMachineTurnResult } from \"./types.js\";\n\nexport function createLifecycleSnapshot(args: {\n conversationId: string;\n lifecycle: RuntimeSnapshot[\"lifecycle\"];\n updatedAt: string;\n currentSnapshot: RuntimeSnapshot | null;\n}): RuntimeSnapshot {\n return {\n conversationId: args.conversationId,\n lifecycle: args.lifecycle,\n activeStateIds: args.currentSnapshot?.activeStateIds ?? [],\n updatedAt: args.updatedAt,\n ...(args.currentSnapshot?.activeJourneyId ? { activeJourneyId: args.currentSnapshot.activeJourneyId } : {}),\n ...(args.currentSnapshot?.journeyContext !== undefined ? { journeyContext: args.currentSnapshot.journeyContext } : {}),\n ...(args.currentSnapshot?.journeyContexts ? { journeyContexts: args.currentSnapshot.journeyContexts } : {}),\n ...(args.currentSnapshot?.journeySummaries ? { journeySummaries: args.currentSnapshot.journeySummaries } : {}),\n ...(args.currentSnapshot?.compactionSummary !== undefined ? { compactionSummary: args.currentSnapshot.compactionSummary } : {}),\n ...(args.currentSnapshot?.definitionHash ? { definitionHash: args.currentSnapshot.definitionHash } : {}),\n };\n}\n\nexport function createNextSnapshot(args: {\n conversationId: string;\n previousSnapshot: RuntimeSnapshot | null;\n selectedJourney: CompiledJourney | null;\n stateMachineTurn: StateMachineTurnResult | null;\n delegationCompletion: { journeyId: string; reason?: string } | null;\n definitionHash?: string;\n}): RuntimeSnapshot {\n const journeyCompleted = Boolean(args.stateMachineTurn?.completed)\n || Boolean(args.delegationCompletion);\n const journeySummaries = appendJourneySummary(\n args.previousSnapshot?.journeySummaries ?? [],\n args.selectedJourney && journeyCompleted\n ? createJourneySummary({\n journey: args.selectedJourney,\n completedAt: new Date().toISOString(),\n stateMachineTurn: args.stateMachineTurn,\n delegationCompletion: args.delegationCompletion,\n })\n : null,\n );\n const journeyContexts = appendJourneyContext(\n args.previousSnapshot?.journeyContexts ?? [],\n args.selectedJourney && args.stateMachineTurn?.completed\n ? createJourneyContextRecord({\n journeyId: args.selectedJourney.id,\n completed: args.stateMachineTurn.completed,\n context: args.stateMachineTurn.journeyContext,\n updatedAt: new Date().toISOString(),\n })\n : null,\n );\n return {\n conversationId: args.conversationId,\n lifecycle: \"active\",\n activeStateIds: journeyCompleted ? [] : args.stateMachineTurn?.activeStateIds\n ?? (args.selectedJourney?.initialStateId ? [args.selectedJourney.initialStateId] : []),\n updatedAt: new Date().toISOString(),\n ...(!journeyCompleted && args.selectedJourney ? { activeJourneyId: args.selectedJourney.id } : {}),\n ...(!journeyCompleted && args.stateMachineTurn\n ? { journeyContext: args.stateMachineTurn.journeyContext }\n : !journeyCompleted && args.previousSnapshot?.journeyContext !== undefined ? { journeyContext: args.previousSnapshot.journeyContext } : {}),\n ...(journeyContexts.length > 0 ? { journeyContexts } : {}),\n ...(journeySummaries.length > 0 ? { journeySummaries } : {}),\n ...(args.previousSnapshot?.compactionSummary !== undefined ? { compactionSummary: args.previousSnapshot.compactionSummary } : {}),\n ...(args.definitionHash ? { definitionHash: args.definitionHash } : {}),\n };\n}\n\nexport function createStateMachineSnapshot(args: {\n conversation: ConversationRecord;\n previousSnapshot: RuntimeSnapshot | null;\n journey: CompiledJourney;\n activeStates: CompiledJourney[\"states\"];\n context: Record<string, unknown>;\n completed: NonNullable<StateMachineTurnResult[\"completed\"]> | undefined;\n updatedAt: string;\n}): RuntimeSnapshot {\n const journeySummaries = appendJourneySummary(\n args.previousSnapshot?.journeySummaries ?? [],\n args.completed ? createJourneySummary({\n journey: args.journey,\n completedAt: args.updatedAt,\n stateMachineTurn: { activeStateIds: [], journeyContext: args.context, completed: args.completed },\n delegationCompletion: null,\n }) : null,\n );\n const journeyContexts = appendJourneyContext(\n args.previousSnapshot?.journeyContexts ?? [],\n args.completed ? createJourneyContextRecord({\n journeyId: args.journey.id,\n completed: args.completed,\n context: args.context,\n updatedAt: args.updatedAt,\n }) : null,\n );\n return {\n conversationId: args.conversation.id,\n lifecycle: args.conversation.lifecycle,\n activeStateIds: args.completed ? [] : args.activeStates.map((activeState) => activeState.id),\n updatedAt: args.updatedAt,\n ...(args.completed ? {} : { activeJourneyId: args.journey.id, journeyContext: args.context }),\n ...(journeyContexts.length > 0 ? { journeyContexts } : {}),\n ...(journeySummaries.length > 0 ? { journeySummaries } : {}),\n ...(args.previousSnapshot?.compactionSummary !== undefined ? { compactionSummary: args.previousSnapshot.compactionSummary } : {}),\n ...(args.previousSnapshot?.definitionHash ? { definitionHash: args.previousSnapshot.definitionHash } : {}),\n };\n}\n","import type { ConversationRecord, StorageAdapter } from \"../storage.js\";\nimport type { RuntimeSnapshot } from \"../types.js\";\nimport { createLifecycleSnapshot } from \"./snapshots.js\";\nimport type {\n HandleUserMessageResult,\n RequestHandoffInput,\n ResumeConversationInput,\n RuntimeEventEmitter,\n} from \"./types.js\";\n\nexport async function requireActiveConversation(storage: StorageAdapter, conversationId: string) {\n const conversation = await requireConversationRecord(storage, conversationId);\n if (conversation.lifecycle !== \"active\") {\n throw new Error(`Conversation '${conversationId}' is '${conversation.lifecycle}' and cannot receive user messages.`);\n }\n return conversation;\n}\n\nexport async function requireConversationRecord(storage: StorageAdapter, conversationId: string) {\n const conversation = await storage.getConversation(conversationId);\n if (!conversation) throw new Error(`Conversation '${conversationId}' does not exist.`);\n return conversation;\n}\n\nexport async function createLifecycleInterruptionResult(args: {\n storage: StorageAdapter;\n conversationId: string;\n events: import(\"../types.js\").RuntimeEvent[];\n}): Promise<HandleUserMessageResult | null> {\n const conversation = await requireConversationRecord(args.storage, args.conversationId);\n if (conversation.lifecycle === \"active\") return null;\n const snapshot = await args.storage.getSnapshot(args.conversationId) ?? {\n conversationId: args.conversationId,\n lifecycle: conversation.lifecycle,\n activeStateIds: [],\n updatedAt: conversation.updatedAt,\n };\n return {\n conversation,\n snapshot,\n events: args.events,\n text: \"\",\n ...(snapshot.activeJourneyId ? { activeJourneyId: snapshot.activeJourneyId } : {}),\n };\n}\n\nexport async function applyConversationClosure(args: {\n storage: StorageAdapter;\n conversationId: string;\n reason?: string;\n emit: RuntimeEventEmitter;\n}) {\n const conversation = await args.storage.updateConversationLifecycle(args.conversationId, \"closed\");\n if (!conversation) throw new Error(`Conversation '${args.conversationId}' does not exist.`);\n await saveLifecycleSnapshot(args.storage, args.conversationId, \"closed\", conversation.updatedAt);\n const event = await args.emit({\n conversationId: args.conversationId,\n type: \"conversation.closed\",\n data: args.reason ? { reason: args.reason } : {},\n });\n return { conversation, event };\n}\n\nexport async function applyHandoffRequest(args: RequestHandoffInput & {\n storage: StorageAdapter;\n emit: RuntimeEventEmitter;\n}) {\n const conversation = await args.storage.updateConversationLifecycle(args.conversationId, \"handoff\");\n if (!conversation) throw new Error(`Conversation '${args.conversationId}' does not exist.`);\n await saveLifecycleSnapshot(args.storage, args.conversationId, \"handoff\", conversation.updatedAt);\n const event = await args.emit({\n conversationId: args.conversationId,\n type: \"handoff.requested\",\n data: {\n reason: args.reason,\n ...(args.summary ? { summary: args.summary } : {}),\n ...(args.payload !== undefined ? { payload: args.payload } : {}),\n },\n });\n return { conversation, event };\n}\n\nexport async function applyConversationResume(args: ResumeConversationInput & {\n storage: StorageAdapter;\n emit: RuntimeEventEmitter;\n}) {\n const current = await requireConversationRecord(args.storage, args.conversationId);\n if (current.lifecycle === \"closed\") {\n throw new Error(`Conversation '${args.conversationId}' is closed and cannot be resumed.`);\n }\n const conversation = current.lifecycle === \"active\"\n ? current\n : await args.storage.updateConversationLifecycle(args.conversationId, \"active\");\n if (!conversation) throw new Error(`Conversation '${args.conversationId}' does not exist.`);\n await saveLifecycleSnapshot(args.storage, args.conversationId, \"active\", conversation.updatedAt);\n const event = await args.emit({\n conversationId: args.conversationId,\n type: \"handoff.resumed\",\n data: {\n ...(args.reason ? { reason: args.reason } : {}),\n ...(args.payload !== undefined ? { payload: args.payload } : {}),\n },\n });\n return { conversation, event };\n}\n\nexport async function applyBuiltInLifecycleTool(args: {\n storage: StorageAdapter;\n toolName: string;\n input: unknown;\n conversationId: string;\n emit: RuntimeEventEmitter;\n}) {\n if (args.toolName === \"cognidesk.handoff\") {\n const input = args.input as { reason: string; summary?: string; payload?: unknown };\n await applyHandoffRequest({\n storage: args.storage,\n conversationId: args.conversationId,\n reason: input.reason,\n ...(input.summary ? { summary: input.summary } : {}),\n ...(input.payload !== undefined ? { payload: input.payload } : {}),\n emit: args.emit,\n });\n return true;\n }\n if (args.toolName === \"cognidesk.endConversation\") {\n const input = args.input as { reason?: string };\n await applyConversationClosure({\n storage: args.storage,\n conversationId: args.conversationId,\n ...(input.reason ? { reason: input.reason } : {}),\n emit: args.emit,\n });\n return true;\n }\n return false;\n}\n\nexport async function saveLifecycleSnapshot(\n storage: StorageAdapter,\n conversationId: string,\n lifecycle: RuntimeSnapshot[\"lifecycle\"],\n updatedAt: string,\n) {\n const currentSnapshot = await storage.getSnapshot(conversationId);\n await storage.saveSnapshot(createLifecycleSnapshot({\n conversationId,\n lifecycle,\n updatedAt,\n currentSnapshot,\n }));\n}\n\nexport type LifecycleConversation = ConversationRecord;\n","import {\n applyBuiltInLifecycleTool as applyBuiltInLifecycleToolWithStorage,\n applyConversationClosure as applyConversationClosureWithStorage,\n applyConversationResume as applyConversationResumeWithStorage,\n applyHandoffRequest as applyHandoffRequestWithStorage,\n createLifecycleInterruptionResult as createLifecycleInterruptionResultWithStorage,\n requireActiveConversation,\n requireConversationRecord as requireConversationRecordWithStorage,\n} from \"./lifecycle.js\";\nimport type {\n HandleUserMessageResult,\n RequestHandoffInput,\n ResumeConversationInput,\n RuntimeEventEmitter,\n RuntimeOptions,\n} from \"./types.js\";\nimport type { ConversationRecord } from \"../storage.js\";\nimport type { RuntimeEvent } from \"../types.js\";\n\nexport function requireRuntimeConversation(\n options: RuntimeOptions,\n conversationId: string,\n) {\n return requireActiveConversation(options.storage, conversationId);\n}\n\nexport function requireRuntimeConversationRecord(\n options: RuntimeOptions,\n conversationId: string,\n) {\n return requireConversationRecordWithStorage(options.storage, conversationId);\n}\n\nexport function createRuntimeLifecycleInterruptionResult(\n options: RuntimeOptions,\n args: {\n conversationId: string;\n events: RuntimeEvent[];\n },\n): Promise<HandleUserMessageResult | null> {\n return createLifecycleInterruptionResultWithStorage({\n storage: options.storage,\n ...args,\n });\n}\n\nexport function applyRuntimeConversationClosure(\n options: RuntimeOptions,\n args: {\n conversationId: string;\n reason?: string;\n emit: RuntimeEventEmitter;\n },\n): Promise<{ conversation: ConversationRecord }> {\n return applyConversationClosureWithStorage({\n storage: options.storage,\n ...args,\n });\n}\n\nexport function applyRuntimeHandoffRequest(\n options: RuntimeOptions,\n args: RequestHandoffInput & {\n emit: RuntimeEventEmitter;\n },\n) {\n return applyHandoffRequestWithStorage({\n storage: options.storage,\n ...args,\n });\n}\n\nexport function applyRuntimeConversationResume(\n options: RuntimeOptions,\n args: ResumeConversationInput & {\n emit: RuntimeEventEmitter;\n },\n) {\n return applyConversationResumeWithStorage({\n storage: options.storage,\n ...args,\n });\n}\n\nexport function applyRuntimeBuiltInLifecycleTool(\n options: RuntimeOptions,\n args: {\n toolName: string;\n input: unknown;\n conversationId: string;\n emit: RuntimeEventEmitter;\n },\n) {\n return applyBuiltInLifecycleToolWithStorage({\n storage: options.storage,\n ...args,\n });\n}\n","export class AbortError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"AbortError\";\n }\n}\n\nexport function isAbortLikeError(error: unknown) {\n if (error instanceof Error) {\n return error.name === \"AbortError\" || error.message === \"interrupted_by_new_message\";\n }\n return false;\n}\n","import { z } from \"zod\";\n\nexport const conversationCompactionSummarySchema = z.object({\n summary: z.string(),\n stableFacts: z.array(z.string()),\n openQuestions: z.array(z.string()),\n activeCommitments: z.array(z.string()),\n});\n\nexport type ConversationCompactionSummary = z.infer<typeof conversationCompactionSummarySchema>;\n\nexport const citationPostProcessingSchema = z.object({\n segments: z.array(z.object({\n text: z.string(),\n knowledgeIds: z.array(z.string()),\n })),\n});\n\nexport const delegationCompletionSchema = z.object({\n complete: z.boolean(),\n reason: z.string().nullable(),\n});\n\nexport const journeyMatchSchema = z.object({\n candidates: z.array(z.object({\n journeyId: z.string(),\n confidence: z.number(),\n reason: z.string(),\n })),\n});\n\nexport const transitionMatchSchema = z.object({\n candidates: z.array(z.object({\n id: z.string(),\n confidence: z.number(),\n reason: z.string(),\n })),\n});\n\nexport const stateExtractionSchema = z.object({\n values: z.object({}).catchall(z.any()),\n});\n\nconst stateExtractionValueSchema = z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n]);\n\nexport function createStateExtractionSchema(paths: string[]) {\n return z.object({\n values: z.object(Object.fromEntries(paths.map((path) => [path, stateExtractionValueSchema]))),\n });\n}\n","import type { CompiledAgent } from \"../definition.js\";\nimport type { ConversationRecord, RuntimeEventInput } from \"../storage.js\";\nimport type {\n AgentModelSet,\n MessageSegment,\n ModelAdapter,\n RuntimeEvent,\n TextGenerationInput,\n TextGenerationOutput,\n} from \"../types.js\";\nimport { isAbortLikeError } from \"./errors.js\";\nimport { citationPostProcessingSchema } from \"./schemas.js\";\nimport type { RetrievedKnowledgeItem, RuntimeOptions } from \"./types.js\";\n\ntype RuntimeEmit = <TEvent extends RuntimeEventInput>(event: TEvent) => Promise<RuntimeEvent>;\n\ntype GenerateTextWithTrace = (input: {\n conversationId: string;\n model: ModelAdapter;\n input: TextGenerationInput;\n}) => Promise<TextGenerationOutput>;\n\nexport async function createCitationSegments(args: {\n options: RuntimeOptions;\n models: AgentModelSet;\n agent: CompiledAgent;\n conversation: ConversationRecord;\n text: string;\n knowledge: RetrievedKnowledgeItem[];\n signal?: AbortSignal;\n generateTextWithTrace: GenerateTextWithTrace;\n emit: RuntimeEmit;\n}): Promise<MessageSegment[] | null> {\n if (args.knowledge.length === 0) return null;\n if (args.agent.postProcessing?.citations === false) return null;\n if (args.options.postProcessing?.citations === false) return null;\n try {\n const output = await args.generateTextWithTrace({\n conversationId: args.conversation.id,\n model: args.models.citationPostProcessing,\n input: {\n role: \"citationPostProcessing\",\n promptTask: \"citation-post-processing\",\n promptPayload: {\n assistantAnswer: args.text,\n knowledge: args.knowledge.map((item) => ({\n id: item.id,\n sourceName: item.sourceName,\n title: item.title ?? null,\n content: item.content,\n metadata: item.metadata ?? null,\n })),\n },\n messages: [\n {\n role: \"system\",\n content: \"Split the assistant answer into citation segments. Attach knowledgeIds only where the segment uses that source.\",\n },\n {\n role: \"user\",\n content: [\n \"Knowledge:\",\n ...args.knowledge.map((item) => `[${item.id}] ${item.content}`),\n \"\",\n \"Assistant answer:\",\n args.text,\n ].join(\"\\n\"),\n },\n ],\n responseFormat: citationPostProcessingSchema,\n ...(args.signal ? { signal: args.signal } : {}),\n },\n });\n const structured = citationPostProcessingSchema.parse(output.structured ?? JSON.parse(output.text));\n const knowledgeById = new Map(args.knowledge.map((item) => [item.id, item]));\n return structured.segments.map((segment, index) => ({\n id: `segment_${index + 1}`,\n text: segment.text,\n references: segment.knowledgeIds.map((id) => {\n const item = knowledgeById.get(id);\n return {\n type: \"knowledge\" as const,\n id,\n ...(item?.sourceName ? { sourceName: item.sourceName } : {}),\n ...(item?.title ? { title: item.title } : {}),\n ...(item?.metadata !== undefined ? { metadata: item.metadata } : {}),\n };\n }),\n }));\n } catch (error) {\n if (isAbortLikeError(error) && args.signal?.aborted) throw error;\n await args.emit({\n conversationId: args.conversation.id,\n type: \"error\",\n data: {\n code: \"citation_post_processing_failed\",\n message: error instanceof Error ? error.message : \"Citation post-processing failed.\",\n },\n });\n return null;\n }\n}\n","import type { z } from \"zod\";\nimport type { ConversationRecord, RuntimeEventInput } from \"../storage.js\";\nimport type {\n AgentModelSet,\n ModelAdapter,\n RuntimeEvent,\n RuntimeSnapshot,\n TextGenerationInput,\n TextGenerationOutput,\n} from \"../types.js\";\nimport { renderEventsForCompaction } from \"./rendering.js\";\nimport {\n conversationCompactionSummarySchema,\n type ConversationCompactionSummary,\n} from \"./schemas.js\";\nimport type { CompactConversationInput, CompactConversationResult, RuntimeOptions } from \"./types.js\";\n\ntype RuntimeEmit = <TEvent extends RuntimeEventInput>(event: TEvent) => Promise<RuntimeEvent>;\n\ntype GenerateTextWithTrace = (input: {\n conversationId: string;\n model: ModelAdapter;\n input: TextGenerationInput;\n}) => Promise<TextGenerationOutput>;\n\nexport async function compactConversation<TSummary = ConversationCompactionSummary>(args: {\n options: RuntimeOptions;\n models: AgentModelSet;\n conversation: ConversationRecord;\n input: CompactConversationInput;\n generateTextWithTrace: GenerateTextWithTrace;\n emit: RuntimeEmit;\n}): Promise<CompactConversationResult<TSummary>> {\n const summarySchema = args.options.compaction?.summarySchema ?? conversationCompactionSummarySchema;\n const instructions = args.options.compaction?.instructions\n ?? \"Compact the conversation events into a concise structured memory. Preserve stable facts, open questions, and active commitments.\";\n const fromOffset = args.input.fromOffset ?? 1;\n const allEvents = await args.options.storage.listEvents({ conversationId: args.input.conversationId });\n const selectedEvents = allEvents.filter((event) => (\n event.offset >= fromOffset && (args.input.toOffset === undefined || event.offset <= args.input.toOffset)\n ));\n if (selectedEvents.length === 0) {\n throw new Error(`No events found to compact for conversation '${args.input.conversationId}'.`);\n }\n const toOffset = args.input.toOffset ?? selectedEvents[selectedEvents.length - 1]?.offset ?? fromOffset;\n const emitted: RuntimeEvent[] = [];\n const started = await args.emit({\n conversationId: args.input.conversationId,\n type: \"conversation.compaction.started\",\n data: { fromOffset, toOffset },\n });\n emitted.push(started);\n\n const output = await args.generateTextWithTrace({\n conversationId: args.input.conversationId,\n model: args.models.compaction,\n input: {\n role: \"compaction\",\n promptTask: \"compaction\",\n promptPayload: {\n instructions,\n events: selectedEvents.map((event) => ({\n type: event.type,\n offset: event.offset,\n data: event.data,\n createdAt: event.createdAt,\n })),\n fromOffset,\n toOffset,\n },\n messages: [\n {\n role: \"system\",\n content: instructions,\n },\n {\n role: \"user\",\n content: renderEventsForCompaction(selectedEvents),\n },\n ],\n responseFormat: summarySchema,\n ...(args.input.signal ? { signal: args.input.signal } : {}),\n },\n });\n const summary = summarySchema.parse(output.structured ?? JSON.parse(output.text)) as TSummary;\n const currentSnapshot = await args.options.storage.getSnapshot(args.input.conversationId);\n const snapshot: RuntimeSnapshot = {\n conversationId: args.input.conversationId,\n lifecycle: args.conversation.lifecycle,\n activeStateIds: currentSnapshot?.activeStateIds ?? [],\n updatedAt: new Date().toISOString(),\n compactionSummary: summary,\n ...(currentSnapshot?.activeJourneyId ? { activeJourneyId: currentSnapshot.activeJourneyId } : {}),\n ...(currentSnapshot?.journeyContext !== undefined ? { journeyContext: currentSnapshot.journeyContext } : {}),\n ...(currentSnapshot?.journeyContexts ? { journeyContexts: currentSnapshot.journeyContexts } : {}),\n ...(currentSnapshot?.journeySummaries ? { journeySummaries: currentSnapshot.journeySummaries } : {}),\n ...(currentSnapshot?.definitionHash ? { definitionHash: currentSnapshot.definitionHash } : {}),\n };\n await args.options.storage.saveSnapshot(snapshot);\n const completed = await args.emit({\n conversationId: args.input.conversationId,\n type: \"conversation.compaction.completed\",\n data: {\n fromOffset,\n toOffset,\n schemaVersion: args.input.schemaVersion ?? args.options.compaction?.schemaVersion ?? \"cognidesk.compaction.v1\",\n },\n });\n emitted.push(completed);\n return { summary, snapshot, events: emitted };\n}\n\nexport async function compactIfNeeded<TSummary = ConversationCompactionSummary>(args: {\n options: RuntimeOptions;\n models: AgentModelSet;\n conversation: ConversationRecord;\n input: {\n conversationId: string;\n schemaVersion?: string;\n signal?: AbortSignal;\n };\n generateTextWithTrace: GenerateTextWithTrace;\n emit: RuntimeEmit;\n}) {\n const allEvents = await args.options.storage.listEvents({ conversationId: args.input.conversationId });\n if (allEvents.length < (args.options.compaction?.minEvents ?? 50)) return null;\n return compactConversation<TSummary>({\n options: args.options,\n models: args.models,\n conversation: args.conversation,\n input: {\n conversationId: args.input.conversationId,\n ...(args.input.schemaVersion ? { schemaVersion: args.input.schemaVersion } : {}),\n ...(args.input.signal ? { signal: args.input.signal } : {}),\n },\n generateTextWithTrace: args.generateTextWithTrace,\n emit: args.emit,\n });\n}\n\nexport type CompactionSummarySchema = z.ZodType;\n","import type {\n ModelAdapter,\n ModelMessage,\n ModelVisiblePromptPayload,\n PromptProfileRole,\n PromptTask,\n StructuredOutputPromptMetadata,\n TextGenerationInput,\n} from \"../types.js\";\nimport { z } from \"zod\";\n\nexport async function applyModelPromptProfile(args: {\n model: ModelAdapter;\n input: TextGenerationInput;\n}) {\n if (args.input.role === \"journeyEmbedding\") return args.input.messages;\n const profile = args.model.promptProfile;\n if (!profile) return args.input.messages;\n const promptTask = args.input.promptTask ?? defaultPromptTask(args.input.role);\n const instruction = await profile.renderInstruction({\n role: args.input.role,\n promptTask,\n model: {\n provider: args.model.provider,\n model: args.model.model,\n ...(profile.logicalModelSlug ? { logicalModelSlug: profile.logicalModelSlug } : {}),\n },\n payload: args.input.promptPayload ?? {},\n ...(args.input.responseFormat ? { structuredOutput: structuredOutputMetadata(promptTask, args.input.responseFormat) } : {}),\n });\n return prependSystemInstruction(args.input.messages, instruction);\n}\n\nfunction defaultPromptTask(role: PromptProfileRole): PromptTask {\n switch (role) {\n case \"response\":\n return \"response\";\n case \"matcher\":\n return \"journey-matcher\";\n case \"extraction\":\n return \"extraction\";\n case \"citationPostProcessing\":\n return \"citation-post-processing\";\n case \"compaction\":\n return \"compaction\";\n }\n}\n\nfunction structuredOutputMetadata(promptTask: PromptTask, schema: z.ZodType): StructuredOutputPromptMetadata {\n return {\n required: true,\n name: promptTask,\n schema: z.toJSONSchema(schema),\n };\n}\n\nfunction prependSystemInstruction(messages: ModelMessage[], instruction: string): ModelMessage[] {\n if (!instruction.trim()) return messages;\n const [first, ...rest] = messages;\n if (first?.role === \"system\") {\n return [\n {\n ...first,\n content: [instruction, first.content].filter(Boolean).join(\"\\n\\n\"),\n },\n ...rest,\n ];\n }\n return [{ role: \"system\", content: instruction }, ...messages];\n}\n\nexport function promptPayload<TPayload extends ModelVisiblePromptPayload>(payload: TPayload): TPayload {\n return payload;\n}\n","import type {\n ConversationRecord,\n CreateConversationInput,\n RuntimeEventInput,\n StorageAdapter,\n} from \"../storage.js\";\nimport type {\n ModelMessage,\n RuntimeSnapshot,\n TextGenerationInput,\n} from \"../types.js\";\nimport type { RuntimeOptions } from \"./types.js\";\n\nexport async function redactUserMessage(\n options: RuntimeOptions,\n conversation: ConversationRecord,\n text: string,\n) {\n return await options.privacy?.redactUserMessage?.({\n conversationId: conversation.id,\n agentId: conversation.agentId,\n text,\n }) ?? text;\n}\n\nexport function createPrivacyStorageAdapter(\n storage: StorageAdapter,\n privacy: RuntimeOptions[\"privacy\"],\n): StorageAdapter {\n if (!privacy?.redactConversationContext\n && !privacy?.redactRuntimeEvent\n && !privacy?.redactRuntimeSnapshot\n ) {\n return storage;\n }\n\n return {\n initialize() {\n return storage.initialize?.();\n },\n async createConversation<TConversationContext = unknown>(\n input: CreateConversationInput<TConversationContext>,\n ) {\n const context = privacy.redactConversationContext\n ? await privacy.redactConversationContext({\n conversationId: input.id ?? \"\",\n agentId: input.agentId,\n context: input.context,\n })\n : input.context;\n return storage.createConversation<TConversationContext>({\n ...input,\n context: context as TConversationContext,\n });\n },\n getConversation<TConversationContext = unknown>(conversationId: string) {\n return storage.getConversation<TConversationContext>(conversationId);\n },\n updateConversationLifecycle(conversationId, lifecycle) {\n return storage.updateConversationLifecycle(conversationId, lifecycle);\n },\n async appendEvent<TEvent extends RuntimeEventInput>(event: TEvent) {\n if (!privacy.redactRuntimeEvent) return storage.appendEvent(event);\n const redacted = await privacy.redactRuntimeEvent({\n ...await privacyContextForStorage(storage, event.conversationId),\n event,\n });\n return storage.appendEvent(redacted as TEvent);\n },\n listEvents(options) {\n return storage.listEvents(options);\n },\n async saveSnapshot(snapshot: RuntimeSnapshot) {\n if (!privacy.redactRuntimeSnapshot) return storage.saveSnapshot(snapshot);\n const redacted = await privacy.redactRuntimeSnapshot({\n ...await privacyContextForStorage(storage, snapshot.conversationId),\n snapshot,\n });\n return storage.saveSnapshot(redacted);\n },\n getSnapshot(conversationId: string) {\n return storage.getSnapshot(conversationId);\n },\n };\n}\n\nexport async function redactModelInput(\n options: RuntimeOptions,\n conversationId: string,\n input: TextGenerationInput,\n) {\n const hook = options.privacy?.redactModelInput;\n if (!hook) return input;\n return hook({\n ...await privacyContext(options, conversationId),\n input,\n });\n}\n\nexport async function redactModelMessages(\n options: RuntimeOptions,\n conversation: ConversationRecord,\n messages: ModelMessage[],\n) {\n return await options.privacy?.redactModelMessages?.({\n conversationId: conversation.id,\n agentId: conversation.agentId,\n messages,\n }) ?? messages;\n}\n\nexport async function redactAssistantMessage(\n options: RuntimeOptions,\n conversation: ConversationRecord,\n text: string,\n) {\n return await options.privacy?.redactAssistantMessage?.({\n conversationId: conversation.id,\n agentId: conversation.agentId,\n text,\n }) ?? text;\n}\n\nasync function privacyContext(\n options: RuntimeOptions,\n conversationId: string,\n) {\n return privacyContextForStorage(options.storage, conversationId);\n}\n\nasync function privacyContextForStorage(\n storage: StorageAdapter,\n conversationId: string,\n) {\n const conversation = await storage.getConversation(conversationId).catch(() => null);\n return {\n conversationId,\n agentId: conversation?.agentId ?? \"\",\n };\n}\n","import type { AnyTool } from \"../../types.js\";\nimport { createTelemetryContext } from \"../../telemetry.js\";\nimport { createJourneyContextView } from \"../context.js\";\nimport { isAbortLikeError } from \"../errors.js\";\nimport type { RuntimeEventEmitter, RuntimeOptions } from \"../types.js\";\n\nexport async function executeToolWithRetry(args: {\n options: RuntimeOptions;\n tool: AnyTool;\n input: unknown;\n conversationId: string;\n idempotencyKey?: string;\n journeyContext: Record<string, unknown>;\n signal?: AbortSignal;\n emit: RuntimeEventEmitter;\n}) {\n const maxAttempts = toolExecutionMaxAttempts(args.options, args.tool, args.idempotencyKey);\n let lastError: unknown;\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n try {\n if (args.tool.name === \"cognidesk.viewJourneyContext\") {\n const snapshot = await args.options.storage.getSnapshot(args.conversationId);\n return createJourneyContextView(args.input, args.journeyContext, snapshot?.journeyContexts ?? []);\n }\n return await args.tool.execute({\n input: args.input,\n app: args.options.app ?? {},\n conversationId: args.conversationId,\n telemetry: createTelemetryContext(args.options),\n ...(args.idempotencyKey ? { idempotencyKey: args.idempotencyKey } : {}),\n ...(args.signal ? { signal: args.signal } : {}),\n });\n } catch (error) {\n if (isAbortLikeError(error) && args.signal?.aborted) throw error;\n lastError = error;\n if (attempt >= maxAttempts) break;\n await emitRetryNotice(args.options, {\n conversationId: args.conversationId,\n toolName: args.tool.name,\n emit: args.emit,\n });\n }\n }\n throw lastError instanceof Error ? lastError : new Error(\"Tool execution failed.\");\n}\n\nexport function toolExecutionMaxAttempts(\n options: RuntimeOptions,\n toolDefinition: AnyTool,\n idempotencyKey: string | undefined,\n) {\n if (toolDefinition.sideEffect && !idempotencyKey) return 1;\n return Math.max(1, options.toolRetry?.maxAttempts ?? 2);\n}\n\nexport async function emitRetryNotice(\n options: RuntimeOptions,\n args: {\n conversationId: string;\n toolName: string;\n notice?: string;\n emit: RuntimeEventEmitter;\n },\n) {\n const text = args.notice ?? options.toolRetry?.notice ?? `I hit a temporary issue while running ${args.toolName}; retrying now.`;\n await args.emit({\n conversationId: args.conversationId,\n type: \"message.started\",\n data: { role: \"assistant\" },\n });\n await args.emit({\n conversationId: args.conversationId,\n type: \"message.completed\",\n data: {\n text,\n intermediate: true,\n },\n });\n}\n","import type { ActionDefinition, CompiledJourney } from \"../../definition.js\";\nimport type { ConversationRecord } from \"../../storage.js\";\nimport {\n telemetryAttributes,\n telemetrySpanNames,\n withTelemetrySpan,\n} from \"../../telemetry.js\";\nimport { AbortError, isAbortLikeError } from \"../errors.js\";\nimport type { RuntimeEventEmitter, RuntimeOptions } from \"../types.js\";\nimport { emitRetryNotice } from \"./retry.js\";\n\nexport async function runStateActionRuns(args: {\n options: RuntimeOptions;\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state: CompiledJourney[\"states\"][number];\n context: Record<string, unknown>;\n actionType: \"entry\" | \"exit\" | \"transition\";\n signal?: AbortSignal;\n emit: RuntimeEventEmitter;\n}) {\n const actionRuns = args.state.actionRuns.filter((actionRun) => actionRun.actionType === args.actionType);\n for (const actionRun of actionRuns) {\n const rawInput = actionRun.input ? actionRun.input({ context: args.context }) : {};\n const parsedInput = actionRun.action.input.safeParse(rawInput);\n if (!parsedInput.success) {\n await emitActionFailure(args, actionRun.action.name, parsedInput.error.message, \"state_action_validation_failed\", false);\n continue;\n }\n\n await emitActionStarted(args, actionRun.action.name);\n const maxAttempts = actionExecutionMaxAttempts(args.options, actionRun.action);\n let lastError: unknown = null;\n try {\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n try {\n if (args.signal?.aborted) throw args.signal.reason ?? new AbortError(\"aborted\");\n await withTelemetrySpan(args.options, {\n name: telemetrySpanNames.actionExecute,\n attributes: {\n [telemetryAttributes.conversationId]: args.conversation.id,\n [telemetryAttributes.journeyId]: args.journey.id,\n [telemetryAttributes.stateId]: args.state.id,\n [telemetryAttributes.actionName]: actionRun.action.name,\n },\n metric: {\n kind: \"action\",\n attributes: {\n [telemetryAttributes.journeyId]: args.journey.id,\n [telemetryAttributes.stateId]: args.state.id,\n [telemetryAttributes.actionName]: actionRun.action.name,\n },\n },\n }, () => actionRun.action.run({ input: parsedInput.data }));\n lastError = null;\n break;\n } catch (error) {\n if (isAbortLikeError(error) && args.signal?.aborted) throw error;\n lastError = error;\n if (attempt >= maxAttempts) break;\n const retryNotice = actionRun.action.retry && typeof actionRun.action.retry === \"object\"\n ? actionRun.action.retry.notice\n : undefined;\n await emitRetryNotice(args.options, {\n conversationId: args.conversation.id,\n toolName: actionRun.action.name,\n ...(retryNotice ? { notice: retryNotice } : {}),\n emit: args.emit,\n });\n }\n }\n if (lastError) throw lastError;\n await emitActionSuccess(args, actionRun.action.name);\n } catch (error) {\n if (isAbortLikeError(error) && args.signal?.aborted) throw error;\n const message = error instanceof Error ? error.message : \"State action failed.\";\n await emitActionFailure(args, actionRun.action.name, message, \"state_action_failed\");\n }\n }\n}\n\nexport function actionExecutionMaxAttempts(options: RuntimeOptions, actionDefinition: ActionDefinition) {\n if (actionDefinition.retry === false) return 1;\n if (actionDefinition.retry && typeof actionDefinition.retry === \"object\" && actionDefinition.retry.maxAttempts !== undefined) {\n return Math.max(1, actionDefinition.retry.maxAttempts);\n }\n return Math.max(1, options.toolRetry?.maxAttempts ?? 2);\n}\n\nasync function emitActionStarted(args: ActionRunContext, actionName: string) {\n await args.emit({\n conversationId: args.conversation.id,\n type: \"action.started\",\n data: { actionName, journeyId: args.journey.id, stateId: args.state.id },\n });\n}\n\nasync function emitActionSuccess(args: ActionRunContext, actionName: string) {\n await args.emit({\n conversationId: args.conversation.id,\n type: \"action.completed\",\n data: { actionName, success: true, journeyId: args.journey.id, stateId: args.state.id },\n });\n}\n\nasync function emitActionFailure(\n args: ActionRunContext,\n actionName: string,\n message: string,\n code: \"state_action_failed\" | \"state_action_validation_failed\",\n _traceCompleted = true,\n) {\n await args.emit({\n conversationId: args.conversation.id,\n type: \"action.completed\",\n data: { actionName, success: false, journeyId: args.journey.id, stateId: args.state.id, error: message },\n });\n await args.emit({\n conversationId: args.conversation.id,\n type: \"error\",\n data: { code, message },\n });\n}\n\ntype ActionRunContext = {\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state: CompiledJourney[\"states\"][number];\n emit: RuntimeEventEmitter;\n};\n","import type { CompiledJourney } from \"../../definition.js\";\nimport { runtimeLogger } from \"../../logging.js\";\nimport {\n addTelemetryContentEvent,\n telemetryAttributes,\n telemetryEventNames,\n telemetrySpanNames,\n withTelemetrySpan,\n} from \"../../telemetry.js\";\nimport type { ConversationRecord } from \"../../storage.js\";\nimport { setPathValue } from \"../context.js\";\nimport { isAbortLikeError } from \"../errors.js\";\nimport { createToolConfirmationPromptId } from \"../journey-state.js\";\nimport type { RuntimeEventEmitter, RuntimeOptions } from \"../types.js\";\nimport { executeToolWithRetry } from \"./retry.js\";\n\nexport async function runStateToolRuns(args: {\n options: RuntimeOptions;\n applyBuiltInLifecycleTool(input: {\n toolName: string;\n input: unknown;\n conversationId: string;\n emit: RuntimeEventEmitter;\n }): Promise<boolean>;\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state: CompiledJourney[\"states\"][number];\n context: Record<string, unknown>;\n actionType: \"entry\" | \"exit\" | \"transition\";\n confirmedPromptId?: string;\n signal?: AbortSignal;\n emit: RuntimeEventEmitter;\n}): Promise<string | null> {\n const toolRuns = args.state.toolRuns.filter((toolRun) => {\n if (toolRun.actionType !== args.actionType) return false;\n if (args.confirmedPromptId) {\n return Boolean(toolRun.confirm)\n && args.confirmedPromptId === createToolConfirmationPromptId(args.journey.id, args.state.id, toolRun.tool.name);\n }\n return !toolRun.confirm;\n });\n const logger = runtimeLogger(args.options, {\n conversationId: args.conversation.id,\n journeyId: args.journey.id,\n stateId: args.state.id,\n });\n logger.debug({\n actionType: args.actionType,\n toolNames: toolRuns.map((toolRun) => toolRun.tool.name),\n confirmedPromptId: args.confirmedPromptId,\n }, \"Running state tool runs\");\n for (const toolRun of toolRuns) {\n const rawInput = toolRun.input ? toolRun.input({ context: args.context }) : {};\n const parsedInput = toolRun.tool.input.safeParse(rawInput);\n if (!parsedInput.success) {\n logger.error({\n toolName: toolRun.tool.name,\n error: parsedInput.error.message,\n }, \"State tool input validation failed\");\n await emitToolCompleted(args, toolRun.tool.name, false, parsedInput.error.message, undefined, false);\n return toolRun.onValidationErrorId ?? null;\n }\n\n logger.debug({ toolName: toolRun.tool.name }, \"State tool execution starting\");\n await emitToolStarted(args, toolRun.tool.name);\n try {\n const idempotencyKey = toolRun.tool.idempotencyKey?.({\n input: parsedInput.data,\n conversationId: args.conversation.id,\n });\n const parsedOutput = await withTelemetrySpan(args.options, {\n name: telemetrySpanNames.toolExecute,\n attributes: {\n [telemetryAttributes.conversationId]: args.conversation.id,\n [telemetryAttributes.journeyId]: args.journey.id,\n [telemetryAttributes.stateId]: args.state.id,\n [telemetryAttributes.toolName]: toolRun.tool.name,\n },\n metric: {\n kind: \"tool\",\n attributes: {\n [telemetryAttributes.journeyId]: args.journey.id,\n [telemetryAttributes.stateId]: args.state.id,\n [telemetryAttributes.toolName]: toolRun.tool.name,\n },\n },\n }, async () => {\n addTelemetryContentEvent(args.options, telemetryEventNames.toolInput, {\n \"cognidesk.tool.name\": toolRun.tool.name,\n \"cognidesk.tool.input\": parsedInput.data,\n });\n const output = await executeToolWithRetry({\n options: args.options,\n tool: toolRun.tool,\n input: parsedInput.data,\n conversationId: args.conversation.id,\n journeyContext: args.context,\n emit: args.emit,\n ...(idempotencyKey ? { idempotencyKey } : {}),\n ...(args.signal ? { signal: args.signal } : {}),\n });\n const parsed = toolRun.tool.output.parse(output);\n addTelemetryContentEvent(args.options, telemetryEventNames.toolOutput, {\n \"cognidesk.tool.name\": toolRun.tool.name,\n \"cognidesk.tool.output\": parsed,\n });\n return parsed;\n });\n logger.debug({ toolName: toolRun.tool.name }, \"State tool output validated\");\n for (const assignment of toolRun.assign) {\n setPathValue(args.context, assignment.path, assignment.value({\n output: parsedOutput,\n context: args.context,\n }));\n }\n await emitToolCompleted(args, toolRun.tool.name, true, undefined, parsedOutput);\n const lifecycleApplied = await args.applyBuiltInLifecycleTool({\n toolName: toolRun.tool.name,\n input: parsedInput.data,\n conversationId: args.conversation.id,\n emit: args.emit,\n });\n if (lifecycleApplied) {\n logger.info({ toolName: toolRun.tool.name }, \"State tool applied lifecycle change\");\n return null;\n }\n if (toolRun.onSuccessId) {\n logger.debug({\n toolName: toolRun.tool.name,\n targetStateId: toolRun.onSuccessId,\n }, \"State tool selected success transition\");\n return toolRun.onSuccessId;\n }\n } catch (error) {\n if (isAbortLikeError(error) && args.signal?.aborted) throw error;\n const message = error instanceof Error ? error.message : \"Tool execution failed.\";\n logger.error({ toolName: toolRun.tool.name, error: message }, \"State tool execution failed\");\n await emitToolCompleted(args, toolRun.tool.name, false, message);\n return toolRun.onFailureId ?? null;\n }\n }\n return null;\n}\n\nasync function emitToolStarted(args: ToolRunContext, toolName: string) {\n await args.emit({\n conversationId: args.conversation.id,\n type: \"tool.started\",\n data: { toolName, journeyId: args.journey.id, stateId: args.state.id },\n });\n}\n\nasync function emitToolCompleted(\n args: ToolRunContext,\n toolName: string,\n success: boolean,\n error?: string,\n result?: unknown,\n _traceCompleted = true,\n) {\n await args.emit({\n conversationId: args.conversation.id,\n type: \"tool.completed\",\n data: {\n toolName,\n success,\n journeyId: args.journey.id,\n stateId: args.state.id,\n ...(result !== undefined ? { result } : {}),\n ...(error ? { error } : {}),\n },\n });\n}\n\ntype ToolRunContext = {\n options: RuntimeOptions;\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state: CompiledJourney[\"states\"][number];\n emit: RuntimeEventEmitter;\n};\n","import { z } from \"zod\";\nimport type {\n AnyTool,\n KnowledgeSource,\n ModelMessage,\n ModelToolCall,\n ModelToolDefinition,\n} from \"../types.js\";\n\nexport function uniqueKnowledgeSources(sources: KnowledgeSource[]) {\n const byName = new Map<string, KnowledgeSource>();\n for (const source of sources) byName.set(source.name, source);\n return [...byName.values()];\n}\n\nexport function uniqueTools(tools: AnyTool[]) {\n const byName = new Map<string, AnyTool>();\n for (const toolDefinition of tools) byName.set(toolDefinition.name, toolDefinition);\n return [...byName.values()];\n}\n\nexport function toModelToolDefinition(toolDefinition: AnyTool): ModelToolDefinition {\n return {\n name: toolDefinition.name,\n input: toolDefinition.input,\n ...(toolDefinition.description ? { description: toolDefinition.description } : {}),\n };\n}\n\nexport function createToolResultMessage(call: ModelToolCall, output: unknown): ModelMessage {\n return {\n role: \"tool\",\n name: call.name,\n toolCallId: call.id,\n content: JSON.stringify(output),\n };\n}\n\nexport function parseKnowledgeQuery(source: KnowledgeSource, message: string): z.infer<KnowledgeSource[\"query\"]> | null {\n const candidates = [\n { query: message },\n { text: message },\n message,\n ];\n for (const candidate of candidates) {\n const parsed = source.query.safeParse(candidate);\n if (parsed.success) return parsed.data;\n }\n return null;\n}\n","import type { CompiledAgent, CompiledJourney } from \"../definition.js\";\nimport { runtimeLogger } from \"../logging.js\";\nimport {\n addTelemetryContentEvent,\n telemetryAttributes,\n telemetryEventNames,\n telemetrySpanNames,\n withTelemetrySpan,\n type TelemetrySpanOptions,\n} from \"../telemetry.js\";\nimport type { ConversationRecord } from \"../storage.js\";\nimport type {\n AgentModelSet,\n AnyTool,\n ModelAdapter,\n ModelMessage,\n ModelVisiblePromptPayload,\n ModelToolCall,\n ModelToolDefinition,\n TextGenerationInput,\n TextGenerationOutput,\n} from \"../types.js\";\nimport { isAbortLikeError } from \"./errors.js\";\nimport { resolveActiveStates } from \"./journey-state.js\";\nimport { applyModelPromptProfile } from \"./prompt-profiles.js\";\nimport { redactModelInput } from \"./privacy.js\";\nimport { executeToolWithRetry } from \"./state-runners.js\";\nimport { createToolResultMessage, uniqueTools } from \"./tools.js\";\nimport type { RuntimeEventEmitter, RuntimeOptions, StateMachineTurnResult } from \"./types.js\";\n\nexport async function generateTextWithTrace(args: {\n options: RuntimeOptions;\n conversationId: string;\n model: ModelAdapter;\n input: TextGenerationInput;\n}): Promise<TextGenerationOutput> {\n const logger = runtimeLogger(args.options, { conversationId: args.conversationId });\n logger.debug({\n role: args.input.role,\n promptTask: args.input.promptTask,\n provider: args.model.provider,\n model: args.model.model,\n messageCount: args.input.messages.length,\n toolCount: args.input.tools?.length ?? 0,\n }, \"Preparing model call\");\n const metric: NonNullable<TelemetrySpanOptions[\"metric\"]> = {\n kind: \"model\" as const,\n attributes: {\n [telemetryAttributes.modelRole]: args.input.role,\n [telemetryAttributes.modelProvider]: args.model.provider,\n [telemetryAttributes.modelName]: args.model.model,\n },\n };\n return withTelemetrySpan(args.options, {\n name: telemetrySpanNames.modelGenerate,\n attributes: {\n [telemetryAttributes.conversationId]: args.conversationId,\n [telemetryAttributes.modelRole]: args.input.role,\n [telemetryAttributes.modelProvider]: args.model.provider,\n [telemetryAttributes.modelName]: args.model.model,\n [telemetryAttributes.promptTask]: args.input.promptTask,\n },\n metric,\n }, async (span) => {\n addTelemetryContentEvent(args.options, telemetryEventNames.modelInput, {\n \"cognidesk.model.role\": args.input.role,\n \"cognidesk.prompt.task\": args.input.promptTask,\n \"cognidesk.model.messages\": args.input.messages,\n \"cognidesk.model.prompt_payload\": args.input.promptPayload,\n \"cognidesk.model.tools\": args.input.tools?.map((tool) => ({\n name: tool.name,\n description: tool.description,\n })),\n });\n const redactedInput = await redactModelInput(args.options, args.conversationId, args.input);\n const output = await args.model.generateText({\n ...redactedInput,\n messages: await applyModelPromptProfile({\n model: args.model,\n input: redactedInput,\n }),\n });\n logger.debug({\n role: args.input.role,\n provider: args.model.provider,\n model: args.model.model,\n outputTextLength: output.text.length,\n toolCallCount: output.toolCalls?.length ?? 0,\n }, \"Model call returned\");\n span.setAttribute(\"cognidesk.model.output_text_length\", output.text.length);\n span.setAttribute(\"cognidesk.model.tool_call_count\", output.toolCalls?.length ?? 0);\n if (output.usage?.totalTokens !== undefined) span.setAttribute(\"cognidesk.model.usage.total_tokens\", output.usage.totalTokens);\n if (output.usage) metric.tokenUsage = output.usage;\n addTelemetryContentEvent(args.options, telemetryEventNames.modelOutput, {\n \"cognidesk.model.role\": args.input.role,\n \"cognidesk.model.text\": output.text,\n \"cognidesk.model.structured\": output.structured,\n \"cognidesk.model.tool_calls\": output.toolCalls,\n \"cognidesk.model.usage\": output.usage,\n });\n return output;\n }).catch((error) => {\n logger.error({\n role: args.input.role,\n provider: args.model.provider,\n model: args.model.model,\n error: error instanceof Error ? error.message : \"Model call failed.\",\n }, \"Model call threw\");\n throw error;\n });\n}\n\nexport async function generateResponseWithTools(args: {\n options: RuntimeOptions;\n requireConversationRecord(conversationId: string): Promise<ConversationRecord>;\n applyBuiltInLifecycleTool(input: {\n toolName: string;\n input: unknown;\n conversationId: string;\n emit: RuntimeEventEmitter;\n }): Promise<boolean>;\n conversation: ConversationRecord;\n model: ModelAdapter;\n messages: ModelMessage[];\n promptPayload?: ModelVisiblePromptPayload;\n tools: AnyTool[];\n modelTools: ModelToolDefinition[];\n selectedJourney: CompiledJourney | null;\n stateMachineTurn: StateMachineTurnResult | null;\n signal?: AbortSignal;\n onTextDelta?(textDelta: string): Promise<void> | void;\n emit: RuntimeEventEmitter;\n}): Promise<TextGenerationOutput> {\n const messages = [...args.messages];\n const maxToolRounds = 4;\n const logger = runtimeLogger(args.options, { conversationId: args.conversation.id });\n for (let round = 0; round <= maxToolRounds; round += 1) {\n logger.debug({\n round,\n maxToolRounds,\n messageCount: messages.length,\n modelToolCount: args.modelTools.length,\n }, \"Starting response generation round\");\n const response = await generateTextWithTrace({\n options: args.options,\n conversationId: args.conversation.id,\n model: args.model,\n input: {\n role: \"response\",\n promptTask: \"response\",\n promptPayload: args.promptPayload ?? {\n messages,\n tools: args.modelTools.map((tool) => ({\n name: tool.name,\n ...(tool.description ? { description: tool.description } : {}),\n })),\n },\n messages,\n ...(args.modelTools.length > 0 ? { tools: args.modelTools, toolChoice: \"auto\" as const } : {}),\n ...(args.onTextDelta ? { onTextDelta: args.onTextDelta } : {}),\n ...(args.signal ? { signal: args.signal } : {}),\n },\n });\n if (!response.toolCalls?.length) {\n logger.debug({ round }, \"Response generation completed without tool calls\");\n return response;\n }\n logger.info({\n round,\n toolCallNames: response.toolCalls.map((call) => call.name),\n }, \"Model requested tool calls\");\n if (round === maxToolRounds) {\n logger.error({ maxToolRounds }, \"Model exceeded tool round limit\");\n await args.emit({\n conversationId: args.conversation.id,\n type: \"error\",\n data: {\n code: \"tool_round_limit_exceeded\",\n message: `Model requested tools after ${maxToolRounds} tool rounds.`,\n },\n });\n return { ...response, toolCalls: [] };\n }\n\n messages.push({\n role: \"assistant\",\n content: response.text,\n toolCalls: response.toolCalls,\n });\n const results = await executeModelToolCalls({\n options: args.options,\n applyBuiltInLifecycleTool: args.applyBuiltInLifecycleTool,\n conversation: args.conversation,\n calls: response.toolCalls,\n tools: args.tools,\n selectedJourney: args.selectedJourney,\n stateMachineTurn: args.stateMachineTurn,\n emit: args.emit,\n ...(args.signal ? { signal: args.signal } : {}),\n });\n messages.push(...results);\n const lifecycle = await args.requireConversationRecord(args.conversation.id);\n if (lifecycle.lifecycle !== \"active\") {\n logger.info({ lifecycle: lifecycle.lifecycle }, \"Stopping response generation after lifecycle change\");\n return { text: \"\", providerMetadata: { interruptedByLifecycle: true } };\n }\n }\n return { text: \"\" };\n}\n\nexport async function executeModelToolCalls(args: {\n options: RuntimeOptions;\n applyBuiltInLifecycleTool(input: {\n toolName: string;\n input: unknown;\n conversationId: string;\n emit: RuntimeEventEmitter;\n }): Promise<boolean>;\n conversation: ConversationRecord;\n calls: ModelToolCall[];\n tools: AnyTool[];\n selectedJourney: CompiledJourney | null;\n stateMachineTurn: StateMachineTurnResult | null;\n signal?: AbortSignal;\n emit: RuntimeEventEmitter;\n}): Promise<ModelMessage[]> {\n const byName = new Map(args.tools.map((toolDefinition) => [toolDefinition.name, toolDefinition]));\n const messages: ModelMessage[] = [];\n const logger = runtimeLogger(args.options, { conversationId: args.conversation.id });\n for (const call of args.calls) {\n logger.debug({ toolName: call.name }, \"Resolving model tool call\");\n const toolDefinition = byName.get(call.name);\n if (!toolDefinition) {\n const error = `Tool '${call.name}' is not available in the active tool scope.`;\n logger.error({ toolName: call.name, error }, \"Model requested unavailable tool\");\n await args.emit({\n conversationId: args.conversation.id,\n type: \"tool.completed\",\n data: { toolName: call.name, success: false, error },\n });\n messages.push(createToolResultMessage(call, { error }));\n continue;\n }\n\n const parsedInput = toolDefinition.input.safeParse(call.input);\n if (!parsedInput.success) {\n const error = parsedInput.error.message;\n logger.error({ toolName: call.name, error }, \"Model tool input validation failed\");\n await args.emit({\n conversationId: args.conversation.id,\n type: \"tool.completed\",\n data: { toolName: toolDefinition.name, success: false, error },\n });\n messages.push(createToolResultMessage(call, { error }));\n continue;\n }\n\n await args.emit({\n conversationId: args.conversation.id,\n type: \"tool.started\",\n data: {\n toolName: toolDefinition.name,\n ...(args.selectedJourney ? { journeyId: args.selectedJourney.id } : {}),\n },\n });\n try {\n const idempotencyKey = toolDefinition.idempotencyKey?.({\n input: parsedInput.data,\n conversationId: args.conversation.id,\n });\n const parsedOutput = await withTelemetrySpan(args.options, {\n name: telemetrySpanNames.toolExecute,\n attributes: {\n [telemetryAttributes.conversationId]: args.conversation.id,\n [telemetryAttributes.toolName]: toolDefinition.name,\n ...(args.selectedJourney ? { [telemetryAttributes.journeyId]: args.selectedJourney.id } : {}),\n },\n metric: {\n kind: \"tool\",\n attributes: {\n [telemetryAttributes.toolName]: toolDefinition.name,\n ...(args.selectedJourney ? { [telemetryAttributes.journeyId]: args.selectedJourney.id } : {}),\n },\n },\n }, async () => {\n addTelemetryContentEvent(args.options, telemetryEventNames.toolInput, {\n \"cognidesk.tool.name\": toolDefinition.name,\n \"cognidesk.tool.input\": parsedInput.data,\n });\n const output = await executeToolWithRetry({\n options: args.options,\n tool: toolDefinition,\n input: parsedInput.data,\n conversationId: args.conversation.id,\n journeyContext: args.stateMachineTurn?.journeyContext ?? {},\n emit: args.emit,\n ...(idempotencyKey ? { idempotencyKey } : {}),\n ...(args.signal ? { signal: args.signal } : {}),\n });\n const parsed = toolDefinition.output.parse(output);\n addTelemetryContentEvent(args.options, telemetryEventNames.toolOutput, {\n \"cognidesk.tool.name\": toolDefinition.name,\n \"cognidesk.tool.output\": parsed,\n });\n return parsed;\n });\n logger.debug({ toolName: toolDefinition.name }, \"Model tool output validated\");\n await args.emit({\n conversationId: args.conversation.id,\n type: \"tool.completed\",\n data: {\n toolName: toolDefinition.name,\n success: true,\n ...(args.selectedJourney ? { journeyId: args.selectedJourney.id } : {}),\n result: parsedOutput,\n },\n });\n await args.applyBuiltInLifecycleTool({\n toolName: toolDefinition.name,\n input: parsedInput.data,\n conversationId: args.conversation.id,\n emit: args.emit,\n });\n messages.push(createToolResultMessage(call, parsedOutput));\n } catch (error) {\n if (isAbortLikeError(error) && args.signal?.aborted) throw error;\n const message = error instanceof Error ? error.message : \"Tool execution failed.\";\n logger.error({ toolName: toolDefinition.name, error: message }, \"Model tool execution failed\");\n await args.emit({\n conversationId: args.conversation.id,\n type: \"tool.completed\",\n data: {\n toolName: toolDefinition.name,\n success: false,\n ...(args.selectedJourney ? { journeyId: args.selectedJourney.id } : {}),\n error: message,\n },\n });\n messages.push(createToolResultMessage(call, { error: message }));\n }\n }\n return messages;\n}\n\nexport function resolveAvailableModelTools(\n agent: CompiledAgent,\n journey: CompiledJourney | null,\n stateMachineTurn: StateMachineTurnResult | null,\n) {\n const scoped = journey?.kind === \"delegation\"\n ? journey.delegation?.tools ?? []\n : journey?.tools ?? [];\n const stateTools = resolveActiveStates(journey, stateMachineTurn).flatMap((state) => state.tools);\n return uniqueTools([...agent.tools, ...scoped, ...stateTools]);\n}\n","import type { CompiledAgent, CompiledJourney } from \"../definition.js\";\nimport type { ConversationRecord } from \"../storage.js\";\nimport type {\n AgentModelSet,\n AnyTool,\n ModelAdapter,\n ModelMessage,\n ModelToolDefinition,\n RuntimeEvent,\n TextGenerationInput,\n TextGenerationOutput,\n} from \"../types.js\";\nimport { createCitationSegments as createCitationSegmentsWithDeps } from \"./citations.js\";\nimport {\n compactConversation as compactConversationWithDeps,\n compactIfNeeded as compactIfNeededWithDeps,\n} from \"./compaction.js\";\nimport {\n generateResponseWithTools as generateResponseWithToolsWithDeps,\n generateTextWithTrace as generateTextWithTraceWithDeps,\n} from \"./model-runner.js\";\nimport {\n redactAssistantMessage as redactAssistantMessageWithOptions,\n redactModelMessages as redactModelMessagesWithOptions,\n redactUserMessage as redactUserMessageWithOptions,\n} from \"./privacy.js\";\nimport type {\n CompactConversationInput,\n CompactConversationResult,\n RetrievedKnowledgeItem,\n RuntimeEventEmitter,\n RuntimeOptions,\n StateMachineTurnResult,\n} from \"./types.js\";\n\nexport function requireRuntimeAgent(options: RuntimeOptions) {\n if (!options.agent) throw new Error(\"Runtime requires an agent to handle messages.\");\n return options.agent;\n}\n\nexport function requireRuntimeModels(options: RuntimeOptions) {\n if (!options.models) throw new Error(\"Runtime requires models to handle messages.\");\n return options.models;\n}\n\nexport function generateRuntimeTextWithTrace(\n options: RuntimeOptions,\n input: {\n conversationId: string;\n model: ModelAdapter;\n input: TextGenerationInput;\n },\n): Promise<TextGenerationOutput> {\n return generateTextWithTraceWithDeps({\n ...input,\n options,\n });\n}\n\nexport function generateRuntimeResponseWithTools(\n options: RuntimeOptions,\n requireConversationRecord: (conversationId: string) => Promise<ConversationRecord>,\n applyBuiltInLifecycleTool: (input: {\n toolName: string;\n input: unknown;\n conversationId: string;\n emit: RuntimeEventEmitter;\n }) => Promise<boolean>,\n args: {\n conversation: ConversationRecord;\n model: ModelAdapter;\n messages: ModelMessage[];\n tools: AnyTool[];\n modelTools: ModelToolDefinition[];\n selectedJourney: CompiledJourney | null;\n stateMachineTurn: StateMachineTurnResult | null;\n signal?: AbortSignal;\n onTextDelta?(textDelta: string): Promise<void> | void;\n emit: RuntimeEventEmitter;\n },\n): Promise<TextGenerationOutput> {\n return generateResponseWithToolsWithDeps({\n ...args,\n options,\n requireConversationRecord,\n applyBuiltInLifecycleTool,\n });\n}\n\nexport async function compactRuntimeConversation<TSummary = unknown>(\n deps: {\n options: RuntimeOptions;\n requireModels: () => AgentModelSet;\n requireConversationRecord: (conversationId: string) => Promise<ConversationRecord>;\n generateTextWithTrace: (input: {\n conversationId: string;\n model: ModelAdapter;\n input: TextGenerationInput;\n }) => Promise<TextGenerationOutput>;\n emit: RuntimeEventEmitter;\n },\n input: CompactConversationInput,\n): Promise<CompactConversationResult<TSummary>> {\n const models = deps.requireModels();\n const conversation = await deps.requireConversationRecord(input.conversationId);\n return compactConversationWithDeps<TSummary>({\n options: deps.options,\n models,\n conversation,\n input,\n generateTextWithTrace: deps.generateTextWithTrace,\n emit: deps.emit,\n });\n}\n\nexport async function compactRuntimeIfNeeded(\n deps: {\n options: RuntimeOptions;\n requireModels: () => AgentModelSet;\n requireConversationRecord: (conversationId: string) => Promise<ConversationRecord>;\n generateTextWithTrace: (input: {\n conversationId: string;\n model: ModelAdapter;\n input: TextGenerationInput;\n }) => Promise<TextGenerationOutput>;\n emit: RuntimeEventEmitter;\n },\n input: {\n conversationId: string;\n schemaVersion?: string;\n signal?: AbortSignal;\n },\n) {\n const models = deps.requireModels();\n return deps.requireConversationRecord(input.conversationId).then((conversation) => compactIfNeededWithDeps({\n options: deps.options,\n models,\n conversation,\n input,\n generateTextWithTrace: deps.generateTextWithTrace,\n emit: deps.emit,\n }));\n}\n\nexport function createRuntimeCitationSegments(\n deps: {\n options: RuntimeOptions;\n requireModels: () => AgentModelSet;\n generateTextWithTrace: (input: {\n conversationId: string;\n model: ModelAdapter;\n input: TextGenerationInput;\n }) => Promise<TextGenerationOutput>;\n emit: RuntimeEventEmitter;\n },\n args: {\n agent: CompiledAgent;\n conversation: ConversationRecord;\n text: string;\n knowledge: RetrievedKnowledgeItem[];\n signal?: AbortSignal;\n },\n) {\n const models = deps.requireModels();\n return createCitationSegmentsWithDeps({\n ...args,\n options: deps.options,\n models,\n generateTextWithTrace: deps.generateTextWithTrace,\n emit: deps.emit,\n });\n}\n\nexport function redactRuntimeUserMessage(\n options: RuntimeOptions,\n conversation: ConversationRecord,\n text: string,\n) {\n return redactUserMessageWithOptions(options, conversation, text);\n}\n\nexport function redactRuntimeModelMessages(\n options: RuntimeOptions,\n conversation: ConversationRecord,\n messages: ModelMessage[],\n) {\n return redactModelMessagesWithOptions(options, conversation, messages);\n}\n\nexport function redactRuntimeAssistantMessage(\n options: RuntimeOptions,\n conversation: ConversationRecord,\n text: string,\n) {\n return redactAssistantMessageWithOptions(options, conversation, text);\n}\n","import type { CompiledAgent, CompiledJourney } from \"../definition.js\";\nimport { runtimeLogger } from \"../logging.js\";\nimport type { ConversationRecord, RuntimeEventInput } from \"../storage.js\";\nimport type {\n AnyTool,\n CustomRuntimeEventDefinition,\n ModelAdapter,\n ModelMessage,\n ModelToolDefinition,\n RuntimeEvent,\n RuntimeSnapshot,\n TextGenerationInput,\n TextGenerationOutput,\n} from \"../types.js\";\nimport {\n createRuntimeConversation,\n listRuntimeEvents,\n replayRuntimeConversation,\n} from \"./facade-conversations.js\";\nimport {\n emitRuntimeCustomEvent,\n emitRuntimeEvent,\n emitRuntimeGeneratedPreamble,\n emitRuntimeIntermediateMessage,\n resolveRuntimeCustomEvent,\n} from \"./facade-events.js\";\nimport {\n applyRuntimeBuiltInLifecycleTool,\n applyRuntimeConversationClosure,\n applyRuntimeConversationResume,\n applyRuntimeHandoffRequest,\n createRuntimeLifecycleInterruptionResult,\n requireRuntimeConversation,\n requireRuntimeConversationRecord,\n} from \"./facade-lifecycle.js\";\nimport {\n compactRuntimeConversation,\n compactRuntimeIfNeeded,\n createRuntimeCitationSegments,\n generateRuntimeResponseWithTools,\n generateRuntimeTextWithTrace,\n redactRuntimeAssistantMessage,\n redactRuntimeModelMessages,\n redactRuntimeUserMessage,\n requireRuntimeAgent,\n requireRuntimeModels,\n} from \"./facade-models.js\";\nimport type {\n CompactConversationInput,\n ConversationMessage,\n CreateRuntimeConversationInput,\n EmitCustomEventInput,\n EmitGeneratedPreambleInput,\n EmitIntermediateMessageInput,\n RequestHandoffInput,\n ResumeConversationInput,\n RetrievedKnowledgeItem,\n RuntimeOptions,\n StateMachineTurnResult,\n} from \"./types.js\";\n\nexport function createRuntimeCore(options: RuntimeOptions) {\n const logger = runtimeLogger(options);\n const core = {\n async initialize() {\n logger.info({\n hasAgent: Boolean(options.agent),\n hasModels: Boolean(options.models),\n hasJourneyIndex: Boolean(options.journeyIndex),\n }, \"Runtime initializing\");\n await options.storage.initialize?.();\n logger.info(\"Runtime initialized\");\n },\n async createConversation<TConversationContext = unknown>(input: CreateRuntimeConversationInput<TConversationContext>) {\n logger.debug({ hasContext: input.context !== undefined }, \"Creating conversation\");\n const conversation = await createRuntimeConversation(options, core.emit, input);\n runtimeLogger(options, { conversationId: conversation.id }).info({\n lifecycle: conversation.lifecycle,\n }, \"Conversation created\");\n return conversation;\n },\n emit<TEvent extends RuntimeEventInput>(event: TEvent) {\n return emitRuntimeEvent(options, event);\n },\n emitIntermediateMessage(input: EmitIntermediateMessageInput) {\n return emitRuntimeIntermediateMessage(options, core.requireConversation, core.emit, input);\n },\n emitGeneratedPreamble(input: EmitGeneratedPreambleInput) {\n return emitRuntimeGeneratedPreamble({\n options,\n requireAgent: core.requireAgent,\n requireModels: core.requireModels,\n requireConversation: core.requireConversation,\n generateTextWithTrace: core.generateTextWithTrace,\n redactModelMessages: core.redactModelMessages,\n redactAssistantMessage: core.redactAssistantMessage,\n emitIntermediateMessage: core.emitIntermediateMessage,\n }, input);\n },\n emitCustomEvent<TEvent extends CustomRuntimeEventDefinition>(input: EmitCustomEventInput<TEvent>) {\n return emitRuntimeCustomEvent(core.requireConversationRecord, core.resolveCustomRuntimeEvent, core.emit, input);\n },\n listEvents(conversationId: string, afterOffset?: number) {\n return listRuntimeEvents(options, conversationId, afterOffset);\n },\n replayConversation(input: { conversationId: string; afterOffset?: number }) {\n return replayRuntimeConversation(options, core.requireConversationRecord, input);\n },\n getSnapshot(conversationId: string): Promise<RuntimeSnapshot | null> {\n return options.storage.getSnapshot(conversationId);\n },\n async closeConversation(conversationId: string, reason?: string) {\n runtimeLogger(options, { conversationId }).info({ reason }, \"Closing conversation\");\n const result = await applyRuntimeConversationClosure(options, {\n conversationId,\n ...(reason ? { reason } : {}),\n emit: core.emit,\n });\n runtimeLogger(options, { conversationId }).info(\"Conversation closed\");\n return result.conversation;\n },\n requestHandoff(input: RequestHandoffInput) {\n runtimeLogger(options, { conversationId: input.conversationId }).info({\n hasSummary: input.summary !== undefined,\n hasPayload: input.payload !== undefined,\n }, \"Requesting handoff\");\n return applyRuntimeHandoffRequest(options, { ...input, emit: core.emit });\n },\n resumeConversation(input: ResumeConversationInput) {\n runtimeLogger(options, { conversationId: input.conversationId }).info({\n reason: input.reason,\n hasPayload: input.payload !== undefined,\n }, \"Resuming conversation\");\n return applyRuntimeConversationResume(options, { ...input, emit: core.emit });\n },\n compactConversation<TSummary>(input: CompactConversationInput) {\n return compactRuntimeConversation<TSummary>(core.modelingDeps(), input);\n },\n compactIfNeeded(input: {\n conversationId: string;\n schemaVersion?: string;\n signal?: AbortSignal;\n }) {\n return compactRuntimeIfNeeded(core.modelingDeps(), input);\n },\n requireAgent() {\n return requireRuntimeAgent(options);\n },\n requireModels() {\n return requireRuntimeModels(options);\n },\n resolveCustomRuntimeEvent<TEvent extends CustomRuntimeEventDefinition>(event: TEvent) {\n return resolveRuntimeCustomEvent(options.agent, event);\n },\n requireConversation(conversationId: string) {\n return requireRuntimeConversation(options, conversationId);\n },\n requireConversationRecord(conversationId: string) {\n return requireRuntimeConversationRecord(options, conversationId);\n },\n createLifecycleInterruptionResult(args: { conversationId: string; events: RuntimeEvent[] }) {\n return createRuntimeLifecycleInterruptionResult(options, args);\n },\n applyBuiltInLifecycleTool(args: {\n toolName: string;\n input: unknown;\n conversationId: string;\n emit: <TEvent extends RuntimeEventInput>(event: TEvent) => Promise<RuntimeEvent>;\n }) {\n return applyRuntimeBuiltInLifecycleTool(options, args);\n },\n generateTextWithTrace(input: {\n conversationId: string;\n model: ModelAdapter;\n input: TextGenerationInput;\n }) {\n return generateRuntimeTextWithTrace(options, input);\n },\n generateResponseWithTools(args: {\n conversation: ConversationRecord;\n model: ModelAdapter;\n messages: ModelMessage[];\n tools: AnyTool[];\n modelTools: ModelToolDefinition[];\n selectedJourney: CompiledJourney | null;\n stateMachineTurn: StateMachineTurnResult | null;\n signal?: AbortSignal;\n onTextDelta?(textDelta: string): Promise<void> | void;\n emit: <TEvent extends RuntimeEventInput>(event: TEvent) => Promise<RuntimeEvent>;\n }): Promise<TextGenerationOutput> {\n return generateRuntimeResponseWithTools(\n options,\n core.requireConversationRecord,\n core.applyBuiltInLifecycleTool,\n args,\n );\n },\n createCitationSegments(args: {\n agent: CompiledAgent;\n conversation: ConversationRecord;\n text: string;\n knowledge: RetrievedKnowledgeItem[];\n signal?: AbortSignal;\n }) {\n return createRuntimeCitationSegments(core.modelingDeps(), args);\n },\n redactUserMessage(conversation: ConversationRecord, text: string) {\n return redactRuntimeUserMessage(options, conversation, text);\n },\n redactModelMessages(conversation: ConversationRecord, messages: ModelMessage[]) {\n return redactRuntimeModelMessages(options, conversation, messages);\n },\n redactAssistantMessage(conversation: ConversationRecord, text: string) {\n return redactRuntimeAssistantMessage(options, conversation, text);\n },\n modelingDeps() {\n return {\n options,\n requireModels: core.requireModels,\n requireConversationRecord: core.requireConversationRecord,\n generateTextWithTrace: core.generateTextWithTrace,\n emit: core.emit,\n };\n },\n };\n return core;\n}\n\nexport type RuntimeCore = ReturnType<typeof createRuntimeCore>;\nexport type RuntimeConversationMessage = ConversationMessage;\n","import type { EmbeddingOutput, ModelAdapter } from \"../types.js\";\nimport type { JourneyIndexEmbedding } from \"./schema.js\";\n\nexport function assertEmbeddingModel(\n model: ModelAdapter,\n): asserts model is ModelAdapter & { embed: NonNullable<ModelAdapter[\"embed\"]> } {\n if (!model.embed) {\n throw new Error(`Model '${model.provider}:${model.model}' does not implement embeddings.`);\n }\n}\n\nexport function toIndexEmbedding(output: EmbeddingOutput): JourneyIndexEmbedding {\n return {\n model: output.model,\n dimensions: output.dimensions,\n vector: output.embedding,\n };\n}\n","import { z } from \"zod\";\nimport type { CompiledAgent, CompiledJourney } from \"../definition.js\";\nimport type { ModelAdapter } from \"../types.js\";\n\nexport const JOURNEY_INDEX_PROJECTION_VERSION = \"cognidesk.journey-index.v1\";\n\nexport const journeyIndexEmbeddingSchema = z.object({\n model: z.string(),\n dimensions: z.number().int().positive(),\n vector: z.array(z.number()),\n});\n\nexport const journeyIndexEntrySchema = z.object({\n journeyId: z.string(),\n kind: z.enum([\"stateMachine\", \"delegation\"]),\n condition: z.string(),\n examples: z.array(z.string()),\n tags: z.array(z.string()),\n priority: z.number(),\n stickiness: z.enum([\"low\", \"medium\", \"high\"]),\n alwaysInclude: z.boolean(),\n definitionHash: z.string(),\n routingText: z.string(),\n embedding: journeyIndexEmbeddingSchema,\n});\n\nexport const journeyIndexSchema = z.object({\n agentId: z.string(),\n projectionVersion: z.literal(JOURNEY_INDEX_PROJECTION_VERSION),\n definitionHash: z.string(),\n embeddingProvider: z.string(),\n embeddingModel: z.string(),\n generatedAt: z.string(),\n entries: z.array(journeyIndexEntrySchema),\n});\n\nexport type JourneyIndexEmbedding = z.infer<typeof journeyIndexEmbeddingSchema>;\nexport type JourneyIndexEntry = z.infer<typeof journeyIndexEntrySchema>;\nexport type JourneyIndex = z.infer<typeof journeyIndexSchema>;\n\nexport interface BuildJourneyIndexOptions {\n embeddingModel: ModelAdapter;\n generatedAt?: string;\n signal?: AbortSignal;\n}\n\nexport interface JourneyIndexValidationResult {\n ok: boolean;\n errors: string[];\n}\n\nexport interface ValidateJourneyIndexOptions {\n embeddingModel?: Pick<ModelAdapter, \"provider\" | \"model\">;\n}\n\nexport interface SelectJourneyCandidatesOptions<TApp = unknown, TConversation = unknown, TTurn = unknown> {\n agent: CompiledAgent;\n index: JourneyIndex;\n embeddingModel: ModelAdapter;\n message: string;\n app: TApp;\n conversation: TConversation;\n turn: TTurn;\n activeJourneyId?: string;\n topK?: number;\n allowStaleIndex?: boolean;\n signal?: AbortSignal;\n}\n\nexport interface JourneyCandidate {\n journeyId: string;\n journey: CompiledJourney;\n score: number;\n similarity: number;\n reason: \"always\" | \"matcher\" | \"embedding\";\n definitionHash: string;\n}\n","import type { CompiledAgent, CompiledJourney } from \"../definition.js\";\nimport { JOURNEY_INDEX_PROJECTION_VERSION } from \"./schema.js\";\n\nexport function createJourneyRoutingText(journey: CompiledJourney) {\n const stateSummaries = journey.states\n .map((state) => [\n `state:${state.id}`,\n state.summary ? `summary:${state.summary}` : \"\",\n state.instructions ? `instructions:${state.instructions}` : \"\",\n state.collected.length > 0 ? `collect:${state.collected.map((field) => field.path).join(\", \")}` : \"\",\n ].filter(Boolean).join(\" \"))\n .filter(Boolean);\n\n return [\n `journey:${journey.id}`,\n `kind:${journey.kind}`,\n `condition:${journey.condition}`,\n journey.tags.length > 0 ? `tags:${journey.tags.join(\", \")}` : \"\",\n journey.examples.length > 0 ? `examples:${journey.examples.join(\" | \")}` : \"\",\n ...stateSummaries,\n ].filter(Boolean).join(\"\\n\");\n}\n\nexport function hashAgentRoutingDefinition(agent: CompiledAgent) {\n return stableHash({\n projectionVersion: JOURNEY_INDEX_PROJECTION_VERSION,\n agentId: agent.id,\n journeys: agent.journeys.map(journeyRoutingProjection),\n });\n}\n\nexport function hashJourneyDefinition(journey: CompiledJourney) {\n return stableHash({\n projectionVersion: JOURNEY_INDEX_PROJECTION_VERSION,\n journey: journeyRoutingProjection(journey),\n });\n}\n\nfunction journeyRoutingProjection(journey: CompiledJourney) {\n return {\n id: journey.id,\n kind: journey.kind,\n condition: journey.condition,\n examples: journey.examples,\n tags: journey.tags,\n priority: journey.priority,\n stickiness: journey.stickiness,\n alwaysInclude: journey.alwaysInclude,\n hasAlwaysPredicate: typeof journey.always === \"function\",\n hasIncludeWhenPredicate: typeof journey.includeWhen === \"function\",\n hasMatcherPredicate: typeof journey.matcher === \"function\",\n hasGuardPredicate: typeof journey.guard === \"function\",\n contextReuseFields: journey.contextReuse?.fields ?? [],\n hasContextReusePredicate: typeof journey.contextReuse?.when === \"function\",\n initialStateId: journey.initialStateId,\n alternateEntries: journey.alternateEntries.map((entry) => ({\n stateId: entry.stateId,\n description: entry.description,\n priority: entry.priority,\n hasPredicate: typeof entry.when === \"function\",\n })),\n states: journey.states.map((state) => ({\n id: state.id,\n parentId: state.parentId,\n type: state.type,\n instructions: state.instructions,\n summary: state.summary,\n collected: state.collected,\n transitions: state.transitions,\n actions: state.actions,\n requiresVisit: state.requiresVisit,\n })),\n };\n}\n\nfunction stableHash(value: unknown) {\n const json = stableStringify(value);\n let hash = 0xcbf29ce484222325n;\n const prime = 0x100000001b3n;\n const mask = 0xffffffffffffffffn;\n for (let index = 0; index < json.length; index += 1) {\n hash ^= BigInt(json.charCodeAt(index));\n hash = (hash * prime) & mask;\n }\n return `fnv1a64:${hash.toString(16).padStart(16, \"0\")}`;\n}\n\nfunction stableStringify(value: unknown): string {\n if (value === null) return \"null\";\n if (typeof value === \"string\") return JSON.stringify(value);\n if (typeof value === \"number\" || typeof value === \"boolean\") return JSON.stringify(value);\n if (typeof value === \"bigint\") return JSON.stringify(value.toString());\n if (typeof value === \"undefined\" || typeof value === \"function\" || typeof value === \"symbol\") return \"null\";\n if (Array.isArray(value)) return `[${value.map((item) => stableStringify(item)).join(\",\")}]`;\n if (typeof value === \"object\") {\n const record = value as Record<string, unknown>;\n const keys = Object.keys(record)\n .filter((key) => typeof record[key] !== \"undefined\" && typeof record[key] !== \"function\")\n .sort();\n return `{${keys.map((key) => `${JSON.stringify(key)}:${stableStringify(record[key])}`).join(\",\")}}`;\n }\n return \"null\";\n}\n","import type { CompiledAgent } from \"../definition.js\";\nimport { assertEmbeddingModel, toIndexEmbedding } from \"./embeddings.js\";\nimport {\n createJourneyRoutingText,\n hashAgentRoutingDefinition,\n hashJourneyDefinition,\n} from \"./hashing.js\";\nimport {\n JOURNEY_INDEX_PROJECTION_VERSION,\n journeyIndexSchema,\n type BuildJourneyIndexOptions,\n type JourneyIndex,\n type JourneyIndexEntry,\n} from \"./schema.js\";\n\nexport async function buildJourneyIndex(\n agent: CompiledAgent,\n options: BuildJourneyIndexOptions,\n): Promise<JourneyIndex> {\n assertEmbeddingModel(options.embeddingModel);\n\n const entries: JourneyIndexEntry[] = [];\n for (const journey of agent.journeys) {\n const routingText = createJourneyRoutingText(journey);\n const embedding = await options.embeddingModel.embed({\n role: \"journeyEmbedding\",\n text: routingText,\n ...(options.signal ? { signal: options.signal } : {}),\n });\n entries.push({\n journeyId: journey.id,\n kind: journey.kind,\n condition: journey.condition,\n examples: journey.examples,\n tags: journey.tags,\n priority: journey.priority,\n stickiness: journey.stickiness,\n alwaysInclude: journey.alwaysInclude,\n definitionHash: hashJourneyDefinition(journey),\n routingText,\n embedding: toIndexEmbedding(embedding),\n });\n }\n\n const index: JourneyIndex = {\n agentId: agent.id,\n projectionVersion: JOURNEY_INDEX_PROJECTION_VERSION,\n definitionHash: hashAgentRoutingDefinition(agent),\n embeddingProvider: options.embeddingModel.provider,\n embeddingModel: options.embeddingModel.model,\n generatedAt: options.generatedAt ?? new Date().toISOString(),\n entries,\n };\n\n return journeyIndexSchema.parse(index);\n}\n","import type { CompiledAgent } from \"../definition.js\";\nimport {\n hashAgentRoutingDefinition,\n hashJourneyDefinition,\n} from \"./hashing.js\";\nimport {\n journeyIndexSchema,\n type JourneyIndex,\n type JourneyIndexValidationResult,\n type ValidateJourneyIndexOptions,\n} from \"./schema.js\";\n\nexport function validateJourneyIndex(\n agent: CompiledAgent,\n index: JourneyIndex,\n options: ValidateJourneyIndexOptions = {},\n): JourneyIndexValidationResult {\n const parsed = journeyIndexSchema.safeParse(index);\n const errors: string[] = [];\n if (!parsed.success) {\n errors.push(parsed.error.message);\n return { ok: false, errors };\n }\n\n if (index.agentId !== agent.id) errors.push(`Index agent '${index.agentId}' does not match '${agent.id}'.`);\n if (index.definitionHash !== hashAgentRoutingDefinition(agent)) {\n errors.push(\"Agent routing definition hash does not match the generated index.\");\n }\n if (options.embeddingModel) {\n if (index.embeddingProvider !== options.embeddingModel.provider) {\n errors.push(`Index embedding provider '${index.embeddingProvider}' does not match '${options.embeddingModel.provider}'.`);\n }\n if (index.embeddingModel !== options.embeddingModel.model) {\n errors.push(`Index embedding model '${index.embeddingModel}' does not match '${options.embeddingModel.model}'.`);\n }\n }\n\n const entryById = new Map(index.entries.map((entry) => [entry.journeyId, entry]));\n for (const journey of agent.journeys) {\n const entry = entryById.get(journey.id);\n if (!entry) {\n errors.push(`Journey '${journey.id}' is missing from the index.`);\n continue;\n }\n const expectedHash = hashJourneyDefinition(journey);\n if (entry.definitionHash !== expectedHash) {\n errors.push(`Journey '${journey.id}' hash changed; regenerate the journey index.`);\n }\n }\n\n return { ok: errors.length === 0, errors };\n}\n","import type { CompiledJourney } from \"../definition.js\";\nimport { assertEmbeddingModel } from \"./embeddings.js\";\nimport {\n type JourneyCandidate,\n type SelectJourneyCandidatesOptions,\n} from \"./schema.js\";\nimport { validateJourneyIndex } from \"./validation.js\";\n\nexport async function selectJourneyCandidates<TApp, TConversation, TTurn>(\n options: SelectJourneyCandidatesOptions<TApp, TConversation, TTurn>,\n): Promise<JourneyCandidate[]> {\n const topK = options.topK ?? 5;\n if (topK < 1) throw new Error(\"topK must be at least 1.\");\n assertEmbeddingModel(options.embeddingModel);\n\n const validation = validateJourneyIndex(options.agent, options.index, { embeddingModel: options.embeddingModel });\n const compatibilityErrors = validation.errors.filter((error) => error.startsWith(\"Index embedding \"));\n if (compatibilityErrors.length > 0) {\n throw new Error(`Journey index embedding model is incompatible: ${compatibilityErrors.join(\"; \")}`);\n }\n if (!validation.ok && !options.allowStaleIndex) {\n throw new Error(`Journey index is stale or invalid: ${validation.errors.join(\"; \")}`);\n }\n\n const journeyById = new Map(options.agent.journeys.map((journey) => [journey.id, journey]));\n const queryEmbedding = await options.embeddingModel.embed({\n role: \"journeyEmbedding\",\n text: options.message,\n ...(options.signal ? { signal: options.signal } : {}),\n });\n const dimensionMismatch = options.index.entries.find((entry) => (\n entry.embedding.dimensions !== queryEmbedding.dimensions\n || entry.embedding.vector.length !== queryEmbedding.embedding.length\n ));\n if (dimensionMismatch) {\n throw new Error(\n `Journey index embedding dimensions do not match runtime model for journey '${dimensionMismatch.journeyId}'.`,\n );\n }\n\n const candidates: JourneyCandidate[] = [];\n for (const entry of options.index.entries) {\n const journey = journeyById.get(entry.journeyId);\n if (!journey) continue;\n if (journey.includeWhen && !journey.includeWhen({\n app: options.app,\n conversation: options.conversation,\n turn: options.turn,\n ...(options.activeJourneyId ? { activeJourneyId: options.activeJourneyId } : {}),\n })) continue;\n const similarity = cosineSimilarity(queryEmbedding.embedding, entry.embedding.vector);\n const score = similarity + priorityBoost(journey) + stickinessBoost(journey, options.activeJourneyId);\n candidates.push({\n journeyId: journey.id,\n journey,\n score,\n similarity,\n reason: \"embedding\",\n definitionHash: entry.definitionHash,\n });\n }\n\n const forced = new Map<string, JourneyCandidate>();\n for (const candidate of candidates) {\n const reason = await forcedReason(candidate.journey, options);\n if (reason) forced.set(candidate.journeyId, { ...candidate, reason });\n }\n\n const ranked = candidates\n .filter((candidate) => !forced.has(candidate.journeyId))\n .sort(compareCandidates)\n .slice(0, topK);\n\n const included = new Map<string, JourneyCandidate>();\n for (const candidate of [...forced.values(), ...ranked]) included.set(candidate.journeyId, candidate);\n if (options.activeJourneyId && !included.has(options.activeJourneyId)) {\n const activeCandidate = candidates.find((candidate) => candidate.journeyId === options.activeJourneyId);\n if (activeCandidate) included.set(activeCandidate.journeyId, activeCandidate);\n }\n\n return [...included.values()].sort(compareCandidates);\n}\n\nasync function forcedReason<TApp, TConversation, TTurn>(\n journey: CompiledJourney,\n options: SelectJourneyCandidatesOptions<TApp, TConversation, TTurn>,\n): Promise<JourneyCandidate[\"reason\"] | null> {\n if (journey.alwaysInclude) return \"always\";\n const predicateArgs = {\n app: options.app,\n conversation: options.conversation,\n turn: options.turn,\n ...(options.activeJourneyId ? { activeJourneyId: options.activeJourneyId } : {}),\n };\n if (journey.always && await journey.always(predicateArgs)) return \"always\";\n if (journey.matcher && await journey.matcher(predicateArgs)) return \"matcher\";\n return null;\n}\n\nfunction compareCandidates(left: JourneyCandidate, right: JourneyCandidate) {\n const reasonRank = reasonPriority(right.reason) - reasonPriority(left.reason);\n if (reasonRank !== 0) return reasonRank;\n return right.score - left.score;\n}\n\nfunction reasonPriority(reason: JourneyCandidate[\"reason\"]) {\n if (reason === \"always\") return 2;\n if (reason === \"matcher\") return 1;\n return 0;\n}\n\nfunction priorityBoost(journey: CompiledJourney) {\n return journey.priority / 1000;\n}\n\nfunction stickinessBoost(journey: CompiledJourney, activeJourneyId: string | undefined) {\n if (journey.id !== activeJourneyId) return 0;\n if (journey.stickiness === \"high\") return 0.05;\n if (journey.stickiness === \"medium\") return 0.025;\n return 0.01;\n}\n\nfunction cosineSimilarity(left: number[], right: number[]) {\n if (left.length !== right.length) {\n throw new Error(`Embedding dimension mismatch: ${left.length} !== ${right.length}.`);\n }\n let dot = 0;\n let leftMagnitude = 0;\n let rightMagnitude = 0;\n for (let index = 0; index < left.length; index += 1) {\n const leftValue = left[index] ?? 0;\n const rightValue = right[index] ?? 0;\n dot += leftValue * rightValue;\n leftMagnitude += leftValue * leftValue;\n rightMagnitude += rightValue * rightValue;\n }\n if (leftMagnitude === 0 || rightMagnitude === 0) return 0;\n return dot / (Math.sqrt(leftMagnitude) * Math.sqrt(rightMagnitude));\n}\n","import type { CompiledJourney } from \"../../definition.js\";\nimport type { ConversationRecord } from \"../../storage.js\";\nimport type { AgentModelSet } from \"../../types.js\";\nimport { isAbortLikeError } from \"../errors.js\";\nimport { delegationCompletionSchema } from \"../schemas.js\";\nimport type {\n ConversationMessage,\n RuntimeEventEmitter,\n} from \"../types.js\";\nimport type { GenerateTextWithTrace } from \"./types.js\";\n\nexport async function evaluateDelegationCompletion(args: {\n generateTextWithTrace: GenerateTextWithTrace;\n journey: CompiledJourney | null;\n models: AgentModelSet;\n conversation: ConversationRecord;\n history: ConversationMessage[];\n signal?: AbortSignal;\n emit: RuntimeEventEmitter;\n}): Promise<{ journeyId: string; reason?: string } | null> {\n if (args.journey?.kind !== \"delegation\" || !args.journey.delegation) return null;\n if (args.journey.delegation.completeWhen.length === 0) return null;\n\n try {\n const output = await args.generateTextWithTrace({\n conversationId: args.conversation.id,\n model: args.models.matcher,\n input: {\n role: \"matcher\",\n promptTask: \"delegation-completion\",\n promptPayload: {\n journey: {\n id: args.journey.id,\n kind: args.journey.kind,\n condition: args.journey.condition,\n delegation: {\n goal: args.journey.delegation.goal,\n completeWhen: args.journey.delegation.completeWhen,\n },\n },\n conversationTranscript: args.history,\n },\n messages: [\n {\n role: \"system\",\n content: [\n \"Decide whether the active delegation journey is complete.\",\n \"Return complete only when all completion criteria are satisfied by the conversation.\",\n `Delegation goal: ${args.journey.delegation.goal}`,\n `Completion criteria: ${args.journey.delegation.completeWhen.join(\"; \")}`,\n ].join(\"\\n\"),\n },\n {\n role: \"user\",\n content: args.history\n .map((message) => `${message.role}: ${message.content}`)\n .join(\"\\n\"),\n },\n ],\n responseFormat: delegationCompletionSchema,\n ...(args.signal ? { signal: args.signal } : {}),\n },\n });\n const structured = delegationCompletionSchema.parse(output.structured ?? JSON.parse(output.text));\n if (!structured.complete) return null;\n const completed = {\n journeyId: args.journey.id,\n ...(structured.reason ? { reason: structured.reason } : {}),\n };\n await args.emit({\n conversationId: args.conversation.id,\n type: \"journey.completed\",\n data: completed,\n });\n return completed;\n } catch (error) {\n if (isAbortLikeError(error) && args.signal?.aborted) throw error;\n await args.emit({\n conversationId: args.conversation.id,\n type: \"error\",\n data: {\n code: \"delegation_completion_failed\",\n message: error instanceof Error ? error.message : \"Delegation completion evaluation failed.\",\n },\n });\n return null;\n }\n}\n","import type { CompiledAgent, CompiledJourney } from \"../../definition.js\";\nimport { runtimeLogger } from \"../../logging.js\";\nimport {\n addTelemetryContentEvent,\n telemetryAttributes,\n telemetryEventNames,\n telemetrySpanNames,\n withTelemetrySpan,\n} from \"../../telemetry.js\";\nimport { resolveActiveStates } from \"../journey-state.js\";\nimport { parseKnowledgeQuery, uniqueKnowledgeSources } from \"../tools.js\";\nimport type {\n RetrievedKnowledgeItem,\n RuntimeEventEmitter,\n RuntimeOptions,\n StateMachineTurnResult,\n} from \"../types.js\";\n\nexport async function retrieveKnowledge(args: {\n options: RuntimeOptions;\n agent: CompiledAgent;\n journey: CompiledJourney | null;\n stateMachineTurn: StateMachineTurnResult | null;\n conversationId: string;\n message: string;\n signal?: AbortSignal;\n emit: RuntimeEventEmitter;\n}) {\n const activeStates = resolveActiveStates(args.journey, args.stateMachineTurn);\n const sources = uniqueKnowledgeSources([\n ...args.agent.knowledge,\n ...(args.journey?.knowledge ?? []),\n ...activeStates.flatMap((state) => state.knowledge),\n ]);\n const logger = runtimeLogger(args.options, { conversationId: args.conversationId });\n logger.debug({\n sourceNames: sources.map((source) => source.name),\n limit: args.options.knowledgeLimit ?? 5,\n }, \"Starting knowledge retrieval\");\n const items: RetrievedKnowledgeItem[] = [];\n for (const source of sources) {\n const query = parseKnowledgeQuery(source, args.message);\n if (query === null) {\n logger.trace({ sourceName: source.name }, \"Knowledge source skipped\");\n continue;\n }\n logger.debug({ sourceName: source.name }, \"Retrieving from knowledge source\");\n const result = await withTelemetrySpan(args.options, {\n name: telemetrySpanNames.knowledgeRetrieve,\n attributes: {\n [telemetryAttributes.conversationId]: args.conversationId,\n [telemetryAttributes.knowledgeSourceName]: source.name,\n ...(args.journey ? { [telemetryAttributes.journeyId]: args.journey.id } : {}),\n },\n metric: {\n kind: \"knowledge\",\n attributes: {\n [telemetryAttributes.knowledgeSourceName]: source.name,\n ...(args.journey ? { [telemetryAttributes.journeyId]: args.journey.id } : {}),\n },\n },\n }, () => source.retrieve({\n query,\n ...(args.signal ? { signal: args.signal } : {}),\n }));\n addTelemetryContentEvent(args.options, telemetryEventNames.knowledgeItems, {\n \"cognidesk.knowledge.source.name\": source.name,\n \"cognidesk.knowledge.query\": query,\n \"cognidesk.knowledge.items\": result.items,\n });\n const limited = result.items\n .slice(0, args.options.knowledgeLimit ?? 5)\n .map((item) => ({ ...item, sourceName: source.name }));\n items.push(...limited);\n logger.debug({\n sourceName: source.name,\n retrievedCount: result.items.length,\n returnedCount: limited.length,\n itemIds: limited.map((item) => item.id),\n }, \"Knowledge source returned items\");\n await args.emit({\n conversationId: args.conversationId,\n type: \"knowledge.retrieved\",\n data: {\n sourceName: source.name,\n itemIds: limited.map((item) => item.id),\n },\n });\n }\n return items;\n}\n","import type { CompiledAgent, CompiledJourney } from \"../definition.js\";\nimport { runtimeLogger } from \"../logging.js\";\nimport {\n selectJourneyCandidates,\n type JourneyCandidate,\n} from \"../journey-index.js\";\nimport type { ConversationRecord } from \"../storage.js\";\nimport type {\n AgentModelSet,\n RuntimeSnapshot,\n} from \"../types.js\";\nimport { guardAllows } from \"./context.js\";\nimport { isAbortLikeError } from \"./errors.js\";\nimport {\n clampConfidence,\n normalizeConfidence,\n renderConversationTranscript,\n renderJourneyCandidateForMatcher,\n} from \"./rendering.js\";\nimport { journeyMatchSchema } from \"./schemas.js\";\nimport type {\n ConversationMessage,\n HandleUserMessageInput,\n RankedJourneyCandidate,\n RuntimeEventEmitter,\n RuntimeOptions,\n} from \"./types.js\";\nimport { evaluateDelegationCompletion } from \"./journey-selection/delegation.js\";\nimport { retrieveKnowledge } from \"./journey-selection/knowledge.js\";\nimport type {\n EmitGuardDenial,\n GenerateTextWithTrace,\n} from \"./journey-selection/types.js\";\n\nexport { evaluateDelegationCompletion } from \"./journey-selection/delegation.js\";\nexport { retrieveKnowledge } from \"./journey-selection/knowledge.js\";\n\nexport async function selectJourney<TTurn>(args: {\n options: RuntimeOptions;\n generateTextWithTrace: GenerateTextWithTrace;\n emitGuardDenial: EmitGuardDenial;\n agent: CompiledAgent;\n models: AgentModelSet;\n conversation: ConversationRecord;\n previousSnapshot: RuntimeSnapshot | null;\n history: ConversationMessage[];\n input: HandleUserMessageInput<TTurn>;\n userText: string;\n emit: RuntimeEventEmitter;\n}) {\n const logger = runtimeLogger(args.options, { conversationId: args.conversation.id });\n if (!args.options.journeyIndex) {\n const selected = args.previousSnapshot?.activeJourneyId\n ? args.agent.journeys.find((journey) => journey.id === args.previousSnapshot?.activeJourneyId) ?? null\n : null;\n logger.debug({\n selectedJourneyId: selected?.id ?? null,\n reason: \"journey_index_unavailable\",\n }, \"Selected journey without journey index\");\n return selected;\n }\n\n logger.debug({\n topK: args.options.topKJourneys ?? 5,\n activeJourneyId: args.previousSnapshot?.activeJourneyId,\n }, \"Retrieving journey candidates\");\n const candidates = await selectJourneyCandidates({\n agent: args.agent,\n index: args.options.journeyIndex,\n embeddingModel: args.models.journeyEmbedding,\n message: args.userText,\n app: args.input.app ?? args.options.app ?? {},\n conversation: args.conversation,\n turn: args.input.turn ?? {},\n ...(args.previousSnapshot?.activeJourneyId ? { activeJourneyId: args.previousSnapshot.activeJourneyId } : {}),\n topK: args.options.topKJourneys ?? 5,\n ...(args.input.signal ? { signal: args.input.signal } : {}),\n });\n await args.emit({\n conversationId: args.conversation.id,\n type: \"journey.candidates.retrieved\",\n data: { journeyIds: candidates.map((candidate) => candidate.journeyId) },\n });\n logger.debug({\n candidateJourneyIds: candidates.map((candidate) => candidate.journeyId),\n }, \"Journey candidates retrieved\");\n const rankedCandidates = await rankJourneyCandidates({\n options: args.options,\n generateTextWithTrace: args.generateTextWithTrace,\n candidates,\n models: args.models,\n conversation: args.conversation,\n userText: args.userText,\n history: args.history,\n ...(args.previousSnapshot?.activeJourneyId ? { activeJourneyId: args.previousSnapshot.activeJourneyId } : {}),\n ...(args.input.signal ? { signal: args.input.signal } : {}),\n });\n await args.emit({\n conversationId: args.conversation.id,\n type: \"journey.matched\",\n data: {\n candidates: rankedCandidates.map((candidate) => ({\n journeyId: candidate.journeyId,\n confidence: normalizeConfidence(candidate),\n reason: candidate.matchReason ?? candidate.reason,\n })),\n },\n });\n logger.debug({\n rankedJourneyIds: rankedCandidates.map((candidate) => candidate.journeyId),\n }, \"Journey candidates ranked\");\n\n const selected = await selectAllowedJourney({\n emitGuardDenial: args.emitGuardDenial,\n candidates: rankedCandidates,\n conversation: args.conversation,\n turn: args.input.turn ?? {},\n app: args.input.app ?? args.options.app ?? {},\n ...(args.previousSnapshot?.activeJourneyId ? { activeJourneyId: args.previousSnapshot.activeJourneyId } : {}),\n emit: args.emit,\n });\n if (selected && selected.id !== args.previousSnapshot?.activeJourneyId) {\n await args.emit({\n conversationId: args.conversation.id,\n type: \"journey.activated\",\n data: {\n journeyId: selected.id,\n ...(args.previousSnapshot?.activeJourneyId ? { previousJourneyId: args.previousSnapshot.activeJourneyId } : {}),\n },\n });\n }\n logger.info({\n selectedJourneyId: selected?.id ?? null,\n }, \"Allowed journey selected\");\n return selected;\n}\n\nasync function selectAllowedJourney(args: {\n emitGuardDenial: EmitGuardDenial;\n candidates: RankedJourneyCandidate[];\n conversation: ConversationRecord;\n turn: unknown;\n app: unknown;\n activeJourneyId?: string;\n emit: RuntimeEventEmitter;\n}) {\n for (const candidate of args.candidates) {\n const guard = candidate.journey.guard;\n if (!guard) return candidate.journey;\n const result = await guard({\n app: args.app,\n conversation: args.conversation,\n turn: args.turn,\n journeyId: candidate.journey.id,\n ...(args.activeJourneyId ? { activeJourneyId: args.activeJourneyId } : {}),\n });\n if (guardAllows(result)) return candidate.journey;\n await args.emitGuardDenial({\n journey: candidate.journey,\n conversation: args.conversation,\n result,\n emit: args.emit,\n });\n }\n return null;\n}\n\nasync function rankJourneyCandidates(args: {\n options: RuntimeOptions;\n generateTextWithTrace: GenerateTextWithTrace;\n candidates: JourneyCandidate[];\n models: AgentModelSet;\n conversation: ConversationRecord;\n userText: string;\n history: ConversationMessage[];\n activeJourneyId?: string;\n signal?: AbortSignal;\n}): Promise<RankedJourneyCandidate[]> {\n if (args.candidates.length === 0) return [];\n try {\n const output = await args.generateTextWithTrace({\n conversationId: args.conversation.id,\n model: args.models.matcher,\n input: {\n role: \"matcher\",\n promptTask: \"journey-matcher\",\n promptPayload: {\n latestUserMessage: args.userText,\n activeJourneyId: args.activeJourneyId ?? null,\n conversationTranscript: args.history,\n candidates: args.candidates.map((candidate) => ({\n journeyId: candidate.journeyId,\n reason: candidate.reason,\n score: candidate.score,\n journey: {\n id: candidate.journey.id,\n kind: candidate.journey.kind,\n condition: candidate.journey.condition,\n examples: candidate.journey.examples,\n priority: candidate.journey.priority,\n stickiness: candidate.journey.stickiness,\n },\n })),\n },\n messages: [\n {\n role: \"system\",\n content: [\n \"Rank only the provided candidate journeys for the latest user message.\",\n \"Return candidates that should be active now, ordered from best to worst.\",\n \"Return an empty candidates array when the base agent should stay active without a journey.\",\n \"Prefer keeping the active journey for vague follow-up messages when it still fits.\",\n ].join(\"\\n\"),\n },\n {\n role: \"user\",\n content: [\n `Latest user message: ${args.userText}`,\n `Active journey: ${args.activeJourneyId ?? \"none\"}`,\n \"Conversation transcript:\",\n renderConversationTranscript(args.history),\n \"Candidates:\",\n ...args.candidates.map((candidate) => renderJourneyCandidateForMatcher(candidate)),\n ].join(\"\\n\\n\"),\n },\n ],\n responseFormat: journeyMatchSchema,\n ...(args.signal ? { signal: args.signal } : {}),\n },\n });\n const structured = journeyMatchSchema.parse(normalizeJourneyMatchOutput(output.structured ?? JSON.parse(output.text)));\n const byId = new Map(args.candidates.map((candidate) => [candidate.journeyId, candidate]));\n const seen = new Set<string>();\n const ranked: RankedJourneyCandidate[] = [];\n for (const item of structured.candidates) {\n const candidate = byId.get(item.journeyId);\n if (!candidate || seen.has(item.journeyId)) continue;\n seen.add(item.journeyId);\n ranked.push({\n ...candidate,\n ...(item.confidence !== undefined ? { matchConfidence: clampConfidence(item.confidence) } : {}),\n ...(item.reason ? { matchReason: item.reason } : {}),\n });\n }\n return ranked;\n } catch (error) {\n if (isAbortLikeError(error) && args.signal?.aborted) throw error;\n runtimeLogger(args.options, { conversationId: args.conversation.id }).error({\n error: error instanceof Error ? error.message : \"Journey candidate ranking failed.\",\n }, \"Falling back to unranked journey candidates\");\n return args.candidates;\n }\n}\n\nfunction normalizeJourneyMatchOutput(output: unknown) {\n if (!isRecord(output) || !Array.isArray(output.candidates)) return output;\n return {\n ...output,\n candidates: output.candidates.map((candidate) => {\n if (!isRecord(candidate)) return candidate;\n return {\n ...candidate,\n confidence: typeof candidate.confidence === \"number\" ? candidate.confidence : 1,\n reason: typeof candidate.reason === \"string\" ? candidate.reason : \"\",\n };\n }),\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n","import type { CompiledAgent, CompiledJourney, EventRoutingMode } from \"../definition.js\";\nimport type { ConversationRecord } from \"../storage.js\";\nimport type {\n AgentModelSet,\n GuardResult,\n ModelAdapter,\n RuntimeSnapshot,\n TextGenerationInput,\n TextGenerationOutput,\n} from \"../types.js\";\nimport { guardAllows } from \"./context.js\";\nimport { isAbortLikeError } from \"./errors.js\";\nimport { findJourneyState, findJourneyStates, hasEventTransition } from \"./journey-state.js\";\nimport { transitionMatchSchema } from \"./schemas.js\";\nimport type { RuntimeEventEmitter, RuntimeOptions } from \"./types.js\";\n\ntype GenerateTextWithTrace = (input: {\n conversationId: string;\n model: ModelAdapter;\n input: TextGenerationInput;\n}) => Promise<TextGenerationOutput>;\n\ntype EmitGuardDenial = (args: {\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state?: CompiledJourney[\"states\"][number];\n result: GuardResult;\n emit: RuntimeEventEmitter;\n}) => Promise<void>;\n\nexport async function selectTransition(args: {\n options: RuntimeOptions;\n generateTextWithTrace: GenerateTextWithTrace;\n emitGuardDenial: EmitGuardDenial;\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state: CompiledJourney[\"states\"][number];\n context: Record<string, unknown>;\n models?: AgentModelSet;\n userText?: string;\n signal?: AbortSignal;\n emit: RuntimeEventEmitter;\n}) {\n const transitions = [...args.state.transitions]\n .filter((transition) => transition.kind === \"conversational\")\n .sort((left, right) => (right.priority ?? 0) - (left.priority ?? 0));\n const rankedTransitions = await rankConversationalTransitions(args, transitions);\n for (const transition of rankedTransitions) {\n if (!transition.guard) return transition;\n const result = await transition.guard({\n app: args.options.app ?? {},\n context: args.context,\n });\n if (guardAllows(result)) return transition;\n await args.emitGuardDenial({ ...args, result });\n }\n return null;\n}\n\nasync function rankConversationalTransitions(\n args: {\n generateTextWithTrace: GenerateTextWithTrace;\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state: CompiledJourney[\"states\"][number];\n context: Record<string, unknown>;\n models?: AgentModelSet;\n userText?: string;\n signal?: AbortSignal;\n emit: RuntimeEventEmitter;\n },\n transitions: CompiledJourney[\"states\"][number][\"transitions\"],\n) {\n if (transitions.length <= 1) return transitions;\n if (!args.models || !args.userText) return transitions;\n\n const candidates = transitions.map((transition, index) => ({\n id: `transition_${index + 1}`,\n transition,\n }));\n try {\n const output = await args.generateTextWithTrace({\n conversationId: args.conversation.id,\n model: args.models.matcher,\n input: {\n role: \"matcher\",\n promptTask: \"transition-matcher\",\n promptPayload: {\n journey: {\n id: args.journey.id,\n kind: args.journey.kind,\n condition: args.journey.condition,\n },\n state: {\n id: args.state.id,\n instructions: args.state.instructions ?? null,\n summary: args.state.summary ?? null,\n },\n latestUserMessage: args.userText,\n currentContext: args.context,\n candidates: candidates.map(({ id, transition }) => ({\n id,\n targetId: transition.targetId,\n description: transition.description ?? null,\n priority: transition.priority ?? 0,\n })),\n },\n messages: [\n {\n role: \"system\",\n content: [\n \"Rank only the provided state transition candidates for the latest user message.\",\n \"Return candidates that should fire now, ordered from best to worst.\",\n \"Return an empty candidates array when no transition should fire.\",\n \"Prefer higher priority only when the latest message fits multiple transitions equally.\",\n ].join(\"\\n\"),\n },\n {\n role: \"user\",\n content: [\n `Journey: ${args.journey.id}`,\n `State: ${args.state.id}`,\n `Latest user message: ${args.userText}`,\n `Current context: ${JSON.stringify(args.context)}`,\n \"Candidates:\",\n ...candidates.map(({ id, transition }) => [\n `id: ${id}`,\n `targetId: ${transition.targetId}`,\n transition.description\n ? `description: ${transition.description}`\n : \"description: transition is allowed when current state requirements are satisfied\",\n `priority: ${transition.priority ?? 0}`,\n ].join(\"\\n\")),\n ].join(\"\\n\\n\"),\n },\n ],\n responseFormat: transitionMatchSchema,\n ...(args.signal ? { signal: args.signal } : {}),\n },\n });\n const structured = transitionMatchSchema.parse(normalizeTransitionMatchOutput(output.structured ?? JSON.parse(output.text)));\n const byId = new Map(candidates.map((candidate) => [candidate.id, candidate.transition]));\n const seen = new Set<string>();\n const ranked = structured.candidates\n .map((candidate) => {\n const transition = byId.get(candidate.id);\n if (!transition || seen.has(candidate.id)) return null;\n seen.add(candidate.id);\n return transition;\n })\n .filter((transition): transition is CompiledJourney[\"states\"][number][\"transitions\"][number] => Boolean(transition));\n return ranked;\n } catch (error) {\n if (isAbortLikeError(error) && args.signal?.aborted) throw error;\n await args.emit({\n conversationId: args.conversation.id,\n type: \"error\",\n data: {\n code: \"transition_matching_failed\",\n message: error instanceof Error ? error.message : \"Transition matching failed.\",\n },\n });\n return transitions;\n }\n}\n\nfunction normalizeTransitionMatchOutput(output: unknown) {\n if (!isRecord(output) || !Array.isArray(output.candidates)) return output;\n return {\n ...output,\n candidates: output.candidates.map((candidate) => {\n if (!isRecord(candidate)) return candidate;\n return {\n ...candidate,\n confidence: typeof candidate.confidence === \"number\" ? candidate.confidence : 1,\n reason: typeof candidate.reason === \"string\" ? candidate.reason : \"\",\n };\n }),\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n\nexport function resolveJourneyEventRoute(args: {\n agent: CompiledAgent;\n previousSnapshot: RuntimeSnapshot | null;\n eventName: string;\n routing: EventRoutingMode;\n target?: { journeyId?: string; stateId?: string };\n}) {\n const stateMachineJourneys = args.agent.journeys.filter((journey) => journey.kind === \"stateMachine\");\n const journeyById = new Map(stateMachineJourneys.map((journey) => [journey.id, journey]));\n const activeJourney = args.previousSnapshot?.activeJourneyId\n ? journeyById.get(args.previousSnapshot.activeJourneyId)\n : undefined;\n const activeStates = activeJourney\n ? findJourneyStates(activeJourney, args.previousSnapshot?.activeStateIds.length\n ? args.previousSnapshot.activeStateIds\n : activeJourney.initialStateId ? [activeJourney.initialStateId] : [])\n : [];\n\n if (args.routing === \"activeJourneyOnly\") {\n const state = activeStates.find((candidate) => hasEventTransition(candidate, args.eventName)) ?? activeStates[0];\n return activeJourney && state ? { journey: activeJourney, state } : null;\n }\n\n if (args.routing === \"targeted\") {\n const journey = args.target?.journeyId\n ? journeyById.get(args.target.journeyId)\n : activeJourney;\n if (!journey) return null;\n const state = findJourneyState(\n journey,\n args.target?.stateId\n ?? (journey.id === args.previousSnapshot?.activeJourneyId ? activeStates[0]?.id : undefined)\n ?? journey.initialStateId,\n );\n return state ? { journey, state } : null;\n }\n\n if (args.routing === \"full\") {\n const activeState = activeStates.find((candidate) => hasEventTransition(candidate, args.eventName));\n if (activeJourney && activeState) {\n return { journey: activeJourney, state: activeState };\n }\n for (const journey of stateMachineJourneys) {\n const state = journey.states.find((candidate) => hasEventTransition(candidate, args.eventName));\n if (state) return { journey, state };\n }\n }\n\n return null;\n}\n\nexport async function selectEventTransition(args: {\n emitGuardDenial: EmitGuardDenial;\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state: CompiledJourney[\"states\"][number];\n eventName: string;\n context: Record<string, unknown>;\n app: unknown;\n emit: RuntimeEventEmitter;\n}) {\n const transitions = [...args.state.transitions]\n .filter((transition) => transition.kind === \"event\" && (transition.eventName ?? transition.description) === args.eventName)\n .sort((left, right) => (right.priority ?? 0) - (left.priority ?? 0));\n for (const transition of transitions) {\n if (!transition.guard) return transition;\n const result = await transition.guard({\n app: args.app,\n context: args.context,\n });\n if (guardAllows(result)) return transition;\n await args.emitGuardDenial({ ...args, result });\n }\n return null;\n}\n","import type { CompiledAgent, CompiledJourney, EventRoutingMode } from \"../definition.js\";\nimport type { ConversationRecord } from \"../storage.js\";\nimport type {\n AgentModelSet,\n GuardResult,\n ModelAdapter,\n RuntimeSnapshot,\n TextGenerationInput,\n TextGenerationOutput,\n} from \"../types.js\";\nimport {\n telemetryAttributes,\n telemetrySpanNames,\n withTelemetrySpan,\n} from \"../telemetry.js\";\nimport {\n evaluateDelegationCompletion as evaluateDelegationCompletionWithDeps,\n retrieveKnowledge as retrieveKnowledgeWithDeps,\n selectJourney as selectJourneyWithDeps,\n} from \"./journey-selection.js\";\nimport {\n resolveJourneyEventRoute as resolveJourneyEventRouteWithDeps,\n selectEventTransition as selectEventTransitionWithDeps,\n selectTransition as selectTransitionWithDeps,\n} from \"./transitions.js\";\nimport type {\n ConversationMessage,\n HandleUserMessageInput,\n RetrievedKnowledgeItem,\n RuntimeEventEmitter,\n RuntimeOptions,\n StateMachineTurnResult,\n} from \"./types.js\";\n\nexport function selectRuntimeJourney<TTurn>(\n deps: {\n options: RuntimeOptions;\n generateTextWithTrace: (input: {\n conversationId: string;\n model: ModelAdapter;\n input: TextGenerationInput;\n }) => Promise<TextGenerationOutput>;\n emitGuardDenial: (input: {\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state?: CompiledJourney[\"states\"][number];\n result: GuardResult;\n emit: RuntimeEventEmitter;\n }) => Promise<void>;\n },\n args: {\n agent: CompiledAgent;\n models: AgentModelSet;\n conversation: ConversationRecord;\n previousSnapshot: RuntimeSnapshot | null;\n history: ConversationMessage[];\n input: HandleUserMessageInput<TTurn>;\n userText: string;\n emit: RuntimeEventEmitter;\n },\n) {\n return withTelemetrySpan(deps.options, {\n name: telemetrySpanNames.journeySelect,\n attributes: {\n [telemetryAttributes.conversationId]: args.conversation.id,\n [telemetryAttributes.agentId]: args.agent.id,\n ...(args.previousSnapshot?.activeJourneyId ? { \"cognidesk.previous_journey.id\": args.previousSnapshot.activeJourneyId } : {}),\n },\n metric: {\n kind: \"runtime\",\n attributes: {\n [telemetryAttributes.operation]: \"journey_select\",\n [telemetryAttributes.agentId]: args.agent.id,\n },\n },\n }, () => selectJourneyWithDeps({\n ...args,\n options: deps.options,\n generateTextWithTrace: deps.generateTextWithTrace,\n emitGuardDenial: deps.emitGuardDenial,\n }));\n}\n\nexport function retrieveRuntimeKnowledge(\n deps: {\n options: RuntimeOptions;\n },\n args: {\n agent: CompiledAgent;\n journey: CompiledJourney | null;\n stateMachineTurn: StateMachineTurnResult | null;\n conversationId: string;\n message: string;\n signal?: AbortSignal;\n emit: RuntimeEventEmitter;\n },\n): Promise<RetrievedKnowledgeItem[]> {\n return retrieveKnowledgeWithDeps({\n ...args,\n options: deps.options,\n });\n}\n\nexport function evaluateRuntimeDelegationCompletion(\n generateTextWithTrace: (input: {\n conversationId: string;\n model: ModelAdapter;\n input: TextGenerationInput;\n }) => Promise<TextGenerationOutput>,\n args: {\n journey: CompiledJourney | null;\n models: AgentModelSet;\n conversation: ConversationRecord;\n history: ConversationMessage[];\n signal?: AbortSignal;\n emit: RuntimeEventEmitter;\n },\n): Promise<{ journeyId: string; reason?: string } | null> {\n return evaluateDelegationCompletionWithDeps({\n ...args,\n generateTextWithTrace,\n });\n}\n\nexport function selectRuntimeTransition(\n deps: {\n options: RuntimeOptions;\n generateTextWithTrace: (input: {\n conversationId: string;\n model: ModelAdapter;\n input: TextGenerationInput;\n }) => Promise<TextGenerationOutput>;\n emitGuardDenial: (input: {\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state?: CompiledJourney[\"states\"][number];\n result: GuardResult;\n emit: RuntimeEventEmitter;\n }) => Promise<void>;\n },\n args: {\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state: CompiledJourney[\"states\"][number];\n context: Record<string, unknown>;\n models?: AgentModelSet;\n userText?: string;\n signal?: AbortSignal;\n emit: RuntimeEventEmitter;\n },\n) {\n return selectTransitionWithDeps({\n ...args,\n options: deps.options,\n generateTextWithTrace: deps.generateTextWithTrace,\n emitGuardDenial: deps.emitGuardDenial,\n });\n}\n\nexport function resolveRuntimeJourneyEventRoute(args: {\n agent: CompiledAgent;\n previousSnapshot: RuntimeSnapshot | null;\n eventName: string;\n routing: EventRoutingMode;\n target?: { journeyId?: string; stateId?: string };\n}) {\n return resolveJourneyEventRouteWithDeps(args);\n}\n\nexport function selectRuntimeEventTransition(\n emitGuardDenial: (input: {\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state?: CompiledJourney[\"states\"][number];\n result: GuardResult;\n emit: RuntimeEventEmitter;\n }) => Promise<void>,\n args: {\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state: CompiledJourney[\"states\"][number];\n eventName: string;\n context: Record<string, unknown>;\n app: unknown;\n emit: RuntimeEventEmitter;\n },\n) {\n return selectEventTransitionWithDeps({\n ...args,\n emitGuardDenial,\n });\n}\n","import type { CompiledAgent, CompiledJourney, EventRoutingMode } from \"../definition.js\";\nimport type { ConversationRecord, RuntimeEventInput } from \"../storage.js\";\nimport type {\n AgentModelSet,\n GuardResult,\n RuntimeEvent,\n RuntimeSnapshot,\n} from \"../types.js\";\nimport {\n evaluateRuntimeDelegationCompletion,\n resolveRuntimeJourneyEventRoute,\n retrieveRuntimeKnowledge,\n selectRuntimeEventTransition,\n selectRuntimeJourney,\n selectRuntimeTransition,\n} from \"./facade-routing.js\";\nimport type { RuntimeCore, RuntimeConversationMessage } from \"./kernel-core.js\";\nimport type {\n HandleUserMessageInput,\n RuntimeOptions,\n StateMachineTurnResult,\n} from \"./types.js\";\n\nexport function createRuntimeRouting(\n options: RuntimeOptions,\n core: RuntimeCore,\n getState: () => { emitGuardDenial: RuntimeEmitGuardDenial },\n) {\n return {\n selectJourney<TTurn>(args: {\n agent: CompiledAgent;\n models: AgentModelSet;\n conversation: ConversationRecord;\n previousSnapshot: RuntimeSnapshot | null;\n history: RuntimeConversationMessage[];\n input: HandleUserMessageInput<TTurn>;\n userText: string;\n emit: RuntimeEmit;\n }) {\n return selectRuntimeJourney({\n options,\n generateTextWithTrace: core.generateTextWithTrace,\n emitGuardDenial: (input) => getState().emitGuardDenial(input),\n }, args);\n },\n retrieveKnowledge(args: {\n agent: CompiledAgent;\n journey: CompiledJourney | null;\n stateMachineTurn: StateMachineTurnResult | null;\n conversationId: string;\n message: string;\n signal?: AbortSignal;\n emit: RuntimeEmit;\n }) {\n return retrieveRuntimeKnowledge({ options }, args);\n },\n evaluateDelegationCompletion(args: {\n journey: CompiledJourney | null;\n models: AgentModelSet;\n conversation: ConversationRecord;\n history: RuntimeConversationMessage[];\n signal?: AbortSignal;\n emit: RuntimeEmit;\n }) {\n return evaluateRuntimeDelegationCompletion(core.generateTextWithTrace, args);\n },\n selectTransition(args: {\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state: CompiledJourney[\"states\"][number];\n context: Record<string, unknown>;\n models?: AgentModelSet;\n userText?: string;\n signal?: AbortSignal;\n emit: RuntimeEmit;\n }) {\n return selectRuntimeTransition({\n options,\n generateTextWithTrace: core.generateTextWithTrace,\n emitGuardDenial: (input) => getState().emitGuardDenial(input),\n }, args);\n },\n resolveJourneyEventRoute(args: {\n agent: CompiledAgent;\n previousSnapshot: RuntimeSnapshot | null;\n eventName: string;\n routing: EventRoutingMode;\n target?: { journeyId?: string; stateId?: string };\n }) {\n return resolveRuntimeJourneyEventRoute(args);\n },\n selectEventTransition(args: {\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state: CompiledJourney[\"states\"][number];\n eventName: string;\n context: Record<string, unknown>;\n app: unknown;\n emit: RuntimeEmit;\n }) {\n return selectRuntimeEventTransition((input) => getState().emitGuardDenial(input), args);\n },\n };\n}\n\ntype RuntimeEmit = <TEvent extends RuntimeEventInput>(event: TEvent) => Promise<RuntimeEvent>;\ntype RuntimeEmitGuardDenial = (args: {\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state?: CompiledJourney[\"states\"][number];\n result: GuardResult;\n emit: RuntimeEmit;\n}) => Promise<void>;\n\nexport type RuntimeRouting = ReturnType<typeof createRuntimeRouting>;\n","import { z } from \"zod\";\nimport type { CompiledJourney } from \"../definition.js\";\nimport type { ConversationRecord, StorageAdapter } from \"../storage.js\";\nimport type { RuntimeEvent } from \"../types.js\";\nimport type { GuardResult } from \"../types.js\";\nimport {\n getPathValue,\n hasUsableValue,\n isStructuredGuardDenial,\n isRecord,\n} from \"./context.js\";\nimport {\n createFieldGroupPromptId,\n createFieldConfirmationPromptId,\n createFieldPromptId,\n createGuardPromptId,\n createToolConfirmationPromptId,\n isFieldRequired,\n} from \"./journey-state.js\";\nimport type { RuntimeEventEmitter } from \"./types.js\";\n\nexport async function emitGuardDenial(args: {\n storage: StorageAdapter;\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state?: CompiledJourney[\"states\"][number];\n result: GuardResult;\n emit: RuntimeEventEmitter;\n}) {\n if (!isStructuredGuardDenial(args.result)) return;\n\n await args.emit({\n conversationId: args.conversation.id,\n type: \"journey.guard.denied\",\n data: {\n journeyId: args.journey.id,\n ...(args.state ? { stateId: args.state.id } : {}),\n code: args.result.code,\n ...(args.result.message ? { message: args.result.message } : {}),\n ...(args.result.metadata ? { metadata: args.result.metadata } : {}),\n },\n });\n\n if (!args.result.prompt) return;\n const promptId = createGuardPromptId(args.journey.id, args.state?.id, args.result.code);\n const existing = await args.storage.listEvents({ conversationId: args.conversation.id });\n const hasOpenPrompt = existing.some((event) => (\n event.type === \"ui.prompted\" && event.data.promptId === promptId\n )) && !existing.some((event) => (\n event.type === \"ui.submitted\" && event.data.promptId === promptId\n ));\n if (hasOpenPrompt) return;\n\n await args.emit({\n conversationId: args.conversation.id,\n type: \"ui.prompted\",\n data: {\n promptId,\n widgetKind: args.result.prompt.widget.kind,\n input: args.result.prompt.input,\n },\n });\n}\n\nexport async function emitFieldPrompts(args: {\n storage: StorageAdapter;\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state: CompiledJourney[\"states\"][number];\n context: Record<string, unknown>;\n emit: RuntimeEventEmitter;\n}) {\n const missingFields = args.state.collected.filter((field) => (\n isFieldRequired(field, args.context) && !hasUsableValue(getPathValue(args.context, field.path))\n ));\n if (missingFields.length === 0) return 0;\n const existing = await args.storage.listEvents({ conversationId: args.conversation.id });\n if (missingFields.length > 1) {\n const promptId = createFieldGroupPromptId(args.journey.id, args.state.id);\n const hasOpenPrompt = existing.some((event) => (\n event.type === \"ui.prompted\" && event.data.promptId === promptId\n )) && !existing.some((event) => (\n event.type === \"ui.submitted\" && event.data.promptId === promptId\n ));\n if (hasOpenPrompt) return 0;\n await args.emit({\n conversationId: args.conversation.id,\n type: \"ui.prompted\",\n data: {\n promptId,\n widgetKind: \"form\",\n input: {\n title: \"Missing details\",\n fields: missingFields.map((field) => formFieldFromCollectedField(field, args.context)),\n },\n },\n });\n return 1;\n }\n let prompted = 0;\n for (const field of missingFields) {\n const promptId = createFieldPromptId(args.journey.id, args.state.id, field.path);\n const hasOpenPrompt = existing.some((event) => (\n event.type === \"ui.prompted\" && event.data.promptId === promptId\n )) && !existing.some((event) => (\n event.type === \"ui.submitted\" && event.data.promptId === promptId\n ));\n if (hasOpenPrompt) continue;\n await args.emit({\n conversationId: args.conversation.id,\n type: \"ui.prompted\",\n data: {\n promptId,\n widgetKind: field.widget?.kind ?? \"text-input\",\n input: resolveWidgetInput(field, args.context) ?? {\n label: field.prompt ?? field.path,\n },\n },\n });\n prompted += 1;\n }\n return prompted;\n}\n\nfunction formFieldFromCollectedField(\n field: CompiledJourney[\"states\"][number][\"collected\"][number],\n context: Record<string, unknown>,\n) {\n const resolvedInput = resolveWidgetInput(field, context);\n const input = isRecord(resolvedInput) ? resolvedInput : {};\n const widgetKind = field.widget?.kind;\n return {\n path: field.path,\n label: typeof input.label === \"string\" ? input.label : field.prompt ?? field.path,\n ...(typeof input.description === \"string\" ? { description: input.description } : {}),\n type: widgetKind === \"date-picker\" ? \"date\" : widgetKind === \"choice\" ? \"choice\" : \"text\",\n required: field.required,\n ...(typeof input.placeholder === \"string\" ? { placeholder: input.placeholder } : {}),\n ...(typeof input.min === \"string\" ? { min: input.min } : {}),\n ...(typeof input.max === \"string\" ? { max: input.max } : {}),\n ...(Array.isArray(input.options) ? { options: input.options } : {}),\n };\n}\n\nexport async function emitFieldConfirmationPrompts(args: {\n storage: StorageAdapter;\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state: CompiledJourney[\"states\"][number];\n context: Record<string, unknown>;\n emit: RuntimeEventEmitter;\n}) {\n const confirmableFields = args.state.collected.filter((field) => (\n field.confirm && hasUsableValue(getPathValue(args.context, field.path))\n ));\n if (confirmableFields.length === 0) return 0;\n const existing = await args.storage.listEvents({ conversationId: args.conversation.id });\n let prompted = 0;\n for (const field of confirmableFields) {\n const promptId = createFieldConfirmationPromptId(args.journey.id, args.state.id, field.path);\n const hasConfirmedSubmission = existing.some((event) => isConfirmedSubmission(event, promptId));\n if (hasConfirmedSubmission) continue;\n const hasOpenPrompt = isPromptOpen(existing, promptId);\n if (hasOpenPrompt) continue;\n const policy = typeof field.confirm === \"object\" ? field.confirm : {};\n const value = getPathValue(args.context, field.path);\n await args.emit({\n conversationId: args.conversation.id,\n type: \"ui.prompted\",\n data: {\n promptId,\n widgetKind: policy.widget?.kind ?? \"confirmation\",\n input: {\n title: policy.message ?? `Confirm ${field.path}`,\n message: policy.reason ?? policy.message ?? `Please confirm ${field.path}: ${String(value)}.`,\n confirmLabel: \"Confirm\",\n cancelLabel: \"Edit\",\n },\n },\n });\n prompted += 1;\n }\n return prompted;\n}\n\nconst confirmedWidgetOutputSchema = z.object({ confirmed: z.literal(true) });\n\nfunction isConfirmedSubmission(event: RuntimeEvent, promptId: string) {\n return event.type === \"ui.submitted\"\n && event.data.promptId === promptId\n && confirmedWidgetOutputSchema.safeParse(event.data.output).success;\n}\n\nfunction isPromptOpen(events: RuntimeEvent[], promptId: string) {\n let latestPromptOffset = 0;\n let latestSubmissionOffset = 0;\n for (const event of events) {\n if (event.type === \"ui.prompted\" && event.data.promptId === promptId) latestPromptOffset = event.offset;\n if (event.type === \"ui.submitted\" && event.data.promptId === promptId) latestSubmissionOffset = event.offset;\n }\n return latestPromptOffset > latestSubmissionOffset;\n}\n\nexport async function emitConfirmationPrompts(args: {\n storage: StorageAdapter;\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state: CompiledJourney[\"states\"][number];\n context: Record<string, unknown>;\n emit: RuntimeEventEmitter;\n}) {\n const confirmableToolRuns = args.state.toolRuns.filter((toolRun) => (\n toolRun.actionType === \"transition\" && toolRun.confirm\n ));\n if (confirmableToolRuns.length === 0) return 0;\n const existing = await args.storage.listEvents({ conversationId: args.conversation.id });\n let prompted = 0;\n for (const toolRun of confirmableToolRuns) {\n const promptId = createToolConfirmationPromptId(args.journey.id, args.state.id, toolRun.tool.name);\n const hasOpenPrompt = existing.some((event) => (\n event.type === \"ui.prompted\" && event.data.promptId === promptId\n )) && !existing.some((event) => (\n event.type === \"ui.submitted\" && event.data.promptId === promptId\n ));\n if (hasOpenPrompt) continue;\n const baseMessage = toolRun.confirm?.reason ?? toolRun.confirm?.message ?? `Confirm ${toolRun.tool.name}.`;\n const preview = formatConfirmationPreview(safeToolInputPreview(toolRun.input, args.context));\n await args.emit({\n conversationId: args.conversation.id,\n type: \"ui.prompted\",\n data: {\n promptId,\n widgetKind: toolRun.confirm?.widget?.kind ?? \"confirmation\",\n input: {\n title: toolRun.confirm?.message ?? `Confirm ${toolRun.tool.name}`,\n message: preview ? `${baseMessage}\\n\\n${preview}` : baseMessage,\n confirmLabel: \"Confirm\",\n cancelLabel: \"Not now\",\n },\n },\n });\n prompted += 1;\n }\n return prompted;\n}\n\nfunction resolveWidgetInput(\n field: CompiledJourney[\"states\"][number][\"collected\"][number],\n context: Record<string, unknown>,\n) {\n return typeof field.widgetInput === \"function\"\n ? field.widgetInput({ context })\n : field.widgetInput;\n}\n\nfunction safeToolInputPreview(\n input: CompiledJourney[\"states\"][number][\"toolRuns\"][number][\"input\"],\n context: Record<string, unknown>,\n) {\n if (!input) return {};\n try {\n return input({ context });\n } catch {\n return {};\n }\n}\n\nfunction formatConfirmationPreview(value: unknown) {\n if (!isRecord(value)) return \"\";\n const entries = Object.entries(value)\n .filter(([, entryValue]) => typeof entryValue === \"string\" || typeof entryValue === \"number\" || typeof entryValue === \"boolean\")\n .filter(([key, entryValue]) => !key.toLowerCase().includes(\"internal\") && String(entryValue).trim().length > 0);\n if (entries.length === 0) return \"\";\n return entries\n .map(([key, entryValue]) => `${humanizeKey(key)}: ${String(entryValue)}`)\n .join(\"\\n\");\n}\n\nfunction humanizeKey(value: string) {\n const spaced = value\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[_-]+/g, \" \")\n .trim();\n return spaced ? `${spaced[0]?.toUpperCase() ?? \"\"}${spaced.slice(1)}` : value;\n}\n","import { z } from \"zod\";\nimport type { CompiledJourney } from \"../definition.js\";\nimport type { ConversationRecord } from \"../storage.js\";\nimport type {\n AgentModelSet,\n ConversationChannel,\n RuntimeSnapshot,\n} from \"../types.js\";\nimport { createJourneyCompletion, createToolConfirmationPromptId } from \"./journey-state.js\";\nimport type { StateMachineTurnResult } from \"./types.js\";\nimport {\n resolveInitialJourneyContext,\n resolveJourneyEntryState,\n} from \"./state-machine/context.js\";\nimport { enterStateTree, stateRequirementsSatisfied } from \"./state-machine/entry.js\";\nimport { applyStateExtraction } from \"./state-machine/extraction.js\";\nimport type {\n RuntimeEmit,\n StateMachineDeps,\n} from \"./state-machine/types.js\";\n\nexport async function executeStateMachineTurn(args: StateMachineDeps & {\n journey: CompiledJourney;\n models: AgentModelSet;\n conversation: ConversationRecord;\n previousSnapshot: RuntimeSnapshot | null;\n userText: string;\n channel?: ConversationChannel;\n turn: unknown;\n app: unknown;\n signal?: AbortSignal;\n emit: RuntimeEmit;\n}): Promise<StateMachineTurnResult> {\n const stateById = new Map(args.journey.states.map((state) => [state.id, state]));\n const sameJourney = args.previousSnapshot?.activeJourneyId === args.journey.id;\n const context = await resolveInitialJourneyContext(args);\n const activeStates = sameJourney\n ? (args.previousSnapshot?.activeStateIds ?? [])\n .map((stateId) => stateById.get(stateId))\n .filter((state): state is CompiledJourney[\"states\"][number] => Boolean(state))\n : args.journey.initialStateId\n ? await enterStateTree({\n ...args,\n stateById,\n state: await resolveJourneyEntryState({\n ...args,\n stateById,\n context,\n }),\n context,\n emitSelf: true,\n })\n : [];\n if (activeStates.length === 0) return { activeStateIds: [], journeyContext: context };\n\n const nextActiveStates: CompiledJourney[\"states\"] = [];\n for (const state of activeStates) {\n const activeState = await applyStateExtraction({\n ...args,\n state,\n context,\n });\n nextActiveStates.push(...await advanceStateMachine({\n ...args,\n stateById,\n state: activeState,\n context,\n ...(args.channel ? { channel: args.channel } : {}),\n }));\n }\n\n const completed = createJourneyCompletion(args.journey.id, nextActiveStates);\n if (completed) {\n await args.emit({\n conversationId: args.conversation.id,\n type: \"journey.completed\",\n data: completed,\n });\n }\n\n return {\n activeStateIds: completed ? [] : nextActiveStates.map((state) => state.id),\n journeyContext: context,\n ...(args.channel ? { channel: args.channel } : {}),\n ...(completed ? { completed } : {}),\n };\n}\n\nexport async function advanceStateMachine(args: StateMachineDeps & {\n journey: CompiledJourney;\n models?: AgentModelSet;\n conversation: ConversationRecord;\n stateById: Map<string, CompiledJourney[\"states\"][number]>;\n state: CompiledJourney[\"states\"][number];\n context: Record<string, unknown>;\n userText?: string;\n channel?: ConversationChannel;\n signal?: AbortSignal;\n emit: RuntimeEmit;\n}) {\n let state = args.state;\n const visited = new Set<string>();\n while (!visited.has(state.id)) {\n visited.add(state.id);\n const lifecycle = await args.requireConversationRecord(args.conversation.id);\n if (lifecycle.lifecycle !== \"active\") return [state];\n const voiceMode = args.channel === \"voice\";\n if (!stateRequirementsSatisfied(state, args.context)) {\n if (!voiceMode) await args.emitFieldPrompts({ ...args, state });\n return [state];\n }\n if (!voiceMode) {\n const fieldConfirmationCount = await args.emitFieldConfirmationPrompts({ ...args, state });\n if (fieldConfirmationCount > 0) return [state];\n }\n let confirmedPromptId: string | undefined;\n if (state.requiresVisit) {\n if (voiceMode) {\n confirmedPromptId = await resolveVoiceConfirmedPromptId({ ...args, state });\n if (hasConfirmableTransitionToolRun(state) && !confirmedPromptId) return [state];\n } else {\n const promptCount = await args.emitConfirmationPrompts({ ...args, state });\n if (promptCount > 0) return [state];\n }\n }\n\n await args.runStateActionRuns({ ...args, state, actionType: \"transition\" });\n const toolTargetId = await args.runStateToolRuns({\n ...args,\n state,\n actionType: \"transition\",\n ...(confirmedPromptId ? { confirmedPromptId } : {}),\n });\n const latestConversation = await args.requireConversationRecord(args.conversation.id);\n if (latestConversation.lifecycle !== \"active\") return [state];\n const transition = toolTargetId\n ? { targetId: toolTargetId }\n : await args.selectTransition({\n journey: args.journey,\n conversation: args.conversation,\n state,\n context: args.context,\n ...(args.models ? { models: args.models } : {}),\n ...(args.userText ? { userText: args.userText } : {}),\n ...(args.signal ? { signal: args.signal } : {}),\n emit: args.emit,\n });\n if (!transition) return [state];\n\n const nextState = args.stateById.get(transition.targetId);\n if (!nextState) return [state];\n await args.runStateActionRuns({ ...args, state, actionType: \"exit\" });\n await args.runStateToolRuns({ ...args, state, actionType: \"exit\" });\n const lifecycleAfterExit = await args.requireConversationRecord(args.conversation.id);\n if (lifecycleAfterExit.lifecycle !== \"active\") return [state];\n const enteredStates = await enterStateTree({\n ...args,\n state: nextState,\n emitSelf: true,\n });\n if (enteredStates.length !== 1) return enteredStates;\n state = enteredStates[0] ?? nextState;\n }\n return [state];\n}\n\nconst voiceConfirmationSchema = z.object({\n confirmed: z.boolean(),\n confidence: z.number().min(0).max(1),\n reason: z.string(),\n});\n\nasync function resolveVoiceConfirmedPromptId(args: StateMachineDeps & {\n journey: CompiledJourney;\n models?: AgentModelSet;\n conversation: ConversationRecord;\n state: CompiledJourney[\"states\"][number];\n context: Record<string, unknown>;\n userText?: string;\n signal?: AbortSignal;\n emit: RuntimeEmit;\n}) {\n const confirmable = args.state.toolRuns.filter((toolRun) => (\n toolRun.actionType === \"transition\" && toolRun.confirm\n ));\n if (confirmable.length === 0) return undefined;\n if (!args.models || !args.userText?.trim()) return undefined;\n const toolRun = confirmable[0];\n if (!toolRun) return undefined;\n const output = await args.generateTextWithTrace({\n conversationId: args.conversation.id,\n model: args.models.matcher,\n input: {\n role: \"matcher\",\n promptTask: \"transition-matcher\",\n responseFormat: voiceConfirmationSchema,\n messages: [{\n role: \"system\",\n content: [\n \"Decide whether the customer's latest voice utterance explicitly confirms the pending side-effect action.\",\n \"Return confirmed=true only for clear approval to proceed now.\",\n \"Concise affirmative replies such as yes, yes please, confirm it, or go ahead count as clear approval when they answer the described pending action.\",\n \"Return confirmed=false for questions, hesitation, corrections, missing details, or unrelated text.\",\n ].join(\"\\n\"),\n }, {\n role: \"user\",\n content: JSON.stringify({\n journeyId: args.journey.id,\n stateId: args.state.id,\n toolName: toolRun.tool.name,\n confirmationMessage: toolRun.confirm?.message,\n confirmationReason: toolRun.confirm?.reason,\n journeyContext: args.context,\n latestUtterance: args.userText,\n }),\n }],\n ...(args.signal ? { signal: args.signal } : {}),\n },\n });\n const parsed = voiceConfirmationSchema.safeParse(output.structured);\n if (!parsed.success || !parsed.data.confirmed || parsed.data.confidence < 0.6) return undefined;\n return createToolConfirmationPromptId(args.journey.id, args.state.id, toolRun.tool.name);\n}\n\nfunction hasConfirmableTransitionToolRun(state: CompiledJourney[\"states\"][number]) {\n return state.toolRuns.some((toolRun) => toolRun.actionType === \"transition\" && toolRun.confirm);\n}\n","import type { CompiledJourney } from \"../../definition.js\";\nimport type { ConversationRecord } from \"../../storage.js\";\nimport {\n getPathValue,\n hasUsableValue,\n} from \"../context.js\";\nimport { isFieldRequired } from \"../journey-state.js\";\nimport type {\n RuntimeEmit,\n StateMachineDeps,\n} from \"./types.js\";\n\nexport async function enterStateTree(args: StateMachineDeps & {\n journey: CompiledJourney;\n conversation: ConversationRecord;\n stateById: Map<string, CompiledJourney[\"states\"][number]>;\n state: CompiledJourney[\"states\"][number] | undefined;\n context: Record<string, unknown>;\n emitSelf: boolean;\n signal?: AbortSignal;\n emit: RuntimeEmit;\n}): Promise<CompiledJourney[\"states\"]> {\n if (!args.state) return [];\n if (args.emitSelf) {\n await args.emit({\n conversationId: args.conversation.id,\n type: \"journey.state.entered\",\n data: { journeyId: args.journey.id, stateId: args.state.id },\n });\n }\n await args.runStateActionRuns({\n ...args,\n state: args.state,\n actionType: \"entry\",\n });\n await args.runStateToolRuns({\n ...args,\n state: args.state,\n actionType: \"entry\",\n });\n const lifecycle = await args.requireConversationRecord(args.conversation.id);\n if (lifecycle.lifecycle !== \"active\") return [args.state];\n\n const children = args.journey.states.filter((state) => state.parentId === args.state?.id);\n if (children.length === 0) return [args.state];\n const childEntryStates = args.state.type === \"parallel\"\n ? children\n : args.state.initialStateId\n ? [args.stateById.get(args.state.initialStateId)].filter((state): state is CompiledJourney[\"states\"][number] => Boolean(state))\n : [];\n const activeStates: CompiledJourney[\"states\"] = [];\n for (const child of childEntryStates) {\n activeStates.push(...await enterStateTree({\n ...args,\n state: child,\n emitSelf: true,\n }));\n }\n return activeStates.length > 0 ? activeStates : [args.state];\n}\n\nexport function stateRequirementsSatisfied(state: CompiledJourney[\"states\"][number], context: Record<string, unknown>) {\n return state.collected\n .filter((field) => isFieldRequired(field, context))\n .every((field) => hasUsableValue(getPathValue(context, field.path)));\n}\n","import type { CompiledJourney } from \"../../definition.js\";\nimport type { ConversationRecord } from \"../../storage.js\";\nimport type { RuntimeSnapshot } from \"../../types.js\";\nimport {\n isRecord,\n selectContextFields,\n} from \"../context.js\";\nimport { stateRequirementsSatisfied } from \"./entry.js\";\n\nexport async function resolveInitialJourneyContext(args: {\n journey: CompiledJourney;\n conversation: ConversationRecord;\n previousSnapshot: RuntimeSnapshot | null;\n turn: unknown;\n app: unknown;\n}): Promise<Record<string, unknown>> {\n if (args.previousSnapshot?.activeJourneyId === args.journey.id && isRecord(args.previousSnapshot.journeyContext)) {\n return structuredClone(args.previousSnapshot.journeyContext);\n }\n\n const policy = args.journey.contextReuse;\n if (!policy) return {};\n const stored = args.previousSnapshot?.journeyContexts?.find((record) => record.journeyId === args.journey.id);\n if (!isRecord(stored?.context)) return {};\n const previousContext = structuredClone(stored.context);\n const allowed = await policy.when({\n app: args.app,\n conversation: args.conversation,\n turn: args.turn,\n journeyId: args.journey.id,\n previousContext,\n ...(args.previousSnapshot?.activeJourneyId ? { activeJourneyId: args.previousSnapshot.activeJourneyId } : {}),\n });\n if (!allowed) return {};\n return policy.fields?.length\n ? selectContextFields(previousContext, policy.fields)\n : previousContext;\n}\n\nexport async function resolveJourneyEntryState(args: {\n journey: CompiledJourney;\n conversation: ConversationRecord;\n previousSnapshot: RuntimeSnapshot | null;\n stateById: Map<string, CompiledJourney[\"states\"][number]>;\n context: Record<string, unknown>;\n turn: unknown;\n app: unknown;\n}) {\n const entries = [...args.journey.alternateEntries]\n .sort((left, right) => (right.priority ?? 0) - (left.priority ?? 0));\n for (const entry of entries) {\n const state = args.stateById.get(entry.stateId);\n if (!state || !stateRequirementsSatisfied(state, args.context)) continue;\n const matches = await entry.when({\n app: args.app,\n conversation: args.conversation,\n turn: args.turn,\n context: args.context,\n journeyId: args.journey.id,\n ...(args.previousSnapshot?.activeJourneyId ? { activeJourneyId: args.previousSnapshot.activeJourneyId } : {}),\n });\n if (matches) return state;\n }\n return args.journey.initialStateId ? args.stateById.get(args.journey.initialStateId) : undefined;\n}\n","import type { CompiledJourney } from \"../../definition.js\";\nimport type { ConversationRecord } from \"../../storage.js\";\nimport type { AgentModelSet } from \"../../types.js\";\nimport {\n hasUsableValue,\n setPathValue,\n} from \"../context.js\";\nimport { isAbortLikeError } from \"../errors.js\";\nimport { renderStateInstructionStack } from \"../rendering.js\";\nimport { createStateExtractionSchema } from \"../schemas.js\";\nimport type {\n RuntimeEmit,\n StateMachineDeps,\n} from \"./types.js\";\n\nexport async function applyStateExtraction(args: StateMachineDeps & {\n journey: CompiledJourney;\n models: AgentModelSet;\n conversation: ConversationRecord;\n state: CompiledJourney[\"states\"][number];\n context: Record<string, unknown>;\n userText: string;\n signal?: AbortSignal;\n emit: RuntimeEmit;\n}) {\n const fields = args.state.collected.filter((field) => field.extract);\n if (fields.length === 0) return args.state;\n const extractionSchema = createStateExtractionSchema(fields.map((field) => field.path));\n try {\n const output = await args.generateTextWithTrace({\n conversationId: args.conversation.id,\n model: args.models.extraction,\n input: {\n role: \"extraction\",\n promptTask: \"extraction\",\n promptPayload: {\n journey: {\n id: args.journey.id,\n kind: args.journey.kind,\n condition: args.journey.condition,\n },\n state: {\n id: args.state.id,\n instructions: args.state.instructions ?? null,\n summary: args.state.summary ?? null,\n },\n latestUserMessage: args.userText,\n currentContext: args.context,\n fields: fields.map((field) => ({\n path: field.path,\n required: field.required,\n })),\n stateInstructions: renderStateInstructionStack(args.journey, args.state),\n },\n messages: [\n {\n role: \"system\",\n content: [\n \"Extract state-machine context fields from the latest user message.\",\n \"Return only fields that are explicitly supported by the message.\",\n `State: ${args.state.id}`,\n renderStateInstructionStack(args.journey, args.state),\n `Fields: ${fields.map((field) => field.path).join(\", \")}`,\n `Current context: ${JSON.stringify(args.context)}`,\n ].filter(Boolean).join(\"\\n\"),\n },\n { role: \"user\", content: args.userText },\n ],\n responseFormat: extractionSchema,\n ...(args.signal ? { signal: args.signal } : {}),\n },\n });\n const extracted = extractionSchema.parse(normalizeExtractionOutput(\n output.structured ?? JSON.parse(output.text),\n fields.map((field) => field.path),\n ));\n const allowedPaths = new Set(fields.map((field) => field.path));\n const acceptedFields = Object.entries(extracted.values)\n .filter(([path, value]) => allowedPaths.has(path) && hasUsableValue(value));\n if (acceptedFields.length === 0) return args.state;\n\n await args.emit({\n conversationId: args.conversation.id,\n type: \"journey.extraction.proposed\",\n data: {\n journeyId: args.journey.id,\n stateId: args.state.id,\n fields: acceptedFields.map(([path]) => path),\n },\n });\n for (const [path, value] of acceptedFields) setPathValue(args.context, path, value);\n await args.emit({\n conversationId: args.conversation.id,\n type: \"journey.extraction.accepted\",\n data: {\n journeyId: args.journey.id,\n stateId: args.state.id,\n fields: acceptedFields.map(([path]) => path),\n },\n });\n } catch (error) {\n if (isAbortLikeError(error) && args.signal?.aborted) throw error;\n await args.emit({\n conversationId: args.conversation.id,\n type: \"error\",\n data: {\n code: \"journey_extraction_failed\",\n message: error instanceof Error ? error.message : \"Journey extraction failed.\",\n },\n });\n }\n return args.state;\n}\n\nfunction normalizeExtractionOutput(output: unknown, paths: string[]) {\n if (!isRecord(output)) return output;\n const values = isRecord(output.values) ? { ...output.values } : {};\n for (const path of paths) {\n if (!(path in values)) values[path] = null;\n }\n return { ...output, values };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n","import type { CompiledJourney } from \"../../definition.js\";\nimport type { ConversationRecord } from \"../../storage.js\";\nimport type { RuntimeSnapshot } from \"../../types.js\";\nimport { createJourneyCompletion } from \"../journey-state.js\";\nimport { createStateMachineSnapshot } from \"../snapshots.js\";\nimport type { StateInteractionDeps } from \"./types.js\";\n\nexport async function exitState(args: StateInteractionDeps & {\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state: CompiledJourney[\"states\"][number];\n context: Record<string, unknown>;\n signal?: AbortSignal;\n}) {\n await args.runStateActionRuns({\n journey: args.journey,\n conversation: args.conversation,\n state: args.state,\n context: args.context,\n actionType: \"exit\",\n emit: args.emit,\n ...(args.signal ? { signal: args.signal } : {}),\n });\n await args.runStateToolRuns({\n journey: args.journey,\n conversation: args.conversation,\n state: args.state,\n context: args.context,\n actionType: \"exit\",\n emit: args.emit,\n ...(args.signal ? { signal: args.signal } : {}),\n });\n}\n\nexport async function enterState(args: StateInteractionDeps & {\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state: CompiledJourney[\"states\"][number];\n context: Record<string, unknown>;\n signal?: AbortSignal;\n}) {\n await args.emit({\n conversationId: args.conversation.id,\n type: \"journey.state.entered\",\n data: { journeyId: args.journey.id, stateId: args.state.id },\n });\n await args.runStateActionRuns({\n journey: args.journey,\n conversation: args.conversation,\n state: args.state,\n context: args.context,\n actionType: \"entry\",\n emit: args.emit,\n ...(args.signal ? { signal: args.signal } : {}),\n });\n await args.runStateToolRuns({\n journey: args.journey,\n conversation: args.conversation,\n state: args.state,\n context: args.context,\n actionType: \"entry\",\n emit: args.emit,\n ...(args.signal ? { signal: args.signal } : {}),\n });\n}\n\nexport async function saveStateMachineProgress(args: StateInteractionDeps & {\n conversation: ConversationRecord;\n previousSnapshot: RuntimeSnapshot | null;\n journey: CompiledJourney;\n activeStates: CompiledJourney[\"states\"];\n context: Record<string, unknown>;\n}) {\n const completed = createJourneyCompletion(args.journey.id, args.activeStates);\n if (completed) {\n await args.emit({\n conversationId: args.conversation.id,\n type: \"journey.completed\",\n data: completed,\n });\n }\n const snapshot = createStateMachineSnapshot({\n conversation: args.conversation,\n previousSnapshot: args.previousSnapshot,\n journey: args.journey,\n activeStates: args.activeStates,\n context: args.context,\n completed,\n updatedAt: new Date().toISOString(),\n });\n await args.storage.saveSnapshot(snapshot);\n return snapshot;\n}\n","import type { EventRoutingMode } from \"../../definition.js\";\nimport type { ConversationRecord } from \"../../storage.js\";\nimport type { RuntimeSnapshot } from \"../../types.js\";\nimport { isRecord } from \"../context.js\";\nimport {\n findJourneyStates,\n mergeActiveStates,\n} from \"../journey-state.js\";\nimport {\n enterState,\n exitState,\n saveStateMachineProgress,\n} from \"./state-lifecycle.js\";\nimport type { StateInteractionDeps } from \"./types.js\";\n\nexport async function processJourneyEvent(args: StateInteractionDeps & {\n conversation: ConversationRecord;\n eventName: string;\n routing: EventRoutingMode;\n target?: { journeyId?: string; stateId?: string };\n app: unknown;\n signal?: AbortSignal;\n}): Promise<RuntimeSnapshot | null> {\n const previousSnapshot = await args.storage.getSnapshot(args.conversation.id);\n if (!args.agent) return previousSnapshot;\n const route = args.resolveJourneyEventRoute({\n agent: args.agent,\n previousSnapshot,\n eventName: args.eventName,\n routing: args.routing,\n ...(args.target ? { target: args.target } : {}),\n });\n if (!route) return previousSnapshot;\n\n const sameJourney = previousSnapshot?.activeJourneyId === route.journey.id;\n const stateById = new Map(route.journey.states.map((state) => [state.id, state]));\n const context = sameJourney && isRecord(previousSnapshot?.journeyContext)\n ? structuredClone(previousSnapshot.journeyContext)\n : {};\n const siblingActiveStates = sameJourney\n ? findJourneyStates(\n route.journey,\n (previousSnapshot?.activeStateIds ?? []).filter((stateId) => stateId !== route.state.id),\n )\n : [];\n const transition = await args.selectEventTransition({\n journey: route.journey,\n conversation: args.conversation,\n state: route.state,\n eventName: args.eventName,\n context,\n app: args.app,\n emit: args.emit,\n });\n if (!transition) return previousSnapshot;\n\n const nextState = stateById.get(transition.targetId);\n if (!nextState) return previousSnapshot;\n await exitState({\n ...args,\n journey: route.journey,\n state: route.state,\n context,\n ...(args.signal ? { signal: args.signal } : {}),\n });\n const lifecycleAfterExit = await args.requireConversationRecord(args.conversation.id);\n if (lifecycleAfterExit.lifecycle !== \"active\") return previousSnapshot;\n if (route.journey.id !== previousSnapshot?.activeJourneyId) {\n await args.emit({\n conversationId: args.conversation.id,\n type: \"journey.activated\",\n data: {\n journeyId: route.journey.id,\n ...(previousSnapshot?.activeJourneyId ? { previousJourneyId: previousSnapshot.activeJourneyId } : {}),\n },\n });\n }\n await enterState({\n ...args,\n journey: route.journey,\n state: nextState,\n context,\n ...(args.signal ? { signal: args.signal } : {}),\n });\n const finalStates = await args.advanceStateMachine({\n journey: route.journey,\n conversation: args.conversation,\n stateById,\n state: nextState,\n context,\n emit: args.emit,\n ...(args.signal ? { signal: args.signal } : {}),\n });\n return saveStateMachineProgress({\n ...args,\n previousSnapshot,\n journey: route.journey,\n activeStates: mergeActiveStates(siblingActiveStates, finalStates),\n context,\n });\n}\n","import { z } from \"zod\";\nimport { builtInWidgets } from \"../../builtins.js\";\nimport type { ConversationRecord } from \"../../storage.js\";\nimport type { RuntimeEvent, WidgetDefinition } from \"../../types.js\";\nimport { isRecord, setPathValue } from \"../context.js\";\nimport {\n extractWidgetFieldValue,\n findJourneyStates,\n mergeActiveStates,\n parseFieldGroupPromptId,\n parseFieldConfirmationPromptId,\n parseFieldPromptId,\n parseToolConfirmationPromptId,\n resolveWidgetPromptState,\n} from \"../journey-state.js\";\nimport {\n enterState,\n exitState,\n saveStateMachineProgress,\n} from \"./state-lifecycle.js\";\nimport type { StateInteractionDeps } from \"./types.js\";\n\ntype PromptedEvent = Extract<RuntimeEvent, { type: \"ui.prompted\" }>;\n\nconst builtInWidgetsByKind = new Map<string, WidgetDefinition>(\n Object.values(builtInWidgets).map((widget) => [widget.kind, widget]),\n);\n\nexport async function validateWidgetSubmission(args: StateInteractionDeps & {\n conversation: ConversationRecord;\n promptId: string;\n widgetKind: string;\n output: unknown;\n}) {\n const events = await args.storage.listEvents({ conversationId: args.conversation.id });\n const prompt = findLatestOpenPrompt(events, args.promptId);\n if (!prompt) {\n throw new Error(`Widget prompt '${args.promptId}' is not open.`);\n }\n if (prompt.data.widgetKind !== args.widgetKind) {\n throw new Error(`Widget prompt '${args.promptId}' expects widget '${prompt.data.widgetKind}', got '${args.widgetKind}'.`);\n }\n\n const snapshot = await args.storage.getSnapshot(args.conversation.id);\n const widget = resolveExpectedWidget(args, snapshot, args.promptId, prompt.data.widgetKind);\n if (!widget) return { output: args.output };\n const parsed = widget.output.safeParse(args.output);\n if (!parsed.success) {\n throw new Error(`Widget output for prompt '${args.promptId}' is invalid: ${parsed.error.message}`);\n }\n return { output: parsed.data };\n}\n\nexport async function processWidgetSubmission(args: StateInteractionDeps & {\n conversation: ConversationRecord;\n promptId: string;\n output: unknown;\n}) {\n if (!args.agent) return;\n const snapshot = await args.storage.getSnapshot(args.conversation.id);\n const journey = snapshot?.activeJourneyId\n ? args.agent.journeys.find((candidate) => candidate.id === snapshot.activeJourneyId)\n : undefined;\n if (!journey || journey.kind !== \"stateMachine\") return;\n const stateById = new Map(journey.states.map((state) => [state.id, state]));\n const state = resolveWidgetPromptState(journey, snapshot, args.promptId);\n if (!state) return;\n const context = isRecord(snapshot?.journeyContext) ? structuredClone(snapshot.journeyContext) : {};\n const siblingActiveStates = findJourneyStates(\n journey,\n (snapshot?.activeStateIds ?? []).filter((stateId) => stateId !== state.id),\n );\n const fieldPrompt = parseFieldPromptId(args.promptId);\n const fieldGroupPrompt = parseFieldGroupPromptId(args.promptId);\n const fieldConfirmationPrompt = parseFieldConfirmationPromptId(args.promptId);\n const fieldGroupTarget = fieldGroupPrompt && fieldGroupPrompt.journeyId === journey.id && fieldGroupPrompt.stateId === state.id\n ? fieldGroupPrompt\n : null;\n const fieldPromptTarget = fieldPrompt && fieldPrompt.journeyId === journey.id && fieldPrompt.stateId === state.id\n ? fieldPrompt\n : null;\n const fieldConfirmationTarget = fieldConfirmationPrompt\n && fieldConfirmationPrompt.journeyId === journey.id\n && fieldConfirmationPrompt.stateId === state.id\n ? fieldConfirmationPrompt\n : null;\n if (fieldGroupTarget) {\n const values = z.object({ values: z.record(z.string(), z.unknown()) }).safeParse(args.output);\n if (!values.success) return;\n for (const field of state.collected) {\n if (field.path in values.data.values) {\n setPathValue(context, field.path, values.data.values[field.path]);\n }\n }\n const branchStates = await args.advanceStateMachine({\n journey,\n conversation: args.conversation,\n stateById,\n state,\n context,\n emit: args.emit,\n });\n await saveStateMachineProgress({\n ...args,\n previousSnapshot: snapshot,\n journey,\n activeStates: mergeActiveStates(siblingActiveStates, branchStates),\n context,\n });\n return;\n }\n\n if (fieldPromptTarget || fieldConfirmationTarget) {\n const target = fieldPromptTarget ?? fieldConfirmationTarget;\n if (!target) return;\n const field = state.collected.find((candidate) => candidate.path === target.path);\n if (!field) return;\n if (fieldPromptTarget) {\n setPathValue(context, field.path, extractWidgetFieldValue(args.output));\n } else {\n const confirmed = z.object({ confirmed: z.boolean() }).safeParse(args.output);\n if (!confirmed.success || !confirmed.data.confirmed) return;\n }\n const branchStates = await args.advanceStateMachine({\n journey,\n conversation: args.conversation,\n stateById,\n state,\n context,\n emit: args.emit,\n });\n await saveStateMachineProgress({\n ...args,\n previousSnapshot: snapshot,\n journey,\n activeStates: mergeActiveStates(siblingActiveStates, branchStates),\n context,\n });\n return;\n }\n\n const confirmed = z.object({ confirmed: z.boolean() }).safeParse(args.output);\n if (!confirmed.success) return;\n if (!confirmed.data.confirmed) {\n const events = await args.storage.listEvents({ conversationId: args.conversation.id });\n const previousPrompt = [...events].reverse().find((event): event is PromptedEvent => (\n event.type === \"ui.prompted\" && event.data.promptId === args.promptId\n ));\n if (previousPrompt) {\n await args.emit({\n conversationId: args.conversation.id,\n type: \"ui.prompted\",\n data: previousPrompt.data,\n });\n }\n return;\n }\n const toolTargetId = await args.runStateToolRuns({\n journey,\n conversation: args.conversation,\n state,\n context,\n actionType: \"transition\",\n confirmedPromptId: args.promptId,\n emit: args.emit,\n });\n const latestConversation = await args.requireConversationRecord(args.conversation.id);\n if (latestConversation.lifecycle !== \"active\") return;\n const next = toolTargetId\n ? { targetId: toolTargetId }\n : await args.selectTransition({\n journey,\n conversation: args.conversation,\n state,\n context,\n emit: args.emit,\n });\n const nextState = next ? stateById.get(next.targetId) : null;\n const branchStates = nextState ? [nextState] : [state];\n const activeStates = mergeActiveStates(siblingActiveStates, branchStates);\n if (nextState) {\n await exitState({ ...args, journey, state, context });\n const lifecycleAfterExit = await args.requireConversationRecord(args.conversation.id);\n if (lifecycleAfterExit.lifecycle !== \"active\") return;\n await enterState({ ...args, journey, state: nextState, context });\n }\n await saveStateMachineProgress({\n ...args,\n previousSnapshot: snapshot,\n journey,\n activeStates,\n context,\n });\n}\n\nfunction findLatestOpenPrompt(events: RuntimeEvent[], promptId: string): PromptedEvent | null {\n let latestPrompt: PromptedEvent | null = null;\n let latestSubmissionOffset = 0;\n for (const event of events) {\n if (event.type === \"ui.prompted\" && event.data.promptId === promptId) latestPrompt = event;\n if (event.type === \"ui.submitted\" && event.data.promptId === promptId) latestSubmissionOffset = event.offset;\n }\n if (!latestPrompt || latestSubmissionOffset > latestPrompt.offset) return null;\n return latestPrompt;\n}\n\nfunction resolveExpectedWidget(\n args: StateInteractionDeps,\n snapshot: Awaited<ReturnType<StateInteractionDeps[\"storage\"][\"getSnapshot\"]>>,\n promptId: string,\n widgetKind: string,\n): WidgetDefinition | null {\n const stateWidget = resolveStatePromptWidget(args, snapshot, promptId);\n return stateWidget\n ?? args.agent?.widgets.find((widget) => widget.kind === widgetKind)\n ?? builtInWidgetsByKind.get(widgetKind)\n ?? null;\n}\n\nfunction resolveStatePromptWidget(\n args: StateInteractionDeps,\n snapshot: Awaited<ReturnType<StateInteractionDeps[\"storage\"][\"getSnapshot\"]>>,\n promptId: string,\n): WidgetDefinition | null {\n if (!args.agent) return null;\n const journey = snapshot?.activeJourneyId\n ? args.agent.journeys.find((candidate) => candidate.id === snapshot.activeJourneyId)\n : undefined;\n if (!journey || journey.kind !== \"stateMachine\") return null;\n const state = resolveWidgetPromptState(journey, snapshot, promptId);\n if (!state) return null;\n\n const fieldGroupPrompt = parseFieldGroupPromptId(promptId);\n if (fieldGroupPrompt && fieldGroupPrompt.journeyId === journey.id && fieldGroupPrompt.stateId === state.id) {\n return builtInWidgets.formWidget;\n }\n\n const fieldPrompt = parseFieldPromptId(promptId);\n if (fieldPrompt && fieldPrompt.journeyId === journey.id && fieldPrompt.stateId === state.id) {\n const field = state.collected.find((candidate) => candidate.path === fieldPrompt.path);\n return field?.widget ?? builtInWidgets.textInputWidget;\n }\n\n const fieldConfirmationPrompt = parseFieldConfirmationPromptId(promptId);\n if (\n fieldConfirmationPrompt\n && fieldConfirmationPrompt.journeyId === journey.id\n && fieldConfirmationPrompt.stateId === state.id\n ) {\n const field = state.collected.find((candidate) => candidate.path === fieldConfirmationPrompt.path);\n return field && typeof field.confirm === \"object\" && field.confirm.widget\n ? field.confirm.widget\n : builtInWidgets.confirmationWidget;\n }\n\n const toolConfirmationPrompt = parseToolConfirmationPromptId(promptId);\n if (\n toolConfirmationPrompt\n && toolConfirmationPrompt.journeyId === journey.id\n && toolConfirmationPrompt.stateId === state.id\n ) {\n const toolRun = state.toolRuns.find((candidate) => candidate.tool.name === toolConfirmationPrompt.toolName);\n return toolRun?.confirm?.widget ?? builtInWidgets.confirmationWidget;\n }\n\n return null;\n}\n","import { z } from \"zod\";\nimport { tool, widget } from \"./definition.js\";\n\nexport const textInputWidget = widget(\"text-input\", {\n input: z.object({\n label: z.string(),\n description: z.string().optional(),\n placeholder: z.string().optional(),\n }),\n output: z.object({\n value: z.string(),\n }),\n});\n\nexport const choiceWidget = widget(\"choice\", {\n input: z.object({\n label: z.string(),\n options: z.array(z.object({\n id: z.string(),\n label: z.string(),\n description: z.string().optional(),\n })),\n }),\n output: z.object({\n selectedId: z.string(),\n }),\n});\n\nexport const confirmationWidget = widget(\"confirmation\", {\n input: z.object({\n title: z.string(),\n message: z.string(),\n confirmLabel: z.string().optional(),\n cancelLabel: z.string().optional(),\n }),\n output: z.object({\n confirmed: z.boolean(),\n }),\n});\n\nexport const datePickerWidget = widget(\"date-picker\", {\n input: z.object({\n label: z.string(),\n min: z.string().optional(),\n max: z.string().optional(),\n }),\n output: z.object({\n value: z.string(),\n }),\n});\n\nexport const formWidget = widget(\"form\", {\n input: z.object({\n title: z.string(),\n fields: z.array(z.object({\n path: z.string(),\n label: z.string(),\n description: z.string().optional(),\n type: z.enum([\"text\", \"email\", \"date\", \"number\", \"choice\"]),\n required: z.boolean().default(true),\n placeholder: z.string().optional(),\n min: z.string().optional(),\n max: z.string().optional(),\n options: z.array(z.object({ id: z.string(), label: z.string() })).optional(),\n })),\n }),\n output: z.object({\n values: z.record(z.string(), z.unknown()),\n }),\n});\n\nexport const endConversationTool = tool(\"cognidesk.endConversation\", {\n description: \"Close the current conversation.\",\n input: z.object({\n reason: z.string().optional(),\n }),\n output: z.object({\n closed: z.literal(true),\n }),\n sideEffect: true,\n execute: async () => ({ closed: true as const }),\n});\n\nexport const handoffTool = tool(\"cognidesk.handoff\", {\n description: \"Request an external handoff and pause assistant responses.\",\n input: z.object({\n reason: z.string(),\n summary: z.string().optional(),\n payload: z.unknown().optional(),\n }),\n output: z.object({\n handoffRequested: z.literal(true),\n }),\n sideEffect: true,\n execute: async () => ({ handoffRequested: true as const }),\n});\n\nexport const journeyContextViewerTool = tool(\"cognidesk.viewJourneyContext\", {\n description: \"View exact persisted Journey Context when explicitly exposed by developer policy.\",\n input: z.object({\n journeyId: z.string(),\n fields: z.array(z.string()).optional(),\n }),\n output: z.object({\n journeyId: z.string(),\n context: z.unknown(),\n }),\n execute: async ({ input }) => ({\n journeyId: input.journeyId,\n context: {},\n }),\n});\n\nexport const builtInWidgets = {\n textInputWidget,\n choiceWidget,\n confirmationWidget,\n datePickerWidget,\n formWidget,\n};\n\nexport const builtInTools = {\n endConversationTool,\n handoffTool,\n journeyContextViewerTool,\n};\n","function pushUnique<T>(items: T[], item: T) {\n if (!items.includes(item)) items.push(item);\n}\n\nexport class CapabilityScope<TItem> {\n private readonly items: TItem[] = [];\n private onlyItems: TItem[] | null = null;\n private readonly excludedItems: TItem[] = [];\n\n add(...items: TItem[]) {\n for (const item of items) pushUnique(this.items, item);\n return this;\n }\n\n only(...items: TItem[]) {\n this.onlyItems = [...items];\n return this;\n }\n\n exclude(...items: TItem[]) {\n for (const item of items) pushUnique(this.excludedItems, item);\n return this;\n }\n\n list(inherited: TItem[] = []) {\n const base = this.onlyItems ?? [...inherited, ...this.items];\n return base.filter((item) => !this.excludedItems.includes(item));\n }\n}\n","import { z } from \"zod\";\nimport type { StateBuilder } from \"../definition.js\";\nimport type {\n AnyTool,\n ContextPath,\n CustomRuntimeEventDefinition,\n GuardContext,\n GuardResult,\n KnowledgeSource,\n ObjectSchema,\n SideEffectTool,\n ToolExecutionContext,\n ToolDefinition,\n WidgetDefinition,\n WidgetPromptDefinition,\n} from \"../types.js\";\n\nexport type MaybePromise<T> = T | Promise<T>;\ntype FieldWidgetOption = WidgetDefinition | WidgetPromptDefinition;\n\nexport interface ConfirmationPolicy {\n message?: string;\n widget?: WidgetDefinition;\n reason?: string;\n}\n\nexport interface FieldCollectionOptions<TContext> {\n prompt?: string;\n required?: boolean;\n requiredWhen?: (args: { context: TContext }) => boolean;\n extract?: boolean;\n confirm?: boolean | \"beforeAction\" | ConfirmationPolicy;\n widget?: FieldWidgetOption;\n widgetInput?: (args: { context: TContext }) => unknown;\n}\n\nexport interface ListCollectionOptions<TContext, TItemSchema extends z.ZodType> {\n item: TItemSchema;\n countFrom?: ContextPath<TContext>;\n prompt?: string;\n widget?: FieldWidgetOption;\n}\n\nexport interface TransitionOptions<TContext> {\n priority?: number;\n guard?: (context: GuardContext<unknown, TContext>) => MaybePromise<GuardResult>;\n description?: string;\n}\n\nexport interface ToolRunOptions<TTool extends AnyTool, TContext> {\n input?: (args: { context: TContext }) => z.infer<TTool[\"input\"]>;\n assign?: Partial<Record<ContextPath<TContext>, (args: { output: z.infer<TTool[\"output\"]>; context: TContext }) => unknown>>;\n onSuccess?: StateBuilder<string, ObjectSchema>;\n onFailure?: StateBuilder<string, ObjectSchema>;\n onValidationError?: StateBuilder<string, ObjectSchema>;\n}\n\nexport type ToolRunOptionsFor<TTool extends AnyTool, TContext> =\n TTool extends SideEffectTool\n ? ToolRunOptions<TTool, TContext> & { confirm: ConfirmationPolicy }\n : ToolRunOptions<TTool, TContext> & { confirm?: ConfirmationPolicy };\n\nexport interface StateActionUseOptions<TAction extends ActionDefinition, TContext> {\n type?: \"entry\" | \"exit\" | \"transition\";\n input?: (args: { context: TContext }) => z.infer<TAction[\"input\"]>;\n}\n\nexport interface ActionDefinition<\n TName extends string = string,\n TInputSchema extends z.ZodType = z.ZodType,\n> {\n kind: \"action\";\n name: TName;\n input: TInputSchema;\n run: (args: { input: z.infer<TInputSchema> }) => MaybePromise<void>;\n requiresVisit?: boolean;\n retry?: false | { maxAttempts?: number; notice?: string };\n}\n\nexport interface JourneyEventDefinition<\n TName extends string = string,\n TPayloadSchema extends z.ZodType = z.ZodType,\n> {\n kind: \"journeyEvent\";\n name: TName;\n payload: TPayloadSchema;\n routing?: EventRoutingMode;\n}\n\nexport type EventRoutingMode = \"none\" | \"activeJourneyOnly\" | \"full\" | \"targeted\";\n\nexport function tool<\n const TName extends string,\n TInputSchema extends z.ZodType,\n TOutputSchema extends z.ZodType,\n const TSideEffect extends boolean = false,\n>(name: TName, config: {\n description?: string;\n input: TInputSchema;\n output: TOutputSchema;\n sideEffect?: TSideEffect;\n idempotencyKey?: (args: {\n input: z.infer<TInputSchema>;\n conversationId: string;\n }) => string;\n execute: (context: ToolExecutionContext<z.infer<TInputSchema>>) => Promise<z.infer<TOutputSchema>>;\n}): ToolDefinition<TName, TInputSchema, TOutputSchema, TSideEffect> {\n return {\n kind: \"tool\",\n name,\n input: config.input,\n output: config.output,\n sideEffect: (config.sideEffect ?? false) as TSideEffect,\n execute: config.execute,\n ...(config.description ? { description: config.description } : {}),\n ...(config.idempotencyKey ? { idempotencyKey: config.idempotencyKey } : {}),\n };\n}\n\nexport function widget<\n const TKind extends string,\n TInputSchema extends z.ZodType,\n TOutputSchema extends z.ZodType,\n>(kind: TKind, config: {\n input: TInputSchema;\n output: TOutputSchema;\n}): WidgetDefinition<TKind, TInputSchema, TOutputSchema> {\n return { kind, input: config.input, output: config.output };\n}\n\nexport function widgetPrompt<TWidget extends WidgetDefinition>(\n widgetDefinition: TWidget,\n input: z.infer<TWidget[\"input\"]>,\n): WidgetPromptDefinition<TWidget> {\n return { widget: widgetDefinition, input };\n}\n\nexport function knowledgeSource<\n const TName extends string,\n TQuerySchema extends z.ZodType,\n TMetadataSchema extends z.ZodType,\n>(name: TName, config: Omit<KnowledgeSource<TName, TQuerySchema, TMetadataSchema>, \"kind\" | \"name\">) {\n return { kind: \"knowledgeSource\" as const, name, ...config };\n}\n\nexport function action<const TName extends string, TInputSchema extends z.ZodType>(\n name: TName,\n config: {\n input: TInputSchema;\n run: (args: { input: z.infer<TInputSchema> }) => MaybePromise<void>;\n requiresVisit?: boolean;\n retry?: false | { maxAttempts?: number; notice?: string };\n },\n): ActionDefinition<TName, TInputSchema> {\n return { kind: \"action\", name, ...config };\n}\n\nexport function journeyEvent<const TName extends string, TPayloadSchema extends z.ZodType>(\n name: TName,\n config: {\n payload: TPayloadSchema;\n routing?: EventRoutingMode;\n },\n): JourneyEventDefinition<TName, TPayloadSchema> {\n return { kind: \"journeyEvent\", name, ...config };\n}\n\nexport function customRuntimeEvent<const TName extends string, TPayloadSchema extends z.ZodType>(\n name: TName,\n config: {\n payload: TPayloadSchema;\n visibleToModel?: boolean;\n },\n): CustomRuntimeEventDefinition<TName, TPayloadSchema> {\n return {\n kind: \"customRuntimeEvent\",\n name,\n payload: config.payload,\n ...(config.visibleToModel !== undefined ? { visibleToModel: config.visibleToModel } : {}),\n };\n}\n","import type { AnyTool } from \"../types.js\";\nimport type { ToolRunOptions } from \"./primitives.js\";\nimport type {\n CollectedField,\n FieldWidgetOption,\n} from \"./state-builder-types.js\";\n\nexport function resolveFieldWidget(widgetOption: FieldWidgetOption | undefined) {\n if (!widgetOption) return null;\n if (\"widget\" in widgetOption) {\n return {\n widget: widgetOption.widget,\n input: widgetOption.input,\n };\n }\n return { widget: widgetOption };\n}\n\nexport function compileAssignments<TContext>(\n assign: ToolRunOptions<AnyTool, TContext>[\"assign\"] | undefined,\n): Array<{ path: string; value: (args: { output: unknown; context: unknown }) => unknown }> {\n if (!assign) return [];\n return Object.entries(assign).map(([path, value]) => ({\n path,\n value: value as (args: { output: unknown; context: unknown }) => unknown,\n }));\n}\n\nexport function mergeCollectedFields<TField extends CollectedField>(\n inherited: TField[],\n own: TField[],\n) {\n const byPath = new Map<string, TField>();\n for (const field of inherited) byPath.set(field.path, field);\n for (const field of own) byPath.set(field.path, field);\n return [...byPath.values()];\n}\n","import { z } from \"zod\";\nimport { CapabilityScope } from \"./capability-scope.js\";\nimport type { ActionDefinition, FieldCollectionOptions, JourneyEventDefinition, ListCollectionOptions, MaybePromise, StateActionUseOptions, ToolRunOptionsFor, TransitionOptions } from \"./primitives.js\";\nimport type { CompiledState, StateReference } from \"./compiled-types.js\";\nimport type { AnyTool, ContextPath, GuardContext, GuardResult, KnowledgeSource, ObjectSchema, WidgetDefinition } from \"../types.js\";\nimport { DefinitionError as CognideskDefinitionError } from \"../types.js\";\nimport { compileAssignments, mergeCollectedFields, resolveFieldWidget } from \"./state-builder-utils.js\";\nimport type { CollectedField, InferObject, InternalActionRun, InternalToolRun, InternalTransition, StateActionRecord, TransitionTargetBuilder } from \"./state-builder-types.js\";\n\nexport class StateBuilder<\n const TId extends string,\n TContextSchema extends ObjectSchema,\n> implements StateReference<TId> {\n readonly tools = new CapabilityScope<AnyTool>();\n readonly knowledge = new CapabilityScope<KnowledgeSource>();\n readonly children: StateBuilder<string, TContextSchema>[] = [];\n readonly transitions: InternalTransition[] = [];\n readonly toolRuns: InternalToolRun[] = [];\n readonly actionRuns: InternalActionRun[] = [];\n readonly collectedFields: CollectedField[] = [];\n readonly stateActions: StateActionRecord[] = [];\n private visitRequirement: string | null = null;\n private stateInstructions?: string;\n private stateSummary?: string;\n private stateType: \"state\" | \"parallel\" | \"final\" = \"state\";\n private initialChildState?: StateBuilder<string, TContextSchema>;\n\n constructor(\n readonly id: TId,\n readonly contextSchema: TContextSchema,\n readonly parent?: StateBuilder<string, TContextSchema>,\n ) {}\n\n instructions(value: string) {\n this.stateInstructions = value;\n return this;\n }\n\n summary(value: string) {\n this.stateSummary = value;\n return this;\n }\n\n collect(path: ContextPath<InferObject<TContextSchema>>, options: FieldCollectionOptions<InferObject<TContextSchema>> = {}) {\n const widgetDefinition = resolveFieldWidget(options.widget);\n this.collectedFields.push({\n path,\n required: options.required ?? true,\n extract: options.extract ?? true,\n ...(options.confirm ? { confirm: options.confirm === true ? true : options.confirm } : {}),\n ...(options.prompt ? { prompt: options.prompt } : {}),\n ...(widgetDefinition ? { widget: widgetDefinition.widget } : {}),\n ...(options.widgetInput\n ? { widgetInput: options.widgetInput as (args: { context: unknown }) => unknown }\n : widgetDefinition?.input !== undefined\n ? { widgetInput: widgetDefinition.input }\n : {}),\n ...(options.requiredWhen ? { requiredWhen: options.requiredWhen as (args: { context: unknown }) => boolean } : {}),\n });\n if (options.widget || options.confirm) this.requiresVisit(\"field collection requires user-visible handling\");\n return this;\n }\n\n collectList<TItemSchema extends z.ZodType>(\n path: ContextPath<InferObject<TContextSchema>>,\n options: ListCollectionOptions<InferObject<TContextSchema>, TItemSchema>,\n ) {\n const widgetDefinition = resolveFieldWidget(options.widget);\n this.collectedFields.push({\n path,\n required: true,\n extract: true,\n ...(options.prompt ? { prompt: options.prompt } : {}),\n ...(widgetDefinition ? { widget: widgetDefinition.widget } : {}),\n ...(widgetDefinition?.input !== undefined ? { widgetInput: widgetDefinition.input } : {}),\n });\n this.requiresVisit(\"list collection requires user-visible handling\");\n return this;\n }\n\n state<const TChildId extends string>(id: TChildId) {\n const child = new StateBuilder(id, this.contextSchema, this);\n this.children.push(child);\n return child;\n }\n\n parallel<const TChildId extends string>(id: TChildId) {\n const child = this.state(id);\n child.markParallel();\n return child;\n }\n\n final<const TChildId extends string>(id: TChildId) {\n const child = this.state(id);\n child.markFinal();\n return child;\n }\n\n initial(state: StateBuilder<string, TContextSchema>) {\n if (state.parent !== this) {\n throw new CognideskDefinitionError(`State '${state.id}' is not a direct child of '${this.id}'.`);\n }\n this.initialChildState = state;\n return this;\n }\n\n markFinal() {\n this.stateType = \"final\";\n this.requiresVisit(\"final state marks journey completion\");\n return this;\n }\n\n markParallel() {\n this.stateType = \"parallel\";\n return this;\n }\n\n when(\n description: string,\n options: TransitionOptions<InferObject<TContextSchema>> = {},\n ): TransitionTargetBuilder<TContextSchema, this> {\n return {\n target: (state: StateBuilder<string, TContextSchema>) => {\n this.transitions.push({\n kind: \"conversational\",\n target: state,\n description,\n ...(options.priority !== undefined ? { priority: options.priority } : {}),\n ...(options.guard ? { guard: options.guard as (context: GuardContext<unknown, unknown>) => MaybePromise<GuardResult> } : {}),\n });\n return this;\n },\n };\n }\n\n on(\n event: JourneyEventDefinition,\n options: TransitionOptions<InferObject<TContextSchema>> = {},\n ): TransitionTargetBuilder<TContextSchema, this> {\n return {\n target: (state: StateBuilder<string, TContextSchema>) => {\n this.transitions.push({\n kind: \"event\",\n target: state,\n eventName: event.name,\n description: event.name,\n ...(options.priority !== undefined ? { priority: options.priority } : {}),\n ...(options.guard ? { guard: options.guard as (context: GuardContext<unknown, unknown>) => MaybePromise<GuardResult> } : {}),\n });\n return this;\n },\n };\n }\n\n transitionTo(state: StateBuilder<string, TContextSchema>, options: TransitionOptions<InferObject<TContextSchema>> = {}) {\n this.transitions.push({\n kind: \"conversational\",\n target: state,\n ...(options.priority !== undefined ? { priority: options.priority } : {}),\n ...(options.description ? { description: options.description } : {}),\n ...(options.guard ? { guard: options.guard as (context: GuardContext<unknown, unknown>) => MaybePromise<GuardResult> } : {}),\n });\n return this;\n }\n\n entry<TTool extends AnyTool>(toolDefinition: TTool, options: ToolRunOptionsFor<TTool, InferObject<TContextSchema>>) {\n return this.registerToolRun(\"entry\", toolDefinition, options, \"entry action requires visit\");\n }\n\n exit<TTool extends AnyTool>(toolDefinition: TTool, options: ToolRunOptionsFor<TTool, InferObject<TContextSchema>>) {\n return this.registerToolRun(\"exit\", toolDefinition, options, \"exit action requires visit\");\n }\n\n runTool<TTool extends AnyTool>(toolDefinition: TTool, options: ToolRunOptionsFor<TTool, InferObject<TContextSchema>>) {\n return this.registerToolRun(\"transition\", toolDefinition, options, \"tool action requires visit\");\n }\n\n private registerToolRun<TTool extends AnyTool>(\n actionType: \"entry\" | \"exit\" | \"transition\",\n toolDefinition: TTool,\n options: ToolRunOptionsFor<TTool, InferObject<TContextSchema>>,\n visitReason: string,\n ) {\n this.toolRuns.push({\n tool: toolDefinition,\n actionType,\n ...(options.confirm ? { confirm: options.confirm } : {}),\n ...(options.input ? { input: options.input as (args: { context: unknown }) => unknown } : {}),\n assign: compileAssignments(options.assign),\n ...(options.onSuccess ? { onSuccess: options.onSuccess as StateBuilder<string, ObjectSchema> } : {}),\n ...(options.onFailure ? { onFailure: options.onFailure as StateBuilder<string, ObjectSchema> } : {}),\n ...(options.onValidationError ? { onValidationError: options.onValidationError as StateBuilder<string, ObjectSchema> } : {}),\n });\n this.stateActions.push({ type: actionType, name: toolDefinition.name });\n if (toolDefinition.sideEffect || options.confirm) this.requiresVisit(visitReason);\n return this;\n }\n\n useAction<TAction extends ActionDefinition>(\n actionDefinition: TAction,\n options: StateActionUseOptions<TAction, InferObject<TContextSchema>> | \"entry\" | \"exit\" | \"transition\" = \"transition\",\n ) {\n const actionType = typeof options === \"string\" ? options : options.type ?? \"transition\";\n const input = typeof options === \"string\" ? undefined : options.input;\n this.actionRuns.push({\n action: actionDefinition,\n actionType,\n ...(input ? { input: input as (args: { context: unknown }) => unknown } : {}),\n });\n this.stateActions.push({\n type: actionType,\n name: actionDefinition.name,\n ...(actionDefinition.requiresVisit !== undefined ? { requiresVisit: actionDefinition.requiresVisit } : {}),\n });\n if (actionDefinition.requiresVisit) this.requiresVisit(\"action requires visit\");\n return this;\n }\n\n requiresVisit(reason = \"state requires visit\") {\n this.visitRequirement = reason;\n return this;\n }\n\n allowSkip() {\n this.visitRequirement = null;\n return this;\n }\n\n compile(\n parentId?: string,\n inheritedTools: AnyTool[] = [],\n inheritedKnowledge: KnowledgeSource[] = [],\n inheritedCollectedFields: StateBuilder<string, TContextSchema>[\"collectedFields\"] = [],\n ): CompiledState[] {\n const tools = this.tools.list(inheritedTools);\n const knowledge = this.knowledge.list(inheritedKnowledge);\n const collected = mergeCollectedFields(inheritedCollectedFields, this.collectedFields);\n const own: CompiledState = {\n id: this.id,\n type: this.stateType,\n ...(parentId ? { parentId } : {}),\n ...(this.initialChildState ? { initialStateId: this.initialChildState.id } : {}),\n ...(this.stateInstructions ? { instructions: this.stateInstructions } : {}),\n ...(this.stateSummary ? { summary: this.stateSummary } : {}),\n tools,\n knowledge,\n collected,\n transitions: this.transitions.map((transition) => ({\n kind: transition.kind,\n targetId: transition.target.id,\n ...(transition.eventName ? { eventName: transition.eventName } : {}),\n ...(transition.description ? { description: transition.description } : {}),\n ...(transition.priority !== undefined ? { priority: transition.priority } : {}),\n ...(transition.guard ? { guard: transition.guard } : {}),\n })),\n actions: this.stateActions.map((stateAction) => ({\n type: stateAction.type,\n name: stateAction.name,\n })),\n actionRuns: this.actionRuns.map((actionRun) => ({\n action: actionRun.action,\n actionType: actionRun.actionType,\n ...(actionRun.input ? { input: actionRun.input } : {}),\n })),\n toolRuns: this.toolRuns.map((toolRun) => ({\n tool: toolRun.tool,\n actionType: toolRun.actionType,\n assign: toolRun.assign,\n ...(toolRun.confirm ? { confirm: toolRun.confirm } : {}),\n ...(toolRun.input ? { input: toolRun.input } : {}),\n ...(toolRun.onSuccess ? { onSuccessId: toolRun.onSuccess.id } : {}),\n ...(toolRun.onFailure ? { onFailureId: toolRun.onFailure.id } : {}),\n ...(toolRun.onValidationError ? { onValidationErrorId: toolRun.onValidationError.id } : {}),\n })),\n requiresVisit: this.visitRequirement !== null,\n };\n return [own, ...this.children.flatMap((child) => child.compile(this.id, tools, knowledge, collected))];\n }\n}\n","import { DefinitionError as CognideskDefinitionError } from \"../types.js\";\nimport type { JourneyGraph } from \"./compiled-types.js\";\n\nexport function pushUnique<T>(items: T[], item: T) {\n if (!items.includes(item)) items.push(item);\n}\n\nexport function assertUniqueNames(items: Array<{ name: string }>, label: string) {\n assertUniqueValues(items, label, (item) => item.name);\n}\n\nexport function assertUniqueIds(items: Array<{ id: string }>, label: string) {\n assertUniqueValues(items, label, (item) => item.id);\n}\n\nexport function assertUniqueKinds(items: Array<{ kind: string }>, label: string) {\n assertUniqueValues(items, label, (item) => item.kind);\n}\n\nfunction assertUniqueValues<T>(items: T[], label: string, value: (item: T) => string) {\n const seen = new Set<string>();\n for (const item of items) {\n const key = value(item);\n if (seen.has(key)) {\n throw new CognideskDefinitionError(`${label} '${key}' is already registered.`);\n }\n seen.add(key);\n }\n}\n\nexport function graphToMermaid(graph: JourneyGraph) {\n const lines = [\"stateDiagram-v2\"];\n if (graph.initialStateId) lines.push(` [*] --> ${graph.initialStateId}`);\n for (const state of graph.states) {\n if (state.type === \"final\") lines.push(` ${state.id} --> [*]`);\n for (const transition of state.transitions) {\n lines.push(` ${state.id} --> ${transition.targetId}${transition.description ? `: ${transition.description}` : \"\"}`);\n }\n }\n return lines.join(\"\\n\");\n}\n\nexport function sanitizeGraph(graph: JourneyGraph): JourneyGraph {\n return {\n ...graph,\n states: graph.states.map((state) => ({\n id: state.id,\n type: state.type,\n ...(state.parentId ? { parentId: state.parentId } : {}),\n ...(state.initialStateId ? { initialStateId: state.initialStateId } : {}),\n ...(state.instructions ? { instructions: state.instructions } : {}),\n ...(state.summary ? { summary: state.summary } : {}),\n collected: state.collected.map((field) => ({\n path: field.path,\n required: field.required,\n extract: field.extract,\n })),\n transitions: state.transitions.map((transition) => ({\n kind: transition.kind,\n targetId: transition.targetId,\n ...(transition.eventName ? { eventName: transition.eventName } : {}),\n ...(transition.description ? { description: transition.description } : {}),\n ...(transition.priority !== undefined ? { priority: transition.priority } : {}),\n })),\n actions: state.actions,\n requiresVisit: state.requiresVisit,\n })),\n ...(graph.alternateEntries ? { alternateEntries: graph.alternateEntries } : {}),\n };\n}\n","import type { z } from \"zod\";\nimport { DefinitionError as CognideskDefinitionError } from \"../types.js\";\nimport type { AnyTool, KnowledgeSource, ObjectSchema } from \"../types.js\";\nimport { CapabilityScope } from \"./capability-scope.js\";\nimport type {\n CompiledJourney,\n CompiledState,\n ContextReusePredicate,\n DelegationJourneyOptions,\n JourneyEntryOptions,\n JourneyEntryPredicate,\n JourneyGraph,\n StateMachineJourneyOptions,\n} from \"./compiled-types.js\";\nimport { journeyEvent, type EventRoutingMode } from \"./primitives.js\";\nimport { StateBuilder } from \"./state-builder.js\";\nimport { assertUniqueIds, graphToMermaid, sanitizeGraph } from \"./utils.js\";\n\ntype InferObject<TSchema extends ObjectSchema> = z.infer<TSchema>;\n\nexport interface JourneyFragment<\n TName extends string = string,\n TContextSchema extends ObjectSchema = ObjectSchema,\n> {\n kind: \"journeyFragment\";\n name: TName;\n context: TContextSchema;\n apply(journey: StateMachineJourneyBuilder<string, TContextSchema>): void;\n}\n\nexport interface JourneyFragmentOptions<TContextSchema extends ObjectSchema> {\n context: TContextSchema;\n tools?: AnyTool[];\n knowledge?: KnowledgeSource[];\n define: (journey: StateMachineJourneyBuilder<string, TContextSchema>) => void;\n}\n\nexport class StateCollection<TContextSchema extends ObjectSchema> {\n private readonly states = new Map<string, StateBuilder<string, TContextSchema>>();\n\n constructor(private readonly contextSchema: TContextSchema) {}\n\n add<const TId extends string>(id: TId) {\n if (this.states.has(id)) {\n throw new CognideskDefinitionError(`State '${id}' already exists.`);\n }\n const state = new StateBuilder(id, this.contextSchema);\n this.states.set(id, state);\n return state;\n }\n\n get<TId extends string>(id: TId) {\n const state = this.states.get(id);\n if (!state) throw new CognideskDefinitionError(`State '${id}' does not exist.`);\n return state as StateBuilder<TId, TContextSchema>;\n }\n\n list() {\n return [...this.states.values()];\n }\n}\n\nexport class TypedStateRegistry<\n TStateIds extends string,\n TContextSchema extends ObjectSchema,\n> {\n constructor(private readonly collection: StateCollection<TContextSchema>) {}\n\n get<TId extends TStateIds>(id: TId) {\n return this.collection.get(id) as StateBuilder<TId, TContextSchema>;\n }\n}\n\nexport class StateMachineJourneyBuilder<\n const TId extends string,\n TContextSchema extends ObjectSchema,\n> {\n readonly kind = \"stateMachine\" as const;\n readonly states: StateCollection<TContextSchema>;\n readonly tools = new CapabilityScope<AnyTool>();\n readonly knowledge = new CapabilityScope<KnowledgeSource>();\n private readonly alternateEntryStates: Array<{\n state: StateBuilder<string, TContextSchema>;\n description?: string;\n priority?: number;\n when: JourneyEntryPredicate<unknown, unknown, unknown, InferObject<TContextSchema>>;\n }> = [];\n private initialState?: StateBuilder<string, TContextSchema>;\n\n constructor(\n readonly id: TId,\n readonly options: StateMachineJourneyOptions<TContextSchema>,\n ) {\n this.states = new StateCollection(options.context);\n }\n\n state<const TStateId extends string>(id: TStateId) {\n return this.states.add(id);\n }\n\n parallel<const TStateId extends string>(id: TStateId) {\n const state = this.states.add(id);\n state.markParallel();\n return state;\n }\n\n defineStates<const TStateIds extends readonly [string, ...string[]]>(...ids: TStateIds) {\n for (const id of ids) this.states.add(id);\n return new TypedStateRegistry<TStateIds[number], TContextSchema>(this.states);\n }\n\n final<const TStateId extends string>(id: TStateId) {\n const state = this.states.add(id);\n state.markFinal();\n return state;\n }\n\n event<const TName extends string, TPayloadSchema extends z.ZodType>(\n name: TName,\n config: { payload: TPayloadSchema; routing?: EventRoutingMode },\n ) {\n return journeyEvent(name, config);\n }\n\n use(fragment: JourneyFragment<string, TContextSchema>) {\n fragment.apply(this);\n return this;\n }\n\n alternateEntry(\n state: StateBuilder<string, TContextSchema>,\n options: JourneyEntryOptions<InferObject<TContextSchema>>,\n ) {\n this.alternateEntryStates.push({\n state,\n ...(options.description ? { description: options.description } : {}),\n ...(options.priority !== undefined ? { priority: options.priority } : {}),\n when: options.when,\n });\n return this;\n }\n\n initial(state: StateBuilder<string, TContextSchema>) {\n this.initialState = state;\n return this;\n }\n\n compile(): CompiledJourney {\n if (!this.initialState) {\n throw new CognideskDefinitionError(`Journey '${this.id}' must declare an initial state.`);\n }\n const states = this.states.list().flatMap((state) => state.compile());\n assertUniqueIds(states, \"State\");\n validateStateGraph(this.id, states, this.alternateEntryStates, this.initialState);\n const graph: JourneyGraph = {\n id: this.id,\n kind: \"stateMachine\",\n initialStateId: this.initialState.id,\n ...(this.alternateEntryStates.length > 0 ? {\n alternateEntries: this.alternateEntryStates.map((entry) => ({\n stateId: entry.state.id,\n ...(entry.description ? { description: entry.description } : {}),\n ...(entry.priority !== undefined ? { priority: entry.priority } : {}),\n })),\n } : {}),\n states,\n };\n return {\n id: this.id,\n kind: \"stateMachine\",\n condition: this.options.condition,\n examples: this.options.examples ?? [],\n tags: this.options.tags ?? [],\n priority: this.options.priority ?? 0,\n stickiness: this.options.stickiness ?? \"medium\",\n alwaysInclude: this.options.always === true || this.options.alwaysInclude === true,\n ...(typeof this.options.always === \"function\" ? { always: this.options.always } : {}),\n ...(this.options.includeWhen ? { includeWhen: this.options.includeWhen } : {}),\n ...(this.options.matcher ? { matcher: this.options.matcher } : {}),\n ...(this.options.guard ? { guard: this.options.guard } : {}),\n ...(this.options.contextReuse ? {\n contextReuse: {\n ...(this.options.contextReuse.fields ? { fields: this.options.contextReuse.fields.map(String) } : {}),\n when: this.options.contextReuse.when as ContextReusePredicate,\n },\n } : {}),\n knowledge: this.knowledge.list(),\n tools: this.tools.list(),\n context: this.options.context,\n states,\n initialStateId: this.initialState.id,\n alternateEntries: this.alternateEntryStates.map((entry) => ({\n stateId: entry.state.id,\n ...(entry.description ? { description: entry.description } : {}),\n ...(entry.priority !== undefined ? { priority: entry.priority } : {}),\n when: entry.when as JourneyEntryPredicate,\n })),\n toGraph: () => sanitizeGraph(graph),\n toJSON: () => sanitizeGraph(graph),\n toMermaid: () => graphToMermaid(graph),\n };\n }\n}\n\nexport class DelegationJourneyBuilder<const TId extends string> {\n readonly kind = \"delegation\" as const;\n constructor(readonly id: TId, readonly options: DelegationJourneyOptions) {}\n\n compile(): CompiledJourney {\n const graph: JourneyGraph = { id: this.id, kind: \"delegation\", states: [] };\n return {\n id: this.id,\n kind: \"delegation\",\n condition: this.options.condition,\n examples: this.options.examples ?? [],\n tags: this.options.tags ?? [],\n priority: this.options.priority ?? 0,\n stickiness: this.options.stickiness ?? \"medium\",\n alwaysInclude: this.options.always === true || this.options.alwaysInclude === true,\n ...(typeof this.options.always === \"function\" ? { always: this.options.always } : {}),\n ...(this.options.includeWhen ? { includeWhen: this.options.includeWhen } : {}),\n ...(this.options.matcher ? { matcher: this.options.matcher } : {}),\n ...(this.options.guard ? { guard: this.options.guard } : {}),\n knowledge: this.options.specialist.knowledge ?? [],\n tools: [],\n delegation: {\n goal: this.options.specialist.goal,\n ...(this.options.specialist.instructions ? { instructions: this.options.specialist.instructions } : {}),\n tools: this.options.specialist.tools ?? [],\n completeWhen: this.options.completeWhen ?? [],\n },\n states: [],\n alternateEntries: [],\n toGraph: () => graph,\n toJSON: () => graph,\n toMermaid: () => `stateDiagram-v2\\n [*] --> ${this.id}`,\n };\n }\n}\n\nexport function journeyFragment<const TName extends string, TContextSchema extends ObjectSchema>(\n name: TName,\n options: JourneyFragmentOptions<TContextSchema>,\n): JourneyFragment<TName, TContextSchema> {\n return {\n kind: \"journeyFragment\",\n name,\n context: options.context,\n apply(journey) {\n if (options.tools?.length) journey.tools.add(...options.tools);\n if (options.knowledge?.length) journey.knowledge.add(...options.knowledge);\n options.define(journey);\n },\n };\n}\n\nfunction validateStateGraph<TContextSchema extends ObjectSchema>(\n journeyId: string,\n states: CompiledState[],\n alternateEntryStates: Array<{ state: StateBuilder<string, TContextSchema> }>,\n initialState: StateBuilder<string, TContextSchema>,\n) {\n const stateIds = new Set(states.map((state) => state.id));\n for (const entry of alternateEntryStates) {\n if (!stateIds.has(entry.state.id)) {\n throw new CognideskDefinitionError(`Journey '${journeyId}' declares unknown alternate entry state '${entry.state.id}'.`);\n }\n }\n const childrenByParentId = new Map<string, CompiledState[]>();\n for (const state of states) {\n if (!state.parentId) continue;\n const siblings = childrenByParentId.get(state.parentId) ?? [];\n siblings.push(state);\n childrenByParentId.set(state.parentId, siblings);\n }\n for (const state of states) {\n const children = childrenByParentId.get(state.id) ?? [];\n if (children.length > 0 && state.type === \"state\" && !state.initialStateId) {\n throw new CognideskDefinitionError(`State '${state.id}' has child states and must declare an initial child state.`);\n }\n if (state.initialStateId && !children.some((child) => child.id === state.initialStateId)) {\n throw new CognideskDefinitionError(`State '${state.id}' declares unknown initial child state '${state.initialStateId}'.`);\n }\n for (const transition of state.transitions) {\n if (!stateIds.has(transition.targetId)) {\n throw new CognideskDefinitionError(`State '${state.id}' targets unknown state '${transition.targetId}'.`);\n }\n }\n }\n if (!stateIds.has(initialState.id)) {\n throw new CognideskDefinitionError(`Journey '${journeyId}' declares unknown initial state '${initialState.id}'.`);\n }\n}\n","import type {\n AnyCustomRuntimeEvent,\n AnyTool,\n KnowledgeSource,\n ObjectSchema,\n WidgetDefinition,\n} from \"../types.js\";\nimport { CapabilityScope } from \"./capability-scope.js\";\nimport type {\n AgentOptions,\n CompiledAgent,\n DelegationJourneyOptions,\n StateMachineJourneyOptions,\n VoiceProfileOptions,\n} from \"./compiled-types.js\";\nimport {\n DelegationJourneyBuilder,\n StateMachineJourneyBuilder,\n} from \"./journey-builders.js\";\nimport {\n assertUniqueIds,\n assertUniqueKinds,\n assertUniqueNames,\n pushUnique,\n} from \"./utils.js\";\n\nexport class AgentBuilder<const TId extends string> {\n readonly tools = new CapabilityScope<AnyTool>();\n readonly knowledge = new CapabilityScope<KnowledgeSource>();\n readonly customEvents = new CapabilityScope<AnyCustomRuntimeEvent>();\n readonly widgets: WidgetDefinition[] = [];\n private voiceProfile?: VoiceProfileOptions;\n private readonly journeys: Array<StateMachineJourneyBuilder<string, ObjectSchema> | DelegationJourneyBuilder<string>> = [];\n\n constructor(readonly id: TId, readonly options: AgentOptions) {}\n\n stateMachineJourney<const TJourneyId extends string, TContextSchema extends ObjectSchema>(\n id: TJourneyId,\n options: StateMachineJourneyOptions<TContextSchema>,\n ) {\n const journey = new StateMachineJourneyBuilder(id, options);\n this.journeys.push(journey as unknown as StateMachineJourneyBuilder<string, ObjectSchema>);\n return journey;\n }\n\n delegationJourney<const TJourneyId extends string>(\n id: TJourneyId,\n options: DelegationJourneyOptions,\n ) {\n const journey = new DelegationJourneyBuilder(id, options);\n this.journeys.push(journey);\n return journey;\n }\n\n registerWidget(widgetDefinition: WidgetDefinition) {\n pushUnique(this.widgets, widgetDefinition);\n return this;\n }\n\n voice(options: VoiceProfileOptions) {\n this.voiceProfile = options;\n return this;\n }\n\n compile(): CompiledAgent {\n const compiledJourneys = this.journeys.map((journey) => journey.compile());\n assertUniqueIds(compiledJourneys, \"Journey\");\n assertUniqueNames(this.tools.list(), \"Tool\");\n assertUniqueNames(this.knowledge.list(), \"Knowledge source\");\n const customEvents = this.customEvents.list();\n assertUniqueNames(customEvents, \"Custom runtime event\");\n assertUniqueKinds(this.widgets, \"Widget\");\n return {\n id: this.id,\n instructions: this.options.instructions,\n ...(this.options.logLevel ? { logLevel: this.options.logLevel } : {}),\n behavior: this.options.behavior ?? {},\n postProcessing: this.options.postProcessing ?? {},\n ...(this.voiceProfile ? { voice: this.voiceProfile } : {}),\n journeys: compiledJourneys,\n tools: this.tools.list(),\n knowledge: this.knowledge.list(),\n widgets: this.widgets,\n customEvents,\n };\n }\n}\n\nexport function createAgent<const TId extends string>(id: TId, options: AgentOptions) {\n return new AgentBuilder(id, options);\n}\n","import type { CompiledAgent, CompiledJourney, EventRoutingMode } from \"../definition.js\";\nimport type { ConversationRecord } from \"../storage.js\";\nimport type {\n AgentModelSet,\n ConversationChannel,\n GuardResult,\n RuntimeSnapshot,\n} from \"../types.js\";\nimport {\n emitConfirmationPrompts as emitConfirmationPromptsWithStorage,\n emitFieldConfirmationPrompts as emitFieldConfirmationPromptsWithStorage,\n emitFieldPrompts as emitFieldPromptsWithStorage,\n emitGuardDenial as emitGuardDenialWithStorage,\n} from \"./prompts.js\";\nimport {\n advanceStateMachine as advanceStateMachineWithDeps,\n executeStateMachineTurn as executeStateMachineTurnWithDeps,\n} from \"./state-machine.js\";\nimport {\n runStateActionRuns as runStateActionRunsWithDeps,\n runStateToolRuns as runStateToolRunsWithDeps,\n} from \"./state-runners.js\";\nimport {\n processJourneyEvent as processJourneyEventWithDeps,\n processWidgetSubmission as processWidgetSubmissionWithDeps,\n validateWidgetSubmission as validateWidgetSubmissionWithDeps,\n} from \"./state-interactions.js\";\nimport type {\n RuntimeEventEmitter,\n RuntimeOptions,\n StateMachineTurnResult,\n} from \"./types.js\";\nimport type {\n RuntimeStateInteractionDeps,\n RuntimeStateMachineDeps,\n} from \"./facade-state-types.js\";\n\nexport function executeRuntimeStateMachineTurn(\n deps: RuntimeStateMachineDeps,\n args: {\n journey: CompiledJourney;\n models: AgentModelSet;\n conversation: ConversationRecord;\n previousSnapshot: RuntimeSnapshot | null;\n userText: string;\n channel?: ConversationChannel;\n turn: unknown;\n app: unknown;\n signal?: AbortSignal;\n emit: RuntimeEventEmitter;\n },\n): Promise<StateMachineTurnResult> {\n return executeStateMachineTurnWithDeps({\n ...args,\n generateTextWithTrace: deps.generateTextWithTrace,\n requireConversationRecord: deps.requireConversationRecord,\n selectTransition: deps.selectTransition,\n runStateActionRuns: deps.runStateActionRuns,\n runStateToolRuns: deps.runStateToolRuns,\n emitFieldPrompts: deps.emitFieldPrompts,\n emitFieldConfirmationPrompts: deps.emitFieldConfirmationPrompts,\n emitConfirmationPrompts: deps.emitConfirmationPrompts,\n });\n}\n\nexport function advanceRuntimeStateMachine(\n deps: RuntimeStateMachineDeps,\n args: {\n journey: CompiledJourney;\n models?: AgentModelSet;\n conversation: ConversationRecord;\n stateById: Map<string, CompiledJourney[\"states\"][number]>;\n state: CompiledJourney[\"states\"][number];\n context: Record<string, unknown>;\n userText?: string;\n channel?: ConversationChannel;\n signal?: AbortSignal;\n emit: RuntimeEventEmitter;\n },\n) {\n return advanceStateMachineWithDeps({\n ...args,\n generateTextWithTrace: deps.generateTextWithTrace,\n requireConversationRecord: deps.requireConversationRecord,\n selectTransition: deps.selectTransition,\n runStateActionRuns: deps.runStateActionRuns,\n runStateToolRuns: deps.runStateToolRuns,\n emitFieldPrompts: deps.emitFieldPrompts,\n emitFieldConfirmationPrompts: deps.emitFieldConfirmationPrompts,\n emitConfirmationPrompts: deps.emitConfirmationPrompts,\n });\n}\n\nexport function runRuntimeStateActionRuns(\n options: RuntimeOptions,\n args: {\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state: CompiledJourney[\"states\"][number];\n context: Record<string, unknown>;\n actionType: \"entry\" | \"exit\" | \"transition\";\n signal?: AbortSignal;\n emit: RuntimeEventEmitter;\n },\n) {\n return runStateActionRunsWithDeps({\n ...args,\n options,\n });\n}\n\nexport function runRuntimeStateToolRuns(\n deps: {\n options: RuntimeOptions;\n applyBuiltInLifecycleTool: (input: {\n toolName: string;\n input: unknown;\n conversationId: string;\n emit: RuntimeEventEmitter;\n }) => Promise<boolean>;\n },\n args: {\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state: CompiledJourney[\"states\"][number];\n context: Record<string, unknown>;\n actionType: \"entry\" | \"exit\" | \"transition\";\n confirmedPromptId?: string;\n signal?: AbortSignal;\n emit: RuntimeEventEmitter;\n },\n): Promise<string | null> {\n return runStateToolRunsWithDeps({\n ...args,\n options: deps.options,\n applyBuiltInLifecycleTool: deps.applyBuiltInLifecycleTool,\n });\n}\n\nexport function emitRuntimeGuardDenial(\n options: RuntimeOptions,\n args: {\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state?: CompiledJourney[\"states\"][number];\n result: GuardResult;\n emit: RuntimeEventEmitter;\n },\n) {\n return emitGuardDenialWithStorage({\n ...args,\n storage: options.storage,\n });\n}\n\nexport function emitRuntimeFieldPrompts(\n options: RuntimeOptions,\n args: {\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state: CompiledJourney[\"states\"][number];\n context: Record<string, unknown>;\n emit: RuntimeEventEmitter;\n },\n) {\n return emitFieldPromptsWithStorage({\n ...args,\n storage: options.storage,\n });\n}\n\nexport function emitRuntimeFieldConfirmationPrompts(\n options: RuntimeOptions,\n args: {\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state: CompiledJourney[\"states\"][number];\n context: Record<string, unknown>;\n emit: RuntimeEventEmitter;\n },\n) {\n return emitFieldConfirmationPromptsWithStorage({\n ...args,\n storage: options.storage,\n });\n}\n\nexport function emitRuntimeConfirmationPrompts(\n options: RuntimeOptions,\n args: {\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state: CompiledJourney[\"states\"][number];\n context: Record<string, unknown>;\n emit: RuntimeEventEmitter;\n },\n) {\n return emitConfirmationPromptsWithStorage({\n ...args,\n storage: options.storage,\n });\n}\n\nexport function processRuntimeWidgetSubmission(\n deps: RuntimeStateInteractionDeps,\n args: {\n conversation: ConversationRecord;\n promptId: string;\n output: unknown;\n },\n) {\n return processWidgetSubmissionWithDeps({\n ...args,\n storage: deps.options.storage,\n ...(deps.options.agent ? { agent: deps.options.agent } : {}),\n requireConversationRecord: deps.requireConversationRecord,\n runStateActionRuns: deps.runStateActionRuns,\n runStateToolRuns: deps.runStateToolRuns,\n selectTransition: deps.selectTransition,\n selectEventTransition: deps.selectEventTransition,\n resolveJourneyEventRoute: deps.resolveJourneyEventRoute,\n advanceStateMachine: deps.advanceStateMachine,\n emit: deps.emit,\n });\n}\n\nexport function validateRuntimeWidgetSubmission(\n deps: RuntimeStateInteractionDeps,\n args: {\n conversation: ConversationRecord;\n promptId: string;\n widgetKind: string;\n output: unknown;\n },\n) {\n return validateWidgetSubmissionWithDeps({\n ...args,\n storage: deps.options.storage,\n ...(deps.options.agent ? { agent: deps.options.agent } : {}),\n requireConversationRecord: deps.requireConversationRecord,\n runStateActionRuns: deps.runStateActionRuns,\n runStateToolRuns: deps.runStateToolRuns,\n selectTransition: deps.selectTransition,\n selectEventTransition: deps.selectEventTransition,\n resolveJourneyEventRoute: deps.resolveJourneyEventRoute,\n advanceStateMachine: deps.advanceStateMachine,\n emit: deps.emit,\n });\n}\n\nexport function processRuntimeJourneyEvent(\n deps: RuntimeStateInteractionDeps,\n args: {\n conversation: ConversationRecord;\n eventName: string;\n routing: EventRoutingMode;\n target?: { journeyId?: string; stateId?: string };\n app: unknown;\n signal?: AbortSignal;\n emit: RuntimeEventEmitter;\n },\n): Promise<RuntimeSnapshot | null> {\n return processJourneyEventWithDeps({\n ...args,\n storage: deps.options.storage,\n ...(deps.options.agent ? { agent: deps.options.agent } : {}),\n requireConversationRecord: deps.requireConversationRecord,\n runStateActionRuns: deps.runStateActionRuns,\n runStateToolRuns: deps.runStateToolRuns,\n selectTransition: deps.selectTransition,\n selectEventTransition: deps.selectEventTransition,\n resolveJourneyEventRoute: deps.resolveJourneyEventRoute,\n advanceStateMachine: deps.advanceStateMachine,\n emit: args.emit,\n });\n}\n","import type { CompiledAgent, CompiledJourney, EventRoutingMode } from \"../definition.js\";\nimport type { ConversationRecord, RuntimeEventInput } from \"../storage.js\";\nimport type {\n AgentModelSet,\n GuardResult,\n RuntimeEvent,\n RuntimeSnapshot,\n} from \"../types.js\";\nimport {\n advanceRuntimeStateMachine,\n emitRuntimeConfirmationPrompts,\n emitRuntimeFieldConfirmationPrompts,\n emitRuntimeFieldPrompts,\n emitRuntimeGuardDenial,\n executeRuntimeStateMachineTurn,\n processRuntimeJourneyEvent,\n processRuntimeWidgetSubmission,\n runRuntimeStateActionRuns,\n runRuntimeStateToolRuns,\n validateRuntimeWidgetSubmission,\n} from \"./facade-state.js\";\nimport type { RuntimeCore } from \"./kernel-core.js\";\nimport type { RuntimeRouting } from \"./kernel-routing.js\";\n\nexport function createRuntimeState(\n options: { storage: import(\"../storage.js\").StorageAdapter; agent?: CompiledAgent },\n core: RuntimeCore,\n routing: RuntimeRouting,\n) {\n const state = {\n executeStateMachineTurn(args: {\n journey: CompiledJourney;\n models: AgentModelSet;\n conversation: ConversationRecord;\n previousSnapshot: RuntimeSnapshot | null;\n userText: string;\n turn: unknown;\n app: unknown;\n signal?: AbortSignal;\n emit: RuntimeEmit;\n }) {\n return executeRuntimeStateMachineTurn(state.stateMachineDeps(), args);\n },\n advanceStateMachine(args: {\n journey: CompiledJourney;\n models?: AgentModelSet;\n conversation: ConversationRecord;\n stateById: Map<string, CompiledJourney[\"states\"][number]>;\n state: CompiledJourney[\"states\"][number];\n context: Record<string, unknown>;\n userText?: string;\n signal?: AbortSignal;\n emit: RuntimeEmit;\n }) {\n return advanceRuntimeStateMachine(state.stateMachineDeps(), args);\n },\n selectTransition: routing.selectTransition,\n selectEventTransition: routing.selectEventTransition,\n resolveJourneyEventRoute: routing.resolveJourneyEventRoute,\n runStateActionRuns(args: StateRunArgs) {\n return runRuntimeStateActionRuns(options, args);\n },\n runStateToolRuns(args: StateRunArgs & { confirmedPromptId?: string }): Promise<string | null> {\n return runRuntimeStateToolRuns({\n options,\n applyBuiltInLifecycleTool: core.applyBuiltInLifecycleTool,\n }, args);\n },\n emitGuardDenial(args: StateGuardDenialArgs) {\n return emitRuntimeGuardDenial(options, args);\n },\n emitFieldPrompts(args: StatePromptArgs) {\n return emitRuntimeFieldPrompts(options, args);\n },\n emitFieldConfirmationPrompts(args: StatePromptArgs) {\n return emitRuntimeFieldConfirmationPrompts(options, args);\n },\n emitConfirmationPrompts(args: StatePromptArgs) {\n return emitRuntimeConfirmationPrompts(options, args);\n },\n processWidgetSubmission(args: {\n conversation: ConversationRecord;\n promptId: string;\n output: unknown;\n }) {\n return processRuntimeWidgetSubmission(state.stateInteractionDeps(), args);\n },\n validateWidgetSubmission(args: {\n conversation: ConversationRecord;\n promptId: string;\n widgetKind: string;\n output: unknown;\n }) {\n return validateRuntimeWidgetSubmission(state.stateInteractionDeps(), args);\n },\n processJourneyEvent(args: {\n conversation: ConversationRecord;\n eventName: string;\n routing: EventRoutingMode;\n target?: { journeyId?: string; stateId?: string };\n app: unknown;\n signal?: AbortSignal;\n emit: RuntimeEmit;\n }): Promise<RuntimeSnapshot | null> {\n return processRuntimeJourneyEvent(state.stateInteractionDeps(), args);\n },\n stateMachineDeps() {\n return {\n generateTextWithTrace: core.generateTextWithTrace,\n requireConversationRecord: core.requireConversationRecord,\n selectTransition: state.selectTransition,\n runStateActionRuns: state.runStateActionRuns,\n runStateToolRuns: state.runStateToolRuns,\n emitFieldPrompts: state.emitFieldPrompts,\n emitFieldConfirmationPrompts: state.emitFieldConfirmationPrompts,\n emitConfirmationPrompts: state.emitConfirmationPrompts,\n };\n },\n stateInteractionDeps() {\n return {\n ...state.stateMachineDeps(),\n options,\n emit: core.emit,\n selectEventTransition: state.selectEventTransition,\n resolveJourneyEventRoute: state.resolveJourneyEventRoute,\n advanceStateMachine: state.advanceStateMachine,\n };\n },\n };\n return state;\n}\n\ntype RuntimeEmit = <TEvent extends RuntimeEventInput>(event: TEvent) => Promise<RuntimeEvent>;\ntype StateRunArgs = {\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state: CompiledJourney[\"states\"][number];\n context: Record<string, unknown>;\n actionType: \"entry\" | \"exit\" | \"transition\";\n signal?: AbortSignal;\n emit: RuntimeEmit;\n};\ntype StatePromptArgs = {\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state: CompiledJourney[\"states\"][number];\n context: Record<string, unknown>;\n emit: RuntimeEmit;\n};\ntype StateGuardDenialArgs = {\n journey: CompiledJourney;\n conversation: ConversationRecord;\n state?: CompiledJourney[\"states\"][number];\n result: GuardResult;\n emit: RuntimeEmit;\n};\n\nexport type RuntimeState = ReturnType<typeof createRuntimeState>;\n","import { randomUUID } from \"node:crypto\";\nimport type { CompiledAgent } from \"../definition.js\";\nimport type { ConversationRecord, StorageAdapter } from \"../storage.js\";\nimport type { RuntimeEvent } from \"../types.js\";\nimport { AbortError } from \"./errors.js\";\nimport type { ActiveTurn, HandleUserMessageResult, RuntimeEventEmitter } from \"./types.js\";\n\nexport async function beginUserTurn(args: {\n activeTurns: Map<string, ActiveTurn>;\n conversationId: string;\n agent: CompiledAgent;\n signal?: AbortSignal;\n emit: RuntimeEventEmitter;\n}): Promise<ActiveTurn> {\n const previous = args.activeTurns.get(args.conversationId);\n const shouldInterrupt = args.agent.behavior?.interruptOnNewMessage !== false;\n let interruptedEvent: RuntimeEvent | undefined;\n if (previous && shouldInterrupt) {\n previous.interruptedByNewMessage = true;\n previous.controller.abort(new Error(\"interrupted_by_new_message\"));\n previous.abortEvent ??= args.emit({\n conversationId: args.conversationId,\n type: \"message.aborted\",\n data: { reason: \"interrupted_by_new_message\" },\n });\n interruptedEvent = await previous.abortEvent;\n }\n\n const controller = new AbortController();\n const abortFromParent = () => controller.abort(args.signal?.reason ?? new Error(\"aborted\"));\n if (args.signal?.aborted) abortFromParent();\n else args.signal?.addEventListener(\"abort\", abortFromParent, { once: true });\n\n const turn: ActiveTurn = {\n id: randomUUID(),\n conversationId: args.conversationId,\n controller,\n interruptedByNewMessage: false,\n ...(interruptedEvent ? { interruptedEvent } : {}),\n cleanup: () => args.signal?.removeEventListener(\"abort\", abortFromParent),\n };\n args.activeTurns.set(args.conversationId, turn);\n return turn;\n}\n\nexport function finishUserTurn(activeTurns: Map<string, ActiveTurn>, turn: ActiveTurn) {\n turn.cleanup();\n if (activeTurns.get(turn.conversationId)?.id === turn.id) {\n activeTurns.delete(turn.conversationId);\n }\n}\n\nexport function throwIfTurnInterrupted(turn: ActiveTurn) {\n if (turn.interruptedByNewMessage) throw new AbortError(\"interrupted_by_new_message\");\n}\n\nexport async function createAbortedTurnResult(args: {\n storage: StorageAdapter;\n conversation: ConversationRecord;\n turn: ActiveTurn;\n events: RuntimeEvent[];\n}): Promise<HandleUserMessageResult> {\n const abortEvent = await args.turn.abortEvent;\n if (abortEvent && !args.events.some((event) => event.id === abortEvent.id)) {\n args.events.push(abortEvent);\n }\n const snapshot = await args.storage.getSnapshot(args.conversation.id) ?? {\n conversationId: args.conversation.id,\n lifecycle: args.conversation.lifecycle,\n activeStateIds: [],\n updatedAt: new Date().toISOString(),\n };\n return {\n conversation: args.conversation,\n snapshot,\n events: args.events,\n text: \"\",\n ...(snapshot.activeJourneyId ? { activeJourneyId: snapshot.activeJourneyId } : {}),\n };\n}\n","import type { RetrievedKnowledgeItem } from \"./types.js\";\n\nexport function removeRawKnowledgeMarkers(text: string, knowledge: RetrievedKnowledgeItem[]) {\n if (text.length === 0) return text;\n let next = removeGenericRawMarkers(text);\n if (knowledge.length === 0) return normalizeWhitespace(next);\n const markerPattern = buildMarkerPattern(knowledge);\n if (!markerPattern) return normalizeWhitespace(next);\n next = next.replace(\n new RegExp(String.raw`\\s*(?:Source|Sources|Citation|Citations)\\s*:\\s*(?:${markerPattern})(?:\\s*[,;]\\s*(?:${markerPattern}))*\\.?`, \"gi\"),\n \"\",\n );\n next = next.replace(\n new RegExp(String.raw`\\(\\s*(?:(?:Source|Sources|Citation|Citations)\\s*:\\s*)?(?:${markerPattern})(?:\\s*[,;]\\s*(?:${markerPattern}))*\\.?\\s*\\)`, \"gi\"),\n \"\",\n );\n next = next.replace(new RegExp(String.raw`\\[\\s*(?:${markerPattern})\\s*\\]`, \"gi\"), \"\");\n next = next.replace(new RegExp(String.raw`\\bK\\d+:[A-Za-z0-9_.:-]+\\b`, \"g\"), \"\");\n return normalizeWhitespace(next);\n}\n\nfunction buildMarkerPattern(knowledge: RetrievedKnowledgeItem[]) {\n const markers = new Set<string>();\n knowledge.forEach((item, index) => {\n markers.add(`K${index + 1}:${item.id}`);\n markers.add(item.id);\n });\n const escaped = [...markers]\n .filter(Boolean)\n .sort((left, right) => right.length - left.length)\n .map(escapeRegExp);\n return escaped.length > 0 ? escaped.join(\"|\") : null;\n}\n\nfunction removeGenericRawMarkers(text: string) {\n let next = text;\n next = next.replace(/\\s*(?:Source|Sources|Citation|Citations)\\s*:\\s*K\\d+:[A-Za-z0-9_.:-]+\\.?/gi, \"\");\n next = next.replace(/\\(\\s*(?:(?:Source|Sources|Citation|Citations)\\s*:\\s*)?K\\d+:[A-Za-z0-9_.:-]+\\.?\\s*\\)/gi, \"\");\n next = next.replace(/\\[\\s*K\\d+:[A-Za-z0-9_.:-]+\\s*\\]/gi, \"\");\n next = next.replace(/\\bK\\d+:[A-Za-z0-9_.:-]+\\b/g, \"\");\n return next;\n}\n\nfunction normalizeWhitespace(text: string) {\n return text\n .replace(/[ \\t]+\\n/g, \"\\n\")\n .replace(/\\n{3,}/g, \"\\n\\n\")\n .replace(/[ \\t]{2,}/g, \" \")\n .trim();\n}\n\nfunction escapeRegExp(value: string) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n","import type { CompiledAgent, CompiledJourney } from \"../definition.js\";\nimport type { ConversationChannel } from \"../types.js\";\nimport type { JourneySummary, ModelMessage } from \"../types.js\";\nimport { renderJourneyRuntimeContext } from \"./rendering.js\";\nimport type { ConversationMessage, RetrievedKnowledgeItem, StateMachineTurnResult, VisibleCustomEventContext } from \"./types.js\";\n\nexport function createResponseMessages(args: {\n agent: CompiledAgent;\n journey: CompiledJourney | null;\n stateMachineTurn: StateMachineTurnResult | null;\n userText: string;\n history: ConversationMessage[];\n knowledge: RetrievedKnowledgeItem[];\n visibleCustomEvents: VisibleCustomEventContext[];\n compactionSummary?: unknown;\n journeySummaries: JourneySummary[];\n channel?: ConversationChannel;\n}): ModelMessage[] {\n const journeyContext = args.journey\n ? renderJourneyRuntimeContext(args.journey, args.stateMachineTurn)\n : \"No active journey.\";\n const knowledgeContext = args.knowledge.length > 0\n ? args.knowledge.map((item, index) => {\n const title = item.title ? ` (${item.title})` : \"\";\n return `[K${index + 1}:${item.id}${title}]\\n${item.content}`;\n }).join(\"\\n\\n\")\n : \"No retrieved knowledge.\";\n const customEventContext = args.visibleCustomEvents.length > 0\n ? args.visibleCustomEvents\n .map((event) => `[${event.offset}:${event.type}]\\n${JSON.stringify(event.data)}`)\n .join(\"\\n\\n\")\n : \"No visible custom events.\";\n const memoryContext = args.compactionSummary !== undefined\n ? JSON.stringify(args.compactionSummary)\n : \"No compacted conversation memory.\";\n const journeySummaryContext = args.journeySummaries.length > 0\n ? args.journeySummaries\n .map((summary) => [\n `journey:${summary.journeyId}`,\n `kind:${summary.kind}`,\n summary.stateId ? `state:${summary.stateId}` : \"\",\n summary.reason ? `reason:${summary.reason}` : \"\",\n `summary:${summary.summary}`,\n ].filter(Boolean).join(\" \"))\n .join(\"\\n\")\n : \"No completed journey summaries.\";\n const history = args.history.length > 0\n ? args.history\n : [{ role: \"user\" as const, content: args.userText }];\n\n return [\n {\n role: \"system\",\n content: [\n args.agent.instructions,\n args.channel === \"voice\"\n ? \"Current channel: voice. Do not mention widgets, forms, buttons, visual controls, Markdown, or UI prompts. Ask for missing details conversationally, one detail at a time when practical. Confirm side-effect actions verbally before proceeding.\"\n : \"\",\n \"\",\n \"Conversation memory:\",\n memoryContext,\n \"\",\n \"Completed journey summaries:\",\n journeySummaryContext,\n \"\",\n journeyContext,\n \"\",\n \"Use retrieved knowledge when relevant. Do not write raw knowledge ids such as K1, K1:document-id, or document ids in the customer-facing prose; the runtime attaches source links after the message.\",\n \"\",\n knowledgeContext,\n \"\",\n \"Visible custom events:\",\n customEventContext,\n ].join(\"\\n\"),\n },\n ...history.map((message): ModelMessage => ({\n role: message.role,\n content: message.content,\n })),\n ];\n}\n","import type { RuntimeEventInput } from \"../storage.js\";\nimport { runtimeLogger } from \"../logging.js\";\nimport type { RuntimeEvent } from \"../types.js\";\nimport { addTelemetryContentEvent, telemetryEventNames } from \"../telemetry.js\";\nimport {\n beginUserTurn,\n createAbortedTurnResult,\n finishUserTurn,\n throwIfTurnInterrupted,\n} from \"./active-turns.js\";\nimport { isAbortLikeError } from \"./errors.js\";\nimport { listConversationMessages, listVisibleCustomEventContext } from \"./history.js\";\nimport { removeRawKnowledgeMarkers } from \"./knowledge-markers.js\";\nimport { resolveAvailableModelTools } from \"./model-runner.js\";\nimport { createResponseMessages } from \"./response-messages.js\";\nimport { createNextSnapshot } from \"./snapshots.js\";\nimport { toModelToolDefinition } from \"./tools.js\";\nimport type {\n HandleUserMessageResult,\n} from \"./types.js\";\nimport type { HandleUserMessageDeps } from \"./user-turn/types.js\";\n\nexport async function handleUserMessage<TTurn>(\n args: HandleUserMessageDeps<TTurn>,\n): Promise<HandleUserMessageResult> {\n const agent = args.requireAgent();\n const models = args.requireModels();\n const conversation = await args.requireConversation(args.input.conversationId);\n const logger = runtimeLogger(args.options, { conversationId: conversation.id });\n logger.info({\n userTextLength: args.input.text.length,\n hasTurnPayload: args.input.turn !== undefined,\n }, \"User turn started\");\n const turn = await beginUserTurn({\n activeTurns: args.activeTurns,\n conversationId: conversation.id,\n agent,\n emit: args.emit,\n ...(args.input.signal ? { signal: args.input.signal } : {}),\n });\n const userText = await args.redactUserMessage(conversation, args.input.text);\n addTelemetryContentEvent(args.options, telemetryEventNames.userMessage, {\n \"cognidesk.user.message.text\": args.input.text,\n \"cognidesk.user.message.redacted_text\": userText,\n });\n const emitted: RuntimeEvent[] = [];\n if (turn.interruptedEvent) emitted.push(turn.interruptedEvent);\n const emit = async <TEvent extends RuntimeEventInput>(event: TEvent) => {\n const stored = await args.emit(event);\n emitted.push(stored);\n return stored;\n };\n\n try {\n if (args.options.compaction?.beforeTurn) {\n logger.debug(\"Checking before-turn compaction\");\n const compaction = await args.compactIfNeeded({\n conversationId: conversation.id,\n ...(args.options.compaction.schemaVersion ? { schemaVersion: args.options.compaction.schemaVersion } : {}),\n signal: turn.controller.signal,\n });\n throwIfTurnInterrupted(turn);\n if (compaction) {\n logger.info({\n eventCount: compaction.events.length,\n }, \"Before-turn compaction completed\");\n emitted.push(...compaction.events);\n }\n }\n\n if (args.input.recordUserMessage !== false) {\n logger.debug(\"Recording user message events\");\n await emit({\n conversationId: conversation.id,\n type: \"message.started\",\n data: { role: \"user\" },\n });\n await emit({\n conversationId: conversation.id,\n type: \"message.completed\",\n data: { text: userText },\n });\n } else {\n logger.debug(\"Skipping user message event recording for pre-committed turn\");\n }\n\n const history = await listConversationMessages(args.options.storage, conversation.id);\n const previousSnapshot = await args.options.storage.getSnapshot(conversation.id);\n logger.debug({\n historyMessages: history.length,\n previousJourneyId: previousSnapshot?.activeJourneyId,\n }, \"Selecting journey\");\n const selectedJourney = await args.selectJourney({\n agent,\n models,\n conversation,\n previousSnapshot,\n history,\n input: {\n ...args.input,\n signal: turn.controller.signal,\n },\n userText,\n emit,\n });\n throwIfTurnInterrupted(turn);\n logger.info({\n selectedJourneyId: selectedJourney?.id ?? null,\n selectedJourneyKind: selectedJourney?.kind ?? null,\n }, \"Journey selected\");\n const stateMachineTurn = selectedJourney?.kind === \"stateMachine\"\n ? await args.executeStateMachineTurn({\n journey: selectedJourney,\n models,\n conversation,\n previousSnapshot,\n userText,\n ...(args.input.channel ? { channel: args.input.channel } : {}),\n turn: args.input.turn ?? {},\n app: args.input.app ?? args.options.app ?? {},\n emit,\n signal: turn.controller.signal,\n })\n : null;\n throwIfTurnInterrupted(turn);\n if (stateMachineTurn) {\n logger.debug({\n activeStateIds: stateMachineTurn.activeStateIds,\n completedJourneyId: stateMachineTurn.completed?.journeyId,\n completedStateId: stateMachineTurn.completed?.stateId,\n }, \"State machine turn completed\");\n }\n const interruptedByLifecycle = await args.createLifecycleInterruptionResult({\n conversationId: conversation.id,\n events: emitted,\n });\n if (interruptedByLifecycle) {\n logger.info(\"User turn interrupted by lifecycle change\");\n return interruptedByLifecycle;\n }\n\n logger.debug(\"Retrieving knowledge\");\n const knowledge = await args.retrieveKnowledge({\n agent,\n journey: selectedJourney,\n stateMachineTurn,\n conversationId: conversation.id,\n message: userText,\n emit,\n signal: turn.controller.signal,\n });\n throwIfTurnInterrupted(turn);\n logger.debug({ knowledgeItems: knowledge.length }, \"Knowledge retrieval completed\");\n const visibleCustomEvents = await listVisibleCustomEventContext(args.options.storage, agent, conversation.id);\n const modelMessages = await args.redactModelMessages(conversation, createResponseMessages({\n agent,\n journey: selectedJourney,\n stateMachineTurn,\n userText,\n history,\n knowledge,\n visibleCustomEvents,\n compactionSummary: previousSnapshot?.compactionSummary,\n journeySummaries: previousSnapshot?.journeySummaries ?? [],\n ...(args.input.channel ? { channel: args.input.channel } : {}),\n }));\n const availableTools = resolveAvailableModelTools(agent, selectedJourney, stateMachineTurn);\n const modelTools = availableTools.map(toModelToolDefinition);\n logger.debug({\n modelMessageCount: modelMessages.length,\n availableToolNames: availableTools.map((tool) => tool.name),\n visibleCustomEventCount: visibleCustomEvents.length,\n }, \"Generating assistant response\");\n throwIfTurnInterrupted(turn);\n const assistantMessageMode = args.input.assistantMessageMode ?? \"canonical\";\n const recordAssistantMessage = assistantMessageMode !== \"none\";\n let assistantStarted = false;\n const ensureAssistantStarted = async () => {\n if (!recordAssistantMessage) return;\n if (assistantStarted) return;\n await emit({\n conversationId: conversation.id,\n type: \"message.started\",\n data: { role: \"assistant\" },\n });\n assistantStarted = true;\n };\n let streamedTextLength = 0;\n const response = await args.generateResponseWithTools({\n conversation,\n model: models.response,\n messages: modelMessages,\n promptPayload: {\n messages: modelMessages,\n tools: modelTools.map((tool) => ({\n name: tool.name,\n ...(tool.description ? { description: tool.description } : {}),\n })),\n selectedJourneyId: selectedJourney?.id ?? null,\n activeStateIds: stateMachineTurn?.activeStateIds ?? [],\n journeyContext: stateMachineTurn?.journeyContext ?? {},\n },\n tools: availableTools,\n modelTools,\n selectedJourney,\n stateMachineTurn,\n emit,\n ...(args.options.streaming?.syntheticDeltas ? {\n onTextDelta: async (textDelta: string) => {\n if (!recordAssistantMessage) return;\n await ensureAssistantStarted();\n streamedTextLength += textDelta.length;\n await emit({\n conversationId: conversation.id,\n type: \"message.delta\",\n data: { textDelta },\n });\n await args.input.onAssistantTextDelta?.(textDelta);\n },\n } : {}),\n signal: turn.controller.signal,\n });\n throwIfTurnInterrupted(turn);\n logger.info({\n responseTextLength: response.text.length,\n toolCallCount: response.toolCalls?.length ?? 0,\n usage: response.usage,\n }, \"Assistant response generated\");\n if (response.providerMetadata?.interruptedByLifecycle) {\n const interrupted = await args.createLifecycleInterruptionResult({\n conversationId: conversation.id,\n events: emitted,\n });\n if (interrupted) {\n logger.info(\"Assistant response interrupted by lifecycle change\");\n return interrupted;\n }\n }\n const assistantText = removeRawKnowledgeMarkers(\n await args.redactAssistantMessage(conversation, response.text),\n knowledge,\n );\n throwIfTurnInterrupted(turn);\n const segments = await args.createCitationSegments({\n agent,\n conversation,\n text: assistantText,\n knowledge,\n signal: turn.controller.signal,\n });\n throwIfTurnInterrupted(turn);\n logger.debug({ citationSegments: segments?.length ?? 0 }, \"Citation processing completed\");\n\n if (recordAssistantMessage) {\n await ensureAssistantStarted();\n if (args.options.streaming?.syntheticDeltas && assistantText.length > 0 && streamedTextLength === 0) {\n await emit({\n conversationId: conversation.id,\n type: \"message.delta\",\n data: { textDelta: assistantText },\n });\n await args.input.onAssistantTextDelta?.(assistantText);\n }\n await emit({\n conversationId: conversation.id,\n type: \"message.completed\",\n data: {\n text: assistantText,\n ...(assistantMessageMode === \"intermediate\" ? { intermediate: true } : {}),\n ...(segments ? { segments } : {}),\n ...(response.usage ? { usage: response.usage } : {}),\n },\n });\n }\n\n const delegationCompletion = await args.evaluateDelegationCompletion({\n journey: selectedJourney,\n models,\n conversation,\n history: [...history, { role: \"assistant\", content: assistantText }],\n emit,\n signal: turn.controller.signal,\n });\n throwIfTurnInterrupted(turn);\n if (delegationCompletion) {\n logger.info({\n journeyId: delegationCompletion.journeyId,\n }, \"Delegation journey completed\");\n }\n\n const snapshot = createNextSnapshot({\n conversationId: conversation.id,\n previousSnapshot,\n selectedJourney,\n stateMachineTurn,\n delegationCompletion,\n ...(args.options.journeyIndex ? { definitionHash: args.options.journeyIndex.definitionHash } : {}),\n });\n await args.options.storage.saveSnapshot(snapshot);\n logger.debug({\n activeJourneyId: snapshot.activeJourneyId,\n activeStateIds: snapshot.activeStateIds,\n }, \"Runtime snapshot saved\");\n\n if (args.options.compaction?.afterTurn) {\n logger.debug(\"Checking after-turn compaction\");\n const compaction = await args.compactIfNeeded({\n conversationId: conversation.id,\n ...(args.options.compaction.schemaVersion ? { schemaVersion: args.options.compaction.schemaVersion } : {}),\n signal: turn.controller.signal,\n });\n throwIfTurnInterrupted(turn);\n if (compaction) {\n logger.info({\n eventCount: compaction.events.length,\n }, \"After-turn compaction completed\");\n emitted.push(...compaction.events);\n }\n }\n\n logger.info({\n emittedEventCount: emitted.length,\n activeJourneyId: snapshot.activeJourneyId,\n }, \"User turn completed\");\n return {\n conversation,\n snapshot,\n events: emitted,\n text: assistantText,\n ...(snapshot.activeJourneyId ? { activeJourneyId: snapshot.activeJourneyId } : {}),\n };\n } catch (error) {\n if (turn.interruptedByNewMessage && isAbortLikeError(error)) {\n logger.info(\"User turn aborted by a newer message\");\n return createAbortedTurnResult({\n storage: args.options.storage,\n conversation,\n turn,\n events: emitted,\n });\n }\n logger.error({\n error: error instanceof Error ? error.message : \"User turn failed.\",\n }, \"User turn failed\");\n throw error;\n } finally {\n finishUserTurn(args.activeTurns, turn);\n }\n}\n","import type { JourneyEventDefinition } from \"../definition.js\";\nimport type { RuntimeEvent } from \"../types.js\";\nimport { emitRuntimeJourneyEvent } from \"./facade-events.js\";\nimport { submitRuntimeWidget } from \"./facade-conversations.js\";\nimport { createRuntimeCore } from \"./kernel-core.js\";\nimport { createRuntimeRouting } from \"./kernel-routing.js\";\nimport {\n createRuntimeState,\n type RuntimeState,\n} from \"./kernel-state.js\";\nimport { handleUserMessage as handleUserMessageWithDeps } from \"./user-turn.js\";\nimport type {\n ActiveTurn,\n EmitJourneyEventInput,\n HandleUserMessageInput,\n RuntimeOptions,\n SubmitWidgetInput,\n} from \"./types.js\";\n\nexport function createRuntimeKernel(\n options: RuntimeOptions,\n activeTurns: Map<string, ActiveTurn>,\n) {\n const core = createRuntimeCore(options);\n let state!: RuntimeState;\n const routing = createRuntimeRouting(options, core, () => state);\n state = createRuntimeState(options, core, routing);\n\n return {\n ...core,\n ...routing,\n ...state,\n emitJourneyEvent<TEvent extends JourneyEventDefinition>(input: EmitJourneyEventInput<TEvent>) {\n return emitRuntimeJourneyEvent({\n options,\n requireConversation: core.requireConversation,\n emit: core.emit,\n processJourneyEvent: state.processJourneyEvent,\n }, input);\n },\n submitWidget(input: SubmitWidgetInput): Promise<RuntimeEvent> {\n return submitRuntimeWidget(\n core.requireConversation,\n core.emit,\n state.processWidgetSubmission,\n state.validateWidgetSubmission,\n input,\n );\n },\n handleUserMessage<TTurn = unknown>(input: HandleUserMessageInput<TTurn>) {\n return handleUserMessageWithDeps({\n options,\n activeTurns,\n input,\n requireAgent: core.requireAgent,\n requireModels: core.requireModels,\n requireConversation: core.requireConversation,\n emit: core.emit,\n compactIfNeeded: core.compactIfNeeded,\n selectJourney: routing.selectJourney,\n executeStateMachineTurn: state.executeStateMachineTurn,\n createLifecycleInterruptionResult: core.createLifecycleInterruptionResult,\n retrieveKnowledge: routing.retrieveKnowledge,\n redactUserMessage: core.redactUserMessage,\n redactModelMessages: core.redactModelMessages,\n generateResponseWithTools: core.generateResponseWithTools,\n redactAssistantMessage: core.redactAssistantMessage,\n createCitationSegments: core.createCitationSegments,\n evaluateDelegationCompletion: routing.evaluateDelegationCompletion,\n });\n },\n };\n}\n\nexport type RuntimeKernel = ReturnType<typeof createRuntimeKernel>;\n","import type { ConversationRecord } from \"../storage.js\";\nimport type {\n CommitVoiceTranscriptReferenceInput,\n CommitVoiceTranscriptInput,\n CommitVoiceTranscriptResult,\n RecordVoiceInterruptionInput,\n RuntimeEvent,\n StartVoiceConversationInput,\n StartVoiceResult,\n StartVoiceSegmentInput,\n VoiceChannelSegment,\n VoiceConnection,\n} from \"../types.js\";\nimport type {\n CreateRuntimeConversationInput,\n RuntimeEventEmitter,\n RuntimeOptions,\n HandleUserMessageResult,\n HandleVoiceUserMessageInput,\n HandleVoiceUserMessageResult,\n} from \"./types.js\";\n\nexport async function startRuntimeVoiceConversation<TConversationContext = unknown>(\n options: RuntimeOptions,\n createConversation: <TContext = unknown>(input: CreateRuntimeConversationInput<TContext>) => Promise<ConversationRecord<TContext>>,\n startVoiceSegment: (input: StartVoiceSegmentInput & { app?: unknown }) => Promise<StartVoiceResult>,\n input: StartVoiceConversationInput<TConversationContext>,\n): Promise<StartVoiceResult> {\n const conversation = await createConversation<TConversationContext>({\n ...optionalStringField(\"id\", input.id),\n agentId: input.agentId,\n context: input.context,\n });\n return startVoiceSegment({\n conversationId: conversation.id,\n ...(input.client !== undefined ? { client: input.client } : {}),\n ...(input.app !== undefined ? { app: input.app } : {}),\n });\n}\n\nexport async function startRuntimeVoiceSegment(\n options: RuntimeOptions,\n requireConversation: (conversationId: string) => Promise<ConversationRecord>,\n emit: RuntimeEventEmitter,\n input: StartVoiceSegmentInput,\n): Promise<StartVoiceResult> {\n const conversation = await requireConversation(input.conversationId);\n if (conversation.lifecycle !== \"active\") {\n throw new Error(`Conversation '${conversation.id}' is '${conversation.lifecycle}' and cannot start a voice segment.`);\n }\n await assertNoActiveVoiceSegment(options, conversation.id);\n\n const channelSegment: VoiceChannelSegment = {\n id: createId(\"voice_segment\"),\n conversationId: conversation.id,\n channel: \"voice\",\n startedAt: nowIso(),\n };\n\n const provider = options.agent?.voice?.modelSet?.provider;\n const connection: VoiceConnection = {\n id: createId(\"voice_connection\"),\n channelSegmentId: channelSegment.id,\n status: \"starting\",\n adapter: \"cognidesk-voice-websocket\",\n ...(provider ? { provider } : {}),\n };\n\n const event = await emit({\n conversationId: conversation.id,\n type: \"voice.segment.started\",\n data: {\n channelSegmentId: channelSegment.id,\n connectionId: connection.id,\n adapter: connection.adapter,\n ...(connection.provider ? { provider: connection.provider } : {}),\n },\n });\n\n return {\n conversation,\n channelSegment,\n connection,\n events: [event],\n };\n}\n\nexport async function endRuntimeVoiceSegment(\n emit: RuntimeEventEmitter,\n input: {\n conversationId: string;\n channelSegmentId: string;\n connectionId?: string;\n reason?: string;\n },\n) {\n return emit({\n conversationId: input.conversationId,\n type: \"voice.segment.ended\",\n data: {\n channelSegmentId: input.channelSegmentId,\n ...optionalStringField(\"connectionId\", input.connectionId),\n ...optionalStringField(\"reason\", input.reason),\n },\n });\n}\n\nexport async function commitRuntimeVoiceTranscript(\n emit: RuntimeEventEmitter,\n input: CommitVoiceTranscriptInput,\n): Promise<CommitVoiceTranscriptResult> {\n const started = await emit({\n conversationId: input.conversationId,\n type: \"message.started\",\n data: { role: input.speaker },\n });\n const message = await emit({\n conversationId: input.conversationId,\n type: \"message.completed\",\n data: { text: input.text },\n });\n const event = await emit({\n conversationId: input.conversationId,\n type: \"voice.transcript.committed\",\n data: {\n channelSegmentId: input.channelSegmentId,\n speaker: input.speaker,\n messageEventId: message.id,\n ...optionalStringField(\"recordingReferenceId\", input.recordingReferenceId),\n ...optionalNumberField(\"startedAtMs\", input.startedAtMs),\n ...optionalNumberField(\"endedAtMs\", input.endedAtMs),\n ...optionalStringField(\"transcriptionSource\", input.transcriptionSource),\n ...(input.metadata !== undefined ? { metadata: input.metadata } : {}),\n },\n });\n return { message, event, events: [started, message, event] };\n}\n\nexport async function commitRuntimeVoiceTranscriptReference(\n emit: RuntimeEventEmitter,\n input: CommitVoiceTranscriptReferenceInput,\n): Promise<RuntimeEvent> {\n return emit({\n conversationId: input.conversationId,\n type: \"voice.transcript.committed\",\n data: {\n channelSegmentId: input.channelSegmentId,\n speaker: input.speaker,\n messageEventId: input.messageEventId,\n ...optionalStringField(\"recordingReferenceId\", input.recordingReferenceId),\n ...optionalNumberField(\"startedAtMs\", input.startedAtMs),\n ...optionalNumberField(\"endedAtMs\", input.endedAtMs),\n ...optionalStringField(\"transcriptionSource\", input.transcriptionSource),\n ...(input.metadata !== undefined ? { metadata: input.metadata } : {}),\n },\n });\n}\n\nexport async function handleRuntimeVoiceUserMessage<TTurn = unknown>(\n emit: RuntimeEventEmitter,\n handleUserMessage: (input: {\n conversationId: string;\n text: string;\n channel?: \"chat\" | \"voice\";\n turn?: TTurn;\n app?: unknown;\n signal?: AbortSignal;\n recordUserMessage?: boolean;\n assistantMessageMode?: \"canonical\" | \"intermediate\" | \"none\";\n onAssistantTextDelta?(textDelta: string): Promise<void> | void;\n }) => Promise<HandleUserMessageResult>,\n input: HandleVoiceUserMessageInput<TTurn>,\n): Promise<HandleVoiceUserMessageResult> {\n const result = await handleUserMessage({\n conversationId: input.conversationId,\n text: input.text,\n channel: \"voice\",\n ...(input.turn !== undefined ? { turn: input.turn } : {}),\n ...(input.app !== undefined ? { app: input.app } : {}),\n ...(input.signal ? { signal: input.signal } : {}),\n ...(input.recordUserMessage !== undefined ? { recordUserMessage: input.recordUserMessage } : {}),\n ...(input.assistantMessageMode ? { assistantMessageMode: input.assistantMessageMode } : {}),\n ...(input.onAssistantTextDelta ? { onAssistantTextDelta: input.onAssistantTextDelta } : {}),\n });\n const userMessage = findMessageCompletedForRole(result.events, \"user\");\n const assistantMessage = findMessageCompletedForRole(result.events, \"assistant\");\n const voiceEvents: RuntimeEvent[] = [];\n if (userMessage) {\n voiceEvents.push(await commitRuntimeVoiceTranscriptReference(emit, {\n conversationId: input.conversationId,\n channelSegmentId: input.channelSegmentId,\n speaker: \"user\",\n text: input.text,\n messageEventId: userMessage.id,\n ...optionalStringField(\"recordingReferenceId\", input.recordingReferenceId),\n ...optionalNumberField(\"startedAtMs\", input.startedAtMs),\n ...optionalNumberField(\"endedAtMs\", input.endedAtMs),\n ...optionalStringField(\"transcriptionSource\", input.transcriptionSource),\n ...(input.metadata !== undefined ? { metadata: input.metadata } : {}),\n }));\n }\n if (assistantMessage) {\n voiceEvents.push(await commitRuntimeVoiceTranscriptReference(emit, {\n conversationId: input.conversationId,\n channelSegmentId: input.channelSegmentId,\n speaker: \"assistant\",\n text: result.text,\n messageEventId: assistantMessage.id,\n transcriptionSource: \"cognidesk-runtime\",\n }));\n }\n return {\n ...result,\n events: [...result.events, ...voiceEvents],\n voiceEvents,\n };\n}\n\nexport async function recordRuntimeVoiceInterruption(\n emit: RuntimeEventEmitter,\n input: RecordVoiceInterruptionInput,\n): Promise<RuntimeEvent> {\n return emit({\n conversationId: input.conversationId,\n type: \"voice.interrupted\",\n data: {\n channelSegmentId: input.channelSegmentId,\n ...optionalStringField(\"connectionId\", input.connectionId),\n ...optionalStringField(\"interruptedMessageId\", input.interruptedMessageId),\n ...(input.source ? { source: input.source } : {}),\n ...optionalStringField(\"reason\", input.reason),\n ...optionalStringField(\"recordingReferenceId\", input.recordingReferenceId),\n ...optionalNumberField(\"offsetMs\", input.offsetMs),\n },\n });\n}\n\nexport async function assertNoActiveVoiceSegment(options: RuntimeOptions, conversationId: string) {\n const events = await options.storage.listEvents({ conversationId });\n const active = new Set<string>();\n for (const event of events) {\n if (event.type === \"voice.segment.started\") {\n active.add(event.data.channelSegmentId);\n continue;\n }\n if (event.type === \"voice.segment.ended\" || event.type === \"voice.connection.failed\") {\n active.delete(event.data.channelSegmentId);\n }\n }\n if (active.size > 0) {\n throw new Error(`Conversation '${conversationId}' already has an active voice segment.`);\n }\n}\n\nexport function hasActiveVoiceSegment(events: RuntimeEvent[]) {\n const active = new Set<string>();\n for (const event of events) {\n if (event.type === \"voice.segment.started\") active.add(event.data.channelSegmentId);\n if (event.type === \"voice.segment.ended\" || event.type === \"voice.connection.failed\") {\n active.delete(event.data.channelSegmentId);\n }\n }\n return active.size > 0;\n}\n\nfunction nowIso() {\n return new Date().toISOString();\n}\n\nfunction createId(prefix: string) {\n const random = globalThis.crypto?.randomUUID?.()\n ?? Math.random().toString(36).slice(2);\n return `${prefix}_${random}`;\n}\n\nfunction optionalStringField<TKey extends string>(key: TKey, value: string | undefined) {\n return value ? { [key]: value } as Record<TKey, string> : {};\n}\n\nfunction optionalNumberField<TKey extends string>(key: TKey, value: number | undefined) {\n return value !== undefined ? { [key]: value } as Record<TKey, number> : {};\n}\n\nfunction findMessageCompletedForRole(events: RuntimeEvent[], role: \"user\" | \"assistant\") {\n let activeRole: \"user\" | \"assistant\" | undefined;\n for (const event of events) {\n if (event.type === \"message.started\") {\n activeRole = event.data.role;\n continue;\n }\n if (event.type !== \"message.completed\") continue;\n if (activeRole === role && event.data.intermediate !== true) return event;\n activeRole = undefined;\n }\n return undefined;\n}\n","import { createRuntimeKernel, type RuntimeKernel } from \"./runtime/kernel.js\";\nimport { createRuntimeLogger, runtimeLogger } from \"./logging.js\";\nimport { createPrivacyStorageAdapter } from \"./runtime/privacy.js\";\nimport { type ConversationCompactionSummary } from \"./runtime/schemas.js\";\nimport {\n telemetryAttributes,\n telemetryContentMode,\n telemetrySpanNames,\n withTelemetrySpan,\n} from \"./telemetry.js\";\nimport type {\n ActiveTurn,\n CompactConversationInput,\n CompactConversationResult,\n CreateRuntimeConversationInput,\n EmitCustomEventInput,\n EmitGeneratedPreambleInput,\n EmitGeneratedPreambleResult,\n EmitIntermediateMessageInput,\n EmitJourneyEventInput,\n EmitJourneyEventResult,\n HandleVoiceUserMessageInput,\n HandleVoiceUserMessageResult,\n HandleUserMessageInput,\n HandleUserMessageResult,\n ReplayConversationInput,\n ReplayConversationResult,\n RequestHandoffInput,\n ResumeConversationInput,\n RuntimeOptions,\n SubmitWidgetInput,\n} from \"./runtime/types.js\";\nimport type { JourneyEventDefinition } from \"./definition.js\";\nimport type { ConversationRecord, RuntimeEventInput } from \"./storage.js\";\nimport type {\n CommitVoiceTranscriptInput,\n CommitVoiceTranscriptResult,\n CustomRuntimeEventDefinition,\n RecordVoiceInterruptionInput,\n RuntimeEvent,\n RuntimeSnapshot,\n StartVoiceConversationInput,\n StartVoiceResult,\n StartVoiceSegmentInput,\n} from \"./types.js\";\nimport {\n assertNoActiveVoiceSegment,\n commitRuntimeVoiceTranscript,\n endRuntimeVoiceSegment,\n handleRuntimeVoiceUserMessage,\n recordRuntimeVoiceInterruption,\n startRuntimeVoiceConversation,\n startRuntimeVoiceSegment,\n} from \"./runtime/voice.js\";\n\nexport { conversationCompactionSummarySchema } from \"./runtime/schemas.js\";\nexport type { ConversationCompactionSummary } from \"./runtime/schemas.js\";\nexport type {\n CompactConversationInput,\n CompactConversationResult,\n CreateRuntimeConversationInput,\n EmitCustomEventInput,\n EmitGeneratedPreambleInput,\n EmitGeneratedPreambleResult,\n EmitIntermediateMessageInput,\n EmitJourneyEventInput,\n EmitJourneyEventResult,\n HandleVoiceUserMessageInput,\n HandleVoiceUserMessageResult,\n HandleUserMessageInput,\n HandleUserMessageResult,\n ReplayConversationInput,\n ReplayConversationResult,\n RequestHandoffInput,\n ResumeConversationInput,\n RuntimeOptions,\n SubmitWidgetInput,\n ReplayedMessage,\n ReplayedPrompt,\n} from \"./runtime/types.js\";\nexport type {\n CommitVoiceTranscriptInput,\n CommitVoiceTranscriptReferenceInput,\n CommitVoiceTranscriptResult,\n RecordVoiceInterruptionInput,\n StartVoiceConversationInput,\n StartVoiceResult,\n StartVoiceSegmentInput,\n} from \"./types.js\";\n\nexport class CognideskRuntime {\n private readonly activeTurns = new Map<string, ActiveTurn>();\n private readonly kernel: RuntimeKernel;\n private readonly options: RuntimeOptions;\n\n constructor(options: RuntimeOptions) {\n this.options = {\n ...options,\n storage: createPrivacyStorageAdapter(options.storage, options.privacy),\n logger: options.logger ?? createRuntimeLogger(options),\n };\n this.kernel = createRuntimeKernel(this.options, this.activeTurns);\n }\n\n async initialize() {\n if (telemetryContentMode(this.options) === \"full\") {\n runtimeLogger(this.options).warn(\n \"Cognidesk telemetry content mode is full; message, prompt, tool, and Knowledge content may be exported to OpenTelemetry backends without telemetry redaction.\",\n );\n }\n await this.runtimeOperation(\"initialize\", telemetrySpanNames.runtimeInitialize, {}, () => this.kernel.initialize());\n }\n\n createConversation<TConversationContext = unknown>(\n input: CreateRuntimeConversationInput<TConversationContext>,\n ): Promise<ConversationRecord<TConversationContext>> {\n return this.runtimeOperation(\"create_conversation\", telemetrySpanNames.runtimeCreateConversation, {\n [telemetryAttributes.agentId]: input.agentId,\n }, () => this.kernel.createConversation(input));\n }\n\n emit<TEvent extends RuntimeEventInput>(event: TEvent): Promise<RuntimeEvent> {\n return this.runtimeOperation(\"emit_event\", telemetrySpanNames.runtimeEmitEvent, {\n [telemetryAttributes.conversationId]: event.conversationId,\n \"cognidesk.runtime.event.type\": event.type,\n }, () => this.kernel.emit(event));\n }\n\n emitIntermediateMessage(input: EmitIntermediateMessageInput): Promise<{ events: RuntimeEvent[] }> {\n return this.runtimeOperation(\"emit_intermediate_message\", telemetrySpanNames.runtimeEmitIntermediateMessage, {\n [telemetryAttributes.conversationId]: input.conversationId,\n }, () => this.kernel.emitIntermediateMessage(input));\n }\n\n emitGeneratedPreamble(input: EmitGeneratedPreambleInput): Promise<EmitGeneratedPreambleResult> {\n return this.runtimeOperation(\"emit_generated_preamble\", telemetrySpanNames.runtimeEmitGeneratedPreamble, {\n [telemetryAttributes.conversationId]: input.conversationId,\n }, () => this.kernel.emitGeneratedPreamble(input));\n }\n\n emitCustomEvent<TEvent extends CustomRuntimeEventDefinition>(\n input: EmitCustomEventInput<TEvent>,\n ): Promise<RuntimeEvent> {\n return this.runtimeOperation(\"emit_custom_event\", telemetrySpanNames.runtimeEmitCustomEvent, {\n [telemetryAttributes.conversationId]: input.conversationId,\n \"cognidesk.custom_event.name\": input.event.name,\n }, () => this.kernel.emitCustomEvent(input));\n }\n\n emitJourneyEvent<TEvent extends JourneyEventDefinition>(\n input: EmitJourneyEventInput<TEvent>,\n ): Promise<EmitJourneyEventResult> {\n return this.runtimeOperation(\"emit_journey_event\", telemetrySpanNames.runtimeEmitJourneyEvent, {\n [telemetryAttributes.conversationId]: input.conversationId,\n \"cognidesk.journey_event.name\": input.event.name,\n }, () => this.kernel.emitJourneyEvent(input));\n }\n\n listEvents(conversationId: string, afterOffset?: number) {\n return this.runtimeOperation(\"list_events\", telemetrySpanNames.runtimeListEvents, {\n [telemetryAttributes.conversationId]: conversationId,\n }, () => this.kernel.listEvents(conversationId, afterOffset));\n }\n\n replayConversation(input: ReplayConversationInput): Promise<ReplayConversationResult> {\n return this.runtimeOperation(\"replay_conversation\", telemetrySpanNames.runtimeReplayConversation, {\n [telemetryAttributes.conversationId]: input.conversationId,\n }, () => this.kernel.replayConversation(input));\n }\n\n submitWidget(input: SubmitWidgetInput): Promise<RuntimeEvent> {\n return this.runtimeOperation(\"submit_widget\", telemetrySpanNames.runtimeSubmitWidget, {\n [telemetryAttributes.conversationId]: input.conversationId,\n \"cognidesk.widget.kind\": input.widgetKind,\n }, () => this.kernel.submitWidget(input));\n }\n\n getSnapshot(conversationId: string): Promise<RuntimeSnapshot | null> {\n return this.runtimeOperation(\"get_snapshot\", telemetrySpanNames.runtimeGetSnapshot, {\n [telemetryAttributes.conversationId]: conversationId,\n }, () => this.kernel.getSnapshot(conversationId));\n }\n\n handleUserMessage<TTurn = unknown>(\n input: HandleUserMessageInput<TTurn>,\n ): Promise<HandleUserMessageResult> {\n return this.runtimeOperation(\"handle_user_message\", telemetrySpanNames.runtimeHandleUserMessage, {\n [telemetryAttributes.conversationId]: input.conversationId,\n }, async () => {\n await assertNoActiveVoiceSegment(this.options, input.conversationId);\n return this.kernel.handleUserMessage(input);\n });\n }\n\n handleVoiceUserMessage<TTurn = unknown>(\n input: HandleVoiceUserMessageInput<TTurn>,\n ): Promise<HandleVoiceUserMessageResult> {\n return this.runtimeOperation(\"handle_voice_user_message\", telemetrySpanNames.runtimeHandleUserMessage, {\n [telemetryAttributes.conversationId]: input.conversationId,\n }, () => handleRuntimeVoiceUserMessage(\n this.kernel.emit,\n (turnInput) => this.kernel.handleUserMessage(turnInput),\n input,\n ));\n }\n\n startVoiceConversation<TConversationContext = unknown>(\n input: StartVoiceConversationInput<TConversationContext>,\n ): Promise<StartVoiceResult> {\n return this.runtimeOperation(\"start_voice_conversation\", telemetrySpanNames.runtimeEmitEvent, {\n [telemetryAttributes.agentId]: input.agentId,\n }, () => startRuntimeVoiceConversation(\n this.options,\n (conversationInput) => this.kernel.createConversation(conversationInput),\n (segmentInput) => startRuntimeVoiceSegment(\n this.options,\n this.kernel.requireConversation,\n this.kernel.emit,\n segmentInput,\n ),\n input,\n ));\n }\n\n startVoiceSegment(input: StartVoiceSegmentInput): Promise<StartVoiceResult> {\n return this.runtimeOperation(\"start_voice_segment\", telemetrySpanNames.runtimeEmitEvent, {\n [telemetryAttributes.conversationId]: input.conversationId,\n }, () => startRuntimeVoiceSegment(\n this.options,\n this.kernel.requireConversation,\n this.kernel.emit,\n input,\n ));\n }\n\n endVoiceSegment(input: {\n conversationId: string;\n channelSegmentId: string;\n connectionId?: string;\n reason?: string;\n }): Promise<RuntimeEvent> {\n return this.runtimeOperation(\"end_voice_segment\", telemetrySpanNames.runtimeEmitEvent, {\n [telemetryAttributes.conversationId]: input.conversationId,\n }, () => endRuntimeVoiceSegment(this.kernel.emit, input));\n }\n\n commitVoiceTranscript(input: CommitVoiceTranscriptInput): Promise<CommitVoiceTranscriptResult> {\n return this.runtimeOperation(\"commit_voice_transcript\", telemetrySpanNames.runtimeEmitEvent, {\n [telemetryAttributes.conversationId]: input.conversationId,\n }, () => commitRuntimeVoiceTranscript(this.kernel.emit, input));\n }\n\n recordVoiceInterruption(input: RecordVoiceInterruptionInput): Promise<RuntimeEvent> {\n return this.runtimeOperation(\"record_voice_interruption\", telemetrySpanNames.runtimeEmitEvent, {\n [telemetryAttributes.conversationId]: input.conversationId,\n }, () => recordRuntimeVoiceInterruption(this.kernel.emit, input));\n }\n\n closeConversation(conversationId: string, reason?: string) {\n return this.runtimeOperation(\"close_conversation\", telemetrySpanNames.runtimeCloseConversation, {\n [telemetryAttributes.conversationId]: conversationId,\n }, () => this.kernel.closeConversation(conversationId, reason));\n }\n\n requestHandoff(input: RequestHandoffInput) {\n return this.runtimeOperation(\"request_handoff\", telemetrySpanNames.runtimeRequestHandoff, {\n [telemetryAttributes.conversationId]: input.conversationId,\n }, () => this.kernel.requestHandoff(input));\n }\n\n resumeConversation(input: ResumeConversationInput) {\n return this.runtimeOperation(\"resume_conversation\", telemetrySpanNames.runtimeResumeConversation, {\n [telemetryAttributes.conversationId]: input.conversationId,\n }, () => this.kernel.resumeConversation(input));\n }\n\n compactConversation<TSummary = ConversationCompactionSummary>(\n input: CompactConversationInput,\n ): Promise<CompactConversationResult<TSummary>> {\n return this.runtimeOperation(\"compact_conversation\", telemetrySpanNames.runtimeCompactConversation, {\n [telemetryAttributes.conversationId]: input.conversationId,\n }, () => this.kernel.compactConversation<TSummary>(input));\n }\n\n private runtimeOperation<T>(\n operation: string,\n spanName: string,\n attributes: Record<string, string | number | boolean | undefined>,\n run: () => T | Promise<T>,\n ): Promise<Awaited<T>> {\n return withTelemetrySpan(this.options, {\n name: spanName,\n attributes: {\n ...attributes,\n [telemetryAttributes.operation]: operation,\n ...(this.options.agent ? { [telemetryAttributes.agentId]: this.options.agent.id } : {}),\n },\n metric: {\n kind: \"runtime\",\n attributes: {\n [telemetryAttributes.operation]: operation,\n ...(this.options.agent ? { [telemetryAttributes.agentId]: this.options.agent.id } : {}),\n },\n },\n }, () => run() as Awaited<T>);\n }\n}\n\nexport function createRuntime(options: RuntimeOptions) {\n return new CognideskRuntime(options);\n}\n"],"mappings":"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","names":["context","context","requireConversationRecord","event","requireConversationRecord","processWidgetSubmission","validateWidgetSubmission","context","z","z","context","tool","requireConversationRecord","applyBuiltInLifecycleTool","z","selected","isRecord","isRecord","generateTextWithTrace","emitGuardDenial","z","context","z","z","context","isRecord","context","z","toolRun","context","z","z","pushUnique","pushUnique","z","widget","state","context","z","branchStates","confirmed","randomUUID","randomUUID","tool","handleUserMessage"]}
|