@runtypelabs/persona 4.24.0 → 4.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. package/dist/animations/glyph-cycle.d.cts +1 -1
  2. package/dist/animations/glyph-cycle.d.ts +1 -1
  3. package/dist/animations/{types-Db61aI9J.d.cts → types-BwKTZhg9.d.cts} +14 -0
  4. package/dist/animations/{types-Db61aI9J.d.ts → types-BwKTZhg9.d.ts} +14 -0
  5. package/dist/animations/wipe.d.cts +1 -1
  6. package/dist/animations/wipe.d.ts +1 -1
  7. package/dist/animations-extra.d.cts +14 -0
  8. package/dist/animations-extra.d.ts +14 -0
  9. package/dist/approval-ui-QAKWNFNM.js +1 -0
  10. package/dist/approval-ui.cjs +2 -2
  11. package/dist/approval-ui.d.cts +243 -8
  12. package/dist/approval-ui.d.ts +243 -8
  13. package/dist/approval-ui.js +2 -2
  14. package/dist/{artifacts-ui-IGB5YKLO.js → artifacts-ui-NJGMM27I.js} +1 -1
  15. package/dist/artifacts-ui.cjs +4 -4
  16. package/dist/artifacts-ui.d.cts +243 -8
  17. package/dist/artifacts-ui.d.ts +243 -8
  18. package/dist/artifacts-ui.js +5 -5
  19. package/dist/chunk-2ANTRKTV.js +1 -0
  20. package/dist/chunk-4HPTPUC6.js +1 -0
  21. package/dist/chunk-6V3MNEKB.js +1 -0
  22. package/dist/chunk-HGUCGM3K.js +9 -0
  23. package/dist/chunk-IO5VVUKP.js +3 -0
  24. package/dist/chunk-J4J3Y2P2.js +1 -0
  25. package/dist/chunk-K6HKIP5K.js +1 -0
  26. package/dist/chunk-K7NA7G7J.js +1 -0
  27. package/dist/chunk-MXUTS3LB.js +1 -0
  28. package/dist/chunk-PDPVORUF.js +1 -0
  29. package/dist/chunk-QPPJUSZH.js +1 -0
  30. package/dist/chunk-QRKGQPU7.js +1 -0
  31. package/dist/chunk-S6PBWE75.js +1 -0
  32. package/dist/chunk-T7QM7YMF.js +1 -0
  33. package/dist/chunk-TR2H475E.js +1 -0
  34. package/dist/chunk-UPO4GUFC.js +1 -0
  35. package/dist/chunk-ZC66NAIR.js +1 -0
  36. package/dist/client-history-YPEG45Q4.js +1 -0
  37. package/dist/client-history.js +1 -0
  38. package/dist/client-stream-42FOI3EC.js +4 -0
  39. package/dist/client-stream.js +5 -0
  40. package/dist/codegen.cjs +1 -1
  41. package/dist/codegen.js +1 -1
  42. package/dist/context-mentions-E7HJYWO6.js +161 -0
  43. package/dist/{context-mentions-inline-I2RDEBAK.js → context-mentions-inline-QVESLW55.js} +1 -1
  44. package/dist/context-mentions.cjs +7 -7
  45. package/dist/context-mentions.d.cts +243 -8
  46. package/dist/context-mentions.d.ts +243 -8
  47. package/dist/context-mentions.js +8 -8
  48. package/dist/event-stream-view-FOIJHFQO.js +1 -0
  49. package/dist/event-stream-view.cjs +1 -1
  50. package/dist/event-stream-view.d.cts +246 -31
  51. package/dist/event-stream-view.d.ts +246 -31
  52. package/dist/event-stream-view.js +1 -1
  53. package/dist/forms-ui.d.cts +295 -667
  54. package/dist/forms-ui.d.ts +295 -667
  55. package/dist/history-shell-QDQ44PSE.js +3 -0
  56. package/dist/history-shell.js +3 -0
  57. package/dist/{history-view-BD6OXLNA.js → history-view-NCFBI5GR.js} +2 -2
  58. package/dist/history-view.cjs +2 -2
  59. package/dist/history-view.d.cts +35 -1
  60. package/dist/history-view.d.ts +35 -1
  61. package/dist/history-view.js +2 -2
  62. package/dist/index.cjs +80 -74
  63. package/dist/index.cjs.map +1 -1
  64. package/dist/index.d.cts +301 -738
  65. package/dist/index.d.ts +301 -738
  66. package/dist/index.global.js +3 -215
  67. package/dist/index.global.js.map +1 -1
  68. package/dist/index.js +81 -75
  69. package/dist/index.js.map +1 -1
  70. package/dist/install.global.js +1 -1
  71. package/dist/install.global.js.map +1 -1
  72. package/dist/launcher.global.js +3 -67
  73. package/dist/launcher.global.js.map +1 -1
  74. package/dist/markdown-parsers.js +22 -22
  75. package/dist/runtype-tts-entry-NFBVWR7N.js +1 -0
  76. package/dist/runtype-tts.js +1 -1
  77. package/dist/session-actions-ISSKSI66.js +1 -0
  78. package/dist/session-actions.js +1 -0
  79. package/dist/session-reconnect.d.cts +243 -8
  80. package/dist/session-reconnect.d.ts +243 -8
  81. package/dist/smart-dom-reader.cjs +13 -13
  82. package/dist/smart-dom-reader.d.cts +243 -8
  83. package/dist/smart-dom-reader.d.ts +243 -8
  84. package/dist/smart-dom-reader.js +11 -11
  85. package/dist/theme-editor-preview.cjs +116 -98
  86. package/dist/theme-editor-preview.d.cts +245 -8
  87. package/dist/theme-editor-preview.d.ts +245 -8
  88. package/dist/theme-editor-preview.js +49 -54
  89. package/dist/theme-editor.cjs +2 -2
  90. package/dist/theme-editor.d.cts +244 -23
  91. package/dist/theme-editor.d.ts +244 -23
  92. package/dist/theme-editor.js +2 -2
  93. package/dist/theme-reference.d.cts +14 -0
  94. package/dist/theme-reference.d.ts +14 -0
  95. package/dist/ui-extras-entry-WAYFKVNW.js +3 -0
  96. package/dist/ui-extras.js +72 -0
  97. package/dist/voice-runtime-UOQOFAFY.js +17 -0
  98. package/dist/voice-runtime.cjs +17 -1
  99. package/dist/voice-runtime.d.cts +11643 -192
  100. package/dist/voice-runtime.d.ts +11643 -192
  101. package/dist/voice-runtime.js +17 -1
  102. package/dist/voice-worklet-player.cjs +19 -4
  103. package/dist/voice-worklet-player.d.cts +9 -10
  104. package/dist/voice-worklet-player.d.ts +9 -10
  105. package/dist/voice-worklet-player.js +19 -4
  106. package/dist/webmcp-polyfill.js +1 -1
  107. package/dist/webmcp-runtime-V6ZWW3PI.js +6 -0
  108. package/dist/webmcp-runtime.cjs +2 -2
  109. package/dist/webmcp-runtime.d.cts +1 -33
  110. package/dist/webmcp-runtime.d.ts +1 -33
  111. package/dist/webmcp-runtime.js +2 -2
  112. package/dist/widget.css +1 -1
  113. package/package.json +11 -5
  114. package/src/approval-paused-tool-settle.test.ts +221 -0
  115. package/src/client-approve.test.ts +311 -0
  116. package/src/client-history-eager.ts +9 -0
  117. package/src/client-history-loader.ts +23 -0
  118. package/src/client-history.ts +579 -0
  119. package/src/client-resume.ts +177 -0
  120. package/src/client-stream-eager.ts +12 -0
  121. package/src/client-stream-loader.ts +25 -0
  122. package/src/client-stream.ts +1880 -0
  123. package/src/client.test.ts +31 -1
  124. package/src/client.ts +293 -2607
  125. package/src/components/approval-actions.test.ts +27 -0
  126. package/src/components/approval-actions.ts +27 -3
  127. package/src/components/message-bubble.test.ts +19 -0
  128. package/src/components/message-bubble.ts +2 -0
  129. package/src/components/registry.ts +6 -6
  130. package/src/components/tool-bubble.test.ts +9 -0
  131. package/src/components/tool-bubble.ts +1 -0
  132. package/src/history-shell-bundle.test.ts +54 -0
  133. package/src/history-shell-eager.ts +12 -0
  134. package/src/history-shell-loader.ts +27 -0
  135. package/src/history-shell.ts +2362 -0
  136. package/src/history-view-loader.ts +2 -0
  137. package/src/history-view.ts +3 -0
  138. package/src/index-core.ts +8 -0
  139. package/src/index-global.ts +90 -248
  140. package/src/index.ts +13 -0
  141. package/src/install.ts +6 -4
  142. package/src/internal/runtype-history-provider.test.ts +1 -0
  143. package/src/internal/runtype-history-provider.ts +28 -13
  144. package/src/plugins/registry.ts +8 -8
  145. package/src/session-actions-chunk.test.ts +55 -0
  146. package/src/session-actions-eager.ts +11 -0
  147. package/src/session-actions-loader.ts +37 -0
  148. package/src/session-actions.ts +909 -0
  149. package/src/session-history.test.ts +3 -1
  150. package/src/session.ts +875 -1530
  151. package/src/session.voice.test.ts +1241 -5
  152. package/src/styles/widget.css +58 -0
  153. package/src/theme-editor/state.ts +91 -91
  154. package/src/types.ts +269 -5
  155. package/src/ui-ask-user-sheet.ts +382 -0
  156. package/src/ui-extras-eager.ts +10 -0
  157. package/src/ui-extras-entry.ts +9 -0
  158. package/src/ui-extras-loader.ts +26 -0
  159. package/src/ui.artifact-rail-resize.test.ts +2 -1
  160. package/src/ui.ask-user-chunk.test.ts +93 -0
  161. package/src/ui.history-chunk.test.ts +2 -1
  162. package/src/ui.history-config-provider.test.ts +2 -1
  163. package/src/ui.history-confirm-fallback.test.ts +142 -0
  164. package/src/ui.history-controller.test.ts +2 -1
  165. package/src/ui.history-lifecycle.test.ts +2 -1
  166. package/src/ui.history-render-hooks.test.ts +2 -1
  167. package/src/ui.history-shell.test.ts +2 -1
  168. package/src/ui.rail-overlay.test.ts +2 -1
  169. package/src/ui.rail-resize.test.ts +2 -1
  170. package/src/ui.rail-trigger-pending.test.ts +2 -1
  171. package/src/ui.ts +399 -2770
  172. package/src/ui.voice-prewarm.test.ts +222 -0
  173. package/src/utils/attachment-manager.ts +67 -67
  174. package/src/utils/constants.ts +3 -0
  175. package/src/utils/context-mention-controller.ts +323 -323
  176. package/src/utils/context-mention-manager.ts +40 -40
  177. package/src/utils/context-mention-orchestrator.ts +28 -0
  178. package/src/utils/event-stream-buffer.ts +50 -50
  179. package/src/utils/event-stream-store.ts +43 -43
  180. package/src/utils/throughput-tracker.ts +34 -34
  181. package/src/utils/virtual-scroller.ts +67 -67
  182. package/src/utils/visitor-store.test.ts +50 -0
  183. package/src/utils/visitor-store.ts +23 -5
  184. package/src/voice/__fixtures__/voice-wire/README.md +1 -0
  185. package/src/voice/__fixtures__/voice-wire/client/cancel.json +3 -0
  186. package/src/voice/__fixtures__/voice-wire/client/context.json +4 -0
  187. package/src/voice/__fixtures__/voice-wire/client/delegation_result.json +6 -0
  188. package/src/voice/__fixtures__/voice-wire/client/delegation_update.json +6 -0
  189. package/src/voice/__fixtures__/voice-wire/client/ping.json +3 -0
  190. package/src/voice/__fixtures__/voice-wire/client/playback_progress.json +5 -0
  191. package/src/voice/__fixtures__/voice-wire/client/start.json +3 -0
  192. package/src/voice/__fixtures__/voice-wire/server/artifact.json +11 -0
  193. package/src/voice/__fixtures__/voice-wire/server/attached.json +4 -0
  194. package/src/voice/__fixtures__/voice-wire/server/audio_clear.json +4 -0
  195. package/src/voice/__fixtures__/voice-wire/server/audio_end.json +3 -0
  196. package/src/voice/__fixtures__/voice-wire/server/delegation_cancelled.json +5 -0
  197. package/src/voice/__fixtures__/voice-wire/server/delegation_completed.json +8 -0
  198. package/src/voice/__fixtures__/voice-wire/server/delegation_started.json +15 -0
  199. package/src/voice/__fixtures__/voice-wire/server/error.json +6 -0
  200. package/src/voice/__fixtures__/voice-wire/server/metrics.json +10 -0
  201. package/src/voice/__fixtures__/voice-wire/server/pong.json +3 -0
  202. package/src/voice/__fixtures__/voice-wire/server/session_config.json +16 -0
  203. package/src/voice/__fixtures__/voice-wire/server/transcript_final.json +7 -0
  204. package/src/voice/__fixtures__/voice-wire/server/transcript_interim.json +4 -0
  205. package/src/voice/__fixtures__/voice-wire/server/transcript_partial.json +6 -0
  206. package/src/voice/__fixtures__/voice-wire/server/transcript_update.json +10 -0
  207. package/src/voice/__fixtures__/voice-wire/server/warning.json +5 -0
  208. package/src/voice/audio-playback-manager.test.ts +57 -0
  209. package/src/voice/audio-playback-manager.ts +120 -98
  210. package/src/voice/browser-voice-provider.ts +37 -37
  211. package/src/voice/fallback-speech-engine.ts +22 -16
  212. package/src/voice/keyed-voice-transcript.ts +314 -0
  213. package/src/voice/mic-state-styles.ts +182 -0
  214. package/src/voice/read-aloud-controller.ts +46 -44
  215. package/src/voice/runtype-speech-engine.ts +35 -33
  216. package/src/voice/runtype-voice-provider.ts +856 -164
  217. package/src/voice/session-voice-wiring.ts +266 -0
  218. package/src/voice/voice-delegation.test.ts +71 -0
  219. package/src/voice/voice-delegation.ts +364 -0
  220. package/src/voice/voice-turn-tracker.ts +6 -6
  221. package/src/voice/voice.test.ts +1250 -7
  222. package/src/voice/worklet-playback-engine.test.ts +81 -0
  223. package/src/voice/worklet-playback-engine.ts +21 -3
  224. package/src/voice-runtime-loader.ts +4 -1
  225. package/src/voice-runtime.ts +7 -0
  226. package/src/webmcp-runtime-entry.ts +41 -39
  227. package/dist/approval-ui-3NMYNXBD.js +0 -1
  228. package/dist/chunk-5EIIHQLQ.js +0 -1
  229. package/dist/chunk-7CO4T5KB.js +0 -1
  230. package/dist/chunk-EFJBUH5F.js +0 -1
  231. package/dist/chunk-R2TMIMDI.js +0 -3
  232. package/dist/chunk-UTVLOTWB.js +0 -9
  233. package/dist/context-mentions-45MODWOY.js +0 -161
  234. package/dist/event-stream-view-GL3ADRY2.js +0 -1
  235. package/dist/runtype-tts-entry-UJAEF7NZ.js +0 -1
  236. package/dist/voice-runtime-EFR3R5ES.js +0 -1
  237. package/dist/webmcp-runtime-JI7T4QYF.js +0 -6
@@ -1,4 +1,4 @@
1
- import { S as StreamAnimationPlugin } from './types-Db61aI9J.cjs';
1
+ import { S as StreamAnimationPlugin } from './types-BwKTZhg9.cjs';
2
2
 
3
3
  declare const glyphCycle: StreamAnimationPlugin;
4
4
 
@@ -1,4 +1,4 @@
1
- import { S as StreamAnimationPlugin } from './types-Db61aI9J.js';
1
+ import { S as StreamAnimationPlugin } from './types-BwKTZhg9.js';
2
2
 
3
3
  declare const glyphCycle: StreamAnimationPlugin;
4
4
 
@@ -820,6 +820,11 @@ type AgentWidgetToolCall = {
820
820
  startedAt?: number;
821
821
  completedAt?: number;
822
822
  durationMs?: number;
823
+ /**
824
+ * The call paused for an approval that was granted, and the agent re-ran it
825
+ * as a new tool call: that later call carries the result, this one has none.
826
+ */
827
+ superseded?: boolean;
823
828
  };
824
829
  /**
825
830
  * Represents a tool approval request in the chat conversation.
@@ -841,6 +846,8 @@ type AgentWidgetApproval = {
841
846
  */
842
847
  reason?: string;
843
848
  parameters?: unknown;
849
+ /** The paused tool call this approval gates (`approval_start.toolCallId`). */
850
+ toolCallId?: string;
844
851
  resolvedAt?: number;
845
852
  };
846
853
  type AgentWidgetMessageVariant = "assistant" | "reasoning" | "tool" | "approval";
@@ -940,6 +947,13 @@ type AgentWidgetMessage = {
940
947
  * }
941
948
  */
942
949
  voiceProcessing?: boolean;
950
+ /**
951
+ * Display-only caption of full-duplex voice speech, such as the voice
952
+ * model's own words, or something the visitor said that wasn't submitted
953
+ * as a chat turn. It renders in the transcript but is never sent to the
954
+ * model as conversation.
955
+ */
956
+ voiceCaption?: boolean;
943
957
  /**
944
958
  * Raw structured payload for this message (e.g., JSON action response).
945
959
  * Populated automatically when structured parsers run.
@@ -820,6 +820,11 @@ type AgentWidgetToolCall = {
820
820
  startedAt?: number;
821
821
  completedAt?: number;
822
822
  durationMs?: number;
823
+ /**
824
+ * The call paused for an approval that was granted, and the agent re-ran it
825
+ * as a new tool call: that later call carries the result, this one has none.
826
+ */
827
+ superseded?: boolean;
823
828
  };
824
829
  /**
825
830
  * Represents a tool approval request in the chat conversation.
@@ -841,6 +846,8 @@ type AgentWidgetApproval = {
841
846
  */
842
847
  reason?: string;
843
848
  parameters?: unknown;
849
+ /** The paused tool call this approval gates (`approval_start.toolCallId`). */
850
+ toolCallId?: string;
844
851
  resolvedAt?: number;
845
852
  };
846
853
  type AgentWidgetMessageVariant = "assistant" | "reasoning" | "tool" | "approval";
@@ -940,6 +947,13 @@ type AgentWidgetMessage = {
940
947
  * }
941
948
  */
942
949
  voiceProcessing?: boolean;
950
+ /**
951
+ * Display-only caption of full-duplex voice speech, such as the voice
952
+ * model's own words, or something the visitor said that wasn't submitted
953
+ * as a chat turn. It renders in the transcript but is never sent to the
954
+ * model as conversation.
955
+ */
956
+ voiceCaption?: boolean;
943
957
  /**
944
958
  * Raw structured payload for this message (e.g., JSON action response).
945
959
  * Populated automatically when structured parsers run.
@@ -1,4 +1,4 @@
1
- import { S as StreamAnimationPlugin } from './types-Db61aI9J.cjs';
1
+ import { S as StreamAnimationPlugin } from './types-BwKTZhg9.cjs';
2
2
 
3
3
  declare const wipe: StreamAnimationPlugin;
4
4
 
@@ -1,4 +1,4 @@
1
- import { S as StreamAnimationPlugin } from './types-Db61aI9J.js';
1
+ import { S as StreamAnimationPlugin } from './types-BwKTZhg9.js';
2
2
 
3
3
  declare const wipe: StreamAnimationPlugin;
4
4
 
@@ -820,6 +820,11 @@ type AgentWidgetToolCall = {
820
820
  startedAt?: number;
821
821
  completedAt?: number;
822
822
  durationMs?: number;
823
+ /**
824
+ * The call paused for an approval that was granted, and the agent re-ran it
825
+ * as a new tool call: that later call carries the result, this one has none.
826
+ */
827
+ superseded?: boolean;
823
828
  };
824
829
  /**
825
830
  * Represents a tool approval request in the chat conversation.
@@ -841,6 +846,8 @@ type AgentWidgetApproval = {
841
846
  */
842
847
  reason?: string;
843
848
  parameters?: unknown;
849
+ /** The paused tool call this approval gates (`approval_start.toolCallId`). */
850
+ toolCallId?: string;
844
851
  resolvedAt?: number;
845
852
  };
846
853
  type AgentWidgetMessageVariant = "assistant" | "reasoning" | "tool" | "approval";
@@ -940,6 +947,13 @@ type AgentWidgetMessage = {
940
947
  * }
941
948
  */
942
949
  voiceProcessing?: boolean;
950
+ /**
951
+ * Display-only caption of full-duplex voice speech, such as the voice
952
+ * model's own words, or something the visitor said that wasn't submitted
953
+ * as a chat turn. It renders in the transcript but is never sent to the
954
+ * model as conversation.
955
+ */
956
+ voiceCaption?: boolean;
943
957
  /**
944
958
  * Raw structured payload for this message (e.g., JSON action response).
945
959
  * Populated automatically when structured parsers run.
@@ -820,6 +820,11 @@ type AgentWidgetToolCall = {
820
820
  startedAt?: number;
821
821
  completedAt?: number;
822
822
  durationMs?: number;
823
+ /**
824
+ * The call paused for an approval that was granted, and the agent re-ran it
825
+ * as a new tool call: that later call carries the result, this one has none.
826
+ */
827
+ superseded?: boolean;
823
828
  };
824
829
  /**
825
830
  * Represents a tool approval request in the chat conversation.
@@ -841,6 +846,8 @@ type AgentWidgetApproval = {
841
846
  */
842
847
  reason?: string;
843
848
  parameters?: unknown;
849
+ /** The paused tool call this approval gates (`approval_start.toolCallId`). */
850
+ toolCallId?: string;
844
851
  resolvedAt?: number;
845
852
  };
846
853
  type AgentWidgetMessageVariant = "assistant" | "reasoning" | "tool" | "approval";
@@ -940,6 +947,13 @@ type AgentWidgetMessage = {
940
947
  * }
941
948
  */
942
949
  voiceProcessing?: boolean;
