opencandle 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/README.md +48 -180
  2. package/dist/cli-main.js +9 -8
  3. package/dist/config.d.ts +4 -0
  4. package/dist/config.js +1 -0
  5. package/dist/doctor/cli-command.js +7 -4
  6. package/dist/doctor/report.js +13 -0
  7. package/dist/gui/server/chat-event-adapter.js +145 -20
  8. package/dist/gui/server/history-snapshot-store.d.ts +8 -0
  9. package/dist/gui/server/history-snapshot-store.js +43 -0
  10. package/dist/gui/server/http-routes.d.ts +2 -0
  11. package/dist/gui/server/http-routes.js +32 -7
  12. package/dist/gui/server/live-chat-event-adapter.d.ts +2 -0
  13. package/dist/gui/server/live-chat-event-adapter.js +33 -15
  14. package/dist/gui/server/market-indices-api.d.ts +21 -0
  15. package/dist/gui/server/market-indices-api.js +26 -0
  16. package/dist/gui/server/market-indices-snapshot-store.d.ts +12 -0
  17. package/dist/gui/server/market-indices-snapshot-store.js +56 -0
  18. package/dist/gui/server/market-state-api.d.ts +112 -0
  19. package/dist/gui/server/market-state-api.js +246 -4
  20. package/dist/gui/server/model-setup.d.ts +2 -11
  21. package/dist/gui/server/model-setup.js +10 -6
  22. package/dist/gui/server/server.js +12 -9
  23. package/dist/gui/server/tool-metadata.d.ts +14 -14
  24. package/dist/gui/server/ws-hub.js +1 -1
  25. package/dist/infra/cache.d.ts +4 -0
  26. package/dist/infra/cache.js +4 -0
  27. package/dist/infra/lse-byte-budget.d.ts +10 -0
  28. package/dist/infra/lse-byte-budget.js +47 -0
  29. package/dist/infra/rate-limiter.js +1 -0
  30. package/dist/onboarding/providers.d.ts +16 -1
  31. package/dist/onboarding/providers.js +20 -0
  32. package/dist/onboarding/validate-model-key.js +33 -1
  33. package/dist/onboarding/validation.js +8 -0
  34. package/dist/pi/opencandle-extension.d.ts +2 -1
  35. package/dist/pi/opencandle-extension.js +2 -2
  36. package/dist/pi/session.d.ts +2 -3
  37. package/dist/pi/session.js +7 -5
  38. package/dist/pi/setup.d.ts +3 -3
  39. package/dist/pi/setup.js +51 -59
  40. package/dist/prompts/workflow-prompts.js +16 -14
  41. package/dist/providers/index.d.ts +1 -0
  42. package/dist/providers/index.js +1 -0
  43. package/dist/providers/lse.d.ts +35 -0
  44. package/dist/providers/lse.js +284 -0
  45. package/dist/providers/polymarket.js +22 -5
  46. package/dist/providers/wrap-provider.js +1 -0
  47. package/dist/providers/yahoo-finance.js +1 -0
  48. package/dist/routing/route-manifest.js +1 -0
  49. package/dist/routing/router.js +8 -1
  50. package/dist/runtime/evidence.d.ts +1 -0
  51. package/dist/runtime/evidence.js +1 -1
  52. package/dist/runtime/session-coordinator.d.ts +2 -2
  53. package/dist/runtime/session-coordinator.js +2 -2
  54. package/dist/tools/fundamentals/dcf.js +37 -8
  55. package/dist/tools/fundamentals/financials.js +88 -10
  56. package/dist/tools/index.d.ts +10 -5
  57. package/dist/tools/index.js +3 -0
  58. package/dist/tools/market/price-comparison.d.ts +30 -0
  59. package/dist/tools/market/price-comparison.js +202 -0
  60. package/dist/tools/market/stock-history.d.ts +18 -3
  61. package/dist/tools/market/stock-history.js +132 -17
  62. package/dist/tools/portfolio/correlation.d.ts +1 -1
  63. package/dist/tools/portfolio/risk-analysis.d.ts +1 -1
  64. package/dist/types/market.d.ts +2 -0
  65. package/gui/web/dist/assets/CatalogOverlay-Cy8Fq0fn.js +1 -0
  66. package/gui/web/dist/assets/allocation-donut-DgBRIKCk.js +52 -0
  67. package/gui/web/dist/assets/index-DIlFyIOO.js +66 -0
  68. package/gui/web/dist/assets/index-DS4jESOB.css +2 -0
  69. package/gui/web/dist/assets/market-chart-DammaCjH.js +1 -0
  70. package/gui/web/dist/assets/utils-CnADgYgh.js +1 -0
  71. package/gui/web/dist/index.html +3 -2
  72. package/package.json +15 -17
  73. package/gui/web/dist/assets/CatalogOverlay-CAc7e3Pf.js +0 -1
  74. package/gui/web/dist/assets/index-BOEKd9wT.css +0 -2
  75. package/gui/web/dist/assets/index-C-H05cQ2.js +0 -65
