From 1d108b42ece2adae0ef3713e9ed53f0c75241520 Mon Sep 17 00:00:00 2001 From: Yiorgis Gozadinos Date: Fri, 13 Mar 2026 11:37:24 +0200 Subject: [PATCH 1/6] handle ActivitySnapshotEvent for skill sub-agent tool calls --- haiku_rag_slim/haiku/rag/chat/app.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/haiku_rag_slim/haiku/rag/chat/app.py b/haiku_rag_slim/haiku/rag/chat/app.py index da77de7a..a10795bc 100644 --- a/haiku_rag_slim/haiku/rag/chat/app.py +++ b/haiku_rag_slim/haiku/rag/chat/app.py @@ -31,6 +31,7 @@ except ImportError: try: import textual_image.widget # noqa: F401 - import early for renderer detection from ag_ui.core import ( + ActivitySnapshotEvent, AssistantMessage, EventType, RunAgentInput, @@ -271,6 +272,30 @@ class ChatApp(App): elif event.type == EventType.TOOL_CALL_END: assert isinstance(event, ToolCallEndEvent) chat_history.mark_tool_complete(event.tool_call_id) + elif event.type == EventType.ACTIVITY_SNAPSHOT: + assert isinstance(event, ActivitySnapshotEvent) + content = event.content + if event.activity_type == "skill_tool_call": + tool_call_id = content["tool_call_id"] + skill_name = content.get("skill", "") + tool_name = content["tool_name"] + display_name = ( + f"{skill_name} → {tool_name}" + if skill_name + else tool_name + ) + args_str = content.get("args", "{}") + chat_history.hide_thinking() + await chat_history.add_tool_call(tool_call_id, display_name) + try: + args = json.loads(args_str) + chat_history.update_tool_args(tool_call_id, args) + except json.JSONDecodeError: + pass + await chat_history.show_thinking("Working...") + elif event.activity_type == "skill_tool_result": + tool_call_id = content["tool_call_id"] + chat_history.mark_tool_complete(tool_call_id) elif event.type == EventType.STATE_DELTA: assert isinstance(event, StateDeltaEvent) patch = JsonPatch(event.delta) From 9e29a7e849a15d3de014c9f7c6a8f7e0e11a57be Mon Sep 17 00:00:00 2001 From: Yiorgis Gozadinos Date: Fri, 13 Mar 2026 12:39:55 +0200 Subject: [PATCH 2/6] handle ActivitySnapshotEvent in web frontend and fix CopilotKit 1.54.0 styling --- app/frontend/app/globals.css | 42 +- app/frontend/components/Chat.tsx | 124 +++++- app/frontend/package.json | 7 +- app/frontend/pnpm-lock.yaml | 715 ++++++++++++++++++++----------- 4 files changed, 636 insertions(+), 252 deletions(-) diff --git a/app/frontend/app/globals.css b/app/frontend/app/globals.css index 501c9629..d779984d 100644 --- a/app/frontend/app/globals.css +++ b/app/frontend/app/globals.css @@ -36,9 +36,38 @@ a { --ring: #3b82f6; } -/* Chat message area — use full width instead of max-w-3xl */ -.chat-content .max-w-3xl { - max-width: 100%; +/* Chat message area — use full width instead of CopilotKit's max-width constraints. + Scoped to scroll area; the input area inherits CopilotKit's natural sizing. */ +.chat-scroll-area .max-w-3xl, +.chat-scroll-area [class*="cpk:max-w-3xl"], +.chat-scroll-area [class*="cpk:max-w-"] { + max-width: 100% !important; +} + +/* In the empty state (no chat-scroll-area), widen only the message view container */ +.copilotKitChat [class*="cpk:max-w-3xl"]:not(:has(.copilotKitInput)) { + max-width: 100% !important; +} + +/* Empty state input — stretch to full width with horizontal margin */ +.copilotKitChat [class*="cpk:max-w-3xl"]:has(.copilotKitInput) { + max-width: 100% !important; + padding: 0 1rem; +} + +/* Input box — breathing room for send button and bottom spacing */ +.copilotKitInput { + padding-right: 0.5rem !important; + margin-bottom: 0.5rem !important; +} + +/* User message bubble — more generous padding and spacing */ +.copilotKitUserMessage { + margin-top: 1.5rem !important; +} + +.copilotKitUserMessage [class*="cpk:rounded"] { + padding: 12px 20px !important; } /* Render-prop layout: flex column so citations sit between messages and input */ @@ -57,7 +86,7 @@ a { .chat-input-area { position: relative; - padding: 0 0.75rem 0.5rem; + padding: 0 1rem 1rem; } /* Override CopilotKit's absolute positioning on the input container @@ -69,6 +98,11 @@ a { right: auto; } +/* Make the input stretch to full width within its padded container */ +.chat-input-area [class*="cpk:max-w-"] { + max-width: 100% !important; +} + /* User message bubble spacing and padding */ [data-message-id].items-end { padding-top: 1rem; diff --git a/app/frontend/components/Chat.tsx b/app/frontend/components/Chat.tsx index 7f069a05..38e6618a 100644 --- a/app/frontend/components/Chat.tsx +++ b/app/frontend/components/Chat.tsx @@ -230,6 +230,39 @@ function ToolCallIndicator({ ); } +// Render an activity message from a skill sub-agent tool call/result +function ActivityIndicator({ + message, + isComplete, +}: { + // biome-ignore lint/suspicious/noExplicitAny: AG-UI activity message shape + message: any; + isComplete: boolean; +}) { + const content = message.content ?? {}; + const toolName = content.tool_name ?? "tool"; + + let args: Record = {}; + if (content.args) { + try { + args = + typeof content.args === "string" + ? JSON.parse(content.args) + : content.args; + } catch { + // ignore parse errors + } + } + + return ( + + ); +} + // Context for sharing chat state with the message view const ChatStateContext = createContext(null); @@ -261,6 +294,21 @@ function MessageViewWithCitations({ const ragState = useContext(ChatStateContext); const citationsHistory = ragState ? deriveCitationsHistory(ragState) : []; + // Collect completed tool_call_ids from skill_tool_result activity messages + const completedToolCallIds = useMemo(() => { + const ids = new Set(); + for (const msg of messages) { + if ( + msg.role === "activity" && + msg.activityType === "skill_tool_result" && + msg.content?.tool_call_id + ) { + ids.add(msg.content.tool_call_id); + } + } + return ids; + }, [messages]); + const cursor = isRunning ? (
@@ -273,17 +321,63 @@ function MessageViewWithCitations({ {({ messageElements }) => { if (!citationsHistory.length) { + // Check if there are activity messages to render + const hasActivity = messages.some( + (msg: { role: string }) => msg.role === "activity", + ); + if (!hasActivity) { + return ( + <> + {messageElements} + {cursor} + + ); + } + + // Interleave activity indicators with CopilotKit elements + const result: React.ReactNode[] = []; + let eIdx = 0; + for (const msg of messages) { + if ( + msg.role === "activity" && + msg.activityType === "skill_tool_call" + ) { + const toolCallId = msg.content?.tool_call_id; + result.push( + , + ); + continue; + } + if (msg.role === "activity") continue; + if (msg.role !== "user" && msg.role !== "assistant") continue; + if (eIdx < messageElements.length) { + result.push(messageElements[eIdx]); + eIdx++; + } + } + while (eIdx < messageElements.length) { + result.push(messageElements[eIdx]); + eIdx++; + } return ( <> - {messageElements} + {result} {cursor} ); } - // CopilotChatMessageView renders one element per user/assistant/activity + // CopilotChatMessageView renders one element per user/assistant // message (tool messages produce nothing). We correlate elements with // messages to inject CitationBlocks after the right assistant responses. + // Activity messages (skill sub-agent tool calls) are rendered by us + // directly, not by CopilotKit. // // Both search and ask tools append to citations via qa_history, // so after each assistant text response that followed tool calls, @@ -306,10 +400,28 @@ function MessageViewWithCitations({ seenToolCalls = true; } - const isRendered = - msg.role === "user" || - msg.role === "assistant" || - msg.role === "activity"; + // Activity messages are not rendered by CopilotKit — + // render them ourselves without consuming messageElements + if (msg.role === "activity") { + if (msg.activityType === "skill_tool_call") { + const toolCallId = msg.content?.tool_call_id; + const isComplete = toolCallId + ? completedToolCallIds.has(toolCallId) + : false; + result.push( + , + ); + } + // Skip skill_tool_result — completion is shown + // on the corresponding skill_tool_call indicator + continue; + } + + const isRendered = msg.role === "user" || msg.role === "assistant"; if (!isRendered) continue; if (elemIdx < messageElements.length) { diff --git a/app/frontend/package.json b/app/frontend/package.json index 3bc0c64e..eeeeec74 100644 --- a/app/frontend/package.json +++ b/app/frontend/package.json @@ -11,9 +11,10 @@ "format": "biome check --write app components lib" }, "dependencies": { - "@ag-ui/client": "^0.0.43", - "@copilotkit/react-core": "^1.51.4", - "@copilotkit/runtime": "^1.51.4", + "@ag-ui/client": "^0.0.47", + "@copilotkit/react-core": "^1.54.0", + "@copilotkit/runtime": "^1.54.0", + "zod": "^3.24.0", "next": "^16.1.1", "react": "^19.0.0", "react-dom": "^19.0.0" diff --git a/app/frontend/pnpm-lock.yaml b/app/frontend/pnpm-lock.yaml index 75dde0b2..f277d288 100644 --- a/app/frontend/pnpm-lock.yaml +++ b/app/frontend/pnpm-lock.yaml @@ -9,14 +9,14 @@ importers: .: dependencies: '@ag-ui/client': - specifier: ^0.0.43 - version: 0.0.43 + specifier: ^0.0.47 + version: 0.0.47 '@copilotkit/react-core': - specifier: ^1.51.4 - version: 1.51.4(@ag-ui/core@0.0.43)(@copilotkitnext/agent@1.51.4(@cfworker/json-schema@4.1.1))(@copilotkitnext/runtime@1.51.4(@ag-ui/client@0.0.43)(@ag-ui/core@0.0.43)(@ag-ui/encoder@0.0.43)(@copilotkitnext/shared@1.51.4))(@langchain/core@0.3.80(@opentelemetry/api@1.9.0))(@langchain/langgraph-sdk@0.1.10(@langchain/core@0.3.80(@opentelemetry/api@1.9.0))(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@opentelemetry/api@1.9.0)(@types/mdast@4.0.4)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(graphql@16.12.0)(micromark-util-types@2.0.2)(micromark@4.0.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76) + specifier: ^1.54.0 + version: 1.54.0(@ag-ui/core@0.0.47)(@types/mdast@4.0.4)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(graphql@16.12.0)(micromark-util-types@2.0.2)(micromark@4.0.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(signal-polyfill@0.2.2)(zod@3.25.76) '@copilotkit/runtime': - specifier: ^1.51.4 - version: 1.51.4(@copilotkit/shared@1.51.4(@ag-ui/core@0.0.43))(@copilotkitnext/agent@1.51.4(@cfworker/json-schema@4.1.1))(@copilotkitnext/runtime@1.51.4(@ag-ui/client@0.0.43)(@ag-ui/core@0.0.43)(@ag-ui/encoder@0.0.43)(@copilotkitnext/shared@1.51.4))(@langchain/core@0.3.80(@opentelemetry/api@1.9.0))(@langchain/langgraph-sdk@0.1.10(@langchain/core@0.3.80(@opentelemetry/api@1.9.0))(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: ^1.54.0 + version: 1.54.0(@ag-ui/encoder@0.0.47)(@cfworker/json-schema@4.1.1)(@copilotkitnext/shared@1.54.0)(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.19.0)(zod@3.25.76)))(@langchain/langgraph-sdk@0.1.10(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.19.0)(zod@3.25.76)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(ws@8.19.0) next: specifier: ^16.1.1 version: 16.1.6(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -26,6 +26,9 @@ importers: react-dom: specifier: ^19.0.0 version: 19.2.4(react@19.2.4) + zod: + specifier: ^3.24.0 + version: 3.25.76 devDependencies: '@biomejs/biome': specifier: 2.4.2 @@ -53,23 +56,26 @@ packages: graphql: optional: true - '@ag-ui/client@0.0.42': - resolution: {integrity: sha512-zAbP+sZJImR5bUpR2ni7RtuuNZMuesaxviynyIgzKlr1k2VCM49mFpbDUKU4TH4Cneu+Xe7OEnO8qCOCIzBAww==} + '@a2ui/lit@0.8.3': + resolution: {integrity: sha512-YXJksuier3nZLFtdrXfMNd7WdEOldQEfXGDMqoBTMVIM8xU22F/SvfNeDJoKQ4Wn7hXzRMi0vnwq0HI7Lzpyow==} - '@ag-ui/client@0.0.43': - resolution: {integrity: sha512-150Y3TX+k83qvtmp4bTxmPW0Xu7to2y5vlhD8s5gof5/fxMdxybM1ieZazN7OIWU0nCK/hvhA+bVC7mmyby3gw==} + '@a2ui/web_core@0.8.0': + resolution: {integrity: sha512-UG8IDsiLYuZjnEmqH7129EbN1Ds3DfC8FXPSI/E+0kcZ4VGxo//Kij6ZF2jBXBKyrHYPehoDtffFFIIFvgBp6g==} - '@ag-ui/core@0.0.42': - resolution: {integrity: sha512-C2hMg4Gs5oiUDgK9cA2RsTwSSmFZdIsqPklDrFw/Ue+quH6EU3vKp5YoOq7nuaQYO4pO8Em+Z+l5/M5PpcvP1g==} + '@ag-ui/a2ui-middleware@0.0.2': + resolution: {integrity: sha512-dXHWlE9cYxFeQscPpvaLWpbeb7wXjnAlGYMId6kI7nMizSSIgHOrnNTugFRofYm78EY+yVgruNuDjDFWOmYj1A==} + peerDependencies: + '@ag-ui/client': '>=0.0.40' + rxjs: 7.8.1 - '@ag-ui/core@0.0.43': - resolution: {integrity: sha512-/T7kKwPAhtriFFiv3YxZ0yAzMHoY8a8I5UKzhPzwW934h92c6RJ54N93yb9PAqdX3XjCPId0C5gIBHb6QbeR3Q==} + '@ag-ui/client@0.0.47': + resolution: {integrity: sha512-zciVwYV6gmYzdMyWwSDR/VBcOj5x1lHPG/ZGDKyxDHbCeIdGp7sKoGORKHAiPAsfUhReGLKXsR/4IknqwY2PgQ==} - '@ag-ui/encoder@0.0.42': - resolution: {integrity: sha512-97B5MMCSs82t/y41uk2NrLBYFhbvn4kYsKQHMCfy8tjSWubyxh3zP7N9yHo8zJeSPe3WvzTvclyXNiGxSOsorg==} + '@ag-ui/core@0.0.47': + resolution: {integrity: sha512-fHat7ZErAH028R90psYclTWaj6PdcvN2GJxzwWPF/j1c5ceqbF2+6xe+t06Psg+gCzZneI9QE3IkOkdJNplZ5A==} - '@ag-ui/encoder@0.0.43': - resolution: {integrity: sha512-0b7VXFW5KMctdWsGFQEkbIU2gY/tUv0eWBbMchIvjiIS1aHxdGTB6NXHXJzGvDcXEb3urkIvVIFGvpk0WOUhVw==} + '@ag-ui/encoder@0.0.47': + resolution: {integrity: sha512-AgKTM/DEHtaNrcbMa0z1UQ7lKiKtalbFAjBTTP0vCh+lJ6JWIu9LrpCJQ4EjON1IRoAZtJBORlCj1KY+F14HXQ==} '@ag-ui/langgraph@0.0.24': resolution: {integrity: sha512-ebTYpUw28fvbmhqbpAbmfsDTfEqm1gSeZaBcnxMGHFivJLCzsJ/C9hYw6aV8yRKV3lMFBwh/QFxn1eRcr7yRkQ==} @@ -77,60 +83,53 @@ packages: '@ag-ui/client': '>=0.0.42' '@ag-ui/core': '>=0.0.42' - '@ag-ui/proto@0.0.42': - resolution: {integrity: sha512-NDUwSgMnGEqxZGkWIJ1ge5t3Q7Kiddj360x2JAWaIfv9w+7tDJ0pmgyzf3/SXp605aY2wZiDLBtJ6jKZeg1lFg==} + '@ag-ui/mcp-apps-middleware@0.0.2': + resolution: {integrity: sha512-EMHm65hs3aNfoCpxZ1RYDLvZejmit0yipvzg39jwKrGTzqvB3CZuZUenDS9o2eWu2PZIvcFuvU15nEwH7SZb8A==} + peerDependencies: + '@ag-ui/client': '>=0.0.40' + rxjs: 7.8.1 - '@ag-ui/proto@0.0.43': - resolution: {integrity: sha512-JcGjwMyxd5KiRTVi3158eByPXm9lKDRMIApYgSlzhXpBwyfpub8waGFnEWqjE3U+gA1LaZHiVMIfD5NCVYj4WQ==} + '@ag-ui/proto@0.0.47': + resolution: {integrity: sha512-+KCrkeVeR6MulWoYUq9Fwm22gFlI9aKG50eKYRtbTM/Yuei/Che5vjbF297XfSnGUunzScrOmdnTeTCprrtb7A==} - '@ai-sdk/anthropic@2.0.64': - resolution: {integrity: sha512-ojIR3OIT9tacot4t0LVi8vgU24GJcKDiFdBhgMFtGsFBkXg8xxdBEEXFWMQYYTmUVxdiTzr08vtGFLt0mh3C1w==} + '@ai-sdk/anthropic@3.0.58': + resolution: {integrity: sha512-/53SACgmVukO4bkms4dpxpRlYhW8Ct6QZRe6sj1Pi5H00hYhxIrqfiLbZBGxkdRvjsBQeP/4TVGsXgH5rQeb8Q==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/gateway@2.0.39': - resolution: {integrity: sha512-ULnefGmRHG0/tRrf+dtDwgQYAttGi/TR0FmASAzTs1dtpeZp4Xoh1VyWrX3Z1bM3WDs9RM3ZeSE77kQT/jbfjw==} + '@ai-sdk/gateway@3.0.66': + resolution: {integrity: sha512-SIQ0YY0iMuv+07HLsZ+bB990zUJ6S4ujORAh+Jv1V2KGNn73qQKnGO0JBk+w+Res8YqOFSycwDoWcFlQrVxS4A==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/google@2.0.53': - resolution: {integrity: sha512-ccCxr5mrd3AC2CjLq4e1ST7+UiN5T2Pdmgi0XdWM3QohmNBwUQ/RBG7BvL+cB/ex/j6y64tkMmpYz9zBw/SEFQ==} + '@ai-sdk/google@3.0.43': + resolution: {integrity: sha512-NGCgP5g8HBxrNdxvF8Dhww+UKfqAkZAmyYBvbu9YLoBkzAmGKDBGhVptN/oXPB5Vm0jggMdoLycZ8JReQM8Zqg==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/mcp@0.0.8': - resolution: {integrity: sha512-9y9GuGcZ9/+pMIHfpOCJgZVp+AZMv6TkjX2NVT17SQZvTF2N8LXuCXyoUPyi1PxIxzxl0n463LxxaB2O6olC+Q==} + '@ai-sdk/mcp@1.0.25': + resolution: {integrity: sha512-vMlXUPGHGDE2vzLcPR8sw7Dhz2OBjtPU5lB+lIuC1hNQo4REuUC08P0e96/hzBKf4oQYJ8Zo6uP8AG2qThyFbg==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/openai@2.0.91': - resolution: {integrity: sha512-lozfRHfSTHg5/UliQjTDcOtISYGbEpt4FS/6QM5PcLmhdT0HmROllaBmG7+JaK+uqFtDXZGgMIpz3bqB9nzqCQ==} + '@ai-sdk/openai@3.0.41': + resolution: {integrity: sha512-IZ42A+FO+vuEQCVNqlnAPYQnnUpUfdJIwn1BEDOBywiEHa23fw7PahxVtlX9zm3/zMvTW4JKPzWyvAgDu+SQ2A==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/provider-utils@3.0.17': - resolution: {integrity: sha512-TR3Gs4I3Tym4Ll+EPdzRdvo/rc8Js6c4nVhFLuvGLX/Y4V9ZcQMa/HTiYsHEgmYrf1zVi6Q145UEZUfleOwOjw==} + '@ai-sdk/provider-utils@4.0.19': + resolution: {integrity: sha512-3eG55CrSWCu2SXlqq2QCsFjo3+E7+Gmg7i/oRVoSZzIodTuDSfLb3MRje67xE9RFea73Zao7Lm4mADIfUETKGg==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/provider-utils@3.0.21': - resolution: {integrity: sha512-veuMwTLxsgh31Jjn0SnBABnM1f7ebHhRWcV2ZuY3hP3iJDCZ8VXBaYqcHXoOQDqUXTCas08sKQcHyWK+zl882Q==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.25.76 || ^4.1.8 - - '@ai-sdk/provider@2.0.0': - resolution: {integrity: sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA==} - engines: {node: '>=18'} - - '@ai-sdk/provider@2.0.1': - resolution: {integrity: sha512-KCUwswvsC5VsW2PWFqF8eJgSCu5Ysj7m1TxiHTVA6g7k360bk0RNQENT8KTMAYEs+8fWPD3Uu4dEmzGHc+jGng==} + '@ai-sdk/provider@3.0.8': + resolution: {integrity: sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ==} engines: {node: '>=18'} '@antfu/install-pkg@1.1.0': @@ -217,25 +216,28 @@ packages: '@chevrotain/utils@11.0.3': resolution: {integrity: sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==} - '@copilotkit/react-core@1.51.4': - resolution: {integrity: sha512-NAWTz9j7eCfQze4EJWzUowBynXuPFVpE0xyOpJyqdVeUfvQZubEHvARnZ7DlWdJUBSMBaotJ75EZaFSQR9HX2g==} + '@copilotkit/a2ui-renderer@1.54.0': + resolution: {integrity: sha512-98Q9c+Zk2mmEs1gt9N+BQ9ZB8DDO0mmDrsjCCb0IK3Zm6u0jRhYG+rv71PyHdEG4O8ysQf0krpjZy4uh8Gs5/Q==} + peerDependencies: + react: ^18 || ^19 || ^19.0.0-rc + react-dom: ^18 || ^19 || ^19.0.0-rc + + '@copilotkit/react-core@1.54.0': + resolution: {integrity: sha512-rivNaXth1H2wGZdVWs0fnQSCiTVQm23QBjpxSU0oSc0agsZO3IRJglMQjb7eMGRw8O4Kxd4+Uh32s6EIpb11sg==} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc react-dom: ^18 || ^19 || ^19.0.0-rc zod: '>=3.0.0' - '@copilotkit/runtime-client-gql@1.51.4': - resolution: {integrity: sha512-M7U+/t/ofdrmDxBwul6DznP/yO46CMHyv/Dc4jKOqds+Ug/7aEXB/rlChs/sA+zcEGzcKoKutHXWAT/aScMh4w==} + '@copilotkit/runtime-client-gql@1.54.0': + resolution: {integrity: sha512-b0N4wCGPEpSHbwrdUI4ktkZxy57FKY8uSfb2oCuWVcSAYTj7Mx7NiGW3S4/wLob44eURByK1A4HM3FJRu2vV2w==} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc - '@copilotkit/runtime@1.51.4': - resolution: {integrity: sha512-BBqOvrXrY4hxQ7Z6v7kcc26fEPdrNCxK9adZUCURdjV6pupd6fqaGP0FIIOOSA7l98HX79RI3V2MStn+1Xamiw==} + '@copilotkit/runtime@1.54.0': + resolution: {integrity: sha512-YKOkotnw2Dz4HTngaND2Fdcl5C58amc3meyQqxa0CvvfaRi++yV45dG9mMQiKgo042JrAd9Kn8upquVwzUIJ8A==} peerDependencies: '@anthropic-ai/sdk': ^0.57.0 - '@copilotkit/shared': 1.51.4 - '@copilotkitnext/agent': 1.51.4 - '@copilotkitnext/runtime': 1.51.4 '@langchain/aws': '>=0.1.9' '@langchain/community': '>=0.3.58' '@langchain/core': '>=0.3.66' @@ -244,7 +246,6 @@ packages: '@langchain/openai': '>=0.4.2' groq-sdk: '>=0.3.0 <1.0.0' langchain: '>=0.3.3' - openai: ^4.85.1 peerDependenciesMeta: '@anthropic-ai/sdk': optional: true @@ -262,45 +263,49 @@ packages: optional: true langchain: optional: true - openai: - optional: true - '@copilotkit/shared@1.51.4': - resolution: {integrity: sha512-njIHsNGeH1AtrLBnqTup3GwGyBosg3VQEmAnxEs6JVNkvVfWxJO9OfVziPBnwZT5cXnMFkpo8zhfT5WSKllXLQ==} + '@copilotkit/shared@1.54.0': + resolution: {integrity: sha512-KPR345Sjh/+x2TGfvBqHlUR0RGtGz+hQn16pwcauFS7DsQheRi6J7gsEt+HdASGG6q5rzqTmOeJrb65Ecm90Aw==} peerDependencies: - '@ag-ui/core': ^0.0.43 + '@ag-ui/core': ^0.0.47 - '@copilotkitnext/agent@1.51.4': - resolution: {integrity: sha512-/+4uy7E5aHsLpiaZYKFqvNgU2OOCM83JRgKJy9gPZ87fyR2Hwu3Wj/EFiHWSzZBo/DOeFxE1u/3u5MPjlukntg==} + '@copilotkitnext/agent@1.54.0': + resolution: {integrity: sha512-IDcisz4ce1zZq5OE+0bGQpOnI2RuuhubEQVSqffgWSUxvOlkln9yAP0ktFyAM6cX9oJkglrW10RNANlxNqFYsg==} engines: {node: '>=18'} + deprecated: This package is deprecated. Use @copilotkit/agent instead. V2 features are being integrated into the main @copilotkit exports and will be available under the /v2 subpath. - '@copilotkitnext/core@1.51.4': - resolution: {integrity: sha512-mCjtcrQEeNm+SM6EHKWA04OKPNmm/gt+ITOlKA3uam/jnNU4YnVJoJHlbN+PX2XVzq9zhATr34GIlgGExOuZHw==} + '@copilotkitnext/core@1.54.0': + resolution: {integrity: sha512-0aJSsfUnQjIZH/7lVobltUwp7hNpc1D8JtGz/cQVmRG+p3W0xFiAqli1qUfv4Ax9t5h6JxJESRbd6JdPmr5anA==} engines: {node: '>=18'} + deprecated: This package is deprecated. Use @copilotkit/core instead. V2 features are being integrated into the main @copilotkit exports and will be available under the /v2 subpath. - '@copilotkitnext/react@1.51.4': - resolution: {integrity: sha512-9pn0PvRQuMkg0d6hJ1q0qBtbSGxkyyHXoRwdeDaeSw+vsGQtVvSeyl/p4Bex6JosgoA2NTHmT2F5wZV/pbrf1A==} + '@copilotkitnext/react@1.54.0': + resolution: {integrity: sha512-Yz+RBXmLTrl2l5PPuFKoU4SHsSOFKRXtP4rN1zDEmyBSxft3cOvy53CLl6HI0qEZQ4Xn8sSf3kVxCYEcfugqyg==} engines: {node: '>=18'} + deprecated: This package is deprecated. Use @copilotkit/react instead. V2 features are being integrated into the main @copilotkit exports and will be available under the /v2 subpath. peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' - '@copilotkitnext/runtime@1.51.4': - resolution: {integrity: sha512-XBkNxrVlyu7/dQunKEw5RX/NOrVEss36up/jVvGI6X31ayC0pjeMnyPcvmKbbbg5irdLUMgBeYgC3k93ke+dhg==} + '@copilotkitnext/runtime@1.54.0': + resolution: {integrity: sha512-dW+veSk9ObTDRzE9wJKhdlBrblBB2jsTnVhXdgYcHw4eCO4zP2GqGgzkRaZQ0LBKNq7t9TI0xXuvynRrOreAYg==} engines: {node: '>=18'} + deprecated: This package is deprecated. Use @copilotkit/runtime instead. V2 features are being integrated into the main @copilotkit exports and will be available under the /v2 subpath. peerDependencies: - '@ag-ui/client': 0.0.42 - '@ag-ui/core': 0.0.42 - '@ag-ui/encoder': 0.0.42 - '@copilotkitnext/shared': 1.51.4 + '@ag-ui/client': 0.0.47 + '@ag-ui/core': 0.0.47 + '@ag-ui/encoder': 0.0.47 + '@copilotkitnext/shared': 1.54.0 - '@copilotkitnext/shared@1.51.4': - resolution: {integrity: sha512-3C68dzGwuUShAHHnJVLSMOZ89QZrx8oXrGNx8VbFl3BrOw6Q+sG53hgx/QZ23TAwqKq3Gt7JVrbUp6iQE7DGsw==} + '@copilotkitnext/shared@1.54.0': + resolution: {integrity: sha512-g8K0+vvGa6mwx9etxgBz3x/P1ciHql/toghFthp1CDBlB9fM1R0TvyXL/vMYTJbjYOdRDiu5DRHZhQ+niblA1A==} engines: {node: '>=18'} + deprecated: This package is deprecated. Use @copilotkit/shared instead. V2 features are being integrated into the main @copilotkit exports and will be available under the /v2 subpath. - '@copilotkitnext/web-inspector@1.51.4': - resolution: {integrity: sha512-zXJWbIgVkJUSsEedgQhbKg84bAod1lxdfR78rCaHrGO2XfSnZInphMOa3boQkbUdzKr1bhxWmgJd/fi5+/5AVQ==} + '@copilotkitnext/web-inspector@1.54.0': + resolution: {integrity: sha512-l2rWMXuFNdn5DcxZx9bsKRii1UPHdH+/uNm9/Jf0EbSztyCLJlWK0sYZI6Rbdx+XU1ELxeDbxVbwhPTp0Kd8mQ==} engines: {node: '>=18'} + deprecated: This package is deprecated. Use @copilotkit/web-inspector instead. V2 features are being integrated into the main @copilotkit exports and will be available under the /v2 subpath. '@emnapi/runtime@1.8.1': resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} @@ -575,9 +580,15 @@ packages: '@lit-labs/react@2.1.3': resolution: {integrity: sha512-OD9h2JynerBQUMNzb563jiVpxfvPF0HjQkKY2mx0lpVYvD7F+rtJpOGz6ek+6ufMidV3i+MPT9SX62OKWHFrQg==} + '@lit-labs/signals@0.1.3': + resolution: {integrity: sha512-P0yWgH5blwVyEwBg+WFspLzeu1i0ypJP1QB0l1Omr9qZLIPsUu0p4Fy2jshOg7oQyha5n163K3GJGeUhQQ682Q==} + '@lit-labs/ssr-dom-shim@1.5.1': resolution: {integrity: sha512-Aou5UdlSpr5whQe8AA/bZG0jMj96CoJIWbGfZ91qieWu5AWUMKw8VR/pAkQkJYvBNhmCcWnZlyyk5oze8JIqYA==} + '@lit/context@1.1.6': + resolution: {integrity: sha512-M26qDE6UkQbZA2mQ3RjJ3Gzd8TxP+/0obMgE5HfkfLhEEyYE3Bui4A5XHiGPjy0MUGAyxB3QgVuw2ciS0kHn6A==} + '@lit/react@1.0.8': resolution: {integrity: sha512-p2+YcF+JE67SRX3mMlJ1TKCSTsgyOVdAwd/nxp3NuV1+Cb6MWALbN6nT7Ld4tpmYofcE5kcaSY1YBB9erY+6fw==} peerDependencies: @@ -1143,6 +1154,12 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/node-fetch@2.6.13': + resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==} + + '@types/node@18.19.130': + resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==} + '@types/node@22.19.11': resolution: {integrity: sha512-BH7YwL6rA93ReqeQS1c4bsPpcfOmJasG+Fkr6Y59q83f9M1WcBRHR2vM+P9eOisYRcN3ujQoiZY8uk5W+1WL8w==} @@ -1229,8 +1246,12 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - ai@5.0.133: - resolution: {integrity: sha512-N6KnwSWKcXEWPnAri3anRuzRvcrvtDz1W1JG9CvMrQ0Xdp8Vu8ZToNW/eHt63CmrbmzTwVw/HaCtJuO+MYtS7A==} + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + + ai@6.0.116: + resolution: {integrity: sha512-7yM+cTmyRLeNIXwt4Vj+mrrJgVQ9RMIW5WO0ydoLoYkewIvsMcvUmqS4j2RJTUXaF1HphwmSKUMQ/HypNRGOmA==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -1254,6 +1275,9 @@ packages: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + aria-hidden@1.2.6: resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} engines: {node: '>=10'} @@ -1261,6 +1285,9 @@ packages: array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + atomic-sleep@1.0.0: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} @@ -1358,6 +1385,10 @@ packages: colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -1611,6 +1642,10 @@ packages: delaunator@5.0.1: resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==} + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} @@ -1658,6 +1693,10 @@ packages: end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + entities@6.0.1: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} @@ -1674,6 +1713,10 @@ packages: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} @@ -1747,6 +1790,17 @@ packages: resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} engines: {node: '>= 18.0.0'} + form-data-encoder@1.7.2: + resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} + + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + engines: {node: '>= 6'} + + formdata-node@4.4.1: + resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} + engines: {node: '>= 12.20'} + forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -1814,6 +1868,10 @@ packages: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -1884,6 +1942,9 @@ packages: resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -2015,6 +2076,9 @@ packages: libphonenumber-js@1.12.36: resolution: {integrity: sha512-woWhKMAVx1fzzUnMCyOzglgSgf6/AFHLASdOBcchYCyvWSGWt12imw3iu2hdI5d4dGZRsNWAmWiz37sDKUPaRQ==} + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + lit-element@4.2.2: resolution: {integrity: sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w==} @@ -2057,6 +2121,10 @@ packages: lucide@0.525.0: resolution: {integrity: sha512-sfehWlaE/7NVkcEQ4T9JD3eID8RNMIGJBBUq9wF3UFiJIrcMKRbU3g1KGfDk4svcW7yw8BtDLXaXo02scDtUYQ==} + markdown-it@14.1.1: + resolution: {integrity: sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==} + hasBin: true + markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} @@ -2134,6 +2202,9 @@ packages: mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} @@ -2410,6 +2481,10 @@ packages: sass: optional: true + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -2444,6 +2519,18 @@ packages: oniguruma-to-es@4.3.4: resolution: {integrity: sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==} + openai@4.104.0: + resolution: {integrity: sha512-p99EFNsA/yX6UhVO93f5kJsDRLAg+CTA2RBqdHK4RtK8u5IJw32Hyb2dTGKbnnFmnuoBv5r7Z2CURI9sGZpSuA==} + hasBin: true + peerDependencies: + ws: ^8.18.0 + zod: ^3.23.8 + peerDependenciesMeta: + ws: + optional: true + zod: + optional: true + p-finally@1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} @@ -2492,6 +2579,9 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + phoenix@1.8.5: + resolution: {integrity: sha512-Oj5nlRV/NKXkjBx8uMgCMmgMf1twd/B2qOcO30cHLH1PCGR8149o4T1lRIaqN4nq2KQJAeMqPiLdh1Asd0wQFg==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -2549,6 +2639,10 @@ packages: pump@3.0.3: resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + qs@6.14.2: resolution: {integrity: sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==} engines: {node: '>=0.6'} @@ -2798,6 +2892,14 @@ packages: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} + signal-polyfill@0.2.2: + resolution: {integrity: sha512-p63Y4Er5/eMQ9RHg0M0Y64NlsQKpiu6MDdhBXpyywRuWiPywhJTpKJ1iB5K2hJEbFZ0BnDS7ZkJ+0AfTuL37Rg==} + + signal-utils@0.21.1: + resolution: {integrity: sha512-i9cdLSvVH4j8ql8mz2lyrA93xL499P8wEbIev3ldSriXeUwqh+wM4Q5VPhIZ19gPtIS4BOopJuKB8l1+wH9LCg==} + peerDependencies: + signal-polyfill: ^0.2.0 + simple-wcswidth@1.1.2: resolution: {integrity: sha512-j7piyCjAeTDSjzTSQ7DokZtMNwNlEAyxqSZeCS+CXH7fJ4jx3FuJ/mTW3mE+6JLs4VJBbcll0Kjn+KXI5t21Iw==} @@ -2924,9 +3026,15 @@ packages: engines: {node: '>=14.17'} hasBin: true + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + ufo@1.6.3: resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} @@ -3083,6 +3191,10 @@ packages: web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + web-streams-polyfill@4.0.0-beta.3: + resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} + engines: {node: '>= 14'} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -3100,6 +3212,18 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + ws@8.19.0: + resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + zod-to-json-schema@3.25.1: resolution: {integrity: sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==} peerDependencies: @@ -3117,11 +3241,31 @@ snapshots: optionalDependencies: graphql: 16.12.0 - '@ag-ui/client@0.0.42': + '@a2ui/lit@0.8.3(signal-polyfill@0.2.2)': dependencies: - '@ag-ui/core': 0.0.42 - '@ag-ui/encoder': 0.0.42 - '@ag-ui/proto': 0.0.42 + '@a2ui/web_core': 0.8.0 + '@lit-labs/signals': 0.1.3 + '@lit/context': 1.1.6 + lit: 3.3.2 + signal-utils: 0.21.1(signal-polyfill@0.2.2) + transitivePeerDependencies: + - signal-polyfill + + '@a2ui/web_core@0.8.0': + dependencies: + zod: 3.25.76 + zod-to-json-schema: 3.25.1(zod@3.25.76) + + '@ag-ui/a2ui-middleware@0.0.2(@ag-ui/client@0.0.47)(rxjs@7.8.1)': + dependencies: + '@ag-ui/client': 0.0.47 + rxjs: 7.8.1 + + '@ag-ui/client@0.0.47': + dependencies: + '@ag-ui/core': 0.0.47 + '@ag-ui/encoder': 0.0.47 + '@ag-ui/proto': 0.0.47 '@types/uuid': 10.0.0 compare-versions: 6.1.1 fast-json-patch: 3.1.1 @@ -3130,45 +3274,22 @@ snapshots: uuid: 11.1.0 zod: 3.25.76 - '@ag-ui/client@0.0.43': - dependencies: - '@ag-ui/core': 0.0.43 - '@ag-ui/encoder': 0.0.43 - '@ag-ui/proto': 0.0.43 - '@types/uuid': 10.0.0 - compare-versions: 6.1.1 - fast-json-patch: 3.1.1 - rxjs: 7.8.1 - untruncate-json: 0.0.1 - uuid: 11.1.0 - zod: 3.25.76 - - '@ag-ui/core@0.0.42': + '@ag-ui/core@0.0.47': dependencies: rxjs: 7.8.1 zod: 3.25.76 - '@ag-ui/core@0.0.43': + '@ag-ui/encoder@0.0.47': dependencies: - rxjs: 7.8.1 - zod: 3.25.76 + '@ag-ui/core': 0.0.47 + '@ag-ui/proto': 0.0.47 - '@ag-ui/encoder@0.0.42': + '@ag-ui/langgraph@0.0.24(@ag-ui/client@0.0.47)(@ag-ui/core@0.0.47)(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.19.0)(zod@3.25.76))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@ag-ui/core': 0.0.42 - '@ag-ui/proto': 0.0.42 - - '@ag-ui/encoder@0.0.43': - dependencies: - '@ag-ui/core': 0.0.43 - '@ag-ui/proto': 0.0.43 - - '@ag-ui/langgraph@0.0.24(@ag-ui/client@0.0.43)(@ag-ui/core@0.0.43)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@ag-ui/client': 0.0.43 - '@ag-ui/core': 0.0.43 - '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0) - '@langchain/langgraph-sdk': 0.1.10(@langchain/core@0.3.80(@opentelemetry/api@1.9.0))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@ag-ui/client': 0.0.47 + '@ag-ui/core': 0.0.47 + '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.19.0)(zod@3.25.76)) + '@langchain/langgraph-sdk': 0.1.10(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.19.0)(zod@3.25.76)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) partial-json: 0.1.7 rxjs: 7.8.1 transitivePeerDependencies: @@ -3179,69 +3300,62 @@ snapshots: - react - react-dom - '@ag-ui/proto@0.0.42': + '@ag-ui/mcp-apps-middleware@0.0.2(@ag-ui/client@0.0.47)(@cfworker/json-schema@4.1.1)(rxjs@7.8.1)(zod@3.25.76)': dependencies: - '@ag-ui/core': 0.0.42 + '@ag-ui/client': 0.0.47 + '@modelcontextprotocol/sdk': 1.26.0(@cfworker/json-schema@4.1.1)(zod@3.25.76) + rxjs: 7.8.1 + transitivePeerDependencies: + - '@cfworker/json-schema' + - supports-color + - zod + + '@ag-ui/proto@0.0.47': + dependencies: + '@ag-ui/core': 0.0.47 '@bufbuild/protobuf': 2.11.0 '@protobuf-ts/protoc': 2.11.1 - '@ag-ui/proto@0.0.43': + '@ai-sdk/anthropic@3.0.58(zod@3.25.76)': dependencies: - '@ag-ui/core': 0.0.43 - '@bufbuild/protobuf': 2.11.0 - '@protobuf-ts/protoc': 2.11.1 - - '@ai-sdk/anthropic@2.0.64(zod@3.25.76)': - dependencies: - '@ai-sdk/provider': 2.0.1 - '@ai-sdk/provider-utils': 3.0.21(zod@3.25.76) + '@ai-sdk/provider': 3.0.8 + '@ai-sdk/provider-utils': 4.0.19(zod@3.25.76) zod: 3.25.76 - '@ai-sdk/gateway@2.0.39(zod@3.25.76)': + '@ai-sdk/gateway@3.0.66(zod@3.25.76)': dependencies: - '@ai-sdk/provider': 2.0.1 - '@ai-sdk/provider-utils': 3.0.21(zod@3.25.76) + '@ai-sdk/provider': 3.0.8 + '@ai-sdk/provider-utils': 4.0.19(zod@3.25.76) '@vercel/oidc': 3.1.0 zod: 3.25.76 - '@ai-sdk/google@2.0.53(zod@3.25.76)': + '@ai-sdk/google@3.0.43(zod@3.25.76)': dependencies: - '@ai-sdk/provider': 2.0.1 - '@ai-sdk/provider-utils': 3.0.21(zod@3.25.76) + '@ai-sdk/provider': 3.0.8 + '@ai-sdk/provider-utils': 4.0.19(zod@3.25.76) zod: 3.25.76 - '@ai-sdk/mcp@0.0.8(zod@3.25.76)': + '@ai-sdk/mcp@1.0.25(zod@3.25.76)': dependencies: - '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.17(zod@3.25.76) + '@ai-sdk/provider': 3.0.8 + '@ai-sdk/provider-utils': 4.0.19(zod@3.25.76) pkce-challenge: 5.0.1 zod: 3.25.76 - '@ai-sdk/openai@2.0.91(zod@3.25.76)': + '@ai-sdk/openai@3.0.41(zod@3.25.76)': dependencies: - '@ai-sdk/provider': 2.0.1 - '@ai-sdk/provider-utils': 3.0.21(zod@3.25.76) + '@ai-sdk/provider': 3.0.8 + '@ai-sdk/provider-utils': 4.0.19(zod@3.25.76) zod: 3.25.76 - '@ai-sdk/provider-utils@3.0.17(zod@3.25.76)': + '@ai-sdk/provider-utils@4.0.19(zod@3.25.76)': dependencies: - '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider': 3.0.8 '@standard-schema/spec': 1.1.0 eventsource-parser: 3.0.6 zod: 3.25.76 - '@ai-sdk/provider-utils@3.0.21(zod@3.25.76)': - dependencies: - '@ai-sdk/provider': 2.0.1 - '@standard-schema/spec': 1.1.0 - eventsource-parser: 3.0.6 - zod: 3.25.76 - - '@ai-sdk/provider@2.0.0': - dependencies: - json-schema: 0.4.0 - - '@ai-sdk/provider@2.0.1': + '@ai-sdk/provider@3.0.8': dependencies: json-schema: 0.4.0 @@ -3308,13 +3422,24 @@ snapshots: '@chevrotain/utils@11.0.3': {} - '@copilotkit/react-core@1.51.4(@ag-ui/core@0.0.43)(@copilotkitnext/agent@1.51.4(@cfworker/json-schema@4.1.1))(@copilotkitnext/runtime@1.51.4(@ag-ui/client@0.0.43)(@ag-ui/core@0.0.43)(@ag-ui/encoder@0.0.43)(@copilotkitnext/shared@1.51.4))(@langchain/core@0.3.80(@opentelemetry/api@1.9.0))(@langchain/langgraph-sdk@0.1.10(@langchain/core@0.3.80(@opentelemetry/api@1.9.0))(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@opentelemetry/api@1.9.0)(@types/mdast@4.0.4)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(graphql@16.12.0)(micromark-util-types@2.0.2)(micromark@4.0.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76)': + '@copilotkit/a2ui-renderer@1.54.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(signal-polyfill@0.2.2)': dependencies: - '@ag-ui/client': 0.0.43 - '@copilotkit/runtime-client-gql': 1.51.4(@ag-ui/core@0.0.43)(@copilotkitnext/agent@1.51.4(@cfworker/json-schema@4.1.1))(@copilotkitnext/runtime@1.51.4(@ag-ui/client@0.0.43)(@ag-ui/core@0.0.43)(@ag-ui/encoder@0.0.43)(@copilotkitnext/shared@1.51.4))(@langchain/core@0.3.80(@opentelemetry/api@1.9.0))(@langchain/langgraph-sdk@0.1.10(@langchain/core@0.3.80(@opentelemetry/api@1.9.0))(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@opentelemetry/api@1.9.0)(graphql@16.12.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@copilotkit/shared': 1.51.4(@ag-ui/core@0.0.43) - '@copilotkitnext/core': 1.51.4 - '@copilotkitnext/react': 1.51.4(@types/mdast@4.0.4)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(micromark-util-types@2.0.2)(micromark@4.0.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@a2ui/lit': 0.8.3(signal-polyfill@0.2.2) + clsx: 2.1.1 + markdown-it: 14.1.1 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + zod: 3.25.76 + transitivePeerDependencies: + - signal-polyfill + + '@copilotkit/react-core@1.54.0(@ag-ui/core@0.0.47)(@types/mdast@4.0.4)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(graphql@16.12.0)(micromark-util-types@2.0.2)(micromark@4.0.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(signal-polyfill@0.2.2)(zod@3.25.76)': + dependencies: + '@ag-ui/client': 0.0.47 + '@copilotkit/runtime-client-gql': 1.54.0(@ag-ui/core@0.0.47)(graphql@16.12.0)(react@19.2.4) + '@copilotkit/shared': 1.54.0(@ag-ui/core@0.0.47) + '@copilotkitnext/core': 1.54.0(zod@3.25.76) + '@copilotkitnext/react': 1.54.0(@types/mdast@4.0.4)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(micromark-util-types@2.0.2)(micromark@4.0.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(signal-polyfill@0.2.2) '@scarf/scarf': 1.4.0 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) @@ -3323,77 +3448,50 @@ snapshots: zod: 3.25.76 transitivePeerDependencies: - '@ag-ui/core' - - '@anthropic-ai/sdk' - - '@copilotkitnext/agent' - - '@copilotkitnext/runtime' - - '@langchain/aws' - - '@langchain/community' - - '@langchain/core' - - '@langchain/google-gauth' - - '@langchain/langgraph-sdk' - - '@langchain/openai' - - '@opentelemetry/api' - - '@opentelemetry/exporter-trace-otlp-proto' - - '@opentelemetry/sdk-trace-base' - '@types/mdast' - '@types/react' - '@types/react-dom' - encoding - graphql - - groq-sdk - - langchain - micromark - micromark-util-types - - openai + - signal-polyfill - supports-color - '@copilotkit/runtime-client-gql@1.51.4(@ag-ui/core@0.0.43)(@copilotkitnext/agent@1.51.4(@cfworker/json-schema@4.1.1))(@copilotkitnext/runtime@1.51.4(@ag-ui/client@0.0.43)(@ag-ui/core@0.0.43)(@ag-ui/encoder@0.0.43)(@copilotkitnext/shared@1.51.4))(@langchain/core@0.3.80(@opentelemetry/api@1.9.0))(@langchain/langgraph-sdk@0.1.10(@langchain/core@0.3.80(@opentelemetry/api@1.9.0))(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@opentelemetry/api@1.9.0)(graphql@16.12.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@copilotkit/runtime-client-gql@1.54.0(@ag-ui/core@0.0.47)(graphql@16.12.0)(react@19.2.4)': dependencies: - '@copilotkit/runtime': 1.51.4(@copilotkit/shared@1.51.4(@ag-ui/core@0.0.43))(@copilotkitnext/agent@1.51.4(@cfworker/json-schema@4.1.1))(@copilotkitnext/runtime@1.51.4(@ag-ui/client@0.0.43)(@ag-ui/core@0.0.43)(@ag-ui/encoder@0.0.43)(@copilotkitnext/shared@1.51.4))(@langchain/core@0.3.80(@opentelemetry/api@1.9.0))(@langchain/langgraph-sdk@0.1.10(@langchain/core@0.3.80(@opentelemetry/api@1.9.0))(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@copilotkit/shared': 1.51.4(@ag-ui/core@0.0.43) + '@copilotkit/shared': 1.54.0(@ag-ui/core@0.0.47) '@urql/core': 5.2.0(graphql@16.12.0) react: 19.2.4 untruncate-json: 0.0.1 urql: 4.2.2(@urql/core@5.2.0(graphql@16.12.0))(react@19.2.4) transitivePeerDependencies: - '@ag-ui/core' - - '@anthropic-ai/sdk' - - '@copilotkitnext/agent' - - '@copilotkitnext/runtime' - - '@langchain/aws' - - '@langchain/community' - - '@langchain/core' - - '@langchain/google-gauth' - - '@langchain/langgraph-sdk' - - '@langchain/openai' - - '@opentelemetry/api' - - '@opentelemetry/exporter-trace-otlp-proto' - - '@opentelemetry/sdk-trace-base' - encoding - graphql - - groq-sdk - - langchain - - openai - - react-dom - '@copilotkit/runtime@1.51.4(@copilotkit/shared@1.51.4(@ag-ui/core@0.0.43))(@copilotkitnext/agent@1.51.4(@cfworker/json-schema@4.1.1))(@copilotkitnext/runtime@1.51.4(@ag-ui/client@0.0.43)(@ag-ui/core@0.0.43)(@ag-ui/encoder@0.0.43)(@copilotkitnext/shared@1.51.4))(@langchain/core@0.3.80(@opentelemetry/api@1.9.0))(@langchain/langgraph-sdk@0.1.10(@langchain/core@0.3.80(@opentelemetry/api@1.9.0))(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@copilotkit/runtime@1.54.0(@ag-ui/encoder@0.0.47)(@cfworker/json-schema@4.1.1)(@copilotkitnext/shared@1.54.0)(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.19.0)(zod@3.25.76)))(@langchain/langgraph-sdk@0.1.10(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.19.0)(zod@3.25.76)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(ws@8.19.0)': dependencies: - '@ag-ui/client': 0.0.43 - '@ag-ui/core': 0.0.43 - '@ag-ui/langgraph': 0.0.24(@ag-ui/client@0.0.43)(@ag-ui/core@0.0.43)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@copilotkit/shared': 1.51.4(@ag-ui/core@0.0.43) - '@copilotkitnext/agent': 1.51.4(@cfworker/json-schema@4.1.1) - '@copilotkitnext/runtime': 1.51.4(@ag-ui/client@0.0.43)(@ag-ui/core@0.0.43)(@ag-ui/encoder@0.0.43)(@copilotkitnext/shared@1.51.4) + '@ag-ui/client': 0.0.47 + '@ag-ui/core': 0.0.47 + '@ag-ui/langgraph': 0.0.24(@ag-ui/client@0.0.47)(@ag-ui/core@0.0.47)(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.19.0)(zod@3.25.76))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@ai-sdk/anthropic': 3.0.58(zod@3.25.76) + '@ai-sdk/openai': 3.0.41(zod@3.25.76) + '@copilotkit/shared': 1.54.0(@ag-ui/core@0.0.47) + '@copilotkitnext/agent': 1.54.0(@cfworker/json-schema@4.1.1) + '@copilotkitnext/runtime': 1.54.0(@ag-ui/client@0.0.47)(@ag-ui/core@0.0.47)(@ag-ui/encoder@0.0.47)(@cfworker/json-schema@4.1.1)(@copilotkitnext/shared@1.54.0)(zod@3.25.76) '@graphql-yoga/plugin-defer-stream': 3.18.0(graphql-yoga@5.18.0(graphql@16.12.0))(graphql@16.12.0) '@hono/node-server': 1.19.9(hono@4.11.9) - '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0) + '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.19.0)(zod@3.25.76)) '@scarf/scarf': 1.4.0 + ai: 6.0.116(zod@3.25.76) class-transformer: 0.5.1 class-validator: 0.14.3 graphql: 16.12.0 graphql-scalars: 1.25.0(graphql@16.12.0) graphql-yoga: 5.18.0(graphql@16.12.0) hono: 4.11.9 + openai: 4.104.0(ws@8.19.0)(zod@3.25.76) partial-json: 0.1.7 pino: 9.14.0 pino-pretty: 11.3.0 @@ -3402,17 +3500,25 @@ snapshots: type-graphql: 2.0.0-rc.1(class-validator@0.14.3)(graphql-scalars@1.25.0(graphql@16.12.0))(graphql@16.12.0) zod: 3.25.76 optionalDependencies: - '@langchain/langgraph-sdk': 0.1.10(@langchain/core@0.3.80(@opentelemetry/api@1.9.0))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@langchain/langgraph-sdk': 0.1.10(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.19.0)(zod@3.25.76)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) transitivePeerDependencies: + - '@ag-ui/encoder' + - '@cfworker/json-schema' + - '@copilotkitnext/shared' - '@opentelemetry/api' - '@opentelemetry/exporter-trace-otlp-proto' - '@opentelemetry/sdk-trace-base' + - bufferutil + - encoding - react - react-dom + - supports-color + - utf-8-validate + - ws - '@copilotkit/shared@1.51.4(@ag-ui/core@0.0.43)': + '@copilotkit/shared@1.54.0(@ag-ui/core@0.0.47)': dependencies: - '@ag-ui/core': 0.0.43 + '@ag-ui/core': 0.0.47 '@segment/analytics-node': 2.3.0 chalk: 4.1.2 graphql: 16.12.0 @@ -3421,36 +3527,40 @@ snapshots: transitivePeerDependencies: - encoding - '@copilotkitnext/agent@1.51.4(@cfworker/json-schema@4.1.1)': + '@copilotkitnext/agent@1.54.0(@cfworker/json-schema@4.1.1)': dependencies: - '@ag-ui/client': 0.0.42 - '@ai-sdk/anthropic': 2.0.64(zod@3.25.76) - '@ai-sdk/google': 2.0.53(zod@3.25.76) - '@ai-sdk/mcp': 0.0.8(zod@3.25.76) - '@ai-sdk/openai': 2.0.91(zod@3.25.76) + '@ag-ui/client': 0.0.47 + '@ai-sdk/anthropic': 3.0.58(zod@3.25.76) + '@ai-sdk/google': 3.0.43(zod@3.25.76) + '@ai-sdk/mcp': 1.0.25(zod@3.25.76) + '@ai-sdk/openai': 3.0.41(zod@3.25.76) + '@copilotkitnext/shared': 1.54.0 '@modelcontextprotocol/sdk': 1.26.0(@cfworker/json-schema@4.1.1)(zod@3.25.76) - ai: 5.0.133(zod@3.25.76) + ai: 6.0.116(zod@3.25.76) rxjs: 7.8.1 zod: 3.25.76 transitivePeerDependencies: - '@cfworker/json-schema' - supports-color - '@copilotkitnext/core@1.51.4': + '@copilotkitnext/core@1.54.0(zod@3.25.76)': dependencies: - '@ag-ui/client': 0.0.42 - '@copilotkitnext/shared': 1.51.4 + '@ag-ui/client': 0.0.47 + '@copilotkitnext/shared': 1.54.0 + phoenix: 1.8.5 rxjs: 7.8.1 - zod: 3.25.76 zod-to-json-schema: 3.25.1(zod@3.25.76) + transitivePeerDependencies: + - zod - '@copilotkitnext/react@1.51.4(@types/mdast@4.0.4)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(micromark-util-types@2.0.2)(micromark@4.0.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@copilotkitnext/react@1.54.0(@types/mdast@4.0.4)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(micromark-util-types@2.0.2)(micromark@4.0.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(signal-polyfill@0.2.2)': dependencies: - '@ag-ui/client': 0.0.42 - '@ag-ui/core': 0.0.42 - '@copilotkitnext/core': 1.51.4 - '@copilotkitnext/shared': 1.51.4 - '@copilotkitnext/web-inspector': 1.51.4 + '@ag-ui/client': 0.0.47 + '@ag-ui/core': 0.0.47 + '@copilotkit/a2ui-renderer': 1.54.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(signal-polyfill@0.2.2) + '@copilotkitnext/core': 1.54.0(zod@3.25.76) + '@copilotkitnext/shared': 1.54.0 + '@copilotkitnext/web-inspector': 1.54.0(zod@3.25.76) '@lit-labs/react': 2.1.3(@types/react@19.2.14) '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-slot': 1.2.4(@types/react@19.2.14)(react@19.2.4) @@ -3473,34 +3583,46 @@ snapshots: - '@types/react-dom' - micromark - micromark-util-types + - signal-polyfill - supports-color - '@copilotkitnext/runtime@1.51.4(@ag-ui/client@0.0.43)(@ag-ui/core@0.0.43)(@ag-ui/encoder@0.0.43)(@copilotkitnext/shared@1.51.4)': + '@copilotkitnext/runtime@1.54.0(@ag-ui/client@0.0.47)(@ag-ui/core@0.0.47)(@ag-ui/encoder@0.0.47)(@cfworker/json-schema@4.1.1)(@copilotkitnext/shared@1.54.0)(zod@3.25.76)': dependencies: - '@ag-ui/client': 0.0.43 - '@ag-ui/core': 0.0.43 - '@ag-ui/encoder': 0.0.43 - '@copilotkitnext/shared': 1.51.4 + '@ag-ui/a2ui-middleware': 0.0.2(@ag-ui/client@0.0.47)(rxjs@7.8.1) + '@ag-ui/client': 0.0.47 + '@ag-ui/core': 0.0.47 + '@ag-ui/encoder': 0.0.47 + '@ag-ui/mcp-apps-middleware': 0.0.2(@ag-ui/client@0.0.47)(@cfworker/json-schema@4.1.1)(rxjs@7.8.1)(zod@3.25.76) + '@copilotkitnext/shared': 1.54.0 cors: 2.8.6 express: 4.22.1 hono: 4.11.9 + phoenix: 1.8.5 rxjs: 7.8.1 + ws: 8.19.0 transitivePeerDependencies: + - '@cfworker/json-schema' + - bufferutil - supports-color + - utf-8-validate + - zod - '@copilotkitnext/shared@1.51.4': + '@copilotkitnext/shared@1.54.0': dependencies: - '@ag-ui/client': 0.0.42 + '@ag-ui/client': 0.0.47 + '@standard-schema/spec': 1.1.0 partial-json: 0.1.7 uuid: 11.1.0 - '@copilotkitnext/web-inspector@1.51.4': + '@copilotkitnext/web-inspector@1.54.0(zod@3.25.76)': dependencies: - '@ag-ui/client': 0.0.42 - '@copilotkitnext/core': 1.51.4 + '@ag-ui/client': 0.0.47 + '@copilotkitnext/core': 1.54.0(zod@3.25.76) lit: 3.3.2 lucide: 0.525.0 marked: 12.0.2 + transitivePeerDependencies: + - zod '@emnapi/runtime@1.8.1': dependencies: @@ -3717,14 +3839,14 @@ snapshots: '@img/sharp-win32-x64@0.34.5': optional: true - '@langchain/core@0.3.80(@opentelemetry/api@1.9.0)': + '@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.19.0)(zod@3.25.76))': dependencies: '@cfworker/json-schema': 4.1.1 ansi-styles: 5.2.0 camelcase: 6.3.0 decamelize: 1.2.0 js-tiktoken: 1.0.21 - langsmith: 0.3.87(@opentelemetry/api@1.9.0) + langsmith: 0.3.87(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.19.0)(zod@3.25.76)) mustache: 4.2.0 p-queue: 6.6.2 p-retry: 4.6.2 @@ -3737,14 +3859,14 @@ snapshots: - '@opentelemetry/sdk-trace-base' - openai - '@langchain/langgraph-sdk@0.1.10(@langchain/core@0.3.80(@opentelemetry/api@1.9.0))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@langchain/langgraph-sdk@0.1.10(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.19.0)(zod@3.25.76)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@types/json-schema': 7.0.15 p-queue: 6.6.2 p-retry: 4.6.2 uuid: 9.0.1 optionalDependencies: - '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0) + '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.19.0)(zod@3.25.76)) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) @@ -3754,8 +3876,17 @@ snapshots: transitivePeerDependencies: - '@types/react' + '@lit-labs/signals@0.1.3': + dependencies: + lit: 3.3.2 + signal-polyfill: 0.2.2 + '@lit-labs/ssr-dom-shim@1.5.1': {} + '@lit/context@1.1.6': + dependencies: + '@lit/reactive-element': 2.1.2 + '@lit/react@1.0.8(@types/react@19.2.14)': dependencies: '@types/react': 19.2.14 @@ -4323,6 +4454,15 @@ snapshots: '@types/ms@2.1.0': {} + '@types/node-fetch@2.6.13': + dependencies: + '@types/node': 22.19.11 + form-data: 4.0.5 + + '@types/node@18.19.130': + dependencies: + undici-types: 5.26.5 + '@types/node@22.19.11': dependencies: undici-types: 6.21.0 @@ -4411,11 +4551,15 @@ snapshots: acorn@8.15.0: {} - ai@5.0.133(zod@3.25.76): + agentkeepalive@4.6.0: dependencies: - '@ai-sdk/gateway': 2.0.39(zod@3.25.76) - '@ai-sdk/provider': 2.0.1 - '@ai-sdk/provider-utils': 3.0.21(zod@3.25.76) + humanize-ms: 1.2.1 + + ai@6.0.116(zod@3.25.76): + dependencies: + '@ai-sdk/gateway': 3.0.66(zod@3.25.76) + '@ai-sdk/provider': 3.0.8 + '@ai-sdk/provider-utils': 4.0.19(zod@3.25.76) '@opentelemetry/api': 1.9.0 zod: 3.25.76 @@ -4436,12 +4580,16 @@ snapshots: ansi-styles@5.2.0: {} + argparse@2.0.1: {} + aria-hidden@1.2.6: dependencies: tslib: 2.8.1 array-flatten@1.1.1: {} + asynckit@0.4.0: {} + atomic-sleep@1.0.0: {} bail@2.0.2: {} @@ -4555,6 +4703,10 @@ snapshots: colorette@2.0.20: {} + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + comma-separated-tokens@2.0.3: {} commander@7.2.0: {} @@ -4814,6 +4966,8 @@ snapshots: dependencies: robust-predicates: 3.0.2 + delayed-stream@1.0.0: {} + depd@2.0.0: {} dequal@2.0.3: {} @@ -4851,6 +5005,8 @@ snapshots: dependencies: once: 1.4.0 + entities@4.5.0: {} + entities@6.0.1: {} es-define-property@1.0.1: {} @@ -4861,6 +5017,13 @@ snapshots: dependencies: es-errors: 1.3.0 + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + escape-html@1.0.3: {} escape-string-regexp@5.0.0: {} @@ -4990,6 +5153,21 @@ snapshots: transitivePeerDependencies: - supports-color + form-data-encoder@1.7.2: {} + + form-data@4.0.5: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + formdata-node@4.4.1: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 4.0.0-beta.3 + forwarded@0.2.0: {} fresh@0.5.2: {} @@ -5056,6 +5234,10 @@ snapshots: has-symbols@1.1.0: {} + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -5206,6 +5388,10 @@ snapshots: statuses: 2.0.2 toidentifier: 1.0.1 + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -5287,7 +5473,7 @@ snapshots: vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.0.8 - langsmith@0.3.87(@opentelemetry/api@1.9.0): + langsmith@0.3.87(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.19.0)(zod@3.25.76)): dependencies: '@types/uuid': 10.0.0 chalk: 4.1.2 @@ -5297,6 +5483,7 @@ snapshots: uuid: 10.0.0 optionalDependencies: '@opentelemetry/api': 1.9.0 + openai: 4.104.0(ws@8.19.0)(zod@3.25.76) layout-base@1.0.2: {} @@ -5304,6 +5491,10 @@ snapshots: libphonenumber-js@1.12.36: {} + linkify-it@5.0.0: + dependencies: + uc.micro: 2.1.0 + lit-element@4.2.2: dependencies: '@lit-labs/ssr-dom-shim': 1.5.1 @@ -5344,6 +5535,15 @@ snapshots: lucide@0.525.0: {} + markdown-it@14.1.1: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + markdown-table@3.0.4: {} marked@12.0.2: {} @@ -5555,6 +5755,8 @@ snapshots: dependencies: '@types/mdast': 4.0.4 + mdurl@2.0.0: {} + media-typer@0.3.0: {} media-typer@1.1.0: {} @@ -6016,6 +6218,8 @@ snapshots: - '@babel/core' - babel-plugin-macros + node-domexception@1.0.0: {} + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 @@ -6042,6 +6246,21 @@ snapshots: regex: 6.1.0 regex-recursion: 6.0.2 + openai@4.104.0(ws@8.19.0)(zod@3.25.76): + dependencies: + '@types/node': 18.19.130 + '@types/node-fetch': 2.6.13 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0 + optionalDependencies: + ws: 8.19.0 + zod: 3.25.76 + transitivePeerDependencies: + - encoding + p-finally@1.0.0: {} p-queue@6.6.2: @@ -6088,6 +6307,8 @@ snapshots: pathe@2.0.3: {} + phoenix@1.8.5: {} + picocolors@1.1.1: {} pino-abstract-transport@2.0.0: @@ -6172,6 +6393,8 @@ snapshots: end-of-stream: 1.4.5 once: 1.4.0 + punycode.js@2.3.1: {} + qs@6.14.2: dependencies: side-channel: 1.1.0 @@ -6561,6 +6784,12 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 + signal-polyfill@0.2.2: {} + + signal-utils@0.21.1(signal-polyfill@0.2.2): + dependencies: + signal-polyfill: 0.2.2 + simple-wcswidth@1.1.2: {} sonic-boom@4.2.1: @@ -6691,8 +6920,12 @@ snapshots: typescript@5.9.3: {} + uc.micro@2.1.0: {} + ufo@1.6.3: {} + undici-types@5.26.5: {} + undici-types@6.21.0: {} unified@10.1.2: @@ -6869,6 +7102,8 @@ snapshots: web-namespaces@2.0.1: {} + web-streams-polyfill@4.0.0-beta.3: {} + webidl-conversions@3.0.1: {} whatwg-url@5.0.0: @@ -6884,6 +7119,8 @@ snapshots: wrappy@1.0.2: {} + ws@8.19.0: {} + zod-to-json-schema@3.25.1(zod@3.25.76): dependencies: zod: 3.25.76 From 1782e01922f2a0cb73504a20f1a0ca766aa2cbd9 Mon Sep 17 00:00:00 2001 From: Yiorgis Gozadinos Date: Fri, 13 Mar 2026 12:45:58 +0200 Subject: [PATCH 3/6] chore: simplify frontend CSS and unify message rendering logic Consolidate 4 CopilotKit max-width override rules into 1 scoped to .chat-container. Remove dead pre-1.54.0 selectors and redundant browser-default styles. Unify the two render paths in MessageViewWithCitations into a single loop. Co-Authored-By: Claude Opus 4.6 --- app/frontend/app/globals.css | 41 ++-------------- app/frontend/components/Chat.tsx | 80 ++++---------------------------- 2 files changed, 14 insertions(+), 107 deletions(-) diff --git a/app/frontend/app/globals.css b/app/frontend/app/globals.css index d779984d..edf71140 100644 --- a/app/frontend/app/globals.css +++ b/app/frontend/app/globals.css @@ -36,22 +36,14 @@ a { --ring: #3b82f6; } -/* Chat message area — use full width instead of CopilotKit's max-width constraints. - Scoped to scroll area; the input area inherits CopilotKit's natural sizing. */ -.chat-scroll-area .max-w-3xl, -.chat-scroll-area [class*="cpk:max-w-3xl"], -.chat-scroll-area [class*="cpk:max-w-"] { +/* Remove CopilotKit's max-width constraints so content fills the container */ +.chat-container [class*="cpk:max-w-"], +.chat-container .max-w-3xl { max-width: 100% !important; } -/* In the empty state (no chat-scroll-area), widen only the message view container */ -.copilotKitChat [class*="cpk:max-w-3xl"]:not(:has(.copilotKitInput)) { - max-width: 100% !important; -} - -/* Empty state input — stretch to full width with horizontal margin */ -.copilotKitChat [class*="cpk:max-w-3xl"]:has(.copilotKitInput) { - max-width: 100% !important; +/* Empty state input — horizontal padding so it doesn't touch the edges */ +.chat-container [class*="cpk:max-w-3xl"]:has(.copilotKitInput) { padding: 0 1rem; } @@ -98,21 +90,6 @@ a { right: auto; } -/* Make the input stretch to full width within its padded container */ -.chat-input-area [class*="cpk:max-w-"] { - max-width: 100% !important; -} - -/* User message bubble spacing and padding */ -[data-message-id].items-end { - padding-top: 1rem; -} - -[data-message-id].items-end > .bg-muted { - color: #1e293b; - padding: 0.75rem 1.25rem; -} - /* Assistant message markdown styling */ .prose[data-message-id] { line-height: 1.6; @@ -220,14 +197,6 @@ a { font-weight: 600; } -.prose[data-message-id] strong { - font-weight: 600; -} - -.prose[data-message-id] em { - font-style: italic; -} - /* ── Chat layout ── */ .chat-wrapper { diff --git a/app/frontend/components/Chat.tsx b/app/frontend/components/Chat.tsx index 38e6618a..33919dc2 100644 --- a/app/frontend/components/Chat.tsx +++ b/app/frontend/components/Chat.tsx @@ -317,75 +317,17 @@ function MessageViewWithCitations({
) : null; + // CopilotChatMessageView renders one element per user/assistant message. + // We interleave activity indicators (skill sub-agent tool calls) and + // optionally inject CitationBlocks after assistant responses that + // followed tool calls. return ( {({ messageElements }) => { - if (!citationsHistory.length) { - // Check if there are activity messages to render - const hasActivity = messages.some( - (msg: { role: string }) => msg.role === "activity", - ); - if (!hasActivity) { - return ( - <> - {messageElements} - {cursor} - - ); - } - - // Interleave activity indicators with CopilotKit elements - const result: React.ReactNode[] = []; - let eIdx = 0; - for (const msg of messages) { - if ( - msg.role === "activity" && - msg.activityType === "skill_tool_call" - ) { - const toolCallId = msg.content?.tool_call_id; - result.push( - , - ); - continue; - } - if (msg.role === "activity") continue; - if (msg.role !== "user" && msg.role !== "assistant") continue; - if (eIdx < messageElements.length) { - result.push(messageElements[eIdx]); - eIdx++; - } - } - while (eIdx < messageElements.length) { - result.push(messageElements[eIdx]); - eIdx++; - } - return ( - <> - {result} - {cursor} - - ); - } - - // CopilotChatMessageView renders one element per user/assistant - // message (tool messages produce nothing). We correlate elements with - // messages to inject CitationBlocks after the right assistant responses. - // Activity messages (skill sub-agent tool calls) are rendered by us - // directly, not by CopilotKit. - // - // Both search and ask tools append to citations via qa_history, - // so after each assistant text response that followed tool calls, - // we inject the next citations entry. const result: React.ReactNode[] = []; + let elemIdx = 0; let citIdx = 0; let seenToolCalls = false; - let elemIdx = 0; for (const msg of messages) { if (msg.role === "user") { @@ -405,24 +347,20 @@ function MessageViewWithCitations({ if (msg.role === "activity") { if (msg.activityType === "skill_tool_call") { const toolCallId = msg.content?.tool_call_id; - const isComplete = toolCallId - ? completedToolCallIds.has(toolCallId) - : false; result.push( , ); } - // Skip skill_tool_result — completion is shown - // on the corresponding skill_tool_call indicator continue; } - const isRendered = msg.role === "user" || msg.role === "assistant"; - if (!isRendered) continue; + if (msg.role !== "user" && msg.role !== "assistant") continue; if (elemIdx < messageElements.length) { result.push(messageElements[elemIdx]); From a0025e920346da5f6ced8eae9d5a33ccbf1b4512 Mon Sep 17 00:00:00 2001 From: Yiorgis Gozadinos Date: Fri, 13 Mar 2026 12:49:26 +0200 Subject: [PATCH 4/6] Fix ty --- CHANGELOG.md | 5 +++++ evaluations/tests/test_optimization.py | 12 ++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d73e14da..69f2ba11 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,14 @@ # Changelog ## [Unreleased] +### Added + +- **Activity events**: TUI and web frontend now display skill sub-agent tool calls via `ActivitySnapshotEvent` + ### Changed - **RLM sandbox**: Bumped pydantic-monty to 0.0.8. Removed `regex_*` external functions — the sandbox now has native `re` and `math` modules via `import`. Also adds `filter()` and `getattr()` builtins. +- **Frontend deps**: Upgraded CopilotKit to 1.54.0 and @ag-ui/client to 0.0.47 ## [0.33.3] - 2026-03-12 diff --git a/evaluations/tests/test_optimization.py b/evaluations/tests/test_optimization.py index 16e65605..cf04ffc1 100644 --- a/evaluations/tests/test_optimization.py +++ b/evaluations/tests/test_optimization.py @@ -287,10 +287,10 @@ class TestRunOptimization: return DatasetSpec( key="test", db_filename="test.lancedb", - document_loader=lambda: None, # type: ignore[return-value] + document_loader=lambda: None, document_mapper=lambda doc: None, - qa_loader=lambda: None, # type: ignore[return-value] - qa_case_builder=lambda idx, doc: None, # type: ignore[return-value] + qa_loader=lambda: None, + qa_case_builder=lambda idx, doc: None, system_prompt="You are a test assistant.", ) @@ -348,10 +348,10 @@ class TestRunOptimization: spec = DatasetSpec( key="test", db_filename="test.lancedb", - document_loader=lambda: None, # type: ignore[return-value] + document_loader=lambda: None, document_mapper=lambda doc: None, - qa_loader=lambda: None, # type: ignore[return-value] - qa_case_builder=lambda idx, doc: None, # type: ignore[return-value] + qa_loader=lambda: None, + qa_case_builder=lambda idx, doc: None, ) cases = _make_cases(4) From 6548f1f0aaa387b7d539330ded9e3e9dcc1a58c9 Mon Sep 17 00:00:00 2001 From: Yiorgis Gozadinos Date: Fri, 13 Mar 2026 13:12:55 +0200 Subject: [PATCH 5/6] Update haiku.skills to 0.8.0 --- app/backend/pyproject.toml | 2 +- haiku_rag_slim/pyproject.toml | 2 +- uv.lock | 18 ++++++++++-------- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/app/backend/pyproject.toml b/app/backend/pyproject.toml index c2a860a5..fb2369c2 100644 --- a/app/backend/pyproject.toml +++ b/app/backend/pyproject.toml @@ -8,7 +8,7 @@ dependencies = [ "uvicorn[standard]>=0.40.0", "pydantic-ai-slim[ag-ui,anthropic,openai]>=1.46.0", "python-dotenv>=1.2.1", - "haiku.rag-slim>=0.26.9", + "haiku.rag-slim>=0.33.2", "logfire[pydantic-ai]>=3.17.0", ] diff --git a/haiku_rag_slim/pyproject.toml b/haiku_rag_slim/pyproject.toml index 938ffa45..6aeb2ee5 100644 --- a/haiku_rag_slim/pyproject.toml +++ b/haiku_rag_slim/pyproject.toml @@ -24,7 +24,7 @@ classifiers = [ dependencies = [ "cachetools>=7.0.2", "docling-core>=2.67.1", - "haiku.skills>=0.7.0", + "haiku.skills>=0.8.0", "httpx>=0.28.1", "jsonpatch>=1.33", "lancedb==0.29.2", diff --git a/uv.lock b/uv.lock index dc975744..667f6c4e 100644 --- a/uv.lock +++ b/uv.lock @@ -34,14 +34,14 @@ wheels = [ [[package]] name = "ag-ui-protocol" -version = "0.1.11" +version = "0.1.13" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pydantic" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a2/c1/33ab11dc829c6c28d0d346988b2f394aa632d3ad63d1d2eb5f16eccd769b/ag_ui_protocol-0.1.11.tar.gz", hash = "sha256:b336dfebb5751e9cc2c676a3008a4bce4819004e6f6f8cba73169823564472ae", size = 6249, upload-time = "2026-02-11T12:41:36.085Z" } +sdist = { url = "https://files.pythonhosted.org/packages/04/b5/fc0b65b561d00d88811c8a7d98ee735833f81554be244340950e7b65820c/ag_ui_protocol-0.1.13.tar.gz", hash = "sha256:811d7d7dcce4783dec252918f40b717ebfa559399bf6b071c4ba47c0c1e21bcb", size = 5671, upload-time = "2026-02-19T18:40:38.602Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/14/83/5c6f4cb24d27d9cbe0c31ba2f3b4d1ff42bc6f87ba9facfa9e9d44046c6b/ag_ui_protocol-0.1.11-py3-none-any.whl", hash = "sha256:b0cc25570462a8eba8e57a098e0a2d6892a1f571a7bea7da2d4b60efd5d66789", size = 8392, upload-time = "2026-02-11T12:41:35.303Z" }, + { url = "https://files.pythonhosted.org/packages/cd/9f/b833c1ab1999da35ebad54841ae85d2c2764c931da9a6f52d8541b6901b2/ag_ui_protocol-0.1.13-py3-none-any.whl", hash = "sha256:1393fa894c1e8416efe184168a50689e760d05b32f4646eebb8ff423dddf8e8f", size = 8053, upload-time = "2026-02-19T18:40:37.27Z" }, ] [[package]] @@ -1513,7 +1513,7 @@ requires-dist = [ { name = "cohere", marker = "extra == 'cohere'", specifier = ">=5.20.7" }, { name = "docling", marker = "extra == 'docling'", specifier = ">=2.76.0" }, { name = "docling-core", specifier = ">=2.67.1" }, - { name = "haiku-skills", specifier = ">=0.7.0" }, + { name = "haiku-skills", specifier = ">=0.8.0" }, { name = "httpx", specifier = ">=0.28.1" }, { name = "jsonpatch", specifier = ">=1.33" }, { name = "lancedb", specifier = "==0.29.2" }, @@ -1545,17 +1545,19 @@ provides-extras = ["docling", "voyageai", "mxbai", "cohere", "zeroentropy", "jin [[package]] name = "haiku-skills" -version = "0.7.0" +version = "0.8.0" source = { registry = "https://pypi.org/simple" } dependencies = [ + { name = "ag-ui-protocol" }, + { name = "jsonpatch" }, { name = "pydantic" }, - { name = "pydantic-ai-slim", extra = ["mcp"] }, + { name = "pydantic-ai-slim", extra = ["mcp", "openai"] }, { name = "pyyaml" }, { name = "skills-ref" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/8c/a6/4fbdfe95e6ff6a574088b9f3ed7543a6e01b4b6c1740440ce07c1cf4893a/haiku_skills-0.7.0.tar.gz", hash = "sha256:ec5c5176f8feab09cc6aa4cda9a64e2446074f3ed111cb7e2587f7b524711364", size = 133420, upload-time = "2026-03-04T09:25:52.729Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9c/b0/ea75df7841f0a3ac807f741b6498b22273549838a374c2f11c1c363bac1e/haiku_skills-0.8.0.tar.gz", hash = "sha256:e582b37fa05a8e5cf06c5764248b7d1fd26e258510d9ba8e8a462d66249fcd39", size = 136349, upload-time = "2026-03-13T11:07:00.899Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d3/38/5048252c0b68bc77dd0fcf6b5c4e29074d90b3f6888eb282a0fcae967227/haiku_skills-0.7.0-py3-none-any.whl", hash = "sha256:7b7791890cc230fd53c5a9a7d93129e7901fecc1d64153d0386a83603e5b7b25", size = 25022, upload-time = "2026-03-04T09:25:51.872Z" }, + { url = "https://files.pythonhosted.org/packages/41/cf/8f5ddea650f06d0ced329b6d503b411fd275af41fc514b0402db36ef950f/haiku_skills-0.8.0-py3-none-any.whl", hash = "sha256:85efc8cbf29f78fb43a0538434f66413e3de6ac3a9b531bc1b7dcf440c99536b", size = 25684, upload-time = "2026-03-13T11:06:59.871Z" }, ] [[package]] From a90c8ca82224a79dd0ed670145509653bec64623 Mon Sep 17 00:00:00 2001 From: Yiorgis Gozadinos Date: Fri, 13 Mar 2026 13:13:15 +0200 Subject: [PATCH 6/6] Fix version bump script to also update the /app --- scripts/bump_version.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/bump_version.py b/scripts/bump_version.py index 7142457a..5c5a1e2e 100755 --- a/scripts/bump_version.py +++ b/scripts/bump_version.py @@ -44,9 +44,9 @@ def update_dependency_version(file_path: Path, new_version: str) -> None: def update_example_dependencies(file_path: Path, new_version: str) -> None: """Update haiku.rag and haiku.rag-slim dependency versions in example pyproject.toml files.""" content = file_path.read_text() - # Update haiku.rag-slim[...] >= X.Y.Z + # Update haiku.rag-slim (with or without extras) >= X.Y.Z updated = re.sub( - r"(haiku\.rag-slim\[.*?\])>=[0-9.]+", rf"\1>={new_version}", content + r"(haiku\.rag-slim(?:\[.*?\])?)>=[0-9.]+", rf"\1>={new_version}", content ) # Update haiku.rag >= X.Y.Z updated = re.sub(r"(haiku\.rag)>=[0-9.]+", rf"\1>={new_version}", updated)