@assistant-ui/react-ag-ui 0.0.62 → 0.0.63
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/LICENSE +1 -1
- package/dist/runtime/AgUiThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtime/AgUiThreadRuntimeCore.js +0 -1
- package/dist/runtime/AgUiThreadRuntimeCore.js.map +1 -1
- package/dist/runtime/adapter/run-aggregator.d.ts +1 -0
- package/dist/runtime/adapter/run-aggregator.d.ts.map +1 -1
- package/dist/runtime/adapter/run-aggregator.js +25 -0
- package/dist/runtime/adapter/run-aggregator.js.map +1 -1
- package/dist/runtime/adapter/subscriber.d.ts +9 -0
- package/dist/runtime/adapter/subscriber.d.ts.map +1 -1
- package/dist/runtime/adapter/subscriber.js +3 -0
- package/dist/runtime/adapter/subscriber.js.map +1 -1
- package/dist/runtime/event-parser.d.ts.map +1 -1
- package/dist/runtime/event-parser.js +11 -0
- package/dist/runtime/event-parser.js.map +1 -1
- package/dist/runtime/types.d.ts +6 -0
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/useAgUiRuntime.d.ts.map +1 -1
- package/dist/useAgUiRuntime.js +17 -3
- package/dist/useAgUiRuntime.js.map +1 -1
- package/package.json +8 -5
- package/src/runtime/AgUiThreadRuntimeCore.test.ts +43 -0
- package/src/runtime/AgUiThreadRuntimeCore.ts +0 -2
- package/src/runtime/adapter/run-aggregator.activity.test.ts +128 -0
- package/src/runtime/adapter/run-aggregator.ts +40 -0
- package/src/runtime/adapter/subscriber.test.ts +48 -0
- package/src/runtime/adapter/subscriber.ts +9 -0
- package/src/runtime/event-parser.test.ts +44 -0
- package/src/runtime/event-parser.ts +16 -0
- package/src/runtime/types.ts +7 -0
- package/src/useAgUiRuntime.fast-refresh.test.tsx +170 -0
- package/src/useAgUiRuntime.ts +14 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-parser.js","names":[],"sources":["../../src/runtime/event-parser.ts"],"sourcesContent":["import type {\n AgUiEvent,\n AgUiInterrupt,\n AgUiRunFinishedOutcome,\n AgUiSubagentFinishedOutcome,\n} from \"./types\";\nimport type { Logger } from \"./logger\";\nimport { parseMcpToolCallResult } from \"./mcp-tool-result\";\nimport { withRawResponseSchema } from \"./interrupt-internals\";\n\nexport type ParseAgUiEventOptions = {\n logger?: Logger;\n};\n\nconst isString = (value: unknown): value is string => typeof value === \"string\";\nconst isNonEmptyString = (value: unknown): value is string =>\n isString(value) && value.length > 0;\n\nconst withOptional = <T extends object>(\n base: T,\n optionals: Record<string, unknown>,\n) => {\n const definedEntries = Object.entries(optionals).filter(\n ([, value]) => value !== undefined,\n );\n return definedEntries.length === 0\n ? base\n : ({ ...base, ...Object.fromEntries(definedEntries) } as T);\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n !!value && typeof value === \"object\" && !Array.isArray(value);\n\nconst logRejectedEvent = (\n logger: Logger | undefined,\n type: unknown,\n payload: unknown,\n reason: string,\n) => {\n const typeLabel = isString(type) ? type : \"unknown\";\n logger?.debug?.(`[agui] ${typeLabel} ${reason}`, payload);\n};\n\nconst parseInterrupt = (raw: unknown): AgUiInterrupt | null => {\n if (!isPlainObject(raw)) return null;\n const id = raw.id;\n const reason = raw.reason;\n if (typeof id !== \"string\" || typeof reason !== \"string\") return null;\n const interrupt: AgUiInterrupt = { id, reason };\n if (typeof raw.message === \"string\") interrupt.message = raw.message;\n if (typeof raw.toolCallId === \"string\") interrupt.toolCallId = raw.toolCallId;\n if (typeof raw.expiresAt === \"string\") interrupt.expiresAt = raw.expiresAt;\n if (isPlainObject(raw.responseSchema))\n interrupt.responseSchema = raw.responseSchema;\n if (isPlainObject(raw.metadata)) interrupt.metadata = raw.metadata;\n // A present schema is kept whatever its shape: `false` is a JSON Schema that\n // rejects every payload, so normalizing it to absent would claim a gate no\n // decision can answer. Only an object schema fits `responseSchema`; every\n // other shape travels on the internal carrier. `null` is not a JSON Schema at\n // all, and it is what a server serializing an unset optional field sends, so\n // it reads as absent rather than as a schema nothing can satisfy.\n return raw.responseSchema == null || isPlainObject(raw.responseSchema)\n ? interrupt\n : withRawResponseSchema(interrupt, raw.responseSchema);\n};\n\nconst parseRunFinishedOutcome = (\n raw: unknown,\n runId: string,\n logger: Logger | undefined,\n): AgUiRunFinishedOutcome | undefined => {\n if (raw == null) return undefined;\n if (!isPlainObject(raw)) {\n logRejectedEvent(\n logger,\n \"RUN_FINISHED\",\n { runId, outcome: raw },\n \"has invalid outcome\",\n );\n return undefined;\n }\n if (raw.type === \"success\") return { type: \"success\" };\n if (raw.type === \"interrupt\") {\n if (!Array.isArray(raw.interrupts)) {\n logRejectedEvent(\n logger,\n \"RUN_FINISHED\",\n { runId, outcome: raw },\n \"has an interrupt outcome missing interrupts array\",\n );\n return undefined;\n }\n const parsed = raw.interrupts\n .map((entry) => {\n const interrupt = parseInterrupt(entry);\n if (interrupt === null) {\n logRejectedEvent(\n logger,\n \"RUN_FINISHED\",\n { runId, interrupt: entry },\n \"has malformed interrupt\",\n );\n }\n return interrupt;\n })\n .filter((entry): entry is AgUiInterrupt => entry !== null);\n if (parsed.length === 0) {\n logRejectedEvent(\n logger,\n \"RUN_FINISHED\",\n { runId, interrupts: raw.interrupts },\n \"has an interrupt outcome with no valid interrupts\",\n );\n return undefined;\n }\n return { type: \"interrupt\", interrupts: parsed };\n }\n logRejectedEvent(\n logger,\n \"RUN_FINISHED\",\n { runId, outcome: raw },\n \"has unsupported outcome type\",\n );\n return undefined;\n};\n\nexport const parseAgUiEvent = (\n event: unknown,\n options?: ParseAgUiEventOptions,\n): AgUiEvent | null => {\n if (!event || typeof event !== \"object\") {\n logRejectedEvent(options?.logger, undefined, event, \"is not an object\");\n return null;\n }\n const payload = event as Record<string, unknown>;\n const typeValue = payload.type;\n if (!isString(typeValue)) {\n logRejectedEvent(options?.logger, typeValue, payload, \"has no string type\");\n return null;\n }\n\n const reject = (reason: string): null => {\n logRejectedEvent(options?.logger, typeValue, payload, reason);\n return null;\n };\n\n const getString = (key: string) =>\n isString(payload[key]) ? (payload[key] as string) : undefined;\n\n switch (typeValue) {\n case \"RUN_STARTED\": {\n const runId = getString(\"runId\");\n return runId ? { type: \"RUN_STARTED\", runId } : reject(\"missing runId\");\n }\n case \"RUN_FINISHED\": {\n const runId = getString(\"runId\");\n if (!runId) return reject(\"missing runId\");\n return withOptional(\n { type: \"RUN_FINISHED\" as const, runId },\n {\n outcome: parseRunFinishedOutcome(\n payload.outcome,\n runId,\n options?.logger,\n ),\n },\n );\n }\n case \"RUN_CANCELLED\": {\n const runId = getString(\"runId\");\n return withOptional({ type: \"RUN_CANCELLED\" as const }, { runId });\n }\n case \"RUN_ERROR\": {\n return withOptional(\n { type: \"RUN_ERROR\" as const },\n {\n message: getString(\"message\"),\n code: getString(\"code\"),\n },\n );\n }\n case \"TEXT_MESSAGE_START\":\n return withOptional(\n { type: \"TEXT_MESSAGE_START\" as const },\n {\n messageId: getString(\"messageId\"),\n subagentRunId: getString(\"subagentRunId\"),\n },\n );\n case \"TEXT_MESSAGE_CONTENT\": {\n const delta = getString(\"delta\");\n if (!isNonEmptyString(delta)) return reject(\"missing non-empty delta\");\n return withOptional(\n { type: \"TEXT_MESSAGE_CONTENT\" as const, delta },\n {\n messageId: getString(\"messageId\"),\n subagentRunId: getString(\"subagentRunId\"),\n },\n );\n }\n case \"TEXT_MESSAGE_END\":\n return withOptional(\n { type: \"TEXT_MESSAGE_END\" as const },\n {\n messageId: getString(\"messageId\"),\n subagentRunId: getString(\"subagentRunId\"),\n },\n );\n case \"TEXT_MESSAGE_CHUNK\": {\n const delta = getString(\"delta\") ?? \"\";\n return withOptional(\n { type: \"TEXT_MESSAGE_CHUNK\" as const, delta },\n {\n messageId: getString(\"messageId\"),\n subagentRunId: getString(\"subagentRunId\"),\n },\n );\n }\n case \"THINKING_START\":\n return withOptional(\n { type: \"THINKING_START\" as const },\n { title: getString(\"title\") },\n );\n case \"THINKING_TEXT_MESSAGE_START\":\n return { type: \"THINKING_TEXT_MESSAGE_START\" };\n case \"THINKING_TEXT_MESSAGE_CONTENT\": {\n const delta = getString(\"delta\") ?? \"\";\n return { type: \"THINKING_TEXT_MESSAGE_CONTENT\", delta };\n }\n case \"THINKING_TEXT_MESSAGE_END\":\n return { type: \"THINKING_TEXT_MESSAGE_END\" };\n case \"THINKING_END\":\n return { type: \"THINKING_END\" };\n case \"REASONING_START\":\n return withOptional(\n { type: \"REASONING_START\" as const },\n {\n messageId: getString(\"messageId\"),\n subagentRunId: getString(\"subagentRunId\"),\n },\n );\n case \"REASONING_MESSAGE_START\":\n return withOptional(\n { type: \"REASONING_MESSAGE_START\" as const },\n {\n messageId: getString(\"messageId\"),\n subagentRunId: getString(\"subagentRunId\"),\n },\n );\n case \"REASONING_MESSAGE_CONTENT\": {\n const delta = getString(\"delta\") ?? \"\";\n return withOptional(\n { type: \"REASONING_MESSAGE_CONTENT\" as const, delta },\n {\n messageId: getString(\"messageId\"),\n subagentRunId: getString(\"subagentRunId\"),\n },\n );\n }\n case \"REASONING_MESSAGE_END\":\n return withOptional(\n { type: \"REASONING_MESSAGE_END\" as const },\n {\n messageId: getString(\"messageId\"),\n subagentRunId: getString(\"subagentRunId\"),\n },\n );\n case \"REASONING_ENCRYPTED_VALUE\": {\n const entityId = getString(\"entityId\");\n const encryptedValue = getString(\"encryptedValue\");\n const subtype = getString(\"subtype\");\n if (!entityId || !encryptedValue) {\n return reject(\"missing entityId or encryptedValue\");\n }\n if (subtype !== \"message\" && subtype !== \"tool-call\") {\n return reject(\"has an invalid subtype\");\n }\n // Spread rather than withOptional: routing the narrowed `subtype` through\n // a generic helper widens it back to string.\n const subagentRunId = getString(\"subagentRunId\");\n return {\n type: \"REASONING_ENCRYPTED_VALUE\" as const,\n subtype,\n entityId,\n encryptedValue,\n ...(subagentRunId !== undefined ? { subagentRunId } : {}),\n };\n }\n case \"REASONING_END\":\n return withOptional(\n { type: \"REASONING_END\" as const },\n {\n messageId: getString(\"messageId\"),\n subagentRunId: getString(\"subagentRunId\"),\n },\n );\n case \"TOOL_CALL_START\": {\n const toolCallId = getString(\"toolCallId\");\n if (!toolCallId) return reject(\"missing toolCallId\");\n return withOptional(\n { type: \"TOOL_CALL_START\" as const, toolCallId },\n {\n toolCallName: getString(\"toolCallName\"),\n parentMessageId: getString(\"parentMessageId\"),\n subagentRunId: getString(\"subagentRunId\"),\n },\n );\n }\n case \"TOOL_CALL_ARGS\": {\n const toolCallId = getString(\"toolCallId\");\n if (!toolCallId) return reject(\"missing toolCallId\");\n const delta = getString(\"delta\") ?? \"\";\n return withOptional(\n { type: \"TOOL_CALL_ARGS\" as const, toolCallId, delta },\n { subagentRunId: getString(\"subagentRunId\") },\n );\n }\n case \"TOOL_CALL_END\": {\n const toolCallId = getString(\"toolCallId\");\n if (!toolCallId) return reject(\"missing toolCallId\");\n return withOptional(\n { type: \"TOOL_CALL_END\" as const, toolCallId },\n { subagentRunId: getString(\"subagentRunId\") },\n );\n }\n case \"TOOL_CALL_CHUNK\":\n return withOptional(\n { type: \"TOOL_CALL_CHUNK\" as const },\n {\n toolCallId: getString(\"toolCallId\"),\n toolCallName: getString(\"toolCallName\"),\n parentMessageId: getString(\"parentMessageId\"),\n delta: getString(\"delta\"),\n subagentRunId: getString(\"subagentRunId\"),\n },\n );\n case \"TOOL_CALL_RESULT\": {\n const toolCallId = getString(\"toolCallId\");\n if (!toolCallId) return reject(\"missing toolCallId\");\n const content = getString(\"content\") ?? \"\";\n return withOptional(\n {\n type: \"TOOL_CALL_RESULT\" as const,\n toolCallId,\n content,\n },\n {\n messageId: getString(\"messageId\"),\n role: payload.role === \"tool\" ? \"tool\" : undefined,\n mcpResult: parseMcpToolCallResult(payload, content),\n subagentRunId: getString(\"subagentRunId\"),\n },\n );\n }\n case \"STATE_SNAPSHOT\":\n if (payload.snapshot === undefined) {\n return reject(\"missing snapshot\");\n }\n return { type: \"STATE_SNAPSHOT\", snapshot: payload.snapshot };\n case \"STATE_DELTA\":\n return {\n type: \"STATE_DELTA\",\n delta: Array.isArray(payload.delta) ? (payload.delta as any[]) : [],\n };\n case \"MESSAGES_SNAPSHOT\":\n if (!Array.isArray(payload.messages)) {\n return reject(\"missing messages array\");\n }\n return {\n type: \"MESSAGES_SNAPSHOT\",\n messages: payload.messages as any[],\n };\n case \"ACTIVITY_SNAPSHOT\": {\n const activityType = getString(\"activityType\");\n if (!activityType || !isPlainObject(payload.content)) {\n return reject(\"missing activityType or object content\");\n }\n return withOptional(\n {\n type: \"ACTIVITY_SNAPSHOT\" as const,\n activityType,\n content: payload.content,\n },\n {\n messageId: getString(\"messageId\"),\n replace:\n typeof payload.replace === \"boolean\" ? payload.replace : undefined,\n subagentRunId: getString(\"subagentRunId\"),\n },\n );\n }\n case \"RAW\":\n return withOptional(\n { type: \"RAW\" as const, event: payload.event },\n { source: getString(\"source\") },\n );\n case \"CUSTOM\": {\n const name = getString(\"name\");\n if (!name) return reject(\"missing name\");\n return { type: \"CUSTOM\", name, value: payload.value };\n }\n case \"SUBAGENT_STARTED\": {\n const subagentRunId = getString(\"subagentRunId\");\n const name = getString(\"name\");\n if (!subagentRunId || !name) {\n return reject(\"missing subagentRunId or name\");\n }\n return withOptional(\n { type: \"SUBAGENT_STARTED\" as const, subagentRunId, name },\n {\n description: getString(\"description\"),\n parentSubagentRunId: getString(\"parentSubagentRunId\"),\n parentToolCallId: getString(\"parentToolCallId\"),\n parentMessageId: getString(\"parentMessageId\"),\n },\n );\n }\n case \"SUBAGENT_FINISHED\": {\n const subagentRunId = getString(\"subagentRunId\");\n if (!subagentRunId) return reject(\"missing subagentRunId\");\n const rawOutcome = payload.outcome;\n let outcome: AgUiSubagentFinishedOutcome | undefined;\n if (rawOutcome == null) {\n outcome = undefined;\n } else if (!isPlainObject(rawOutcome)) {\n logRejectedEvent(\n options?.logger,\n \"SUBAGENT_FINISHED\",\n { subagentRunId, outcome: rawOutcome },\n \"has invalid outcome\",\n );\n outcome = undefined;\n } else if (rawOutcome.type === \"success\") {\n outcome = { type: \"success\" as const };\n } else if (rawOutcome.type === \"suspended\") {\n outcome = withOptional(\n { type: \"suspended\" as const },\n {\n interruptIds: Array.isArray(rawOutcome.interruptIds)\n ? (rawOutcome.interruptIds as unknown[]).filter(isString)\n : undefined,\n },\n );\n } else {\n logRejectedEvent(\n options?.logger,\n \"SUBAGENT_FINISHED\",\n { subagentRunId, outcome: rawOutcome },\n \"has unsupported outcome type\",\n );\n outcome = undefined;\n }\n return withOptional(\n { type: \"SUBAGENT_FINISHED\" as const, subagentRunId },\n { result: payload.result, outcome },\n );\n }\n case \"SUBAGENT_ERROR\": {\n const subagentRunId = getString(\"subagentRunId\");\n const message = getString(\"message\");\n if (!subagentRunId || !message) {\n return reject(\"missing subagentRunId or message\");\n }\n return withOptional(\n { type: \"SUBAGENT_ERROR\" as const, subagentRunId, message },\n { code: getString(\"code\") },\n );\n }\n default:\n return withOptional(\n { type: \"RAW\" as const, event: payload },\n {\n source: isString(payload.type) ? (payload.type as string) : undefined,\n },\n );\n }\n};\n"],"mappings":";;;AAcA,MAAM,YAAY,UAAoC,OAAO,UAAU;AACvE,MAAM,oBAAoB,UACxB,SAAS,KAAK,KAAK,MAAM,SAAS;AAEpC,MAAM,gBACJ,MACA,cACG;CACH,MAAM,iBAAiB,OAAO,QAAQ,SAAS,CAAC,CAAC,QAC9C,GAAG,WAAW,UAAU,KAAA,CAC3B;CACA,OAAO,eAAe,WAAW,IAC7B,OACC;EAAE,GAAG;EAAM,GAAG,OAAO,YAAY,cAAc;CAAE;AACxD;AAEA,MAAM,iBAAiB,UACrB,CAAC,CAAC,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAE9D,MAAM,oBACJ,QACA,MACA,SACA,WACG;CACH,MAAM,YAAY,SAAS,IAAI,IAAI,OAAO;CAC1C,QAAQ,QAAQ,UAAU,UAAU,GAAG,UAAU,OAAO;AAC1D;AAEA,MAAM,kBAAkB,QAAuC;CAC7D,IAAI,CAAC,cAAc,GAAG,GAAG,OAAO;CAChC,MAAM,KAAK,IAAI;CACf,MAAM,SAAS,IAAI;CACnB,IAAI,OAAO,OAAO,YAAY,OAAO,WAAW,UAAU,OAAO;CACjE,MAAM,YAA2B;EAAE;EAAI;CAAO;CAC9C,IAAI,OAAO,IAAI,YAAY,UAAU,UAAU,UAAU,IAAI;CAC7D,IAAI,OAAO,IAAI,eAAe,UAAU,UAAU,aAAa,IAAI;CACnE,IAAI,OAAO,IAAI,cAAc,UAAU,UAAU,YAAY,IAAI;CACjE,IAAI,cAAc,IAAI,cAAc,GAClC,UAAU,iBAAiB,IAAI;CACjC,IAAI,cAAc,IAAI,QAAQ,GAAG,UAAU,WAAW,IAAI;CAO1D,OAAO,IAAI,kBAAkB,QAAQ,cAAc,IAAI,cAAc,IACjE,YACA,sBAAsB,WAAW,IAAI,cAAc;AACzD;AAEA,MAAM,2BACJ,KACA,OACA,WACuC;CACvC,IAAI,OAAO,MAAM,OAAO,KAAA;CACxB,IAAI,CAAC,cAAc,GAAG,GAAG;EACvB,iBACE,QACA,gBACA;GAAE;GAAO,SAAS;EAAI,GACtB,qBACF;EACA;CACF;CACA,IAAI,IAAI,SAAS,WAAW,OAAO,EAAE,MAAM,UAAU;CACrD,IAAI,IAAI,SAAS,aAAa;EAC5B,IAAI,CAAC,MAAM,QAAQ,IAAI,UAAU,GAAG;GAClC,iBACE,QACA,gBACA;IAAE;IAAO,SAAS;GAAI,GACtB,mDACF;GACA;EACF;EACA,MAAM,SAAS,IAAI,WAChB,KAAK,UAAU;GACd,MAAM,YAAY,eAAe,KAAK;GACtC,IAAI,cAAc,MAChB,iBACE,QACA,gBACA;IAAE;IAAO,WAAW;GAAM,GAC1B,yBACF;GAEF,OAAO;EACT,CAAC,CAAC,CACD,QAAQ,UAAkC,UAAU,IAAI;EAC3D,IAAI,OAAO,WAAW,GAAG;GACvB,iBACE,QACA,gBACA;IAAE;IAAO,YAAY,IAAI;GAAW,GACpC,mDACF;GACA;EACF;EACA,OAAO;GAAE,MAAM;GAAa,YAAY;EAAO;CACjD;CACA,iBACE,QACA,gBACA;EAAE;EAAO,SAAS;CAAI,GACtB,8BACF;AAEF;AAEA,MAAa,kBACX,OACA,YACqB;CACrB,IAAI,CAAC,SAAS,OAAO,UAAU,UAAU;EACvC,iBAAiB,SAAS,QAAQ,KAAA,GAAW,OAAO,kBAAkB;EACtE,OAAO;CACT;CACA,MAAM,UAAU;CAChB,MAAM,YAAY,QAAQ;CAC1B,IAAI,CAAC,SAAS,SAAS,GAAG;EACxB,iBAAiB,SAAS,QAAQ,WAAW,SAAS,oBAAoB;EAC1E,OAAO;CACT;CAEA,MAAM,UAAU,WAAyB;EACvC,iBAAiB,SAAS,QAAQ,WAAW,SAAS,MAAM;EAC5D,OAAO;CACT;CAEA,MAAM,aAAa,QACjB,SAAS,QAAQ,IAAI,IAAK,QAAQ,OAAkB,KAAA;CAEtD,QAAQ,WAAR;EACE,KAAK,eAAe;GAClB,MAAM,QAAQ,UAAU,OAAO;GAC/B,OAAO,QAAQ;IAAE,MAAM;IAAe;GAAM,IAAI,OAAO,eAAe;EACxE;EACA,KAAK,gBAAgB;GACnB,MAAM,QAAQ,UAAU,OAAO;GAC/B,IAAI,CAAC,OAAO,OAAO,OAAO,eAAe;GACzC,OAAO,aACL;IAAE,MAAM;IAAyB;GAAM,GACvC,EACE,SAAS,wBACP,QAAQ,SACR,OACA,SAAS,MACX,EACF,CACF;EACF;EACA,KAAK,iBAAiB;GACpB,MAAM,QAAQ,UAAU,OAAO;GAC/B,OAAO,aAAa,EAAE,MAAM,gBAAyB,GAAG,EAAE,MAAM,CAAC;EACnE;EACA,KAAK,aACH,OAAO,aACL,EAAE,MAAM,YAAqB,GAC7B;GACE,SAAS,UAAU,SAAS;GAC5B,MAAM,UAAU,MAAM;EACxB,CACF;EAEF,KAAK,sBACH,OAAO,aACL,EAAE,MAAM,qBAA8B,GACtC;GACE,WAAW,UAAU,WAAW;GAChC,eAAe,UAAU,eAAe;EAC1C,CACF;EACF,KAAK,wBAAwB;GAC3B,MAAM,QAAQ,UAAU,OAAO;GAC/B,IAAI,CAAC,iBAAiB,KAAK,GAAG,OAAO,OAAO,yBAAyB;GACrE,OAAO,aACL;IAAE,MAAM;IAAiC;GAAM,GAC/C;IACE,WAAW,UAAU,WAAW;IAChC,eAAe,UAAU,eAAe;GAC1C,CACF;EACF;EACA,KAAK,oBACH,OAAO,aACL,EAAE,MAAM,mBAA4B,GACpC;GACE,WAAW,UAAU,WAAW;GAChC,eAAe,UAAU,eAAe;EAC1C,CACF;EACF,KAAK,sBAAsB;GACzB,MAAM,QAAQ,UAAU,OAAO,KAAK;GACpC,OAAO,aACL;IAAE,MAAM;IAA+B;GAAM,GAC7C;IACE,WAAW,UAAU,WAAW;IAChC,eAAe,UAAU,eAAe;GAC1C,CACF;EACF;EACA,KAAK,kBACH,OAAO,aACL,EAAE,MAAM,iBAA0B,GAClC,EAAE,OAAO,UAAU,OAAO,EAAE,CAC9B;EACF,KAAK,+BACH,OAAO,EAAE,MAAM,8BAA8B;EAC/C,KAAK,iCAEH,OAAO;GAAE,MAAM;GAAiC,OADlC,UAAU,OAAO,KAAK;EACkB;EAExD,KAAK,6BACH,OAAO,EAAE,MAAM,4BAA4B;EAC7C,KAAK,gBACH,OAAO,EAAE,MAAM,eAAe;EAChC,KAAK,mBACH,OAAO,aACL,EAAE,MAAM,kBAA2B,GACnC;GACE,WAAW,UAAU,WAAW;GAChC,eAAe,UAAU,eAAe;EAC1C,CACF;EACF,KAAK,2BACH,OAAO,aACL,EAAE,MAAM,0BAAmC,GAC3C;GACE,WAAW,UAAU,WAAW;GAChC,eAAe,UAAU,eAAe;EAC1C,CACF;EACF,KAAK,6BAA6B;GAChC,MAAM,QAAQ,UAAU,OAAO,KAAK;GACpC,OAAO,aACL;IAAE,MAAM;IAAsC;GAAM,GACpD;IACE,WAAW,UAAU,WAAW;IAChC,eAAe,UAAU,eAAe;GAC1C,CACF;EACF;EACA,KAAK,yBACH,OAAO,aACL,EAAE,MAAM,wBAAiC,GACzC;GACE,WAAW,UAAU,WAAW;GAChC,eAAe,UAAU,eAAe;EAC1C,CACF;EACF,KAAK,6BAA6B;GAChC,MAAM,WAAW,UAAU,UAAU;GACrC,MAAM,iBAAiB,UAAU,gBAAgB;GACjD,MAAM,UAAU,UAAU,SAAS;GACnC,IAAI,CAAC,YAAY,CAAC,gBAChB,OAAO,OAAO,oCAAoC;GAEpD,IAAI,YAAY,aAAa,YAAY,aACvC,OAAO,OAAO,wBAAwB;GAIxC,MAAM,gBAAgB,UAAU,eAAe;GAC/C,OAAO;IACL,MAAM;IACN;IACA;IACA;IACA,GAAI,kBAAkB,KAAA,IAAY,EAAE,cAAc,IAAI,CAAC;GACzD;EACF;EACA,KAAK,iBACH,OAAO,aACL,EAAE,MAAM,gBAAyB,GACjC;GACE,WAAW,UAAU,WAAW;GAChC,eAAe,UAAU,eAAe;EAC1C,CACF;EACF,KAAK,mBAAmB;GACtB,MAAM,aAAa,UAAU,YAAY;GACzC,IAAI,CAAC,YAAY,OAAO,OAAO,oBAAoB;GACnD,OAAO,aACL;IAAE,MAAM;IAA4B;GAAW,GAC/C;IACE,cAAc,UAAU,cAAc;IACtC,iBAAiB,UAAU,iBAAiB;IAC5C,eAAe,UAAU,eAAe;GAC1C,CACF;EACF;EACA,KAAK,kBAAkB;GACrB,MAAM,aAAa,UAAU,YAAY;GACzC,IAAI,CAAC,YAAY,OAAO,OAAO,oBAAoB;GACnD,MAAM,QAAQ,UAAU,OAAO,KAAK;GACpC,OAAO,aACL;IAAE,MAAM;IAA2B;IAAY;GAAM,GACrD,EAAE,eAAe,UAAU,eAAe,EAAE,CAC9C;EACF;EACA,KAAK,iBAAiB;GACpB,MAAM,aAAa,UAAU,YAAY;GACzC,IAAI,CAAC,YAAY,OAAO,OAAO,oBAAoB;GACnD,OAAO,aACL;IAAE,MAAM;IAA0B;GAAW,GAC7C,EAAE,eAAe,UAAU,eAAe,EAAE,CAC9C;EACF;EACA,KAAK,mBACH,OAAO,aACL,EAAE,MAAM,kBAA2B,GACnC;GACE,YAAY,UAAU,YAAY;GAClC,cAAc,UAAU,cAAc;GACtC,iBAAiB,UAAU,iBAAiB;GAC5C,OAAO,UAAU,OAAO;GACxB,eAAe,UAAU,eAAe;EAC1C,CACF;EACF,KAAK,oBAAoB;GACvB,MAAM,aAAa,UAAU,YAAY;GACzC,IAAI,CAAC,YAAY,OAAO,OAAO,oBAAoB;GACnD,MAAM,UAAU,UAAU,SAAS,KAAK;GACxC,OAAO,aACL;IACE,MAAM;IACN;IACA;GACF,GACA;IACE,WAAW,UAAU,WAAW;IAChC,MAAM,QAAQ,SAAS,SAAS,SAAS,KAAA;IACzC,WAAW,uBAAuB,SAAS,OAAO;IAClD,eAAe,UAAU,eAAe;GAC1C,CACF;EACF;EACA,KAAK;GACH,IAAI,QAAQ,aAAa,KAAA,GACvB,OAAO,OAAO,kBAAkB;GAElC,OAAO;IAAE,MAAM;IAAkB,UAAU,QAAQ;GAAS;EAC9D,KAAK,eACH,OAAO;GACL,MAAM;GACN,OAAO,MAAM,QAAQ,QAAQ,KAAK,IAAK,QAAQ,QAAkB,CAAC;EACpE;EACF,KAAK;GACH,IAAI,CAAC,MAAM,QAAQ,QAAQ,QAAQ,GACjC,OAAO,OAAO,wBAAwB;GAExC,OAAO;IACL,MAAM;IACN,UAAU,QAAQ;GACpB;EACF,KAAK,qBAAqB;GACxB,MAAM,eAAe,UAAU,cAAc;GAC7C,IAAI,CAAC,gBAAgB,CAAC,cAAc,QAAQ,OAAO,GACjD,OAAO,OAAO,wCAAwC;GAExD,OAAO,aACL;IACE,MAAM;IACN;IACA,SAAS,QAAQ;GACnB,GACA;IACE,WAAW,UAAU,WAAW;IAChC,SACE,OAAO,QAAQ,YAAY,YAAY,QAAQ,UAAU,KAAA;IAC3D,eAAe,UAAU,eAAe;GAC1C,CACF;EACF;EACA,KAAK,OACH,OAAO,aACL;GAAE,MAAM;GAAgB,OAAO,QAAQ;EAAM,GAC7C,EAAE,QAAQ,UAAU,QAAQ,EAAE,CAChC;EACF,KAAK,UAAU;GACb,MAAM,OAAO,UAAU,MAAM;GAC7B,IAAI,CAAC,MAAM,OAAO,OAAO,cAAc;GACvC,OAAO;IAAE,MAAM;IAAU;IAAM,OAAO,QAAQ;GAAM;EACtD;EACA,KAAK,oBAAoB;GACvB,MAAM,gBAAgB,UAAU,eAAe;GAC/C,MAAM,OAAO,UAAU,MAAM;GAC7B,IAAI,CAAC,iBAAiB,CAAC,MACrB,OAAO,OAAO,+BAA+B;GAE/C,OAAO,aACL;IAAE,MAAM;IAA6B;IAAe;GAAK,GACzD;IACE,aAAa,UAAU,aAAa;IACpC,qBAAqB,UAAU,qBAAqB;IACpD,kBAAkB,UAAU,kBAAkB;IAC9C,iBAAiB,UAAU,iBAAiB;GAC9C,CACF;EACF;EACA,KAAK,qBAAqB;GACxB,MAAM,gBAAgB,UAAU,eAAe;GAC/C,IAAI,CAAC,eAAe,OAAO,OAAO,uBAAuB;GACzD,MAAM,aAAa,QAAQ;GAC3B,IAAI;GACJ,IAAI,cAAc,MAChB,UAAU,KAAA;QACL,IAAI,CAAC,cAAc,UAAU,GAAG;IACrC,iBACE,SAAS,QACT,qBACA;KAAE;KAAe,SAAS;IAAW,GACrC,qBACF;IACA,UAAU,KAAA;GACZ,OAAO,IAAI,WAAW,SAAS,WAC7B,UAAU,EAAE,MAAM,UAAmB;QAChC,IAAI,WAAW,SAAS,aAC7B,UAAU,aACR,EAAE,MAAM,YAAqB,GAC7B,EACE,cAAc,MAAM,QAAQ,WAAW,YAAY,IAC9C,WAAW,aAA2B,OAAO,QAAQ,IACtD,KAAA,EACN,CACF;QACK;IACL,iBACE,SAAS,QACT,qBACA;KAAE;KAAe,SAAS;IAAW,GACrC,8BACF;IACA,UAAU,KAAA;GACZ;GACA,OAAO,aACL;IAAE,MAAM;IAA8B;GAAc,GACpD;IAAE,QAAQ,QAAQ;IAAQ;GAAQ,CACpC;EACF;EACA,KAAK,kBAAkB;GACrB,MAAM,gBAAgB,UAAU,eAAe;GAC/C,MAAM,UAAU,UAAU,SAAS;GACnC,IAAI,CAAC,iBAAiB,CAAC,SACrB,OAAO,OAAO,kCAAkC;GAElD,OAAO,aACL;IAAE,MAAM;IAA2B;IAAe;GAAQ,GAC1D,EAAE,MAAM,UAAU,MAAM,EAAE,CAC5B;EACF;EACA,SACE,OAAO,aACL;GAAE,MAAM;GAAgB,OAAO;EAAQ,GACvC,EACE,QAAQ,SAAS,QAAQ,IAAI,IAAK,QAAQ,OAAkB,KAAA,EAC9D,CACF;CACJ;AACF"}
|
|
1
|
+
{"version":3,"file":"event-parser.js","names":[],"sources":["../../src/runtime/event-parser.ts"],"sourcesContent":["import type {\n AgUiEvent,\n AgUiInterrupt,\n AgUiRunFinishedOutcome,\n AgUiSubagentFinishedOutcome,\n} from \"./types\";\nimport type { Logger } from \"./logger\";\nimport { parseMcpToolCallResult } from \"./mcp-tool-result\";\nimport { withRawResponseSchema } from \"./interrupt-internals\";\n\nexport type ParseAgUiEventOptions = {\n logger?: Logger;\n};\n\nconst isString = (value: unknown): value is string => typeof value === \"string\";\nconst isNonEmptyString = (value: unknown): value is string =>\n isString(value) && value.length > 0;\n\nconst withOptional = <T extends object>(\n base: T,\n optionals: Record<string, unknown>,\n) => {\n const definedEntries = Object.entries(optionals).filter(\n ([, value]) => value !== undefined,\n );\n return definedEntries.length === 0\n ? base\n : ({ ...base, ...Object.fromEntries(definedEntries) } as T);\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n !!value && typeof value === \"object\" && !Array.isArray(value);\n\nconst logRejectedEvent = (\n logger: Logger | undefined,\n type: unknown,\n payload: unknown,\n reason: string,\n) => {\n const typeLabel = isString(type) ? type : \"unknown\";\n logger?.debug?.(`[agui] ${typeLabel} ${reason}`, payload);\n};\n\nconst parseInterrupt = (raw: unknown): AgUiInterrupt | null => {\n if (!isPlainObject(raw)) return null;\n const id = raw.id;\n const reason = raw.reason;\n if (typeof id !== \"string\" || typeof reason !== \"string\") return null;\n const interrupt: AgUiInterrupt = { id, reason };\n if (typeof raw.message === \"string\") interrupt.message = raw.message;\n if (typeof raw.toolCallId === \"string\") interrupt.toolCallId = raw.toolCallId;\n if (typeof raw.expiresAt === \"string\") interrupt.expiresAt = raw.expiresAt;\n if (isPlainObject(raw.responseSchema))\n interrupt.responseSchema = raw.responseSchema;\n if (isPlainObject(raw.metadata)) interrupt.metadata = raw.metadata;\n // A present schema is kept whatever its shape: `false` is a JSON Schema that\n // rejects every payload, so normalizing it to absent would claim a gate no\n // decision can answer. Only an object schema fits `responseSchema`; every\n // other shape travels on the internal carrier. `null` is not a JSON Schema at\n // all, and it is what a server serializing an unset optional field sends, so\n // it reads as absent rather than as a schema nothing can satisfy.\n return raw.responseSchema == null || isPlainObject(raw.responseSchema)\n ? interrupt\n : withRawResponseSchema(interrupt, raw.responseSchema);\n};\n\nconst parseRunFinishedOutcome = (\n raw: unknown,\n runId: string,\n logger: Logger | undefined,\n): AgUiRunFinishedOutcome | undefined => {\n if (raw == null) return undefined;\n if (!isPlainObject(raw)) {\n logRejectedEvent(\n logger,\n \"RUN_FINISHED\",\n { runId, outcome: raw },\n \"has invalid outcome\",\n );\n return undefined;\n }\n if (raw.type === \"success\") return { type: \"success\" };\n if (raw.type === \"interrupt\") {\n if (!Array.isArray(raw.interrupts)) {\n logRejectedEvent(\n logger,\n \"RUN_FINISHED\",\n { runId, outcome: raw },\n \"has an interrupt outcome missing interrupts array\",\n );\n return undefined;\n }\n const parsed = raw.interrupts\n .map((entry) => {\n const interrupt = parseInterrupt(entry);\n if (interrupt === null) {\n logRejectedEvent(\n logger,\n \"RUN_FINISHED\",\n { runId, interrupt: entry },\n \"has malformed interrupt\",\n );\n }\n return interrupt;\n })\n .filter((entry): entry is AgUiInterrupt => entry !== null);\n if (parsed.length === 0) {\n logRejectedEvent(\n logger,\n \"RUN_FINISHED\",\n { runId, interrupts: raw.interrupts },\n \"has an interrupt outcome with no valid interrupts\",\n );\n return undefined;\n }\n return { type: \"interrupt\", interrupts: parsed };\n }\n logRejectedEvent(\n logger,\n \"RUN_FINISHED\",\n { runId, outcome: raw },\n \"has unsupported outcome type\",\n );\n return undefined;\n};\n\nexport const parseAgUiEvent = (\n event: unknown,\n options?: ParseAgUiEventOptions,\n): AgUiEvent | null => {\n if (!event || typeof event !== \"object\") {\n logRejectedEvent(options?.logger, undefined, event, \"is not an object\");\n return null;\n }\n const payload = event as Record<string, unknown>;\n const typeValue = payload.type;\n if (!isString(typeValue)) {\n logRejectedEvent(options?.logger, typeValue, payload, \"has no string type\");\n return null;\n }\n\n const reject = (reason: string): null => {\n logRejectedEvent(options?.logger, typeValue, payload, reason);\n return null;\n };\n\n const getString = (key: string) =>\n isString(payload[key]) ? (payload[key] as string) : undefined;\n\n switch (typeValue) {\n case \"RUN_STARTED\": {\n const runId = getString(\"runId\");\n return runId ? { type: \"RUN_STARTED\", runId } : reject(\"missing runId\");\n }\n case \"RUN_FINISHED\": {\n const runId = getString(\"runId\");\n if (!runId) return reject(\"missing runId\");\n return withOptional(\n { type: \"RUN_FINISHED\" as const, runId },\n {\n outcome: parseRunFinishedOutcome(\n payload.outcome,\n runId,\n options?.logger,\n ),\n },\n );\n }\n case \"RUN_CANCELLED\": {\n const runId = getString(\"runId\");\n return withOptional({ type: \"RUN_CANCELLED\" as const }, { runId });\n }\n case \"RUN_ERROR\": {\n return withOptional(\n { type: \"RUN_ERROR\" as const },\n {\n message: getString(\"message\"),\n code: getString(\"code\"),\n },\n );\n }\n case \"TEXT_MESSAGE_START\":\n return withOptional(\n { type: \"TEXT_MESSAGE_START\" as const },\n {\n messageId: getString(\"messageId\"),\n subagentRunId: getString(\"subagentRunId\"),\n },\n );\n case \"TEXT_MESSAGE_CONTENT\": {\n const delta = getString(\"delta\");\n if (!isNonEmptyString(delta)) return reject(\"missing non-empty delta\");\n return withOptional(\n { type: \"TEXT_MESSAGE_CONTENT\" as const, delta },\n {\n messageId: getString(\"messageId\"),\n subagentRunId: getString(\"subagentRunId\"),\n },\n );\n }\n case \"TEXT_MESSAGE_END\":\n return withOptional(\n { type: \"TEXT_MESSAGE_END\" as const },\n {\n messageId: getString(\"messageId\"),\n subagentRunId: getString(\"subagentRunId\"),\n },\n );\n case \"TEXT_MESSAGE_CHUNK\": {\n const delta = getString(\"delta\") ?? \"\";\n return withOptional(\n { type: \"TEXT_MESSAGE_CHUNK\" as const, delta },\n {\n messageId: getString(\"messageId\"),\n subagentRunId: getString(\"subagentRunId\"),\n },\n );\n }\n case \"THINKING_START\":\n return withOptional(\n { type: \"THINKING_START\" as const },\n { title: getString(\"title\") },\n );\n case \"THINKING_TEXT_MESSAGE_START\":\n return { type: \"THINKING_TEXT_MESSAGE_START\" };\n case \"THINKING_TEXT_MESSAGE_CONTENT\": {\n const delta = getString(\"delta\") ?? \"\";\n return { type: \"THINKING_TEXT_MESSAGE_CONTENT\", delta };\n }\n case \"THINKING_TEXT_MESSAGE_END\":\n return { type: \"THINKING_TEXT_MESSAGE_END\" };\n case \"THINKING_END\":\n return { type: \"THINKING_END\" };\n case \"REASONING_START\":\n return withOptional(\n { type: \"REASONING_START\" as const },\n {\n messageId: getString(\"messageId\"),\n subagentRunId: getString(\"subagentRunId\"),\n },\n );\n case \"REASONING_MESSAGE_START\":\n return withOptional(\n { type: \"REASONING_MESSAGE_START\" as const },\n {\n messageId: getString(\"messageId\"),\n subagentRunId: getString(\"subagentRunId\"),\n },\n );\n case \"REASONING_MESSAGE_CONTENT\": {\n const delta = getString(\"delta\") ?? \"\";\n return withOptional(\n { type: \"REASONING_MESSAGE_CONTENT\" as const, delta },\n {\n messageId: getString(\"messageId\"),\n subagentRunId: getString(\"subagentRunId\"),\n },\n );\n }\n case \"REASONING_MESSAGE_END\":\n return withOptional(\n { type: \"REASONING_MESSAGE_END\" as const },\n {\n messageId: getString(\"messageId\"),\n subagentRunId: getString(\"subagentRunId\"),\n },\n );\n case \"REASONING_ENCRYPTED_VALUE\": {\n const entityId = getString(\"entityId\");\n const encryptedValue = getString(\"encryptedValue\");\n const subtype = getString(\"subtype\");\n if (!entityId || !encryptedValue) {\n return reject(\"missing entityId or encryptedValue\");\n }\n if (subtype !== \"message\" && subtype !== \"tool-call\") {\n return reject(\"has an invalid subtype\");\n }\n // Spread rather than withOptional: routing the narrowed `subtype` through\n // a generic helper widens it back to string.\n const subagentRunId = getString(\"subagentRunId\");\n return {\n type: \"REASONING_ENCRYPTED_VALUE\" as const,\n subtype,\n entityId,\n encryptedValue,\n ...(subagentRunId !== undefined ? { subagentRunId } : {}),\n };\n }\n case \"REASONING_END\":\n return withOptional(\n { type: \"REASONING_END\" as const },\n {\n messageId: getString(\"messageId\"),\n subagentRunId: getString(\"subagentRunId\"),\n },\n );\n case \"TOOL_CALL_START\": {\n const toolCallId = getString(\"toolCallId\");\n if (!toolCallId) return reject(\"missing toolCallId\");\n return withOptional(\n { type: \"TOOL_CALL_START\" as const, toolCallId },\n {\n toolCallName: getString(\"toolCallName\"),\n parentMessageId: getString(\"parentMessageId\"),\n subagentRunId: getString(\"subagentRunId\"),\n },\n );\n }\n case \"TOOL_CALL_ARGS\": {\n const toolCallId = getString(\"toolCallId\");\n if (!toolCallId) return reject(\"missing toolCallId\");\n const delta = getString(\"delta\") ?? \"\";\n return withOptional(\n { type: \"TOOL_CALL_ARGS\" as const, toolCallId, delta },\n { subagentRunId: getString(\"subagentRunId\") },\n );\n }\n case \"TOOL_CALL_END\": {\n const toolCallId = getString(\"toolCallId\");\n if (!toolCallId) return reject(\"missing toolCallId\");\n return withOptional(\n { type: \"TOOL_CALL_END\" as const, toolCallId },\n { subagentRunId: getString(\"subagentRunId\") },\n );\n }\n case \"TOOL_CALL_CHUNK\":\n return withOptional(\n { type: \"TOOL_CALL_CHUNK\" as const },\n {\n toolCallId: getString(\"toolCallId\"),\n toolCallName: getString(\"toolCallName\"),\n parentMessageId: getString(\"parentMessageId\"),\n delta: getString(\"delta\"),\n subagentRunId: getString(\"subagentRunId\"),\n },\n );\n case \"TOOL_CALL_RESULT\": {\n const toolCallId = getString(\"toolCallId\");\n if (!toolCallId) return reject(\"missing toolCallId\");\n const content = getString(\"content\") ?? \"\";\n return withOptional(\n {\n type: \"TOOL_CALL_RESULT\" as const,\n toolCallId,\n content,\n },\n {\n messageId: getString(\"messageId\"),\n role: payload.role === \"tool\" ? \"tool\" : undefined,\n mcpResult: parseMcpToolCallResult(payload, content),\n subagentRunId: getString(\"subagentRunId\"),\n },\n );\n }\n case \"STATE_SNAPSHOT\":\n if (payload.snapshot === undefined) {\n return reject(\"missing snapshot\");\n }\n return { type: \"STATE_SNAPSHOT\", snapshot: payload.snapshot };\n case \"STATE_DELTA\":\n return {\n type: \"STATE_DELTA\",\n delta: Array.isArray(payload.delta) ? (payload.delta as any[]) : [],\n };\n case \"MESSAGES_SNAPSHOT\":\n if (!Array.isArray(payload.messages)) {\n return reject(\"missing messages array\");\n }\n return {\n type: \"MESSAGES_SNAPSHOT\",\n messages: payload.messages as any[],\n };\n case \"ACTIVITY_SNAPSHOT\": {\n const activityType = getString(\"activityType\");\n if (!activityType || !isPlainObject(payload.content)) {\n return reject(\"missing activityType or object content\");\n }\n return withOptional(\n {\n type: \"ACTIVITY_SNAPSHOT\" as const,\n activityType,\n content: payload.content,\n },\n {\n messageId: getString(\"messageId\"),\n replace:\n typeof payload.replace === \"boolean\" ? payload.replace : undefined,\n subagentRunId: getString(\"subagentRunId\"),\n },\n );\n }\n case \"ACTIVITY_DELTA\": {\n const messageId = getString(\"messageId\");\n const activityType = getString(\"activityType\");\n if (!messageId || !activityType || !Array.isArray(payload.patch)) {\n return reject(\"missing messageId, activityType or patch array\");\n }\n return withOptional(\n {\n type: \"ACTIVITY_DELTA\" as const,\n messageId,\n activityType,\n patch: payload.patch as any[],\n },\n { subagentRunId: getString(\"subagentRunId\") },\n );\n }\n case \"RAW\":\n return withOptional(\n { type: \"RAW\" as const, event: payload.event },\n { source: getString(\"source\") },\n );\n case \"CUSTOM\": {\n const name = getString(\"name\");\n if (!name) return reject(\"missing name\");\n return { type: \"CUSTOM\", name, value: payload.value };\n }\n case \"SUBAGENT_STARTED\": {\n const subagentRunId = getString(\"subagentRunId\");\n const name = getString(\"name\");\n if (!subagentRunId || !name) {\n return reject(\"missing subagentRunId or name\");\n }\n return withOptional(\n { type: \"SUBAGENT_STARTED\" as const, subagentRunId, name },\n {\n description: getString(\"description\"),\n parentSubagentRunId: getString(\"parentSubagentRunId\"),\n parentToolCallId: getString(\"parentToolCallId\"),\n parentMessageId: getString(\"parentMessageId\"),\n },\n );\n }\n case \"SUBAGENT_FINISHED\": {\n const subagentRunId = getString(\"subagentRunId\");\n if (!subagentRunId) return reject(\"missing subagentRunId\");\n const rawOutcome = payload.outcome;\n let outcome: AgUiSubagentFinishedOutcome | undefined;\n if (rawOutcome == null) {\n outcome = undefined;\n } else if (!isPlainObject(rawOutcome)) {\n logRejectedEvent(\n options?.logger,\n \"SUBAGENT_FINISHED\",\n { subagentRunId, outcome: rawOutcome },\n \"has invalid outcome\",\n );\n outcome = undefined;\n } else if (rawOutcome.type === \"success\") {\n outcome = { type: \"success\" as const };\n } else if (rawOutcome.type === \"suspended\") {\n outcome = withOptional(\n { type: \"suspended\" as const },\n {\n interruptIds: Array.isArray(rawOutcome.interruptIds)\n ? (rawOutcome.interruptIds as unknown[]).filter(isString)\n : undefined,\n },\n );\n } else {\n logRejectedEvent(\n options?.logger,\n \"SUBAGENT_FINISHED\",\n { subagentRunId, outcome: rawOutcome },\n \"has unsupported outcome type\",\n );\n outcome = undefined;\n }\n return withOptional(\n { type: \"SUBAGENT_FINISHED\" as const, subagentRunId },\n { result: payload.result, outcome },\n );\n }\n case \"SUBAGENT_ERROR\": {\n const subagentRunId = getString(\"subagentRunId\");\n const message = getString(\"message\");\n if (!subagentRunId || !message) {\n return reject(\"missing subagentRunId or message\");\n }\n return withOptional(\n { type: \"SUBAGENT_ERROR\" as const, subagentRunId, message },\n { code: getString(\"code\") },\n );\n }\n default:\n return withOptional(\n { type: \"RAW\" as const, event: payload },\n {\n source: isString(payload.type) ? (payload.type as string) : undefined,\n },\n );\n }\n};\n"],"mappings":"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"}
|
package/dist/runtime/types.d.ts
CHANGED
|
@@ -228,6 +228,12 @@ export type AgUiEvent = {
|
|
|
228
228
|
messageId?: string;
|
|
229
229
|
replace?: boolean;
|
|
230
230
|
subagentRunId?: string;
|
|
231
|
+
} | {
|
|
232
|
+
type: "ACTIVITY_DELTA";
|
|
233
|
+
messageId: string;
|
|
234
|
+
activityType: string;
|
|
235
|
+
patch: any[];
|
|
236
|
+
subagentRunId?: string;
|
|
231
237
|
} | {
|
|
232
238
|
type: "RAW";
|
|
233
239
|
event: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAgUiRuntime.d.ts","sourceRoot":"","sources":["../src/useAgUiRuntime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useAgUiRuntime.d.ts","sourceRoot":"","sources":["../src/useAgUiRuntime.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EACV,gBAAgB,EAIjB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,qBAAqB,EACtB,2BAAwB;AASzB,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG;IACpD;;;OAGG;IACH,6BAA6B,EAAE,MAAM,SAAS,aAAa,EAAE,CAAC;IAC9D;;;;OAIG;IACH,iCAAiC,EAAE,CACjC,SAAS,EAAE,SAAS,eAAe,EAAE,KAClC,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB,CAAC;AAEF,wBAAgB,cAAc,CAC5B,OAAO,EAAE,qBAAqB,GAC7B,oBAAoB,CA0RtB"}
|
package/dist/useAgUiRuntime.js
CHANGED
|
@@ -4,6 +4,7 @@ import { makeLogger } from "./runtime/logger.js";
|
|
|
4
4
|
import { AgUiThreadRuntimeCore } from "./runtime/AgUiThreadRuntimeCore.js";
|
|
5
5
|
import { useExternalStoreRuntime, useExternalStoreSharedOptions, useRuntimeAdapters } from "@assistant-ui/core/react";
|
|
6
6
|
import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
|
|
7
|
+
import { useReplaySafeEffect } from "@assistant-ui/store/internal";
|
|
7
8
|
import { createMessageQueue } from "@assistant-ui/core";
|
|
8
9
|
//#region src/useAgUiRuntime.ts
|
|
9
10
|
const EMPTY_INTERRUPTS = [];
|
|
@@ -173,13 +174,26 @@ function useAgUiRuntime(options) {
|
|
|
173
174
|
shared
|
|
174
175
|
]);
|
|
175
176
|
const baseRuntime = useExternalStoreRuntime(store);
|
|
176
|
-
const
|
|
177
|
+
const createRuntime = () => {
|
|
177
178
|
const wrapper = Object.create(baseRuntime);
|
|
178
179
|
wrapper.unstable_getPendingInterrupts = () => core.getPendingInterrupts()?.interrupts ?? [];
|
|
179
180
|
wrapper.unstable_submitInterruptResponses = (responses) => core.submitInterruptResponses(responses);
|
|
180
181
|
return wrapper;
|
|
181
|
-
}
|
|
182
|
-
|
|
182
|
+
};
|
|
183
|
+
const [pinnedRuntime, setPinnedRuntime] = useState(() => ({
|
|
184
|
+
baseRuntime,
|
|
185
|
+
runtime: createRuntime()
|
|
186
|
+
}));
|
|
187
|
+
let currentRuntime = pinnedRuntime;
|
|
188
|
+
if (pinnedRuntime.baseRuntime !== baseRuntime) {
|
|
189
|
+
currentRuntime = {
|
|
190
|
+
baseRuntime,
|
|
191
|
+
runtime: createRuntime()
|
|
192
|
+
};
|
|
193
|
+
setPinnedRuntime(currentRuntime);
|
|
194
|
+
}
|
|
195
|
+
const runtime = currentRuntime.runtime;
|
|
196
|
+
useReplaySafeEffect(() => {
|
|
183
197
|
core.attachRuntime(runtime);
|
|
184
198
|
return () => {
|
|
185
199
|
core.detachRuntime();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAgUiRuntime.js","names":[],"sources":["../src/useAgUiRuntime.ts"],"sourcesContent":["\"use client\";\n\nimport {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from \"react\";\nimport {\n useExternalStoreRuntime,\n useExternalStoreSharedOptions,\n useRuntimeAdapters,\n} from \"@assistant-ui/core/react\";\nimport { createMessageQueue } from \"@assistant-ui/core\";\nimport type {\n MessageQueueController,\n ToolExecutionStatus,\n} from \"@assistant-ui/core\";\nimport type {\n AssistantRuntime,\n AppendMessage,\n ExternalStoreAdapter,\n ThreadMessage,\n} from \"@assistant-ui/core\";\nimport type { ReadonlyJSONValue } from \"assistant-stream/utils\";\nimport { makeLogger } from \"./runtime/logger\";\nimport type {\n AgUiInterrupt,\n AgUiResumeEntry,\n UseAgUiRuntimeOptions,\n} from \"./runtime/types\";\nimport { AgUiThreadRuntimeCore } from \"./runtime/AgUiThreadRuntimeCore\";\nimport { agUiExtras } from \"./agUiExtras\";\nimport type { QueueItemState } from \"@assistant-ui/core/store\";\n\nconst EMPTY_INTERRUPTS: readonly AgUiInterrupt[] = [];\nconst EMPTY_QUEUE_ITEMS: readonly QueueItemState[] = Object.freeze([]);\nconst subscribeNoop = () => () => {};\n\nexport type AgUiAssistantRuntime = AssistantRuntime & {\n /**\n * @deprecated Use the `useAgUiInterrupts()` hook instead. This method is kept\n * for backward compatibility and will be removed in a future major release.\n */\n unstable_getPendingInterrupts: () => readonly AgUiInterrupt[];\n /**\n * @deprecated Use the `useAgUiSubmitInterruptResponses()` hook instead. This\n * method is kept for backward compatibility and will be removed in a future\n * major release.\n */\n unstable_submitInterruptResponses: (\n responses: readonly AgUiResumeEntry[],\n ) => Promise<void>;\n};\n\nexport function useAgUiRuntime(\n options: UseAgUiRuntimeOptions,\n): AgUiAssistantRuntime {\n const logger = useMemo(() => makeLogger(options.logger), [options.logger]);\n const [_version, setVersion] = useState(0);\n const notifyUpdate = useCallback(() => setVersion((v) => v + 1), []);\n const coreRef = useRef<AgUiThreadRuntimeCore | null>(null);\n const threadSwitchGenerationRef = useRef(0);\n const runtimeAdapters = useRuntimeAdapters();\n\n const historyAdapter = options.adapters?.history ?? runtimeAdapters?.history;\n const threadListAdapter = options.adapters?.threadList;\n\n if (!coreRef.current) {\n coreRef.current = new AgUiThreadRuntimeCore({\n agent: options.agent,\n logger,\n showThinking: options.showThinking ?? true,\n resumeTranscript: options.resumeTranscript,\n autoCancelPendingToolCalls: options.autoCancelPendingToolCalls,\n ...(options.onError && { onError: options.onError }),\n ...(options.onCancel && { onCancel: options.onCancel }),\n ...(historyAdapter && { history: historyAdapter }),\n notifyUpdate,\n });\n }\n\n const core = coreRef.current;\n useEffect(() => {\n core.updateOptions({\n agent: options.agent,\n logger,\n showThinking: options.showThinking ?? true,\n resumeTranscript: options.resumeTranscript,\n autoCancelPendingToolCalls: options.autoCancelPendingToolCalls,\n ...(options.onError && { onError: options.onError }),\n ...(options.onCancel && { onCancel: options.onCancel }),\n ...(historyAdapter && { history: historyAdapter }),\n });\n });\n\n const [toolStatuses, setToolStatuses] = useState<\n Record<string, ToolExecutionStatus>\n >({});\n\n const hasExecutingTools = Object.values(toolStatuses).some(\n (s) => s?.type === \"executing\",\n );\n const isRunning = core.isRunning() || hasExecutingTools;\n\n // The driver sends through the agent core rather than the runtime, because\n // the runtime's append routes every tail append back into this queue.\n const queueRef = useRef<MessageQueueController | null>(null);\n // Counts rendered busy edges, whether a run start or an interrupt arriving.\n // A dispatch whose count never moves was never observed as busy, so no\n // falling edge is coming to release the queue.\n const busyEdgesRef = useRef(0);\n if (options.unstable_enableMessageQueue && !queueRef.current) {\n queueRef.current = createMessageQueue({\n run: (message) => {\n const controller = queueRef.current;\n const edgesAtDispatch = busyEdgesRef.current;\n // The queue drops the item before dispatching and stays busy until an\n // idle edge. An append observed as busy is released by that falling\n // edge, and releasing again here would advance the queue twice; one\n // that never runs (a pre-run rejection, or startRun false) has to be\n // released here or every later send buffers forever. An interrupt is\n // rechecked because a run that resolves without yielding to React\n // reaches here before the effect below has seen either edge.\n const releaseIfNoRun = () => {\n if (\n queueRef.current !== controller ||\n busyEdgesRef.current !== edgesAtDispatch ||\n core.getPendingInterrupts() !== null\n )\n return;\n controller?.notifyIdle();\n };\n void core.append(message).then(releaseIfNoRun, (e: unknown) => {\n releaseIfNoRun();\n logger.error?.(\"[agui] queued message failed to send\", e);\n });\n },\n });\n }\n const queueController = options.unstable_enableMessageQueue\n ? queueRef.current\n : null;\n useLayoutEffect(() => {\n if (options.unstable_enableMessageQueue || !queueRef.current) return;\n const controller = queueRef.current;\n queueRef.current = null;\n controller.clear();\n }, [options.unstable_enableMessageQueue]);\n\n // Feeds the store memo below: the runtime core skips an adapter whose\n // identity is unchanged, so queue items have to move the store reference or\n // subscribers never see composer.queue change.\n const queueItems = useSyncExternalStore(\n queueController?.subscribe ?? subscribeNoop,\n () => queueController?.adapter.items ?? EMPTY_QUEUE_ITEMS,\n () => EMPTY_QUEUE_ITEMS,\n );\n const steerQueueItems = useSyncExternalStore(\n queueController?.subscribe ?? subscribeNoop,\n () => queueController?.adapter.steerItems ?? EMPTY_QUEUE_ITEMS,\n () => EMPTY_QUEUE_ITEMS,\n );\n\n // Holds the queue while client-side tools are still executing, and while an\n // interrupt is unanswered: `append` refuses a new run until it is resolved,\n // and the queue drops an item before dispatching it, so draining into that\n // refusal would lose the message instead of keeping it visible.\n const queueBusy = isRunning || core.getPendingInterrupts() !== null;\n useEffect(() => {\n if (queueBusy) {\n busyEdgesRef.current++;\n queueController?.notifyBusy();\n } else {\n queueController?.notifyIdle();\n }\n }, [queueBusy, queueController]);\n\n const threadList = useMemo(() => {\n if (!threadListAdapter) return undefined;\n\n const { onSwitchToNewThread, onSwitchToThread, ...rest } =\n threadListAdapter;\n\n return {\n ...rest,\n onSwitchToNewThread: onSwitchToNewThread\n ? async () => {\n const generation = ++threadSwitchGenerationRef.current;\n // Clear before the thread id flips, or the old messages leak\n // into the new thread as a sibling branch.\n core.applyExternalMessages([]);\n core.resetThreadState();\n await onSwitchToNewThread();\n if (generation !== threadSwitchGenerationRef.current) return;\n core.applyExternalMessages([]);\n core.resetThreadState();\n }\n : undefined,\n onSwitchToThread: onSwitchToThread\n ? async (threadId: string) => {\n const generation = ++threadSwitchGenerationRef.current;\n // Clear before the thread id flips, or the old messages leak\n // into the new thread as a sibling branch.\n core.applyExternalMessages([]);\n core.resetThreadState();\n const result = await onSwitchToThread(threadId);\n if (generation !== threadSwitchGenerationRef.current) return;\n core.applyExternalMessages([]);\n core.resetThreadState();\n core.applyExternalMessages(result.messages);\n if (result.state !== undefined) {\n core.loadExternalState(result.state);\n }\n if (result.unstable_resume) {\n void core.resumeInFlightRun(result.messages);\n }\n }\n : undefined,\n };\n }, [threadListAdapter, core]);\n\n const adapters = options.adapters;\n const adapterAdapters = useMemo(\n () => ({\n attachments: adapters?.attachments ?? runtimeAdapters?.attachments,\n speech: adapters?.speech,\n dictation: adapters?.dictation,\n voice: adapters?.voice,\n feedback: adapters?.feedback,\n threadList,\n }),\n [adapters, runtimeAdapters, threadList],\n );\n\n const shared = useExternalStoreSharedOptions(options);\n const store = useMemo(\n () => {\n void _version; // rerender on version change\n\n return {\n ...shared,\n isLoading: core.isLoading,\n messageRepository: core.getMessageRepository(),\n state: core.getState(),\n isRunning: core.isRunning(),\n extras: agUiExtras.provide({\n interrupts:\n core.getPendingInterrupts()?.interrupts ?? EMPTY_INTERRUPTS,\n sendA2uiAction: (action) => core.sendA2uiAction(action),\n submitInterruptResponses: (responses) =>\n core.submitInterruptResponses(responses),\n steerAway: (message, responses) => core.steerAway(message, responses),\n state: core.getState(),\n setState: (next) => core.setState(next),\n }),\n unstable_enableToolInvocations: true,\n unstable_persistsHistory: true,\n setToolStatuses,\n onNew: (message: AppendMessage) => core.append(message),\n onVoiceTranscript: (message) => core.appendVoiceTranscript(message),\n onEdit: (message: AppendMessage) => {\n queueController?.clear();\n return core.edit(message);\n },\n onReload: (parentId: string | null, config: { runConfig?: any }) => {\n queueController?.clear();\n return core.reload(parentId, config);\n },\n onCancel: async () => {\n queueController?.notifyCancelled();\n core.cancel();\n },\n onAddToolResult: (options) => core.addToolResult(options),\n unstable_onRecordToolInteraction: (options) =>\n core.recordToolInteraction(options),\n onRespondToToolApproval: (options) =>\n core.respondToToolApproval(options).catch((error: unknown) => {\n core.reportError(error);\n throw error;\n }),\n onResume: (config) => core.resume(config),\n setMessages: (messages: readonly ThreadMessage[]) =>\n core.applyExternalMessages(messages),\n onImport: (messages: readonly ThreadMessage[]) =>\n core.applyExternalMessages(messages),\n onLoadExternalState: (state: ReadonlyJSONValue) =>\n core.loadExternalState(state),\n adapters: adapterAdapters,\n ...(queueController && { queue: queueController.adapter }),\n } satisfies ExternalStoreAdapter<ThreadMessage>;\n },\n // _version is intentionally included to trigger re-computation when core state changes via notifyUpdate\n // toolInvocations intentionally excluded: abort/resume use refs internally and work with stale captures\n [\n adapterAdapters,\n core,\n _version,\n isRunning,\n queueController,\n queueItems,\n steerQueueItems,\n shared,\n ],\n );\n\n const baseRuntime = useExternalStoreRuntime(store);\n\n const runtime = useMemo<AgUiAssistantRuntime>(() => {\n const wrapper = Object.create(baseRuntime) as AgUiAssistantRuntime;\n wrapper.unstable_getPendingInterrupts = () =>\n core.getPendingInterrupts()?.interrupts ?? [];\n wrapper.unstable_submitInterruptResponses = (responses) =>\n core.submitInterruptResponses(responses);\n return wrapper;\n }, [baseRuntime, core]);\n\n useEffect(() => {\n core.attachRuntime(runtime);\n return () => {\n core.detachRuntime();\n };\n }, [core, runtime]);\n\n useEffect(() => {\n core.__internal_load();\n }, [core]);\n\n return runtime;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useAgUiRuntime.js","names":[],"sources":["../src/useAgUiRuntime.ts"],"sourcesContent":["\"use client\";\n\nimport {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from \"react\";\nimport {\n useExternalStoreRuntime,\n useExternalStoreSharedOptions,\n useRuntimeAdapters,\n} from \"@assistant-ui/core/react\";\nimport { useReplaySafeEffect } from \"@assistant-ui/store/internal\";\nimport { createMessageQueue } from \"@assistant-ui/core\";\nimport type {\n MessageQueueController,\n ToolExecutionStatus,\n} from \"@assistant-ui/core\";\nimport type {\n AssistantRuntime,\n AppendMessage,\n ExternalStoreAdapter,\n ThreadMessage,\n} from \"@assistant-ui/core\";\nimport type { ReadonlyJSONValue } from \"assistant-stream/utils\";\nimport { makeLogger } from \"./runtime/logger\";\nimport type {\n AgUiInterrupt,\n AgUiResumeEntry,\n UseAgUiRuntimeOptions,\n} from \"./runtime/types\";\nimport { AgUiThreadRuntimeCore } from \"./runtime/AgUiThreadRuntimeCore\";\nimport { agUiExtras } from \"./agUiExtras\";\nimport type { QueueItemState } from \"@assistant-ui/core/store\";\n\nconst EMPTY_INTERRUPTS: readonly AgUiInterrupt[] = [];\nconst EMPTY_QUEUE_ITEMS: readonly QueueItemState[] = Object.freeze([]);\nconst subscribeNoop = () => () => {};\n\nexport type AgUiAssistantRuntime = AssistantRuntime & {\n /**\n * @deprecated Use the `useAgUiInterrupts()` hook instead. This method is kept\n * for backward compatibility and will be removed in a future major release.\n */\n unstable_getPendingInterrupts: () => readonly AgUiInterrupt[];\n /**\n * @deprecated Use the `useAgUiSubmitInterruptResponses()` hook instead. This\n * method is kept for backward compatibility and will be removed in a future\n * major release.\n */\n unstable_submitInterruptResponses: (\n responses: readonly AgUiResumeEntry[],\n ) => Promise<void>;\n};\n\nexport function useAgUiRuntime(\n options: UseAgUiRuntimeOptions,\n): AgUiAssistantRuntime {\n const logger = useMemo(() => makeLogger(options.logger), [options.logger]);\n const [_version, setVersion] = useState(0);\n const notifyUpdate = useCallback(() => setVersion((v) => v + 1), []);\n const coreRef = useRef<AgUiThreadRuntimeCore | null>(null);\n const threadSwitchGenerationRef = useRef(0);\n const runtimeAdapters = useRuntimeAdapters();\n\n const historyAdapter = options.adapters?.history ?? runtimeAdapters?.history;\n const threadListAdapter = options.adapters?.threadList;\n\n if (!coreRef.current) {\n coreRef.current = new AgUiThreadRuntimeCore({\n agent: options.agent,\n logger,\n showThinking: options.showThinking ?? true,\n resumeTranscript: options.resumeTranscript,\n autoCancelPendingToolCalls: options.autoCancelPendingToolCalls,\n ...(options.onError && { onError: options.onError }),\n ...(options.onCancel && { onCancel: options.onCancel }),\n ...(historyAdapter && { history: historyAdapter }),\n notifyUpdate,\n });\n }\n\n const core = coreRef.current;\n useEffect(() => {\n core.updateOptions({\n agent: options.agent,\n logger,\n showThinking: options.showThinking ?? true,\n resumeTranscript: options.resumeTranscript,\n autoCancelPendingToolCalls: options.autoCancelPendingToolCalls,\n ...(options.onError && { onError: options.onError }),\n ...(options.onCancel && { onCancel: options.onCancel }),\n ...(historyAdapter && { history: historyAdapter }),\n });\n });\n\n const [toolStatuses, setToolStatuses] = useState<\n Record<string, ToolExecutionStatus>\n >({});\n\n const hasExecutingTools = Object.values(toolStatuses).some(\n (s) => s?.type === \"executing\",\n );\n const isRunning = core.isRunning() || hasExecutingTools;\n\n // The driver sends through the agent core rather than the runtime, because\n // the runtime's append routes every tail append back into this queue.\n const queueRef = useRef<MessageQueueController | null>(null);\n // Counts rendered busy edges, whether a run start or an interrupt arriving.\n // A dispatch whose count never moves was never observed as busy, so no\n // falling edge is coming to release the queue.\n const busyEdgesRef = useRef(0);\n if (options.unstable_enableMessageQueue && !queueRef.current) {\n queueRef.current = createMessageQueue({\n run: (message) => {\n const controller = queueRef.current;\n const edgesAtDispatch = busyEdgesRef.current;\n // The queue drops the item before dispatching and stays busy until an\n // idle edge. An append observed as busy is released by that falling\n // edge, and releasing again here would advance the queue twice; one\n // that never runs (a pre-run rejection, or startRun false) has to be\n // released here or every later send buffers forever. An interrupt is\n // rechecked because a run that resolves without yielding to React\n // reaches here before the effect below has seen either edge.\n const releaseIfNoRun = () => {\n if (\n queueRef.current !== controller ||\n busyEdgesRef.current !== edgesAtDispatch ||\n core.getPendingInterrupts() !== null\n )\n return;\n controller?.notifyIdle();\n };\n void core.append(message).then(releaseIfNoRun, (e: unknown) => {\n releaseIfNoRun();\n logger.error?.(\"[agui] queued message failed to send\", e);\n });\n },\n });\n }\n const queueController = options.unstable_enableMessageQueue\n ? queueRef.current\n : null;\n useLayoutEffect(() => {\n if (options.unstable_enableMessageQueue || !queueRef.current) return;\n const controller = queueRef.current;\n queueRef.current = null;\n controller.clear();\n }, [options.unstable_enableMessageQueue]);\n\n // Feeds the store memo below: the runtime core skips an adapter whose\n // identity is unchanged, so queue items have to move the store reference or\n // subscribers never see composer.queue change.\n const queueItems = useSyncExternalStore(\n queueController?.subscribe ?? subscribeNoop,\n () => queueController?.adapter.items ?? EMPTY_QUEUE_ITEMS,\n () => EMPTY_QUEUE_ITEMS,\n );\n const steerQueueItems = useSyncExternalStore(\n queueController?.subscribe ?? subscribeNoop,\n () => queueController?.adapter.steerItems ?? EMPTY_QUEUE_ITEMS,\n () => EMPTY_QUEUE_ITEMS,\n );\n\n // Holds the queue while client-side tools are still executing, and while an\n // interrupt is unanswered: `append` refuses a new run until it is resolved,\n // and the queue drops an item before dispatching it, so draining into that\n // refusal would lose the message instead of keeping it visible.\n const queueBusy = isRunning || core.getPendingInterrupts() !== null;\n useEffect(() => {\n if (queueBusy) {\n busyEdgesRef.current++;\n queueController?.notifyBusy();\n } else {\n queueController?.notifyIdle();\n }\n }, [queueBusy, queueController]);\n\n const threadList = useMemo(() => {\n if (!threadListAdapter) return undefined;\n\n const { onSwitchToNewThread, onSwitchToThread, ...rest } =\n threadListAdapter;\n\n return {\n ...rest,\n onSwitchToNewThread: onSwitchToNewThread\n ? async () => {\n const generation = ++threadSwitchGenerationRef.current;\n // Clear before the thread id flips, or the old messages leak\n // into the new thread as a sibling branch.\n core.applyExternalMessages([]);\n core.resetThreadState();\n await onSwitchToNewThread();\n if (generation !== threadSwitchGenerationRef.current) return;\n core.applyExternalMessages([]);\n core.resetThreadState();\n }\n : undefined,\n onSwitchToThread: onSwitchToThread\n ? async (threadId: string) => {\n const generation = ++threadSwitchGenerationRef.current;\n // Clear before the thread id flips, or the old messages leak\n // into the new thread as a sibling branch.\n core.applyExternalMessages([]);\n core.resetThreadState();\n const result = await onSwitchToThread(threadId);\n if (generation !== threadSwitchGenerationRef.current) return;\n core.applyExternalMessages([]);\n core.resetThreadState();\n core.applyExternalMessages(result.messages);\n if (result.state !== undefined) {\n core.loadExternalState(result.state);\n }\n if (result.unstable_resume) {\n void core.resumeInFlightRun(result.messages);\n }\n }\n : undefined,\n };\n }, [threadListAdapter, core]);\n\n const adapters = options.adapters;\n const adapterAdapters = useMemo(\n () => ({\n attachments: adapters?.attachments ?? runtimeAdapters?.attachments,\n speech: adapters?.speech,\n dictation: adapters?.dictation,\n voice: adapters?.voice,\n feedback: adapters?.feedback,\n threadList,\n }),\n [adapters, runtimeAdapters, threadList],\n );\n\n const shared = useExternalStoreSharedOptions(options);\n const store = useMemo(\n () => {\n void _version; // rerender on version change\n\n return {\n ...shared,\n isLoading: core.isLoading,\n messageRepository: core.getMessageRepository(),\n state: core.getState(),\n isRunning: core.isRunning(),\n extras: agUiExtras.provide({\n interrupts:\n core.getPendingInterrupts()?.interrupts ?? EMPTY_INTERRUPTS,\n sendA2uiAction: (action) => core.sendA2uiAction(action),\n submitInterruptResponses: (responses) =>\n core.submitInterruptResponses(responses),\n steerAway: (message, responses) => core.steerAway(message, responses),\n state: core.getState(),\n setState: (next) => core.setState(next),\n }),\n unstable_enableToolInvocations: true,\n unstable_persistsHistory: true,\n setToolStatuses,\n onNew: (message: AppendMessage) => core.append(message),\n onVoiceTranscript: (message) => core.appendVoiceTranscript(message),\n onEdit: (message: AppendMessage) => {\n queueController?.clear();\n return core.edit(message);\n },\n onReload: (parentId: string | null, config: { runConfig?: any }) => {\n queueController?.clear();\n return core.reload(parentId, config);\n },\n onCancel: async () => {\n queueController?.notifyCancelled();\n core.cancel();\n },\n onAddToolResult: (options) => core.addToolResult(options),\n unstable_onRecordToolInteraction: (options) =>\n core.recordToolInteraction(options),\n onRespondToToolApproval: (options) =>\n core.respondToToolApproval(options).catch((error: unknown) => {\n core.reportError(error);\n throw error;\n }),\n onResume: (config) => core.resume(config),\n setMessages: (messages: readonly ThreadMessage[]) =>\n core.applyExternalMessages(messages),\n onImport: (messages: readonly ThreadMessage[]) =>\n core.applyExternalMessages(messages),\n onLoadExternalState: (state: ReadonlyJSONValue) =>\n core.loadExternalState(state),\n adapters: adapterAdapters,\n ...(queueController && { queue: queueController.adapter }),\n } satisfies ExternalStoreAdapter<ThreadMessage>;\n },\n // _version is intentionally included to trigger re-computation when core state changes via notifyUpdate\n // toolInvocations intentionally excluded: abort/resume use refs internally and work with stale captures\n [\n adapterAdapters,\n core,\n _version,\n isRunning,\n queueController,\n queueItems,\n steerQueueItems,\n shared,\n ],\n );\n\n const baseRuntime = useExternalStoreRuntime(store);\n\n const createRuntime = (): AgUiAssistantRuntime => {\n const wrapper = Object.create(baseRuntime) as AgUiAssistantRuntime;\n wrapper.unstable_getPendingInterrupts = () =>\n core.getPendingInterrupts()?.interrupts ?? [];\n wrapper.unstable_submitInterruptResponses = (responses) =>\n core.submitInterruptResponses(responses);\n return wrapper;\n };\n const [pinnedRuntime, setPinnedRuntime] = useState(() => ({\n baseRuntime,\n runtime: createRuntime(),\n }));\n let currentRuntime = pinnedRuntime;\n if (pinnedRuntime.baseRuntime !== baseRuntime) {\n currentRuntime = { baseRuntime, runtime: createRuntime() };\n setPinnedRuntime(currentRuntime);\n }\n const runtime = currentRuntime.runtime;\n\n useReplaySafeEffect(() => {\n core.attachRuntime(runtime);\n return () => {\n core.detachRuntime();\n };\n }, [core, runtime]);\n\n useEffect(() => {\n core.__internal_load();\n }, [core]);\n\n return runtime;\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@assistant-ui/react-ag-ui",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.63",
|
|
4
4
|
"description": "AG-UI protocol adapter for assistant-ui",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ag-ui",
|
|
@@ -30,10 +30,10 @@
|
|
|
30
30
|
"sideEffects": false,
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@ag-ui/client": "^0.0.59",
|
|
33
|
-
"@assistant-ui/core": "^0.3.
|
|
34
|
-
"@assistant-ui/react-generative-ui": "^0.0.
|
|
35
|
-
"@assistant-ui/store": "^0.3.
|
|
36
|
-
"assistant-stream": "^0.3.
|
|
33
|
+
"@assistant-ui/core": "^0.3.22",
|
|
34
|
+
"@assistant-ui/react-generative-ui": "^0.0.22",
|
|
35
|
+
"@assistant-ui/store": "^0.3.16",
|
|
36
|
+
"assistant-stream": "^0.3.46",
|
|
37
37
|
"fast-json-patch": "^3.1.1"
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {
|
|
@@ -47,6 +47,7 @@
|
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@assistant-ui/x-buildutils": "0.0.29",
|
|
50
|
+
"@assistant-ui/x-react18": "0.0.0",
|
|
50
51
|
"@testing-library/dom": "^10.4.2",
|
|
51
52
|
"@testing-library/react": "^16.3.3",
|
|
52
53
|
"@types/react": "^19.3.0",
|
|
@@ -72,6 +73,8 @@
|
|
|
72
73
|
"build": "aui-build",
|
|
73
74
|
"test": "vitest run",
|
|
74
75
|
"typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.test.json",
|
|
76
|
+
"test:peer-react18": "vitest run --config vitest.peer-react18.config.ts",
|
|
77
|
+
"test:types:peer-react18": "aui-react18-types",
|
|
75
78
|
"test:watch": "vitest"
|
|
76
79
|
}
|
|
77
80
|
}
|
|
@@ -121,3 +121,46 @@ describe("AgUiThreadRuntimeCore steerAway parent selection", () => {
|
|
|
121
121
|
expect(core.getMessageRepository().messages.at(-1)?.parentId).toBeNull();
|
|
122
122
|
});
|
|
123
123
|
});
|
|
124
|
+
|
|
125
|
+
describe("AgUiThreadRuntimeCore activity deltas", () => {
|
|
126
|
+
it("applies a delta to the snapshot the run streamed", async () => {
|
|
127
|
+
type Subscriber = Record<string, ((payload?: unknown) => void) | undefined>;
|
|
128
|
+
const runAgent = vi.fn(async (_input: unknown, subscriber: Subscriber) => {
|
|
129
|
+
subscriber.onActivitySnapshotEvent?.({
|
|
130
|
+
event: {
|
|
131
|
+
type: "ACTIVITY_SNAPSHOT",
|
|
132
|
+
messageId: "act-1",
|
|
133
|
+
activityType: "progress",
|
|
134
|
+
content: { step: 1, label: "loading" },
|
|
135
|
+
replace: true,
|
|
136
|
+
},
|
|
137
|
+
});
|
|
138
|
+
subscriber.onActivityDeltaEvent?.({
|
|
139
|
+
event: {
|
|
140
|
+
type: "ACTIVITY_DELTA",
|
|
141
|
+
messageId: "act-1",
|
|
142
|
+
activityType: "progress",
|
|
143
|
+
patch: [{ op: "replace", path: "/step", value: 2 }],
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
subscriber.onRunFinalized?.();
|
|
147
|
+
});
|
|
148
|
+
const agent = { runAgent, abortRun: vi.fn() } as unknown as AbstractAgent;
|
|
149
|
+
const core = new AgUiThreadRuntimeCore({
|
|
150
|
+
agent,
|
|
151
|
+
logger: makeLogger(),
|
|
152
|
+
showThinking: true,
|
|
153
|
+
notifyUpdate: vi.fn(),
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
await core.append({ ...userMessage("go"), startRun: true });
|
|
157
|
+
await flush();
|
|
158
|
+
|
|
159
|
+
const assistant = core.getMessages().at(-1)!;
|
|
160
|
+
expect(assistant.content.find((part) => part.type === "data")).toEqual({
|
|
161
|
+
type: "data",
|
|
162
|
+
name: "agui-activity/progress",
|
|
163
|
+
data: { step: 2, label: "loading" },
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
});
|
|
@@ -348,8 +348,6 @@ export class AgUiThreadRuntimeCore {
|
|
|
348
348
|
}
|
|
349
349
|
|
|
350
350
|
private appendEntry(message: AppendMessage): string {
|
|
351
|
-
if (message.sourceId) this.session.tryDeleteMessage(message.sourceId);
|
|
352
|
-
|
|
353
351
|
const threadMessage = this.toThreadMessage(message);
|
|
354
352
|
const parentId =
|
|
355
353
|
message.parentId === null
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from "vitest";
|
|
2
|
+
import type { ChatModelRunResult } from "@assistant-ui/core";
|
|
3
|
+
import { RunAggregator } from "./run-aggregator";
|
|
4
|
+
import type { AgUiEvent } from "../types";
|
|
5
|
+
|
|
6
|
+
const createAggregator = () => {
|
|
7
|
+
const emitted: ChatModelRunResult[] = [];
|
|
8
|
+
const logger = { debug: vi.fn(), error: vi.fn() };
|
|
9
|
+
const aggregator = new RunAggregator({
|
|
10
|
+
showThinking: false,
|
|
11
|
+
logger,
|
|
12
|
+
emit: (result) => {
|
|
13
|
+
emitted.push(result);
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
aggregator.handle({ type: "RUN_STARTED", runId: "run-1" });
|
|
17
|
+
const dataParts = () =>
|
|
18
|
+
(emitted.at(-1)?.content ?? []).filter((part) => part.type === "data");
|
|
19
|
+
return { aggregator, logger, dataParts };
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const snapshot = (subagentRunId?: string): AgUiEvent => ({
|
|
23
|
+
type: "ACTIVITY_SNAPSHOT",
|
|
24
|
+
messageId: "act-1",
|
|
25
|
+
activityType: "progress",
|
|
26
|
+
content: { step: 1, label: "loading" },
|
|
27
|
+
...(subagentRunId ? { subagentRunId } : {}),
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
const delta = (
|
|
31
|
+
patch: unknown[],
|
|
32
|
+
overrides: Partial<Extract<AgUiEvent, { type: "ACTIVITY_DELTA" }>> = {},
|
|
33
|
+
): AgUiEvent => ({
|
|
34
|
+
type: "ACTIVITY_DELTA",
|
|
35
|
+
messageId: "act-1",
|
|
36
|
+
activityType: "progress",
|
|
37
|
+
patch,
|
|
38
|
+
...overrides,
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
describe("RunAggregator ACTIVITY_DELTA", () => {
|
|
42
|
+
it("patches the part its snapshot created", () => {
|
|
43
|
+
const { aggregator, dataParts } = createAggregator();
|
|
44
|
+
aggregator.handle(snapshot());
|
|
45
|
+
aggregator.handle(delta([{ op: "replace", path: "/step", value: 2 }]));
|
|
46
|
+
aggregator.handle(delta([{ op: "add", path: "/done", value: true }]));
|
|
47
|
+
|
|
48
|
+
expect(dataParts()).toEqual([
|
|
49
|
+
{
|
|
50
|
+
type: "data",
|
|
51
|
+
name: "agui-activity/progress",
|
|
52
|
+
data: { step: 2, label: "loading", done: true },
|
|
53
|
+
},
|
|
54
|
+
]);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it("leaves parts unchanged and logs when no snapshot matches", () => {
|
|
58
|
+
const { aggregator, logger, dataParts } = createAggregator();
|
|
59
|
+
aggregator.handle(snapshot());
|
|
60
|
+
aggregator.handle(
|
|
61
|
+
delta([{ op: "replace", path: "/step", value: 2 }], {
|
|
62
|
+
messageId: "other",
|
|
63
|
+
}),
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
expect(dataParts()[0]?.data).toEqual({ step: 1, label: "loading" });
|
|
67
|
+
expect(logger.debug).toHaveBeenCalledWith(
|
|
68
|
+
"[agui] activity delta has no snapshot",
|
|
69
|
+
expect.objectContaining({ messageId: "other" }),
|
|
70
|
+
);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it("leaves the part unchanged and logs an error on an invalid patch", () => {
|
|
74
|
+
const { aggregator, logger, dataParts } = createAggregator();
|
|
75
|
+
aggregator.handle(snapshot());
|
|
76
|
+
aggregator.handle(
|
|
77
|
+
delta([{ op: "replace", path: "/missing/deep", value: 1 }]),
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
expect(dataParts()[0]?.data).toEqual({ step: 1, label: "loading" });
|
|
81
|
+
expect(logger.error).toHaveBeenCalledWith(
|
|
82
|
+
"[agui] failed to apply activity delta",
|
|
83
|
+
expect.anything(),
|
|
84
|
+
);
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
it("adopts the delta's activityType the way the client does", () => {
|
|
88
|
+
const { aggregator, dataParts } = createAggregator();
|
|
89
|
+
aggregator.handle(snapshot());
|
|
90
|
+
aggregator.handle(
|
|
91
|
+
delta([{ op: "replace", path: "/step", value: 2 }], {
|
|
92
|
+
activityType: "status",
|
|
93
|
+
}),
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
expect(dataParts()).toEqual([
|
|
97
|
+
{
|
|
98
|
+
type: "data",
|
|
99
|
+
name: "agui-activity/status",
|
|
100
|
+
data: { step: 2, label: "loading" },
|
|
101
|
+
},
|
|
102
|
+
]);
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
it("keeps the part when a patch replaces the root with a non-object", () => {
|
|
106
|
+
const { aggregator, logger, dataParts } = createAggregator();
|
|
107
|
+
aggregator.handle(snapshot());
|
|
108
|
+
aggregator.handle(delta([{ op: "replace", path: "", value: null }]));
|
|
109
|
+
|
|
110
|
+
expect(dataParts()[0]?.data).toEqual({ step: 1, label: "loading" });
|
|
111
|
+
expect(logger.debug).toHaveBeenCalledWith(
|
|
112
|
+
"[agui] activity delta produced non-object content",
|
|
113
|
+
expect.objectContaining({ messageId: "act-1" }),
|
|
114
|
+
);
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
it("patches a subagent-scoped part", () => {
|
|
118
|
+
const { aggregator, dataParts } = createAggregator();
|
|
119
|
+
aggregator.handle(snapshot("sub-1"));
|
|
120
|
+
aggregator.handle(
|
|
121
|
+
delta([{ op: "replace", path: "/step", value: 3 }], {
|
|
122
|
+
subagentRunId: "sub-1",
|
|
123
|
+
}),
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
expect(dataParts()[0]?.data).toEqual({ step: 3, label: "loading" });
|
|
127
|
+
});
|
|
128
|
+
});
|
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
type A2uiState,
|
|
18
18
|
type A2uiSurfaceState,
|
|
19
19
|
} from "@assistant-ui/react-generative-ui/a2ui";
|
|
20
|
+
import jsonpatch, { type Operation } from "fast-json-patch";
|
|
20
21
|
import { readMcpAppResourceUri } from "../mcp-tool-result";
|
|
21
22
|
import { projectAgUiToolApprovals } from "./tool-approval";
|
|
22
23
|
import type { AgUiEvent, AgUiInterrupt } from "../types";
|
|
@@ -631,12 +632,51 @@ export class RunAggregator {
|
|
|
631
632
|
break;
|
|
632
633
|
}
|
|
633
634
|
|
|
635
|
+
case "ACTIVITY_DELTA": {
|
|
636
|
+
this.handleActivityDelta(event);
|
|
637
|
+
break;
|
|
638
|
+
}
|
|
639
|
+
|
|
634
640
|
default: {
|
|
635
641
|
this.logger.debug?.("[agui] aggregator ignored event", event);
|
|
636
642
|
}
|
|
637
643
|
}
|
|
638
644
|
}
|
|
639
645
|
|
|
646
|
+
private handleActivityDelta(
|
|
647
|
+
event: Extract<AgUiEvent, { type: "ACTIVITY_DELTA" }>,
|
|
648
|
+
): void {
|
|
649
|
+
const scope = this.scopeOf(event);
|
|
650
|
+
const existing = this.activityParts.get(
|
|
651
|
+
this.partKey(scope, `message:${event.messageId}`),
|
|
652
|
+
);
|
|
653
|
+
if (!existing) {
|
|
654
|
+
this.logger.debug?.("[agui] activity delta has no snapshot", event);
|
|
655
|
+
return;
|
|
656
|
+
}
|
|
657
|
+
if (event.patch.length === 0) return;
|
|
658
|
+
try {
|
|
659
|
+
const result = jsonpatch.applyPatch(
|
|
660
|
+
existing.value,
|
|
661
|
+
event.patch as Operation[],
|
|
662
|
+
/* validateOperation */ true,
|
|
663
|
+
/* mutateDocument */ false,
|
|
664
|
+
);
|
|
665
|
+
if (!isPlainObject(result.newDocument)) {
|
|
666
|
+
this.logger.debug?.(
|
|
667
|
+
"[agui] activity delta produced non-object content",
|
|
668
|
+
event,
|
|
669
|
+
);
|
|
670
|
+
return;
|
|
671
|
+
}
|
|
672
|
+
existing.name = `agui-activity/${event.activityType}`;
|
|
673
|
+
existing.value = result.newDocument;
|
|
674
|
+
this.emit();
|
|
675
|
+
} catch (error) {
|
|
676
|
+
this.logger.error?.("[agui] failed to apply activity delta", error);
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
|
|
640
680
|
private handleA2uiActivitySnapshot(
|
|
641
681
|
event: Extract<AgUiEvent, { type: "ACTIVITY_SNAPSHOT" }>,
|
|
642
682
|
): void {
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from "vitest";
|
|
2
|
+
import { createAgUiSubscriber } from "./subscriber";
|
|
3
|
+
|
|
4
|
+
const createSubscriber = () => {
|
|
5
|
+
const dispatch = vi.fn();
|
|
6
|
+
const logger = { debug: vi.fn(), error: vi.fn() };
|
|
7
|
+
const subscriber = createAgUiSubscriber({ dispatch, runId: "run-1", logger });
|
|
8
|
+
return { subscriber, dispatch, logger };
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
describe("createAgUiSubscriber", () => {
|
|
12
|
+
it("dispatches ACTIVITY_DELTA as a typed event", () => {
|
|
13
|
+
const { subscriber, dispatch } = createSubscriber();
|
|
14
|
+
subscriber.onActivityDeltaEvent?.({
|
|
15
|
+
event: {
|
|
16
|
+
type: "ACTIVITY_DELTA",
|
|
17
|
+
messageId: "act-1",
|
|
18
|
+
activityType: "progress",
|
|
19
|
+
patch: [{ op: "replace", path: "/step", value: 2 }],
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
expect(dispatch).toHaveBeenCalledWith({
|
|
24
|
+
type: "ACTIVITY_DELTA",
|
|
25
|
+
messageId: "act-1",
|
|
26
|
+
activityType: "progress",
|
|
27
|
+
patch: [{ op: "replace", path: "/step", value: 2 }],
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it("logs step boundaries and dispatches nothing", () => {
|
|
32
|
+
const { subscriber, dispatch, logger } = createSubscriber();
|
|
33
|
+
const started = { type: "STEP_STARTED", stepName: "plan" };
|
|
34
|
+
const finished = { type: "STEP_FINISHED", stepName: "plan" };
|
|
35
|
+
subscriber.onStepStartedEvent?.({ event: started });
|
|
36
|
+
subscriber.onStepFinishedEvent?.({ event: finished });
|
|
37
|
+
|
|
38
|
+
expect(dispatch).not.toHaveBeenCalled();
|
|
39
|
+
expect(logger.debug).toHaveBeenCalledWith(
|
|
40
|
+
"[agui] step boundary ignored",
|
|
41
|
+
started,
|
|
42
|
+
);
|
|
43
|
+
expect(logger.debug).toHaveBeenCalledWith(
|
|
44
|
+
"[agui] step boundary ignored",
|
|
45
|
+
finished,
|
|
46
|
+
);
|
|
47
|
+
});
|
|
48
|
+
});
|