@ai-matrx/agents 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/README.md +46 -5
- package/dist/index.cjs +385 -31
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +381 -32
- package/dist/index.js.map +1 -1
- package/dist/projection/request.cjs +1 -1
- package/dist/projection/request.cjs.map +1 -1
- package/dist/projection/request.js +1 -1
- package/dist/projection/request.js.map +1 -1
- package/dist/projection/workflow.cjs +245 -0
- package/dist/projection/workflow.cjs.map +1 -0
- package/dist/projection/workflow.d.cts +61 -0
- package/dist/projection/workflow.d.ts +61 -0
- package/dist/projection/workflow.js +241 -0
- package/dist/projection/workflow.js.map +1 -0
- package/dist/stream/ndjson.cjs +143 -30
- package/dist/stream/ndjson.cjs.map +1 -1
- package/dist/stream/ndjson.d.cts +42 -7
- package/dist/stream/ndjson.d.ts +42 -7
- package/dist/stream/ndjson.js +142 -31
- package/dist/stream/ndjson.js.map +1 -1
- package/package.json +11 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../stream/ndjson.ts","../presentation/result.ts","../projection/request.ts"],"names":["isRecord","changed","output"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Canonical AI Matrx NDJSON wire kernel.\n *\n * This module is deliberately independent of React, Redux, Next.js, Supabase,\n * and generated application types. Every Matrx client uses it to turn the\n * backend's byte stream into the same normalized `{ event, data }` envelopes.\n * Host runtimes remain responsible for HTTP/auth errors and for deciding what\n * each event means in their state model.\n */\n\nexport interface MatrxStreamEnvelope<TData = unknown> {\n event: string;\n data: TData;\n}\n\nexport interface MatrxNdjsonIssue {\n line: string;\n error: unknown;\n}\n\nexport interface ReadMatrxNdjsonOptions {\n signal?: AbortSignal;\n /** Malformed JSON is non-fatal, but it must never disappear silently. */\n onMalformedLine?: (issue: MatrxNdjsonIssue) => void;\n /** Valid JSON with no recognized Matrx event envelope is also non-fatal. */\n onUnknownEnvelope?: (value: unknown) => void;\n}\n\ntype QueueItem =\n | { kind: \"event\"; value: MatrxStreamEnvelope }\n | { kind: \"error\"; error: unknown }\n | { kind: \"done\" };\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Normalize both supported Matrx wire shapes:\n *\n * - full: `{ \"event\": \"chunk\", \"data\": { \"text\": \"...\" } }`\n * - compact chunk: `{ \"e\": \"c\", \"t\": \"...\" }`\n * - compact reasoning: `{ \"e\": \"r\", \"t\": \"...\" }`\n */\nexport function normalizeMatrxStreamEnvelope(\n value: unknown,\n): MatrxStreamEnvelope | null {\n if (!isRecord(value)) return null;\n\n if (typeof value.event === \"string\") {\n return { event: value.event, data: value.data };\n }\n if (value.e === \"c\" && typeof value.t === \"string\") {\n return { event: \"chunk\", data: { text: value.t } };\n }\n if (value.e === \"r\" && typeof value.t === \"string\") {\n return { event: \"reasoning_chunk\", data: { text: value.t } };\n }\n return null;\n}\n\n/**\n * Read and normalize a Matrx NDJSON response body without applying consumer\n * backpressure to the network reader. The background read-ahead is important:\n * large tool payloads must keep draining even while React or another host is\n * processing the previous event.\n */\nexport async function* readMatrxNdjsonStream(\n body: ReadableStream<Uint8Array>,\n options: ReadMatrxNdjsonOptions = {},\n): AsyncGenerator<MatrxStreamEnvelope, void, undefined> {\n const queue: QueueItem[] = [];\n let wakeConsumer: (() => void) | null = null;\n let readerFinished = false;\n\n const enqueue = (item: QueueItem): void => {\n queue.push(item);\n const wake = wakeConsumer;\n wakeConsumer = null;\n wake?.();\n };\n\n const reader = body.getReader();\n const decoder = new TextDecoder();\n\n const parseLine = (line: string): void => {\n const trimmed = line.trim();\n if (!trimmed) return;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(trimmed) as unknown;\n } catch (error) {\n options.onMalformedLine?.({ line: trimmed, error });\n return;\n }\n\n const envelope = normalizeMatrxStreamEnvelope(parsed);\n if (envelope) {\n enqueue({ kind: \"event\", value: envelope });\n } else {\n options.onUnknownEnvelope?.(parsed);\n }\n };\n\n const onAbort = (): void => {\n void reader.cancel(options.signal?.reason).catch(() => undefined);\n };\n options.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n const readerPromise = (async (): Promise<void> => {\n let buffer = \"\";\n try {\n while (!options.signal?.aborted) {\n const { value, done } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n for (const line of lines) parseLine(line);\n }\n\n buffer += decoder.decode();\n if (!options.signal?.aborted && buffer.trim()) parseLine(buffer);\n } catch (error) {\n const aborted =\n options.signal?.aborted ||\n (error instanceof Error && error.name === \"AbortError\");\n if (!aborted) enqueue({ kind: \"error\", error });\n } finally {\n readerFinished = true;\n reader.releaseLock();\n enqueue({ kind: \"done\" });\n }\n })();\n\n try {\n while (true) {\n if (queue.length === 0) {\n await new Promise<void>((resolve) => {\n wakeConsumer = resolve;\n });\n }\n\n const item = queue.shift();\n if (!item || item.kind === \"done\") return;\n if (item.kind === \"error\") throw item.error;\n yield item.value;\n }\n } finally {\n options.signal?.removeEventListener(\"abort\", onAbort);\n if (!readerFinished) {\n await reader.cancel().catch(() => undefined);\n }\n await readerPromise;\n }\n}\n","/**\n * Creator-facing projection of an agent execution result.\n *\n * Provider reasoning blocks and their signatures are replay material, not\n * workflow data. The execution engine must retain them so a later turn can be\n * continued correctly, but no result renderer, JSON tab, clipboard export, or\n * Content IR classifier should receive them as displayable values.\n *\n * This is a pure copy-on-write projection: values without private material\n * keep their original reference, while affected branches are cloned. Never\n * feed the projected value back into execution or persistence.\n */\n\nconst PRIVATE_REASONING_TYPES: ReadonlySet<string> = new Set([\n \"thinking\",\n \"redacted_thinking\",\n \"reasoning\",\n]);\n\nconst PRIVATE_PROVIDER_KEYS: ReadonlySet<string> = new Set([\n \"thought_signature\",\n \"thoughtSignature\",\n \"google_thought_signature\",\n \"anthropic_signature\",\n \"encrypted_content\",\n \"signature_encoding\",\n]);\n\nconst SIGNATURE_PROVIDERS: ReadonlySet<string> = new Set([\n \"anthropic\",\n \"google\",\n \"openai\",\n]);\n\nconst OPAQUE_SIGNATURE_MIN_LENGTH = 200;\nconst OMIT = Symbol(\"omit-provider-private-value\");\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isPrivateReasoningBlock(value: Record<string, unknown>): boolean {\n return (\n typeof value.type === \"string\" &&\n PRIVATE_REASONING_TYPES.has(value.type.toLowerCase())\n );\n}\n\nfunction isPrivateProviderKey(\n key: string,\n value: unknown,\n parent: Record<string, unknown>,\n): boolean {\n if (PRIVATE_PROVIDER_KEYS.has(key)) return true;\n if (key !== \"signature\") return false;\n\n const provider =\n typeof parent.provider === \"string\" ? parent.provider.toLowerCase() : \"\";\n return (\n \"signature_encoding\" in parent ||\n SIGNATURE_PROVIDERS.has(provider) ||\n (typeof value === \"string\" && value.length >= OPAQUE_SIGNATURE_MIN_LENGTH)\n );\n}\n\nfunction project(value: unknown): unknown | typeof OMIT {\n if (Array.isArray(value)) {\n let changed = false;\n const output: unknown[] = [];\n for (const item of value) {\n const projected = project(item);\n if (projected === OMIT) {\n changed = true;\n continue;\n }\n if (projected !== item) changed = true;\n output.push(projected);\n }\n return changed ? output : value;\n }\n\n if (!isRecord(value)) return value;\n if (isPrivateReasoningBlock(value)) return OMIT;\n\n let changed = false;\n const output: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(value)) {\n if (isPrivateProviderKey(key, child, value)) {\n changed = true;\n continue;\n }\n const projected = project(child);\n if (projected === OMIT) {\n changed = true;\n continue;\n }\n if (projected !== child) changed = true;\n output[key] = projected;\n }\n return changed ? output : value;\n}\n\n/**\n * Remove provider-private reasoning material from a value crossing a\n * Creator-facing presentation or export boundary.\n */\nexport function projectAgentResultForDisplay(value: unknown): unknown {\n const projected = project(value);\n return projected === OMIT ? null : projected;\n}\n","export type AgentProjectionStatus =\n | \"pending\"\n | \"streaming\"\n | \"awaiting-tools\"\n | \"complete\"\n | \"error\"\n | \"cancelled\";\n\nexport interface AgentProjectionOperation {\n operationId: string;\n operation: string;\n parentOperationId: string | null;\n status: \"active\" | \"success\" | \"failed\" | \"cancelled\";\n metadata: Record<string, unknown> | null;\n result: Record<string, unknown> | null;\n}\n\nexport interface AgentProjectionTool {\n callId: string;\n toolName: string;\n status:\n | \"started\"\n | \"progress\"\n | \"step\"\n | \"preview\"\n | \"completed\"\n | \"error\"\n | \"delegated\";\n message: string | null;\n data: Record<string, unknown> | null;\n}\n\nexport interface AgentProjectionRenderBlock {\n blockId: string;\n blockIndex: number;\n type: string;\n status: \"streaming\" | \"complete\" | \"error\";\n content: string | null;\n data: Record<string, unknown> | null;\n metadata: Record<string, unknown> | null;\n}\n\nexport interface AgentRequestProjection {\n requestId: string;\n conversationId: string | null;\n status: AgentProjectionStatus;\n answer: string;\n reasoning: string;\n reasoningActive: boolean;\n phase: string | null;\n phaseHistory: string[];\n operations: Record<string, AgentProjectionOperation>;\n tools: Record<string, AgentProjectionTool>;\n renderBlocks: Record<string, AgentProjectionRenderBlock>;\n renderBlockOrder: string[];\n completion: Record<string, unknown> | null;\n error: Record<string, unknown> | null;\n lastTransportSeq: number;\n eventCount: number;\n}\n\nexport interface AgentProjectionEvent {\n event: string;\n data?: unknown;\n stream_seq?: number;\n}\n\nconst asRecord = (value: unknown): Record<string, unknown> =>\n value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n\nconst asString = (value: unknown): string | null =>\n typeof value === \"string\" ? value : null;\n\nconst asNumber = (value: unknown): number | null =>\n typeof value === \"number\" && Number.isFinite(value) ? value : null;\n\nexport function createAgentRequestProjection(input: {\n requestId: string;\n conversationId?: string | null;\n}): AgentRequestProjection {\n return {\n requestId: input.requestId,\n conversationId: input.conversationId ?? null,\n status: \"pending\",\n answer: \"\",\n reasoning: \"\",\n reasoningActive: false,\n phase: null,\n phaseHistory: [],\n operations: {},\n tools: {},\n renderBlocks: {},\n renderBlockOrder: [],\n completion: null,\n error: null,\n lastTransportSeq: 0,\n eventCount: 0,\n };\n}\n\nfunction toolStatus(event: string): AgentProjectionTool[\"status\"] {\n switch (event) {\n case \"tool_started\":\n return \"started\";\n case \"tool_step\":\n return \"step\";\n case \"tool_result_preview\":\n return \"preview\";\n case \"tool_completed\":\n return \"completed\";\n case \"tool_error\":\n return \"error\";\n case \"tool_delegated\":\n return \"delegated\";\n default:\n return \"progress\";\n }\n}\n\nexport function projectAgentEvent(\n current: AgentRequestProjection,\n event: AgentProjectionEvent,\n): AgentRequestProjection {\n const streamSeq = asNumber(event.stream_seq);\n if (streamSeq !== null && streamSeq <= current.lastTransportSeq) return current;\n\n const data = asRecord(event.data);\n const next: AgentRequestProjection = {\n ...current,\n status: current.status === \"pending\" ? \"streaming\" : current.status,\n lastTransportSeq: streamSeq ?? current.lastTransportSeq,\n eventCount: current.eventCount + 1,\n };\n\n switch (event.event) {\n case \"chunk\": {\n const text = asString(data.text);\n return text === null ? next : { ...next, answer: current.answer + text };\n }\n case \"reasoning_chunk\": {\n const text = asString(data.text);\n return text === null\n ? next\n : {\n ...next,\n reasoning: current.reasoning + text,\n reasoningActive: true,\n };\n }\n case \"reasoning\":\n return {\n ...next,\n reasoningActive: data.state === \"started\",\n };\n case \"phase\": {\n const phase = asString(data.phase);\n if (phase === null) return next;\n return {\n ...next,\n phase,\n phaseHistory: [...current.phaseHistory, phase],\n };\n }\n case \"init\": {\n const operationId = asString(data.operation_id);\n const operation = asString(data.operation);\n if (operationId === null || operation === null) return next;\n return {\n ...next,\n operations: {\n ...current.operations,\n [operationId]: {\n operationId,\n operation,\n parentOperationId: asString(data.parent_operation_id),\n status: \"active\",\n metadata: Object.keys(asRecord(data.metadata)).length\n ? asRecord(data.metadata)\n : null,\n result: null,\n },\n },\n };\n }\n case \"completion\": {\n const operationId = asString(data.operation_id);\n const operation = asString(data.operation);\n const rawStatus = asString(data.status);\n const status: AgentProjectionOperation[\"status\"] =\n rawStatus === \"failed\" || rawStatus === \"cancelled\"\n ? rawStatus\n : \"success\";\n const result = asRecord(data.result);\n const operations = operationId\n ? {\n ...current.operations,\n [operationId]: {\n ...(current.operations[operationId] ?? {\n operationId,\n operation: operation ?? \"unknown\",\n parentOperationId: null,\n metadata: null,\n }),\n status,\n result,\n },\n }\n : current.operations;\n if (operation === \"user_request\") {\n return {\n ...next,\n operations,\n completion: data,\n status:\n status === \"success\"\n ? \"complete\"\n : status === \"cancelled\"\n ? \"cancelled\"\n : \"error\",\n };\n }\n return { ...next, operations };\n }\n case \"tool_event\": {\n const callId = asString(data.call_id);\n const toolName = asString(data.tool_name);\n const lifecycle = asString(data.event);\n if (callId === null || toolName === null || lifecycle === null) return next;\n const status = toolStatus(lifecycle);\n return {\n ...next,\n status:\n status === \"started\" || status === \"delegated\"\n ? \"awaiting-tools\"\n : status === \"completed\" || status === \"error\"\n ? \"streaming\"\n : next.status,\n tools: {\n ...current.tools,\n [callId]: {\n callId,\n toolName,\n status,\n message: asString(data.message),\n data: Object.keys(asRecord(data.data)).length ? asRecord(data.data) : null,\n },\n },\n };\n }\n case \"render_block\": {\n const blockId = asString(data.blockId);\n const blockIndex = asNumber(data.blockIndex);\n const type = asString(data.type);\n if (blockId === null || blockIndex === null || type === null) return next;\n const alreadyKnown = Object.hasOwn(current.renderBlocks, blockId);\n return {\n ...next,\n renderBlocks: {\n ...current.renderBlocks,\n [blockId]: {\n blockId,\n blockIndex,\n type,\n status:\n data.status === \"complete\" || data.status === \"error\"\n ? data.status\n : \"streaming\",\n content: asString(data.content),\n data: Object.keys(asRecord(data.data)).length ? asRecord(data.data) : null,\n metadata: Object.keys(asRecord(data.metadata)).length\n ? asRecord(data.metadata)\n : null,\n },\n },\n renderBlockOrder: alreadyKnown\n ? current.renderBlockOrder\n : [...current.renderBlockOrder, blockId],\n };\n }\n case \"error\":\n return { ...next, status: \"error\", error: data };\n case \"end\":\n return {\n ...next,\n status:\n current.status === \"error\" || current.status === \"cancelled\"\n ? current.status\n : \"complete\",\n reasoningActive: false,\n };\n case \"data\": {\n const conversationId =\n data.type === \"conversation_id\" ? asString(data.conversation_id) : null;\n return conversationId === null ? next : { ...next, conversationId };\n }\n default:\n return next;\n }\n}\n\nexport function projectAgentEvents(\n initial: AgentRequestProjection,\n events: readonly AgentProjectionEvent[],\n): AgentRequestProjection {\n return events.reduce(projectAgentEvent, initial);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../stream/ndjson.ts","../presentation/result.ts","../projection/request.ts","../projection/workflow.ts"],"names":["isRecord","changed","output","asRecord","asString","asNumber"],"mappings":";AAgEO,IAAM,+BAAA,GAAkC;AAE/C,SAAS,SAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AASO,SAAS,6BACd,KAAA,EAC4B;AAC5B,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,IAAA;AAE7B,EAAA,IAAI,OAAO,KAAA,CAAM,KAAA,KAAU,QAAA,EAAU;AACnC,IAAA,MAAM,SAAA,GACJ,OAAO,KAAA,CAAM,UAAA,KAAe,QAAA,IAAY,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,UAAU,CAAA,GACpE,KAAA,CAAM,UAAA,GACN,MAAA;AACN,IAAA,OAAO;AAAA,MACL,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,GAAI,SAAA,KAAc,MAAA,GAAY,EAAC,GAAI,EAAE,YAAY,SAAA;AAAU,KAC7D;AAAA,EACF;AACA,EAAA,IAAI,MAAM,CAAA,KAAM,GAAA,IAAO,OAAO,KAAA,CAAM,MAAM,QAAA,EAAU;AAClD,IAAA,OAAO,EAAE,OAAO,OAAA,EAAS,IAAA,EAAM,EAAE,IAAA,EAAM,KAAA,CAAM,GAAE,EAAE;AAAA,EACnD;AACA,EAAA,IAAI,MAAM,CAAA,KAAM,GAAA,IAAO,OAAO,KAAA,CAAM,MAAM,QAAA,EAAU;AAClD,IAAA,OAAO,EAAE,OAAO,iBAAA,EAAmB,IAAA,EAAM,EAAE,IAAA,EAAM,KAAA,CAAM,GAAE,EAAE;AAAA,EAC7D;AACA,EAAA,OAAO,IAAA;AACT;AAOO,SAAS,uBAAA,CACd,OAAA,GAAoC,EAAC,EAClB;AACnB,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,IAAI,UAAA,GAAa,CAAA;AACjB,EAAA,IAAI,QAAA,GAAW,KAAA;AAEf,EAAA,MAAM,aAAa,MAAY;AAC7B,IAAA,IAAI,QAAA,EAAU,MAAM,IAAI,KAAA,CAAM,yCAAyC,CAAA;AAAA,EACzE,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,CAChB,IAAA,EACA,YAAA,KAC+B;AAC/B,IAAA,MAAM,oBAAoB,EAAE,UAAA;AAC5B,IAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,IAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAErB,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,IAC7B,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,eAAA,GAAkB;AAAA,QACxB,IAAA,EAAM,OAAA;AAAA,QACN,KAAA;AAAA,QACA,UAAA,EAAY,iBAAA;AAAA,QACZ;AAAA,OACD,CAAA;AACD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,QAAA,GAAW,6BAA6B,MAAM,CAAA;AACpD,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,OAAA,CAAQ,oBAAoB,MAAM,CAAA;AAClC,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAA,CAAQ,eAAA,GAAkB;AAAA,MACxB,GAAA,EAAK,MAAA;AAAA,MACL,QAAA;AAAA,MACA,IAAA,EAAM,OAAA;AAAA,MACN,UAAA,EAAY,iBAAA;AAAA,MACZ;AAAA,KACD,CAAA;AACD,IAAA,OAAO,QAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,QAAA,KAA4C;AACnE,IAAA,MAAA,IAAU,QAAA;AACV,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,IAAA,MAAA,GAAS,KAAA,CAAM,KAAI,IAAK,EAAA;AACxB,IAAA,MAAM,YAAmC,EAAC;AAC1C,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,QAAA,GAAW,SAAA,CAAU,IAAA,EAAM,KAAK,CAAA;AACtC,MAAA,IAAI,QAAA,EAAU,SAAA,CAAU,IAAA,CAAK,QAAQ,CAAA;AAAA,IACvC;AACA,IAAA,OAAO,SAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,SAAS,QAAA,EAAU;AACjB,MAAA,UAAA,EAAW;AAEX,MAAA,OAAO,eAAA,CAAgB,OAAA,CAAQ,MAAA,EAAO,GAAI,QAAQ,CAAA;AAAA,IACpD,CAAA;AAAA,IACA,UAAU,QAAA,EAAU;AAClB,MAAA,UAAA,EAAW;AACX,MAAA,OAAO,eAAA,CAAgB,QAAQ,MAAA,CAAO,QAAA,EAAU,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA;AAAA,IACnE,CAAA;AAAA,IACA,MAAA,GAAS;AACP,MAAA,UAAA,EAAW;AACX,MAAA,QAAA,GAAW,IAAA;AACX,MAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,OAAA,CAAQ,MAAA,EAAQ,CAAA;AAClD,MAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,QAAA,MAAM,QAAA,GAAW,SAAA,CAAU,MAAA,EAAQ,IAAI,CAAA;AACvC,QAAA,MAAA,GAAS,EAAA;AACT,QAAA,IAAI,QAAA,EAAU,SAAA,CAAU,IAAA,CAAK,QAAQ,CAAA;AAAA,MACvC;AACA,MAAA,OAAO,SAAA;AAAA,IACT;AAAA,GACF;AACF;AAEA,SAAS,eAAe,KAAA,EAAmC;AACzD,EAAA,MAAM,QAAQ,KAAA,IAAS,+BAAA;AACvB,EAAA,IAAI,CAAC,MAAA,CAAO,aAAA,CAAc,KAAK,CAAA,IAAK,QAAQ,CAAA,EAAG;AAC7C,IAAA,MAAM,IAAI,WAAW,8CAA8C,CAAA;AAAA,EACrE;AACA,EAAA,OAAO,KAAA;AACT;AAQA,gBAAuB,qBAAA,CACrB,IAAA,EACA,OAAA,GAAkC,EAAC,EACmB;AACtD,EAAA,MAAM,YAAA,GAAe,cAAA,CAAe,OAAA,CAAQ,YAAY,CAAA;AACxD,EAAA,MAAM,QAAqB,EAAC;AAC5B,EAAA,IAAI,gBAAA,GAAmB,CAAA;AACvB,EAAA,IAAI,YAAA,GAAoC,IAAA;AACxC,EAAA,IAAI,YAAA,GAAoC,IAAA;AACxC,EAAA,IAAI,cAAA,GAAiB,KAAA;AACrB,EAAA,IAAI,cAAA,GAAiB,KAAA;AAErB,EAAA,MAAM,sBAAsB,MAAY;AACtC,IAAA,MAAM,IAAA,GAAO,YAAA;AACb,IAAA,YAAA,GAAe,IAAA;AACf,IAAA,IAAA,IAAO;AAAA,EACT,CAAA;AACA,EAAA,MAAM,sBAAsB,MAAY;AACtC,IAAA,MAAM,IAAA,GAAO,YAAA;AACb,IAAA,YAAA,GAAe,IAAA;AACf,IAAA,IAAA,IAAO;AAAA,EACT,CAAA;AACA,EAAA,MAAM,eAAA,GAAkB,CAAC,IAAA,KAA0B;AACjD,IAAA,IAAI,cAAA,EAAgB;AACpB,IAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AACf,IAAA,mBAAA,EAAoB;AAAA,EACtB,CAAA;AACA,EAAA,MAAM,YAAA,GAAe,OAAO,KAAA,KAAiD;AAC3E,IAAA,OACE,oBAAoB,YAAA,IACpB,CAAC,kBACD,CAAC,OAAA,CAAQ,QAAQ,OAAA,EACjB;AACA,MAAA,MAAM,IAAI,OAAA,CAAc,CAAC,OAAA,KAAY;AACnC,QAAA,YAAA,GAAe,OAAA;AAAA,MACjB,CAAC,CAAA;AAAA,IACH;AACA,IAAA,IAAI,cAAA,IAAkB,OAAA,CAAQ,MAAA,EAAQ,OAAA,EAAS,OAAO,KAAA;AACtD,IAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,OAAA,EAAS,OAAO,CAAA;AACnC,IAAA,gBAAA,IAAoB,CAAA;AACpB,IAAA,mBAAA,EAAoB;AACpB,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AACA,EAAA,MAAM,sBAAsB,YAA8B;AACxD,IAAA,OACE,oBAAoB,YAAA,IACpB,CAAC,kBACD,CAAC,OAAA,CAAQ,QAAQ,OAAA,EACjB;AACA,MAAA,MAAM,IAAI,OAAA,CAAc,CAAC,OAAA,KAAY;AACnC,QAAA,YAAA,GAAe,OAAA;AAAA,MACjB,CAAC,CAAA;AAAA,IACH;AACA,IAAA,OAAO,CAAC,cAAA,IAAkB,CAAC,OAAA,CAAQ,MAAA,EAAQ,OAAA;AAAA,EAC7C,CAAA;AAEA,EAAA,MAAM,MAAA,GAAS,KAAK,SAAA,EAAU;AAC9B,EAAA,MAAM,MAAA,GAAS,wBAAwB,OAAO,CAAA;AAE9C,EAAA,MAAM,UAAU,MAAY;AAC1B,IAAA,mBAAA,EAAoB;AACpB,IAAA,mBAAA,EAAoB;AACpB,IAAA,KAAK,MAAA,CAAO,OAAO,OAAA,CAAQ,MAAA,EAAQ,MAAM,CAAA,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAAA,EAClE,CAAA;AACA,EAAA,OAAA,CAAQ,QAAQ,gBAAA,CAAiB,OAAA,EAAS,SAAS,EAAE,IAAA,EAAM,MAAM,CAAA;AACjE,EAAA,IAAI,OAAA,CAAQ,MAAA,EAAQ,OAAA,EAAS,OAAA,EAAQ;AAErC,EAAA,MAAM,iBAAiB,YAA2B;AAChD,IAAA,IAAI;AACF,MAAA,OAAO,CAAC,OAAA,CAAQ,MAAA,EAAQ,OAAA,IAAW,CAAC,cAAA,EAAgB;AAClD,QAAA,IAAI,CAAE,MAAM,mBAAA,EAAoB,EAAI;AACpC,QAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAK,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,QAAA,IAAI,IAAA,EAAM;AACV,QAAA,KAAA,MAAW,QAAA,IAAY,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,EAAG;AAC9C,UAAA,IAAI,CAAE,MAAM,YAAA,CAAa,QAAQ,CAAA,EAAI;AAAA,QACvC;AAAA,MACF;AAEA,MAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,EAAQ,OAAA,IAAW,CAAC,cAAA,EAAgB;AAC/C,QAAA,KAAA,MAAW,QAAA,IAAY,MAAA,CAAO,MAAA,EAAO,EAAG;AACtC,UAAA,IAAI,CAAE,MAAM,YAAA,CAAa,QAAQ,CAAA,EAAI;AAAA,QACvC;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,OAAA,GACJ,QAAQ,MAAA,EAAQ,OAAA,IAChB,kBACC,KAAA,YAAiB,KAAA,IAAS,MAAM,IAAA,KAAS,YAAA;AAC5C,MAAA,IAAI,CAAC,OAAA,EAAS,eAAA,CAAgB,EAAE,IAAA,EAAM,OAAA,EAAS,OAAO,CAAA;AAAA,IACxD,CAAA,SAAE;AACA,MAAA,cAAA,GAAiB,IAAA;AACjB,MAAA,MAAA,CAAO,WAAA,EAAY;AACnB,MAAA,eAAA,CAAgB,EAAE,IAAA,EAAM,MAAA,EAAQ,CAAA;AAAA,IAClC;AAAA,EACF,CAAA,GAAG;AAEH,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,QAAA,IAAI,OAAA,CAAQ,MAAA,EAAQ,OAAA,IAAW,cAAA,EAAgB;AAC/C,QAAA,MAAM,IAAI,OAAA,CAAc,CAAC,OAAA,KAAY;AACnC,UAAA,YAAA,GAAe,OAAA;AAAA,QACjB,CAAC,CAAA;AAAA,MACH;AAEA,MAAA,MAAM,IAAA,GAAO,MAAM,KAAA,EAAM;AACzB,MAAA,IAAI,IAAA,EAAM,IAAA,KAAS,OAAA,EAAS,gBAAA,IAAoB,CAAA;AAChD,MAAA,mBAAA,EAAoB;AACpB,MAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,IAAA,KAAS,MAAA,EAAQ;AACnC,MAAA,IAAI,IAAA,CAAK,IAAA,KAAS,OAAA,EAAS,MAAM,IAAA,CAAK,KAAA;AACtC,MAAA,MAAM,IAAA,CAAK,KAAA;AAAA,IACb;AAAA,EACF,CAAA,SAAE;AACA,IAAA,cAAA,GAAiB,IAAA;AACjB,IAAA,mBAAA,EAAoB;AACpB,IAAA,mBAAA,EAAoB;AACpB,IAAA,OAAA,CAAQ,MAAA,EAAQ,mBAAA,CAAoB,OAAA,EAAS,OAAO,CAAA;AACpD,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,MAAA,CAAO,MAAA,EAAO,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAAA,IAC7C;AACA,IAAA,MAAM,aAAA;AAAA,EACR;AACF;;;AC1TA,IAAM,uBAAA,uBAAmD,GAAA,CAAI;AAAA,EAC3D,UAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,qBAAA,uBAAiD,GAAA,CAAI;AAAA,EACzD,mBAAA;AAAA,EACA,kBAAA;AAAA,EACA,0BAAA;AAAA,EACA,qBAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,mBAAA,uBAA+C,GAAA,CAAI;AAAA,EACvD,WAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,2BAAA,GAA8B,GAAA;AACpC,IAAM,IAAA,0BAAc,6BAA6B,CAAA;AAEjD,SAASA,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,wBAAwB,KAAA,EAAyC;AACxE,EAAA,OACE,OAAO,MAAM,IAAA,KAAS,QAAA,IACtB,wBAAwB,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,WAAA,EAAa,CAAA;AAExD;AAEA,SAAS,oBAAA,CACP,GAAA,EACA,KAAA,EACA,MAAA,EACS;AACT,EAAA,IAAI,qBAAA,CAAsB,GAAA,CAAI,GAAG,CAAA,EAAG,OAAO,IAAA;AAC3C,EAAA,IAAI,GAAA,KAAQ,aAAa,OAAO,KAAA;AAEhC,EAAA,MAAM,QAAA,GACJ,OAAO,MAAA,CAAO,QAAA,KAAa,WAAW,MAAA,CAAO,QAAA,CAAS,aAAY,GAAI,EAAA;AACxE,EAAA,OACE,oBAAA,IAAwB,MAAA,IACxB,mBAAA,CAAoB,GAAA,CAAI,QAAQ,KAC/B,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,MAAA,IAAU,2BAAA;AAElD;AAEA,SAAS,QAAQ,KAAA,EAAuC;AACtD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,IAAIC,QAAAA,GAAU,KAAA;AACd,IAAA,MAAMC,UAAoB,EAAC;AAC3B,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,SAAA,GAAY,QAAQ,IAAI,CAAA;AAC9B,MAAA,IAAI,cAAc,IAAA,EAAM;AACtB,QAAAD,QAAAA,GAAU,IAAA;AACV,QAAA;AAAA,MACF;AACA,MAAA,IAAI,SAAA,KAAc,IAAA,EAAMA,QAAAA,GAAU,IAAA;AAClC,MAAAC,OAAAA,CAAO,KAAK,SAAS,CAAA;AAAA,IACvB;AACA,IAAA,OAAOD,WAAUC,OAAAA,GAAS,KAAA;AAAA,EAC5B;AAEA,EAAA,IAAI,CAACF,SAAAA,CAAS,KAAK,CAAA,EAAG,OAAO,KAAA;AAC7B,EAAA,IAAI,uBAAA,CAAwB,KAAK,CAAA,EAAG,OAAO,IAAA;AAE3C,EAAA,IAAI,OAAA,GAAU,KAAA;AACd,EAAA,MAAM,SAAkC,EAAC;AACzC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,IAAA,IAAI,oBAAA,CAAqB,GAAA,EAAK,KAAA,EAAO,KAAK,CAAA,EAAG;AAC3C,MAAA,OAAA,GAAU,IAAA;AACV,MAAA;AAAA,IACF;AACA,IAAA,MAAM,SAAA,GAAY,QAAQ,KAAK,CAAA;AAC/B,IAAA,IAAI,cAAc,IAAA,EAAM;AACtB,MAAA,OAAA,GAAU,IAAA;AACV,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAA,KAAc,OAAO,OAAA,GAAU,IAAA;AACnC,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,SAAA;AAAA,EAChB;AACA,EAAA,OAAO,UAAU,MAAA,GAAS,KAAA;AAC5B;AAMO,SAAS,6BAA6B,KAAA,EAAyB;AACpE,EAAA,MAAM,SAAA,GAAY,QAAQ,KAAK,CAAA;AAC/B,EAAA,OAAO,SAAA,KAAc,OAAO,IAAA,GAAO,SAAA;AACrC;;;AC1CA,IAAM,QAAA,GAAW,CAAC,KAAA,KAChB,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAC9D,QACD,EAAC;AAEP,IAAM,WAAW,CAAC,KAAA,KAChB,OAAO,KAAA,KAAU,WAAW,KAAA,GAAQ,IAAA;AAEtC,IAAM,QAAA,GAAW,CAAC,KAAA,KAChB,OAAO,KAAA,KAAU,YAAY,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,GAAI,KAAA,GAAQ,IAAA;AAEzD,SAAS,6BAA6B,KAAA,EAGlB;AACzB,EAAA,OAAO;AAAA,IACL,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,cAAA,EAAgB,MAAM,cAAA,IAAkB,IAAA;AAAA,IACxC,MAAA,EAAQ,SAAA;AAAA,IACR,MAAA,EAAQ,EAAA;AAAA,IACR,SAAA,EAAW,EAAA;AAAA,IACX,eAAA,EAAiB,KAAA;AAAA,IACjB,KAAA,EAAO,IAAA;AAAA,IACP,cAAc,EAAC;AAAA,IACf,YAAY,EAAC;AAAA,IACb,OAAO,EAAC;AAAA,IACR,cAAc,EAAC;AAAA,IACf,kBAAkB,EAAC;AAAA,IACnB,UAAA,EAAY,IAAA;AAAA,IACZ,KAAA,EAAO,IAAA;AAAA,IACP,gBAAA,EAAkB,CAAA;AAAA,IAClB,UAAA,EAAY;AAAA,GACd;AACF;AAEA,SAAS,WAAW,KAAA,EAA8C;AAChE,EAAA,QAAQ,KAAA;AAAO,IACb,KAAK,cAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,qBAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,gBAAA;AACH,MAAA,OAAO,WAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,OAAA;AAAA,IACT,KAAK,gBAAA;AACH,MAAA,OAAO,WAAA;AAAA,IACT;AACE,MAAA,OAAO,UAAA;AAAA;AAEb;AAEO,SAAS,iBAAA,CACd,SACA,KAAA,EACwB;AACxB,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,KAAA,CAAM,UAAU,CAAA;AAC3C,EAAA,IAAI,SAAA,KAAc,IAAA,IAAQ,SAAA,IAAa,OAAA,CAAQ,kBAAkB,OAAO,OAAA;AAExE,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;AAChC,EAAA,MAAM,IAAA,GAA+B;AAAA,IACnC,GAAG,OAAA;AAAA,IACH,MAAA,EAAQ,OAAA,CAAQ,MAAA,KAAW,SAAA,GAAY,cAAc,OAAA,CAAQ,MAAA;AAAA,IAC7D,gBAAA,EAAkB,aAAa,OAAA,CAAQ,gBAAA;AAAA,IACvC,UAAA,EAAY,QAAQ,UAAA,GAAa;AAAA,GACnC;AAEA,EAAA,QAAQ,MAAM,KAAA;AAAO,IACnB,KAAK,OAAA,EAAS;AACZ,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAC/B,MAAA,OAAO,IAAA,KAAS,OAAO,IAAA,GAAO,EAAE,GAAG,IAAA,EAAM,MAAA,EAAQ,OAAA,CAAQ,MAAA,GAAS,IAAA,EAAK;AAAA,IACzE;AAAA,IACA,KAAK,iBAAA,EAAmB;AACtB,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAC/B,MAAA,OAAO,IAAA,KAAS,OACZ,IAAA,GACA;AAAA,QACE,GAAG,IAAA;AAAA,QACH,SAAA,EAAW,QAAQ,SAAA,GAAY,IAAA;AAAA,QAC/B,eAAA,EAAiB;AAAA,OACnB;AAAA,IACN;AAAA,IACA,KAAK,WAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,IAAA;AAAA,QACH,eAAA,EAAiB,KAAK,KAAA,KAAU;AAAA,OAClC;AAAA,IACF,KAAK,OAAA,EAAS;AACZ,MAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA;AACjC,MAAA,IAAI,KAAA,KAAU,MAAM,OAAO,IAAA;AAC3B,MAAA,OAAO;AAAA,QACL,GAAG,IAAA;AAAA,QACH,KAAA;AAAA,QACA,YAAA,EAAc,CAAC,GAAG,OAAA,CAAQ,cAAc,KAAK;AAAA,OAC/C;AAAA,IACF;AAAA,IACA,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,WAAA,GAAc,QAAA,CAAS,IAAA,CAAK,YAAY,CAAA;AAC9C,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA;AACzC,MAAA,IAAI,WAAA,KAAgB,IAAA,IAAQ,SAAA,KAAc,IAAA,EAAM,OAAO,IAAA;AACvD,MAAA,OAAO;AAAA,QACL,GAAG,IAAA;AAAA,QACH,UAAA,EAAY;AAAA,UACV,GAAG,OAAA,CAAQ,UAAA;AAAA,UACX,CAAC,WAAW,GAAG;AAAA,YACb,WAAA;AAAA,YACA,SAAA;AAAA,YACA,iBAAA,EAAmB,QAAA,CAAS,IAAA,CAAK,mBAAmB,CAAA;AAAA,YACpD,MAAA,EAAQ,QAAA;AAAA,YACR,QAAA,EAAU,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAE,MAAA,GAC3C,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA,GACtB,IAAA;AAAA,YACJ,MAAA,EAAQ;AAAA;AACV;AACF,OACF;AAAA,IACF;AAAA,IACA,KAAK,YAAA,EAAc;AACjB,MAAA,MAAM,WAAA,GAAc,QAAA,CAAS,IAAA,CAAK,YAAY,CAAA;AAC9C,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA;AACzC,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,IAAA,CAAK,MAAM,CAAA;AACtC,MAAA,MAAM,MAAA,GACJ,SAAA,KAAc,QAAA,IAAY,SAAA,KAAc,cACpC,SAAA,GACA,SAAA;AACN,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,MAAM,CAAA;AACnC,MAAA,MAAM,aAAa,WAAA,GACf;AAAA,QACE,GAAG,OAAA,CAAQ,UAAA;AAAA,QACX,CAAC,WAAW,GAAG;AAAA,UACb,GAAI,OAAA,CAAQ,UAAA,CAAW,WAAW,CAAA,IAAK;AAAA,YACrC,WAAA;AAAA,YACA,WAAW,SAAA,IAAa,SAAA;AAAA,YACxB,iBAAA,EAAmB,IAAA;AAAA,YACnB,QAAA,EAAU;AAAA,WACZ;AAAA,UACA,MAAA;AAAA,UACA;AAAA;AACF,UAEF,OAAA,CAAQ,UAAA;AACZ,MAAA,IAAI,cAAc,cAAA,EAAgB;AAChC,QAAA,OAAO;AAAA,UACL,GAAG,IAAA;AAAA,UACH,UAAA;AAAA,UACA,UAAA,EAAY,IAAA;AAAA,UACZ,QACE,MAAA,KAAW,SAAA,GACP,UAAA,GACA,MAAA,KAAW,cACT,WAAA,GACA;AAAA,SACV;AAAA,MACF;AACA,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,UAAA,EAAW;AAAA,IAC/B;AAAA,IACA,KAAK,YAAA,EAAc;AACjB,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,OAAO,CAAA;AACpC,MAAA,MAAM,QAAA,GAAW,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA;AACxC,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA;AACrC,MAAA,IAAI,WAAW,IAAA,IAAQ,QAAA,KAAa,IAAA,IAAQ,SAAA,KAAc,MAAM,OAAO,IAAA;AACvE,MAAA,MAAM,MAAA,GAAS,WAAW,SAAS,CAAA;AACnC,MAAA,OAAO;AAAA,QACL,GAAG,IAAA;AAAA,QACH,MAAA,EACE,WAAW,WAAA,GACP,gBAAA,GACA,WAAW,WAAA,IAAe,MAAA,KAAW,OAAA,GACnC,WAAA,GACA,IAAA,CAAK,MAAA;AAAA,QACb,KAAA,EAAO;AAAA,UACL,GAAG,OAAA,CAAQ,KAAA;AAAA,UACX,CAAC,MAAM,GAAG;AAAA,YACR,MAAA;AAAA,YACA,QAAA;AAAA,YACA,MAAA;AAAA,YACA,OAAA,EAAS,QAAA,CAAS,IAAA,CAAK,OAAO,CAAA;AAAA,YAC9B,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,GAAI;AAAA;AACxE;AACF,OACF;AAAA,IACF;AAAA,IACA,KAAK,cAAA,EAAgB;AACnB,MAAA,MAAM,OAAA,GAAU,QAAA,CAAS,IAAA,CAAK,OAAO,CAAA;AACrC,MAAA,MAAM,UAAA,GAAa,QAAA,CAAS,IAAA,CAAK,UAAU,CAAA;AAC3C,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAC/B,MAAA,IAAI,YAAY,IAAA,IAAQ,UAAA,KAAe,IAAA,IAAQ,IAAA,KAAS,MAAM,OAAO,IAAA;AACrE,MAAA,MAAM,YAAA,GAAe,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,cAAc,OAAO,CAAA;AAChE,MAAA,OAAO;AAAA,QACL,GAAG,IAAA;AAAA,QACH,YAAA,EAAc;AAAA,UACZ,GAAG,OAAA,CAAQ,YAAA;AAAA,UACX,CAAC,OAAO,GAAG;AAAA,YACT,OAAA;AAAA,YACA,UAAA;AAAA,YACA,IAAA;AAAA,YACA,MAAA,EACE,KAAK,MAAA,KAAW,UAAA,IAAc,KAAK,MAAA,KAAW,OAAA,GAC1C,KAAK,MAAA,GACL,WAAA;AAAA,YACN,OAAA,EAAS,QAAA,CAAS,IAAA,CAAK,OAAO,CAAA;AAAA,YAC9B,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA;AAAA,YACtE,QAAA,EAAU,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAE,MAAA,GAC3C,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA,GACtB;AAAA;AACN,SACF;AAAA,QACA,gBAAA,EAAkB,eACd,OAAA,CAAQ,gBAAA,GACR,CAAC,GAAG,OAAA,CAAQ,kBAAkB,OAAO;AAAA,OAC3C;AAAA,IACF;AAAA,IACA,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,OAAO,IAAA,EAAK;AAAA,IACjD,KAAK,KAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,IAAA;AAAA,QACH,MAAA,EACE,QAAQ,MAAA,KAAW,OAAA,IAAW,QAAQ,MAAA,KAAW,WAAA,GAC7C,QAAQ,MAAA,GACR,UAAA;AAAA,QACN,eAAA,EAAiB;AAAA,OACnB;AAAA,IACF,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,iBACJ,IAAA,CAAK,IAAA,KAAS,oBAAoB,QAAA,CAAS,IAAA,CAAK,eAAe,CAAA,GAAI,IAAA;AACrE,MAAA,OAAO,mBAAmB,IAAA,GAAO,IAAA,GAAO,EAAE,GAAG,MAAM,cAAA,EAAe;AAAA,IACpE;AAAA,IACA;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;AAEO,SAAS,kBAAA,CACd,SACA,MAAA,EACwB;AACxB,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,iBAAA,EAAmB,OAAO,CAAA;AACjD;;;ACpRO,IAAM,kCAAA,GAAyE;AAAA,EACpF,gBAAA,EAAkB,EAAA;AAAA,EAClB,iBAAA,EAAmB,GAAA;AAAA,EACnB,gBAAA,EAAkB;AACpB;AA4CA,SAAS,mBAAA,CAAoB,MAAc,KAAA,EAAuB;AAChE,EAAA,IAAI,CAAC,MAAA,CAAO,aAAA,CAAc,KAAK,CAAA,IAAK,QAAQ,CAAA,EAAG;AAC7C,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,EAAG,IAAI,CAAA,gCAAA,CAAkC,CAAA;AAAA,EAChE;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,cACP,MAAA,EAC0B;AAC1B,EAAA,OAAO;AAAA,IACL,gBAAA,EAAkB,mBAAA;AAAA,MAChB,kBAAA;AAAA,MACA,MAAA,EAAQ,oBACN,kCAAA,CAAmC;AAAA,KACvC;AAAA,IACA,iBAAA,EAAmB,mBAAA;AAAA,MACjB,mBAAA;AAAA,MACA,MAAA,EAAQ,qBACN,kCAAA,CAAmC;AAAA,KACvC;AAAA,IACA,gBAAA,EAAkB,mBAAA;AAAA,MAChB,kBAAA;AAAA,MACA,MAAA,EAAQ,oBACN,kCAAA,CAAmC;AAAA;AACvC,GACF;AACF;AAEO,SAAS,6BAA6B,KAAA,EAIlB;AACzB,EAAA,OAAO;AAAA,IACL,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,MAAA,EAAQ,EAAA;AAAA,IACR,SAAA,EAAW,EAAA;AAAA,IACX,aAAA,EAAe,KAAA;AAAA,IACf,cAAc,EAAC;AAAA,IACf,kBAAkB,EAAC;AAAA,IACnB,YAAY,EAAC;AAAA,IACb,MAAA,EAAQ,aAAA,CAAc,KAAA,CAAM,MAAM,CAAA;AAAA,IAClC,oBAAA,EAAsB,IAAA;AAAA,IACtB,cAAA,EAAgB,CAAA;AAAA,IAChB,aAAA,EAAe,CAAA;AAAA,IACf,eAAA,EAAiB,IAAA;AAAA,IACjB,SAAA,EAAW,IAAA;AAAA,IACX,QAAA,EAAU,IAAA;AAAA,IACV,WAAA,EAAa,IAAA;AAAA,IACb,gBAAA,EAAkB;AAAA,GACpB;AACF;AAEA,SAASG,UAAS,KAAA,EAAgD;AAChE,EAAA,OAAO,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GACrE,KAAA,GACD,IAAA;AACN;AAEA,SAASC,UAAS,KAAA,EAA+B;AAC/C,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,IAAA;AAC7C;AAEA,SAASC,UAAS,KAAA,EAA+B;AAC/C,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,QAAA,CAAS,KAAK,IAAI,KAAA,GAAQ,IAAA;AACvE;AAEA,SAAS,eAAe,KAAA,EAAuB;AAC7C,EAAA,OAAO,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,KAAK,CAAA,CAAE,UAAA;AACzC;AAEA,SAAS,cAAc,KAAA,EAAmD;AACxE,EAAA,MAAM,IAAA,GAAOF,UAAS,KAAK,CAAA;AAC3B,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,MAAM,OAAA,GAAUC,SAAAA,CAAS,IAAA,CAAK,OAAO,CAAA;AACrC,EAAA,MAAM,UAAA,GAAaC,SAAAA,CAAS,IAAA,CAAK,UAAU,CAAA;AAC3C,EAAA,MAAM,IAAA,GAAOD,SAAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAC/B,EAAA,IAAI,YAAY,IAAA,IAAQ,UAAA,KAAe,IAAA,IAAQ,IAAA,KAAS,MAAM,OAAO,IAAA;AACrE,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,UAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA,EACE,KAAK,MAAA,KAAW,UAAA,IAAc,KAAK,MAAA,KAAW,OAAA,GAC1C,KAAK,MAAA,GACL,WAAA;AAAA,IACN,OAAA,EAASA,SAAAA,CAAS,IAAA,CAAK,OAAO,CAAA;AAAA,IAC9B,IAAA,EAAMD,SAAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAAA,IACxB,QAAA,EAAUA,SAAAA,CAAS,IAAA,CAAK,QAAQ;AAAA,GAClC;AACF;AAEA,SAAS,SAAA,CACP,MACA,KAAA,EACA,IAAA,EACA,SACA,OAAA,EACA,UAAA,GAAqD,KAAK,UAAA,EAClC;AACxB,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,UAAA;AAAA,IACA,oBAAA,EAAsB;AAAA,MACpB,IAAA;AAAA,MACA,OAAA;AAAA,MACA,WAAW,KAAA,CAAM,UAAA;AAAA,MACjB;AAAA;AACF,GACF;AACF;AAEA,SAAS,YAAA,CACP,QACA,OAAA,EACwC;AACxC,EAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,OAAO,GAAG,OAAO,MAAA;AAC5C,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,MAAA,EAAO;AACzB,EAAA,OAAO,KAAK,OAAO,CAAA;AACnB,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,kBAAA,CACP,OAAA,EACA,KAAA,EACA,IAAA,EACwB;AACxB,EAAA,MAAM,UAAU,KAAA,CAAM,QAAA;AACtB,EAAA,MAAM,UAAA,GAAa,MAAM,WAAA,IAAe,CAAA;AACxC,EAAA,MAAM,UAAA,GAAa,MAAM,WAAA,IAAe,CAAA;AACxC,EAAA,IACE,CAAC,OAAA,IACD,CAAC,MAAA,CAAO,aAAA,CAAc,UAAU,CAAA,IAChC,CAAC,MAAA,CAAO,aAAA,CAAc,UAAU,CAAA,IAChC,UAAA,GAAa,KACb,UAAA,GAAa,CAAA,IACb,cAAc,UAAA,EACd;AACA,IAAA,OAAO,SAAA;AAAA,MACL,IAAA;AAAA,MACA,KAAA;AAAA,MACA,wBAAA;AAAA,MACA,OAAA,IAAW,IAAA;AAAA,MACX;AAAA,KACF;AAAA,EACF;AACA,EAAA,IAAI,UAAA,GAAa,OAAA,CAAQ,MAAA,CAAO,iBAAA,EAAmB;AACjD,IAAA,OAAO,SAAA;AAAA,MACL,IAAA;AAAA,MACA,KAAA;AAAA,MACA,sBAAA;AAAA,MACA,OAAA;AAAA,MACA,CAAA,sBAAA,EAAyB,UAAU,CAAA,kBAAA,EAAqB,OAAA,CAAQ,OAAO,iBAAiB,CAAA,CAAA;AAAA,MACxF,YAAA,CAAa,OAAA,CAAQ,UAAA,EAAY,OAAO;AAAA,KAC1C;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,UAAA,CAAW,OAAO,CAAA;AACxC,EAAA,IAAI,KAAA,IAAS,KAAA,CAAM,UAAA,KAAe,UAAA,EAAY;AAC5C,IAAA,OAAO,SAAA;AAAA,MACL,IAAA;AAAA,MACA,KAAA;AAAA,MACA,sBAAA;AAAA,MACA,OAAA;AAAA,MACA,CAAA,sCAAA,EAAyC,KAAA,CAAM,UAAU,CAAA,IAAA,EAAO,UAAU,CAAA,CAAA;AAAA,MAC1E,YAAA,CAAa,OAAA,CAAQ,UAAA,EAAY,OAAO;AAAA,KAC1C;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,KAAA,EAAO,MAAA,CAAO,UAAU,CAAA;AAC3C,EAAA,MAAM,UAAA,GAAA,CACH,KAAA,EAAO,UAAA,IAAc,CAAA,KACrB,UAAA,KAAe,MAAA,GAAY,CAAA,GAAI,cAAA,CAAe,UAAU,CAAA,CAAA,GACzD,cAAA,CAAe,KAAA,CAAM,KAAK,CAAA;AAC5B,EAAA,IAAI,UAAA,GAAa,OAAA,CAAQ,MAAA,CAAO,gBAAA,EAAkB;AAChD,IAAA,OAAO,SAAA;AAAA,MACL,IAAA;AAAA,MACA,KAAA;AAAA,MACA,qBAAA;AAAA,MACA,OAAA;AAAA,MACA,CAAA,qBAAA,EAAwB,OAAA,CAAQ,MAAA,CAAO,gBAAgB,CAAA,YAAA,CAAA;AAAA,MACvD,YAAA,CAAa,OAAA,CAAQ,UAAA,EAAY,OAAO;AAAA,KAC1C;AAAA,EACF;AAEA,EAAA,MAAM,GAAA,GAA8B;AAAA,IAClC,UAAA;AAAA,IACA,MAAA,EAAQ,EAAE,GAAI,KAAA,EAAO,MAAA,IAAU,EAAC,EAAI,CAAC,UAAU,GAAG,KAAA,CAAM,KAAA,EAAM;AAAA,IAC9D;AAAA,GACF;AACA,EAAA,MAAM,UAAA,GAAa,EAAE,GAAG,OAAA,CAAQ,UAAA,EAAW;AAC3C,EAAA,IAAI,UAAA,GAA8C,IAAA;AAClD,EAAA,IAAI,CAAC,SAAS,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA,CAAE,MAAA,IAAU,OAAA,CAAQ,MAAA,CAAO,gBAAA,EAAkB;AAC/E,IAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,IAAA,CAAK,UAAU,EAAE,CAAC,CAAA;AAC/C,IAAA,IAAI,kBAAkB,MAAA,EAAW;AAC/B,MAAA,OAAO,WAAW,aAAa,CAAA;AAC/B,MAAA,UAAA,GAAa;AAAA,QACX,IAAA,EAAM,2BAAA;AAAA,QACN,OAAA,EAAS,aAAA;AAAA,QACT,WAAW,KAAA,CAAM,UAAA;AAAA,QACjB,OAAA,EAAS,CAAA,+CAAA,EAAkD,OAAA,CAAQ,MAAA,CAAO,gBAAgB,CAAA,gBAAA;AAAA,OAC5F;AAAA,IACF;AAAA,EACF;AACA,EAAA,UAAA,CAAW,OAAO,CAAA,GAAI,GAAA;AACtB,EAAA,IAAI,OAAO,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAE,WAAW,UAAA,EAAY;AACjD,IAAA,OAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,UAAA;AAAA,MACA,oBAAA,EAAsB,cAAc,OAAA,CAAQ;AAAA,KAC9C;AAAA,EACF;AAEA,EAAA,OAAO,WAAW,OAAO,CAAA;AACzB,EAAA,MAAM,aAAa,KAAA,CAAM,IAAA;AAAA,IACvB,EAAE,QAAQ,UAAA,EAAW;AAAA,IACrB,CAAC,CAAA,EAAG,KAAA,KAAU,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA,IAAK;AAAA,GACrC,CAAE,KAAK,EAAE,CAAA;AACT,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAA,CAAK,MAAM,UAAU,CAAA;AAAA,EAChC,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,SAAS,KAAA,YAAiB,KAAA,GAAQ,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,CAAA,CAAA,GAAK,EAAA;AAC/D,IAAA,OAAO,SAAA;AAAA,MACL,IAAA;AAAA,MACA,KAAA;AAAA,MACA,gBAAA;AAAA,MACA,OAAA;AAAA,MACA,2CAA2C,MAAM,CAAA,CAAA;AAAA,MACjD;AAAA,KACF;AAAA,EACF;AACA,EAAA,MAAM,KAAA,GAAQ,cAAc,MAAM,CAAA;AAClC,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,SAAA;AAAA,MACL,IAAA;AAAA,MACA,KAAA;AAAA,MACA,sBAAA;AAAA,MACA,OAAA;AAAA,MACA,gEAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,UAAA;AAAA,IACA,oBAAA,EAAsB,cAAc,OAAA,CAAQ,oBAAA;AAAA,IAC5C,YAAA,EAAc,EAAE,GAAG,OAAA,CAAQ,cAAc,CAAC,KAAA,CAAM,OAAO,GAAG,KAAA,EAAM;AAAA,IAChE,gBAAA,EAAkB,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,cAAc,KAAA,CAAM,OAAO,CAAA,GAC/D,OAAA,CAAQ,mBACR,CAAC,GAAG,OAAA,CAAQ,gBAAA,EAAkB,MAAM,OAAO;AAAA,GACjD;AACF;AAEO,SAAS,wBAAA,CACd,SACA,KAAA,EACwB;AACxB,EAAA,IACE,KAAA,CAAM,WAAW,OAAA,CAAQ,KAAA,IAAA,CACxB,MAAM,OAAA,IAAW,EAAA,MAAQ,QAAQ,MAAA,EAClC;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,CAAM,UAAA,IAAc,OAAA,CAAQ,gBAAA,EAAkB,OAAO,OAAA;AACzD,EAAA,MAAM,IAAA,GAA+B;AAAA,IACnC,GAAG,OAAA;AAAA,IACH,gBAAgB,KAAA,CAAM,eAAA;AAAA,IACtB,eAAe,KAAA,CAAM,cAAA;AAAA,IACrB,iBAAiB,KAAA,CAAM,EAAA;AAAA,IACvB,kBAAkB,KAAA,CAAM,UAAA;AAAA,IACxB,aAAA,EAAe,OAAA,CAAQ,aAAA,IAAiB,OAAA,CAAQ,MAAM,cAAc;AAAA,GACtE;AACA,EAAA,QAAQ,MAAM,IAAA;AAAM,IAClB,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,QAAQ,OAAA,CAAQ,MAAA,GAAS,MAAM,KAAA,EAAM;AAAA,IACzD,KAAK,WAAA;AACH,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,WAAW,OAAA,CAAQ,SAAA,GAAY,MAAM,KAAA,EAAM;AAAA,IAC/D,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,SAAA,EAAW,MAAM,KAAA,EAAM;AAAA,IAC3C,KAAK,MAAA;AACH,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,QAAA,EAAU,MAAM,KAAA,EAAM;AAAA,IAC1C,KAAK,SAAA;AACH,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,WAAA,EAAa,MAAM,KAAA,EAAM;AAAA,IAC7C,KAAK,cAAA;AACH,MAAA,OAAO,kBAAA,CAAmB,OAAA,EAAS,KAAA,EAAO,IAAI,CAAA;AAAA,IAChD;AACE,MAAA,OAAO,IAAA;AAAA;AAEb","file":"index.js","sourcesContent":["/**\n * Canonical AI Matrx NDJSON wire kernel.\n *\n * This module is deliberately independent of React, Redux, Next.js, Supabase,\n * and generated application types. Every Matrx client uses it to turn the\n * backend's byte stream into the same normalized `{ event, data }` envelopes.\n * Host runtimes remain responsible for HTTP/auth errors and for deciding what\n * each event means in their state model.\n */\n\nexport interface MatrxStreamEnvelope<TData = unknown> {\n event: string;\n data: TData;\n /** Monotonic transport sequence from full envelopes, when supplied. */\n stream_seq?: number;\n}\n\nexport interface MatrxNdjsonIssue {\n line: string;\n error: unknown;\n /** One-based physical NDJSON line number. */\n lineNumber: number;\n /** True when an unterminated trailing fragment was parsed by `finish()`. */\n atCompletion: boolean;\n}\n\nexport interface MatrxStreamEnvelopeObservation {\n /** Exact parsed JSON value before compact/full normalization. */\n raw: unknown;\n envelope: MatrxStreamEnvelope;\n line: string;\n lineNumber: number;\n atCompletion: boolean;\n}\n\nexport interface MatrxNdjsonFramerOptions {\n /** Malformed JSON is non-fatal, but it must never disappear silently. */\n onMalformedLine?: (issue: MatrxNdjsonIssue) => void;\n /** Valid JSON with no recognized Matrx event envelope is also non-fatal. */\n onUnknownEnvelope?: (value: unknown) => void;\n /** Observe every valid envelope without changing or consuming it. */\n onValidEnvelope?: (observation: MatrxStreamEnvelopeObservation) => void;\n}\n\nexport interface ReadMatrxNdjsonOptions extends MatrxNdjsonFramerOptions {\n signal?: AbortSignal;\n /** Maximum normalized events read ahead of the iterator consumer. */\n maxReadAhead?: number;\n}\n\nexport interface MatrxNdjsonFramer {\n /** Push a text fragment. Fragments may split JSON tokens or line endings. */\n pushText(fragment: string): MatrxStreamEnvelope[];\n /** Push a byte fragment. UTF-8 code points may span calls. */\n pushBytes(fragment: Uint8Array): MatrxStreamEnvelope[];\n /** Parse the final unterminated line and flush any pending UTF-8 bytes. */\n finish(): MatrxStreamEnvelope[];\n}\n\ntype QueueItem =\n | { kind: \"event\"; value: MatrxStreamEnvelope }\n | { kind: \"error\"; error: unknown }\n | { kind: \"done\" };\n\nexport const DEFAULT_MATRX_NDJSON_READ_AHEAD = 64;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Normalize both supported Matrx wire shapes:\n *\n * - full: `{ \"event\": \"chunk\", \"data\": { \"text\": \"...\" } }`\n * - compact chunk: `{ \"e\": \"c\", \"t\": \"...\" }`\n * - compact reasoning: `{ \"e\": \"r\", \"t\": \"...\" }`\n */\nexport function normalizeMatrxStreamEnvelope(\n value: unknown,\n): MatrxStreamEnvelope | null {\n if (!isRecord(value)) return null;\n\n if (typeof value.event === \"string\") {\n const streamSeq =\n typeof value.stream_seq === \"number\" && Number.isFinite(value.stream_seq)\n ? value.stream_seq\n : undefined;\n return {\n event: value.event,\n data: value.data,\n ...(streamSeq === undefined ? {} : { stream_seq: streamSeq }),\n };\n }\n if (value.e === \"c\" && typeof value.t === \"string\") {\n return { event: \"chunk\", data: { text: value.t } };\n }\n if (value.e === \"r\" && typeof value.t === \"string\") {\n return { event: \"reasoning_chunk\", data: { text: value.t } };\n }\n return null;\n}\n\n/**\n * Create the transport-independent NDJSON framer used by the stream reader.\n * Browser extensions, desktop bridges, WebSockets, and tests can feed it\n * fragmented strings or bytes without constructing a `ReadableStream`.\n */\nexport function createMatrxNdjsonFramer(\n options: MatrxNdjsonFramerOptions = {},\n): MatrxNdjsonFramer {\n const decoder = new TextDecoder();\n let buffer = \"\";\n let lineNumber = 0;\n let finished = false;\n\n const assertOpen = (): void => {\n if (finished) throw new Error(\"Matrx NDJSON framer is already finished\");\n };\n\n const parseLine = (\n line: string,\n atCompletion: boolean,\n ): MatrxStreamEnvelope | null => {\n const currentLineNumber = ++lineNumber;\n const trimmed = line.trim();\n if (!trimmed) return null;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(trimmed) as unknown;\n } catch (error) {\n options.onMalformedLine?.({\n line: trimmed,\n error,\n lineNumber: currentLineNumber,\n atCompletion,\n });\n return null;\n }\n\n const envelope = normalizeMatrxStreamEnvelope(parsed);\n if (!envelope) {\n options.onUnknownEnvelope?.(parsed);\n return null;\n }\n options.onValidEnvelope?.({\n raw: parsed,\n envelope,\n line: trimmed,\n lineNumber: currentLineNumber,\n atCompletion,\n });\n return envelope;\n };\n\n const pushDecodedText = (fragment: string): MatrxStreamEnvelope[] => {\n buffer += fragment;\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n const envelopes: MatrxStreamEnvelope[] = [];\n for (const line of lines) {\n const envelope = parseLine(line, false);\n if (envelope) envelopes.push(envelope);\n }\n return envelopes;\n };\n\n return {\n pushText(fragment) {\n assertOpen();\n // Flush any pending byte fragment before switching to explicit text.\n return pushDecodedText(decoder.decode() + fragment);\n },\n pushBytes(fragment) {\n assertOpen();\n return pushDecodedText(decoder.decode(fragment, { stream: true }));\n },\n finish() {\n assertOpen();\n finished = true;\n const envelopes = pushDecodedText(decoder.decode());\n if (buffer.length > 0) {\n const envelope = parseLine(buffer, true);\n buffer = \"\";\n if (envelope) envelopes.push(envelope);\n }\n return envelopes;\n },\n };\n}\n\nfunction readAheadLimit(value: number | undefined): number {\n const limit = value ?? DEFAULT_MATRX_NDJSON_READ_AHEAD;\n if (!Number.isSafeInteger(limit) || limit < 1) {\n throw new RangeError(\"maxReadAhead must be a positive safe integer\");\n }\n return limit;\n}\n\n/**\n * Read and normalize a Matrx NDJSON response body with bounded background\n * read-ahead. Consumer work does not stall the network until `maxReadAhead`\n * complete events are waiting; the bound prevents an abandoned or blocked\n * consumer from growing memory without limit.\n */\nexport async function* readMatrxNdjsonStream(\n body: ReadableStream<Uint8Array>,\n options: ReadMatrxNdjsonOptions = {},\n): AsyncGenerator<MatrxStreamEnvelope, void, undefined> {\n const maxReadAhead = readAheadLimit(options.maxReadAhead);\n const queue: QueueItem[] = [];\n let queuedEventCount = 0;\n let wakeConsumer: (() => void) | null = null;\n let wakeProducer: (() => void) | null = null;\n let readerFinished = false;\n let consumerClosed = false;\n\n const wakeWaitingConsumer = (): void => {\n const wake = wakeConsumer;\n wakeConsumer = null;\n wake?.();\n };\n const wakeWaitingProducer = (): void => {\n const wake = wakeProducer;\n wakeProducer = null;\n wake?.();\n };\n const enqueueTerminal = (item: QueueItem): void => {\n if (consumerClosed) return;\n queue.push(item);\n wakeWaitingConsumer();\n };\n const enqueueEvent = async (value: MatrxStreamEnvelope): Promise<boolean> => {\n while (\n queuedEventCount >= maxReadAhead &&\n !consumerClosed &&\n !options.signal?.aborted\n ) {\n await new Promise<void>((resolve) => {\n wakeProducer = resolve;\n });\n }\n if (consumerClosed || options.signal?.aborted) return false;\n queue.push({ kind: \"event\", value });\n queuedEventCount += 1;\n wakeWaitingConsumer();\n return true;\n };\n const waitForReadCapacity = async (): Promise<boolean> => {\n while (\n queuedEventCount >= maxReadAhead &&\n !consumerClosed &&\n !options.signal?.aborted\n ) {\n await new Promise<void>((resolve) => {\n wakeProducer = resolve;\n });\n }\n return !consumerClosed && !options.signal?.aborted;\n };\n\n const reader = body.getReader();\n const framer = createMatrxNdjsonFramer(options);\n\n const onAbort = (): void => {\n wakeWaitingProducer();\n wakeWaitingConsumer();\n void reader.cancel(options.signal?.reason).catch(() => undefined);\n };\n options.signal?.addEventListener(\"abort\", onAbort, { once: true });\n if (options.signal?.aborted) onAbort();\n\n const readerPromise = (async (): Promise<void> => {\n try {\n while (!options.signal?.aborted && !consumerClosed) {\n if (!(await waitForReadCapacity())) return;\n const { value, done } = await reader.read();\n if (done) break;\n for (const envelope of framer.pushBytes(value)) {\n if (!(await enqueueEvent(envelope))) return;\n }\n }\n\n if (!options.signal?.aborted && !consumerClosed) {\n for (const envelope of framer.finish()) {\n if (!(await enqueueEvent(envelope))) return;\n }\n }\n } catch (error) {\n const aborted =\n options.signal?.aborted ||\n consumerClosed ||\n (error instanceof Error && error.name === \"AbortError\");\n if (!aborted) enqueueTerminal({ kind: \"error\", error });\n } finally {\n readerFinished = true;\n reader.releaseLock();\n enqueueTerminal({ kind: \"done\" });\n }\n })();\n\n try {\n while (true) {\n if (queue.length === 0) {\n if (options.signal?.aborted || readerFinished) return;\n await new Promise<void>((resolve) => {\n wakeConsumer = resolve;\n });\n }\n\n const item = queue.shift();\n if (item?.kind === \"event\") queuedEventCount -= 1;\n wakeWaitingProducer();\n if (!item || item.kind === \"done\") return;\n if (item.kind === \"error\") throw item.error;\n yield item.value;\n }\n } finally {\n consumerClosed = true;\n wakeWaitingProducer();\n wakeWaitingConsumer();\n options.signal?.removeEventListener(\"abort\", onAbort);\n if (!readerFinished) {\n await reader.cancel().catch(() => undefined);\n }\n await readerPromise;\n }\n}\n","/**\n * Creator-facing projection of an agent execution result.\n *\n * Provider reasoning blocks and their signatures are replay material, not\n * workflow data. The execution engine must retain them so a later turn can be\n * continued correctly, but no result renderer, JSON tab, clipboard export, or\n * Content IR classifier should receive them as displayable values.\n *\n * This is a pure copy-on-write projection: values without private material\n * keep their original reference, while affected branches are cloned. Never\n * feed the projected value back into execution or persistence.\n */\n\nconst PRIVATE_REASONING_TYPES: ReadonlySet<string> = new Set([\n \"thinking\",\n \"redacted_thinking\",\n \"reasoning\",\n]);\n\nconst PRIVATE_PROVIDER_KEYS: ReadonlySet<string> = new Set([\n \"thought_signature\",\n \"thoughtSignature\",\n \"google_thought_signature\",\n \"anthropic_signature\",\n \"encrypted_content\",\n \"signature_encoding\",\n]);\n\nconst SIGNATURE_PROVIDERS: ReadonlySet<string> = new Set([\n \"anthropic\",\n \"google\",\n \"openai\",\n]);\n\nconst OPAQUE_SIGNATURE_MIN_LENGTH = 200;\nconst OMIT = Symbol(\"omit-provider-private-value\");\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isPrivateReasoningBlock(value: Record<string, unknown>): boolean {\n return (\n typeof value.type === \"string\" &&\n PRIVATE_REASONING_TYPES.has(value.type.toLowerCase())\n );\n}\n\nfunction isPrivateProviderKey(\n key: string,\n value: unknown,\n parent: Record<string, unknown>,\n): boolean {\n if (PRIVATE_PROVIDER_KEYS.has(key)) return true;\n if (key !== \"signature\") return false;\n\n const provider =\n typeof parent.provider === \"string\" ? parent.provider.toLowerCase() : \"\";\n return (\n \"signature_encoding\" in parent ||\n SIGNATURE_PROVIDERS.has(provider) ||\n (typeof value === \"string\" && value.length >= OPAQUE_SIGNATURE_MIN_LENGTH)\n );\n}\n\nfunction project(value: unknown): unknown | typeof OMIT {\n if (Array.isArray(value)) {\n let changed = false;\n const output: unknown[] = [];\n for (const item of value) {\n const projected = project(item);\n if (projected === OMIT) {\n changed = true;\n continue;\n }\n if (projected !== item) changed = true;\n output.push(projected);\n }\n return changed ? output : value;\n }\n\n if (!isRecord(value)) return value;\n if (isPrivateReasoningBlock(value)) return OMIT;\n\n let changed = false;\n const output: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(value)) {\n if (isPrivateProviderKey(key, child, value)) {\n changed = true;\n continue;\n }\n const projected = project(child);\n if (projected === OMIT) {\n changed = true;\n continue;\n }\n if (projected !== child) changed = true;\n output[key] = projected;\n }\n return changed ? output : value;\n}\n\n/**\n * Remove provider-private reasoning material from a value crossing a\n * Creator-facing presentation or export boundary.\n */\nexport function projectAgentResultForDisplay(value: unknown): unknown {\n const projected = project(value);\n return projected === OMIT ? null : projected;\n}\n","export type AgentProjectionStatus =\n | \"pending\"\n | \"streaming\"\n | \"awaiting-tools\"\n | \"complete\"\n | \"error\"\n | \"cancelled\";\n\nexport interface AgentProjectionOperation {\n operationId: string;\n operation: string;\n parentOperationId: string | null;\n status: \"active\" | \"success\" | \"failed\" | \"cancelled\";\n metadata: Record<string, unknown> | null;\n result: Record<string, unknown> | null;\n}\n\nexport interface AgentProjectionTool {\n callId: string;\n toolName: string;\n status:\n | \"started\"\n | \"progress\"\n | \"step\"\n | \"preview\"\n | \"completed\"\n | \"error\"\n | \"delegated\";\n message: string | null;\n data: Record<string, unknown> | null;\n}\n\nexport interface AgentProjectionRenderBlock {\n blockId: string;\n blockIndex: number;\n type: string;\n status: \"streaming\" | \"complete\" | \"error\";\n content: string | null;\n data: Record<string, unknown> | null;\n metadata: Record<string, unknown> | null;\n}\n\nexport interface AgentRequestProjection {\n requestId: string;\n conversationId: string | null;\n status: AgentProjectionStatus;\n answer: string;\n reasoning: string;\n reasoningActive: boolean;\n phase: string | null;\n phaseHistory: string[];\n operations: Record<string, AgentProjectionOperation>;\n tools: Record<string, AgentProjectionTool>;\n renderBlocks: Record<string, AgentProjectionRenderBlock>;\n renderBlockOrder: string[];\n completion: Record<string, unknown> | null;\n error: Record<string, unknown> | null;\n lastTransportSeq: number;\n eventCount: number;\n}\n\nexport interface AgentProjectionEvent {\n event: string;\n data?: unknown;\n stream_seq?: number;\n}\n\nconst asRecord = (value: unknown): Record<string, unknown> =>\n value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n\nconst asString = (value: unknown): string | null =>\n typeof value === \"string\" ? value : null;\n\nconst asNumber = (value: unknown): number | null =>\n typeof value === \"number\" && Number.isFinite(value) ? value : null;\n\nexport function createAgentRequestProjection(input: {\n requestId: string;\n conversationId?: string | null;\n}): AgentRequestProjection {\n return {\n requestId: input.requestId,\n conversationId: input.conversationId ?? null,\n status: \"pending\",\n answer: \"\",\n reasoning: \"\",\n reasoningActive: false,\n phase: null,\n phaseHistory: [],\n operations: {},\n tools: {},\n renderBlocks: {},\n renderBlockOrder: [],\n completion: null,\n error: null,\n lastTransportSeq: 0,\n eventCount: 0,\n };\n}\n\nfunction toolStatus(event: string): AgentProjectionTool[\"status\"] {\n switch (event) {\n case \"tool_started\":\n return \"started\";\n case \"tool_step\":\n return \"step\";\n case \"tool_result_preview\":\n return \"preview\";\n case \"tool_completed\":\n return \"completed\";\n case \"tool_error\":\n return \"error\";\n case \"tool_delegated\":\n return \"delegated\";\n default:\n return \"progress\";\n }\n}\n\nexport function projectAgentEvent(\n current: AgentRequestProjection,\n event: AgentProjectionEvent,\n): AgentRequestProjection {\n const streamSeq = asNumber(event.stream_seq);\n if (streamSeq !== null && streamSeq <= current.lastTransportSeq) return current;\n\n const data = asRecord(event.data);\n const next: AgentRequestProjection = {\n ...current,\n status: current.status === \"pending\" ? \"streaming\" : current.status,\n lastTransportSeq: streamSeq ?? current.lastTransportSeq,\n eventCount: current.eventCount + 1,\n };\n\n switch (event.event) {\n case \"chunk\": {\n const text = asString(data.text);\n return text === null ? next : { ...next, answer: current.answer + text };\n }\n case \"reasoning_chunk\": {\n const text = asString(data.text);\n return text === null\n ? next\n : {\n ...next,\n reasoning: current.reasoning + text,\n reasoningActive: true,\n };\n }\n case \"reasoning\":\n return {\n ...next,\n reasoningActive: data.state === \"started\",\n };\n case \"phase\": {\n const phase = asString(data.phase);\n if (phase === null) return next;\n return {\n ...next,\n phase,\n phaseHistory: [...current.phaseHistory, phase],\n };\n }\n case \"init\": {\n const operationId = asString(data.operation_id);\n const operation = asString(data.operation);\n if (operationId === null || operation === null) return next;\n return {\n ...next,\n operations: {\n ...current.operations,\n [operationId]: {\n operationId,\n operation,\n parentOperationId: asString(data.parent_operation_id),\n status: \"active\",\n metadata: Object.keys(asRecord(data.metadata)).length\n ? asRecord(data.metadata)\n : null,\n result: null,\n },\n },\n };\n }\n case \"completion\": {\n const operationId = asString(data.operation_id);\n const operation = asString(data.operation);\n const rawStatus = asString(data.status);\n const status: AgentProjectionOperation[\"status\"] =\n rawStatus === \"failed\" || rawStatus === \"cancelled\"\n ? rawStatus\n : \"success\";\n const result = asRecord(data.result);\n const operations = operationId\n ? {\n ...current.operations,\n [operationId]: {\n ...(current.operations[operationId] ?? {\n operationId,\n operation: operation ?? \"unknown\",\n parentOperationId: null,\n metadata: null,\n }),\n status,\n result,\n },\n }\n : current.operations;\n if (operation === \"user_request\") {\n return {\n ...next,\n operations,\n completion: data,\n status:\n status === \"success\"\n ? \"complete\"\n : status === \"cancelled\"\n ? \"cancelled\"\n : \"error\",\n };\n }\n return { ...next, operations };\n }\n case \"tool_event\": {\n const callId = asString(data.call_id);\n const toolName = asString(data.tool_name);\n const lifecycle = asString(data.event);\n if (callId === null || toolName === null || lifecycle === null) return next;\n const status = toolStatus(lifecycle);\n return {\n ...next,\n status:\n status === \"delegated\"\n ? \"awaiting-tools\"\n : status === \"completed\" || status === \"error\"\n ? \"streaming\"\n : next.status,\n tools: {\n ...current.tools,\n [callId]: {\n callId,\n toolName,\n status,\n message: asString(data.message),\n data: Object.keys(asRecord(data.data)).length ? asRecord(data.data) : null,\n },\n },\n };\n }\n case \"render_block\": {\n const blockId = asString(data.blockId);\n const blockIndex = asNumber(data.blockIndex);\n const type = asString(data.type);\n if (blockId === null || blockIndex === null || type === null) return next;\n const alreadyKnown = Object.hasOwn(current.renderBlocks, blockId);\n return {\n ...next,\n renderBlocks: {\n ...current.renderBlocks,\n [blockId]: {\n blockId,\n blockIndex,\n type,\n status:\n data.status === \"complete\" || data.status === \"error\"\n ? data.status\n : \"streaming\",\n content: asString(data.content),\n data: Object.keys(asRecord(data.data)).length ? asRecord(data.data) : null,\n metadata: Object.keys(asRecord(data.metadata)).length\n ? asRecord(data.metadata)\n : null,\n },\n },\n renderBlockOrder: alreadyKnown\n ? current.renderBlockOrder\n : [...current.renderBlockOrder, blockId],\n };\n }\n case \"error\":\n return { ...next, status: \"error\", error: data };\n case \"end\":\n return {\n ...next,\n status:\n current.status === \"error\" || current.status === \"cancelled\"\n ? current.status\n : \"complete\",\n reasoningActive: false,\n };\n case \"data\": {\n const conversationId =\n data.type === \"conversation_id\" ? asString(data.conversation_id) : null;\n return conversationId === null ? next : { ...next, conversationId };\n }\n default:\n return next;\n }\n}\n\nexport function projectAgentEvents(\n initial: AgentRequestProjection,\n events: readonly AgentProjectionEvent[],\n): AgentRequestProjection {\n return events.reduce(projectAgentEvent, initial);\n}\n","import type { AgentProjectionRenderBlock } from \"./request\";\n\nexport interface WorkflowNodeStreamEvent {\n run_id: string;\n node_id?: string | null;\n kind:\n | \"chunk\"\n | \"reasoning\"\n | \"phase\"\n | \"tool\"\n | \"warning\"\n | \"record_update\"\n | \"resource_changed\"\n | \"render_block\";\n delta: string;\n stream_seq: number;\n ts: string;\n chunks_received: number;\n chars_streamed: number;\n frame_id?: string | null;\n frame_index?: number;\n frame_count?: number;\n block_shadowed?: boolean;\n}\n\nexport interface WorkflowProjectionLimits {\n maxOpenFrameSets: number;\n maxFramesPerBlock: number;\n maxBytesPerBlock: number;\n}\n\nexport const DEFAULT_WORKFLOW_PROJECTION_LIMITS: Readonly<WorkflowProjectionLimits> = {\n maxOpenFrameSets: 32,\n maxFramesPerBlock: 256,\n maxBytesPerBlock: 1_048_576,\n};\n\nexport interface WorkflowRenderFrameSet {\n frameCount: number;\n slices: Record<number, string>;\n byteLength: number;\n}\n\nexport type WorkflowRenderBlockIssueCode =\n | \"invalid_frame_metadata\"\n | \"frame_count_mismatch\"\n | \"open_frame_limit_exceeded\"\n | \"frame_limit_exceeded\"\n | \"byte_limit_exceeded\"\n | \"malformed_json\"\n | \"invalid_render_block\";\n\nexport interface WorkflowRenderBlockIssue {\n code: WorkflowRenderBlockIssueCode;\n frameId: string | null;\n streamSeq: number;\n message: string;\n}\n\nexport interface WorkflowNodeProjection {\n runId: string;\n nodeId: string;\n answer: string;\n reasoning: string;\n blockShadowed: boolean;\n renderBlocks: Record<string, AgentProjectionRenderBlock>;\n renderBlockOrder: string[];\n openFrames: Record<string, WorkflowRenderFrameSet>;\n limits: WorkflowProjectionLimits;\n lastRenderBlockIssue: WorkflowRenderBlockIssue | null;\n chunksReceived: number;\n charsStreamed: number;\n lastStreamingTs: string | null;\n lastPhase: string | null;\n lastTool: string | null;\n lastWarning: string | null;\n lastTransportSeq: number;\n}\n\nfunction positiveSafeInteger(name: string, value: number): number {\n if (!Number.isSafeInteger(value) || value < 1) {\n throw new RangeError(`${name} must be a positive safe integer`);\n }\n return value;\n}\n\nfunction resolveLimits(\n limits: Partial<WorkflowProjectionLimits> | undefined,\n): WorkflowProjectionLimits {\n return {\n maxOpenFrameSets: positiveSafeInteger(\n \"maxOpenFrameSets\",\n limits?.maxOpenFrameSets ??\n DEFAULT_WORKFLOW_PROJECTION_LIMITS.maxOpenFrameSets,\n ),\n maxFramesPerBlock: positiveSafeInteger(\n \"maxFramesPerBlock\",\n limits?.maxFramesPerBlock ??\n DEFAULT_WORKFLOW_PROJECTION_LIMITS.maxFramesPerBlock,\n ),\n maxBytesPerBlock: positiveSafeInteger(\n \"maxBytesPerBlock\",\n limits?.maxBytesPerBlock ??\n DEFAULT_WORKFLOW_PROJECTION_LIMITS.maxBytesPerBlock,\n ),\n };\n}\n\nexport function createWorkflowNodeProjection(input: {\n runId: string;\n nodeId: string;\n limits?: Partial<WorkflowProjectionLimits>;\n}): WorkflowNodeProjection {\n return {\n runId: input.runId,\n nodeId: input.nodeId,\n answer: \"\",\n reasoning: \"\",\n blockShadowed: false,\n renderBlocks: {},\n renderBlockOrder: [],\n openFrames: {},\n limits: resolveLimits(input.limits),\n lastRenderBlockIssue: null,\n chunksReceived: 0,\n charsStreamed: 0,\n lastStreamingTs: null,\n lastPhase: null,\n lastTool: null,\n lastWarning: null,\n lastTransportSeq: 0,\n };\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction asString(value: unknown): string | null {\n return typeof value === \"string\" ? value : null;\n}\n\nfunction asNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nfunction utf8ByteLength(value: string): number {\n return new TextEncoder().encode(value).byteLength;\n}\n\nfunction toRenderBlock(value: unknown): AgentProjectionRenderBlock | null {\n const data = asRecord(value);\n if (!data) return null;\n const blockId = asString(data.blockId);\n const blockIndex = asNumber(data.blockIndex);\n const type = asString(data.type);\n if (blockId === null || blockIndex === null || type === null) return null;\n return {\n blockId,\n blockIndex,\n type,\n status:\n data.status === \"complete\" || data.status === \"error\"\n ? data.status\n : \"streaming\",\n content: asString(data.content),\n data: asRecord(data.data),\n metadata: asRecord(data.metadata),\n };\n}\n\nfunction withIssue(\n next: WorkflowNodeProjection,\n event: WorkflowNodeStreamEvent,\n code: WorkflowRenderBlockIssueCode,\n frameId: string | null,\n message: string,\n openFrames: Record<string, WorkflowRenderFrameSet> = next.openFrames,\n): WorkflowNodeProjection {\n return {\n ...next,\n openFrames,\n lastRenderBlockIssue: {\n code,\n frameId,\n streamSeq: event.stream_seq,\n message,\n },\n };\n}\n\nfunction withoutFrame(\n frames: Record<string, WorkflowRenderFrameSet>,\n frameId: string,\n): Record<string, WorkflowRenderFrameSet> {\n if (!Object.hasOwn(frames, frameId)) return frames;\n const next = { ...frames };\n delete next[frameId];\n return next;\n}\n\nfunction projectRenderFrame(\n current: WorkflowNodeProjection,\n event: WorkflowNodeStreamEvent,\n next: WorkflowNodeProjection,\n): WorkflowNodeProjection {\n const frameId = event.frame_id;\n const frameCount = event.frame_count ?? 1;\n const frameIndex = event.frame_index ?? 0;\n if (\n !frameId ||\n !Number.isSafeInteger(frameCount) ||\n !Number.isSafeInteger(frameIndex) ||\n frameCount < 1 ||\n frameIndex < 0 ||\n frameIndex >= frameCount\n ) {\n return withIssue(\n next,\n event,\n \"invalid_frame_metadata\",\n frameId ?? null,\n \"Render block frame metadata is invalid\",\n );\n }\n if (frameCount > current.limits.maxFramesPerBlock) {\n return withIssue(\n next,\n event,\n \"frame_limit_exceeded\",\n frameId,\n `Render block declares ${frameCount} frames; limit is ${current.limits.maxFramesPerBlock}`,\n withoutFrame(current.openFrames, frameId),\n );\n }\n\n const prior = current.openFrames[frameId];\n if (prior && prior.frameCount !== frameCount) {\n return withIssue(\n next,\n event,\n \"frame_count_mismatch\",\n frameId,\n `Render block frame count changed from ${prior.frameCount} to ${frameCount}`,\n withoutFrame(current.openFrames, frameId),\n );\n }\n\n const priorSlice = prior?.slices[frameIndex];\n const byteLength =\n (prior?.byteLength ?? 0) -\n (priorSlice === undefined ? 0 : utf8ByteLength(priorSlice)) +\n utf8ByteLength(event.delta);\n if (byteLength > current.limits.maxBytesPerBlock) {\n return withIssue(\n next,\n event,\n \"byte_limit_exceeded\",\n frameId,\n `Render block exceeds ${current.limits.maxBytesPerBlock} UTF-8 bytes`,\n withoutFrame(current.openFrames, frameId),\n );\n }\n\n const set: WorkflowRenderFrameSet = {\n frameCount,\n slices: { ...(prior?.slices ?? {}), [frameIndex]: event.delta },\n byteLength,\n };\n const openFrames = { ...current.openFrames };\n let limitIssue: WorkflowRenderBlockIssue | null = null;\n if (!prior && Object.keys(openFrames).length >= current.limits.maxOpenFrameSets) {\n const oldestFrameId = Object.keys(openFrames)[0];\n if (oldestFrameId !== undefined) {\n delete openFrames[oldestFrameId];\n limitIssue = {\n code: \"open_frame_limit_exceeded\",\n frameId: oldestFrameId,\n streamSeq: event.stream_seq,\n message: `Evicted incomplete render block after reaching ${current.limits.maxOpenFrameSets} open frame sets`,\n };\n }\n }\n openFrames[frameId] = set;\n if (Object.keys(set.slices).length !== frameCount) {\n return {\n ...next,\n openFrames,\n lastRenderBlockIssue: limitIssue ?? current.lastRenderBlockIssue,\n };\n }\n\n delete openFrames[frameId];\n const serialized = Array.from(\n { length: frameCount },\n (_, index) => set.slices[index] ?? \"\",\n ).join(\"\");\n let parsed: unknown;\n try {\n parsed = JSON.parse(serialized) as unknown;\n } catch (error) {\n const detail = error instanceof Error ? `: ${error.message}` : \"\";\n return withIssue(\n next,\n event,\n \"malformed_json\",\n frameId,\n `Completed render block is not valid JSON${detail}`,\n openFrames,\n );\n }\n const block = toRenderBlock(parsed);\n if (!block) {\n return withIssue(\n next,\n event,\n \"invalid_render_block\",\n frameId,\n \"Completed render block is missing blockId, blockIndex, or type\",\n openFrames,\n );\n }\n return {\n ...next,\n openFrames,\n lastRenderBlockIssue: limitIssue ?? current.lastRenderBlockIssue,\n renderBlocks: { ...current.renderBlocks, [block.blockId]: block },\n renderBlockOrder: Object.hasOwn(current.renderBlocks, block.blockId)\n ? current.renderBlockOrder\n : [...current.renderBlockOrder, block.blockId],\n };\n}\n\nexport function projectWorkflowNodeEvent(\n current: WorkflowNodeProjection,\n event: WorkflowNodeStreamEvent,\n): WorkflowNodeProjection {\n if (\n event.run_id !== current.runId ||\n (event.node_id ?? \"\") !== current.nodeId\n ) {\n return current;\n }\n if (event.stream_seq <= current.lastTransportSeq) return current;\n const next: WorkflowNodeProjection = {\n ...current,\n chunksReceived: event.chunks_received,\n charsStreamed: event.chars_streamed,\n lastStreamingTs: event.ts,\n lastTransportSeq: event.stream_seq,\n blockShadowed: current.blockShadowed || Boolean(event.block_shadowed),\n };\n switch (event.kind) {\n case \"chunk\":\n return { ...next, answer: current.answer + event.delta };\n case \"reasoning\":\n return { ...next, reasoning: current.reasoning + event.delta };\n case \"phase\":\n return { ...next, lastPhase: event.delta };\n case \"tool\":\n return { ...next, lastTool: event.delta };\n case \"warning\":\n return { ...next, lastWarning: event.delta };\n case \"render_block\":\n return projectRenderFrame(current, event, next);\n default:\n return next;\n }\n}\n"]}
|
|
@@ -135,7 +135,7 @@ function projectAgentEvent(current, event) {
|
|
|
135
135
|
const status = toolStatus(lifecycle);
|
|
136
136
|
return {
|
|
137
137
|
...next,
|
|
138
|
-
status: status === "
|
|
138
|
+
status: status === "delegated" ? "awaiting-tools" : status === "completed" || status === "error" ? "streaming" : next.status,
|
|
139
139
|
tools: {
|
|
140
140
|
...current.tools,
|
|
141
141
|
[callId]: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../projection/request.ts"],"names":[],"mappings":"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","file":"request.cjs","sourcesContent":["export type AgentProjectionStatus =\n | \"pending\"\n | \"streaming\"\n | \"awaiting-tools\"\n | \"complete\"\n | \"error\"\n | \"cancelled\";\n\nexport interface AgentProjectionOperation {\n operationId: string;\n operation: string;\n parentOperationId: string | null;\n status: \"active\" | \"success\" | \"failed\" | \"cancelled\";\n metadata: Record<string, unknown> | null;\n result: Record<string, unknown> | null;\n}\n\nexport interface AgentProjectionTool {\n callId: string;\n toolName: string;\n status:\n | \"started\"\n | \"progress\"\n | \"step\"\n | \"preview\"\n | \"completed\"\n | \"error\"\n | \"delegated\";\n message: string | null;\n data: Record<string, unknown> | null;\n}\n\nexport interface AgentProjectionRenderBlock {\n blockId: string;\n blockIndex: number;\n type: string;\n status: \"streaming\" | \"complete\" | \"error\";\n content: string | null;\n data: Record<string, unknown> | null;\n metadata: Record<string, unknown> | null;\n}\n\nexport interface AgentRequestProjection {\n requestId: string;\n conversationId: string | null;\n status: AgentProjectionStatus;\n answer: string;\n reasoning: string;\n reasoningActive: boolean;\n phase: string | null;\n phaseHistory: string[];\n operations: Record<string, AgentProjectionOperation>;\n tools: Record<string, AgentProjectionTool>;\n renderBlocks: Record<string, AgentProjectionRenderBlock>;\n renderBlockOrder: string[];\n completion: Record<string, unknown> | null;\n error: Record<string, unknown> | null;\n lastTransportSeq: number;\n eventCount: number;\n}\n\nexport interface AgentProjectionEvent {\n event: string;\n data?: unknown;\n stream_seq?: number;\n}\n\nconst asRecord = (value: unknown): Record<string, unknown> =>\n value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n\nconst asString = (value: unknown): string | null =>\n typeof value === \"string\" ? value : null;\n\nconst asNumber = (value: unknown): number | null =>\n typeof value === \"number\" && Number.isFinite(value) ? value : null;\n\nexport function createAgentRequestProjection(input: {\n requestId: string;\n conversationId?: string | null;\n}): AgentRequestProjection {\n return {\n requestId: input.requestId,\n conversationId: input.conversationId ?? null,\n status: \"pending\",\n answer: \"\",\n reasoning: \"\",\n reasoningActive: false,\n phase: null,\n phaseHistory: [],\n operations: {},\n tools: {},\n renderBlocks: {},\n renderBlockOrder: [],\n completion: null,\n error: null,\n lastTransportSeq: 0,\n eventCount: 0,\n };\n}\n\nfunction toolStatus(event: string): AgentProjectionTool[\"status\"] {\n switch (event) {\n case \"tool_started\":\n return \"started\";\n case \"tool_step\":\n return \"step\";\n case \"tool_result_preview\":\n return \"preview\";\n case \"tool_completed\":\n return \"completed\";\n case \"tool_error\":\n return \"error\";\n case \"tool_delegated\":\n return \"delegated\";\n default:\n return \"progress\";\n }\n}\n\nexport function projectAgentEvent(\n current: AgentRequestProjection,\n event: AgentProjectionEvent,\n): AgentRequestProjection {\n const streamSeq = asNumber(event.stream_seq);\n if (streamSeq !== null && streamSeq <= current.lastTransportSeq) return current;\n\n const data = asRecord(event.data);\n const next: AgentRequestProjection = {\n ...current,\n status: current.status === \"pending\" ? \"streaming\" : current.status,\n lastTransportSeq: streamSeq ?? current.lastTransportSeq,\n eventCount: current.eventCount + 1,\n };\n\n switch (event.event) {\n case \"chunk\": {\n const text = asString(data.text);\n return text === null ? next : { ...next, answer: current.answer + text };\n }\n case \"reasoning_chunk\": {\n const text = asString(data.text);\n return text === null\n ? next\n : {\n ...next,\n reasoning: current.reasoning + text,\n reasoningActive: true,\n };\n }\n case \"reasoning\":\n return {\n ...next,\n reasoningActive: data.state === \"started\",\n };\n case \"phase\": {\n const phase = asString(data.phase);\n if (phase === null) return next;\n return {\n ...next,\n phase,\n phaseHistory: [...current.phaseHistory, phase],\n };\n }\n case \"init\": {\n const operationId = asString(data.operation_id);\n const operation = asString(data.operation);\n if (operationId === null || operation === null) return next;\n return {\n ...next,\n operations: {\n ...current.operations,\n [operationId]: {\n operationId,\n operation,\n parentOperationId: asString(data.parent_operation_id),\n status: \"active\",\n metadata: Object.keys(asRecord(data.metadata)).length\n ? asRecord(data.metadata)\n : null,\n result: null,\n },\n },\n };\n }\n case \"completion\": {\n const operationId = asString(data.operation_id);\n const operation = asString(data.operation);\n const rawStatus = asString(data.status);\n const status: AgentProjectionOperation[\"status\"] =\n rawStatus === \"failed\" || rawStatus === \"cancelled\"\n ? rawStatus\n : \"success\";\n const result = asRecord(data.result);\n const operations = operationId\n ? {\n ...current.operations,\n [operationId]: {\n ...(current.operations[operationId] ?? {\n operationId,\n operation: operation ?? \"unknown\",\n parentOperationId: null,\n metadata: null,\n }),\n status,\n result,\n },\n }\n : current.operations;\n if (operation === \"user_request\") {\n return {\n ...next,\n operations,\n completion: data,\n status:\n status === \"success\"\n ? \"complete\"\n : status === \"cancelled\"\n ? \"cancelled\"\n : \"error\",\n };\n }\n return { ...next, operations };\n }\n case \"tool_event\": {\n const callId = asString(data.call_id);\n const toolName = asString(data.tool_name);\n const lifecycle = asString(data.event);\n if (callId === null || toolName === null || lifecycle === null) return next;\n const status = toolStatus(lifecycle);\n return {\n ...next,\n status:\n status === \"started\" || status === \"delegated\"\n ? \"awaiting-tools\"\n : status === \"completed\" || status === \"error\"\n ? \"streaming\"\n : next.status,\n tools: {\n ...current.tools,\n [callId]: {\n callId,\n toolName,\n status,\n message: asString(data.message),\n data: Object.keys(asRecord(data.data)).length ? asRecord(data.data) : null,\n },\n },\n };\n }\n case \"render_block\": {\n const blockId = asString(data.blockId);\n const blockIndex = asNumber(data.blockIndex);\n const type = asString(data.type);\n if (blockId === null || blockIndex === null || type === null) return next;\n const alreadyKnown = Object.hasOwn(current.renderBlocks, blockId);\n return {\n ...next,\n renderBlocks: {\n ...current.renderBlocks,\n [blockId]: {\n blockId,\n blockIndex,\n type,\n status:\n data.status === \"complete\" || data.status === \"error\"\n ? data.status\n : \"streaming\",\n content: asString(data.content),\n data: Object.keys(asRecord(data.data)).length ? asRecord(data.data) : null,\n metadata: Object.keys(asRecord(data.metadata)).length\n ? asRecord(data.metadata)\n : null,\n },\n },\n renderBlockOrder: alreadyKnown\n ? current.renderBlockOrder\n : [...current.renderBlockOrder, blockId],\n };\n }\n case \"error\":\n return { ...next, status: \"error\", error: data };\n case \"end\":\n return {\n ...next,\n status:\n current.status === \"error\" || current.status === \"cancelled\"\n ? current.status\n : \"complete\",\n reasoningActive: false,\n };\n case \"data\": {\n const conversationId =\n data.type === \"conversation_id\" ? asString(data.conversation_id) : null;\n return conversationId === null ? next : { ...next, conversationId };\n }\n default:\n return next;\n }\n}\n\nexport function projectAgentEvents(\n initial: AgentRequestProjection,\n events: readonly AgentProjectionEvent[],\n): AgentRequestProjection {\n return events.reduce(projectAgentEvent, initial);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../projection/request.ts"],"names":[],"mappings":";;;AAmEA,IAAM,QAAA,GAAW,CAAC,KAAA,KAChB,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAC9D,QACD,EAAC;AAEP,IAAM,WAAW,CAAC,KAAA,KAChB,OAAO,KAAA,KAAU,WAAW,KAAA,GAAQ,IAAA;AAEtC,IAAM,QAAA,GAAW,CAAC,KAAA,KAChB,OAAO,KAAA,KAAU,YAAY,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,GAAI,KAAA,GAAQ,IAAA;AAEzD,SAAS,6BAA6B,KAAA,EAGlB;AACzB,EAAA,OAAO;AAAA,IACL,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,cAAA,EAAgB,MAAM,cAAA,IAAkB,IAAA;AAAA,IACxC,MAAA,EAAQ,SAAA;AAAA,IACR,MAAA,EAAQ,EAAA;AAAA,IACR,SAAA,EAAW,EAAA;AAAA,IACX,eAAA,EAAiB,KAAA;AAAA,IACjB,KAAA,EAAO,IAAA;AAAA,IACP,cAAc,EAAC;AAAA,IACf,YAAY,EAAC;AAAA,IACb,OAAO,EAAC;AAAA,IACR,cAAc,EAAC;AAAA,IACf,kBAAkB,EAAC;AAAA,IACnB,UAAA,EAAY,IAAA;AAAA,IACZ,KAAA,EAAO,IAAA;AAAA,IACP,gBAAA,EAAkB,CAAA;AAAA,IAClB,UAAA,EAAY;AAAA,GACd;AACF;AAEA,SAAS,WAAW,KAAA,EAA8C;AAChE,EAAA,QAAQ,KAAA;AAAO,IACb,KAAK,cAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,qBAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,gBAAA;AACH,MAAA,OAAO,WAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,OAAA;AAAA,IACT,KAAK,gBAAA;AACH,MAAA,OAAO,WAAA;AAAA,IACT;AACE,MAAA,OAAO,UAAA;AAAA;AAEb;AAEO,SAAS,iBAAA,CACd,SACA,KAAA,EACwB;AACxB,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,KAAA,CAAM,UAAU,CAAA;AAC3C,EAAA,IAAI,SAAA,KAAc,IAAA,IAAQ,SAAA,IAAa,OAAA,CAAQ,kBAAkB,OAAO,OAAA;AAExE,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;AAChC,EAAA,MAAM,IAAA,GAA+B;AAAA,IACnC,GAAG,OAAA;AAAA,IACH,MAAA,EAAQ,OAAA,CAAQ,MAAA,KAAW,SAAA,GAAY,cAAc,OAAA,CAAQ,MAAA;AAAA,IAC7D,gBAAA,EAAkB,aAAa,OAAA,CAAQ,gBAAA;AAAA,IACvC,UAAA,EAAY,QAAQ,UAAA,GAAa;AAAA,GACnC;AAEA,EAAA,QAAQ,MAAM,KAAA;AAAO,IACnB,KAAK,OAAA,EAAS;AACZ,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAC/B,MAAA,OAAO,IAAA,KAAS,OAAO,IAAA,GAAO,EAAE,GAAG,IAAA,EAAM,MAAA,EAAQ,OAAA,CAAQ,MAAA,GAAS,IAAA,EAAK;AAAA,IACzE;AAAA,IACA,KAAK,iBAAA,EAAmB;AACtB,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAC/B,MAAA,OAAO,IAAA,KAAS,OACZ,IAAA,GACA;AAAA,QACE,GAAG,IAAA;AAAA,QACH,SAAA,EAAW,QAAQ,SAAA,GAAY,IAAA;AAAA,QAC/B,eAAA,EAAiB;AAAA,OACnB;AAAA,IACN;AAAA,IACA,KAAK,WAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,IAAA;AAAA,QACH,eAAA,EAAiB,KAAK,KAAA,KAAU;AAAA,OAClC;AAAA,IACF,KAAK,OAAA,EAAS;AACZ,MAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA;AACjC,MAAA,IAAI,KAAA,KAAU,MAAM,OAAO,IAAA;AAC3B,MAAA,OAAO;AAAA,QACL,GAAG,IAAA;AAAA,QACH,KAAA;AAAA,QACA,YAAA,EAAc,CAAC,GAAG,OAAA,CAAQ,cAAc,KAAK;AAAA,OAC/C;AAAA,IACF;AAAA,IACA,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,WAAA,GAAc,QAAA,CAAS,IAAA,CAAK,YAAY,CAAA;AAC9C,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA;AACzC,MAAA,IAAI,WAAA,KAAgB,IAAA,IAAQ,SAAA,KAAc,IAAA,EAAM,OAAO,IAAA;AACvD,MAAA,OAAO;AAAA,QACL,GAAG,IAAA;AAAA,QACH,UAAA,EAAY;AAAA,UACV,GAAG,OAAA,CAAQ,UAAA;AAAA,UACX,CAAC,WAAW,GAAG;AAAA,YACb,WAAA;AAAA,YACA,SAAA;AAAA,YACA,iBAAA,EAAmB,QAAA,CAAS,IAAA,CAAK,mBAAmB,CAAA;AAAA,YACpD,MAAA,EAAQ,QAAA;AAAA,YACR,QAAA,EAAU,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAE,MAAA,GAC3C,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA,GACtB,IAAA;AAAA,YACJ,MAAA,EAAQ;AAAA;AACV;AACF,OACF;AAAA,IACF;AAAA,IACA,KAAK,YAAA,EAAc;AACjB,MAAA,MAAM,WAAA,GAAc,QAAA,CAAS,IAAA,CAAK,YAAY,CAAA;AAC9C,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA;AACzC,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,IAAA,CAAK,MAAM,CAAA;AACtC,MAAA,MAAM,MAAA,GACJ,SAAA,KAAc,QAAA,IAAY,SAAA,KAAc,cACpC,SAAA,GACA,SAAA;AACN,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,MAAM,CAAA;AACnC,MAAA,MAAM,aAAa,WAAA,GACf;AAAA,QACE,GAAG,OAAA,CAAQ,UAAA;AAAA,QACX,CAAC,WAAW,GAAG;AAAA,UACb,GAAI,OAAA,CAAQ,UAAA,CAAW,WAAW,CAAA,IAAK;AAAA,YACrC,WAAA;AAAA,YACA,WAAW,SAAA,IAAa,SAAA;AAAA,YACxB,iBAAA,EAAmB,IAAA;AAAA,YACnB,QAAA,EAAU;AAAA,WACZ;AAAA,UACA,MAAA;AAAA,UACA;AAAA;AACF,UAEF,OAAA,CAAQ,UAAA;AACZ,MAAA,IAAI,cAAc,cAAA,EAAgB;AAChC,QAAA,OAAO;AAAA,UACL,GAAG,IAAA;AAAA,UACH,UAAA;AAAA,UACA,UAAA,EAAY,IAAA;AAAA,UACZ,QACE,MAAA,KAAW,SAAA,GACP,UAAA,GACA,MAAA,KAAW,cACT,WAAA,GACA;AAAA,SACV;AAAA,MACF;AACA,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,UAAA,EAAW;AAAA,IAC/B;AAAA,IACA,KAAK,YAAA,EAAc;AACjB,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,OAAO,CAAA;AACpC,MAAA,MAAM,QAAA,GAAW,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA;AACxC,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA;AACrC,MAAA,IAAI,WAAW,IAAA,IAAQ,QAAA,KAAa,IAAA,IAAQ,SAAA,KAAc,MAAM,OAAO,IAAA;AACvE,MAAA,MAAM,MAAA,GAAS,WAAW,SAAS,CAAA;AACnC,MAAA,OAAO;AAAA,QACL,GAAG,IAAA;AAAA,QACH,MAAA,EACE,WAAW,WAAA,GACP,gBAAA,GACA,WAAW,WAAA,IAAe,MAAA,KAAW,OAAA,GACnC,WAAA,GACA,IAAA,CAAK,MAAA;AAAA,QACb,KAAA,EAAO;AAAA,UACL,GAAG,OAAA,CAAQ,KAAA;AAAA,UACX,CAAC,MAAM,GAAG;AAAA,YACR,MAAA;AAAA,YACA,QAAA;AAAA,YACA,MAAA;AAAA,YACA,OAAA,EAAS,QAAA,CAAS,IAAA,CAAK,OAAO,CAAA;AAAA,YAC9B,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,GAAI;AAAA;AACxE;AACF,OACF;AAAA,IACF;AAAA,IACA,KAAK,cAAA,EAAgB;AACnB,MAAA,MAAM,OAAA,GAAU,QAAA,CAAS,IAAA,CAAK,OAAO,CAAA;AACrC,MAAA,MAAM,UAAA,GAAa,QAAA,CAAS,IAAA,CAAK,UAAU,CAAA;AAC3C,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAC/B,MAAA,IAAI,YAAY,IAAA,IAAQ,UAAA,KAAe,IAAA,IAAQ,IAAA,KAAS,MAAM,OAAO,IAAA;AACrE,MAAA,MAAM,YAAA,GAAe,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,cAAc,OAAO,CAAA;AAChE,MAAA,OAAO;AAAA,QACL,GAAG,IAAA;AAAA,QACH,YAAA,EAAc;AAAA,UACZ,GAAG,OAAA,CAAQ,YAAA;AAAA,UACX,CAAC,OAAO,GAAG;AAAA,YACT,OAAA;AAAA,YACA,UAAA;AAAA,YACA,IAAA;AAAA,YACA,MAAA,EACE,KAAK,MAAA,KAAW,UAAA,IAAc,KAAK,MAAA,KAAW,OAAA,GAC1C,KAAK,MAAA,GACL,WAAA;AAAA,YACN,OAAA,EAAS,QAAA,CAAS,IAAA,CAAK,OAAO,CAAA;AAAA,YAC9B,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA;AAAA,YACtE,QAAA,EAAU,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAE,MAAA,GAC3C,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA,GACtB;AAAA;AACN,SACF;AAAA,QACA,gBAAA,EAAkB,eACd,OAAA,CAAQ,gBAAA,GACR,CAAC,GAAG,OAAA,CAAQ,kBAAkB,OAAO;AAAA,OAC3C;AAAA,IACF;AAAA,IACA,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,OAAO,IAAA,EAAK;AAAA,IACjD,KAAK,KAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,IAAA;AAAA,QACH,MAAA,EACE,QAAQ,MAAA,KAAW,OAAA,IAAW,QAAQ,MAAA,KAAW,WAAA,GAC7C,QAAQ,MAAA,GACR,UAAA;AAAA,QACN,eAAA,EAAiB;AAAA,OACnB;AAAA,IACF,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,iBACJ,IAAA,CAAK,IAAA,KAAS,oBAAoB,QAAA,CAAS,IAAA,CAAK,eAAe,CAAA,GAAI,IAAA;AACrE,MAAA,OAAO,mBAAmB,IAAA,GAAO,IAAA,GAAO,EAAE,GAAG,MAAM,cAAA,EAAe;AAAA,IACpE;AAAA,IACA;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;AAEO,SAAS,kBAAA,CACd,SACA,MAAA,EACwB;AACxB,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,iBAAA,EAAmB,OAAO,CAAA;AACjD","file":"request.cjs","sourcesContent":["export type AgentProjectionStatus =\n | \"pending\"\n | \"streaming\"\n | \"awaiting-tools\"\n | \"complete\"\n | \"error\"\n | \"cancelled\";\n\nexport interface AgentProjectionOperation {\n operationId: string;\n operation: string;\n parentOperationId: string | null;\n status: \"active\" | \"success\" | \"failed\" | \"cancelled\";\n metadata: Record<string, unknown> | null;\n result: Record<string, unknown> | null;\n}\n\nexport interface AgentProjectionTool {\n callId: string;\n toolName: string;\n status:\n | \"started\"\n | \"progress\"\n | \"step\"\n | \"preview\"\n | \"completed\"\n | \"error\"\n | \"delegated\";\n message: string | null;\n data: Record<string, unknown> | null;\n}\n\nexport interface AgentProjectionRenderBlock {\n blockId: string;\n blockIndex: number;\n type: string;\n status: \"streaming\" | \"complete\" | \"error\";\n content: string | null;\n data: Record<string, unknown> | null;\n metadata: Record<string, unknown> | null;\n}\n\nexport interface AgentRequestProjection {\n requestId: string;\n conversationId: string | null;\n status: AgentProjectionStatus;\n answer: string;\n reasoning: string;\n reasoningActive: boolean;\n phase: string | null;\n phaseHistory: string[];\n operations: Record<string, AgentProjectionOperation>;\n tools: Record<string, AgentProjectionTool>;\n renderBlocks: Record<string, AgentProjectionRenderBlock>;\n renderBlockOrder: string[];\n completion: Record<string, unknown> | null;\n error: Record<string, unknown> | null;\n lastTransportSeq: number;\n eventCount: number;\n}\n\nexport interface AgentProjectionEvent {\n event: string;\n data?: unknown;\n stream_seq?: number;\n}\n\nconst asRecord = (value: unknown): Record<string, unknown> =>\n value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n\nconst asString = (value: unknown): string | null =>\n typeof value === \"string\" ? value : null;\n\nconst asNumber = (value: unknown): number | null =>\n typeof value === \"number\" && Number.isFinite(value) ? value : null;\n\nexport function createAgentRequestProjection(input: {\n requestId: string;\n conversationId?: string | null;\n}): AgentRequestProjection {\n return {\n requestId: input.requestId,\n conversationId: input.conversationId ?? null,\n status: \"pending\",\n answer: \"\",\n reasoning: \"\",\n reasoningActive: false,\n phase: null,\n phaseHistory: [],\n operations: {},\n tools: {},\n renderBlocks: {},\n renderBlockOrder: [],\n completion: null,\n error: null,\n lastTransportSeq: 0,\n eventCount: 0,\n };\n}\n\nfunction toolStatus(event: string): AgentProjectionTool[\"status\"] {\n switch (event) {\n case \"tool_started\":\n return \"started\";\n case \"tool_step\":\n return \"step\";\n case \"tool_result_preview\":\n return \"preview\";\n case \"tool_completed\":\n return \"completed\";\n case \"tool_error\":\n return \"error\";\n case \"tool_delegated\":\n return \"delegated\";\n default:\n return \"progress\";\n }\n}\n\nexport function projectAgentEvent(\n current: AgentRequestProjection,\n event: AgentProjectionEvent,\n): AgentRequestProjection {\n const streamSeq = asNumber(event.stream_seq);\n if (streamSeq !== null && streamSeq <= current.lastTransportSeq) return current;\n\n const data = asRecord(event.data);\n const next: AgentRequestProjection = {\n ...current,\n status: current.status === \"pending\" ? \"streaming\" : current.status,\n lastTransportSeq: streamSeq ?? current.lastTransportSeq,\n eventCount: current.eventCount + 1,\n };\n\n switch (event.event) {\n case \"chunk\": {\n const text = asString(data.text);\n return text === null ? next : { ...next, answer: current.answer + text };\n }\n case \"reasoning_chunk\": {\n const text = asString(data.text);\n return text === null\n ? next\n : {\n ...next,\n reasoning: current.reasoning + text,\n reasoningActive: true,\n };\n }\n case \"reasoning\":\n return {\n ...next,\n reasoningActive: data.state === \"started\",\n };\n case \"phase\": {\n const phase = asString(data.phase);\n if (phase === null) return next;\n return {\n ...next,\n phase,\n phaseHistory: [...current.phaseHistory, phase],\n };\n }\n case \"init\": {\n const operationId = asString(data.operation_id);\n const operation = asString(data.operation);\n if (operationId === null || operation === null) return next;\n return {\n ...next,\n operations: {\n ...current.operations,\n [operationId]: {\n operationId,\n operation,\n parentOperationId: asString(data.parent_operation_id),\n status: \"active\",\n metadata: Object.keys(asRecord(data.metadata)).length\n ? asRecord(data.metadata)\n : null,\n result: null,\n },\n },\n };\n }\n case \"completion\": {\n const operationId = asString(data.operation_id);\n const operation = asString(data.operation);\n const rawStatus = asString(data.status);\n const status: AgentProjectionOperation[\"status\"] =\n rawStatus === \"failed\" || rawStatus === \"cancelled\"\n ? rawStatus\n : \"success\";\n const result = asRecord(data.result);\n const operations = operationId\n ? {\n ...current.operations,\n [operationId]: {\n ...(current.operations[operationId] ?? {\n operationId,\n operation: operation ?? \"unknown\",\n parentOperationId: null,\n metadata: null,\n }),\n status,\n result,\n },\n }\n : current.operations;\n if (operation === \"user_request\") {\n return {\n ...next,\n operations,\n completion: data,\n status:\n status === \"success\"\n ? \"complete\"\n : status === \"cancelled\"\n ? \"cancelled\"\n : \"error\",\n };\n }\n return { ...next, operations };\n }\n case \"tool_event\": {\n const callId = asString(data.call_id);\n const toolName = asString(data.tool_name);\n const lifecycle = asString(data.event);\n if (callId === null || toolName === null || lifecycle === null) return next;\n const status = toolStatus(lifecycle);\n return {\n ...next,\n status:\n status === \"delegated\"\n ? \"awaiting-tools\"\n : status === \"completed\" || status === \"error\"\n ? \"streaming\"\n : next.status,\n tools: {\n ...current.tools,\n [callId]: {\n callId,\n toolName,\n status,\n message: asString(data.message),\n data: Object.keys(asRecord(data.data)).length ? asRecord(data.data) : null,\n },\n },\n };\n }\n case \"render_block\": {\n const blockId = asString(data.blockId);\n const blockIndex = asNumber(data.blockIndex);\n const type = asString(data.type);\n if (blockId === null || blockIndex === null || type === null) return next;\n const alreadyKnown = Object.hasOwn(current.renderBlocks, blockId);\n return {\n ...next,\n renderBlocks: {\n ...current.renderBlocks,\n [blockId]: {\n blockId,\n blockIndex,\n type,\n status:\n data.status === \"complete\" || data.status === \"error\"\n ? data.status\n : \"streaming\",\n content: asString(data.content),\n data: Object.keys(asRecord(data.data)).length ? asRecord(data.data) : null,\n metadata: Object.keys(asRecord(data.metadata)).length\n ? asRecord(data.metadata)\n : null,\n },\n },\n renderBlockOrder: alreadyKnown\n ? current.renderBlockOrder\n : [...current.renderBlockOrder, blockId],\n };\n }\n case \"error\":\n return { ...next, status: \"error\", error: data };\n case \"end\":\n return {\n ...next,\n status:\n current.status === \"error\" || current.status === \"cancelled\"\n ? current.status\n : \"complete\",\n reasoningActive: false,\n };\n case \"data\": {\n const conversationId =\n data.type === \"conversation_id\" ? asString(data.conversation_id) : null;\n return conversationId === null ? next : { ...next, conversationId };\n }\n default:\n return next;\n }\n}\n\nexport function projectAgentEvents(\n initial: AgentRequestProjection,\n events: readonly AgentProjectionEvent[],\n): AgentRequestProjection {\n return events.reduce(projectAgentEvent, initial);\n}\n"]}
|
|
@@ -133,7 +133,7 @@ function projectAgentEvent(current, event) {
|
|
|
133
133
|
const status = toolStatus(lifecycle);
|
|
134
134
|
return {
|
|
135
135
|
...next,
|
|
136
|
-
status: status === "
|
|
136
|
+
status: status === "delegated" ? "awaiting-tools" : status === "completed" || status === "error" ? "streaming" : next.status,
|
|
137
137
|
tools: {
|
|
138
138
|
...current.tools,
|
|
139
139
|
[callId]: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../projection/request.ts"],"names":[],"mappings":"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","file":"request.js","sourcesContent":["export type AgentProjectionStatus =\n | \"pending\"\n | \"streaming\"\n | \"awaiting-tools\"\n | \"complete\"\n | \"error\"\n | \"cancelled\";\n\nexport interface AgentProjectionOperation {\n operationId: string;\n operation: string;\n parentOperationId: string | null;\n status: \"active\" | \"success\" | \"failed\" | \"cancelled\";\n metadata: Record<string, unknown> | null;\n result: Record<string, unknown> | null;\n}\n\nexport interface AgentProjectionTool {\n callId: string;\n toolName: string;\n status:\n | \"started\"\n | \"progress\"\n | \"step\"\n | \"preview\"\n | \"completed\"\n | \"error\"\n | \"delegated\";\n message: string | null;\n data: Record<string, unknown> | null;\n}\n\nexport interface AgentProjectionRenderBlock {\n blockId: string;\n blockIndex: number;\n type: string;\n status: \"streaming\" | \"complete\" | \"error\";\n content: string | null;\n data: Record<string, unknown> | null;\n metadata: Record<string, unknown> | null;\n}\n\nexport interface AgentRequestProjection {\n requestId: string;\n conversationId: string | null;\n status: AgentProjectionStatus;\n answer: string;\n reasoning: string;\n reasoningActive: boolean;\n phase: string | null;\n phaseHistory: string[];\n operations: Record<string, AgentProjectionOperation>;\n tools: Record<string, AgentProjectionTool>;\n renderBlocks: Record<string, AgentProjectionRenderBlock>;\n renderBlockOrder: string[];\n completion: Record<string, unknown> | null;\n error: Record<string, unknown> | null;\n lastTransportSeq: number;\n eventCount: number;\n}\n\nexport interface AgentProjectionEvent {\n event: string;\n data?: unknown;\n stream_seq?: number;\n}\n\nconst asRecord = (value: unknown): Record<string, unknown> =>\n value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n\nconst asString = (value: unknown): string | null =>\n typeof value === \"string\" ? value : null;\n\nconst asNumber = (value: unknown): number | null =>\n typeof value === \"number\" && Number.isFinite(value) ? value : null;\n\nexport function createAgentRequestProjection(input: {\n requestId: string;\n conversationId?: string | null;\n}): AgentRequestProjection {\n return {\n requestId: input.requestId,\n conversationId: input.conversationId ?? null,\n status: \"pending\",\n answer: \"\",\n reasoning: \"\",\n reasoningActive: false,\n phase: null,\n phaseHistory: [],\n operations: {},\n tools: {},\n renderBlocks: {},\n renderBlockOrder: [],\n completion: null,\n error: null,\n lastTransportSeq: 0,\n eventCount: 0,\n };\n}\n\nfunction toolStatus(event: string): AgentProjectionTool[\"status\"] {\n switch (event) {\n case \"tool_started\":\n return \"started\";\n case \"tool_step\":\n return \"step\";\n case \"tool_result_preview\":\n return \"preview\";\n case \"tool_completed\":\n return \"completed\";\n case \"tool_error\":\n return \"error\";\n case \"tool_delegated\":\n return \"delegated\";\n default:\n return \"progress\";\n }\n}\n\nexport function projectAgentEvent(\n current: AgentRequestProjection,\n event: AgentProjectionEvent,\n): AgentRequestProjection {\n const streamSeq = asNumber(event.stream_seq);\n if (streamSeq !== null && streamSeq <= current.lastTransportSeq) return current;\n\n const data = asRecord(event.data);\n const next: AgentRequestProjection = {\n ...current,\n status: current.status === \"pending\" ? \"streaming\" : current.status,\n lastTransportSeq: streamSeq ?? current.lastTransportSeq,\n eventCount: current.eventCount + 1,\n };\n\n switch (event.event) {\n case \"chunk\": {\n const text = asString(data.text);\n return text === null ? next : { ...next, answer: current.answer + text };\n }\n case \"reasoning_chunk\": {\n const text = asString(data.text);\n return text === null\n ? next\n : {\n ...next,\n reasoning: current.reasoning + text,\n reasoningActive: true,\n };\n }\n case \"reasoning\":\n return {\n ...next,\n reasoningActive: data.state === \"started\",\n };\n case \"phase\": {\n const phase = asString(data.phase);\n if (phase === null) return next;\n return {\n ...next,\n phase,\n phaseHistory: [...current.phaseHistory, phase],\n };\n }\n case \"init\": {\n const operationId = asString(data.operation_id);\n const operation = asString(data.operation);\n if (operationId === null || operation === null) return next;\n return {\n ...next,\n operations: {\n ...current.operations,\n [operationId]: {\n operationId,\n operation,\n parentOperationId: asString(data.parent_operation_id),\n status: \"active\",\n metadata: Object.keys(asRecord(data.metadata)).length\n ? asRecord(data.metadata)\n : null,\n result: null,\n },\n },\n };\n }\n case \"completion\": {\n const operationId = asString(data.operation_id);\n const operation = asString(data.operation);\n const rawStatus = asString(data.status);\n const status: AgentProjectionOperation[\"status\"] =\n rawStatus === \"failed\" || rawStatus === \"cancelled\"\n ? rawStatus\n : \"success\";\n const result = asRecord(data.result);\n const operations = operationId\n ? {\n ...current.operations,\n [operationId]: {\n ...(current.operations[operationId] ?? {\n operationId,\n operation: operation ?? \"unknown\",\n parentOperationId: null,\n metadata: null,\n }),\n status,\n result,\n },\n }\n : current.operations;\n if (operation === \"user_request\") {\n return {\n ...next,\n operations,\n completion: data,\n status:\n status === \"success\"\n ? \"complete\"\n : status === \"cancelled\"\n ? \"cancelled\"\n : \"error\",\n };\n }\n return { ...next, operations };\n }\n case \"tool_event\": {\n const callId = asString(data.call_id);\n const toolName = asString(data.tool_name);\n const lifecycle = asString(data.event);\n if (callId === null || toolName === null || lifecycle === null) return next;\n const status = toolStatus(lifecycle);\n return {\n ...next,\n status:\n status === \"started\" || status === \"delegated\"\n ? \"awaiting-tools\"\n : status === \"completed\" || status === \"error\"\n ? \"streaming\"\n : next.status,\n tools: {\n ...current.tools,\n [callId]: {\n callId,\n toolName,\n status,\n message: asString(data.message),\n data: Object.keys(asRecord(data.data)).length ? asRecord(data.data) : null,\n },\n },\n };\n }\n case \"render_block\": {\n const blockId = asString(data.blockId);\n const blockIndex = asNumber(data.blockIndex);\n const type = asString(data.type);\n if (blockId === null || blockIndex === null || type === null) return next;\n const alreadyKnown = Object.hasOwn(current.renderBlocks, blockId);\n return {\n ...next,\n renderBlocks: {\n ...current.renderBlocks,\n [blockId]: {\n blockId,\n blockIndex,\n type,\n status:\n data.status === \"complete\" || data.status === \"error\"\n ? data.status\n : \"streaming\",\n content: asString(data.content),\n data: Object.keys(asRecord(data.data)).length ? asRecord(data.data) : null,\n metadata: Object.keys(asRecord(data.metadata)).length\n ? asRecord(data.metadata)\n : null,\n },\n },\n renderBlockOrder: alreadyKnown\n ? current.renderBlockOrder\n : [...current.renderBlockOrder, blockId],\n };\n }\n case \"error\":\n return { ...next, status: \"error\", error: data };\n case \"end\":\n return {\n ...next,\n status:\n current.status === \"error\" || current.status === \"cancelled\"\n ? current.status\n : \"complete\",\n reasoningActive: false,\n };\n case \"data\": {\n const conversationId =\n data.type === \"conversation_id\" ? asString(data.conversation_id) : null;\n return conversationId === null ? next : { ...next, conversationId };\n }\n default:\n return next;\n }\n}\n\nexport function projectAgentEvents(\n initial: AgentRequestProjection,\n events: readonly AgentProjectionEvent[],\n): AgentRequestProjection {\n return events.reduce(projectAgentEvent, initial);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../projection/request.ts"],"names":[],"mappings":";AAmEA,IAAM,QAAA,GAAW,CAAC,KAAA,KAChB,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAC9D,QACD,EAAC;AAEP,IAAM,WAAW,CAAC,KAAA,KAChB,OAAO,KAAA,KAAU,WAAW,KAAA,GAAQ,IAAA;AAEtC,IAAM,QAAA,GAAW,CAAC,KAAA,KAChB,OAAO,KAAA,KAAU,YAAY,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,GAAI,KAAA,GAAQ,IAAA;AAEzD,SAAS,6BAA6B,KAAA,EAGlB;AACzB,EAAA,OAAO;AAAA,IACL,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,cAAA,EAAgB,MAAM,cAAA,IAAkB,IAAA;AAAA,IACxC,MAAA,EAAQ,SAAA;AAAA,IACR,MAAA,EAAQ,EAAA;AAAA,IACR,SAAA,EAAW,EAAA;AAAA,IACX,eAAA,EAAiB,KAAA;AAAA,IACjB,KAAA,EAAO,IAAA;AAAA,IACP,cAAc,EAAC;AAAA,IACf,YAAY,EAAC;AAAA,IACb,OAAO,EAAC;AAAA,IACR,cAAc,EAAC;AAAA,IACf,kBAAkB,EAAC;AAAA,IACnB,UAAA,EAAY,IAAA;AAAA,IACZ,KAAA,EAAO,IAAA;AAAA,IACP,gBAAA,EAAkB,CAAA;AAAA,IAClB,UAAA,EAAY;AAAA,GACd;AACF;AAEA,SAAS,WAAW,KAAA,EAA8C;AAChE,EAAA,QAAQ,KAAA;AAAO,IACb,KAAK,cAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,qBAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,gBAAA;AACH,MAAA,OAAO,WAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,OAAA;AAAA,IACT,KAAK,gBAAA;AACH,MAAA,OAAO,WAAA;AAAA,IACT;AACE,MAAA,OAAO,UAAA;AAAA;AAEb;AAEO,SAAS,iBAAA,CACd,SACA,KAAA,EACwB;AACxB,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,KAAA,CAAM,UAAU,CAAA;AAC3C,EAAA,IAAI,SAAA,KAAc,IAAA,IAAQ,SAAA,IAAa,OAAA,CAAQ,kBAAkB,OAAO,OAAA;AAExE,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;AAChC,EAAA,MAAM,IAAA,GAA+B;AAAA,IACnC,GAAG,OAAA;AAAA,IACH,MAAA,EAAQ,OAAA,CAAQ,MAAA,KAAW,SAAA,GAAY,cAAc,OAAA,CAAQ,MAAA;AAAA,IAC7D,gBAAA,EAAkB,aAAa,OAAA,CAAQ,gBAAA;AAAA,IACvC,UAAA,EAAY,QAAQ,UAAA,GAAa;AAAA,GACnC;AAEA,EAAA,QAAQ,MAAM,KAAA;AAAO,IACnB,KAAK,OAAA,EAAS;AACZ,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAC/B,MAAA,OAAO,IAAA,KAAS,OAAO,IAAA,GAAO,EAAE,GAAG,IAAA,EAAM,MAAA,EAAQ,OAAA,CAAQ,MAAA,GAAS,IAAA,EAAK;AAAA,IACzE;AAAA,IACA,KAAK,iBAAA,EAAmB;AACtB,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAC/B,MAAA,OAAO,IAAA,KAAS,OACZ,IAAA,GACA;AAAA,QACE,GAAG,IAAA;AAAA,QACH,SAAA,EAAW,QAAQ,SAAA,GAAY,IAAA;AAAA,QAC/B,eAAA,EAAiB;AAAA,OACnB;AAAA,IACN;AAAA,IACA,KAAK,WAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,IAAA;AAAA,QACH,eAAA,EAAiB,KAAK,KAAA,KAAU;AAAA,OAClC;AAAA,IACF,KAAK,OAAA,EAAS;AACZ,MAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA;AACjC,MAAA,IAAI,KAAA,KAAU,MAAM,OAAO,IAAA;AAC3B,MAAA,OAAO;AAAA,QACL,GAAG,IAAA;AAAA,QACH,KAAA;AAAA,QACA,YAAA,EAAc,CAAC,GAAG,OAAA,CAAQ,cAAc,KAAK;AAAA,OAC/C;AAAA,IACF;AAAA,IACA,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,WAAA,GAAc,QAAA,CAAS,IAAA,CAAK,YAAY,CAAA;AAC9C,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA;AACzC,MAAA,IAAI,WAAA,KAAgB,IAAA,IAAQ,SAAA,KAAc,IAAA,EAAM,OAAO,IAAA;AACvD,MAAA,OAAO;AAAA,QACL,GAAG,IAAA;AAAA,QACH,UAAA,EAAY;AAAA,UACV,GAAG,OAAA,CAAQ,UAAA;AAAA,UACX,CAAC,WAAW,GAAG;AAAA,YACb,WAAA;AAAA,YACA,SAAA;AAAA,YACA,iBAAA,EAAmB,QAAA,CAAS,IAAA,CAAK,mBAAmB,CAAA;AAAA,YACpD,MAAA,EAAQ,QAAA;AAAA,YACR,QAAA,EAAU,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAE,MAAA,GAC3C,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA,GACtB,IAAA;AAAA,YACJ,MAAA,EAAQ;AAAA;AACV;AACF,OACF;AAAA,IACF;AAAA,IACA,KAAK,YAAA,EAAc;AACjB,MAAA,MAAM,WAAA,GAAc,QAAA,CAAS,IAAA,CAAK,YAAY,CAAA;AAC9C,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA;AACzC,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,IAAA,CAAK,MAAM,CAAA;AACtC,MAAA,MAAM,MAAA,GACJ,SAAA,KAAc,QAAA,IAAY,SAAA,KAAc,cACpC,SAAA,GACA,SAAA;AACN,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,MAAM,CAAA;AACnC,MAAA,MAAM,aAAa,WAAA,GACf;AAAA,QACE,GAAG,OAAA,CAAQ,UAAA;AAAA,QACX,CAAC,WAAW,GAAG;AAAA,UACb,GAAI,OAAA,CAAQ,UAAA,CAAW,WAAW,CAAA,IAAK;AAAA,YACrC,WAAA;AAAA,YACA,WAAW,SAAA,IAAa,SAAA;AAAA,YACxB,iBAAA,EAAmB,IAAA;AAAA,YACnB,QAAA,EAAU;AAAA,WACZ;AAAA,UACA,MAAA;AAAA,UACA;AAAA;AACF,UAEF,OAAA,CAAQ,UAAA;AACZ,MAAA,IAAI,cAAc,cAAA,EAAgB;AAChC,QAAA,OAAO;AAAA,UACL,GAAG,IAAA;AAAA,UACH,UAAA;AAAA,UACA,UAAA,EAAY,IAAA;AAAA,UACZ,QACE,MAAA,KAAW,SAAA,GACP,UAAA,GACA,MAAA,KAAW,cACT,WAAA,GACA;AAAA,SACV;AAAA,MACF;AACA,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,UAAA,EAAW;AAAA,IAC/B;AAAA,IACA,KAAK,YAAA,EAAc;AACjB,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,OAAO,CAAA;AACpC,MAAA,MAAM,QAAA,GAAW,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA;AACxC,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA;AACrC,MAAA,IAAI,WAAW,IAAA,IAAQ,QAAA,KAAa,IAAA,IAAQ,SAAA,KAAc,MAAM,OAAO,IAAA;AACvE,MAAA,MAAM,MAAA,GAAS,WAAW,SAAS,CAAA;AACnC,MAAA,OAAO;AAAA,QACL,GAAG,IAAA;AAAA,QACH,MAAA,EACE,WAAW,WAAA,GACP,gBAAA,GACA,WAAW,WAAA,IAAe,MAAA,KAAW,OAAA,GACnC,WAAA,GACA,IAAA,CAAK,MAAA;AAAA,QACb,KAAA,EAAO;AAAA,UACL,GAAG,OAAA,CAAQ,KAAA;AAAA,UACX,CAAC,MAAM,GAAG;AAAA,YACR,MAAA;AAAA,YACA,QAAA;AAAA,YACA,MAAA;AAAA,YACA,OAAA,EAAS,QAAA,CAAS,IAAA,CAAK,OAAO,CAAA;AAAA,YAC9B,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,GAAI;AAAA;AACxE;AACF,OACF;AAAA,IACF;AAAA,IACA,KAAK,cAAA,EAAgB;AACnB,MAAA,MAAM,OAAA,GAAU,QAAA,CAAS,IAAA,CAAK,OAAO,CAAA;AACrC,MAAA,MAAM,UAAA,GAAa,QAAA,CAAS,IAAA,CAAK,UAAU,CAAA;AAC3C,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAC/B,MAAA,IAAI,YAAY,IAAA,IAAQ,UAAA,KAAe,IAAA,IAAQ,IAAA,KAAS,MAAM,OAAO,IAAA;AACrE,MAAA,MAAM,YAAA,GAAe,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,cAAc,OAAO,CAAA;AAChE,MAAA,OAAO;AAAA,QACL,GAAG,IAAA;AAAA,QACH,YAAA,EAAc;AAAA,UACZ,GAAG,OAAA,CAAQ,YAAA;AAAA,UACX,CAAC,OAAO,GAAG;AAAA,YACT,OAAA;AAAA,YACA,UAAA;AAAA,YACA,IAAA;AAAA,YACA,MAAA,EACE,KAAK,MAAA,KAAW,UAAA,IAAc,KAAK,MAAA,KAAW,OAAA,GAC1C,KAAK,MAAA,GACL,WAAA;AAAA,YACN,OAAA,EAAS,QAAA,CAAS,IAAA,CAAK,OAAO,CAAA;AAAA,YAC9B,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA;AAAA,YACtE,QAAA,EAAU,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAE,MAAA,GAC3C,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA,GACtB;AAAA;AACN,SACF;AAAA,QACA,gBAAA,EAAkB,eACd,OAAA,CAAQ,gBAAA,GACR,CAAC,GAAG,OAAA,CAAQ,kBAAkB,OAAO;AAAA,OAC3C;AAAA,IACF;AAAA,IACA,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,OAAO,IAAA,EAAK;AAAA,IACjD,KAAK,KAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,IAAA;AAAA,QACH,MAAA,EACE,QAAQ,MAAA,KAAW,OAAA,IAAW,QAAQ,MAAA,KAAW,WAAA,GAC7C,QAAQ,MAAA,GACR,UAAA;AAAA,QACN,eAAA,EAAiB;AAAA,OACnB;AAAA,IACF,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,iBACJ,IAAA,CAAK,IAAA,KAAS,oBAAoB,QAAA,CAAS,IAAA,CAAK,eAAe,CAAA,GAAI,IAAA;AACrE,MAAA,OAAO,mBAAmB,IAAA,GAAO,IAAA,GAAO,EAAE,GAAG,MAAM,cAAA,EAAe;AAAA,IACpE;AAAA,IACA;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;AAEO,SAAS,kBAAA,CACd,SACA,MAAA,EACwB;AACxB,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,iBAAA,EAAmB,OAAO,CAAA;AACjD","file":"request.js","sourcesContent":["export type AgentProjectionStatus =\n | \"pending\"\n | \"streaming\"\n | \"awaiting-tools\"\n | \"complete\"\n | \"error\"\n | \"cancelled\";\n\nexport interface AgentProjectionOperation {\n operationId: string;\n operation: string;\n parentOperationId: string | null;\n status: \"active\" | \"success\" | \"failed\" | \"cancelled\";\n metadata: Record<string, unknown> | null;\n result: Record<string, unknown> | null;\n}\n\nexport interface AgentProjectionTool {\n callId: string;\n toolName: string;\n status:\n | \"started\"\n | \"progress\"\n | \"step\"\n | \"preview\"\n | \"completed\"\n | \"error\"\n | \"delegated\";\n message: string | null;\n data: Record<string, unknown> | null;\n}\n\nexport interface AgentProjectionRenderBlock {\n blockId: string;\n blockIndex: number;\n type: string;\n status: \"streaming\" | \"complete\" | \"error\";\n content: string | null;\n data: Record<string, unknown> | null;\n metadata: Record<string, unknown> | null;\n}\n\nexport interface AgentRequestProjection {\n requestId: string;\n conversationId: string | null;\n status: AgentProjectionStatus;\n answer: string;\n reasoning: string;\n reasoningActive: boolean;\n phase: string | null;\n phaseHistory: string[];\n operations: Record<string, AgentProjectionOperation>;\n tools: Record<string, AgentProjectionTool>;\n renderBlocks: Record<string, AgentProjectionRenderBlock>;\n renderBlockOrder: string[];\n completion: Record<string, unknown> | null;\n error: Record<string, unknown> | null;\n lastTransportSeq: number;\n eventCount: number;\n}\n\nexport interface AgentProjectionEvent {\n event: string;\n data?: unknown;\n stream_seq?: number;\n}\n\nconst asRecord = (value: unknown): Record<string, unknown> =>\n value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n\nconst asString = (value: unknown): string | null =>\n typeof value === \"string\" ? value : null;\n\nconst asNumber = (value: unknown): number | null =>\n typeof value === \"number\" && Number.isFinite(value) ? value : null;\n\nexport function createAgentRequestProjection(input: {\n requestId: string;\n conversationId?: string | null;\n}): AgentRequestProjection {\n return {\n requestId: input.requestId,\n conversationId: input.conversationId ?? null,\n status: \"pending\",\n answer: \"\",\n reasoning: \"\",\n reasoningActive: false,\n phase: null,\n phaseHistory: [],\n operations: {},\n tools: {},\n renderBlocks: {},\n renderBlockOrder: [],\n completion: null,\n error: null,\n lastTransportSeq: 0,\n eventCount: 0,\n };\n}\n\nfunction toolStatus(event: string): AgentProjectionTool[\"status\"] {\n switch (event) {\n case \"tool_started\":\n return \"started\";\n case \"tool_step\":\n return \"step\";\n case \"tool_result_preview\":\n return \"preview\";\n case \"tool_completed\":\n return \"completed\";\n case \"tool_error\":\n return \"error\";\n case \"tool_delegated\":\n return \"delegated\";\n default:\n return \"progress\";\n }\n}\n\nexport function projectAgentEvent(\n current: AgentRequestProjection,\n event: AgentProjectionEvent,\n): AgentRequestProjection {\n const streamSeq = asNumber(event.stream_seq);\n if (streamSeq !== null && streamSeq <= current.lastTransportSeq) return current;\n\n const data = asRecord(event.data);\n const next: AgentRequestProjection = {\n ...current,\n status: current.status === \"pending\" ? \"streaming\" : current.status,\n lastTransportSeq: streamSeq ?? current.lastTransportSeq,\n eventCount: current.eventCount + 1,\n };\n\n switch (event.event) {\n case \"chunk\": {\n const text = asString(data.text);\n return text === null ? next : { ...next, answer: current.answer + text };\n }\n case \"reasoning_chunk\": {\n const text = asString(data.text);\n return text === null\n ? next\n : {\n ...next,\n reasoning: current.reasoning + text,\n reasoningActive: true,\n };\n }\n case \"reasoning\":\n return {\n ...next,\n reasoningActive: data.state === \"started\",\n };\n case \"phase\": {\n const phase = asString(data.phase);\n if (phase === null) return next;\n return {\n ...next,\n phase,\n phaseHistory: [...current.phaseHistory, phase],\n };\n }\n case \"init\": {\n const operationId = asString(data.operation_id);\n const operation = asString(data.operation);\n if (operationId === null || operation === null) return next;\n return {\n ...next,\n operations: {\n ...current.operations,\n [operationId]: {\n operationId,\n operation,\n parentOperationId: asString(data.parent_operation_id),\n status: \"active\",\n metadata: Object.keys(asRecord(data.metadata)).length\n ? asRecord(data.metadata)\n : null,\n result: null,\n },\n },\n };\n }\n case \"completion\": {\n const operationId = asString(data.operation_id);\n const operation = asString(data.operation);\n const rawStatus = asString(data.status);\n const status: AgentProjectionOperation[\"status\"] =\n rawStatus === \"failed\" || rawStatus === \"cancelled\"\n ? rawStatus\n : \"success\";\n const result = asRecord(data.result);\n const operations = operationId\n ? {\n ...current.operations,\n [operationId]: {\n ...(current.operations[operationId] ?? {\n operationId,\n operation: operation ?? \"unknown\",\n parentOperationId: null,\n metadata: null,\n }),\n status,\n result,\n },\n }\n : current.operations;\n if (operation === \"user_request\") {\n return {\n ...next,\n operations,\n completion: data,\n status:\n status === \"success\"\n ? \"complete\"\n : status === \"cancelled\"\n ? \"cancelled\"\n : \"error\",\n };\n }\n return { ...next, operations };\n }\n case \"tool_event\": {\n const callId = asString(data.call_id);\n const toolName = asString(data.tool_name);\n const lifecycle = asString(data.event);\n if (callId === null || toolName === null || lifecycle === null) return next;\n const status = toolStatus(lifecycle);\n return {\n ...next,\n status:\n status === \"delegated\"\n ? \"awaiting-tools\"\n : status === \"completed\" || status === \"error\"\n ? \"streaming\"\n : next.status,\n tools: {\n ...current.tools,\n [callId]: {\n callId,\n toolName,\n status,\n message: asString(data.message),\n data: Object.keys(asRecord(data.data)).length ? asRecord(data.data) : null,\n },\n },\n };\n }\n case \"render_block\": {\n const blockId = asString(data.blockId);\n const blockIndex = asNumber(data.blockIndex);\n const type = asString(data.type);\n if (blockId === null || blockIndex === null || type === null) return next;\n const alreadyKnown = Object.hasOwn(current.renderBlocks, blockId);\n return {\n ...next,\n renderBlocks: {\n ...current.renderBlocks,\n [blockId]: {\n blockId,\n blockIndex,\n type,\n status:\n data.status === \"complete\" || data.status === \"error\"\n ? data.status\n : \"streaming\",\n content: asString(data.content),\n data: Object.keys(asRecord(data.data)).length ? asRecord(data.data) : null,\n metadata: Object.keys(asRecord(data.metadata)).length\n ? asRecord(data.metadata)\n : null,\n },\n },\n renderBlockOrder: alreadyKnown\n ? current.renderBlockOrder\n : [...current.renderBlockOrder, blockId],\n };\n }\n case \"error\":\n return { ...next, status: \"error\", error: data };\n case \"end\":\n return {\n ...next,\n status:\n current.status === \"error\" || current.status === \"cancelled\"\n ? current.status\n : \"complete\",\n reasoningActive: false,\n };\n case \"data\": {\n const conversationId =\n data.type === \"conversation_id\" ? asString(data.conversation_id) : null;\n return conversationId === null ? next : { ...next, conversationId };\n }\n default:\n return next;\n }\n}\n\nexport function projectAgentEvents(\n initial: AgentRequestProjection,\n events: readonly AgentProjectionEvent[],\n): AgentRequestProjection {\n return events.reduce(projectAgentEvent, initial);\n}\n"]}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// projection/workflow.ts
|
|
4
|
+
var DEFAULT_WORKFLOW_PROJECTION_LIMITS = {
|
|
5
|
+
maxOpenFrameSets: 32,
|
|
6
|
+
maxFramesPerBlock: 256,
|
|
7
|
+
maxBytesPerBlock: 1048576
|
|
8
|
+
};
|
|
9
|
+
function positiveSafeInteger(name, value) {
|
|
10
|
+
if (!Number.isSafeInteger(value) || value < 1) {
|
|
11
|
+
throw new RangeError(`${name} must be a positive safe integer`);
|
|
12
|
+
}
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
function resolveLimits(limits) {
|
|
16
|
+
return {
|
|
17
|
+
maxOpenFrameSets: positiveSafeInteger(
|
|
18
|
+
"maxOpenFrameSets",
|
|
19
|
+
limits?.maxOpenFrameSets ?? DEFAULT_WORKFLOW_PROJECTION_LIMITS.maxOpenFrameSets
|
|
20
|
+
),
|
|
21
|
+
maxFramesPerBlock: positiveSafeInteger(
|
|
22
|
+
"maxFramesPerBlock",
|
|
23
|
+
limits?.maxFramesPerBlock ?? DEFAULT_WORKFLOW_PROJECTION_LIMITS.maxFramesPerBlock
|
|
24
|
+
),
|
|
25
|
+
maxBytesPerBlock: positiveSafeInteger(
|
|
26
|
+
"maxBytesPerBlock",
|
|
27
|
+
limits?.maxBytesPerBlock ?? DEFAULT_WORKFLOW_PROJECTION_LIMITS.maxBytesPerBlock
|
|
28
|
+
)
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function createWorkflowNodeProjection(input) {
|
|
32
|
+
return {
|
|
33
|
+
runId: input.runId,
|
|
34
|
+
nodeId: input.nodeId,
|
|
35
|
+
answer: "",
|
|
36
|
+
reasoning: "",
|
|
37
|
+
blockShadowed: false,
|
|
38
|
+
renderBlocks: {},
|
|
39
|
+
renderBlockOrder: [],
|
|
40
|
+
openFrames: {},
|
|
41
|
+
limits: resolveLimits(input.limits),
|
|
42
|
+
lastRenderBlockIssue: null,
|
|
43
|
+
chunksReceived: 0,
|
|
44
|
+
charsStreamed: 0,
|
|
45
|
+
lastStreamingTs: null,
|
|
46
|
+
lastPhase: null,
|
|
47
|
+
lastTool: null,
|
|
48
|
+
lastWarning: null,
|
|
49
|
+
lastTransportSeq: 0
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function asRecord(value) {
|
|
53
|
+
return value !== null && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
54
|
+
}
|
|
55
|
+
function asString(value) {
|
|
56
|
+
return typeof value === "string" ? value : null;
|
|
57
|
+
}
|
|
58
|
+
function asNumber(value) {
|
|
59
|
+
return typeof value === "number" && Number.isFinite(value) ? value : null;
|
|
60
|
+
}
|
|
61
|
+
function utf8ByteLength(value) {
|
|
62
|
+
return new TextEncoder().encode(value).byteLength;
|
|
63
|
+
}
|
|
64
|
+
function toRenderBlock(value) {
|
|
65
|
+
const data = asRecord(value);
|
|
66
|
+
if (!data) return null;
|
|
67
|
+
const blockId = asString(data.blockId);
|
|
68
|
+
const blockIndex = asNumber(data.blockIndex);
|
|
69
|
+
const type = asString(data.type);
|
|
70
|
+
if (blockId === null || blockIndex === null || type === null) return null;
|
|
71
|
+
return {
|
|
72
|
+
blockId,
|
|
73
|
+
blockIndex,
|
|
74
|
+
type,
|
|
75
|
+
status: data.status === "complete" || data.status === "error" ? data.status : "streaming",
|
|
76
|
+
content: asString(data.content),
|
|
77
|
+
data: asRecord(data.data),
|
|
78
|
+
metadata: asRecord(data.metadata)
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function withIssue(next, event, code, frameId, message, openFrames = next.openFrames) {
|
|
82
|
+
return {
|
|
83
|
+
...next,
|
|
84
|
+
openFrames,
|
|
85
|
+
lastRenderBlockIssue: {
|
|
86
|
+
code,
|
|
87
|
+
frameId,
|
|
88
|
+
streamSeq: event.stream_seq,
|
|
89
|
+
message
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
function withoutFrame(frames, frameId) {
|
|
94
|
+
if (!Object.hasOwn(frames, frameId)) return frames;
|
|
95
|
+
const next = { ...frames };
|
|
96
|
+
delete next[frameId];
|
|
97
|
+
return next;
|
|
98
|
+
}
|
|
99
|
+
function projectRenderFrame(current, event, next) {
|
|
100
|
+
const frameId = event.frame_id;
|
|
101
|
+
const frameCount = event.frame_count ?? 1;
|
|
102
|
+
const frameIndex = event.frame_index ?? 0;
|
|
103
|
+
if (!frameId || !Number.isSafeInteger(frameCount) || !Number.isSafeInteger(frameIndex) || frameCount < 1 || frameIndex < 0 || frameIndex >= frameCount) {
|
|
104
|
+
return withIssue(
|
|
105
|
+
next,
|
|
106
|
+
event,
|
|
107
|
+
"invalid_frame_metadata",
|
|
108
|
+
frameId ?? null,
|
|
109
|
+
"Render block frame metadata is invalid"
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
if (frameCount > current.limits.maxFramesPerBlock) {
|
|
113
|
+
return withIssue(
|
|
114
|
+
next,
|
|
115
|
+
event,
|
|
116
|
+
"frame_limit_exceeded",
|
|
117
|
+
frameId,
|
|
118
|
+
`Render block declares ${frameCount} frames; limit is ${current.limits.maxFramesPerBlock}`,
|
|
119
|
+
withoutFrame(current.openFrames, frameId)
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
const prior = current.openFrames[frameId];
|
|
123
|
+
if (prior && prior.frameCount !== frameCount) {
|
|
124
|
+
return withIssue(
|
|
125
|
+
next,
|
|
126
|
+
event,
|
|
127
|
+
"frame_count_mismatch",
|
|
128
|
+
frameId,
|
|
129
|
+
`Render block frame count changed from ${prior.frameCount} to ${frameCount}`,
|
|
130
|
+
withoutFrame(current.openFrames, frameId)
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
const priorSlice = prior?.slices[frameIndex];
|
|
134
|
+
const byteLength = (prior?.byteLength ?? 0) - (priorSlice === void 0 ? 0 : utf8ByteLength(priorSlice)) + utf8ByteLength(event.delta);
|
|
135
|
+
if (byteLength > current.limits.maxBytesPerBlock) {
|
|
136
|
+
return withIssue(
|
|
137
|
+
next,
|
|
138
|
+
event,
|
|
139
|
+
"byte_limit_exceeded",
|
|
140
|
+
frameId,
|
|
141
|
+
`Render block exceeds ${current.limits.maxBytesPerBlock} UTF-8 bytes`,
|
|
142
|
+
withoutFrame(current.openFrames, frameId)
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
const set = {
|
|
146
|
+
frameCount,
|
|
147
|
+
slices: { ...prior?.slices ?? {}, [frameIndex]: event.delta },
|
|
148
|
+
byteLength
|
|
149
|
+
};
|
|
150
|
+
const openFrames = { ...current.openFrames };
|
|
151
|
+
let limitIssue = null;
|
|
152
|
+
if (!prior && Object.keys(openFrames).length >= current.limits.maxOpenFrameSets) {
|
|
153
|
+
const oldestFrameId = Object.keys(openFrames)[0];
|
|
154
|
+
if (oldestFrameId !== void 0) {
|
|
155
|
+
delete openFrames[oldestFrameId];
|
|
156
|
+
limitIssue = {
|
|
157
|
+
code: "open_frame_limit_exceeded",
|
|
158
|
+
frameId: oldestFrameId,
|
|
159
|
+
streamSeq: event.stream_seq,
|
|
160
|
+
message: `Evicted incomplete render block after reaching ${current.limits.maxOpenFrameSets} open frame sets`
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
openFrames[frameId] = set;
|
|
165
|
+
if (Object.keys(set.slices).length !== frameCount) {
|
|
166
|
+
return {
|
|
167
|
+
...next,
|
|
168
|
+
openFrames,
|
|
169
|
+
lastRenderBlockIssue: limitIssue ?? current.lastRenderBlockIssue
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
delete openFrames[frameId];
|
|
173
|
+
const serialized = Array.from(
|
|
174
|
+
{ length: frameCount },
|
|
175
|
+
(_, index) => set.slices[index] ?? ""
|
|
176
|
+
).join("");
|
|
177
|
+
let parsed;
|
|
178
|
+
try {
|
|
179
|
+
parsed = JSON.parse(serialized);
|
|
180
|
+
} catch (error) {
|
|
181
|
+
const detail = error instanceof Error ? `: ${error.message}` : "";
|
|
182
|
+
return withIssue(
|
|
183
|
+
next,
|
|
184
|
+
event,
|
|
185
|
+
"malformed_json",
|
|
186
|
+
frameId,
|
|
187
|
+
`Completed render block is not valid JSON${detail}`,
|
|
188
|
+
openFrames
|
|
189
|
+
);
|
|
190
|
+
}
|
|
191
|
+
const block = toRenderBlock(parsed);
|
|
192
|
+
if (!block) {
|
|
193
|
+
return withIssue(
|
|
194
|
+
next,
|
|
195
|
+
event,
|
|
196
|
+
"invalid_render_block",
|
|
197
|
+
frameId,
|
|
198
|
+
"Completed render block is missing blockId, blockIndex, or type",
|
|
199
|
+
openFrames
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
return {
|
|
203
|
+
...next,
|
|
204
|
+
openFrames,
|
|
205
|
+
lastRenderBlockIssue: limitIssue ?? current.lastRenderBlockIssue,
|
|
206
|
+
renderBlocks: { ...current.renderBlocks, [block.blockId]: block },
|
|
207
|
+
renderBlockOrder: Object.hasOwn(current.renderBlocks, block.blockId) ? current.renderBlockOrder : [...current.renderBlockOrder, block.blockId]
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
function projectWorkflowNodeEvent(current, event) {
|
|
211
|
+
if (event.run_id !== current.runId || (event.node_id ?? "") !== current.nodeId) {
|
|
212
|
+
return current;
|
|
213
|
+
}
|
|
214
|
+
if (event.stream_seq <= current.lastTransportSeq) return current;
|
|
215
|
+
const next = {
|
|
216
|
+
...current,
|
|
217
|
+
chunksReceived: event.chunks_received,
|
|
218
|
+
charsStreamed: event.chars_streamed,
|
|
219
|
+
lastStreamingTs: event.ts,
|
|
220
|
+
lastTransportSeq: event.stream_seq,
|
|
221
|
+
blockShadowed: current.blockShadowed || Boolean(event.block_shadowed)
|
|
222
|
+
};
|
|
223
|
+
switch (event.kind) {
|
|
224
|
+
case "chunk":
|
|
225
|
+
return { ...next, answer: current.answer + event.delta };
|
|
226
|
+
case "reasoning":
|
|
227
|
+
return { ...next, reasoning: current.reasoning + event.delta };
|
|
228
|
+
case "phase":
|
|
229
|
+
return { ...next, lastPhase: event.delta };
|
|
230
|
+
case "tool":
|
|
231
|
+
return { ...next, lastTool: event.delta };
|
|
232
|
+
case "warning":
|
|
233
|
+
return { ...next, lastWarning: event.delta };
|
|
234
|
+
case "render_block":
|
|
235
|
+
return projectRenderFrame(current, event, next);
|
|
236
|
+
default:
|
|
237
|
+
return next;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
exports.DEFAULT_WORKFLOW_PROJECTION_LIMITS = DEFAULT_WORKFLOW_PROJECTION_LIMITS;
|
|
242
|
+
exports.createWorkflowNodeProjection = createWorkflowNodeProjection;
|
|
243
|
+
exports.projectWorkflowNodeEvent = projectWorkflowNodeEvent;
|
|
244
|
+
//# sourceMappingURL=workflow.cjs.map
|
|
245
|
+
//# sourceMappingURL=workflow.cjs.map
|