950
+ /**
951
+ * Display-only caption of full-duplex voice speech, such as the voice
952
+ * model's own words, or something the visitor said that wasn't submitted
953
+ * as a chat turn. It renders in the transcript but is never sent to the
954
+ * model as conversation.
955
+ */
956
+ voiceCaption?: boolean;
943
957
  /**
944
958
  * Raw structured payload for this message (e.g., JSON action response).
945
959
  * Populated automatically when structured parsers run.
@@ -0,0 +1 @@
1
+ import{a as D,g as P}from"./chunk-NQLDCJAP.js";import{b as $,c as z}from"./chunk-Q735PSZL.js";import{a as h}from"./chunk-7NQ4ZTHF.js";import{a as r}from"./chunk-76IELU7F.js";var K=()=>{},R=t=>{K=t.webMcpToolTitle},O=t=>K(t);import{ChevronDown as ee,ChevronUp as te,ShieldAlert as oe,ShieldCheck as _,ShieldX as F}from"lucide";var H=t=>{let a=(t.startsWith(D)?t.slice(D.length):t).replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[_\-\s.]+/).filter(Boolean);if(a.length===0)return t;let o=a.join(" ").toLowerCase();return o.charAt(0).toUpperCase()+o.slice(1)},X=t=>t?.approval!==!1?t?.approval:void 0,j=(t,n,a)=>{let o=X(a)?.detailsDisplay??"collapsed";return n.get(t)??o==="expanded"},V=(t,n,a)=>{let o=X(a);t.setAttribute("aria-expanded",n?"true":"false");let e=t.querySelector("[data-approval-details-label]");e&&(e.textContent=n?o?.hideDetailsLabel??"Hide details":o?.showDetailsLabel??"Show details");let m=t.querySelector("[data-approval-details-chevron]");if(m){m.innerHTML="";let c=h(n?te:ee,14,"currentColor",2);c&&m.appendChild(c)}},G=(t,n,a,o=new Map)=>{let e=n.querySelector('button[data-bubble-type="approval"]'),m=n.querySelector("[data-approval-details]");if(!e||!m)return;let c=j(t,o,a);V(e,c,a),m.style.display=c?"":"none"};var Z=(t,n,a=new Map)=>{let o=t.approval,e=n?.approval!==!1?n?.approval:void 0,m=o?.status==="pending",c=r("div",["persona-approval-bubble","persona-w-full","persona-rounded-2xl","persona-border","persona-shadow-sm","persona-overflow-hidden"].join(" "));if(c.id=`bubble-${t.id}`,c.setAttribute("data-message-id",t.id),c.style.backgroundColor=e?.backgroundColor??"var(--persona-approval-bg)",c.style.borderColor=e?.borderColor??"var(--persona-approval-border)",c.style.boxShadow=e?.shadow!==void 0?e.shadow.trim()===""?"none":e.shadow:"var(--persona-approval-shadow)",!o)return c;let x=r("div","persona-flex persona-items-start persona-gap-3 persona-px-4 persona-py-3"),g=r("div","persona-flex-shrink-0 persona-mt-0.5");g.setAttribute("data-approval-icon","true");let b=o.status==="denied"?F:o.status==="timeout"?oe:_,L=o.status==="approved"?"var(--persona-feedback-success, var(--persona-palette-colors-success-600))":o.status==="denied"?"var(--persona-feedback-error, var(--persona-palette-colors-error-600))":o.status==="timeout"?"var(--persona-feedback-warning, var(--persona-palette-colors-warning-600))":e?.titleColor??"currentColor",T=h(b,20,L,2);T&&g.appendChild(T);let v=r("div","persona-flex-1 persona-min-w-0"),f=r("div","persona-flex persona-items-center persona-gap-2"),y=r("span","persona-text-sm persona-font-medium persona-text-persona-primary");if(e?.titleColor&&(y.style.color=e.titleColor),y.textContent=e?.title??"Approval Required",f.appendChild(y),!m){let i=r("span","persona-inline-flex persona-items-center persona-px-2 persona-py-0.5 persona-rounded-full persona-text-xs persona-font-medium");i.setAttribute("data-approval-status",o.status),o.status==="approved"?(i.style.backgroundColor="var(--persona-palette-colors-success-100)",i.style.color="var(--persona-palette-colors-success-700)",i.textContent="Approved"):o.status==="denied"?(i.style.backgroundColor="var(--persona-palette-colors-error-100)",i.style.color="var(--persona-palette-colors-error-700)",i.textContent="Denied"):o.status==="timeout"&&(i.style.backgroundColor="var(--persona-palette-colors-warning-100)",i.style.color="var(--persona-palette-colors-warning-700)",i.textContent="Timeout"),f.appendChild(i)}v.appendChild(f);let B=o.toolType==="webmcp"||o.toolName.startsWith(D)?O(o.toolName):void 0,C=e?.formatDescription?.({toolName:o.toolName,toolType:o.toolType,description:o.description,parameters:o.parameters,...B?{displayTitle:B}:{},...o.reason?{reason:o.reason}:{}}),W=!o.toolName,I=C||(W?o.description:`The assistant wants to use \u201C${B??H(o.toolName)}\u201D.`),w=r("p","persona-text-sm persona-mt-0.5 persona-text-persona-muted");if(w.setAttribute("data-approval-summary","true"),e?.descriptionColor&&(w.style.color=e.descriptionColor),w.textContent=I,v.appendChild(w),o.reason){let i=r("p","persona-text-sm persona-mt-1 persona-text-persona-muted");i.setAttribute("data-approval-reason","true"),e?.reasonColor?i.style.color=e.reasonColor:e?.descriptionColor&&(i.style.color=e.descriptionColor);let d=r("span","persona-font-medium");d.textContent=`${e?.reasonLabel??"Agent's stated reason:"} `,i.appendChild(d),i.appendChild(document.createTextNode(o.reason)),v.appendChild(i)}let M=e?.detailsDisplay??"collapsed",E=!!o.description&&!W,N=E||!!o.parameters;if(M!=="hidden"&&N){let i=j(t.id,a,n),d=r("button","persona-inline-flex persona-items-center persona-gap-1 persona-mt-1 persona-p-0 persona-border-none persona-bg-transparent persona-text-xs persona-font-medium persona-cursor-pointer persona-text-persona-muted");d.type="button",d.setAttribute("data-expand-header","true"),d.setAttribute("data-bubble-type","approval"),e?.descriptionColor&&(d.style.color=e.descriptionColor);let s=r("span");s.setAttribute("data-approval-details-label","true");let l=r("span","persona-inline-flex persona-items-center");l.setAttribute("data-approval-details-chevron","true"),d.append(s,l),V(d,i,n),v.appendChild(d);let p=r("div");if(p.setAttribute("data-approval-details","true"),p.style.display=i?"":"none",E){let u=r("p","persona-text-sm persona-mt-1 persona-text-persona-muted");e?.descriptionColor&&(u.style.color=e.descriptionColor),u.textContent=o.description,p.appendChild(u)}if(o.parameters){let u=r("pre","persona-mt-2 persona-text-xs persona-p-2 persona-rounded persona-overflow-x-auto persona-max-h-32 persona-bg-persona-container persona-text-persona-primary");e?.parameterBackgroundColor&&(u.style.backgroundColor=e.parameterBackgroundColor),e?.parameterTextColor&&(u.style.color=e.parameterTextColor),u.style.fontSize="0.75rem",u.style.lineHeight="1rem",u.textContent=P(o.parameters),p.appendChild(u)}v.appendChild(p)}if(m){let i=r("div","persona-flex persona-gap-2 persona-mt-2");i.setAttribute("data-approval-buttons","true");let d=r("button","persona-inline-flex persona-items-center persona-px-3 persona-py-1.5 persona-rounded-md persona-text-xs persona-font-medium persona-border-none persona-cursor-pointer");d.type="button",d.style.backgroundColor=e?.approveButtonColor??"var(--persona-approval-approve-bg)",d.style.color=e?.approveButtonTextColor??"var(--persona-button-primary-fg)",d.setAttribute("data-approval-action","approve");let s=h(_,14,e?.approveButtonTextColor??"var(--persona-button-primary-fg)",2);s&&(s.style.marginRight="4px",d.appendChild(s));let l=document.createTextNode(e?.approveLabel??"Approve");d.appendChild(l);let p=r("button","persona-inline-flex persona-items-center persona-px-3 persona-py-1.5 persona-rounded-md persona-text-xs persona-font-medium persona-cursor-pointer");p.type="button",p.style.backgroundColor=e?.denyButtonColor??"transparent",p.style.color=e?.denyButtonTextColor??"var(--persona-feedback-error, var(--persona-palette-colors-error-600))",p.style.border=`1px solid ${e?.denyButtonTextColor?e.denyButtonTextColor:"var(--persona-palette-colors-error-200)"}`,p.setAttribute("data-approval-action","deny");let u=h(F,14,e?.denyButtonTextColor??"var(--persona-feedback-error, var(--persona-palette-colors-error-600))",2);u&&(u.style.marginRight="4px",p.appendChild(u));let A=document.createTextNode(e?.denyLabel??"Deny");p.appendChild(A),i.append(d,p),v.appendChild(i)}return x.append(g,v),c.appendChild(x),c};import{Ban as ne,ChevronDown as J,ShieldCheck as re}from"lucide";var ae=()=>({keyHandlers:new Map,popovers:new Map,pendingOrder:[],latestPendingApprovalId:null}),Q=(t,n)=>{let a=t.keyHandlers.get(n);a&&(document.removeEventListener("keydown",a),t.keyHandlers.delete(n));let o=t.popovers.get(n);o&&(o.destroy(),t.popovers.delete(n))},k=(t,n)=>{Q(t,n);let a=t.pendingOrder.indexOf(n);a!==-1&&t.pendingOrder.splice(a,1),t.latestPendingApprovalId===n&&(t.latestPendingApprovalId=t.pendingOrder.length?t.pendingOrder[t.pendingOrder.length-1]:null)},se=t=>t?.approval!==!1?t?.approval:void 0,pe=(t,n,a)=>{let o=a?.detailsDisplay??"collapsed";return n.get(t)??o==="expanded"},q=t=>{let n=r("span","persona-approval-kbd");return n.textContent=t,n},le=(t,n)=>{let a=r("span","persona-approval-title");n?.titleColor&&(a.style.color=n.titleColor);let e=t.toolType==="webmcp"||t.toolName.startsWith(D)?O(t.toolName):void 0,m=n?.formatDescription?.({toolName:t.toolName,toolType:t.toolType,description:t.description??"",parameters:t.parameters,...e?{displayTitle:e}:{},...t.reason?{reason:t.reason}:{}});if(m)return a.textContent=m,a;let c=e??H(t.toolName),x=t.toolType&&t.toolType!=="webmcp"?t.toolType:null;a.append("The assistant wants to use ");let g=document.createElement("strong");if(g.textContent=c,a.appendChild(g),x){a.append(" from ");let b=document.createElement("strong");b.textContent=x,a.appendChild(b)}return a},ie=t=>{let n=r("div","persona-approval-resolved"),a=h(ne,15,"currentColor",2);a&&n.appendChild(a);let o=r("span","persona-approval-resolved-name");return o.textContent=t.toolName?H(t.toolName):"Tool",n.append(o,document.createTextNode(t.status==="timeout"?" timed out":" denied")),n},de=(t,n,a,o,e,m,c,x,g=!1)=>{let b=r("div","persona-approval-card persona-shadow-sm");b.id=`bubble-${a.id}`,b.setAttribute("data-message-id",a.id),b.setAttribute("data-bubble-type","approval"),e?.backgroundColor&&(b.style.background=e.backgroundColor),e?.borderColor&&(b.style.borderColor=e.borderColor),e?.shadow!==void 0&&(b.style.boxShadow=e.shadow.trim()===""?"none":e.shadow);let L=e?.detailsDisplay??"collapsed",T=!!o.description&&L!=="hidden",v=o.parameters!=null&&L!=="hidden"&&!g,f=T||v,y=f&&pe(a.id,n,e),U=e?.showDetailsLabel??"Show details",B=e?.hideDetailsLabel??"Hide details",C=r("button","persona-approval-head");C.type="button",f?(C.setAttribute("data-action","toggle-params"),C.setAttribute("aria-expanded",y?"true":"false"),C.setAttribute("aria-label",y?B:U)):C.setAttribute("data-static","true");let W=r("span","persona-approval-logo"),I=h(re,16,"currentColor",2);I&&W.appendChild(I),C.appendChild(W);let w=le(o,e);if(f){let s=r("span","persona-approval-toggle");s.setAttribute("aria-hidden","true");let l=h(J,14,"currentColor",2);l&&s.appendChild(l),w.append(" "),w.appendChild(s)}C.appendChild(w),b.appendChild(C);let M=r("div","persona-approval-body");if(f){let s=r("div","persona-approval-details");if(s.setAttribute("data-role","params"),s.hidden=!y,T){let l=r("p","persona-approval-desc");e?.descriptionColor&&(l.style.color=e.descriptionColor),l.textContent=o.description,s.appendChild(l)}if(v){let l=r("pre","persona-approval-params");e?.parameterBackgroundColor&&(l.style.background=e.parameterBackgroundColor),e?.parameterTextColor&&(l.style.color=e.parameterTextColor),l.textContent=P(o.parameters),s.appendChild(l)}M.appendChild(s)}if(g){let s=r("div","persona-approval-call");s.setAttribute("data-role","raw-call");let l=r("code","persona-approval-tool-name");if(l.textContent=o.toolName,s.appendChild(l),o.parameters!=null){let p=r("pre","persona-approval-params");e?.parameterBackgroundColor&&(p.style.background=e.parameterBackgroundColor),e?.parameterTextColor&&(p.style.color=e.parameterTextColor),p.textContent=P(o.parameters),s.appendChild(p)}M.appendChild(s)}if(o.reason){let s=r("p","persona-approval-reason");e?.reasonColor?s.style.color=e.reasonColor:e?.descriptionColor&&(s.style.color=e.descriptionColor);let l=r("span","persona-approval-reason-label");l.textContent=`${e?.reasonLabel??"Agent's stated reason:"} `,s.append(l,document.createTextNode(o.reason)),M.appendChild(s)}let E=r("div","persona-approval-actions"),N=null,i=s=>{e?.approveButtonColor&&(s.style.background=e.approveButtonColor),e?.approveButtonTextColor&&(s.style.color=e.approveButtonTextColor)},d=r("button","persona-approval-deny");if(d.type="button",d.setAttribute("data-action","deny"),e?.denyButtonColor&&(d.style.background=e.denyButtonColor),e?.denyButtonTextColor&&(d.style.color=e.denyButtonTextColor),d.append(e?.denyLabel??"Deny"),x){let s=r("div","persona-approval-split"),l=r("button","persona-approval-primary");l.type="button",l.setAttribute("data-action","always"),i(l),l.append(e?.approveLabel??"Always allow",q("\u23CE"));let p=r("button","persona-approval-caret");p.type="button",p.setAttribute("data-action","toggle-menu"),p.setAttribute("aria-label","More options"),i(p);let u=h(J,15,"currentColor",2);u&&p.appendChild(u),s.append(l,p),E.append(s,d),d.append(q("Esc"));let A=r("div","persona-approval-menu"),S=r("button","persona-approval-menu-item");S.type="button",S.append("Allow once",q("\u2318\u23CE")),A.appendChild(S),N=$({anchor:s,content:A,placement:"bottom-start",matchAnchorWidth:!0}),t.popovers.set(a.id,N),S.addEventListener("click",()=>{k(t,a.id),m()})}else{let s=r("button","persona-approval-primary persona-approval-primary--solo");s.type="button",s.setAttribute("data-action","allow"),i(s),s.append(e?.approveLabel??"Allow"),E.append(s,d)}return M.appendChild(E),b.appendChild(M),b.addEventListener("click",s=>{let l=s.target instanceof Element?s.target.closest("[data-action]"):null;if(!l)return;let p=l.getAttribute("data-action");if(p==="toggle-params"){let u=b.querySelector('[data-role="params"]');if(u){let A=u.hidden;u.hidden=!A,C.setAttribute("aria-expanded",A?"true":"false"),C.setAttribute("aria-label",A?B:U),n.set(a.id,A)}return}if(p==="toggle-menu"){N?.toggle();return}if(p==="always"){k(t,a.id),m({remember:!0});return}if(p==="allow"){k(t,a.id),m();return}if(p==="deny"){k(t,a.id),c();return}}),b},Y=(t=new Map)=>{let n=ae();return{plugin:{id:"persona-built-in-approval",renderApproval:({message:e,approve:m,deny:c,config:x})=>{let g=e?.approval;if(!g)return null;let b=se(x);if(g.status!=="pending"){if(k(n,e.id),g.status==="approved"){let f=document.createElement("div");return f.style.display="none",f}return ie(g)}Q(n,e.id);let L=!!x?.clientToken,T=b?.enableAlwaysAllow===!0,v=de(n,t,e,g,b,m,c,T,L);if(T){n.pendingOrder.includes(e.id)||n.pendingOrder.push(e.id),n.latestPendingApprovalId=n.pendingOrder[n.pendingOrder.length-1];let f=y=>{z(y)||e.id===n.latestPendingApprovalId&&(y.key!=="Escape"&&y.key!=="Enter"||(y.preventDefault(),y.stopImmediatePropagation(),k(n,e.id),y.key==="Escape"?c():y.metaKey||y.ctrlKey?m():m({remember:!0})))};n.keyHandlers.set(e.id,f),document.addEventListener("keydown",f)}return v}},teardown:()=>{for(let e of[...n.keyHandlers.keys(),...n.popovers.keys()])k(n,e);n.latestPendingApprovalId=null}}};export{Z as createApprovalBubble,Y as createBuiltInApprovalPlugin,H as humanizeToolName,R as initApprovalUi,G as updateApprovalDetailsUI};
@@ -1,5 +1,5 @@
1
- "use strict";var xe=Object.create;var G=Object.defineProperty;var ce=Object.getOwnPropertyDescriptor;var ge=Object.getOwnPropertyNames;var he=Object.getPrototypeOf,Ce=Object.prototype.hasOwnProperty;var ae=(e,a)=>()=>(a||e((a={exports:{}}).exports,a),a.exports),Se=(e,a)=>{for(var o in a)G(e,o,{get:a[o],enumerable:!0})},oe=(e,a,o,t)=>{if(a&&typeof a=="object"||typeof a=="function")for(let r of ge(a))!Ce.call(e,r)&&r!==o&&G(e,r,{get:()=>a[r],enumerable:!(t=ce(a,r))||t.enumerable});return e};var ye=(e,a,o)=>(o=e!=null?xe(he(e)):{},oe(a||!e||!e.__esModule?G(o,"default",{value:e,enumerable:!0}):o,e)),Ae=e=>oe(G({},"__esModule",{value:!0}),e);var J=ae(f=>{"use strict";Object.defineProperty(f,"__esModule",{value:!0});f.Allow=f.ALL=f.COLLECTION=f.ATOM=f.SPECIAL=f.INF=f._INFINITY=f.INFINITY=f.NAN=f.BOOL=f.NULL=f.OBJ=f.ARR=f.NUM=f.STR=void 0;f.STR=1;f.NUM=2;f.ARR=4;f.OBJ=8;f.NULL=16;f.BOOL=32;f.NAN=64;f.INFINITY=128;f._INFINITY=256;f.INF=f.INFINITY|f._INFINITY;f.SPECIAL=f.NULL|f.BOOL|f.INF|f.NAN;f.ATOM=f.STR|f.NUM|f.SPECIAL;f.COLLECTION=f.ARR|f.OBJ;f.ALL=f.ATOM|f.COLLECTION;f.Allow={STR:f.STR,NUM:f.NUM,ARR:f.ARR,OBJ:f.OBJ,NULL:f.NULL,BOOL:f.BOOL,NAN:f.NAN,INFINITY:f.INFINITY,_INFINITY:f._INFINITY,INF:f.INF,SPECIAL:f.SPECIAL,ATOM:f.ATOM,COLLECTION:f.COLLECTION,ALL:f.ALL};f.default=f.Allow});var le=ae(w=>{"use strict";var be=w&&w.__createBinding||(Object.create?(function(e,a,o,t){t===void 0&&(t=o);var r=Object.getOwnPropertyDescriptor(a,o);(!r||("get"in r?!a.__esModule:r.writable||r.configurable))&&(r={enumerable:!0,get:function(){return a[o]}}),Object.defineProperty(e,t,r)}):(function(e,a,o,t){t===void 0&&(t=o),e[t]=a[o]})),we=w&&w.__exportStar||function(e,a){for(var o in e)o!=="default"&&!Object.prototype.hasOwnProperty.call(a,o)&&be(a,e,o)};Object.defineProperty(w,"__esModule",{value:!0});w.Allow=w.MalformedJSON=w.PartialJSON=w.parseJSON=w.parse=void 0;var M=J();Object.defineProperty(w,"Allow",{enumerable:!0,get:function(){return M.Allow}});we(J(),w);var V=class extends Error{};w.PartialJSON=V;var z=class extends Error{};w.MalformedJSON=z;function fe(e,a=M.Allow.ALL){if(typeof e!="string")throw new TypeError(`expecting str, got ${typeof e}`);if(!e.trim())throw new Error(`${e} is empty`);return Te(e.trim(),a)}w.parseJSON=fe;var Te=(e,a)=>{let o=e.length,t=0,r=s=>{throw new V(`${s} at position ${t}`)},p=s=>{throw new z(`${s} at position ${t}`)},m=()=>(T(),t>=o&&r("Unexpected end of input"),e[t]==='"'?S():e[t]==="{"?i():e[t]==="["?y():e.substring(t,t+4)==="null"||M.Allow.NULL&a&&o-t<4&&"null".startsWith(e.substring(t))?(t+=4,null):e.substring(t,t+4)==="true"||M.Allow.BOOL&a&&o-t<4&&"true".startsWith(e.substring(t))?(t+=4,!0):e.substring(t,t+5)==="false"||M.Allow.BOOL&a&&o-t<5&&"false".startsWith(e.substring(t))?(t+=5,!1):e.substring(t,t+8)==="Infinity"||M.Allow.INFINITY&a&&o-t<8&&"Infinity".startsWith(e.substring(t))?(t+=8,1/0):e.substring(t,t+9)==="-Infinity"||M.Allow._INFINITY&a&&1<o-t&&o-t<9&&"-Infinity".startsWith(e.substring(t))?(t+=9,-1/0):e.substring(t,t+3)==="NaN"||M.Allow.NAN&a&&o-t<3&&"NaN".startsWith(e.substring(t))?(t+=3,NaN):P()),S=()=>{let s=t,n=!1;for(t++;t<o&&(e[t]!=='"'||n&&e[t-1]==="\\");)n=e[t]==="\\"?!n:!1,t++;if(e.charAt(t)=='"')try{return JSON.parse(e.substring(s,++t-Number(n)))}catch(C){p(String(C))}else if(M.Allow.STR&a)try{return JSON.parse(e.substring(s,t-Number(n))+'"')}catch{return JSON.parse(e.substring(s,e.lastIndexOf("\\"))+'"')}r("Unterminated string literal")},i=()=>{t++,T();let s={};try{for(;e[t]!=="}";){if(T(),t>=o&&M.Allow.OBJ&a)return s;let n=S();T(),t++;try{let C=m();s[n]=C}catch(C){if(M.Allow.OBJ&a)return s;throw C}T(),e[t]===","&&t++}}catch{if(M.Allow.OBJ&a)return s;r("Expected '}' at end of object")}return t++,s},y=()=>{t++;let s=[];try{for(;e[t]!=="]";)s.push(m()),T(),e[t]===","&&t++}catch{if(M.Allow.ARR&a)return s;r("Expected ']' at end of array")}return t++,s},P=()=>{if(t===0){e==="-"&&p("Not sure what '-' is");try{return JSON.parse(e)}catch(n){if(M.Allow.NUM&a)try{return JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch{}p(String(n))}}let s=t;for(e[t]==="-"&&t++;e[t]&&",]}".indexOf(e[t])===-1;)t++;t==o&&!(M.Allow.NUM&a)&&r("Unterminated number literal");try{return JSON.parse(e.substring(s,t))}catch{e.substring(s,t)==="-"&&r("Not sure what '-' is");try{return JSON.parse(e.substring(s,e.lastIndexOf("e")))}catch(C){p(String(C))}}},T=()=>{for(;t<o&&`
2
- \r `.includes(e[t]);)t++};return m()},Me=fe;w.parse=Me});var Fe={};Se(Fe,{createApprovalBubble:()=>ee,createBuiltInApprovalPlugin:()=>re,humanizeToolName:()=>N,initApprovalUi:()=>$,updateApprovalDetailsUI:()=>j});module.exports=Ae(Fe);var d=(e,a)=>{let o=document.createElement(e);return a&&(o.className=a),o};var K=ye(le(),1);var X=e=>{if(e===null)return"null";if(e===void 0)return"";if(typeof e=="string")return e;if(typeof e=="number"||typeof e=="boolean")return String(e);try{return JSON.stringify(e,null,2)}catch{return String(e)}};var se=()=>{},$=e=>{se=e.webMcpToolTitle},_=e=>se(e);var Z=[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M4.929 4.929 19.07 19.071"}]];var q=[["path",{d:"m6 9 6 6 6-6"}]];var Q=[["path",{d:"m18 15-6-6-6 6"}]];var Y=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"}],["path",{d:"M12 8v4"}],["path",{d:"M12 16h.01"}]];var U=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"}],["path",{d:"m9 12 2 2 4-4"}]];var W=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"}],["path",{d:"m14.5 9.5-5 5"}],["path",{d:"m9.5 9.5 5 5"}]];var R=(e,a=24,o="currentColor",t=2)=>{if(!Array.isArray(e))return null;let r=document.createElementNS("http://www.w3.org/2000/svg","svg");return r.setAttribute("width",String(a)),r.setAttribute("height",String(a)),r.setAttribute("viewBox","0 0 24 24"),r.setAttribute("fill","none"),r.setAttribute("stroke",o),r.setAttribute("stroke-width",String(t)),r.setAttribute("stroke-linecap","round"),r.setAttribute("stroke-linejoin","round"),r.setAttribute("aria-hidden","true"),e.forEach(p=>{if(!Array.isArray(p)||p.length<2)return;let m=p[0],S=p[1];if(!S)return;let i=document.createElementNS("http://www.w3.org/2000/svg",m);Object.entries(S).forEach(([y,P])=>{y!=="stroke"&&i.setAttribute(y,String(P))}),r.appendChild(i)}),r};var I="webmcp:";var N=e=>{let o=(e.startsWith(I)?e.slice(I.length):e).replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[_\-\s.]+/).filter(Boolean);if(o.length===0)return e;let t=o.join(" ").toLowerCase();return t.charAt(0).toUpperCase()+t.slice(1)},de=e=>e?.approval!==!1?e?.approval:void 0,ue=(e,a,o)=>{let t=de(o)?.detailsDisplay??"collapsed";return a.get(e)??t==="expanded"},ne=(e,a,o)=>{let t=de(o);e.setAttribute("aria-expanded",a?"true":"false");let r=e.querySelector("[data-approval-details-label]");r&&(r.textContent=a?t?.hideDetailsLabel??"Hide details":t?.showDetailsLabel??"Show details");let p=e.querySelector("[data-approval-details-chevron]");if(p){p.innerHTML="";let m=R(a?Q:q,14,"currentColor",2);m&&p.appendChild(m)}},j=(e,a,o,t=new Map)=>{let r=a.querySelector('button[data-bubble-type="approval"]'),p=a.querySelector("[data-approval-details]");if(!r||!p)return;let m=ue(e,t,o);ne(r,m,o),p.style.display=m?"":"none"};var ee=(e,a,o=new Map)=>{let t=e.approval,r=a?.approval!==!1?a?.approval:void 0,p=t?.status==="pending",m=d("div",["persona-approval-bubble","persona-w-full","persona-rounded-2xl","persona-border","persona-shadow-sm","persona-overflow-hidden"].join(" "));if(m.id=`bubble-${e.id}`,m.setAttribute("data-message-id",e.id),m.style.backgroundColor=r?.backgroundColor??"var(--persona-approval-bg)",m.style.borderColor=r?.borderColor??"var(--persona-approval-border)",m.style.boxShadow=r?.shadow!==void 0?r.shadow.trim()===""?"none":r.shadow:"var(--persona-approval-shadow)",!t)return m;let S=d("div","persona-flex persona-items-start persona-gap-3 persona-px-4 persona-py-3"),i=d("div","persona-flex-shrink-0 persona-mt-0.5");i.setAttribute("data-approval-icon","true");let y=t.status==="denied"?W:t.status==="timeout"?Y:U,P=t.status==="approved"?"var(--persona-feedback-success, var(--persona-palette-colors-success-600))":t.status==="denied"?"var(--persona-feedback-error, var(--persona-palette-colors-error-600))":t.status==="timeout"?"var(--persona-feedback-warning, var(--persona-palette-colors-warning-600))":r?.titleColor??"currentColor",T=R(y,20,P,2);T&&i.appendChild(T);let s=d("div","persona-flex-1 persona-min-w-0"),n=d("div","persona-flex persona-items-center persona-gap-2"),C=d("span","persona-text-sm persona-font-medium persona-text-persona-primary");if(r?.titleColor&&(C.style.color=r.titleColor),C.textContent=r?.title??"Approval Required",n.appendChild(C),!p){let u=d("span","persona-inline-flex persona-items-center persona-px-2 persona-py-0.5 persona-rounded-full persona-text-xs persona-font-medium");u.setAttribute("data-approval-status",t.status),t.status==="approved"?(u.style.backgroundColor="var(--persona-palette-colors-success-100)",u.style.color="var(--persona-palette-colors-success-700)",u.textContent="Approved"):t.status==="denied"?(u.style.backgroundColor="var(--persona-palette-colors-error-100)",u.style.color="var(--persona-palette-colors-error-700)",u.textContent="Denied"):t.status==="timeout"&&(u.style.backgroundColor="var(--persona-palette-colors-warning-100)",u.style.color="var(--persona-palette-colors-warning-700)",u.textContent="Timeout"),n.appendChild(u)}s.appendChild(n);let A=t.toolType==="webmcp"||t.toolName.startsWith(I)?_(t.toolName):void 0,c=r?.formatDescription?.({toolName:t.toolName,toolType:t.toolType,description:t.description,parameters:t.parameters,...A?{displayTitle:A}:{},...t.reason?{reason:t.reason}:{}}),L=!t.toolName,v=c||(L?t.description:`The assistant wants to use \u201C${A??N(t.toolName)}\u201D.`),k=d("p","persona-text-sm persona-mt-0.5 persona-text-persona-muted");if(k.setAttribute("data-approval-summary","true"),r?.descriptionColor&&(k.style.color=r.descriptionColor),k.textContent=v,s.appendChild(k),t.reason){let u=d("p","persona-text-sm persona-mt-1 persona-text-persona-muted");u.setAttribute("data-approval-reason","true"),r?.reasonColor?u.style.color=r.reasonColor:r?.descriptionColor&&(u.style.color=r.descriptionColor);let l=d("span","persona-font-medium");l.textContent=`${r?.reasonLabel??"Agent's stated reason:"} `,u.appendChild(l),u.appendChild(document.createTextNode(t.reason)),s.appendChild(u)}let O=r?.detailsDisplay??"collapsed",D=!!t.description&&!L,B=D||!!t.parameters;if(O!=="hidden"&&B){let u=ue(e.id,o,a),l=d("button","persona-inline-flex persona-items-center persona-gap-1 persona-mt-1 persona-p-0 persona-border-none persona-bg-transparent persona-text-xs persona-font-medium persona-cursor-pointer persona-text-persona-muted");l.type="button",l.setAttribute("data-expand-header","true"),l.setAttribute("data-bubble-type","approval"),r?.descriptionColor&&(l.style.color=r.descriptionColor);let x=d("span");x.setAttribute("data-approval-details-label","true");let b=d("span","persona-inline-flex persona-items-center");b.setAttribute("data-approval-details-chevron","true"),l.append(x,b),ne(l,u,a),s.appendChild(l);let h=d("div");if(h.setAttribute("data-approval-details","true"),h.style.display=u?"":"none",D){let g=d("p","persona-text-sm persona-mt-1 persona-text-persona-muted");r?.descriptionColor&&(g.style.color=r.descriptionColor),g.textContent=t.description,h.appendChild(g)}if(t.parameters){let g=d("pre","persona-mt-2 persona-text-xs persona-p-2 persona-rounded persona-overflow-x-auto persona-max-h-32 persona-bg-persona-container persona-text-persona-primary");r?.parameterBackgroundColor&&(g.style.backgroundColor=r.parameterBackgroundColor),r?.parameterTextColor&&(g.style.color=r.parameterTextColor),g.style.fontSize="0.75rem",g.style.lineHeight="1rem",g.textContent=X(t.parameters),h.appendChild(g)}s.appendChild(h)}if(p){let u=d("div","persona-flex persona-gap-2 persona-mt-2");u.setAttribute("data-approval-buttons","true");let l=d("button","persona-inline-flex persona-items-center persona-px-3 persona-py-1.5 persona-rounded-md persona-text-xs persona-font-medium persona-border-none persona-cursor-pointer");l.type="button",l.style.backgroundColor=r?.approveButtonColor??"var(--persona-approval-approve-bg)",l.style.color=r?.approveButtonTextColor??"var(--persona-button-primary-fg)",l.setAttribute("data-approval-action","approve");let x=R(U,14,r?.approveButtonTextColor??"var(--persona-button-primary-fg)",2);x&&(x.style.marginRight="4px",l.appendChild(x));let b=document.createTextNode(r?.approveLabel??"Approve");l.appendChild(b);let h=d("button","persona-inline-flex persona-items-center persona-px-3 persona-py-1.5 persona-rounded-md persona-text-xs persona-font-medium persona-cursor-pointer");h.type="button",h.style.backgroundColor=r?.denyButtonColor??"transparent",h.style.color=r?.denyButtonTextColor??"var(--persona-feedback-error, var(--persona-palette-colors-error-600))",h.style.border=`1px solid ${r?.denyButtonTextColor?r.denyButtonTextColor:"var(--persona-palette-colors-error-200)"}`,h.setAttribute("data-approval-action","deny");let g=R(W,14,r?.denyButtonTextColor??"var(--persona-feedback-error, var(--persona-palette-colors-error-600))",2);g&&(g.style.marginRight="4px",h.appendChild(g));let H=document.createTextNode(r?.denyLabel??"Deny");h.appendChild(H),u.append(l,h),s.appendChild(u)}return S.append(i,s),m.appendChild(S),m};function Pe(e){let a=e.getRootNode?.();return a instanceof ShadowRoot?a:(e.ownerDocument??document).body}function pe(e){let{anchor:a,content:o,placement:t="bottom-start",offset:r=6,matchAnchorWidth:p=!1,horizontalOffset:m,verticalOffset:S,zIndex:i=2147483e3,onOpen:y,onDismiss:P}=e,T=e.container??Pe(a),s=!1,n=null,C=()=>{if(!s)return;let c=a.getBoundingClientRect();o.style.position="fixed",p&&(o.style.minWidth=`${c.width}px`),m&&(o.style.maxWidth=`${c.width}px`);let L=o.getBoundingClientRect(),v=S?.()??null,k=v!=null?c.top+v:c.top,O=t==="top-start"||t==="top-end"?k-r-L.height:c.bottom+r,B=t==="bottom-end"||t==="top-end"?c.right-L.width:c.left,u=m?.()??null;if(u!=null){let l=Math.max(c.left,c.right-L.width);B=Math.min(Math.max(c.left+u,c.left),l)}o.style.top=`${O}px`,o.style.left=`${B}px`},F=()=>{s&&(s=!1,n&&(n(),n=null),o.remove())},A=()=>{if(s)return;s=!0,i!=null&&(o.style.zIndex=String(i)),T.appendChild(o),C();let c=(a.ownerDocument??document).defaultView??window,L=a.ownerDocument??document,v=()=>{if(!a.isConnected){F(),P?.("anchor-removed");return}C()},k=D=>{let B=typeof D.composedPath=="function"?D.composedPath():[];B.includes(o)||B.includes(a)||(F(),P?.("outside"))},O=c.setTimeout(()=>{L.addEventListener("pointerdown",k,!0)},0);c.addEventListener("scroll",v,!0),c.addEventListener("resize",v),n=()=>{c.clearTimeout(O),L.removeEventListener("pointerdown",k,!0),c.removeEventListener("scroll",v,!0),c.removeEventListener("resize",v)},y?.()};return{get isOpen(){return s},open:A,close:F,toggle:()=>s?F():A(),reposition:C,destroy:F}}function ie(e){return(typeof e.composedPath=="function"?e.composedPath():[]).some(o=>o instanceof HTMLElement&&(o.tagName==="INPUT"||o.tagName==="TEXTAREA"||o.isContentEditable))}var ke=()=>({keyHandlers:new Map,popovers:new Map,pendingOrder:[],latestPendingApprovalId:null}),me=(e,a)=>{let o=e.keyHandlers.get(a);o&&(document.removeEventListener("keydown",o),e.keyHandlers.delete(a));let t=e.popovers.get(a);t&&(t.destroy(),e.popovers.delete(a))},E=(e,a)=>{me(e,a);let o=e.pendingOrder.indexOf(a);o!==-1&&e.pendingOrder.splice(o,1),e.latestPendingApprovalId===a&&(e.latestPendingApprovalId=e.pendingOrder.length?e.pendingOrder[e.pendingOrder.length-1]:null)},ve=e=>e?.approval!==!1?e?.approval:void 0,Le=(e,a,o)=>{let t=o?.detailsDisplay??"collapsed";return a.get(e)??t==="expanded"},te=e=>{let a=d("span","persona-approval-kbd");return a.textContent=e,a},Be=(e,a)=>{let o=d("span","persona-approval-title");a?.titleColor&&(o.style.color=a.titleColor);let r=e.toolType==="webmcp"||e.toolName.startsWith(I)?_(e.toolName):void 0,p=a?.formatDescription?.({toolName:e.toolName,toolType:e.toolType,description:e.description??"",parameters:e.parameters,...r?{displayTitle:r}:{},...e.reason?{reason:e.reason}:{}});if(p)return o.textContent=p,o;let m=r??N(e.toolName),S=e.toolType&&e.toolType!=="webmcp"?e.toolType:null;o.append("The assistant wants to use ");let i=document.createElement("strong");if(i.textContent=m,o.appendChild(i),S){o.append(" from ");let y=document.createElement("strong");y.textContent=S,o.appendChild(y)}return o},De=e=>{let a=d("div","persona-approval-resolved"),o=R(Z,15,"currentColor",2);o&&a.appendChild(o);let t=d("span","persona-approval-resolved-name");return t.textContent=e.toolName?N(e.toolName):"Tool",a.append(t,document.createTextNode(e.status==="timeout"?" timed out":" denied")),a},Re=(e,a,o,t,r,p,m,S)=>{let i=d("div","persona-approval-card persona-shadow-sm");i.id=`bubble-${o.id}`,i.setAttribute("data-message-id",o.id),i.setAttribute("data-bubble-type","approval"),r?.backgroundColor&&(i.style.background=r.backgroundColor),r?.borderColor&&(i.style.borderColor=r.borderColor),r?.shadow!==void 0&&(i.style.boxShadow=r.shadow.trim()===""?"none":r.shadow);let y=r?.detailsDisplay??"collapsed",P=!!t.description&&y!=="hidden",T=t.parameters!=null&&y!=="hidden",s=P||T,n=s&&Le(o.id,a,r),C=r?.showDetailsLabel??"Show details",F=r?.hideDetailsLabel??"Hide details",A=d("button","persona-approval-head");A.type="button",s?(A.setAttribute("data-action","toggle-params"),A.setAttribute("aria-expanded",n?"true":"false"),A.setAttribute("aria-label",n?F:C)):A.setAttribute("data-static","true");let c=d("span","persona-approval-logo"),L=R(U,16,"currentColor",2);L&&c.appendChild(L),A.appendChild(c);let v=Be(t,r);if(s){let l=d("span","persona-approval-toggle");l.setAttribute("aria-hidden","true");let x=R(q,14,"currentColor",2);x&&l.appendChild(x),v.append(" "),v.appendChild(l)}A.appendChild(v),i.appendChild(A);let k=d("div","persona-approval-body");if(s){let l=d("div","persona-approval-details");if(l.setAttribute("data-role","params"),l.hidden=!n,P){let x=d("p","persona-approval-desc");r?.descriptionColor&&(x.style.color=r.descriptionColor),x.textContent=t.description,l.appendChild(x)}if(T){let x=d("pre","persona-approval-params");r?.parameterBackgroundColor&&(x.style.background=r.parameterBackgroundColor),r?.parameterTextColor&&(x.style.color=r.parameterTextColor),x.textContent=X(t.parameters),l.appendChild(x)}k.appendChild(l)}if(t.reason){let l=d("p","persona-approval-reason");r?.reasonColor?l.style.color=r.reasonColor:r?.descriptionColor&&(l.style.color=r.descriptionColor);let x=d("span","persona-approval-reason-label");x.textContent=`${r?.reasonLabel??"Agent's stated reason:"} `,l.append(x,document.createTextNode(t.reason)),k.appendChild(l)}let O=d("div","persona-approval-actions"),D=null,B=l=>{r?.approveButtonColor&&(l.style.background=r.approveButtonColor),r?.approveButtonTextColor&&(l.style.color=r.approveButtonTextColor)},u=d("button","persona-approval-deny");if(u.type="button",u.setAttribute("data-action","deny"),r?.denyButtonColor&&(u.style.background=r.denyButtonColor),r?.denyButtonTextColor&&(u.style.color=r.denyButtonTextColor),u.append(r?.denyLabel??"Deny"),S){let l=d("div","persona-approval-split"),x=d("button","persona-approval-primary");x.type="button",x.setAttribute("data-action","always"),B(x),x.append(r?.approveLabel??"Always allow",te("\u23CE"));let b=d("button","persona-approval-caret");b.type="button",b.setAttribute("data-action","toggle-menu"),b.setAttribute("aria-label","More options"),B(b);let h=R(q,15,"currentColor",2);h&&b.appendChild(h),l.append(x,b),O.append(l,u),u.append(te("Esc"));let g=d("div","persona-approval-menu"),H=d("button","persona-approval-menu-item");H.type="button",H.append("Allow once",te("\u2318\u23CE")),g.appendChild(H),D=pe({anchor:l,content:g,placement:"bottom-start",matchAnchorWidth:!0}),e.popovers.set(o.id,D),H.addEventListener("click",()=>{E(e,o.id),p()})}else{let l=d("button","persona-approval-primary persona-approval-primary--solo");l.type="button",l.setAttribute("data-action","allow"),B(l),l.append(r?.approveLabel??"Allow"),O.append(l,u)}return k.appendChild(O),i.appendChild(k),i.addEventListener("click",l=>{let x=l.target instanceof Element?l.target.closest("[data-action]"):null;if(!x)return;let b=x.getAttribute("data-action");if(b==="toggle-params"){let h=i.querySelector('[data-role="params"]');if(h){let g=h.hidden;h.hidden=!g,A.setAttribute("aria-expanded",g?"true":"false"),A.setAttribute("aria-label",g?F:C),a.set(o.id,g)}return}if(b==="toggle-menu"){D?.toggle();return}if(b==="always"){E(e,o.id),p({remember:!0});return}if(b==="allow"){E(e,o.id),p();return}if(b==="deny"){E(e,o.id),m();return}}),i},re=(e=new Map)=>{let a=ke();return{plugin:{id:"persona-built-in-approval",renderApproval:({message:r,approve:p,deny:m,config:S})=>{let i=r?.approval;if(!i)return null;let y=ve(S);if(i.status!=="pending"){if(E(a,r.id),i.status==="approved"){let s=document.createElement("div");return s.style.display="none",s}return De(i)}me(a,r.id);let P=y?.enableAlwaysAllow===!0,T=Re(a,e,r,i,y,p,m,P);if(P){a.pendingOrder.includes(r.id)||a.pendingOrder.push(r.id),a.latestPendingApprovalId=a.pendingOrder[a.pendingOrder.length-1];let s=n=>{ie(n)||r.id===a.latestPendingApprovalId&&(n.key!=="Escape"&&n.key!=="Enter"||(n.preventDefault(),n.stopImmediatePropagation(),E(a,r.id),n.key==="Escape"?m():n.metaKey||n.ctrlKey?p():p({remember:!0})))};a.keyHandlers.set(r.id,s),document.addEventListener("keydown",s)}return T}},teardown:()=>{for(let r of[...a.keyHandlers.keys(),...a.popovers.keys()])E(a,r);a.latestPendingApprovalId=null}}};0&&(module.exports={createApprovalBubble,createBuiltInApprovalPlugin,humanizeToolName,initApprovalUi,updateApprovalDetailsUI});
1
+ "use strict";var ce=Object.create;var z=Object.defineProperty;var ge=Object.getOwnPropertyDescriptor;var he=Object.getOwnPropertyNames;var Ce=Object.getPrototypeOf,Se=Object.prototype.hasOwnProperty;var oe=(e,a)=>()=>(a||e((a={exports:{}}).exports,a),a.exports),ye=(e,a)=>{for(var o in a)z(e,o,{get:a[o],enumerable:!0})},fe=(e,a,o,t)=>{if(a&&typeof a=="object"||typeof a=="function")for(let r of he(a))!Se.call(e,r)&&r!==o&&z(e,r,{get:()=>a[r],enumerable:!(t=ge(a,r))||t.enumerable});return e};var Ae=(e,a,o)=>(o=e!=null?ce(Ce(e)):{},fe(a||!e||!e.__esModule?z(o,"default",{value:e,enumerable:!0}):o,e)),be=e=>fe(z({},"__esModule",{value:!0}),e);var K=oe(f=>{"use strict";Object.defineProperty(f,"__esModule",{value:!0});f.Allow=f.ALL=f.COLLECTION=f.ATOM=f.SPECIAL=f.INF=f._INFINITY=f.INFINITY=f.NAN=f.BOOL=f.NULL=f.OBJ=f.ARR=f.NUM=f.STR=void 0;f.STR=1;f.NUM=2;f.ARR=4;f.OBJ=8;f.NULL=16;f.BOOL=32;f.NAN=64;f.INFINITY=128;f._INFINITY=256;f.INF=f.INFINITY|f._INFINITY;f.SPECIAL=f.NULL|f.BOOL|f.INF|f.NAN;f.ATOM=f.STR|f.NUM|f.SPECIAL;f.COLLECTION=f.ARR|f.OBJ;f.ALL=f.ATOM|f.COLLECTION;f.Allow={STR:f.STR,NUM:f.NUM,ARR:f.ARR,OBJ:f.OBJ,NULL:f.NULL,BOOL:f.BOOL,NAN:f.NAN,INFINITY:f.INFINITY,_INFINITY:f._INFINITY,INF:f.INF,SPECIAL:f.SPECIAL,ATOM:f.ATOM,COLLECTION:f.COLLECTION,ALL:f.ALL};f.default=f.Allow});var se=oe(w=>{"use strict";var we=w&&w.__createBinding||(Object.create?(function(e,a,o,t){t===void 0&&(t=o);var r=Object.getOwnPropertyDescriptor(a,o);(!r||("get"in r?!a.__esModule:r.writable||r.configurable))&&(r={enumerable:!0,get:function(){return a[o]}}),Object.defineProperty(e,t,r)}):(function(e,a,o,t){t===void 0&&(t=o),e[t]=a[o]})),Te=w&&w.__exportStar||function(e,a){for(var o in e)o!=="default"&&!Object.prototype.hasOwnProperty.call(a,o)&&we(a,e,o)};Object.defineProperty(w,"__esModule",{value:!0});w.Allow=w.MalformedJSON=w.PartialJSON=w.parseJSON=w.parse=void 0;var T=K();Object.defineProperty(w,"Allow",{enumerable:!0,get:function(){return T.Allow}});Te(K(),w);var X=class extends Error{};w.PartialJSON=X;var _=class extends Error{};w.MalformedJSON=_;function le(e,a=T.Allow.ALL){if(typeof e!="string")throw new TypeError(`expecting str, got ${typeof e}`);if(!e.trim())throw new Error(`${e} is empty`);return Me(e.trim(),a)}w.parseJSON=le;var Me=(e,a)=>{let o=e.length,t=0,r=s=>{throw new X(`${s} at position ${t}`)},u=s=>{throw new _(`${s} at position ${t}`)},c=()=>(b(),t>=o&&r("Unexpected end of input"),e[t]==='"'?A():e[t]==="{"?S():e[t]==="["?C():e.substring(t,t+4)==="null"||T.Allow.NULL&a&&o-t<4&&"null".startsWith(e.substring(t))?(t+=4,null):e.substring(t,t+4)==="true"||T.Allow.BOOL&a&&o-t<4&&"true".startsWith(e.substring(t))?(t+=4,!0):e.substring(t,t+5)==="false"||T.Allow.BOOL&a&&o-t<5&&"false".startsWith(e.substring(t))?(t+=5,!1):e.substring(t,t+8)==="Infinity"||T.Allow.INFINITY&a&&o-t<8&&"Infinity".startsWith(e.substring(t))?(t+=8,1/0):e.substring(t,t+9)==="-Infinity"||T.Allow._INFINITY&a&&1<o-t&&o-t<9&&"-Infinity".startsWith(e.substring(t))?(t+=9,-1/0):e.substring(t,t+3)==="NaN"||T.Allow.NAN&a&&o-t<3&&"NaN".startsWith(e.substring(t))?(t+=3,NaN):M()),A=()=>{let s=t,n=!1;for(t++;t<o&&(e[t]!=='"'||n&&e[t-1]==="\\");)n=e[t]==="\\"?!n:!1,t++;if(e.charAt(t)=='"')try{return JSON.parse(e.substring(s,++t-Number(n)))}catch(g){u(String(g))}else if(T.Allow.STR&a)try{return JSON.parse(e.substring(s,t-Number(n))+'"')}catch{return JSON.parse(e.substring(s,e.lastIndexOf("\\"))+'"')}r("Unterminated string literal")},S=()=>{t++,b();let s={};try{for(;e[t]!=="}";){if(b(),t>=o&&T.Allow.OBJ&a)return s;let n=A();b(),t++;try{let g=c();s[n]=g}catch(g){if(T.Allow.OBJ&a)return s;throw g}b(),e[t]===","&&t++}}catch{if(T.Allow.OBJ&a)return s;r("Expected '}' at end of object")}return t++,s},C=()=>{t++;let s=[];try{for(;e[t]!=="]";)s.push(c()),b(),e[t]===","&&t++}catch{if(T.Allow.ARR&a)return s;r("Expected ']' at end of array")}return t++,s},M=()=>{if(t===0){e==="-"&&u("Not sure what '-' is");try{return JSON.parse(e)}catch(n){if(T.Allow.NUM&a)try{return JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch{}u(String(n))}}let s=t;for(e[t]==="-"&&t++;e[t]&&",]}".indexOf(e[t])===-1;)t++;t==o&&!(T.Allow.NUM&a)&&r("Unterminated number literal");try{return JSON.parse(e.substring(s,t))}catch{e.substring(s,t)==="-"&&r("Not sure what '-' is");try{return JSON.parse(e.substring(s,e.lastIndexOf("e")))}catch(g){u(String(g))}}},b=()=>{for(;t<o&&`
2
+ \r `.includes(e[t]);)t++};return c()},Pe=le;w.parse=Pe});var Oe={};ye(Oe,{createApprovalBubble:()=>te,createBuiltInApprovalPlugin:()=>ae,humanizeToolName:()=>E,initApprovalUi:()=>Z,updateApprovalDetailsUI:()=>ee});module.exports=be(Oe);var l=(e,a)=>{let o=document.createElement(e);return a&&(o.className=a),o};var $=Ae(se(),1);var W=e=>{if(e===null)return"null";if(e===void 0)return"";if(typeof e=="string")return e;if(typeof e=="number"||typeof e=="boolean")return String(e);try{return JSON.stringify(e,null,2)}catch{return String(e)}};var de=()=>{},Z=e=>{de=e.webMcpToolTitle},J=e=>de(e);var Q=[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M4.929 4.929 19.07 19.071"}]];var q=[["path",{d:"m6 9 6 6 6-6"}]];var Y=[["path",{d:"m18 15-6-6-6 6"}]];var j=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"}],["path",{d:"M12 8v4"}],["path",{d:"M12 16h.01"}]];var U=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"}],["path",{d:"m9 12 2 2 4-4"}]];var G=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"}],["path",{d:"m14.5 9.5-5 5"}],["path",{d:"m9.5 9.5 5 5"}]];var R=(e,a=24,o="currentColor",t=2)=>{if(!Array.isArray(e))return null;let r=document.createElementNS("http://www.w3.org/2000/svg","svg");return r.setAttribute("width",String(a)),r.setAttribute("height",String(a)),r.setAttribute("viewBox","0 0 24 24"),r.setAttribute("fill","none"),r.setAttribute("stroke",o),r.setAttribute("stroke-width",String(t)),r.setAttribute("stroke-linecap","round"),r.setAttribute("stroke-linejoin","round"),r.setAttribute("aria-hidden","true"),e.forEach(u=>{if(!Array.isArray(u)||u.length<2)return;let c=u[0],A=u[1];if(!A)return;let S=document.createElementNS("http://www.w3.org/2000/svg",c);Object.entries(A).forEach(([C,M])=>{C!=="stroke"&&S.setAttribute(C,String(M))}),r.appendChild(S)}),r};var I="webmcp:";var E=e=>{let o=(e.startsWith(I)?e.slice(I.length):e).replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[_\-\s.]+/).filter(Boolean);if(o.length===0)return e;let t=o.join(" ").toLowerCase();return t.charAt(0).toUpperCase()+t.slice(1)},ue=e=>e?.approval!==!1?e?.approval:void 0,ne=(e,a,o)=>{let t=ue(o)?.detailsDisplay??"collapsed";return a.get(e)??t==="expanded"},pe=(e,a,o)=>{let t=ue(o);e.setAttribute("aria-expanded",a?"true":"false");let r=e.querySelector("[data-approval-details-label]");r&&(r.textContent=a?t?.hideDetailsLabel??"Hide details":t?.showDetailsLabel??"Show details");let u=e.querySelector("[data-approval-details-chevron]");if(u){u.innerHTML="";let c=R(a?Y:q,14,"currentColor",2);c&&u.appendChild(c)}},ee=(e,a,o,t=new Map)=>{let r=a.querySelector('button[data-bubble-type="approval"]'),u=a.querySelector("[data-approval-details]");if(!r||!u)return;let c=ne(e,t,o);pe(r,c,o),u.style.display=c?"":"none"};var te=(e,a,o=new Map)=>{let t=e.approval,r=a?.approval!==!1?a?.approval:void 0,u=t?.status==="pending",c=l("div",["persona-approval-bubble","persona-w-full","persona-rounded-2xl","persona-border","persona-shadow-sm","persona-overflow-hidden"].join(" "));if(c.id=`bubble-${e.id}`,c.setAttribute("data-message-id",e.id),c.style.backgroundColor=r?.backgroundColor??"var(--persona-approval-bg)",c.style.borderColor=r?.borderColor??"var(--persona-approval-border)",c.style.boxShadow=r?.shadow!==void 0?r.shadow.trim()===""?"none":r.shadow:"var(--persona-approval-shadow)",!t)return c;let A=l("div","persona-flex persona-items-start persona-gap-3 persona-px-4 persona-py-3"),S=l("div","persona-flex-shrink-0 persona-mt-0.5");S.setAttribute("data-approval-icon","true");let C=t.status==="denied"?G:t.status==="timeout"?j:U,M=t.status==="approved"?"var(--persona-feedback-success, var(--persona-palette-colors-success-600))":t.status==="denied"?"var(--persona-feedback-error, var(--persona-palette-colors-error-600))":t.status==="timeout"?"var(--persona-feedback-warning, var(--persona-palette-colors-warning-600))":r?.titleColor??"currentColor",b=R(C,20,M,2);b&&S.appendChild(b);let s=l("div","persona-flex-1 persona-min-w-0"),n=l("div","persona-flex persona-items-center persona-gap-2"),g=l("span","persona-text-sm persona-font-medium persona-text-persona-primary");if(r?.titleColor&&(g.style.color=r.titleColor),g.textContent=r?.title??"Approval Required",n.appendChild(g),!u){let p=l("span","persona-inline-flex persona-items-center persona-px-2 persona-py-0.5 persona-rounded-full persona-text-xs persona-font-medium");p.setAttribute("data-approval-status",t.status),t.status==="approved"?(p.style.backgroundColor="var(--persona-palette-colors-success-100)",p.style.color="var(--persona-palette-colors-success-700)",p.textContent="Approved"):t.status==="denied"?(p.style.backgroundColor="var(--persona-palette-colors-error-100)",p.style.color="var(--persona-palette-colors-error-700)",p.textContent="Denied"):t.status==="timeout"&&(p.style.backgroundColor="var(--persona-palette-colors-warning-100)",p.style.color="var(--persona-palette-colors-warning-700)",p.textContent="Timeout"),n.appendChild(p)}s.appendChild(n);let O=t.toolType==="webmcp"||t.toolName.startsWith(I)?J(t.toolName):void 0,m=r?.formatDescription?.({toolName:t.toolName,toolType:t.toolType,description:t.description,parameters:t.parameters,...O?{displayTitle:O}:{},...t.reason?{reason:t.reason}:{}}),k=!t.toolName,v=m||(k?t.description:`The assistant wants to use \u201C${O??E(t.toolName)}\u201D.`),P=l("p","persona-text-sm persona-mt-0.5 persona-text-persona-muted");if(P.setAttribute("data-approval-summary","true"),r?.descriptionColor&&(P.style.color=r.descriptionColor),P.textContent=v,s.appendChild(P),t.reason){let p=l("p","persona-text-sm persona-mt-1 persona-text-persona-muted");p.setAttribute("data-approval-reason","true"),r?.reasonColor?p.style.color=r.reasonColor:r?.descriptionColor&&(p.style.color=r.descriptionColor);let h=l("span","persona-font-medium");h.textContent=`${r?.reasonLabel??"Agent's stated reason:"} `,p.appendChild(h),p.appendChild(document.createTextNode(t.reason)),s.appendChild(p)}let L=r?.detailsDisplay??"collapsed",D=!!t.description&&!k,B=D||!!t.parameters;if(L!=="hidden"&&B){let p=ne(e.id,o,a),h=l("button","persona-inline-flex persona-items-center persona-gap-1 persona-mt-1 persona-p-0 persona-border-none persona-bg-transparent persona-text-xs persona-font-medium persona-cursor-pointer persona-text-persona-muted");h.type="button",h.setAttribute("data-expand-header","true"),h.setAttribute("data-bubble-type","approval"),r?.descriptionColor&&(h.style.color=r.descriptionColor);let d=l("span");d.setAttribute("data-approval-details-label","true");let x=l("span","persona-inline-flex persona-items-center");x.setAttribute("data-approval-details-chevron","true"),h.append(d,x),pe(h,p,a),s.appendChild(h);let i=l("div");if(i.setAttribute("data-approval-details","true"),i.style.display=p?"":"none",D){let y=l("p","persona-text-sm persona-mt-1 persona-text-persona-muted");r?.descriptionColor&&(y.style.color=r.descriptionColor),y.textContent=t.description,i.appendChild(y)}if(t.parameters){let y=l("pre","persona-mt-2 persona-text-xs persona-p-2 persona-rounded persona-overflow-x-auto persona-max-h-32 persona-bg-persona-container persona-text-persona-primary");r?.parameterBackgroundColor&&(y.style.backgroundColor=r.parameterBackgroundColor),r?.parameterTextColor&&(y.style.color=r.parameterTextColor),y.style.fontSize="0.75rem",y.style.lineHeight="1rem",y.textContent=W(t.parameters),i.appendChild(y)}s.appendChild(i)}if(u){let p=l("div","persona-flex persona-gap-2 persona-mt-2");p.setAttribute("data-approval-buttons","true");let h=l("button","persona-inline-flex persona-items-center persona-px-3 persona-py-1.5 persona-rounded-md persona-text-xs persona-font-medium persona-border-none persona-cursor-pointer");h.type="button",h.style.backgroundColor=r?.approveButtonColor??"var(--persona-approval-approve-bg)",h.style.color=r?.approveButtonTextColor??"var(--persona-button-primary-fg)",h.setAttribute("data-approval-action","approve");let d=R(U,14,r?.approveButtonTextColor??"var(--persona-button-primary-fg)",2);d&&(d.style.marginRight="4px",h.appendChild(d));let x=document.createTextNode(r?.approveLabel??"Approve");h.appendChild(x);let i=l("button","persona-inline-flex persona-items-center persona-px-3 persona-py-1.5 persona-rounded-md persona-text-xs persona-font-medium persona-cursor-pointer");i.type="button",i.style.backgroundColor=r?.denyButtonColor??"transparent",i.style.color=r?.denyButtonTextColor??"var(--persona-feedback-error, var(--persona-palette-colors-error-600))",i.style.border=`1px solid ${r?.denyButtonTextColor?r.denyButtonTextColor:"var(--persona-palette-colors-error-200)"}`,i.setAttribute("data-approval-action","deny");let y=R(G,14,r?.denyButtonTextColor??"var(--persona-feedback-error, var(--persona-palette-colors-error-600))",2);y&&(y.style.marginRight="4px",i.appendChild(y));let N=document.createTextNode(r?.denyLabel??"Deny");i.appendChild(N),p.append(h,i),s.appendChild(p)}return A.append(S,s),c.appendChild(A),c};function ke(e){let a=e.getRootNode?.();return a instanceof ShadowRoot?a:(e.ownerDocument??document).body}function ie(e){let{anchor:a,content:o,placement:t="bottom-start",offset:r=6,matchAnchorWidth:u=!1,horizontalOffset:c,verticalOffset:A,zIndex:S=2147483e3,onOpen:C,onDismiss:M}=e,b=e.container??ke(a),s=!1,n=null,g=()=>{if(!s)return;let m=a.getBoundingClientRect();o.style.position="fixed",u&&(o.style.minWidth=`${m.width}px`),c&&(o.style.maxWidth=`${m.width}px`);let k=o.getBoundingClientRect(),v=A?.()??null,P=v!=null?m.top+v:m.top,L=t==="top-start"||t==="top-end"?P-r-k.height:m.bottom+r,B=t==="bottom-end"||t==="top-end"?m.right-k.width:m.left,p=c?.()??null;if(p!=null){let h=Math.max(m.left,m.right-k.width);B=Math.min(Math.max(m.left+p,m.left),h)}o.style.top=`${L}px`,o.style.left=`${B}px`},F=()=>{s&&(s=!1,n&&(n(),n=null),o.remove())},O=()=>{if(s)return;s=!0,S!=null&&(o.style.zIndex=String(S)),b.appendChild(o),g();let m=(a.ownerDocument??document).defaultView??window,k=a.ownerDocument??document,v=()=>{if(!a.isConnected){F(),M?.("anchor-removed");return}g()},P=D=>{let B=typeof D.composedPath=="function"?D.composedPath():[];B.includes(o)||B.includes(a)||(F(),M?.("outside"))},L=m.setTimeout(()=>{k.addEventListener("pointerdown",P,!0)},0);m.addEventListener("scroll",v,!0),m.addEventListener("resize",v),n=()=>{m.clearTimeout(L),k.removeEventListener("pointerdown",P,!0),m.removeEventListener("scroll",v,!0),m.removeEventListener("resize",v)},C?.()};return{get isOpen(){return s},open:O,close:F,toggle:()=>s?F():O(),reposition:g,destroy:F}}function me(e){return(typeof e.composedPath=="function"?e.composedPath():[]).some(o=>o instanceof HTMLElement&&(o.tagName==="INPUT"||o.tagName==="TEXTAREA"||o.isContentEditable))}var ve=()=>({keyHandlers:new Map,popovers:new Map,pendingOrder:[],latestPendingApprovalId:null}),xe=(e,a)=>{let o=e.keyHandlers.get(a);o&&(document.removeEventListener("keydown",o),e.keyHandlers.delete(a));let t=e.popovers.get(a);t&&(t.destroy(),e.popovers.delete(a))},H=(e,a)=>{xe(e,a);let o=e.pendingOrder.indexOf(a);o!==-1&&e.pendingOrder.splice(o,1),e.latestPendingApprovalId===a&&(e.latestPendingApprovalId=e.pendingOrder.length?e.pendingOrder[e.pendingOrder.length-1]:null)},Le=e=>e?.approval!==!1?e?.approval:void 0,Be=(e,a,o)=>{let t=o?.detailsDisplay??"collapsed";return a.get(e)??t==="expanded"},re=e=>{let a=l("span","persona-approval-kbd");return a.textContent=e,a},De=(e,a)=>{let o=l("span","persona-approval-title");a?.titleColor&&(o.style.color=a.titleColor);let r=e.toolType==="webmcp"||e.toolName.startsWith(I)?J(e.toolName):void 0,u=a?.formatDescription?.({toolName:e.toolName,toolType:e.toolType,description:e.description??"",parameters:e.parameters,...r?{displayTitle:r}:{},...e.reason?{reason:e.reason}:{}});if(u)return o.textContent=u,o;let c=r??E(e.toolName),A=e.toolType&&e.toolType!=="webmcp"?e.toolType:null;o.append("The assistant wants to use ");let S=document.createElement("strong");if(S.textContent=c,o.appendChild(S),A){o.append(" from ");let C=document.createElement("strong");C.textContent=A,o.appendChild(C)}return o},Re=e=>{let a=l("div","persona-approval-resolved"),o=R(Q,15,"currentColor",2);o&&a.appendChild(o);let t=l("span","persona-approval-resolved-name");return t.textContent=e.toolName?E(e.toolName):"Tool",a.append(t,document.createTextNode(e.status==="timeout"?" timed out":" denied")),a},Fe=(e,a,o,t,r,u,c,A,S=!1)=>{let C=l("div","persona-approval-card persona-shadow-sm");C.id=`bubble-${o.id}`,C.setAttribute("data-message-id",o.id),C.setAttribute("data-bubble-type","approval"),r?.backgroundColor&&(C.style.background=r.backgroundColor),r?.borderColor&&(C.style.borderColor=r.borderColor),r?.shadow!==void 0&&(C.style.boxShadow=r.shadow.trim()===""?"none":r.shadow);let M=r?.detailsDisplay??"collapsed",b=!!t.description&&M!=="hidden",s=t.parameters!=null&&M!=="hidden"&&!S,n=b||s,g=n&&Be(o.id,a,r),F=r?.showDetailsLabel??"Show details",O=r?.hideDetailsLabel??"Hide details",m=l("button","persona-approval-head");m.type="button",n?(m.setAttribute("data-action","toggle-params"),m.setAttribute("aria-expanded",g?"true":"false"),m.setAttribute("aria-label",g?O:F)):m.setAttribute("data-static","true");let k=l("span","persona-approval-logo"),v=R(U,16,"currentColor",2);v&&k.appendChild(v),m.appendChild(k);let P=De(t,r);if(n){let d=l("span","persona-approval-toggle");d.setAttribute("aria-hidden","true");let x=R(q,14,"currentColor",2);x&&d.appendChild(x),P.append(" "),P.appendChild(d)}m.appendChild(P),C.appendChild(m);let L=l("div","persona-approval-body");if(n){let d=l("div","persona-approval-details");if(d.setAttribute("data-role","params"),d.hidden=!g,b){let x=l("p","persona-approval-desc");r?.descriptionColor&&(x.style.color=r.descriptionColor),x.textContent=t.description,d.appendChild(x)}if(s){let x=l("pre","persona-approval-params");r?.parameterBackgroundColor&&(x.style.background=r.parameterBackgroundColor),r?.parameterTextColor&&(x.style.color=r.parameterTextColor),x.textContent=W(t.parameters),d.appendChild(x)}L.appendChild(d)}if(S){let d=l("div","persona-approval-call");d.setAttribute("data-role","raw-call");let x=l("code","persona-approval-tool-name");if(x.textContent=t.toolName,d.appendChild(x),t.parameters!=null){let i=l("pre","persona-approval-params");r?.parameterBackgroundColor&&(i.style.background=r.parameterBackgroundColor),r?.parameterTextColor&&(i.style.color=r.parameterTextColor),i.textContent=W(t.parameters),d.appendChild(i)}L.appendChild(d)}if(t.reason){let d=l("p","persona-approval-reason");r?.reasonColor?d.style.color=r.reasonColor:r?.descriptionColor&&(d.style.color=r.descriptionColor);let x=l("span","persona-approval-reason-label");x.textContent=`${r?.reasonLabel??"Agent's stated reason:"} `,d.append(x,document.createTextNode(t.reason)),L.appendChild(d)}let D=l("div","persona-approval-actions"),B=null,p=d=>{r?.approveButtonColor&&(d.style.background=r.approveButtonColor),r?.approveButtonTextColor&&(d.style.color=r.approveButtonTextColor)},h=l("button","persona-approval-deny");if(h.type="button",h.setAttribute("data-action","deny"),r?.denyButtonColor&&(h.style.background=r.denyButtonColor),r?.denyButtonTextColor&&(h.style.color=r.denyButtonTextColor),h.append(r?.denyLabel??"Deny"),A){let d=l("div","persona-approval-split"),x=l("button","persona-approval-primary");x.type="button",x.setAttribute("data-action","always"),p(x),x.append(r?.approveLabel??"Always allow",re("\u23CE"));let i=l("button","persona-approval-caret");i.type="button",i.setAttribute("data-action","toggle-menu"),i.setAttribute("aria-label","More options"),p(i);let y=R(q,15,"currentColor",2);y&&i.appendChild(y),d.append(x,i),D.append(d,h),h.append(re("Esc"));let N=l("div","persona-approval-menu"),V=l("button","persona-approval-menu-item");V.type="button",V.append("Allow once",re("\u2318\u23CE")),N.appendChild(V),B=ie({anchor:d,content:N,placement:"bottom-start",matchAnchorWidth:!0}),e.popovers.set(o.id,B),V.addEventListener("click",()=>{H(e,o.id),u()})}else{let d=l("button","persona-approval-primary persona-approval-primary--solo");d.type="button",d.setAttribute("data-action","allow"),p(d),d.append(r?.approveLabel??"Allow"),D.append(d,h)}return L.appendChild(D),C.appendChild(L),C.addEventListener("click",d=>{let x=d.target instanceof Element?d.target.closest("[data-action]"):null;if(!x)return;let i=x.getAttribute("data-action");if(i==="toggle-params"){let y=C.querySelector('[data-role="params"]');if(y){let N=y.hidden;y.hidden=!N,m.setAttribute("aria-expanded",N?"true":"false"),m.setAttribute("aria-label",N?O:F),a.set(o.id,N)}return}if(i==="toggle-menu"){B?.toggle();return}if(i==="always"){H(e,o.id),u({remember:!0});return}if(i==="allow"){H(e,o.id),u();return}if(i==="deny"){H(e,o.id),c();return}}),C},ae=(e=new Map)=>{let a=ve();return{plugin:{id:"persona-built-in-approval",renderApproval:({message:r,approve:u,deny:c,config:A})=>{let S=r?.approval;if(!S)return null;let C=Le(A);if(S.status!=="pending"){if(H(a,r.id),S.status==="approved"){let n=document.createElement("div");return n.style.display="none",n}return Re(S)}xe(a,r.id);let M=!!A?.clientToken,b=C?.enableAlwaysAllow===!0,s=Fe(a,e,r,S,C,u,c,b,M);if(b){a.pendingOrder.includes(r.id)||a.pendingOrder.push(r.id),a.latestPendingApprovalId=a.pendingOrder[a.pendingOrder.length-1];let n=g=>{me(g)||r.id===a.latestPendingApprovalId&&(g.key!=="Escape"&&g.key!=="Enter"||(g.preventDefault(),g.stopImmediatePropagation(),H(a,r.id),g.key==="Escape"?c():g.metaKey||g.ctrlKey?u():u({remember:!0})))};a.keyHandlers.set(r.id,n),document.addEventListener("keydown",n)}return s}},teardown:()=>{for(let r of[...a.keyHandlers.keys(),...a.popovers.keys()])H(a,r);a.latestPendingApprovalId=null}}};0&&(module.exports={createApprovalBubble,createBuiltInApprovalPlugin,humanizeToolName,initApprovalUi,updateApprovalDetailsUI});
3
3
  /*! Bundled license information:
4
4
 
5
5
  lucide/dist/esm/icons/ban.mjs: