@copilotkit/react-core 1.57.0 → 1.57.1-canary.1778272612

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.
Files changed (86) hide show
  1. package/dist/{copilotkit-CPe2-340.mjs → copilotkit-3XTEoVQO.mjs} +1367 -1200
  2. package/dist/copilotkit-3XTEoVQO.mjs.map +1 -0
  3. package/dist/{copilotkit-DFaI4j2r.d.mts → copilotkit-BCJ2yvV6.d.mts} +68 -8
  4. package/dist/copilotkit-BCJ2yvV6.d.mts.map +1 -0
  5. package/dist/{copilotkit-Dg4r4Gi_.d.cts → copilotkit-CBbSvze0.d.cts} +68 -8
  6. package/dist/copilotkit-CBbSvze0.d.cts.map +1 -0
  7. package/dist/{copilotkit-DGbvw8n2.cjs → copilotkit-Dnj9pi4m.cjs} +1369 -1196
  8. package/dist/copilotkit-Dnj9pi4m.cjs.map +1 -0
  9. package/dist/index.cjs +2 -5
  10. package/dist/index.cjs.map +1 -1
  11. package/dist/index.d.cts +1 -1
  12. package/dist/index.d.mts +1 -1
  13. package/dist/index.mjs +2 -5
  14. package/dist/index.mjs.map +1 -1
  15. package/dist/index.umd.js +733 -610
  16. package/dist/index.umd.js.map +1 -1
  17. package/dist/v2/context.cjs +135 -0
  18. package/dist/v2/context.cjs.map +1 -0
  19. package/dist/v2/context.d.cts +148 -0
  20. package/dist/v2/context.d.cts.map +1 -0
  21. package/dist/v2/context.d.mts +148 -0
  22. package/dist/v2/context.d.mts.map +1 -0
  23. package/dist/v2/context.mjs +129 -0
  24. package/dist/v2/context.mjs.map +1 -0
  25. package/dist/v2/headless.cjs +1043 -0
  26. package/dist/v2/headless.cjs.map +1 -0
  27. package/dist/v2/headless.d.cts +605 -0
  28. package/dist/v2/headless.d.cts.map +1 -0
  29. package/dist/v2/headless.d.mts +512 -0
  30. package/dist/v2/headless.d.mts.map +1 -0
  31. package/dist/v2/headless.mjs +997 -0
  32. package/dist/v2/headless.mjs.map +1 -0
  33. package/dist/v2/index.cjs +2 -1
  34. package/dist/v2/index.css +1 -1
  35. package/dist/v2/index.d.cts +2 -2
  36. package/dist/v2/index.d.mts +2 -2
  37. package/dist/v2/index.mjs +2 -2
  38. package/dist/v2/index.umd.js +1385 -1204
  39. package/dist/v2/index.umd.js.map +1 -1
  40. package/package.json +14 -6
  41. package/src/hooks/__tests__/use-copilot-chat-internal-connect.test.tsx +5 -6
  42. package/src/hooks/use-copilot-chat_internal.ts +0 -1
  43. package/src/v2/components/chat/CopilotChat.tsx +2 -1
  44. package/src/v2/components/chat/CopilotChatMessageView.tsx +24 -9
  45. package/src/v2/components/chat/CopilotChatView.tsx +2 -2
  46. package/src/v2/components/chat/CopilotSidebar.tsx +5 -1
  47. package/src/v2/components/chat/CopilotSidebarView.tsx +24 -10
  48. package/src/v2/components/chat/__tests__/CopilotChat.welcomeGate.test.tsx +1 -3
  49. package/src/v2/components/chat/__tests__/CopilotChatActivityRendering.e2e.test.tsx +29 -25
  50. package/src/v2/components/chat/__tests__/CopilotSidebarView.position.test.tsx +159 -0
  51. package/src/v2/components/chat/__tests__/MCPAppsUiMessage.e2e.test.tsx +5 -60
  52. package/src/v2/components/index.ts +1 -0
  53. package/src/v2/components/intelligence-indicator/IntelligenceIndicator.tsx +286 -0
  54. package/src/v2/components/intelligence-indicator/__tests__/IntelligenceIndicator.e2e.test.tsx +464 -0
  55. package/src/v2/components/intelligence-indicator/index.ts +2 -0
  56. package/src/v2/context.ts +62 -0
  57. package/src/v2/headless.ts +42 -0
  58. package/src/v2/hooks/__tests__/standard-schema.test.tsx +2 -2
  59. package/src/v2/hooks/__tests__/use-agent-context.test.tsx +3 -3
  60. package/src/v2/hooks/__tests__/use-agent-stability.test.tsx +3 -3
  61. package/src/v2/hooks/__tests__/use-agent-throttle.test.tsx +85 -85
  62. package/src/v2/hooks/__tests__/use-interrupt.test.tsx +2 -2
  63. package/src/v2/hooks/__tests__/use-render-tool.test.tsx +2 -2
  64. package/src/v2/hooks/__tests__/use-threads.test.tsx +2 -2
  65. package/src/v2/hooks/__tests__/zod-regression.test.tsx +2 -2
  66. package/src/v2/hooks/use-agent-context.tsx +1 -1
  67. package/src/v2/hooks/use-agent.tsx +9 -118
  68. package/src/v2/hooks/use-configure-suggestions.tsx +1 -1
  69. package/src/v2/hooks/use-default-render-tool.tsx +18 -1
  70. package/src/v2/hooks/use-frontend-tool.tsx +2 -2
  71. package/src/v2/hooks/use-human-in-the-loop.tsx +1 -1
  72. package/src/v2/hooks/use-interrupt.tsx +1 -1
  73. package/src/v2/hooks/use-render-activity-message.tsx +3 -11
  74. package/src/v2/hooks/use-render-custom-messages.tsx +1 -6
  75. package/src/v2/hooks/use-render-tool-call.tsx +36 -6
  76. package/src/v2/hooks/use-render-tool.tsx +2 -2
  77. package/src/v2/hooks/use-suggestions.tsx +1 -1
  78. package/src/v2/hooks/use-threads.tsx +1 -1
  79. package/src/v2/providers/CopilotKitProvider.tsx +19 -59
  80. package/src/v2/styles/globals.css +118 -0
  81. package/tsdown.config.ts +75 -0
  82. package/dist/copilotkit-CPe2-340.mjs.map +0 -1
  83. package/dist/copilotkit-DFaI4j2r.d.mts.map +0 -1
  84. package/dist/copilotkit-DGbvw8n2.cjs.map +0 -1
  85. package/dist/copilotkit-Dg4r4Gi_.d.cts.map +0 -1
  86. package/src/v2/hooks/__tests__/use-agent-thread-isolation.test.tsx +0 -333
@@ -0,0 +1,135 @@
1
+ "use client";
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+ let react = require("react");
5
+ let _copilotkit_core = require("@copilotkit/core");
6
+
7
+ //#region src/v2/lib/react-core.ts
8
+ var CopilotKitCoreReact = class extends _copilotkit_core.CopilotKitCore {
9
+ constructor(config) {
10
+ super(config);
11
+ this._renderToolCalls = [];
12
+ this._hookRenderToolCalls = /* @__PURE__ */ new Map();
13
+ this._cachedMergedRenderToolCalls = null;
14
+ this._renderCustomMessages = [];
15
+ this._renderActivityMessages = [];
16
+ this._interruptElement = null;
17
+ this._renderToolCalls = config.renderToolCalls ?? [];
18
+ this._renderCustomMessages = config.renderCustomMessages ?? [];
19
+ this._renderActivityMessages = config.renderActivityMessages ?? [];
20
+ }
21
+ get renderCustomMessages() {
22
+ return this._renderCustomMessages;
23
+ }
24
+ get renderActivityMessages() {
25
+ return this._renderActivityMessages;
26
+ }
27
+ get renderToolCalls() {
28
+ if (this._hookRenderToolCalls.size === 0) return this._renderToolCalls;
29
+ if (this._cachedMergedRenderToolCalls) return this._cachedMergedRenderToolCalls;
30
+ const merged = /* @__PURE__ */ new Map();
31
+ for (const rc of this._renderToolCalls) merged.set(`${rc.agentId ?? ""}:${rc.name}`, rc);
32
+ for (const [key, rc] of this._hookRenderToolCalls) merged.set(key, rc);
33
+ this._cachedMergedRenderToolCalls = Array.from(merged.values());
34
+ return this._cachedMergedRenderToolCalls;
35
+ }
36
+ setRenderActivityMessages(renderers) {
37
+ this._renderActivityMessages = renderers;
38
+ }
39
+ setRenderCustomMessages(renderers) {
40
+ this._renderCustomMessages = renderers;
41
+ }
42
+ setRenderToolCalls(renderToolCalls) {
43
+ this._renderToolCalls = renderToolCalls;
44
+ this._cachedMergedRenderToolCalls = null;
45
+ this._notifyRenderToolCallsChanged();
46
+ }
47
+ addHookRenderToolCall(entry) {
48
+ const key = `${entry.agentId ?? ""}:${entry.name}`;
49
+ this._hookRenderToolCalls.set(key, entry);
50
+ this._cachedMergedRenderToolCalls = null;
51
+ this._notifyRenderToolCallsChanged();
52
+ }
53
+ removeHookRenderToolCall(name, agentId) {
54
+ const key = `${agentId ?? ""}:${name}`;
55
+ if (this._hookRenderToolCalls.delete(key)) {
56
+ this._cachedMergedRenderToolCalls = null;
57
+ this._notifyRenderToolCallsChanged();
58
+ }
59
+ }
60
+ _notifyRenderToolCallsChanged() {
61
+ this.notifySubscribers((subscriber) => {
62
+ const reactSubscriber = subscriber;
63
+ if (reactSubscriber.onRenderToolCallsChanged) reactSubscriber.onRenderToolCallsChanged({
64
+ copilotkit: this,
65
+ renderToolCalls: this.renderToolCalls
66
+ });
67
+ }, "Subscriber onRenderToolCallsChanged error:");
68
+ }
69
+ get interruptElement() {
70
+ return this._interruptElement;
71
+ }
72
+ setInterruptElement(element) {
73
+ this._interruptElement = element;
74
+ this.notifySubscribers((subscriber) => {
75
+ subscriber.onInterruptElementChanged?.({
76
+ copilotkit: this,
77
+ interruptElement: this._interruptElement
78
+ });
79
+ }, "Subscriber onInterruptElementChanged error:");
80
+ }
81
+ subscribe(subscriber) {
82
+ return super.subscribe(subscriber);
83
+ }
84
+ /**
85
+ * Wait for pending React state updates before the follow-up agent run.
86
+ *
87
+ * When a frontend tool handler calls setState(), React 18 batches the update
88
+ * and schedules a commit via its internal scheduler (MessageChannel). The
89
+ * useAgentContext hook registers context via useLayoutEffect, which runs
90
+ * synchronously after React commits that batch.
91
+ *
92
+ * Awaiting a zero-delay timeout yields to the macrotask queue. React's
93
+ * MessageChannel task runs first, committing the pending state and running
94
+ * useLayoutEffect (which updates the context store). The follow-up runAgent
95
+ * call then reads fresh context.
96
+ */
97
+ async waitForPendingFrameworkUpdates() {
98
+ await new Promise((resolve) => setTimeout(resolve, 0));
99
+ }
100
+ };
101
+
102
+ //#endregion
103
+ //#region src/v2/context.ts
104
+ const EMPTY_SET = /* @__PURE__ */ new Set();
105
+ const CopilotKitContext = (0, react.createContext)(null);
106
+ const useCopilotKit = () => {
107
+ const context = (0, react.useContext)(CopilotKitContext);
108
+ const [, forceUpdate] = (0, react.useReducer)((x) => x + 1, 0);
109
+ if (!context) throw new Error("useCopilotKit must be used within CopilotKitProvider");
110
+ (0, react.useEffect)(() => {
111
+ const subscription = context.copilotkit.subscribe({ onRuntimeConnectionStatusChanged: () => {
112
+ forceUpdate();
113
+ } });
114
+ return () => {
115
+ subscription.unsubscribe();
116
+ };
117
+ }, []);
118
+ return context;
119
+ };
120
+ const LicenseContext = (0, react.createContext)({
121
+ status: null,
122
+ license: null,
123
+ checkFeature: () => true,
124
+ getLimit: () => null
125
+ });
126
+ const useLicenseContext = () => (0, react.useContext)(LicenseContext);
127
+
128
+ //#endregion
129
+ exports.CopilotKitContext = CopilotKitContext;
130
+ exports.CopilotKitCoreReact = CopilotKitCoreReact;
131
+ exports.EMPTY_SET = EMPTY_SET;
132
+ exports.LicenseContext = LicenseContext;
133
+ exports.useCopilotKit = useCopilotKit;
134
+ exports.useLicenseContext = useLicenseContext;
135
+ //# sourceMappingURL=context.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.cjs","names":["CopilotKitCore"],"sources":["../../src/v2/lib/react-core.ts","../../src/v2/context.ts"],"sourcesContent":["import React from \"react\";\nimport { ReactActivityMessageRenderer, ReactToolCallRenderer } from \"../types\";\nimport { ReactCustomMessageRenderer } from \"../types/react-custom-message-renderer\";\nimport {\n CopilotKitCore,\n type CopilotKitCoreConfig,\n type CopilotKitCoreSubscriber,\n type CopilotKitCoreSubscription,\n} from \"@copilotkit/core\";\n\nexport interface CopilotKitCoreReactConfig extends CopilotKitCoreConfig {\n // Add any additional configuration properties specific to the React implementation\n renderToolCalls?: ReactToolCallRenderer<any>[];\n renderActivityMessages?: ReactActivityMessageRenderer<any>[];\n\n // Add custom message renderers\n renderCustomMessages?: ReactCustomMessageRenderer[];\n}\n\nexport interface CopilotKitCoreReactSubscriber extends CopilotKitCoreSubscriber {\n onRenderToolCallsChanged?: (event: {\n copilotkit: CopilotKitCore;\n renderToolCalls: ReactToolCallRenderer<any>[];\n }) => void | Promise<void>;\n onInterruptElementChanged?: (event: {\n copilotkit: CopilotKitCore;\n interruptElement: React.ReactElement | null;\n }) => void | Promise<void>;\n}\n\nexport class CopilotKitCoreReact extends CopilotKitCore {\n private _renderToolCalls: ReactToolCallRenderer<any>[] = [];\n private _hookRenderToolCalls: Map<string, ReactToolCallRenderer<any>> =\n new Map();\n private _cachedMergedRenderToolCalls: ReactToolCallRenderer<any>[] | null =\n null;\n private _renderCustomMessages: ReactCustomMessageRenderer[] = [];\n private _renderActivityMessages: ReactActivityMessageRenderer<any>[] = [];\n private _interruptElement: React.ReactElement | null = null;\n\n constructor(config: CopilotKitCoreReactConfig) {\n super(config);\n this._renderToolCalls = config.renderToolCalls ?? [];\n this._renderCustomMessages = config.renderCustomMessages ?? [];\n this._renderActivityMessages = config.renderActivityMessages ?? [];\n }\n\n get renderCustomMessages(): Readonly<ReactCustomMessageRenderer[]> {\n return this._renderCustomMessages;\n }\n\n get renderActivityMessages(): Readonly<ReactActivityMessageRenderer<any>>[] {\n return this._renderActivityMessages;\n }\n\n get renderToolCalls(): Readonly<ReactToolCallRenderer<any>>[] {\n if (this._hookRenderToolCalls.size === 0) {\n return this._renderToolCalls;\n }\n if (this._cachedMergedRenderToolCalls) {\n return this._cachedMergedRenderToolCalls;\n }\n // Merge: hook entries override prop entries with the same key\n const merged = new Map<string, ReactToolCallRenderer<any>>();\n for (const rc of this._renderToolCalls) {\n merged.set(`${rc.agentId ?? \"\"}:${rc.name}`, rc);\n }\n for (const [key, rc] of this._hookRenderToolCalls) {\n merged.set(key, rc);\n }\n this._cachedMergedRenderToolCalls = Array.from(merged.values());\n return this._cachedMergedRenderToolCalls;\n }\n\n setRenderActivityMessages(\n renderers: ReactActivityMessageRenderer<any>[],\n ): void {\n this._renderActivityMessages = renderers;\n }\n\n setRenderCustomMessages(renderers: ReactCustomMessageRenderer[]): void {\n this._renderCustomMessages = renderers;\n }\n\n setRenderToolCalls(renderToolCalls: ReactToolCallRenderer<any>[]): void {\n this._renderToolCalls = renderToolCalls;\n this._cachedMergedRenderToolCalls = null;\n this._notifyRenderToolCallsChanged();\n }\n\n addHookRenderToolCall(entry: ReactToolCallRenderer<any>): void {\n const key = `${entry.agentId ?? \"\"}:${entry.name}`;\n this._hookRenderToolCalls.set(key, entry);\n this._cachedMergedRenderToolCalls = null;\n this._notifyRenderToolCallsChanged();\n }\n\n removeHookRenderToolCall(name: string, agentId?: string): void {\n const key = `${agentId ?? \"\"}:${name}`;\n if (this._hookRenderToolCalls.delete(key)) {\n this._cachedMergedRenderToolCalls = null;\n this._notifyRenderToolCallsChanged();\n }\n }\n\n private _notifyRenderToolCallsChanged(): void {\n void this.notifySubscribers((subscriber) => {\n const reactSubscriber = subscriber as CopilotKitCoreReactSubscriber;\n if (reactSubscriber.onRenderToolCallsChanged) {\n reactSubscriber.onRenderToolCallsChanged({\n copilotkit: this,\n renderToolCalls: this.renderToolCalls,\n });\n }\n }, \"Subscriber onRenderToolCallsChanged error:\");\n }\n\n get interruptElement(): React.ReactElement | null {\n return this._interruptElement;\n }\n\n setInterruptElement(element: React.ReactElement | null): void {\n this._interruptElement = element;\n void this.notifySubscribers((subscriber) => {\n const reactSubscriber = subscriber as CopilotKitCoreReactSubscriber;\n reactSubscriber.onInterruptElementChanged?.({\n copilotkit: this,\n interruptElement: this._interruptElement,\n });\n }, \"Subscriber onInterruptElementChanged error:\");\n }\n\n // Override to accept React-specific subscriber type\n subscribe(\n subscriber: CopilotKitCoreReactSubscriber,\n ): CopilotKitCoreSubscription {\n return super.subscribe(subscriber);\n }\n\n /**\n * Wait for pending React state updates before the follow-up agent run.\n *\n * When a frontend tool handler calls setState(), React 18 batches the update\n * and schedules a commit via its internal scheduler (MessageChannel). The\n * useAgentContext hook registers context via useLayoutEffect, which runs\n * synchronously after React commits that batch.\n *\n * Awaiting a zero-delay timeout yields to the macrotask queue. React's\n * MessageChannel task runs first, committing the pending state and running\n * useLayoutEffect (which updates the context store). The follow-up runAgent\n * call then reads fresh context.\n */\n async waitForPendingFrameworkUpdates(): Promise<void> {\n await new Promise<void>((resolve) => setTimeout(resolve, 0));\n }\n}\n","\"use client\";\n\nimport { createContext, useContext, useEffect, useReducer } from \"react\";\nimport { CopilotKitCoreReact } from \"./lib/react-core\";\nimport type { CopilotKitCoreReactConfig } from \"./lib/react-core\";\nimport type { LicenseContextValue } from \"@copilotkit/shared\";\n\n// Re-export so headless.ts (and consumers) reference the same type declaration.\nexport { CopilotKitCoreReact };\nexport type { CopilotKitCoreReactConfig };\n\nexport interface CopilotKitContextValue {\n copilotkit: CopilotKitCoreReact;\n /**\n * Set of tool call IDs currently being executed.\n * This is tracked at the provider level to ensure tool execution events\n * are captured even before child components mount.\n */\n executingToolCallIds: ReadonlySet<string>;\n}\n\nexport const EMPTY_SET: ReadonlySet<string> = new Set();\n\nexport const CopilotKitContext = createContext<CopilotKitContextValue | null>(\n null,\n);\n\nexport const useCopilotKit = (): CopilotKitContextValue => {\n const context = useContext(CopilotKitContext);\n const [, forceUpdate] = useReducer((x: number) => x + 1, 0);\n\n if (!context) {\n throw new Error(\"useCopilotKit must be used within CopilotKitProvider\");\n }\n useEffect(() => {\n const subscription = context.copilotkit.subscribe({\n onRuntimeConnectionStatusChanged: () => {\n forceUpdate();\n },\n });\n return () => {\n subscription.unsubscribe();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return context;\n};\n\n// License context — shared between web and RN providers.\n// Default is permissive (all features allowed) — providers override via createLicenseContextValue.\n// Inlined here to avoid a runtime import from @copilotkit/shared, which pulls in\n// Node-only deps (jose) that break React Native's Metro bundler.\nexport const LicenseContext = createContext<LicenseContextValue>({\n status: null,\n license: null,\n checkFeature: () => true,\n getLimit: () => null,\n} as LicenseContextValue);\n\nexport const useLicenseContext = (): LicenseContextValue =>\n useContext(LicenseContext);\n"],"mappings":";;;;;;;AA8BA,IAAa,sBAAb,cAAyCA,gCAAe;CAUtD,YAAY,QAAmC;AAC7C,QAAM,OAAO;0BAV0C,EAAE;8CAEzD,IAAI,KAAK;sCAET;+BAC4D,EAAE;iCACO,EAAE;2BAClB;AAIrD,OAAK,mBAAmB,OAAO,mBAAmB,EAAE;AACpD,OAAK,wBAAwB,OAAO,wBAAwB,EAAE;AAC9D,OAAK,0BAA0B,OAAO,0BAA0B,EAAE;;CAGpE,IAAI,uBAA+D;AACjE,SAAO,KAAK;;CAGd,IAAI,yBAAwE;AAC1E,SAAO,KAAK;;CAGd,IAAI,kBAA0D;AAC5D,MAAI,KAAK,qBAAqB,SAAS,EACrC,QAAO,KAAK;AAEd,MAAI,KAAK,6BACP,QAAO,KAAK;EAGd,MAAM,yBAAS,IAAI,KAAyC;AAC5D,OAAK,MAAM,MAAM,KAAK,iBACpB,QAAO,IAAI,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,QAAQ,GAAG;AAElD,OAAK,MAAM,CAAC,KAAK,OAAO,KAAK,qBAC3B,QAAO,IAAI,KAAK,GAAG;AAErB,OAAK,+BAA+B,MAAM,KAAK,OAAO,QAAQ,CAAC;AAC/D,SAAO,KAAK;;CAGd,0BACE,WACM;AACN,OAAK,0BAA0B;;CAGjC,wBAAwB,WAA+C;AACrE,OAAK,wBAAwB;;CAG/B,mBAAmB,iBAAqD;AACtE,OAAK,mBAAmB;AACxB,OAAK,+BAA+B;AACpC,OAAK,+BAA+B;;CAGtC,sBAAsB,OAAyC;EAC7D,MAAM,MAAM,GAAG,MAAM,WAAW,GAAG,GAAG,MAAM;AAC5C,OAAK,qBAAqB,IAAI,KAAK,MAAM;AACzC,OAAK,+BAA+B;AACpC,OAAK,+BAA+B;;CAGtC,yBAAyB,MAAc,SAAwB;EAC7D,MAAM,MAAM,GAAG,WAAW,GAAG,GAAG;AAChC,MAAI,KAAK,qBAAqB,OAAO,IAAI,EAAE;AACzC,QAAK,+BAA+B;AACpC,QAAK,+BAA+B;;;CAIxC,AAAQ,gCAAsC;AAC5C,EAAK,KAAK,mBAAmB,eAAe;GAC1C,MAAM,kBAAkB;AACxB,OAAI,gBAAgB,yBAClB,iBAAgB,yBAAyB;IACvC,YAAY;IACZ,iBAAiB,KAAK;IACvB,CAAC;KAEH,6CAA6C;;CAGlD,IAAI,mBAA8C;AAChD,SAAO,KAAK;;CAGd,oBAAoB,SAA0C;AAC5D,OAAK,oBAAoB;AACzB,EAAK,KAAK,mBAAmB,eAAe;AAE1C,GADwB,WACR,4BAA4B;IAC1C,YAAY;IACZ,kBAAkB,KAAK;IACxB,CAAC;KACD,8CAA8C;;CAInD,UACE,YAC4B;AAC5B,SAAO,MAAM,UAAU,WAAW;;;;;;;;;;;;;;;CAgBpC,MAAM,iCAAgD;AACpD,QAAM,IAAI,SAAe,YAAY,WAAW,SAAS,EAAE,CAAC;;;;;;ACpIhE,MAAa,4BAAiC,IAAI,KAAK;AAEvD,MAAa,6CACX,KACD;AAED,MAAa,sBAA8C;CACzD,MAAM,gCAAqB,kBAAkB;CAC7C,MAAM,GAAG,sCAA2B,MAAc,IAAI,GAAG,EAAE;AAE3D,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,uDAAuD;AAEzE,4BAAgB;EACd,MAAM,eAAe,QAAQ,WAAW,UAAU,EAChD,wCAAwC;AACtC,gBAAa;KAEhB,CAAC;AACF,eAAa;AACX,gBAAa,aAAa;;IAG3B,EAAE,CAAC;AAEN,QAAO;;AAOT,MAAa,0CAAoD;CAC/D,QAAQ;CACR,SAAS;CACT,oBAAoB;CACpB,gBAAgB;CACjB,CAAwB;AAEzB,MAAa,gDACA,eAAe"}
@@ -0,0 +1,148 @@
1
+ import * as react from "react";
2
+ import React$1 from "react";
3
+ import { LicenseContextValue, StandardSchemaV1 } from "@copilotkit/shared";
4
+ import { CopilotKitCore, CopilotKitCoreConfig, CopilotKitCoreSubscriber, CopilotKitCoreSubscription, ToolCallStatus } from "@copilotkit/core";
5
+ import { ActivityMessage, Message } from "@ag-ui/core";
6
+ import { AbstractAgent } from "@ag-ui/client";
7
+
8
+ //#region src/v2/types/react-tool-call-renderer.d.ts
9
+ interface ReactToolCallRenderer<T = unknown> {
10
+ name: string;
11
+ args: StandardSchemaV1<any, T>;
12
+ /**
13
+ * Optional agent ID to constrain this tool renderer to a specific agent.
14
+ * If specified, this renderer will only be used for the specified agent.
15
+ */
16
+ agentId?: string;
17
+ render: React.ComponentType<{
18
+ name: string;
19
+ toolCallId: string;
20
+ args: Partial<T>;
21
+ status: ToolCallStatus.InProgress;
22
+ result: undefined;
23
+ } | {
24
+ name: string;
25
+ toolCallId: string;
26
+ args: T;
27
+ status: ToolCallStatus.Executing;
28
+ result: undefined;
29
+ } | {
30
+ name: string;
31
+ toolCallId: string;
32
+ args: T;
33
+ status: ToolCallStatus.Complete;
34
+ result: string;
35
+ }>;
36
+ }
37
+ //#endregion
38
+ //#region src/v2/types/react-activity-message-renderer.d.ts
39
+ interface ReactActivityMessageRenderer<TActivityContent> {
40
+ /**
41
+ * Activity type to match when rendering. Use "*" as a wildcard renderer.
42
+ */
43
+ activityType: string;
44
+ /**
45
+ * Optional agent ID to scope the renderer to a particular agent.
46
+ */
47
+ agentId?: string;
48
+ /**
49
+ * Schema describing the activity content payload.
50
+ */
51
+ content: StandardSchemaV1<any, TActivityContent>;
52
+ /**
53
+ * React component invoked to render the activity message.
54
+ */
55
+ render: React.ComponentType<{
56
+ activityType: string;
57
+ content: TActivityContent;
58
+ message: ActivityMessage;
59
+ agent: AbstractAgent | undefined;
60
+ }>;
61
+ }
62
+ //#endregion
63
+ //#region src/v2/types/react-custom-message-renderer.d.ts
64
+ type ReactCustomMessageRendererPosition = "before" | "after";
65
+ interface ReactCustomMessageRenderer {
66
+ agentId?: string;
67
+ render: React.ComponentType<{
68
+ message: Message;
69
+ position: ReactCustomMessageRendererPosition;
70
+ runId: string;
71
+ messageIndex: number;
72
+ messageIndexInRun: number;
73
+ numberOfMessagesInRun: number;
74
+ agentId: string;
75
+ stateSnapshot: any;
76
+ }> | null;
77
+ }
78
+ //#endregion
79
+ //#region src/v2/lib/react-core.d.ts
80
+ interface CopilotKitCoreReactConfig extends CopilotKitCoreConfig {
81
+ renderToolCalls?: ReactToolCallRenderer<any>[];
82
+ renderActivityMessages?: ReactActivityMessageRenderer<any>[];
83
+ renderCustomMessages?: ReactCustomMessageRenderer[];
84
+ }
85
+ interface CopilotKitCoreReactSubscriber extends CopilotKitCoreSubscriber {
86
+ onRenderToolCallsChanged?: (event: {
87
+ copilotkit: CopilotKitCore;
88
+ renderToolCalls: ReactToolCallRenderer<any>[];
89
+ }) => void | Promise<void>;
90
+ onInterruptElementChanged?: (event: {
91
+ copilotkit: CopilotKitCore;
92
+ interruptElement: React$1.ReactElement | null;
93
+ }) => void | Promise<void>;
94
+ }
95
+ declare class CopilotKitCoreReact extends CopilotKitCore {
96
+ private _renderToolCalls;
97
+ private _hookRenderToolCalls;
98
+ private _cachedMergedRenderToolCalls;
99
+ private _renderCustomMessages;
100
+ private _renderActivityMessages;
101
+ private _interruptElement;
102
+ constructor(config: CopilotKitCoreReactConfig);
103
+ get renderCustomMessages(): Readonly<ReactCustomMessageRenderer[]>;
104
+ get renderActivityMessages(): Readonly<ReactActivityMessageRenderer<any>>[];
105
+ get renderToolCalls(): Readonly<ReactToolCallRenderer<any>>[];
106
+ setRenderActivityMessages(renderers: ReactActivityMessageRenderer<any>[]): void;
107
+ setRenderCustomMessages(renderers: ReactCustomMessageRenderer[]): void;
108
+ setRenderToolCalls(renderToolCalls: ReactToolCallRenderer<any>[]): void;
109
+ addHookRenderToolCall(entry: ReactToolCallRenderer<any>): void;
110
+ removeHookRenderToolCall(name: string, agentId?: string): void;
111
+ private _notifyRenderToolCallsChanged;
112
+ get interruptElement(): React$1.ReactElement | null;
113
+ setInterruptElement(element: React$1.ReactElement | null): void;
114
+ subscribe(subscriber: CopilotKitCoreReactSubscriber): CopilotKitCoreSubscription;
115
+ /**
116
+ * Wait for pending React state updates before the follow-up agent run.
117
+ *
118
+ * When a frontend tool handler calls setState(), React 18 batches the update
119
+ * and schedules a commit via its internal scheduler (MessageChannel). The
120
+ * useAgentContext hook registers context via useLayoutEffect, which runs
121
+ * synchronously after React commits that batch.
122
+ *
123
+ * Awaiting a zero-delay timeout yields to the macrotask queue. React's
124
+ * MessageChannel task runs first, committing the pending state and running
125
+ * useLayoutEffect (which updates the context store). The follow-up runAgent
126
+ * call then reads fresh context.
127
+ */
128
+ waitForPendingFrameworkUpdates(): Promise<void>;
129
+ }
130
+ //#endregion
131
+ //#region src/v2/context.d.ts
132
+ interface CopilotKitContextValue {
133
+ copilotkit: CopilotKitCoreReact;
134
+ /**
135
+ * Set of tool call IDs currently being executed.
136
+ * This is tracked at the provider level to ensure tool execution events
137
+ * are captured even before child components mount.
138
+ */
139
+ executingToolCallIds: ReadonlySet<string>;
140
+ }
141
+ declare const EMPTY_SET: ReadonlySet<string>;
142
+ declare const CopilotKitContext: react.Context<CopilotKitContextValue | null>;
143
+ declare const useCopilotKit: () => CopilotKitContextValue;
144
+ declare const LicenseContext: react.Context<LicenseContextValue>;
145
+ declare const useLicenseContext: () => LicenseContextValue;
146
+ //#endregion
147
+ export { CopilotKitContext, CopilotKitContextValue, CopilotKitCoreReact, type CopilotKitCoreReactConfig, EMPTY_SET, LicenseContext, useCopilotKit, useLicenseContext };
148
+ //# sourceMappingURL=context.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.cts","names":[],"sources":["../../src/v2/types/react-tool-call-renderer.ts","../../src/v2/types/react-activity-message-renderer.ts","../../src/v2/types/react-custom-message-renderer.ts","../../src/v2/lib/react-core.ts","../../src/v2/context.ts"],"mappings":";;;;;;;;UAGiB,qBAAA;EACf,IAAA;EACA,IAAA,EAAM,gBAAA,MAAsB,CAAA;;;;AAF9B;EAOE,OAAA;EACA,MAAA,EAAQ,KAAA,CAAM,aAAA;IAER,IAAA;IACA,UAAA;IACA,IAAA,EAAM,OAAA,CAAQ,CAAA;IACd,MAAA,EAAQ,cAAA,CAAe,UAAA;IACvB,MAAA;EAAA;IAGA,IAAA;IACA,UAAA;IACA,IAAA,EAAM,CAAA;IACN,MAAA,EAAQ,cAAA,CAAe,SAAA;IACvB,MAAA;EAAA;IAGA,IAAA;IACA,UAAA;IACA,IAAA,EAAM,CAAA;IACN,MAAA,EAAQ,cAAA,CAAe,QAAA;IACvB,MAAA;EAAA;AAAA;;;UC3BS,4BAAA;;;;EAIf,YAAA;EDLe;;;ECSf,OAAA;EDPM;;;ECWN,OAAA,EAAS,gBAAA,MAAsB,gBAAA;EDMnB;;;ECFZ,MAAA,EAAQ,KAAA,CAAM,aAAA;IACZ,YAAA;IACA,OAAA,EAAS,gBAAA;IACT,OAAA,EAAS,eAAA;IACT,KAAA,EAAO,aAAA;EAAA;AAAA;;;KCtBC,kCAAA;AAAA,UAEK,0BAAA;EACf,OAAA;EACA,MAAA,EAAQ,KAAA,CAAM,aAAA;IACZ,OAAA,EAAS,OAAA;IACT,QAAA,EAAU,kCAAA;IACV,KAAA;IACA,YAAA;IACA,iBAAA;IACA,qBAAA;IACA,OAAA;IACA,aAAA;EAAA;AAAA;;;UCJa,yBAAA,SAAkC,oBAAA;EAEjD,eAAA,GAAkB,qBAAA;EAClB,sBAAA,GAAyB,4BAAA;EAGzB,oBAAA,GAAuB,0BAAA;AAAA;AAAA,UAGR,6BAAA,SAAsC,wBAAA;EACrD,wBAAA,IAA4B,KAAA;IAC1B,UAAA,EAAY,cAAA;IACZ,eAAA,EAAiB,qBAAA;EAAA,aACN,OAAA;EACb,yBAAA,IAA6B,KAAA;IAC3B,UAAA,EAAY,cAAA;IACZ,gBAAA,EAAkB,OAAA,CAAM,YAAA;EAAA,aACb,OAAA;AAAA;AAAA,cAGF,mBAAA,SAA4B,cAAA;EAAA,QAC/B,gBAAA;EAAA,QACA,oBAAA;EAAA,QAEA,4BAAA;EAAA,QAEA,qBAAA;EAAA,QACA,uBAAA;EAAA,QACA,iBAAA;cAEI,MAAA,EAAQ,yBAAA;EAAA,IAOhB,oBAAA,CAAA,GAAwB,QAAA,CAAS,0BAAA;EAAA,IAIjC,sBAAA,CAAA,GAA0B,QAAA,CAAS,4BAAA;EAAA,IAInC,eAAA,CAAA,GAAmB,QAAA,CAAS,qBAAA;EAmBhC,yBAAA,CACE,SAAA,EAAW,4BAAA;EAKb,uBAAA,CAAwB,SAAA,EAAW,0BAAA;EAInC,kBAAA,CAAmB,eAAA,EAAiB,qBAAA;EAMpC,qBAAA,CAAsB,KAAA,EAAO,qBAAA;EAO7B,wBAAA,CAAyB,IAAA,UAAc,OAAA;EAAA,QAQ/B,6BAAA;EAAA,IAYJ,gBAAA,CAAA,GAAoB,OAAA,CAAM,YAAA;EAI9B,mBAAA,CAAoB,OAAA,EAAS,OAAA,CAAM,YAAA;EAYnC,SAAA,CACE,UAAA,EAAY,6BAAA,GACX,0BAAA;EHvH0B;;;;;;;;;;;;;EGwIvB,8BAAA,CAAA,GAAkC,OAAA;AAAA;;;UC7IzB,sBAAA;EACf,UAAA,EAAY,mBAAA;;AJTd;;;;EIeE,oBAAA,EAAsB,WAAA;AAAA;AAAA,cAGX,SAAA,EAAW,WAAA;AAAA,cAEX,iBAAA,EAAiB,KAAA,CAAA,OAAA,CAAA,sBAAA;AAAA,cAIjB,aAAA,QAAoB,sBAAA;AAAA,cA0BpB,cAAA,EAAc,KAAA,CAAA,OAAA,CAAA,mBAAA;AAAA,cAOd,iBAAA,QAAwB,mBAAA"}
@@ -0,0 +1,148 @@
1
+ import * as react from "react";
2
+ import React$1 from "react";
3
+ import { CopilotKitCore, CopilotKitCoreConfig, CopilotKitCoreSubscriber, CopilotKitCoreSubscription, ToolCallStatus } from "@copilotkit/core";
4
+ import { LicenseContextValue, StandardSchemaV1 } from "@copilotkit/shared";
5
+ import { ActivityMessage, Message } from "@ag-ui/core";
6
+ import { AbstractAgent } from "@ag-ui/client";
7
+
8
+ //#region src/v2/types/react-tool-call-renderer.d.ts
9
+ interface ReactToolCallRenderer<T = unknown> {
10
+ name: string;
11
+ args: StandardSchemaV1<any, T>;
12
+ /**
13
+ * Optional agent ID to constrain this tool renderer to a specific agent.
14
+ * If specified, this renderer will only be used for the specified agent.
15
+ */
16
+ agentId?: string;
17
+ render: React.ComponentType<{
18
+ name: string;
19
+ toolCallId: string;
20
+ args: Partial<T>;
21
+ status: ToolCallStatus.InProgress;
22
+ result: undefined;
23
+ } | {
24
+ name: string;
25
+ toolCallId: string;
26
+ args: T;
27
+ status: ToolCallStatus.Executing;
28
+ result: undefined;
29
+ } | {
30
+ name: string;
31
+ toolCallId: string;
32
+ args: T;
33
+ status: ToolCallStatus.Complete;
34
+ result: string;
35
+ }>;
36
+ }
37
+ //#endregion
38
+ //#region src/v2/types/react-activity-message-renderer.d.ts
39
+ interface ReactActivityMessageRenderer<TActivityContent> {
40
+ /**
41
+ * Activity type to match when rendering. Use "*" as a wildcard renderer.
42
+ */
43
+ activityType: string;
44
+ /**
45
+ * Optional agent ID to scope the renderer to a particular agent.
46
+ */
47
+ agentId?: string;
48
+ /**
49
+ * Schema describing the activity content payload.
50
+ */
51
+ content: StandardSchemaV1<any, TActivityContent>;
52
+ /**
53
+ * React component invoked to render the activity message.
54
+ */
55
+ render: React.ComponentType<{
56
+ activityType: string;
57
+ content: TActivityContent;
58
+ message: ActivityMessage;
59
+ agent: AbstractAgent | undefined;
60
+ }>;
61
+ }
62
+ //#endregion
63
+ //#region src/v2/types/react-custom-message-renderer.d.ts
64
+ type ReactCustomMessageRendererPosition = "before" | "after";
65
+ interface ReactCustomMessageRenderer {
66
+ agentId?: string;
67
+ render: React.ComponentType<{
68
+ message: Message;
69
+ position: ReactCustomMessageRendererPosition;
70
+ runId: string;
71
+ messageIndex: number;
72
+ messageIndexInRun: number;
73
+ numberOfMessagesInRun: number;
74
+ agentId: string;
75
+ stateSnapshot: any;
76
+ }> | null;
77
+ }
78
+ //#endregion
79
+ //#region src/v2/lib/react-core.d.ts
80
+ interface CopilotKitCoreReactConfig extends CopilotKitCoreConfig {
81
+ renderToolCalls?: ReactToolCallRenderer<any>[];
82
+ renderActivityMessages?: ReactActivityMessageRenderer<any>[];
83
+ renderCustomMessages?: ReactCustomMessageRenderer[];
84
+ }
85
+ interface CopilotKitCoreReactSubscriber extends CopilotKitCoreSubscriber {
86
+ onRenderToolCallsChanged?: (event: {
87
+ copilotkit: CopilotKitCore;
88
+ renderToolCalls: ReactToolCallRenderer<any>[];
89
+ }) => void | Promise<void>;
90
+ onInterruptElementChanged?: (event: {
91
+ copilotkit: CopilotKitCore;
92
+ interruptElement: React$1.ReactElement | null;
93
+ }) => void | Promise<void>;
94
+ }
95
+ declare class CopilotKitCoreReact extends CopilotKitCore {
96
+ private _renderToolCalls;
97
+ private _hookRenderToolCalls;
98
+ private _cachedMergedRenderToolCalls;
99
+ private _renderCustomMessages;
100
+ private _renderActivityMessages;
101
+ private _interruptElement;
102
+ constructor(config: CopilotKitCoreReactConfig);
103
+ get renderCustomMessages(): Readonly<ReactCustomMessageRenderer[]>;
104
+ get renderActivityMessages(): Readonly<ReactActivityMessageRenderer<any>>[];
105
+ get renderToolCalls(): Readonly<ReactToolCallRenderer<any>>[];
106
+ setRenderActivityMessages(renderers: ReactActivityMessageRenderer<any>[]): void;
107
+ setRenderCustomMessages(renderers: ReactCustomMessageRenderer[]): void;
108
+ setRenderToolCalls(renderToolCalls: ReactToolCallRenderer<any>[]): void;
109
+ addHookRenderToolCall(entry: ReactToolCallRenderer<any>): void;
110
+ removeHookRenderToolCall(name: string, agentId?: string): void;
111
+ private _notifyRenderToolCallsChanged;
112
+ get interruptElement(): React$1.ReactElement | null;
113
+ setInterruptElement(element: React$1.ReactElement | null): void;
114
+ subscribe(subscriber: CopilotKitCoreReactSubscriber): CopilotKitCoreSubscription;
115
+ /**
116
+ * Wait for pending React state updates before the follow-up agent run.
117
+ *
118
+ * When a frontend tool handler calls setState(), React 18 batches the update
119
+ * and schedules a commit via its internal scheduler (MessageChannel). The
120
+ * useAgentContext hook registers context via useLayoutEffect, which runs
121
+ * synchronously after React commits that batch.
122
+ *
123
+ * Awaiting a zero-delay timeout yields to the macrotask queue. React's
124
+ * MessageChannel task runs first, committing the pending state and running
125
+ * useLayoutEffect (which updates the context store). The follow-up runAgent
126
+ * call then reads fresh context.
127
+ */
128
+ waitForPendingFrameworkUpdates(): Promise<void>;
129
+ }
130
+ //#endregion
131
+ //#region src/v2/context.d.ts
132
+ interface CopilotKitContextValue {
133
+ copilotkit: CopilotKitCoreReact;
134
+ /**
135
+ * Set of tool call IDs currently being executed.
136
+ * This is tracked at the provider level to ensure tool execution events
137
+ * are captured even before child components mount.
138
+ */
139
+ executingToolCallIds: ReadonlySet<string>;
140
+ }
141
+ declare const EMPTY_SET: ReadonlySet<string>;
142
+ declare const CopilotKitContext: react.Context<CopilotKitContextValue | null>;
143
+ declare const useCopilotKit: () => CopilotKitContextValue;
144
+ declare const LicenseContext: react.Context<LicenseContextValue>;
145
+ declare const useLicenseContext: () => LicenseContextValue;
146
+ //#endregion
147
+ export { CopilotKitContext, CopilotKitContextValue, CopilotKitCoreReact, type CopilotKitCoreReactConfig, EMPTY_SET, LicenseContext, useCopilotKit, useLicenseContext };
148
+ //# sourceMappingURL=context.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.mts","names":[],"sources":["../../src/v2/types/react-tool-call-renderer.ts","../../src/v2/types/react-activity-message-renderer.ts","../../src/v2/types/react-custom-message-renderer.ts","../../src/v2/lib/react-core.ts","../../src/v2/context.ts"],"mappings":";;;;;;;;UAGiB,qBAAA;EACf,IAAA;EACA,IAAA,EAAM,gBAAA,MAAsB,CAAA;;;;AAF9B;EAOE,OAAA;EACA,MAAA,EAAQ,KAAA,CAAM,aAAA;IAER,IAAA;IACA,UAAA;IACA,IAAA,EAAM,OAAA,CAAQ,CAAA;IACd,MAAA,EAAQ,cAAA,CAAe,UAAA;IACvB,MAAA;EAAA;IAGA,IAAA;IACA,UAAA;IACA,IAAA,EAAM,CAAA;IACN,MAAA,EAAQ,cAAA,CAAe,SAAA;IACvB,MAAA;EAAA;IAGA,IAAA;IACA,UAAA;IACA,IAAA,EAAM,CAAA;IACN,MAAA,EAAQ,cAAA,CAAe,QAAA;IACvB,MAAA;EAAA;AAAA;;;UC3BS,4BAAA;;;;EAIf,YAAA;EDLe;;;ECSf,OAAA;EDPM;;;ECWN,OAAA,EAAS,gBAAA,MAAsB,gBAAA;EDMnB;;;ECFZ,MAAA,EAAQ,KAAA,CAAM,aAAA;IACZ,YAAA;IACA,OAAA,EAAS,gBAAA;IACT,OAAA,EAAS,eAAA;IACT,KAAA,EAAO,aAAA;EAAA;AAAA;;;KCtBC,kCAAA;AAAA,UAEK,0BAAA;EACf,OAAA;EACA,MAAA,EAAQ,KAAA,CAAM,aAAA;IACZ,OAAA,EAAS,OAAA;IACT,QAAA,EAAU,kCAAA;IACV,KAAA;IACA,YAAA;IACA,iBAAA;IACA,qBAAA;IACA,OAAA;IACA,aAAA;EAAA;AAAA;;;UCJa,yBAAA,SAAkC,oBAAA;EAEjD,eAAA,GAAkB,qBAAA;EAClB,sBAAA,GAAyB,4BAAA;EAGzB,oBAAA,GAAuB,0BAAA;AAAA;AAAA,UAGR,6BAAA,SAAsC,wBAAA;EACrD,wBAAA,IAA4B,KAAA;IAC1B,UAAA,EAAY,cAAA;IACZ,eAAA,EAAiB,qBAAA;EAAA,aACN,OAAA;EACb,yBAAA,IAA6B,KAAA;IAC3B,UAAA,EAAY,cAAA;IACZ,gBAAA,EAAkB,OAAA,CAAM,YAAA;EAAA,aACb,OAAA;AAAA;AAAA,cAGF,mBAAA,SAA4B,cAAA;EAAA,QAC/B,gBAAA;EAAA,QACA,oBAAA;EAAA,QAEA,4BAAA;EAAA,QAEA,qBAAA;EAAA,QACA,uBAAA;EAAA,QACA,iBAAA;cAEI,MAAA,EAAQ,yBAAA;EAAA,IAOhB,oBAAA,CAAA,GAAwB,QAAA,CAAS,0BAAA;EAAA,IAIjC,sBAAA,CAAA,GAA0B,QAAA,CAAS,4BAAA;EAAA,IAInC,eAAA,CAAA,GAAmB,QAAA,CAAS,qBAAA;EAmBhC,yBAAA,CACE,SAAA,EAAW,4BAAA;EAKb,uBAAA,CAAwB,SAAA,EAAW,0BAAA;EAInC,kBAAA,CAAmB,eAAA,EAAiB,qBAAA;EAMpC,qBAAA,CAAsB,KAAA,EAAO,qBAAA;EAO7B,wBAAA,CAAyB,IAAA,UAAc,OAAA;EAAA,QAQ/B,6BAAA;EAAA,IAYJ,gBAAA,CAAA,GAAoB,OAAA,CAAM,YAAA;EAI9B,mBAAA,CAAoB,OAAA,EAAS,OAAA,CAAM,YAAA;EAYnC,SAAA,CACE,UAAA,EAAY,6BAAA,GACX,0BAAA;EHvH0B;;;;;;;;;;;;;EGwIvB,8BAAA,CAAA,GAAkC,OAAA;AAAA;;;UC7IzB,sBAAA;EACf,UAAA,EAAY,mBAAA;;AJTd;;;;EIeE,oBAAA,EAAsB,WAAA;AAAA;AAAA,cAGX,SAAA,EAAW,WAAA;AAAA,cAEX,iBAAA,EAAiB,KAAA,CAAA,OAAA,CAAA,sBAAA;AAAA,cAIjB,aAAA,QAAoB,sBAAA;AAAA,cA0BpB,cAAA,EAAc,KAAA,CAAA,OAAA,CAAA,mBAAA;AAAA,cAOd,iBAAA,QAAwB,mBAAA"}
@@ -0,0 +1,129 @@
1
+ "use client";
2
+
3
+ import { createContext, useContext, useEffect, useReducer } from "react";
4
+ import { CopilotKitCore } from "@copilotkit/core";
5
+
6
+ //#region src/v2/lib/react-core.ts
7
+ var CopilotKitCoreReact = class extends CopilotKitCore {
8
+ constructor(config) {
9
+ super(config);
10
+ this._renderToolCalls = [];
11
+ this._hookRenderToolCalls = /* @__PURE__ */ new Map();
12
+ this._cachedMergedRenderToolCalls = null;
13
+ this._renderCustomMessages = [];
14
+ this._renderActivityMessages = [];
15
+ this._interruptElement = null;
16
+ this._renderToolCalls = config.renderToolCalls ?? [];
17
+ this._renderCustomMessages = config.renderCustomMessages ?? [];
18
+ this._renderActivityMessages = config.renderActivityMessages ?? [];
19
+ }
20
+ get renderCustomMessages() {
21
+ return this._renderCustomMessages;
22
+ }
23
+ get renderActivityMessages() {
24
+ return this._renderActivityMessages;
25
+ }
26
+ get renderToolCalls() {
27
+ if (this._hookRenderToolCalls.size === 0) return this._renderToolCalls;
28
+ if (this._cachedMergedRenderToolCalls) return this._cachedMergedRenderToolCalls;
29
+ const merged = /* @__PURE__ */ new Map();
30
+ for (const rc of this._renderToolCalls) merged.set(`${rc.agentId ?? ""}:${rc.name}`, rc);
31
+ for (const [key, rc] of this._hookRenderToolCalls) merged.set(key, rc);
32
+ this._cachedMergedRenderToolCalls = Array.from(merged.values());
33
+ return this._cachedMergedRenderToolCalls;
34
+ }
35
+ setRenderActivityMessages(renderers) {
36
+ this._renderActivityMessages = renderers;
37
+ }
38
+ setRenderCustomMessages(renderers) {
39
+ this._renderCustomMessages = renderers;
40
+ }
41
+ setRenderToolCalls(renderToolCalls) {
42
+ this._renderToolCalls = renderToolCalls;
43
+ this._cachedMergedRenderToolCalls = null;
44
+ this._notifyRenderToolCallsChanged();
45
+ }
46
+ addHookRenderToolCall(entry) {
47
+ const key = `${entry.agentId ?? ""}:${entry.name}`;
48
+ this._hookRenderToolCalls.set(key, entry);
49
+ this._cachedMergedRenderToolCalls = null;
50
+ this._notifyRenderToolCallsChanged();
51
+ }
52
+ removeHookRenderToolCall(name, agentId) {
53
+ const key = `${agentId ?? ""}:${name}`;
54
+ if (this._hookRenderToolCalls.delete(key)) {
55
+ this._cachedMergedRenderToolCalls = null;
56
+ this._notifyRenderToolCallsChanged();
57
+ }
58
+ }
59
+ _notifyRenderToolCallsChanged() {
60
+ this.notifySubscribers((subscriber) => {
61
+ const reactSubscriber = subscriber;
62
+ if (reactSubscriber.onRenderToolCallsChanged) reactSubscriber.onRenderToolCallsChanged({
63
+ copilotkit: this,
64
+ renderToolCalls: this.renderToolCalls
65
+ });
66
+ }, "Subscriber onRenderToolCallsChanged error:");
67
+ }
68
+ get interruptElement() {
69
+ return this._interruptElement;
70
+ }
71
+ setInterruptElement(element) {
72
+ this._interruptElement = element;
73
+ this.notifySubscribers((subscriber) => {
74
+ subscriber.onInterruptElementChanged?.({
75
+ copilotkit: this,
76
+ interruptElement: this._interruptElement
77
+ });
78
+ }, "Subscriber onInterruptElementChanged error:");
79
+ }
80
+ subscribe(subscriber) {
81
+ return super.subscribe(subscriber);
82
+ }
83
+ /**
84
+ * Wait for pending React state updates before the follow-up agent run.
85
+ *
86
+ * When a frontend tool handler calls setState(), React 18 batches the update
87
+ * and schedules a commit via its internal scheduler (MessageChannel). The
88
+ * useAgentContext hook registers context via useLayoutEffect, which runs
89
+ * synchronously after React commits that batch.
90
+ *
91
+ * Awaiting a zero-delay timeout yields to the macrotask queue. React's
92
+ * MessageChannel task runs first, committing the pending state and running
93
+ * useLayoutEffect (which updates the context store). The follow-up runAgent
94
+ * call then reads fresh context.
95
+ */
96
+ async waitForPendingFrameworkUpdates() {
97
+ await new Promise((resolve) => setTimeout(resolve, 0));
98
+ }
99
+ };
100
+
101
+ //#endregion
102
+ //#region src/v2/context.ts
103
+ const EMPTY_SET = /* @__PURE__ */ new Set();
104
+ const CopilotKitContext = createContext(null);
105
+ const useCopilotKit = () => {
106
+ const context = useContext(CopilotKitContext);
107
+ const [, forceUpdate] = useReducer((x) => x + 1, 0);
108
+ if (!context) throw new Error("useCopilotKit must be used within CopilotKitProvider");
109
+ useEffect(() => {
110
+ const subscription = context.copilotkit.subscribe({ onRuntimeConnectionStatusChanged: () => {
111
+ forceUpdate();
112
+ } });
113
+ return () => {
114
+ subscription.unsubscribe();
115
+ };
116
+ }, []);
117
+ return context;
118
+ };
119
+ const LicenseContext = createContext({
120
+ status: null,
121
+ license: null,
122
+ checkFeature: () => true,
123
+ getLimit: () => null
124
+ });
125
+ const useLicenseContext = () => useContext(LicenseContext);
126
+
127
+ //#endregion
128
+ export { CopilotKitContext, CopilotKitCoreReact, EMPTY_SET, LicenseContext, useCopilotKit, useLicenseContext };
129
+ //# sourceMappingURL=context.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.mjs","names":[],"sources":["../../src/v2/lib/react-core.ts","../../src/v2/context.ts"],"sourcesContent":["import React from \"react\";\nimport { ReactActivityMessageRenderer, ReactToolCallRenderer } from \"../types\";\nimport { ReactCustomMessageRenderer } from \"../types/react-custom-message-renderer\";\nimport {\n CopilotKitCore,\n type CopilotKitCoreConfig,\n type CopilotKitCoreSubscriber,\n type CopilotKitCoreSubscription,\n} from \"@copilotkit/core\";\n\nexport interface CopilotKitCoreReactConfig extends CopilotKitCoreConfig {\n // Add any additional configuration properties specific to the React implementation\n renderToolCalls?: ReactToolCallRenderer<any>[];\n renderActivityMessages?: ReactActivityMessageRenderer<any>[];\n\n // Add custom message renderers\n renderCustomMessages?: ReactCustomMessageRenderer[];\n}\n\nexport interface CopilotKitCoreReactSubscriber extends CopilotKitCoreSubscriber {\n onRenderToolCallsChanged?: (event: {\n copilotkit: CopilotKitCore;\n renderToolCalls: ReactToolCallRenderer<any>[];\n }) => void | Promise<void>;\n onInterruptElementChanged?: (event: {\n copilotkit: CopilotKitCore;\n interruptElement: React.ReactElement | null;\n }) => void | Promise<void>;\n}\n\nexport class CopilotKitCoreReact extends CopilotKitCore {\n private _renderToolCalls: ReactToolCallRenderer<any>[] = [];\n private _hookRenderToolCalls: Map<string, ReactToolCallRenderer<any>> =\n new Map();\n private _cachedMergedRenderToolCalls: ReactToolCallRenderer<any>[] | null =\n null;\n private _renderCustomMessages: ReactCustomMessageRenderer[] = [];\n private _renderActivityMessages: ReactActivityMessageRenderer<any>[] = [];\n private _interruptElement: React.ReactElement | null = null;\n\n constructor(config: CopilotKitCoreReactConfig) {\n super(config);\n this._renderToolCalls = config.renderToolCalls ?? [];\n this._renderCustomMessages = config.renderCustomMessages ?? [];\n this._renderActivityMessages = config.renderActivityMessages ?? [];\n }\n\n get renderCustomMessages(): Readonly<ReactCustomMessageRenderer[]> {\n return this._renderCustomMessages;\n }\n\n get renderActivityMessages(): Readonly<ReactActivityMessageRenderer<any>>[] {\n return this._renderActivityMessages;\n }\n\n get renderToolCalls(): Readonly<ReactToolCallRenderer<any>>[] {\n if (this._hookRenderToolCalls.size === 0) {\n return this._renderToolCalls;\n }\n if (this._cachedMergedRenderToolCalls) {\n return this._cachedMergedRenderToolCalls;\n }\n // Merge: hook entries override prop entries with the same key\n const merged = new Map<string, ReactToolCallRenderer<any>>();\n for (const rc of this._renderToolCalls) {\n merged.set(`${rc.agentId ?? \"\"}:${rc.name}`, rc);\n }\n for (const [key, rc] of this._hookRenderToolCalls) {\n merged.set(key, rc);\n }\n this._cachedMergedRenderToolCalls = Array.from(merged.values());\n return this._cachedMergedRenderToolCalls;\n }\n\n setRenderActivityMessages(\n renderers: ReactActivityMessageRenderer<any>[],\n ): void {\n this._renderActivityMessages = renderers;\n }\n\n setRenderCustomMessages(renderers: ReactCustomMessageRenderer[]): void {\n this._renderCustomMessages = renderers;\n }\n\n setRenderToolCalls(renderToolCalls: ReactToolCallRenderer<any>[]): void {\n this._renderToolCalls = renderToolCalls;\n this._cachedMergedRenderToolCalls = null;\n this._notifyRenderToolCallsChanged();\n }\n\n addHookRenderToolCall(entry: ReactToolCallRenderer<any>): void {\n const key = `${entry.agentId ?? \"\"}:${entry.name}`;\n this._hookRenderToolCalls.set(key, entry);\n this._cachedMergedRenderToolCalls = null;\n this._notifyRenderToolCallsChanged();\n }\n\n removeHookRenderToolCall(name: string, agentId?: string): void {\n const key = `${agentId ?? \"\"}:${name}`;\n if (this._hookRenderToolCalls.delete(key)) {\n this._cachedMergedRenderToolCalls = null;\n this._notifyRenderToolCallsChanged();\n }\n }\n\n private _notifyRenderToolCallsChanged(): void {\n void this.notifySubscribers((subscriber) => {\n const reactSubscriber = subscriber as CopilotKitCoreReactSubscriber;\n if (reactSubscriber.onRenderToolCallsChanged) {\n reactSubscriber.onRenderToolCallsChanged({\n copilotkit: this,\n renderToolCalls: this.renderToolCalls,\n });\n }\n }, \"Subscriber onRenderToolCallsChanged error:\");\n }\n\n get interruptElement(): React.ReactElement | null {\n return this._interruptElement;\n }\n\n setInterruptElement(element: React.ReactElement | null): void {\n this._interruptElement = element;\n void this.notifySubscribers((subscriber) => {\n const reactSubscriber = subscriber as CopilotKitCoreReactSubscriber;\n reactSubscriber.onInterruptElementChanged?.({\n copilotkit: this,\n interruptElement: this._interruptElement,\n });\n }, \"Subscriber onInterruptElementChanged error:\");\n }\n\n // Override to accept React-specific subscriber type\n subscribe(\n subscriber: CopilotKitCoreReactSubscriber,\n ): CopilotKitCoreSubscription {\n return super.subscribe(subscriber);\n }\n\n /**\n * Wait for pending React state updates before the follow-up agent run.\n *\n * When a frontend tool handler calls setState(), React 18 batches the update\n * and schedules a commit via its internal scheduler (MessageChannel). The\n * useAgentContext hook registers context via useLayoutEffect, which runs\n * synchronously after React commits that batch.\n *\n * Awaiting a zero-delay timeout yields to the macrotask queue. React's\n * MessageChannel task runs first, committing the pending state and running\n * useLayoutEffect (which updates the context store). The follow-up runAgent\n * call then reads fresh context.\n */\n async waitForPendingFrameworkUpdates(): Promise<void> {\n await new Promise<void>((resolve) => setTimeout(resolve, 0));\n }\n}\n","\"use client\";\n\nimport { createContext, useContext, useEffect, useReducer } from \"react\";\nimport { CopilotKitCoreReact } from \"./lib/react-core\";\nimport type { CopilotKitCoreReactConfig } from \"./lib/react-core\";\nimport type { LicenseContextValue } from \"@copilotkit/shared\";\n\n// Re-export so headless.ts (and consumers) reference the same type declaration.\nexport { CopilotKitCoreReact };\nexport type { CopilotKitCoreReactConfig };\n\nexport interface CopilotKitContextValue {\n copilotkit: CopilotKitCoreReact;\n /**\n * Set of tool call IDs currently being executed.\n * This is tracked at the provider level to ensure tool execution events\n * are captured even before child components mount.\n */\n executingToolCallIds: ReadonlySet<string>;\n}\n\nexport const EMPTY_SET: ReadonlySet<string> = new Set();\n\nexport const CopilotKitContext = createContext<CopilotKitContextValue | null>(\n null,\n);\n\nexport const useCopilotKit = (): CopilotKitContextValue => {\n const context = useContext(CopilotKitContext);\n const [, forceUpdate] = useReducer((x: number) => x + 1, 0);\n\n if (!context) {\n throw new Error(\"useCopilotKit must be used within CopilotKitProvider\");\n }\n useEffect(() => {\n const subscription = context.copilotkit.subscribe({\n onRuntimeConnectionStatusChanged: () => {\n forceUpdate();\n },\n });\n return () => {\n subscription.unsubscribe();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return context;\n};\n\n// License context — shared between web and RN providers.\n// Default is permissive (all features allowed) — providers override via createLicenseContextValue.\n// Inlined here to avoid a runtime import from @copilotkit/shared, which pulls in\n// Node-only deps (jose) that break React Native's Metro bundler.\nexport const LicenseContext = createContext<LicenseContextValue>({\n status: null,\n license: null,\n checkFeature: () => true,\n getLimit: () => null,\n} as LicenseContextValue);\n\nexport const useLicenseContext = (): LicenseContextValue =>\n useContext(LicenseContext);\n"],"mappings":";;;;;;AA8BA,IAAa,sBAAb,cAAyC,eAAe;CAUtD,YAAY,QAAmC;AAC7C,QAAM,OAAO;0BAV0C,EAAE;8CAEzD,IAAI,KAAK;sCAET;+BAC4D,EAAE;iCACO,EAAE;2BAClB;AAIrD,OAAK,mBAAmB,OAAO,mBAAmB,EAAE;AACpD,OAAK,wBAAwB,OAAO,wBAAwB,EAAE;AAC9D,OAAK,0BAA0B,OAAO,0BAA0B,EAAE;;CAGpE,IAAI,uBAA+D;AACjE,SAAO,KAAK;;CAGd,IAAI,yBAAwE;AAC1E,SAAO,KAAK;;CAGd,IAAI,kBAA0D;AAC5D,MAAI,KAAK,qBAAqB,SAAS,EACrC,QAAO,KAAK;AAEd,MAAI,KAAK,6BACP,QAAO,KAAK;EAGd,MAAM,yBAAS,IAAI,KAAyC;AAC5D,OAAK,MAAM,MAAM,KAAK,iBACpB,QAAO,IAAI,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,QAAQ,GAAG;AAElD,OAAK,MAAM,CAAC,KAAK,OAAO,KAAK,qBAC3B,QAAO,IAAI,KAAK,GAAG;AAErB,OAAK,+BAA+B,MAAM,KAAK,OAAO,QAAQ,CAAC;AAC/D,SAAO,KAAK;;CAGd,0BACE,WACM;AACN,OAAK,0BAA0B;;CAGjC,wBAAwB,WAA+C;AACrE,OAAK,wBAAwB;;CAG/B,mBAAmB,iBAAqD;AACtE,OAAK,mBAAmB;AACxB,OAAK,+BAA+B;AACpC,OAAK,+BAA+B;;CAGtC,sBAAsB,OAAyC;EAC7D,MAAM,MAAM,GAAG,MAAM,WAAW,GAAG,GAAG,MAAM;AAC5C,OAAK,qBAAqB,IAAI,KAAK,MAAM;AACzC,OAAK,+BAA+B;AACpC,OAAK,+BAA+B;;CAGtC,yBAAyB,MAAc,SAAwB;EAC7D,MAAM,MAAM,GAAG,WAAW,GAAG,GAAG;AAChC,MAAI,KAAK,qBAAqB,OAAO,IAAI,EAAE;AACzC,QAAK,+BAA+B;AACpC,QAAK,+BAA+B;;;CAIxC,AAAQ,gCAAsC;AAC5C,EAAK,KAAK,mBAAmB,eAAe;GAC1C,MAAM,kBAAkB;AACxB,OAAI,gBAAgB,yBAClB,iBAAgB,yBAAyB;IACvC,YAAY;IACZ,iBAAiB,KAAK;IACvB,CAAC;KAEH,6CAA6C;;CAGlD,IAAI,mBAA8C;AAChD,SAAO,KAAK;;CAGd,oBAAoB,SAA0C;AAC5D,OAAK,oBAAoB;AACzB,EAAK,KAAK,mBAAmB,eAAe;AAE1C,GADwB,WACR,4BAA4B;IAC1C,YAAY;IACZ,kBAAkB,KAAK;IACxB,CAAC;KACD,8CAA8C;;CAInD,UACE,YAC4B;AAC5B,SAAO,MAAM,UAAU,WAAW;;;;;;;;;;;;;;;CAgBpC,MAAM,iCAAgD;AACpD,QAAM,IAAI,SAAe,YAAY,WAAW,SAAS,EAAE,CAAC;;;;;;ACpIhE,MAAa,4BAAiC,IAAI,KAAK;AAEvD,MAAa,oBAAoB,cAC/B,KACD;AAED,MAAa,sBAA8C;CACzD,MAAM,UAAU,WAAW,kBAAkB;CAC7C,MAAM,GAAG,eAAe,YAAY,MAAc,IAAI,GAAG,EAAE;AAE3D,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,uDAAuD;AAEzE,iBAAgB;EACd,MAAM,eAAe,QAAQ,WAAW,UAAU,EAChD,wCAAwC;AACtC,gBAAa;KAEhB,CAAC;AACF,eAAa;AACX,gBAAa,aAAa;;IAG3B,EAAE,CAAC;AAEN,QAAO;;AAOT,MAAa,iBAAiB,cAAmC;CAC/D,QAAQ;CACR,SAAS;CACT,oBAAoB;CACpB,gBAAgB;CACjB,CAAwB;AAEzB,MAAa,0BACX,WAAW,eAAe"}