@runtypelabs/persona 4.23.1 → 4.24.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 (158) 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-9Vxm-PPz.d.cts → types-Db61aI9J.d.cts} +25 -2
  4. package/dist/animations/{types-9Vxm-PPz.d.ts → types-Db61aI9J.d.ts} +25 -2
  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 +25 -2
  8. package/dist/animations-extra.d.ts +25 -2
  9. package/dist/approval-ui-3NMYNXBD.js +1 -0
  10. package/dist/approval-ui.cjs +2 -2
  11. package/dist/approval-ui.d.cts +261 -40
  12. package/dist/approval-ui.d.ts +261 -40
  13. package/dist/approval-ui.js +2 -2
  14. package/dist/{artifacts-ui-F4N6VMKF.js → artifacts-ui-IGB5YKLO.js} +4 -4
  15. package/dist/artifacts-ui.d.cts +256 -28
  16. package/dist/artifacts-ui.d.ts +256 -28
  17. package/dist/{chunk-NIKYKSNZ.js → chunk-7CO4T5KB.js} +1 -1
  18. package/dist/codegen.cjs +11 -11
  19. package/dist/codegen.js +13 -13
  20. package/dist/context-mentions.d.cts +256 -28
  21. package/dist/context-mentions.d.ts +256 -28
  22. package/dist/event-stream-view.d.cts +256 -28
  23. package/dist/event-stream-view.d.ts +256 -28
  24. package/dist/forms-ui.d.cts +291 -30
  25. package/dist/forms-ui.d.ts +291 -30
  26. package/dist/history-view.d.cts +25 -2
  27. package/dist/history-view.d.ts +25 -2
  28. package/dist/index.cjs +70 -69
  29. package/dist/index.cjs.map +1 -1
  30. package/dist/index.d.cts +337 -51
  31. package/dist/index.d.ts +337 -51
  32. package/dist/index.global.js +57 -54
  33. package/dist/index.global.js.map +1 -1
  34. package/dist/index.js +70 -69
  35. package/dist/index.js.map +1 -1
  36. package/dist/install.global.js +1 -1
  37. package/dist/install.global.js.map +1 -1
  38. package/dist/launcher.global.js +2 -2
  39. package/dist/launcher.global.js.map +1 -1
  40. package/dist/session-reconnect.d.cts +256 -28
  41. package/dist/session-reconnect.d.ts +256 -28
  42. package/dist/smart-dom-reader.d.cts +256 -28
  43. package/dist/smart-dom-reader.d.ts +256 -28
  44. package/dist/theme-editor-preview.cjs +74 -73
  45. package/dist/theme-editor-preview.d.cts +263 -28
  46. package/dist/theme-editor-preview.d.ts +263 -28
  47. package/dist/theme-editor-preview.js +51 -50
  48. package/dist/theme-editor.cjs +10 -10
  49. package/dist/theme-editor.d.cts +276 -30
  50. package/dist/theme-editor.d.ts +276 -30
  51. package/dist/theme-editor.js +10 -10
  52. package/dist/theme-reference.cjs +1 -1
  53. package/dist/theme-reference.d.cts +1522 -11
  54. package/dist/theme-reference.d.ts +1522 -11
  55. package/dist/theme-reference.js +1 -1
  56. package/dist/widget.css +1 -1
  57. package/package.json +3 -2
  58. package/src/__fixtures__/defaults-parity.v4.json +776 -0
  59. package/src/approval-ui-entry.ts +0 -1
  60. package/src/approval-ui-loader.ts +5 -4
  61. package/src/approval-ui.ts +0 -1
  62. package/src/client-identity-proof.test.ts +193 -0
  63. package/src/client-session-warm.test.ts +216 -0
  64. package/src/client-visitor-history.test.ts +6 -0
  65. package/src/client.tool-pair-replay.test.ts +325 -0
  66. package/src/client.ts +154 -61
  67. package/src/codegen.test.ts +24 -0
  68. package/src/components/activity-row.test.ts +100 -0
  69. package/src/components/activity-row.ts +136 -0
  70. package/src/components/approval-actions.test.ts +8 -5
  71. package/src/components/approval-actions.ts +19 -6
  72. package/src/components/approval-bubble.test.ts +56 -9
  73. package/src/components/approval-bubble.ts +36 -41
  74. package/src/components/composer-builder.ts +5 -2
  75. package/src/components/composer-parts.ts +10 -2
  76. package/src/components/header-builder.test.ts +32 -0
  77. package/src/components/header-builder.ts +7 -4
  78. package/src/components/header-layouts.test.ts +12 -0
  79. package/src/components/header-layouts.ts +3 -2
  80. package/src/components/launcher.ts +11 -2
  81. package/src/components/message-bubble.test.ts +22 -0
  82. package/src/components/message-bubble.ts +7 -3
  83. package/src/components/panel.test.ts +52 -1
  84. package/src/components/panel.ts +47 -8
  85. package/src/components/pill-composer-builder.test.ts +2 -0
  86. package/src/components/pill-composer-builder.ts +0 -1
  87. package/src/components/reasoning-bubble.ts +29 -17
  88. package/src/components/suggestions.test.ts +1 -0
  89. package/src/components/suggestions.ts +0 -16
  90. package/src/components/tool-bubble.ts +131 -114
  91. package/src/components/tool-details.test.ts +87 -0
  92. package/src/components/tool-details.ts +102 -0
  93. package/src/components/welcome.test.ts +8 -0
  94. package/src/components/welcome.ts +4 -2
  95. package/src/defaults-parity.test.ts +158 -0
  96. package/src/defaults.test.ts +69 -0
  97. package/src/defaults.ts +128 -49
  98. package/src/generated/runtype-openapi-contract.ts +28 -13
  99. package/src/index-core.ts +2 -0
  100. package/src/install.test.ts +24 -0
  101. package/src/install.ts +3 -1
  102. package/src/launcher-global.ts +2 -1
  103. package/src/launcher-variants.test.ts +52 -0
  104. package/src/runtime/init-update-reset.test.ts +21 -0
  105. package/src/session.ts +61 -9
  106. package/src/styles/widget-styles.test.ts +19 -0
  107. package/src/styles/widget.css +295 -23
  108. package/src/theme-editor/index.ts +2 -0
  109. package/src/theme-editor/preview-utils.test.ts +8 -0
  110. package/src/theme-editor/preview-utils.ts +7 -3
  111. package/src/theme-editor/sections.test.ts +31 -0
  112. package/src/theme-editor/sections.ts +55 -1
  113. package/src/theme-editor/state-preferences.test.ts +49 -0
  114. package/src/theme-editor/state.ts +73 -15
  115. package/src/theme-reference.test.ts +20 -0
  116. package/src/theme-reference.ts +11 -5
  117. package/src/tool-call-display-defaults.test.ts +33 -1
  118. package/src/types/theme.ts +80 -3
  119. package/src/types.ts +179 -23
  120. package/src/ui.activity-row.test.ts +91 -0
  121. package/src/ui.approval-plugin.test.ts +63 -0
  122. package/src/ui.composer-compact.test.ts +24 -2
  123. package/src/ui.composer-placement.test.ts +23 -0
  124. package/src/ui.detached-panel.test.ts +33 -6
  125. package/src/ui.docked.test.ts +19 -0
  126. package/src/ui.header-update-stability.test.ts +25 -0
  127. package/src/ui.identity-proof.test.ts +58 -0
  128. package/src/ui.launcher-teaser.test.ts +25 -0
  129. package/src/ui.message-width.test.ts +17 -2
  130. package/src/ui.reasoning-display.test.ts +92 -0
  131. package/src/ui.rebuild-composer.test.ts +20 -3
  132. package/src/ui.scroll.test.ts +32 -0
  133. package/src/ui.session-init.test.ts +312 -0
  134. package/src/ui.status-indicator.test.ts +82 -0
  135. package/src/ui.suggest-replies.test.ts +11 -0
  136. package/src/ui.ts +363 -74
  137. package/src/ui.v5-defaults.test.ts +144 -0
  138. package/src/ui.welcome.test.ts +92 -3
  139. package/src/utils/__snapshots__/tokens-parity.test.ts.snap +811 -140
  140. package/src/utils/code-generators.ts +14 -0
  141. package/src/utils/composer-compact.test.ts +0 -2
  142. package/src/utils/composer-compact.ts +2 -4
  143. package/src/utils/composer-placement.ts +2 -3
  144. package/src/utils/config-merge.test.ts +81 -5
  145. package/src/utils/config-merge.ts +13 -3
  146. package/src/utils/defaults-provenance.ts +67 -0
  147. package/src/utils/dock.ts +7 -1
  148. package/src/utils/launcher-variant.ts +16 -0
  149. package/src/utils/panel-config.ts +97 -0
  150. package/src/utils/status-indicator.ts +39 -0
  151. package/src/utils/theme.test.ts +182 -0
  152. package/src/utils/theme.ts +131 -18
  153. package/src/utils/tokens.test.ts +122 -1
  154. package/src/utils/tokens.ts +177 -17
  155. package/src/utils/tool-pair-replay.ts +100 -0
  156. package/src/welcome.test.ts +23 -0
  157. package/src/welcome.ts +16 -9
  158. package/dist/approval-ui-K7R5Q5OC.js +0 -1
@@ -1,4 +1,4 @@
1
- import { S as StreamAnimationPlugin } from './types-9Vxm-PPz.cjs';
1
+ import { S as StreamAnimationPlugin } from './types-Db61aI9J.cjs';
2
2
 
3
3
  declare const glyphCycle: StreamAnimationPlugin;
4
4
 
@@ -1,4 +1,4 @@
1
- import { S as StreamAnimationPlugin } from './types-9Vxm-PPz.js';
1
+ import { S as StreamAnimationPlugin } from './types-Db61aI9J.js';
2
2
 
3
3
  declare const glyphCycle: StreamAnimationPlugin;
4
4
 
@@ -69,6 +69,7 @@ type RuntypeExecutionStreamEvent = ({
69
69
  turnIndex?: number;
70
70
  type: "turn_start";
71
71
  }) | ({
72
+ attributes?: Record<string, string | number | boolean>;
72
73
  completedAt?: string;
73
74
  content?: string;
74
75
  cost?: number;
@@ -127,7 +128,8 @@ type RuntypeExecutionStreamEvent = ({
127
128
  };
128
129
  turnId?: string;
129
130
  type: "model_call_start";
130
- } | {
131
+ } | ({
132
+ attributes?: Record<string, string | number | boolean>;
131
133
  completedAt?: string;
132
134
  cost?: number;
133
135
  durationMs?: number;
@@ -151,10 +153,11 @@ type RuntypeExecutionStreamEvent = ({
151
153
  cacheWrite?: number;
152
154
  input: number;
153
155
  output: number;
156
+ reasoning?: number;
154
157
  };
155
158
  turnId?: string;
156
159
  type: "model_call_complete";
157
- } | {
160
+ }) | {
158
161
  executionId: string;
159
162
  id: string;
160
163
  index?: number;
@@ -677,6 +680,24 @@ type AgentMessageMetadata = {
677
680
  * never re-resume the call.
678
681
  */
679
682
  suggestRepliesResolved?: boolean;
683
+ /**
684
+ * The client-tool answer the server accepted through `/resume`, kept so
685
+ * later proxy/agent turns can replay the call and its result to the model.
686
+ * `toolName` is the widget's internal name (`webmcp:<name>` or a bare
687
+ * built-in). Set only after the resume succeeds; preserved across
688
+ * re-emissions of the tool message.
689
+ */
690
+ clientToolAnswer?: {
691
+ toolCallId: string;
692
+ toolName: string;
693
+ args: unknown;
694
+ result: unknown;
695
+ /**
696
+ * Shared by the answers posted in one `/resume`, i.e. one assistant
697
+ * turn's parallel calls; a chained call gets a new batch.
698
+ */
699
+ batch?: string;
700
+ };
680
701
  };
681
702
  /**
682
703
  * Context passed to plugin lifecycle hooks. Carries the live DOM references
@@ -784,6 +805,8 @@ type AgentWidgetReasoning = {
784
805
  durationMs?: number;
785
806
  };
786
807
  type AgentWidgetToolCall = {
808
+ /** Optional approval state for activity-row status chrome. */
809
+ approvalStatus?: "pending" | "approved" | "denied" | "timeout";
787
810
  id: string;
788
811
  name?: string;
789
812
  status: "pending" | "running" | "complete";
@@ -69,6 +69,7 @@ type RuntypeExecutionStreamEvent = ({
69
69
  turnIndex?: number;
70
70
  type: "turn_start";
71
71
  }) | ({
72
+ attributes?: Record<string, string | number | boolean>;
72
73
  completedAt?: string;
73
74
  content?: string;
74
75
  cost?: number;
@@ -127,7 +128,8 @@ type RuntypeExecutionStreamEvent = ({
127
128
  };
128
129
  turnId?: string;
129
130
  type: "model_call_start";
130
- } | {
131
+ } | ({
132
+ attributes?: Record<string, string | number | boolean>;
131
133
  completedAt?: string;
132
134
  cost?: number;
133
135
  durationMs?: number;
@@ -151,10 +153,11 @@ type RuntypeExecutionStreamEvent = ({
151
153
  cacheWrite?: number;
152
154
  input: number;
153
155
  output: number;
156
+ reasoning?: number;
154
157
  };
155
158
  turnId?: string;
156
159
  type: "model_call_complete";
157
- } | {
160
+ }) | {
158
161
  executionId: string;
159
162
  id: string;
160
163
  index?: number;
@@ -677,6 +680,24 @@ type AgentMessageMetadata = {
677
680
  * never re-resume the call.
678
681
  */
679
682
  suggestRepliesResolved?: boolean;
683
+ /**
684
+ * The client-tool answer the server accepted through `/resume`, kept so
685
+ * later proxy/agent turns can replay the call and its result to the model.
686
+ * `toolName` is the widget's internal name (`webmcp:<name>` or a bare
687
+ * built-in). Set only after the resume succeeds; preserved across
688
+ * re-emissions of the tool message.
689
+ */
690
+ clientToolAnswer?: {
691
+ toolCallId: string;
692
+ toolName: string;
693
+ args: unknown;
694
+ result: unknown;
695
+ /**
696
+ * Shared by the answers posted in one `/resume`, i.e. one assistant
697
+ * turn's parallel calls; a chained call gets a new batch.
698
+ */
699
+ batch?: string;
700
+ };
680
701
  };
681
702
  /**
682
703
  * Context passed to plugin lifecycle hooks. Carries the live DOM references
@@ -784,6 +805,8 @@ type AgentWidgetReasoning = {
784
805
  durationMs?: number;
785
806
  };
786
807
  type AgentWidgetToolCall = {
808
+ /** Optional approval state for activity-row status chrome. */
809
+ approvalStatus?: "pending" | "approved" | "denied" | "timeout";
787
810
  id: string;
788
811
  name?: string;
789
812
  status: "pending" | "running" | "complete";
@@ -1,4 +1,4 @@
1
- import { S as StreamAnimationPlugin } from './types-9Vxm-PPz.cjs';
1
+ import { S as StreamAnimationPlugin } from './types-Db61aI9J.cjs';
2
2
 
3
3
  declare const wipe: StreamAnimationPlugin;
4
4
 
@@ -1,4 +1,4 @@
1
- import { S as StreamAnimationPlugin } from './types-9Vxm-PPz.js';
1
+ import { S as StreamAnimationPlugin } from './types-Db61aI9J.js';
2
2
 
3
3
  declare const wipe: StreamAnimationPlugin;
4
4
 
@@ -69,6 +69,7 @@ type RuntypeExecutionStreamEvent = ({
69
69
  turnIndex?: number;
70
70
  type: "turn_start";
71
71
  }) | ({
72
+ attributes?: Record<string, string | number | boolean>;
72
73
  completedAt?: string;
73
74
  content?: string;
74
75
  cost?: number;
@@ -127,7 +128,8 @@ type RuntypeExecutionStreamEvent = ({
127
128
  };
128
129
  turnId?: string;
129
130
  type: "model_call_start";
130
- } | {
131
+ } | ({
132
+ attributes?: Record<string, string | number | boolean>;
131
133
  completedAt?: string;
132
134
  cost?: number;
133
135
  durationMs?: number;
@@ -151,10 +153,11 @@ type RuntypeExecutionStreamEvent = ({
151
153
  cacheWrite?: number;
152
154
  input: number;
153
155
  output: number;
156
+ reasoning?: number;
154
157
  };
155
158
  turnId?: string;
156
159
  type: "model_call_complete";
157
- } | {
160
+ }) | {
158
161
  executionId: string;
159
162
  id: string;
160
163
  index?: number;
@@ -677,6 +680,24 @@ type AgentMessageMetadata = {
677
680
  * never re-resume the call.
678
681
  */
679
682
  suggestRepliesResolved?: boolean;
683
+ /**
684
+ * The client-tool answer the server accepted through `/resume`, kept so
685
+ * later proxy/agent turns can replay the call and its result to the model.
686
+ * `toolName` is the widget's internal name (`webmcp:<name>` or a bare
687
+ * built-in). Set only after the resume succeeds; preserved across
688
+ * re-emissions of the tool message.
689
+ */
690
+ clientToolAnswer?: {
691
+ toolCallId: string;
692
+ toolName: string;
693
+ args: unknown;
694
+ result: unknown;
695
+ /**
696
+ * Shared by the answers posted in one `/resume`, i.e. one assistant
697
+ * turn's parallel calls; a chained call gets a new batch.
698
+ */
699
+ batch?: string;
700
+ };
680
701
  };
681
702
  /**
682
703
  * Context passed to plugin lifecycle hooks. Carries the live DOM references
@@ -784,6 +805,8 @@ type AgentWidgetReasoning = {
784
805
  durationMs?: number;
785
806
  };
786
807
  type AgentWidgetToolCall = {
808
+ /** Optional approval state for activity-row status chrome. */
809
+ approvalStatus?: "pending" | "approved" | "denied" | "timeout";
787
810
  id: string;
788
811
  name?: string;
789
812
  status: "pending" | "running" | "complete";
@@ -69,6 +69,7 @@ type RuntypeExecutionStreamEvent = ({
69
69
  turnIndex?: number;
70
70
  type: "turn_start";
71
71
  }) | ({
72
+ attributes?: Record<string, string | number | boolean>;
72
73
  completedAt?: string;
73
74
  content?: string;
74
75
  cost?: number;
@@ -127,7 +128,8 @@ type RuntypeExecutionStreamEvent = ({
127
128
  };
128
129
  turnId?: string;
129
130
  type: "model_call_start";
130
- } | {
131
+ } | ({
132
+ attributes?: Record<string, string | number | boolean>;
131
133
  completedAt?: string;
132
134
  cost?: number;
133
135
  durationMs?: number;
@@ -151,10 +153,11 @@ type RuntypeExecutionStreamEvent = ({
151
153
  cacheWrite?: number;
152
154
  input: number;
153
155
  output: number;
156
+ reasoning?: number;
154
157
  };
155
158
  turnId?: string;
156
159
  type: "model_call_complete";
157
- } | {
160
+ }) | {
158
161
  executionId: string;
159
162
  id: string;
160
163
  index?: number;
@@ -677,6 +680,24 @@ type AgentMessageMetadata = {
677
680
  * never re-resume the call.
678
681
  */
679
682
  suggestRepliesResolved?: boolean;
683
+ /**
684
+ * The client-tool answer the server accepted through `/resume`, kept so
685
+ * later proxy/agent turns can replay the call and its result to the model.
686
+ * `toolName` is the widget's internal name (`webmcp:<name>` or a bare
687
+ * built-in). Set only after the resume succeeds; preserved across
688
+ * re-emissions of the tool message.
689
+ */
690
+ clientToolAnswer?: {
691
+ toolCallId: string;
692
+ toolName: string;
693
+ args: unknown;
694
+ result: unknown;
695
+ /**
696
+ * Shared by the answers posted in one `/resume`, i.e. one assistant
697
+ * turn's parallel calls; a chained call gets a new batch.
698
+ */
699
+ batch?: string;
700
+ };
680
701
  };
681
702
  /**
682
703
  * Context passed to plugin lifecycle hooks. Carries the live DOM references
@@ -784,6 +805,8 @@ type AgentWidgetReasoning = {
784
805
  durationMs?: number;
785
806
  };
786
807
  type AgentWidgetToolCall = {
808
+ /** Optional approval state for activity-row status chrome. */
809
+ approvalStatus?: "pending" | "approved" | "denied" | "timeout";
787
810
  id: string;
788
811
  name?: string;
789
812
  status: "pending" | "running" | "complete";
@@ -0,0 +1 @@
1
+ import{a as E,g as I}from"./chunk-NQLDCJAP.js";import{a as C}from"./chunk-7NQ4ZTHF.js";import{b as q,c as $}from"./chunk-Q735PSZL.js";import{a}from"./chunk-76IELU7F.js";var R=()=>{},z=t=>{R=t.webMcpToolTitle},S=t=>R(t);import{ChevronDown as Y,ChevronUp as ee,ShieldAlert as te,ShieldCheck as K,ShieldX as _}from"lucide";var B=t=>{let s=(t.startsWith(E)?t.slice(E.length):t).replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[_\-\s.]+/).filter(Boolean);if(s.length===0)return t;let o=s.join(" ").toLowerCase();return o.charAt(0).toUpperCase()+o.slice(1)},F=t=>t?.approval!==!1?t?.approval:void 0,X=(t,n,s)=>{let o=F(s)?.detailsDisplay??"collapsed";return n.get(t)??o==="expanded"},j=(t,n,s)=>{let o=F(s);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=C(n?ee:Y,14,"currentColor",2);c&&m.appendChild(c)}},V=(t,n,s,o=new Map)=>{let e=n.querySelector('button[data-bubble-type="approval"]'),m=n.querySelector("[data-approval-details]");if(!e||!m)return;let c=X(t,o,s);j(e,c,s),m.style.display=c?"":"none"};var Z=(t,n,s=new Map)=>{let o=t.approval,e=n?.approval!==!1?n?.approval:void 0,m=o?.status==="pending",c=a("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 h=a("div","persona-flex persona-items-start persona-gap-3 persona-px-4 persona-py-3"),i=a("div","persona-flex-shrink-0 persona-mt-0.5");i.setAttribute("data-approval-icon","true");let f=o.status==="denied"?_:o.status==="timeout"?te:K,A=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=C(f,20,A,2);T&&i.appendChild(T);let b=a("div","persona-flex-1 persona-min-w-0"),g=a("div","persona-flex persona-items-center persona-gap-2"),M=a("span","persona-text-sm persona-font-medium persona-text-persona-primary");if(e?.titleColor&&(M.style.color=e.titleColor),M.textContent=e?.title??"Approval Required",g.appendChild(M),!m){let p=a("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",o.status),o.status==="approved"?(p.style.backgroundColor="var(--persona-palette-colors-success-100)",p.style.color="var(--persona-palette-colors-success-700)",p.textContent="Approved"):o.status==="denied"?(p.style.backgroundColor="var(--persona-palette-colors-error-100)",p.style.color="var(--persona-palette-colors-error-700)",p.textContent="Denied"):o.status==="timeout"&&(p.style.backgroundColor="var(--persona-palette-colors-warning-100)",p.style.color="var(--persona-palette-colors-warning-700)",p.textContent="Timeout"),g.appendChild(p)}b.appendChild(g);let v=o.toolType==="webmcp"||o.toolName.startsWith(E)?S(o.toolName):void 0,P=e?.formatDescription?.({toolName:o.toolName,toolType:o.toolType,description:o.description,parameters:o.parameters,...v?{displayTitle:v}:{},...o.reason?{reason:o.reason}:{}}),D=!o.toolName,H=P||(D?o.description:`The assistant wants to use \u201C${v??B(o.toolName)}\u201D.`),x=a("p","persona-text-sm persona-mt-0.5 persona-text-persona-muted");if(x.setAttribute("data-approval-summary","true"),e?.descriptionColor&&(x.style.color=e.descriptionColor),x.textContent=H,b.appendChild(x),o.reason){let p=a("p","persona-text-sm persona-mt-1 persona-text-persona-muted");p.setAttribute("data-approval-reason","true"),e?.reasonColor?p.style.color=e.reasonColor:e?.descriptionColor&&(p.style.color=e.descriptionColor);let r=a("span","persona-font-medium");r.textContent=`${e?.reasonLabel??"Agent's stated reason:"} `,p.appendChild(r),p.appendChild(document.createTextNode(o.reason)),b.appendChild(p)}let W=e?.detailsDisplay??"collapsed",L=!!o.description&&!D,N=L||!!o.parameters;if(W!=="hidden"&&N){let p=X(t.id,s,n),r=a("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");r.type="button",r.setAttribute("data-expand-header","true"),r.setAttribute("data-bubble-type","approval"),e?.descriptionColor&&(r.style.color=e.descriptionColor);let l=a("span");l.setAttribute("data-approval-details-label","true");let y=a("span","persona-inline-flex persona-items-center");y.setAttribute("data-approval-details-chevron","true"),r.append(l,y),j(r,p,n),b.appendChild(r);let u=a("div");if(u.setAttribute("data-approval-details","true"),u.style.display=p?"":"none",L){let d=a("p","persona-text-sm persona-mt-1 persona-text-persona-muted");e?.descriptionColor&&(d.style.color=e.descriptionColor),d.textContent=o.description,u.appendChild(d)}if(o.parameters){let d=a("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&&(d.style.backgroundColor=e.parameterBackgroundColor),e?.parameterTextColor&&(d.style.color=e.parameterTextColor),d.style.fontSize="0.75rem",d.style.lineHeight="1rem",d.textContent=I(o.parameters),u.appendChild(d)}b.appendChild(u)}if(m){let p=a("div","persona-flex persona-gap-2 persona-mt-2");p.setAttribute("data-approval-buttons","true");let r=a("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");r.type="button",r.style.backgroundColor=e?.approveButtonColor??"var(--persona-approval-approve-bg)",r.style.color=e?.approveButtonTextColor??"var(--persona-button-primary-fg)",r.setAttribute("data-approval-action","approve");let l=C(K,14,e?.approveButtonTextColor??"var(--persona-button-primary-fg)",2);l&&(l.style.marginRight="4px",r.appendChild(l));let y=document.createTextNode(e?.approveLabel??"Approve");r.appendChild(y);let u=a("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");u.type="button",u.style.backgroundColor=e?.denyButtonColor??"transparent",u.style.color=e?.denyButtonTextColor??"var(--persona-feedback-error, var(--persona-palette-colors-error-600))",u.style.border=`1px solid ${e?.denyButtonTextColor?e.denyButtonTextColor:"var(--persona-palette-colors-error-200)"}`,u.setAttribute("data-approval-action","deny");let d=C(_,14,e?.denyButtonTextColor??"var(--persona-feedback-error, var(--persona-palette-colors-error-600))",2);d&&(d.style.marginRight="4px",u.appendChild(d));let k=document.createTextNode(e?.denyLabel??"Deny");u.appendChild(k),p.append(r,u),b.appendChild(p)}return h.append(i,b),c.appendChild(h),c};import{Ban as oe,ChevronDown as G,ShieldCheck as ne}from"lucide";var re=()=>({keyHandlers:new Map,popovers:new Map,pendingOrder:[],latestPendingApprovalId:null}),J=(t,n)=>{let s=t.keyHandlers.get(n);s&&(document.removeEventListener("keydown",s),t.keyHandlers.delete(n));let o=t.popovers.get(n);o&&(o.destroy(),t.popovers.delete(n))},w=(t,n)=>{J(t,n);let s=t.pendingOrder.indexOf(n);s!==-1&&t.pendingOrder.splice(s,1),t.latestPendingApprovalId===n&&(t.latestPendingApprovalId=t.pendingOrder.length?t.pendingOrder[t.pendingOrder.length-1]:null)},ae=t=>t?.approval!==!1?t?.approval:void 0,se=(t,n,s)=>{let o=s?.detailsDisplay??"collapsed";return n.get(t)??o==="expanded"},U=t=>{let n=a("span","persona-approval-kbd");return n.textContent=t,n},pe=(t,n)=>{let s=a("span","persona-approval-title");n?.titleColor&&(s.style.color=n.titleColor);let e=t.toolType==="webmcp"||t.toolName.startsWith(E)?S(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 s.textContent=m,s;let c=e??B(t.toolName),h=t.toolType&&t.toolType!=="webmcp"?t.toolType:null;s.append("The assistant wants to use ");let i=document.createElement("strong");if(i.textContent=c,s.appendChild(i),h){s.append(" from ");let f=document.createElement("strong");f.textContent=h,s.appendChild(f)}return s},le=t=>{let n=a("div","persona-approval-resolved"),s=C(oe,15,"currentColor",2);s&&n.appendChild(s);let o=a("span","persona-approval-resolved-name");return o.textContent=t.toolName?B(t.toolName):"Tool",n.append(o,document.createTextNode(t.status==="timeout"?" timed out":" denied")),n},ie=(t,n,s,o,e,m,c,h)=>{let i=a("div","persona-approval-card persona-shadow-sm");i.id=`bubble-${s.id}`,i.setAttribute("data-message-id",s.id),i.setAttribute("data-bubble-type","approval"),e?.backgroundColor&&(i.style.background=e.backgroundColor),e?.borderColor&&(i.style.borderColor=e.borderColor),e?.shadow!==void 0&&(i.style.boxShadow=e.shadow.trim()===""?"none":e.shadow);let f=e?.detailsDisplay??"collapsed",A=!!o.description&&f!=="hidden",T=o.parameters!=null&&f!=="hidden",b=A||T,g=b&&se(s.id,n,e),M=e?.showDetailsLabel??"Show details",O=e?.hideDetailsLabel??"Hide details",v=a("button","persona-approval-head");v.type="button",b?(v.setAttribute("data-action","toggle-params"),v.setAttribute("aria-expanded",g?"true":"false"),v.setAttribute("aria-label",g?O:M)):v.setAttribute("data-static","true");let P=a("span","persona-approval-logo"),D=C(ne,16,"currentColor",2);D&&P.appendChild(D),v.appendChild(P);let H=pe(o,e);if(b){let r=a("span","persona-approval-toggle");r.setAttribute("aria-hidden","true");let l=C(G,14,"currentColor",2);l&&r.appendChild(l),H.append(" "),H.appendChild(r)}v.appendChild(H),i.appendChild(v);let x=a("div","persona-approval-body");if(b){let r=a("div","persona-approval-details");if(r.setAttribute("data-role","params"),r.hidden=!g,A){let l=a("p","persona-approval-desc");e?.descriptionColor&&(l.style.color=e.descriptionColor),l.textContent=o.description,r.appendChild(l)}if(T){let l=a("pre","persona-approval-params");e?.parameterBackgroundColor&&(l.style.background=e.parameterBackgroundColor),e?.parameterTextColor&&(l.style.color=e.parameterTextColor),l.textContent=I(o.parameters),r.appendChild(l)}x.appendChild(r)}if(o.reason){let r=a("p","persona-approval-reason");e?.reasonColor?r.style.color=e.reasonColor:e?.descriptionColor&&(r.style.color=e.descriptionColor);let l=a("span","persona-approval-reason-label");l.textContent=`${e?.reasonLabel??"Agent's stated reason:"} `,r.append(l,document.createTextNode(o.reason)),x.appendChild(r)}let W=a("div","persona-approval-actions"),L=null,N=r=>{e?.approveButtonColor&&(r.style.background=e.approveButtonColor),e?.approveButtonTextColor&&(r.style.color=e.approveButtonTextColor)},p=a("button","persona-approval-deny");if(p.type="button",p.setAttribute("data-action","deny"),e?.denyButtonColor&&(p.style.background=e.denyButtonColor),e?.denyButtonTextColor&&(p.style.color=e.denyButtonTextColor),p.append(e?.denyLabel??"Deny"),h){let r=a("div","persona-approval-split"),l=a("button","persona-approval-primary");l.type="button",l.setAttribute("data-action","always"),N(l),l.append(e?.approveLabel??"Always allow",U("\u23CE"));let y=a("button","persona-approval-caret");y.type="button",y.setAttribute("data-action","toggle-menu"),y.setAttribute("aria-label","More options"),N(y);let u=C(G,15,"currentColor",2);u&&y.appendChild(u),r.append(l,y),W.append(r,p),p.append(U("Esc"));let d=a("div","persona-approval-menu"),k=a("button","persona-approval-menu-item");k.type="button",k.append("Allow once",U("\u2318\u23CE")),d.appendChild(k),L=q({anchor:r,content:d,placement:"bottom-start",matchAnchorWidth:!0}),t.popovers.set(s.id,L),k.addEventListener("click",()=>{w(t,s.id),m()})}else{let r=a("button","persona-approval-primary persona-approval-primary--solo");r.type="button",r.setAttribute("data-action","allow"),N(r),r.append(e?.approveLabel??"Allow"),W.append(r,p)}return x.appendChild(W),i.appendChild(x),i.addEventListener("click",r=>{let l=r.target instanceof Element?r.target.closest("[data-action]"):null;if(!l)return;let y=l.getAttribute("data-action");if(y==="toggle-params"){let u=i.querySelector('[data-role="params"]');if(u){let d=u.hidden;u.hidden=!d,v.setAttribute("aria-expanded",d?"true":"false"),v.setAttribute("aria-label",d?O:M),n.set(s.id,d)}return}if(y==="toggle-menu"){L?.toggle();return}if(y==="always"){w(t,s.id),m({remember:!0});return}if(y==="allow"){w(t,s.id),m();return}if(y==="deny"){w(t,s.id),c();return}}),i},Q=(t=new Map)=>{let n=re();return{plugin:{id:"persona-built-in-approval",renderApproval:({message:e,approve:m,deny:c,config:h})=>{let i=e?.approval;if(!i)return null;let f=ae(h);if(i.status!=="pending"){if(w(n,e.id),i.status==="approved"){let b=document.createElement("div");return b.style.display="none",b}return le(i)}J(n,e.id);let A=f?.enableAlwaysAllow===!0,T=ie(n,t,e,i,f,m,c,A);if(A){n.pendingOrder.includes(e.id)||n.pendingOrder.push(e.id),n.latestPendingApprovalId=n.pendingOrder[n.pendingOrder.length-1];let b=g=>{$(g)||e.id===n.latestPendingApprovalId&&(g.key!=="Escape"&&g.key!=="Enter"||(g.preventDefault(),g.stopImmediatePropagation(),w(n,e.id),g.key==="Escape"?c():g.metaKey||g.ctrlKey?m():m({remember:!0})))};n.keyHandlers.set(e.id,b),document.addEventListener("keydown",b)}return T}},teardown:()=>{for(let e of[...n.keyHandlers.keys(),...n.popovers.keys()])w(n,e);n.latestPendingApprovalId=null}}};export{Z as createApprovalBubble,Q as createBuiltInApprovalPlugin,B as humanizeToolName,z as initApprovalUi,V 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=(t,a)=>()=>(a||t((a={exports:{}}).exports,a),a.exports),Se=(t,a)=>{for(var r in a)G(t,r,{get:a[r],enumerable:!0})},oe=(t,a,r,e)=>{if(a&&typeof a=="object"||typeof a=="function")for(let f of ge(a))!Ce.call(t,f)&&f!==r&&G(t,f,{get:()=>a[f],enumerable:!(e=ce(a,f))||e.enumerable});return t};var ye=(t,a,r)=>(r=t!=null?xe(he(t)):{},oe(a||!t||!t.__esModule?G(r,"default",{value:t,enumerable:!0}):r,t)),Ae=t=>oe(G({},"__esModule",{value:!0}),t);var J=ae(o=>{"use strict";Object.defineProperty(o,"__esModule",{value:!0});o.Allow=o.ALL=o.COLLECTION=o.ATOM=o.SPECIAL=o.INF=o._INFINITY=o.INFINITY=o.NAN=o.BOOL=o.NULL=o.OBJ=o.ARR=o.NUM=o.STR=void 0;o.STR=1;o.NUM=2;o.ARR=4;o.OBJ=8;o.NULL=16;o.BOOL=32;o.NAN=64;o.INFINITY=128;o._INFINITY=256;o.INF=o.INFINITY|o._INFINITY;o.SPECIAL=o.NULL|o.BOOL|o.INF|o.NAN;o.ATOM=o.STR|o.NUM|o.SPECIAL;o.COLLECTION=o.ARR|o.OBJ;o.ALL=o.ATOM|o.COLLECTION;o.Allow={STR:o.STR,NUM:o.NUM,ARR:o.ARR,OBJ:o.OBJ,NULL:o.NULL,BOOL:o.BOOL,NAN:o.NAN,INFINITY:o.INFINITY,_INFINITY:o._INFINITY,INF:o.INF,SPECIAL:o.SPECIAL,ATOM:o.ATOM,COLLECTION:o.COLLECTION,ALL:o.ALL};o.default=o.Allow});var le=ae(M=>{"use strict";var be=M&&M.__createBinding||(Object.create?(function(t,a,r,e){e===void 0&&(e=r);var f=Object.getOwnPropertyDescriptor(a,r);(!f||("get"in f?!a.__esModule:f.writable||f.configurable))&&(f={enumerable:!0,get:function(){return a[r]}}),Object.defineProperty(t,e,f)}):(function(t,a,r,e){e===void 0&&(e=r),t[e]=a[r]})),we=M&&M.__exportStar||function(t,a){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(a,r)&&be(a,t,r)};Object.defineProperty(M,"__esModule",{value:!0});M.Allow=M.MalformedJSON=M.PartialJSON=M.parseJSON=M.parse=void 0;var P=J();Object.defineProperty(M,"Allow",{enumerable:!0,get:function(){return P.Allow}});we(J(),M);var V=class extends Error{};M.PartialJSON=V;var z=class extends Error{};M.MalformedJSON=z;function fe(t,a=P.Allow.ALL){if(typeof t!="string")throw new TypeError(`expecting str, got ${typeof t}`);if(!t.trim())throw new Error(`${t} is empty`);return Te(t.trim(),a)}M.parseJSON=fe;var Te=(t,a)=>{let r=t.length,e=0,f=s=>{throw new V(`${s} at position ${e}`)},p=s=>{throw new z(`${s} at position ${e}`)},C=()=>(m(),e>=r&&f("Unexpected end of input"),t[e]==='"'?n():t[e]==="{"?y():t[e]==="["?A():t.substring(e,e+4)==="null"||P.Allow.NULL&a&&r-e<4&&"null".startsWith(t.substring(e))?(e+=4,null):t.substring(e,e+4)==="true"||P.Allow.BOOL&a&&r-e<4&&"true".startsWith(t.substring(e))?(e+=4,!0):t.substring(e,e+5)==="false"||P.Allow.BOOL&a&&r-e<5&&"false".startsWith(t.substring(e))?(e+=5,!1):t.substring(e,e+8)==="Infinity"||P.Allow.INFINITY&a&&r-e<8&&"Infinity".startsWith(t.substring(e))?(e+=8,1/0):t.substring(e,e+9)==="-Infinity"||P.Allow._INFINITY&a&&1<r-e&&r-e<9&&"-Infinity".startsWith(t.substring(e))?(e+=9,-1/0):t.substring(e,e+3)==="NaN"||P.Allow.NAN&a&&r-e<3&&"NaN".startsWith(t.substring(e))?(e+=3,NaN):k()),n=()=>{let s=e,x=!1;for(e++;e<r&&(t[e]!=='"'||x&&t[e-1]==="\\");)x=t[e]==="\\"?!x:!1,e++;if(t.charAt(e)=='"')try{return JSON.parse(t.substring(s,++e-Number(x)))}catch(b){p(String(b))}else if(P.Allow.STR&a)try{return JSON.parse(t.substring(s,e-Number(x))+'"')}catch{return JSON.parse(t.substring(s,t.lastIndexOf("\\"))+'"')}f("Unterminated string literal")},y=()=>{e++,m();let s={};try{for(;t[e]!=="}";){if(m(),e>=r&&P.Allow.OBJ&a)return s;let x=n();m(),e++;try{let b=C();s[x]=b}catch(b){if(P.Allow.OBJ&a)return s;throw b}m(),t[e]===","&&e++}}catch{if(P.Allow.OBJ&a)return s;f("Expected '}' at end of object")}return e++,s},A=()=>{e++;let s=[];try{for(;t[e]!=="]";)s.push(C()),m(),t[e]===","&&e++}catch{if(P.Allow.ARR&a)return s;f("Expected ']' at end of array")}return e++,s},k=()=>{if(e===0){t==="-"&&p("Not sure what '-' is");try{return JSON.parse(t)}catch(x){if(P.Allow.NUM&a)try{return JSON.parse(t.substring(0,t.lastIndexOf("e")))}catch{}p(String(x))}}let s=e;for(t[e]==="-"&&e++;t[e]&&",]}".indexOf(t[e])===-1;)e++;e==r&&!(P.Allow.NUM&a)&&f("Unterminated number literal");try{return JSON.parse(t.substring(s,e))}catch{t.substring(s,e)==="-"&&f("Not sure what '-' is");try{return JSON.parse(t.substring(s,t.lastIndexOf("e")))}catch(b){p(String(b))}}},m=()=>{for(;e<r&&`
2
- \r `.includes(t[e]);)e++};return C()},Me=fe;M.parse=Me});var Fe={};Se(Fe,{approvalDetailsExpansionState:()=>O,createApprovalBubble:()=>ee,createBuiltInApprovalPlugin:()=>re,humanizeToolName:()=>E,initApprovalUi:()=>$,updateApprovalDetailsUI:()=>j});module.exports=Ae(Fe);var d=(t,a)=>{let r=document.createElement(t);return a&&(r.className=a),r};var K=ye(le(),1);var X=t=>{if(t===null)return"null";if(t===void 0)return"";if(typeof t=="string")return t;if(typeof t=="number"||typeof t=="boolean")return String(t);try{return JSON.stringify(t,null,2)}catch{return String(t)}};var se=()=>{},$=t=>{se=t.webMcpToolTitle},_=t=>se(t);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 D=(t,a=24,r="currentColor",e=2)=>{if(!Array.isArray(t))return null;let f=document.createElementNS("http://www.w3.org/2000/svg","svg");return f.setAttribute("width",String(a)),f.setAttribute("height",String(a)),f.setAttribute("viewBox","0 0 24 24"),f.setAttribute("fill","none"),f.setAttribute("stroke",r),f.setAttribute("stroke-width",String(e)),f.setAttribute("stroke-linecap","round"),f.setAttribute("stroke-linejoin","round"),f.setAttribute("aria-hidden","true"),t.forEach(p=>{if(!Array.isArray(p)||p.length<2)return;let C=p[0],n=p[1];if(!n)return;let y=document.createElementNS("http://www.w3.org/2000/svg",C);Object.entries(n).forEach(([A,k])=>{A!=="stroke"&&y.setAttribute(A,String(k))}),f.appendChild(y)}),f};var I="webmcp:";var O=new Map,E=t=>{let r=(t.startsWith(I)?t.slice(I.length):t).replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[_\-\s.]+/).filter(Boolean);if(r.length===0)return t;let e=r.join(" ").toLowerCase();return e.charAt(0).toUpperCase()+e.slice(1)},de=t=>t?.approval!==!1?t?.approval:void 0,ue=(t,a)=>{let r=de(a)?.detailsDisplay??"collapsed";return O.get(t)??r==="expanded"},pe=(t,a,r)=>{let e=de(r);t.setAttribute("aria-expanded",a?"true":"false");let f=t.querySelector("[data-approval-details-label]");f&&(f.textContent=a?e?.hideDetailsLabel??"Hide details":e?.showDetailsLabel??"Show details");let p=t.querySelector("[data-approval-details-chevron]");if(p){p.innerHTML="";let C=D(a?Q:q,14,"currentColor",2);C&&p.appendChild(C)}},j=(t,a,r)=>{let e=a.querySelector('button[data-bubble-type="approval"]'),f=a.querySelector("[data-approval-details]");if(!e||!f)return;let p=ue(t,r);pe(e,p,r),f.style.display=p?"":"none"};var ee=(t,a)=>{let r=t.approval,e=a?.approval!==!1?a?.approval:void 0,f=r?.status==="pending",p=d("div",["persona-approval-bubble","persona-w-full","persona-rounded-2xl","persona-border","persona-shadow-sm","persona-overflow-hidden"].join(" "));if(p.id=`bubble-${t.id}`,p.setAttribute("data-message-id",t.id),p.style.backgroundColor=e?.backgroundColor??"var(--persona-approval-bg, #fefce8)",p.style.borderColor=e?.borderColor??"var(--persona-approval-border, #fef08a)",p.style.boxShadow=e?.shadow!==void 0?e.shadow.trim()===""?"none":e.shadow:"var(--persona-approval-shadow, 0 5px 15px rgba(15, 23, 42, 0.08))",!r)return p;let C=d("div","persona-flex persona-items-start persona-gap-3 persona-px-4 persona-py-3"),n=d("div","persona-flex-shrink-0 persona-mt-0.5");n.setAttribute("data-approval-icon","true");let y=r.status==="denied"?W:r.status==="timeout"?Y:U,A=r.status==="approved"?"var(--persona-feedback-success, #16a34a)":r.status==="denied"?"var(--persona-feedback-error, #dc2626)":r.status==="timeout"?"var(--persona-feedback-warning, #ca8a04)":e?.titleColor??"currentColor",k=D(y,20,A,2);k&&n.appendChild(k);let m=d("div","persona-flex-1 persona-min-w-0"),s=d("div","persona-flex persona-items-center persona-gap-2"),x=d("span","persona-text-sm persona-font-medium persona-text-persona-primary");if(e?.titleColor&&(x.style.color=e.titleColor),x.textContent=e?.title??"Approval Required",s.appendChild(x),!f){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",r.status),r.status==="approved"?(u.style.backgroundColor="var(--persona-palette-colors-success-100, #dcfce7)",u.style.color="var(--persona-palette-colors-success-700, #15803d)",u.textContent="Approved"):r.status==="denied"?(u.style.backgroundColor="var(--persona-palette-colors-error-100, #fee2e2)",u.style.color="var(--persona-palette-colors-error-700, #b91c1c)",u.textContent="Denied"):r.status==="timeout"&&(u.style.backgroundColor="var(--persona-palette-colors-warning-100, #fef3c7)",u.style.color="var(--persona-palette-colors-warning-700, #b45309)",u.textContent="Timeout"),s.appendChild(u)}m.appendChild(s);let S=r.toolType==="webmcp"||r.toolName.startsWith(I)?_(r.toolName):void 0,F=e?.formatDescription?.({toolName:r.toolName,toolType:r.toolType,description:r.description,parameters:r.parameters,...S?{displayTitle:S}:{},...r.reason?{reason:r.reason}:{}}),c=!r.toolName,L=F||(c?r.description:`The assistant wants to use \u201C${S??E(r.toolName)}\u201D.`),w=d("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=L,m.appendChild(w),r.reason){let u=d("p","persona-text-sm persona-mt-1 persona-text-persona-muted");u.setAttribute("data-approval-reason","true"),e?.reasonColor?u.style.color=e.reasonColor:e?.descriptionColor&&(u.style.color=e.descriptionColor);let l=d("span","persona-font-medium");l.textContent=`${e?.reasonLabel??"Agent's stated reason:"} `,u.appendChild(l),u.appendChild(document.createTextNode(r.reason)),m.appendChild(u)}let v=e?.detailsDisplay??"collapsed",B=!!r.description&&!c,R=B||!!r.parameters;if(v!=="hidden"&&R){let u=ue(t.id,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"),e?.descriptionColor&&(l.style.color=e.descriptionColor);let i=d("span");i.setAttribute("data-approval-details-label","true");let T=d("span","persona-inline-flex persona-items-center");T.setAttribute("data-approval-details-chevron","true"),l.append(i,T),pe(l,u,a),m.appendChild(l);let h=d("div");if(h.setAttribute("data-approval-details","true"),h.style.display=u?"":"none",B){let g=d("p","persona-text-sm persona-mt-1 persona-text-persona-muted");e?.descriptionColor&&(g.style.color=e.descriptionColor),g.textContent=r.description,h.appendChild(g)}if(r.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");e?.parameterBackgroundColor&&(g.style.backgroundColor=e.parameterBackgroundColor),e?.parameterTextColor&&(g.style.color=e.parameterTextColor),g.style.fontSize="0.75rem",g.style.lineHeight="1rem",g.textContent=X(r.parameters),h.appendChild(g)}m.appendChild(h)}if(f){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=e?.approveButtonColor??"var(--persona-approval-approve-bg, #22c55e)",l.style.color=e?.approveButtonTextColor??"#ffffff",l.setAttribute("data-approval-action","approve");let i=D(U,14,e?.approveButtonTextColor??"#ffffff",2);i&&(i.style.marginRight="4px",l.appendChild(i));let T=document.createTextNode(e?.approveLabel??"Approve");l.appendChild(T);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=e?.denyButtonColor??"transparent",h.style.color=e?.denyButtonTextColor??"var(--persona-feedback-error, #dc2626)",h.style.border=`1px solid ${e?.denyButtonTextColor?e.denyButtonTextColor:"var(--persona-palette-colors-error-200, #fca5a5)"}`,h.setAttribute("data-approval-action","deny");let g=D(W,14,e?.denyButtonTextColor??"var(--persona-feedback-error, #dc2626)",2);g&&(g.style.marginRight="4px",h.appendChild(g));let H=document.createTextNode(e?.denyLabel??"Deny");h.appendChild(H),u.append(l,h),m.appendChild(u)}return C.append(n,m),p.appendChild(C),p};function Pe(t){let a=t.getRootNode?.();return a instanceof ShadowRoot?a:(t.ownerDocument??document).body}function ne(t){let{anchor:a,content:r,placement:e="bottom-start",offset:f=6,matchAnchorWidth:p=!1,horizontalOffset:C,verticalOffset:n,zIndex:y=2147483e3,onOpen:A,onDismiss:k}=t,m=t.container??Pe(a),s=!1,x=null,b=()=>{if(!s)return;let c=a.getBoundingClientRect();r.style.position="fixed",p&&(r.style.minWidth=`${c.width}px`),C&&(r.style.maxWidth=`${c.width}px`);let L=r.getBoundingClientRect(),w=n?.()??null,v=w!=null?c.top+w:c.top,B=e==="top-start"||e==="top-end"?v-f-L.height:c.bottom+f,u=e==="bottom-end"||e==="top-end"?c.right-L.width:c.left,l=C?.()??null;if(l!=null){let i=Math.max(c.left,c.right-L.width);u=Math.min(Math.max(c.left+l,c.left),i)}r.style.top=`${B}px`,r.style.left=`${u}px`},S=()=>{s&&(s=!1,x&&(x(),x=null),r.remove())},F=()=>{if(s)return;s=!0,y!=null&&(r.style.zIndex=String(y)),m.appendChild(r),b();let c=(a.ownerDocument??document).defaultView??window,L=a.ownerDocument??document,w=()=>{if(!a.isConnected){S(),k?.("anchor-removed");return}b()},v=R=>{let u=typeof R.composedPath=="function"?R.composedPath():[];u.includes(r)||u.includes(a)||(S(),k?.("outside"))},B=c.setTimeout(()=>{L.addEventListener("pointerdown",v,!0)},0);c.addEventListener("scroll",w,!0),c.addEventListener("resize",w),x=()=>{c.clearTimeout(B),L.removeEventListener("pointerdown",v,!0),c.removeEventListener("scroll",w,!0),c.removeEventListener("resize",w)},A?.()};return{get isOpen(){return s},open:F,close:S,toggle:()=>s?S():F(),reposition:b,destroy:S}}function ie(t){return(typeof t.composedPath=="function"?t.composedPath():[]).some(r=>r instanceof HTMLElement&&(r.tagName==="INPUT"||r.tagName==="TEXTAREA"||r.isContentEditable))}var ke=()=>({keyHandlers:new Map,popovers:new Map,pendingOrder:[],latestPendingApprovalId:null}),me=(t,a)=>{let r=t.keyHandlers.get(a);r&&(document.removeEventListener("keydown",r),t.keyHandlers.delete(a));let e=t.popovers.get(a);e&&(e.destroy(),t.popovers.delete(a))},N=(t,a)=>{me(t,a);let r=t.pendingOrder.indexOf(a);r!==-1&&t.pendingOrder.splice(r,1),t.latestPendingApprovalId===a&&(t.latestPendingApprovalId=t.pendingOrder.length?t.pendingOrder[t.pendingOrder.length-1]:null)},Le=t=>t?.approval!==!1?t?.approval:void 0,ve=(t,a)=>{let r=a?.detailsDisplay??"collapsed";return O.get(t)??r==="expanded"},te=t=>{let a=d("span","persona-approval-kbd");return a.textContent=t,a},Be=(t,a)=>{let r=d("span","persona-approval-title");a?.titleColor&&(r.style.color=a.titleColor);let f=t.toolType==="webmcp"||t.toolName.startsWith(I)?_(t.toolName):void 0,p=a?.formatDescription?.({toolName:t.toolName,toolType:t.toolType,description:t.description??"",parameters:t.parameters,...f?{displayTitle:f}:{},...t.reason?{reason:t.reason}:{}});if(p)return r.textContent=p,r;let C=f??E(t.toolName),n=t.toolType&&t.toolType!=="webmcp"?t.toolType:null;r.append("The assistant wants to use ");let y=document.createElement("strong");if(y.textContent=C,r.appendChild(y),n){r.append(" from ");let A=document.createElement("strong");A.textContent=n,r.appendChild(A)}return r},De=t=>{let a=d("div","persona-approval-resolved"),r=D(Z,15,"currentColor",2);r&&a.appendChild(r);let e=d("span","persona-approval-resolved-name");return e.textContent=t.toolName?E(t.toolName):"Tool",a.append(e,document.createTextNode(t.status==="timeout"?" timed out":" denied")),a},Re=(t,a,r,e,f,p,C)=>{let n=d("div","persona-approval-card persona-shadow-sm");n.id=`bubble-${a.id}`,n.setAttribute("data-message-id",a.id),n.setAttribute("data-bubble-type","approval"),e?.backgroundColor&&(n.style.background=e.backgroundColor),e?.borderColor&&(n.style.borderColor=e.borderColor),e?.shadow!==void 0&&(n.style.boxShadow=e.shadow.trim()===""?"none":e.shadow);let y=e?.detailsDisplay??"collapsed",A=!!r.description&&y!=="hidden",k=r.parameters!=null&&y!=="hidden",m=A||k,s=m&&ve(a.id,e),x=e?.showDetailsLabel??"Show details",b=e?.hideDetailsLabel??"Hide details",S=d("button","persona-approval-head");S.type="button",m?(S.setAttribute("data-action","toggle-params"),S.setAttribute("aria-expanded",s?"true":"false"),S.setAttribute("aria-label",s?b:x)):S.setAttribute("data-static","true");let F=d("span","persona-approval-logo"),c=D(U,16,"currentColor",2);c&&F.appendChild(c),S.appendChild(F);let L=Be(r,e);if(m){let l=d("span","persona-approval-toggle");l.setAttribute("aria-hidden","true");let i=D(q,14,"currentColor",2);i&&l.appendChild(i),L.append(" "),L.appendChild(l)}S.appendChild(L),n.appendChild(S);let w=d("div","persona-approval-body");if(m){let l=d("div","persona-approval-details");if(l.setAttribute("data-role","params"),l.hidden=!s,A){let i=d("p","persona-approval-desc");e?.descriptionColor&&(i.style.color=e.descriptionColor),i.textContent=r.description,l.appendChild(i)}if(k){let i=d("pre","persona-approval-params");e?.parameterBackgroundColor&&(i.style.background=e.parameterBackgroundColor),e?.parameterTextColor&&(i.style.color=e.parameterTextColor),i.textContent=X(r.parameters),l.appendChild(i)}w.appendChild(l)}if(r.reason){let l=d("p","persona-approval-reason");e?.reasonColor?l.style.color=e.reasonColor:e?.descriptionColor&&(l.style.color=e.descriptionColor);let i=d("span","persona-approval-reason-label");i.textContent=`${e?.reasonLabel??"Agent's stated reason:"} `,l.append(i,document.createTextNode(r.reason)),w.appendChild(l)}let v=d("div","persona-approval-actions"),B=null,R=l=>{e?.approveButtonColor&&(l.style.background=e.approveButtonColor),e?.approveButtonTextColor&&(l.style.color=e.approveButtonTextColor)},u=d("button","persona-approval-deny");if(u.type="button",u.setAttribute("data-action","deny"),e?.denyButtonColor&&(u.style.background=e.denyButtonColor),e?.denyButtonTextColor&&(u.style.color=e.denyButtonTextColor),u.append(e?.denyLabel??"Deny"),C){let l=d("div","persona-approval-split"),i=d("button","persona-approval-primary");i.type="button",i.setAttribute("data-action","always"),R(i),i.append(e?.approveLabel??"Always allow",te("\u23CE"));let T=d("button","persona-approval-caret");T.type="button",T.setAttribute("data-action","toggle-menu"),T.setAttribute("aria-label","More options"),R(T);let h=D(q,15,"currentColor",2);h&&T.appendChild(h),l.append(i,T),v.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),B=ne({anchor:l,content:g,placement:"bottom-start",matchAnchorWidth:!0}),t.popovers.set(a.id,B),H.addEventListener("click",()=>{N(t,a.id),f()})}else{let l=d("button","persona-approval-primary persona-approval-primary--solo");l.type="button",l.setAttribute("data-action","allow"),R(l),l.append(e?.approveLabel??"Allow"),v.append(l,u)}return w.appendChild(v),n.appendChild(w),n.addEventListener("click",l=>{let i=l.target instanceof Element?l.target.closest("[data-action]"):null;if(!i)return;let T=i.getAttribute("data-action");if(T==="toggle-params"){let h=n.querySelector('[data-role="params"]');if(h){let g=h.hidden;h.hidden=!g,S.setAttribute("aria-expanded",g?"true":"false"),S.setAttribute("aria-label",g?b:x),O.set(a.id,g)}return}if(T==="toggle-menu"){B?.toggle();return}if(T==="always"){N(t,a.id),f({remember:!0});return}if(T==="allow"){N(t,a.id),f();return}if(T==="deny"){N(t,a.id),p();return}}),n},re=()=>{let t=ke();return{plugin:{id:"persona-built-in-approval",renderApproval:({message:e,approve:f,deny:p,config:C})=>{let n=e?.approval;if(!n)return null;let y=Le(C);if(n.status!=="pending"){if(N(t,e.id),n.status==="approved"){let m=document.createElement("div");return m.style.display="none",m}return De(n)}me(t,e.id);let A=y?.enableAlwaysAllow===!0,k=Re(t,e,n,y,f,p,A);if(A){t.pendingOrder.includes(e.id)||t.pendingOrder.push(e.id),t.latestPendingApprovalId=t.pendingOrder[t.pendingOrder.length-1];let m=s=>{ie(s)||e.id===t.latestPendingApprovalId&&(s.key!=="Escape"&&s.key!=="Enter"||(s.preventDefault(),s.stopImmediatePropagation(),N(t,e.id),s.key==="Escape"?p():s.metaKey||s.ctrlKey?f():f({remember:!0})))};t.keyHandlers.set(e.id,m),document.addEventListener("keydown",m)}return k}},teardown:()=>{for(let e of[...t.keyHandlers.keys(),...t.popovers.keys()])N(t,e);t.latestPendingApprovalId=null}}};0&&(module.exports={approvalDetailsExpansionState,createApprovalBubble,createBuiltInApprovalPlugin,humanizeToolName,initApprovalUi,updateApprovalDetailsUI});
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});
3
3
  /*! Bundled license information:
4
4
 
5
5
  lucide/dist/esm/icons/ban.mjs: