dexto 1.2.5 → 1.2.6

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 (40) hide show
  1. package/dist/agents/coding-agent/coding-agent.yml +23 -15
  2. package/dist/agents/database-agent/database-agent.yml +15 -7
  3. package/dist/agents/default-agent.yml +23 -15
  4. package/dist/agents/github-agent/github-agent.yml +14 -6
  5. package/dist/agents/music-agent/music-agent.yml +15 -7
  6. package/dist/agents/nano-banana-agent/nano-banana-agent.yml +15 -7
  7. package/dist/agents/podcast-agent/podcast-agent.yml +15 -7
  8. package/dist/agents/product-name-researcher/product-name-researcher.yml +18 -8
  9. package/dist/agents/sora-video-agent/sora-video-agent.yml +15 -7
  10. package/dist/cli/commands/interactive-commands/prompt-commands.d.ts.map +1 -1
  11. package/dist/cli/commands/interactive-commands/prompt-commands.js +9 -37
  12. package/dist/webui/.next/standalone/.next/static/chunks/620-be2122f1db014716.js +1 -0
  13. package/dist/webui/.next/standalone/packages/webui/.next/BUILD_ID +1 -1
  14. package/dist/webui/.next/standalone/packages/webui/.next/app-build-manifest.json +2 -2
  15. package/dist/webui/.next/standalone/packages/webui/.next/build-manifest.json +2 -2
  16. package/dist/webui/.next/standalone/packages/webui/.next/prerender-manifest.json +3 -3
  17. package/dist/webui/.next/standalone/packages/webui/.next/required-server-files.json +1 -1
  18. package/dist/webui/.next/standalone/packages/webui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  19. package/dist/webui/.next/standalone/packages/webui/.next/server/app/chat/[sessionId]/page_client-reference-manifest.js +1 -1
  20. package/dist/webui/.next/standalone/packages/webui/.next/server/app/page_client-reference-manifest.js +1 -1
  21. package/dist/webui/.next/standalone/packages/webui/.next/server/app/playground/page_client-reference-manifest.js +1 -1
  22. package/dist/webui/.next/standalone/packages/webui/.next/server/chunks/21.js +2 -2
  23. package/dist/webui/.next/standalone/packages/webui/.next/server/chunks/487.js +1 -1
  24. package/dist/webui/.next/standalone/packages/webui/.next/server/pages/500.html +1 -1
  25. package/dist/webui/.next/standalone/packages/webui/.next/server/server-reference-manifest.json +1 -1
  26. package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/620-be2122f1db014716.js +1 -0
  27. package/dist/webui/.next/standalone/packages/webui/package.json +1 -1
  28. package/dist/webui/.next/standalone/packages/webui/server.js +1 -1
  29. package/dist/webui/.next/static/chunks/620-be2122f1db014716.js +1 -0
  30. package/dist/webui/package.json +1 -1
  31. package/package.json +5 -5
  32. package/dist/webui/.next/standalone/.next/static/chunks/620-849d0ea03f0e25d2.js +0 -1
  33. package/dist/webui/.next/standalone/packages/webui/.next/static/chunks/620-849d0ea03f0e25d2.js +0 -1
  34. package/dist/webui/.next/static/chunks/620-849d0ea03f0e25d2.js +0 -1
  35. /package/dist/webui/.next/standalone/.next/static/{EvtxRtNp0iL3eeD0UnMCl → I8HCRtl1KN0zLK8CwW1y3}/_buildManifest.js +0 -0
  36. /package/dist/webui/.next/standalone/.next/static/{EvtxRtNp0iL3eeD0UnMCl → I8HCRtl1KN0zLK8CwW1y3}/_ssgManifest.js +0 -0
  37. /package/dist/webui/.next/standalone/packages/webui/.next/static/{EvtxRtNp0iL3eeD0UnMCl → I8HCRtl1KN0zLK8CwW1y3}/_buildManifest.js +0 -0
  38. /package/dist/webui/.next/standalone/packages/webui/.next/static/{EvtxRtNp0iL3eeD0UnMCl → I8HCRtl1KN0zLK8CwW1y3}/_ssgManifest.js +0 -0
  39. /package/dist/webui/.next/static/{EvtxRtNp0iL3eeD0UnMCl → I8HCRtl1KN0zLK8CwW1y3}/_buildManifest.js +0 -0
  40. /package/dist/webui/.next/static/{EvtxRtNp0iL3eeD0UnMCl → I8HCRtl1KN0zLK8CwW1y3}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- exports.id=487,exports.ids=[487],exports.modules={1511:(a,b,c)=>{"use strict";c.d(b,{SpeechReset:()=>d});let d=(0,c(93147).registerClientReference)(function(){throw Error("Attempted to call SpeechReset() from the server but SpeechReset is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/dexto/dexto/packages/webui/components/ui/speech-reset.tsx","SpeechReset")},6276:(a,b,c)=>{"use strict";c.d(b,{QueryProvider:()=>h});var d=c(66025),e=c(9292),f=c(5393),g=c(26348);function h({children:a}){let[b]=(0,g.useState)(()=>new e.E({defaultOptions:{queries:{staleTime:6e4,gcTime:3e5,retry:1,refetchOnWindowFocus:!1}}}));return(0,d.jsx)(f.Ht,{client:b,children:a})}},11531:(a,b,c)=>{"use strict";c.d(b,{useAnalytics:()=>d});let d=(0,c(93147).registerClientReference)(function(){throw Error("Attempted to call useAnalytics() from the server but useAnalytics is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/dexto/dexto/packages/webui/lib/analytics/hook.ts","useAnalytics")},14501:(a,b,c)=>{"use strict";c.d(b,{AnalyticsProvider:()=>h,useAnalyticsContext:()=>i});var d=c(66025),e=c(26348),f=c(86941);let g=(0,e.createContext)(void 0);function h({children:a}){let[b,c]=(0,e.useState)(!1),[h,i]=(0,e.useState)(!1);return(0,d.jsx)(g.Provider,{value:{capture:(a,c)=>{if(b&&h)try{f.Ay.capture(a,{app:"dexto-webui",...c})}catch(a){console.error("Failed to capture analytics event:",a)}},enabled:b,isReady:h},children:a})}function i(){let a=(0,e.useContext)(g);if(!a)throw Error("useAnalyticsContext must be used within an AnalyticsProvider");return a}},14556:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,55671,23)),Promise.resolve().then(c.t.bind(c,41974,23)),Promise.resolve().then(c.t.bind(c,66848,23)),Promise.resolve().then(c.t.bind(c,67111,23)),Promise.resolve().then(c.t.bind(c,1199,23)),Promise.resolve().then(c.t.bind(c,59015,23)),Promise.resolve().then(c.t.bind(c,89153,23)),Promise.resolve().then(c.t.bind(c,39406,23)),Promise.resolve().then(c.t.bind(c,7015,23))},15817:(a,b,c)=>{"use strict";c.d(b,{useAnalytics:()=>f});var d=c(26348),e=c(14501);function f(){let{capture:a,enabled:b,isReady:c}=(0,e.useAnalyticsContext)(),f=(0,d.useRef)({}),g=(0,d.useCallback)(c=>{if(b)try{let b=c.sessionId;f.current[b]=(f.current[b]||0)+1;let d={...c,messageCount:f.current[b]};a("dexto_webui_message_sent",d)}catch(a){console.warn("Analytics tracking failed:",a)}},[a,b]),h=(0,d.useCallback)(c=>{if(b)try{a("dexto_webui_session_created",c)}catch(a){console.warn("Analytics tracking failed:",a)}},[a,b]),i=(0,d.useCallback)(c=>{if(b)try{a("dexto_webui_session_switched",c)}catch(a){console.warn("Analytics tracking failed:",a)}},[a,b]),j=(0,d.useCallback)(c=>{if(b)try{f.current[c.sessionId]=0,a("dexto_webui_conversation_reset",c)}catch(a){console.warn("Analytics tracking failed:",a)}},[a,b]),k=(0,d.useCallback)(c=>{if(b)try{a("dexto_webui_agent_switched",c)}catch(a){console.warn("Analytics tracking failed:",a)}},[a,b]),l=(0,d.useCallback)(c=>{if(b)try{a("dexto_webui_tool_called",c)}catch(a){console.warn("Analytics tracking failed:",a)}},[a,b]),m=(0,d.useCallback)(c=>{if(b)try{a("dexto_webui_llm_switched",c)}catch(a){console.warn("Analytics tracking failed:",a)}},[a,b]),n=(0,d.useCallback)(c=>{if(b)try{a("dexto_webui_file_uploaded",c)}catch(a){console.warn("Analytics tracking failed:",a)}},[a,b]),o=(0,d.useCallback)(c=>{if(b)try{a("dexto_webui_image_uploaded",c)}catch(a){console.warn("Analytics tracking failed:",a)}},[a,b]),p=(0,d.useCallback)(c=>{if(b)try{a("dexto_webui_mcp_server_connected",c)}catch(a){console.warn("Analytics tracking failed:",a)}},[a,b]);return{capture:a,enabled:b,isReady:c,trackMessageSent:g,trackSessionCreated:h,trackSessionSwitched:i,trackConversationReset:j,trackAgentSwitched:k,trackToolCalled:l,trackLLMSwitched:m,trackFileUploaded:n,trackImageUploaded:o,trackMCPServerConnected:p}}},15963:()=>{},33490:(a,b,c)=>{"use strict";c.d(b,{EQ:()=>m,KU:()=>h,P2:()=>i,PI:()=>j,Y_:()=>o,j0:()=>k,kz:()=>l});var d=c(26348),e=c(36476),f=c(63281),g=c(91647);function h(a){return"object"==typeof a&&null!==a&&"error"in a}function i(a){return"object"==typeof a&&null!==a&&"content"in a&&Array.isArray(a.content)}function j(a){return"object"==typeof a&&null!==a&&"type"in a&&"text"===a.type}function k(a){return"object"==typeof a&&null!==a&&"type"in a&&"image"===a.type}function l(a){return"object"==typeof a&&null!==a&&"type"in a&&"audio"===a.type}function m(a){return"object"==typeof a&&null!==a&&"type"in a&&"file"===a.type}let n=()=>`msg-${Date.now()}-${Math.random().toString(36).substring(2,9)}`;function o(a,b){let c=(0,e.st)(),h=(0,d.useRef)(c),[i,j]=(0,d.useState)([]),k=(0,d.useRef)(null),l=(0,d.useRef)(!1),m=(0,d.useRef)(new Map),o=(0,d.useCallback)((a,c)=>{b.setSessionError(a,c)},[b]),p=(0,d.useCallback)((a,c)=>{b.setSessionProcessing(a,c)},[b]),q=(0,d.useCallback)((a,c)=>{b.setSessionStatus(a,c)},[b]),r=(0,d.useCallback)(a=>b.getSessionAbortController(a),[b]),s=(0,d.useCallback)(a=>{b.abortSession(a)},[b]),t=(0,d.useCallback)(b=>{if(!b)return!1;let c=a.current;return!!c&&b===c},[a]),u=(0,d.useCallback)(a=>{if(!a.sessionId)return void console.error("Event missing sessionId:",a);if(t(a.sessionId))switch(a.type){case"llm:thinking":p(a.sessionId,!0),q(a.sessionId,"open");break;case"llm:chunk":{let b=a.content||"",c=a.chunkType;j(a=>{if("reasoning"===c){let c=a[a.length-1];if(c&&"assistant"===c.role){let d={...c,reasoning:(c.reasoning||"")+b,createdAt:Date.now()};return[...a.slice(0,-1),d]}return[...a,{id:n(),role:"assistant",content:"",reasoning:b,createdAt:Date.now()}]}{let c=a[a.length-1];if(c&&"assistant"===c.role){let d="string"==typeof c.content?c.content:"",e={...c,content:d+b,createdAt:Date.now()};return[...a.slice(0,-1),e]}return[...a,{id:n(),role:"assistant",content:b,createdAt:Date.now()}]}});break}case"llm:response":{p(a.sessionId,!1);let b=a.content||"",c=a.tokenUsage,d=a.model,e=a.provider,f=a.router;j(a=>{let g=a[a.length-1];if(g&&"assistant"===g.role){let h={...g,content:"string"==typeof b?b:"",tokenUsage:c,...d&&{model:d},...e&&{provider:e},...f&&{router:f},createdAt:Date.now()};return[...a.slice(0,-1),h]}return a});break}case"llm:tool-call":{let{toolName:b,args:c,callId:d}=a;j(a=>{let e=a.length,f=[...a,{id:n(),role:"tool",content:null,toolName:b,toolArgs:c,toolCallId:d,createdAt:Date.now()}];return d&&m.current.set(d,e),f});break}case"llm:tool-result":{let{callId:b,success:c,sanitized:d,toolName:e}=a;e&&h.current.trackToolCalled({toolName:e,success:!1!==c,sessionId:a.sessionId}),j(a=>{let f=-1;if(b&&m.current.has(b)?(f=m.current.get(b),m.current.delete(b)):f=a.findIndex(a=>"tool"===a.role&&void 0===a.toolResult&&a.toolName===e),-1!==f&&f<a.length){let b={...a[f],toolResult:d,toolResultSuccess:c};return[...a.slice(0,f),b,...a.slice(f+1)]}return a});break}case"approval:request":case"approval:response":break;case"llm:error":{if(l.current){l.current=!1;break}let b=(a.error||{}).message||"Unknown error";o(a.sessionId,{id:n(),message:b,timestamp:Date.now(),context:a.context,recoverable:a.recoverable,sessionId:a.sessionId,anchorMessageId:k.current||void 0}),p(a.sessionId,!1),q(a.sessionId,"closed")}}},[t,p,q,o]),v=(0,d.useCallback)(async(a,b,c,d,e=!0)=>{if(!d)return void console.error("Session ID required for sending message");s(d);let h=r(d)||new AbortController;p(d,!0),q(d,"connecting");let i=n();k.current=i,j(e=>[...e,{id:i,role:"user",content:a,createdAt:Date.now(),sessionId:d,imageData:b,fileData:c}]);try{if(e){let e=f.S.api["message-stream"].$post({json:{message:a,sessionId:d,imageData:b,fileData:c}}),i=(0,g.G6)(e,{signal:h.signal});for await(let a of(q(d,"open"),i))u(a);q(d,"closed"),p(d,!1)}else{let e,g=await f.S.api["message-sync"].$post({json:{message:a,sessionId:d,imageData:b,fileData:c}});if(!g.ok){let a=await g.text();throw Error(`Failed to send message: ${g.status} ${g.statusText}. ${a}`)}try{e=await g.json()}catch(b){let a=b instanceof Error?b.message:String(b);throw Error(`Failed to parse response: ${a}`)}j(a=>[...a,{id:n(),role:"assistant",content:e.response||"",createdAt:Date.now(),sessionId:d,...e.tokenUsage&&{tokenUsage:e.tokenUsage},...e.reasoning&&{reasoning:e.reasoning},...e.model&&{model:e.model},...e.provider&&{provider:e.provider},...e.router&&{router:e.router}}]),q(d,"closed"),p(d,!1)}}catch(a){if("AbortError"===a.name)return void console.log("Stream aborted by user");console.error("Stream error:",a),q(d,"closed"),p(d,!1),o(d,{id:n(),message:a.message||"Failed to send message",timestamp:Date.now(),context:"stream",recoverable:!0,sessionId:d,anchorMessageId:i})}},[u,s,r,p,q,o]);return{messages:i,sendMessage:v,reset:(0,d.useCallback)(async a=>{if(a){try{await f.S.api.reset.$post({json:{sessionId:a}})}catch(a){console.error("Failed to reset session",a)}j([]),o(a,null),k.current=null,m.current.clear(),p(a,!1)}},[o,p]),setMessages:j,cancel:(0,d.useCallback)(a=>{a&&(s(a),p(a,!1),q(a,"closed"),m.current.clear(),l.current=!0)},[s,p,q])}}},36476:(a,b,c)=>{"use strict";c.d(b,{st:()=>d.useAnalytics}),c(14501);var d=c(15817)},41367:(a,b,c)=>{"use strict";c.d(b,{l:()=>d});let d={agents:{all:["agents"],path:["agentPath"]},agent:{config:["agent","config"]},llm:{current:a=>["llm","current",a??null],catalog:["llm","catalog"]},sessions:{all:["sessions"],detail:a=>["sessions","detail",a],history:a=>["sessions","history",a]},search:{messages:(a,b,c)=>["search","messages",a,b,c],sessions:a=>["search","sessions",a]},greeting:a=>["greeting",a??"default"],memories:{all:["memories"]},resources:{all:["resources"]},serverRegistry:a=>["serverRegistry",a],prompts:{all:["prompts"]},servers:{all:["servers"],detail:a=>["servers","detail",a],tools:a=>["servers","tools",a]}}},45404:(a,b,c)=>{"use strict";c.d(b,{ChatProvider:()=>e});var d=c(93147);let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call ChatProvider() from the server but ChatProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/dexto/dexto/packages/webui/components/hooks/ChatContext.tsx","ChatProvider");(0,d.registerClientReference)(function(){throw Error("Attempted to call useChatContext() from the server but useChatContext is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/dexto/dexto/packages/webui/components/hooks/ChatContext.tsx","useChatContext")},45699:(a,b,c)=>{Promise.resolve().then(c.bind(c,82258)),Promise.resolve().then(c.bind(c,6276)),Promise.resolve().then(c.bind(c,86989)),Promise.resolve().then(c.bind(c,15817)),Promise.resolve().then(c.bind(c,14501))},54887:(a,b,c)=>{"use strict";c.d(b,{AnalyticsProvider:()=>e,useAnalyticsContext:()=>f});var d=c(93147);let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call AnalyticsProvider() from the server but AnalyticsProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/dexto/dexto/packages/webui/lib/analytics/provider.tsx","AnalyticsProvider"),f=(0,d.registerClientReference)(function(){throw Error("Attempted to call useAnalyticsContext() from the server but useAnalyticsContext is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/dexto/dexto/packages/webui/lib/analytics/provider.tsx","useAnalyticsContext")},63281:(a,b,c)=>{"use strict";c.d(b,{S:()=>d});let d=(0,c(91647).uy)({baseUrl:"http://localhost:3001"})},64881:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>z,metadata:()=>y});var d,e=c(76603),f=c(4640),g=c.n(f),h=c(54478),i=c.n(h);c(15963);var j=c(45404),k=c(1511),l=c(21217),m=c(29021),n=c(33873),o=c(21820),p=c(55511),q=c(8086);let r=(d="telemetry",n.join((0,o.homedir)(),".dexto",d)),s=n.join(r,"state.json");async function t(){try{let a=await m.promises.readFile(s,"utf8"),b=JSON.parse(a);if(!b.distinctId)throw Error("invalid state");return{distinctId:b.distinctId,createdAt:b.createdAt||new Date().toISOString(),commandRunCounts:b.commandRunCounts??{}}}catch{await m.promises.mkdir(r,{recursive:!0});let a={distinctId:function(){try{let{machineIdSync:a}=(0,q.createRequire)("file:///home/runner/work/dexto/dexto/packages/analytics/dist/state.js")("node-machine-id"),b=a(!0);if("string"==typeof b&&b.length>0)return`DEXTO-${b}`}catch{}let a=o.hostname()||"unknown-host",b=(0,p.createHash)("sha256").update(a).digest("hex");return b?`DEXTO-${b.slice(0,32)}`:`DEXTO-${(0,p.randomUUID)()}`}(),createdAt:new Date().toISOString(),commandRunCounts:{}};return await u(a),a}}async function u(a){await m.promises.mkdir(r,{recursive:!0}),await m.promises.writeFile(s,JSON.stringify(a,null,2),"utf8")}var v=c(54887);c(11531);var w=c(66414);let x={rE:"1.2.5"},y={title:{default:"Dexto Web UI",template:"%s \xb7 Dexto"},description:"Interactive playground for testing MCP tools and talking to AI agents",icons:{icon:[{url:"/logos/dexto/dexto_logo_icon.svg",type:"image/svg+xml"}],shortcut:[{url:"/logos/dexto/dexto_logo_icon.svg",type:"image/svg+xml"}],apple:[{url:"/logos/dexto/dexto_logo_icon.svg",type:"image/svg+xml"}]},openGraph:{title:"Dexto",description:"Interactive playground for testing MCP tools and talking to AI agents",type:"website"},twitter:{card:"summary",title:"Dexto",description:"Interactive playground for testing MCP tools and talking to AI agents"},other:{"color-scheme":"light dark"}};async function z({children:a}){let b=await (0,l.UL)(),c=b.get("theme")?.value,d=process.env.API_PORT,f=!function(){let a=process.env.DEXTO_ANALYTICS_DISABLED;return"string"==typeof a&&/^(1|true|yes)$/i.test(a)}(),h=null;if(f)try{h={distinctId:(await t()).distinctId,posthogKey:process.env.DEXTO_POSTHOG_KEY??"phc_IJHITHjBKOjDyFiVeilfdumcGniXMuLeXeiLQhYvwDW",posthogHost:process.env.DEXTO_POSTHOG_HOST??"https://app.posthog.com",appVersion:x.rE}}catch(a){console.error("Failed to load analytics state:",a),h=null}return(0,e.jsxs)("html",{lang:"en",className:c&&"dark"!==c?"":"dark",children:[(0,e.jsxs)("head",{children:[d&&(0,e.jsx)("script",{dangerouslySetInnerHTML:{__html:`window.__DEXTO_API_PORT__ = ${JSON.stringify(d).replace(/</g,"\\u003c")};`}}),h&&(0,e.jsx)("script",{dangerouslySetInnerHTML:{__html:`window.__DEXTO_ANALYTICS__ = ${JSON.stringify(h).replace(/</g,"\\u003c")};`}})]}),(0,e.jsx)("body",{className:`${g().variable} ${i().variable} antialiased bg-background text-foreground`,children:(0,e.jsx)(w.QueryProvider,{children:(0,e.jsx)(v.AnalyticsProvider,{children:(0,e.jsxs)(j.ChatProvider,{children:[(0,e.jsx)(k.SpeechReset,{}),(0,e.jsx)("div",{className:"flex h-screen w-screen flex-col supports-[height:100svh]:h-[100svh] supports-[height:100dvh]:h-[100dvh]",children:a})]})})})})]})}},66414:(a,b,c)=>{"use strict";c.d(b,{QueryProvider:()=>d});let d=(0,c(93147).registerClientReference)(function(){throw Error("Attempted to call QueryProvider() from the server but QueryProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/dexto/dexto/packages/webui/components/providers/QueryProvider.tsx","QueryProvider")},72700:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,721,23)),Promise.resolve().then(c.t.bind(c,57576,23)),Promise.resolve().then(c.t.bind(c,32774,23)),Promise.resolve().then(c.t.bind(c,89353,23)),Promise.resolve().then(c.t.bind(c,41133,23)),Promise.resolve().then(c.t.bind(c,56917,23)),Promise.resolve().then(c.t.bind(c,21959,23)),Promise.resolve().then(c.t.bind(c,65496,23)),Promise.resolve().then(c.bind(c,24949))},82258:(a,b,c)=>{"use strict";c.d(b,{ChatProvider:()=>r,v:()=>s});var d=c(66025),e=c(26348),f=c(10091),g=c(5393),h=c(82030),i=c(33490),j=c(63281),k=c(41367);async function l(a){let b=await j.S.api.greeting.$get({query:a?{sessionId:a}:{}});return(await b.json()).greeting??null}var m=c(94652),n=c(36476),o=c(70913);async function p(a){let b=await j.S.api.sessions[":sessionId"].history.$get({param:{sessionId:a}});if(!b.ok)throw Error("Failed to fetch session history");return function(a,b){let c=[],d=new Map;for(let e=0;e<a.length;e++){let f=a[e],g={id:`session-${b}-${e}`,role:f.role,content:f.content,createdAt:Date.now()-(a.length-e)*1e3,sessionId:b,tokenUsage:f.tokenUsage,reasoning:f.reasoning,model:f.model,router:f.router,provider:f.provider},h=a=>{let b=[];for(let c of a){if("image"===c.type&&"string"==typeof c.image&&c.image.startsWith("@blob:")){let a=c.image.substring(1);b.push({uri:a,kind:"image",mimeType:c.mimeType??"image/jpeg"})}if("file"===c.type&&"string"==typeof c.data&&c.data.startsWith("@blob:")){let a=c.data.substring(1),d=c.mimeType??"application/octet-stream",e=(0,m.h)(d);b.push({uri:a,kind:e,mimeType:d,...c.filename?{filename:c.filename}:{}})}}return b.length>0?b:void 0};if("assistant"===f.role){f.content&&c.push(g),f.toolCalls&&f.toolCalls.length>0&&f.toolCalls.forEach((f,g)=>{let h={};if(f?.function)try{h=JSON.parse(f.function.arguments||"{}")}catch(a){console.warn(`Failed to parse toolCall arguments for ${f.function?.name||"unknown"}: ${a}`),h={}}let i=f.function?.name||"unknown",j={id:`session-${b}-${e}-tool-${g}`,role:"tool",content:null,createdAt:Date.now()-(a.length-e)*1e3+g,sessionId:b,toolName:i,toolArgs:h,toolResult:void 0,toolResultMeta:void 0,toolResultSuccess:void 0};"string"==typeof f.id&&f.id.length>0&&d.set(f.id,c.length),c.push(j)});continue}if("tool"===f.role){let a="string"==typeof f.toolCallId?f.toolCallId:void 0,b="string"==typeof f.name?f.name:"unknown",i=Array.isArray(f.content)?f.content:"string"==typeof f.content?[{type:"text",text:f.content}]:[],j=h(i),k={content:i,...j?{resources:j}:{},meta:{toolName:b,toolCallId:a??`tool-${e}`,..."boolean"==typeof f.success?{success:f.success}:{}}};if(a&&d.has(a)){let b=d.get(a);c[b]={...c[b],toolResult:k,toolResultMeta:k.meta,toolResultSuccess:"boolean"==typeof f.success?f.success:void 0}}else c.push({...g,role:"tool",content:null,toolName:b,toolArgs:"object"==typeof f.args?f.args:void 0,toolResult:k,toolResultMeta:k.meta,toolResultSuccess:"boolean"==typeof f.success?f.success:void 0});continue}c.push(g)}return c}((await b.json()).history||[],a)}let q=(0,e.createContext)(void 0);function r({children:a}){let b=(0,f.useRouter)(),c=(0,n.st)(),m=(0,g.jE)(),[r,s]=(0,e.useState)(null),[t,u]=(0,e.useState)(!0),[v,w]=(0,e.useState)(!0),[x,y]=(0,e.useState)(!1),[z,A]=(0,e.useState)(!1),B=(0,e.useRef)(null),C=(0,e.useRef)(null),D=(0,e.useRef)(null),[E,F]=(0,e.useState)(new Map),[G,H]=(0,e.useState)(new Set),[I,J]=(0,e.useState)(new Map),K=(0,e.useRef)(new Map),L=(0,e.useCallback)((a,b)=>{F(c=>{let d=new Map(c);return b?d.set(a,b):d.delete(a),d})},[]),M=(0,e.useCallback)((a,b)=>{H(c=>{let d=new Set(c);return b?d.add(a):d.delete(a),d})},[]),N=(0,e.useCallback)((a,b)=>{J(c=>{let d=new Map(c);return d.set(a,b),d})},[]),O=(0,e.useCallback)(a=>{let b=K.current.get(a);if(b)return b;let c=new AbortController;return K.current.set(a,c),c},[]),P=(0,e.useCallback)(a=>{let b=K.current.get(a);b&&(b.abort(),K.current.delete(a))},[]),Q=r&&E.get(r)||null,R=!!r&&G.has(r),S=r&&I.get(r)||"idle",{messages:T,sendMessage:U,reset:V,setMessages:W,cancel:X}=(0,i.Y_)(D,{setSessionError:L,setSessionProcessing:M,setSessionStatus:N,getSessionAbortController:O,abortSession:P}),{data:Y,refetch:Z}=(0,h.I)({queryKey:k.l.llm.current(r),queryFn:async()=>{let a=await j.S.api.llm.current.$get({query:r?{sessionId:r}:{}});if(!a.ok)throw Error("Failed to fetch current LLM config");let b=await a.json(),c=b.config||b;return{provider:c.provider,model:c.model,displayName:c.displayName,router:c.router,baseURL:c.baseURL}},enabled:!0,retry:!1}),$=Y??null,{greeting:_}=function(a){(0,g.jE)();let{data:b=null,isLoading:c,error:d}=(0,h.I)({queryKey:k.l.greeting(a),queryFn:()=>l(a)});return{greeting:b,isLoading:c,error:d?.message??null}}(r),{mutate:aa}=(0,o.n)({mutationFn:async a=>{let b=await j.S.api.sessions[":sessionId"]["generate-title"].$post({param:{sessionId:a}});if(!b.ok)throw Error("Failed to generate title");return(await b.json()).title},onSuccess:(a,b)=>{m.invalidateQueries({queryKey:k.l.sessions.all}),m.invalidateQueries({queryKey:k.l.sessions.detail(b)})}}),ab=(0,e.useCallback)(async()=>{let a=await j.S.api.sessions.$post({json:{}});if(!a.ok)throw Error("Failed to create session");let b=await a.json();if(!b.session?.id)throw Error("Session ID not found in server response");let d=b.session.id;return c.trackSessionCreated({sessionId:d,trigger:"first_message"}),d},[c]),ac=(0,e.useCallback)(async(a,d,e)=>{let f=r,g=!1;if(!f&&t){if(z)return;try{A(!0),f=await ab(),g=!0,C.current=f,D.current=f,U(a,d,e,f,v),b.replace(`/chat/${f}`),setTimeout(()=>{f&&aa(f)},0)}catch(a){console.error("Failed to create session:",a);return}finally{A(!1)}}if(f&&!g&&U(a,d,e,f,v),f){let b=$?.provider||"unknown",g=$?.model||"unknown";c.trackMessageSent({sessionId:f,provider:b,model:g,hasImage:!!d,hasFile:!!e,messageLength:a.length})}else console.error("No session available for sending message")},[U,r,t,z,ab,v,b,c,$,aa]),ad=(0,e.useCallback)(()=>{if(r){let a=T.filter(a=>a.sessionId===r).length;c.trackConversationReset({sessionId:r,messageCount:a}),V(r)}},[V,r,c,T]),ae=(0,e.useCallback)(()=>{r&&L(r,null)},[r,L]),{data:af,refetch:ag}=(0,h.I)({queryKey:k.l.sessions.history(r||""),queryFn:async()=>{if(!r)return[];try{return await p(r)}catch(a){return[]}},enabled:!1,retry:!1}),ah=(0,e.useCallback)(async a=>{try{let b=await m.fetchQuery({queryKey:k.l.sessions.history(a),queryFn:async()=>{try{return await p(a)}catch(a){return[]}},retry:!1});W(c=>c.some(b=>b.sessionId===a)?c:b)}catch(a){console.error("Error loading session history:",a),W([])}},[W,m]),ai=(0,e.useCallback)(async a=>{if(a!==r&&a!==B.current&&!x){y(!0);try{try{c.trackSessionSwitched({fromSessionId:r,toSessionId:a})}catch(a){console.error("Failed to track session switch:",a)}let b=C.current===a;b&&(C.current=null),D.current=a,s(a),u(!1),B.current=a,b||await ah(a)}catch(a){throw console.error("Error switching session:",a),a}finally{y(!1)}}},[r,x,ah,c]),aj=(0,e.useCallback)(()=>{D.current=null,s(null),u(!0),W([])},[W]);return(0,d.jsx)(q.Provider,{value:{messages:T,sendMessage:ac,status:S,reset:ad,currentSessionId:r,switchSession:ai,loadSessionHistory:ah,isWelcomeState:t,returnToWelcome:aj,isStreaming:v,setStreaming:w,currentLLM:$,refreshCurrentLLM:async()=>{await Z()},processing:R,cancel:X,activeError:Q,clearError:ae,greeting:_},children:a})}function s(){let a=(0,e.useContext)(q);if(!a)throw Error("useChatContext must be used within a ChatProvider");return a}},86027:(a,b,c)=>{Promise.resolve().then(c.bind(c,45404)),Promise.resolve().then(c.bind(c,66414)),Promise.resolve().then(c.bind(c,1511)),Promise.resolve().then(c.bind(c,11531)),Promise.resolve().then(c.bind(c,54887))},86989:(a,b,c)=>{"use strict";function d(){return null}c.d(b,{SpeechReset:()=>d}),c(26348)},91647:(a,b,c)=>{"use strict";c.d(b,{G6:()=>h,uy:()=>j});var d=c(38703),e=class extends Error{constructor(a,b){super(`SSE Error: ${a}`),this.status=a,this.body=b,this.name="SSEError"}};async function*f(a,b){var c;if(!a.ok){let b,c=a.headers.get("content-type");try{b=c&&c.includes("application/json")?await a.json():await a.text()}catch(a){b="Unknown error"}throw new e(a.status,b)}let d=null==(c=a.body)?void 0:c.getReader();if(!d)throw Error("Response body is null");let f=new globalThis.TextDecoder,g="",h=null==b?void 0:b.signal,j=!1,k=()=>{j=!0,d.cancel().catch(()=>{})};if(h){if(h.aborted)return void d.cancel().catch(()=>{});h.addEventListener("abort",k)}try{for(;;){if(j||(null==h?void 0:h.aborted))return;let a=g.split("\n\n");if(a.length>1){let b=a.shift();g=a.join("\n\n");let c=i(b);c&&(yield c);continue}let{done:b,value:c}=await d.read();if(b){if(g.trim()){let a=i(g);a&&(yield a)}return}g+=f.decode(c,{stream:!0}).replace(/\r\n/g,"\n")}}finally{h&&h.removeEventListener("abort",k),d.cancel().catch(()=>{})}}async function*g(a,b){let c=await a;yield*f(c,b)}async function*h(a,b){for await(let c of g(a,b))if(c.data)try{let a=JSON.parse(c.data);c.event&&!a.type&&(a.type=c.event),yield a}catch(a){}}function i(a){let b=a.split("\n").map(a=>a.replace(/\r$/,"")),c={},d=!1;for(let a of b)if(!a.startsWith(":"))if(a.startsWith("data: ")){let b=a.slice(6);c.data=c.data?c.data+"\n"+b:b,d=!0}else a.startsWith("event: ")?c.event=a.slice(7):a.startsWith("id: ")?c.id=a.slice(4):a.startsWith("retry: ")&&(c.retry=parseInt(a.slice(7),10));return d||c.event||c.id?c:null}function j(a){let b={};return a.apiKey&&(b.headers={Authorization:`Bearer ${a.apiKey}`}),(0,d.hc)(a.baseUrl,b)}},94652:(a,b,c)=>{"use strict";function d(a){return a?.startsWith("audio/")?"audio":a?.startsWith("video/")?"video":"binary"}function e(a){return a?.startsWith("image/")?"image":a?.startsWith("audio/")?"audio":a?.startsWith("video/")?"video":"binary"}c.d(b,{h:()=>e,t:()=>d})}};