@@ -0,0 +1 @@
1
+ import{a as e,l as t,o as n,t as r}from"./utils-CnADgYgh.js";import{A as i,C as a,D as o,E as s,I as c,N as l,O as u,P as d,S as f,T as p,_ as m,a as h,b as g,g as _,h as v,k as y,m as b,o as ee,v as x,w as S,x as C,y as w}from"./index-DIlFyIOO.js";var T=i(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),E=i(`chevron-left`,[[`path`,{d:`m15 18-6-6 6-6`,key:`1wnfg3`}]]),D=i(`clipboard`,[[`rect`,{width:`8`,height:`4`,x:`8`,y:`2`,rx:`1`,ry:`1`,key:`tgr4d6`}],[`path`,{d:`M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2`,key:`116196`}]]),O=i(`earth`,[[`path`,{d:`M21.54 15H17a2 2 0 0 0-2 2v4.54`,key:`1djwo0`}],[`path`,{d:`M7 3.34V5a3 3 0 0 0 3 3a2 2 0 0 1 2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.1.9-2 2-2h3.17`,key:`1tzkfa`}],[`path`,{d:`M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05`,key:`14pb5j`}],[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]),k=i(`eye-off`,[[`path`,{d:`M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49`,key:`ct8e1f`}],[`path`,{d:`M14.084 14.158a3 3 0 0 1-4.242-4.242`,key:`151rxh`}],[`path`,{d:`M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143`,key:`13bj9a`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),te=i(`eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),A=i(`key-round`,[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`,key:`1s6t7t`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`w0ekpg`}]]),j=i(`play`,[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]),M=i(`sparkles`,[[`path`,{d:`M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z`,key:`1s2grr`}],[`path`,{d:`M20 2v4`,key:`1rf3ol`}],[`path`,{d:`M22 4h-4`,key:`gwowj6`}],[`circle`,{cx:`4`,cy:`20`,r:`2`,key:`6kqj1y`}]]),N=i(`terminal`,[[`path`,{d:`M12 19h8`,key:`baeox8`}],[`path`,{d:`m4 17 6-6-6-6`,key:`1yngyt`}]]),P=t(n(),1),F=1,ne=.9,re=.8,ie=.17,ae=.1,oe=.999,se=.9999,ce=.99,le=/[\\\/_+.#"@\[\(\{&]/,ue=/[\\\/_+.#"@\[\(\{&]/g,de=/[\s-]/,fe=/[\s-]/g;function pe(e,t,n,r,i,a,o){if(a===t.length)return i===e.length?F:ce;var s=`${i},${a}`;if(o[s]!==void 0)return o[s];for(var c=r.charAt(a),l=n.indexOf(c,i),u=0,d,f,p,m;l>=0;)d=pe(e,t,n,r,l+1,a+1,o),d>u&&(l===i?d*=F:le.test(e.charAt(l-1))?(d*=re,p=e.slice(i,l-1).match(ue),p&&i>0&&(d*=oe**+p.length)):de.test(e.charAt(l-1))?(d*=ne,m=e.slice(i,l-1).match(fe),m&&i>0&&(d*=oe**+m.length)):(d*=ie,i>0&&(d*=oe**+(l-i))),e.charAt(l)!==t.charAt(a)&&(d*=se)),(d<ae&&n.charAt(l-1)===r.charAt(a+1)||r.charAt(a+1)===r.charAt(a)&&n.charAt(l-1)!==r.charAt(a))&&(f=pe(e,t,n,r,l+1,a+2,o),f*ae>d&&(d=f*ae)),d>u&&(u=d),l=n.indexOf(c,l+1);return o[s]=u,u}function me(e){return e.toLowerCase().replace(fe,` `)}function he(e,t,n){return e=n&&n.length>0?`${e+` `+n.join(` `)}`:e,pe(e,t,me(e),me(t),0,0,{})}var I=`[cmdk-group=""]`,L=`[cmdk-group-items=""]`,ge=`[cmdk-group-heading=""]`,_e=`[cmdk-item=""]`,ve=`${_e}:not([aria-disabled="true"])`,R=`cmdk-item-select`,z=`data-value`,ye=(e,t,n)=>he(e,t,n),be=P.createContext(void 0),B=()=>P.useContext(be),xe=P.createContext(void 0),Se=()=>P.useContext(xe),Ce=P.createContext(void 0),we=P.forwardRef((e,t)=>{let n=U(()=>({search:``,value:e.value??e.defaultValue??``,selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}})),r=U(()=>new Set),i=U(()=>new Map),a=U(()=>new Map),o=U(()=>new Set),s=Fe(e),{label:c,children:u,value:f,onValueChange:p,filter:m,shouldFilter:h,loop:g,disablePointerSelection:_=!1,vimBindings:v=!0,...y}=e,b=l(),ee=l(),x=l(),S=P.useRef(null),C=Le();H(()=>{if(f!==void 0){let e=f.trim();n.current.value=e,w.emit()}},[f]),H(()=>{C(6,te)},[]);let w=P.useMemo(()=>({subscribe:e=>(o.current.add(e),()=>o.current.delete(e)),snapshot:()=>n.current,setState:(e,t,r)=>{var i,a,o;if(!Object.is(n.current[e],t)){if(n.current[e]=t,e===`search`)k(),D(),C(1,O);else if(e===`value`){if(document.activeElement.hasAttribute(`cmdk-input`)||document.activeElement.hasAttribute(`cmdk-root`)){let e=document.getElementById(x);e?e.focus():(i=document.getElementById(b))==null||i.focus()}if(C(7,()=>{n.current.selectedItemId=A()?.id,w.emit()}),r||C(5,te),s.current?.value!==void 0){let e=t??``;(o=(a=s.current).onValueChange)==null||o.call(a,e);return}}w.emit()}},emit:()=>{o.current.forEach(e=>e())}}),[]),T=P.useMemo(()=>({value:(e,t,r)=>{t!==a.current.get(e)?.value&&(a.current.set(e,{value:t,keywords:r}),n.current.filtered.items.set(e,E(t,r)),C(2,()=>{D(),w.emit()}))},item:(e,t)=>(r.current.add(e),t&&(i.current.has(t)?i.current.get(t).add(e):i.current.set(t,new Set([e]))),C(3,()=>{k(),D(),n.current.value||O(),w.emit()}),()=>{a.current.delete(e),r.current.delete(e),n.current.filtered.items.delete(e);let t=A();C(4,()=>{k(),t?.getAttribute(`id`)===e&&O(),w.emit()})}),group:e=>(i.current.has(e)||i.current.set(e,new Set),()=>{a.current.delete(e),i.current.delete(e)}),filter:()=>s.current.shouldFilter,label:c||e[`aria-label`],getDisablePointerSelection:()=>s.current.disablePointerSelection,listId:b,inputId:x,labelId:ee,listInnerRef:S}),[]);function E(e,t){let r=s.current?.filter??ye;return e?r(e,n.current.search,t):0}function D(){if(!n.current.search||s.current.shouldFilter===!1)return;let e=n.current.filtered.items,t=[];n.current.filtered.groups.forEach(n=>{let r=i.current.get(n),a=0;r.forEach(t=>{let n=e.get(t);a=Math.max(n,a)}),t.push([n,a])});let r=S.current;j().sort((t,n)=>{let r=t.getAttribute(`id`),i=n.getAttribute(`id`);return(e.get(i)??0)-(e.get(r)??0)}).forEach(e=>{let t=e.closest(L);t?t.appendChild(e.parentElement===t?e:e.closest(`${L} > *`)):r.appendChild(e.parentElement===r?e:e.closest(`${L} > *`))}),t.sort((e,t)=>t[1]-e[1]).forEach(e=>{let t=S.current?.querySelector(`${I}[${z}="${encodeURIComponent(e[0])}"]`);t?.parentElement.appendChild(t)})}function O(){let e=j().find(e=>e.getAttribute(`aria-disabled`)!==`true`)?.getAttribute(z);w.setState(`value`,e||void 0)}function k(){if(!n.current.search||s.current.shouldFilter===!1){n.current.filtered.count=r.current.size;return}n.current.filtered.groups=new Set;let e=0;for(let t of r.current){let r=E(a.current.get(t)?.value??``,a.current.get(t)?.keywords??[]);n.current.filtered.items.set(t,r),r>0&&e++}for(let[e,t]of i.current)for(let r of t)if(n.current.filtered.items.get(r)>0){n.current.filtered.groups.add(e);break}n.current.filtered.count=e}function te(){var e;let t=A();t&&(t.parentElement?.firstChild===t&&((e=t.closest(I)?.querySelector(ge))==null||e.scrollIntoView({block:`nearest`})),t.scrollIntoView({block:`nearest`}))}function A(){return S.current?.querySelector(`${_e}[aria-selected="true"]`)}function j(){return Array.from(S.current?.querySelectorAll(ve)||[])}function M(e){let t=j()[e];t&&w.setState(`value`,t.getAttribute(z))}function N(e){var t;let n=A(),r=j(),i=r.findIndex(e=>e===n),a=r[i+e];(t=s.current)!=null&&t.loop&&(a=i+e<0?r[r.length-1]:i+e===r.length?r[0]:r[i+e]),a&&w.setState(`value`,a.getAttribute(z))}function F(e){let t=A()?.closest(I),n;for(;t&&!n;)t=e>0?Ne(t,I):Pe(t,I),n=t?.querySelector(ve);n?w.setState(`value`,n.getAttribute(z)):N(e)}let ne=()=>M(j().length-1),re=e=>{e.preventDefault(),e.metaKey?ne():e.altKey?F(1):N(1)},ie=e=>{e.preventDefault(),e.metaKey?M(0):e.altKey?F(-1):N(-1)};return P.createElement(d.div,{ref:t,tabIndex:-1,...y,"cmdk-root":``,onKeyDown:e=>{var t;(t=y.onKeyDown)==null||t.call(y,e);let n=e.nativeEvent.isComposing||e.keyCode===229;if(!(e.defaultPrevented||n))switch(e.key){case`n`:case`j`:v&&e.ctrlKey&&re(e);break;case`ArrowDown`:re(e);break;case`p`:case`k`:v&&e.ctrlKey&&ie(e);break;case`ArrowUp`:ie(e);break;case`Home`:e.preventDefault(),M(0);break;case`End`:e.preventDefault(),ne();break;case`Enter`:{e.preventDefault();let t=A();if(t){let e=new Event(R);t.dispatchEvent(e)}}}}},P.createElement(`label`,{"cmdk-label":``,htmlFor:T.inputId,id:T.labelId,style:ze},c),G(e,e=>P.createElement(xe.Provider,{value:w},P.createElement(be.Provider,{value:T},e))))}),Te=P.forwardRef((e,t)=>{let n=l(),r=P.useRef(null),i=P.useContext(Ce),a=B(),o=Fe(e),s=o.current?.forceMount??i?.forceMount;H(()=>{if(!s)return a.item(n,i?.id)},[s]);let u=Ie(n,r,[e.value,e.children,r],e.keywords),f=Se(),p=W(e=>e.value&&e.value===u.current),m=W(e=>s||a.filter()===!1?!0:!e.search||e.filtered.items.get(n)>0);P.useEffect(()=>{let t=r.current;if(!(!t||e.disabled))return t.addEventListener(R,h),()=>t.removeEventListener(R,h)},[m,e.onSelect,e.disabled]);function h(){var e,t;g(),(t=(e=o.current).onSelect)==null||t.call(e,u.current)}function g(){f.setState(`value`,u.current,!0)}if(!m)return null;let{disabled:_,value:v,onSelect:y,forceMount:b,keywords:ee,...x}=e;return P.createElement(d.div,{ref:c(r,t),...x,id:n,"cmdk-item":``,role:`option`,"aria-disabled":!!_,"aria-selected":!!p,"data-disabled":!!_,"data-selected":!!p,onPointerMove:_||a.getDisablePointerSelection()?void 0:g,onClick:_?void 0:h},e.children)}),Ee=P.forwardRef((e,t)=>{let{heading:n,children:r,forceMount:i,...a}=e,o=l(),s=P.useRef(null),u=P.useRef(null),f=l(),p=B(),m=W(e=>i||p.filter()===!1?!0:!e.search||e.filtered.groups.has(o));H(()=>p.group(o),[]),Ie(o,s,[e.value,e.heading,u]);let h=P.useMemo(()=>({id:o,forceMount:i}),[i]);return P.createElement(d.div,{ref:c(s,t),...a,"cmdk-group":``,role:`presentation`,hidden:!m||void 0},n&&P.createElement(`div`,{ref:u,"cmdk-group-heading":``,"aria-hidden":!0,id:f},n),G(e,e=>P.createElement(`div`,{"cmdk-group-items":``,role:`group`,"aria-labelledby":n?f:void 0},P.createElement(Ce.Provider,{value:h},e))))}),De=P.forwardRef((e,t)=>{let{alwaysRender:n,...r}=e,i=P.useRef(null),a=W(e=>!e.search);return!n&&!a?null:P.createElement(d.div,{ref:c(i,t),...r,"cmdk-separator":``,role:`separator`})}),Oe=P.forwardRef((e,t)=>{let{onValueChange:n,...r}=e,i=e.value!=null,a=Se(),o=W(e=>e.search),s=W(e=>e.selectedItemId),c=B();return P.useEffect(()=>{e.value!=null&&a.setState(`search`,e.value)},[e.value]),P.createElement(d.input,{ref:t,...r,"cmdk-input":``,autoComplete:`off`,autoCorrect:`off`,spellCheck:!1,"aria-autocomplete":`list`,role:`combobox`,"aria-expanded":!0,"aria-controls":c.listId,"aria-labelledby":c.labelId,"aria-activedescendant":s,id:c.inputId,type:`text`,value:i?e.value:o,onChange:e=>{i||a.setState(`search`,e.target.value),n?.(e.target.value)}})}),ke=P.forwardRef((e,t)=>{let{children:n,label:r=`Suggestions`,...i}=e,a=P.useRef(null),o=P.useRef(null),s=W(e=>e.selectedItemId),l=B();return P.useEffect(()=>{if(o.current&&a.current){let e=o.current,t=a.current,n,r=new ResizeObserver(()=>{n=requestAnimationFrame(()=>{let n=e.offsetHeight;t.style.setProperty(`--cmdk-list-height`,n.toFixed(1)+`px`)})});return r.observe(e),()=>{cancelAnimationFrame(n),r.unobserve(e)}}},[]),P.createElement(d.div,{ref:c(a,t),...i,"cmdk-list":``,role:`listbox`,tabIndex:-1,"aria-activedescendant":s,"aria-label":r,id:l.listId},G(e,e=>P.createElement(`div`,{ref:c(o,l.listInnerRef),"cmdk-list-sizer":``},e)))}),Ae=P.forwardRef((e,t)=>{let{open:n,onOpenChange:r,overlayClassName:i,contentClassName:a,container:o,...s}=e;return P.createElement(m,{open:n,onOpenChange:r},P.createElement(g,{container:o},P.createElement(w,{"cmdk-overlay":``,className:i}),P.createElement(x,{"aria-label":e.label,"cmdk-dialog":``,className:a},P.createElement(we,{ref:t,...s}))))}),je=P.forwardRef((e,t)=>W(e=>e.filtered.count===0)?P.createElement(d.div,{ref:t,...e,"cmdk-empty":``,role:`presentation`}):null),Me=P.forwardRef((e,t)=>{let{progress:n,children:r,label:i=`Loading...`,...a}=e;return P.createElement(d.div,{ref:t,...a,"cmdk-loading":``,role:`progressbar`,"aria-valuenow":n,"aria-valuemin":0,"aria-valuemax":100,"aria-label":i},G(e,e=>P.createElement(`div`,{"aria-hidden":!0},e)))}),V=Object.assign(we,{List:ke,Item:Te,Input:Oe,Group:Ee,Separator:De,Dialog:Ae,Empty:je,Loading:Me});function Ne(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return n;n=n.nextElementSibling}}function Pe(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return n;n=n.previousElementSibling}}function Fe(e){let t=P.useRef(e);return H(()=>{t.current=e}),t}var H=typeof window>`u`?P.useEffect:P.useLayoutEffect;function U(e){let t=P.useRef();return t.current===void 0&&(t.current=e()),t}function W(e){let t=Se(),n=()=>e(t.snapshot());return P.useSyncExternalStore(t.subscribe,n,n)}function Ie(e,t,n,r=[]){let i=P.useRef(),a=B();return H(()=>{var o;let s=(()=>{for(let e of n){if(typeof e==`string`)return e.trim();if(typeof e==`object`&&`current`in e)return e.current?e.current.textContent?.trim():i.current}})(),c=r.map(e=>e.trim());a.value(e,s,c),(o=t.current)==null||o.setAttribute(z,s),i.current=s}),i}var Le=()=>{let[e,t]=P.useState(),n=U(()=>new Map);return H(()=>{n.current.forEach(e=>e()),n.current=new Map},[e]),(e,r)=>{n.current.set(e,r),t({})}};function Re(e){let t=e.type;return typeof t==`function`?t(e.props):`render`in t?t.render(e.props):e}function G({asChild:e,children:t},n){return e&&P.isValidElement(t)?P.cloneElement(Re(t),{ref:t.ref},n(t.props.children)):n(t)}var ze={position:`absolute`,width:`1px`,height:`1px`,padding:`0`,margin:`-1px`,overflow:`hidden`,clip:`rect(0, 0, 0, 0)`,whiteSpace:`nowrap`,borderWidth:`0`},K=e(),Be=(0,P.forwardRef)(function({className:e,...t},n){return(0,K.jsx)(V,{ref:n,"data-slot":`command`,className:r(`flex h-full w-full flex-col overflow-hidden rounded-lg bg-card text-foreground`,e),...t})}),Ve=(0,P.forwardRef)(function({className:e,...t},n){return(0,K.jsxs)(`div`,{"data-slot":`command-input-wrapper`,className:`flex h-10 items-center gap-2 border-b border-border px-3 focus-within:ring-2 focus-within:ring-inset focus-within:ring-ring`,"cmdk-input-wrapper":``,children:[(0,K.jsx)(p,{className:`h-4 w-4 shrink-0 text-muted-foreground`,"aria-hidden":`true`}),(0,K.jsx)(V.Input,{ref:n,"data-slot":`command-input`,className:r(`flex h-9 w-full rounded-md bg-transparent py-2 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50`,e),...t})]})}),He=(0,P.forwardRef)(function({className:e,...t},n){return(0,K.jsx)(V.List,{ref:n,"data-slot":`command-list`,className:r(`max-h-72 overflow-y-auto overflow-x-hidden`,e),...t})}),Ue=(0,P.forwardRef)(function({className:e,...t},n){return(0,K.jsx)(V.Empty,{ref:n,"data-slot":`command-empty`,className:r(`py-6 text-center text-sm text-muted-foreground`,e),...t})}),We=(0,P.forwardRef)(function({className:e,...t},n){return(0,K.jsx)(V.Group,{ref:n,"data-slot":`command-group`,className:r(`overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground`,e),...t})}),Ge=(0,P.forwardRef)(function({className:e,...t},n){return(0,K.jsx)(V.Item,{ref:n,"data-slot":`command-item`,className:r(`relative flex min-h-10 cursor-default select-none items-center gap-2 rounded-md px-2 py-2 text-[13px] outline-none transition-[background-color,transform,scale] duration-150 ease-out active:scale-[0.96] focus-visible:ring-2 focus-visible:ring-ring data-[selected=true]:bg-secondary data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50`,e),...t})});(0,P.forwardRef)(function({className:e,...t},n){return(0,K.jsx)(`span`,{ref:n,"data-slot":`command-shortcut`,className:r(`ml-auto text-xs tracking-widest text-muted-foreground`,e),...t})});var Ke=[{value:`1mo`,label:`1M`},{value:`3mo`,label:`3M`},{value:`6mo`,label:`6M`},{value:`1y`,label:`1Y`},{value:`2y`,label:`2Y`},{value:`5y`,label:`5Y`},{value:`max`,label:`Max`}],qe=[{value:`6mo`,label:`6M`},{value:`1y`,label:`1Y`},{value:`2y`,label:`2Y`}],Je=[{value:`hours`,label:`Hours`},{value:`day`,label:`Day`},{value:`week`,label:`Week`},{value:`month`,label:`Month`}],Ye=[{value:6,label:`6h`},{value:24,label:`24h`},{value:72,label:`3d`},{value:168,label:`7d`}],Xe=[{value:7,label:`7d`},{value:30,label:`30d`},{value:90,label:`90d`},{value:180,label:`6M`},{value:365,label:`1Y`}];function q({label:e,hint:t,required:n=!1,children:i,className:a,as:o=`label`}){let s=(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`span`,{className:`flex items-baseline justify-between gap-3 text-xs font-medium text-foreground`,children:[(0,K.jsxs)(`span`,{children:[e,n?(0,K.jsxs)(`span`,{className:`text-foreground/40`,"aria-hidden":`true`,children:[` `,`*`]}):null]}),t?(0,K.jsx)(`span`,{className:`text-[11px] font-normal text-muted-foreground`,children:t}):null]}),i]});return o===`div`?(0,K.jsx)(`div`,{className:r(`grid gap-1.5`,a),children:s}):(0,K.jsx)(`label`,{className:r(`grid gap-1.5`,a),children:s})}function Ze({value:e,onChange:t,options:n,ariaLabel:i}){let a=(0,P.useId)();return(0,K.jsx)(`div`,{role:`radiogroup`,"aria-label":i,className:`inline-flex min-h-12 items-center rounded-md border border-border bg-card p-1`,children:n.map(n=>{let i=n.value===e;return(0,K.jsxs)(`label`,{className:r(`inline-flex min-h-10 min-w-10 cursor-pointer items-center justify-center rounded-sm px-2.5 text-xs font-medium tabular-nums transition-[background-color,color,transform,scale] duration-150 ease-out active:scale-[0.96] focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-1 focus-within:ring-offset-card`,i?`bg-foreground text-background`:`text-muted-foreground hover:text-foreground`),children:[(0,K.jsx)(`input`,{type:`radio`,name:a,value:n.value,checked:i,onChange:()=>t(n.value),className:`sr-only`}),n.label]},n.value)})})}function Qe({value:e,onChange:t,options:n,placeholder:r,ariaLabel:i}){return(0,K.jsxs)(v,{"aria-label":i,value:e??``,size:`sm`,onChange:e=>t(e.target.value||void 0),children:[r?(0,K.jsx)(`option`,{value:``,disabled:!0,hidden:!0,children:r}):null,n.map(e=>(0,K.jsx)(`option`,{value:e.value,children:e.label},e.value))]})}function $e({value:e,onChange:t,presets:n,suffix:i,min:a,max:o,step:s=1,placeholder:c}){let l=n.some(t=>t.value===e);return(0,K.jsxs)(`div`,{className:`grid gap-2`,children:[(0,K.jsx)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:n.map(n=>(0,K.jsx)(`button`,{type:`button`,onClick:()=>t(n.value),className:r(`inline-flex min-h-10 items-center rounded-full border px-2.5 text-xs font-medium tabular-nums transition-[background-color,border-color,color,transform,scale] duration-150 ease-out active:scale-[0.96] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,n.value===e?`border-foreground bg-foreground text-background`:`border-border bg-card text-muted-foreground hover:border-border hover:text-foreground`),children:n.label},String(n.value)))}),(0,K.jsxs)(`div`,{className:`relative w-32`,children:[(0,K.jsx)(_,{type:`number`,inputMode:`numeric`,value:l?``:e??``,min:a,max:o,step:s,placeholder:c??`Custom`,onChange:e=>{t(e.target.value===``?void 0:Number(e.target.value))},className:`h-8 pr-8 text-xs tabular-nums`}),i?(0,K.jsx)(`span`,{className:`pointer-events-none absolute right-2 top-1/2 -translate-y-1/2 text-[11px] text-muted-foreground`,children:i}):null]})]})}function et({value:e,onChange:t,lookup:n,placeholder:r=`AAPL`,ariaLabel:i}){let[a,o]=(0,P.useState)(!1),[s,c]=(0,P.useState)({query:``,items:[]}),[l,u]=(0,P.useState)(``),d=(0,P.useRef)(null),f=String(e||``).trim(),p=s.query===f?s.items:[],m=l===f&&f.length>0;return(0,P.useEffect)(()=>{if(n&&!(f.length<1))return d.current&&clearTimeout(d.current),d.current=setTimeout(async()=>{u(f);try{let e=await n(f);c({query:f,items:e.slice(0,6)})}catch{c({query:f,items:[]})}finally{u(e=>e===f?``:e)}},180),()=>{d.current&&clearTimeout(d.current)}},[f,n]),(0,K.jsxs)(`div`,{className:`relative`,children:[(0,K.jsx)(_,{"aria-label":i,value:e??``,placeholder:r,onChange:e=>t(e.target.value.toUpperCase()),onFocus:()=>o(!0),onBlur:()=>setTimeout(()=>o(!1),120),className:`h-9 tabular-nums`,autoCapitalize:`characters`}),a&&p.length>0?(0,K.jsx)(`div`,{className:`absolute left-0 right-0 top-full z-20 mt-1 max-h-60 overflow-auto rounded-md border border-border bg-card shadow-subtle-sm`,children:p.map(e=>(0,K.jsxs)(`button`,{type:`button`,onMouseDown:e=>e.preventDefault(),onClick:()=>{t(e.symbol),o(!1)},className:`flex min-h-10 w-full items-center justify-between gap-3 rounded-md px-3 py-2 text-left text-sm transition-[background-color,transform,scale] duration-150 ease-out hover:bg-secondary active:scale-[0.96] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,children:[(0,K.jsx)(`span`,{className:`font-medium tabular-nums text-foreground`,children:e.symbol}),(0,K.jsx)(`span`,{className:`truncate text-xs text-muted-foreground`,children:e.name})]},e.symbol))}):null,m?(0,K.jsx)(`span`,{className:`absolute right-3 top-1/2 -translate-y-1/2 text-[10px] uppercase tracking-wider text-muted-foreground`,children:`…`}):null]})}function tt({value:e=[],onChange:t,placeholder:n=`Add ticker`,min:r,max:i,ariaLabel:s=`Ticker symbols`}){let[c,l]=(0,P.useState)(``),u=i!=null&&e.length>=i,d=()=>{let n=c.trim().toUpperCase();if(n){if(e.includes(n)){l(``);return}u||(t([...e,n]),l(``))}},p=n=>t(e.filter(e=>e!==n));return(0,K.jsxs)(`div`,{children:[(0,K.jsxs)(`div`,{className:`flex min-h-9 flex-wrap items-center gap-1.5 rounded-md border border-border bg-card px-2 py-1.5 focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2 focus-within:ring-offset-background`,children:[e.map(e=>(0,K.jsxs)(`span`,{className:`inline-flex min-h-10 items-center gap-1 rounded-md border border-border bg-secondary pl-2 text-xs font-medium tabular-nums text-foreground`,children:[e,(0,K.jsx)(`button`,{type:`button`,"aria-label":`Remove ${e}`,onClick:()=>p(e),className:`inline-flex size-10 items-center justify-center rounded-md text-muted-foreground transition-[color,transform,scale] duration-150 ease-out hover:text-foreground active:scale-[0.96] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,children:(0,K.jsx)(a,{className:`h-3 w-3`})})]},e)),(0,K.jsx)(`input`,{"aria-label":s,value:c,onChange:e=>l(e.target.value.toUpperCase()),onKeyDown:n=>{n.key===`Enter`||n.key===`,`?(n.preventDefault(),d()):n.key===`Backspace`&&!c&&e.length>0&&(n.preventDefault(),t(e.slice(0,-1)))},placeholder:e.length===0?n:``,disabled:u,className:`min-w-[80px] flex-1 bg-transparent py-1 text-xs tabular-nums text-foreground outline-none placeholder:text-muted-foreground disabled:opacity-40`,autoCapitalize:`characters`}),c.trim()?(0,K.jsx)(f,{type:`button`,variant:`ghost`,size:`icon-xs`,"aria-label":`Add ticker`,onClick:d,children:(0,K.jsx)(o,{})}):null]}),r!=null&&e.length<r?(0,K.jsxs)(`p`,{className:`mt-1 text-[11px] text-muted-foreground`,children:[`Add at least `,r,` symbol`,r===1?``:`s`,`.`]}):null,i==null?null:(0,K.jsxs)(`p`,{className:`mt-1 text-[11px] text-muted-foreground tabular-nums`,children:[e.length,`/`,i]})]})}function nt({value:e=[],onChange:t,options:n}){let i=n=>{e.includes(n)?t(e.filter(e=>e!==n)):t([...e,n])};return(0,K.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:n.map(t=>{let n=e.includes(t.value);return(0,K.jsxs)(`button`,{type:`button`,onClick:()=>i(t.value),className:r(`inline-flex min-h-10 items-center gap-1 rounded-full border px-2.5 text-xs font-medium transition-[background-color,border-color,color,transform,scale] duration-150 ease-out active:scale-[0.96] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,n?`border-foreground bg-foreground text-background`:`border-border bg-card text-muted-foreground hover:text-foreground`),children:[n?(0,K.jsx)(y,{className:`h-3 w-3`,"aria-hidden":`true`}):null,t.label]},t.value)})})}function rt({value:e,onChange:t,min:n,max:r,placeholder:i=`YYYY-MM-DD`}){return(0,K.jsx)(_,{type:`date`,value:e??``,min:n,max:r,placeholder:i,onChange:e=>t(e.target.value||void 0),className:`h-9 tabular-nums`})}function it({value:e,onChange:t,placeholder:n,rows:r=3,maxLength:i,ariaLabel:a=`Text input`}){return(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`textarea`,{"aria-label":a,value:e??``,onChange:e=>t(e.target.value),placeholder:n,maxLength:i,rows:r,className:`block w-full resize-y rounded-md border border-border bg-card px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background`}),i?(0,K.jsxs)(`div`,{className:`mt-1 text-right text-[11px] tabular-nums text-muted-foreground`,children:[(e||``).length,`/`,i]}):null]})}function at({value:e,onChange:t,currency:n=`USD`,min:r=0,placeholder:i=`0`}){let[a,o]=(0,P.useState)(!1),[s,c]=(0,P.useState)(J(e,!1));(0,P.useEffect)(()=>{a||c(J(e,!1))},[e,a]);let l=ot(n),u=e=>{if(o(!1),!e?.replace(/[^0-9.]/g,``)){t(void 0),c(``);return}let n=Number(e.replace(/[^0-9.]/g,``));Number.isFinite(n)&&(t(n),c(J(n,!1)))};return(0,K.jsxs)(`div`,{className:`relative`,children:[(0,K.jsx)(`span`,{className:`pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-sm text-muted-foreground`,children:l}),(0,K.jsx)(_,{value:a?s:J(e,!1),inputMode:`decimal`,placeholder:i,onChange:e=>c(e.target.value.replace(/[^0-9.]/g,``)),onFocus:()=>{o(!0),c(e==null?``:String(e))},onBlur:e=>u(e.target.value),min:r,className:`h-9 pl-7 tabular-nums`})]})}function J(e,t){if(e==null||e===``)return``;let n=Number(e);return Number.isFinite(n)?t?String(n):n.toLocaleString(`en-US`):String(e)}function ot(e){return!e||e===`USD`||e===`CAD`||e===`AUD`?`$`:e===`EUR`?`€`:e===`GBP`?`£`:e===`JPY`?`¥`:e}function st({value:e,onChange:t,min:n,max:r,step:i=.5,placeholder:a}){return(0,K.jsxs)(`div`,{className:`relative`,children:[(0,K.jsx)(_,{type:`number`,inputMode:`decimal`,value:e==null||e===``?``:String(Number((Number(e)*100).toFixed(4))),placeholder:a,min:n,max:r,step:i,onChange:e=>{let n=e.target.value;if(n===``){t(void 0);return}let r=Number(n);Number.isFinite(r)&&t(r/100)},className:`h-9 pr-7 tabular-nums`}),(0,K.jsx)(`span`,{className:`pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 text-sm text-muted-foreground`,children:`%`})]})}function ct({suggestions:e,onPick:t,label:n=`Suggestions`}){return e?.length?(0,K.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,K.jsx)(`span`,{className:`text-[11px] font-medium uppercase tracking-wider text-muted-foreground`,children:n}),(0,K.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:e.map(e=>(0,K.jsx)(`button`,{type:`button`,onClick:()=>t(e.value||e.label),className:`inline-flex min-h-10 items-center rounded-full border border-border bg-card px-2.5 text-xs font-medium text-muted-foreground transition-[background-color,border-color,color,transform,scale] duration-150 ease-out hover:text-foreground active:scale-[0.96] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,children:e.label},e.value||e.label))})]}):null}var lt={DAYS_PRESETS:Xe,HOURS_PRESETS:Ye,RANGE_OPTIONS:Ke,PERIOD_OPTIONS:qe,FRESHNESS_OPTIONS:Je};function Y(e){return typeof e==`string`?lt[e]??[]:e??[]}function ut({field:e,value:t,onChange:n,lookupSymbol:r}){let i=t=>n(e.name,t);switch(e.kind){case`symbol`:return(0,K.jsx)(q,{label:e.label,hint:e.helper,required:e.required,children:(0,K.jsx)(et,{value:t,onChange:i,lookup:r,placeholder:e.placeholder,ariaLabel:e.label})});case`symbols`:return(0,K.jsx)(q,{label:e.label,hint:e.helper,required:e.required,children:(0,K.jsx)(tt,{value:t||[],onChange:i,min:e.min,max:e.max,placeholder:e.placeholder,ariaLabel:e.label})});case`segmented`:return(0,K.jsx)(q,{as:`div`,label:e.label,hint:e.helper,required:e.required,children:(0,K.jsx)(Ze,{value:t,onChange:i,options:Y(e.options),ariaLabel:e.label})});case`select`:return(0,K.jsx)(q,{label:e.label,hint:e.helper,required:e.required,children:(0,K.jsx)(Qe,{value:t,onChange:i,options:Y(e.options),placeholder:e.placeholder,ariaLabel:e.label})});case`number-chips`:return(0,K.jsx)(q,{label:e.label,hint:e.helper,required:e.required,children:(0,K.jsx)($e,{value:t,onChange:i,presets:Y(e.presets),suffix:e.suffix,min:e.min,max:e.max,step:e.step,placeholder:e.placeholder})});case`multi-chips`:return(0,K.jsx)(q,{label:e.label,hint:e.helper,required:e.required,children:(0,K.jsx)(nt,{value:t||[],onChange:i,options:Y(e.options)})});case`date`:return(0,K.jsx)(q,{label:e.label,hint:e.helper,required:e.required,children:(0,K.jsx)(rt,{value:t,onChange:i,min:e.min,max:e.max})});case`freetext`:return(0,K.jsx)(q,{label:e.label,hint:e.helper,required:e.required,children:(0,K.jsx)(it,{value:t,onChange:i,placeholder:e.placeholder,maxLength:e.maxLength,rows:e.rows,ariaLabel:e.label})});case`money`:return(0,K.jsx)(q,{label:e.label,hint:e.helper,required:e.required,children:(0,K.jsx)(at,{value:t,onChange:i,currency:e.currency,placeholder:e.placeholder})});case`percent`:return(0,K.jsx)(q,{label:e.label,hint:e.helper,required:e.required,children:(0,K.jsx)(st,{value:t,onChange:i,min:e.min,max:e.max,step:e.step,placeholder:e.placeholder})});default:return(0,K.jsxs)(q,{label:e.label,hint:e.helper,required:e.required,children:[(0,K.jsx)(_,{value:t??``,placeholder:e.placeholder,onChange:e=>i(e.target.value),className:`h-9`}),e.suggestions?.length?(0,K.jsx)(`div`,{className:`mt-2`,children:(0,K.jsx)(ct,{suggestions:e.suggestions,onPick:i,label:`Try`})}):null]})}}function dt(e){let t={};for(let n of e)n.default!==void 0&&(t[n.name]=n.default);return t}function ft(e,t){let n=[];for(let r of e){let e=t[r.name];if(r.parse===`json`&&typeof e==`string`&&e.trim()!==``)try{JSON.parse(e)}catch{n.push(`${r.label} must be valid JSON.`)}if(r.required){if(e==null||e===``){n.push(`${r.label} is required.`);continue}Array.isArray(e)&&(e.length===0?n.push(`${r.label} is required.`):r.min!=null&&e.length<r.min&&n.push(`${r.label} needs at least ${r.min} entr${r.min===1?`y`:`ies`}.`))}}return n}var pt={},mt={market:`Market`,fundamentals:`Fundamentals`,options:`Options`,portfolio:`Portfolio`,technical:`Technical`,sentiment:`Sentiment`,macro:`Macro`,interaction:`Interaction`},ht=5,gt=80;function _t(e){let t=e.parameters?.properties||{},n=e.parameters?.required||[],r=pt[e.name]||{};return Object.entries(t).map(([e,t])=>({...yt(e,t,n.includes(e)),...r[e]||{}}))}function vt(e,t){if(!(t==null||t===``)){if(e.parse===`csv`&&typeof t==`string`){let e=t.split(`,`).map(e=>e.trim()).filter(Boolean);return e.length>0?e:void 0}if(e.parse===`json`&&typeof t==`string`)try{return JSON.parse(t)}catch{return}return t}}function yt(e,t,n){let r=bt(t),i={name:e,label:wt(e),helper:Tt(r.description),placeholder:r.examples?.[0],required:n,...r.default===void 0?{}:{default:r.default}},a=xt(r);if(a){let e=a.length<=ht?`segmented`:`select`;return{...i,kind:e,...e===`select`&&r.default===void 0?{placeholder:n?`Select ${i.label}`:`Use tool default`}:{},options:a}}if(r.type===`boolean`)return{...i,kind:`segmented`,options:[{value:!0,label:`Yes`},{value:!1,label:`No`}]};if(r.type===`number`||r.type===`integer`)return Ct(e,r)?{...i,kind:`percent`,step:.5}:{...i,kind:`number-chips`,min:r.minimum,max:r.maximum,step:r.type===`integer`?1:void 0};if(r.type===`array`){if(/symbol/i.test(e))return{...i,kind:`symbols`,min:r.minItems,max:r.maxItems};let t=xt(r.items||{});return t?{...i,kind:`multi-chips`,options:t}:r.items?.type===`object`?{...i,kind:`text`,parse:`json`,helper:i.helper||`JSON array`,placeholder:i.placeholder??`[]`}:{...i,kind:`text`,parse:`csv`,helper:i.helper||`Comma-separated values`}}return r.type===`object`?{...i,kind:`text`,parse:`json`,helper:i.helper||`JSON object`,placeholder:i.placeholder??`{}`}:e===`symbol`&&(r.type===`string`||r.type==null)?{...i,kind:`symbol`,placeholder:i.placeholder??`AAPL`}:{...i,kind:`text`}}function bt(e){let t=Array.isArray(e.anyOf)?e.anyOf:Array.isArray(e.oneOf)?e.oneOf:null;if(!t)return e;let n=t.filter(e=>e?.type!==`null`);if(n.length!==1||n.length===t.length)return e;let[r]=n;return{...r,description:e.description??r.description,examples:e.examples??r.examples,default:e.default??r.default}}function xt(e){let t=Array.isArray(e.enum)?e.enum:Array.isArray(e.anyOf)&&e.anyOf.every(e=>`const`in e)?e.anyOf.map(e=>e.const):null;return!t||t.length===0?null:t.map(e=>({value:e,label:St(e)}))}function St(e){return String(e).replace(/_/g,` `)}function Ct(e,t){let n=String(t.description||``);return/rate|growth/i.test(e)&&/decimal|0\.\d+\s+for\s+\d+%/i.test(n)}function wt(e){return e.replace(/_/g,` `).replace(/\b\w/g,e=>e.toUpperCase())}function Tt(e){let t=String(e||``);if(t)return t.length>gt?`${t.slice(0,gt)}…`:t}var Et={comprehensive_analysis:{headline:`Comprehensive analysis`,description:`Run market, fundamentals, technical, sentiment, and macro analysts on one ticker, then synthesize.`,fields:[{name:`symbol`,kind:`symbol`,label:`Symbol`,required:!0,default:`NVDA`},{name:`depth`,kind:`segmented`,label:`Depth`,default:`standard`,options:[{value:`fast`,label:`Fast`},{value:`standard`,label:`Standard`},{value:`deep`,label:`Deep`}],helper:`Fast: market + fundamentals only. Deep: includes options + macro.`}],buildPrompt:e=>{let t=e.depth&&e.depth!==`standard`?` (${e.depth} depth)`:``;return`/analyze ${e.symbol}${t}`}},portfolio_builder:{headline:`Portfolio builder`,description:`Build a draft portfolio from goals and constraints. The agent will fetch candidates, check correlation, and present an allocation table.`,fields:[{name:`objective`,kind:`freetext`,label:`Objective`,required:!0,placeholder:`Long-term growth with US tech exposure`,maxLength:200,helper:`One or two sentences describing what the portfolio is for.`},{name:`budget`,kind:`money`,label:`Budget`,default:1e5,helper:`Total amount to allocate.`},{name:`riskProfile`,kind:`segmented`,label:`Risk profile`,default:`balanced`,options:[{value:`conservative`,label:`Conservative`},{value:`balanced`,label:`Balanced`},{value:`aggressive`,label:`Aggressive`}]},{name:`timeHorizon`,kind:`segmented`,label:`Time horizon`,default:`5y`,options:[{value:`1y`,label:`1Y`},{value:`3y`,label:`3Y`},{value:`5y`,label:`5Y`},{value:`10y`,label:`10Y+`}]},{name:`assetScope`,kind:`segmented`,label:`Asset scope`,default:`stocks`,options:[{value:`stocks`,label:`Stocks`},{value:`stocks_etfs`,label:`Stocks + ETFs`},{value:`stocks_crypto`,label:`Stocks + Crypto`}]},{name:`positionCount`,kind:`number-chips`,label:`Positions`,default:8,presets:[{value:5,label:`5`},{value:8,label:`8`},{value:12,label:`12`},{value:20,label:`20`}]},{name:`maxSinglePositionPct`,kind:`percent`,label:`Max single position`,default:.15,helper:`Concentration cap, e.g. 15%.`},{name:`excludeSectors`,kind:`multi-chips`,label:`Exclude sectors`,advanced:!0,options:[{value:`energy`,label:`Energy`},{value:`financials`,label:`Financials`},{value:`consumer_discretionary`,label:`Consumer Discr.`},{value:`healthcare`,label:`Healthcare`},{value:`tech`,label:`Technology`},{value:`real_estate`,label:`Real Estate`},{value:`utilities`,label:`Utilities`}]},{name:`incomeVsGrowth`,kind:`segmented`,label:`Tilt`,advanced:!0,options:[{value:`income`,label:`Income`},{value:`balanced`,label:`Balanced`},{value:`growth`,label:`Growth`}]}],buildPrompt:e=>{let t=[`${At(e.budget)} budget`,e.riskProfile&&`${e.riskProfile} risk`,e.timeHorizon&&`${e.timeHorizon} horizon`,e.assetScope&&Dt(e.assetScope),e.positionCount&&`${e.positionCount} positions`,e.maxSinglePositionPct!=null&&`max ${(e.maxSinglePositionPct*100).toFixed(0)}% per position`,e.incomeVsGrowth&&`${e.incomeVsGrowth} tilt`,e.excludeSectors?.length&&`exclude ${e.excludeSectors.join(`, `)}`].filter(Boolean).join(`, `);return`Build me a portfolio for ${String(e.objective||``).trim()}. Constraints: ${t}.`}},options_screener:{headline:`Options screener`,description:`Pick contracts from a single ticker's chain that match your direction, DTE, and liquidity preferences.`,fields:[{name:`symbol`,kind:`symbol`,label:`Underlying`,required:!0,default:`NVDA`},{name:`direction`,kind:`segmented`,label:`Direction`,required:!0,default:`bullish`,options:[{value:`bullish`,label:`Bullish (calls)`},{value:`bearish`,label:`Bearish (puts)`}]},{name:`dteTarget`,kind:`segmented`,label:`Days to expiry`,required:!0,default:`30-45`,options:[{value:`0-7`,label:`0–7`},{value:`14-30`,label:`14–30`},{value:`30-45`,label:`30–45`},{value:`45-90`,label:`45–90`},{value:`90+`,label:`90+`}]},{name:`moneynessPreference`,kind:`segmented`,label:`Moneyness`,required:!0,default:`atm`,options:[{value:`itm`,label:`ITM`},{value:`atm`,label:`ATM`},{value:`otm`,label:`OTM`}]},{name:`liquidityMinimum`,kind:`segmented`,label:`Liquidity floor`,required:!0,default:`tight_spreads`,options:[{value:`any`,label:`Any`},{value:`tight_spreads`,label:`Tight spreads`},{value:`high_oi`,label:`High open interest`}]},{name:`objective`,kind:`select`,label:`Objective`,required:!0,default:`directional_leverage`,options:[{value:`directional_leverage`,label:`Directional leverage`},{value:`hedge`,label:`Hedge existing position`},{value:`income`,label:`Income (sell premium)`},{value:`speculative`,label:`Speculative (cheap convexity)`}]},{name:`maxPremium`,kind:`money`,label:`Max premium per contract`,advanced:!0},{name:`ivPreference`,kind:`segmented`,label:`IV preference`,advanced:!0,options:[{value:`any`,label:`Any`},{value:`low`,label:`Low IV`},{value:`high`,label:`High IV`}]}],buildPrompt:e=>{let t=[e.dteTarget&&`DTE ${e.dteTarget}`,e.moneynessPreference&&`${e.moneynessPreference.toUpperCase()} strikes`,e.liquidityMinimum&&Ot(e.liquidityMinimum),e.objective&&kt(e.objective),e.maxPremium!=null&&`max premium ${At(e.maxPremium)}`,e.ivPreference&&e.ivPreference!==`any`&&`${e.ivPreference} IV`].filter(Boolean).join(`, `);return`Screen options for ${e.symbol} (${e.direction||`bullish`}). ${t?`Filters: ${t}.`:``}`.trim()}},compare_assets:{headline:`Compare assets`,description:`Side-by-side comparison of two or more tickers across price, technicals, fundamentals, and risk.`,fields:[{name:`symbols`,kind:`symbols`,label:`Tickers`,required:!0,min:2,max:6,default:[`NVDA`,`AMD`],helper:`2 to 6 symbols.`},{name:`metrics`,kind:`multi-chips`,label:`Focus on`,advanced:!0,options:[{value:`valuation`,label:`Valuation`},{value:`growth`,label:`Growth`},{value:`profitability`,label:`Profitability`},{value:`momentum`,label:`Momentum`},{value:`risk`,label:`Risk`}]}],buildPrompt:e=>`Compare ${(e.symbols||[]).join(` vs `)} side by side.${e.metrics?.length?` Focus on ${e.metrics.join(`, `)}.`:``}`}};function Dt(e){return e===`stocks_etfs`?`stocks and ETFs`:e===`stocks_crypto`?`stocks and crypto`:`stocks only`}function Ot(e){return e===`tight_spreads`?`tight bid-ask spreads`:e===`high_oi`?`high open interest`:`any liquidity`}function kt(e){return e===`directional_leverage`?`directional leverage`:e===`hedge`?`hedge an existing position`:e===`income`?`income via short premium`:e===`speculative`?`speculative cheap convexity`:e}function At(e){if(e==null)return``;let t=Number(e);return Number.isFinite(t)?`$${t.toLocaleString(`en-US`)}`:String(e)}function jt(e){return Et[e]??null}var Mt=[{id:`workflows`,label:`Workflows`,icon:M},{id:`tools`,label:`Tools`,icon:S},{id:`providers`,label:`Providers`,icon:A}],Nt=`workflows`;function Pt({open:e,initialTab:t,initialProviderId:n,catalog:r,onClose:i,send:a,setToast:o,startChatRun:s,fillComposer:c,sessionId:l}){let u=t??Nt,d=n?{kind:`provider`,id:n}:null,f=e?`open:${u}:${n||``}`:`closed`,[p,m]=(0,P.useState)(f),[g,_]=(0,P.useState)(u),[v,y]=(0,P.useState)(``),[b,x]=(0,P.useState)(null),S=(0,P.useRef)(null);p!==f&&(m(f),e&&(_(u),y(``),x(d))),(0,P.useEffect)(()=>{S.current&&(S.current.scrollTop=0)},[b,g]);let C=(0,P.useCallback)(()=>{x(null),y(``),i()},[i]);return(0,K.jsx)(h,{open:e,onOpenChange:e=>{e||C()},children:(0,K.jsx)(ee,{width:`xl`,handleLabel:`Catalog`,className:`!h-[min(34rem,calc(100dvh-2rem))] p-0 md:!h-[min(34rem,calc(100dvh-2rem))]`,children:b?(0,K.jsxs)(`div`,{className:`grid min-h-0 flex-1 grid-rows-[auto_minmax(0,1fr)]`,children:[(0,K.jsx)(Ut,{selection:b,catalog:r,onBack:()=>x(null)}),(0,K.jsx)(`div`,{ref:S,className:`min-h-0 overflow-y-auto overscroll-contain`,children:(0,K.jsx)(Wt,{selection:b,catalog:r,send:a,setToast:o,startChatRun:s,fillComposer:c,onClose:C,lookupSymbol:void 0,sessionId:l})})]}):(0,K.jsx)(Lt,{tab:g,setTab:_,query:v,setQuery:y,catalog:r,onSelect:e=>x(e),bodyRef:S})})})}function Ft({tab:e,setTab:t,query:n,setQuery:i,counts:o}){return(0,K.jsxs)(`div`,{className:`border-b border-border`,children:[(0,K.jsx)(`div`,{className:`px-3 pt-2 sm:px-4`,children:(0,K.jsx)(`div`,{className:`flex min-h-12 w-full items-center gap-0.5 rounded-md bg-secondary p-1`,children:Mt.map(n=>{let i=n.icon,a=e===n.id;return(0,K.jsxs)(`button`,{type:`button`,onClick:()=>t(n.id),"aria-pressed":a,className:r(`inline-flex min-h-10 min-w-0 flex-1 items-center justify-center gap-1.5 rounded-sm px-2 text-xs font-medium transition-[background-color,color,box-shadow,transform,scale] duration-150 ease-out active:scale-[0.96] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,a?`bg-card text-foreground shadow-subtle-xs`:`text-muted-foreground hover:text-foreground`),children:[(0,K.jsx)(i,{className:`hidden h-3.5 w-3.5 sm:inline`,"aria-hidden":`true`}),(0,K.jsx)(`span`,{className:`truncate`,children:n.label}),(0,K.jsx)(`span`,{className:r(`hidden rounded-full px-1.5 text-[10px] tabular-nums sm:inline`,a?`bg-secondary text-muted-foreground`:`text-muted-foreground/70`),children:o[n.id]??0})]},n.id)})})}),(0,K.jsxs)(`div`,{className:`relative`,children:[(0,K.jsx)(Ve,{value:n,onValueChange:i,placeholder:It(e),autoFocus:!0,className:`h-8 pr-8 text-sm`}),n?(0,K.jsx)(f,{variant:`ghost`,size:`icon-xs`,"aria-label":`Clear search`,onClick:()=>i(``),className:`absolute right-3 top-1/2 -translate-y-1/2`,children:(0,K.jsx)(a,{})}):null]})]})}function It(e){return e===`workflows`?`Search workflows`:e===`providers`?`Search providers`:`Search tools by name, label, or domain`}function Lt({tab:e,setTab:t=()=>{},query:n,setQuery:r=()=>{},catalog:i,onSelect:a,bodyRef:o}){return(0,K.jsxs)(Be,{shouldFilter:!1,className:`h-full min-h-0 flex-1 rounded-none`,children:[(0,K.jsx)(Ft,{tab:e,setTab:t,query:n,setQuery:r,counts:{workflows:i?.workflows?.length??0,tools:i?.tools?.length??0,providers:i?.providers?.length??0}}),(0,K.jsx)(He,{ref:o,className:`min-h-0 !max-h-none flex-1 overscroll-contain`,children:(0,K.jsx)(Rt,{tab:e,query:n,catalog:i,onSelect:a})}),(0,K.jsxs)(`fieldset`,{className:`flex min-h-10 shrink-0 items-center justify-center gap-2 border-t border-border px-3 text-[11px] text-muted-foreground`,"aria-label":`Catalog keyboard shortcuts`,children:[(0,K.jsx)(b,{children:`↑↓`}),(0,K.jsx)(`span`,{children:`navigate`}),(0,K.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,K.jsx)(b,{children:`↵`}),(0,K.jsx)(`span`,{children:`run`}),(0,K.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,K.jsx)(b,{children:`esc`})]})]})}function Rt({tab:e,query:t,catalog:n,onSelect:i}){if(e===`workflows`){let e=ln(n?.workflows??[],t);return e.length===0?(0,K.jsx)(Ue,{children:(0,K.jsx)(Ht,{query:t,kind:`workflows`})}):(0,K.jsx)(`div`,{className:`grid divide-y divide-border`,children:e.map(e=>(0,K.jsx)(zt,{workflow:e,onSelect:i},e.id))})}if(e===`providers`){let e=un(n?.providers??[],t);return e.length===0?(0,K.jsx)(Ue,{children:(0,K.jsx)(Ht,{query:t,kind:`providers`})}):(0,K.jsx)(`div`,{className:`grid divide-y divide-border`,children:e.map(e=>(0,K.jsx)(Vt,{provider:e,onSelect:i},e.id))})}let a=cn(n?.tools??[],t);if(a.length===0)return(0,K.jsx)(Ue,{children:(0,K.jsx)(Ht,{query:t,kind:`tools`})});let o=dn(a,e=>e.domain??`tool`),s=[`market`,`fundamentals`,`options`,`portfolio`,`technical`,`sentiment`,`macro`,`interaction`];return(0,K.jsx)(`div`,{className:`grid`,children:[...o.keys()].sort((e,t)=>{let n=s.indexOf(e),r=s.indexOf(t);return(n===-1?999:n)-(r===-1?999:r)}).map((e,t)=>(0,K.jsx)(We,{heading:mt[e]??e,className:r(`divide-y divide-border border-y border-border p-0 [&_[cmdk-group-heading]]:px-4 [&_[cmdk-group-heading]]:pb-1 [&_[cmdk-group-heading]]:pt-3 [&_[cmdk-group-heading]]:text-[11px] [&_[cmdk-group-heading]]:uppercase [&_[cmdk-group-heading]]:tracking-[0.08em]`,t===0?``:`mt-2`),children:o.get(e).map(e=>(0,K.jsx)(Bt,{tool:e,onSelect:i},e.name))},e))})}function zt({workflow:e,onSelect:t}){return(0,K.jsxs)(Ge,{value:`workflow:${e.id}`,onSelect:()=>t({kind:`workflow`,id:e.id}),className:`group w-full items-start gap-3 rounded-none px-4 py-3 text-left hover:bg-secondary`,children:[(0,K.jsx)(M,{"aria-hidden":`true`,className:`mt-0.5 h-4 w-4 shrink-0 text-foreground`}),(0,K.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,K.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,K.jsx)(`span`,{className:`text-sm font-semibold text-foreground`,children:e.name})}),(0,K.jsx)(`p`,{className:`mt-0.5 line-clamp-2 text-xs text-muted-foreground`,children:e.description})]}),(0,K.jsx)(T,{"aria-hidden":`true`,className:`mt-1 h-4 w-4 shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100`})]})}function Bt({tool:e,onSelect:t}){let n=e.enabled===!1;return(0,K.jsxs)(Ge,{value:`tool:${e.name}`,onSelect:()=>t({kind:`tool`,id:e.name}),className:r(`group w-full items-start gap-3 rounded-none px-4 py-2.5 text-left hover:bg-secondary`,n&&`opacity-60`),children:[(0,K.jsx)(S,{"aria-hidden":`true`,className:`mt-0.5 h-3.5 w-3.5 shrink-0 text-muted-foreground`}),(0,K.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsx)(`span`,{className:`text-sm font-medium text-foreground`,children:e.label||tn(e.name)}),(0,K.jsx)(`code`,{className:`hidden truncate text-[11px] tabular-nums text-muted-foreground/70 sm:inline`,children:e.name}),n?(0,K.jsx)(C,{variant:`outline`,className:`h-5 px-1.5 text-[10px]`,children:`disabled`}):null]}),(0,K.jsx)(`p`,{className:`mt-0.5 line-clamp-1 text-xs text-muted-foreground`,children:e.description})]}),(0,K.jsx)(T,{"aria-hidden":`true`,className:`mt-1 h-4 w-4 shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100`})]})}function Vt({provider:e,onSelect:t}){let n=X(e),i=fn(e);return(0,K.jsxs)(Ge,{value:`provider:${e.id}`,onSelect:()=>t({kind:`provider`,id:e.id}),className:`group w-full items-start gap-3 rounded-none px-4 py-3 text-left hover:bg-secondary`,children:[(0,K.jsx)(i,{"aria-hidden":`true`,className:`mt-0.5 h-4 w-4 shrink-0 text-muted-foreground`}),(0,K.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsx)(`span`,{className:`text-sm font-medium text-foreground`,children:e.displayName}),(0,K.jsx)(Z,{status:n}),(0,K.jsx)(`span`,{className:r(`text-[11px]`,$(n)),children:Q(n)})]}),(0,K.jsx)(`p`,{className:`mt-0.5 line-clamp-2 text-xs text-muted-foreground`,children:(e.unlocks||[]).join(` · `)})]}),(0,K.jsx)(T,{"aria-hidden":`true`,className:`mt-1 h-4 w-4 shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100`})]})}function Ht({query:e,kind:t}){return(0,K.jsxs)(`div`,{className:`grid gap-2 p-12 text-center`,children:[(0,K.jsx)(p,{className:`mx-auto h-5 w-5 text-muted-foreground`,"aria-hidden":`true`}),(0,K.jsx)(`p`,{className:`text-sm font-medium text-foreground`,children:e?`No ${t} match "${e}"`:`No ${t} available`}),(0,K.jsx)(`p`,{className:`mx-auto max-w-xs text-xs text-muted-foreground`,children:e?`Try a shorter query or check spelling.`:`OpenCandle did not return entries for this section.`})]})}function Ut({selection:e,catalog:t,onBack:n}){let r=$t(e,t),i=e.kind===`provider`&&r?fn(r):A;return(0,K.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-border px-3 py-2 sm:px-4`,children:[(0,K.jsx)(f,{variant:`ghost`,size:`icon-sm`,"aria-label":`Back to catalog`,onClick:n,children:(0,K.jsx)(E,{})}),(0,K.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-2`,children:[e.kind===`workflow`?(0,K.jsx)(M,{className:`h-4 w-4 text-foreground`,"aria-hidden":`true`}):null,e.kind===`tool`?(0,K.jsx)(S,{className:`h-4 w-4 text-muted-foreground`,"aria-hidden":`true`}):null,e.kind===`provider`?(0,K.jsx)(i,{className:`h-4 w-4 text-muted-foreground`,"aria-hidden":`true`}):null,(0,K.jsx)(`h2`,{className:`truncate text-sm font-semibold text-foreground`,children:en(e,r)}),e.kind===`tool`&&r?.domain?(0,K.jsx)(C,{variant:`outline`,className:`hidden h-5 px-1.5 text-[10px] sm:inline-flex`,children:mt[r.domain]??r.domain}):null]})]})}function Wt({selection:e,catalog:t,send:n,setToast:r,startChatRun:i,fillComposer:a,onClose:o,lookupSymbol:s,sessionId:c}){let l=$t(e,t);return l?e.kind===`workflow`?(0,K.jsx)(Gt,{workflow:l,startChatRun:i,fillComposer:a,onClose:o,setToast:r,lookupSymbol:s,sessionId:c}):e.kind===`tool`?(0,K.jsx)(qt,{tool:l,send:n,startChatRun:i,fillComposer:a,onClose:o,setToast:r,lookupSymbol:s}):(0,K.jsx)(Jt,{provider:l,send:n,setToast:r}):(0,K.jsxs)(`div`,{className:`grid gap-2 p-12 text-center`,children:[(0,K.jsx)(`p`,{className:`text-sm font-medium text-foreground`,children:`Selection no longer available`}),(0,K.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`The catalog refreshed while you were viewing this entry.`})]})}function Gt({workflow:e,startChatRun:t,fillComposer:n,onClose:i,setToast:a,lookupSymbol:o}){let s=jt(e.id),c=s?.fields??[],[l,u]=(0,P.useState)(()=>dt(c)),[d,p]=(0,P.useState)(!1),m=(0,P.useCallback)((e,t)=>u(n=>({...n,[e]:t})),[]),h=ft(c,l),g=(0,P.useMemo)(()=>s?sn(s,l):e.prompt||e.name,[s,l,e]),_=c.filter(e=>!e.advanced),v=c.filter(e=>e.advanced);if(!s)return(0,K.jsxs)(`div`,{className:`p-6`,children:[(0,K.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`No builder defined for "`,e.name,`". The agent will use its default planner.`]}),(0,K.jsx)(`div`,{className:`mt-4 flex gap-2`,children:(0,K.jsx)(f,{variant:`brand`,onClick:()=>{t(e.prompt||e.name),i()},children:`Run with defaults`})})]});let y=e=>{if(h.length>0){a?.(h[0]);return}if(e===`send`){t(g),i();return}n?.(g),a?.(`Draft loaded — edit and send when ready.`),i()};return(0,K.jsxs)(`div`,{className:`grid gap-5 px-4 py-4 sm:px-5`,children:[(0,K.jsx)(`p`,{className:`text-sm leading-5 text-muted-foreground`,children:s.description}),(0,K.jsx)(`div`,{className:`grid gap-3.5`,children:_.map(e=>(0,K.jsx)(ut,{field:e,value:l[e.name],onChange:m,lookupSymbol:o},e.name))}),v.length>0?(0,K.jsxs)(`div`,{className:`grid gap-3.5 border-t border-border pt-4`,children:[(0,K.jsxs)(`button`,{type:`button`,onClick:()=>p(e=>!e),className:`inline-flex min-h-10 w-fit items-center gap-1.5 rounded-md px-2 text-[11px] font-medium uppercase tracking-wider text-muted-foreground transition-[color,transform,scale] duration-150 ease-out hover:text-foreground active:scale-[0.96] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,children:[(0,K.jsxs)(`span`,{children:[d?`Hide`:`Show`,` advanced`]}),(0,K.jsx)(T,{"aria-hidden":`true`,className:r(`h-3 w-3 transition-transform`,d&&`rotate-90`)})]}),d?v.map(e=>(0,K.jsx)(ut,{field:e,value:l[e.name],onChange:m,lookupSymbol:o},e.name)):null]}):null,(0,K.jsx)(Qt,{prompt:g}),(0,K.jsxs)(`div`,{className:`sticky bottom-0 -mx-4 flex flex-wrap items-center justify-end gap-2 border-t border-border bg-card px-4 py-3 sm:-mx-5 sm:px-5`,children:[(0,K.jsx)(f,{variant:`bordered`,onClick:()=>y(`draft`),disabled:!g,children:`Edit in chat`}),(0,K.jsx)(f,{variant:`brand`,onClick:()=>y(`send`),disabled:!g,prefixIcon:j,children:`Run workflow`})]})]})}function Kt(e,t,n=``){return{toolName:e,args:t,...n?{sessionId:n}:{}}}function qt({tool:e,send:t,startChatRun:n,fillComposer:r,onClose:i,setToast:a,lookupSymbol:o,sessionId:s}){let c=(0,P.useMemo)(()=>_t(e),[e]),[l,u]=(0,P.useState)(()=>dt(c)),d=(0,P.useCallback)((e,t)=>u(n=>({...n,[e]:t})),[]),p=ft(c,l),m=(0,P.useMemo)(()=>rn(nn(c,l)),[c,l]),h=(0,P.useMemo)(()=>`Use ${e.name}${an(m)}`,[e,m]),g=o=>{if(p.length>0){a?.(p[0]);return}if(o===`send`){n(h),i();return}if(o===`draft`){r?.(h),a?.(`Draft loaded — edit and send when ready.`),i();return}o===`run`&&t?.(`tool.invoke`,Kt(e.name,m,s))&&(a?.(`Running ${e.label||e.name}…`),i())};return(0,K.jsxs)(`div`,{className:`grid gap-5 px-4 py-4 sm:px-5`,children:[(0,K.jsx)(`p`,{className:`text-sm leading-5 text-muted-foreground`,children:e.description}),c.length===0?(0,K.jsx)(`div`,{className:`rounded-md border border-dashed border-border bg-secondary px-3 py-2.5 text-xs text-muted-foreground`,children:`This tool takes no inputs.`}):(0,K.jsx)(`div`,{className:`grid gap-3.5`,children:c.map(e=>(0,K.jsx)(ut,{field:e,value:l[e.name],onChange:d,lookupSymbol:o},e.name))}),(0,K.jsx)(Qt,{prompt:h,title:`Chat preview`}),(0,K.jsxs)(`div`,{className:`sticky bottom-0 -mx-4 flex flex-wrap items-center justify-end gap-2 border-t border-border bg-card px-4 py-3 sm:-mx-5 sm:px-5`,children:[(0,K.jsx)(f,{variant:`bordered`,size:`sm`,onClick:()=>g(`draft`),children:`Edit in chat`}),(0,K.jsx)(f,{variant:`brand`,size:`sm`,prefixIcon:j,onClick:()=>g(`run`),children:`Run now`})]})]})}function Jt({provider:e,send:t,setToast:n}){return e.kind===`external-tool`?(0,K.jsx)(Xt,{provider:e,send:t,setToast:n}):e.kind===`public-http`?(0,K.jsx)(Zt,{provider:e,send:t,setToast:n}):(0,K.jsx)(Yt,{provider:e,send:t,setToast:n})}function Yt({provider:e,send:t,setToast:n}){let i=`${e.id}:${e.status||``}`,[a,o]=(0,P.useState)(i),[s,c]=(0,P.useState)(``),[l,d]=(0,P.useState)(!1),p=X(e),m=p===`env`,h=s.trim(),g=!m&&h.length>0;a!==i&&(o(i),c(``),d(!1));let v=()=>{if(m){n?.(`${e.displayName} is set via ${e.envVar}. Unset it to override here.`);return}h&&(n?.(`Verifying ${e.displayName} key…`),t?.(`provider.save_api_key`,{providerId:e.id,apiKey:h})&&c(``))};return(0,K.jsxs)(`div`,{className:`grid gap-5 px-4 py-4 sm:px-5`,children:[(0,K.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsx)(Z,{status:p}),(0,K.jsx)(`span`,{className:r(`text-xs font-medium`,$(p)),children:Q(p)}),m?(0,K.jsxs)(`code`,{className:`text-[11px] text-muted-foreground`,children:[`env: `,e.envVar]}):null]}),(0,K.jsx)(`p`,{className:`text-sm leading-5 text-muted-foreground`,children:e.fallbackDescription?(0,K.jsxs)(K.Fragment,{children:[`If absent: `,e.fallbackDescription,`.`]}):(0,K.jsxs)(K.Fragment,{children:[`Required for: `,(e.unlocks||[]).join(`, `)||`this provider's tools`,`.`]})})]}),(0,K.jsxs)(`div`,{className:`grid gap-2`,children:[(0,K.jsx)(`span`,{className:`text-[11px] font-medium uppercase tracking-wider text-muted-foreground`,children:`Unlocks`}),(0,K.jsx)(`ul`,{className:`grid gap-1`,children:(e.unlocks||[]).map(e=>(0,K.jsxs)(`li`,{className:`flex items-baseline gap-2 text-sm text-foreground`,children:[(0,K.jsx)(`span`,{"aria-hidden":`true`,className:`mt-1 h-1 w-1 rounded-full bg-foreground/40`}),(0,K.jsx)(`span`,{children:e})]},e))})]}),(0,K.jsxs)(`div`,{className:`grid gap-2`,children:[(0,K.jsx)(`label`,{htmlFor:`provider-api-key-${e.id}`,className:`text-xs font-medium text-foreground`,children:`API key`}),(0,K.jsxs)(`div`,{className:`relative`,children:[(0,K.jsx)(_,{id:`provider-api-key-${e.id}`,type:l?`text`:`password`,value:s,onChange:e=>c(e.target.value),placeholder:`Paste your ${e.displayName} key`,disabled:m,className:`pr-10 font-mono`,autoCapitalize:`none`,autoComplete:`off`,spellCheck:!1,onKeyDown:e=>{e.key===`Enter`&&g&&(e.preventDefault(),v())}}),(0,K.jsx)(f,{type:`button`,variant:`ghost`,size:`icon-xs`,className:`absolute right-1 top-1/2 -translate-y-1/2`,"aria-label":l?`Hide API key`:`Show API key`,tooltip:l?`Hide API key`:`Show API key`,onClick:()=>d(e=>!e),disabled:!s,children:l?(0,K.jsx)(k,{}):(0,K.jsx)(te,{})})]}),(0,K.jsx)(`p`,{className:`text-[11px] leading-4 text-muted-foreground`,children:m?`Currently set via ${e.envVar}. Unset that variable to manage the key here.`:p===`file`?`Saved to ~/.opencandle/config.json${e.maskedKeyHint?` (${e.maskedKeyHint})`:``}. Paste a new key to replace.`:e.instructionsHint||`Saved to ~/.opencandle/config.json.`})]}),(0,K.jsxs)(`div`,{className:`sticky bottom-0 -mx-4 flex flex-wrap items-center justify-end gap-2 border-t border-border bg-card px-4 py-3 sm:-mx-5 sm:px-5`,children:[e.signupUrl?(0,K.jsx)(f,{variant:`ghost`,size:`sm`,suffixIcon:u,onClick:()=>window.open(e.signupUrl,`_blank`,`noreferrer`),children:`Get a key`}):null,(0,K.jsx)(f,{variant:`brand`,size:`sm`,onClick:v,disabled:!g,children:p===`file`?`Replace key`:`Save key`})]})]})}function Xt({provider:e,send:t,setToast:n}){let i=X(e),a=e.statusDetail,o=i===`skipped`;return(0,K.jsxs)(`div`,{className:`grid gap-5 px-4 py-4 sm:px-5`,children:[(0,K.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,K.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,K.jsx)(Z,{status:i}),(0,K.jsx)(`span`,{className:r(`text-xs font-medium`,$(i)),children:Q(i)}),a?.checkedAt?(0,K.jsxs)(`span`,{className:`text-[11px] text-muted-foreground`,children:[`Checked `,gn(a.checkedAt)]}):null]}),(0,K.jsx)(`p`,{className:`text-sm leading-5 text-muted-foreground`,children:e.fallbackDescription})]}),(0,K.jsxs)(`div`,{className:`grid gap-2`,children:[(0,K.jsx)(`span`,{className:`text-[11px] font-medium uppercase tracking-wider text-muted-foreground`,children:`Install`}),(0,K.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2 rounded-md border border-border bg-secondary px-3 py-2`,children:[(0,K.jsx)(N,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground`,"aria-hidden":`true`}),(0,K.jsx)(`code`,{className:`min-w-0 flex-1 overflow-x-auto whitespace-nowrap text-[11px] text-foreground`,children:e.installCmd}),(0,K.jsx)(f,{type:`button`,variant:`ghost`,size:`icon-xs`,"aria-label":`Copy install command`,tooltip:`Copy install command`,onClick:()=>{navigator.clipboard?.writeText?.(e.installCmd),n?.(`Install command copied.`)},children:(0,K.jsx)(D,{})})]})]}),(0,K.jsxs)(`div`,{className:`grid gap-2`,children:[(0,K.jsx)(`span`,{className:`text-[11px] font-medium uppercase tracking-wider text-muted-foreground`,children:`Session source`}),(0,K.jsxs)(`p`,{className:`text-sm leading-5 text-muted-foreground`,children:[`Uses your normal browser session. Supported browsers:`,` `,(e.supportedBrowsers||[]).join(`, `)||`Chrome, Arc, Edge, Firefox, Brave`,`.`]}),a?.message?(0,K.jsx)(`p`,{className:`rounded-md border border-border bg-secondary px-3 py-2 text-xs leading-5 text-muted-foreground`,children:a.message}):null]}),(0,K.jsxs)(`div`,{className:`sticky bottom-0 -mx-4 flex flex-wrap items-center justify-end gap-2 border-t border-border bg-card px-4 py-3 sm:-mx-5 sm:px-5`,children:[(0,K.jsx)(f,{variant:`bordered`,size:`sm`,prefixIcon:s,onClick:()=>{n?.(o?`Re-enabling ${e.displayName} and checking install status...`:`Checking ${e.displayName} install status...`),t?.(`provider.status.check`,{providerId:e.id,mode:`install`,reenable:o})},children:o?`Re-enable & check install`:`Check install`}),(0,K.jsx)(f,{variant:`brand`,size:`sm`,onClick:()=>{n?.(o?`Re-enabling ${e.displayName} and checking session. This may read browser cookies and trigger a Keychain prompt.`:`Checking ${e.displayName} session. This may read browser cookies and trigger a Keychain prompt.`),t?.(`provider.status.check`,{providerId:e.id,mode:`session`,reenable:o})},children:o?`Re-enable & check session`:`Check session`})]})]})}function Zt({provider:e,send:t,setToast:n}){let i=X(e),a=e.statusDetail;return(0,K.jsxs)(`div`,{className:`grid gap-5 px-4 py-4 sm:px-5`,children:[(0,K.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,K.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,K.jsx)(Z,{status:i}),(0,K.jsx)(`span`,{className:r(`text-xs font-medium`,$(i)),children:Q(i)}),a?.checkedAt?(0,K.jsxs)(`span`,{className:`text-[11px] text-muted-foreground`,children:[`Checked `,gn(a.checkedAt)]}):null]}),(0,K.jsx)(`p`,{className:`text-sm leading-5 text-muted-foreground`,children:e.fallbackDescription||`No account or API key is required.`})]}),(0,K.jsxs)(`div`,{className:`grid gap-2`,children:[(0,K.jsx)(`span`,{className:`text-[11px] font-medium uppercase tracking-wider text-muted-foreground`,children:`Probe`}),(0,K.jsx)(`code`,{className:`overflow-x-auto rounded-md border border-border bg-secondary px-3 py-2 text-[11px] text-muted-foreground`,children:e.probeUrl}),a?.message?(0,K.jsx)(`p`,{className:`text-xs leading-5 text-muted-foreground`,children:a.message}):null]}),(0,K.jsx)(`div`,{className:`sticky bottom-0 -mx-4 flex flex-wrap items-center justify-end gap-2 border-t border-border bg-card px-4 py-3 sm:-mx-5 sm:px-5`,children:(0,K.jsx)(f,{variant:`brand`,size:`sm`,prefixIcon:s,onClick:()=>{n?.(`Checking ${e.displayName} reachability...`),t?.(`provider.status.check`,{providerId:e.id})},children:`Check reachability`})})]})}function Qt({prompt:e,title:t=`Chat prompt`}){return(0,K.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,K.jsx)(`span`,{className:`text-[11px] font-medium uppercase tracking-wider text-muted-foreground`,children:t}),(0,K.jsx)(`pre`,{className:`overflow-auto whitespace-pre-wrap rounded-md border border-border bg-secondary px-3 py-2 font-mono text-xs leading-5 text-foreground`,children:e||`Fill the required fields to preview the chat prompt.`})]})}function $t(e,t){return!e||!t?null:e.kind===`workflow`?t.workflows?.find(t=>t.id===e.id)??null:e.kind===`tool`?t.tools?.find(t=>t.name===e.id)??null:e.kind===`provider`?t.providers?.find(t=>t.id===e.id)??null:null}function en(e,t){return t?e.kind===`workflow`?t.name:e.kind===`tool`?t.label||tn(t.name):e.kind===`provider`?t.displayName:`Catalog`:`Catalog`}function tn(e){return String(e||``).replace(/^get_/,``).replace(/_/g,` `)}function nn(e,t){let n={};for(let r of e)n[r.name]=vt(r,t[r.name]);return n}function rn(e){let t={};for(let[n,r]of Object.entries(e))r===void 0||r===``||Array.isArray(r)&&r.length===0||(t[n]=r);return t}function an(e){let t=Object.entries(e);return t.length===0?``:` with ${t.map(([e,t])=>`${e}=${on(t)}`).join(`, `)}`}function on(e){return Array.isArray(e)?e.some(e=>typeof e==`object`&&!!e)?JSON.stringify(e):e.join(`,`):typeof e==`object`&&e||typeof e==`string`&&e.includes(` `)?JSON.stringify(e):String(e)}function sn(e,t){try{return e.buildPrompt(t)||``}catch{return``}}function cn(e,t){if(!t.trim())return e;let n=t.toLowerCase();return e.filter(e=>[e.name,e.label,e.description,e.domain].some(e=>String(e||``).toLowerCase().includes(n)))}function ln(e,t){if(!t.trim())return e;let n=t.toLowerCase();return e.filter(e=>[e.id,e.name,e.description].some(e=>String(e||``).toLowerCase().includes(n)))}function un(e,t){if(!t.trim())return e;let n=t.toLowerCase();return e.filter(e=>[e.id,e.kind,e.displayName,e.envVar,e.binary,e.installCmd,e.probeUrl,...e.aliases||[],...e.unlocks||[]].some(e=>String(e||``).toLowerCase().includes(n)))}function dn(e,t){let n=new Map;for(let r of e){let e=t(r);n.has(e)||n.set(e,[]),n.get(e).push(r)}return n}function X(e){return e.statusDetail?.state??e.status??e.source??`absent`}function fn(e){return e.kind===`external-tool`?N:e.kind===`public-http`?O:A}function Z({status:e}){return(0,K.jsx)(`span`,{"aria-hidden":`true`,className:r(`inline-block h-1.5 w-1.5 rounded-full`,pn.has(e)?`bg-success`:mn.has(e)?`bg-info`:hn.has(e)?`bg-destructive`:`bg-warning`)})}function Q(e){return e===`configured`||e===`file`?`Configured`:e===`env`?`From environment`:e===`installed`?`Installed`:e===`missing`?`Missing`:e===`session_ok`?`Session ready`:e===`session_missing`?`Login needed`:e===`session_stale`?`Session stale`:e===`skipped`?`Skipped`:e===`reachable`?`Reachable`:e===`unreachable`?`Unreachable`:e===`error`?`Needs attention`:e===`unknown`?`Not verified yet`:`Not configured`}function $(e){return pn.has(e)?`text-success`:mn.has(e)?`text-info`:hn.has(e)?`text-destructive`:`text-warning`}var pn=new Set([`configured`,`file`,`installed`,`session_ok`,`reachable`]),mn=new Set([`env`,`skipped`]),hn=new Set([`error`,`unreachable`]);function gn(e){let t=Date.parse(e);if(Number.isNaN(t))return`just now`;let n=Math.max(0,Math.round((Date.now()-t)/1e3));if(n<60)return`just now`;let r=Math.round(n/60);if(r<60)return`${r}m ago`;let i=Math.round(r/60);return i<24?`${i}h ago`:`${Math.round(i/24)}d ago`}export{Lt as CatalogList,Pt as CatalogOverlay,Kt as buildCatalogToolInvokePayload,an as formatArgsForPrompt};