@mangostudio/cli-linux-arm64 0.1.0-canary.8b37b45 → 0.1.0-canary.8e2a1b2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/mangostudio +0 -0
- package/package.json +1 -1
- package/public/assets/MarkdownContentRenderer-BKdTbFES.js +4 -0
- package/public/assets/{index-BxhCfnFE.js → index-B0uGJIBj.js} +2 -2
- package/public/assets/{shiki-C6IiS2Nm.js → shiki-BGRc0S8Z.js} +1 -1
- package/public/index.html +1 -1
- package/public/assets/MarkdownContentRenderer-D5X8pP9B.js +0 -4
package/mangostudio
CHANGED
|
Binary file
|
package/package.json
CHANGED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/shiki-BGRc0S8Z.js","assets/index-B0uGJIBj.js","assets/rolldown-runtime-BYbx6iT9.js","assets/vendor-k1jsSmjo.js","assets/ui-D0PAWSFZ.js","assets/vendor-deps-BL3yT3_Z.js","assets/index-V3SA6jnj.css","assets/syntax-core-BoMshe5A.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{a as e}from"./rolldown-runtime-BYbx6iT9.js";import{i as t,r as n}from"./ui-D0PAWSFZ.js";import{i as r,n as i,r as a}from"./index-B0uGJIBj.js";import{n as o,t as s}from"./markdown-parser-B0W8Yv4o.js";var c=e(t(),1),l=n(),u=`<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg>`,d=`<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>`;function f({content:e,className:t,copyCodeLabel:n,codeCopiedLabel:i}){let{t:o}=r(),s=(0,c.useRef)(null),{resolvedCodeTheme:u}=a(),[d,f]=(0,c.useState)(null),[_,v]=(0,c.useState)(0),y=n??o.chat.copyCode,b=i??o.chat.codeCopied,x=(0,c.useMemo)(()=>k(e).join(`
|
|
3
|
+
`),[e]);p((0,c.useMemo)(()=>x?x.split(`
|
|
4
|
+
`):[],[x]),f,v),m(s,y,b);let S=h(e,(0,c.useMemo)(()=>g(u,y,d),[u,y,d,_]));return(0,l.jsx)(`div`,{ref:s,className:`markdown-content ${t??``}`,dangerouslySetInnerHTML:{__html:S}})}function p(e,t,n){(0,c.useEffect)(()=>{if(e.length===0)return;let r=!1;return A(e).then(e=>{r||(t(e),n(e=>e+1))}),()=>{r=!0}},[e,t,n])}function m(e,t,n){(0,c.useEffect)(()=>{let r=e.current;if(!r)return;let i=new Set,a=j(i,t,n);return r.addEventListener(`click`,a),()=>{r.removeEventListener(`click`,a);for(let e of i)clearTimeout(e)}},[e,t,n])}function h(e,t){return(0,c.useMemo)(()=>D(t,e),[e,t])}function g(e,t,n){return new s({gfm:!0,breaks:!0,renderer:_(e,t,n)})}function _(e,t,n){let r=new o;return r.link=v,r.image=y,r.html=e=>z(`text`in e?e.text:``),r.code=r=>w(r.text,r.lang,e,t,n),r}function v({href:e,title:t,tokens:n}){let r=n?.map(e=>`text`in e?e.text:e.raw).join(``)??``,i=C(e),a=t?` title="${z(t)}"`:``;return`<a href="${z(i)}" target="_blank" rel="noopener noreferrer"${a}>${r}</a>`}function y({href:e,title:t,text:n}){let r=C(e),i=t?` title="${z(t)}"`:``,a=n||r;return`<a href="${z(r)}" target="_blank" rel="noopener noreferrer" class="markdown-image-link"${i}>${z(a)}</a>`}var b=new Set([`http:`,`https:`,`mailto:`]),x=`#`,S=`https://markdown.invalid/`;function C(e){if(!e)return x;let t;try{t=new URL(e,S).protocol}catch{return x}return b.has(t)?e:x}function w(e,t,n,r,i){let a=t??``,o=a?i?.highlightCode(e,a,n):null;return o?T(o,a,r):E(e,a,r)}function T(e,t,n){return e.replace(`<pre `,`<pre data-lang="${z(t)}" `).replace(`</pre>`,`${R(n)}</pre>`)}function E(e,t,n){let r=t?` class="language-${z(t)}"`:``;return`<pre${t?` data-lang="${z(t)}"`:``}><code${r}>${z(e)}</code>${R(n)}</pre>`}function D(e,t){return t?e.parse(t,{async:!1}):``}var O=new s({gfm:!0,breaks:!0});function k(e){if(!e)return[];let t=new Set;return O.walkTokens(O.lexer(e),e=>{e.type===`code`&&`lang`in e&&e.lang&&t.add(e.lang)}),[...t].sort()}async function A(e){let t=await i(()=>import(`./shiki-BGRc0S8Z.js`),__vite__mapDeps([0,1,2,3,4,5,6,7]));return await t.preloadCodeLanguages(e),t}function j(e,t,n){return r=>{M(r,e,t,n)}}async function M(e,t,n,r){let i=e.target.closest(`.copy-code-btn`);if(!i)return;let a=N(i);a!==null&&await P(i,a,t,n,r)}function N(e){let t=e.closest(`pre`);return t?t.querySelector(`code`)?.textContent??t.textContent??``:null}async function P(e,t,n,r,i){try{await navigator.clipboard.writeText(t),F(e,n,r,i)}catch{}}function F(e,t,n,r){e.innerHTML=d,e.setAttribute(`aria-label`,r),e.classList.add(`copy-code-btn--copied`),I(e,t,n)}function I(e,t,n){let r=setTimeout(()=>{t.delete(r),L(e,n)},2e3);t.add(r)}function L(e,t){e.innerHTML=u,e.setAttribute(`aria-label`,t),e.classList.remove(`copy-code-btn--copied`)}function R(e){return`<button class="copy-code-btn" type="button" aria-label="${z(e)}">${u}</button>`}function z(e){return e.replaceAll(`&`,`&`).replaceAll(`<`,`<`).replaceAll(`>`,`>`).replaceAll(`"`,`"`).replaceAll(`'`,`'`)}export{f as MarkdownContentRenderer};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/MarkdownContentRenderer-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/MarkdownContentRenderer-BKdTbFES.js","assets/rolldown-runtime-BYbx6iT9.js","assets/ui-D0PAWSFZ.js","assets/markdown-parser-B0W8Yv4o.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
import{a as e}from"./rolldown-runtime-BYbx6iT9.js";import{i as t,n,r,t as i}from"./ui-D0PAWSFZ.js";import{$ as a,A as o,At as s,B as c,C as l,D as u,Dt as d,E as f,Et as p,F as m,Ft as h,G as g,H as _,I as v,It as y,J as b,K as x,L as S,Lt as C,M as w,Mt as T,N as ee,Nt as E,O as D,Ot as O,P as k,Pt as A,Q as te,R as ne,Rt as re,S as ie,T as ae,U as oe,V as se,W as ce,X as le,Y as ue,Z as de,_ as fe,a as pe,at as j,b as me,c as he,ct as M,d as ge,et as _e,f as ve,g as ye,h as be,i as xe,it as Se,j as Ce,jt as we,k as Te,kt as Ee,l as De,lt as Oe,m as ke,n as Ae,nt as je,o as Me,ot as Ne,p as Pe,q as Fe,r as Ie,rt as Le,s as Re,st as N,t as ze,tt as Be,u as P,ut as F,v as Ve,w as He,x as Ue,y as We,z as Ge}from"./vendor-k1jsSmjo.js";import{a as Ke,i as qe,n as I,o as Je,r as Ye,t as Xe}from"./vendor-deps-BL3yT3_Z.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var L=e(t(),1),Ze=d();function Qe(){return typeof window<`u`&&window.location?.origin?window.location.origin:`http://localhost:3001`}var $e=p({baseURL:Qe(),basePath:`/api/auth`}),et=null;function tt(e){et=e}function nt(){et?.()}var rt=new Je({defaultOptions:{queries:{retry:1,refetchOnWindowFocus:!1,refetchOnReconnect:!0,staleTime:1e3*30}}}),R=r(),it=(0,L.createContext)(null);function at({children:e}){let[t,n]=(0,L.useState)([]),r=(0,L.useCallback)((e,t=`info`)=>{let r=crypto.randomUUID();n(n=>[...n,{id:r,message:e,type:t}]),setTimeout(()=>{n(e=>e.filter(e=>e.id!==r))},4e3)},[]),i=(0,L.useCallback)(e=>{n(t=>t.filter(t=>t.id!==e))},[]),a={success:`border-success/30 text-success`,error:`border-error/30 text-error`,info:`border-outline-variant/30 text-on-surface`};return(0,R.jsxs)(it,{value:{toast:r},children:[e,(0,R.jsx)(`div`,{className:`fixed bottom-4 right-4 z-50 flex flex-col gap-2 pointer-events-none`,children:t.map(e=>(0,R.jsxs)(`div`,{className:`glass-panel pointer-events-auto flex items-center gap-3 px-4 py-3 rounded-xl border text-sm max-w-sm ${a[e.type]}`,children:[(0,R.jsx)(`span`,{className:`flex-1`,children:e.message}),(0,R.jsx)(`button`,{type:`button`,onClick:()=>i(e.id),className:`shrink-0 opacity-50 hover:opacity-100 transition-opacity cursor-pointer`,children:(0,R.jsx)(Ie,{size:14})})]},e.id))})]})}function ot(){let e=(0,L.use)(it);if(!e)throw Error(`useToast deve ser usado dentro de ToastProvider`);return e}var z={auth:{loginTitle:`Mango Studio`,signupTitle:`Create Account`,emailLabel:`Email`,emailPlaceholder:`you@email.com`,passwordLabel:`Password`,passwordPlaceholder:`••••••••`,signupPasswordLabel:`Password (8 characters minimum)`,nameLabel:`Name`,namePlaceholder:`Your name`,loginButton:`Sign In`,loginLoading:`Signing in...`,signupButton:`Create Account`,signupLoading:`Creating...`,loginLink:`Sign in`,signupLink:`Create account`,noAccount:`Don't have an account?`,hasAccount:`Already have an account?`,loginError:`Login failed`,signupError:`Account creation failed`,logoutButton:`Sign Out`,logoutLoading:`Signing out...`,logoutError:`Logout failed. Please try again.`},chat:{newChat:`New Chat`,empty:`Start a conversation`,deleted:`Chat deleted`,editTitle:`Edit title`,deleteTitle:`Delete chat`,sectionLabel:`Chats`,stopGenerating:`Stop`,streaming:`Generating...`,input:{modeChat:`Chat`,modeAgent:`Agent`,modeImage:`Create Image`,send:`Send`,generate:`Generate`,stop:`Stop`,placeholder:`Ask the AI model anything...`,imagePlaceholder:`Describe your image...`,addReferenceImage:`Add reference image`,createImages:`Create images`,createImagesHint:`Hint to the model to use the image generation tool`,selectAgent:`Select agent`,agentsLoading:`Loading agents...`},feed:{emptyTitle:`Start a conversation or create an image`,emptySubtitle:`Switch to Create Image mode to generate art`,generatingImage:`Generating image...`,statusGenerating:`Generating`,statusThinking:`Thinking`,statusGenerated:`Generated`,statusReplied:`Replied`,modelFallback:`AI model`,modelStatus:`{status} with: {model}`,download:`Download`,saveToGallery:`Save to Gallery`,regenerate:`Regenerate`,imageUnavailable:`Image no longer available`,imageUnavailableHint:`The image was deleted, moved, or is not accessible yet.`,generatedImageAlt:`Generated image`,imageGenerationFailed:`Image generation failed`,styleParams:`Style Parameters`,thoughtFor:`Thought for {time}`,respondedIn:`Responded in {time}`,noResponse:`No response`,neuralDiffusionPath:`Using Neural Diffusion Path.`,createImageBadge:`Create Image`,subagentTrace:`Subagent trace`,subagentPendingName:`Subagent`,subagentStatusCompleted:`Completed`,subagentStatusFailed:`Failed`,subagentStatusAborted:`Aborted`,subagentStatusTimeout:`Timed out`,subagentTools:`{count} tools`,subagentNoTools:`No tools`,subagentLastMessage:`Last message`,subagentMessages:`Messages`,subagentToolCalls:`Tool calls`,subagentLifecycle:`Lifecycle`,subagentLifecycleDelegationStarted:`Delegation started`,subagentLifecycleDelegationCompleted:`Delegation completed`,subagentLifecycleDelegationFailed:`Delegation failed`,subagentLifecycleAttempt:`Attempt {attempt}`,subagentLifecycleRecovered:`Recovered response`,subagentLifecycleTimeout:`Timed out`,subagentLifecycleFallback:`Fallback response created`},context:{label:`Context`,tokens:`~{used} / {limit} tokens`,modeStateful:`Stateful`,modeReplay:`Replay`,modeCompacted:`Compacted`,modeDegraded:`Degraded`,warning:`This conversation is approaching the model context limit.`,danger:`MangoStudio may need to compact or leave stateful mode.`,critical:`This conversation can no longer remain stateful on the current provider.`,keepHistory:`Original messages stay in chat history by default.`,compactAction:`Compact and continue`,newChatAction:`Start summarized chat`,continueAction:`Continue anyway`,compactPending:`Compacting...`,newChatPending:`Starting chat...`,compactedSuccess:`Chat compacted`,summarizedChatSuccess:`Summarized chat started`,compactFailed:`Failed to compact chat`,summarizedChatFailed:`Failed to start summarized chat`},fallback:{toReplay:`Stateful continuation is no longer available. Continuing with transcript replay.`,generic:`Conversation mode changed from {from} to {to}.`},continuation:{title:{providerChanged:`{fromProvider} {fromMode} state cannot be reused by {provider}. Replayed transcript and started {provider} {toMode} continuation.`,modelChanged:`Model changed to {model}. Replayed transcript on {provider} {toMode}.`,systemPromptChanged:`System prompt changed. Replayed transcript on {provider} {toMode}.`,toolsetChanged:`Toolset changed. Replayed transcript on {provider} {toMode}.`,agentChanged:`Agent changed. Replayed transcript on {provider} {toMode}.`,agentRuntimeChanged:`Agent settings changed. Replayed transcript on {provider} {toMode}.`,cursorExpired:`{provider} {fromMode} cursor expired. Falling back to transcript replay.`,cursorInvalid:`{provider} {fromMode} cursor was invalidated. Falling back to transcript replay.`,toolResultCursorLoss:`{provider} {fromMode} cursor was lost during tool execution. Response may be incomplete.`,envelopeMalformed:`Stored continuation state was unreadable. Restarting with transcript replay.`},recovered:`(recovered)`,notRecovered:`(not recovered)`},cursorLost:`Cursor lost — fallback to {detail}`,toolLoopExhausted:`Tool loop limit reached`,genericFailure:`Generation failed`,copyCode:`Copy code`,codeCopied:`Copied!`,copyMessage:`Copy message`,messageCopied:`Message copied!`,scrollToBottom:`Scroll to bottom`,emptyGreeting:`Hello, {name}!`,emptySubtitle:`How can I help you today?`,suggestion1:`Explain a complex concept simply`,suggestion2:`Write a Python script to...`,suggestion3:`Help me debug a problem`,suggestion4:`Create an image`,systemEvents:{chatCompacted:`Context compacted into a summary`,summaryHandoff:`This chat started from a summarized handoff`},titleGenerationFailed:`Failed to generate chat title`},studio:{title:`Studio`,empty:`Image creation workspace — coming soon.`},gallery:{title:`Gallery`,empty:`Your creations will appear here.`,download:`Download Full Image`,view:`View`},settings:{title:`Settings`,tabs:{general:`General`,connectors:`Connectors`,providers:`Providers`,appearance:`Appearance`,context:`Context`,agents:`Agents`,prompts:`Prompts`,tools:`Tools`,metrics:`Metrics`,logs:`Logs`},context:{title:`Context`,description:`Control when MangoStudio warns, compacts, or starts a summarized handoff.`,keepHistory:`Compaction keeps the original chat transcript unless you clean it up later.`,behaviorLabel:`Compaction behavior`,behaviorDescription:`Choose what happens when a chat reaches your warning threshold.`,behaviorOptions:{ask:`Ask every time`,autoCompact:`Auto compact current chat`,newChat:`Continue in summarized chat`,off:`Turn prompts off`},providerCompactionLabel:`Allow provider-side compaction`,providerCompactionDescription:`When supported, let the provider compact cursor-based state near your warning threshold.`,warningThresholdLabel:`Warning threshold`,warningThresholdDescription:`Show compaction choices when context usage reaches this value.`,dangerThresholdLabel:`Danger threshold`,dangerThresholdDescription:`Escalate the warning tone before the hard stop threshold.`,hardStopThresholdLabel:`Hard stop threshold`,hardStopThresholdDescription:`Treat context pressure as critical at or above this value.`,summaryModelLabel:`Preferred summary model`,summaryModelDescription:`Use the current chat model or force a specific text model for summaries.`,summaryModelCurrent:`Use current chat model`,thresholdHint:`{value}% of context`},prompts:{defaultPromptsLabel:`Default Prompts`,ruleFilesLabel:`Rule Files`,customRulesLabel:`Custom Rules`,customRulesDescription:`Add paths to custom .md files to be included in generation requests.`,textSystemPromptLabel:`Default Text System Prompt`,textSystemPromptPlaceholder:`e.g. You are a helpful creative partner. Be concise and insightful...`,imageSystemPromptLabel:`Default Image System Prompt`,imageSystemPromptPlaceholder:`e.g. Always generate images in a cinematic style with dramatic lighting...`,agentsMdLabel:`AGENTS.md`,agentsMdDescription:`Repository rules defined in the AGENTS.md file.`,claudeMdLabel:`CLAUDE.md`,claudeMdDescription:`Global instructions defined in the CLAUDE.md file.`,enabledLabel:`Enabled`,injectionRoleLabel:`Injection Role`,injectionRoleSystem:`Send as System Prompt`,injectionRoleUser:`Send as User Prompt`,frequencyLabel:`Frequency`,frequencyFirstTurn:`Send only in first prompt`,frequencyFirstTurnHint:`Recommended`,frequencyEveryTurn:`Send every time`,addRule:`Add Rule`,removeRule:`Remove`,rulePathLabel:`Path`,rulePathPlaceholder:`e.g. ~/my-projects/rules.md`},agents:{title:`Agents`,description:`Configure built-in and Markdown agents for focused workflows.`,create:`Create Agent`,createTitle:`New Agent`,newAgentName:`New Agent`,newAgentDescription:`Describe when this agent should be used.`,builtIn:`Built-in`,user:`User`,name:`Name`,slug:`File Slug`,agentDescription:`Description`,role:`Role`,roles:{primary:`Primary`,subagent:`Subagent`,both:`Both`},systemPrompt:`System Prompt`,model:`Model Override`,modelDefaultOption:`Use the agent default model`,thinking:`Enable Thinking`,reasoningEffort:`Reasoning Effort`,reasoningEfforts:{low:`Low`,medium:`Medium`,high:`High`,xhigh:`Extra High`,max:`Maximum`},maxToolIterations:`Max Tool Iterations`,toolsEnabled:`Tools Enabled`,toolAllowlist:`Allowed Tools`,noTools:`No tools available.`,subagents:`Allowed Subagents`,noSubagents:`No eligible subagents exist yet.`,path:`Path`,friendlyMode:`Fields`,rawMode:`Markdown`,rawMarkdown:`Raw Markdown`,preview:`Preview`,previewing:`Previewing...`,save:`Save`,saving:`Saving...`,reset:`Reset`,delete:`Delete`,cancel:`Cancel`,retry:`Retry`,saved:`Agent saved`,deleted:`Agent deleted`,previewed:`Markdown validated`,loadError:`Failed to load agents`,saveError:`Failed to save agent`,createError:`Failed to create agent`,deleteError:`Failed to delete agent`,previewError:`Failed to preview agent`,deleteTitle:`Delete agent`,deleteDescription:`This Markdown-backed agent will be removed from disk.`,deleteConfirm:`Delete agent`,deleting:`Deleting...`,sectionIdentity:`Identity`,sectionBehavior:`Behavior`,sectionReasoning:`Reasoning`,sectionTools:`Tools`,unsavedChanges:`Unsaved changes`,confirmResetTitle:`Discard changes?`,confirmResetDescription:`Any unsaved changes will be lost.`,confirmReset:`Discard`,emptyStateTitle:`No agents yet`,emptyStateDescription:`Create your first agent to get started.`,selectAgent:`Select an agent`,builtInAgents:`Built-in Agents`,userAgents:`Custom Agents`},general:{languageLabel:`Language`,languageDescription:`User interface language`,textPromptLabel:`Default Text System Prompt`,textPromptPlaceholder:`e.g. You are a helpful creative partner. Be concise and insightful...`,imagePromptLabel:`Default Image System Prompt`,imagePromptPlaceholder:`e.g. Always generate images in a cinematic style with dramatic lighting...`,imageQualityLabel:`Default Image Quality`,maxToolIterationsLabel:`Max Tool Iterations`,maxToolIterationsDescription:`Upper bound on how many tool-calling rounds the model may take in a single turn.`,maxToolIterationsHint:`{value} of 1000`,chatTitlesLabel:`Chat Titles`,chatTitlesDescription:`Automatically rename timestamped new chats from the first user prompt.`,chatTitlesToggleLabel:`Auto rename new chats`,chatTitleSourceLabel:`Title source`,chatTitleSourcePrompt:`First prompt text`,chatTitleSourceModel:`Generate with a model`,chatTitleModelLabel:`Title model`,chatTitleModelDescription:`Use the current chat model or force a specific text model for title generation.`,chatTitleModelCurrent:`Use the current chat model`,chatTitlePrefixLengthLabel:`Prompt title length`,chatTitlePrefixLengthDescription:`Use the first characters from the prompt when a timestamped chat gets its first message.`,chatTitlePrefixLengthHint:`{value} characters`,multiAgentLabel:`Multi-agent turns`,multiAgentDescription:`Allow agents to delegate bounded work to configured subagents during a turn.`,multiAgentEnabledLabel:`Enable delegation`,chatDelegationEnabledLabel:`Allow Chat mode delegation`,traceVisibilityLabel:`Trace visibility`,traceVisibilityCompact:`Compact`,traceVisibilityFull:`Full`,traceVisibilityOff:`Off`,maxDepthLabel:`Max delegation depth`,maxSubagentCallsLabel:`Max subagent calls`,timeoutLabel:`Subagent timeout`,defaultMaxTurnsLabel:`Default subagent turns`,secondsHint:`{value}s`},connectors:{title:`AI Connectors`,addButton:`Add Connector`,emptyTitle:`No Connectors Found`,emptyDescription:`Add your first API key to start generating.`,deleteConfirm:`Are you sure you want to delete this connector?`,addModalTitle:`Add Connector`,addModalDescription:`Choose the provider, configure the API key and storage.`,providerLabel:`Provider`,selectProvider:`Select Provider`,baseUrlLabel:`Base URL`,baseUrlRequired:`Base URL is required for OpenAI Compatible connectors.`,baseUrlPlaceholder:`https://api.example.com/v1`,deepseekBaseUrlPlaceholder:`https://api.deepseek.com`,organizationIdLabel:`Organization ID (optional)`,organizationIdPlaceholder:`org-...`,organizationIdHelper:`Required only for keys scoped to a specific OpenAI organization.`,projectIdLabel:`Project ID (optional)`,projectIdPlaceholder:`proj_...`,projectIdHelper:`Required for project-scoped keys in the OpenAI API.`,nameLabel:`Name`,namePlaceholder:`e.g. Personal Project`,apiKeyLabel:`API Key`,apiKeyPlaceholder:`sk-...`,saveToLabel:`Save To`,sources:{bunSecrets:`OS Secret Store`,bunSecretsDesc:`Native secure storage`,configFile:`config.toml`,configFileDesc:`~/.mango/config.toml`,envFile:`.env File`,envFileDesc:`App root .env`},cancelButton:`Cancel`,addConnectorButton:`Add Connector`,validating:`Validating...`,modalsModalTitle:`Choose Available Models`,modelsModalTitle:`Choose Available Models`,modelsModalDescription:`Models enabled for`,modelsModalDescriptionSuffix:`will be available in the chat.`,textModelsLabel:`Text Models`,imageModelsLabel:`Image Models`,doneButton:`Done`,configureModels:`Configure Models`,deleteConnector:`Delete Connector`,sharedConnector:`Shared`,managedExternally:`Managed externally via environment configuration.`,sharedDeleteBlocked:`This shared connector must be removed from the configuration file.`,searchModelsPlaceholder:`Search models by name or ID...`,noModelsDiscovered:`No models have been discovered for this connector yet.`,addSuccess:`Connector added successfully!`,deleteSuccess:`Connector deleted successfully!`,updateModelsSuccess:`Models updated successfully!`,errorRequired:`Name and API Key are required.`,failedToLoad:`Failed to load connectors`,failedToAdd:`Failed to add connector`,failedToDelete:`Failed to delete connector`,failedToUpdateModels:`Failed to update models`,unknownError:`An unknown error occurred`,noSearchResults:`No models match your search`},providers:{title:`AI Providers`,backToMenu:`Back to providers`,sectionReasoning:`Reasoning & Thinking`,sectionTools:`Tool Configuration`,sectionCache:`Prompt Caching`,sectionAdvanced:`Advanced`,save:`Save`,saving:`Saving...`,cancel:`Cancel`,reset:`Reset to defaults`,saved:`Settings saved`,saveError:`Failed to save provider settings`,loadError:`Failed to load providers`,invalidProvider:`Provider not found`,perProviderSettings:`Per-provider runtime settings override global defaults.`,noProviders:`No AI providers available.`,modelsEnabled:`{count} models enabled`,connectorsCount:`{count} connectors`,thinkingEnabled:`Enable thinking`,reasoningEffort:`Reasoning effort`,maxOutputTokens:`Max output tokens`,maxToolIterations:`Max tool iterations`,parallelToolCalls:`Parallel tool calls`,compaction:`Provider-side compaction`,cachePreference:`Prompt cache preference`,cacheAuto:`Auto`,cacheStablePrefix:`Stable prefix`,cacheOff:`Off`,capabilityThinking:`Thinking`,capabilityTools:`Tools`,capabilityCaching:`Caching`,capabilityCompaction:`Compaction`,reservedForFuture:`Reserved for future settings`,maxOutputTokensPlaceholder:`1 – {limit}`},tools:{title:`Tools`,description:`Enable or disable tools and configure their parameters.`,categories:{system:`System`,image:`Image`,interaction:`Interaction`},enabled:`Enabled`,disabled:`Disabled`,cannotDisable:`This tool cannot be disabled.`,save:`Save`,saving:`Saving...`,saved:`Settings saved`,saveError:`Failed to save tool settings`,loadError:`Failed to load tools`,noTools:`No tools available.`,maxToolIterationsLabel:`Max Tool Iterations`,maxToolIterationsDescription:`Upper bound on how many tool-calling rounds the model may take in a single turn.`,maxToolIterationsHint:`{value} of 1000`,executionTitle:`Execution`,autoModelOption:`Auto (first available)`,letAiDecideQualityLabel:`Let AI decide quality`,letAiDecideQualityDescription:`When enabled, the AI can choose different image sizes per request.`,toolNames:{readFile:`Read file`,writeFile:`Write file`,listDirectory:`List directory`,glob:`Glob`,grep:`Grep`},toolDescriptions:{readFile:`Allows the AI to read text files from disk.`,writeFile:`Allows the AI to write text content to files on disk.`,listDirectory:`Allows the AI to list files and directories on disk.`,glob:`Allows the AI to find files and directories by glob pattern.`,grep:`Allows the AI to search file contents with regular expressions.`},parameters:{allowedPathsLabel:`Allowed paths`,allowedPathsDescription:`Paths the tool is allowed to access. Leave empty to allow all.`,deniedPathsLabel:`Denied paths`,deniedPathsDescription:`Paths the tool is denied from accessing. Leave empty to deny none.`},pathList:{add:`Add`,edit:`Edit`,delete:`Delete`,save:`Save`,cancel:`Cancel`,pathPlaceholder:`e.g. /home/user/projects`,noPaths:`No paths configured.`}},metrics:{title:`Metrics`,description:`Live in-memory counters for provider cache hit rates and probe timeout totals.`,refresh:`Refresh`,failedToLoad:`Failed to load metrics`,empty:`No provider metrics have been recorded yet.`,generatedAtLabel:`Last updated: {value}`,totalProbeTimeoutsLabel:`Probe timeouts: {value}`,cacheSectionTitle:`Cache Hit Rate`,probeSectionTitle:`Probe Timeouts by Operation`,cacheLabel:`Cache`,hitsLabel:`Hits`,missesLabel:`Misses`,hitRateLabel:`Hit rate`,caches:{sdkClient:`SDK client`,preparedRuntime:`Prepared runtime`,providerRoute:`Provider route`},operations:{healthcheck:`Healthcheck`,modelList:`Model listing`}},logs:{title:`Logs`,description:`Recent provider probe timeouts captured by the current runtime process.`,refresh:`Refresh`,failedToLoad:`Failed to load logs`,empty:`No recent provider probe timeout events.`,providerLabel:`Provider`,operationLabel:`Operation`,eventKinds:{probeTimeout:`Probe timeout`},operations:{healthcheck:`Healthcheck`,modelList:`Model listing`}},appearance:{title:`Appearance`,appTheme:{label:`App Theme`,description:`Choose the visual theme for the application`,dark:`Dark`,light:`Light`,system:`System`,comingSoon:`Coming soon`},fontSize:{label:`Font Size`,description:`Adjust the text size in chat messages`,small:`Small`,default:`Default`,large:`Large`},chatDensity:{label:`Chat Density`,description:`Control spacing between messages`,compact:`Compact`,default:`Default`,comfortable:`Comfortable`},codeTheme:{label:`Code Theme`,description:`Choose the syntax highlighting theme for code blocks`,auto:`Auto (match app theme)`,manual:`Manual`,darkPreference:`Dark preference`,lightPreference:`Light preference`,oneDarkPro:`One Dark Pro`,githubDarkDimmed:`GitHub Dark Dimmed`,githubLight:`GitHub Light`,oneLight:`One Light`}},app:{loadError:`Failed to load app settings`,saveError:`Failed to save app settings`}},common:{loading:`Loading...`,appName:`Mango Studio`,downloadFilenamePrefix:`mangostudio`,mangoStudioLogo:`Mango Studio Logo`,retry:`Retry`,noResultsFor:`No results for "{query}"`,contextIndicator:`Context usage indicator`,settingsNavigation:`Settings navigation`,openMenu:`Open menu`,closeMenu:`Close menu`,disclaimer:`Artificial Intelligence can make mistakes. Please double-check the results.`},providers:{gemini:`Google Gemini`,anthropic:`Anthropic`,openai:`OpenAI`,"openai-compatible":`OpenAI Compatible`,deepseek:`DeepSeek`,openrouter:`OpenRouter`},thinking:{label:`Thought process`,labelContinued:`Continued thinking`,streaming:`Thinking...`,streamingContinued:`Thinking again...`,toggle:`View reasoning`,enable:`Thinking`,enabled:`Thinking enabled`,disabled:`Thinking disabled`,effort:`Effort`,effortLow:`Low`,effortMedium:`Medium`,effortHigh:`High`,effortXHigh:`Extra High`,effortMax:`Maximum`,reasoningBadge:`Reasoning`},tools:{calling:`Calling...`,running:`Running tool`,done:`Done`,error:`Tool error`,moreCount:`+{count} more`,argsLabel:`args`,errorLabel:`error`,resultLabel:`result`,labels:{list_directory:`List`,read_file:`Read`,write_file:`Write`,glob:`Glob`,grep:`Grep`,generate_image:`Generate Image`,get_current_datetime:`Date`,bash:`Bash`,zsh:`Zsh`,powershell:`PowerShell`}},errors:{unknown:`An unknown error occurred`,imageNotSupported:`This provider does not support image generation.`,referenceImageUploadFailed:`Failed to upload reference image. Please try again.`,textGenerationFailed:`Failed to get a response. Please try again.`,imageGenerationFailed:`Failed to generate image. Please try again.`,streamRequestFailed:`Stream request failed`,streamResponseNoBody:`Stream response has no body`},models:{loading:`Loading models...`,unavailable:`Models unavailable`,noModelsAvailable:`No models available`,preview:`Preview`},api:{unauthorized:`Unauthorized`},generation:{toolLoopExhausted:`The model exceeded the maximum number of tool interactions.`}},st={auth:{loginTitle:`Mango Studio`,signupTitle:`Criar Conta`,emailLabel:`Email`,emailPlaceholder:`seu@email.com`,passwordLabel:`Senha`,passwordPlaceholder:`••••••••`,signupPasswordLabel:`Senha (mínimo 8 caracteres)`,nameLabel:`Nome`,namePlaceholder:`Seu nome`,loginButton:`Entrar`,loginLoading:`Entrando...`,signupButton:`Criar Conta`,signupLoading:`Criando...`,loginLink:`Fazer login`,signupLink:`Criar conta`,noAccount:`Não tem conta?`,hasAccount:`Já tem conta?`,loginError:`Erro ao fazer login`,signupError:`Erro ao criar conta`,logoutButton:`Sair`,logoutLoading:`Saindo...`,logoutError:`Erro ao sair. Tente novamente.`},chat:{newChat:`Novo Chat`,empty:`Inicie uma conversa`,deleted:`Chat excluído`,editTitle:`Editar título`,deleteTitle:`Excluir chat`,sectionLabel:`Chats`,stopGenerating:`Parar`,streaming:`Gerando...`,input:{modeChat:`Chat`,modeAgent:`Agente`,modeImage:`Criar Imagem`,send:`Enviar`,generate:`Gerar`,stop:`Parar`,placeholder:`Pergunte ao modelo de IA...`,imagePlaceholder:`Descreva sua imagem...`,addReferenceImage:`Adicionar imagem de referência`,createImages:`Criar imagens`,createImagesHint:`Sugerir ao modelo que use a ferramenta de geração de imagens`,selectAgent:`Selecionar agente`,agentsLoading:`Carregando agentes...`},feed:{emptyTitle:`Inicie uma conversa ou crie uma imagem`,emptySubtitle:`Mude para o modo Criar Imagem para gerar arte`,generatingImage:`Gerando imagem...`,statusGenerating:`Gerando`,statusThinking:`Pensando`,statusGenerated:`Gerado`,statusReplied:`Respondido`,modelFallback:`Modelo de IA`,modelStatus:`{status} com: {model}`,download:`Baixar`,saveToGallery:`Salvar na Galeria`,regenerate:`Regenerar`,imageUnavailable:`Imagem não disponível`,imageUnavailableHint:`A imagem foi excluída, movida ou ainda não está acessível.`,generatedImageAlt:`Imagem gerada`,imageGenerationFailed:`Falha ao gerar imagem`,styleParams:`Parâmetros de Estilo`,thoughtFor:`Pensou por {time}`,respondedIn:`Respondeu em {time}`,noResponse:`Sem resposta`,neuralDiffusionPath:`Usando Neural Diffusion Path.`,createImageBadge:`Criar Imagem`,subagentTrace:`Trace de subagente`,subagentPendingName:`Subagente`,subagentStatusCompleted:`Concluído`,subagentStatusFailed:`Falhou`,subagentStatusAborted:`Abortado`,subagentStatusTimeout:`Tempo esgotado`,subagentTools:`{count} ferramentas`,subagentNoTools:`Sem ferramentas`,subagentLastMessage:`Última mensagem`,subagentMessages:`Mensagens`,subagentToolCalls:`Chamadas de ferramenta`,subagentLifecycle:`Ciclo de vida`,subagentLifecycleDelegationStarted:`Delegação iniciada`,subagentLifecycleDelegationCompleted:`Delegação concluída`,subagentLifecycleDelegationFailed:`Delegação falhou`,subagentLifecycleAttempt:`Tentativa {attempt}`,subagentLifecycleRecovered:`Resposta recuperada`,subagentLifecycleTimeout:`Tempo esgotado`,subagentLifecycleFallback:`Resposta fallback criada`},context:{label:`Contexto`,tokens:`~{used} / {limit} tokens`,modeStateful:`Stateful`,modeReplay:`Replay`,modeCompacted:`Compactado`,modeDegraded:`Degradado`,warning:`Esta conversa está se aproximando do limite de contexto do modelo.`,danger:`O MangoStudio pode precisar compactar ou sair do modo stateful.`,critical:`Esta conversa não pode mais permanecer stateful no provedor atual.`,keepHistory:`As mensagens originais continuam no histórico por padrão.`,compactAction:`Compactar e continuar`,newChatAction:`Iniciar chat resumido`,continueAction:`Continuar assim mesmo`,compactPending:`Compactando...`,newChatPending:`Iniciando chat...`,compactedSuccess:`Chat compactado`,summarizedChatSuccess:`Chat resumido iniciado`,compactFailed:`Falha ao compactar o chat`,summarizedChatFailed:`Falha ao iniciar o chat resumido`},fallback:{toReplay:`Continuação stateful não está mais disponível. Continuando com replay do transcript.`,generic:`Modo da conversa alterado de {from} para {to}.`},continuation:{title:{providerChanged:`Estado {fromProvider} {fromMode} não pode ser reutilizado por {provider}. Transcript reproduzido e continuação {provider} {toMode} iniciada.`,modelChanged:`Modelo alterado para {model}. Transcript reproduzido em {provider} {toMode}.`,systemPromptChanged:`System prompt alterado. Transcript reproduzido em {provider} {toMode}.`,toolsetChanged:`Conjunto de ferramentas alterado. Transcript reproduzido em {provider} {toMode}.`,agentChanged:`Agente alterado. Transcript reproduzido em {provider} {toMode}.`,agentRuntimeChanged:`Configurações do agente alteradas. Transcript reproduzido em {provider} {toMode}.`,cursorExpired:`Cursor {provider} {fromMode} expirou. Usando replay do transcript.`,cursorInvalid:`Cursor {provider} {fromMode} foi invalidado. Usando replay do transcript.`,toolResultCursorLoss:`Cursor {provider} {fromMode} perdido durante execução de ferramenta. Resposta pode estar incompleta.`,envelopeMalformed:`Estado de continuação armazenado era inválido. Reiniciando com replay do transcript.`},recovered:`(recuperado)`,notRecovered:`(não recuperado)`},cursorLost:`Cursor perdido — fallback para {detail}`,toolLoopExhausted:`Limite de iterações de ferramentas atingido`,genericFailure:`Falha na geração`,copyCode:`Copiar código`,codeCopied:`Copiado!`,copyMessage:`Copiar mensagem`,messageCopied:`Mensagem copiada!`,scrollToBottom:`Ir para o final`,emptyGreeting:`Olá, {name}!`,emptySubtitle:`Como posso te ajudar hoje?`,suggestion1:`Explique um conceito complexo de forma simples`,suggestion2:`Escreva um script em Python para...`,suggestion3:`Me ajude a depurar um problema`,suggestion4:`Crie uma imagem`,systemEvents:{chatCompacted:`Contexto compactado em um resumo`,summaryHandoff:`Este chat começou a partir de um resumo anterior`},titleGenerationFailed:`Falha ao gerar título do chat`},studio:{title:`Studio`,empty:`Espaço de criação de imagens — em breve.`},gallery:{title:`Galeria`,empty:`Suas criações aparecerão aqui.`,download:`Baixar imagem completa`,view:`Ver`},settings:{title:`Configurações`,tabs:{general:`Geral`,connectors:`Conectores`,providers:`Provedores`,appearance:`Aparência`,context:`Contexto`,agents:`Agentes`,prompts:`Prompts`,tools:`Ferramentas`,metrics:`Métricas`,logs:`Logs`},context:{title:`Contexto`,description:`Controle quando o MangoStudio avisa, compacta ou continua em um chat resumido.`,keepHistory:`A compactação mantém o transcript original salvo até você limpá-lo depois.`,behaviorLabel:`Comportamento de compactação`,behaviorDescription:`Escolha o que acontece quando uma conversa atinge o limite de aviso.`,behaviorOptions:{ask:`Perguntar sempre`,autoCompact:`Compactar o chat atual automaticamente`,newChat:`Continuar em um chat resumido`,off:`Desativar avisos`},providerCompactionLabel:`Permitir compactação pelo provider`,providerCompactionDescription:`Quando disponível, deixe o provider compactar o estado com cursor perto do limite de aviso.`,warningThresholdLabel:`Limite de aviso`,warningThresholdDescription:`Mostrar ações de compactação quando o uso de contexto atingir este valor.`,dangerThresholdLabel:`Limite de perigo`,dangerThresholdDescription:`Intensificar o aviso antes de atingir o limite crítico.`,hardStopThresholdLabel:`Limite crítico`,hardStopThresholdDescription:`Tratar a pressão de contexto como crítica neste valor ou acima dele.`,summaryModelLabel:`Modelo preferido para resumo`,summaryModelDescription:`Use o modelo atual do chat ou force um modelo de texto específico para os resumos.`,summaryModelCurrent:`Usar o modelo atual do chat`,thresholdHint:`{value}% do contexto`},prompts:{defaultPromptsLabel:`Prompts Padrão`,ruleFilesLabel:`Arquivos de Regras`,customRulesLabel:`Regras Personalizadas`,customRulesDescription:`Adicione caminhos para arquivos .md personalizados que serão incluídos nas requisições.`,textSystemPromptLabel:`System Prompt de Texto Padrão`,textSystemPromptPlaceholder:`ex. Você é um parceiro criativo útil. Seja conciso e perspicaz...`,imageSystemPromptLabel:`System Prompt de Imagem Padrão`,imageSystemPromptPlaceholder:`ex. Sempre gere imagens em estilo cinemático com iluminação dramática...`,agentsMdLabel:`AGENTS.md`,agentsMdDescription:`Regras do repositório definidas no arquivo AGENTS.md.`,claudeMdLabel:`CLAUDE.md`,claudeMdDescription:`Instruções globais definidas no arquivo CLAUDE.md.`,enabledLabel:`Ativado`,injectionRoleLabel:`Função de Injeção`,injectionRoleSystem:`Enviar como System Prompt`,injectionRoleUser:`Enviar como User Prompt`,frequencyLabel:`Frequência`,frequencyFirstTurn:`Enviar apenas no primeiro prompt`,frequencyFirstTurnHint:`Recomendado`,frequencyEveryTurn:`Enviar sempre`,addRule:`Adicionar Regra`,removeRule:`Remover`,rulePathLabel:`Caminho`,rulePathPlaceholder:`ex. ~/meus-projetos/regras.md`},agents:{title:`Agentes`,description:`Configure agentes integrados e agentes em Markdown para fluxos de trabalho.`,create:`Criar Agente`,createTitle:`Novo Agente`,newAgentName:`Novo Agente`,newAgentDescription:`Descreva quando este agente deve ser usado.`,builtIn:`Integrado`,user:`Usuário`,name:`Nome`,slug:`Slug do Arquivo`,agentDescription:`Descrição`,role:`Função`,roles:{primary:`Primário`,subagent:`Subagente`,both:`Ambos`},systemPrompt:`System Prompt`,model:`Modelo Sobrescrito`,modelDefaultOption:`Usar o modelo padrão do agente`,thinking:`Ativar Raciocínio`,reasoningEffort:`Esforço de Raciocínio`,reasoningEfforts:{low:`Baixo`,medium:`Médio`,high:`Alto`,xhigh:`Extra Alto`,max:`Máximo`},maxToolIterations:`Máx. Iterações de Ferramentas`,toolsEnabled:`Ferramentas Ativadas`,toolAllowlist:`Ferramentas Permitidas`,noTools:`Nenhuma ferramenta disponível.`,subagents:`Subagentes Permitidos`,noSubagents:`Nenhum subagente elegível existe ainda.`,path:`Caminho`,friendlyMode:`Campos`,rawMode:`Markdown`,rawMarkdown:`Markdown Bruto`,preview:`Pré-visualizar`,previewing:`Pré-visualizando...`,save:`Salvar`,saving:`Salvando...`,reset:`Restaurar`,delete:`Excluir`,cancel:`Cancelar`,retry:`Tentar novamente`,saved:`Agente salvo`,deleted:`Agente excluído`,previewed:`Markdown validado`,loadError:`Falha ao carregar agentes`,saveError:`Falha ao salvar agente`,createError:`Falha ao criar agente`,deleteError:`Falha ao excluir agente`,previewError:`Falha ao pré-visualizar agente`,deleteTitle:`Excluir agente`,deleteDescription:`Este agente em Markdown será removido do disco.`,deleteConfirm:`Excluir agente`,deleting:`Excluindo...`,sectionIdentity:`Identidade`,sectionBehavior:`Comportamento`,sectionReasoning:`Raciocínio`,sectionTools:`Ferramentas`,unsavedChanges:`Alterações não salvas`,confirmResetTitle:`Descartar alterações?`,confirmResetDescription:`Quaisquer alterações não salvas serão perdidas.`,confirmReset:`Descartar`,emptyStateTitle:`Nenhum agente ainda`,emptyStateDescription:`Crie seu primeiro agente para começar.`,selectAgent:`Selecionar um agente`,builtInAgents:`Agentes Integrados`,userAgents:`Agentes Personalizados`},general:{languageLabel:`Idioma`,languageDescription:`Idioma da interface do usuário`,textPromptLabel:`System Prompt de Texto Padrão`,textPromptPlaceholder:`ex. Você é um parceiro criativo útil. Seja conciso e perspicaz...`,imagePromptLabel:`System Prompt de Imagem Padrão`,imagePromptPlaceholder:`ex. Sempre gere imagens em estilo cinemático com iluminação dramática...`,imageQualityLabel:`Qualidade de Imagem Padrão`,maxToolIterationsLabel:`Iterações Máximas de Ferramentas`,maxToolIterationsDescription:`Limite máximo de rodadas de chamada de ferramentas que o modelo pode executar em um turno.`,maxToolIterationsHint:`{value} de 1000`,chatTitlesLabel:`Títulos dos Chats`,chatTitlesDescription:`Renomeie automaticamente novos chats com timestamp a partir do primeiro prompt do usuário.`,chatTitlesToggleLabel:`Renomear novos chats automaticamente`,chatTitleSourceLabel:`Origem do título`,chatTitleSourcePrompt:`Texto inicial do prompt`,chatTitleSourceModel:`Gerar com um modelo`,chatTitleModelLabel:`Modelo para título`,chatTitleModelDescription:`Use o modelo atual do chat ou force um modelo de texto específico para gerar títulos.`,chatTitleModelCurrent:`Usar o modelo atual do chat`,chatTitlePrefixLengthLabel:`Tamanho do título por prompt`,chatTitlePrefixLengthDescription:`Use os primeiros caracteres do prompt quando um chat com timestamp receber a primeira mensagem.`,chatTitlePrefixLengthHint:`{value} caracteres`,multiAgentLabel:`Turnos multiagente`,multiAgentDescription:`Permita que agentes deleguem trabalho delimitado a subagentes configurados durante um turno.`,multiAgentEnabledLabel:`Ativar delegação`,chatDelegationEnabledLabel:`Permitir delegação no modo Chat`,traceVisibilityLabel:`Visibilidade do trace`,traceVisibilityCompact:`Compacto`,traceVisibilityFull:`Completo`,traceVisibilityOff:`Desativado`,maxDepthLabel:`Profundidade máxima de delegação`,maxSubagentCallsLabel:`Máx. chamadas de subagentes`,timeoutLabel:`Timeout do subagente`,defaultMaxTurnsLabel:`Turnos padrão do subagente`,secondsHint:`{value}s`},connectors:{title:`Conectores de IA`,addButton:`Adicionar Conector`,emptyTitle:`Nenhum Conector Encontrado`,emptyDescription:`Adicione sua primeira chave de API para começar a gerar.`,deleteConfirm:`Tem certeza que deseja excluir este conector?`,addModalTitle:`Adicionar Conector`,addModalDescription:`Escolha o provider, configure a chave de API e o armazenamento.`,providerLabel:`Provider`,selectProvider:`Selecione o Provider`,baseUrlLabel:`URL Base`,baseUrlRequired:`URL Base é obrigatória para conectores OpenAI Compatível.`,baseUrlPlaceholder:`https://api.example.com/v1`,deepseekBaseUrlPlaceholder:`https://api.deepseek.com`,organizationIdLabel:`Organization ID (opcional)`,organizationIdPlaceholder:`org-...`,organizationIdHelper:`Necessário apenas para chaves associadas a uma organização específica.`,projectIdLabel:`Project ID (opcional)`,projectIdPlaceholder:`proj_...`,projectIdHelper:`Necessário para chaves de projeto restrito no OpenAI.`,nameLabel:`Nome`,namePlaceholder:`ex. Projeto Pessoal`,apiKeyLabel:`Chave de API`,apiKeyPlaceholder:`sk-...`,saveToLabel:`Salvar em`,sources:{bunSecrets:`Armazenamento Seguro do SO`,bunSecretsDesc:`Armazenamento seguro nativo`,configFile:`config.toml`,configFileDesc:`~/.mango/config.toml`,envFile:`Arquivo .env`,envFileDesc:`.env na raiz do app`},cancelButton:`Cancelar`,addConnectorButton:`Adicionar Conector`,validating:`Validando...`,modalsModalTitle:`Escolher Modelos Disponíveis`,modelsModalTitle:`Escolher Modelos Disponíveis`,modelsModalDescription:`Os modelos habilitados para`,modelsModalDescriptionSuffix:`estarão disponíveis no chat.`,textModelsLabel:`Modelos de Texto`,imageModelsLabel:`Modelos de Imagem`,doneButton:`Concluído`,configureModels:`Configurar Modelos`,deleteConnector:`Excluir Conector`,sharedConnector:`Compartilhado`,managedExternally:`Gerenciado externamente via configuração do ambiente.`,sharedDeleteBlocked:`Este conector compartilhado precisa ser removido do arquivo de configuração.`,searchModelsPlaceholder:`Buscar modelos por nome ou ID...`,noModelsDiscovered:`Nenhum modelo foi descoberto para este conector ainda.`,addSuccess:`Conector adicionado com sucesso!`,deleteSuccess:`Conector excluído com sucesso!`,updateModelsSuccess:`Modelos atualizados com sucesso!`,errorRequired:`Nome e Chave de API são obrigatórios.`,failedToLoad:`Falha ao carregar conectores`,failedToAdd:`Falha ao adicionar conector`,failedToDelete:`Falha ao excluir conector`,failedToUpdateModels:`Falha ao atualizar modelos`,unknownError:`Ocorreu um erro desconhecido`,noSearchResults:`Nenhum modelo corresponde à sua pesquisa`},providers:{title:`Provedores de IA`,backToMenu:`Voltar para provedores`,sectionReasoning:`Raciocínio`,sectionTools:`Configuração de Ferramentas`,sectionCache:`Cache de Prompt`,sectionAdvanced:`Avançado`,save:`Salvar`,saving:`Salvando...`,cancel:`Cancelar`,reset:`Restaurar padrões`,saved:`Configurações salvas`,saveError:`Falha ao salvar configurações do provedor`,loadError:`Falha ao carregar provedores`,invalidProvider:`Provedor não encontrado`,perProviderSettings:`Configurações por provedor substituem os padrões globais.`,noProviders:`Nenhum provedor de IA disponível.`,modelsEnabled:`{count} modelos habilitados`,connectorsCount:`{count} conectores`,thinkingEnabled:`Ativar raciocínio`,reasoningEffort:`Esforço de raciocínio`,maxOutputTokens:`Máx. tokens de saída`,maxToolIterations:`Máx. iterações de ferramentas`,parallelToolCalls:`Chamadas paralelas de ferramentas`,compaction:`Compactação pelo provedor`,cachePreference:`Preferência de cache de prompt`,cacheAuto:`Automático`,cacheStablePrefix:`Prefixo estável`,cacheOff:`Desligado`,capabilityThinking:`Raciocínio`,capabilityTools:`Ferramentas`,capabilityCaching:`Cache`,capabilityCompaction:`Compactação`,reservedForFuture:`Reservado para configurações futuras`,maxOutputTokensPlaceholder:`1 – {limit}`},tools:{title:`Ferramentas`,description:`Ative ou desative ferramentas e configure seus parâmetros.`,categories:{system:`Sistema`,image:`Imagem`,interaction:`Interação`},enabled:`Ativada`,disabled:`Desativada`,cannotDisable:`Esta ferramenta não pode ser desativada.`,save:`Salvar`,saving:`Salvando...`,saved:`Configurações salvas`,saveError:`Falha ao salvar configurações da ferramenta`,loadError:`Falha ao carregar ferramentas`,noTools:`Nenhuma ferramenta disponível.`,maxToolIterationsLabel:`Iterações Máximas de Ferramentas`,maxToolIterationsDescription:`Limite máximo de rodadas de chamada de ferramentas que o modelo pode executar em um turno.`,maxToolIterationsHint:`{value} de 1000`,executionTitle:`Execução`,autoModelOption:`Automático (primeiro disponível)`,letAiDecideQualityLabel:`IA decide a qualidade`,letAiDecideQualityDescription:`Quando ativado, a IA pode escolher diferentes tamanhos de imagem por solicitação.`,toolNames:{readFile:`Ler arquivo`,writeFile:`Escrever arquivo`,listDirectory:`Listar diretório`,glob:`Glob`,grep:`Grep`},toolDescriptions:{readFile:`Permite que a IA leia arquivos de texto do disco.`,writeFile:`Permite que a IA escreva conteúdo de texto em arquivos no disco.`,listDirectory:`Permite que a IA liste arquivos e diretórios no disco.`,glob:`Permite que a IA encontre arquivos e diretórios por padrão glob.`,grep:`Permite que a IA pesquise o conteúdo de arquivos com expressões regulares.`},parameters:{allowedPathsLabel:`Caminhos permitidos`,allowedPathsDescription:`Caminhos que a ferramenta pode acessar. Deixe vazio para permitir todos.`,deniedPathsLabel:`Caminhos negados`,deniedPathsDescription:`Caminhos que a ferramenta não pode acessar. Deixe vazio para não negar nenhum.`},pathList:{add:`Adicionar`,edit:`Editar`,delete:`Excluir`,save:`Salvar`,cancel:`Cancelar`,pathPlaceholder:`ex. /home/usuario/projetos`,noPaths:`Nenhum caminho configurado.`}},metrics:{title:`Métricas`,description:`Contadores em memória para taxa de acerto de cache dos providers e total de timeouts de probes.`,refresh:`Atualizar`,failedToLoad:`Falha ao carregar métricas`,empty:`Nenhuma métrica de provider foi registrada ainda.`,generatedAtLabel:`Última atualização: {value}`,totalProbeTimeoutsLabel:`Timeouts de probe: {value}`,cacheSectionTitle:`Taxa de Acerto de Cache`,probeSectionTitle:`Timeouts de Probe por Operação`,cacheLabel:`Cache`,hitsLabel:`Acertos`,missesLabel:`Falhas`,hitRateLabel:`Taxa de acerto`,caches:{sdkClient:`Cliente SDK`,preparedRuntime:`Runtime preparado`,providerRoute:`Roteamento do provider`},operations:{healthcheck:`Healthcheck`,modelList:`Listagem de modelos`}},logs:{title:`Logs`,description:`Timeouts recentes de probes de provider capturados pelo processo atual.`,refresh:`Atualizar`,failedToLoad:`Falha ao carregar logs`,empty:`Nenhum evento recente de timeout de probe de provider.`,providerLabel:`Provider`,operationLabel:`Operação`,eventKinds:{probeTimeout:`Timeout de probe`},operations:{healthcheck:`Healthcheck`,modelList:`Listagem de modelos`}},appearance:{title:`Aparência`,appTheme:{label:`Tema do Aplicativo`,description:`Escolha o tema visual para o aplicativo`,dark:`Escuro`,light:`Claro`,system:`Sistema`,comingSoon:`Em breve`},fontSize:{label:`Tamanho de Fonte`,description:`Ajuste o tamanho do texto nas mensagens do chat`,small:`Pequeno`,default:`Padrão`,large:`Grande`},chatDensity:{label:`Densidade do Chat`,description:`Controle o espaçamento entre as mensagens`,compact:`Compacto`,default:`Padrão`,comfortable:`Confortável`},codeTheme:{label:`Tema de Código`,description:`Escolha o tema de destaque de sintaxe para blocos de código`,auto:`Automático (seguir tema do app)`,manual:`Manual`,darkPreference:`Preferência escura`,lightPreference:`Preferência clara`,oneDarkPro:`One Dark Pro`,githubDarkDimmed:`GitHub Dark Dimmed`,githubLight:`GitHub Light`,oneLight:`One Light`}},app:{loadError:`Falha ao carregar configurações do app`,saveError:`Falha ao salvar configurações do app`}},common:{loading:`Carregando...`,appName:`Mango Studio`,downloadFilenamePrefix:`mangostudio`,mangoStudioLogo:`Logo do Mango Studio`,retry:`Tentar novamente`,noResultsFor:`Nenhum resultado para "{query}"`,contextIndicator:`Indicador de uso de contexto`,settingsNavigation:`Navegação de configurações`,openMenu:`Abrir menu`,closeMenu:`Fechar menu`,disclaimer:`A Inteligencia Artificial pode cometer erros, verifique os resultados com cautela`},providers:{gemini:`Google Gemini`,anthropic:`Anthropic`,openai:`OpenAI`,"openai-compatible":`OpenAI Compatível`,deepseek:`DeepSeek`,openrouter:`OpenRouter`},thinking:{label:`Processo de raciocínio`,labelContinued:`Continuação do raciocínio`,streaming:`Pensando...`,streamingContinued:`Pensando novamente...`,toggle:`Ver raciocínio`,enable:`Raciocinar`,enabled:`Raciocínio ativo`,disabled:`Raciocínio desativado`,effort:`Esforço`,effortLow:`Baixo`,effortMedium:`Médio`,effortHigh:`Alto`,effortXHigh:`Extra Alto`,effortMax:`Máximo`,reasoningBadge:`Reasoning`},tools:{calling:`Chamando...`,running:`Executando ferramenta`,done:`Concluído`,error:`Erro na ferramenta`,moreCount:`+{count} mais`,argsLabel:`argumentos`,errorLabel:`erro`,resultLabel:`resultado`,labels:{list_directory:`Listar`,read_file:`Leu`,write_file:`Escreveu`,glob:`Glob`,grep:`Grep`,generate_image:`Gerar Imagem`,get_current_datetime:`Data`,bash:`Bash`,zsh:`Zsh`,powershell:`PowerShell`}},errors:{unknown:`Ocorreu um erro desconhecido`,imageNotSupported:`Este provider não suporta geração de imagens.`,referenceImageUploadFailed:`Falha ao enviar a imagem de referência. Tente novamente.`,textGenerationFailed:`Falha ao obter uma resposta. Tente novamente.`,imageGenerationFailed:`Falha ao gerar imagem. Tente novamente.`,streamRequestFailed:`Falha na requisição de stream`,streamResponseNoBody:`Resposta do stream sem corpo`},models:{loading:`Carregando modelos...`,unavailable:`Modelos indisponíveis`,noModelsAvailable:`Nenhum modelo disponível`,preview:`Pré-visualização`},api:{unauthorized:`Unauthorized`},generation:{toolLoopExhausted:`O modelo excedeu o número máximo de interações com ferramentas.`}},ct=`mangostudio:locale`,lt={"pt-BR":st,en:z};function ut(){let e=localStorage.getItem(ct);return e===`pt-BR`||e===`en`?e:navigator.language.startsWith(`pt`)?`pt-BR`:`en`}var dt=(0,L.createContext)(null);function ft({children:e}){let[t,n]=(0,L.useState)(()=>ut());return(0,R.jsx)(dt,{value:{t:(0,L.useMemo)(()=>lt[t],[t]),locale:t,setLocale:(0,L.useCallback)(e=>{n(e),localStorage.setItem(ct,e)},[])},children:e})}function B(){let e=(0,L.use)(dt);if(!e)throw Error(`useI18n deve ser usado dentro de I18nProvider`);return e}var pt=`mango-studio-theme`,mt={mode:`auto`,darkTheme:`one-dark-pro`,lightTheme:`github-light`},ht={appTheme:`dark`,codeTheme:mt,fontSize:`default`,chatDensity:`default`},gt=(0,L.createContext)(null);function _t(){try{let e=localStorage.getItem(pt);if(e){let t=JSON.parse(e);return typeof t.codeTheme==`string`&&(t.codeTheme={...mt,darkTheme:t.codeTheme}),{...ht,...t}}}catch{}return ht}function vt({children:e}){let[t,n]=(0,L.useState)(_t),[r,i]=(0,L.useState)(()=>window.matchMedia(`(prefers-color-scheme: dark)`).matches),a=(0,L.useMemo)(()=>t.appTheme===`system`?r?`dark`:`light`:t.appTheme,[t.appTheme,r]),o=(0,L.useMemo)(()=>t.codeTheme.mode===`manual`||a===`dark`?t.codeTheme.darkTheme:t.codeTheme.lightTheme,[t.codeTheme,a]);(0,L.useEffect)(()=>{try{localStorage.setItem(pt,JSON.stringify(t))}catch{}document.documentElement.dataset.theme=a,document.documentElement.dataset.fontSize=t.fontSize,document.documentElement.dataset.chatDensity=t.chatDensity},[t,a]),(0,L.useEffect)(()=>{if(t.appTheme!==`system`)return;let e=window.matchMedia(`(prefers-color-scheme: dark)`),n=()=>i(e.matches);return e.addEventListener(`change`,n),()=>e.removeEventListener(`change`,n)},[t.appTheme]);let s=(0,L.useCallback)(e=>{n(t=>({...t,...e}))},[]);return(0,R.jsx)(gt,{value:(0,L.useMemo)(()=>({config:t,resolvedTheme:a,resolvedCodeTheme:o,setConfig:s}),[t,a,o,s]),children:e})}function yt(){let e=(0,L.use)(gt);if(!e)throw Error(`useTheme must be used inside ThemeProvider`);return e}var bt=E()({component:()=>(0,R.jsx)(Oe,{client:rt,children:(0,R.jsx)(vt,{children:(0,R.jsx)(ft,{children:(0,R.jsx)(at,{children:(0,R.jsx)(we,{})})})})})}),xt={primary:`bg-primary text-on-primary shadow-lg shadow-primary/20 hover:opacity-90`,secondary:`bg-surface-container-high text-on-surface hover:bg-surface-container-highest`,ghost:`text-on-surface/70 hover:text-on-surface hover:bg-surface-container-high`},St={sm:`px-3 py-1.5 text-xs`,md:`px-4 py-2 text-sm`};function V({variant:e=`primary`,size:t=`md`,loading:n=!1,disabled:r,className:i=``,children:a,...o}){return(0,R.jsxs)(`button`,{disabled:r||n,className:`
|
|
3
3
|
inline-flex items-center justify-center gap-2 rounded-xl font-bold
|
|
4
4
|
transition-all duration-200 active:scale-95 cursor-pointer
|
|
@@ -21,7 +21,7 @@ Final report requirements:
|
|
|
21
21
|
- Always end with a "Final Report" section.
|
|
22
22
|
- Include: key findings, relevant file paths, tools/commands used, risks or unknowns, and recommended next steps.
|
|
23
23
|
- Do not make changes unless explicitly asked.`,toolNames:[],toolsEnabled:!0,subagentIds:[],metadata:{}});Object.freeze([gr,_r,vr]);function yr(e){return typeof e==`string`&&br(e)}function br(e){return xr(e)||hr.test(e)}function xr(e){return mr.some(t=>t===e)}var Sr=I.Union([I.Literal(`chat`),I.Literal(`default`),I.Literal(`explore`)]),Cr=I.Unsafe(I.String({pattern:`^user:[a-z0-9]+(?:-[a-z0-9]+)*$`})),wr=I.Union([Sr,Cr]);I.Union([I.Literal(`chat`),I.Literal(`agent`)]);var Tr=I.Union([I.Literal(`builtin`),I.Literal(`user`)]),Er=I.Union([I.Literal(`primary`),I.Literal(`subagent`),I.Literal(`both`)]),Dr=I.Union([I.Object({type:I.Literal(`builtin`)}),I.Object({type:I.Literal(`markdown`),path:I.Optional(I.String({minLength:1}))})]),Or=I.Record(I.String(),I.Unknown()),kr=I.Object({id:wr,name:I.String({minLength:1}),description:I.String(),kind:Tr,role:Er,source:Dr,systemPrompt:I.String(),model:I.Optional(I.String({minLength:1})),thinkingEnabled:I.Optional(I.Boolean()),reasoningEffort:I.Optional(nr),maxToolIterations:I.Optional(I.Integer({minimum:1,maximum:J})),toolNames:$n(I.String({minLength:1})),toolsEnabled:I.Boolean(),subagentIds:$n(wr),metadata:Or});I.Object({agents:I.Array(kr)});var Ar=I.Object({name:I.String({minLength:1}),description:I.String(),role:Er,systemPrompt:I.String(),model:I.Optional(I.String({minLength:1})),thinkingEnabled:I.Optional(I.Boolean()),reasoningEffort:I.Optional(nr),maxToolIterations:I.Optional(I.Integer({minimum:1,maximum:J})),toolNames:$n(I.String({minLength:1})),toolsEnabled:I.Boolean(),subagentIds:$n(wr),metadata:Or});I.Intersect([Ar,I.Object({slug:I.Optional(I.String({minLength:1}))})]),I.Object({markdown:I.String(),id:I.Optional(Cr)}),I.Object({profile:kr,markdown:I.String()}),I.Object({success:I.Literal(!0)});function jr({currentChatId:e}){let[t,n]=(0,L.useState)(!1),[r,i]=(0,L.useState)(null),[a,o]=(0,L.useState)(null),s=(0,L.useRef)(null),c=(0,L.useRef)(new Map),[l,u]=(0,L.useState)(0),d=(0,L.useRef)(e);return d.current=e,(0,L.useEffect)(()=>{i(e?c.current.get(e)??null:null),o(null)},[e]),{isGenerating:t,setIsGenerating:n,contextInfo:r,fallbackNotice:a,setFallbackNotice:o,handleStop:(0,L.useCallback)(()=>{s.current?.abort()},[]),abortControllerRef:s,setAbortController:(0,L.useCallback)(e=>{s.current=e},[]),updateContextInfo:(0,L.useCallback)((e,t)=>{i(t),c.current.set(e,t),u(e=>e+1)},[]),seedContextInfo:(0,L.useCallback)((e,t)=>{c.current.set(e,t),u(e=>e+1),e===d.current&&i(t)},[]),contextCache:c.current}}async function Mr(e){let{data:t,error:n}=await G.api.chats[`title-suggestion`].post(e);if(n)throw Error(W(n.value,z.chat.titleGenerationFailed));return t}async function Nr(e,t){let{data:n,error:r}=await G.api.chats({id:e}).compact.post(t);if(r)throw Error(W(r.value));return n}async function Pr(e,t){let{data:n,error:r}=await G.api.chats({id:e})[`summarize-to-new-chat`].post(t);if(r)throw Error(W(r.value));return n}function Fr(e,t){if(!e?.length)return t;if(!t?.length)return e;let n=[...e];for(let e of t)n.some(t=>t.event===e.event&&t.attempt===e.attempt&&t.detail===e.detail)||n.push(e);return n}var Ir={subagent_delegation_started:`delegation_started`,subagent_delegation_completed:`delegation_completed`,subagent_delegation_failed:`delegation_failed`,subagent_response_attempt:`response_attempt`,subagent_response_recovered:`response_recovered`,subagent_response_timeout:`response_timeout`,subagent_response_fallback:`response_fallback`};function Lr({userMessageId:e,aiMessageId:t}){return{text:``,parts:[],currentUserMessageId:e,currentAiMessageId:t,receivedServerUserMessageId:!1,receivedServerAiMessageId:!1,activeThinkingIndex:null,userMessageUpdate:null,aiMessageUpdate:null}}function Rr(e,t,n){let r=zr(e);switch(t.type){case`user_message_id`:return ii(r,{id:t.messageId},t.messageId,!0);case`error`:return Br(r,t.error);case`thinking_start`:return Vr(r);case`thinking`:return Hr(r,t.text);case`text`:return Ur(r,t.text);case`tool_call_started`:return Wr(r,t.callId,t.name);case`tool_call_completed`:return Gr(r,t.callId,t.arguments);case`tool_result`:return Kr(r,t.callId,t.result,t.isError);case`subagent_started`:return qr(r,t);case`subagent_text`:return Jr(r,t.callId,t.text);case`subagent_tool_call_started`:return Yr(r,t.callId,t.toolCallId,t.name);case`subagent_completed`:return Xr(r,t.callId,t.summary,t.toolCallCount);case`subagent_failed`:return Zr(r,t.callId,t.error);case`image_generation_started`:return Qr(r,t);case`image_generation_completed`:return $r(r,t);case`image_generation_failed`:return ei(r,t);case`continuation_transition`:return ti(r,t);case`system_event`:return ni(r,t.event,t.detail,n.pendingSubagentName);case`done`:return ri(r,t.messageId,t.generationTime);case`context_info`:case`fallback_notice`:return r;default:return t}}function zr(e){return{...e,userMessageUpdate:null,aiMessageUpdate:null}}function Br(e,t){let n=[...e.parts,{type:`error`,text:t}];return Q({...e,parts:n},{isGenerating:!1,text:e.text||t,parts:n})}function Vr(e){let t=[...e.parts,{type:`thinking`,text:``}];return Q({...e,parts:t,activeThinkingIndex:t.length-1},{parts:t})}function Hr(e,t){let n=e.activeThinkingIndex===null?Vr(e):e,r=n.activeThinkingIndex;if(r===null)return n;let i=n.parts[r],a=i?.type===`thinking`?i.text:``,o=ai(n.parts,r,{type:`thinking`,text:`${a}${t}`});return Q({...n,parts:o},{parts:o})}function Ur(e,t){let n=`${e.text}${t}`,r=oi(e.parts,n);return Q({...e,text:n,parts:r,activeThinkingIndex:null},{text:n,parts:r})}function Wr(e,t,n){let r=[...e.parts,{type:`tool_call`,toolCallId:t,name:n,args:{}}];return Q({...e,parts:r,activeThinkingIndex:null},{parts:r})}function Gr(e,t,n){let r=si(n),i=e.parts.map(e=>e.type===`tool_call`&&e.toolCallId===t?{...e,args:r}:e);return Q({...e,parts:i},{parts:i})}function Kr(e,t,n,r){let i=[...e.parts,{type:`tool_result`,toolCallId:t,content:JSON.stringify(n),isError:r}];return Q({...e,parts:i},{parts:i})}function qr(e,t){let n=li(e.parts,{type:`subagent_trace`,toolCallId:t.callId,agentId:t.agentId,agentName:t.agentName,status:`running`,summary:t.task,toolCallCount:0,messages:[],tools:[]});return Q({...e,parts:n},{parts:n})}function Jr(e,t,n){let r=ui(e.parts,t,e=>{let t=e.messages.at(-1),r=t?.role===`assistant`?[...e.messages.slice(0,-1),{role:`assistant`,text:`${t.text}${n}`}]:[...e.messages,{role:`assistant`,text:n}],i=r.at(-1)?.text;return{...e,...i?{lastMessage:i}:{},messages:r}});return Q({...e,parts:r},{parts:r})}function Yr(e,t,n,r){let i=ui(e.parts,t,e=>({...e,toolCallCount:e.toolCallCount+1,tools:[...e.tools,{callId:n,name:r}]}));return Q({...e,parts:i},{parts:i})}function Xr(e,t,n,r){let i=ui(e.parts,t,e=>({...e,status:`completed`,summary:n,toolCallCount:r,lastMessage:n}));return Q({...e,parts:i},{parts:i})}function Zr(e,t,n){let r=ui(e.parts,t,e=>({...e,status:`failed`,summary:n,error:n}));return Q({...e,parts:r},{parts:r})}function Qr(e,t){let n=ci(e.parts,{type:`generated_image`,imageId:t.imageId,toolCallId:t.toolCallId,status:`generating`,prompt:t.prompt});return Q({...e,parts:n,activeThinkingIndex:null},{parts:n})}function $r(e,t){let n=ci(e.parts,{type:`generated_image`,imageId:t.imageId,toolCallId:t.toolCallId,status:`completed`,prompt:t.prompt,imageUrl:t.imageUrl,modelName:t.modelName,generationTime:t.generationTime});return Q({...e,parts:n},{parts:n})}function ei(e,t){let n=ci(e.parts,{type:`generated_image`,imageId:t.imageId,toolCallId:t.toolCallId,status:`error`,prompt:t.prompt,error:t.error,modelName:t.modelName,generationTime:t.generationTime});return Q({...e,parts:n},{parts:n})}function ti(e,t){let n=[...e.parts,{type:`continuation_transition`,provider:t.provider,modelName:t.modelName,fromProvider:t.fromProvider,fromMode:t.fromMode,toMode:t.toMode,reasonCode:t.reasonCode,detail:t.detail,recovered:!1}];return Q({...e,parts:n},{parts:n})}function ni(e,t,n,r){let i=fi(t,n),a=i?di(e.parts,i,r):[...e.parts,{type:`system_event`,event:t,detail:n}];return Q({...e,parts:a},{parts:a})}function ri(e,t,n){return Q({...e,activeThinkingIndex:null},{isGenerating:!1,text:e.text,parts:[...e.parts],generationTime:n,...t?{id:t}:{}},t,t?!0:e.receivedServerAiMessageId)}function ii(e,t,n=e.currentUserMessageId,r=e.receivedServerUserMessageId){return{...e,currentUserMessageId:n,receivedServerUserMessageId:r,userMessageUpdate:{targetMessageId:e.currentUserMessageId,patch:t}}}function Q(e,t,n=e.currentAiMessageId,r=e.receivedServerAiMessageId){return{...e,currentAiMessageId:n,receivedServerAiMessageId:r,aiMessageUpdate:{targetMessageId:e.currentAiMessageId,patch:t}}}function ai(e,t,n){return e.map((e,r)=>r===t?n:e)}function oi(e,t){let n=e.findIndex(e=>e.type===`text`);return n===-1?[...e,{type:`text`,text:t}]:[...e.slice(0,n),...e.slice(n+1),{type:`text`,text:t}]}function si(e){try{return JSON.parse(e)}catch{return{}}}function ci(e,t){let n=e.findIndex(e=>e.type===`generated_image`&&e.imageId===t.imageId&&e.toolCallId===t.toolCallId);return n===-1?[...e,t]:ai(e,n,t)}function li(e,t){let n=e.findIndex(e=>e.type===`subagent_trace`&&e.toolCallId===t.toolCallId);return n===-1?[...e,t]:e.map((e,r)=>r!==n||e.type!==`subagent_trace`?e:{...t,messages:t.messages.length>0?t.messages:e.messages,tools:t.tools.length>0?t.tools:e.tools,events:Fr(e.events,t.events)})}function ui(e,t,n){return e.map(e=>e.type!==`subagent_trace`||e.toolCallId!==t?e:n(e))}function di(e,t,n){let r=e.findIndex(e=>e.type===`subagent_trace`&&e.toolCallId===t.callId),i={event:t.event,...t.attempt===void 0?{}:{attempt:t.attempt},...t.detail?{detail:t.detail}:{}};return r===-1?[...e,{type:`subagent_trace`,toolCallId:t.callId,agentId:t.agentId??t.callId,agentName:t.agentId??n,status:`running`,summary:``,toolCallCount:0,messages:[],tools:[],events:[i]}]:e.map((e,a)=>{if(a!==r||e.type!==`subagent_trace`)return e;let o=e.agentName===n&&t.agentId?t.agentId:e.agentName;return{...e,agentId:t.agentId??e.agentId,agentName:o,events:Fr(e.events,[i])}})}function fi(e,t){let n=Ir[e];if(!n)return null;let r=pi(t,`call`);if(!r)return null;let i=pi(t,`attempt`),a=i?Number(i):void 0,o=pi(t,`agent`)??pi(t,`target`);return{callId:r,event:n,...o?{agentId:o}:{},...a!==void 0&&Number.isFinite(a)?{attempt:a}:{},...t?{detail:t}:{}}}function pi(e,t){return e?.match(RegExp(`(?:^|\\s)${t}=([^\\s]+)`))?.[1]}async function mi(e,t,n){let r=await fetch(`${Qe()}/api/respond/stream`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e),credentials:`include`,signal:n});if(!r.ok){let e=z.errors.streamRequestFailed;try{let t=await r.json();t&&typeof t==`object`&&`error`in t&&typeof t.error==`string`&&(e=t.error)}catch{}throw Error(e)}if(!r.body)throw Error(z.errors.streamResponseNoBody);let i=r.body.getReader(),a=new TextDecoder,o=``;try{for(;;){let{value:e,done:n}=await i.read();if(n)break;o+=a.decode(e,{stream:!0});let r=o.split(`
|
|
24
|
-
`);o=r.pop()??``;for(let e of r)if(e.startsWith(`data: `))try{t(JSON.parse(e.slice(6)))}catch{}}}finally{i.releaseLock()}}function hi(e,t){return e.preferredSummaryModel===`current_model`?t:e.preferredSummaryModel}function gi(e,t,n){return e.autoRenameEnabled?n?!0:t!==void 0&&hn(t):!1}function _i(e,t){return e.preferredModel===`current_model`?t:e.preferredModel}async function vi(e,t,n){let r=_n(e,t.promptPrefixLength);if(!r||t.strategy===`prompt_prefix`)return r;try{return(await Mr({prompt:e,model:_i(t,n)})).title}catch{return r}}async function yi({chats:e,chatId:t,prompt:n,chatTitleSettings:r,currentModel:i}){let a=await vi(n,r,i);a&&await e.updateChatTitle(t,a)}function bi(e){yi(e).catch(e=>{console.warn(`[chat-title] Failed to auto rename chat`,e)})}function xi(e,t,n){t&&n(e,t.targetMessageId,t.patch)}function Si({chats:e,getActiveModel:t,systemPrompt:n,promptSettings:r,optimistic:i,thinkingEnabled:a,reasoningEffort:o,maxToolIterations:s,contextSettings:c,chatTitleSettings:l,currentChatId:u,getAgentSelection:d}){let f=F(),{t:p}=B(),m=p.chat.feed.subagentPendingName,h=jr({currentChatId:u}),{appendOptimisticMessages:g,updateOptimisticMessage:_}=i,[v,y]=(0,L.useState)(null),b=(0,L.useCallback)(e=>{e.contextInfo&&h.seedContextInfo(e.chatId,e.contextInfo)},[h]),x=(0,L.useCallback)(async t=>{await Promise.all([e.loadChats(),f.invalidateQueries({queryKey:q.list(t)})])},[e,f]),S=(0,L.useCallback)(async(i,u)=>{if(h.abortControllerRef.current)return;h.setIsGenerating(!0);let v=e.currentChatId,y=!1,b=e.currentChat?.title;if(!v){let t=await e.createChat();v=t.id,b=t.title,y=!0}let x=t(),S=d(),C=S.mode===`agent`?`agent`:`chat`;gi(l,b,y)&&bi({chats:e,chatId:v,prompt:i,chatTitleSettings:l,currentModel:x});let w=`optimistic-user-${crypto.randomUUID()}`,T=`optimistic-ai-${crypto.randomUUID()}`,ee={id:w,chatId:v,role:`user`,text:i,timestamp:Date.now(),interactionMode:C,...C===`agent`?{agentId:S.agentId,agentName:S.agentName}:{}},E={id:T,chatId:v,role:`ai`,text:``,timestamp:Date.now(),isGenerating:!0,modelName:x,interactionMode:C,...C===`agent`?{agentId:S.agentId,agentName:S.agentName}:{}};g(v,[ee,E]);let D=new AbortController;h.setAbortController(D);let O=Lr({userMessageId:w,aiMessageId:T});try{await mi({chatId:v,prompt:i,model:x,systemPrompt:n||void 0,promptSettings:r,thinkingEnabled:a,reasoningEffort:o,maxToolIterations:s,contextSettings:c,toolIntent:u,agentMode:S.mode,agentId:yr(S.agentId)?S.agentId:void 0},e=>{O=Rr(O,e,{pendingSubagentName:m}),xi(v,O.userMessageUpdate,_),xi(v,O.aiMessageUpdate,_),e.type===`context_info`&&h.updateContextInfo(v,{estimatedInputTokens:e.estimatedInputTokens,contextLimit:e.contextLimit,estimatedUsageRatio:e.estimatedUsageRatio,mode:e.mode,severity:e.severity}),e.type===`fallback_notice`&&h.setFallbackNotice({from:e.from,to:e.to,reason:e.reason})},D.signal)}catch(e){if(e instanceof Error&&e.name===`AbortError`)_(v,O.currentAiMessageId,{isGenerating:!1});else{console.error(`[respond]`,e);let t=e instanceof Error?e.message:p.errors.textGenerationFailed,n=O.parts.some(e=>e.type===`error`)?O.parts:[...O.parts,{type:`error`,text:t}];_(v,O.currentAiMessageId,{isGenerating:!1,text:O.text||t,parts:n})}}finally{h.setAbortController(null),h.setIsGenerating(!1),y&&e.loadChats(),(!O.receivedServerUserMessageId||!O.receivedServerAiMessageId)&&f.invalidateQueries({queryKey:q.list(v)})}},[e,t,n,r,p,g,_,f,a,o,s,c,l,d,h,m]),C=(0,L.useCallback)(async()=>{let n=e.currentChatId;if(!n)throw Error(`No active chat available for compaction.`);y(`compact`);try{b(await Nr(n,{model:hi(c,t())})),await x(n)}finally{y(null)}},[e.currentChatId,c,t,x,b]),w=(0,L.useCallback)(async()=>{let n=e.currentChatId;if(!n)throw Error(`No active chat available for summary handoff.`);y(`new-chat`);try{let r=await Pr(n,{model:hi(c,t())});b(r),await e.loadChats(),e.setCurrentChatId(r.chatId),await f.invalidateQueries({queryKey:q.list(r.chatId)})}finally{y(null)}},[e,c,t,f,b]);return{isGenerating:h.isGenerating,handleRespond:S,handleCompactCurrentChat:C,handleStartSummarizedChat:w,handleStop:h.handleStop,contextInfo:h.contextInfo,fallbackNotice:h.fallbackNotice,seedContextInfo:h.seedContextInfo,contextCache:h.contextCache,isContextActionPending:v!==null}}async function Ci(e,t){let{data:n,error:r}=await G.api.settings.providers({provider:e}).put(t);if(r)throw Error(W(r.value,z.settings.providers.saveError));return n}var wi={all:[`provider-settings`],list:()=>[...wi.all,`list`],detail:e=>[...wi.all,`detail`,e]};function Ti(){return N({queryKey:wi.list(),staleTime:3e4,queryFn:async()=>{let{data:e,error:t}=await G.api.settings.providers.get();if(t)throw Error(W(t.value,z.settings.providers.loadError));return e}})}function Ei(e){return N({queryKey:wi.detail(e),staleTime:3e4,queryFn:async()=>{let{data:t,error:n}=await G.api.settings.providers({provider:e}).get();if(n)throw Error(W(n.value,z.settings.providers.loadError));return t}})}function Di(e,t){e.setQueryData(wi.detail(t.provider),t),e.setQueryData(wi.list(),e=>e&&{providers:e.providers.map(e=>e.provider===t.provider?t:e)})}function Oi(){let{data:e,isLoading:t,error:n,refetch:r}=M(Ti());return{providers:e?.providers??[],isLoading:t,error:n,refetch:r}}function ki(e){let t=F(),{data:n,isLoading:r,error:i,refetch:a}=M({...Ei(e??``),enabled:!!e});return{descriptor:n??null,isLoading:r,error:i,refetch:a,invalidate:async()=>{e&&(await t.invalidateQueries({queryKey:wi.detail(e)}),await t.invalidateQueries({queryKey:wi.list()}))}}}function Ai(e){let t=F();return j({mutationFn:t=>Ci(e,t),onSuccess:e=>{Di(t,e)}})}async function ji(e){let{data:t,error:n}=await G.api.settings.app.put(e);if(n)throw Error(W(n.value,z.settings.app.saveError));return t}var Mi=300;function Ni(){return{id:`custom-${Date.now()}`,label:``,path:``,enabled:!1,injectionRole:`system`,sendFrequency:`first-turn`}}function Pi(){let e=F(),t=(0,L.useRef)(null),n=(0,L.useRef)(null),{data:r,isLoading:i,error:a}=M({...dr(),placeholderData:Z}),o=j({mutationFn:ji,onMutate:t=>{let n=e.getQueryData(ur.current())??Z;return e.setQueryData(ur.current(),t),{previousSettings:n}},onError:(t,n,r)=>{r?.previousSettings&&e.setQueryData(ur.current(),r.previousSettings)},onSuccess:t=>{e.setQueryData(ur.current(),Rn(t))}}),s=(0,L.useMemo)(()=>Rn(r??Z),[r]),c=(0,L.useCallback)(()=>{n.current&&=(clearTimeout(n.current),null);let e=t.current;e&&(t.current=null,o.mutate(e))},[o]);(0,L.useEffect)(()=>()=>{c()},[c]);let l=(0,L.useCallback)(r=>{let i=Rn(r(Rn(e.getQueryData(ur.current())??Z)));e.setQueryData(ur.current(),i),t.current=i,n.current&&clearTimeout(n.current),n.current=setTimeout(()=>{c()},Mi)},[c,e]),u=(0,L.useCallback)(e=>{l(t=>({...t,promptSettings:e(t.promptSettings)}))},[l]),d=(0,L.useCallback)(e=>{l(t=>({...t,contextSettings:{...t.contextSettings,...e}}))},[l]),f=(0,L.useCallback)(e=>{l(t=>({...t,chatTitleSettings:In({...t.chatTitleSettings,...e})}))},[l]),p=(0,L.useCallback)(e=>{l(t=>({...t,multiAgentSettings:{...t.multiAgentSettings,...e}}))},[l]),m=(0,L.useCallback)(e=>{u(t=>({...t,textSystemPrompt:e}))},[u]),h=(0,L.useCallback)(e=>{u(t=>({...t,imageSystemPrompt:e}))},[u]),g=(0,L.useCallback)((e,t)=>{u(n=>e===`agentsMd`||e===`claudeMd`?{...n,[e]:{...n[e],...t}}:{...n,customRules:n.customRules.map(n=>n.id===e?{...n,...t}:n)})},[u]),_=(0,L.useCallback)(()=>{u(e=>({...e,customRules:[...e.customRules,Ni()]}))},[u]),v=(0,L.useCallback)(e=>{u(t=>({...t,customRules:t.customRules.filter(t=>t.id!==e)}))},[u]),y=(0,L.useCallback)(()=>{l(()=>Z)},[l]);return{isLoading:i,error:a,globalTextSystemPrompt:s.promptSettings.textSystemPrompt,setGlobalTextSystemPrompt:m,globalImageSystemPrompt:s.promptSettings.imageSystemPrompt,setGlobalImageSystemPrompt:h,promptSettings:s.promptSettings,setTextSystemPrompt:m,setImageSystemPrompt:h,updateRuleFileSetting:g,addCustomRule:_,removeCustomRule:v,globalImageQuality:s.globalImageQuality,setGlobalImageQuality:e=>{l(t=>({...t,globalImageQuality:e}))},thinkingEnabled:s.thinkingEnabled,setThinkingEnabled:e=>{l(t=>({...t,thinkingEnabled:e}))},reasoningEffort:s.reasoningEffort,setReasoningEffort:e=>{l(t=>({...t,reasoningEffort:e}))},maxToolIterations:s.maxToolIterations,setMaxToolIterations:e=>{l(t=>({...t,maxToolIterations:Pn(e)}))},contextSettings:s.contextSettings,multiAgentSettings:s.multiAgentSettings,chatTitleSettings:s.chatTitleSettings,setContextCompactionBehavior:e=>d({compactionBehavior:e}),setContextWarningThreshold:e=>d({warningThreshold:e}),setContextDangerThreshold:e=>d({dangerThreshold:e}),setContextHardStopThreshold:e=>d({hardStopThreshold:e}),setPreferredSummaryModel:e=>d({preferredSummaryModel:e}),setProviderCompactionEnabled:e=>d({providerCompactionEnabled:e}),setMultiAgentEnabled:e=>p({enabled:e}),setChatDelegationEnabled:e=>p({chatDelegationEnabled:e}),setTraceVisibility:e=>p({traceVisibility:e}),setMaxDelegationDepth:e=>p({maxDepth:e}),setMaxSubagentCalls:e=>p({maxSubagentCalls:e}),setSubagentTimeoutMs:e=>p({timeoutMs:e}),setDefaultSubagentMaxTurns:e=>p({defaultMaxTurns:e}),setChatAutoRenameEnabled:e=>f({autoRenameEnabled:e}),setChatTitleStrategy:e=>f({strategy:e}),setChatTitlePromptPrefixLength:e=>f({promptPrefixLength:e}),setPreferredChatTitleModel:e=>f({preferredModel:e}),resetSettings:y}}var Fi={all:[`model-catalog`]},Ii=()=>N({queryKey:Fi.all,queryFn:async()=>{let{data:e,error:t}=await G.api.settings.models.get();if(t)throw Error(W(t.value));return e},staleTime:1e3*60*55,gcTime:1e3*60*60*2});function Li(){let e=F(),{data:t,isLoading:n,error:r,refetch:i}=M(Ii()),a=(0,L.useCallback)(async()=>{await i()},[i]),o=(0,L.useCallback)(t=>{e.setQueryData(Fi.all,t)},[e]);return{catalog:t||Pt,isLoading:n,error:r?r.message:null,refreshCatalog:a,setCatalog:o}}function Ri(){let[e,t]=(0,L.useState)(!1),[n,r]=(0,L.useState)(null),i=fr(),a=Li(),o=Pi(),s=M(an()),c=h(),l=pr(),u=(0,L.useMemo)(()=>a.catalog.textModels,[a.catalog.textModels]),d=(0,L.useMemo)(()=>i.chats.find(e=>e.id===i.currentChatId)??null,[i.chats,i.currentChatId]),f=(0,L.useMemo)(()=>s.data?.agents??[],[s.data?.agents]),p=(0,L.useMemo)(()=>({mode:d?.lastUsedMode===`agent`?`agent`:`chat`,agentId:d?.selectedAgentId??`default`}),[d?.lastUsedMode,d?.selectedAgentId]),m=n?.chatId===i.currentChatId?n:p,g=m.mode,_=m.agentId,v=(0,L.useMemo)(()=>f.find(e=>e.id===_)??null,[f,_]),y=(0,L.useMemo)(()=>Lt(d?.textModel,void 0,u),[u,d?.textModel]),b=(0,L.useCallback)(()=>y,[y]),x=a.catalog.status!==`ready`||u.length===0,S=(0,L.useMemo)(()=>d?.textModel?u.find(e=>e.modelId===d.textModel)?.provider??null:null,[u,d?.textModel]),{descriptor:C}=ki(S),w=C?.settings.thinkingEnabled??o.thinkingEnabled,T=C?.settings.reasoningEffort??o.reasoningEffort,ee=C?.settings.maxToolIterations??o.maxToolIterations,E=Si({chats:i,getActiveModel:b,systemPrompt:o.globalTextSystemPrompt,promptSettings:o.promptSettings,optimistic:l,thinkingEnabled:w,reasoningEffort:T,maxToolIterations:ee,contextSettings:o.contextSettings,chatTitleSettings:o.chatTitleSettings,currentChatId:i.currentChatId,getAgentSelection:()=>({mode:g,agentId:g===`agent`?_:`chat`,agentName:g===`agent`?v?.name:void 0})}),D=i.chats,{seedContextInfo:O}=E;(0,L.useEffect)(()=>{for(let e of D)`contextInfo`in e&&e.contextInfo&&O(e.id,e.contextInfo)},[D,O]);let k=E.isGenerating,A=(0,L.useCallback)(async()=>{await i.createChat(),await c({to:`/`})},[i,c]),te=(0,L.useCallback)(async(e,t)=>{await i.updateChatModel(e,`textModel`,t)},[i]),ne=(0,L.useCallback)(e=>{i.selectChat(e),c({to:`/`})},[i,c]),re=(0,L.useCallback)(async(e,t)=>{await i.updateChatTitle(e,t)},[i]),ie=(0,L.useCallback)((e,t)=>{r({chatId:i.currentChatId,mode:e,agentId:t}),i.currentChatId&&i.updateChatAgentSelection(i.currentChatId,{lastUsedMode:e,selectedAgentId:e===`agent`?t:`chat`})},[i]),ae=(0,L.useCallback)(e=>{ie(e,e===`agent`?_||`default`:`chat`)},[ie,_]),oe=(0,L.useCallback)(e=>{ie(`agent`,e)},[ie]),se=(0,L.useCallback)(async e=>{await i.deleteChat(e)},[i]),ce=(0,L.useCallback)(e=>{c({to:{chat:`/`,gallery:`/gallery`,settings:`/settings`,studio:`/studio`}[e]})},[c]),{handleRespond:le}=E,ue=(0,L.useCallback)(n=>{le(n,e?`image_generation_requested`:void 0),t(!1)},[le,e]);return{imageToolIntent:e,agentExecutionMode:g,selectedAgentId:_,agents:f,isAgentListLoading:s.isLoading,isGenerating:k,chats:i.chats,currentChatId:i.currentChatId,catalog:a.catalog,settings:o,activeModels:u,activeModel:y,isModelSelectorDisabled:x,contextInfo:E.contextInfo,fallbackNotice:E.fallbackNotice,seedContextInfo:E.seedContextInfo,contextCache:E.contextCache,isContextActionPending:E.isContextActionPending,lockedProvider:S,setImageToolIntent:t,setAgentExecutionMode:ae,setSelectedAgentId:oe,handleNewChat:A,handleUpdateChatModel:te,handleUpdateChatTitle:re,handleDeleteChat:se,handleSelectChat:ne,handleNavigate:ce,handleSubmit:ue,handleStop:()=>{E.handleStop(),t(!1)},handleCompactCurrentChat:E.handleCompactCurrentChat,handleStartSummarizedChat:E.handleStartSummarizedChat,refreshCatalog:a.refreshCatalog}}var zi=(0,L.createContext)(null);function Bi(){let e=(0,L.use)(zi);if(!e)throw Error(`useApp must be used within AppContext`);return e}var Vi=T(`/_authenticated`)({beforeLoad:({context:e,location:t})=>{e.auth.isAuthenticated||re({to:`/login`,search:{redirect:t.href},throw:!0})},loader:async({context:{queryClient:e}})=>{let t=e.ensureQueryData(Jt());await Promise.all([t,e.ensureQueryData(Ii()),e.ensureQueryData(dr()),e.ensureQueryData(an())]);let n=(await t)[0]?.id;n&&await e.prefetchInfiniteQuery(tn(n))},component:Hi});function Hi(){let{auth:e}=Vi.useRouteContext(),t=h(),n=Ri(),r=O().location.pathname,[i,a]=(0,L.useState)(!1);if(!e.isAuthenticated)return t({to:`/login`}),null;let o=`chat`;return r.includes(`/gallery`)&&(o=`gallery`),r.includes(`/settings`)&&(o=`settings`),r.includes(`/studio`)&&(o=`studio`),(0,R.jsx)(zi,{value:n,children:(0,R.jsxs)(Gt,{currentPage:o,onNavigate:e=>n.handleNavigate(e),chats:n.chats,currentChatId:n.currentChatId,onSelectChat:n.handleSelectChat,onUpdateChatTitle:(e,t)=>void n.handleUpdateChatTitle(e,t),onDeleteChat:e=>void n.handleDeleteChat(e),onNewChat:()=>void n.handleNewChat(),contextCache:n.contextCache,isMobileSidebarOpen:i,onMobileSidebarClose:()=>a(!1),children:[(0,R.jsx)(Bt,{activeModel:n.activeModel,activeModels:n.activeModels,isModelSelectorDisabled:n.isModelSelectorDisabled,currentChatId:n.currentChatId,currentPage:o,onUpdateChatModel:(e,t)=>void n.handleUpdateChatModel(e,t),onSetPageModel:e=>{n.currentChatId&&n.handleUpdateChatModel(n.currentChatId,e)},onNewChat:()=>void n.handleNewChat(),onNavigateToSettings:()=>n.handleNavigate(`settings`),modelCatalog:n.catalog,lockedProvider:n.lockedProvider,onMobileMenuToggle:()=>a(e=>!e)}),(0,R.jsx)(`div`,{className:`flex-1 min-h-0 overflow-hidden flex flex-col`,children:(0,R.jsx)(L.Suspense,{fallback:(0,R.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,R.jsx)(Ht,{size:`lg`})}),children:(0,R.jsx)(we,{})})})]})})}var Ui=24;function Wi(e){return e.scrollHeight-e.scrollTop-e.clientHeight<=Ui}function Gi(e){return e?.parts?.filter(e=>e.type===`generated_image`).map(e=>`${e.imageId}:${e.status}:${e.imageUrl??``}`).join(`,`)??``}function Ki(e,t){let[n,r]=(0,L.useState)(!1),i=(0,L.useRef)(null),a=(0,L.useRef)(!0),o=(0,L.useRef)(null),s=(0,L.useRef)(!0),c=(0,L.useRef)(e),l=t.at(-1),u=l?.id??null,d=l?.isGenerating??!1,f=l?.parts?.length??0,p=l?.text?.length??0,m=Gi(l);return(0,L.useEffect)(()=>{c.current!==e&&(c.current=e,a.current=!0,s.current=!0)},[e]),(0,L.useLayoutEffect)(()=>{let e=i.current;!s.current||!e||t.length===0||(e.scrollTop=e.scrollHeight,s.current=!1)},[e,t.length]),(0,L.useLayoutEffect)(()=>{d&&o.current!==u&&(a.current=!0);let e=i.current;!d||!e||!a.current||(e.scrollTop=e.scrollHeight)},[u,d,f,p,m]),(0,L.useEffect)(()=>{o.current=d?u:null},[u,d]),{parentRef:i,showScrollButton:n,handleScroll:(0,L.useCallback)(e=>{let t=Wi(e.currentTarget);a.current=t,r(!t)},[]),scrollToBottom:(0,L.useCallback)(()=>{let e=i.current;e&&(a.current=!0,r(!1),e.scrollTo({top:e.scrollHeight,behavior:`smooth`}))},[])}}function qi(e,t){return`${Ji(e)||`mangostudio`}-art-${Ji(String(t))||String(Date.now())}.png`}function Ji(e){return e.trim().replace(/[^a-zA-Z0-9_-]+/g,`-`).replace(/^-+|-+$/g,``)}function Yi(e,t){let n=document.createElement(`a`);n.href=e,n.download=qi(t,Date.now()),document.body.appendChild(n),n.click(),document.body.removeChild(n)}function Xi({msg:e}){let{t}=B();return(0,R.jsxs)(`div`,{className:`space-y-6`,children:[e.styleParams&&e.styleParams.length>0&&(0,R.jsxs)(`div`,{className:`bg-surface-container-low p-6 rounded-xl border border-outline-variant/5`,children:[(0,R.jsxs)(`h3`,{className:`font-headline text-sm font-bold mb-4 flex items-center gap-2 text-on-surface`,children:[(0,R.jsx)(P,{className:`text-primary`,size:16}),t.chat.feed.styleParams]}),(0,R.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:e.styleParams.map(e=>(0,R.jsx)(`span`,{className:`px-3 py-1 bg-surface-container-high text-on-surface-variant text-[10px] font-bold rounded-sm uppercase tracking-wider`,children:e},e))})]}),e.text&&!e.imageUrl&&(0,R.jsx)(`div`,{className:`bg-error/10 border border-error/20 p-4 rounded-xl text-error text-sm font-body`,children:e.text}),!e.text&&!e.imageUrl&&(0,R.jsx)(`div`,{className:`bg-surface-container-lowest p-6 rounded-xl border border-outline-variant/5`,children:(0,R.jsx)(`p`,{className:`font-body text-xs text-on-surface-variant leading-relaxed`,children:t.chat.feed.neuralDiffusionPath})})]})}function Zi({msg:e}){let{t}=B(),[n,r]=(0,L.useState)(!1),i=e.imageUrl;return(0,R.jsxs)(`div`,{className:`flex flex-col gap-4 w-full`,children:[e.generationTime&&(0,R.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-on-surface-variant bg-surface-container-lowest py-2 px-3 rounded-lg w-fit border border-outline-variant/10`,children:[(0,R.jsx)(P,{size:12,className:`text-primary`}),(0,R.jsx)(`span`,{children:t.chat.feed.thoughtFor.replace(`{time}`,e.generationTime)})]}),(0,R.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 gap-6 items-start w-full`,children:[i&&(0,R.jsx)(`div`,{className:`group relative bg-surface-container-lowest rounded-xl overflow-hidden aspect-[4/5] shadow-2xl transition-transform duration-500 hover:scale-[1.01]`,children:n?(0,R.jsxs)(`div`,{className:`w-full h-full flex flex-col items-center justify-center text-on-surface-variant/50 p-6 text-center bg-surface-container-high`,children:[(0,R.jsx)(Te,{size:48,className:`mb-4 opacity-50`}),(0,R.jsx)(`p`,{className:`font-headline font-bold mb-2`,children:t.chat.feed.imageUnavailable}),(0,R.jsx)(`p`,{className:`text-xs font-body`,children:t.chat.feed.imageUnavailableHint})]}):(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`img`,{src:i,alt:`Generated`,className:`w-full h-full object-cover grayscale-[20%] group-hover:grayscale-0 transition-[filter] duration-700`,decoding:`async`,onError:()=>r(!0)}),(0,R.jsxs)(`div`,{className:`absolute bottom-4 left-4 right-4 glass-panel rounded-xl p-3 flex justify-between items-center translate-y-12 opacity-0 group-hover:translate-y-0 group-hover:opacity-100 transition-all duration-300`,children:[(0,R.jsxs)(`div`,{className:`flex gap-2`,children:[(0,R.jsx)(`button`,{type:`button`,onClick:()=>Yi(i,t.common.downloadFilenamePrefix),className:`w-9 h-9 rounded-lg flex items-center justify-center bg-surface-container-highest/40 hover:bg-primary/20 text-on-surface transition-colors`,title:t.chat.feed.download,children:(0,R.jsx)(S,{size:16})}),(0,R.jsx)(`button`,{type:`button`,className:`w-9 h-9 rounded-lg flex items-center justify-center bg-surface-container-highest/40 hover:bg-primary/20 text-on-surface transition-colors`,title:t.chat.feed.saveToGallery,children:(0,R.jsx)(a,{size:16})})]}),(0,R.jsx)(`button`,{type:`button`,className:`px-4 py-1.5 rounded-lg bg-primary/10 hover:bg-primary/20 text-primary text-xs font-bold transition-colors`,children:t.chat.feed.regenerate})]})]})}),(0,R.jsx)(Xi,{msg:e})]})]})}var Qi=`modulepreload`,$i=function(e){return`/`+e},ea={},ta=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}r=o(t.map(t=>{if(t=$i(t,n),t in ea)return;ea[t]=!0;let r=t.endsWith(`.css`),i=r?`[rel="stylesheet"]`:``;if(n)for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${t}"]${i}`))return;let o=document.createElement(`link`);if(o.rel=r?`stylesheet`:Qi,r||(o.as=`script`),o.crossOrigin=``,o.href=t,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),r)return new Promise((e,n)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},na=(0,L.lazy)(()=>ta(()=>import(`./MarkdownContentRenderer-D5X8pP9B.js`).then(e=>({default:e.MarkdownContentRenderer})),__vite__mapDeps([0,1,2,3])));function ra(e){return(0,R.jsx)(L.Suspense,{fallback:(0,R.jsx)(ia,{...e}),children:(0,R.jsx)(na,{...e})})}function ia({content:e,className:t}){return(0,R.jsx)(`div`,{className:`markdown-content ${t??``}`,children:e})}function aa(e,t){let n=t.chat.continuation.title;switch(e){case`provider_changed`:return n.providerChanged;case`model_changed`:return n.modelChanged;case`system_prompt_changed`:return n.systemPromptChanged;case`toolset_changed`:return n.toolsetChanged;case`agent_changed`:return n.agentChanged;case`agent_runtime_changed`:return n.agentRuntimeChanged;case`cursor_expired`:return n.cursorExpired;case`cursor_invalid`:return n.cursorInvalid;case`tool_result_cursor_loss`:return n.toolResultCursorLoss;case`envelope_malformed`:return n.envelopeMalformed}}function oa(e,t){return e.replace(/{provider}/g,t.provider).replace(/{model}/g,t.model).replace(/{fromProvider}/g,t.fromProvider).replace(/{fromMode}/g,t.fromMode).replace(/{toMode}/g,t.toMode)}var sa=e=>e===`tool_result_cursor_loss`;function ca({provider:e,modelName:t,fromProvider:n,fromMode:r,toMode:i,reasonCode:a,recovered:o}){let{t:s}=B(),c=oa(aa(a,s),{provider:e,model:t,fromProvider:n??e,fromMode:r,toMode:i}),l=o?s.chat.continuation.recovered:s.chat.continuation.notRecovered,u=sa(a),d=u?`text-error/80`:`text-on-surface-variant/60`,f=u?`bg-error/30`:`bg-outline-variant/20`;return(0,R.jsxs)(`div`,{className:`flex items-center gap-2 py-2 text-xs my-1 ${d}`,children:[(0,R.jsx)(`div`,{className:`flex-1 h-px ${f}`}),(0,R.jsxs)(`span`,{className:`font-medium whitespace-nowrap`,children:[c,` `,l]}),(0,R.jsx)(`div`,{className:`flex-1 h-px ${f}`})]})}var la=`1 / 1`;function ua({src:e,alt:t,aspectRatio:n=la,objectFit:r=`cover`,className:i,imageClassName:a,onLoadError:o}){let[s,c]=(0,L.useState)(!1),l=r===`contain`?`object-contain`:`object-cover`;return(0,R.jsxs)(`div`,{className:`relative overflow-hidden ${i??``}`,style:{aspectRatio:n},children:[(0,R.jsx)(`img`,{src:e,alt:t,className:`absolute inset-0 w-full h-full ${l} transition-opacity duration-300 ${s?`opacity-100`:`opacity-0`} ${a??``}`,decoding:`async`,onLoad:()=>c(!0),onError:o}),!s&&(0,R.jsx)(`div`,{"aria-hidden":!0,className:`absolute inset-0 animate-pulse bg-surface-container-highest/40`})]})}function da({part:e}){let{t}=B(),[r,o]=(0,L.useState)(!1),[s,c]=(0,L.useState)(!1),l=e.prompt&&e.prompt.length>80?`${e.prompt.slice(0,80)}\u2026`:e.prompt,d=e.generationTime?t.chat.feed.thoughtFor.replace(`{time}`,e.generationTime):null,f=e.modelName??null;if(e.status===`completed`&&e.imageUrl&&!r){let r=e.imageUrl;return(0,R.jsxs)(`div`,{className:`bg-surface-container-lowest rounded-2xl overflow-hidden border border-outline-variant/10 shadow-sm max-w-md`,children:[(0,R.jsxs)(`button`,{type:`button`,onClick:()=>c(e=>!e),className:`w-full flex items-center gap-2.5 px-4 py-2.5 hover:bg-surface-container-high/50 transition-colors cursor-pointer`,children:[(0,R.jsx)(u,{size:14,className:`text-primary shrink-0`}),(0,R.jsx)(`span`,{className:`text-xs text-on-surface-variant/70 font-body truncate flex-1 text-left`,children:l||t.chat.feed.generatedImageAlt}),(0,R.jsx)(b,{size:14,className:`text-on-surface-variant/40 shrink-0 transition-transform duration-300 ${s?``:`rotate-180`}`})]}),(0,R.jsx)(n,{initial:!1,children:!s&&(0,R.jsxs)(i.div,{initial:{opacity:0,height:0},animate:{opacity:1,height:`auto`},exit:{opacity:0,height:0},transition:{duration:.2,ease:`easeOut`},children:[(f||d)&&(0,R.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap px-4 pb-2`,children:[f&&(0,R.jsx)(`span`,{className:`text-[10px] text-on-surface-variant/60 font-mono bg-surface-container-high px-2 py-0.5 rounded-full`,children:f}),d&&(0,R.jsxs)(`span`,{className:`flex items-center gap-1 text-[10px] text-on-surface-variant/60`,children:[(0,R.jsx)(P,{size:10,className:`text-primary/50`}),d]})]}),(0,R.jsxs)(`div`,{className:`group relative`,children:[(0,R.jsx)(ua,{src:r,alt:t.chat.feed.generatedImageAlt,className:`bg-surface-container-high`,objectFit:`contain`,onLoadError:()=>o(!0)}),(0,R.jsx)(`div`,{className:`absolute bottom-3 left-3 right-3 glass-panel rounded-xl p-2 flex justify-between items-center translate-y-12 opacity-0 group-hover:translate-y-0 group-hover:opacity-100 transition-all duration-300`,children:(0,R.jsxs)(`div`,{className:`flex gap-2`,children:[(0,R.jsx)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),Yi(r,t.common.downloadFilenamePrefix)},className:`w-8 h-8 rounded-lg flex items-center justify-center bg-surface-container-highest/40 hover:bg-primary/20 text-on-surface transition-colors`,title:t.chat.feed.download,children:(0,R.jsx)(S,{size:14})}),(0,R.jsx)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),Yi(r,t.common.downloadFilenamePrefix)},className:`w-8 h-8 rounded-lg flex items-center justify-center bg-surface-container-highest/40 hover:bg-primary/20 text-on-surface transition-colors`,title:t.chat.feed.saveToGallery,children:(0,R.jsx)(a,{size:14})})]})})]})]},`image-content`)})]})}return e.status===`completed`&&r?(0,R.jsxs)(`div`,{className:`bg-surface-container-low rounded-2xl border border-outline-variant/10 p-6 flex flex-col items-center gap-3 text-on-surface-variant/50 max-w-md`,children:[(0,R.jsx)(Te,{size:32}),(0,R.jsx)(`span`,{className:`text-xs font-body`,children:t.chat.feed.imageUnavailable}),f&&(0,R.jsx)(`span`,{className:`text-[10px] text-on-surface-variant/40 font-mono`,children:f})]}):e.status===`error`?(0,R.jsxs)(`div`,{className:`bg-error/10 border border-error/20 p-4 rounded-xl flex items-start gap-3 max-w-md`,children:[(0,R.jsx)(x,{size:16,className:`text-error shrink-0 mt-0.5`}),(0,R.jsxs)(`div`,{className:`flex flex-col gap-1 min-w-0`,children:[(0,R.jsx)(`span`,{className:`text-error text-xs font-bold`,children:t.chat.feed.imageGenerationFailed}),e.error&&(0,R.jsx)(`span`,{className:`text-error/70 text-[11px] font-body leading-relaxed`,children:e.error}),(f||d)&&(0,R.jsx)(`span`,{className:`text-error/40 text-[10px] font-mono mt-0.5`,children:[f,d].filter(Boolean).join(` · `)})]})]}):(0,R.jsxs)(`div`,{className:`bg-surface-container-lowest border border-outline-variant/10 rounded-2xl p-5 flex flex-col gap-3 max-w-md animate-pulse`,children:[(0,R.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,R.jsx)(`div`,{className:`w-10 h-10 rounded-xl bg-surface-container-high flex items-center justify-center shrink-0`,children:(0,R.jsx)(u,{size:20,className:`text-primary/50 shrink-0`})}),(0,R.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,R.jsx)(`span`,{className:`text-xs font-medium text-on-surface`,children:f?t.chat.feed.modelStatus.replace(`{status}`,t.chat.feed.statusGenerating).replace(`{model}`,()=>f):t.chat.feed.generatingImage}),(0,R.jsx)(`span`,{className:`text-[10px] text-on-surface-variant/50 font-body`,children:e.prompt})]})]}),(0,R.jsx)(`div`,{className:`aspect-square bg-surface-container-high rounded-xl`}),(0,R.jsx)(`div`,{className:`h-1 w-full bg-surface-container-high rounded-full overflow-hidden`,children:(0,R.jsx)(`div`,{className:`h-full bg-primary w-1/3 rounded-full animate-[slide_1s_ease-in-out_infinite_alternate]`})})]})}function fa(e,t,n){switch(e){case`cursor_lost`:return{label:n.chat.cursorLost.replace(`{detail}`,t??``),severity:`info`};case`tool_loop_exhausted`:return{label:t?`${n.chat.toolLoopExhausted} — ${t}`:n.chat.toolLoopExhausted,severity:`error`};case`chat_compacted`:return{label:n.chat.systemEvents.chatCompacted,severity:`info`};case`summary_handoff`:return{label:n.chat.systemEvents.summaryHandoff,severity:`info`};default:return{label:t??e,severity:`info`}}}function pa({event:e,detail:t}){let{t:n}=B(),{label:r,severity:i}=fa(e,t,n),a=i===`error`?`text-error/80`:`text-on-surface-variant/60`,o=i===`error`?`bg-error/30`:`bg-outline-variant/20`;return(0,R.jsxs)(`div`,{className:`flex items-center gap-2 py-2 text-xs my-1 ${a}`,children:[(0,R.jsx)(`div`,{className:`flex-1 h-px ${o}`}),(0,R.jsx)(`span`,{className:`font-medium whitespace-nowrap`,children:r}),(0,R.jsx)(`div`,{className:`flex-1 h-px ${o}`})]})}var ma=new Map;function ha(e){return e.scrollHeight-e.scrollTop-e.clientHeight<=24}function ga({messageId:e,text:t,isStreaming:r}){let{t:a}=B(),o=(0,L.useRef)(ma.get(e)??{expanded:r,scrollTop:0,shouldAutoFollow:r}),[s,c]=(0,L.useState)(o.current.expanded),l=(0,L.useRef)(null),u=(0,L.useRef)(o.current),d=(0,L.useRef)(r),f=(0,L.useCallback)(t=>{u.current={...u.current,...t},ma.set(e,u.current)},[e]);return(0,L.useEffect)(()=>{!d.current&&r&&(c(!0),f({expanded:!0,shouldAutoFollow:!0})),d.current&&!r&&(c(!1),f({expanded:!1,shouldAutoFollow:!1})),d.current=r},[r,f]),(0,L.useLayoutEffect)(()=>{if(!s||!l.current)return;let e=l.current,t=Math.max(0,e.scrollHeight-e.clientHeight);if(r&&u.current.shouldAutoFollow){e.scrollTop=t,f({scrollTop:e.scrollTop});return}e.scrollTop=Math.min(u.current.scrollTop,t)},[s,r,t,f]),(0,R.jsxs)(`div`,{className:`mb-3`,children:[(0,R.jsxs)(`button`,{type:`button`,onClick:()=>{let e=!s;c(e),f({expanded:e})},className:`glass-surface flex items-center gap-2 text-xs text-on-surface-variant/70
|
|
24
|
+
`);o=r.pop()??``;for(let e of r)if(e.startsWith(`data: `))try{t(JSON.parse(e.slice(6)))}catch{}}}finally{i.releaseLock()}}function hi(e,t){return e.preferredSummaryModel===`current_model`?t:e.preferredSummaryModel}function gi(e,t,n){return e.autoRenameEnabled?n?!0:t!==void 0&&hn(t):!1}function _i(e,t){return e.preferredModel===`current_model`?t:e.preferredModel}async function vi(e,t,n){let r=_n(e,t.promptPrefixLength);if(!r||t.strategy===`prompt_prefix`)return r;try{return(await Mr({prompt:e,model:_i(t,n)})).title}catch{return r}}async function yi({chats:e,chatId:t,prompt:n,chatTitleSettings:r,currentModel:i}){let a=await vi(n,r,i);a&&await e.updateChatTitle(t,a)}function bi(e){yi(e).catch(e=>{console.warn(`[chat-title] Failed to auto rename chat`,e)})}function xi(e,t,n){t&&n(e,t.targetMessageId,t.patch)}function Si({chats:e,getActiveModel:t,systemPrompt:n,promptSettings:r,optimistic:i,thinkingEnabled:a,reasoningEffort:o,maxToolIterations:s,contextSettings:c,chatTitleSettings:l,currentChatId:u,getAgentSelection:d}){let f=F(),{t:p}=B(),m=p.chat.feed.subagentPendingName,h=jr({currentChatId:u}),{appendOptimisticMessages:g,updateOptimisticMessage:_}=i,[v,y]=(0,L.useState)(null),b=(0,L.useCallback)(e=>{e.contextInfo&&h.seedContextInfo(e.chatId,e.contextInfo)},[h]),x=(0,L.useCallback)(async t=>{await Promise.all([e.loadChats(),f.invalidateQueries({queryKey:q.list(t)})])},[e,f]),S=(0,L.useCallback)(async(i,u)=>{if(h.abortControllerRef.current)return;h.setIsGenerating(!0);let v=e.currentChatId,y=!1,b=e.currentChat?.title;if(!v){let t=await e.createChat();v=t.id,b=t.title,y=!0}let x=t(),S=d(),C=S.mode===`agent`?`agent`:`chat`;gi(l,b,y)&&bi({chats:e,chatId:v,prompt:i,chatTitleSettings:l,currentModel:x});let w=`optimistic-user-${crypto.randomUUID()}`,T=`optimistic-ai-${crypto.randomUUID()}`,ee={id:w,chatId:v,role:`user`,text:i,timestamp:Date.now(),interactionMode:C,...C===`agent`?{agentId:S.agentId,agentName:S.agentName}:{}},E={id:T,chatId:v,role:`ai`,text:``,timestamp:Date.now(),isGenerating:!0,modelName:x,interactionMode:C,...C===`agent`?{agentId:S.agentId,agentName:S.agentName}:{}};g(v,[ee,E]);let D=new AbortController;h.setAbortController(D);let O=Lr({userMessageId:w,aiMessageId:T});try{await mi({chatId:v,prompt:i,model:x,systemPrompt:n||void 0,promptSettings:r,thinkingEnabled:a,reasoningEffort:o,maxToolIterations:s,contextSettings:c,toolIntent:u,agentMode:S.mode,agentId:yr(S.agentId)?S.agentId:void 0},e=>{O=Rr(O,e,{pendingSubagentName:m}),xi(v,O.userMessageUpdate,_),xi(v,O.aiMessageUpdate,_),e.type===`context_info`&&h.updateContextInfo(v,{estimatedInputTokens:e.estimatedInputTokens,contextLimit:e.contextLimit,estimatedUsageRatio:e.estimatedUsageRatio,mode:e.mode,severity:e.severity}),e.type===`fallback_notice`&&h.setFallbackNotice({from:e.from,to:e.to,reason:e.reason})},D.signal)}catch(e){if(e instanceof Error&&e.name===`AbortError`)_(v,O.currentAiMessageId,{isGenerating:!1});else{console.error(`[respond]`,e);let t=e instanceof Error?e.message:p.errors.textGenerationFailed,n=O.parts.some(e=>e.type===`error`)?O.parts:[...O.parts,{type:`error`,text:t}];_(v,O.currentAiMessageId,{isGenerating:!1,text:O.text||t,parts:n})}}finally{h.setAbortController(null),h.setIsGenerating(!1),y&&e.loadChats(),(!O.receivedServerUserMessageId||!O.receivedServerAiMessageId)&&f.invalidateQueries({queryKey:q.list(v)})}},[e,t,n,r,p,g,_,f,a,o,s,c,l,d,h,m]),C=(0,L.useCallback)(async()=>{let n=e.currentChatId;if(!n)throw Error(`No active chat available for compaction.`);y(`compact`);try{b(await Nr(n,{model:hi(c,t())})),await x(n)}finally{y(null)}},[e.currentChatId,c,t,x,b]),w=(0,L.useCallback)(async()=>{let n=e.currentChatId;if(!n)throw Error(`No active chat available for summary handoff.`);y(`new-chat`);try{let r=await Pr(n,{model:hi(c,t())});b(r),await e.loadChats(),e.setCurrentChatId(r.chatId),await f.invalidateQueries({queryKey:q.list(r.chatId)})}finally{y(null)}},[e,c,t,f,b]);return{isGenerating:h.isGenerating,handleRespond:S,handleCompactCurrentChat:C,handleStartSummarizedChat:w,handleStop:h.handleStop,contextInfo:h.contextInfo,fallbackNotice:h.fallbackNotice,seedContextInfo:h.seedContextInfo,contextCache:h.contextCache,isContextActionPending:v!==null}}async function Ci(e,t){let{data:n,error:r}=await G.api.settings.providers({provider:e}).put(t);if(r)throw Error(W(r.value,z.settings.providers.saveError));return n}var wi={all:[`provider-settings`],list:()=>[...wi.all,`list`],detail:e=>[...wi.all,`detail`,e]};function Ti(){return N({queryKey:wi.list(),staleTime:3e4,queryFn:async()=>{let{data:e,error:t}=await G.api.settings.providers.get();if(t)throw Error(W(t.value,z.settings.providers.loadError));return e}})}function Ei(e){return N({queryKey:wi.detail(e),staleTime:3e4,queryFn:async()=>{let{data:t,error:n}=await G.api.settings.providers({provider:e}).get();if(n)throw Error(W(n.value,z.settings.providers.loadError));return t}})}function Di(e,t){e.setQueryData(wi.detail(t.provider),t),e.setQueryData(wi.list(),e=>e&&{providers:e.providers.map(e=>e.provider===t.provider?t:e)})}function Oi(){let{data:e,isLoading:t,error:n,refetch:r}=M(Ti());return{providers:e?.providers??[],isLoading:t,error:n,refetch:r}}function ki(e){let t=F(),{data:n,isLoading:r,error:i,refetch:a}=M({...Ei(e??``),enabled:!!e});return{descriptor:n??null,isLoading:r,error:i,refetch:a,invalidate:async()=>{e&&(await t.invalidateQueries({queryKey:wi.detail(e)}),await t.invalidateQueries({queryKey:wi.list()}))}}}function Ai(e){let t=F();return j({mutationFn:t=>Ci(e,t),onSuccess:e=>{Di(t,e)}})}async function ji(e){let{data:t,error:n}=await G.api.settings.app.put(e);if(n)throw Error(W(n.value,z.settings.app.saveError));return t}var Mi=300;function Ni(){return{id:`custom-${Date.now()}`,label:``,path:``,enabled:!1,injectionRole:`system`,sendFrequency:`first-turn`}}function Pi(){let e=F(),t=(0,L.useRef)(null),n=(0,L.useRef)(null),{data:r,isLoading:i,error:a}=M({...dr(),placeholderData:Z}),o=j({mutationFn:ji,onMutate:t=>{let n=e.getQueryData(ur.current())??Z;return e.setQueryData(ur.current(),t),{previousSettings:n}},onError:(t,n,r)=>{r?.previousSettings&&e.setQueryData(ur.current(),r.previousSettings)},onSuccess:t=>{e.setQueryData(ur.current(),Rn(t))}}),s=(0,L.useMemo)(()=>Rn(r??Z),[r]),c=(0,L.useCallback)(()=>{n.current&&=(clearTimeout(n.current),null);let e=t.current;e&&(t.current=null,o.mutate(e))},[o]);(0,L.useEffect)(()=>()=>{c()},[c]);let l=(0,L.useCallback)(r=>{let i=Rn(r(Rn(e.getQueryData(ur.current())??Z)));e.setQueryData(ur.current(),i),t.current=i,n.current&&clearTimeout(n.current),n.current=setTimeout(()=>{c()},Mi)},[c,e]),u=(0,L.useCallback)(e=>{l(t=>({...t,promptSettings:e(t.promptSettings)}))},[l]),d=(0,L.useCallback)(e=>{l(t=>({...t,contextSettings:{...t.contextSettings,...e}}))},[l]),f=(0,L.useCallback)(e=>{l(t=>({...t,chatTitleSettings:In({...t.chatTitleSettings,...e})}))},[l]),p=(0,L.useCallback)(e=>{l(t=>({...t,multiAgentSettings:{...t.multiAgentSettings,...e}}))},[l]),m=(0,L.useCallback)(e=>{u(t=>({...t,textSystemPrompt:e}))},[u]),h=(0,L.useCallback)(e=>{u(t=>({...t,imageSystemPrompt:e}))},[u]),g=(0,L.useCallback)((e,t)=>{u(n=>e===`agentsMd`||e===`claudeMd`?{...n,[e]:{...n[e],...t}}:{...n,customRules:n.customRules.map(n=>n.id===e?{...n,...t}:n)})},[u]),_=(0,L.useCallback)(()=>{u(e=>({...e,customRules:[...e.customRules,Ni()]}))},[u]),v=(0,L.useCallback)(e=>{u(t=>({...t,customRules:t.customRules.filter(t=>t.id!==e)}))},[u]),y=(0,L.useCallback)(()=>{l(()=>Z)},[l]);return{isLoading:i,error:a,globalTextSystemPrompt:s.promptSettings.textSystemPrompt,setGlobalTextSystemPrompt:m,globalImageSystemPrompt:s.promptSettings.imageSystemPrompt,setGlobalImageSystemPrompt:h,promptSettings:s.promptSettings,setTextSystemPrompt:m,setImageSystemPrompt:h,updateRuleFileSetting:g,addCustomRule:_,removeCustomRule:v,globalImageQuality:s.globalImageQuality,setGlobalImageQuality:e=>{l(t=>({...t,globalImageQuality:e}))},thinkingEnabled:s.thinkingEnabled,setThinkingEnabled:e=>{l(t=>({...t,thinkingEnabled:e}))},reasoningEffort:s.reasoningEffort,setReasoningEffort:e=>{l(t=>({...t,reasoningEffort:e}))},maxToolIterations:s.maxToolIterations,setMaxToolIterations:e=>{l(t=>({...t,maxToolIterations:Pn(e)}))},contextSettings:s.contextSettings,multiAgentSettings:s.multiAgentSettings,chatTitleSettings:s.chatTitleSettings,setContextCompactionBehavior:e=>d({compactionBehavior:e}),setContextWarningThreshold:e=>d({warningThreshold:e}),setContextDangerThreshold:e=>d({dangerThreshold:e}),setContextHardStopThreshold:e=>d({hardStopThreshold:e}),setPreferredSummaryModel:e=>d({preferredSummaryModel:e}),setProviderCompactionEnabled:e=>d({providerCompactionEnabled:e}),setMultiAgentEnabled:e=>p({enabled:e}),setChatDelegationEnabled:e=>p({chatDelegationEnabled:e}),setTraceVisibility:e=>p({traceVisibility:e}),setMaxDelegationDepth:e=>p({maxDepth:e}),setMaxSubagentCalls:e=>p({maxSubagentCalls:e}),setSubagentTimeoutMs:e=>p({timeoutMs:e}),setDefaultSubagentMaxTurns:e=>p({defaultMaxTurns:e}),setChatAutoRenameEnabled:e=>f({autoRenameEnabled:e}),setChatTitleStrategy:e=>f({strategy:e}),setChatTitlePromptPrefixLength:e=>f({promptPrefixLength:e}),setPreferredChatTitleModel:e=>f({preferredModel:e}),resetSettings:y}}var Fi={all:[`model-catalog`]},Ii=()=>N({queryKey:Fi.all,queryFn:async()=>{let{data:e,error:t}=await G.api.settings.models.get();if(t)throw Error(W(t.value));return e},staleTime:1e3*60*55,gcTime:1e3*60*60*2});function Li(){let e=F(),{data:t,isLoading:n,error:r,refetch:i}=M(Ii()),a=(0,L.useCallback)(async()=>{await i()},[i]),o=(0,L.useCallback)(t=>{e.setQueryData(Fi.all,t)},[e]);return{catalog:t||Pt,isLoading:n,error:r?r.message:null,refreshCatalog:a,setCatalog:o}}function Ri(){let[e,t]=(0,L.useState)(!1),[n,r]=(0,L.useState)(null),i=fr(),a=Li(),o=Pi(),s=M(an()),c=h(),l=pr(),u=(0,L.useMemo)(()=>a.catalog.textModels,[a.catalog.textModels]),d=(0,L.useMemo)(()=>i.chats.find(e=>e.id===i.currentChatId)??null,[i.chats,i.currentChatId]),f=(0,L.useMemo)(()=>s.data?.agents??[],[s.data?.agents]),p=(0,L.useMemo)(()=>({mode:d?.lastUsedMode===`agent`?`agent`:`chat`,agentId:d?.selectedAgentId??`default`}),[d?.lastUsedMode,d?.selectedAgentId]),m=n?.chatId===i.currentChatId?n:p,g=m.mode,_=m.agentId,v=(0,L.useMemo)(()=>f.find(e=>e.id===_)??null,[f,_]),y=(0,L.useMemo)(()=>Lt(d?.textModel,void 0,u),[u,d?.textModel]),b=(0,L.useCallback)(()=>y,[y]),x=a.catalog.status!==`ready`||u.length===0,S=(0,L.useMemo)(()=>d?.textModel?u.find(e=>e.modelId===d.textModel)?.provider??null:null,[u,d?.textModel]),{descriptor:C}=ki(S),w=C?.settings.thinkingEnabled??o.thinkingEnabled,T=C?.settings.reasoningEffort??o.reasoningEffort,ee=C?.settings.maxToolIterations??o.maxToolIterations,E=Si({chats:i,getActiveModel:b,systemPrompt:o.globalTextSystemPrompt,promptSettings:o.promptSettings,optimistic:l,thinkingEnabled:w,reasoningEffort:T,maxToolIterations:ee,contextSettings:o.contextSettings,chatTitleSettings:o.chatTitleSettings,currentChatId:i.currentChatId,getAgentSelection:()=>({mode:g,agentId:g===`agent`?_:`chat`,agentName:g===`agent`?v?.name:void 0})}),D=i.chats,{seedContextInfo:O}=E;(0,L.useEffect)(()=>{for(let e of D)`contextInfo`in e&&e.contextInfo&&O(e.id,e.contextInfo)},[D,O]);let k=E.isGenerating,A=(0,L.useCallback)(async()=>{await i.createChat(),await c({to:`/`})},[i,c]),te=(0,L.useCallback)(async(e,t)=>{await i.updateChatModel(e,`textModel`,t)},[i]),ne=(0,L.useCallback)(e=>{i.selectChat(e),c({to:`/`})},[i,c]),re=(0,L.useCallback)(async(e,t)=>{await i.updateChatTitle(e,t)},[i]),ie=(0,L.useCallback)((e,t)=>{r({chatId:i.currentChatId,mode:e,agentId:t}),i.currentChatId&&i.updateChatAgentSelection(i.currentChatId,{lastUsedMode:e,selectedAgentId:e===`agent`?t:`chat`})},[i]),ae=(0,L.useCallback)(e=>{ie(e,e===`agent`?_||`default`:`chat`)},[ie,_]),oe=(0,L.useCallback)(e=>{ie(`agent`,e)},[ie]),se=(0,L.useCallback)(async e=>{await i.deleteChat(e)},[i]),ce=(0,L.useCallback)(e=>{c({to:{chat:`/`,gallery:`/gallery`,settings:`/settings`,studio:`/studio`}[e]})},[c]),{handleRespond:le}=E,ue=(0,L.useCallback)(n=>{le(n,e?`image_generation_requested`:void 0),t(!1)},[le,e]);return{imageToolIntent:e,agentExecutionMode:g,selectedAgentId:_,agents:f,isAgentListLoading:s.isLoading,isGenerating:k,chats:i.chats,currentChatId:i.currentChatId,catalog:a.catalog,settings:o,activeModels:u,activeModel:y,isModelSelectorDisabled:x,contextInfo:E.contextInfo,fallbackNotice:E.fallbackNotice,seedContextInfo:E.seedContextInfo,contextCache:E.contextCache,isContextActionPending:E.isContextActionPending,lockedProvider:S,setImageToolIntent:t,setAgentExecutionMode:ae,setSelectedAgentId:oe,handleNewChat:A,handleUpdateChatModel:te,handleUpdateChatTitle:re,handleDeleteChat:se,handleSelectChat:ne,handleNavigate:ce,handleSubmit:ue,handleStop:()=>{E.handleStop(),t(!1)},handleCompactCurrentChat:E.handleCompactCurrentChat,handleStartSummarizedChat:E.handleStartSummarizedChat,refreshCatalog:a.refreshCatalog}}var zi=(0,L.createContext)(null);function Bi(){let e=(0,L.use)(zi);if(!e)throw Error(`useApp must be used within AppContext`);return e}var Vi=T(`/_authenticated`)({beforeLoad:({context:e,location:t})=>{e.auth.isAuthenticated||re({to:`/login`,search:{redirect:t.href},throw:!0})},loader:async({context:{queryClient:e}})=>{let t=e.ensureQueryData(Jt());await Promise.all([t,e.ensureQueryData(Ii()),e.ensureQueryData(dr()),e.ensureQueryData(an())]);let n=(await t)[0]?.id;n&&await e.prefetchInfiniteQuery(tn(n))},component:Hi});function Hi(){let{auth:e}=Vi.useRouteContext(),t=h(),n=Ri(),r=O().location.pathname,[i,a]=(0,L.useState)(!1);if(!e.isAuthenticated)return t({to:`/login`}),null;let o=`chat`;return r.includes(`/gallery`)&&(o=`gallery`),r.includes(`/settings`)&&(o=`settings`),r.includes(`/studio`)&&(o=`studio`),(0,R.jsx)(zi,{value:n,children:(0,R.jsxs)(Gt,{currentPage:o,onNavigate:e=>n.handleNavigate(e),chats:n.chats,currentChatId:n.currentChatId,onSelectChat:n.handleSelectChat,onUpdateChatTitle:(e,t)=>void n.handleUpdateChatTitle(e,t),onDeleteChat:e=>void n.handleDeleteChat(e),onNewChat:()=>void n.handleNewChat(),contextCache:n.contextCache,isMobileSidebarOpen:i,onMobileSidebarClose:()=>a(!1),children:[(0,R.jsx)(Bt,{activeModel:n.activeModel,activeModels:n.activeModels,isModelSelectorDisabled:n.isModelSelectorDisabled,currentChatId:n.currentChatId,currentPage:o,onUpdateChatModel:(e,t)=>void n.handleUpdateChatModel(e,t),onSetPageModel:e=>{n.currentChatId&&n.handleUpdateChatModel(n.currentChatId,e)},onNewChat:()=>void n.handleNewChat(),onNavigateToSettings:()=>n.handleNavigate(`settings`),modelCatalog:n.catalog,lockedProvider:n.lockedProvider,onMobileMenuToggle:()=>a(e=>!e)}),(0,R.jsx)(`div`,{className:`flex-1 min-h-0 overflow-hidden flex flex-col`,children:(0,R.jsx)(L.Suspense,{fallback:(0,R.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,R.jsx)(Ht,{size:`lg`})}),children:(0,R.jsx)(we,{})})})]})})}var Ui=24;function Wi(e){return e.scrollHeight-e.scrollTop-e.clientHeight<=Ui}function Gi(e){return e?.parts?.filter(e=>e.type===`generated_image`).map(e=>`${e.imageId}:${e.status}:${e.imageUrl??``}`).join(`,`)??``}function Ki(e,t){let[n,r]=(0,L.useState)(!1),i=(0,L.useRef)(null),a=(0,L.useRef)(!0),o=(0,L.useRef)(null),s=(0,L.useRef)(!0),c=(0,L.useRef)(e),l=t.at(-1),u=l?.id??null,d=l?.isGenerating??!1,f=l?.parts?.length??0,p=l?.text?.length??0,m=Gi(l);return(0,L.useEffect)(()=>{c.current!==e&&(c.current=e,a.current=!0,s.current=!0)},[e]),(0,L.useLayoutEffect)(()=>{let e=i.current;!s.current||!e||t.length===0||(e.scrollTop=e.scrollHeight,s.current=!1)},[e,t.length]),(0,L.useLayoutEffect)(()=>{d&&o.current!==u&&(a.current=!0);let e=i.current;!d||!e||!a.current||(e.scrollTop=e.scrollHeight)},[u,d,f,p,m]),(0,L.useEffect)(()=>{o.current=d?u:null},[u,d]),{parentRef:i,showScrollButton:n,handleScroll:(0,L.useCallback)(e=>{let t=Wi(e.currentTarget);a.current=t,r(!t)},[]),scrollToBottom:(0,L.useCallback)(()=>{let e=i.current;e&&(a.current=!0,r(!1),e.scrollTo({top:e.scrollHeight,behavior:`smooth`}))},[])}}function qi(e,t){return`${Ji(e)||`mangostudio`}-art-${Ji(String(t))||String(Date.now())}.png`}function Ji(e){return e.trim().replace(/[^a-zA-Z0-9_-]+/g,`-`).replace(/^-+|-+$/g,``)}function Yi(e,t){let n=document.createElement(`a`);n.href=e,n.download=qi(t,Date.now()),document.body.appendChild(n),n.click(),document.body.removeChild(n)}function Xi({msg:e}){let{t}=B();return(0,R.jsxs)(`div`,{className:`space-y-6`,children:[e.styleParams&&e.styleParams.length>0&&(0,R.jsxs)(`div`,{className:`bg-surface-container-low p-6 rounded-xl border border-outline-variant/5`,children:[(0,R.jsxs)(`h3`,{className:`font-headline text-sm font-bold mb-4 flex items-center gap-2 text-on-surface`,children:[(0,R.jsx)(P,{className:`text-primary`,size:16}),t.chat.feed.styleParams]}),(0,R.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:e.styleParams.map(e=>(0,R.jsx)(`span`,{className:`px-3 py-1 bg-surface-container-high text-on-surface-variant text-[10px] font-bold rounded-sm uppercase tracking-wider`,children:e},e))})]}),e.text&&!e.imageUrl&&(0,R.jsx)(`div`,{className:`bg-error/10 border border-error/20 p-4 rounded-xl text-error text-sm font-body`,children:e.text}),!e.text&&!e.imageUrl&&(0,R.jsx)(`div`,{className:`bg-surface-container-lowest p-6 rounded-xl border border-outline-variant/5`,children:(0,R.jsx)(`p`,{className:`font-body text-xs text-on-surface-variant leading-relaxed`,children:t.chat.feed.neuralDiffusionPath})})]})}function Zi({msg:e}){let{t}=B(),[n,r]=(0,L.useState)(!1),i=e.imageUrl;return(0,R.jsxs)(`div`,{className:`flex flex-col gap-4 w-full`,children:[e.generationTime&&(0,R.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-on-surface-variant bg-surface-container-lowest py-2 px-3 rounded-lg w-fit border border-outline-variant/10`,children:[(0,R.jsx)(P,{size:12,className:`text-primary`}),(0,R.jsx)(`span`,{children:t.chat.feed.thoughtFor.replace(`{time}`,e.generationTime)})]}),(0,R.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 gap-6 items-start w-full`,children:[i&&(0,R.jsx)(`div`,{className:`group relative bg-surface-container-lowest rounded-xl overflow-hidden aspect-[4/5] shadow-2xl transition-transform duration-500 hover:scale-[1.01]`,children:n?(0,R.jsxs)(`div`,{className:`w-full h-full flex flex-col items-center justify-center text-on-surface-variant/50 p-6 text-center bg-surface-container-high`,children:[(0,R.jsx)(Te,{size:48,className:`mb-4 opacity-50`}),(0,R.jsx)(`p`,{className:`font-headline font-bold mb-2`,children:t.chat.feed.imageUnavailable}),(0,R.jsx)(`p`,{className:`text-xs font-body`,children:t.chat.feed.imageUnavailableHint})]}):(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`img`,{src:i,alt:`Generated`,className:`w-full h-full object-cover grayscale-[20%] group-hover:grayscale-0 transition-[filter] duration-700`,decoding:`async`,onError:()=>r(!0)}),(0,R.jsxs)(`div`,{className:`absolute bottom-4 left-4 right-4 glass-panel rounded-xl p-3 flex justify-between items-center translate-y-12 opacity-0 group-hover:translate-y-0 group-hover:opacity-100 transition-all duration-300`,children:[(0,R.jsxs)(`div`,{className:`flex gap-2`,children:[(0,R.jsx)(`button`,{type:`button`,onClick:()=>Yi(i,t.common.downloadFilenamePrefix),className:`w-9 h-9 rounded-lg flex items-center justify-center bg-surface-container-highest/40 hover:bg-primary/20 text-on-surface transition-colors`,title:t.chat.feed.download,children:(0,R.jsx)(S,{size:16})}),(0,R.jsx)(`button`,{type:`button`,className:`w-9 h-9 rounded-lg flex items-center justify-center bg-surface-container-highest/40 hover:bg-primary/20 text-on-surface transition-colors`,title:t.chat.feed.saveToGallery,children:(0,R.jsx)(a,{size:16})})]}),(0,R.jsx)(`button`,{type:`button`,className:`px-4 py-1.5 rounded-lg bg-primary/10 hover:bg-primary/20 text-primary text-xs font-bold transition-colors`,children:t.chat.feed.regenerate})]})]})}),(0,R.jsx)(Xi,{msg:e})]})]})}var Qi=`modulepreload`,$i=function(e){return`/`+e},ea={},ta=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}r=o(t.map(t=>{if(t=$i(t,n),t in ea)return;ea[t]=!0;let r=t.endsWith(`.css`),i=r?`[rel="stylesheet"]`:``;if(n)for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${t}"]${i}`))return;let o=document.createElement(`link`);if(o.rel=r?`stylesheet`:Qi,r||(o.as=`script`),o.crossOrigin=``,o.href=t,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),r)return new Promise((e,n)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},na=(0,L.lazy)(()=>ta(()=>import(`./MarkdownContentRenderer-BKdTbFES.js`).then(e=>({default:e.MarkdownContentRenderer})),__vite__mapDeps([0,1,2,3])));function ra(e){return(0,R.jsx)(L.Suspense,{fallback:(0,R.jsx)(ia,{...e}),children:(0,R.jsx)(na,{...e})})}function ia({content:e,className:t}){return(0,R.jsx)(`div`,{className:`markdown-content ${t??``}`,children:e})}function aa(e,t){let n=t.chat.continuation.title;switch(e){case`provider_changed`:return n.providerChanged;case`model_changed`:return n.modelChanged;case`system_prompt_changed`:return n.systemPromptChanged;case`toolset_changed`:return n.toolsetChanged;case`agent_changed`:return n.agentChanged;case`agent_runtime_changed`:return n.agentRuntimeChanged;case`cursor_expired`:return n.cursorExpired;case`cursor_invalid`:return n.cursorInvalid;case`tool_result_cursor_loss`:return n.toolResultCursorLoss;case`envelope_malformed`:return n.envelopeMalformed}}function oa(e,t){return e.replace(/{provider}/g,t.provider).replace(/{model}/g,t.model).replace(/{fromProvider}/g,t.fromProvider).replace(/{fromMode}/g,t.fromMode).replace(/{toMode}/g,t.toMode)}var sa=e=>e===`tool_result_cursor_loss`;function ca({provider:e,modelName:t,fromProvider:n,fromMode:r,toMode:i,reasonCode:a,recovered:o}){let{t:s}=B(),c=oa(aa(a,s),{provider:e,model:t,fromProvider:n??e,fromMode:r,toMode:i}),l=o?s.chat.continuation.recovered:s.chat.continuation.notRecovered,u=sa(a),d=u?`text-error/80`:`text-on-surface-variant/60`,f=u?`bg-error/30`:`bg-outline-variant/20`;return(0,R.jsxs)(`div`,{className:`flex items-center gap-2 py-2 text-xs my-1 ${d}`,children:[(0,R.jsx)(`div`,{className:`flex-1 h-px ${f}`}),(0,R.jsxs)(`span`,{className:`font-medium whitespace-nowrap`,children:[c,` `,l]}),(0,R.jsx)(`div`,{className:`flex-1 h-px ${f}`})]})}var la=`1 / 1`;function ua({src:e,alt:t,aspectRatio:n=la,objectFit:r=`cover`,className:i,imageClassName:a,onLoadError:o}){let[s,c]=(0,L.useState)(!1),l=r===`contain`?`object-contain`:`object-cover`;return(0,R.jsxs)(`div`,{className:`relative overflow-hidden ${i??``}`,style:{aspectRatio:n},children:[(0,R.jsx)(`img`,{src:e,alt:t,className:`absolute inset-0 w-full h-full ${l} transition-opacity duration-300 ${s?`opacity-100`:`opacity-0`} ${a??``}`,decoding:`async`,onLoad:()=>c(!0),onError:o}),!s&&(0,R.jsx)(`div`,{"aria-hidden":!0,className:`absolute inset-0 animate-pulse bg-surface-container-highest/40`})]})}function da({part:e}){let{t}=B(),[r,o]=(0,L.useState)(!1),[s,c]=(0,L.useState)(!1),l=e.prompt&&e.prompt.length>80?`${e.prompt.slice(0,80)}\u2026`:e.prompt,d=e.generationTime?t.chat.feed.thoughtFor.replace(`{time}`,e.generationTime):null,f=e.modelName??null;if(e.status===`completed`&&e.imageUrl&&!r){let r=e.imageUrl;return(0,R.jsxs)(`div`,{className:`bg-surface-container-lowest rounded-2xl overflow-hidden border border-outline-variant/10 shadow-sm max-w-md`,children:[(0,R.jsxs)(`button`,{type:`button`,onClick:()=>c(e=>!e),className:`w-full flex items-center gap-2.5 px-4 py-2.5 hover:bg-surface-container-high/50 transition-colors cursor-pointer`,children:[(0,R.jsx)(u,{size:14,className:`text-primary shrink-0`}),(0,R.jsx)(`span`,{className:`text-xs text-on-surface-variant/70 font-body truncate flex-1 text-left`,children:l||t.chat.feed.generatedImageAlt}),(0,R.jsx)(b,{size:14,className:`text-on-surface-variant/40 shrink-0 transition-transform duration-300 ${s?``:`rotate-180`}`})]}),(0,R.jsx)(n,{initial:!1,children:!s&&(0,R.jsxs)(i.div,{initial:{opacity:0,height:0},animate:{opacity:1,height:`auto`},exit:{opacity:0,height:0},transition:{duration:.2,ease:`easeOut`},children:[(f||d)&&(0,R.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap px-4 pb-2`,children:[f&&(0,R.jsx)(`span`,{className:`text-[10px] text-on-surface-variant/60 font-mono bg-surface-container-high px-2 py-0.5 rounded-full`,children:f}),d&&(0,R.jsxs)(`span`,{className:`flex items-center gap-1 text-[10px] text-on-surface-variant/60`,children:[(0,R.jsx)(P,{size:10,className:`text-primary/50`}),d]})]}),(0,R.jsxs)(`div`,{className:`group relative`,children:[(0,R.jsx)(ua,{src:r,alt:t.chat.feed.generatedImageAlt,className:`bg-surface-container-high`,objectFit:`contain`,onLoadError:()=>o(!0)}),(0,R.jsx)(`div`,{className:`absolute bottom-3 left-3 right-3 glass-panel rounded-xl p-2 flex justify-between items-center translate-y-12 opacity-0 group-hover:translate-y-0 group-hover:opacity-100 transition-all duration-300`,children:(0,R.jsxs)(`div`,{className:`flex gap-2`,children:[(0,R.jsx)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),Yi(r,t.common.downloadFilenamePrefix)},className:`w-8 h-8 rounded-lg flex items-center justify-center bg-surface-container-highest/40 hover:bg-primary/20 text-on-surface transition-colors`,title:t.chat.feed.download,children:(0,R.jsx)(S,{size:14})}),(0,R.jsx)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),Yi(r,t.common.downloadFilenamePrefix)},className:`w-8 h-8 rounded-lg flex items-center justify-center bg-surface-container-highest/40 hover:bg-primary/20 text-on-surface transition-colors`,title:t.chat.feed.saveToGallery,children:(0,R.jsx)(a,{size:14})})]})})]})]},`image-content`)})]})}return e.status===`completed`&&r?(0,R.jsxs)(`div`,{className:`bg-surface-container-low rounded-2xl border border-outline-variant/10 p-6 flex flex-col items-center gap-3 text-on-surface-variant/50 max-w-md`,children:[(0,R.jsx)(Te,{size:32}),(0,R.jsx)(`span`,{className:`text-xs font-body`,children:t.chat.feed.imageUnavailable}),f&&(0,R.jsx)(`span`,{className:`text-[10px] text-on-surface-variant/40 font-mono`,children:f})]}):e.status===`error`?(0,R.jsxs)(`div`,{className:`bg-error/10 border border-error/20 p-4 rounded-xl flex items-start gap-3 max-w-md`,children:[(0,R.jsx)(x,{size:16,className:`text-error shrink-0 mt-0.5`}),(0,R.jsxs)(`div`,{className:`flex flex-col gap-1 min-w-0`,children:[(0,R.jsx)(`span`,{className:`text-error text-xs font-bold`,children:t.chat.feed.imageGenerationFailed}),e.error&&(0,R.jsx)(`span`,{className:`text-error/70 text-[11px] font-body leading-relaxed`,children:e.error}),(f||d)&&(0,R.jsx)(`span`,{className:`text-error/40 text-[10px] font-mono mt-0.5`,children:[f,d].filter(Boolean).join(` · `)})]})]}):(0,R.jsxs)(`div`,{className:`bg-surface-container-lowest border border-outline-variant/10 rounded-2xl p-5 flex flex-col gap-3 max-w-md animate-pulse`,children:[(0,R.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,R.jsx)(`div`,{className:`w-10 h-10 rounded-xl bg-surface-container-high flex items-center justify-center shrink-0`,children:(0,R.jsx)(u,{size:20,className:`text-primary/50 shrink-0`})}),(0,R.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,R.jsx)(`span`,{className:`text-xs font-medium text-on-surface`,children:f?t.chat.feed.modelStatus.replace(`{status}`,t.chat.feed.statusGenerating).replace(`{model}`,()=>f):t.chat.feed.generatingImage}),(0,R.jsx)(`span`,{className:`text-[10px] text-on-surface-variant/50 font-body`,children:e.prompt})]})]}),(0,R.jsx)(`div`,{className:`aspect-square bg-surface-container-high rounded-xl`}),(0,R.jsx)(`div`,{className:`h-1 w-full bg-surface-container-high rounded-full overflow-hidden`,children:(0,R.jsx)(`div`,{className:`h-full bg-primary w-1/3 rounded-full animate-[slide_1s_ease-in-out_infinite_alternate]`})})]})}function fa(e,t,n){switch(e){case`cursor_lost`:return{label:n.chat.cursorLost.replace(`{detail}`,t??``),severity:`info`};case`tool_loop_exhausted`:return{label:t?`${n.chat.toolLoopExhausted} — ${t}`:n.chat.toolLoopExhausted,severity:`error`};case`chat_compacted`:return{label:n.chat.systemEvents.chatCompacted,severity:`info`};case`summary_handoff`:return{label:n.chat.systemEvents.summaryHandoff,severity:`info`};default:return{label:t??e,severity:`info`}}}function pa({event:e,detail:t}){let{t:n}=B(),{label:r,severity:i}=fa(e,t,n),a=i===`error`?`text-error/80`:`text-on-surface-variant/60`,o=i===`error`?`bg-error/30`:`bg-outline-variant/20`;return(0,R.jsxs)(`div`,{className:`flex items-center gap-2 py-2 text-xs my-1 ${a}`,children:[(0,R.jsx)(`div`,{className:`flex-1 h-px ${o}`}),(0,R.jsx)(`span`,{className:`font-medium whitespace-nowrap`,children:r}),(0,R.jsx)(`div`,{className:`flex-1 h-px ${o}`})]})}var ma=new Map;function ha(e){return e.scrollHeight-e.scrollTop-e.clientHeight<=24}function ga({messageId:e,text:t,isStreaming:r}){let{t:a}=B(),o=(0,L.useRef)(ma.get(e)??{expanded:r,scrollTop:0,shouldAutoFollow:r}),[s,c]=(0,L.useState)(o.current.expanded),l=(0,L.useRef)(null),u=(0,L.useRef)(o.current),d=(0,L.useRef)(r),f=(0,L.useCallback)(t=>{u.current={...u.current,...t},ma.set(e,u.current)},[e]);return(0,L.useEffect)(()=>{!d.current&&r&&(c(!0),f({expanded:!0,shouldAutoFollow:!0})),d.current&&!r&&(c(!1),f({expanded:!1,shouldAutoFollow:!1})),d.current=r},[r,f]),(0,L.useLayoutEffect)(()=>{if(!s||!l.current)return;let e=l.current,t=Math.max(0,e.scrollHeight-e.clientHeight);if(r&&u.current.shouldAutoFollow){e.scrollTop=t,f({scrollTop:e.scrollTop});return}e.scrollTop=Math.min(u.current.scrollTop,t)},[s,r,t,f]),(0,R.jsxs)(`div`,{className:`mb-3`,children:[(0,R.jsxs)(`button`,{type:`button`,onClick:()=>{let e=!s;c(e),f({expanded:e})},className:`glass-surface flex items-center gap-2 text-xs text-on-surface-variant/70
|
|
25
25
|
py-1.5 px-3 rounded-full w-fit border border-outline-variant/20
|
|
26
26
|
hover:border-outline-variant/40 hover:text-on-surface-variant
|
|
27
27
|
transition-all duration-200 cursor-pointer`,children:[(0,R.jsx)(de,{size:11,className:`text-primary/70`}),(0,R.jsx)(`span`,{className:`tracking-wide`,children:r?a.thinking.streaming:a.thinking.label}),(0,R.jsx)(b,{size:11,className:`transition-transform duration-300 text-primary/50 ${s?`rotate-180`:``}`})]}),(0,R.jsx)(n,{initial:!1,children:s&&(0,R.jsx)(i.div,{initial:{opacity:0,height:0,y:-4},animate:{opacity:1,height:`auto`,y:0},exit:{opacity:0,height:0,y:-6},transition:{duration:.22,ease:`easeOut`},className:`glass-surface-subtle mt-1.5 rounded-xl border border-outline-variant/15 overflow-hidden`,children:(0,R.jsx)(`div`,{ref:l,onScroll:e=>{let t=e.currentTarget;f({scrollTop:t.scrollTop,shouldAutoFollow:r?ha(t):u.current.shouldAutoFollow})},className:`p-4 max-h-48 sm:max-h-72 md:max-h-96 overflow-y-auto app-scrollbar`,children:(0,R.jsxs)(`div`,{className:`text-xs text-on-surface-variant/60 leading-relaxed markdown-content--thinking`,children:[(0,R.jsx)(ra,{content:t,isStreaming:r,copyCodeLabel:a.chat.copyCode,codeCopiedLabel:a.chat.codeCopied}),r&&(0,R.jsx)(`span`,{className:`inline-block w-0.5 h-[1em] bg-primary/40 ml-0.5 align-middle animate-blink`})]})})},`thinking-body`)})]})}function _a({toolName:e,className:t}){switch(e){case`list_directory`:return(0,R.jsx)(o,{size:11,className:t});case`read_file`:return(0,R.jsx)(Ce,{size:11,className:t});case`write_file`:return(0,R.jsx)(ee,{size:11,className:t});case`generate_image`:return(0,R.jsx)(D,{size:11,className:t});case`get_current_datetime`:return(0,R.jsx)(_,{size:11,className:t});case`bash`:case`zsh`:case`powershell`:return(0,R.jsx)(he,{size:11,className:t});case`grep`:return(0,R.jsx)(ke,{size:11,className:t});case`glob`:return(0,R.jsx)(w,{size:11,className:t});default:return(0,R.jsx)(xe,{size:11,className:t})}}function va(e){if(typeof e!=`string`||e.trim().length===0)return null;let t=e.trim(),n=t.match(/^\/home\/[^/]+/);return n&&(t=`~${t.slice(n[0].length)}`),t}function ya(e,t){switch(e){case`list_directory`:case`read_file`:case`write_file`:return va(t.path);case`bash`:case`zsh`:case`powershell`:return typeof t.command==`string`&&t.command.trim().length>0?t.command.trim():null;case`grep`:case`glob`:return typeof t.pattern==`string`&&t.pattern.trim().length>0?t.pattern.trim():null;default:return null}}function ba({name:e,args:t,result:r,isError:a,isPending:o}){let{t:s}=B(),[c,l]=(0,L.useState)(!1),u=s.tools.labels?.[e]??e,d=ya(e,t),f=null;if(r)try{f=JSON.parse(r)}catch{f=r}return(0,R.jsxs)(`div`,{className:`mb-3`,children:[(0,R.jsxs)(`button`,{type:`button`,onClick:()=>l(e=>!e),className:`glass-surface flex items-center gap-2 text-xs py-1.5 px-3 rounded-full w-fit max-w-full border
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/bash-DKfk-jqG.js","assets/shellscript-Cd3e2TuR.js","assets/c-6LDlXRu0.js","assets/rolldown-runtime-BYbx6iT9.js","assets/cpp-u2b-vpJ9.js","assets/sql-D3oCX4qf.js","assets/html-UIM7GmnP.js","assets/css-Dc0OpoBJ.js","assets/javascript-okWskhVA.js","assets/java-B8S38LsY.js","assets/jsx-DjqxE-UL.js","assets/php-D9TzMTdN.js","assets/json-BjaDPSOc.js","assets/xml-Lpki4g8-.js","assets/ruby-DjRoLTaK.js","assets/tsx-DcRFScAN.js","assets/typescript-ButPIGrc.js","assets/yaml-sdi5CfWK.js","assets/syntax-themes-Dq65SZkH.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{n as e,t}from"./index-
|
|
2
|
+
import{n as e,t}from"./index-B0uGJIBj.js";import{n,t as r}from"./syntax-core-BoMshe5A.js";var i={bash:()=>e(()=>import(`./bash-DKfk-jqG.js`),__vite__mapDeps([0,1])),c:()=>e(()=>import(`./c-6LDlXRu0.js`).then(e=>e.n),__vite__mapDeps([2,3])),cpp:()=>e(()=>import(`./cpp-u2b-vpJ9.js`),__vite__mapDeps([4,2,3,5])),csharp:()=>e(()=>import(`./csharp-Ceix8dHH.js`),[]),css:()=>e(()=>import(`./css-Dc0OpoBJ.js`),[]),go:()=>e(()=>import(`./go-PnJdfxiR.js`),[]),html:()=>e(()=>import(`./html-UIM7GmnP.js`),__vite__mapDeps([6,7,8])),java:()=>e(()=>import(`./java-B8S38LsY.js`).then(e=>e.n),__vite__mapDeps([9,3])),javascript:()=>e(()=>import(`./javascript-okWskhVA.js`),[]),json:()=>e(()=>import(`./json-BjaDPSOc.js`),[]),jsx:()=>e(()=>import(`./jsx-DjqxE-UL.js`).then(e=>e.n),__vite__mapDeps([10,3])),markdown:()=>e(()=>import(`./markdown-YiYqiPes.js`),[]),php:()=>e(()=>import(`./php-D9TzMTdN.js`),__vite__mapDeps([11,7,6,8,12,5,13,9,3])),powershell:()=>e(()=>import(`./powershell-Dvslkh7q.js`),[]),python:()=>e(()=>import(`./python-DaRRuALo.js`),[]),ruby:()=>e(()=>import(`./ruby-DjRoLTaK.js`),__vite__mapDeps([14,2,3,4,5,7,6,8,10,1,15,16,13,9,17])),rust:()=>e(()=>import(`./rust-CR5Dd4HD.js`),[]),sql:()=>e(()=>import(`./sql-D3oCX4qf.js`),[]),swift:()=>e(()=>import(`./swift-CJSMoxIm.js`),[]),tsx:()=>e(()=>import(`./tsx-DcRFScAN.js`).then(e=>e.n),__vite__mapDeps([15,3])),typescript:()=>e(()=>import(`./typescript-ButPIGrc.js`).then(e=>e.n),__vite__mapDeps([16,3])),xml:()=>e(()=>import(`./xml-Lpki4g8-.js`),__vite__mapDeps([13,9,3])),yaml:()=>e(()=>import(`./yaml-sdi5CfWK.js`),[])},a={"github-dark-dimmed":()=>e(()=>import(`./syntax-themes-Dq65SZkH.js`).then(e=>e.i),__vite__mapDeps([18,3])),"github-light":()=>e(()=>import(`./syntax-themes-Dq65SZkH.js`).then(e=>e.r),__vite__mapDeps([18,3])),"one-dark-pro":()=>e(()=>import(`./syntax-themes-Dq65SZkH.js`).then(e=>e.n),__vite__mapDeps([18,3])),"one-light":()=>e(()=>import(`./syntax-themes-Dq65SZkH.js`).then(e=>e.t),__vite__mapDeps([18,3]))},o=[`typescript`,`javascript`,`tsx`,`jsx`,`json`,`bash`,`python`,`markdown`],s={"c++":`cpp`,cs:`csharp`,csh:`csharp`,htm:`html`,js:`javascript`,md:`markdown`,mjs:`javascript`,ps1:`powershell`,py:`python`,rb:`ruby`,sh:`bash`,shell:`bash`,ts:`typescript`,yml:`yaml`,zsh:`bash`},c=n({langs:i,themes:a,engine:()=>r()}),l=null,u=null,d=new Map;function f(){return l??=c({themes:[...t],langs:[...o]}).then(e=>(u=e,e)),l}async function p(e){let t=h(e);if(t.length===0)return!1;let n=await f();return await Promise.all(t.map(e=>b(n,e))),!0}function m(e,t,n){let r=g(t);if(!u||!r||!y(u,r))return null;try{return u.codeToHtml(e,{lang:r,theme:n})}catch{return null}}function h(e){return[...new Set(e.map(g).filter(v))]}function g(e){let t=_(e);return v(t)?t:s[t]??null}function _(e){return e.trim().split(/\s+/)[0]?.toLowerCase()??``}function v(e){return typeof e==`string`&&e in i}function y(e,t){return e.getLoadedLanguages().includes(t)}function b(e,t){if(y(e,t))return Promise.resolve();let n=d.get(t);if(n)return n;let r=e.loadLanguage(t).finally(()=>{d.delete(t)});return d.set(t,r),r}export{t as CODE_THEMES,m as highlightCode,f as initHighlighter,p as preloadCodeLanguages};
|
package/public/index.html
CHANGED
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
}
|
|
34
34
|
})();
|
|
35
35
|
</script>
|
|
36
|
-
<script type="module" crossorigin src="/assets/index-
|
|
36
|
+
<script type="module" crossorigin src="/assets/index-B0uGJIBj.js"></script>
|
|
37
37
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-BYbx6iT9.js">
|
|
38
38
|
<link rel="modulepreload" crossorigin href="/assets/ui-D0PAWSFZ.js">
|
|
39
39
|
<link rel="modulepreload" crossorigin href="/assets/vendor-k1jsSmjo.js">
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/shiki-C6IiS2Nm.js","assets/index-BxhCfnFE.js","assets/rolldown-runtime-BYbx6iT9.js","assets/vendor-k1jsSmjo.js","assets/ui-D0PAWSFZ.js","assets/vendor-deps-BL3yT3_Z.js","assets/index-V3SA6jnj.css","assets/syntax-core-BoMshe5A.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{a as e}from"./rolldown-runtime-BYbx6iT9.js";import{i as t,r as n}from"./ui-D0PAWSFZ.js";import{i as r,n as i,r as a}from"./index-BxhCfnFE.js";import{n as o,t as s}from"./markdown-parser-B0W8Yv4o.js";var c=e(t(),1),l=n(),u=`<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg>`,d=`<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>`;function f({content:e,className:t,copyCodeLabel:n,codeCopiedLabel:i}){let{t:o}=r(),s=(0,c.useRef)(null),{resolvedCodeTheme:u}=a(),[d,f]=(0,c.useState)(null),[_,v]=(0,c.useState)(0),y=n??o.chat.copyCode,b=i??o.chat.codeCopied,x=(0,c.useMemo)(()=>T(e).join(`
|
|
3
|
-
`),[e]);p((0,c.useMemo)(()=>x?x.split(`
|
|
4
|
-
`):[],[x]),f,v),m(s,y,b);let S=h(e,(0,c.useMemo)(()=>g(u,y,d),[u,y,d,_]));return(0,l.jsx)(`div`,{ref:s,className:`markdown-content ${t??``}`,dangerouslySetInnerHTML:{__html:S}})}function p(e,t,n){(0,c.useEffect)(()=>{if(e.length===0)return;let r=!1;return E(e).then(e=>{r||(t(e),n(e=>e+1))}),()=>{r=!0}},[e,t,n])}function m(e,t,n){(0,c.useEffect)(()=>{let r=e.current;if(!r)return;let i=new Set,a=D(i,t,n);return r.addEventListener(`click`,a),()=>{r.removeEventListener(`click`,a);for(let e of i)clearTimeout(e)}},[e,t,n])}function h(e,t){return(0,c.useMemo)(()=>C(t,e),[e,t])}function g(e,t,n){return new s({gfm:!0,breaks:!0,renderer:_(e,t,n)})}function _(e,t,n){let r=new o;return r.link=v,r.image=y,r.html=e=>F(`text`in e?e.text:``),r.code=r=>b(r.text,r.lang,e,t,n),r}function v({href:e,title:t,tokens:n}){let r=n?.map(e=>`text`in e?e.text:e.raw).join(``)??``,i=e?.startsWith(`javascript:`)?`#`:e??`#`,a=t?` title="${F(t)}"`:``;return`<a href="${F(i)}" target="_blank" rel="noopener noreferrer"${a}>${r}</a>`}function y({href:e,title:t,text:n}){let r=e?.startsWith(`javascript:`)?`#`:e??`#`,i=t?` title="${F(t)}"`:``,a=n||r;return`<a href="${F(r)}" target="_blank" rel="noopener noreferrer" class="markdown-image-link"${i}>${F(a)}</a>`}function b(e,t,n,r,i){let a=t??``,o=a?i?.highlightCode(e,a,n):null;return o?x(o,a,r):S(e,a,r)}function x(e,t,n){return e.replace(`<pre `,`<pre data-lang="${F(t)}" `).replace(`</pre>`,`${P(n)}</pre>`)}function S(e,t,n){let r=t?` class="language-${F(t)}"`:``;return`<pre${t?` data-lang="${F(t)}"`:``}><code${r}>${F(e)}</code>${P(n)}</pre>`}function C(e,t){return t?e.parse(t,{async:!1}):``}var w=new s({gfm:!0,breaks:!0});function T(e){if(!e)return[];let t=new Set;return w.walkTokens(w.lexer(e),e=>{e.type===`code`&&`lang`in e&&e.lang&&t.add(e.lang)}),[...t].sort()}async function E(e){let t=await i(()=>import(`./shiki-C6IiS2Nm.js`),__vite__mapDeps([0,1,2,3,4,5,6,7]));return await t.preloadCodeLanguages(e),t}function D(e,t,n){return r=>{O(r,e,t,n)}}async function O(e,t,n,r){let i=e.target.closest(`.copy-code-btn`);if(!i)return;let a=k(i);a!==null&&await A(i,a,t,n,r)}function k(e){let t=e.closest(`pre`);return t?t.querySelector(`code`)?.textContent??t.textContent??``:null}async function A(e,t,n,r,i){try{await navigator.clipboard.writeText(t),j(e,n,r,i)}catch{}}function j(e,t,n,r){e.innerHTML=d,e.setAttribute(`aria-label`,r),e.classList.add(`copy-code-btn--copied`),M(e,t,n)}function M(e,t,n){let r=setTimeout(()=>{t.delete(r),N(e,n)},2e3);t.add(r)}function N(e,t){e.innerHTML=u,e.setAttribute(`aria-label`,t),e.classList.remove(`copy-code-btn--copied`)}function P(e){return`<button class="copy-code-btn" type="button" aria-label="${F(e)}">${u}</button>`}function F(e){return e.replaceAll(`&`,`&`).replaceAll(`<`,`<`).replaceAll(`>`,`>`).replaceAll(`"`,`"`).replaceAll(`'`,`'`)}export{f as MarkdownContentRenderer};
|