1
+ exports.id=487,exports.ids=[487],exports.modules={1511:(a,b,c)=>{"use strict";c.d(b,{SpeechReset:()=>d});let d=(0,c(93147).registerClientReference)(function(){throw Error("Attempted to call SpeechReset() from the server but SpeechReset is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/dexto/dexto/packages/webui/components/ui/speech-reset.tsx","SpeechReset")},6276:(a,b,c)=>{"use strict";c.d(b,{QueryProvider:()=>h});var d=c(66025),e=c(9292),f=c(5393),g=c(26348);function h({children:a}){let[b]=(0,g.useState)(()=>new e.E({defaultOptions:{queries:{staleTime:6e4,gcTime:3e5,retry:1,refetchOnWindowFocus:!1}}}));return(0,d.jsx)(f.Ht,{client:b,children:a})}},11531:(a,b,c)=>{"use strict";c.d(b,{useAnalytics:()=>d});let d=(0,c(93147).registerClientReference)(function(){throw Error("Attempted to call useAnalytics() from the server but useAnalytics is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/dexto/dexto/packages/webui/lib/analytics/hook.ts","useAnalytics")},14501:(a,b,c)=>{"use strict";c.d(b,{AnalyticsProvider:()=>h,useAnalyticsContext:()=>i});var d=c(66025),e=c(26348),f=c(86941);let g=(0,e.createContext)(void 0);function h({children:a}){let[b,c]=(0,e.useState)(!1),[h,i]=(0,e.useState)(!1);return(0,d.jsx)(g.Provider,{value:{capture:(a,c)=>{if(b&&h)try{f.Ay.capture(a,{app:"dexto-webui",...c})}catch(a){console.error("Failed to capture analytics event:",a)}},enabled:b,isReady:h},children:a})}function i(){let a=(0,e.useContext)(g);if(!a)throw Error("useAnalyticsContext must be used within an AnalyticsProvider");return a}},14556:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,55671,23)),Promise.resolve().then(c.t.bind(c,41974,23)),Promise.resolve().then(c.t.bind(c,66848,23)),Promise.resolve().then(c.t.bind(c,67111,23)),Promise.resolve().then(c.t.bind(c,1199,23)),Promise.resolve().then(c.t.bind(c,59015,23)),Promise.resolve().then(c.t.bind(c,89153,23)),Promise.resolve().then(c.t.bind(c,39406,23)),Promise.resolve().then(c.t.bind(c,7015,23))},15817:(a,b,c)=>{"use strict";c.d(b,{useAnalytics:()=>f});var d=c(26348),e=c(14501);function f(){let{capture:a,enabled:b,isReady:c}=(0,e.useAnalyticsContext)(),f=(0,d.useRef)({}),g=(0,d.useCallback)(c=>{if(b)try{let b=c.sessionId;f.current[b]=(f.current[b]||0)+1;let d={...c,messageCount:f.current[b]};a("dexto_webui_message_sent",d)}catch(a){console.warn("Analytics tracking failed:",a)}},[a,b]),h=(0,d.useCallback)(c=>{if(b)try{a("dexto_webui_session_created",c)}catch(a){console.warn("Analytics tracking failed:",a)}},[a,b]),i=(0,d.useCallback)(c=>{if(b)try{a("dexto_webui_session_switched",c)}catch(a){console.warn("Analytics tracking failed:",a)}},[a,b]),j=(0,d.useCallback)(c=>{if(b)try{f.current[c.sessionId]=0,a("dexto_webui_conversation_reset",c)}catch(a){console.warn("Analytics tracking failed:",a)}},[a,b]),k=(0,d.useCallback)(c=>{if(b)try{a("dexto_webui_agent_switched",c)}catch(a){console.warn("Analytics tracking failed:",a)}},[a,b]),l=(0,d.useCallback)(c=>{if(b)try{a("dexto_webui_tool_called",c)}catch(a){console.warn("Analytics tracking failed:",a)}},[a,b]),m=(0,d.useCallback)(c=>{if(b)try{a("dexto_webui_llm_switched",c)}catch(a){console.warn("Analytics tracking failed:",a)}},[a,b]),n=(0,d.useCallback)(c=>{if(b)try{a("dexto_webui_file_uploaded",c)}catch(a){console.warn("Analytics tracking failed:",a)}},[a,b]),o=(0,d.useCallback)(c=>{if(b)try{a("dexto_webui_image_uploaded",c)}catch(a){console.warn("Analytics tracking failed:",a)}},[a,b]),p=(0,d.useCallback)(c=>{if(b)try{a("dexto_webui_mcp_server_connected",c)}catch(a){console.warn("Analytics tracking failed:",a)}},[a,b]);return{capture:a,enabled:b,isReady:c,trackMessageSent:g,trackSessionCreated:h,trackSessionSwitched:i,trackConversationReset:j,trackAgentSwitched:k,trackToolCalled:l,trackLLMSwitched:m,trackFileUploaded:n,trackImageUploaded:o,trackMCPServerConnected:p}}},15963:()=>{},33490:(a,b,c)=>{"use strict";c.d(b,{EQ:()=>m,KU:()=>h,P2:()=>i,PI:()=>j,Y_:()=>o,j0:()=>k,kz:()=>l});var d=c(26348),e=c(36476),f=c(63281),g=c(91647);function h(a){return"object"==typeof a&&null!==a&&"error"in a}function i(a){return"object"==typeof a&&null!==a&&"content"in a&&Array.isArray(a.content)}function j(a){return"object"==typeof a&&null!==a&&"type"in a&&"text"===a.type}function k(a){return"object"==typeof a&&null!==a&&"type"in a&&"image"===a.type}function l(a){return"object"==typeof a&&null!==a&&"type"in a&&"audio"===a.type}function m(a){return"object"==typeof a&&null!==a&&"type"in a&&"file"===a.type}let n=()=>`msg-${Date.now()}-${Math.random().toString(36).substring(2,9)}`;function o(a,b){let c=(0,e.st)(),h=(0,d.useRef)(c),[i,j]=(0,d.useState)([]),k=(0,d.useRef)(null),l=(0,d.useRef)(!1),m=(0,d.useRef)(new Map),o=(0,d.useCallback)((a,c)=>{b.setSessionError(a,c)},[b]),p=(0,d.useCallback)((a,c)=>{b.setSessionProcessing(a,c)},[b]),q=(0,d.useCallback)((a,c)=>{b.setSessionStatus(a,c)},[b]),r=(0,d.useCallback)(a=>b.getSessionAbortController(a),[b]),s=(0,d.useCallback)(a=>{b.abortSession(a)},[b]),t=(0,d.useCallback)(b=>{if(!b)return!1;let c=a.current;return!!c&&b===c},[a]),u=(0,d.useCallback)(a=>{if(!a.sessionId)return void console.error("Event missing sessionId:",a);if(t(a.sessionId))switch(a.type){case"llm:thinking":p(a.sessionId,!0),q(a.sessionId,"open");break;case"llm:chunk":{let b=a.content||"",c=a.chunkType;j(a=>{if("reasoning"===c){let c=a[a.length-1];if(c&&"assistant"===c.role){let d={...c,reasoning:(c.reasoning||"")+b,createdAt:Date.now()};return[...a.slice(0,-1),d]}return[...a,{id:n(),role:"assistant",content:"",reasoning:b,createdAt:Date.now()}]}{let c=a[a.length-1];if(c&&"assistant"===c.role){let d="string"==typeof c.content?c.content:"",e={...c,content:d+b,createdAt:Date.now()};return[...a.slice(0,-1),e]}return[...a,{id:n(),role:"assistant",content:b,createdAt:Date.now()}]}});break}case"llm:response":{p(a.sessionId,!1);let b=a.content||"",c=a.tokenUsage,d=a.model,e=a.provider,f=a.router;j(a=>{let g=a[a.length-1];if(g&&"assistant"===g.role){let h={...g,content:"string"==typeof b?b:"",tokenUsage:c,...d&&{model:d},...e&&{provider:e},...f&&{router:f},createdAt:Date.now()};return[...a.slice(0,-1),h]}return a});break}case"llm:tool-call":{let{toolName:b,args:c,callId:d}=a;j(a=>{let e=a.length,f=[...a,{id:n(),role:"tool",content:null,toolName:b,toolArgs:c,toolCallId:d,createdAt:Date.now()}];return d&&m.current.set(d,e),f});break}case"llm:tool-result":{let{callId:b,success:c,sanitized:d,toolName:e}=a;e&&h.current.trackToolCalled({toolName:e,success:!1!==c,sessionId:a.sessionId}),j(a=>{let f=-1;if(b&&m.current.has(b)?(f=m.current.get(b),m.current.delete(b)):f=a.findIndex(a=>"tool"===a.role&&void 0===a.toolResult&&a.toolName===e),-1!==f&&f<a.length){let b={...a[f],toolResult:d,toolResultSuccess:c};return[...a.slice(0,f),b,...a.slice(f+1)]}return a});break}case"approval:request":case"approval:response":break;case"llm:error":{if(l.current){l.current=!1;break}let b=(a.error||{}).message||"Unknown error";o(a.sessionId,{id:n(),message:b,timestamp:Date.now(),context:a.context,recoverable:a.recoverable,sessionId:a.sessionId,anchorMessageId:k.current||void 0}),p(a.sessionId,!1),q(a.sessionId,"closed")}}},[t,p,q,o]),v=(0,d.useCallback)(async(a,b,c,d,e=!0)=>{if(!d)return void console.error("Session ID required for sending message");s(d);let h=r(d)||new AbortController;p(d,!0),q(d,"connecting");let i=n();k.current=i,j(e=>[...e,{id:i,role:"user",content:a,createdAt:Date.now(),sessionId:d,imageData:b,fileData:c}]);try{if(e){let e=f.S.api["message-stream"].$post({json:{message:a,sessionId:d,imageData:b,fileData:c}}),i=(0,g.G6)(e,{signal:h.signal});for await(let a of(q(d,"open"),i))u(a);q(d,"closed"),p(d,!1)}else{let e,g=await f.S.api["message-sync"].$post({json:{message:a,sessionId:d,imageData:b,fileData:c}});if(!g.ok){let a=await g.text();throw Error(`Failed to send message: ${g.status} ${g.statusText}. ${a}`)}try{e=await g.json()}catch(b){let a=b instanceof Error?b.message:String(b);throw Error(`Failed to parse response: ${a}`)}j(a=>[...a,{id:n(),role:"assistant",content:e.response||"",createdAt:Date.now(),sessionId:d,...e.tokenUsage&&{tokenUsage:e.tokenUsage},...e.reasoning&&{reasoning:e.reasoning},...e.model&&{model:e.model},...e.provider&&{provider:e.provider},...e.router&&{router:e.router}}]),q(d,"closed"),p(d,!1)}}catch(a){if("AbortError"===a.name)return void console.log("Stream aborted by user");console.error("Stream error:",a),q(d,"closed"),p(d,!1),o(d,{id:n(),message:a.message||"Failed to send message",timestamp:Date.now(),context:"stream",recoverable:!0,sessionId:d,anchorMessageId:i})}},[u,s,r,p,q,o]);return{messages:i,sendMessage:v,reset:(0,d.useCallback)(async a=>{if(a){try{await f.S.api.reset.$post({json:{sessionId:a}})}catch(a){console.error("Failed to reset session",a)}j([]),o(a,null),k.current=null,m.current.clear(),p(a,!1)}},[o,p]),setMessages:j,cancel:(0,d.useCallback)(a=>{a&&(s(a),p(a,!1),q(a,"closed"),m.current.clear(),l.current=!0)},[s,p,q])}}},36476:(a,b,c)=>{"use strict";c.d(b,{st:()=>d.useAnalytics}),c(14501);var d=c(15817)},41367:(a,b,c)=>{"use strict";c.d(b,{l:()=>d});let d={agents:{all:["agents"],path:["agentPath"]},agent:{config:["agent","config"]},llm:{current:a=>["llm","current",a??null],catalog:["llm","catalog"]},sessions:{all:["sessions"],detail:a=>["sessions","detail",a],history:a=>["sessions","history",a]},search:{messages:(a,b,c)=>["search","messages",a,b,c],sessions:a=>["search","sessions",a]},greeting:a=>["greeting",a??"default"],memories:{all:["memories"]},resources:{all:["resources"]},serverRegistry:a=>["serverRegistry",a],prompts:{all:["prompts"]},servers:{all:["servers"],detail:a=>["servers","detail",a],tools:a=>["servers","tools",a]}}},45404:(a,b,c)=>{"use strict";c.d(b,{ChatProvider:()=>e});var d=c(93147);let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call ChatProvider() from the server but ChatProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/dexto/dexto/packages/webui/components/hooks/ChatContext.tsx","ChatProvider");(0,d.registerClientReference)(function(){throw Error("Attempted to call useChatContext() from the server but useChatContext is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/dexto/dexto/packages/webui/components/hooks/ChatContext.tsx","useChatContext")},45699:(a,b,c)=>{Promise.resolve().then(c.bind(c,82258)),Promise.resolve().then(c.bind(c,6276)),Promise.resolve().then(c.bind(c,86989)),Promise.resolve().then(c.bind(c,15817)),Promise.resolve().then(c.bind(c,14501))},54887:(a,b,c)=>{"use strict";c.d(b,{AnalyticsProvider:()=>e,useAnalyticsContext:()=>f});var d=c(93147);let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call AnalyticsProvider() from the server but AnalyticsProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/dexto/dexto/packages/webui/lib/analytics/provider.tsx","AnalyticsProvider"),f=(0,d.registerClientReference)(function(){throw Error("Attempted to call useAnalyticsContext() from the server but useAnalyticsContext is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/dexto/dexto/packages/webui/lib/analytics/provider.tsx","useAnalyticsContext")},63281:(a,b,c)=>{"use strict";c.d(b,{S:()=>d});let d=(0,c(91647).uy)({baseUrl:"http://localhost:3001"})},64881:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>z,metadata:()=>y});var d,e=c(76603),f=c(4640),g=c.n(f),h=c(54478),i=c.n(h);c(15963);var j=c(45404),k=c(1511),l=c(21217),m=c(29021),n=c(33873),o=c(21820),p=c(55511),q=c(8086);let r=(d="telemetry",n.join((0,o.homedir)(),".dexto",d)),s=n.join(r,"state.json");async function t(){try{let a=await m.promises.readFile(s,"utf8"),b=JSON.parse(a);if(!b.distinctId)throw Error("invalid state");return{distinctId:b.distinctId,createdAt:b.createdAt||new Date().toISOString(),commandRunCounts:b.commandRunCounts??{}}}catch{await m.promises.mkdir(r,{recursive:!0});let a={distinctId:function(){try{let{machineIdSync:a}=(0,q.createRequire)("file:///home/runner/work/dexto/dexto/packages/analytics/dist/state.js")("node-machine-id"),b=a(!0);if("string"==typeof b&&b.length>0)return`DEXTO-${b}`}catch{}let a=o.hostname()||"unknown-host",b=(0,p.createHash)("sha256").update(a).digest("hex");return b?`DEXTO-${b.slice(0,32)}`:`DEXTO-${(0,p.randomUUID)()}`}(),createdAt:new Date().toISOString(),commandRunCounts:{}};return await u(a),a}}async function u(a){await m.promises.mkdir(r,{recursive:!0}),await m.promises.writeFile(s,JSON.stringify(a,null,2),"utf8")}var v=c(54887);c(11531);var w=c(66414);let x={rE:"1.2.6"},y={title:{default:"Dexto Web UI",template:"%s \xb7 Dexto"},description:"Interactive playground for testing MCP tools and talking to AI agents",icons:{icon:[{url:"/logos/dexto/dexto_logo_icon.svg",type:"image/svg+xml"}],shortcut:[{url:"/logos/dexto/dexto_logo_icon.svg",type:"image/svg+xml"}],apple:[{url:"/logos/dexto/dexto_logo_icon.svg",type:"image/svg+xml"}]},openGraph:{title:"Dexto",description:"Interactive playground for testing MCP tools and talking to AI agents",type:"website"},twitter:{card:"summary",title:"Dexto",description:"Interactive playground for testing MCP tools and talking to AI agents"},other:{"color-scheme":"light dark"}};async function z({children:a}){let b=await (0,l.UL)(),c=b.get("theme")?.value,d=process.env.API_PORT,f=!function(){let a=process.env.DEXTO_ANALYTICS_DISABLED;return"string"==typeof a&&/^(1|true|yes)$/i.test(a)}(),h=null;if(f)try{h={distinctId:(await t()).distinctId,posthogKey:process.env.DEXTO_POSTHOG_KEY??"phc_IJHITHjBKOjDyFiVeilfdumcGniXMuLeXeiLQhYvwDW",posthogHost:process.env.DEXTO_POSTHOG_HOST??"https://app.posthog.com",appVersion:x.rE}}catch(a){console.error("Failed to load analytics state:",a),h=null}return(0,e.jsxs)("html",{lang:"en",className:c&&"dark"!==c?"":"dark",children:[(0,e.jsxs)("head",{children:[d&&(0,e.jsx)("script",{dangerouslySetInnerHTML:{__html:`window.__DEXTO_API_PORT__ = ${JSON.stringify(d).replace(/</g,"\\u003c")};`}}),h&&(0,e.jsx)("script",{dangerouslySetInnerHTML:{__html:`window.__DEXTO_ANALYTICS__ = ${JSON.stringify(h).replace(/</g,"\\u003c")};`}})]}),(0,e.jsx)("body",{className:`${g().variable} ${i().variable} antialiased bg-background text-foreground`,children:(0,e.jsx)(w.QueryProvider,{children:(0,e.jsx)(v.AnalyticsProvider,{children:(0,e.jsxs)(j.ChatProvider,{children:[(0,e.jsx)(k.SpeechReset,{}),(0,e.jsx)("div",{className:"flex h-screen w-screen flex-col supports-[height:100svh]:h-[100svh] supports-[height:100dvh]:h-[100dvh]",children:a})]})})})})]})}},66414:(a,b,c)=>{"use strict";c.d(b,{QueryProvider:()=>d});let d=(0,c(93147).registerClientReference)(function(){throw Error("Attempted to call QueryProvider() from the server but QueryProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/dexto/dexto/packages/webui/components/providers/QueryProvider.tsx","QueryProvider")},72700:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,721,23)),Promise.resolve().then(c.t.bind(c,57576,23)),Promise.resolve().then(c.t.bind(c,32774,23)),Promise.resolve().then(c.t.bind(c,89353,23)),Promise.resolve().then(c.t.bind(c,41133,23)),Promise.resolve().then(c.t.bind(c,56917,23)),Promise.resolve().then(c.t.bind(c,21959,23)),Promise.resolve().then(c.t.bind(c,65496,23)),Promise.resolve().then(c.bind(c,24949))},82258:(a,b,c)=>{"use strict";c.d(b,{ChatProvider:()=>r,v:()=>s});var d=c(66025),e=c(26348),f=c(10091),g=c(5393),h=c(82030),i=c(33490),j=c(63281),k=c(41367);async function l(a){let b=await j.S.api.greeting.$get({query:a?{sessionId:a}:{}});return(await b.json()).greeting??null}var m=c(94652),n=c(36476),o=c(70913);async function p(a){let b=await j.S.api.sessions[":sessionId"].history.$get({param:{sessionId:a}});if(!b.ok)throw Error("Failed to fetch session history");return function(a,b){let c=[],d=new Map;for(let e=0;e<a.length;e++){let f=a[e],g={id:`session-${b}-${e}`,role:f.role,content:f.content,createdAt:Date.now()-(a.length-e)*1e3,sessionId:b,tokenUsage:f.tokenUsage,reasoning:f.reasoning,model:f.model,router:f.router,provider:f.provider},h=a=>{let b=[];for(let c of a){if("image"===c.type&&"string"==typeof c.image&&c.image.startsWith("@blob:")){let a=c.image.substring(1);b.push({uri:a,kind:"image",mimeType:c.mimeType??"image/jpeg"})}if("file"===c.type&&"string"==typeof c.data&&c.data.startsWith("@blob:")){let a=c.data.substring(1),d=c.mimeType??"application/octet-stream",e=(0,m.h)(d);b.push({uri:a,kind:e,mimeType:d,...c.filename?{filename:c.filename}:{}})}}return b.length>0?b:void 0};if("assistant"===f.role){f.content&&c.push(g),f.toolCalls&&f.toolCalls.length>0&&f.toolCalls.forEach((f,g)=>{let h={};if(f?.function)try{h=JSON.parse(f.function.arguments||"{}")}catch(a){console.warn(`Failed to parse toolCall arguments for ${f.function?.name||"unknown"}: ${a}`),h={}}let i=f.function?.name||"unknown",j={id:`session-${b}-${e}-tool-${g}`,role:"tool",content:null,createdAt:Date.now()-(a.length-e)*1e3+g,sessionId:b,toolName:i,toolArgs:h,toolResult:void 0,toolResultMeta:void 0,toolResultSuccess:void 0};"string"==typeof f.id&&f.id.length>0&&d.set(f.id,c.length),c.push(j)});continue}if("tool"===f.role){let a="string"==typeof f.toolCallId?f.toolCallId:void 0,b="string"==typeof f.name?f.name:"unknown",i=Array.isArray(f.content)?f.content:"string"==typeof f.content?[{type:"text",text:f.content}]:[],j=h(i),k={content:i,...j?{resources:j}:{},meta:{toolName:b,toolCallId:a??`tool-${e}`,..."boolean"==typeof f.success?{success:f.success}:{}}};if(a&&d.has(a)){let b=d.get(a);c[b]={...c[b],toolResult:k,toolResultMeta:k.meta,toolResultSuccess:"boolean"==typeof f.success?f.success:void 0}}else c.push({...g,role:"tool",content:null,toolName:b,toolArgs:"object"==typeof f.args?f.args:void 0,toolResult:k,toolResultMeta:k.meta,toolResultSuccess:"boolean"==typeof f.success?f.success:void 0});continue}c.push(g)}return c}((await b.json()).history||[],a)}let q=(0,e.createContext)(void 0);function r({children:a}){let b=(0,f.useRouter)(),c=(0,n.st)(),m=(0,g.jE)(),[r,s]=(0,e.useState)(null),[t,u]=(0,e.useState)(!0),[v,w]=(0,e.useState)(!0),[x,y]=(0,e.useState)(!1),[z,A]=(0,e.useState)(!1),B=(0,e.useRef)(null),C=(0,e.useRef)(null),D=(0,e.useRef)(null),[E,F]=(0,e.useState)(new Map),[G,H]=(0,e.useState)(new Set),[I,J]=(0,e.useState)(new Map),K=(0,e.useRef)(new Map),L=(0,e.useCallback)((a,b)=>{F(c=>{let d=new Map(c);return b?d.set(a,b):d.delete(a),d})},[]),M=(0,e.useCallback)((a,b)=>{H(c=>{let d=new Set(c);return b?d.add(a):d.delete(a),d})},[]),N=(0,e.useCallback)((a,b)=>{J(c=>{let d=new Map(c);return d.set(a,b),d})},[]),O=(0,e.useCallback)(a=>{let b=K.current.get(a);if(b)return b;let c=new AbortController;return K.current.set(a,c),c},[]),P=(0,e.useCallback)(a=>{let b=K.current.get(a);b&&(b.abort(),K.current.delete(a))},[]),Q=r&&E.get(r)||null,R=!!r&&G.has(r),S=r&&I.get(r)||"idle",{messages:T,sendMessage:U,reset:V,setMessages:W,cancel:X}=(0,i.Y_)(D,{setSessionError:L,setSessionProcessing:M,setSessionStatus:N,getSessionAbortController:O,abortSession:P}),{data:Y,refetch:Z}=(0,h.I)({queryKey:k.l.llm.current(r),queryFn:async()=>{let a=await j.S.api.llm.current.$get({query:r?{sessionId:r}:{}});if(!a.ok)throw Error("Failed to fetch current LLM config");let b=await a.json(),c=b.config||b;return{provider:c.provider,model:c.model,displayName:c.displayName,router:c.router,baseURL:c.baseURL}},enabled:!0,retry:!1}),$=Y??null,{greeting:_}=function(a){(0,g.jE)();let{data:b=null,isLoading:c,error:d}=(0,h.I)({queryKey:k.l.greeting(a),queryFn:()=>l(a)});return{greeting:b,isLoading:c,error:d?.message??null}}(r),{mutate:aa}=(0,o.n)({mutationFn:async a=>{let b=await j.S.api.sessions[":sessionId"]["generate-title"].$post({param:{sessionId:a}});if(!b.ok)throw Error("Failed to generate title");return(await b.json()).title},onSuccess:(a,b)=>{m.invalidateQueries({queryKey:k.l.sessions.all}),m.invalidateQueries({queryKey:k.l.sessions.detail(b)})}}),ab=(0,e.useCallback)(async()=>{let a=await j.S.api.sessions.$post({json:{}});if(!a.ok)throw Error("Failed to create session");let b=await a.json();if(!b.session?.id)throw Error("Session ID not found in server response");let d=b.session.id;return c.trackSessionCreated({sessionId:d,trigger:"first_message"}),d},[c]),ac=(0,e.useCallback)(async(a,d,e)=>{let f=r,g=!1;if(!f&&t){if(z)return;try{A(!0),f=await ab(),g=!0,C.current=f,D.current=f,U(a,d,e,f,v),b.replace(`/chat/${f}`),setTimeout(()=>{f&&aa(f)},0)}catch(a){console.error("Failed to create session:",a);return}finally{A(!1)}}if(f&&!g&&U(a,d,e,f,v),f){let b=$?.provider||"unknown",g=$?.model||"unknown";c.trackMessageSent({sessionId:f,provider:b,model:g,hasImage:!!d,hasFile:!!e,messageLength:a.length})}else console.error("No session available for sending message")},[U,r,t,z,ab,v,b,c,$,aa]),ad=(0,e.useCallback)(()=>{if(r){let a=T.filter(a=>a.sessionId===r).length;c.trackConversationReset({sessionId:r,messageCount:a}),V(r)}},[V,r,c,T]),ae=(0,e.useCallback)(()=>{r&&L(r,null)},[r,L]),{data:af,refetch:ag}=(0,h.I)({queryKey:k.l.sessions.history(r||""),queryFn:async()=>{if(!r)return[];try{return await p(r)}catch(a){return[]}},enabled:!1,retry:!1}),ah=(0,e.useCallback)(async a=>{try{let b=await m.fetchQuery({queryKey:k.l.sessions.history(a),queryFn:async()=>{try{return await p(a)}catch(a){return[]}},retry:!1});W(c=>c.some(b=>b.sessionId===a)?c:b)}catch(a){console.error("Error loading session history:",a),W([])}},[W,m]),ai=(0,e.useCallback)(async a=>{if(a!==r&&a!==B.current&&!x){y(!0);try{try{c.trackSessionSwitched({fromSessionId:r,toSessionId:a})}catch(a){console.error("Failed to track session switch:",a)}let b=C.current===a;b&&(C.current=null),D.current=a,s(a),u(!1),B.current=a,b||await ah(a)}catch(a){throw console.error("Error switching session:",a),a}finally{y(!1)}}},[r,x,ah,c]),aj=(0,e.useCallback)(()=>{D.current=null,s(null),u(!0),W([])},[W]);return(0,d.jsx)(q.Provider,{value:{messages:T,sendMessage:ac,status:S,reset:ad,currentSessionId:r,switchSession:ai,loadSessionHistory:ah,isWelcomeState:t,returnToWelcome:aj,isStreaming:v,setStreaming:w,currentLLM:$,refreshCurrentLLM:async()=>{await Z()},processing:R,cancel:X,activeError:Q,clearError:ae,greeting:_},children:a})}function s(){let a=(0,e.useContext)(q);if(!a)throw Error("useChatContext must be used within a ChatProvider");return a}},86027:(a,b,c)=>{Promise.resolve().then(c.bind(c,45404)),Promise.resolve().then(c.bind(c,66414)),Promise.resolve().then(c.bind(c,1511)),Promise.resolve().then(c.bind(c,11531)),Promise.resolve().then(c.bind(c,54887))},86989:(a,b,c)=>{"use strict";function d(){return null}c.d(b,{SpeechReset:()=>d}),c(26348)},91647:(a,b,c)=>{"use strict";c.d(b,{G6:()=>h,uy:()=>j});var d=c(38703),e=class extends Error{constructor(a,b){super(`SSE Error: ${a}`),this.status=a,this.body=b,this.name="SSEError"}};async function*f(a,b){var c;if(!a.ok){let b,c=a.headers.get("content-type");try{b=c&&c.includes("application/json")?await a.json():await a.text()}catch(a){b="Unknown error"}throw new e(a.status,b)}let d=null==(c=a.body)?void 0:c.getReader();if(!d)throw Error("Response body is null");let f=new globalThis.TextDecoder,g="",h=null==b?void 0:b.signal,j=!1,k=()=>{j=!0,d.cancel().catch(()=>{})};if(h){if(h.aborted)return void d.cancel().catch(()=>{});h.addEventListener("abort",k)}try{for(;;){if(j||(null==h?void 0:h.aborted))return;let a=g.split("\n\n");if(a.length>1){let b=a.shift();g=a.join("\n\n");let c=i(b);c&&(yield c);continue}let{done:b,value:c}=await d.read();if(b){if(g.trim()){let a=i(g);a&&(yield a)}return}g+=f.decode(c,{stream:!0}).replace(/\r\n/g,"\n")}}finally{h&&h.removeEventListener("abort",k),d.cancel().catch(()=>{})}}async function*g(a,b){let c=await a;yield*f(c,b)}async function*h(a,b){for await(let c of g(a,b))if(c.data)try{let a=JSON.parse(c.data);c.event&&!a.type&&(a.type=c.event),yield a}catch(a){}}function i(a){let b=a.split("\n").map(a=>a.replace(/\r$/,"")),c={},d=!1;for(let a of b)if(!a.startsWith(":"))if(a.startsWith("data: ")){let b=a.slice(6);c.data=c.data?c.data+"\n"+b:b,d=!0}else a.startsWith("event: ")?c.event=a.slice(7):a.startsWith("id: ")?c.id=a.slice(4):a.startsWith("retry: ")&&(c.retry=parseInt(a.slice(7),10));return d||c.event||c.id?c:null}function j(a){let b={};return a.apiKey&&(b.headers={Authorization:`Bearer ${a.apiKey}`}),(0,d.hc)(a.baseUrl,b)}},94652:(a,b,c)=>{"use strict";function d(a){return a?.startsWith("audio/")?"audio":a?.startsWith("video/")?"video":"binary"}function e(a){return a?.startsWith("image/")?"image":a?.startsWith("audio/")?"audio":a?.startsWith("video/")?"video":"binary"}c.d(b,{h:()=>e,t:()=>d})}};
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">500: Internal Server Error</title><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-cba9490055376dc0.js" defer=""></script><script src="/_next/static/chunks/framework-9fe375a1387fa963.js" defer=""></script><script src="/_next/static/chunks/main-3db2eb2db2e6025d.js" defer=""></script><script src="/_next/static/chunks/pages/_app-b329134d331b89de.js" defer=""></script><script src="/_next/static/chunks/pages/_error-b154dba467f5292a.js" defer=""></script><script src="/_next/static/EvtxRtNp0iL3eeD0UnMCl/_buildManifest.js" defer=""></script><script src="/_next/static/EvtxRtNp0iL3eeD0UnMCl/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"EvtxRtNp0iL3eeD0UnMCl","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">500: Internal Server Error</title><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-cba9490055376dc0.js" defer=""></script><script src="/_next/static/chunks/framework-9fe375a1387fa963.js" defer=""></script><script src="/_next/static/chunks/main-3db2eb2db2e6025d.js" defer=""></script><script src="/_next/static/chunks/pages/_app-b329134d331b89de.js" defer=""></script><script src="/_next/static/chunks/pages/_error-b154dba467f5292a.js" defer=""></script><script src="/_next/static/I8HCRtl1KN0zLK8CwW1y3/_buildManifest.js" defer=""></script><script src="/_next/static/I8HCRtl1KN0zLK8CwW1y3/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"I8HCRtl1KN0zLK8CwW1y3","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- {"node":{},"edge":{},"encryptionKey":"756mKpCcbYaVz2ykcwKtp9bCnjlrsJuoKQXj+r6zeDA="}
1
+ {"node":{},"edge":{},"encryptionKey":"DZQrigv6tHSZN7ym2C7BDBdjYKergg+xiALAa32eZIE="}