@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.
- package/README.md +51 -24
- package/client/dist/{PromptParamsDialog-B0YpiWEk.js → PromptParamsDialog-BTfyOYEn.js} +108 -208
- package/client/dist/inspector.css +4 -0
- package/client/dist/inspector.js +21 -20
- package/client/dist/sidebar.css +4 -0
- package/client/dist/sidebar.js +1 -1
- package/dist/config-updater.cjs +104 -104
- package/dist/config-updater.js +104 -104
- package/dist/index.d.ts +4 -4
- package/dist/react/react.d.ts +8 -0
- package/dist/react/react.js +218 -312
- package/package.json +1 -1
package/client/dist/sidebar.css
CHANGED
package/client/dist/sidebar.js
CHANGED
|
@@ -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();
|
package/dist/config-updater.cjs
CHANGED
|
@@ -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
|
-
|
|
86625
|
-
name: "
|
|
86626
|
-
title: "Capture Element
|
|
86627
|
-
description: "Capture context
|
|
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: "
|
|
86630
|
-
description: "
|
|
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: "
|
|
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
|
|
86707
|
+
description: `Capture single element context.
|
|
86686
86708
|
|
|
86687
|
-
**
|
|
86709
|
+
**Modes**:
|
|
86710
|
+
1. **Interactive (default)**: User clicks element to select
|
|
86711
|
+
2. **Automated**: Use \`selector\` param for programmatic capture
|
|
86688
86712
|
|
|
86689
|
-
|
|
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: {
|
|
86695
|
-
type: "
|
|
86696
|
-
description: "
|
|
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).
|
|
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
|
|
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
|
|
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: "
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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: "
|
|
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
|
|
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: "
|
|
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
|
|
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: "
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
- **
|
|
89444
|
-
- **
|
|
89445
|
-
- **
|
|
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
|
-
- **
|
|
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 ?
|
|
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]
|