@mcpc-tech/unplugin-dev-inspector-mcp 0.1.32 → 0.1.34

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.
@@ -943,6 +943,10 @@
943
943
  display: inline-flex;
944
944
  }
945
945
 
946
+ .table {
947
+ display: table;
948
+ }
949
+
946
950
  .field-sizing-content {
947
951
  field-sizing: content;
948
952
  }
@@ -1 +1 @@
1
- import{o as e}from"./chunk-BbOf1w_A.js";import{A as t,E as n,F as r,K as i,L as a,N as o,P as s,T as c,W as l,Y as u,_ as d,a as f,at as p,b as m,c as h,et as g,f as ee,i as _,j as v,n as y,nt as b,o as x,ot as S,p as C,q as w,r as T,rt as E,st as D,t as te,tt as O,u as k,v as ne,x as A,y as re}from"./PromptParamsDialog-B0YpiWEk.js";import"./katex-C3zESuch.js";import"./marked.esm-DUB0uiru.js";const ie=g(`panel-left-close`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}],[`path`,{d:`m16 15-3-3 3-3`,key:`14y99z`}]]),ae=g(`panel-left-open`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}],[`path`,{d:`m14 9 3 3-3 3`,key:`8010ee`}]]),oe=g(`send`,[[`path`,{d:`M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z`,key:`1ffxy3`}],[`path`,{d:`m21.854 2.147-10.94 10.939`,key:`12cjpa`}]]),se=g(`wifi-off`,[[`path`,{d:`M12 20h.01`,key:`zekei9`}],[`path`,{d:`M8.5 16.429a5 5 0 0 1 7 0`,key:`1bycff`}],[`path`,{d:`M5 12.859a10 10 0 0 1 5.17-2.69`,key:`1dl1wf`}],[`path`,{d:`M19 12.859a10 10 0 0 0-2.007-1.523`,key:`4k23kn`}],[`path`,{d:`M2 8.82a15 15 0 0 1 4.177-2.643`,key:`1grhjp`}],[`path`,{d:`M22 8.82a15 15 0 0 0-11.288-3.764`,key:`z3jwby`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),ce=g(`wifi`,[[`path`,{d:`M12 20h.01`,key:`zekei9`}],[`path`,{d:`M2 8.82a15 15 0 0 1 20 0`,key:`dnpr2z`}],[`path`,{d:`M5 12.859a10 10 0 0 1 14 0`,key:`1x1e6c`}],[`path`,{d:`M8.5 16.429a5 5 0 0 1 7 0`,key:`1bycff`}]]);var j=e(x()),M=e(D(),1),N=O(),le=M.createContext(void 0);function P(e){let t=M.useContext(le);return e||t||`ltr`}function F(e,[t,n]){return Math.min(n,Math.max(t,e))}function ue(e,t){return M.useReducer((e,n)=>t[e][n]??e,e)}var I=`ScrollArea`,[L,de]=s(I),[fe,R]=L(I),pe=M.forwardRef((e,t)=>{let{__scopeScrollArea:n,type:r=`hover`,dir:i,scrollHideDelay:o=600,...s}=e,[c,l]=M.useState(null),[u,d]=M.useState(null),[f,p]=M.useState(null),[m,h]=M.useState(null),[g,ee]=M.useState(null),[_,y]=M.useState(0),[b,x]=M.useState(0),[S,C]=M.useState(!1),[w,T]=M.useState(!1),E=a(t,e=>l(e)),D=P(i);return(0,N.jsx)(fe,{scope:n,type:r,dir:D,scrollHideDelay:o,scrollArea:c,viewport:u,onViewportChange:d,content:f,onContentChange:p,scrollbarX:m,onScrollbarXChange:h,scrollbarXEnabled:S,onScrollbarXEnabledChange:C,scrollbarY:g,onScrollbarYChange:ee,scrollbarYEnabled:w,onScrollbarYEnabledChange:T,onCornerWidthChange:y,onCornerHeightChange:x,children:(0,N.jsx)(v.div,{dir:D,...s,ref:E,style:{position:`relative`,"--radix-scroll-area-corner-width":_+`px`,"--radix-scroll-area-corner-height":b+`px`,...e.style}})})});pe.displayName=I;var z=`ScrollAreaViewport`,B=M.forwardRef((e,t)=>{let{__scopeScrollArea:n,children:r,nonce:i,...o}=e,s=R(z,n),c=a(t,M.useRef(null),s.onViewportChange);return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`style`,{dangerouslySetInnerHTML:{__html:`[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}`},nonce:i}),(0,N.jsx)(v.div,{"data-radix-scroll-area-viewport":``,...o,ref:c,style:{overflowX:s.scrollbarXEnabled?`scroll`:`hidden`,overflowY:s.scrollbarYEnabled?`scroll`:`hidden`,...e.style},children:(0,N.jsx)(`div`,{ref:s.onContentChange,style:{minWidth:`100%`,display:`table`},children:r})})]})});B.displayName=z;var V=`ScrollAreaScrollbar`,H=M.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=R(V,e.__scopeScrollArea),{onScrollbarXEnabledChange:a,onScrollbarYEnabledChange:o}=i,s=e.orientation===`horizontal`;return M.useEffect(()=>(s?a(!0):o(!0),()=>{s?a(!1):o(!1)}),[s,a,o]),i.type===`hover`?(0,N.jsx)(U,{...r,ref:t,forceMount:n}):i.type===`scroll`?(0,N.jsx)(W,{...r,ref:t,forceMount:n}):i.type===`auto`?(0,N.jsx)(G,{...r,ref:t,forceMount:n}):i.type===`always`?(0,N.jsx)(K,{...r,ref:t}):null});H.displayName=V;var U=M.forwardRef((e,n)=>{let{forceMount:r,...i}=e,a=R(V,e.__scopeScrollArea),[o,s]=M.useState(!1);return M.useEffect(()=>{let e=a.scrollArea,t=0;if(e){let n=()=>{window.clearTimeout(t),s(!0)},r=()=>{t=window.setTimeout(()=>s(!1),a.scrollHideDelay)};return e.addEventListener(`pointerenter`,n),e.addEventListener(`pointerleave`,r),()=>{window.clearTimeout(t),e.removeEventListener(`pointerenter`,n),e.removeEventListener(`pointerleave`,r)}}},[a.scrollArea,a.scrollHideDelay]),(0,N.jsx)(t,{present:r||o,children:(0,N.jsx)(G,{"data-state":o?`visible`:`hidden`,...i,ref:n})})}),W=M.forwardRef((e,n)=>{let{forceMount:i,...a}=e,o=R(V,e.__scopeScrollArea),s=e.orientation===`horizontal`,c=Q(()=>u(`SCROLL_END`),100),[l,u]=ue(`hidden`,{hidden:{SCROLL:`scrolling`},scrolling:{SCROLL_END:`idle`,POINTER_ENTER:`interacting`},interacting:{SCROLL:`interacting`,POINTER_LEAVE:`idle`},idle:{HIDE:`hidden`,SCROLL:`scrolling`,POINTER_ENTER:`interacting`}});return M.useEffect(()=>{if(l===`idle`){let e=window.setTimeout(()=>u(`HIDE`),o.scrollHideDelay);return()=>window.clearTimeout(e)}},[l,o.scrollHideDelay,u]),M.useEffect(()=>{let e=o.viewport,t=s?`scrollLeft`:`scrollTop`;if(e){let n=e[t],r=()=>{let r=e[t];n!==r&&(u(`SCROLL`),c()),n=r};return e.addEventListener(`scroll`,r),()=>e.removeEventListener(`scroll`,r)}},[o.viewport,s,u,c]),(0,N.jsx)(t,{present:i||l!==`hidden`,children:(0,N.jsx)(K,{"data-state":l===`hidden`?`hidden`:`visible`,...a,ref:n,onPointerEnter:r(e.onPointerEnter,()=>u(`POINTER_ENTER`)),onPointerLeave:r(e.onPointerLeave,()=>u(`POINTER_LEAVE`))})})}),G=M.forwardRef((e,n)=>{let r=R(V,e.__scopeScrollArea),{forceMount:i,...a}=e,[o,s]=M.useState(!1),c=e.orientation===`horizontal`,l=Q(()=>{if(r.viewport){let e=r.viewport.offsetWidth<r.viewport.scrollWidth,t=r.viewport.offsetHeight<r.viewport.scrollHeight;s(c?e:t)}},10);return $(r.viewport,l),$(r.content,l),(0,N.jsx)(t,{present:i||o,children:(0,N.jsx)(K,{"data-state":o?`visible`:`hidden`,...a,ref:n})})}),K=M.forwardRef((e,t)=>{let{orientation:n=`vertical`,...r}=e,i=R(V,e.__scopeScrollArea),a=M.useRef(null),o=M.useRef(0),[s,c]=M.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),l=Se(s.viewport,s.content),u={...r,sizes:s,onSizesChange:c,hasThumb:l>0&&l<1,onThumbChange:e=>a.current=e,onThumbPointerUp:()=>o.current=0,onThumbPointerDown:e=>o.current=e};function d(e,t){return Ce(e,o.current,s,t)}return n===`horizontal`?(0,N.jsx)(q,{...u,ref:t,onThumbPositionChange:()=>{if(i.viewport&&a.current){let e=i.viewport.scrollLeft,t=we(e,s,i.dir);a.current.style.transform=`translate3d(${t}px, 0, 0)`}},onWheelScroll:e=>{i.viewport&&(i.viewport.scrollLeft=e)},onDragScroll:e=>{i.viewport&&(i.viewport.scrollLeft=d(e,i.dir))}}):n===`vertical`?(0,N.jsx)(me,{...u,ref:t,onThumbPositionChange:()=>{if(i.viewport&&a.current){let e=i.viewport.scrollTop,t=we(e,s);a.current.style.transform=`translate3d(0, ${t}px, 0)`}},onWheelScroll:e=>{i.viewport&&(i.viewport.scrollTop=e)},onDragScroll:e=>{i.viewport&&(i.viewport.scrollTop=d(e))}}):null}),q=M.forwardRef((e,t)=>{let{sizes:n,onSizesChange:r,...i}=e,o=R(V,e.__scopeScrollArea),[s,c]=M.useState(),l=M.useRef(null),u=a(t,l,o.onScrollbarXChange);return M.useEffect(()=>{l.current&&c(getComputedStyle(l.current))},[l]),(0,N.jsx)(J,{"data-orientation":`horizontal`,...i,ref:u,sizes:n,style:{bottom:0,left:o.dir===`rtl`?`var(--radix-scroll-area-corner-width)`:0,right:o.dir===`ltr`?`var(--radix-scroll-area-corner-width)`:0,"--radix-scroll-area-thumb-width":Z(n)+`px`,...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.x),onDragScroll:t=>e.onDragScroll(t.x),onWheelScroll:(t,n)=>{if(o.viewport){let r=o.viewport.scrollLeft+t.deltaX;e.onWheelScroll(r),Ee(r,n)&&t.preventDefault()}},onResize:()=>{l.current&&o.viewport&&s&&r({content:o.viewport.scrollWidth,viewport:o.viewport.offsetWidth,scrollbar:{size:l.current.clientWidth,paddingStart:X(s.paddingLeft),paddingEnd:X(s.paddingRight)}})}})}),me=M.forwardRef((e,t)=>{let{sizes:n,onSizesChange:r,...i}=e,o=R(V,e.__scopeScrollArea),[s,c]=M.useState(),l=M.useRef(null),u=a(t,l,o.onScrollbarYChange);return M.useEffect(()=>{l.current&&c(getComputedStyle(l.current))},[l]),(0,N.jsx)(J,{"data-orientation":`vertical`,...i,ref:u,sizes:n,style:{top:0,right:o.dir===`ltr`?0:void 0,left:o.dir===`rtl`?0:void 0,bottom:`var(--radix-scroll-area-corner-height)`,"--radix-scroll-area-thumb-height":Z(n)+`px`,...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.y),onDragScroll:t=>e.onDragScroll(t.y),onWheelScroll:(t,n)=>{if(o.viewport){let r=o.viewport.scrollTop+t.deltaY;e.onWheelScroll(r),Ee(r,n)&&t.preventDefault()}},onResize:()=>{l.current&&o.viewport&&s&&r({content:o.viewport.scrollHeight,viewport:o.viewport.offsetHeight,scrollbar:{size:l.current.clientHeight,paddingStart:X(s.paddingTop),paddingEnd:X(s.paddingBottom)}})}})}),[he,ge]=L(V),J=M.forwardRef((e,t)=>{let{__scopeScrollArea:n,sizes:i,hasThumb:o,onThumbChange:s,onThumbPointerUp:c,onThumbPointerDown:l,onThumbPositionChange:u,onDragScroll:d,onWheelScroll:f,onResize:p,...m}=e,h=R(V,n),[g,ee]=M.useState(null),_=a(t,e=>ee(e)),y=M.useRef(null),b=M.useRef(``),x=h.viewport,S=i.content-i.viewport,C=A(f),w=A(u),T=Q(p,10);function E(e){y.current&&d({x:e.clientX-y.current.left,y:e.clientY-y.current.top})}return M.useEffect(()=>{let e=e=>{let t=e.target;g?.contains(t)&&C(e,S)};return document.addEventListener(`wheel`,e,{passive:!1}),()=>document.removeEventListener(`wheel`,e,{passive:!1})},[x,g,S,C]),M.useEffect(w,[i,w]),$(g,T),$(h.content,T),(0,N.jsx)(he,{scope:n,scrollbar:g,hasThumb:o,onThumbChange:A(s),onThumbPointerUp:A(c),onThumbPositionChange:w,onThumbPointerDown:A(l),children:(0,N.jsx)(v.div,{...m,ref:_,style:{position:`absolute`,...m.style},onPointerDown:r(e.onPointerDown,e=>{e.button===0&&(e.target.setPointerCapture(e.pointerId),y.current=g.getBoundingClientRect(),b.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect=`none`,h.viewport&&(h.viewport.style.scrollBehavior=`auto`),E(e))}),onPointerMove:r(e.onPointerMove,E),onPointerUp:r(e.onPointerUp,e=>{let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),document.body.style.webkitUserSelect=b.current,h.viewport&&(h.viewport.style.scrollBehavior=``),y.current=null})})})}),Y=`ScrollAreaThumb`,_e=M.forwardRef((e,n)=>{let{forceMount:r,...i}=e,a=ge(Y,e.__scopeScrollArea);return(0,N.jsx)(t,{present:r||a.hasThumb,children:(0,N.jsx)(ve,{ref:n,...i})})}),ve=M.forwardRef((e,t)=>{let{__scopeScrollArea:n,style:i,...o}=e,s=R(Y,n),c=ge(Y,n),{onThumbPositionChange:l}=c,u=a(t,e=>c.onThumbChange(e)),d=M.useRef(void 0),f=Q(()=>{d.current&&=(d.current(),void 0)},100);return M.useEffect(()=>{let e=s.viewport;if(e){let t=()=>{f(),d.current||(d.current=De(e,l),l())};return l(),e.addEventListener(`scroll`,t),()=>e.removeEventListener(`scroll`,t)}},[s.viewport,f,l]),(0,N.jsx)(v.div,{"data-state":c.hasThumb?`visible`:`hidden`,...o,ref:u,style:{width:`var(--radix-scroll-area-thumb-width)`,height:`var(--radix-scroll-area-thumb-height)`,...i},onPointerDownCapture:r(e.onPointerDownCapture,e=>{let t=e.target.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;c.onThumbPointerDown({x:n,y:r})}),onPointerUp:r(e.onPointerUp,c.onThumbPointerUp)})});_e.displayName=Y;var ye=`ScrollAreaCorner`,be=M.forwardRef((e,t)=>{let n=R(ye,e.__scopeScrollArea),r=!!(n.scrollbarX&&n.scrollbarY);return n.type!==`scroll`&&r?(0,N.jsx)(xe,{...e,ref:t}):null});be.displayName=ye;var xe=M.forwardRef((e,t)=>{let{__scopeScrollArea:n,...r}=e,i=R(ye,n),[a,o]=M.useState(0),[s,c]=M.useState(0),l=!!(a&&s);return $(i.scrollbarX,()=>{let e=i.scrollbarX?.offsetHeight||0;i.onCornerHeightChange(e),c(e)}),$(i.scrollbarY,()=>{let e=i.scrollbarY?.offsetWidth||0;i.onCornerWidthChange(e),o(e)}),l?(0,N.jsx)(v.div,{...r,ref:t,style:{width:a,height:s,position:`absolute`,right:i.dir===`ltr`?0:void 0,left:i.dir===`rtl`?0:void 0,bottom:0,...e.style}}):null});function X(e){return e?parseInt(e,10):0}function Se(e,t){let n=e/t;return isNaN(n)?0:n}function Z(e){let t=Se(e.viewport,e.content),n=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,r=(e.scrollbar.size-n)*t;return Math.max(r,18)}function Ce(e,t,n,r=`ltr`){let i=Z(n),a=i/2,o=t||a,s=i-o,c=n.scrollbar.paddingStart+o,l=n.scrollbar.size-n.scrollbar.paddingEnd-s,u=n.content-n.viewport,d=r===`ltr`?[0,u]:[u*-1,0];return Te([c,l],d)(e)}function we(e,t,n=`ltr`){let r=Z(t),i=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,a=t.scrollbar.size-i,o=t.content-t.viewport,s=a-r,c=F(e,n===`ltr`?[0,o]:[o*-1,0]);return Te([0,o],[0,s])(c)}function Te(e,t){return n=>{if(e[0]===e[1]||t[0]===t[1])return t[0];let r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(n-e[0])}}function Ee(e,t){return e>0&&e<t}var De=(e,t=()=>{})=>{let n={left:e.scrollLeft,top:e.scrollTop},r=0;return(function i(){let a={left:e.scrollLeft,top:e.scrollTop},o=n.left!==a.left,s=n.top!==a.top;(o||s)&&t(),n=a,r=window.requestAnimationFrame(i)})(),()=>window.cancelAnimationFrame(r)};function Q(e,t){let n=A(e),r=M.useRef(0);return M.useEffect(()=>()=>window.clearTimeout(r.current),[]),M.useCallback(()=>{window.clearTimeout(r.current),r.current=window.setTimeout(n,t)},[n,t])}function $(e,t){let n=A(t);o(()=>{let t=0;if(e){let r=new ResizeObserver(()=>{cancelAnimationFrame(t),t=window.requestAnimationFrame(n)});return r.observe(e),()=>{window.cancelAnimationFrame(t),r.unobserve(e)}}},[e,n])}var Oe=pe,ke=B,Ae=be;function je({className:e,children:t,...n}){return(0,N.jsxs)(Oe,{"data-slot":`scroll-area`,className:l(`relative`,e),...n,children:[(0,N.jsx)(ke,{"data-slot":`scroll-area-viewport`,className:`focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1`,children:t}),(0,N.jsx)(Me,{}),(0,N.jsx)(Ae,{})]})}function Me({className:e,orientation:t=`vertical`,...n}){return(0,N.jsx)(H,{"data-slot":`scroll-area-scrollbar`,orientation:t,className:l(`flex touch-none p-px transition-colors select-none`,t===`vertical`&&`h-full w-2.5 border-l border-l-transparent`,t===`horizontal`&&`h-2.5 flex-col border-t border-t-transparent`,e),...n,children:(0,N.jsx)(_e,{"data-slot":`scroll-area-thumb`,className:`bg-border relative flex-1 rounded-full`})})}const Ne=({onSubmitAgent:e,onCancel:t,isAgentWorking:n,messages:r,status:a,inspectionCount:o=0,inspectionItems:s=[],onRemoveInspection:c=()=>{},toolsReady:h=!0,mcpClient:g=null,onAgentChange:v,connectionStatus:x=`disconnected`})=>{let[D,O]=(0,M.useState)(``),[k,A]=(0,M.useState)(!0),{agent:j,setAgent:le,isReady:P}=T(S),[F,ue]=(0,M.useState)(p),[I,L]=(0,M.useState)(!1),{prompts:de}=y(g||null);(0,M.useEffect)(()=>{b().then(e=>{ue(e)})},[]),(0,M.useEffect)(()=>{P&&j&&v?.(j)},[j,P,v]);let{chatStatus:fe}=_(r,a,!1),R=fe===`submitted`||fe===`streaming`,[pe,z]=(0,M.useState)(null),B=(0,M.useRef)(null),V=(0,M.useRef)(!1),H=e=>{let t=`${E()}/api/acp/cleanup-session`,n=JSON.stringify({sessionId:e});try{if(navigator.sendBeacon){let e=new Blob([n],{type:`application/json`});navigator.sendBeacon(t,e);return}}catch{}fetch(t,{method:`POST`,headers:{"Content-Type":`application/json`},body:n,keepalive:!0}).catch(()=>{})};(0,M.useEffect)(()=>{if(!P||!h)return;let e=!0,t=F.find(e=>e.name===j)||F[0]||p[0];return(async()=>{if(B.current){try{await fetch(`${E()}/api/acp/cleanup-session`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({sessionId:B.current})})}catch(e){console.warn(`[SidebarApp] Failed to cleanup previous session:`,e)}B.current=null,e&&z(null)}console.log(`[SidebarApp] Initializing session for ${t.name}...`);try{let n=await fetch(`${E()}/api/acp/init-session`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({agent:t,envVars:{}})});if(!n.ok)throw Error(`Failed to init session`);let r=await n.json();e&&r.sessionId&&(console.log(`[SidebarApp] Session initialized: ${r.sessionId}`),z(r.sessionId),B.current=r.sessionId,V.current=!1)}catch(e){console.error(`[SidebarApp] Failed to initialize session:`,e)}})(),()=>{e=!1}},[j,P,h,F]),(0,M.useEffect)(()=>{let e=()=>{let e=B.current;!e||V.current||(V.current=!0,H(e))};return window.addEventListener(`pagehide`,e),()=>window.removeEventListener(`pagehide`,e)},[]),(0,M.useEffect)(()=>()=>{let e=B.current;!e||V.current||(V.current=!0,H(e))},[]);let U=F.find(e=>e.name===j)||F[0]||p[0],W=(0,M.useRef)(null),G=(0,M.useRef)(null);(0,M.useEffect)(()=>{G.current?.scrollIntoView({behavior:`smooth`})},[r]);let[K,q]=(0,M.useState)(null),me=async(e,t={})=>{if(g)try{let n=(await g.request({method:`prompts/get`,params:{name:e.name,arguments:t}},ee)).messages?.[0];if(n?.content?.type===`text`&&n.content.text){O(n.content.text),W.current?.focus();return}}catch(e){console.error(`Failed to execute prompt:`,e)}O(e.template||e.description||e.name),W.current?.focus()},he=async e=>{if(e.arguments&&e.arguments.length>0){q(e);return}await me(e)},ge=e=>{K&&(me(K,e),q(null))},J=t=>{t.preventDefault(),D.trim()&&(e(D,F.find(e=>e.name===j)||F[0]||p[0],pe||void 0),O(``))};return(0,N.jsxs)(re,{children:[(0,N.jsx)(te,{prompt:K,isOpen:!!K,onOpenChange:e=>!e&&q(null),onSubmit:ge}),(0,N.jsxs)(`div`,{className:`flex flex-col h-screen bg-background text-foreground`,children:[(0,N.jsxs)(`header`,{className:`flex items-center justify-between px-4 py-3 border-b border-border/40 bg-background/80 backdrop-blur-sm sticky top-0 z-10`,children:[(0,N.jsx)(`div`,{className:`flex items-center gap-3`,children:(0,N.jsxs)(`div`,{className:`relative`,children:[(0,N.jsxs)(`button`,{type:`button`,onClick:()=>L(!I),className:`flex items-center gap-2 px-3 py-1.5 rounded-lg bg-secondary/50 hover:bg-secondary transition-colors border border-transparent hover:border-border/50`,children:[U?.meta?.icon&&(0,N.jsx)(`img`,{src:U.meta.icon,alt:``,className:`w-4 h-4`}),(0,N.jsx)(`span`,{className:`text-sm font-medium`,children:j})]}),I&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`div`,{className:`fixed inset-0 z-40`,onClick:()=>L(!1)}),(0,N.jsx)(`div`,{className:`absolute top-full left-0 mt-2 w-64 bg-popover border border-border rounded-lg shadow-lg overflow-hidden z-50 animate-in fade-in zoom-in-95`,children:F.map(e=>(0,N.jsxs)(`button`,{onClick:()=>{le(e.name),L(!1)},className:l(`w-full flex items-center gap-2 px-3 py-2 text-sm hover:bg-accent transition-colors text-left`,j===e.name&&`bg-accent/50 font-medium`),children:[e.meta?.icon&&(0,N.jsx)(`img`,{src:e.meta.icon,alt:``,className:`w-4 h-4 flex-shrink-0`}),(0,N.jsx)(`span`,{className:`flex-1`,children:e.name})]},e.name))})]})]})}),(0,N.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,N.jsxs)(d,{children:[(0,N.jsx)(m,{asChild:!0,children:(0,N.jsxs)(`div`,{className:l(`flex items-center gap-1.5 px-2 py-1 rounded text-[10px] font-medium border border-border/50`,(()=>{switch(x){case`connected`:return`text-green-500`;case`connecting`:return`text-yellow-500 animate-pulse`;case`error`:return`text-red-500`;default:return`text-muted-foreground`}})()),children:[(()=>{switch(x){case`connected`:return(0,N.jsx)(ce,{className:`w-4 h-4`});case`connecting`:return(0,N.jsx)(w,{className:`w-4 h-4 animate-spin`});default:return(0,N.jsx)(se,{className:`w-4 h-4`})}})(),(0,N.jsx)(`span`,{className:`capitalize`,children:x})]})}),(0,N.jsx)(ne,{children:(0,N.jsxs)(`p`,{children:[`MCP Connection: `,x]})})]}),(0,N.jsxs)(d,{children:[(0,N.jsx)(m,{asChild:!0,children:(0,N.jsx)(`button`,{onClick:()=>A(!k),className:l(`p-2 rounded-lg transition-colors border border-transparent`,k?`bg-secondary text-foreground`:`text-muted-foreground hover:text-foreground hover:bg-secondary/50 hover:border-border/50`),children:k?(0,N.jsx)(ie,{className:`w-4 h-4`}):(0,N.jsx)(ae,{className:`w-4 h-4`})})}),(0,N.jsx)(ne,{children:(0,N.jsx)(`p`,{children:k?`Hide Context Panel`:`Show Context Panel`})})]})]})]}),(0,N.jsxs)(`div`,{className:`flex-1 flex overflow-hidden`,children:[k&&(0,N.jsxs)(`div`,{className:`w-64 border-r border-border/40 flex flex-col bg-muted/10`,children:[(0,N.jsx)(`div`,{className:`p-3 border-b border-border/40 min-h-[45px] flex items-center`,children:(0,N.jsxs)(`h3`,{className:`text-xs font-semibold text-muted-foreground uppercase tracking-wider flex items-center gap-2`,children:[(0,N.jsx)(u,{className:`w-3.5 h-3.5`}),`Context`,o>0&&(0,N.jsx)(`span`,{className:`px-1.5 py-0.5 text-[10px] bg-primary text-primary-foreground rounded-full ml-auto`,children:o})]})}),(0,N.jsx)(je,{className:`flex-1`,children:(0,N.jsx)(`div`,{className:`p-3 space-y-2`,children:s.length>0?(0,N.jsx)(C,{items:s,onRemove:c}):(0,N.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-12 px-4 text-center text-muted-foreground/40`,children:[(0,N.jsx)(u,{className:`w-10 h-10 mb-3 opacity-20`}),(0,N.jsx)(`p`,{className:`text-sm font-medium mb-1`,children:`No Context`}),(0,N.jsx)(`span`,{className:`text-[10px] max-w-[120px] leading-tight`,children:`Use the Inspector in your app to add elements.`})]})})}),de.length>0&&(0,N.jsx)(`div`,{className:`border-t border-border/40 bg-muted/5`,children:(0,N.jsxs)(`div`,{className:`p-3`,children:[(0,N.jsxs)(`h4`,{className:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider mb-2 px-2 flex items-center gap-1.5`,children:[(0,N.jsx)(`span`,{className:`w-1 h-1 rounded-full bg-primary/40 inline-block`}),`Quick Prompts`]}),(0,N.jsx)(`div`,{className:`space-y-0.5`,children:de.slice(0,5).map(e=>(0,N.jsx)(`button`,{onClick:()=>he(e),className:`w-full text-left px-3 py-2 text-xs rounded-md hover:bg-background hover:text-foreground hover:shadow-sm hover:border-border/50 text-muted-foreground transition-all truncate border border-transparent`,title:e.description||e.name,children:e.name},e.name))})]})})]}),(0,N.jsxs)(`div`,{className:`flex-1 flex flex-col min-w-0`,children:[(0,N.jsx)(je,{className:`flex-1`,children:(0,N.jsxs)(`div`,{className:`p-4 space-y-4`,children:[r.length===0?(0,N.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full py-12 text-center text-muted-foreground`,children:[(0,N.jsx)(`div`,{className:`w-16 h-16 rounded-full bg-accent flex items-center justify-center mb-4`,children:U?.meta?.icon?(0,N.jsx)(`img`,{src:U.meta.icon,alt:``,className:`w-8 h-8`}):(0,N.jsx)(i,{className:`w-8 h-8`})}),(0,N.jsxs)(`h2`,{className:`text-lg font-medium text-foreground mb-2`,children:[`Start a conversation with `,j]}),(0,N.jsx)(`p`,{className:`text-sm max-w-md`,children:`Ask questions, get help with code, or use the Inspector in your app to capture context.`})]}):(0,N.jsx)(f,{messages:r,status:a,selectedAgent:j}),(0,N.jsx)(`div`,{ref:G})]})}),(0,N.jsx)(`div`,{className:`border-t border-border/40 p-4 bg-background/50 backdrop-blur-sm`,children:(0,N.jsxs)(`form`,{onSubmit:J,className:`relative flex items-end rounded-xl border border-input shadow-sm bg-background focus-within:ring-2 focus-within:ring-primary/20 focus-within:border-primary/50 transition-all`,children:[(0,N.jsx)(`textarea`,{ref:W,value:D,onChange:e=>O(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),J(e))},placeholder:`Message ${j}...`,rows:1,className:`w-full min-h-[44px] max-h-[200px] px-4 py-3 pr-12 bg-transparent text-sm placeholder:text-muted-foreground resize-none outline-none disabled:opacity-50 no-scrollbar block`,disabled:R,style:{height:`44px`}}),(0,N.jsx)(`div`,{className:`absolute right-1.5 bottom-1.5`,children:R?(0,N.jsx)(`button`,{type:`button`,onClick:t,className:`p-2 rounded-lg bg-destructive text-destructive-foreground hover:bg-destructive/90 transition-colors`,"aria-label":`Stop generating`,children:(0,N.jsx)(`span`,{className:`w-4 h-4 block bg-current rounded-sm`})}):(0,N.jsx)(`button`,{type:`submit`,disabled:!D.trim(),className:l(`p-2 rounded-lg transition-all`,D.trim()?`bg-primary text-primary-foreground hover:bg-primary/90`:`bg-muted text-muted-foreground cursor-not-allowed`),"aria-label":`Send message`,children:(0,N.jsx)(oe,{className:`w-4 h-4`})})})]})})]})]})]})]})};function Pe(){let[e,t]=(0,M.useState)([]),{client:r,isClientReady:i}=k(),a=i?`connected`:`connecting`,{messages:o,sendMessage:s,status:l,stop:u}=c({transport:new n({api:`${E()}/api/acp/chat`})}),d=(0,M.useCallback)((e,t,n)=>{e.trim()&&s({text:e},{body:{agent:t,envVars:{},sessionId:n}})},[s]),f=(0,M.useCallback)(()=>{u()},[u]),p=(0,M.useCallback)(e=>{t(t=>t.filter(t=>t.id!==e))},[]);return(0,M.useEffect)(()=>{let e=e=>{let{item:n}=e.detail;n&&t(e=>[...e,n])},n=e=>{if(e.data?.type===`dev-inspector:inspection-added`){let{item:n}=e.data;n&&t(e=>[...e,n])}};return window.addEventListener(`dev-inspector:inspection-added`,e),window.addEventListener(`message`,n),()=>{window.removeEventListener(`dev-inspector:inspection-added`,e),window.removeEventListener(`message`,n)}},[]),(0,N.jsx)(Ne,{onSubmitAgent:d,onCancel:f,isAgentWorking:l===`streaming`||l===`submitted`,messages:o,status:l,inspectionCount:e.length,inspectionItems:e,onRemoveInspection:p,toolsReady:i,mcpClient:r,connectionStatus:a})}function Fe(){let e=document.getElementById(`sidebar-root`);if(!e){console.error(`[Sidebar] Root element #sidebar-root not found`);return}(0,j.createRoot)(e).render((0,N.jsx)(h,{children:(0,N.jsx)(Pe,{})}))}document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,Fe):Fe();
1
+ import{o as e}from"./chunk-BbOf1w_A.js";import{$ as t,A as n,G as r,I as i,J as a,K as o,M as s,N as c,P as l,T as u,U as d,_ as f,a as p,at as m,b as h,c as g,d as _,et as v,f as ee,g as y,i as b,it as x,k as S,n as C,nt as w,o as T,ot as E,r as D,t as te,tt as ne,u as O,v as re,w as ie,y as ae}from"./PromptParamsDialog-BTfyOYEn.js";import"./katex-C3zESuch.js";import"./marked.esm-DUB0uiru.js";const oe=t(`panel-left-close`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}],[`path`,{d:`m16 15-3-3 3-3`,key:`14y99z`}]]),se=t(`panel-left-open`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}],[`path`,{d:`m14 9 3 3-3 3`,key:`8010ee`}]]),ce=t(`send`,[[`path`,{d:`M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z`,key:`1ffxy3`}],[`path`,{d:`m21.854 2.147-10.94 10.939`,key:`12cjpa`}]]),le=t(`wifi-off`,[[`path`,{d:`M12 20h.01`,key:`zekei9`}],[`path`,{d:`M8.5 16.429a5 5 0 0 1 7 0`,key:`1bycff`}],[`path`,{d:`M5 12.859a10 10 0 0 1 5.17-2.69`,key:`1dl1wf`}],[`path`,{d:`M19 12.859a10 10 0 0 0-2.007-1.523`,key:`4k23kn`}],[`path`,{d:`M2 8.82a15 15 0 0 1 4.177-2.643`,key:`1grhjp`}],[`path`,{d:`M22 8.82a15 15 0 0 0-11.288-3.764`,key:`z3jwby`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),ue=t(`wifi`,[[`path`,{d:`M12 20h.01`,key:`zekei9`}],[`path`,{d:`M2 8.82a15 15 0 0 1 20 0`,key:`dnpr2z`}],[`path`,{d:`M5 12.859a10 10 0 0 1 14 0`,key:`1x1e6c`}],[`path`,{d:`M8.5 16.429a5 5 0 0 1 7 0`,key:`1bycff`}]]);var k=e(T()),A=e(E(),1),j=v(),de=A.createContext(void 0);function M(e){let t=A.useContext(de);return e||t||`ltr`}function N(e,[t,n]){return Math.min(n,Math.max(t,e))}function fe(e,t){return A.useReducer((e,n)=>t[e][n]??e,e)}var P=`ScrollArea`,[F,pe]=c(P),[I,L]=F(P),R=A.forwardRef((e,t)=>{let{__scopeScrollArea:r,type:a=`hover`,dir:o,scrollHideDelay:s=600,...c}=e,[l,u]=A.useState(null),[d,f]=A.useState(null),[p,m]=A.useState(null),[h,g]=A.useState(null),[_,v]=A.useState(null),[ee,y]=A.useState(0),[b,x]=A.useState(0),[S,C]=A.useState(!1),[w,T]=A.useState(!1),E=i(t,e=>u(e)),D=M(o);return(0,j.jsx)(I,{scope:r,type:a,dir:D,scrollHideDelay:s,scrollArea:l,viewport:d,onViewportChange:f,content:p,onContentChange:m,scrollbarX:h,onScrollbarXChange:g,scrollbarXEnabled:S,onScrollbarXEnabledChange:C,scrollbarY:_,onScrollbarYChange:v,scrollbarYEnabled:w,onScrollbarYEnabledChange:T,onCornerWidthChange:y,onCornerHeightChange:x,children:(0,j.jsx)(n.div,{dir:D,...c,ref:E,style:{position:`relative`,"--radix-scroll-area-corner-width":ee+`px`,"--radix-scroll-area-corner-height":b+`px`,...e.style}})})});R.displayName=P;var z=`ScrollAreaViewport`,B=A.forwardRef((e,t)=>{let{__scopeScrollArea:r,children:a,nonce:o,...s}=e,c=L(z,r),l=i(t,A.useRef(null),c.onViewportChange);return(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`style`,{dangerouslySetInnerHTML:{__html:`[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}`},nonce:o}),(0,j.jsx)(n.div,{"data-radix-scroll-area-viewport":``,...s,ref:l,style:{overflowX:c.scrollbarXEnabled?`scroll`:`hidden`,overflowY:c.scrollbarYEnabled?`scroll`:`hidden`,...e.style},children:(0,j.jsx)(`div`,{ref:c.onContentChange,style:{minWidth:`100%`,display:`table`},children:a})})]})});B.displayName=z;var V=`ScrollAreaScrollbar`,H=A.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=L(V,e.__scopeScrollArea),{onScrollbarXEnabledChange:a,onScrollbarYEnabledChange:o}=i,s=e.orientation===`horizontal`;return A.useEffect(()=>(s?a(!0):o(!0),()=>{s?a(!1):o(!1)}),[s,a,o]),i.type===`hover`?(0,j.jsx)(U,{...r,ref:t,forceMount:n}):i.type===`scroll`?(0,j.jsx)(W,{...r,ref:t,forceMount:n}):i.type===`auto`?(0,j.jsx)(G,{...r,ref:t,forceMount:n}):i.type===`always`?(0,j.jsx)(K,{...r,ref:t}):null});H.displayName=V;var U=A.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=L(V,e.__scopeScrollArea),[a,o]=A.useState(!1);return A.useEffect(()=>{let e=i.scrollArea,t=0;if(e){let n=()=>{window.clearTimeout(t),o(!0)},r=()=>{t=window.setTimeout(()=>o(!1),i.scrollHideDelay)};return e.addEventListener(`pointerenter`,n),e.addEventListener(`pointerleave`,r),()=>{window.clearTimeout(t),e.removeEventListener(`pointerenter`,n),e.removeEventListener(`pointerleave`,r)}}},[i.scrollArea,i.scrollHideDelay]),(0,j.jsx)(S,{present:n||a,children:(0,j.jsx)(G,{"data-state":a?`visible`:`hidden`,...r,ref:t})})}),W=A.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=L(V,e.__scopeScrollArea),a=e.orientation===`horizontal`,o=Q(()=>c(`SCROLL_END`),100),[s,c]=fe(`hidden`,{hidden:{SCROLL:`scrolling`},scrolling:{SCROLL_END:`idle`,POINTER_ENTER:`interacting`},interacting:{SCROLL:`interacting`,POINTER_LEAVE:`idle`},idle:{HIDE:`hidden`,SCROLL:`scrolling`,POINTER_ENTER:`interacting`}});return A.useEffect(()=>{if(s===`idle`){let e=window.setTimeout(()=>c(`HIDE`),i.scrollHideDelay);return()=>window.clearTimeout(e)}},[s,i.scrollHideDelay,c]),A.useEffect(()=>{let e=i.viewport,t=a?`scrollLeft`:`scrollTop`;if(e){let n=e[t],r=()=>{let r=e[t];n!==r&&(c(`SCROLL`),o()),n=r};return e.addEventListener(`scroll`,r),()=>e.removeEventListener(`scroll`,r)}},[i.viewport,a,c,o]),(0,j.jsx)(S,{present:n||s!==`hidden`,children:(0,j.jsx)(K,{"data-state":s===`hidden`?`hidden`:`visible`,...r,ref:t,onPointerEnter:l(e.onPointerEnter,()=>c(`POINTER_ENTER`)),onPointerLeave:l(e.onPointerLeave,()=>c(`POINTER_LEAVE`))})})}),G=A.forwardRef((e,t)=>{let n=L(V,e.__scopeScrollArea),{forceMount:r,...i}=e,[a,o]=A.useState(!1),s=e.orientation===`horizontal`,c=Q(()=>{if(n.viewport){let e=n.viewport.offsetWidth<n.viewport.scrollWidth,t=n.viewport.offsetHeight<n.viewport.scrollHeight;o(s?e:t)}},10);return $(n.viewport,c),$(n.content,c),(0,j.jsx)(S,{present:r||a,children:(0,j.jsx)(K,{"data-state":a?`visible`:`hidden`,...i,ref:t})})}),K=A.forwardRef((e,t)=>{let{orientation:n=`vertical`,...r}=e,i=L(V,e.__scopeScrollArea),a=A.useRef(null),o=A.useRef(0),[s,c]=A.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),l=Se(s.viewport,s.content),u={...r,sizes:s,onSizesChange:c,hasThumb:l>0&&l<1,onThumbChange:e=>a.current=e,onThumbPointerUp:()=>o.current=0,onThumbPointerDown:e=>o.current=e};function d(e,t){return Ce(e,o.current,s,t)}return n===`horizontal`?(0,j.jsx)(q,{...u,ref:t,onThumbPositionChange:()=>{if(i.viewport&&a.current){let e=i.viewport.scrollLeft,t=we(e,s,i.dir);a.current.style.transform=`translate3d(${t}px, 0, 0)`}},onWheelScroll:e=>{i.viewport&&(i.viewport.scrollLeft=e)},onDragScroll:e=>{i.viewport&&(i.viewport.scrollLeft=d(e,i.dir))}}):n===`vertical`?(0,j.jsx)(me,{...u,ref:t,onThumbPositionChange:()=>{if(i.viewport&&a.current){let e=i.viewport.scrollTop,t=we(e,s);a.current.style.transform=`translate3d(0, ${t}px, 0)`}},onWheelScroll:e=>{i.viewport&&(i.viewport.scrollTop=e)},onDragScroll:e=>{i.viewport&&(i.viewport.scrollTop=d(e))}}):null}),q=A.forwardRef((e,t)=>{let{sizes:n,onSizesChange:r,...a}=e,o=L(V,e.__scopeScrollArea),[s,c]=A.useState(),l=A.useRef(null),u=i(t,l,o.onScrollbarXChange);return A.useEffect(()=>{l.current&&c(getComputedStyle(l.current))},[l]),(0,j.jsx)(J,{"data-orientation":`horizontal`,...a,ref:u,sizes:n,style:{bottom:0,left:o.dir===`rtl`?`var(--radix-scroll-area-corner-width)`:0,right:o.dir===`ltr`?`var(--radix-scroll-area-corner-width)`:0,"--radix-scroll-area-thumb-width":Z(n)+`px`,...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.x),onDragScroll:t=>e.onDragScroll(t.x),onWheelScroll:(t,n)=>{if(o.viewport){let r=o.viewport.scrollLeft+t.deltaX;e.onWheelScroll(r),Ee(r,n)&&t.preventDefault()}},onResize:()=>{l.current&&o.viewport&&s&&r({content:o.viewport.scrollWidth,viewport:o.viewport.offsetWidth,scrollbar:{size:l.current.clientWidth,paddingStart:X(s.paddingLeft),paddingEnd:X(s.paddingRight)}})}})}),me=A.forwardRef((e,t)=>{let{sizes:n,onSizesChange:r,...a}=e,o=L(V,e.__scopeScrollArea),[s,c]=A.useState(),l=A.useRef(null),u=i(t,l,o.onScrollbarYChange);return A.useEffect(()=>{l.current&&c(getComputedStyle(l.current))},[l]),(0,j.jsx)(J,{"data-orientation":`vertical`,...a,ref:u,sizes:n,style:{top:0,right:o.dir===`ltr`?0:void 0,left:o.dir===`rtl`?0:void 0,bottom:`var(--radix-scroll-area-corner-height)`,"--radix-scroll-area-thumb-height":Z(n)+`px`,...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.y),onDragScroll:t=>e.onDragScroll(t.y),onWheelScroll:(t,n)=>{if(o.viewport){let r=o.viewport.scrollTop+t.deltaY;e.onWheelScroll(r),Ee(r,n)&&t.preventDefault()}},onResize:()=>{l.current&&o.viewport&&s&&r({content:o.viewport.scrollHeight,viewport:o.viewport.offsetHeight,scrollbar:{size:l.current.clientHeight,paddingStart:X(s.paddingTop),paddingEnd:X(s.paddingBottom)}})}})}),[he,ge]=F(V),J=A.forwardRef((e,t)=>{let{__scopeScrollArea:r,sizes:a,hasThumb:o,onThumbChange:s,onThumbPointerUp:c,onThumbPointerDown:u,onThumbPositionChange:d,onDragScroll:f,onWheelScroll:p,onResize:m,...g}=e,_=L(V,r),[v,ee]=A.useState(null),y=i(t,e=>ee(e)),b=A.useRef(null),x=A.useRef(``),S=_.viewport,C=a.content-a.viewport,w=h(p),T=h(d),E=Q(m,10);function D(e){b.current&&f({x:e.clientX-b.current.left,y:e.clientY-b.current.top})}return A.useEffect(()=>{let e=e=>{let t=e.target;v?.contains(t)&&w(e,C)};return document.addEventListener(`wheel`,e,{passive:!1}),()=>document.removeEventListener(`wheel`,e,{passive:!1})},[S,v,C,w]),A.useEffect(T,[a,T]),$(v,E),$(_.content,E),(0,j.jsx)(he,{scope:r,scrollbar:v,hasThumb:o,onThumbChange:h(s),onThumbPointerUp:h(c),onThumbPositionChange:T,onThumbPointerDown:h(u),children:(0,j.jsx)(n.div,{...g,ref:y,style:{position:`absolute`,...g.style},onPointerDown:l(e.onPointerDown,e=>{e.button===0&&(e.target.setPointerCapture(e.pointerId),b.current=v.getBoundingClientRect(),x.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect=`none`,_.viewport&&(_.viewport.style.scrollBehavior=`auto`),D(e))}),onPointerMove:l(e.onPointerMove,D),onPointerUp:l(e.onPointerUp,e=>{let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),document.body.style.webkitUserSelect=x.current,_.viewport&&(_.viewport.style.scrollBehavior=``),b.current=null})})})}),Y=`ScrollAreaThumb`,_e=A.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=ge(Y,e.__scopeScrollArea);return(0,j.jsx)(S,{present:n||i.hasThumb,children:(0,j.jsx)(ve,{ref:t,...r})})}),ve=A.forwardRef((e,t)=>{let{__scopeScrollArea:r,style:a,...o}=e,s=L(Y,r),c=ge(Y,r),{onThumbPositionChange:u}=c,d=i(t,e=>c.onThumbChange(e)),f=A.useRef(void 0),p=Q(()=>{f.current&&=(f.current(),void 0)},100);return A.useEffect(()=>{let e=s.viewport;if(e){let t=()=>{p(),f.current||(f.current=De(e,u),u())};return u(),e.addEventListener(`scroll`,t),()=>e.removeEventListener(`scroll`,t)}},[s.viewport,p,u]),(0,j.jsx)(n.div,{"data-state":c.hasThumb?`visible`:`hidden`,...o,ref:d,style:{width:`var(--radix-scroll-area-thumb-width)`,height:`var(--radix-scroll-area-thumb-height)`,...a},onPointerDownCapture:l(e.onPointerDownCapture,e=>{let t=e.target.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;c.onThumbPointerDown({x:n,y:r})}),onPointerUp:l(e.onPointerUp,c.onThumbPointerUp)})});_e.displayName=Y;var ye=`ScrollAreaCorner`,be=A.forwardRef((e,t)=>{let n=L(ye,e.__scopeScrollArea),r=!!(n.scrollbarX&&n.scrollbarY);return n.type!==`scroll`&&r?(0,j.jsx)(xe,{...e,ref:t}):null});be.displayName=ye;var xe=A.forwardRef((e,t)=>{let{__scopeScrollArea:r,...i}=e,a=L(ye,r),[o,s]=A.useState(0),[c,l]=A.useState(0),u=!!(o&&c);return $(a.scrollbarX,()=>{let e=a.scrollbarX?.offsetHeight||0;a.onCornerHeightChange(e),l(e)}),$(a.scrollbarY,()=>{let e=a.scrollbarY?.offsetWidth||0;a.onCornerWidthChange(e),s(e)}),u?(0,j.jsx)(n.div,{...i,ref:t,style:{width:o,height:c,position:`absolute`,right:a.dir===`ltr`?0:void 0,left:a.dir===`rtl`?0:void 0,bottom:0,...e.style}}):null});function X(e){return e?parseInt(e,10):0}function Se(e,t){let n=e/t;return isNaN(n)?0:n}function Z(e){let t=Se(e.viewport,e.content),n=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,r=(e.scrollbar.size-n)*t;return Math.max(r,18)}function Ce(e,t,n,r=`ltr`){let i=Z(n),a=i/2,o=t||a,s=i-o,c=n.scrollbar.paddingStart+o,l=n.scrollbar.size-n.scrollbar.paddingEnd-s,u=n.content-n.viewport,d=r===`ltr`?[0,u]:[u*-1,0];return Te([c,l],d)(e)}function we(e,t,n=`ltr`){let r=Z(t),i=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,a=t.scrollbar.size-i,o=t.content-t.viewport,s=a-r,c=N(e,n===`ltr`?[0,o]:[o*-1,0]);return Te([0,o],[0,s])(c)}function Te(e,t){return n=>{if(e[0]===e[1]||t[0]===t[1])return t[0];let r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(n-e[0])}}function Ee(e,t){return e>0&&e<t}var De=(e,t=()=>{})=>{let n={left:e.scrollLeft,top:e.scrollTop},r=0;return(function i(){let a={left:e.scrollLeft,top:e.scrollTop},o=n.left!==a.left,s=n.top!==a.top;(o||s)&&t(),n=a,r=window.requestAnimationFrame(i)})(),()=>window.cancelAnimationFrame(r)};function Q(e,t){let n=h(e),r=A.useRef(0);return A.useEffect(()=>()=>window.clearTimeout(r.current),[]),A.useCallback(()=>{window.clearTimeout(r.current),r.current=window.setTimeout(n,t)},[n,t])}function $(e,t){let n=h(t);s(()=>{let t=0;if(e){let r=new ResizeObserver(()=>{cancelAnimationFrame(t),t=window.requestAnimationFrame(n)});return r.observe(e),()=>{window.cancelAnimationFrame(t),r.unobserve(e)}}},[e,n])}var Oe=R,ke=B,Ae=be;function je({className:e,children:t,...n}){return(0,j.jsxs)(Oe,{"data-slot":`scroll-area`,className:d(`relative`,e),...n,children:[(0,j.jsx)(ke,{"data-slot":`scroll-area-viewport`,className:`focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1`,children:t}),(0,j.jsx)(Me,{}),(0,j.jsx)(Ae,{})]})}function Me({className:e,orientation:t=`vertical`,...n}){return(0,j.jsx)(H,{"data-slot":`scroll-area-scrollbar`,orientation:t,className:d(`flex touch-none p-px transition-colors select-none`,t===`vertical`&&`h-full w-2.5 border-l border-l-transparent`,t===`horizontal`&&`h-2.5 flex-col border-t border-t-transparent`,e),...n,children:(0,j.jsx)(_e,{"data-slot":`scroll-area-thumb`,className:`bg-border relative flex-1 rounded-full`})})}const Ne=({onSubmitAgent:e,onCancel:t,isAgentWorking:n,messages:i,status:s,inspectionCount:c=0,inspectionItems:l=[],onRemoveInspection:u=()=>{},toolsReady:h=!0,mcpClient:g=null,onAgentChange:v,connectionStatus:S=`disconnected`})=>{let[T,E]=(0,A.useState)(``),[O,ie]=(0,A.useState)(!0),{agent:k,setAgent:de,isReady:M}=D(m),[N,fe]=(0,A.useState)(x),[P,F]=(0,A.useState)(!1),{prompts:pe}=C(g||null);(0,A.useEffect)(()=>{ne().then(e=>{fe(e)})},[]),(0,A.useEffect)(()=>{M&&k&&v?.(k)},[k,M,v]);let{chatStatus:I}=b(i,s,!1),L=I===`submitted`||I===`streaming`,[R,z]=(0,A.useState)(null),B=(0,A.useRef)(null),V=(0,A.useRef)(!1),H=e=>{let t=`${w()}/api/acp/cleanup-session`,n=JSON.stringify({sessionId:e});try{if(navigator.sendBeacon){let e=new Blob([n],{type:`application/json`});navigator.sendBeacon(t,e);return}}catch{}fetch(t,{method:`POST`,headers:{"Content-Type":`application/json`},body:n,keepalive:!0}).catch(()=>{})};(0,A.useEffect)(()=>{if(!M||!h)return;let e=!0,t=N.find(e=>e.name===k)||N[0]||x[0];return(async()=>{if(B.current){try{await fetch(`${w()}/api/acp/cleanup-session`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({sessionId:B.current})})}catch(e){console.warn(`[SidebarApp] Failed to cleanup previous session:`,e)}B.current=null,e&&z(null)}console.log(`[SidebarApp] Initializing session for ${t.name}...`);try{let n=await fetch(`${w()}/api/acp/init-session`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({agent:t,envVars:{}})});if(!n.ok)throw Error(`Failed to init session`);let r=await n.json();e&&r.sessionId&&(console.log(`[SidebarApp] Session initialized: ${r.sessionId}`),z(r.sessionId),B.current=r.sessionId,V.current=!1)}catch(e){console.error(`[SidebarApp] Failed to initialize session:`,e)}})(),()=>{e=!1}},[k,M,h,N]),(0,A.useEffect)(()=>{let e=()=>{let e=B.current;!e||V.current||(V.current=!0,H(e))};return window.addEventListener(`pagehide`,e),()=>window.removeEventListener(`pagehide`,e)},[]),(0,A.useEffect)(()=>()=>{let e=B.current;!e||V.current||(V.current=!0,H(e))},[]);let U=N.find(e=>e.name===k)||N[0]||x[0],W=(0,A.useRef)(null),G=(0,A.useRef)(null);(0,A.useEffect)(()=>{G.current?.scrollIntoView({behavior:`smooth`})},[i]);let[K,q]=(0,A.useState)(null),me=async(e,t={})=>{if(g)try{let n=(await g.request({method:`prompts/get`,params:{name:e.name,arguments:t}},_)).messages?.[0];if(n?.content?.type===`text`&&n.content.text){E(n.content.text),W.current?.focus();return}}catch(e){console.error(`Failed to execute prompt:`,e)}E(e.template||e.description||e.name),W.current?.focus()},he=async e=>{if(e.arguments&&e.arguments.length>0){q(e);return}await me(e)},ge=e=>{K&&(me(K,e),q(null))},J=t=>{t.preventDefault(),T.trim()&&(e(T,N.find(e=>e.name===k)||N[0]||x[0],R||void 0),E(``))};return(0,j.jsxs)(re,{children:[(0,j.jsx)(te,{prompt:K,isOpen:!!K,onOpenChange:e=>!e&&q(null),onSubmit:ge}),(0,j.jsxs)(`div`,{className:`flex flex-col h-screen bg-background text-foreground`,children:[(0,j.jsxs)(`header`,{className:`flex items-center justify-between px-4 py-3 border-b border-border/40 bg-background/80 backdrop-blur-sm sticky top-0 z-10`,children:[(0,j.jsx)(`div`,{className:`flex items-center gap-3`,children:(0,j.jsxs)(`div`,{className:`relative`,children:[(0,j.jsxs)(`button`,{type:`button`,onClick:()=>F(!P),className:`flex items-center gap-2 px-3 py-1.5 rounded-lg bg-secondary/50 hover:bg-secondary transition-colors border border-transparent hover:border-border/50`,children:[U?.meta?.icon&&(0,j.jsx)(`img`,{src:U.meta.icon,alt:``,className:`w-4 h-4`}),(0,j.jsx)(`span`,{className:`text-sm font-medium`,children:k})]}),P&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`div`,{className:`fixed inset-0 z-40`,onClick:()=>F(!1)}),(0,j.jsx)(`div`,{className:`absolute top-full left-0 mt-2 w-64 bg-popover border border-border rounded-lg shadow-lg overflow-hidden z-50 animate-in fade-in zoom-in-95`,children:N.map(e=>(0,j.jsxs)(`button`,{onClick:()=>{de(e.name),F(!1)},className:d(`w-full flex items-center gap-2 px-3 py-2 text-sm hover:bg-accent transition-colors text-left`,k===e.name&&`bg-accent/50 font-medium`),children:[e.meta?.icon&&(0,j.jsx)(`img`,{src:e.meta.icon,alt:``,className:`w-4 h-4 flex-shrink-0`}),(0,j.jsx)(`span`,{className:`flex-1`,children:e.name})]},e.name))})]})]})}),(0,j.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,j.jsxs)(y,{children:[(0,j.jsx)(ae,{asChild:!0,children:(0,j.jsxs)(`div`,{className:d(`flex items-center gap-1.5 px-2 py-1 rounded text-[10px] font-medium border border-border/50`,(()=>{switch(S){case`connected`:return`text-green-500`;case`connecting`:return`text-yellow-500 animate-pulse`;case`error`:return`text-red-500`;default:return`text-muted-foreground`}})()),children:[(()=>{switch(S){case`connected`:return(0,j.jsx)(ue,{className:`w-4 h-4`});case`connecting`:return(0,j.jsx)(o,{className:`w-4 h-4 animate-spin`});default:return(0,j.jsx)(le,{className:`w-4 h-4`})}})(),(0,j.jsx)(`span`,{className:`capitalize`,children:S})]})}),(0,j.jsx)(f,{children:(0,j.jsxs)(`p`,{children:[`MCP Connection: `,S]})})]}),(0,j.jsxs)(y,{children:[(0,j.jsx)(ae,{asChild:!0,children:(0,j.jsx)(`button`,{onClick:()=>ie(!O),className:d(`p-2 rounded-lg transition-colors border border-transparent`,O?`bg-secondary text-foreground`:`text-muted-foreground hover:text-foreground hover:bg-secondary/50 hover:border-border/50`),children:O?(0,j.jsx)(oe,{className:`w-4 h-4`}):(0,j.jsx)(se,{className:`w-4 h-4`})})}),(0,j.jsx)(f,{children:(0,j.jsx)(`p`,{children:O?`Hide Context Panel`:`Show Context Panel`})})]})]})]}),(0,j.jsxs)(`div`,{className:`flex-1 flex overflow-hidden`,children:[O&&(0,j.jsxs)(`div`,{className:`w-64 border-r border-border/40 flex flex-col bg-muted/10`,children:[(0,j.jsx)(`div`,{className:`p-3 border-b border-border/40 min-h-[45px] flex items-center`,children:(0,j.jsxs)(`h3`,{className:`text-xs font-semibold text-muted-foreground uppercase tracking-wider flex items-center gap-2`,children:[(0,j.jsx)(a,{className:`w-3.5 h-3.5`}),`Context`,c>0&&(0,j.jsx)(`span`,{className:`px-1.5 py-0.5 text-[10px] bg-primary text-primary-foreground rounded-full ml-auto`,children:c})]})}),(0,j.jsx)(je,{className:`flex-1`,children:(0,j.jsx)(`div`,{className:`p-3 space-y-2`,children:l.length>0?(0,j.jsx)(ee,{items:l,onRemove:u}):(0,j.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-12 px-4 text-center text-muted-foreground/40`,children:[(0,j.jsx)(a,{className:`w-10 h-10 mb-3 opacity-20`}),(0,j.jsx)(`p`,{className:`text-sm font-medium mb-1`,children:`No Context`}),(0,j.jsx)(`span`,{className:`text-[10px] max-w-[120px] leading-tight`,children:`Use the Inspector in your app to add elements.`})]})})}),pe.length>0&&(0,j.jsx)(`div`,{className:`border-t border-border/40 bg-muted/5`,children:(0,j.jsxs)(`div`,{className:`p-3`,children:[(0,j.jsxs)(`h4`,{className:`text-[10px] font-semibold text-muted-foreground uppercase tracking-wider mb-2 px-2 flex items-center gap-1.5`,children:[(0,j.jsx)(`span`,{className:`w-1 h-1 rounded-full bg-primary/40 inline-block`}),`Quick Prompts`]}),(0,j.jsx)(`div`,{className:`space-y-0.5`,children:pe.slice(0,5).map(e=>(0,j.jsx)(`button`,{onClick:()=>he(e),className:`w-full text-left px-3 py-2 text-xs rounded-md hover:bg-background hover:text-foreground hover:shadow-sm hover:border-border/50 text-muted-foreground transition-all truncate border border-transparent`,title:e.description||e.name,children:e.name},e.name))})]})})]}),(0,j.jsxs)(`div`,{className:`flex-1 flex flex-col min-w-0`,children:[(0,j.jsx)(je,{className:`flex-1`,children:(0,j.jsxs)(`div`,{className:`p-4 space-y-4`,children:[i.length===0?(0,j.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full py-12 text-center text-muted-foreground`,children:[(0,j.jsx)(`div`,{className:`w-16 h-16 rounded-full bg-accent flex items-center justify-center mb-4`,children:U?.meta?.icon?(0,j.jsx)(`img`,{src:U.meta.icon,alt:``,className:`w-8 h-8`}):(0,j.jsx)(r,{className:`w-8 h-8`})}),(0,j.jsxs)(`h2`,{className:`text-lg font-medium text-foreground mb-2`,children:[`Start a conversation with `,k]}),(0,j.jsx)(`p`,{className:`text-sm max-w-md`,children:`Ask questions, get help with code, or use the Inspector in your app to capture context.`})]}):(0,j.jsx)(p,{messages:i,status:s,selectedAgent:k}),(0,j.jsx)(`div`,{ref:G})]})}),(0,j.jsx)(`div`,{className:`border-t border-border/40 p-4 bg-background/50 backdrop-blur-sm`,children:(0,j.jsxs)(`form`,{onSubmit:J,className:`relative flex items-end rounded-xl border border-input shadow-sm bg-background focus-within:ring-2 focus-within:ring-primary/20 focus-within:border-primary/50 transition-all`,children:[(0,j.jsx)(`textarea`,{ref:W,value:T,onChange:e=>E(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),J(e))},placeholder:`Message ${k}...`,rows:1,className:`w-full min-h-[44px] max-h-[200px] px-4 py-3 pr-12 bg-transparent text-sm placeholder:text-muted-foreground resize-none outline-none disabled:opacity-50 no-scrollbar block`,disabled:L,style:{height:`44px`}}),(0,j.jsx)(`div`,{className:`absolute right-1.5 bottom-1.5`,children:L?(0,j.jsx)(`button`,{type:`button`,onClick:t,className:`p-2 rounded-lg bg-destructive text-destructive-foreground hover:bg-destructive/90 transition-colors`,"aria-label":`Stop generating`,children:(0,j.jsx)(`span`,{className:`w-4 h-4 block bg-current rounded-sm`})}):(0,j.jsx)(`button`,{type:`submit`,disabled:!T.trim(),className:d(`p-2 rounded-lg transition-all`,T.trim()?`bg-primary text-primary-foreground hover:bg-primary/90`:`bg-muted text-muted-foreground cursor-not-allowed`),"aria-label":`Send message`,children:(0,j.jsx)(ce,{className:`w-4 h-4`})})})]})})]})]})]})]})};function Pe(){let[e,t]=(0,A.useState)([]),{client:n,isClientReady:r}=O(),i=r?`connected`:`connecting`,{messages:a,sendMessage:o,status:s,stop:c}=ie({transport:new u({api:`${w()}/api/acp/chat`})}),l=(0,A.useCallback)((e,t,n)=>{e.trim()&&o({text:e},{body:{agent:t,envVars:{},sessionId:n}})},[o]),d=(0,A.useCallback)(()=>{c()},[c]),f=(0,A.useCallback)(e=>{t(t=>t.filter(t=>t.id!==e))},[]);return(0,A.useEffect)(()=>{let e=e=>{let{item:n}=e.detail;n&&t(e=>[...e,n])},n=e=>{if(e.data?.type===`dev-inspector:inspection-added`){let{item:n}=e.data;n&&t(e=>[...e,n])}};return window.addEventListener(`dev-inspector:inspection-added`,e),window.addEventListener(`message`,n),()=>{window.removeEventListener(`dev-inspector:inspection-added`,e),window.removeEventListener(`message`,n)}},[]),(0,j.jsx)(Ne,{onSubmitAgent:l,onCancel:d,isAgentWorking:s===`streaming`||s===`submitted`,messages:a,status:s,inspectionCount:e.length,inspectionItems:e,onRemoveInspection:f,toolsReady:r,mcpClient:n,connectionStatus:i})}function Fe(){let e=document.getElementById(`sidebar-root`);if(!e){console.error(`[Sidebar] Root element #sidebar-root not found`);return}(0,k.createRoot)(e).render((0,j.jsx)(g,{children:(0,j.jsx)(Pe,{})}))}document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,Fe):Fe();
@@ -86621,13 +86621,23 @@ async function mcpc(serverConf, composeConf, setupCallback) {
86621
86621
  * Used by both server and client implementations
86622
86622
  */
86623
86623
  const PROMPT_SCHEMAS = {
86624
- capture_element: {
86625
- name: "capture_element",
86626
- title: "Capture Element Context",
86627
- description: "Capture context about a UI element for troubleshooting and investigation.",
86624
+ capture_element_context: {
86625
+ name: "capture_element_context",
86626
+ title: "Capture Element",
86627
+ description: "Capture single element context. Interactive (user clicks) or automated (selector param).",
86628
+ arguments: [{
86629
+ name: "selector",
86630
+ description: "CSS selector for automated capture (no user interaction).",
86631
+ required: false
86632
+ }]
86633
+ },
86634
+ capture_area_context: {
86635
+ name: "capture_area_context",
86636
+ title: "Capture Area",
86637
+ description: "Capture multiple elements in area. Interactive (user draws rectangle) or automated (containerSelector/bounds param).",
86628
86638
  arguments: [{
86629
- name: "automated",
86630
- description: "If true, the AI will automate the capture process (click/feedback/submit).",
86639
+ name: "containerSelector",
86640
+ description: "CSS selector for container - captures all child elements.",
86631
86641
  required: false
86632
86642
  }]
86633
86643
  },
@@ -86665,10 +86675,22 @@ const PROMPT_SCHEMAS = {
86665
86675
  description: "List stdio (stdout/stderr) messages from the server process. Always refreshes the list first.",
86666
86676
  arguments: []
86667
86677
  },
86678
+ capture_context: {
86679
+ name: "capture_context",
86680
+ title: "Capture Context",
86681
+ description: "[DEPRECATED] Use capture_element_context or capture_area_context.",
86682
+ arguments: []
86683
+ },
86684
+ capture_element: {
86685
+ name: "capture_element",
86686
+ title: "Capture Element Context",
86687
+ description: "[DEPRECATED] Use capture_element_context.",
86688
+ arguments: []
86689
+ },
86668
86690
  capture_area: {
86669
86691
  name: "capture_area",
86670
86692
  title: "Capture Area Context",
86671
- description: "Draw a rectangle on the page to capture multiple elements at once for troubleshooting.",
86693
+ description: "[DEPRECATED] Use capture_area_context.",
86672
86694
  arguments: []
86673
86695
  }
86674
86696
  };
@@ -86682,24 +86704,53 @@ const PROMPT_SCHEMAS = {
86682
86704
  const TOOL_SCHEMAS = {
86683
86705
  capture_element_context: {
86684
86706
  name: "capture_element_context",
86685
- description: `Capture element context for troubleshooting.
86707
+ description: `Capture single element context.
86686
86708
 
86687
- **Default (automated=false)**: Manual mode - activates visual selector for user interaction.
86709
+ **Modes**:
86710
+ 1. **Interactive (default)**: User clicks element to select
86711
+ 2. **Automated**: Use \`selector\` param for programmatic capture
86688
86712
 
86689
- **Automated (automated=true)**: AI controls capture by clicking elements programmatically. Only set to true when user needs automation.
86690
-
86691
- Returns: source location, DOM hierarchy, computed styles, dimensions, and user notes. Use \`list_inspections\` to view all captured elements.`,
86713
+ Returns: source location, DOM hierarchy, computed styles, dimensions, user notes, screenshot.`,
86692
86714
  inputSchema: {
86693
86715
  type: "object",
86694
- properties: { automated: {
86695
- type: "boolean",
86696
- description: "Set to true ONLY when user explicitly requests automated capture. Default is false (manual mode)."
86716
+ properties: { selector: {
86717
+ type: "string",
86718
+ description: "CSS selector for automated capture (no user interaction)."
86697
86719
  } }
86698
86720
  }
86699
86721
  },
86722
+ capture_area_context: {
86723
+ name: "capture_area_context",
86724
+ description: `Capture multiple elements in an area.
86725
+
86726
+ **Modes**:
86727
+ 1. **Interactive (default)**: User draws rectangle to select area
86728
+ 2. **Automated**: Use \`containerSelector\` or \`bounds\` param
86729
+
86730
+ Returns: array of element contexts (max 50).`,
86731
+ inputSchema: {
86732
+ type: "object",
86733
+ properties: {
86734
+ containerSelector: {
86735
+ type: "string",
86736
+ description: "CSS selector for container - captures all meaningful child elements."
86737
+ },
86738
+ bounds: {
86739
+ type: "object",
86740
+ properties: {
86741
+ x: { type: "number" },
86742
+ y: { type: "number" },
86743
+ width: { type: "number" },
86744
+ height: { type: "number" }
86745
+ },
86746
+ description: "Page coordinates - captures elements intersecting this area. Use get_page_info for context."
86747
+ }
86748
+ }
86749
+ }
86750
+ },
86700
86751
  list_inspections: {
86701
86752
  name: "list_inspections",
86702
- description: "List all captured inspections with ID, element details, source location, notes, and status (pending/in-progress/completed/failed). Use with chrome_devtools for additional context (Console.getMessages, Network.getHAR, Performance.getMetrics).",
86753
+ description: "List all captured inspections with ID, element details, source location, notes, and status (pending/in-progress/completed/failed).",
86703
86754
  inputSchema: {
86704
86755
  type: "object",
86705
86756
  properties: {}
@@ -86707,13 +86758,13 @@ Returns: source location, DOM hierarchy, computed styles, dimensions, and user n
86707
86758
  },
86708
86759
  update_inspection_status: {
86709
86760
  name: "update_inspection_status",
86710
- description: "Update inspection status with optional progress tracking.\n\n**Parameters**:\n- inspectionId: Optional (auto-detects if omitted)\n- status: 'in-progress' | 'completed' | 'failed' | 'deleted'\n- progress: Optional steps array [{id, title, status}]\n- message: REQUIRED for 'completed'/'failed' status\n\n**Example**:\n```javascript\nupdate_inspection_status({\n status: 'completed',\n message: 'Fixed: pointer-events: none blocking clicks'\n});\n// Or delete an inspection\nupdate_inspection_status({\n status: 'deleted'\n});\n```",
86761
+ description: "Update inspection status. Parameters: inspectionId (optional, auto-detects), status ('in-progress'|'completed'|'failed'|'deleted'), message (required for completed/failed).",
86711
86762
  inputSchema: {
86712
86763
  type: "object",
86713
86764
  properties: {
86714
86765
  inspectionId: {
86715
86766
  type: "string",
86716
- description: "Optional inspection ID. If not provided, uses the current active inspection."
86767
+ description: "Optional. If omitted, uses current active inspection."
86717
86768
  },
86718
86769
  status: {
86719
86770
  type: "string",
@@ -86723,39 +86774,11 @@ Returns: source location, DOM hierarchy, computed styles, dimensions, and user n
86723
86774
  "failed",
86724
86775
  "deleted"
86725
86776
  ],
86726
- description: "Current status: 'in-progress' for updates, 'completed' when resolved, 'failed' if unresolvable, 'deleted' to remove inspection"
86727
- },
86728
- progress: {
86729
- type: "object",
86730
- properties: { steps: {
86731
- type: "array",
86732
- items: {
86733
- type: "object",
86734
- properties: {
86735
- id: { type: "number" },
86736
- title: { type: "string" },
86737
- status: {
86738
- type: "string",
86739
- enum: [
86740
- "pending",
86741
- "in-progress",
86742
- "completed",
86743
- "failed"
86744
- ]
86745
- }
86746
- },
86747
- required: [
86748
- "id",
86749
- "title",
86750
- "status"
86751
- ]
86752
- }
86753
- } },
86754
- description: "Optional step-by-step progress tracking"
86777
+ description: "New status."
86755
86778
  },
86756
86779
  message: {
86757
86780
  type: "string",
86758
- description: "Summary of findings or resolution. REQUIRED when status is 'completed' or 'failed'"
86781
+ description: "Summary. Required for 'completed' or 'failed'."
86759
86782
  }
86760
86783
  },
86761
86784
  required: ["status"]
@@ -86763,81 +86786,56 @@ Returns: source location, DOM hierarchy, computed styles, dimensions, and user n
86763
86786
  },
86764
86787
  execute_page_script: {
86765
86788
  name: "execute_page_script",
86766
- description: "Execute JavaScript in browser context (synchronous only, must return value). Access: window, document, DOM APIs, React/Vue instances, localStorage. For deeper diagnostics, use chrome_devtools MCP (Network.getHAR, Console.getMessages, Performance.getMetrics, Debugger, HeapProfiler).",
86789
+ description: "Execute JavaScript in browser context. Access: window, document, DOM APIs, React/Vue instances, localStorage. Must return a value.",
86767
86790
  inputSchema: {
86768
86791
  type: "object",
86769
86792
  properties: { code: {
86770
86793
  type: "string",
86771
- description: "JavaScript code to execute in page context. Must return a value for diagnostic output."
86794
+ description: "JavaScript code to execute. Must return a value."
86772
86795
  } },
86773
86796
  required: ["code"]
86774
86797
  }
86775
86798
  },
86776
- capture_area_context: {
86777
- name: "capture_area_context",
86778
- description: `Capture area context by activating visual area selection mode.
86779
-
86780
- User draws a rectangle on the page to select multiple elements at once. After selection, returns context for all elements in the area including source locations, DOM info, and screenshot.
86781
-
86782
- **Flow**:
86783
- 1. Activates area selection mode (user sees crosshair cursor)
86784
- 2. User draws rectangle around target elements
86785
- 3. Returns: primary element + related elements with source locations, DOM hierarchy, and screenshot`,
86786
- inputSchema: {
86787
- type: "object",
86788
- properties: {}
86789
- }
86790
- },
86791
86799
  get_network_requests: {
86792
86800
  name: "get_network_requests",
86793
- description: `Get network requests from browser for debugging.
86794
-
86795
- Returns list of HTTP requests with ID, method, URL, and status code. Use reqid parameter to get full details of a specific request including headers, body, and timing.
86796
-
86797
- **Usage**:
86798
- - Call without parameters to list all requests
86799
- - Call with reqid to get specific request details`,
86801
+ description: `Get network requests from browser. Returns list with reqid, method, URL, status. Use reqid param to get full request/response details.`,
86800
86802
  inputSchema: {
86801
86803
  type: "object",
86802
86804
  properties: { reqid: {
86803
86805
  type: "number",
86804
- description: "Optional. Request ID to get full details. If omitted, returns list of all requests."
86806
+ description: "Request ID from list to get full details (headers, body, timing)."
86805
86807
  } }
86806
86808
  }
86807
86809
  },
86808
86810
  get_console_messages: {
86809
86811
  name: "get_console_messages",
86810
- description: `Get console messages from browser for debugging.
86811
-
86812
- Returns list of console logs with ID, level (log/warn/error/info), and message content. Use msgid parameter to get full details of a specific message.
86813
-
86814
- **Usage**:
86815
- - Call without parameters to list all messages
86816
- - Call with msgid to get specific message details`,
86812
+ description: `Get console messages from browser. Returns list with msgid, level (log/warn/error), message. Use msgid param to get full message details.`,
86817
86813
  inputSchema: {
86818
86814
  type: "object",
86819
86815
  properties: { msgid: {
86820
86816
  type: "number",
86821
- description: "Optional. Message ID to get full details. If omitted, returns list of all messages."
86817
+ description: "Message ID from list to get full details."
86822
86818
  } }
86823
86819
  }
86824
86820
  },
86825
86821
  get_stdio_messages: {
86826
86822
  name: "get_stdio_messages",
86827
- description: `Get stdio (stdout/stderr) terminal messages from dev server process.
86828
-
86829
- Returns list of terminal output with ID, stream type (stdout/stderr), and content. Use stdioid parameter to get full details of a specific message.
86830
-
86831
- **Usage**:
86832
- - Call without parameters to list all stdio messages
86833
- - Call with stdioid to get specific message details`,
86823
+ description: `Get dev server stdout/stderr. Returns list with stdioid, stream type, content. Use stdioid param to get full message.`,
86834
86824
  inputSchema: {
86835
86825
  type: "object",
86836
86826
  properties: { stdioid: {
86837
86827
  type: "number",
86838
- description: "Optional. Stdio message ID to get full details. If omitted, returns list of all messages."
86828
+ description: "Stdio ID from list to get full details."
86839
86829
  } }
86840
86830
  }
86831
+ },
86832
+ get_page_info: {
86833
+ name: "get_page_info",
86834
+ description: "Get page overview with accessibility tree. Returns URL, title, viewport, document size, and semantic structure (landmarks, headings, forms, links). Start here to understand the page.",
86835
+ inputSchema: {
86836
+ type: "object",
86837
+ properties: {}
86838
+ }
86841
86839
  }
86842
86840
  };
86843
86841
 
@@ -87051,7 +87049,8 @@ Default dev server URL: ${process.env.DEV_INSPECTOR_PUBLIC_BASE_URL || `http://$
87051
87049
  { ...TOOL_SCHEMAS.capture_area_context },
87052
87050
  { ...TOOL_SCHEMAS.list_inspections },
87053
87051
  { ...TOOL_SCHEMAS.update_inspection_status },
87054
- { ...TOOL_SCHEMAS.execute_page_script }
87052
+ { ...TOOL_SCHEMAS.execute_page_script },
87053
+ { ...TOOL_SCHEMAS.get_page_info }
87055
87054
  ]);
87056
87055
  mcpServer.setRequestHandler(_modelcontextprotocol_sdk_types_js.ListPromptsRequestSchema, async (_request) => {
87057
87056
  const defaultUrl = process.env.DEV_INSPECTOR_PUBLIC_BASE_URL ? require_helpers.stripTrailingSlash(process.env.DEV_INSPECTOR_PUBLIC_BASE_URL) : `http://${serverContext?.host || "localhost"}:${serverContext?.port || 5173}`;
@@ -87061,9 +87060,8 @@ Default dev server URL: ${process.env.DEV_INSPECTOR_PUBLIC_BASE_URL || `http://$
87061
87060
  arguments: p$1.arguments
87062
87061
  }));
87063
87062
  const allDefaultPrompts = [
87064
- { ...PROMPT_SCHEMAS.capture_element },
87063
+ { ...PROMPT_SCHEMAS.capture_context },
87065
87064
  { ...PROMPT_SCHEMAS.list_inspections },
87066
- { ...PROMPT_SCHEMAS.capture_area },
87067
87065
  { ...PROMPT_SCHEMAS.get_stdio_messages },
87068
87066
  ...!chromeDisabled ? [{
87069
87067
  ...PROMPT_SCHEMAS.launch_chrome_devtools,
@@ -87075,7 +87073,9 @@ Default dev server URL: ${process.env.DEV_INSPECTOR_PUBLIC_BASE_URL || `http://$
87075
87073
  }]
87076
87074
  }] : [],
87077
87075
  { ...PROMPT_SCHEMAS.get_network_requests },
87078
- { ...PROMPT_SCHEMAS.get_console_messages }
87076
+ { ...PROMPT_SCHEMAS.get_console_messages },
87077
+ { ...PROMPT_SCHEMAS.capture_element },
87078
+ { ...PROMPT_SCHEMAS.capture_area }
87079
87079
  ];
87080
87080
  let filteredDefaultPrompts = [];
87081
87081
  if (defaultPrompts === true) filteredDefaultPrompts = allDefaultPrompts;
@@ -87110,8 +87110,7 @@ Default dev server URL: ${process.env.DEV_INSPECTOR_PUBLIC_BASE_URL || `http://$
87110
87110
  }).reverse().join("\n");
87111
87111
  mcpServer.setRequestHandler(_modelcontextprotocol_sdk_types_js.ListPromptsRequestSchema, async (_request) => {
87112
87112
  return { prompts: [...filterPrompts([
87113
- { ...PROMPT_SCHEMAS.capture_element },
87114
- { ...PROMPT_SCHEMAS.capture_area },
87113
+ { ...PROMPT_SCHEMAS.capture_context },
87115
87114
  { ...PROMPT_SCHEMAS.list_inspections },
87116
87115
  {
87117
87116
  ...PROMPT_SCHEMAS.get_network_requests,
@@ -87180,9 +87179,8 @@ Default dev server URL: ${process.env.DEV_INSPECTOR_PUBLIC_BASE_URL || `http://$
87180
87179
  arguments: p$1.arguments
87181
87180
  }));
87182
87181
  return { prompts: [...filterPrompts([
87183
- { ...PROMPT_SCHEMAS.capture_element },
87182
+ { ...PROMPT_SCHEMAS.capture_context },
87184
87183
  { ...PROMPT_SCHEMAS.list_inspections },
87185
- { ...PROMPT_SCHEMAS.capture_area },
87186
87184
  ...!chromeDisabled ? [
87187
87185
  { ...PROMPT_SCHEMAS.launch_chrome_devtools },
87188
87186
  {
@@ -87426,9 +87424,8 @@ Default dev server URL: ${process.env.DEV_INSPECTOR_PUBLIC_BASE_URL || `http://$
87426
87424
  mcpServer.setRequestHandler(_modelcontextprotocol_sdk_types_js.ListPromptsRequestSchema, async (_request) => {
87427
87425
  const defaultUrl = process.env.DEV_INSPECTOR_PUBLIC_BASE_URL ? require_helpers.stripTrailingSlash(process.env.DEV_INSPECTOR_PUBLIC_BASE_URL) : `http://${serverContext?.host || "localhost"}:${serverContext?.port || 5173}`;
87428
87426
  return { prompts: [
87429
- { ...PROMPT_SCHEMAS.capture_element },
87427
+ { ...PROMPT_SCHEMAS.capture_context },
87430
87428
  { ...PROMPT_SCHEMAS.list_inspections },
87431
- { ...PROMPT_SCHEMAS.capture_area },
87432
87429
  {
87433
87430
  ...PROMPT_SCHEMAS.get_stdio_messages,
87434
87431
  arguments: [{
@@ -89440,11 +89437,13 @@ CRITICAL WORKFLOW:
89440
89437
  - Otherwise -> Answer user's question first, then ask if they want to use the pending inspections.
89441
89438
 
89442
89439
  Available tools:
89443
- - **list_inspections**: Get pending user feedback context (do this first!)
89444
- - **capture_element_context**: Activate visual selector
89445
- - **update_inspection_status**: Update status
89440
+ - **get_page_info**: Get page overview with accessibility tree (start here to understand the page)
89441
+ - **list_inspections**: Get pending user feedback context
89442
+ - **capture_element_context**: Capture single element (interactive or via selector)
89443
+ - **capture_area_context**: Capture multiple elements in area (interactive or via containerSelector/bounds)
89444
+ - **update_inspection_status**: Update inspection status
89446
89445
  - **execute_page_script**: Run JS in browser
89447
- - **chrome_devtools**: Access network/console`;
89446
+ - **get_stdio_messages**: Get dev server terminal output (list or details by stdioid)`;
89448
89447
  /**
89449
89448
  * Get an active transport from the connection manager
89450
89449
  */
@@ -89662,7 +89661,8 @@ function setupAcpMiddleware(middlewares, serverContext, acpOptions) {
89662
89661
  type: "text",
89663
89662
  text: `<system_instructions>
89664
89663
  ${systemPrompt}
89665
- ${isAutomated ? "" : "Currently chrome devtools automation is disabled. You do not have access to Console/Network context."}
89664
+ ${isAutomated ? `- **chrome_devtools**: Access Chrome DevTools for network requests, console logs, page navigation, and element interaction` : `- **get_network_requests**: Get browser network requests (list or details by reqid) - uses local storage
89665
+ - **get_console_messages**: Get browser console logs (list or details by msgid) - uses local storage`}
89666
89666
  </system_instructions>
89667
89667
  `
89668
89668
  }, ...msg.content]