sliccy 1.55.0 → 1.55.2

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.
@@ -0,0 +1 @@
1
+ import{r as e}from"./index-l6Ye92eW.js";export{e as getLickManager};
@@ -91,4 +91,4 @@ Use this EXACT format:
91
91
  - [Preserve important context, add new if needed]
92
92
 
93
93
  Keep each section concise. Preserve exact file paths, function names, and error messages.`;async function br(e,t,n,r,i,a,o,s){let c=Math.floor(.8*n),l=s?yr:vr;o&&(l=`${l}\n\nAdditional focus: ${o}`);let u=`<conversation>\n${pr(ur(e))}\n</conversation>\n\n`;s&&(u+=`<previous-summary>\n${s}\n</previous-summary>\n\n`),u+=l;let d=[{role:`user`,content:[{type:`text`,text:u}],timestamp:Date.now()}],f=t.reasoning?{maxTokens:c,signal:a,apiKey:r,headers:i,reasoning:`high`}:{maxTokens:c,signal:a,apiKey:r,headers:i},p=await Le(t,{systemPrompt:mr,messages:d},f);if(p.stopReason===`error`)throw Error(`Summarization failed: ${p.errorMessage||`Unknown error`}`);return p.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
94
- `)}var K=a(`context-compaction`),xr=2e5;function Sr(e){let t=e.contextWindow??xr,n=e.reserveTokens??hr.reserveTokens,r=e.keepRecentTokens??hr.keepRecentTokens,i={enabled:!0,reserveTokens:n,keepRecentTokens:r};return async(a,o)=>{if(a.length===0)return a;let s=0;for(let e of a)s+=_r(e);if(!gr(s,t,i))return a;K.info(`Context compaction triggered`,{totalTokens:s,contextWindow:t,threshold:t-n,messageCount:a.length});let c=0,l=a.length;for(let e=a.length-1;e>=0;e--){let t=_r(a[e]);if(c+t>r&&l<a.length)break;c+=t,l=e}for(;l>0&&a[l].role===`toolResult`;)l--;if(l<=0||l>=a.length)return K.warn(`Cannot find valid cut point for compaction`),a;let u=a.slice(0,l),d=a.slice(l);K.info(`Compaction cut point`,{summarizing:u.length,keeping:d.length});let f=e.getApiKey();if(f)try{let t=await br(u,e.model,n,f,o),r={role:`user`,content:[{type:`text`,text:`<context-summary>\n${t}\n</context-summary>`}]};return K.info(`LLM summarization successful`,{originalMessages:a.length,compactedMessages:1+d.length,summaryLength:t.length}),[r,...d]}catch(e){K.warn(`LLM summarization failed, falling back to naive drop`,{error:e instanceof Error?e.message:String(e)})}else K.warn(`No API key available for LLM summarization, falling back to naive drop`);return K.info(`Naive compaction applied`,{originalMessages:a.length,compactedMessages:1+d.length}),[{role:`user`,content:[{type:`text`,text:`[Earlier conversation messages were compacted to save context space]`}]},...d]}}var Cr={include:[`*`],exclude:[]},wr=r({config:()=>Tr}),Tr={id:`azure-ai-foundry`,name:`Azure (Claude)`,description:`Claude models via Azure AI Foundry`,requiresApiKey:!0,apiKeyPlaceholder:`Azure API key`,apiKeyEnvVar:`AZURE_API_KEY`,requiresBaseUrl:!0,baseUrlPlaceholder:`https://your-resource.services.ai.azure.com/anthropic`,baseUrlDescription:`Azure AI Foundry endpoint — must end with /anthropic`},Er=r({config:()=>kr,register:()=>Lr}),Dr=`azure-openai`,Or=`2024-12-01-preview`,kr={id:Dr,name:`Azure OpenAI`,description:`GPT models via Azure AI Foundry`,requiresApiKey:!0,apiKeyPlaceholder:`Azure API key`,apiKeyEnvVar:`AZURE_OPENAI_API_KEY`,requiresBaseUrl:!0,baseUrlPlaceholder:`https://your-resource.cognitiveservices.azure.com/`,baseUrlDescription:`Azure resource endpoint`,requiresDeployment:!0,deploymentPlaceholder:`gpt-4.1-mini, gpt-4o, o4-mini`,deploymentDescription:`Comma-separated deployment names (from Azure Portal → Deployments)`,requiresApiVersion:!0,apiVersionDefault:Or,apiVersionDescription:`Azure OpenAI API version`,getModelIds:()=>{let e=na(Dr);if(!e)return[{id:`azure-unconfigured`,name:`Azure OpenAI (set deployments in Settings)`}];let t=e.split(`,`).map(e=>e.trim()).filter(Boolean);return t.length===0?[{id:`azure-unconfigured`,name:`Azure OpenAI (set deployments in Settings)`}]:t.map(e=>{let t=e.startsWith(`o1`)||e.startsWith(`o3`)||e.startsWith(`o4`);return{id:e,name:`${e} (Azure)`,reasoning:t,input:[`text`,`image`]}})}};function Ar(e){return e.replace(/[^a-zA-Z0-9_-]/g,`_`).slice(0,64)}function jr(e,t){let n=m(e.messages,t,Ar),r=[];for(let e of n)if(e.role===`user`)if(typeof e.content==`string`)r.push({role:`user`,content:e.content});else{let t=e.content.map(e=>e.type===`text`?{type:`text`,text:e.text??``}:e.type===`image`?{type:`image_url`,image_url:{url:`data:${e.mimeType};base64,${e.data}`}}:{type:`text`,text:JSON.stringify(e)});r.push({role:`user`,content:t})}else if(e.role===`assistant`){let t=e.content,n=t.filter(e=>e.type===`text`).map(e=>e.text??``).join(``),i=t.filter(e=>e.type===`toolCall`).map(e=>({id:e.id??``,type:`function`,function:{name:e.name??``,arguments:JSON.stringify(e.arguments??{})}}));i.length?r.push({role:`assistant`,content:n||null,tool_calls:i}):r.push({role:`assistant`,content:n})}else if(e.role===`toolResult`){let t=e.content;r.push({role:`tool`,tool_call_id:e.toolCallId??``,content:t?.map(e=>e.type===`text`?e.text??``:JSON.stringify(e)).join(``)||``})}return r}function Mr(e){if(e?.length)return e.map(e=>({type:`function`,function:{name:e.name,description:e.description,parameters:e.parameters}}))}function Nr(e){let t=e.content.find(e=>e.type===`text`);if(t)return{block:t,index:e.content.indexOf(t)};let n={type:`text`,text:``};return e.content.push(n),{block:n,index:e.content.length-1}}function Pr(e,t){return e.content.find(e=>e.type===`toolCall`&&e.id===t)}var Fr=(e,t,n={})=>{let r=_();return(async()=>{let i={role:`assistant`,content:[],api:`azure-openai-anthropic`,provider:Dr,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`stop`,timestamp:Date.now()};try{let a=n.apiKey;if(!a)throw Error(`Azure API key is required`);let o=e.baseUrl;if(!o)throw Error(`Azure endpoint is required`);let s=e.id,c={};e.headers&&Object.assign(c,e.headers),n.headers&&Object.assign(c,n.headers);let l=ra(Dr)||Or,u=new S({endpoint:o.replace(/\/+$/,``),apiKey:a,deployment:s,apiVersion:l,dangerouslyAllowBrowser:!0,defaultHeaders:c}),d=[...t.systemPrompt?[{role:`system`,content:t.systemPrompt}]:[],...jr(t,e)],f=Mr(t.tools),p=await u.chat.completions.create({model:s,messages:d,stream:!0,stream_options:{include_usage:!0},...n.maxTokens?{max_completion_tokens:n.maxTokens}:{},...n.temperature===void 0?{}:{temperature:n.temperature},...f?{tools:f}:{}});r.push({type:`start`,partial:i});for await(let t of p){t.usage&&(i.usage.input=t.usage.prompt_tokens??0,i.usage.output=t.usage.completion_tokens??0,i.usage.totalTokens=t.usage.total_tokens??0,y(e,i.usage));for(let e of t.choices??[]){let t=e.delta;if(t){if(t.content){let{block:e,index:n}=Nr(i);e.text===``&&r.push({type:`text_start`,contentIndex:n,partial:i}),e.text+=t.content,r.push({type:`text_delta`,contentIndex:n,delta:t.content,partial:i})}if(t.tool_calls)for(let e of t.tool_calls){let t=e.id?Pr(i,e.id):void 0;if(!t&&e.id&&(t={type:`toolCall`,id:e.id,name:e.function?.name??``,arguments:{},_partialJson:``},i.content.push(t),r.push({type:`toolcall_start`,contentIndex:i.content.length-1,partial:i})),t&&e.function?.arguments){t._partialJson+=e.function.arguments;try{t.arguments=JSON.parse(t._partialJson)}catch{}r.push({type:`toolcall_delta`,contentIndex:i.content.indexOf(t),delta:e.function.arguments,partial:i})}}e.finish_reason&&(i.stopReason=e.finish_reason===`tool_calls`?`toolUse`:e.finish_reason===`length`?`length`:`stop`)}}}for(let e of i.content){let t=i.content.indexOf(e);if(e.type===`toolCall`){let n=e;try{n.arguments=JSON.parse(n._partialJson||`{}`)}catch{}delete n._partialJson,r.push({type:`toolcall_end`,contentIndex:t,toolCall:e,partial:i})}else e.type===`text`&&r.push({type:`text_end`,contentIndex:t,content:e.text,partial:i})}r.push({type:`done`,reason:i.stopReason,message:i}),r.end()}catch(e){i.stopReason=n.signal?.aborted?`aborted`:`error`,i.errorMessage=e instanceof Error?e.message:JSON.stringify(e),r.push({type:`error`,reason:i.stopReason,error:i}),r.end()}})(),r},Ir=(e,t,n)=>{let r=n?.apiKey;if(!r)throw Error(`Azure API key is required`);return Fr(e,t,{...g(e,n,r)})};function Lr(){E({api:`azure-openai-anthropic`,stream:Fr,streamSimple:Ir})}var Rr=r({config:()=>zr,register:()=>ei,streamBedrockCamp:()=>J,streamSimpleBedrockCamp:()=>$r}),zr={id:`bedrock-camp`,name:`AWS Bedrock (CAMP)`,description:`Claude on AWS Bedrock via CAMP Bearer token`,requiresApiKey:!0,apiKeyPlaceholder:`ABSK...`,apiKeyEnvVar:`BEDROCK_CAMP_API_KEY`,requiresBaseUrl:!0,baseUrlPlaceholder:`https://bedrock-runtime.us-west-2.amazonaws.com`,baseUrlDescription:`Bedrock runtime endpoint from CAMP portal`,requiresModelSelection:!0,defaultModelId:`claude-sonnet-4-6`},Br=typeof chrome<`u`&&!!chrome?.runtime?.id;function Vr(e){let t=e.replace(/[^a-zA-Z0-9_-]/g,`_`);return t.length>64?t.slice(0,64):t}function q(e){return e?e.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g,`�`):``}function Hr(e,t){let n=[],r=m(e.messages,t,Vr);for(let e=0;e<r.length;e++){let i=r[e];switch(i.role){case`user`:n.push({role:`user`,content:typeof i.content==`string`?[{text:q(i.content)}]:i.content.map(e=>{if(e.type===`text`)return{text:q(e.text)};if(e.type===`image`)return{image:{source:{bytes:e.data},format:Ur(e.mimeType)}};throw Error(`Unknown user content type: ${e.type}`)})});break;case`assistant`:{if(i.content.length===0)continue;let e=[];for(let n of i.content)switch(n.type){case`text`:if(n.text.trim().length===0)continue;e.push({text:q(n.text)});break;case`toolCall`:e.push({toolUse:{toolUseId:n.id,name:n.name,input:n.arguments}});break;case`thinking`:if(n.thinking.trim().length===0)continue;Wr(t)?e.push({reasoningContent:{reasoningText:{text:q(n.thinking),signature:n.thinkingSignature}}}):e.push({reasoningContent:{reasoningText:{text:q(n.thinking)}}});break}if(e.length===0)continue;n.push({role:`assistant`,content:e});break}case`toolResult`:{let t=[];t.push({toolResult:{toolUseId:i.toolCallId,content:i.content.map(e=>e.type===`image`?{image:{source:{bytes:e.data},format:Ur(e.mimeType)}}:{text:q(e.text??e.json??JSON.stringify(e))}),status:i.isError?`error`:`success`}});let a=e+1;for(;a<r.length&&r[a].role===`toolResult`;){let e=r[a];t.push({toolResult:{toolUseId:e.toolCallId,content:e.content.map(e=>e.type===`image`?{image:{source:{bytes:e.data},format:Ur(e.mimeType)}}:{text:q(e.text??e.json??JSON.stringify(e))}),status:e.isError?`error`:`success`}}),a++}e=a-1,n.push({role:`user`,content:t});break}}}if(Yr(t)&&n.length>0){let e=n[n.length-1];e.role===`user`&&Array.isArray(e.content)&&e.content.push({cachePoint:{type:`default`}})}return n}function Ur(e){switch(e){case`image/jpeg`:case`image/jpg`:return`jpeg`;case`image/png`:return`png`;case`image/gif`:return`gif`;case`image/webp`:return`webp`;default:return`png`}}function Wr(e){let t=e.id.toLowerCase();return t.includes(`anthropic.claude`)||t.includes(`anthropic/claude`)}function Gr(e){return e.includes(`opus-4-6`)||e.includes(`opus-4.6`)||e.includes(`sonnet-4-6`)||e.includes(`sonnet-4.6`)}function Kr(e,t){if(!e?.length||t===`none`)return;let n=e.map(e=>({toolSpec:{name:e.name,description:e.description,inputSchema:{json:e.parameters}}})),r;switch(t){case`auto`:r={auto:{}};break;case`any`:r={any:{}};break;default:t&&typeof t==`object`&&t.type===`tool`&&(r={tool:{name:t.name}})}return{tools:n,toolChoice:r}}function qr(e,t){switch(e){case`minimal`:case`low`:return`low`;case`medium`:return`medium`;case`high`:return`high`;case`xhigh`:return t.includes(`opus-4-6`)||t.includes(`opus-4.6`)?`max`:`high`;default:return`high`}}function Jr(e,t){if(!(!t.reasoning||!e.reasoning)&&(e.id.includes(`anthropic.claude`)||e.id.includes(`anthropic/claude`)))return Gr(e.id)?{thinking:{type:`adaptive`},output_config:{effort:qr(t.reasoning,e.id)}}:(()=>{let e={minimal:1024,low:2048,medium:8192,high:16384,xhigh:16384},n=t.reasoning===`xhigh`?`high`:t.reasoning;return{thinking:{type:`enabled`,budget_tokens:t.thinkingBudgets?.[n]??e[t.reasoning]}}})()}function Yr(e){let t=e.id.toLowerCase();return t.includes(`claude`)?!!(t.includes(`-4-`)||t.includes(`-4.`)||t.includes(`claude-3-7-sonnet`)||t.includes(`claude-3-5-haiku`)):!1}function Xr(e,t){if(!e)return;let n=[{text:q(e)}];return Yr(t)&&n.push({cachePoint:{type:`default`}}),n}function Zr(e){switch(e){case`end_turn`:case`stop_sequence`:return`stop`;case`max_tokens`:case`model_context_window_exceeded`:return`length`;case`tool_use`:return`toolUse`;default:return`error`}}function Qr(e,t,n,r){r.push({type:`start`,partial:n});let i=e.output?.message;if(i?.content)for(let e=0;e<i.content.length;e++){let t=i.content[e];if(t.text!==void 0){let e={type:`text`,text:t.text};n.content.push(e);let i=n.content.length-1;r.push({type:`text_start`,contentIndex:i,partial:n}),r.push({type:`text_delta`,contentIndex:i,delta:t.text,partial:n}),r.push({type:`text_end`,contentIndex:i,content:t.text,partial:n})}else if(t.toolUse){let e={type:`toolCall`,id:t.toolUse.toolUseId||``,name:t.toolUse.name||``,arguments:t.toolUse.input||{}};n.content.push(e);let i=n.content.length-1;r.push({type:`toolcall_start`,contentIndex:i,partial:n}),r.push({type:`toolcall_end`,contentIndex:i,toolCall:e,partial:n})}else if(t.reasoningContent?.reasoningText){let e={type:`thinking`,thinking:t.reasoningContent.reasoningText.text||``,thinkingSignature:t.reasoningContent.reasoningText.signature||``};n.content.push(e);let i=n.content.length-1;r.push({type:`thinking_start`,contentIndex:i,partial:n}),r.push({type:`thinking_delta`,contentIndex:i,delta:e.thinking,partial:n}),r.push({type:`thinking_end`,contentIndex:i,content:e.thinking,partial:n})}}e.usage&&(n.usage.input=e.usage.inputTokens||0,n.usage.output=e.usage.outputTokens||0,n.usage.cacheRead=e.usage.cacheReadInputTokens||0,n.usage.cacheWrite=e.usage.cacheWriteInputTokens||0,n.usage.totalTokens=e.usage.totalTokens||n.usage.input+n.usage.output,y(t,n.usage)),n.stopReason=Zr(e.stopReason||`end_turn`)}var J=(e,t,n={})=>{let r=_();return(async()=>{let i={role:`assistant`,content:[],api:`bedrock-camp-converse`,provider:e.provider,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`stop`,timestamp:Date.now()};try{let a=n.apiKey;if(!a)throw Error(`API key is required for Bedrock CAMP`);let o=e.baseUrl;if(!o)throw Error(`Base URL is required for Bedrock CAMP`);let s={modelId:e.id,messages:Hr(t,e),system:Xr(t.systemPrompt,e),inferenceConfig:{maxTokens:n.maxTokens,temperature:n.temperature},toolConfig:Kr(t.tools,n.toolChoice),additionalModelRequestFields:Jr(e,n)};s.system||delete s.system,s.toolConfig||delete s.toolConfig,s.additionalModelRequestFields||delete s.additionalModelRequestFields,n?.onPayload?.(s,e);let c=`${o.replace(/\/$/,``)}/model/${encodeURIComponent(e.id)}/converse`,l=Br?c:`/api/fetch-proxy`,u={"Content-Type":`application/json`,Authorization:`Bearer ${a}`};Br||(u[`X-Target-URL`]=c);let d=await fetch(l,{method:`POST`,headers:u,body:JSON.stringify(s),signal:n.signal});if(!d.ok){let e=await d.text();throw Error(`Bedrock CAMP API error (${d.status}): ${e}`)}if(Qr(await d.json(),e,i,r),i.stopReason===`error`||i.stopReason===`aborted`)throw Error(`An unknown error occurred`);r.push({type:`done`,reason:i.stopReason,message:i}),r.end()}catch(e){for(let e of i.content)delete e.index,delete e.partialJson;i.stopReason=n.signal?.aborted?`aborted`:`error`,i.errorMessage=e instanceof Error?e.message:JSON.stringify(e),r.push({type:`error`,reason:i.stopReason,error:i}),r.end()}})(),r},$r=(e,t,n)=>{let r=g(e,n,void 0);if(!n?.reasoning)return J(e,t,{...r,reasoning:void 0});if(e.id.includes(`anthropic.claude`)||e.id.includes(`anthropic/claude`)){if(Gr(e.id))return J(e,t,{...r,reasoning:n.reasoning,thinkingBudgets:n.thinkingBudgets});let i=b(r.maxTokens||0,e.maxTokens,n.reasoning,n.thinkingBudgets);return J(e,t,{...r,maxTokens:i.maxTokens,reasoning:n.reasoning,thinkingBudgets:{...n.thinkingBudgets||{},[v(n.reasoning)]:i.budgetTokens}})}return J(e,t,{...r,reasoning:n.reasoning,thinkingBudgets:n.thinkingBudgets})};function ei(){E({api:`bedrock-camp-converse`,stream:J,streamSimple:$r})}var ti={proxyEndpoint:`https://adobe-llm-proxy.paolo-moz.workers.dev`,redirectUri:`https://www.sliccy.ai/auth/callback`,extensionRedirectUri:`https://akjjllgokmbgpbdbmafpiefnhidlmbgf.chromiumapp.org/adobe`},ni=r({config:()=>hi,getAdobeModels:()=>Ti,getValidAccessToken:()=>_i,isTokenExpired:()=>vi,register:()=>Ei}),Y=Object.assign({"/packages/webapp/providers/adobe-config.json":ti})[`/packages/webapp/providers/adobe-config.json`]??{clientId:``,proxyEndpoint:``,scopes:`openid,profile,email`};function X(){let e=ta(`adobe`);if(e)return e.replace(/\/$/,``);if(Y.proxyEndpoint)return Y.proxyEndpoint.replace(/\/$/,``);throw Error(`Adobe proxy endpoint not configured — set it in Settings or adobe-config.json`)}var ri=new Map,ii=new Map;async function ai(e){let t=ri.get(e);if(t)return t;try{let t=await fetch(`${e}/v1/config`);if(t.ok){let n=await t.json();return ri.set(e,n),n}console.warn(`[adobe] Proxy /v1/config returned ${t.status}, falling back to build-time config`)}catch(e){console.warn(`[adobe] Failed to fetch proxy config:`,e instanceof Error?e.message:String(e))}let n={};return ri.set(e,n),n}function oi(e){let t=e.clientId||Y.clientId;if(!t)throw Error(`Could not determine IMS client ID — proxy /v1/config did not return one and adobe-config.json is empty`);return t}function si(e){return e.scopes||Y.scopes}function ci(e){return e.imsEnvironment||Y.imsEnvironment||`prod`}var li={prod:`https://ims-na1.adobelogin.com`,stg1:`https://ims-na1-stg1.adobelogin.com`};function ui(e){return li[e??Y.imsEnvironment??`prod`]??li.prod}var di=typeof chrome<`u`&&!!chrome?.runtime?.id;function fi(){return $().find(e=>e.providerId===`adobe`)}async function pi(e,t){try{let n=await fetch(`${ui(t)}/ims/userinfo/v2`,{headers:{Authorization:`Bearer ${e}`}});if(n.ok){let e=await n.json();return{name:e.displayName||e.name||e.email,avatar:e.picture||e.avatar_url}}console.warn(`[adobe] User profile fetch returned ${n.status}, account will have no display name`)}catch(e){console.warn(`[adobe] Failed to fetch user profile:`,e instanceof Error?e.message:String(e))}return{}}function mi(e){let t=e.indexOf(`#`);if(t<0)return null;let n=new URLSearchParams(e.slice(t+1)),r=n.get(`access_token`);return r?{accessToken:r,expiresIn:parseInt(n.get(`expires_in`)??`86400`,10)}:null}var hi={id:`adobe`,name:`Adobe`,description:`Claude via Adobe — login with your Adobe ID`,requiresApiKey:!1,requiresBaseUrl:!Y.proxyEndpoint,baseUrlPlaceholder:`https://your-proxy.example.com`,baseUrlDescription:`Anthropic-compatible proxy endpoint`,isOAuth:!0,defaultModelId:`sonnet`,getModelIds:()=>{let e=e=>{let t={id:e.id,name:e.name??e.id},n=ii.get(e.id);return n?.api&&(t.api=n.api),n?.context_window!==void 0&&(t.context_window=n.context_window),n?.max_tokens!==void 0&&(t.max_tokens=n.max_tokens),n?.reasoning!==void 0&&(t.reasoning=n.reasoning),n?.input&&(t.input=n.input),t};for(let t of wi.values())if(t.length){let n=t.map(t=>e({id:t.id,name:t.name??t.id}));try{localStorage.setItem(`slicc-adobe-models`,JSON.stringify(n))}catch{}return n}for(let t of ri.values())if(t.models?.length)return t.models.map(e);try{let e=localStorage.getItem(`slicc-adobe-models`);if(e){let t=JSON.parse(e);if(t.length)return t}}catch{}return[{id:`claude-sonnet-4-6`,name:`Claude Sonnet 4.6`}]},onOAuthLogin:async(e,t)=>{let n=await ai(X()),r=oi(n),i=si(n),a=ci(n),o=di?Y.extensionRedirectUri??`https://${chrome.runtime.id}.chromiumapp.org/`:Y.redirectUri??`${window.location.origin}/auth/callback`,s=di?void 0:btoa(JSON.stringify({port:parseInt(new URL(window.location.href).port||`5710`,10),path:`/auth/callback`,nonce:crypto.randomUUID()})),c=s?JSON.parse(atob(s)).nonce:null,l=new URLSearchParams({client_id:r,scope:i,response_type:`token`,redirect_uri:o});s&&l.set(`state`,s);let u=await e(`${ui(a)}/ims/authorize/v2?${l}`);if(!u)return;if(c&&u)try{if(new URL(u).searchParams.get(`nonce`)!==c){console.error(`[adobe] OAuth nonce mismatch — possible CSRF`);return}}catch(e){console.warn(`[adobe] Nonce check skipped (URL parse failed):`,e instanceof Error?e.message:String(e))}let d=mi(u);if(!d){console.error(`[adobe] Could not extract token from redirect URL`);return}let f=await pi(d.accessToken,a);$i({providerId:`adobe`,accessToken:d.accessToken,tokenExpiresAt:Date.now()+d.expiresIn*1e3,userName:f.name,userAvatar:f.avatar}),await Ti().catch(e=>console.warn(`[adobe] Failed to fetch models after login:`,e instanceof Error?e.message:String(e))),t()},onOAuthLogout:async()=>{let e=fi();if(e?.accessToken)try{let t=ri.values().next().value??{},n=t.clientId||Y.clientId,r=ci(t);if(n){let t=await fetch(`${ui(r)}/ims/revoke`,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`},body:new URLSearchParams({token:e.accessToken,token_type_hint:`access_token`,client_id:n})});t.ok||console.warn(`[adobe] Token revocation returned ${t.status}, token may still be valid server-side`)}}catch(e){console.warn(`[adobe] Failed to revoke token:`,e instanceof Error?e.message:String(e))}$i({providerId:`adobe`,accessToken:``})}},gi=null;async function _i(){let e=fi();if(!e?.accessToken)throw Error(`Not logged in to Adobe — please log in first`);if((e.tokenExpiresAt??0)-Date.now()>6e4)return e.accessToken;console.log(`[adobe] Token expired or expiring soon, attempting silent renewal...`);try{let e=await yi();if(e)return e}catch(e){console.warn(`[adobe] Silent renewal failed:`,e instanceof Error?e.message:String(e))}let t=fi();if((t?.tokenExpiresAt??0)-Date.now()>0&&t?.accessToken)return t.accessToken;throw Error(`Adobe session expired — please log in again`)}function vi(){let e=fi();return e?.tokenExpiresAt?Date.now()>e.tokenExpiresAt-6e4:!0}async function yi(){return gi||(gi=(async()=>{try{let e=await ai(X()),t=oi(e),n=si(e),r=ci(e),i=di?Y.extensionRedirectUri??`https://${chrome.runtime.id}.chromiumapp.org/`:Y.redirectUri??`${window.location.origin}/auth/callback`,a=di?void 0:btoa(JSON.stringify({port:parseInt(new URL(window.location.href).port||`5710`,10),path:`/auth/callback`,nonce:crypto.randomUUID()})),o=a?JSON.parse(atob(a)).nonce:null,s=new URLSearchParams({client_id:t,scope:n,response_type:`token`,redirect_uri:i,prompt:`none`});a&&s.set(`state`,a);let c=`${ui(r)}/ims/authorize/v2?${s}`,{createOAuthLauncher:l}=await d(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-t9Y4KdOX.js`);return{createOAuthLauncher:e}},[]),u=await l()(c);if(!u)return null;if(o&&u)try{if(new URL(u).searchParams.get(`nonce`)!==o)return console.error(`[adobe] OAuth nonce mismatch — possible CSRF`),null}catch(e){console.warn(`[adobe] Nonce check skipped (URL parse failed):`,e instanceof Error?e.message:String(e))}let f=mi(u);if(!f)return null;let p=fi();return $i({providerId:`adobe`,accessToken:f.accessToken,tokenExpiresAt:Date.now()+f.expiresIn*1e3,userName:p?.userName,userAvatar:p?.userAvatar}),console.log(`[adobe] Token renewed silently`),await Ti().catch(e=>console.warn(`[adobe] Failed to refresh models after silent renewal:`,e instanceof Error?e.message:String(e))),f.accessToken}catch(e){return console.warn(`[adobe] Silent renewal error:`,e instanceof Error?e.message:String(e)),null}finally{gi=null}})(),gi)}function bi(e,t){return{type:`error`,reason:`error`,error:{role:`assistant`,content:[],api:`adobe-anthropic`,provider:`adobe`,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`error`,errorMessage:t instanceof Error?t.message:String(t),timestamp:Date.now()}}}var xi=(e,t,n={})=>{let r=_();return(async()=>{try{let i=await _i();if(String(e.api).includes(`openai`)){let a=Oe({...e,baseUrl:`${X()}/v1`,api:`openai-completions`,compat:{...e.compat,supportsStore:!1,supportsDeveloperRole:!1}},t,{...n,apiKey:i});for await(let e of a)r.push(e)}else{let a=me({...e,baseUrl:X(),api:`anthropic-messages`},t,{...n,apiKey:i});for await(let e of a)r.push(e)}r.end()}catch(t){console.error(`[adobe] Stream error:`,t instanceof Error?t.message:String(t)),r.push(bi(e,t)),r.end()}})(),r},Si=(e,t,n)=>{let r=_();return(async()=>{try{let i=await _i();if(String(e.api).includes(`openai`)){let a=ke({...e,baseUrl:`${X()}/v1`,api:`openai-completions`,compat:{...e.compat,supportsStore:!1,supportsDeveloperRole:!1}},t,{...n,apiKey:i});for await(let e of a)r.push(e)}else{let a=he({...e,baseUrl:X(),api:`anthropic-messages`},t,{...n,apiKey:i});for await(let e of a)r.push(e)}r.end()}catch(t){console.error(`[adobe] Stream error:`,t instanceof Error?t.message:String(t)),r.push(bi(e,t)),r.end()}})(),r};async function Ci(){try{let e=await _i(),t=X(),n=await fetch(`${t}/v1/models`,{headers:{Authorization:`Bearer ${e}`}});if(n.ok){let e=await n.json();if(e.data?.length){for(let t of e.data){let e={id:t.id,name:t.name};t.api!==void 0&&(e.api=t.api),t.context_window!==void 0&&(e.context_window=t.context_window),t.max_tokens!==void 0&&(e.max_tokens=t.max_tokens),t.reasoning!==void 0&&(e.reasoning=t.reasoning),t.input!==void 0&&(e.input=t.input),ii.set(t.id,e)}let n=new Map;for(let e of x())try{for(let t of h(e))n.set(t.id,t)}catch{}return e.data.map(e=>{let r=n.get(e.id),i=`adobe-${e.api===`openai`?`openai`:`anthropic`}`;return r?{...r,provider:`adobe`,api:i}:{id:e.id,name:e.name??e.id,provider:`adobe`,api:i,baseUrl:t,contextWindow:2e5,maxTokens:16384,input:[`text`,`image`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},inputCost:0,outputCost:0,cacheReadCost:0,cacheWriteCost:0,reasoning:!0}})}}else console.warn(`[adobe] Proxy /v1/models returned ${n.status}, falling back to Anthropic models`)}catch(e){console.warn(`[adobe] Failed to fetch proxy models:`,e instanceof Error?e.message:String(e))}return h(`anthropic`).map(e=>({...e,provider:`adobe`,api:`adobe-anthropic`}))}var wi=new Map;async function Ti(){let e=X(),t=wi.get(e);if(t)return t;let n=await Ci();return wi.set(e,n),n}function Ei(){E({api:`adobe-anthropic`,stream:xi,streamSimple:Si}),E({api:`adobe-openai`,stream:xi,streamSimple:Si})}var Di=Object.assign({"/packages/dev-tools/providers.build.json":Cr})[`/packages/dev-tools/providers.build.json`]??{include:[`*`],exclude:[]};function Oi(e){let{include:t,exclude:n}=Di;return n.includes(`*`)||n.includes(e)?!1:!!(t.includes(`*`)||t.includes(e))}var ki=Object.assign({"./built-in/azure-ai-foundry.ts":wr,"./built-in/azure-openai.ts":Er,"./built-in/bedrock-camp.ts":Rr}),Ai=Object.assign({"/packages/webapp/providers/adobe.ts":ni}),ji=new Map;for(let[e,t]of Object.entries(ki))t.config&&Oi(t.config.id)&&(ji.set(t.config.id,t.config),t.register?.());for(let[e,t]of Object.entries(Ai))t.config&&(ji.set(t.config.id,t.config),t.register?.());function Mi(e){return ji.get(e)}function Ni(){return[...ji.keys()]}var Pi=p,Fi=h;function Ii(){return typeof chrome<`u`&&!!chrome?.runtime?.id}var Li=`slicc_accounts`,Z=`selected-model`,Ri=[`slicc_provider`,`slicc_api_key`,`slicc_base_url`,`anthropic_api_key`,`api_provider`,`azure_resource`,`bedrock_region`],zi=!1;function Bi(){if(!zi){zi=!0;for(let e of Ri)try{localStorage.removeItem(e)}catch{}}}function Vi(){let e=x().filter(Oi),t=Ni();return[...new Set([...e,...t])]}function Q(e){return Mi(e)||{id:e,name:e.split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),description:`${e} provider`,requiresApiKey:!0,requiresBaseUrl:!1}}function Hi(e,t){t.context_window!==void 0&&(e.contextWindow=t.context_window),t.max_tokens!==void 0&&(e.maxTokens=t.max_tokens),t.reasoning!==void 0&&(e.reasoning=t.reasoning),t.input!==void 0&&(e.input=t.input)}function Ui(e){try{if(e===`bedrock-camp`){let e=Fi(`amazon-bedrock`),t=Zi(`bedrock-camp`),n=t?e.filter(e=>e.id===t):e;return(n.length>0?n:e).map(e=>({...e,api:`bedrock-camp-converse`,provider:`bedrock-camp`}))}let t=Q(e);if(t.getModelIds){let n;try{n=t.getModelIds()}catch(t){return Ki.error(`Provider getModelIds callback failed`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}let r=new Map;for(let e of x())try{for(let t of Fi(e))r.set(t.id,t)}catch{}return n.map(n=>{let i=`${e}-${n.api===`openai`?`openai`:`anthropic`}`,a=r.get(n.id),o=a?{...a,api:i,provider:e}:{id:n.id,name:n.name??n.id,provider:e,api:i,baseUrl:``,contextWindow:2e5,maxTokens:16384,input:[`text`,`image`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},inputCost:0,outputCost:0,cacheReadCost:0,cacheWriteCost:0,reasoning:!0},s=t.modelOverrides?.[n.id];return s&&Hi(o,s),Hi(o,n),o})}if(t.isOAuth){let n=Fi(`anthropic`),r=`${e}-anthropic`;return n.map(n=>{let i={...n,api:r,provider:e},a=t.modelOverrides?.[n.id];return a&&Hi(i,a),i})}return Fi(e===`azure-ai-foundry`?`anthropic`:e)}catch(t){return Ki.error(`Failed to load models`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}}function Wi(e){let t=$().find(t=>t.providerId===e);if(!t?.accessToken)return null;let n=!!t.tokenExpiresAt&&Date.now()>t.tokenExpiresAt-6e4;return{token:t.accessToken,expiresAt:t.tokenExpiresAt,userName:t.userName,userAvatar:t.userAvatar,expired:n}}var Gi=Object.assign({})[`/packages/webapp/providers.json`]??[],Ki=a(`provider-settings`);function qi(e=Gi){if(e.length===0||$().length>0)return;let t=new Set(Vi());for(let n of e)if(!(!n.providerId||!n.apiKey)){if(!t.has(n.providerId)){Ki.warn(`Unknown provider "${n.providerId}" in providers.json — skipping`);continue}Xi(n.providerId,n.apiKey,n.baseUrl)}let n=e.find(e=>e.providerId&&e.apiKey&&t.has(e.providerId));n?.model&&!localStorage.getItem(Z)&&localStorage.setItem(Z,`${n.providerId}:${n.model}`)}function Ji(){let e=$();if(e.length===0)return[];let t=new Map;for(let n of e){if(t.has(n.providerId))continue;let e=Ui(n.providerId);if(e.length===0)continue;let r=Q(n.providerId),i={providerId:n.providerId,providerName:r.name,models:e};t.set(n.providerId,i)}return[...t.values()]}function $(){Bi();let e=localStorage.getItem(Li);if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`object`&&!!e&&typeof e.providerId==`string`&&typeof e.apiKey==`string`):[]}catch{return[]}}function Yi(e){localStorage.setItem(Li,JSON.stringify(e))}function Xi(e,t,n,r,i,a){let o=$().filter(t=>t.providerId!==e),s={providerId:e,apiKey:t};n&&(s.baseUrl=n),r&&(s.modelId=r),i&&(s.deployment=i),a&&(s.apiVersion=a),o.push(s),Yi(o)}function Zi(e){return $().find(t=>t.providerId===e)?.modelId}function Qi(e){Yi($().filter(t=>t.providerId!==e))}function $i(e){let t=$().find(t=>t.providerId===e.providerId),n=$().filter(t=>t.providerId!==e.providerId);n.push({providerId:e.providerId,apiKey:``,accessToken:e.accessToken,refreshToken:e.refreshToken,tokenExpiresAt:e.tokenExpiresAt,userName:e.userName,userAvatar:e.userAvatar,baseUrl:e.baseUrl??t?.baseUrl}),Yi(n)}function ea(e){let t=$().find(t=>t.providerId===e);return t&&(t.accessToken||t.apiKey)||null}function ta(e){return $().find(t=>t.providerId===e)?.baseUrl??null}function na(e){return $().find(t=>t.providerId===e)?.deployment??null}function ra(e){return $().find(t=>t.providerId===e)?.apiVersion??null}function ia(){let e=localStorage.getItem(Z)||``,t=e.indexOf(`:`);return t>=0?e.slice(t+1):e}function aa(e){if(e.includes(`:`))localStorage.setItem(Z,e);else{let t=sa();localStorage.setItem(Z,`${t}:${e}`)}}function oa(){return localStorage.getItem(Z)||``}function sa(){let e=oa(),t=e.indexOf(`:`);if(t>0)return e.slice(0,t);let n=$();return n.length>0?n[0].providerId:`anthropic`}function ca(){return ea(sa())}function la(){let e=$(),t=sa(),n=ia();return e.map(e=>{let r={providerId:e.providerId,apiKey:e.apiKey};return e.baseUrl&&(r.baseUrl=e.baseUrl),e.providerId===t&&n&&(r.model=n),r})}function ua(){let e=JSON.stringify(la(),null,2),t=new Blob([e],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`providers.json`,r.click(),URL.revokeObjectURL(n)}function da(){localStorage.removeItem(Li),localStorage.removeItem(Z);for(let e of Ri)localStorage.removeItem(e)}function fa(e){if(!e)return pa();let t=sa(),n=ta(t);try{let r=Q(t),i=Pi(r.isOAuth||t===`azure-ai-foundry`?`anthropic`:t===`bedrock-camp`?`amazon-bedrock`:t,e);if(!i?.id)throw Error(`Model ${e} not found`);let a=i;if(r.isOAuth){let n=Ui(t).find(t=>t.id===e)?.api??`${t}-anthropic`;a={...a,api:n,provider:t}}else t===`bedrock-camp`&&(a={...a,api:`bedrock-camp-converse`,provider:`bedrock-camp`});return n&&(a={...a,baseUrl:n}),a}catch{return pa()}}function pa(){let e=sa(),t=ia(),n=ta(e),r=Ui(e),i=Q(e),a=i.defaultModelId?r.find(e=>e.id.toLowerCase().includes(i.defaultModelId.toLowerCase()))?.id:void 0,o=t||a||r[0]?.id||`claude-sonnet-4-6`;try{let t=Q(e),i=t.isOAuth||e===`azure-ai-foundry`?`anthropic`:e===`bedrock-camp`?`amazon-bedrock`:e,a=Pi(i,o);if(!a?.id)throw Error(`Model ${o} not found in ${i} registry`);let s=a;if(t.isOAuth){let t=r.find(e=>e.id===o)?.api??`${e}-anthropic`;s={...s,api:t,provider:e}}else e===`bedrock-camp`&&(s={...s,api:`bedrock-camp-converse`,provider:`bedrock-camp`});return n&&(s={...s,baseUrl:n}),s}catch{let e=r.find(e=>e.id===o);return e?n?{...e,baseUrl:n}:e:Pi(`anthropic`,`claude-sonnet-4-0`)}}function ma(e){return e.length<=10?`****`:e.slice(0,4)+`...`+e.slice(-4)}function ha(e){let t=`http://www.w3.org/2000/svg`,n=document.createElementNS(t,`svg`);n.setAttribute(`width`,`14`),n.setAttribute(`height`,`14`),n.setAttribute(`viewBox`,`0 0 20 20`),n.setAttribute(`fill`,`none`),n.setAttribute(`stroke`,`currentColor`),n.setAttribute(`stroke-width`,`1.5`),n.setAttribute(`stroke-linecap`,`round`),n.setAttribute(`stroke-linejoin`,`round`);for(let r of e){let e=document.createElementNS(t,`path`);e.setAttribute(`d`,r),n.appendChild(e)}return n}var ga={pen:[`M14.3 3.3a1.5 1.5 0 0 1 2.1 0l.3.3a1.5 1.5 0 0 1 0 2.1L7.7 14.8l-3.2.7.7-3.2z`],trash:[`M4 6h12`,`M8 6V4a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2`,`M6 6v10a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V6`]};function _a(e){return new Promise(t=>{let n=localStorage.getItem(Li)??``,r=document.createElement(`div`);r.className=`dialog-overlay`;let i=document.createElement(`div`);i.className=`dialog`,i.style.cssText=`max-width: 480px; width: 90vw; padding: 32px;`,$().length>0?a():e?.autoJoinUrl?c(e.autoJoinUrl):e?.preferTrayJoin?f():o(),r.appendChild(i),document.body.appendChild(r);function a(){i.innerHTML=``;let e=document.createElement(`div`);e.className=`dialog__title`,e.textContent=`Accounts`,i.appendChild(e);let s=$(),c=`background: transparent; border: 1px solid var(--s2-border-subtle); color: var(--s2-content-secondary); border-radius: var(--s2-radius-s); padding: 6px; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: color 0.15s, border-color 0.15s;`;if(s.length===0){let e=document.createElement(`div`);e.className=`dialog__desc`,e.textContent=`No accounts configured.`,i.appendChild(e)}else{let e=document.createElement(`div`);e.style.cssText=`margin-bottom: 16px;`;for(let t of s){let n=Q(t.providerId),r=document.createElement(`div`);r.style.cssText=`display: flex; align-items: center; justify-content: space-between; padding: 10px 12px; background: var(--s2-bg-layer-2); border-radius: var(--s2-radius-default); margin-bottom: 8px; border: 1px solid var(--s2-border-subtle);`;let i=document.createElement(`div`);i.style.cssText=`flex: 1; min-width: 0;`;let s=document.createElement(`div`);s.style.cssText=`font-size: 14px; font-weight: 600; color: var(--s2-content-default);`,s.textContent=n.name,i.appendChild(s);let l=document.createElement(`div`);l.style.cssText=`font-size: 11px; color: var(--s2-content-disabled); font-family: monospace; margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;`,t.userName?l.textContent=t.userName:t.accessToken?l.textContent=`Logged in`:l.textContent=ma(t.apiKey),t.baseUrl&&(l.textContent+=` • `+t.baseUrl),i.appendChild(l),r.appendChild(i);let u=document.createElement(`div`);u.style.cssText=`display: flex; gap: 4px; margin-left: 12px; flex-shrink: 0;`;let d=document.createElement(`button`);d.style.cssText=c,d.setAttribute(`aria-label`,`Edit account`),d.appendChild(ha(ga.pen)),d.addEventListener(`mouseenter`,()=>{d.style.color=`var(--s2-accent)`,d.style.borderColor=`var(--s2-accent)`}),d.addEventListener(`mouseleave`,()=>{d.style.color=`var(--s2-content-secondary)`,d.style.borderColor=`var(--s2-border-subtle)`}),d.addEventListener(`click`,()=>{o(t)}),u.appendChild(d);let f=document.createElement(`button`);f.style.cssText=c,f.setAttribute(`aria-label`,`Remove account`),f.appendChild(ha(ga.trash)),f.addEventListener(`mouseenter`,()=>{f.style.color=`var(--s2-negative)`,f.style.borderColor=`var(--s2-negative)`}),f.addEventListener(`mouseleave`,()=>{f.style.color=`var(--s2-content-secondary)`,f.style.borderColor=`var(--s2-border-subtle)`}),f.addEventListener(`click`,()=>{Qi(t.providerId),a()}),u.appendChild(f),r.appendChild(u),e.appendChild(r)}i.appendChild(e)}let d=document.createElement(`div`);d.style.cssText=`display: flex; gap: 8px;`;let p=document.createElement(`button`);p.className=s.length>0?`dialog__btn dialog__btn--secondary`:`dialog__btn`,p.style.flex=`1`,p.textContent=`Add Account`,p.addEventListener(`click`,()=>o()),d.appendChild(p);let m=document.createElement(`button`);m.className=`dialog__btn dialog__btn--secondary`,m.style.flex=`1`,m.textContent=`Export`,m.addEventListener(`click`,()=>ua()),d.appendChild(m),i.appendChild(d);let h=document.createElement(`hr`);h.style.cssText=`border: none; border-top: 1px solid var(--s2-border-subtle); margin: 16px 0;`,i.appendChild(h);let g=document.createElement(`div`);g.className=`dialog__desc`,g.style.cssText=`font-weight: 600; margin-bottom: 8px;`,g.textContent=`Tray`,i.appendChild(g);let _=u(),v=_.state!==`inactive`,y=l(window.localStorage);if(v||y){let e=document.createElement(`div`);e.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px;`,e.textContent=`Follower: ${v?_.state:`configured`}`,_.error&&(e.textContent+=` — ${_.error}`,e.style.color=`var(--slicc-cone)`),i.appendChild(e)}let b=document.createElement(`button`);b.className=`dialog__btn dialog__btn--secondary`,b.textContent=v||y?`Rejoin tray`:`Join a tray`,b.addEventListener(`click`,()=>f()),i.appendChild(b);let x=document.createElement(`hr`);x.style.cssText=`border: none; border-top: 1px solid var(--s2-border-subtle); margin: 16px 0;`,i.appendChild(x);let S=document.createElement(`button`);S.className=`dialog__btn`,S.textContent=`Get Started`,S.addEventListener(`click`,()=>{r.remove(),t((localStorage.getItem(Li)??``)!==n)}),i.appendChild(S)}function o(e){i.innerHTML=``;let t=!!e,n=document.createElement(`div`);n.className=`dialog__title`,n.textContent=t?`Edit Account`:`Add Account`,i.appendChild(n);let r=document.createElement(`div`);r.className=`dialog__desc`,r.textContent=`Provider:`,i.appendChild(r);let o=document.createElement(`select`);if(o.className=`dialog__input`,o.style.marginBottom=`8px`,t){let t=Q(e.providerId),n=document.createElement(`option`);n.value=e.providerId,n.textContent=t.name,o.appendChild(n),o.disabled=!0,o.style.opacity=`0.7`}else{let e=Vi(),t=new Set($().map(e=>e.providerId)),n=[...e].sort((e,t)=>{let n=Q(e).name,r=Q(t).name;return n.localeCompare(r)});for(let e of n){if(t.has(e))continue;let n=Q(e),r=document.createElement(`option`);r.value=e,r.textContent=n.name,o.appendChild(r)}}i.appendChild(o);let s=document.createElement(`div`);s.className=`dialog__desc`,s.style.cssText=`font-size: 12px; color: var(--s2-content-tertiary); margin-bottom: 16px; margin-top: -4px;`,i.appendChild(s);let c=document.createElement(`div`);c.style.cssText=`margin-bottom: 16px; display: none;`;let l=document.createElement(`button`);l.className=`dialog__btn`,l.textContent=`Login`,l.style.cssText=`width: 100%; margin-bottom: 8px;`,c.appendChild(l);let u=document.createElement(`div`);u.className=`dialog__desc`,u.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); text-align: center;`,c.appendChild(u),l.addEventListener(`click`,async()=>{let e=o.value;if(!e)return;let t=Q(e);if(!t.onOAuthLogin)return;let n=$().some(t=>t.providerId===e),r=ta(e);if(t.requiresBaseUrl&&!v.value.trim()&&!r){u.textContent=`Base URL is required.`,u.style.color=`var(--slicc-cone)`,v.focus();return}t.requiresBaseUrl&&v.value.trim()&&Xi(e,``,v.value.trim()),u.textContent=`Opening login window...`;try{let{createOAuthLauncher:e}=await d(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-t9Y4KdOX.js`);return{createOAuthLauncher:e}},[]),n=e();await t.onOAuthLogin(n,a)}catch(t){if(!n)try{Qi(e)}catch{}Ki.error(`OAuth login failed`,{providerId:e,error:t instanceof Error?t.message:String(t)}),u.textContent=`Login failed: ${t instanceof Error?t.message:String(t)}`}}),t&&e.userName&&(u.textContent=`Logged in as ${e.userName}`,l.textContent=`Re-login`),i.appendChild(c);let p=document.createElement(`div`),m=document.createElement(`div`);m.className=`dialog__desc`,p.appendChild(m);let h=document.createElement(`input`);h.className=`dialog__input`,h.type=`password`,h.autocomplete=`off`,h.spellcheck=!1,t&&(h.value=e.apiKey),p.appendChild(h),i.appendChild(p);let g=document.createElement(`div`),_=document.createElement(`div`);_.className=`dialog__desc`,_.textContent=`Base URL:`,g.appendChild(_);let v=document.createElement(`input`);v.className=`dialog__input`,v.type=`text`,v.autocomplete=`off`,v.spellcheck=!1,t&&e.baseUrl&&(v.value=e.baseUrl),g.appendChild(v);let y=document.createElement(`div`);y.className=`dialog__desc`,y.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,g.appendChild(y),i.appendChild(g);let b=document.createElement(`div`);b.style.display=`none`;let x=document.createElement(`div`);x.className=`dialog__desc`,x.textContent=`Deployment:`,b.appendChild(x);let S=document.createElement(`input`);S.className=`dialog__input`,S.type=`text`,S.autocomplete=`off`,S.spellcheck=!1,t&&e.deployment&&(S.value=e.deployment),b.appendChild(S);let C=document.createElement(`div`);C.className=`dialog__desc`,C.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,b.appendChild(C),i.appendChild(b);let w=document.createElement(`div`);w.style.display=`none`;let T=document.createElement(`div`);T.className=`dialog__desc`,T.textContent=`API Version:`,w.appendChild(T);let E=document.createElement(`input`);E.className=`dialog__input`,E.type=`text`,E.autocomplete=`off`,E.spellcheck=!1,t&&e.apiVersion&&(E.value=e.apiVersion),w.appendChild(E);let D=document.createElement(`div`);D.className=`dialog__desc`,D.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,w.appendChild(D),i.appendChild(w);let O=document.createElement(`div`);O.style.display=`none`;let k=document.createElement(`div`);k.className=`dialog__desc`,k.textContent=`Model:`,O.appendChild(k);let A=document.createElement(`select`);A.className=`dialog__input`,A.style.marginBottom=`16px`,O.appendChild(A);let j=document.createElement(`div`);j.className=`dialog__desc`,j.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,j.textContent=`Select the model available in your deployment`,O.appendChild(j),i.appendChild(O);let M=document.createElement(`div`);M.style.cssText=`color: var(--slicc-cone); font-size: 12px; margin-bottom: 8px; display: none;`,i.appendChild(M);let N=document.createElement(`button`);N.className=`dialog__btn`,N.textContent=t?`Save`:`Add`;function P(){let n=o.value;if(!n)return;let r=Q(n);if(s.textContent=r.description,r.isOAuth?(c.style.display=``,p.style.display=`none`,g.style.display=r.requiresBaseUrl?``:`none`,r.requiresBaseUrl&&(v.placeholder=r.baseUrlPlaceholder||`https://...`,y.textContent=r.baseUrlDescription||``),l.textContent=`Login with ${r.name}`,N.style.display=`none`):(c.style.display=`none`,m.textContent=`API Key${r.apiKeyEnvVar?` (${r.apiKeyEnvVar})`:``}:`,h.placeholder=r.apiKeyPlaceholder||`API key`,p.style.display=r.requiresApiKey?``:`none`,v.placeholder=r.baseUrlPlaceholder||`https://...`,y.textContent=r.baseUrlDescription||``,g.style.display=r.requiresBaseUrl?``:`none`,N.style.display=``),r.requiresDeployment?(b.style.display=``,S.placeholder=r.deploymentPlaceholder||`deployment-name`,C.textContent=r.deploymentDescription||``):b.style.display=`none`,r.requiresApiVersion?(w.style.display=``,!E.value&&r.apiVersionDefault&&(E.value=r.apiVersionDefault),E.placeholder=r.apiVersionDefault||`api-version`,D.textContent=r.apiVersionDescription||``):w.style.display=`none`,r.requiresModelSelection){O.style.display=``,A.innerHTML=``;let i=Fi(n===`bedrock-camp`?`amazon-bedrock`:n);for(let e of i){let t=document.createElement(`option`);t.value=e.id,t.textContent=e.name||e.id,A.appendChild(t)}if(t&&e.modelId)A.value=e.modelId;else if(r.defaultModelId){let e=i.find(e=>e.id.toLowerCase().includes(r.defaultModelId.toLowerCase()));e&&(A.value=e.id)}}else O.style.display=`none`}o.addEventListener(`change`,()=>{M.style.display=`none`,P()}),P();function F(){let e=o.value;if(!e)return;let t=Q(e);if(t.requiresApiKey&&h.value.trim().length<5){M.textContent=`API key is required (at least 5 characters).`,M.style.display=``,h.focus();return}if(t.requiresBaseUrl&&!v.value.trim()){M.textContent=`Base URL is required for this provider.`,M.style.display=``,v.focus();return}if(t.requiresDeployment&&!S.value.trim()){M.textContent=`Deployment name is required for this provider.`,M.style.display=``,S.focus();return}let n=t.requiresModelSelection&&A.value||void 0;Xi(e,h.value.trim(),v.value.trim()||void 0,n,S.value.trim()||void 0,E.value.trim()||void 0),a()}N.addEventListener(`click`,F);let I=e=>{e.key===`Enter`&&F()};h.addEventListener(`keydown`,I),v.addEventListener(`keydown`,I),S.addEventListener(`keydown`,I),E.addEventListener(`keydown`,I),i.appendChild(N);let L=$().length>0;if(!t&&!L){let e=document.createElement(`button`);e.className=`dialog__btn dialog__btn--secondary`,e.style.marginTop=`8px`,e.textContent=`Join a tray`,e.addEventListener(`click`,()=>{f()}),i.appendChild(e)}else if(L){let e=document.createElement(`button`);e.className=`dialog__btn dialog__btn--secondary`,e.style.marginTop=`8px`,e.textContent=`Back`,e.addEventListener(`click`,()=>{a()}),i.appendChild(e)}requestAnimationFrame(()=>{let e=o.value;if(!e)return;let t=Q(e);t.requiresApiKey?h.focus():t.requiresBaseUrl&&v.focus()})}function c(e){i.innerHTML=``;let n=document.createElement(`div`);n.className=`dialog__title`,n.textContent=`Join this tray`,i.appendChild(n);let a=document.createElement(`div`);a.className=`dialog__desc`,a.style.marginBottom=`12px`,a.textContent=`You’ve been invited to join a SLICC tray session. Click below to connect.`,i.appendChild(a);let c=document.createElement(`div`);c.className=`dialog__desc`,c.style.cssText=`font-family: monospace; font-size: 11px; color: var(--s2-content-secondary); word-break: break-all; margin-bottom: 16px; padding: 8px; background: var(--s2-bg-secondary); border-radius: 4px;`,c.textContent=e.length>80?e.slice(0,40)+`…`+e.slice(-37):e,i.appendChild(c);let l=document.createElement(`div`);l.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px; display: none;`,i.appendChild(l);let u=document.createElement(`button`);u.className=`dialog__btn`,u.textContent=`Join tray`,u.addEventListener(`click`,()=>{let n=s(window.localStorage,e);if(!n){l.textContent=`Invalid tray join URL.`,l.style.display=``,l.style.color=`var(--slicc-cone)`;return}Ii()?chrome.runtime.sendMessage({source:`panel`,payload:{type:`refresh-tray-runtime`}}).catch(()=>{}):window.dispatchEvent(new CustomEvent(`slicc:tray-join`,{detail:{joinUrl:n.joinUrl}})),l.textContent=`Connecting to tray...`,l.style.display=``,l.style.color=`var(--s2-content-secondary)`,setTimeout(()=>{r.remove(),t(!1)},800)}),i.appendChild(u);let d=document.createElement(`button`);d.className=`dialog__btn dialog__btn--secondary`,d.style.marginTop=`8px`,d.textContent=`Set up an account instead`,d.addEventListener(`click`,()=>{o()}),i.appendChild(d)}function f(){i.innerHTML=``;let e=document.createElement(`div`);e.className=`dialog__title`,e.textContent=`Join a tray`,i.appendChild(e);let n=document.createElement(`div`);n.className=`dialog__desc`,n.style.marginBottom=`12px`,n.textContent=`Paste the tray join URL shared by the tray leader. It must include a /join/... capability.`,i.appendChild(n);let a=document.createElement(`div`);a.className=`dialog__desc`,a.textContent=`Tray URL:`,i.appendChild(a);let c=document.createElement(`input`);c.className=`dialog__input`,c.type=`text`,c.autocomplete=`off`,c.spellcheck=!1,c.placeholder=`https://tray.example.com/base/join/tray-123.capability-token`,c.style.marginBottom=`12px`,i.appendChild(c);let l=document.createElement(`div`);l.style.cssText=`color: var(--slicc-cone); font-size: 12px; margin-bottom: 8px; display: none;`,i.appendChild(l);let u=document.createElement(`div`);u.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px; display: none;`;let d=document.createElement(`button`);d.className=`dialog__btn`,d.textContent=`Join tray`,d.addEventListener(`click`,()=>{let e=s(window.localStorage,c.value);if(!e){l.textContent=`Enter a valid tray join URL with a /join/... capability.`,l.style.display=``,c.focus();return}Ii()?chrome.runtime.sendMessage({source:`panel`,payload:{type:`refresh-tray-runtime`}}).catch(()=>{}):window.dispatchEvent(new CustomEvent(`slicc:tray-join`,{detail:{joinUrl:e.joinUrl}})),u.textContent=`Connecting to tray...`,u.style.display=``,u.style.color=`var(--s2-content-secondary)`,setTimeout(()=>{r.remove(),t(!1)},800)}),i.appendChild(d),i.appendChild(u);let f=document.createElement(`button`);f.className=`dialog__btn dialog__btn--secondary`,f.style.marginTop=`8px`,f.textContent=`Back`,f.addEventListener(`click`,()=>{o()}),i.appendChild(f),c.addEventListener(`input`,()=>{l.style.display=`none`}),c.addEventListener(`keydown`,e=>{e.key===`Enter`&&d.click()}),requestAnimationFrame(()=>c.focus())}})}export{ir as A,$i as C,Ni as D,Mi as E,Hn as M,Be as N,Oi as O,fa as S,_a as T,Ui as _,la as a,Qi as b,ca as c,Vi as d,ta as f,Q as g,Wi as h,ua as i,Kn as j,Sr as k,ea as l,Zi as m,qi as n,$ as o,na as p,da as r,Ji as s,Xi as t,ra as u,ia as v,aa as w,pa as x,sa as y};
94
+ `)}var K=a(`context-compaction`),xr=2e5;function Sr(e){let t=e.contextWindow??xr,n=e.reserveTokens??hr.reserveTokens,r=e.keepRecentTokens??hr.keepRecentTokens,i={enabled:!0,reserveTokens:n,keepRecentTokens:r};return async(a,o)=>{if(a.length===0)return a;let s=0;for(let e of a)s+=_r(e);if(!gr(s,t,i))return a;K.info(`Context compaction triggered`,{totalTokens:s,contextWindow:t,threshold:t-n,messageCount:a.length});let c=0,l=a.length;for(let e=a.length-1;e>=0;e--){let t=_r(a[e]);if(c+t>r&&l<a.length)break;c+=t,l=e}for(;l>0&&a[l].role===`toolResult`;)l--;if(l<=0||l>=a.length)return K.warn(`Cannot find valid cut point for compaction`),a;let u=a.slice(0,l),d=a.slice(l);K.info(`Compaction cut point`,{summarizing:u.length,keeping:d.length});let f=e.getApiKey();if(f)try{let t=await br(u,e.model,n,f,o),r={role:`user`,content:[{type:`text`,text:`<context-summary>\n${t}\n</context-summary>`}]};return K.info(`LLM summarization successful`,{originalMessages:a.length,compactedMessages:1+d.length,summaryLength:t.length}),[r,...d]}catch(e){K.warn(`LLM summarization failed, falling back to naive drop`,{error:e instanceof Error?e.message:String(e)})}else K.warn(`No API key available for LLM summarization, falling back to naive drop`);return K.info(`Naive compaction applied`,{originalMessages:a.length,compactedMessages:1+d.length}),[{role:`user`,content:[{type:`text`,text:`[Earlier conversation messages were compacted to save context space]`}]},...d]}}var Cr={include:[`*`],exclude:[]},wr=r({config:()=>Tr}),Tr={id:`azure-ai-foundry`,name:`Azure (Claude)`,description:`Claude models via Azure AI Foundry`,requiresApiKey:!0,apiKeyPlaceholder:`Azure API key`,apiKeyEnvVar:`AZURE_API_KEY`,requiresBaseUrl:!0,baseUrlPlaceholder:`https://your-resource.services.ai.azure.com/anthropic`,baseUrlDescription:`Azure AI Foundry endpoint — must end with /anthropic`},Er=r({config:()=>kr,register:()=>Lr}),Dr=`azure-openai`,Or=`2024-12-01-preview`,kr={id:Dr,name:`Azure OpenAI`,description:`GPT models via Azure AI Foundry`,requiresApiKey:!0,apiKeyPlaceholder:`Azure API key`,apiKeyEnvVar:`AZURE_OPENAI_API_KEY`,requiresBaseUrl:!0,baseUrlPlaceholder:`https://your-resource.cognitiveservices.azure.com/`,baseUrlDescription:`Azure resource endpoint`,requiresDeployment:!0,deploymentPlaceholder:`gpt-4.1-mini, gpt-4o, o4-mini`,deploymentDescription:`Comma-separated deployment names (from Azure Portal → Deployments)`,requiresApiVersion:!0,apiVersionDefault:Or,apiVersionDescription:`Azure OpenAI API version`,getModelIds:()=>{let e=ra(Dr);if(!e)return[{id:`azure-unconfigured`,name:`Azure OpenAI (set deployments in Settings)`}];let t=e.split(`,`).map(e=>e.trim()).filter(Boolean);return t.length===0?[{id:`azure-unconfigured`,name:`Azure OpenAI (set deployments in Settings)`}]:t.map(e=>{let t=e.startsWith(`o1`)||e.startsWith(`o3`)||e.startsWith(`o4`);return{id:e,name:`${e} (Azure)`,reasoning:t,input:[`text`,`image`]}})}};function Ar(e){return e.replace(/[^a-zA-Z0-9_-]/g,`_`).slice(0,64)}function jr(e,t){let n=m(e.messages,t,Ar),r=[];for(let e of n)if(e.role===`user`)if(typeof e.content==`string`)r.push({role:`user`,content:e.content});else{let t=e.content.map(e=>e.type===`text`?{type:`text`,text:e.text??``}:e.type===`image`?{type:`image_url`,image_url:{url:`data:${e.mimeType};base64,${e.data}`}}:{type:`text`,text:JSON.stringify(e)});r.push({role:`user`,content:t})}else if(e.role===`assistant`){let t=e.content,n=t.filter(e=>e.type===`text`).map(e=>e.text??``).join(``),i=t.filter(e=>e.type===`toolCall`).map(e=>({id:e.id??``,type:`function`,function:{name:e.name??``,arguments:JSON.stringify(e.arguments??{})}}));i.length?r.push({role:`assistant`,content:n||null,tool_calls:i}):r.push({role:`assistant`,content:n})}else if(e.role===`toolResult`){let t=e.content;r.push({role:`tool`,tool_call_id:e.toolCallId??``,content:t?.map(e=>e.type===`text`?e.text??``:JSON.stringify(e)).join(``)||``})}return r}function Mr(e){if(e?.length)return e.map(e=>({type:`function`,function:{name:e.name,description:e.description,parameters:e.parameters}}))}function Nr(e){let t=e.content.find(e=>e.type===`text`);if(t)return{block:t,index:e.content.indexOf(t)};let n={type:`text`,text:``};return e.content.push(n),{block:n,index:e.content.length-1}}function Pr(e,t){return e.content.find(e=>e.type===`toolCall`&&e.id===t)}var Fr=(e,t,n={})=>{let r=_();return(async()=>{let i={role:`assistant`,content:[],api:`azure-openai-anthropic`,provider:Dr,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`stop`,timestamp:Date.now()};try{let a=n.apiKey;if(!a)throw Error(`Azure API key is required`);let o=e.baseUrl;if(!o)throw Error(`Azure endpoint is required`);let s=e.id,c={};e.headers&&Object.assign(c,e.headers),n.headers&&Object.assign(c,n.headers);let l=ia(Dr)||Or,u=new S({endpoint:o.replace(/\/+$/,``),apiKey:a,deployment:s,apiVersion:l,dangerouslyAllowBrowser:!0,defaultHeaders:c}),d=[...t.systemPrompt?[{role:`system`,content:t.systemPrompt}]:[],...jr(t,e)],f=Mr(t.tools),p=await u.chat.completions.create({model:s,messages:d,stream:!0,stream_options:{include_usage:!0},...n.maxTokens?{max_completion_tokens:n.maxTokens}:{},...n.temperature===void 0?{}:{temperature:n.temperature},...f?{tools:f}:{}});r.push({type:`start`,partial:i});for await(let t of p){t.usage&&(i.usage.input=t.usage.prompt_tokens??0,i.usage.output=t.usage.completion_tokens??0,i.usage.totalTokens=t.usage.total_tokens??0,y(e,i.usage));for(let e of t.choices??[]){let t=e.delta;if(t){if(t.content){let{block:e,index:n}=Nr(i);e.text===``&&r.push({type:`text_start`,contentIndex:n,partial:i}),e.text+=t.content,r.push({type:`text_delta`,contentIndex:n,delta:t.content,partial:i})}if(t.tool_calls)for(let e of t.tool_calls){let t=e.id?Pr(i,e.id):void 0;if(!t&&e.id&&(t={type:`toolCall`,id:e.id,name:e.function?.name??``,arguments:{},_partialJson:``},i.content.push(t),r.push({type:`toolcall_start`,contentIndex:i.content.length-1,partial:i})),t&&e.function?.arguments){t._partialJson+=e.function.arguments;try{t.arguments=JSON.parse(t._partialJson)}catch{}r.push({type:`toolcall_delta`,contentIndex:i.content.indexOf(t),delta:e.function.arguments,partial:i})}}e.finish_reason&&(i.stopReason=e.finish_reason===`tool_calls`?`toolUse`:e.finish_reason===`length`?`length`:`stop`)}}}for(let e of i.content){let t=i.content.indexOf(e);if(e.type===`toolCall`){let n=e;try{n.arguments=JSON.parse(n._partialJson||`{}`)}catch{}delete n._partialJson,r.push({type:`toolcall_end`,contentIndex:t,toolCall:e,partial:i})}else e.type===`text`&&r.push({type:`text_end`,contentIndex:t,content:e.text,partial:i})}r.push({type:`done`,reason:i.stopReason,message:i}),r.end()}catch(e){i.stopReason=n.signal?.aborted?`aborted`:`error`,i.errorMessage=e instanceof Error?e.message:JSON.stringify(e),r.push({type:`error`,reason:i.stopReason,error:i}),r.end()}})(),r},Ir=(e,t,n)=>{let r=n?.apiKey;if(!r)throw Error(`Azure API key is required`);return Fr(e,t,{...g(e,n,r)})};function Lr(){E({api:`azure-openai-anthropic`,stream:Fr,streamSimple:Ir})}var Rr=r({config:()=>zr,register:()=>ti,streamBedrockCamp:()=>J,streamSimpleBedrockCamp:()=>ei}),zr={id:`bedrock-camp`,name:`AWS Bedrock (CAMP)`,description:`Claude on AWS Bedrock via CAMP Bearer token`,requiresApiKey:!0,apiKeyPlaceholder:`ABSK...`,apiKeyEnvVar:`BEDROCK_CAMP_API_KEY`,requiresBaseUrl:!0,baseUrlPlaceholder:`https://bedrock-runtime.us-west-2.amazonaws.com`,baseUrlDescription:`Bedrock runtime endpoint from CAMP portal`,requiresModelSelection:!0,defaultModelId:`claude-sonnet-4-6`},Br=typeof chrome<`u`&&!!chrome?.runtime?.id;function Vr(e,t,n){e&&e(t,n)}function Hr(e){let t=e.replace(/[^a-zA-Z0-9_-]/g,`_`);return t.length>64?t.slice(0,64):t}function q(e){return e?e.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g,`�`):``}function Ur(e,t){let n=[],r=m(e.messages,t,Hr);for(let e=0;e<r.length;e++){let i=r[e];switch(i.role){case`user`:n.push({role:`user`,content:typeof i.content==`string`?[{text:q(i.content)}]:i.content.map(e=>{if(e.type===`text`)return{text:q(e.text)};if(e.type===`image`)return{image:{source:{bytes:e.data},format:Wr(e.mimeType)}};throw Error(`Unknown user content type: ${e.type}`)})});break;case`assistant`:{if(i.content.length===0)continue;let e=[];for(let n of i.content)switch(n.type){case`text`:if(n.text.trim().length===0)continue;e.push({text:q(n.text)});break;case`toolCall`:e.push({toolUse:{toolUseId:n.id,name:n.name,input:n.arguments}});break;case`thinking`:if(n.thinking.trim().length===0)continue;Gr(t)?e.push({reasoningContent:{reasoningText:{text:q(n.thinking),signature:n.thinkingSignature}}}):e.push({reasoningContent:{reasoningText:{text:q(n.thinking)}}});break}if(e.length===0)continue;n.push({role:`assistant`,content:e});break}case`toolResult`:{let t=[];t.push({toolResult:{toolUseId:i.toolCallId,content:i.content.map(e=>e.type===`image`?{image:{source:{bytes:e.data},format:Wr(e.mimeType)}}:{text:q(e.text??e.json??JSON.stringify(e))}),status:i.isError?`error`:`success`}});let a=e+1;for(;a<r.length&&r[a].role===`toolResult`;){let e=r[a];t.push({toolResult:{toolUseId:e.toolCallId,content:e.content.map(e=>e.type===`image`?{image:{source:{bytes:e.data},format:Wr(e.mimeType)}}:{text:q(e.text??e.json??JSON.stringify(e))}),status:e.isError?`error`:`success`}}),a++}e=a-1,n.push({role:`user`,content:t});break}}}if(Xr(t)&&n.length>0){let e=n[n.length-1];e.role===`user`&&Array.isArray(e.content)&&e.content.push({cachePoint:{type:`default`}})}return n}function Wr(e){switch(e){case`image/jpeg`:case`image/jpg`:return`jpeg`;case`image/png`:return`png`;case`image/gif`:return`gif`;case`image/webp`:return`webp`;default:return`png`}}function Gr(e){let t=e.id.toLowerCase();return t.includes(`anthropic.claude`)||t.includes(`anthropic/claude`)}function Kr(e){return e.includes(`opus-4-6`)||e.includes(`opus-4.6`)||e.includes(`sonnet-4-6`)||e.includes(`sonnet-4.6`)}function qr(e,t){if(!e?.length||t===`none`)return;let n=e.map(e=>({toolSpec:{name:e.name,description:e.description,inputSchema:{json:e.parameters}}})),r;switch(t){case`auto`:r={auto:{}};break;case`any`:r={any:{}};break;default:t&&typeof t==`object`&&t.type===`tool`&&(r={tool:{name:t.name}})}return{tools:n,toolChoice:r}}function Jr(e,t){switch(e){case`minimal`:case`low`:return`low`;case`medium`:return`medium`;case`high`:return`high`;case`xhigh`:return t.includes(`opus-4-6`)||t.includes(`opus-4.6`)?`max`:`high`;default:return`high`}}function Yr(e,t){if(!(!t.reasoning||!e.reasoning)&&(e.id.includes(`anthropic.claude`)||e.id.includes(`anthropic/claude`)))return Kr(e.id)?{thinking:{type:`adaptive`},output_config:{effort:Jr(t.reasoning,e.id)}}:(()=>{let e={minimal:1024,low:2048,medium:8192,high:16384,xhigh:16384},n=t.reasoning===`xhigh`?`high`:t.reasoning;return{thinking:{type:`enabled`,budget_tokens:t.thinkingBudgets?.[n]??e[t.reasoning]}}})()}function Xr(e){let t=e.id.toLowerCase();return t.includes(`claude`)?!!(t.includes(`-4-`)||t.includes(`-4.`)||t.includes(`claude-3-7-sonnet`)||t.includes(`claude-3-5-haiku`)):!1}function Zr(e,t){if(!e)return;let n=[{text:q(e)}];return Xr(t)&&n.push({cachePoint:{type:`default`}}),n}function Qr(e){switch(e){case`end_turn`:case`stop_sequence`:return`stop`;case`max_tokens`:case`model_context_window_exceeded`:return`length`;case`tool_use`:return`toolUse`;default:return`error`}}function $r(e,t,n,r){r.push({type:`start`,partial:n});let i=e.output?.message;if(i?.content)for(let e=0;e<i.content.length;e++){let t=i.content[e];if(t.text!==void 0){let e={type:`text`,text:t.text};n.content.push(e);let i=n.content.length-1;r.push({type:`text_start`,contentIndex:i,partial:n}),r.push({type:`text_delta`,contentIndex:i,delta:t.text,partial:n}),r.push({type:`text_end`,contentIndex:i,content:t.text,partial:n})}else if(t.toolUse){let e={type:`toolCall`,id:t.toolUse.toolUseId||``,name:t.toolUse.name||``,arguments:t.toolUse.input||{}};n.content.push(e);let i=n.content.length-1;r.push({type:`toolcall_start`,contentIndex:i,partial:n}),r.push({type:`toolcall_end`,contentIndex:i,toolCall:e,partial:n})}else if(t.reasoningContent?.reasoningText){let e={type:`thinking`,thinking:t.reasoningContent.reasoningText.text||``,thinkingSignature:t.reasoningContent.reasoningText.signature||``};n.content.push(e);let i=n.content.length-1;r.push({type:`thinking_start`,contentIndex:i,partial:n}),r.push({type:`thinking_delta`,contentIndex:i,delta:e.thinking,partial:n}),r.push({type:`thinking_end`,contentIndex:i,content:e.thinking,partial:n})}}e.usage&&(n.usage.input=e.usage.inputTokens||0,n.usage.output=e.usage.outputTokens||0,n.usage.cacheRead=e.usage.cacheReadInputTokens||0,n.usage.cacheWrite=e.usage.cacheWriteInputTokens||0,n.usage.totalTokens=e.usage.totalTokens||n.usage.input+n.usage.output,y(t,n.usage)),n.stopReason=Qr(e.stopReason||`end_turn`)}var J=(e,t,n={})=>{let r=_();return(async()=>{let i={role:`assistant`,content:[],api:`bedrock-camp-converse`,provider:e.provider,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`stop`,timestamp:Date.now()};try{let a=n.apiKey;if(!a)throw Error(`API key is required for Bedrock CAMP`);let o=e.baseUrl;if(!o)throw Error(`Base URL is required for Bedrock CAMP`);let s={modelId:e.id,messages:Ur(t,e),system:Zr(t.systemPrompt,e),inferenceConfig:{maxTokens:n.maxTokens,temperature:n.temperature},toolConfig:qr(t.tools,n.toolChoice),additionalModelRequestFields:Yr(e,n)};s.system||delete s.system,s.toolConfig||delete s.toolConfig,s.additionalModelRequestFields||delete s.additionalModelRequestFields,Vr(n.onPayload,s,e);let c=`${o.replace(/\/$/,``)}/model/${encodeURIComponent(e.id)}/converse`,l=Br?c:`/api/fetch-proxy`,u={"Content-Type":`application/json`,Authorization:`Bearer ${a}`};Br||(u[`X-Target-URL`]=c);let d=await fetch(l,{method:`POST`,headers:u,body:JSON.stringify(s),signal:n.signal});if(!d.ok){let e=await d.text();throw Error(`Bedrock CAMP API error (${d.status}): ${e}`)}if($r(await d.json(),e,i,r),i.stopReason===`error`||i.stopReason===`aborted`)throw Error(`An unknown error occurred`);r.push({type:`done`,reason:i.stopReason,message:i}),r.end()}catch(e){for(let e of i.content)delete e.index,delete e.partialJson;i.stopReason=n.signal?.aborted?`aborted`:`error`,i.errorMessage=e instanceof Error?e.message:JSON.stringify(e),r.push({type:`error`,reason:i.stopReason,error:i}),r.end()}})(),r},ei=(e,t,n)=>{let r=g(e,n&&{...n,onPayload:n.onPayload?t=>Vr(n.onPayload,t,e):void 0},void 0);if(!n?.reasoning)return J(e,t,{...r,reasoning:void 0});if(e.id.includes(`anthropic.claude`)||e.id.includes(`anthropic/claude`)){if(Kr(e.id))return J(e,t,{...r,reasoning:n.reasoning,thinkingBudgets:n.thinkingBudgets});let i=b(r.maxTokens||0,e.maxTokens,n.reasoning,n.thinkingBudgets);return J(e,t,{...r,maxTokens:i.maxTokens,reasoning:n.reasoning,thinkingBudgets:{...n.thinkingBudgets||{},[v(n.reasoning)]:i.budgetTokens}})}return J(e,t,{...r,reasoning:n.reasoning,thinkingBudgets:n.thinkingBudgets})};function ti(){E({api:`bedrock-camp-converse`,stream:J,streamSimple:ei})}var ni={proxyEndpoint:`https://adobe-llm-proxy.paolo-moz.workers.dev`,redirectUri:`https://www.sliccy.ai/auth/callback`,extensionRedirectUri:`https://akjjllgokmbgpbdbmafpiefnhidlmbgf.chromiumapp.org/adobe`},ri=r({config:()=>gi,getAdobeModels:()=>Ei,getValidAccessToken:()=>vi,isTokenExpired:()=>yi,register:()=>Di}),Y=Object.assign({"/packages/webapp/providers/adobe-config.json":ni})[`/packages/webapp/providers/adobe-config.json`]??{clientId:``,proxyEndpoint:``,scopes:`openid,profile,email`};function X(){let e=na(`adobe`);if(e)return e.replace(/\/$/,``);if(Y.proxyEndpoint)return Y.proxyEndpoint.replace(/\/$/,``);throw Error(`Adobe proxy endpoint not configured — set it in Settings or adobe-config.json`)}var ii=new Map,ai=new Map;async function oi(e){let t=ii.get(e);if(t)return t;try{let t=await fetch(`${e}/v1/config`);if(t.ok){let n=await t.json();return ii.set(e,n),n}console.warn(`[adobe] Proxy /v1/config returned ${t.status}, falling back to build-time config`)}catch(e){console.warn(`[adobe] Failed to fetch proxy config:`,e instanceof Error?e.message:String(e))}let n={};return ii.set(e,n),n}function si(e){let t=e.clientId||Y.clientId;if(!t)throw Error(`Could not determine IMS client ID — proxy /v1/config did not return one and adobe-config.json is empty`);return t}function ci(e){return e.scopes||Y.scopes}function li(e){return e.imsEnvironment||Y.imsEnvironment||`prod`}var ui={prod:`https://ims-na1.adobelogin.com`,stg1:`https://ims-na1-stg1.adobelogin.com`};function di(e){return ui[e??Y.imsEnvironment??`prod`]??ui.prod}var fi=typeof chrome<`u`&&!!chrome?.runtime?.id;function pi(){return $().find(e=>e.providerId===`adobe`)}async function mi(e,t){try{let n=await fetch(`${di(t)}/ims/userinfo/v2`,{headers:{Authorization:`Bearer ${e}`}});if(n.ok){let e=await n.json();return{name:e.displayName||e.name||e.email,avatar:e.picture||e.avatar_url}}console.warn(`[adobe] User profile fetch returned ${n.status}, account will have no display name`)}catch(e){console.warn(`[adobe] Failed to fetch user profile:`,e instanceof Error?e.message:String(e))}return{}}function hi(e){let t=e.indexOf(`#`);if(t<0)return null;let n=new URLSearchParams(e.slice(t+1)),r=n.get(`access_token`);return r?{accessToken:r,expiresIn:parseInt(n.get(`expires_in`)??`86400`,10)}:null}var gi={id:`adobe`,name:`Adobe`,description:`Claude via Adobe — login with your Adobe ID`,requiresApiKey:!1,requiresBaseUrl:!Y.proxyEndpoint,baseUrlPlaceholder:`https://your-proxy.example.com`,baseUrlDescription:`Anthropic-compatible proxy endpoint`,isOAuth:!0,defaultModelId:`sonnet`,getModelIds:()=>{let e=e=>{let t={id:e.id,name:e.name??e.id},n=ai.get(e.id);return n?.api&&(t.api=n.api),n?.context_window!==void 0&&(t.context_window=n.context_window),n?.max_tokens!==void 0&&(t.max_tokens=n.max_tokens),n?.reasoning!==void 0&&(t.reasoning=n.reasoning),n?.input&&(t.input=n.input),t};for(let t of Ti.values())if(t.length){let n=t.map(t=>e({id:t.id,name:t.name??t.id}));try{localStorage.setItem(`slicc-adobe-models`,JSON.stringify(n))}catch{}return n}for(let t of ii.values())if(t.models?.length)return t.models.map(e);try{let e=localStorage.getItem(`slicc-adobe-models`);if(e){let t=JSON.parse(e);if(t.length)return t}}catch{}return[{id:`claude-sonnet-4-6`,name:`Claude Sonnet 4.6`}]},onOAuthLogin:async(e,t)=>{let n=await oi(X()),r=si(n),i=ci(n),a=li(n),o=fi?Y.extensionRedirectUri??`https://${chrome.runtime.id}.chromiumapp.org/`:Y.redirectUri??`${window.location.origin}/auth/callback`,s=fi?void 0:btoa(JSON.stringify({port:parseInt(new URL(window.location.href).port||`5710`,10),path:`/auth/callback`,nonce:crypto.randomUUID()})),c=s?JSON.parse(atob(s)).nonce:null,l=new URLSearchParams({client_id:r,scope:i,response_type:`token`,redirect_uri:o});s&&l.set(`state`,s);let u=await e(`${di(a)}/ims/authorize/v2?${l}`);if(!u)return;if(c&&u)try{if(new URL(u).searchParams.get(`nonce`)!==c){console.error(`[adobe] OAuth nonce mismatch — possible CSRF`);return}}catch(e){console.warn(`[adobe] Nonce check skipped (URL parse failed):`,e instanceof Error?e.message:String(e))}let d=hi(u);if(!d){console.error(`[adobe] Could not extract token from redirect URL`);return}let f=await mi(d.accessToken,a);ea({providerId:`adobe`,accessToken:d.accessToken,tokenExpiresAt:Date.now()+d.expiresIn*1e3,userName:f.name,userAvatar:f.avatar}),await Ei().catch(e=>console.warn(`[adobe] Failed to fetch models after login:`,e instanceof Error?e.message:String(e))),t()},onOAuthLogout:async()=>{let e=pi();if(e?.accessToken)try{let t=ii.values().next().value??{},n=t.clientId||Y.clientId,r=li(t);if(n){let t=await fetch(`${di(r)}/ims/revoke`,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`},body:new URLSearchParams({token:e.accessToken,token_type_hint:`access_token`,client_id:n})});t.ok||console.warn(`[adobe] Token revocation returned ${t.status}, token may still be valid server-side`)}}catch(e){console.warn(`[adobe] Failed to revoke token:`,e instanceof Error?e.message:String(e))}ea({providerId:`adobe`,accessToken:``})}},_i=null;async function vi(){let e=pi();if(!e?.accessToken)throw Error(`Not logged in to Adobe — please log in first`);if((e.tokenExpiresAt??0)-Date.now()>6e4)return e.accessToken;console.log(`[adobe] Token expired or expiring soon, attempting silent renewal...`);try{let e=await bi();if(e)return e}catch(e){console.warn(`[adobe] Silent renewal failed:`,e instanceof Error?e.message:String(e))}let t=pi();if((t?.tokenExpiresAt??0)-Date.now()>0&&t?.accessToken)return t.accessToken;throw Error(`Adobe session expired — please log in again`)}function yi(){let e=pi();return e?.tokenExpiresAt?Date.now()>e.tokenExpiresAt-6e4:!0}async function bi(){return _i||(_i=(async()=>{try{let e=await oi(X()),t=si(e),n=ci(e),r=li(e),i=fi?Y.extensionRedirectUri??`https://${chrome.runtime.id}.chromiumapp.org/`:Y.redirectUri??`${window.location.origin}/auth/callback`,a=fi?void 0:btoa(JSON.stringify({port:parseInt(new URL(window.location.href).port||`5710`,10),path:`/auth/callback`,nonce:crypto.randomUUID()})),o=a?JSON.parse(atob(a)).nonce:null,s=new URLSearchParams({client_id:t,scope:n,response_type:`token`,redirect_uri:i,prompt:`none`});a&&s.set(`state`,a);let c=`${di(r)}/ims/authorize/v2?${s}`,{createOAuthLauncher:l}=await d(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-t9Y4KdOX.js`);return{createOAuthLauncher:e}},[]),u=await l()(c);if(!u)return null;if(o&&u)try{if(new URL(u).searchParams.get(`nonce`)!==o)return console.error(`[adobe] OAuth nonce mismatch — possible CSRF`),null}catch(e){console.warn(`[adobe] Nonce check skipped (URL parse failed):`,e instanceof Error?e.message:String(e))}let f=hi(u);if(!f)return null;let p=pi();return ea({providerId:`adobe`,accessToken:f.accessToken,tokenExpiresAt:Date.now()+f.expiresIn*1e3,userName:p?.userName,userAvatar:p?.userAvatar}),console.log(`[adobe] Token renewed silently`),await Ei().catch(e=>console.warn(`[adobe] Failed to refresh models after silent renewal:`,e instanceof Error?e.message:String(e))),f.accessToken}catch(e){return console.warn(`[adobe] Silent renewal error:`,e instanceof Error?e.message:String(e)),null}finally{_i=null}})(),_i)}function xi(e,t){return{type:`error`,reason:`error`,error:{role:`assistant`,content:[],api:`adobe-anthropic`,provider:`adobe`,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`error`,errorMessage:t instanceof Error?t.message:String(t),timestamp:Date.now()}}}var Si=(e,t,n={})=>{let r=_();return(async()=>{try{let i=await vi();if(String(e.api).includes(`openai`)){let a=Oe({...e,baseUrl:`${X()}/v1`,api:`openai-completions`,compat:{...e.compat,supportsStore:!1,supportsDeveloperRole:!1}},t,{...n,apiKey:i});for await(let e of a)r.push(e)}else{let a=me({...e,baseUrl:X(),api:`anthropic-messages`},t,{...n,apiKey:i});for await(let e of a)r.push(e)}r.end()}catch(t){console.error(`[adobe] Stream error:`,t instanceof Error?t.message:String(t)),r.push(xi(e,t)),r.end()}})(),r},Ci=(e,t,n)=>{let r=_();return(async()=>{try{let i=await vi();if(String(e.api).includes(`openai`)){let a=ke({...e,baseUrl:`${X()}/v1`,api:`openai-completions`,compat:{...e.compat,supportsStore:!1,supportsDeveloperRole:!1}},t,{...n,apiKey:i});for await(let e of a)r.push(e)}else{let a=he({...e,baseUrl:X(),api:`anthropic-messages`},t,{...n,apiKey:i});for await(let e of a)r.push(e)}r.end()}catch(t){console.error(`[adobe] Stream error:`,t instanceof Error?t.message:String(t)),r.push(xi(e,t)),r.end()}})(),r};async function wi(){try{let e=await vi(),t=X(),n=await fetch(`${t}/v1/models`,{headers:{Authorization:`Bearer ${e}`}});if(n.ok){let e=await n.json();if(e.data?.length){for(let t of e.data){let e={id:t.id,name:t.name};t.api!==void 0&&(e.api=t.api),t.context_window!==void 0&&(e.context_window=t.context_window),t.max_tokens!==void 0&&(e.max_tokens=t.max_tokens),t.reasoning!==void 0&&(e.reasoning=t.reasoning),t.input!==void 0&&(e.input=t.input),ai.set(t.id,e)}let n=new Map;for(let e of x())try{for(let t of h(e))n.set(t.id,t)}catch{}return e.data.map(e=>{let r=n.get(e.id),i=`adobe-${e.api===`openai`?`openai`:`anthropic`}`;return r?{...r,provider:`adobe`,api:i}:{id:e.id,name:e.name??e.id,provider:`adobe`,api:i,baseUrl:t,contextWindow:2e5,maxTokens:16384,input:[`text`,`image`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},inputCost:0,outputCost:0,cacheReadCost:0,cacheWriteCost:0,reasoning:!0}})}}else console.warn(`[adobe] Proxy /v1/models returned ${n.status}, falling back to Anthropic models`)}catch(e){console.warn(`[adobe] Failed to fetch proxy models:`,e instanceof Error?e.message:String(e))}return h(`anthropic`).map(e=>({...e,provider:`adobe`,api:`adobe-anthropic`}))}var Ti=new Map;async function Ei(){let e=X(),t=Ti.get(e);if(t)return t;let n=await wi();return Ti.set(e,n),n}function Di(){E({api:`adobe-anthropic`,stream:Si,streamSimple:Ci}),E({api:`adobe-openai`,stream:Si,streamSimple:Ci})}var Oi=Object.assign({"/packages/dev-tools/providers.build.json":Cr})[`/packages/dev-tools/providers.build.json`]??{include:[`*`],exclude:[]};function ki(e){let{include:t,exclude:n}=Oi;return n.includes(`*`)||n.includes(e)?!1:!!(t.includes(`*`)||t.includes(e))}var Ai=Object.assign({"./built-in/azure-ai-foundry.ts":wr,"./built-in/azure-openai.ts":Er,"./built-in/bedrock-camp.ts":Rr}),ji=Object.assign({"/packages/webapp/providers/adobe.ts":ri}),Mi=new Map;for(let[e,t]of Object.entries(Ai))t.config&&ki(t.config.id)&&(Mi.set(t.config.id,t.config),t.register?.());for(let[e,t]of Object.entries(ji))t.config&&(Mi.set(t.config.id,t.config),t.register?.());function Ni(e){return Mi.get(e)}function Pi(){return[...Mi.keys()]}var Fi=p,Ii=h;function Li(){return typeof chrome<`u`&&!!chrome?.runtime?.id}var Ri=`slicc_accounts`,Z=`selected-model`,zi=[`slicc_provider`,`slicc_api_key`,`slicc_base_url`,`anthropic_api_key`,`api_provider`,`azure_resource`,`bedrock_region`],Bi=!1;function Vi(){if(!Bi){Bi=!0;for(let e of zi)try{localStorage.removeItem(e)}catch{}}}function Hi(){let e=x().filter(ki),t=Pi();return[...new Set([...e,...t])]}function Q(e){return Ni(e)||{id:e,name:e.split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),description:`${e} provider`,requiresApiKey:!0,requiresBaseUrl:!1}}function Ui(e,t){t.context_window!==void 0&&(e.contextWindow=t.context_window),t.max_tokens!==void 0&&(e.maxTokens=t.max_tokens),t.reasoning!==void 0&&(e.reasoning=t.reasoning),t.input!==void 0&&(e.input=t.input)}function Wi(e){try{if(e===`bedrock-camp`){let e=Ii(`amazon-bedrock`),t=Qi(`bedrock-camp`),n=t?e.filter(e=>e.id===t):e;return(n.length>0?n:e).map(e=>({...e,api:`bedrock-camp-converse`,provider:`bedrock-camp`}))}let t=Q(e);if(t.getModelIds){let n;try{n=t.getModelIds()}catch(t){return qi.error(`Provider getModelIds callback failed`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}let r=new Map;for(let e of x())try{for(let t of Ii(e))r.set(t.id,t)}catch{}return n.map(n=>{let i=`${e}-${n.api===`openai`?`openai`:`anthropic`}`,a=r.get(n.id),o=a?{...a,api:i,provider:e}:{id:n.id,name:n.name??n.id,provider:e,api:i,baseUrl:``,contextWindow:2e5,maxTokens:16384,input:[`text`,`image`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},inputCost:0,outputCost:0,cacheReadCost:0,cacheWriteCost:0,reasoning:!0},s=t.modelOverrides?.[n.id];return s&&Ui(o,s),Ui(o,n),o})}if(t.isOAuth){let n=Ii(`anthropic`),r=`${e}-anthropic`;return n.map(n=>{let i={...n,api:r,provider:e},a=t.modelOverrides?.[n.id];return a&&Ui(i,a),i})}return Ii(e===`azure-ai-foundry`?`anthropic`:e)}catch(t){return qi.error(`Failed to load models`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}}function Gi(e){let t=$().find(t=>t.providerId===e);if(!t?.accessToken)return null;let n=!!t.tokenExpiresAt&&Date.now()>t.tokenExpiresAt-6e4;return{token:t.accessToken,expiresAt:t.tokenExpiresAt,userName:t.userName,userAvatar:t.userAvatar,expired:n}}var Ki=Object.assign({})[`/packages/webapp/providers.json`]??[],qi=a(`provider-settings`);function Ji(e=Ki){if(e.length===0||$().length>0)return;let t=new Set(Hi());for(let n of e)if(!(!n.providerId||!n.apiKey)){if(!t.has(n.providerId)){qi.warn(`Unknown provider "${n.providerId}" in providers.json — skipping`);continue}Zi(n.providerId,n.apiKey,n.baseUrl)}let n=e.find(e=>e.providerId&&e.apiKey&&t.has(e.providerId));n?.model&&!localStorage.getItem(Z)&&localStorage.setItem(Z,`${n.providerId}:${n.model}`)}function Yi(){let e=$();if(e.length===0)return[];let t=new Map;for(let n of e){if(t.has(n.providerId))continue;let e=Wi(n.providerId);if(e.length===0)continue;let r=Q(n.providerId),i={providerId:n.providerId,providerName:r.name,models:e};t.set(n.providerId,i)}return[...t.values()]}function $(){Vi();let e=localStorage.getItem(Ri);if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`object`&&!!e&&typeof e.providerId==`string`&&typeof e.apiKey==`string`):[]}catch{return[]}}function Xi(e){localStorage.setItem(Ri,JSON.stringify(e))}function Zi(e,t,n,r,i,a){let o=$().filter(t=>t.providerId!==e),s={providerId:e,apiKey:t};n&&(s.baseUrl=n),r&&(s.modelId=r),i&&(s.deployment=i),a&&(s.apiVersion=a),o.push(s),Xi(o)}function Qi(e){return $().find(t=>t.providerId===e)?.modelId}function $i(e){Xi($().filter(t=>t.providerId!==e))}function ea(e){let t=$().find(t=>t.providerId===e.providerId),n=$().filter(t=>t.providerId!==e.providerId);n.push({providerId:e.providerId,apiKey:``,accessToken:e.accessToken,refreshToken:e.refreshToken,tokenExpiresAt:e.tokenExpiresAt,userName:e.userName,userAvatar:e.userAvatar,baseUrl:e.baseUrl??t?.baseUrl}),Xi(n)}function ta(e){let t=$().find(t=>t.providerId===e);return t&&(t.accessToken||t.apiKey)||null}function na(e){return $().find(t=>t.providerId===e)?.baseUrl??null}function ra(e){return $().find(t=>t.providerId===e)?.deployment??null}function ia(e){return $().find(t=>t.providerId===e)?.apiVersion??null}function aa(){let e=localStorage.getItem(Z)||``,t=e.indexOf(`:`);return t>=0?e.slice(t+1):e}function oa(e){if(e.includes(`:`))localStorage.setItem(Z,e);else{let t=ca();localStorage.setItem(Z,`${t}:${e}`)}}function sa(){return localStorage.getItem(Z)||``}function ca(){let e=sa(),t=e.indexOf(`:`);if(t>0)return e.slice(0,t);let n=$();return n.length>0?n[0].providerId:`anthropic`}function la(){return ta(ca())}function ua(){let e=$(),t=ca(),n=aa();return e.map(e=>{let r={providerId:e.providerId,apiKey:e.apiKey};return e.baseUrl&&(r.baseUrl=e.baseUrl),e.providerId===t&&n&&(r.model=n),r})}function da(){let e=JSON.stringify(ua(),null,2),t=new Blob([e],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`providers.json`,r.click(),URL.revokeObjectURL(n)}function fa(){localStorage.removeItem(Ri),localStorage.removeItem(Z);for(let e of zi)localStorage.removeItem(e)}function pa(e){if(!e)return ma();let t=ca(),n=na(t);try{let r=Q(t),i=Fi(r.isOAuth||t===`azure-ai-foundry`?`anthropic`:t===`bedrock-camp`?`amazon-bedrock`:t,e);if(!i?.id)throw Error(`Model ${e} not found`);let a=i;if(r.isOAuth){let n=Wi(t).find(t=>t.id===e)?.api??`${t}-anthropic`;a={...a,api:n,provider:t}}else t===`bedrock-camp`&&(a={...a,api:`bedrock-camp-converse`,provider:`bedrock-camp`});return n&&(a={...a,baseUrl:n}),a}catch{return ma()}}function ma(){let e=ca(),t=aa(),n=na(e),r=Wi(e),i=Q(e),a=i.defaultModelId?r.find(e=>e.id.toLowerCase().includes(i.defaultModelId.toLowerCase()))?.id:void 0,o=t||a||r[0]?.id||`claude-sonnet-4-6`;try{let t=Q(e),i=t.isOAuth||e===`azure-ai-foundry`?`anthropic`:e===`bedrock-camp`?`amazon-bedrock`:e,a=Fi(i,o);if(!a?.id)throw Error(`Model ${o} not found in ${i} registry`);let s=a;if(t.isOAuth){let t=r.find(e=>e.id===o)?.api??`${e}-anthropic`;s={...s,api:t,provider:e}}else e===`bedrock-camp`&&(s={...s,api:`bedrock-camp-converse`,provider:`bedrock-camp`});return n&&(s={...s,baseUrl:n}),s}catch{let e=r.find(e=>e.id===o);return e?n?{...e,baseUrl:n}:e:Fi(`anthropic`,`claude-sonnet-4-0`)}}function ha(e){return e.length<=10?`****`:e.slice(0,4)+`...`+e.slice(-4)}function ga(e){let t=`http://www.w3.org/2000/svg`,n=document.createElementNS(t,`svg`);n.setAttribute(`width`,`14`),n.setAttribute(`height`,`14`),n.setAttribute(`viewBox`,`0 0 20 20`),n.setAttribute(`fill`,`none`),n.setAttribute(`stroke`,`currentColor`),n.setAttribute(`stroke-width`,`1.5`),n.setAttribute(`stroke-linecap`,`round`),n.setAttribute(`stroke-linejoin`,`round`);for(let r of e){let e=document.createElementNS(t,`path`);e.setAttribute(`d`,r),n.appendChild(e)}return n}var _a={pen:[`M14.3 3.3a1.5 1.5 0 0 1 2.1 0l.3.3a1.5 1.5 0 0 1 0 2.1L7.7 14.8l-3.2.7.7-3.2z`],trash:[`M4 6h12`,`M8 6V4a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2`,`M6 6v10a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V6`]};function va(e){return new Promise(t=>{let n=localStorage.getItem(Ri)??``,r=document.createElement(`div`);r.className=`dialog-overlay`;let i=document.createElement(`div`);i.className=`dialog`,i.style.cssText=`max-width: 480px; width: 90vw; padding: 32px;`,$().length>0?a():e?.autoJoinUrl?c(e.autoJoinUrl):e?.preferTrayJoin?f():o(),r.appendChild(i),document.body.appendChild(r);function a(){i.innerHTML=``;let e=document.createElement(`div`);e.className=`dialog__title`,e.textContent=`Accounts`,i.appendChild(e);let s=$(),c=`background: transparent; border: 1px solid var(--s2-border-subtle); color: var(--s2-content-secondary); border-radius: var(--s2-radius-s); padding: 6px; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: color 0.15s, border-color 0.15s;`;if(s.length===0){let e=document.createElement(`div`);e.className=`dialog__desc`,e.textContent=`No accounts configured.`,i.appendChild(e)}else{let e=document.createElement(`div`);e.style.cssText=`margin-bottom: 16px;`;for(let t of s){let n=Q(t.providerId),r=document.createElement(`div`);r.style.cssText=`display: flex; align-items: center; justify-content: space-between; padding: 10px 12px; background: var(--s2-bg-layer-2); border-radius: var(--s2-radius-default); margin-bottom: 8px; border: 1px solid var(--s2-border-subtle);`;let i=document.createElement(`div`);i.style.cssText=`flex: 1; min-width: 0;`;let s=document.createElement(`div`);s.style.cssText=`font-size: 14px; font-weight: 600; color: var(--s2-content-default);`,s.textContent=n.name,i.appendChild(s);let l=document.createElement(`div`);l.style.cssText=`font-size: 11px; color: var(--s2-content-disabled); font-family: monospace; margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;`,t.userName?l.textContent=t.userName:t.accessToken?l.textContent=`Logged in`:l.textContent=ha(t.apiKey),t.baseUrl&&(l.textContent+=` • `+t.baseUrl),i.appendChild(l),r.appendChild(i);let u=document.createElement(`div`);u.style.cssText=`display: flex; gap: 4px; margin-left: 12px; flex-shrink: 0;`;let d=document.createElement(`button`);d.style.cssText=c,d.setAttribute(`aria-label`,`Edit account`),d.appendChild(ga(_a.pen)),d.addEventListener(`mouseenter`,()=>{d.style.color=`var(--s2-accent)`,d.style.borderColor=`var(--s2-accent)`}),d.addEventListener(`mouseleave`,()=>{d.style.color=`var(--s2-content-secondary)`,d.style.borderColor=`var(--s2-border-subtle)`}),d.addEventListener(`click`,()=>{o(t)}),u.appendChild(d);let f=document.createElement(`button`);f.style.cssText=c,f.setAttribute(`aria-label`,`Remove account`),f.appendChild(ga(_a.trash)),f.addEventListener(`mouseenter`,()=>{f.style.color=`var(--s2-negative)`,f.style.borderColor=`var(--s2-negative)`}),f.addEventListener(`mouseleave`,()=>{f.style.color=`var(--s2-content-secondary)`,f.style.borderColor=`var(--s2-border-subtle)`}),f.addEventListener(`click`,()=>{$i(t.providerId),a()}),u.appendChild(f),r.appendChild(u),e.appendChild(r)}i.appendChild(e)}let d=document.createElement(`div`);d.style.cssText=`display: flex; gap: 8px;`;let p=document.createElement(`button`);p.className=s.length>0?`dialog__btn dialog__btn--secondary`:`dialog__btn`,p.style.flex=`1`,p.textContent=`Add Account`,p.addEventListener(`click`,()=>o()),d.appendChild(p);let m=document.createElement(`button`);m.className=`dialog__btn dialog__btn--secondary`,m.style.flex=`1`,m.textContent=`Export`,m.addEventListener(`click`,()=>da()),d.appendChild(m),i.appendChild(d);let h=document.createElement(`hr`);h.style.cssText=`border: none; border-top: 1px solid var(--s2-border-subtle); margin: 16px 0;`,i.appendChild(h);let g=document.createElement(`div`);g.className=`dialog__desc`,g.style.cssText=`font-weight: 600; margin-bottom: 8px;`,g.textContent=`Tray`,i.appendChild(g);let _=u(),v=_.state!==`inactive`,y=l(window.localStorage);if(v||y){let e=document.createElement(`div`);e.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px;`,e.textContent=`Follower: ${v?_.state:`configured`}`,_.error&&(e.textContent+=` — ${_.error}`,e.style.color=`var(--slicc-cone)`),i.appendChild(e)}let b=document.createElement(`button`);b.className=`dialog__btn dialog__btn--secondary`,b.textContent=v||y?`Rejoin tray`:`Join a tray`,b.addEventListener(`click`,()=>f()),i.appendChild(b);let x=document.createElement(`hr`);x.style.cssText=`border: none; border-top: 1px solid var(--s2-border-subtle); margin: 16px 0;`,i.appendChild(x);let S=document.createElement(`button`);S.className=`dialog__btn`,S.textContent=`Get Started`,S.addEventListener(`click`,()=>{r.remove(),t((localStorage.getItem(Ri)??``)!==n)}),i.appendChild(S)}function o(e){i.innerHTML=``;let t=!!e,n=document.createElement(`div`);n.className=`dialog__title`,n.textContent=t?`Edit Account`:`Add Account`,i.appendChild(n);let r=document.createElement(`div`);r.className=`dialog__desc`,r.textContent=`Provider:`,i.appendChild(r);let o=document.createElement(`select`);if(o.className=`dialog__input`,o.style.marginBottom=`8px`,t){let t=Q(e.providerId),n=document.createElement(`option`);n.value=e.providerId,n.textContent=t.name,o.appendChild(n),o.disabled=!0,o.style.opacity=`0.7`}else{let e=Hi(),t=new Set($().map(e=>e.providerId)),n=[...e].sort((e,t)=>{let n=Q(e).name,r=Q(t).name;return n.localeCompare(r)});for(let e of n){if(t.has(e))continue;let n=Q(e),r=document.createElement(`option`);r.value=e,r.textContent=n.name,o.appendChild(r)}}i.appendChild(o);let s=document.createElement(`div`);s.className=`dialog__desc`,s.style.cssText=`font-size: 12px; color: var(--s2-content-tertiary); margin-bottom: 16px; margin-top: -4px;`,i.appendChild(s);let c=document.createElement(`div`);c.style.cssText=`margin-bottom: 16px; display: none;`;let l=document.createElement(`button`);l.className=`dialog__btn`,l.textContent=`Login`,l.style.cssText=`width: 100%; margin-bottom: 8px;`,c.appendChild(l);let u=document.createElement(`div`);u.className=`dialog__desc`,u.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); text-align: center;`,c.appendChild(u),l.addEventListener(`click`,async()=>{let e=o.value;if(!e)return;let t=Q(e);if(!t.onOAuthLogin)return;let n=$().some(t=>t.providerId===e),r=na(e);if(t.requiresBaseUrl&&!v.value.trim()&&!r){u.textContent=`Base URL is required.`,u.style.color=`var(--slicc-cone)`,v.focus();return}t.requiresBaseUrl&&v.value.trim()&&Zi(e,``,v.value.trim()),u.textContent=`Opening login window...`;try{let{createOAuthLauncher:e}=await d(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-t9Y4KdOX.js`);return{createOAuthLauncher:e}},[]),n=e();await t.onOAuthLogin(n,a)}catch(t){if(!n)try{$i(e)}catch{}qi.error(`OAuth login failed`,{providerId:e,error:t instanceof Error?t.message:String(t)}),u.textContent=`Login failed: ${t instanceof Error?t.message:String(t)}`}}),t&&e.userName&&(u.textContent=`Logged in as ${e.userName}`,l.textContent=`Re-login`),i.appendChild(c);let p=document.createElement(`div`),m=document.createElement(`div`);m.className=`dialog__desc`,p.appendChild(m);let h=document.createElement(`input`);h.className=`dialog__input`,h.type=`password`,h.autocomplete=`off`,h.spellcheck=!1,t&&(h.value=e.apiKey),p.appendChild(h),i.appendChild(p);let g=document.createElement(`div`),_=document.createElement(`div`);_.className=`dialog__desc`,_.textContent=`Base URL:`,g.appendChild(_);let v=document.createElement(`input`);v.className=`dialog__input`,v.type=`text`,v.autocomplete=`off`,v.spellcheck=!1,t&&e.baseUrl&&(v.value=e.baseUrl),g.appendChild(v);let y=document.createElement(`div`);y.className=`dialog__desc`,y.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,g.appendChild(y),i.appendChild(g);let b=document.createElement(`div`);b.style.display=`none`;let x=document.createElement(`div`);x.className=`dialog__desc`,x.textContent=`Deployment:`,b.appendChild(x);let S=document.createElement(`input`);S.className=`dialog__input`,S.type=`text`,S.autocomplete=`off`,S.spellcheck=!1,t&&e.deployment&&(S.value=e.deployment),b.appendChild(S);let C=document.createElement(`div`);C.className=`dialog__desc`,C.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,b.appendChild(C),i.appendChild(b);let w=document.createElement(`div`);w.style.display=`none`;let T=document.createElement(`div`);T.className=`dialog__desc`,T.textContent=`API Version:`,w.appendChild(T);let E=document.createElement(`input`);E.className=`dialog__input`,E.type=`text`,E.autocomplete=`off`,E.spellcheck=!1,t&&e.apiVersion&&(E.value=e.apiVersion),w.appendChild(E);let D=document.createElement(`div`);D.className=`dialog__desc`,D.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,w.appendChild(D),i.appendChild(w);let O=document.createElement(`div`);O.style.display=`none`;let k=document.createElement(`div`);k.className=`dialog__desc`,k.textContent=`Model:`,O.appendChild(k);let A=document.createElement(`select`);A.className=`dialog__input`,A.style.marginBottom=`16px`,O.appendChild(A);let j=document.createElement(`div`);j.className=`dialog__desc`,j.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,j.textContent=`Select the model available in your deployment`,O.appendChild(j),i.appendChild(O);let M=document.createElement(`div`);M.style.cssText=`color: var(--slicc-cone); font-size: 12px; margin-bottom: 8px; display: none;`,i.appendChild(M);let N=document.createElement(`button`);N.className=`dialog__btn`,N.textContent=t?`Save`:`Add`;function P(){let n=o.value;if(!n)return;let r=Q(n);if(s.textContent=r.description,r.isOAuth?(c.style.display=``,p.style.display=`none`,g.style.display=r.requiresBaseUrl?``:`none`,r.requiresBaseUrl&&(v.placeholder=r.baseUrlPlaceholder||`https://...`,y.textContent=r.baseUrlDescription||``),l.textContent=`Login with ${r.name}`,N.style.display=`none`):(c.style.display=`none`,m.textContent=`API Key${r.apiKeyEnvVar?` (${r.apiKeyEnvVar})`:``}:`,h.placeholder=r.apiKeyPlaceholder||`API key`,p.style.display=r.requiresApiKey?``:`none`,v.placeholder=r.baseUrlPlaceholder||`https://...`,y.textContent=r.baseUrlDescription||``,g.style.display=r.requiresBaseUrl?``:`none`,N.style.display=``),r.requiresDeployment?(b.style.display=``,S.placeholder=r.deploymentPlaceholder||`deployment-name`,C.textContent=r.deploymentDescription||``):b.style.display=`none`,r.requiresApiVersion?(w.style.display=``,!E.value&&r.apiVersionDefault&&(E.value=r.apiVersionDefault),E.placeholder=r.apiVersionDefault||`api-version`,D.textContent=r.apiVersionDescription||``):w.style.display=`none`,r.requiresModelSelection){O.style.display=``,A.innerHTML=``;let i=Ii(n===`bedrock-camp`?`amazon-bedrock`:n);for(let e of i){let t=document.createElement(`option`);t.value=e.id,t.textContent=e.name||e.id,A.appendChild(t)}if(t&&e.modelId)A.value=e.modelId;else if(r.defaultModelId){let e=i.find(e=>e.id.toLowerCase().includes(r.defaultModelId.toLowerCase()));e&&(A.value=e.id)}}else O.style.display=`none`}o.addEventListener(`change`,()=>{M.style.display=`none`,P()}),P();function F(){let e=o.value;if(!e)return;let t=Q(e);if(t.requiresApiKey&&h.value.trim().length<5){M.textContent=`API key is required (at least 5 characters).`,M.style.display=``,h.focus();return}if(t.requiresBaseUrl&&!v.value.trim()){M.textContent=`Base URL is required for this provider.`,M.style.display=``,v.focus();return}if(t.requiresDeployment&&!S.value.trim()){M.textContent=`Deployment name is required for this provider.`,M.style.display=``,S.focus();return}let n=t.requiresModelSelection&&A.value||void 0;Zi(e,h.value.trim(),v.value.trim()||void 0,n,S.value.trim()||void 0,E.value.trim()||void 0),a()}N.addEventListener(`click`,F);let I=e=>{e.key===`Enter`&&F()};h.addEventListener(`keydown`,I),v.addEventListener(`keydown`,I),S.addEventListener(`keydown`,I),E.addEventListener(`keydown`,I),i.appendChild(N);let L=$().length>0;if(!t&&!L){let e=document.createElement(`button`);e.className=`dialog__btn dialog__btn--secondary`,e.style.marginTop=`8px`,e.textContent=`Join a tray`,e.addEventListener(`click`,()=>{f()}),i.appendChild(e)}else if(L){let e=document.createElement(`button`);e.className=`dialog__btn dialog__btn--secondary`,e.style.marginTop=`8px`,e.textContent=`Back`,e.addEventListener(`click`,()=>{a()}),i.appendChild(e)}requestAnimationFrame(()=>{let e=o.value;if(!e)return;let t=Q(e);t.requiresApiKey?h.focus():t.requiresBaseUrl&&v.focus()})}function c(e){i.innerHTML=``;let n=document.createElement(`div`);n.className=`dialog__title`,n.textContent=`Join this tray`,i.appendChild(n);let a=document.createElement(`div`);a.className=`dialog__desc`,a.style.marginBottom=`12px`,a.textContent=`You’ve been invited to join a SLICC tray session. Click below to connect.`,i.appendChild(a);let c=document.createElement(`div`);c.className=`dialog__desc`,c.style.cssText=`font-family: monospace; font-size: 11px; color: var(--s2-content-secondary); word-break: break-all; margin-bottom: 16px; padding: 8px; background: var(--s2-bg-secondary); border-radius: 4px;`,c.textContent=e.length>80?e.slice(0,40)+`…`+e.slice(-37):e,i.appendChild(c);let l=document.createElement(`div`);l.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px; display: none;`,i.appendChild(l);let u=document.createElement(`button`);u.className=`dialog__btn`,u.textContent=`Join tray`,u.addEventListener(`click`,()=>{let n=s(window.localStorage,e);if(!n){l.textContent=`Invalid tray join URL.`,l.style.display=``,l.style.color=`var(--slicc-cone)`;return}Li()?chrome.runtime.sendMessage({source:`panel`,payload:{type:`refresh-tray-runtime`}}).catch(()=>{}):window.dispatchEvent(new CustomEvent(`slicc:tray-join`,{detail:{joinUrl:n.joinUrl}})),l.textContent=`Connecting to tray...`,l.style.display=``,l.style.color=`var(--s2-content-secondary)`,setTimeout(()=>{r.remove(),t(!1)},800)}),i.appendChild(u);let d=document.createElement(`button`);d.className=`dialog__btn dialog__btn--secondary`,d.style.marginTop=`8px`,d.textContent=`Set up an account instead`,d.addEventListener(`click`,()=>{o()}),i.appendChild(d)}function f(){i.innerHTML=``;let e=document.createElement(`div`);e.className=`dialog__title`,e.textContent=`Join a tray`,i.appendChild(e);let n=document.createElement(`div`);n.className=`dialog__desc`,n.style.marginBottom=`12px`,n.textContent=`Paste the tray join URL shared by the tray leader. It must include a /join/... capability.`,i.appendChild(n);let a=document.createElement(`div`);a.className=`dialog__desc`,a.textContent=`Tray URL:`,i.appendChild(a);let c=document.createElement(`input`);c.className=`dialog__input`,c.type=`text`,c.autocomplete=`off`,c.spellcheck=!1,c.placeholder=`https://tray.example.com/base/join/tray-123.capability-token`,c.style.marginBottom=`12px`,i.appendChild(c);let l=document.createElement(`div`);l.style.cssText=`color: var(--slicc-cone); font-size: 12px; margin-bottom: 8px; display: none;`,i.appendChild(l);let u=document.createElement(`div`);u.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px; display: none;`;let d=document.createElement(`button`);d.className=`dialog__btn`,d.textContent=`Join tray`,d.addEventListener(`click`,()=>{let e=s(window.localStorage,c.value);if(!e){l.textContent=`Enter a valid tray join URL with a /join/... capability.`,l.style.display=``,c.focus();return}Li()?chrome.runtime.sendMessage({source:`panel`,payload:{type:`refresh-tray-runtime`}}).catch(()=>{}):window.dispatchEvent(new CustomEvent(`slicc:tray-join`,{detail:{joinUrl:e.joinUrl}})),u.textContent=`Connecting to tray...`,u.style.display=``,u.style.color=`var(--s2-content-secondary)`,setTimeout(()=>{r.remove(),t(!1)},800)}),i.appendChild(d),i.appendChild(u);let f=document.createElement(`button`);f.className=`dialog__btn dialog__btn--secondary`,f.style.marginTop=`8px`,f.textContent=`Back`,f.addEventListener(`click`,()=>{o()}),i.appendChild(f),c.addEventListener(`input`,()=>{l.style.display=`none`}),c.addEventListener(`keydown`,e=>{e.key===`Enter`&&d.click()}),requestAnimationFrame(()=>c.focus())}})}export{ir as A,ea as C,Pi as D,Ni as E,Hn as M,Be as N,ki as O,pa as S,va as T,Wi as _,ua as a,$i as b,la as c,Hi as d,na as f,Q as g,Gi as h,da as i,Kn as j,Sr as k,ta as l,Qi as m,Ji as n,$ as o,ra as p,fa as r,Yi as s,Zi as t,ia as u,aa as v,oa as w,ma as x,ca as y};
@@ -1 +1 @@
1
- import{_ as e,d as t,g as n,h as r,o as i,v as a,y as o}from"./provider-settings-DvGHKYX6.js";export{i as getAccounts,t as getAvailableProviders,r as getOAuthAccountInfo,n as getProviderConfig,e as getProviderModels,a as getSelectedModelId,o as getSelectedProvider};
1
+ import{_ as e,d as t,g as n,h as r,o as i,v as a,y as o}from"./provider-settings-ZCf9cqx-.js";export{i as getAccounts,t as getAvailableProviders,r as getOAuthAccountInfo,n as getProviderConfig,e as getProviderModels,a as getSelectedModelId,o as getSelectedProvider};
@@ -0,0 +1 @@
1
+ import{D as e,E as t}from"./provider-settings-ZCf9cqx-.js";export{t as getRegisteredProviderConfig,e as getRegisteredProviderIds};
@@ -0,0 +1 @@
1
+ import{i as e}from"./index-l6Ye92eW.js";export{e as fetchSecretEnvVars};
@@ -0,0 +1 @@
1
+ import{a as e}from"./index-l6Ye92eW.js";export{e as WasmShell};
@@ -1 +1 @@
1
- import{a as e,c as t,d as n,l as r,o as i,r as a,s as o,t as s,u as c}from"./constants-Dqhmtsws.js";import{a as l,c as u,d,f,h as p,i as m,l as h,m as g,n as _,o as v,p as y,r as b,s as x,t as S,u as C}from"./skills-CeTe2rpz.js";export{s as MANIFEST_FILE,a as MAX_SKILL_ARCHIVE_SIZE_BYTES,e as SKILLS_DIR,i as SKILLS_SYSTEM_VERSION,o as SKILL_ARCHIVE_EXTENSION,t as SKILL_FILE,r as SLICC_DIR,c as STATE_FILE,n as WORKSPACE_SKILLS_PATH,x as applySkill,f as checkConflicts,y as checkDependencies,l as discoverSkillCandidates,_ as discoverSkills,u as getAppliedSkills,b as getSkillInfo,h as initSkillsSystem,d as installSkillFromDrop,g as parseManifestContent,p as readManifest,m as readSkillInstructions,C as readState,v as resolveSkillNameCollisions,S as uninstallSkill};
1
+ import{a as e,c as t,d as n,l as r,o as i,r as a,s as o,t as s,u as c}from"./constants-Dqhmtsws.js";import{a as l,c as u,d,f,h as p,i as m,l as h,m as g,n as _,o as v,p as y,r as b,s as x,t as S,u as C}from"./skills-Ojk3qFM4.js";export{s as MANIFEST_FILE,a as MAX_SKILL_ARCHIVE_SIZE_BYTES,e as SKILLS_DIR,i as SKILLS_SYSTEM_VERSION,o as SKILL_ARCHIVE_EXTENSION,t as SKILL_FILE,r as SLICC_DIR,c as STATE_FILE,n as WORKSPACE_SKILLS_PATH,x as applySkill,f as checkConflicts,y as checkDependencies,l as discoverSkillCandidates,_ as discoverSkills,u as getAppliedSkills,b as getSkillInfo,h as initSkillsSystem,d as installSkillFromDrop,g as parseManifestContent,p as readManifest,m as readSkillInstructions,C as readState,v as resolveSkillNameCollisions,S as uninstallSkill};
@@ -1,4 +1,4 @@
1
- import{c as e,d as t,f as n,l as r,n as i,o as a,s as o,t as s,u as c}from"./constants-Dqhmtsws.js";import{a as l,s as u}from"./fs-De1cF4qQ.js";function d(e){let t={},n=e.split(`
1
+ import{c as e,d as t,f as n,l as r,n as i,o as a,s as o,t as s,u as c}from"./constants-Dqhmtsws.js";import{a as l,s as u}from"./fs-BAlzVbQY.js";function d(e){let t={},n=e.split(`
2
2
  `),r=null,i=!1,a={},o=null;for(let e of n){let n=e.trim();if(!n||n.startsWith(`#`))continue;if(n.startsWith(`- `)){let e=n.slice(2).trim();i&&o?o.push(e):r&&r.push(e);continue}let s=n.indexOf(`:`);if(s===-1)continue;let c=n.slice(0,s).trim(),l=n.slice(s+1).trim(),u=e.search(/\S/);if(c===`structured`){i=!0,a={},t.structured=a;continue}if(i&&u>=2){if(u>=4&&o)continue;l===``||l===`[]`?(o=[],a[c]=o):(a[c]=l,o=null);continue}u===0&&(i=!1),l===``||l===`[]`?(r=[],t[c]=r):(t[c]=l,r=null)}return t}function f(e,t=s){let n=d(e);if(!n.skill||typeof n.skill!=`string`)throw Error(`Invalid manifest: missing 'skill' field in ${t}`);if(!n.version||typeof n.version!=`string`)throw Error(`Invalid manifest: missing 'version' field in ${t}`);return{skill:n.skill,version:n.version,description:n.description||``,adds:n.adds||[],modifies:n.modifies||[],structured:n.structured,conflicts:n.conflicts||[],depends:n.depends||[],test:n.test,author:n.author}}async function p(e,t){let n=`${t}/${s}`;return f(await e.readTextFile(n),n)}function m(e,t){let n=(e.depends||[]).filter(e=>!t.includes(e));return{ok:n.length===0,missing:n}}function h(e,t){let n=(e.conflicts||[]).filter(e=>t.includes(e));return{ok:n.length===0,conflicting:n}}var g=/^[A-Za-z0-9][A-Za-z0-9._-]*$/,_=class extends Error{};function v(e){return new TextDecoder().decode(e)}function y(e){let t=e.replace(/\\/g,`/`);if(!t||t.endsWith(`/`))return null;if(t.startsWith(`/`)||/^[A-Za-z]:\//.test(t))throw Error(`Blocked suspicious path "${e}".`);let n=t.split(`/`);if(n.some(e=>e===``||e===`.`||e===`..`))throw Error(`Blocked suspicious path "${e}".`);return n.join(`/`)}function b(e){if(!g.test(e))throw Error(`Invalid manifest: skill name "${e}" must be a simple directory name.`)}function x(e){let t=[];for(let[n,r]of Object.entries(e)){let e=y(n);e&&t.push({originalPath:n,path:e,bytes:r})}return t}function S(e){let t=e.filter(e=>e.path===`manifest.yaml`||e.path.endsWith(`/manifest.yaml`));if(t.length===0)throw Error(`Skill archive is missing ${s}.`);if(t.length>1)throw Error(`Skill archive contains multiple ${s} files.`);return t[0]}function C(e){let t=0,r=0;return n(e,{filter(e){if(t++,t>1e3)throw new _(`Skill archives may contain at most ${i} entries.`);if(r+=e.originalSize,r>52428800)throw new _(`Skill archives must expand to 50 MB or smaller after extraction.`);return!0}})}function w(e){return l(t,`.${e}.tmp-${`${Date.now()}-${Math.random().toString(16).slice(2,8)}`}`)}async function T(e,n){if(!n.name.toLowerCase().endsWith(`.skill`))throw Error(`Only ${o} archives can be installed with drag and drop.`);if(n.size>52428800)throw Error(`Skill archives must be 50 MB or smaller.`);let r;try{r=C(new Uint8Array(await n.arrayBuffer()))}catch(e){if(e instanceof _)throw e;let t=e instanceof Error?e.message:String(e);throw Error(`Invalid .skill archive: ${t}`)}let i=x(r),a=S(i),c=f(v(a.bytes),a.path);b(c.skill);let d=l(t,c.skill);if(await e.exists(d))throw Error(`Skill "${c.skill}" already exists at ${d}.`);let p=w(c.skill),m=a.path===`manifest.yaml`?``:a.path.slice(0,-(s.length+1));await e.mkdir(p,{recursive:!0});try{let t=0;for(let n of i){if(m&&(n.path===m||!n.path.startsWith(`${m}/`)))continue;let r=m?n.path.slice(m.length+1):n.path;if(!r)continue;let i=l(p,r),{dir:a}=u(i);a!==`/`&&await e.mkdir(a,{recursive:!0}),await e.writeFile(i,n.bytes),t++}return await e.rename(p,d),{skillName:c.skill,destinationPath:d,fileCount:t}}catch(t){throw await e.exists(p)&&await e.rm(p,{recursive:!0}),t}}var E=`/${r}/${c}`;async function D(e){try{await e.mkdir(`/${r}`)}catch{}try{await e.stat(E)}catch{let t={version:a,applied_skills:[]};await e.writeFile(E,JSON.stringify(t,null,2))}}async function O(e){try{let t=await e.readTextFile(E);return JSON.parse(t)}catch(e){if(typeof e==`object`&&e&&e.code===`ENOENT`)return{version:a,applied_skills:[]};throw e}}async function k(e,t){await D(e),await e.writeFile(E,JSON.stringify(t,null,2))}async function A(e){return(await O(e)).applied_skills.map(e=>e.name)}async function j(e,t){let n=await O(e);n.applied_skills=n.applied_skills.filter(e=>e.name!==t.name),n.applied_skills.push(t),await k(e,n)}async function M(e,t){let n=await O(e);n.applied_skills=n.applied_skills.filter(e=>e.name!==t),await k(e,n)}async function N(e){let t=new TextEncoder().encode(e),n=await crypto.subtle.digest(`SHA-256`,t);return Array.from(new Uint8Array(n)).map(e=>e.toString(16).padStart(2,`0`)).join(``)}function P(e){return e.startsWith(`/`)?{valid:!1,error:`Absolute path not allowed: ${e}`}:e.split(`/`).some(e=>e===`..`)?{valid:!1,error:`Path traversal not allowed: ${e}`}:e.includes(`%2e%2e`)||e.includes(`%2E%2E`)?{valid:!1,error:`Encoded path traversal not allowed: ${e}`}:{valid:!0}}async function F(e,t){let n=t.split(`/`).filter(Boolean),r=``;for(let t of n){r+=`/`+t;try{await e.mkdir(r)}catch{}}}async function I(e,t,n=`/workspace/skills`){let r=`${n}/${t}`;await D(e);let i;try{i=await p(e,r)}catch(e){return{success:!1,skill:t,version:`unknown`,error:`Failed to read manifest: ${e instanceof Error?e.message:String(e)}`}}if(i.skill!==t)return{success:!1,skill:t,version:i.version,error:`Manifest skill name "${i.skill}" does not match directory name "${t}"`};let a=await A(e);if(a.includes(i.skill))return{success:!1,skill:i.skill,version:i.version,error:`Skill "${i.skill}" is already installed`};let o=m(i,a);if(!o.ok)return{success:!1,skill:i.skill,version:i.version,error:`Missing dependencies: ${o.missing.join(`, `)}`};let s=h(i,a);if(!s.ok)return{success:!1,skill:i.skill,version:i.version,error:`Conflicting skills: ${s.conflicting.join(`, `)}`};let c={},l=[];try{if(i.adds&&i.adds.length>0)for(let t of i.adds){let n=P(t);if(!n.valid)return{success:!1,skill:i.skill,version:i.version,error:n.error};let a=`${r}/add/${t}`,o=`/${t}`;try{let n=o.substring(0,o.lastIndexOf(`/`));n&&await F(e,n),await e.copyFile(a,o),l.push(t),c[t]=await N(await e.readTextFile(o))}catch(e){return{success:!1,skill:i.skill,version:i.version,error:`Failed to copy ${t}: ${e instanceof Error?e.message:String(e)}`}}}if(i.modifies&&i.modifies.length>0)for(let t of i.modifies){let n=P(t);if(!n.valid)return{success:!1,skill:i.skill,version:i.version,error:n.error};let a=`${r}/modify/${t}`;try{let n=await e.readTextFile(a),r=``;try{r=await e.readTextFile(`/${t}`)}catch{}let i;if(n.includes(`// APPEND_AFTER:`)){let e=n.split(`
3
3
  `),t=e.find(e=>e.includes(`// APPEND_AFTER:`))?.split(`// APPEND_AFTER:`)[1]?.trim(),a=e.filter(e=>!e.includes(`// APPEND_AFTER:`)).join(`
4
4
  `);if(t&&r.includes(t)){let e=r.indexOf(t)+t.length,n=r.indexOf(`
@@ -0,0 +1 @@
1
+ import{c as e}from"./index-l6Ye92eW.js";export{e as collectThemeCSS};
@@ -5,24 +5,24 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>slicc</title>
7
7
  <link rel="icon" type="image/png" href="/logos/sliccy-color-1scoops-32x32.png" />
8
- <script type="module" crossorigin src="/assets/index-D0ffClMg.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-l6Ye92eW.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-zsgVPwQN.js">
10
10
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-ca-nBW7U.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/logger-B-No_qN_.js">
12
- <link rel="modulepreload" crossorigin href="/assets/fs-De1cF4qQ.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/fs-BAlzVbQY.js">
13
13
  <link rel="modulepreload" crossorigin href="/assets/env-api-keys-DlVZ9FrG.js">
14
14
  <link rel="modulepreload" crossorigin href="/assets/simple-options-FPdEz6rB.js">
15
15
  <link rel="modulepreload" crossorigin href="/assets/json-parse-JW3qhabb.js">
16
16
  <link rel="modulepreload" crossorigin href="/assets/openai-Cn7eGqwa.js">
17
17
  <link rel="modulepreload" crossorigin href="/assets/tray-follower-status-BlQSlF6m.js">
18
- <link rel="modulepreload" crossorigin href="/assets/provider-settings-DvGHKYX6.js">
18
+ <link rel="modulepreload" crossorigin href="/assets/provider-settings-ZCf9cqx-.js">
19
19
  <link rel="modulepreload" crossorigin href="/assets/cost-command-Bipyal__.js">
20
20
  <link rel="modulepreload" crossorigin href="/assets/constants-Dqhmtsws.js">
21
21
  <link rel="modulepreload" crossorigin href="/assets/pako-djzWUVJp.js">
22
22
  <link rel="modulepreload" crossorigin href="/assets/cdp-B4yzwpE0.js">
23
23
  <link rel="modulepreload" crossorigin href="/assets/db-QbwB670D.js">
24
24
  <link rel="modulepreload" crossorigin href="/assets/magick-wasm-cJ5msdlA.js">
25
- <link rel="modulepreload" crossorigin href="/assets/skills-CeTe2rpz.js">
25
+ <link rel="modulepreload" crossorigin href="/assets/skills-Ojk3qFM4.js">
26
26
  <link rel="stylesheet" crossorigin href="/assets/index-BeYOzORh.css">
27
27
  </head>
28
28
  <body>
@@ -5,24 +5,24 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>slicc</title>
7
7
  <link rel="icon" type="image/png" href="/logos/sliccy-color-1scoops-32x32.png" />
8
- <script type="module" crossorigin src="/assets/index-D0ffClMg.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-l6Ye92eW.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-zsgVPwQN.js">
10
10
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-ca-nBW7U.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/logger-B-No_qN_.js">
12
- <link rel="modulepreload" crossorigin href="/assets/fs-De1cF4qQ.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/fs-BAlzVbQY.js">
13
13
  <link rel="modulepreload" crossorigin href="/assets/env-api-keys-DlVZ9FrG.js">
14
14
  <link rel="modulepreload" crossorigin href="/assets/simple-options-FPdEz6rB.js">
15
15
  <link rel="modulepreload" crossorigin href="/assets/json-parse-JW3qhabb.js">
16
16
  <link rel="modulepreload" crossorigin href="/assets/openai-Cn7eGqwa.js">
17
17
  <link rel="modulepreload" crossorigin href="/assets/tray-follower-status-BlQSlF6m.js">
18
- <link rel="modulepreload" crossorigin href="/assets/provider-settings-DvGHKYX6.js">
18
+ <link rel="modulepreload" crossorigin href="/assets/provider-settings-ZCf9cqx-.js">
19
19
  <link rel="modulepreload" crossorigin href="/assets/cost-command-Bipyal__.js">
20
20
  <link rel="modulepreload" crossorigin href="/assets/constants-Dqhmtsws.js">
21
21
  <link rel="modulepreload" crossorigin href="/assets/pako-djzWUVJp.js">
22
22
  <link rel="modulepreload" crossorigin href="/assets/cdp-B4yzwpE0.js">
23
23
  <link rel="modulepreload" crossorigin href="/assets/db-QbwB670D.js">
24
24
  <link rel="modulepreload" crossorigin href="/assets/magick-wasm-cJ5msdlA.js">
25
- <link rel="modulepreload" crossorigin href="/assets/skills-CeTe2rpz.js">
25
+ <link rel="modulepreload" crossorigin href="/assets/skills-Ojk3qFM4.js">
26
26
  <link rel="stylesheet" crossorigin href="/assets/index-BeYOzORh.css">
27
27
  </head>
28
28
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sliccy",
3
- "version": "1.55.0",
3
+ "version": "1.55.2",
4
4
  "description": "Browser-based coding agent with thin CLI server",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -63,13 +63,13 @@
63
63
  "esbuild": "0.28.0",
64
64
  "eslint": "10.2.0",
65
65
  "eslint-config-prettier": "10.1.8",
66
- "globals": "17.4.0",
66
+ "globals": "17.5.0",
67
67
  "husky": "9.1.7",
68
68
  "lint-staged": "16.4.0",
69
69
  "prettier": "3.8.2",
70
70
  "semantic-release": "25.0.3",
71
71
  "typescript": "^6.0.0",
72
- "typescript-eslint": "8.58.1",
72
+ "typescript-eslint": "8.58.2",
73
73
  "vite": "8.0.8",
74
74
  "vitest": "4.1.4"
75
75
  },
@@ -1 +0,0 @@
1
- import{r as e}from"./index-D0ffClMg.js";export{e as getLickManager};
@@ -1 +0,0 @@
1
- import{D as e,E as t}from"./provider-settings-DvGHKYX6.js";export{t as getRegisteredProviderConfig,e as getRegisteredProviderIds};
@@ -1 +0,0 @@
1
- import{i as e}from"./index-D0ffClMg.js";export{e as fetchSecretEnvVars};
@@ -1 +0,0 @@
1
- import{a as e}from"./index-D0ffClMg.js";export{e as WasmShell};
@@ -1 +0,0 @@
1
- import{c as e}from"./index-D0ffClMg.js";export{e as collectThemeCSS};