@runtypelabs/persona 4.21.1 → 4.22.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.
- package/dist/{approval-ui-RNNBR5R3.js → approval-ui-K7R5Q5OC.js} +1 -1
- package/dist/approval-ui.cjs +2 -2
- package/dist/approval-ui.d.cts +73 -2
- package/dist/approval-ui.d.ts +73 -2
- package/dist/approval-ui.js +2 -2
- package/dist/artifacts-ui-F4N6VMKF.js +7 -0
- package/dist/artifacts-ui.cjs +1 -1
- package/dist/artifacts-ui.d.cts +73 -2
- package/dist/artifacts-ui.d.ts +73 -2
- package/dist/artifacts-ui.js +1 -1
- package/dist/chunk-NQLDCJAP.js +4 -0
- package/dist/codegen.cjs +1 -1
- package/dist/codegen.js +1 -1
- package/dist/context-mentions.d.cts +73 -2
- package/dist/context-mentions.d.ts +73 -2
- package/dist/event-stream-view-FKWDY3UB.js +1 -0
- package/dist/event-stream-view.cjs +1 -1
- package/dist/event-stream-view.d.cts +73 -2
- package/dist/event-stream-view.d.ts +73 -2
- package/dist/event-stream-view.js +1 -1
- package/dist/forms-ui.d.cts +73 -2
- package/dist/forms-ui.d.ts +73 -2
- package/dist/index.cjs +63 -63
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +136 -5
- package/dist/index.d.ts +136 -5
- package/dist/index.global.js +48 -48
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +64 -64
- package/dist/index.js.map +1 -1
- package/dist/launcher.global.js +2 -2
- package/dist/launcher.global.js.map +1 -1
- package/dist/session-reconnect.d.cts +73 -2
- package/dist/session-reconnect.d.ts +73 -2
- package/dist/smart-dom-reader.d.cts +73 -2
- package/dist/smart-dom-reader.d.ts +73 -2
- package/dist/theme-editor-preview.cjs +64 -64
- package/dist/theme-editor-preview.d.cts +73 -2
- package/dist/theme-editor-preview.d.ts +73 -2
- package/dist/theme-editor-preview.js +45 -45
- package/dist/theme-editor.cjs +4 -4
- package/dist/theme-editor.d.cts +73 -2
- package/dist/theme-editor.d.ts +73 -2
- package/dist/theme-editor.js +2 -2
- package/dist/theme-reference.cjs +1 -1
- package/dist/theme-reference.d.cts +65 -1
- package/dist/theme-reference.d.ts +65 -1
- package/dist/theme-reference.js +1 -1
- package/dist/webmcp-polyfill.js +1 -4
- package/dist/webmcp-runtime-JI7T4QYF.js +6 -0
- package/dist/webmcp-runtime.cjs +2 -2
- package/dist/webmcp-runtime.d.cts +34 -2
- package/dist/webmcp-runtime.d.ts +34 -2
- package/dist/webmcp-runtime.js +2 -2
- package/package.json +2 -2
- package/src/components/artifact-preview.ts +5 -0
- package/src/components/event-stream-badge-theming.test.ts +159 -0
- package/src/components/event-stream-view.ts +50 -20
- package/src/generated/runtype-openapi-contract.ts +8 -0
- package/src/index-core.ts +2 -0
- package/src/runtime/init.registry.test.ts +56 -0
- package/src/runtime/init.ts +17 -0
- package/src/types/theme.ts +41 -1
- package/src/types.ts +38 -1
- package/src/ui.reasoning-display.test.ts +136 -2
- package/src/ui.ts +41 -10
- package/src/utils/__snapshots__/tokens-parity.test.ts.snap +1740 -0
- package/src/utils/formatting.ts +22 -0
- package/src/utils/theme.ts +16 -0
- package/src/utils/tokens.ts +59 -0
- package/src/webmcp-bridge.test.ts +132 -23
- package/src/webmcp-bridge.ts +26 -2
- package/src/webmcp-runtime-entry.ts +71 -11
- package/dist/artifacts-ui-J6AKUGTS.js +0 -7
- package/dist/chunk-HBE7LFNT.js +0 -4
- package/dist/event-stream-view-73NWKWVQ.js +0 -1
- package/dist/webmcp-runtime-P3CHZRHF.js +0 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as E,g as P}from"./chunk-HBE7LFNT.js";import{a as x}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},I=t=>R(t);import{ChevronDown as Y,ChevronUp as ee,ShieldAlert as te,ShieldCheck as K,ShieldX as _}from"lucide";var k=new Map,B=t=>{let o=(t.startsWith(E)?t.slice(E.length):t).replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[_\-\s.]+/).filter(Boolean);if(o.length===0)return t;let e=o.join(" ").toLowerCase();return e.charAt(0).toUpperCase()+e.slice(1)},F=t=>t?.approval!==!1?t?.approval:void 0,X=(t,r)=>{let o=F(r)?.detailsDisplay??"collapsed";return k.get(t)??o==="expanded"},j=(t,r,o)=>{let e=F(o);t.setAttribute("aria-expanded",r?"true":"false");let u=t.querySelector("[data-approval-details-label]");u&&(u.textContent=r?e?.hideDetailsLabel??"Hide details":e?.showDetailsLabel??"Show details");let i=t.querySelector("[data-approval-details-chevron]");if(i){i.innerHTML="";let g=x(r?ee:Y,14,"currentColor",2);g&&i.appendChild(g)}},V=(t,r,o)=>{let e=r.querySelector('button[data-bubble-type="approval"]'),u=r.querySelector("[data-approval-details]");if(!e||!u)return;let i=X(t,o);j(e,i,o),u.style.display=i?"":"none"};var Z=(t,r)=>{let o=t.approval,e=r?.approval!==!1?r?.approval:void 0,u=o?.status==="pending",i=a("div",["persona-approval-bubble","persona-w-full","persona-rounded-2xl","persona-border","persona-shadow-sm","persona-overflow-hidden"].join(" "));if(i.id=`bubble-${t.id}`,i.setAttribute("data-message-id",t.id),i.style.backgroundColor=e?.backgroundColor??"var(--persona-approval-bg, #fefce8)",i.style.borderColor=e?.borderColor??"var(--persona-approval-border, #fef08a)",i.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))",!o)return i;let g=a("div","persona-flex persona-items-start persona-gap-3 persona-px-4 persona-py-3"),l=a("div","persona-flex-shrink-0 persona-mt-0.5");l.setAttribute("data-approval-icon","true");let v=o.status==="denied"?_:o.status==="timeout"?te:K,C=o.status==="approved"?"var(--persona-feedback-success, #16a34a)":o.status==="denied"?"var(--persona-feedback-error, #dc2626)":o.status==="timeout"?"var(--persona-feedback-warning, #ca8a04)":e?.titleColor??"currentColor",A=x(v,20,C,2);A&&l.appendChild(A);let m=a("div","persona-flex-1 persona-min-w-0"),f=a("div","persona-flex persona-items-center persona-gap-2"),w=a("span","persona-text-sm persona-font-medium persona-text-persona-primary");if(e?.titleColor&&(w.style.color=e.titleColor),w.textContent=e?.title??"Approval Required",f.appendChild(w),!u){let s=a("span","persona-inline-flex persona-items-center persona-px-2 persona-py-0.5 persona-rounded-full persona-text-xs persona-font-medium");s.setAttribute("data-approval-status",o.status),o.status==="approved"?(s.style.backgroundColor="var(--persona-palette-colors-success-100, #dcfce7)",s.style.color="var(--persona-palette-colors-success-700, #15803d)",s.textContent="Approved"):o.status==="denied"?(s.style.backgroundColor="var(--persona-palette-colors-error-100, #fee2e2)",s.style.color="var(--persona-palette-colors-error-700, #b91c1c)",s.textContent="Denied"):o.status==="timeout"&&(s.style.backgroundColor="var(--persona-palette-colors-warning-100, #fef3c7)",s.style.color="var(--persona-palette-colors-warning-700, #b45309)",s.textContent="Timeout"),f.appendChild(s)}m.appendChild(f);let y=o.toolType==="webmcp"||o.toolName.startsWith(E)?I(o.toolName):void 0,N=e?.formatDescription?.({toolName:o.toolName,toolType:o.toolType,description:o.description,parameters:o.parameters,...y?{displayTitle:y}:{},...o.reason?{reason:o.reason}:{}}),D=!o.toolName,H=N||(D?o.description:`The assistant wants to use \u201C${y??B(o.toolName)}\u201D.`),h=a("p","persona-text-sm persona-mt-0.5 persona-text-persona-muted");if(h.setAttribute("data-approval-summary","true"),e?.descriptionColor&&(h.style.color=e.descriptionColor),h.textContent=H,m.appendChild(h),o.reason){let s=a("p","persona-text-sm persona-mt-1 persona-text-persona-muted");s.setAttribute("data-approval-reason","true"),e?.reasonColor?s.style.color=e.reasonColor:e?.descriptionColor&&(s.style.color=e.descriptionColor);let n=a("span","persona-font-medium");n.textContent=`${e?.reasonLabel??"Agent's stated reason:"} `,s.appendChild(n),s.appendChild(document.createTextNode(o.reason)),m.appendChild(s)}let W=e?.detailsDisplay??"collapsed",M=!!o.description&&!D,S=M||!!o.parameters;if(W!=="hidden"&&S){let s=X(t.id,r),n=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");n.type="button",n.setAttribute("data-expand-header","true"),n.setAttribute("data-bubble-type","approval"),e?.descriptionColor&&(n.style.color=e.descriptionColor);let p=a("span");p.setAttribute("data-approval-details-label","true");let b=a("span","persona-inline-flex persona-items-center");b.setAttribute("data-approval-details-chevron","true"),n.append(p,b),j(n,s,r),m.appendChild(n);let c=a("div");if(c.setAttribute("data-approval-details","true"),c.style.display=s?"":"none",M){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,c.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=P(o.parameters),c.appendChild(d)}m.appendChild(c)}if(u){let s=a("div","persona-flex persona-gap-2 persona-mt-2");s.setAttribute("data-approval-buttons","true");let n=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");n.type="button",n.style.backgroundColor=e?.approveButtonColor??"var(--persona-approval-approve-bg, #22c55e)",n.style.color=e?.approveButtonTextColor??"#ffffff",n.setAttribute("data-approval-action","approve");let p=x(K,14,e?.approveButtonTextColor??"#ffffff",2);p&&(p.style.marginRight="4px",n.appendChild(p));let b=document.createTextNode(e?.approveLabel??"Approve");n.appendChild(b);let c=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");c.type="button",c.style.backgroundColor=e?.denyButtonColor??"transparent",c.style.color=e?.denyButtonTextColor??"var(--persona-feedback-error, #dc2626)",c.style.border=`1px solid ${e?.denyButtonTextColor?e.denyButtonTextColor:"var(--persona-palette-colors-error-200, #fca5a5)"}`,c.setAttribute("data-approval-action","deny");let d=x(_,14,e?.denyButtonTextColor??"var(--persona-feedback-error, #dc2626)",2);d&&(d.style.marginRight="4px",c.appendChild(d));let L=document.createTextNode(e?.denyLabel??"Deny");c.appendChild(L),s.append(n,c),m.appendChild(s)}return g.append(l,m),i.appendChild(g),i};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,r)=>{let o=t.keyHandlers.get(r);o&&(document.removeEventListener("keydown",o),t.keyHandlers.delete(r));let e=t.popovers.get(r);e&&(e.destroy(),t.popovers.delete(r))},T=(t,r)=>{J(t,r);let o=t.pendingOrder.indexOf(r);o!==-1&&t.pendingOrder.splice(o,1),t.latestPendingApprovalId===r&&(t.latestPendingApprovalId=t.pendingOrder.length?t.pendingOrder[t.pendingOrder.length-1]:null)},ae=t=>t?.approval!==!1?t?.approval:void 0,se=(t,r)=>{let o=r?.detailsDisplay??"collapsed";return k.get(t)??o==="expanded"},U=t=>{let r=a("span","persona-approval-kbd");return r.textContent=t,r},pe=(t,r)=>{let o=a("span","persona-approval-title");r?.titleColor&&(o.style.color=r.titleColor);let u=t.toolType==="webmcp"||t.toolName.startsWith(E)?I(t.toolName):void 0,i=r?.formatDescription?.({toolName:t.toolName,toolType:t.toolType,description:t.description??"",parameters:t.parameters,...u?{displayTitle:u}:{},...t.reason?{reason:t.reason}:{}});if(i)return o.textContent=i,o;let g=u??B(t.toolName),l=t.toolType&&t.toolType!=="webmcp"?t.toolType:null;o.append("The assistant wants to use ");let v=document.createElement("strong");if(v.textContent=g,o.appendChild(v),l){o.append(" from ");let C=document.createElement("strong");C.textContent=l,o.appendChild(C)}return o},le=t=>{let r=a("div","persona-approval-resolved"),o=x(oe,15,"currentColor",2);o&&r.appendChild(o);let e=a("span","persona-approval-resolved-name");return e.textContent=t.toolName?B(t.toolName):"Tool",r.append(e,document.createTextNode(t.status==="timeout"?" timed out":" denied")),r},ie=(t,r,o,e,u,i,g)=>{let l=a("div","persona-approval-card persona-shadow-sm");l.id=`bubble-${r.id}`,l.setAttribute("data-message-id",r.id),l.setAttribute("data-bubble-type","approval"),e?.backgroundColor&&(l.style.background=e.backgroundColor),e?.borderColor&&(l.style.borderColor=e.borderColor),e?.shadow!==void 0&&(l.style.boxShadow=e.shadow.trim()===""?"none":e.shadow);let v=e?.detailsDisplay??"collapsed",C=!!o.description&&v!=="hidden",A=o.parameters!=null&&v!=="hidden",m=C||A,f=m&&se(r.id,e),w=e?.showDetailsLabel??"Show details",O=e?.hideDetailsLabel??"Hide details",y=a("button","persona-approval-head");y.type="button",m?(y.setAttribute("data-action","toggle-params"),y.setAttribute("aria-expanded",f?"true":"false"),y.setAttribute("aria-label",f?O:w)):y.setAttribute("data-static","true");let N=a("span","persona-approval-logo"),D=x(ne,16,"currentColor",2);D&&N.appendChild(D),y.appendChild(N);let H=pe(o,e);if(m){let n=a("span","persona-approval-toggle");n.setAttribute("aria-hidden","true");let p=x(G,14,"currentColor",2);p&&n.appendChild(p),H.append(" "),H.appendChild(n)}y.appendChild(H),l.appendChild(y);let h=a("div","persona-approval-body");if(m){let n=a("div","persona-approval-details");if(n.setAttribute("data-role","params"),n.hidden=!f,C){let p=a("p","persona-approval-desc");e?.descriptionColor&&(p.style.color=e.descriptionColor),p.textContent=o.description,n.appendChild(p)}if(A){let p=a("pre","persona-approval-params");e?.parameterBackgroundColor&&(p.style.background=e.parameterBackgroundColor),e?.parameterTextColor&&(p.style.color=e.parameterTextColor),p.textContent=P(o.parameters),n.appendChild(p)}h.appendChild(n)}if(o.reason){let n=a("p","persona-approval-reason");e?.reasonColor?n.style.color=e.reasonColor:e?.descriptionColor&&(n.style.color=e.descriptionColor);let p=a("span","persona-approval-reason-label");p.textContent=`${e?.reasonLabel??"Agent's stated reason:"} `,n.append(p,document.createTextNode(o.reason)),h.appendChild(n)}let W=a("div","persona-approval-actions"),M=null,S=n=>{e?.approveButtonColor&&(n.style.background=e.approveButtonColor),e?.approveButtonTextColor&&(n.style.color=e.approveButtonTextColor)},s=a("button","persona-approval-deny");if(s.type="button",s.setAttribute("data-action","deny"),e?.denyButtonColor&&(s.style.background=e.denyButtonColor),e?.denyButtonTextColor&&(s.style.color=e.denyButtonTextColor),s.append(e?.denyLabel??"Deny"),g){let n=a("div","persona-approval-split"),p=a("button","persona-approval-primary");p.type="button",p.setAttribute("data-action","always"),S(p),p.append(e?.approveLabel??"Always allow",U("\u23CE"));let b=a("button","persona-approval-caret");b.type="button",b.setAttribute("data-action","toggle-menu"),b.setAttribute("aria-label","More options"),S(b);let c=x(G,15,"currentColor",2);c&&b.appendChild(c),n.append(p,b),W.append(n,s),s.append(U("Esc"));let d=a("div","persona-approval-menu"),L=a("button","persona-approval-menu-item");L.type="button",L.append("Allow once",U("\u2318\u23CE")),d.appendChild(L),M=q({anchor:n,content:d,placement:"bottom-start",matchAnchorWidth:!0}),t.popovers.set(r.id,M),L.addEventListener("click",()=>{T(t,r.id),u()})}else{let n=a("button","persona-approval-primary persona-approval-primary--solo");n.type="button",n.setAttribute("data-action","allow"),S(n),n.append(e?.approveLabel??"Allow"),W.append(n,s)}return h.appendChild(W),l.appendChild(h),l.addEventListener("click",n=>{let p=n.target instanceof Element?n.target.closest("[data-action]"):null;if(!p)return;let b=p.getAttribute("data-action");if(b==="toggle-params"){let c=l.querySelector('[data-role="params"]');if(c){let d=c.hidden;c.hidden=!d,y.setAttribute("aria-expanded",d?"true":"false"),y.setAttribute("aria-label",d?O:w),k.set(r.id,d)}return}if(b==="toggle-menu"){M?.toggle();return}if(b==="always"){T(t,r.id),u({remember:!0});return}if(b==="allow"){T(t,r.id),u();return}if(b==="deny"){T(t,r.id),i();return}}),l},Q=()=>{let t=re();return{plugin:{id:"persona-built-in-approval",renderApproval:({message:e,approve:u,deny:i,config:g})=>{let l=e?.approval;if(!l)return null;let v=ae(g);if(l.status!=="pending"){if(T(t,e.id),l.status==="approved"){let m=document.createElement("div");return m.style.display="none",m}return le(l)}J(t,e.id);let C=v?.enableAlwaysAllow===!0,A=ie(t,e,l,v,u,i,C);if(C){t.pendingOrder.includes(e.id)||t.pendingOrder.push(e.id),t.latestPendingApprovalId=t.pendingOrder[t.pendingOrder.length-1];let m=f=>{$(f)||e.id===t.latestPendingApprovalId&&(f.key!=="Escape"&&f.key!=="Enter"||(f.preventDefault(),f.stopImmediatePropagation(),T(t,e.id),f.key==="Escape"?i():f.metaKey||f.ctrlKey?u():u({remember:!0})))};t.keyHandlers.set(e.id,m),document.addEventListener("keydown",m)}return A}},teardown:()=>{for(let e of[...t.keyHandlers.keys(),...t.popovers.keys()])T(t,e);t.latestPendingApprovalId=null}}};export{k as approvalDetailsExpansionState,Z as createApprovalBubble,Q as createBuiltInApprovalPlugin,B as humanizeToolName,z as initApprovalUi,V as updateApprovalDetailsUI};
|
|
1
|
+
import{a as E,g as P}from"./chunk-NQLDCJAP.js";import{a as x}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},I=t=>R(t);import{ChevronDown as Y,ChevronUp as ee,ShieldAlert as te,ShieldCheck as K,ShieldX as _}from"lucide";var k=new Map,B=t=>{let o=(t.startsWith(E)?t.slice(E.length):t).replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[_\-\s.]+/).filter(Boolean);if(o.length===0)return t;let e=o.join(" ").toLowerCase();return e.charAt(0).toUpperCase()+e.slice(1)},F=t=>t?.approval!==!1?t?.approval:void 0,X=(t,r)=>{let o=F(r)?.detailsDisplay??"collapsed";return k.get(t)??o==="expanded"},j=(t,r,o)=>{let e=F(o);t.setAttribute("aria-expanded",r?"true":"false");let u=t.querySelector("[data-approval-details-label]");u&&(u.textContent=r?e?.hideDetailsLabel??"Hide details":e?.showDetailsLabel??"Show details");let i=t.querySelector("[data-approval-details-chevron]");if(i){i.innerHTML="";let g=x(r?ee:Y,14,"currentColor",2);g&&i.appendChild(g)}},V=(t,r,o)=>{let e=r.querySelector('button[data-bubble-type="approval"]'),u=r.querySelector("[data-approval-details]");if(!e||!u)return;let i=X(t,o);j(e,i,o),u.style.display=i?"":"none"};var Z=(t,r)=>{let o=t.approval,e=r?.approval!==!1?r?.approval:void 0,u=o?.status==="pending",i=a("div",["persona-approval-bubble","persona-w-full","persona-rounded-2xl","persona-border","persona-shadow-sm","persona-overflow-hidden"].join(" "));if(i.id=`bubble-${t.id}`,i.setAttribute("data-message-id",t.id),i.style.backgroundColor=e?.backgroundColor??"var(--persona-approval-bg, #fefce8)",i.style.borderColor=e?.borderColor??"var(--persona-approval-border, #fef08a)",i.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))",!o)return i;let g=a("div","persona-flex persona-items-start persona-gap-3 persona-px-4 persona-py-3"),l=a("div","persona-flex-shrink-0 persona-mt-0.5");l.setAttribute("data-approval-icon","true");let v=o.status==="denied"?_:o.status==="timeout"?te:K,C=o.status==="approved"?"var(--persona-feedback-success, #16a34a)":o.status==="denied"?"var(--persona-feedback-error, #dc2626)":o.status==="timeout"?"var(--persona-feedback-warning, #ca8a04)":e?.titleColor??"currentColor",A=x(v,20,C,2);A&&l.appendChild(A);let m=a("div","persona-flex-1 persona-min-w-0"),f=a("div","persona-flex persona-items-center persona-gap-2"),w=a("span","persona-text-sm persona-font-medium persona-text-persona-primary");if(e?.titleColor&&(w.style.color=e.titleColor),w.textContent=e?.title??"Approval Required",f.appendChild(w),!u){let s=a("span","persona-inline-flex persona-items-center persona-px-2 persona-py-0.5 persona-rounded-full persona-text-xs persona-font-medium");s.setAttribute("data-approval-status",o.status),o.status==="approved"?(s.style.backgroundColor="var(--persona-palette-colors-success-100, #dcfce7)",s.style.color="var(--persona-palette-colors-success-700, #15803d)",s.textContent="Approved"):o.status==="denied"?(s.style.backgroundColor="var(--persona-palette-colors-error-100, #fee2e2)",s.style.color="var(--persona-palette-colors-error-700, #b91c1c)",s.textContent="Denied"):o.status==="timeout"&&(s.style.backgroundColor="var(--persona-palette-colors-warning-100, #fef3c7)",s.style.color="var(--persona-palette-colors-warning-700, #b45309)",s.textContent="Timeout"),f.appendChild(s)}m.appendChild(f);let y=o.toolType==="webmcp"||o.toolName.startsWith(E)?I(o.toolName):void 0,N=e?.formatDescription?.({toolName:o.toolName,toolType:o.toolType,description:o.description,parameters:o.parameters,...y?{displayTitle:y}:{},...o.reason?{reason:o.reason}:{}}),D=!o.toolName,H=N||(D?o.description:`The assistant wants to use \u201C${y??B(o.toolName)}\u201D.`),h=a("p","persona-text-sm persona-mt-0.5 persona-text-persona-muted");if(h.setAttribute("data-approval-summary","true"),e?.descriptionColor&&(h.style.color=e.descriptionColor),h.textContent=H,m.appendChild(h),o.reason){let s=a("p","persona-text-sm persona-mt-1 persona-text-persona-muted");s.setAttribute("data-approval-reason","true"),e?.reasonColor?s.style.color=e.reasonColor:e?.descriptionColor&&(s.style.color=e.descriptionColor);let n=a("span","persona-font-medium");n.textContent=`${e?.reasonLabel??"Agent's stated reason:"} `,s.appendChild(n),s.appendChild(document.createTextNode(o.reason)),m.appendChild(s)}let W=e?.detailsDisplay??"collapsed",M=!!o.description&&!D,S=M||!!o.parameters;if(W!=="hidden"&&S){let s=X(t.id,r),n=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");n.type="button",n.setAttribute("data-expand-header","true"),n.setAttribute("data-bubble-type","approval"),e?.descriptionColor&&(n.style.color=e.descriptionColor);let p=a("span");p.setAttribute("data-approval-details-label","true");let b=a("span","persona-inline-flex persona-items-center");b.setAttribute("data-approval-details-chevron","true"),n.append(p,b),j(n,s,r),m.appendChild(n);let c=a("div");if(c.setAttribute("data-approval-details","true"),c.style.display=s?"":"none",M){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,c.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=P(o.parameters),c.appendChild(d)}m.appendChild(c)}if(u){let s=a("div","persona-flex persona-gap-2 persona-mt-2");s.setAttribute("data-approval-buttons","true");let n=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");n.type="button",n.style.backgroundColor=e?.approveButtonColor??"var(--persona-approval-approve-bg, #22c55e)",n.style.color=e?.approveButtonTextColor??"#ffffff",n.setAttribute("data-approval-action","approve");let p=x(K,14,e?.approveButtonTextColor??"#ffffff",2);p&&(p.style.marginRight="4px",n.appendChild(p));let b=document.createTextNode(e?.approveLabel??"Approve");n.appendChild(b);let c=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");c.type="button",c.style.backgroundColor=e?.denyButtonColor??"transparent",c.style.color=e?.denyButtonTextColor??"var(--persona-feedback-error, #dc2626)",c.style.border=`1px solid ${e?.denyButtonTextColor?e.denyButtonTextColor:"var(--persona-palette-colors-error-200, #fca5a5)"}`,c.setAttribute("data-approval-action","deny");let d=x(_,14,e?.denyButtonTextColor??"var(--persona-feedback-error, #dc2626)",2);d&&(d.style.marginRight="4px",c.appendChild(d));let L=document.createTextNode(e?.denyLabel??"Deny");c.appendChild(L),s.append(n,c),m.appendChild(s)}return g.append(l,m),i.appendChild(g),i};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,r)=>{let o=t.keyHandlers.get(r);o&&(document.removeEventListener("keydown",o),t.keyHandlers.delete(r));let e=t.popovers.get(r);e&&(e.destroy(),t.popovers.delete(r))},T=(t,r)=>{J(t,r);let o=t.pendingOrder.indexOf(r);o!==-1&&t.pendingOrder.splice(o,1),t.latestPendingApprovalId===r&&(t.latestPendingApprovalId=t.pendingOrder.length?t.pendingOrder[t.pendingOrder.length-1]:null)},ae=t=>t?.approval!==!1?t?.approval:void 0,se=(t,r)=>{let o=r?.detailsDisplay??"collapsed";return k.get(t)??o==="expanded"},U=t=>{let r=a("span","persona-approval-kbd");return r.textContent=t,r},pe=(t,r)=>{let o=a("span","persona-approval-title");r?.titleColor&&(o.style.color=r.titleColor);let u=t.toolType==="webmcp"||t.toolName.startsWith(E)?I(t.toolName):void 0,i=r?.formatDescription?.({toolName:t.toolName,toolType:t.toolType,description:t.description??"",parameters:t.parameters,...u?{displayTitle:u}:{},...t.reason?{reason:t.reason}:{}});if(i)return o.textContent=i,o;let g=u??B(t.toolName),l=t.toolType&&t.toolType!=="webmcp"?t.toolType:null;o.append("The assistant wants to use ");let v=document.createElement("strong");if(v.textContent=g,o.appendChild(v),l){o.append(" from ");let C=document.createElement("strong");C.textContent=l,o.appendChild(C)}return o},le=t=>{let r=a("div","persona-approval-resolved"),o=x(oe,15,"currentColor",2);o&&r.appendChild(o);let e=a("span","persona-approval-resolved-name");return e.textContent=t.toolName?B(t.toolName):"Tool",r.append(e,document.createTextNode(t.status==="timeout"?" timed out":" denied")),r},ie=(t,r,o,e,u,i,g)=>{let l=a("div","persona-approval-card persona-shadow-sm");l.id=`bubble-${r.id}`,l.setAttribute("data-message-id",r.id),l.setAttribute("data-bubble-type","approval"),e?.backgroundColor&&(l.style.background=e.backgroundColor),e?.borderColor&&(l.style.borderColor=e.borderColor),e?.shadow!==void 0&&(l.style.boxShadow=e.shadow.trim()===""?"none":e.shadow);let v=e?.detailsDisplay??"collapsed",C=!!o.description&&v!=="hidden",A=o.parameters!=null&&v!=="hidden",m=C||A,f=m&&se(r.id,e),w=e?.showDetailsLabel??"Show details",O=e?.hideDetailsLabel??"Hide details",y=a("button","persona-approval-head");y.type="button",m?(y.setAttribute("data-action","toggle-params"),y.setAttribute("aria-expanded",f?"true":"false"),y.setAttribute("aria-label",f?O:w)):y.setAttribute("data-static","true");let N=a("span","persona-approval-logo"),D=x(ne,16,"currentColor",2);D&&N.appendChild(D),y.appendChild(N);let H=pe(o,e);if(m){let n=a("span","persona-approval-toggle");n.setAttribute("aria-hidden","true");let p=x(G,14,"currentColor",2);p&&n.appendChild(p),H.append(" "),H.appendChild(n)}y.appendChild(H),l.appendChild(y);let h=a("div","persona-approval-body");if(m){let n=a("div","persona-approval-details");if(n.setAttribute("data-role","params"),n.hidden=!f,C){let p=a("p","persona-approval-desc");e?.descriptionColor&&(p.style.color=e.descriptionColor),p.textContent=o.description,n.appendChild(p)}if(A){let p=a("pre","persona-approval-params");e?.parameterBackgroundColor&&(p.style.background=e.parameterBackgroundColor),e?.parameterTextColor&&(p.style.color=e.parameterTextColor),p.textContent=P(o.parameters),n.appendChild(p)}h.appendChild(n)}if(o.reason){let n=a("p","persona-approval-reason");e?.reasonColor?n.style.color=e.reasonColor:e?.descriptionColor&&(n.style.color=e.descriptionColor);let p=a("span","persona-approval-reason-label");p.textContent=`${e?.reasonLabel??"Agent's stated reason:"} `,n.append(p,document.createTextNode(o.reason)),h.appendChild(n)}let W=a("div","persona-approval-actions"),M=null,S=n=>{e?.approveButtonColor&&(n.style.background=e.approveButtonColor),e?.approveButtonTextColor&&(n.style.color=e.approveButtonTextColor)},s=a("button","persona-approval-deny");if(s.type="button",s.setAttribute("data-action","deny"),e?.denyButtonColor&&(s.style.background=e.denyButtonColor),e?.denyButtonTextColor&&(s.style.color=e.denyButtonTextColor),s.append(e?.denyLabel??"Deny"),g){let n=a("div","persona-approval-split"),p=a("button","persona-approval-primary");p.type="button",p.setAttribute("data-action","always"),S(p),p.append(e?.approveLabel??"Always allow",U("\u23CE"));let b=a("button","persona-approval-caret");b.type="button",b.setAttribute("data-action","toggle-menu"),b.setAttribute("aria-label","More options"),S(b);let c=x(G,15,"currentColor",2);c&&b.appendChild(c),n.append(p,b),W.append(n,s),s.append(U("Esc"));let d=a("div","persona-approval-menu"),L=a("button","persona-approval-menu-item");L.type="button",L.append("Allow once",U("\u2318\u23CE")),d.appendChild(L),M=q({anchor:n,content:d,placement:"bottom-start",matchAnchorWidth:!0}),t.popovers.set(r.id,M),L.addEventListener("click",()=>{T(t,r.id),u()})}else{let n=a("button","persona-approval-primary persona-approval-primary--solo");n.type="button",n.setAttribute("data-action","allow"),S(n),n.append(e?.approveLabel??"Allow"),W.append(n,s)}return h.appendChild(W),l.appendChild(h),l.addEventListener("click",n=>{let p=n.target instanceof Element?n.target.closest("[data-action]"):null;if(!p)return;let b=p.getAttribute("data-action");if(b==="toggle-params"){let c=l.querySelector('[data-role="params"]');if(c){let d=c.hidden;c.hidden=!d,y.setAttribute("aria-expanded",d?"true":"false"),y.setAttribute("aria-label",d?O:w),k.set(r.id,d)}return}if(b==="toggle-menu"){M?.toggle();return}if(b==="always"){T(t,r.id),u({remember:!0});return}if(b==="allow"){T(t,r.id),u();return}if(b==="deny"){T(t,r.id),i();return}}),l},Q=()=>{let t=re();return{plugin:{id:"persona-built-in-approval",renderApproval:({message:e,approve:u,deny:i,config:g})=>{let l=e?.approval;if(!l)return null;let v=ae(g);if(l.status!=="pending"){if(T(t,e.id),l.status==="approved"){let m=document.createElement("div");return m.style.display="none",m}return le(l)}J(t,e.id);let C=v?.enableAlwaysAllow===!0,A=ie(t,e,l,v,u,i,C);if(C){t.pendingOrder.includes(e.id)||t.pendingOrder.push(e.id),t.latestPendingApprovalId=t.pendingOrder[t.pendingOrder.length-1];let m=f=>{$(f)||e.id===t.latestPendingApprovalId&&(f.key!=="Escape"&&f.key!=="Enter"||(f.preventDefault(),f.stopImmediatePropagation(),T(t,e.id),f.key==="Escape"?i():f.metaKey||f.ctrlKey?u():u({remember:!0})))};t.keyHandlers.set(e.id,m),document.addEventListener("keydown",m)}return A}},teardown:()=>{for(let e of[...t.keyHandlers.keys(),...t.popovers.keys()])T(t,e);t.latestPendingApprovalId=null}}};export{k as approvalDetailsExpansionState,Z as createApprovalBubble,Q as createBuiltInApprovalPlugin,B as humanizeToolName,z as initApprovalUi,V as updateApprovalDetailsUI};
|
package/dist/approval-ui.cjs
CHANGED
|
@@ -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
|
|
2
|
-
\r `.includes(t[e]);)e++};return C()},Pe=fe;P.parse=Pe});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 _=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},J=t=>se(t);var Z=[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M4.929 4.929 19.07 19.071"}]];var H=[["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:H,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)?J(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 q=document.createTextNode(e?.denyLabel??"Deny");h.appendChild(q),u.append(l,h),m.appendChild(u)}return C.append(n,m),p.appendChild(C),p};function Me(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??Me(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)?J(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(H,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(H,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"),q=d("button","persona-approval-menu-item");q.type="button",q.append("Allow once",te("\u2318\u23CE")),g.appendChild(q),B=ne({anchor:l,content:g,placement:"bottom-start",matchAnchorWidth:!0}),t.popovers.set(a.id,B),q.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=(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});
|
|
3
3
|
/*! Bundled license information:
|
|
4
4
|
|
|
5
5
|
lucide/dist/esm/icons/ban.mjs:
|
package/dist/approval-ui.d.cts
CHANGED
|
@@ -619,7 +619,11 @@ interface ColorPalette {
|
|
|
619
619
|
warning: ColorShade;
|
|
620
620
|
error: ColorShade;
|
|
621
621
|
info: ColorShade;
|
|
622
|
-
|
|
622
|
+
/** Event-stream tool badge family. */
|
|
623
|
+
purple?: ColorShade;
|
|
624
|
+
/** Event-stream agent badge family. */
|
|
625
|
+
teal?: ColorShade;
|
|
626
|
+
[key: string]: ColorShade | undefined;
|
|
623
627
|
}
|
|
624
628
|
interface SpacingScale {
|
|
625
629
|
0: string;
|
|
@@ -1191,6 +1195,38 @@ interface ToolBubbleTokens {
|
|
|
1191
1195
|
interface ReasoningBubbleTokens {
|
|
1192
1196
|
shadow: string;
|
|
1193
1197
|
}
|
|
1198
|
+
/** One event-stream badge chip: fill + text pair. The chip border derives
|
|
1199
|
+
* from `foreground` at ~31% alpha. */
|
|
1200
|
+
interface EventStreamBadgePairTokens {
|
|
1201
|
+
background: TokenReference<'color'>;
|
|
1202
|
+
foreground: TokenReference<'color'>;
|
|
1203
|
+
}
|
|
1204
|
+
/**
|
|
1205
|
+
* Event-stream inspector badge chips (`features.eventStream`), one pair per
|
|
1206
|
+
* unified event family. Materialized into every theme and emitted as
|
|
1207
|
+
* `--persona-event-badge-<family>-{bg,fg}`, with scheme-appropriate defaults:
|
|
1208
|
+
* light themes pair a 100-tone fill with a 700-tone text, the built-in dark
|
|
1209
|
+
* layer flips to a 900-tone fill with a 300-tone text. `badge.default` colors
|
|
1210
|
+
* event types no family matches.
|
|
1211
|
+
*/
|
|
1212
|
+
interface EventStreamTokens {
|
|
1213
|
+
badge: {
|
|
1214
|
+
/** `flow_*` events. */
|
|
1215
|
+
flow: EventStreamBadgePairTokens;
|
|
1216
|
+
/** `step_*` events. */
|
|
1217
|
+
step: EventStreamBadgePairTokens;
|
|
1218
|
+
/** `reasoning_*` events. */
|
|
1219
|
+
reasoning: EventStreamBadgePairTokens;
|
|
1220
|
+
/** `tool_*` events. */
|
|
1221
|
+
tool: EventStreamBadgePairTokens;
|
|
1222
|
+
/** `agent_*` events. */
|
|
1223
|
+
agent: EventStreamBadgePairTokens;
|
|
1224
|
+
/** `error` / `execution_error` events. */
|
|
1225
|
+
error: EventStreamBadgePairTokens;
|
|
1226
|
+
/** Any event type no other family matches. */
|
|
1227
|
+
default: EventStreamBadgePairTokens;
|
|
1228
|
+
};
|
|
1229
|
+
}
|
|
1194
1230
|
/** Scrollbar appearance shared by every scroller in the widget. */
|
|
1195
1231
|
interface ScrollbarTokens {
|
|
1196
1232
|
/** Thumb color. @default semantic.colors.border */
|
|
@@ -1539,6 +1575,8 @@ interface ComponentTokens {
|
|
|
1539
1575
|
attachment: AttachmentTokens;
|
|
1540
1576
|
toolBubble: ToolBubbleTokens;
|
|
1541
1577
|
reasoningBubble: ReasoningBubbleTokens;
|
|
1578
|
+
/** Event-stream inspector badge chips. */
|
|
1579
|
+
eventStream?: EventStreamTokens;
|
|
1542
1580
|
composer: ComposerChromeTokens;
|
|
1543
1581
|
/** Shared motion timing for composer chrome animation. */
|
|
1544
1582
|
motion?: MotionTokens;
|
|
@@ -2919,6 +2957,14 @@ type ClientToolDefinition = {
|
|
|
2919
2957
|
readOnlyHint?: boolean;
|
|
2920
2958
|
untrustedContentHint?: boolean;
|
|
2921
2959
|
};
|
|
2960
|
+
/**
|
|
2961
|
+
* Hoisted copy of `annotations.untrustedContentHint`. This is the field the
|
|
2962
|
+
* server actually acts on (`InlineClientToolSchema`): it spotlights the
|
|
2963
|
+
* tool's output before the model reads it, so instructions embedded in
|
|
2964
|
+
* page-provided content (reviews, comments, emails) are not treated as
|
|
2965
|
+
* instructions. `annotations` itself is trace/dashboard metadata only.
|
|
2966
|
+
*/
|
|
2967
|
+
untrustedContentHint?: boolean;
|
|
2922
2968
|
};
|
|
2923
2969
|
/**
|
|
2924
2970
|
* Information passed to the confirm-bubble handler before a `webmcp:*` tool
|
|
@@ -4110,6 +4156,16 @@ type AgentWidgetToolCallDisplayFeature = {
|
|
|
4110
4156
|
* @default "stack"
|
|
4111
4157
|
*/
|
|
4112
4158
|
groupedMode?: "stack" | "summary";
|
|
4159
|
+
/**
|
|
4160
|
+
* What happens to a tool call row once it completes.
|
|
4161
|
+
*
|
|
4162
|
+
* - `"kept"` (default): the finished row stays in the transcript.
|
|
4163
|
+
* - `"removed"`: no row is rendered at all, so the transcript gap closes with
|
|
4164
|
+
* it. The tool call stays on the message and in `getMessages()`.
|
|
4165
|
+
*
|
|
4166
|
+
* @default "kept"
|
|
4167
|
+
*/
|
|
4168
|
+
completedVisibility?: AgentWidgetToolCallCompletedVisibility;
|
|
4113
4169
|
/**
|
|
4114
4170
|
* When false, tool call bubbles show only the collapsed summary with no
|
|
4115
4171
|
* expand/collapse toggle. Users see tool awareness without full details.
|
|
@@ -4127,6 +4183,8 @@ type AgentWidgetToolCallDisplayFeature = {
|
|
|
4127
4183
|
*/
|
|
4128
4184
|
loadingAnimation?: AgentWidgetToolCallLoadingAnimation;
|
|
4129
4185
|
};
|
|
4186
|
+
/** See `features.toolCallDisplay.completedVisibility`. */
|
|
4187
|
+
type AgentWidgetToolCallCompletedVisibility = "kept" | "removed";
|
|
4130
4188
|
type AgentWidgetReasoningDisplayFeature = {
|
|
4131
4189
|
/**
|
|
4132
4190
|
* When true, active collapsed reasoning rows can render a lightweight preview block.
|
|
@@ -4172,13 +4230,26 @@ type AgentWidgetReasoningDisplayFeature = {
|
|
|
4172
4230
|
* - `"kept"` (default): the finished row stays in the transcript.
|
|
4173
4231
|
* - `"removed"`: no row is rendered at all, so the transcript gap closes with
|
|
4174
4232
|
* it. The reasoning text stays on the message and in `getMessages()`.
|
|
4233
|
+
* - `"removed-when-short"`: behaves as `"removed"` when the completed trace
|
|
4234
|
+
* is short (see `shortThinkThreshold`), and as `"kept"` otherwise.
|
|
4175
4235
|
*
|
|
4176
4236
|
* @default "kept"
|
|
4177
4237
|
*/
|
|
4178
4238
|
completedVisibility?: AgentWidgetReasoningCompletedVisibility;
|
|
4239
|
+
/**
|
|
4240
|
+
* Thresholds used by `completedVisibility: "removed-when-short"` to decide
|
|
4241
|
+
* whether a completed trace counts as short. Duration is checked first when
|
|
4242
|
+
* the reasoning reports one; the character count is a fallback for traces
|
|
4243
|
+
* with no reported duration.
|
|
4244
|
+
* @default { durationMs: 15000, chars: 1200 }
|
|
4245
|
+
*/
|
|
4246
|
+
shortThinkThreshold?: {
|
|
4247
|
+
durationMs?: number;
|
|
4248
|
+
chars?: number;
|
|
4249
|
+
};
|
|
4179
4250
|
};
|
|
4180
4251
|
/** See `features.reasoningDisplay.completedVisibility`. */
|
|
4181
|
-
type AgentWidgetReasoningCompletedVisibility = "kept" | "removed";
|
|
4252
|
+
type AgentWidgetReasoningCompletedVisibility = "kept" | "removed" | "removed-when-short";
|
|
4182
4253
|
/**
|
|
4183
4254
|
* Reveal animation applied to assistant message text while it is streaming.
|
|
4184
4255
|
*
|
package/dist/approval-ui.d.ts
CHANGED
|
@@ -619,7 +619,11 @@ interface ColorPalette {
|
|
|
619
619
|
warning: ColorShade;
|
|
620
620
|
error: ColorShade;
|
|
621
621
|
info: ColorShade;
|
|
622
|
-
|
|
622
|
+
/** Event-stream tool badge family. */
|
|
623
|
+
purple?: ColorShade;
|
|
624
|
+
/** Event-stream agent badge family. */
|
|
625
|
+
teal?: ColorShade;
|
|
626
|
+
[key: string]: ColorShade | undefined;
|
|
623
627
|
}
|
|
624
628
|
interface SpacingScale {
|
|
625
629
|
0: string;
|
|
@@ -1191,6 +1195,38 @@ interface ToolBubbleTokens {
|
|
|
1191
1195
|
interface ReasoningBubbleTokens {
|
|
1192
1196
|
shadow: string;
|
|
1193
1197
|
}
|
|
1198
|
+
/** One event-stream badge chip: fill + text pair. The chip border derives
|
|
1199
|
+
* from `foreground` at ~31% alpha. */
|
|
1200
|
+
interface EventStreamBadgePairTokens {
|
|
1201
|
+
background: TokenReference<'color'>;
|
|
1202
|
+
foreground: TokenReference<'color'>;
|
|
1203
|
+
}
|
|
1204
|
+
/**
|
|
1205
|
+
* Event-stream inspector badge chips (`features.eventStream`), one pair per
|
|
1206
|
+
* unified event family. Materialized into every theme and emitted as
|
|
1207
|
+
* `--persona-event-badge-<family>-{bg,fg}`, with scheme-appropriate defaults:
|
|
1208
|
+
* light themes pair a 100-tone fill with a 700-tone text, the built-in dark
|
|
1209
|
+
* layer flips to a 900-tone fill with a 300-tone text. `badge.default` colors
|
|
1210
|
+
* event types no family matches.
|
|
1211
|
+
*/
|
|
1212
|
+
interface EventStreamTokens {
|
|
1213
|
+
badge: {
|
|
1214
|
+
/** `flow_*` events. */
|
|
1215
|
+
flow: EventStreamBadgePairTokens;
|
|
1216
|
+
/** `step_*` events. */
|
|
1217
|
+
step: EventStreamBadgePairTokens;
|
|
1218
|
+
/** `reasoning_*` events. */
|
|
1219
|
+
reasoning: EventStreamBadgePairTokens;
|
|
1220
|
+
/** `tool_*` events. */
|
|
1221
|
+
tool: EventStreamBadgePairTokens;
|
|
1222
|
+
/** `agent_*` events. */
|
|
1223
|
+
agent: EventStreamBadgePairTokens;
|
|
1224
|
+
/** `error` / `execution_error` events. */
|
|
1225
|
+
error: EventStreamBadgePairTokens;
|
|
1226
|
+
/** Any event type no other family matches. */
|
|
1227
|
+
default: EventStreamBadgePairTokens;
|
|
1228
|
+
};
|
|
1229
|
+
}
|
|
1194
1230
|
/** Scrollbar appearance shared by every scroller in the widget. */
|
|
1195
1231
|
interface ScrollbarTokens {
|
|
1196
1232
|
/** Thumb color. @default semantic.colors.border */
|
|
@@ -1539,6 +1575,8 @@ interface ComponentTokens {
|
|
|
1539
1575
|
attachment: AttachmentTokens;
|
|
1540
1576
|
toolBubble: ToolBubbleTokens;
|
|
1541
1577
|
reasoningBubble: ReasoningBubbleTokens;
|
|
1578
|
+
/** Event-stream inspector badge chips. */
|
|
1579
|
+
eventStream?: EventStreamTokens;
|
|
1542
1580
|
composer: ComposerChromeTokens;
|
|
1543
1581
|
/** Shared motion timing for composer chrome animation. */
|
|
1544
1582
|
motion?: MotionTokens;
|
|
@@ -2919,6 +2957,14 @@ type ClientToolDefinition = {
|
|
|
2919
2957
|
readOnlyHint?: boolean;
|
|
2920
2958
|
untrustedContentHint?: boolean;
|
|
2921
2959
|
};
|
|
2960
|
+
/**
|
|
2961
|
+
* Hoisted copy of `annotations.untrustedContentHint`. This is the field the
|
|
2962
|
+
* server actually acts on (`InlineClientToolSchema`): it spotlights the
|
|
2963
|
+
* tool's output before the model reads it, so instructions embedded in
|
|
2964
|
+
* page-provided content (reviews, comments, emails) are not treated as
|
|
2965
|
+
* instructions. `annotations` itself is trace/dashboard metadata only.
|
|
2966
|
+
*/
|
|
2967
|
+
untrustedContentHint?: boolean;
|
|
2922
2968
|
};
|
|
2923
2969
|
/**
|
|
2924
2970
|
* Information passed to the confirm-bubble handler before a `webmcp:*` tool
|
|
@@ -4110,6 +4156,16 @@ type AgentWidgetToolCallDisplayFeature = {
|
|
|
4110
4156
|
* @default "stack"
|
|
4111
4157
|
*/
|
|
4112
4158
|
groupedMode?: "stack" | "summary";
|
|
4159
|
+
/**
|
|
4160
|
+
* What happens to a tool call row once it completes.
|
|
4161
|
+
*
|
|
4162
|
+
* - `"kept"` (default): the finished row stays in the transcript.
|
|
4163
|
+
* - `"removed"`: no row is rendered at all, so the transcript gap closes with
|
|
4164
|
+
* it. The tool call stays on the message and in `getMessages()`.
|
|
4165
|
+
*
|
|
4166
|
+
* @default "kept"
|
|
4167
|
+
*/
|
|
4168
|
+
completedVisibility?: AgentWidgetToolCallCompletedVisibility;
|
|
4113
4169
|
/**
|
|
4114
4170
|
* When false, tool call bubbles show only the collapsed summary with no
|
|
4115
4171
|
* expand/collapse toggle. Users see tool awareness without full details.
|
|
@@ -4127,6 +4183,8 @@ type AgentWidgetToolCallDisplayFeature = {
|
|
|
4127
4183
|
*/
|
|
4128
4184
|
loadingAnimation?: AgentWidgetToolCallLoadingAnimation;
|
|
4129
4185
|
};
|
|
4186
|
+
/** See `features.toolCallDisplay.completedVisibility`. */
|
|
4187
|
+
type AgentWidgetToolCallCompletedVisibility = "kept" | "removed";
|
|
4130
4188
|
type AgentWidgetReasoningDisplayFeature = {
|
|
4131
4189
|
/**
|
|
4132
4190
|
* When true, active collapsed reasoning rows can render a lightweight preview block.
|
|
@@ -4172,13 +4230,26 @@ type AgentWidgetReasoningDisplayFeature = {
|
|
|
4172
4230
|
* - `"kept"` (default): the finished row stays in the transcript.
|
|
4173
4231
|
* - `"removed"`: no row is rendered at all, so the transcript gap closes with
|
|
4174
4232
|
* it. The reasoning text stays on the message and in `getMessages()`.
|
|
4233
|
+
* - `"removed-when-short"`: behaves as `"removed"` when the completed trace
|
|
4234
|
+
* is short (see `shortThinkThreshold`), and as `"kept"` otherwise.
|
|
4175
4235
|
*
|
|
4176
4236
|
* @default "kept"
|
|
4177
4237
|
*/
|
|
4178
4238
|
completedVisibility?: AgentWidgetReasoningCompletedVisibility;
|
|
4239
|
+
/**
|
|
4240
|
+
* Thresholds used by `completedVisibility: "removed-when-short"` to decide
|
|
4241
|
+
* whether a completed trace counts as short. Duration is checked first when
|
|
4242
|
+
* the reasoning reports one; the character count is a fallback for traces
|
|
4243
|
+
* with no reported duration.
|
|
4244
|
+
* @default { durationMs: 15000, chars: 1200 }
|
|
4245
|
+
*/
|
|
4246
|
+
shortThinkThreshold?: {
|
|
4247
|
+
durationMs?: number;
|
|
4248
|
+
chars?: number;
|
|
4249
|
+
};
|
|
4179
4250
|
};
|
|
4180
4251
|
/** See `features.reasoningDisplay.completedVisibility`. */
|
|
4181
|
-
type AgentWidgetReasoningCompletedVisibility = "kept" | "removed";
|
|
4252
|
+
type AgentWidgetReasoningCompletedVisibility = "kept" | "removed" | "removed-when-short";
|
|
4182
4253
|
/**
|
|
4183
4254
|
* Reveal animation applied to assistant message text while it is streaming.
|
|
4184
4255
|
*
|
package/dist/approval-ui.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
var me=Object.create;var Y=Object.defineProperty;var xe=Object.getOwnPropertyDescriptor;var ce=Object.getOwnPropertyNames;var ge=Object.getPrototypeOf,he=Object.prototype.hasOwnProperty;var j=(t,a)=>()=>(a||t((a={exports:{}}).exports,a),a.exports);var Ce=(t,a,r,e)=>{if(a&&typeof a=="object"||typeof a=="function")for(let f of ce(a))!he.call(t,f)&&f!==r&&Y(t,f,{get:()=>a[f],enumerable:!(e=xe(a,f))||e.enumerable});return t};var Se=(t,a,r)=>(r=t!=null?me(ge(t)):{},Ce(a||!t||!t.__esModule?Y(r,"default",{value:t,enumerable:!0}):r,t));var
|
|
2
|
-
\r `.includes(t[e]);)e++};return C()},we=ee;P.parse=we});var d=(t,a)=>{let r=document.createElement(t);return a&&(r.className=a),r};var K=Se(te(),1);var z=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 re=()=>{},ae=t=>{re=t.webMcpToolTitle},X=t=>re(t);var _=[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M4.929 4.929 19.07 19.071"}]];var N=[["path",{d:"m6 9 6 6 6-6"}]];var $=[["path",{d:"m18 15-6-6-6 6"}]];var Z=[["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 q=[["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 H="webmcp:";var U=new Map,I=t=>{let r=(t.startsWith(H)?t.slice(H.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)},oe=t=>t?.approval!==!1?t?.approval:void 0,fe=(t,a)=>{let r=oe(a)?.detailsDisplay??"collapsed";return U.get(t)??r==="expanded"},le=(t,a,r)=>{let e=oe(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?$:N,14,"currentColor",2);C&&p.appendChild(C)}},se=(t,a,r)=>{let e=a.querySelector('button[data-bubble-type="approval"]'),f=a.querySelector("[data-approval-details]");if(!e||!f)return;let p=fe(t,r);le(e,p,r),f.style.display=p?"":"none"};var de=(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"?Z:q,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(H)?X(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??I(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=fe(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),le(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=z(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(q,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 E=document.createTextNode(e?.denyLabel??"Deny");h.appendChild(E),u.append(l,h),m.appendChild(u)}return C.append(n,m),p.appendChild(C),p};function Te(t){let a=t.getRootNode?.();return a instanceof ShadowRoot?a:(t.ownerDocument??document).body}function ue(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??Te(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 pe(t){return(typeof t.composedPath=="function"?t.composedPath():[]).some(r=>r instanceof HTMLElement&&(r.tagName==="INPUT"||r.tagName==="TEXTAREA"||r.isContentEditable))}var Pe=()=>({keyHandlers:new Map,popovers:new Map,pendingOrder:[],latestPendingApprovalId:null}),ne=(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))},O=(t,a)=>{ne(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)},Me=t=>t?.approval!==!1?t?.approval:void 0,ke=(t,a)=>{let r=a?.detailsDisplay??"collapsed";return U.get(t)??r==="expanded"},Q=t=>{let a=d("span","persona-approval-kbd");return a.textContent=t,a},Le=(t,a)=>{let r=d("span","persona-approval-title");a?.titleColor&&(r.style.color=a.titleColor);let f=t.toolType==="webmcp"||t.toolName.startsWith(H)?X(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??I(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},ve=t=>{let a=d("div","persona-approval-resolved"),r=D(_,15,"currentColor",2);r&&a.appendChild(r);let e=d("span","persona-approval-resolved-name");return e.textContent=t.toolName?I(t.toolName):"Tool",a.append(e,document.createTextNode(t.status==="timeout"?" timed out":" denied")),a},Be=(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&&ke(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(q,16,"currentColor",2);c&&F.appendChild(c),S.appendChild(F);let L=Le(r,e);if(m){let l=d("span","persona-approval-toggle");l.setAttribute("aria-hidden","true");let i=D(N,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=z(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",Q("\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(N,15,"currentColor",2);h&&T.appendChild(h),l.append(i,T),v.append(l,u),u.append(Q("Esc"));let g=d("div","persona-approval-menu"),E=d("button","persona-approval-menu-item");E.type="button",E.append("Allow once",Q("\u2318\u23CE")),g.appendChild(E),B=ue({anchor:l,content:g,placement:"bottom-start",matchAnchorWidth:!0}),t.popovers.set(a.id,B),E.addEventListener("click",()=>{O(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),U.set(a.id,g)}return}if(T==="toggle-menu"){B?.toggle();return}if(T==="always"){O(t,a.id),f({remember:!0});return}if(T==="allow"){O(t,a.id),f();return}if(T==="deny"){O(t,a.id),p();return}}),n},ie=()=>{let t=Pe();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=Me(C);if(n.status!=="pending"){if(O(t,e.id),n.status==="approved"){let m=document.createElement("div");return m.style.display="none",m}return ve(n)}ne(t,e.id);let A=y?.enableAlwaysAllow===!0,k=Be(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=>{pe(s)||e.id===t.latestPendingApprovalId&&(s.key!=="Escape"&&s.key!=="Enter"||(s.preventDefault(),s.stopImmediatePropagation(),O(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()])O(t,e);t.latestPendingApprovalId=null}}};export{U as approvalDetailsExpansionState,de as createApprovalBubble,ie as createBuiltInApprovalPlugin,I as humanizeToolName,ae as initApprovalUi,se as updateApprovalDetailsUI};
|
|
1
|
+
var me=Object.create;var Y=Object.defineProperty;var xe=Object.getOwnPropertyDescriptor;var ce=Object.getOwnPropertyNames;var ge=Object.getPrototypeOf,he=Object.prototype.hasOwnProperty;var j=(t,a)=>()=>(a||t((a={exports:{}}).exports,a),a.exports);var Ce=(t,a,r,e)=>{if(a&&typeof a=="object"||typeof a=="function")for(let f of ce(a))!he.call(t,f)&&f!==r&&Y(t,f,{get:()=>a[f],enumerable:!(e=xe(a,f))||e.enumerable});return t};var Se=(t,a,r)=>(r=t!=null?me(ge(t)):{},Ce(a||!t||!t.__esModule?Y(r,"default",{value:t,enumerable:!0}):r,t));var _=j(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 te=j(M=>{"use strict";var ye=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]})),Ae=M&&M.__exportStar||function(t,a){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(a,r)&&ye(a,t,r)};Object.defineProperty(M,"__esModule",{value:!0});M.Allow=M.MalformedJSON=M.PartialJSON=M.parseJSON=M.parse=void 0;var P=_();Object.defineProperty(M,"Allow",{enumerable:!0,get:function(){return P.Allow}});Ae(_(),M);var G=class extends Error{};M.PartialJSON=G;var V=class extends Error{};M.MalformedJSON=V;function ee(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 be(t.trim(),a)}M.parseJSON=ee;var be=(t,a)=>{let r=t.length,e=0,f=s=>{throw new G(`${s} at position ${e}`)},p=s=>{throw new V(`${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()},we=ee;M.parse=we});var d=(t,a)=>{let r=document.createElement(t);return a&&(r.className=a),r};var J=Se(te(),1);var z=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 re=()=>{},ae=t=>{re=t.webMcpToolTitle},X=t=>re(t);var K=[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M4.929 4.929 19.07 19.071"}]];var N=[["path",{d:"m6 9 6 6 6-6"}]];var $=[["path",{d:"m18 15-6-6-6 6"}]];var Z=[["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 H=[["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 q="webmcp:";var U=new Map,I=t=>{let r=(t.startsWith(q)?t.slice(q.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)},oe=t=>t?.approval!==!1?t?.approval:void 0,fe=(t,a)=>{let r=oe(a)?.detailsDisplay??"collapsed";return U.get(t)??r==="expanded"},le=(t,a,r)=>{let e=oe(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?$:N,14,"currentColor",2);C&&p.appendChild(C)}},se=(t,a,r)=>{let e=a.querySelector('button[data-bubble-type="approval"]'),f=a.querySelector("[data-approval-details]");if(!e||!f)return;let p=fe(t,r);le(e,p,r),f.style.display=p?"":"none"};var de=(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"?Z:H,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(q)?X(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??I(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=fe(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),le(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=z(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(H,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 E=document.createTextNode(e?.denyLabel??"Deny");h.appendChild(E),u.append(l,h),m.appendChild(u)}return C.append(n,m),p.appendChild(C),p};function Te(t){let a=t.getRootNode?.();return a instanceof ShadowRoot?a:(t.ownerDocument??document).body}function ue(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??Te(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 pe(t){return(typeof t.composedPath=="function"?t.composedPath():[]).some(r=>r instanceof HTMLElement&&(r.tagName==="INPUT"||r.tagName==="TEXTAREA"||r.isContentEditable))}var Me=()=>({keyHandlers:new Map,popovers:new Map,pendingOrder:[],latestPendingApprovalId:null}),ne=(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))},O=(t,a)=>{ne(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)},Pe=t=>t?.approval!==!1?t?.approval:void 0,ke=(t,a)=>{let r=a?.detailsDisplay??"collapsed";return U.get(t)??r==="expanded"},Q=t=>{let a=d("span","persona-approval-kbd");return a.textContent=t,a},Le=(t,a)=>{let r=d("span","persona-approval-title");a?.titleColor&&(r.style.color=a.titleColor);let f=t.toolType==="webmcp"||t.toolName.startsWith(q)?X(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??I(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},ve=t=>{let a=d("div","persona-approval-resolved"),r=D(K,15,"currentColor",2);r&&a.appendChild(r);let e=d("span","persona-approval-resolved-name");return e.textContent=t.toolName?I(t.toolName):"Tool",a.append(e,document.createTextNode(t.status==="timeout"?" timed out":" denied")),a},Be=(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&&ke(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(H,16,"currentColor",2);c&&F.appendChild(c),S.appendChild(F);let L=Le(r,e);if(m){let l=d("span","persona-approval-toggle");l.setAttribute("aria-hidden","true");let i=D(N,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=z(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",Q("\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(N,15,"currentColor",2);h&&T.appendChild(h),l.append(i,T),v.append(l,u),u.append(Q("Esc"));let g=d("div","persona-approval-menu"),E=d("button","persona-approval-menu-item");E.type="button",E.append("Allow once",Q("\u2318\u23CE")),g.appendChild(E),B=ue({anchor:l,content:g,placement:"bottom-start",matchAnchorWidth:!0}),t.popovers.set(a.id,B),E.addEventListener("click",()=>{O(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),U.set(a.id,g)}return}if(T==="toggle-menu"){B?.toggle();return}if(T==="always"){O(t,a.id),f({remember:!0});return}if(T==="allow"){O(t,a.id),f();return}if(T==="deny"){O(t,a.id),p();return}}),n},ie=()=>{let t=Me();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=Pe(C);if(n.status!=="pending"){if(O(t,e.id),n.status==="approved"){let m=document.createElement("div");return m.style.display="none",m}return ve(n)}ne(t,e.id);let A=y?.enableAlwaysAllow===!0,k=Be(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=>{pe(s)||e.id===t.latestPendingApprovalId&&(s.key!=="Escape"&&s.key!=="Enter"||(s.preventDefault(),s.stopImmediatePropagation(),O(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()])O(t,e);t.latestPendingApprovalId=null}}};export{U as approvalDetailsExpansionState,de as createApprovalBubble,ie as createBuiltInApprovalPlugin,I as humanizeToolName,ae as initApprovalUi,se as updateApprovalDetailsUI};
|
|
3
3
|
/*! Bundled license information:
|
|
4
4
|
|
|
5
5
|
lucide/dist/esm/icons/ban.mjs:
|