@copilotkit/vue 1.69.2 → 1.69.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/PARITY.md +1 -1
  2. package/README.md +7 -0
  3. package/dist/index.cjs +1 -1
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/index.mjs +14 -14
  6. package/dist/use-render-activity-message-DMY6Krn-.cjs +85 -0
  7. package/dist/use-render-activity-message-DMY6Krn-.cjs.map +1 -0
  8. package/dist/{use-render-activity-message-Db2rOZkW.js → use-render-activity-message-W2lbqLZH.js} +2844 -2828
  9. package/dist/use-render-activity-message-W2lbqLZH.js.map +1 -0
  10. package/dist/v2/components/CopilotKitInspector.vue.d.ts +2 -0
  11. package/dist/v2/components/CopilotKitInspector.vue.d.ts.map +1 -1
  12. package/dist/v2/index.cjs +1 -1
  13. package/dist/v2/index.mjs +1 -1
  14. package/dist/v2/providers/CopilotKitProvider.types.d.ts +10 -9
  15. package/dist/v2/providers/CopilotKitProvider.types.d.ts.map +1 -1
  16. package/dist/v2/providers/CopilotKitProvider.vue.d.ts +1 -1
  17. package/dist/v2/providers/CopilotKitProvider.vue.d.ts.map +1 -1
  18. package/dist/v2/providers/keys.d.ts +10 -0
  19. package/dist/v2/providers/keys.d.ts.map +1 -1
  20. package/package.json +5 -5
  21. package/src/v2/__tests__/mocks/web-inspector.ts +32 -1
  22. package/src/v2/components/CopilotKitInspector.vue +41 -3
  23. package/src/v2/components/__tests__/CopilotKitInspector.test.ts +31 -6
  24. package/src/v2/providers/CopilotKitProvider.types.ts +10 -9
  25. package/src/v2/providers/CopilotKitProvider.vue +25 -23
  26. package/src/v2/providers/__tests__/CopilotKitProvider.test.ts +148 -37
  27. package/src/v2/providers/keys.ts +15 -0
  28. package/dist/use-render-activity-message-CIlNtfvE.cjs +0 -85
  29. package/dist/use-render-activity-message-CIlNtfvE.cjs.map +0 -1
  30. package/dist/use-render-activity-message-Db2rOZkW.js.map +0 -1
@@ -1,6 +1,8 @@
1
1
  import type { CopilotKitCoreVue } from "../lib/vue-core";
2
+ import type { VueInspectorOpenRequest } from "../providers/keys";
2
3
  type __VLS_Props = {
3
4
  core?: CopilotKitCoreVue | null;
5
+ openRequest?: VueInspectorOpenRequest | null;
4
6
  };
5
7
  declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
8
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"CopilotKitInspector.vue.d.ts","sourceRoot":"","sources":["../../../src/v2/components/CopilotKitInspector.vue"],"names":[],"mappings":"AAiDA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,KAAK,WAAW,GAAG;IACjB,IAAI,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACjC,CAAC;;AAmEF,wBAMG"}
1
+ {"version":3,"file":"CopilotKitInspector.vue.d.ts","sourceRoot":"","sources":["../../../src/v2/components/CopilotKitInspector.vue"],"names":[],"mappings":"AAyFA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAEjE,KAAK,WAAW,GAAG;IACjB,IAAI,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAChC,WAAW,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAAC;CAC9C,CAAC;;AAqGF,wBAMG"}
package/dist/v2/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("@copilotkit/core"),i=require("@ag-ui/client"),e=require("../use-render-activity-message-CIlNtfvE.cjs"),n=require("@copilotkit/shared");exports.A2UIActivityContentSchema=e.A2UIActivityContentSchema;exports.A2UISurfaceActivityRenderer=e._sfc_main;exports.A2UISurfaceActivityType=e.A2UISurfaceActivityType;exports.CopilotChat=e.CopilotChat;exports.CopilotChatAssistantMessage=e._sfc_main$1;exports.CopilotChatAttachmentQueue=e._sfc_main$2;exports.CopilotChatAttachmentRenderer=e._sfc_main$3;exports.CopilotChatAudioRecorder=e._sfc_main$4;exports.CopilotChatConfigurationProvider=e._sfc_main$5;exports.CopilotChatDefaultLabels=e.CopilotChatDefaultLabels;exports.CopilotChatInput=e._sfc_main$6;exports.CopilotChatMessageView=e._sfc_main$7;exports.CopilotChatReasoningMessage=e._sfc_main$8;exports.CopilotChatSuggestionPill=e._sfc_main$9;exports.CopilotChatSuggestionView=e._sfc_main$10;exports.CopilotChatToggleButton=e.CopilotChatToggleButton;exports.CopilotChatToggleButtonCloseIcon=e.CopilotChatToggleButtonCloseIcon;exports.CopilotChatToggleButtonOpenIcon=e.CopilotChatToggleButtonOpenIcon;exports.CopilotChatToolCallsView=e._sfc_main$11;exports.CopilotChatUserMessage=e._sfc_main$12;exports.CopilotChatView=e._sfc_main$13;exports.CopilotKitCoreVue=e.CopilotKitCoreVue;exports.CopilotKitInspector=e._sfc_main$14;exports.CopilotKitProvider=e._sfc_main$15;exports.CopilotModalHeader=e.CopilotModalHeader;exports.CopilotPopup=e._sfc_main$16;exports.CopilotPopupView=e.CopilotPopupView;exports.CopilotSidebar=e._sfc_main$17;exports.CopilotSidebarView=e.CopilotSidebarView;exports.CopilotThreadsDrawer=e._sfc_main$18;exports.GenerateSandboxedUiArgsSchema=e.GenerateSandboxedUiArgsSchema;exports.LicenseContextKey=e.LicenseContextKey;exports.MCPAppsActivityContentSchema=e.MCPAppsActivityContentSchema;exports.MCPAppsActivityRenderer=e.MCPAppsActivityRenderer;exports.MCPAppsActivityType=e.MCPAppsActivityType;exports.OpenGenerativeUIActivityRenderer=e.OpenGenerativeUIActivityRenderer;exports.OpenGenerativeUIActivityType=e.OpenGenerativeUIActivityType;exports.OpenGenerativeUIContentSchema=e.OpenGenerativeUIContentSchema;exports.OpenGenerativeUIRenderer=e.OpenGenerativeUIRenderer;exports.OpenGenerativeUIToolRenderer=e.OpenGenerativeUIToolRenderer;exports.UseAgentUpdate=e.UseAgentUpdate;exports.createA2UIMessageRenderer=e.createA2UIMessageRenderer;exports.createDefaultLicenseRef=e.createDefaultLicenseRef;exports.defineToolCallRenderer=e.defineToolCallRenderer;exports.extractCompleteStyles=e.extractCompleteStyles;exports.getOperationSurfaceId=e.getOperationSurfaceId;exports.processPartialHtml=e.processPartialHtml;exports.useAgent=e.useAgent;exports.useAgentContext=e.useAgentContext;exports.useAttachments=e.useAttachments;exports.useCapabilities=e.useCapabilities;exports.useComponent=e.useComponent;exports.useConfigureSuggestions=e.useConfigureSuggestions;exports.useCopilotChatConfiguration=e.useCopilotChatConfiguration;exports.useCopilotKit=e.useCopilotKit;exports.useDefaultRenderTool=e.useDefaultRenderTool;exports.useFrontendTool=e.useFrontendTool;exports.useHumanInTheLoop=e.useHumanInTheLoop;exports.useInterrupt=e.useInterrupt;exports.useKatexStyles=e.useKatexStyles;exports.useKeyboardHeight=e.useKeyboardHeight;exports.useLicenseContext=e.useLicenseContext;exports.useRenderActivityMessage=e.useRenderActivityMessage;exports.useRenderCustomMessages=e.useRenderCustomMessages;exports.useRenderTool=e.useRenderTool;exports.useSandboxFunctions=e.useSandboxFunctions;exports.useSuggestions=e.useSuggestions;exports.useThreads=e.useThreads;exports.vueBasicCatalog=e.vueBasicCatalog;Object.defineProperty(exports,"createLicenseContextValue",{enumerable:!0,get:()=>n.createLicenseContextValue});Object.keys(o).forEach(t=>{t!=="default"&&!Object.prototype.hasOwnProperty.call(exports,t)&&Object.defineProperty(exports,t,{enumerable:!0,get:()=>o[t]})});Object.keys(i).forEach(t=>{t!=="default"&&!Object.prototype.hasOwnProperty.call(exports,t)&&Object.defineProperty(exports,t,{enumerable:!0,get:()=>i[t]})});
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("@copilotkit/core"),i=require("@ag-ui/client"),e=require("../use-render-activity-message-DMY6Krn-.cjs"),n=require("@copilotkit/shared");exports.A2UIActivityContentSchema=e.A2UIActivityContentSchema;exports.A2UISurfaceActivityRenderer=e._sfc_main;exports.A2UISurfaceActivityType=e.A2UISurfaceActivityType;exports.CopilotChat=e.CopilotChat;exports.CopilotChatAssistantMessage=e._sfc_main$1;exports.CopilotChatAttachmentQueue=e._sfc_main$2;exports.CopilotChatAttachmentRenderer=e._sfc_main$3;exports.CopilotChatAudioRecorder=e._sfc_main$4;exports.CopilotChatConfigurationProvider=e._sfc_main$5;exports.CopilotChatDefaultLabels=e.CopilotChatDefaultLabels;exports.CopilotChatInput=e._sfc_main$6;exports.CopilotChatMessageView=e._sfc_main$7;exports.CopilotChatReasoningMessage=e._sfc_main$8;exports.CopilotChatSuggestionPill=e._sfc_main$9;exports.CopilotChatSuggestionView=e._sfc_main$10;exports.CopilotChatToggleButton=e.CopilotChatToggleButton;exports.CopilotChatToggleButtonCloseIcon=e.CopilotChatToggleButtonCloseIcon;exports.CopilotChatToggleButtonOpenIcon=e.CopilotChatToggleButtonOpenIcon;exports.CopilotChatToolCallsView=e._sfc_main$11;exports.CopilotChatUserMessage=e._sfc_main$12;exports.CopilotChatView=e._sfc_main$13;exports.CopilotKitCoreVue=e.CopilotKitCoreVue;exports.CopilotKitInspector=e._sfc_main$14;exports.CopilotKitProvider=e._sfc_main$15;exports.CopilotModalHeader=e.CopilotModalHeader;exports.CopilotPopup=e._sfc_main$16;exports.CopilotPopupView=e.CopilotPopupView;exports.CopilotSidebar=e._sfc_main$17;exports.CopilotSidebarView=e.CopilotSidebarView;exports.CopilotThreadsDrawer=e._sfc_main$18;exports.GenerateSandboxedUiArgsSchema=e.GenerateSandboxedUiArgsSchema;exports.LicenseContextKey=e.LicenseContextKey;exports.MCPAppsActivityContentSchema=e.MCPAppsActivityContentSchema;exports.MCPAppsActivityRenderer=e.MCPAppsActivityRenderer;exports.MCPAppsActivityType=e.MCPAppsActivityType;exports.OpenGenerativeUIActivityRenderer=e.OpenGenerativeUIActivityRenderer;exports.OpenGenerativeUIActivityType=e.OpenGenerativeUIActivityType;exports.OpenGenerativeUIContentSchema=e.OpenGenerativeUIContentSchema;exports.OpenGenerativeUIRenderer=e.OpenGenerativeUIRenderer;exports.OpenGenerativeUIToolRenderer=e.OpenGenerativeUIToolRenderer;exports.UseAgentUpdate=e.UseAgentUpdate;exports.createA2UIMessageRenderer=e.createA2UIMessageRenderer;exports.createDefaultLicenseRef=e.createDefaultLicenseRef;exports.defineToolCallRenderer=e.defineToolCallRenderer;exports.extractCompleteStyles=e.extractCompleteStyles;exports.getOperationSurfaceId=e.getOperationSurfaceId;exports.processPartialHtml=e.processPartialHtml;exports.useAgent=e.useAgent;exports.useAgentContext=e.useAgentContext;exports.useAttachments=e.useAttachments;exports.useCapabilities=e.useCapabilities;exports.useComponent=e.useComponent;exports.useConfigureSuggestions=e.useConfigureSuggestions;exports.useCopilotChatConfiguration=e.useCopilotChatConfiguration;exports.useCopilotKit=e.useCopilotKit;exports.useDefaultRenderTool=e.useDefaultRenderTool;exports.useFrontendTool=e.useFrontendTool;exports.useHumanInTheLoop=e.useHumanInTheLoop;exports.useInterrupt=e.useInterrupt;exports.useKatexStyles=e.useKatexStyles;exports.useKeyboardHeight=e.useKeyboardHeight;exports.useLicenseContext=e.useLicenseContext;exports.useRenderActivityMessage=e.useRenderActivityMessage;exports.useRenderCustomMessages=e.useRenderCustomMessages;exports.useRenderTool=e.useRenderTool;exports.useSandboxFunctions=e.useSandboxFunctions;exports.useSuggestions=e.useSuggestions;exports.useThreads=e.useThreads;exports.vueBasicCatalog=e.vueBasicCatalog;Object.defineProperty(exports,"createLicenseContextValue",{enumerable:!0,get:()=>n.createLicenseContextValue});Object.keys(o).forEach(t=>{t!=="default"&&!Object.prototype.hasOwnProperty.call(exports,t)&&Object.defineProperty(exports,t,{enumerable:!0,get:()=>o[t]})});Object.keys(i).forEach(t=>{t!=="default"&&!Object.prototype.hasOwnProperty.call(exports,t)&&Object.defineProperty(exports,t,{enumerable:!0,get:()=>i[t]})});
2
2
  //# sourceMappingURL=index.cjs.map
package/dist/v2/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  export * from "@copilotkit/core";
2
2
  export * from "@ag-ui/client";
3
- import { A as o, _ as i, a as n, C, b as r, c as p, d as l, e as u, f as c, g, h as d, i as h, j as A, k as v, l as S, m, n as y, o as I, p as f, q as R, r as T, s as U, t as x, u as M, v as P, w as b, x as V, y as w, z as K, B as O, G, L, M as B, D, E as H, O as F, F as Q, H as j, I as k, J as q, U as z, K as E, N as J, P as N, Q as W, R as X, S as Y, T as Z, V as _, W as $, X as ee, Y as ae, Z as te, $ as se, a0 as oe, a1 as ie, a2 as ne, a3 as Ce, a4 as re, a5 as pe, a6 as le, a7 as ue, a8 as ce, a9 as ge, aa as de, ab as he, ac as Ae, ad as ve, ae as Se } from "../use-render-activity-message-Db2rOZkW.js";
3
+ import { A as o, _ as i, a as n, C, b as r, c as p, d as l, e as u, f as c, g, h as d, i as h, j as A, k as v, l as S, m, n as y, o as I, p as f, q as R, r as T, s as U, t as x, u as M, v as P, w as b, x as V, y as w, z as K, B as O, G, L, M as B, D, E as H, O as F, F as Q, H as j, I as k, J as q, U as z, K as E, N as J, P as N, Q as W, R as X, S as Y, T as Z, V as _, W as $, X as ee, Y as ae, Z as te, $ as se, a0 as oe, a1 as ie, a2 as ne, a3 as Ce, a4 as re, a5 as pe, a6 as le, a7 as ue, a8 as ce, a9 as ge, aa as de, ab as he, ac as Ae, ad as ve, ae as Se } from "../use-render-activity-message-W2lbqLZH.js";
4
4
  import { createLicenseContextValue as ye } from "@copilotkit/shared";
5
5
  export {
6
6
  o as A2UIActivityContentSchema,
@@ -28,7 +28,17 @@ export interface CopilotKitProviderProps {
28
28
  sandboxFunctions?: SandboxFunction[];
29
29
  designSkill?: string;
30
30
  };
31
+ /**
32
+ * @deprecated This prop no longer controls the Inspector. Use
33
+ * `enableInspector` instead.
34
+ */
31
35
  showDevConsole?: boolean | "auto";
36
+ /**
37
+ * Disable the CopilotKit Inspector in development.
38
+ * The Inspector is enabled by default in development browser builds and is
39
+ * always disabled in production and during server rendering.
40
+ */
41
+ enableInspector?: boolean;
32
42
  onError?: (event: {
33
43
  error: Error;
34
44
  code: CopilotKitCoreErrorCode;
@@ -40,15 +50,6 @@ export interface CopilotKitProviderProps {
40
50
  loadingComponent?: Component;
41
51
  includeSchema?: boolean;
42
52
  };
43
- /**
44
- * Default anchor corner for the inspector button and window.
45
- * Only used on first load before the user drags to a custom position.
46
- * Defaults to `{ horizontal: "right", vertical: "top" }`.
47
- */
48
- inspectorDefaultAnchor?: {
49
- horizontal: "left" | "right";
50
- vertical: "top" | "bottom";
51
- };
52
53
  /**
53
54
  * Enable debug logging for the client-side event pipeline.
54
55
  *
@@ -1 +1 @@
1
- {"version":3,"file":"CopilotKitProvider.types.d.ts","sourceRoot":"","sources":["../../../src/v2/providers/CopilotKitProvider.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,0BAA0B,EAC1B,wBAAwB,EACxB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAErC,MAAM,WAAW,uBAAuB;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClE,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACxD,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAClD,eAAe,CAAC,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;IAC7C,sBAAsB,CAAC,EAAE,0BAA0B,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/D,oBAAoB,CAAC,EAAE,wBAAwB,EAAE,CAAC;IAClD,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;IAClC,cAAc,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACrC,gBAAgB,CAAC,EAAE;QACjB,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;QACrC,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAClC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAChB,KAAK,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,uBAAuB,CAAC;QAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC9B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAC,EAAE;QACL,KAAK,CAAC,EAAE,SAAS,CAAC;QAClB,OAAO,CAAC,EAAE,GAAG,CAAC;QACd,gBAAgB,CAAC,EAAE,SAAS,CAAC;QAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC;IACF;;;;OAIG;IACH,sBAAsB,CAAC,EAAE;QACvB,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAC7B,QAAQ,EAAE,KAAK,GAAG,QAAQ,CAAC;KAC5B,CAAC;IACF;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB"}
1
+ {"version":3,"file":"CopilotKitProvider.types.d.ts","sourceRoot":"","sources":["../../../src/v2/providers/CopilotKitProvider.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,0BAA0B,EAC1B,wBAAwB,EACxB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAErC,MAAM,WAAW,uBAAuB;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClE,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACxD,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAClD,eAAe,CAAC,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;IAC7C,sBAAsB,CAAC,EAAE,0BAA0B,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/D,oBAAoB,CAAC,EAAE,wBAAwB,EAAE,CAAC;IAClD,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;IAClC,cAAc,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACrC,gBAAgB,CAAC,EAAE;QACjB,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;QACrC,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAClC;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAChB,KAAK,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,uBAAuB,CAAC;QAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC9B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAC,EAAE;QACL,KAAK,CAAC,EAAE,SAAS,CAAC;QAClB,OAAO,CAAC,EAAE,GAAG,CAAC;QACd,gBAAgB,CAAC,EAAE,SAAS,CAAC;QAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC;IACF;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB"}
@@ -19,7 +19,7 @@ declare const __VLS_component: import("vue").DefineComponent<CopilotKitProviderP
19
19
  sandboxFunctions?: SandboxFunction[];
20
20
  designSkill?: string;
21
21
  };
22
- showDevConsole: boolean | "auto";
22
+ enableInspector: boolean;
23
23
  a2ui: {
24
24
  theme?: import("..").A2UITheme;
25
25
  catalog?: any;
@@ -1 +1 @@
1
- {"version":3,"file":"CopilotKitProvider.vue.d.ts","sourceRoot":"","sources":["../../../src/v2/providers/CopilotKitProvider.vue"],"names":[],"mappings":"AAsqBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAiCnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,KAAK,EACV,eAAe,EACf,0BAA0B,EAC1B,eAAe,EACf,iBAAiB,EAElB,MAAM,UAAU,CAAC;AAuqBlB,QAAA,IAAI,OAAO,IAAW,CAAE;AACxB,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,CAAC;AA2B/C,QAAA,MAAM,eAAe;;;;;;;;;;;wBAtvBrB,CApnBgB;mBAonBhB,CAnnByB;;;;aAmnBzB,CAhnB2B;eAgnB3B,CAhnBoD;wBAgnBpD,CA/mBK;qBA+mBL,CA7mBG;;6EA02CD,CAAC;wBACkB,eAAe,CAAC,OAAO,eAAe,EAAE,WAAW,CAAC;AAAzE,wBAA0E;AAa1E,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"CopilotKitProvider.vue.d.ts","sourceRoot":"","sources":["../../../src/v2/providers/CopilotKitProvider.vue"],"names":[],"mappings":"AAwqBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAkCnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,KAAK,EACV,eAAe,EACf,0BAA0B,EAC1B,eAAe,EACf,iBAAiB,EAElB,MAAM,UAAU,CAAC;AAwqBlB,QAAA,IAAI,OAAO,IAAW,CAAE;AACxB,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,CAAC;AA4B/C,QAAA,MAAM,eAAe;;;;;;;;;;;wBAzvBrB,CAznBsC;mBAynBtC,CAvnBW;;;;aAunBX,CAvmBO;eAumBP,CAvmBgC;wBAumBhC,CAvmB4D;qBAumB5D,CAtmBW;;6EAs2CT,CAAC;wBACkB,eAAe,CAAC,OAAO,eAAe,EAAE,WAAW,CAAC;AAAzE,wBAA0E;AAa1E,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -14,4 +14,14 @@ export interface CopilotKitContextValue {
14
14
  export declare const CopilotKitKey: InjectionKey<CopilotKitContextValue>;
15
15
  export declare const CopilotChatConfigurationKey: InjectionKey<ComputedRef<CopilotChatConfigurationValue>>;
16
16
  export declare const SandboxFunctionsKey: InjectionKey<Ref<readonly SandboxFunction[]>>;
17
+ export type VueInspectorOpenRequest = {
18
+ messageId: string;
19
+ threadId?: string;
20
+ agentId?: string;
21
+ };
22
+ export type VueInspectorContextValue = {
23
+ isInspectorEnabled: ComputedRef<boolean>;
24
+ openInspector: (request: VueInspectorOpenRequest) => void;
25
+ };
26
+ export declare const InspectorKey: InjectionKey<VueInspectorContextValue>;
17
27
  //# sourceMappingURL=keys.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/v2/providers/keys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAC1C,oBAAoB,EAAE,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/C,SAAS,EAAE,WAAW,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAC9C,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,oBAAoB,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3C,iBAAiB,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CACzC;AAED,eAAO,MAAM,aAAa,EAAE,YAAY,CAAC,sBAAsB,CACzC,CAAC;AAEvB,eAAO,MAAM,2BAA2B,EAAE,YAAY,CACpD,WAAW,CAAC,6BAA6B,CAAC,CACN,CAAC;AAEvC,eAAO,MAAM,mBAAmB,EAAE,YAAY,CAC5C,GAAG,CAAC,SAAS,eAAe,EAAE,CAAC,CACH,CAAC"}
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/v2/providers/keys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAC1C,oBAAoB,EAAE,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/C,SAAS,EAAE,WAAW,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAC9C,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,oBAAoB,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3C,iBAAiB,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CACzC;AAED,eAAO,MAAM,aAAa,EAAE,YAAY,CAAC,sBAAsB,CACzC,CAAC;AAEvB,eAAO,MAAM,2BAA2B,EAAE,YAAY,CACpD,WAAW,CAAC,6BAA6B,CAAC,CACN,CAAC;AAEvC,eAAO,MAAM,mBAAmB,EAAE,YAAY,CAC5C,GAAG,CAAC,SAAS,eAAe,EAAE,CAAC,CACH,CAAC;AAE/B,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,kBAAkB,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IACzC,aAAa,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,IAAI,CAAC;CAC3D,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,YAAY,CAAC,wBAAwB,CAE/D,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@copilotkit/vue",
3
- "version": "1.69.2",
3
+ "version": "1.69.3",
4
4
  "private": false,
5
5
  "description": "Vue 3 components and composables for CopilotKit",
6
6
  "keywords": [
@@ -70,10 +70,10 @@
70
70
  "streamdown-vue": "^1.0.29",
71
71
  "zod": "^3.25.75",
72
72
  "zod-to-json-schema": "^3.24.5",
73
- "@copilotkit/core": "1.69.2",
74
- "@copilotkit/web-components": "1.69.2",
75
- "@copilotkit/shared": "1.69.2",
76
- "@copilotkit/web-inspector": "1.69.2"
73
+ "@copilotkit/core": "1.69.3",
74
+ "@copilotkit/web-inspector": "1.69.3",
75
+ "@copilotkit/shared": "1.69.3",
76
+ "@copilotkit/web-components": "1.69.3"
77
77
  },
78
78
  "devDependencies": {
79
79
  "@eslint/js": "^9.39.2",
@@ -2,4 +2,35 @@ import { vi } from "vitest";
2
2
 
3
3
  export const WEB_INSPECTOR_TAG = "cpk-web-inspector";
4
4
 
5
- export const defineWebInspector = vi.fn();
5
+ export class WebInspectorElement extends HTMLElement {
6
+ autoAttachCore = true;
7
+ core: unknown = null;
8
+ autoAttachCoreAtConnection = true;
9
+ coreAtConnection: unknown = null;
10
+ openInspector = vi.fn();
11
+
12
+ connectedCallback() {
13
+ this.autoAttachCoreAtConnection = this.autoAttachCore;
14
+ this.coreAtConnection = this.core;
15
+ }
16
+ }
17
+
18
+ export const defineWebInspector = vi.fn(() => {
19
+ if (!customElements.get(WEB_INSPECTOR_TAG)) {
20
+ customElements.define(WEB_INSPECTOR_TAG, WebInspectorElement);
21
+ }
22
+ });
23
+
24
+ export const configureWebInspectorElement = vi.fn(
25
+ (
26
+ inspector: HTMLElement & {
27
+ autoAttachCore?: boolean;
28
+ core?: unknown;
29
+ },
30
+ core: unknown,
31
+ ) => {
32
+ inspector.autoAttachCore = false;
33
+ inspector.core = core;
34
+ return inspector;
35
+ },
36
+ );
@@ -3,23 +3,46 @@ defineOptions({
3
3
  inheritAttrs: false,
4
4
  });
5
5
 
6
- import { onMounted, onUnmounted, shallowRef, useAttrs } from "vue";
6
+ import { onMounted, onUnmounted, shallowRef, useAttrs, watch } from "vue";
7
+ import type { ObjectDirective } from "vue";
8
+ import type { WebInspectorElement } from "@copilotkit/web-inspector";
7
9
  import type { CopilotKitCoreVue } from "../lib/vue-core";
10
+ import type { VueInspectorOpenRequest } from "../providers/keys";
8
11
 
9
12
  const props = defineProps<{
10
13
  core?: CopilotKitCoreVue | null;
14
+ openRequest?: VueInspectorOpenRequest | null;
11
15
  }>();
12
16
 
13
17
  const attrs = useAttrs();
14
18
  const inspectorTag = shallowRef<string | null>(null);
19
+ const inspector = shallowRef<WebInspectorElement | null>(null);
15
20
 
16
21
  let isMounted = true;
22
+ let configureInspector:
23
+ | ((
24
+ element: WebInspectorElement,
25
+ core: CopilotKitCoreVue | null,
26
+ ) => WebInspectorElement)
27
+ | null = null;
28
+
29
+ const vConfigureInspector: ObjectDirective<WebInspectorElement, undefined> = {
30
+ created(element) {
31
+ configureInspector?.(element, props.core ?? null);
32
+ inspector.value = element;
33
+ if (props.openRequest) {
34
+ element.openInspector?.("message_toolbar", props.openRequest);
35
+ }
36
+ },
37
+ };
17
38
 
18
39
  onMounted(() => {
19
40
  void import("@copilotkit/web-inspector")
20
41
  .then((mod) => {
21
- mod.defineWebInspector?.();
22
42
  if (!isMounted) return;
43
+
44
+ mod.defineWebInspector?.();
45
+ configureInspector = mod.configureWebInspectorElement;
23
46
  inspectorTag.value = mod.WEB_INSPECTOR_TAG;
24
47
  })
25
48
  .catch((error: unknown) => {
@@ -29,7 +52,22 @@ onMounted(() => {
29
52
 
30
53
  onUnmounted(() => {
31
54
  isMounted = false;
55
+ inspector.value = null;
32
56
  });
57
+
58
+ watch(
59
+ () => props.core,
60
+ (core) => {
61
+ if (inspector.value) inspector.value.core = core ?? null;
62
+ },
63
+ );
64
+
65
+ watch(
66
+ () => props.openRequest,
67
+ (request) => {
68
+ if (request) inspector.value?.openInspector?.("message_toolbar", request);
69
+ },
70
+ );
33
71
  </script>
34
72
 
35
73
  <template>
@@ -37,6 +75,6 @@ onUnmounted(() => {
37
75
  :is="inspectorTag"
38
76
  v-if="inspectorTag"
39
77
  v-bind="attrs"
40
- :core.prop="props.core ?? null"
78
+ v-configure-inspector
41
79
  />
42
80
  </template>
@@ -19,7 +19,7 @@ describe("CopilotKitInspector", () => {
19
19
  it("renders nothing until the web inspector module resolves", async () => {
20
20
  const wrapper = mount(CopilotKitInspector);
21
21
 
22
- expect(wrapper.html()).toBe("<!--v-if-->");
22
+ expect(wrapper.find("cpk-web-inspector").exists()).toBe(false);
23
23
 
24
24
  await settleInspectorLoad();
25
25
 
@@ -45,13 +45,38 @@ describe("CopilotKitInspector", () => {
45
45
  await settleInspectorLoad();
46
46
 
47
47
  const inspector = wrapper.get("cpk-web-inspector");
48
- const resolvedCore = (
49
- inspector.element as HTMLElement & { core?: CopilotKitCoreVue }
50
- ).core;
48
+ const inspectorElement = inspector.element as HTMLElement & {
49
+ autoAttachCore?: boolean;
50
+ core?: CopilotKitCoreVue;
51
+ };
51
52
 
52
53
  expect(inspector.attributes("data-testid")).toBe("inspector");
53
54
  expect(inspector.attributes("data-surface")).toBe("storybook");
54
- expect(resolvedCore).toBeInstanceOf(CopilotKitCoreVue);
55
- expect(resolvedCore?.runtimeUrl).toBe("/api/copilotkit");
55
+ expect(inspectorElement.autoAttachCore).toBe(false);
56
+ expect(inspectorElement.core).toBeInstanceOf(CopilotKitCoreVue);
57
+ expect(inspectorElement.core?.runtimeUrl).toBe("/api/copilotkit");
58
+
59
+ await wrapper.setProps({ "data-surface": "updated" });
60
+ expect(wrapper.get("cpk-web-inspector").attributes("data-surface")).toBe(
61
+ "updated",
62
+ );
63
+ });
64
+
65
+ it("forwards Inspector open requests to the mounted element", async () => {
66
+ const openRequest = { messageId: "message-1" };
67
+ const wrapper = mount(CopilotKitInspector, {
68
+ props: { openRequest },
69
+ });
70
+
71
+ await settleInspectorLoad();
72
+
73
+ const inspector = wrapper.get("cpk-web-inspector")
74
+ .element as HTMLElement & {
75
+ openInspector: ReturnType<typeof vi.fn>;
76
+ };
77
+ expect(inspector.openInspector).toHaveBeenCalledWith(
78
+ "message_toolbar",
79
+ openRequest,
80
+ );
56
81
  });
57
82
  });
@@ -37,7 +37,17 @@ export interface CopilotKitProviderProps {
37
37
  sandboxFunctions?: SandboxFunction[];
38
38
  designSkill?: string;
39
39
  };
40
+ /**
41
+ * @deprecated This prop no longer controls the Inspector. Use
42
+ * `enableInspector` instead.
43
+ */
40
44
  showDevConsole?: boolean | "auto";
45
+ /**
46
+ * Disable the CopilotKit Inspector in development.
47
+ * The Inspector is enabled by default in development browser builds and is
48
+ * always disabled in production and during server rendering.
49
+ */
50
+ enableInspector?: boolean;
41
51
  onError?: (event: {
42
52
  error: Error;
43
53
  code: CopilotKitCoreErrorCode;
@@ -49,15 +59,6 @@ export interface CopilotKitProviderProps {
49
59
  loadingComponent?: Component;
50
60
  includeSchema?: boolean;
51
61
  };
52
- /**
53
- * Default anchor corner for the inspector button and window.
54
- * Only used on first load before the user drags to a custom position.
55
- * Defaults to `{ horizontal: "right", vertical: "top" }`.
56
- */
57
- inspectorDefaultAnchor?: {
58
- horizontal: "left" | "right";
59
- vertical: "top" | "bottom";
60
- };
61
62
  /**
62
63
  * Enable debug logging for the client-side event pipeline.
63
64
  *
@@ -15,7 +15,7 @@ import type {
15
15
  CopilotKitCoreSubscriber,
16
16
  FrontendTool,
17
17
  } from "@copilotkit/core";
18
- import { schemaToJsonSchema } from "@copilotkit/shared";
18
+ import { schemaToJsonSchema, shouldEnableInspector } from "@copilotkit/shared";
19
19
  import type { RuntimeLicenseStatus } from "@copilotkit/shared";
20
20
  import { zodToJsonSchema } from "zod-to-json-schema";
21
21
  import { CopilotKitCoreVue } from "../lib/vue-core";
@@ -34,7 +34,8 @@ import {
34
34
  MCPAppsActivityRenderer,
35
35
  MCPAppsActivityType,
36
36
  } from "../components/MCPAppsActivityRenderer";
37
- import { CopilotKitKey, SandboxFunctionsKey } from "./keys";
37
+ import { CopilotKitKey, InspectorKey, SandboxFunctionsKey } from "./keys";
38
+ import type { VueInspectorOpenRequest } from "./keys";
38
39
  import {
39
40
  LicenseContextKey,
40
41
  createLicenseContextValue,
@@ -53,7 +54,6 @@ import type {
53
54
 
54
55
  const HEADER_NAME = "X-CopilotCloud-Public-Api-Key";
55
56
  const COPILOT_CLOUD_CHAT_URL = "https://api.cloud.copilotkit.ai/copilotkit/v1";
56
-
57
57
  // Canonical A2UI viewer theme default (matches @copilotkit/a2ui-renderer).
58
58
  // Defined locally to avoid pulling React dependencies from a2ui-renderer.
59
59
  const viewerTheme: Record<string, unknown> = {};
@@ -103,32 +103,34 @@ const props = withDefaults(defineProps<CopilotKitProviderProps>(), {
103
103
  renderCustomMessages: () => [],
104
104
  renderActivityMessages: () => [],
105
105
  openGenerativeUI: undefined,
106
- showDevConsole: false,
107
106
  useSingleEndpoint: undefined,
108
107
  a2ui: undefined,
108
+ enableInspector: undefined,
109
109
  });
110
110
 
111
111
  const shouldRenderInspector = ref(false);
112
112
 
113
- const updateInspectorVisibility = () => {
114
- if (props.showDevConsole === true) {
115
- shouldRenderInspector.value = true;
116
- return;
117
- }
118
- if (props.showDevConsole === "auto") {
119
- if (typeof window === "undefined") {
120
- shouldRenderInspector.value = false;
121
- return;
122
- }
123
- const localhostHosts = new Set(["localhost", "127.0.0.1"]);
124
- shouldRenderInspector.value = localhostHosts.has(window.location.hostname);
125
- return;
126
- }
127
- shouldRenderInspector.value = false;
128
- };
113
+ function updateInspectorVisibility(): void {
114
+ shouldRenderInspector.value = shouldEnableInspector({
115
+ enableInspector: props.enableInspector,
116
+ isBrowser: true,
117
+ isDevelopment: process.env.NODE_ENV === "development",
118
+ });
119
+ }
120
+
121
+ onMounted(updateInspectorVisibility);
122
+ watch(() => props.enableInspector, updateInspectorVisibility);
123
+
124
+ const inspectorOpenRequest = ref<VueInspectorOpenRequest | null>(null);
125
+ const isInspectorEnabled = computed(() => shouldRenderInspector.value);
126
+
127
+ function openInspector(request: VueInspectorOpenRequest) {
128
+ inspectorOpenRequest.value = { ...request };
129
+ }
129
130
 
130
- watch(() => props.showDevConsole, updateInspectorVisibility, {
131
- immediate: true,
131
+ provide(InspectorKey, {
132
+ isInspectorEnabled,
133
+ openInspector,
132
134
  });
133
135
 
134
136
  const initialFrontendTools = props.frontendTools;
@@ -656,7 +658,7 @@ const showExpiringBanner = computed(
656
658
  <CopilotKitInspector
657
659
  v-if="shouldRenderInspector"
658
660
  :core="copilotkit"
659
- :default-anchor="props.inspectorDefaultAnchor"
661
+ :open-request="inspectorOpenRequest"
660
662
  />
661
663
  <!-- License warnings — driven by server-reported status -->
662
664
  <LicenseWarningBanner v-if="showNoLicenseBanner" type="no_license" />