sliccy 2.46.0 → 2.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +13 -0
  2. package/dist/ui/assets/{adobe-CEkMgLY6.js → adobe-B5JX3vSF.js} +1 -1
  3. package/dist/ui/assets/{adobe-pfo8dkS1.js → adobe-f1RkQ2LG.js} +1 -1
  4. package/dist/ui/assets/{agent-bridge-FKQ_SiYR.js → agent-bridge-KerdP1oi.js} +1 -1
  5. package/dist/ui/assets/{agent-message-to-chat-BlIs6e4u.js → agent-message-to-chat-rNxH0eRL.js} +1 -1
  6. package/dist/ui/assets/{anthropic-DS0SZslL.js → anthropic-DXIx8WQZ.js} +1 -1
  7. package/dist/ui/assets/{anthropic-DcwLBACY.js → anthropic-DqN-XhOb.js} +1 -1
  8. package/dist/ui/assets/{azure-openai-X30Lthb4.js → azure-openai-Bbb6cKeV.js} +1 -1
  9. package/dist/ui/assets/{azure-openai-Ci_Th3ev.js → azure-openai-jVgW-OuR.js} +1 -1
  10. package/dist/ui/assets/{azure-openai-responses-BIgSJwWG.js → azure-openai-responses-BLClomsm.js} +1 -1
  11. package/dist/ui/assets/{azure-openai-responses-Vz3Rt_gC.js → azure-openai-responses-DucvnACK.js} +1 -1
  12. package/dist/ui/assets/{bedrock-camp-sX3SaGD9.js → bedrock-camp-BNzU3faS.js} +2 -2
  13. package/dist/ui/assets/{bedrock-camp-oMWjq1w0.js → bedrock-camp-DAEKkMwP.js} +3 -3
  14. package/dist/ui/assets/{cdp-DkqC8PpG.js → cdp-C1_c8-E0.js} +2 -2
  15. package/dist/ui/assets/cost-command-DszplwaG.js +1 -0
  16. package/dist/ui/assets/db-DPvmo9md.js +1 -0
  17. package/dist/ui/assets/{es-4JXw-ziF.js → es-CbuIWQjf.js} +1 -1
  18. package/dist/ui/assets/{fs-ChJuGWFt.js → fs-C8QxzFK_.js} +2 -2
  19. package/dist/ui/assets/{fs-CVxR5_ux.js → fs-Ch4z-7e8.js} +3 -3
  20. package/dist/ui/assets/{github-whKRO7V4.js → github-Bm46hrl1.js} +2 -2
  21. package/dist/ui/assets/{github-C9rZzPwm.js → github-DnfkA3fV.js} +1 -1
  22. package/dist/ui/assets/{google-CRylOWk0.js → google-D6ha3Lvd.js} +1 -1
  23. package/dist/ui/assets/{google-DLIE-XI-.js → google-DmmMEYi-.js} +1 -1
  24. package/dist/ui/assets/index-BxaasNW5.js +1542 -0
  25. package/dist/ui/assets/index-eWuuouO-.css +1 -0
  26. package/dist/ui/assets/{kernel-worker-CfrmOaHB.js → kernel-worker-BTAvhT7r.js} +959 -957
  27. package/dist/ui/assets/{local-llm-CJzFL4ih.js → local-llm-BQQV1eUs.js} +1 -1
  28. package/dist/ui/assets/{local-llm-COoR-MZW.js → local-llm-DQQUPDay.js} +1 -1
  29. package/dist/ui/assets/{magick-wasm-CJevWwoW.js → magick-wasm-Dek2V-_y.js} +1 -1
  30. package/dist/ui/assets/{mistral-DNyQLocj.js → mistral-BvJc11au.js} +1 -1
  31. package/dist/ui/assets/{mistral-DKksTMIW.js → mistral-D_QxZUo3.js} +1 -1
  32. package/dist/ui/assets/{mount-C7lbbYhG.js → mount-CBj4Y0uY.js} +1 -1
  33. package/dist/ui/assets/{mount-0SSqBEqr.js → mount-XM0MMGbg.js} +2 -2
  34. package/dist/ui/assets/{nuke-command-bVxp1Hc_.js → nuke-command-CKv7dPLq.js} +1 -1
  35. package/dist/ui/assets/{oauth-bootstrap-Csp1r2Bf.js → oauth-bootstrap-iOQY9ywE.js} +1 -1
  36. package/dist/ui/assets/{oauth-service-B5C1N2fh.js → oauth-service-BynE1niO.js} +1 -1
  37. package/dist/ui/assets/offscreen-client-Bm3MzxIR.js +1 -0
  38. package/dist/ui/assets/{onboarding-orchestrator-j6kwLNC7.js → onboarding-orchestrator-BTbcOsYi.js} +1 -1
  39. package/dist/ui/assets/{openai-codex-responses-9ApV86q4.js → openai-codex-responses-ZTcDLOww.js} +1 -1
  40. package/dist/ui/assets/{openai-codex-responses-AbjYRHz6.js → openai-codex-responses-jw3eMyAW.js} +1 -1
  41. package/dist/ui/assets/{openai-completions-D8pTAy_A.js → openai-completions-DeKhvKno.js} +1 -1
  42. package/dist/ui/assets/{openai-completions-CONoOlAn.js → openai-completions-rPhCMQf6.js} +1 -1
  43. package/dist/ui/assets/{openai-responses-BDdpB0oy.js → openai-responses-09Y9u2o-.js} +1 -1
  44. package/dist/ui/assets/{openai-responses-BoWKpVRR.js → openai-responses-BYVIjcrN.js} +1 -1
  45. package/dist/ui/assets/{openai-responses-shared-CkOZ1DXy.js → openai-responses-shared-BSdTPGXk.js} +1 -1
  46. package/dist/ui/assets/{openai-responses-shared-CNoKazjO.js → openai-responses-shared-Cb6xPI3z.js} +1 -1
  47. package/dist/ui/assets/provider-settings-B88plz7u.js +63 -0
  48. package/dist/ui/assets/provider-settings-YeoYrehC.js +28 -0
  49. package/dist/ui/assets/{providers-zTkMw2SC.js → providers-DyuaLPXN.js} +1 -1
  50. package/dist/ui/assets/{spawn-D3Rr5or4.js → spawn-X9L04o6Q.js} +1 -1
  51. package/dist/ui/assets/upgrade-detection-Bllbwwis.js +1 -0
  52. package/dist/ui/electron-overlay-entry.js +7 -7
  53. package/dist/ui/index.html +7 -7
  54. package/dist/ui/packages/webapp/index.html +7 -7
  55. package/package.json +1 -1
  56. package/dist/ui/assets/cost-command-CZ_FIZsh.js +0 -1
  57. package/dist/ui/assets/db-Cdoacmjm.js +0 -1
  58. package/dist/ui/assets/index-BPKmYW7p.css +0 -1
  59. package/dist/ui/assets/index-DC0yFifh.js +0 -1454
  60. package/dist/ui/assets/offscreen-client-A0eZR46g.js +0 -1
  61. package/dist/ui/assets/provider-settings-BJiQwAz7.js +0 -2
  62. package/dist/ui/assets/provider-settings-CpChAEwc.js +0 -90
  63. package/dist/ui/assets/upgrade-detection-CEFruYPw.js +0 -1
@@ -1 +0,0 @@
1
- import{t as e}from"./logger-B-No_qN_.js";import{n as t}from"./tray-follower-status-DmK3Afse.js";import{o as n}from"./index-DC0yFifh.js";var r=e(`panel-transport`);function i(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function a(){return{onMessage:e=>{let t=(t,n,r)=>(i(t)&&e(t),!1);return chrome.runtime.onMessage.addListener(t),()=>chrome.runtime.onMessage.removeListener(t)},send:e=>{chrome.runtime.sendMessage({source:`panel`,payload:e}).catch(e=>{r.error(`failed to send to offscreen`,{error:e instanceof Error?e.message:String(e)})})}}}var o=e(`offscreen-client`),s=class{eventListeners=new Set;callbacks;scoops=[];scoopStatuses=new Map;currentMessageId=new Map;ready=!1;stateRetryTimer=null;localFs=null;transport;selectedScoopJid=null;constructor(e,t){this.callbacks=e,this.transport=t??a(),this.setupMessageListener()}setLocalFS(e){this.localFs=e}createAgentHandle(){return{sendMessage:(e,t,n)=>{if(!this.selectedScoopJid){this.emitToUI({type:`error`,error:`No scoop selected`});return}this.send({type:`user-message`,scoopJid:this.selectedScoopJid,text:e,attachments:n,messageId:t??`msg-${Date.now()}-${Math.random().toString(36).slice(2,8)}`})},onEvent:e=>(this.eventListeners.add(e),()=>this.eventListeners.delete(e)),stop:()=>{this.selectedScoopJid&&this.send({type:`abort`,scoopJid:this.selectedScoopJid})}}}getScoops(){return this.scoops}getScoop(e){return this.scoops.find(t=>t.jid===e)}isProcessing(e){return this.scoopStatuses.get(e)===`processing`}async registerScoop(e){if(!e.isCone)throw Error(`OffscreenClient.registerScoop is cone-only; use scoop_scoop for non-cone scoops`);this.scoops.find(t=>t.name===e.name)||(this.scoops.push(e),this.scoopStatuses.set(e.jid,`initializing`)),this.send({type:`cone-create`,name:e.name})}async unregisterScoop(e){this.send({type:`scoop-drop`,scoopJid:e}),this.scoops=this.scoops.filter(t=>t.jid!==e),this.scoopStatuses.delete(e)}createScoopTab(e){}async getGlobalMemory(){if(!this.localFs)return``;try{let e=await this.localFs.readFile(`/shared/CLAUDE.md`,{encoding:`utf-8`});return typeof e==`string`?e:new TextDecoder().decode(e)}catch{return``}}getScoopContext(e){if(this.localFs)return{getFS:()=>this.localFs}}getSharedFS(){return this.localFs}stopScoop(e){this.send({type:`abort`,scoopJid:e})}async clearQueuedMessages(e){}async deleteQueuedMessage(e,t){}updateModel(){this.send({type:`refresh-model`})}setScoopThinkingLevel(e,t){this.send({type:`set-thinking-level`,scoopJid:e,level:t})}async clearAllMessages(){this.send({type:`clear-chat`})}clearFilesystem(){this.send({type:`clear-filesystem`})}requestScoopMessages(e){this.send({type:`request-scoop-messages`,scoopJid:e})}requestState(){this.send({type:`request-state`});let e=0;this.stateRetryTimer=setInterval(()=>{if(e++,this.ready||e>20){this.stateRetryTimer&&=(clearInterval(this.stateRetryTimer),null);return}o.debug(`Retrying request-state`,{attempt:e}),this.send({type:`request-state`})},500)}isReady(){return this.ready}sprinkleOpHandler=null;sendSprinkleLick(e,t,n){this.send({type:`sprinkle-lick`,sprinkleName:e,body:t,targetScoop:n})}setSprinkleOpHandler(e){this.sprinkleOpHandler=e}sendRaw(e){this.send(e)}setupMessageListener(){this.transport.onMessage(e=>{if(e.source!==`offscreen`)return;let t=e.payload;if(t?.type===`debug-tabs`){let e=window.__slicc_debug_tabs;e?.(!!t.show)}else t?.type===`sprinkle-op`&&this.sprinkleOpHandler?this.sprinkleOpHandler(t):this.handleOffscreenMessage(e.payload)})}handleOffscreenMessage(e){switch(e.type){case`offscreen-ready`:this.ready?(o.warn(`Offscreen restarted — re-requesting state`),this.ready=!1):o.info(`Offscreen engine ready`),this.send({type:`request-state`});break;case`agent-event`:this.handleAgentEvent(e);break;case`scoop-status`:this.handleScoopStatus(e);break;case`scoop-created`:this.handleScoopCreated(e);break;case`scoop-list`:this.handleScoopList(e);break;case`state-snapshot`:this.handleStateSnapshot(e);break;case`error`:this.handleError(e);break;case`incoming-message`:this.handleIncomingMessage(e);break;case`scoop-messages-replaced`:{let t=e;this.callbacks.onScoopMessagesReplaced?.(t.scoopJid,t.messages);break}case`tray-runtime-status`:{let t=e;l(t.leader,t.follower);break}case`terminal-status`:case`terminal-output`:case`terminal-media-preview`:case`terminal-exit`:case`terminal-cleared`:for(let t of this.terminalEventListeners)try{t(e)}catch(e){o.error(`terminal event listener error`,{error:e instanceof Error?e.message:String(e)})}break}}terminalEventListeners=new Set;onTerminalEvent(e){return this.terminalEventListeners.add(e),()=>this.terminalEventListeners.delete(e)}handleAgentEvent(e){if(e.scoopJid===this.selectedScoopJid)switch(e.eventType){case`text_delta`:{let t=this.currentMessageId.get(e.scoopJid);t||(t=`scoop-${e.scoopJid}-${c()}`,this.currentMessageId.set(e.scoopJid,t),this.emitToUI({type:`message_start`,messageId:t})),this.emitToUI({type:`content_delta`,messageId:t,text:e.text??``});break}case`tool_start`:{let t=this.currentMessageId.get(e.scoopJid);t||(t=`scoop-${e.scoopJid}-${c()}`,this.currentMessageId.set(e.scoopJid,t),this.emitToUI({type:`message_start`,messageId:t})),this.emitToUI({type:`tool_use_start`,messageId:t,toolName:e.toolName??``,toolInput:e.toolInput});break}case`tool_end`:{let t=this.currentMessageId.get(e.scoopJid);t&&this.emitToUI({type:`tool_result`,messageId:t,toolName:e.toolName??``,result:e.toolResult??``,isError:e.isError});break}case`tool_ui`:{let t=this.currentMessageId.get(e.scoopJid);t||(t=`scoop-${e.scoopJid}-${c()}`,this.currentMessageId.set(e.scoopJid,t),this.emitToUI({type:`message_start`,messageId:t})),this.emitToUI({type:`tool_ui`,messageId:t,toolName:e.toolName??``,requestId:e.requestId??``,html:e.html??``});break}case`tool_ui_done`:{let t=this.currentMessageId.get(e.scoopJid);t&&this.emitToUI({type:`tool_ui_done`,messageId:t,requestId:e.requestId??``});break}case`response_done`:{let t=this.currentMessageId.get(e.scoopJid);t&&(this.emitToUI({type:`content_done`,messageId:t}),this.currentMessageId.delete(e.scoopJid));break}case`turn_end`:{let t=this.currentMessageId.get(e.scoopJid)??`done-${e.scoopJid}-${c()}`;this.currentMessageId.delete(e.scoopJid),this.emitToUI({type:`turn_end`,messageId:t});break}}}handleScoopStatus(e){this.scoopStatuses.set(e.scoopJid,e.status),this.callbacks.onStatusChange(e.scoopJid,e.status)}handleScoopCreated(e){let t=this.msgScoopToRegistered(e.scoop);this.scoops=this.scoops.filter(e=>e.name!==t.name||e.jid===t.jid),this.scoops.find(e=>e.jid===t.jid)||this.scoops.push(t),this.scoopStatuses.set(t.jid,e.scoop.status),this.callbacks.onScoopCreated(t)}handleScoopList(e){this.scoops=e.scoops.map(e=>this.msgScoopToRegistered(e));for(let t of e.scoops)this.scoopStatuses.set(t.jid,t.status);this.callbacks.onScoopListUpdate(e.scoops)}handleStateSnapshot(e){o.info(`Received state snapshot`,{scoopCount:e.scoops.length}),this.scoops=e.scoops.map(e=>this.msgScoopToRegistered(e));for(let t of e.scoops)this.scoopStatuses.set(t.jid,t.status);e.trayRuntimeStatus&&l(e.trayRuntimeStatus.leader,e.trayRuntimeStatus.follower);let t=!this.ready;t&&(this.ready=!0,this.stateRetryTimer&&=(clearInterval(this.stateRetryTimer),null)),this.callbacks.onScoopListUpdate(e.scoops),t&&this.callbacks.onReady?.()}handleError(e){e.scoopJid===this.selectedScoopJid&&this.emitToUI({type:`error`,error:e.error})}handleIncomingMessage(e){this.callbacks.onIncomingMessage(e.scoopJid,e.message)}msgScoopToRegistered(e){return{jid:e.jid,name:e.name,folder:e.folder,isCone:e.isCone,type:e.isCone?`cone`:`scoop`,requiresTrigger:!e.isCone,assistantLabel:e.assistantLabel,addedAt:new Date().toISOString(),...e.config?{config:{...e.config}}:{}}}emitToUI(e){for(let t of this.eventListeners)try{t(e)}catch(e){o.error(`Listener error`,{error:e instanceof Error?e.message:String(e)})}}send(e){this.transport.send(e)}};function c(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}function l(e,r){n({state:e.state,error:e.error,reconnectAttempts:e.reconnectAttempts,session:e.session?{...e.session}:null}),t({state:r.state,joinUrl:r.joinUrl,trayId:r.trayId,error:r.error,lastError:r.lastError,reconnectAttempts:r.reconnectAttempts,attachAttempts:r.attachAttempts,lastAttachCode:r.lastAttachCode,connectingSince:r.connectingSince,lastPingTime:r.lastPingTime})}export{s as OffscreenClient};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/magick-wasm-CJevWwoW.js","assets/index-DC0yFifh.js","assets/chunk-jRWAZmH_.js","assets/preload-helper-ca-nBW7U.js","assets/bedrock-camp-oMWjq1w0.js","assets/simple-options-B0cR4giT.js","assets/fs-CVxR5_ux.js","assets/logger-B-No_qN_.js","assets/path-utils-CNNVZ3-O.js","assets/tray-follower-status-DmK3Afse.js","assets/mime-types-DL940yDZ.js","assets/mount-picker-popup-BLHoVG3y.js","assets/mount-0SSqBEqr.js","assets/index-BPKmYW7p.css","assets/azure-openai-Ci_Th3ev.js","assets/openai-NzrumIkM.js","assets/local-llm-COoR-MZW.js","assets/openai-completions-CONoOlAn.js","assets/github-copilot-headers-DLK82thn.js","assets/headers-CeeP1wvy.js","assets/sanitize-unicode-DANurEy1.js","assets/adobe-CEkMgLY6.js","assets/github-whKRO7V4.js","assets/oauth-service-DTHr_ILl.js","assets/panel-rpc-g85bMVnq.js"])))=>i.map(i=>d[i]);
2
- import{r as e}from"./chunk-jRWAZmH_.js";import{t}from"./logger-B-No_qN_.js";import{t as n}from"./preload-helper-ca-nBW7U.js";import{i as r,r as i,t as a}from"./bedrock-camp-oMWjq1w0.js";import{d as o,l as s,u as c}from"./simple-options-B0cR4giT.js";import{l,s as u,t as d}from"./tray-follower-status-DmK3Afse.js";import{s as f}from"./index-DC0yFifh.js";function p(e){if(!Number.isFinite(e)||e<=0)return`0 B`;let t=[`B`,`KB`,`MB`,`GB`],n=e,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r++;return`${n>=10||r===0?Math.round(n):Math.round(n*10)/10} ${t[r]}`}function m(e){let t=e.mimeType||`application/octet-stream`;return`${e.name} (${t}, ${p(e.size)})`}var h=t(`image-processor`),g=3932160,_=1568,v=new Set([`image/jpeg`,`image/png`,`image/gif`,`image/webp`]);function y(e){return v.has(e)}function b(e,t){try{if(t===`image/png`){if(e.length<32)return null;let t=atob(e.slice(0,32)),n=t.charCodeAt(16)<<24|t.charCodeAt(17)<<16|t.charCodeAt(18)<<8|t.charCodeAt(19),r=t.charCodeAt(20)<<24|t.charCodeAt(21)<<16|t.charCodeAt(22)<<8|t.charCodeAt(23);return n>0&&r>0?{width:n,height:r}:null}if(t===`image/gif`){if(e.length<16)return null;let t=atob(e.slice(0,16)),n=t.charCodeAt(6)|t.charCodeAt(7)<<8,r=t.charCodeAt(8)|t.charCodeAt(9)<<8;return n>0&&r>0?{width:n,height:r}:null}if(t===`image/jpeg`){let t=Math.min(21846*4,e.length),n=atob(e.slice(0,t));for(let e=0;e<n.length-8;e++)if(n.charCodeAt(e)===255){let t=n.charCodeAt(e+1);if(t===192||t===194){let t=n.charCodeAt(e+5)<<8|n.charCodeAt(e+6),r=n.charCodeAt(e+7)<<8|n.charCodeAt(e+8);return r>0&&t>0?{width:r,height:t}:null}}}}catch{}return null}async function x(e){if(!y(e.mimeType))return h.warn(`Unsupported image format`,{mimeType:e.mimeType}),{type:`text`,text:`[Image removed: unsupported format "${e.mimeType}". Supported: JPEG, PNG, GIF, WebP]`};let t=e.data.length,r=b(e.data,e.mimeType);if(!(t>5242880||r!==null&&(r.width>8e3||r.height>8e3)||r!==null&&Math.max(r.width,r.height)>1568))return e;h.info(`Image needs processing`,{base64Size:t,dimensions:r?`${r.width}x${r.height}`:`unknown`,reason:t>5242880?`size`:`dimensions`});let i,a;try{let e=await n(()=>import(`./magick-wasm-CJevWwoW.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13]));i=e.getMagick,a=e.MIME_TO_MAGICK_FORMAT}catch(e){return h.error(`ImageMagick WASM module unavailable`,{error:e instanceof Error?e.message:String(e)}),{type:`text`,text:`[Image removed: resize service unavailable (ImageMagick WASM could not be loaded)]`}}let o;try{o=await i()}catch(e){return h.error(`ImageMagick WASM initialization failed`,{error:e instanceof Error?e.message:String(e)}),{type:`text`,text:`[Image removed: resize service unavailable (WASM init failed)]`}}try{let n=atob(e.data),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);let i={data:null,mime:e.mimeType};if(await o.ImageMagick.read(r,async t=>{let n=t.width,r=t.height,o=Math.max(n,r);if(o>1568){let e=_/o,i=Math.round(n*e),a=Math.round(r*e);t.resize(i,a),h.info(`Resized image`,{from:`${n}x${r}`,to:`${i}x${a}`})}let s=a[e.mimeType]||`JPEG`;t.write(s,e=>{i.data=new Uint8Array(e)}),i.data&&i.data.length>g&&s!==`JPEG`?(h.info(`Still over 5MB, compressing to JPEG q80`),t.quality=80,t.write(`JPEG`,e=>{i.data=new Uint8Array(e)}),i.mime=`image/jpeg`):i.data&&i.data.length>g&&(h.info(`Still over 5MB as JPEG, reducing quality to 60`),t.quality=60,t.write(`JPEG`,e=>{i.data=new Uint8Array(e)}))}),!i.data)return h.warn(`ImageMagick produced no output`),{type:`text`,text:`[Image removed: could not be processed (empty output from resize)]`};if(i.data.length>g)return h.warn(`Image still over 5MB after resize+compress`,{size:i.data.length}),{type:`text`,text:`[Image removed: still ${Math.round(i.data.length/1024/1024*10)/10}MB after resize and compression, exceeds 5MB API limit]`};let s=``;for(let e=0;e<i.data.length;e++)s+=String.fromCharCode(i.data[e]);let c=btoa(s);return h.info(`Image processed successfully`,{originalBase64:t,newBase64:c.length,mimeType:i.mime}),{type:`image`,data:c,mimeType:i.mime}}catch(n){return h.error(`Image data processing failed (corrupt or unreadable)`,{mimeType:e.mimeType,estimatedBytes:t,error:n instanceof Error?n.message:String(n)}),{type:`text`,text:`[Image removed: image data could not be processed (${n instanceof Error?n.message:`corrupt or unreadable`})]`}}}t(`tool-adapter`),t(`context-compaction`);function S(e,t){if(e.state===`inactive`&&t.state===`inactive`)return{kind:`hidden`};if(e.state===`leader`&&e.session?.joinUrl)return{kind:`leader-copy`,joinUrl:e.session.joinUrl,label:`Enable multi-browser sync`,caption:`Share this URL to connect more browsers.`};if(e.state!==`inactive`){let t=e.state===`connecting`?`Setting up multi-browser sync…`:e.state===`reconnecting`?`Reconnecting…`:`Sync service unreachable.`;return{kind:`leader-pending`,label:`Multi-browser sync`,caption:e.error??t}}return{kind:`follower`,label:`Multi-browser sync`,caption:t.error??t.lastError??C(t.state)??`Mirroring another browser.`}}function C(e){switch(e){case`connected`:return`Connected — mirroring another browser.`;case`connecting`:return`Connecting to the other browser…`;case`reconnecting`:return`Reconnecting…`;case`disconnected`:return`Disconnected from the other browser.`;default:return null}}function w(e){let t=e.trim();if(!t)return`Paste a sync URL to continue.`;let n=null;try{n=new URL(t)}catch{return`That doesn’t look like a URL. Paste the full https://… link from the other browser.`}return n.protocol!==`https:`&&n.protocol!==`http:`?`Sync URLs must start with https://.`:n.pathname.includes(`/join/`)?`That sync URL is malformed. Re-copy it from the other browser and try again.`:`This URL is missing the /join/… capability. Use “Enable multi-browser sync” on the other browser.`}var T=Object.assign({"/packages/dev-tools/providers.build.json":{include:[`*`],exclude:[]}})[`/packages/dev-tools/providers.build.json`]??{include:[`*`],exclude:[]};function E(e){let{include:t,exclude:n}=T;return n.includes(`*`)||n.includes(e)?!1:!!(t.includes(`*`)||t.includes(e))}var D=Object.assign({"./built-in/azure-ai-foundry.ts":()=>n(()=>import(`./azure-ai-foundry-Bcv3AvZm.js`),[]),"./built-in/azure-openai.ts":()=>n(()=>import(`./azure-openai-Ci_Th3ev.js`),__vite__mapDeps([14,4,2,1,3,5,6,7,8,9,10,11,12,13,15])),"./built-in/bedrock-camp.ts":()=>n(()=>import(`./bedrock-camp-oMWjq1w0.js`).then(e=>e.n),__vite__mapDeps([4,2,1,3,5,6,7,8,9,10,11,12,13])),"./built-in/local-llm.ts":()=>n(()=>import(`./local-llm-COoR-MZW.js`),__vite__mapDeps([16,4,2,1,3,5,6,7,8,9,10,11,12,13,17,18,19,20,15]))}),O=Object.assign({"/packages/webapp/providers/adobe.ts":()=>n(()=>import(`./adobe-CEkMgLY6.js`),__vite__mapDeps([21,3,4,2,1,5,6,7,8,9,10,11,12,13])),"/packages/webapp/providers/github.ts":()=>n(()=>import(`./github-whKRO7V4.js`),__vite__mapDeps([22,3,4,2,1,5,6,7,8,9,10,11,12,13]))}),k=new Map,A=null;function j(){return A||(A=(async()=>{for(let[e,t]of Object.entries(D)){let e=await t();e.config&&E(e.config.id)&&(k.set(e.config.id,e.config),e.register?.())}for(let[e,t]of Object.entries(O)){let e=await t();e.config&&(k.set(e.config.id,e.config),e.register?.())}})(),A)}function M(e){return k.get(e)}function N(){return[...k.keys()]}[...[`ghp_`,`gho_`,`ghu_`,`ghs_`,`ghr_`,`github_pat_`,`sk-`,`pk-`,`xoxb-`,`xoxp-`,`xoxa-`,`xoxs-`,`AKIA`,`ABIA`,`ACCA`,`ASIA`,`sk-ant-`,`Bearer `]].sort((e,t)=>t.length-e.length);var ee=`slicc_oauth_extra_domains`;function te(e){try{let t=e.getItem(ee);if(!t)return{};let n=JSON.parse(t);if(typeof n!=`object`||!n||Array.isArray(n))return{};let r={};for(let[e,t]of Object.entries(n)){if(typeof e!=`string`||!Array.isArray(t))continue;let n=t.filter(e=>typeof e==`string`&&e.length>0);n.length>0&&(r[e]=n)}return r}catch{return{}}}var ne=e({addAccount:()=>J,applyProviderDefaults:()=>W,clearAllSettings:()=>Se,describeInvalidJoinUrl:()=>w,downloadProviders:()=>xe,exportProviders:()=>be,getAccounts:()=>K,getAllAvailableModels:()=>ue,getApiKey:()=>ye,getApiKeyForProvider:()=>me,getApiVersionForProvider:()=>ge,getAvailableProviders:()=>R,getBaseUrlForProvider:()=>X,getDeploymentForProvider:()=>he,getExtraOAuthDomains:()=>de,getOAuthAccountInfo:()=>H,getProviderConfig:()=>z,getProviderModels:()=>V,getSelectedModelId:()=>Z,getSelectedProvider:()=>Q,isModelHiddenFromPicker:()=>G,removeAccount:()=>Y,resolveCurrentModel:()=>$,resolveModelById:()=>Ce,saveOAuthAccount:()=>fe,setSelectedModelId:()=>_e,showProviderSettings:()=>De}),P=s,F=c;function re(){return typeof chrome<`u`&&!!chrome?.runtime?.id}var I=`slicc_accounts`,L=`selected-model`,ie=[`slicc_provider`,`slicc_api_key`,`slicc_base_url`,`anthropic_api_key`,`api_provider`,`azure_resource`,`bedrock_region`],ae=!1;function oe(){if(!ae){ae=!0;for(let e of ie)try{localStorage.removeItem(e)}catch{}}}function R(){let e=o().filter(E),t=N();return[...new Set([...e,...t])]}function z(e){return M(e)||{id:e,name:e.split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),description:`${e} provider`,requiresApiKey:!0,requiresBaseUrl:!1}}function B(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),t.compat!==void 0&&(e.compat={...e.compat??{},...t.compat})}function V(e){try{if(e===`bedrock-camp`){let e=a(X(`bedrock-camp`)),t=F(`amazon-bedrock`).filter(t=>r(t,e)),n=new Set(t.map(e=>e.id)),o=i().filter(t=>r(t,e)&&!n.has(t.id));return[...t,...o].map(e=>({...e,api:`bedrock-camp-converse`,provider:`bedrock-camp`}))}let t=z(e);if(t.getModelIds){let n;try{n=t.getModelIds()}catch(t){return U.error(`Provider getModelIds callback failed`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}let r=new Map;for(let e of o())try{for(let t of F(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&&B(o,s),B(o,n),o})}if(t.isOAuth){let n=F(`anthropic`),r=`${e}-anthropic`;return n.map(n=>{let i={...n,api:r,provider:e},a=t.modelOverrides?.[n.id];return a&&B(i,a),i})}return F(e===`azure-ai-foundry`?`anthropic`:e)}catch(t){return U.error(`Failed to load models`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}}function H(e){let t=K().find(t=>t.providerId===e);if(!t?.accessToken)return null;let n=!!t.tokenExpiresAt&&Date.now()>t.tokenExpiresAt-6e4;return{token:t.accessToken,maskedValue:t.maskedValue,expiresAt:t.tokenExpiresAt,userName:t.userName,userAvatar:t.userAvatar,expired:n}}var se=Object.assign({})[`/packages/webapp/providers.json`]??[],U=t(`provider-settings`);function W(e=se){if(e.length===0||K().length>0)return;let t=new Set(R());for(let n of e)if(!(!n.providerId||!n.apiKey)){if(!t.has(n.providerId)){U.warn(`Unknown provider "${n.providerId}" in providers.json — skipping`);continue}J(n.providerId,n.apiKey,n.baseUrl)}let n=e.find(e=>e.providerId&&e.apiKey&&t.has(e.providerId));n?.model&&!localStorage.getItem(L)&&localStorage.setItem(L,`${n.providerId}:${n.model}`)}var ce=[/haiku/i];function G(e){return ce.some(t=>t.test(e))}function le(e){return e.filter(e=>!G(e.id))}function ue(){let e=K();if(e.length===0)return[];let t=new Map;for(let n of e){if(t.has(n.providerId))continue;let e=le(V(n.providerId));if(e.length===0)continue;let r=z(n.providerId),i={providerId:n.providerId,providerName:r.name,models:e};t.set(n.providerId,i)}return[...t.values()]}function K(){oe();let e=localStorage.getItem(I);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 de(e){return te(localStorage)[e]??[]}function q(e){localStorage.setItem(I,JSON.stringify(e))}function J(e,t,n,r,i){let a=K().filter(t=>t.providerId!==e),o={providerId:e,apiKey:t};n&&(o.baseUrl=n),r&&(o.deployment=r),i&&(o.apiVersion=i),a.push(o),q(a)}async function Y(e){let t=typeof chrome<`u`&&!!chrome?.runtime?.id;try{if(t)await chrome.storage.local.remove([`oauth.${e}.token`,`oauth.${e}.token_DOMAINS`]);else{let t=await fetch(`/api/secrets/oauth/${e}`,{method:`DELETE`});!t.ok&&t.status!==404&&U.warn(`OAuth replica DELETE non-ok`,{providerId:e,status:t.status})}}catch(n){U.error(`OAuth replica removal failed`,{providerId:e,isExtension:t,error:n instanceof Error?n.message:String(n)})}q(K().filter(t=>t.providerId!==e));let n=localStorage.getItem(L)??``,r=n.indexOf(`:`);r>0&&n.slice(0,r)===e&&localStorage.removeItem(L)}async function fe(e){let t=K().find(t=>t.providerId===e.providerId),n=K().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}),q(n);let r=z(e.providerId)?.oauthTokenDomains??[],i=de(e.providerId),a=new Set,o=[];for(let e of[...r,...i]){let t=e.toLowerCase();a.has(t)||(a.add(t),o.push(e))}if(o.length===0)return;let s=typeof chrome<`u`&&!!chrome?.runtime?.id;try{if(s){await chrome.storage.local.set({[`oauth.${e.providerId}.token`]:e.accessToken,[`oauth.${e.providerId}.token_DOMAINS`]:o.join(`,`)});let t=await new Promise(t=>{chrome.runtime.sendMessage({type:`secrets.mask-oauth-token`,providerId:e.providerId},n=>{chrome.runtime.lastError&&U.error(`SW mask-oauth-token transport failed`,{providerId:e.providerId,error:chrome.runtime.lastError.message}),t(n??{})})});if(t.error&&U.warn(`SW mask-oauth-token returned error`,{providerId:e.providerId,error:t.error}),t.maskedValue){let n=K(),r=n.find(t=>t.providerId===e.providerId);r&&(r.maskedValue=t.maskedValue,q(n))}}else{let t=await fetch(`/api/secrets/oauth-update`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({providerId:e.providerId,accessToken:e.accessToken,domains:o})});if(t.ok){let n=await t.json(),r=K(),i=r.find(t=>t.providerId===e.providerId);i&&typeof n.maskedValue==`string`&&(i.maskedValue=n.maskedValue,q(r))}else U.warn(`OAuth replica POST non-ok`,{providerId:e.providerId,status:t.status})}}catch(t){U.error(`OAuth replica sync failed`,{providerId:e.providerId,isExtension:s,error:t instanceof Error?t.message:String(t)})}}var pe=`local`;function me(e){let t=K().find(t=>t.providerId===e);return t?t.accessToken||t.apiKey||(z(e).optionalApiKey?pe:null):null}function X(e){return K().find(t=>t.providerId===e)?.baseUrl??null}function he(e){return K().find(t=>t.providerId===e)?.deployment??null}function ge(e){return K().find(t=>t.providerId===e)?.apiVersion??null}function Z(){let e=localStorage.getItem(L)||``,t=e.indexOf(`:`);return t>=0?e.slice(t+1):e}function _e(e){if(e.includes(`:`))localStorage.setItem(L,e);else{let t=Q();localStorage.setItem(L,`${t}:${e}`)}}function ve(){return localStorage.getItem(L)||``}function Q(){let e=ve(),t=e.indexOf(`:`);if(t>0)return e.slice(0,t);let n=K();return n.length>0?n[0].providerId:`anthropic`}function ye(){return me(Q())}function be(){let e=K(),t=Q(),n=Z();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 xe(){let e=JSON.stringify(be(),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)}async function Se(){let e=K();await Promise.allSettled(e.map(e=>Y(e.providerId))),localStorage.removeItem(I),localStorage.removeItem(L);for(let e of ie)localStorage.removeItem(e)}function Ce(e){if(!e)return $();let t=Q(),n=X(t);try{let r=z(t),i=P(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;return r.isOAuth?a=V(t).find(t=>t.id===e)||{...a,api:`${t}-anthropic`,provider:t}:t===`bedrock-camp`&&(a={...a,api:`bedrock-camp-converse`,provider:`bedrock-camp`}),n&&(a={...a,baseUrl:n}),a}catch{return $()}}function $(){let e=Q(),t=Z(),n=X(e),r=V(e),i=z(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=z(e),i=t.isOAuth||e===`azure-ai-foundry`?`anthropic`:e===`bedrock-camp`?`amazon-bedrock`:e,a=P(i,o);if(!a?.id)throw Error(`Model ${o} not found in ${i} registry`);let s=a;return t.isOAuth?s=r.find(e=>e.id===o)||{...s,api:`${e}-anthropic`,provider:e}:e===`bedrock-camp`&&(s={...s,api:`bedrock-camp-converse`,provider:`bedrock-camp`}),n&&(s={...s,baseUrl:n}),s}catch{let e=r.find(e=>e.id===o);return e?n?{...e,baseUrl:n}:e:P(`anthropic`,`claude-sonnet-4-0`)}}function we(e){return e.length<=10?`****`:e.slice(0,4)+`...`+e.slice(-4)}function Te(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 Ee={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 De(e){return f(`button`),new Promise(t=>{let r=localStorage.getItem(I)??``,i=document.createElement(`div`);i.className=`dialog-overlay`;let a=document.createElement(`div`);a.className=`dialog`,a.style.cssText=`max-width: 480px; width: 90vw; padding: 32px;`,K().length>0?o():e?.autoJoinUrl?c(e.autoJoinUrl):e?.preferTrayJoin?f():s(),i.appendChild(a),document.body.appendChild(i);function o(){a.innerHTML=``;let e=document.createElement(`div`);e.className=`dialog__title`,e.textContent=`Accounts`,a.appendChild(e);let n=K(),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(n.length===0){let e=document.createElement(`div`);e.className=`dialog__desc`,e.textContent=`No accounts configured.`,a.appendChild(e)}else{let e=document.createElement(`div`);e.style.cssText=`margin-bottom: 16px;`;for(let t of n){let n=z(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 a=document.createElement(`div`);a.style.cssText=`font-size: 14px; font-weight: 600; color: var(--s2-content-default);`,a.textContent=n.name,i.appendChild(a);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=we(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(Te(Ee.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`,()=>{s(t)}),u.appendChild(d);let f=document.createElement(`button`);f.style.cssText=c,f.setAttribute(`aria-label`,`Remove account`),f.appendChild(Te(Ee.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`,async()=>{await Y(t.providerId),o()}),u.appendChild(f),r.appendChild(u),e.appendChild(r)}a.appendChild(e)}let l=document.createElement(`div`);l.style.cssText=`display: flex; gap: 8px;`;let p=document.createElement(`button`);p.className=n.length>0?`dialog__btn dialog__btn--secondary`:`dialog__btn`,p.style.flex=`1`,p.textContent=`Add Account`,p.addEventListener(`click`,()=>s()),l.appendChild(p);let m=document.createElement(`button`);m.className=`dialog__btn dialog__btn--secondary`,m.style.flex=`1`,m.textContent=`Export`,m.addEventListener(`click`,()=>xe()),l.appendChild(m),a.appendChild(l);let h=document.createElement(`hr`);h.style.cssText=`border: none; border-top: 1px solid var(--s2-border-subtle); margin: 16px 0;`,a.appendChild(h);let g=document.createElement(`div`);g.className=`dialog__desc`,g.style.cssText=`font-weight: 600; margin-bottom: 8px;`,g.textContent=`Tray`,a.appendChild(g);let _=d(),v=_.state!==`inactive`,y=u(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)`),a.appendChild(e)}let b=document.createElement(`button`);b.className=`dialog__btn dialog__btn--secondary`,b.textContent=v||y?`Reconnect to other browser`:`Connect to another browser`,b.addEventListener(`click`,()=>f()),a.appendChild(b);let x=document.createElement(`hr`);x.style.cssText=`border: none; border-top: 1px solid var(--s2-border-subtle); margin: 16px 0;`,a.appendChild(x);let S=document.createElement(`button`);S.className=`dialog__btn`,S.textContent=`Get Started`,S.addEventListener(`click`,()=>{i.remove(),t((localStorage.getItem(I)??``)!==r)}),a.appendChild(S)}function s(e){a.innerHTML=``;let t=!!e,r=document.createElement(`div`);r.className=`dialog__title`,r.textContent=t?`Edit Account`:`Add Account`,a.appendChild(r);let i=document.createElement(`div`);i.className=`dialog__desc`,i.textContent=`Provider:`,a.appendChild(i);let s=document.createElement(`select`);if(s.className=`dialog__input`,s.style.marginBottom=`8px`,t){let t=z(e.providerId),n=document.createElement(`option`);n.value=e.providerId,n.textContent=t.name,s.appendChild(n),s.disabled=!0,s.style.opacity=`0.7`}else{let e=R(),t=new Set(K().map(e=>e.providerId)),n=[...e].sort((e,t)=>{let n=z(e).name,r=z(t).name;return n.localeCompare(r)});for(let e of n){if(t.has(e))continue;let n=z(e),r=document.createElement(`option`);r.value=e,r.textContent=n.name,s.appendChild(r)}}a.appendChild(s);let c=document.createElement(`div`);c.className=`dialog__desc`,c.style.cssText=`font-size: 12px; color: var(--s2-content-tertiary); margin-bottom: 16px; margin-top: -4px;`,a.appendChild(c);let l=document.createElement(`div`);l.style.cssText=`margin-bottom: 16px; display: none;`;let u=document.createElement(`button`);u.className=`dialog__btn`,u.textContent=`Login`,u.style.cssText=`width: 100%; margin-bottom: 8px;`,l.appendChild(u);let d=document.createElement(`div`);d.className=`dialog__desc`,d.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); text-align: center;`,l.appendChild(d),u.addEventListener(`click`,async()=>{let e=s.value;if(!e)return;let t=z(e);if(!t.onOAuthLogin)return;let r=K().some(t=>t.providerId===e),i=X(e);if(t.requiresBaseUrl&&!v.value.trim()&&!i){d.textContent=`Base URL is required.`,d.style.color=`var(--slicc-cone)`,v.focus();return}t.requiresBaseUrl&&v.value.trim()&&J(e,``,v.value.trim()),d.textContent=`Opening login window...`;try{let{createOAuthLauncher:e}=await n(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-DTHr_ILl.js`);return{createOAuthLauncher:e}},__vite__mapDeps([23,24])),r=e();await t.onOAuthLogin(r,o)}catch(t){if(!r)try{await Y(e)}catch{}U.error(`OAuth login failed`,{providerId:e,error:t instanceof Error?t.message:String(t)}),d.textContent=`Login failed: ${t instanceof Error?t.message:String(t)}`}}),t&&e.userName&&(d.textContent=`Logged in as ${e.userName}`,u.textContent=`Re-login`),a.appendChild(l);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),a.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),a.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),a.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),a.appendChild(w);let O=document.createElement(`div`);O.style.cssText=`color: var(--slicc-cone); font-size: 12px; margin-bottom: 8px; display: none;`,a.appendChild(O);let k=document.createElement(`button`);k.className=`dialog__btn`,k.textContent=t?`Save`:`Add`;function A(){let e=s.value;if(!e)return;let t=z(e);if(c.textContent=t.description,t.isOAuth)l.style.display=``,p.style.display=`none`,g.style.display=t.requiresBaseUrl?``:`none`,t.requiresBaseUrl&&(v.placeholder=t.baseUrlPlaceholder||`https://...`,y.textContent=t.baseUrlDescription||``),u.textContent=`Login with ${t.name}`,k.style.display=`none`;else{l.style.display=`none`,m.textContent=`${t.requiresApiKey?`API Key`:`API Key (optional)`}${t.apiKeyEnvVar?` (${t.apiKeyEnvVar})`:``}:`,h.placeholder=t.apiKeyPlaceholder||`API key`;let e=t.requiresApiKey||t.optionalApiKey;p.style.display=e?``:`none`,v.placeholder=t.baseUrlPlaceholder||`https://...`,y.textContent=t.baseUrlDescription||``,g.style.display=t.requiresBaseUrl?``:`none`,k.style.display=``}t.requiresDeployment?(b.style.display=``,S.placeholder=t.deploymentPlaceholder||`deployment-name`,C.textContent=t.deploymentDescription||``):b.style.display=`none`,t.requiresApiVersion?(w.style.display=``,!E.value&&t.apiVersionDefault&&(E.value=t.apiVersionDefault),E.placeholder=t.apiVersionDefault||`api-version`,D.textContent=t.apiVersionDescription||``):w.style.display=`none`}s.addEventListener(`change`,()=>{O.style.display=`none`,A()}),A();function j(){let e=s.value;if(!e)return;let t=z(e);if(t.requiresApiKey&&h.value.trim().length<5){O.textContent=`API key is required (at least 5 characters).`,O.style.display=``,h.focus();return}if(t.requiresBaseUrl&&!v.value.trim()){O.textContent=`Base URL is required for this provider.`,O.style.display=``,v.focus();return}if(t.requiresDeployment&&!S.value.trim()){O.textContent=`Deployment name is required for this provider.`,O.style.display=``,S.focus();return}J(e,h.value.trim(),v.value.trim()||void 0,S.value.trim()||void 0,E.value.trim()||void 0),o()}k.addEventListener(`click`,j);let M=e=>{e.key===`Enter`&&j()};h.addEventListener(`keydown`,M),v.addEventListener(`keydown`,M),S.addEventListener(`keydown`,M),E.addEventListener(`keydown`,M),a.appendChild(k);let N=K().length>0;if(!t&&!N){let e=document.createElement(`button`);e.className=`dialog__btn dialog__btn--secondary`,e.style.marginTop=`8px`,e.textContent=`Connect to another browser`,e.addEventListener(`click`,()=>{f()}),a.appendChild(e)}else if(N){let e=document.createElement(`button`);e.className=`dialog__btn dialog__btn--secondary`,e.style.marginTop=`8px`,e.textContent=`Back`,e.addEventListener(`click`,()=>{o()}),a.appendChild(e)}requestAnimationFrame(()=>{let e=s.value;if(!e)return;let t=z(e);t.requiresApiKey?h.focus():t.requiresBaseUrl&&v.focus()})}function c(e){a.innerHTML=``;let n=document.createElement(`div`);n.className=`dialog__title`,n.textContent=`Connect this browser?`,a.appendChild(n);let r=document.createElement(`div`);r.className=`dialog__desc`,r.style.marginBottom=`12px`,r.textContent=`You’ve been invited to mirror another SLICC browser. Click below to start syncing.`,a.appendChild(r);let o=document.createElement(`div`);o.className=`dialog__desc`,o.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;`,o.textContent=e.length>80?e.slice(0,40)+`…`+e.slice(-37):e,a.appendChild(o);let c=document.createElement(`div`);c.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px; display: none;`,a.appendChild(c);let u=document.createElement(`button`);u.className=`dialog__btn`,u.textContent=`Connect`,u.addEventListener(`click`,()=>{let n=l(window.localStorage,e);if(!n){c.textContent=`Invalid sync URL.`,c.style.display=``,c.style.color=`var(--slicc-cone)`;return}if(re()){let e={type:`refresh-tray-runtime`,joinUrl:n.joinUrl,workerBaseUrl:n.workerBaseUrl};chrome.runtime.sendMessage({source:`panel`,payload:e}).catch(()=>{})}else window.dispatchEvent(new CustomEvent(`slicc:tray-join`,{detail:{joinUrl:n.joinUrl}}));c.textContent=`Connecting…`,c.style.display=``,c.style.color=`var(--s2-content-secondary)`,setTimeout(()=>{i.remove(),t(!1)},800)}),a.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`,()=>{s()}),a.appendChild(d)}function f(){a.innerHTML=``;let e=document.createElement(`div`);e.className=`dialog__title`,e.textContent=`Connect to another browser`,a.appendChild(e);let n=document.createElement(`div`);n.className=`dialog__desc`,n.style.marginBottom=`12px`,n.textContent=`Paste a multi-browser sync URL to mirror another SLICC browser.`,a.appendChild(n);let r=document.createElement(`details`);r.style.cssText=`margin-bottom: 12px; font-size: 12px; color: var(--s2-content-secondary);`;let o=document.createElement(`summary`);o.style.cssText=`cursor: pointer; user-select: none; color: var(--s2-content-secondary);`,o.textContent=`How do I get the sync URL?`,r.appendChild(o);let c=document.createElement(`div`);c.style.cssText=`margin-top: 8px; padding: 10px 12px; background: var(--s2-bg-layer-2); border-radius: var(--s2-radius-default); border: 1px solid var(--s2-border-subtle); line-height: 1.5;`;let u=document.createElement(`ol`);u.style.cssText=`margin: 0; padding-left: 20px;`;for(let e of[`On the other SLICC, click the avatar (top right).`,`Choose “Enable multi-browser sync” — the URL is copied automatically.`,`Paste it below. Both browsers must be on the same SLICC version.`]){let t=document.createElement(`li`);t.textContent=e,u.appendChild(t)}c.appendChild(u),r.appendChild(c),a.appendChild(r);let d=document.createElement(`div`);d.className=`dialog__desc`,d.textContent=`Sync URL:`,a.appendChild(d);let f=document.createElement(`input`);f.className=`dialog__input`,f.type=`text`,f.autocomplete=`off`,f.spellcheck=!1,f.placeholder=`https://www.sliccy.ai/join/<token>`,a.appendChild(f);let p=document.createElement(`div`);p.style.cssText=`color: var(--slicc-cone); font-size: 12px; margin-bottom: 8px; display: none;`,a.appendChild(p);let m=document.createElement(`div`);m.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px; display: none;`;let h=document.createElement(`button`);h.className=`dialog__btn`,h.textContent=`Connect`,h.addEventListener(`click`,()=>{let e=f.value.trim();if(!e){p.textContent=`Paste a sync URL to continue.`,p.style.display=``,f.focus();return}let n=l(window.localStorage,e);if(!n){p.textContent=w(e),p.style.display=``,f.focus();return}if(re()){let e={type:`refresh-tray-runtime`,joinUrl:n.joinUrl,workerBaseUrl:n.workerBaseUrl};chrome.runtime.sendMessage({source:`panel`,payload:e}).catch(()=>{})}else window.dispatchEvent(new CustomEvent(`slicc:tray-join`,{detail:{joinUrl:n.joinUrl}}));m.textContent=`Connecting…`,m.style.display=``,m.style.color=`var(--s2-content-secondary)`,setTimeout(()=>{i.remove(),t(!1)},800)}),a.appendChild(h),a.appendChild(m);let g=document.createElement(`button`);g.className=`dialog__btn dialog__btn--secondary`,g.style.marginTop=`8px`,g.textContent=`Back`,g.addEventListener(`click`,()=>{s()}),a.appendChild(g),f.addEventListener(`input`,()=>{p.style.display=`none`}),f.addEventListener(`keydown`,e=>{e.key===`Enter`&&h.click()}),requestAnimationFrame(()=>f.focus())}})}export{S as C,m as D,p as E,j as S,x as T,Ce as _,ye as a,De as b,he as c,V as d,Z as f,$ as g,Y as h,ue as i,H as l,ne as m,Se as n,ge as o,Q as p,K as r,X as s,W as t,z as u,fe as v,y as w,M as x,_e as y};
@@ -1,90 +0,0 @@
1
- import{r as e}from"./chunk-jRWAZmH_.js";import{t}from"./logger-BHrAkMIS.js";import{a as n,c as r,i,r as a,s as o,t as s}from"./bedrock-camp-sX3SaGD9.js";import{d as c,l,u}from"./transform-messages-DlZklr1h.js";import{a as d,n as f,t as p}from"./providers-zTkMw2SC.js";import{m,p as h}from"./kernel-worker-CfrmOaHB.js";const ee=`slicc.trayWorkerBaseUrl`,te=`https://www.sliccy.ai`;let ne={state:`inactive`,joinUrl:null,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:null,lastError:null};function re(){return{...ne}}const g=new Set;function ie(e){return g.add(e),()=>{g.delete(e)}}async function ae(e,t,n,r,i,a){let o=[...e],s={...t,messages:[...t.messages,...e]};await r({type:`agent_start`}),await r({type:`turn_start`});for(let t of e)await r({type:`message_start`,message:t}),await r({type:`message_end`,message:t});return await _(s,o,n,i,r,a),o}async function oe(e,t,n,r,i){if(e.messages.length===0)throw Error(`Cannot continue: no messages in context`);if(e.messages[e.messages.length-1].role===`assistant`)throw Error(`Cannot continue from message role: assistant`);let a=[],o={...e};return await n({type:`agent_start`}),await n({type:`turn_start`}),await _(o,a,t,r,n,i),a}async function _(e,t,n,r,i,a){let o=!0,s=await n.getSteeringMessages?.()||[];for(;;){let c=!0;for(;c||s.length>0;){if(o?o=!1:await i({type:`turn_start`}),s.length>0){for(let n of s)await i({type:`message_start`,message:n}),await i({type:`message_end`,message:n}),e.messages.push(n),t.push(n);s=[]}let l=await se(e,n,r,i,a);if(t.push(l),l.stopReason===`error`||l.stopReason===`aborted`){await i({type:`turn_end`,message:l,toolResults:[]}),await i({type:`agent_end`,messages:t});return}let u=l.content.filter(e=>e.type===`toolCall`),d=[];if(c=!1,u.length>0){let a=await ce(e,l,n,r,i);d.push(...a.messages),c=!a.terminate;for(let n of d)e.messages.push(n),t.push(n)}if(await i({type:`turn_end`,message:l,toolResults:d}),await n.shouldStopAfterTurn?.({message:l,toolResults:d,context:e,newMessages:t})){await i({type:`agent_end`,messages:t});return}s=await n.getSteeringMessages?.()||[]}let l=await n.getFollowUpMessages?.()||[];if(l.length>0){s=l;continue}break}await i({type:`agent_end`,messages:t})}async function se(e,t,n,i,a){let o=e.messages;t.transformContext&&(o=await t.transformContext(o,n));let s=await t.convertToLlm(o),c={systemPrompt:e.systemPrompt,messages:s,tools:e.tools},l=a||r,u=(t.getApiKey?await t.getApiKey(t.model.provider):void 0)||t.apiKey,d=await l(t.model,c,{...t,apiKey:u,signal:n}),f=null,p=!1;for await(let t of d)switch(t.type){case`start`:f=t.partial,e.messages.push(f),p=!0,await i({type:`message_start`,message:{...f}});break;case`text_start`:case`text_delta`:case`text_end`:case`thinking_start`:case`thinking_delta`:case`thinking_end`:case`toolcall_start`:case`toolcall_delta`:case`toolcall_end`:f&&(f=t.partial,e.messages[e.messages.length-1]=f,await i({type:`message_update`,assistantMessageEvent:t,message:{...f}}));break;case`done`:case`error`:{let t=await d.result();return p?e.messages[e.messages.length-1]=t:e.messages.push(t),p||await i({type:`message_start`,message:{...t}}),await i({type:`message_end`,message:t}),t}}let m=await d.result();return p?e.messages[e.messages.length-1]=m:(e.messages.push(m),await i({type:`message_start`,message:{...m}})),await i({type:`message_end`,message:m}),m}async function ce(e,t,n,r,i){let a=t.content.filter(e=>e.type===`toolCall`),o=a.some(t=>e.tools?.find(e=>e.name===t.name)?.executionMode===`sequential`);return n.toolExecution===`sequential`||o?le(e,t,a,n,r,i):ue(e,t,a,n,r,i)}async function le(e,t,n,r,i,a){let o=[],s=[];for(let c of n){await a({type:`tool_execution_start`,toolCallId:c.id,toolName:c.name,args:c.arguments});let n=await y(e,t,c,r,i),l;l=n.kind===`immediate`?{toolCall:c,result:n.result,isError:n.isError}:await pe(e,t,n,await fe(n,i,a),r,i),await x(l,a);let u=S(l);await C(u,a),o.push(l),s.push(u)}return{messages:s,terminate:v(o)}}async function ue(e,t,n,r,i,a){let o=[];for(let s of n){await a({type:`tool_execution_start`,toolCallId:s.id,toolName:s.name,args:s.arguments});let n=await y(e,t,s,r,i);if(n.kind===`immediate`){let e={toolCall:s,result:n.result,isError:n.isError};await x(e,a),o.push(e);continue}o.push(async()=>{let o=await pe(e,t,n,await fe(n,i,a),r,i);return await x(o,a),o})}let s=await Promise.all(o.map(e=>typeof e==`function`?e():Promise.resolve(e))),c=[];for(let e of s){let t=S(e);await C(t,a),c.push(t)}return{messages:c,terminate:v(s)}}function v(e){return e.length>0&&e.every(e=>e.result.terminate===!0)}function de(e,t){if(!e.prepareArguments)return t;let n=e.prepareArguments(t.arguments);return n===t.arguments?t:{...t,arguments:n}}async function y(e,t,r,i,a){let o=e.tools?.find(e=>e.name===r.name);if(!o)return{kind:`immediate`,result:b(`Tool ${r.name} not found`),isError:!0};try{let s=n(o,de(o,r));if(i.beforeToolCall){let n=await i.beforeToolCall({assistantMessage:t,toolCall:r,args:s,context:e},a);if(n?.block)return{kind:`immediate`,result:b(n.reason||`Tool execution was blocked`),isError:!0}}return{kind:`prepared`,toolCall:r,tool:o,args:s}}catch(e){return{kind:`immediate`,result:b(e instanceof Error?e.message:String(e)),isError:!0}}}async function fe(e,t,n){let r=[];try{let i=await e.tool.execute(e.toolCall.id,e.args,t,t=>{r.push(Promise.resolve(n({type:`tool_execution_update`,toolCallId:e.toolCall.id,toolName:e.toolCall.name,args:e.toolCall.arguments,partialResult:t})))});return await Promise.all(r),{result:i,isError:!1}}catch(e){return await Promise.all(r),{result:b(e instanceof Error?e.message:String(e)),isError:!0}}}async function pe(e,t,n,r,i,a){let o=r.result,s=r.isError;if(i.afterToolCall)try{let r=await i.afterToolCall({assistantMessage:t,toolCall:n.toolCall,args:n.args,result:o,isError:s,context:e},a);r&&(o={content:r.content??o.content,details:r.details??o.details,terminate:r.terminate??o.terminate},s=r.isError??s)}catch(e){o=b(e instanceof Error?e.message:String(e)),s=!0}return{toolCall:n.toolCall,result:o,isError:s}}function b(e){return{content:[{type:`text`,text:e}],details:{}}}async function x(e,t){await t({type:`tool_execution_end`,toolCallId:e.toolCall.id,toolName:e.toolCall.name,result:e.result,isError:e.isError})}function S(e){return{role:`toolResult`,toolCallId:e.toolCall.id,toolName:e.toolCall.name,content:e.result.content,details:e.result.details,isError:e.isError,timestamp:Date.now()}}async function C(e,t){await t({type:`message_start`,message:e}),await t({type:`message_end`,message:e})}function me(e){return e.filter(e=>e.role===`user`||e.role===`assistant`||e.role===`toolResult`)}const he={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},ge={id:`unknown`,name:`unknown`,api:`unknown`,provider:`unknown`,baseUrl:``,reasoning:!1,input:[],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:0,maxTokens:0};function _e(e){let t=e?.tools?.slice()??[],n=e?.messages?.slice()??[];return{systemPrompt:e?.systemPrompt??``,model:e?.model??ge,thinkingLevel:e?.thinkingLevel??`off`,get tools(){return t},set tools(e){t=e.slice()},get messages(){return n},set messages(e){n=e.slice()},isStreaming:!1,streamingMessage:void 0,pendingToolCalls:new Set,errorMessage:void 0}}var w=class{mode;messages=[];constructor(e){this.mode=e}enqueue(e){this.messages.push(e)}hasItems(){return this.messages.length>0}drain(){if(this.mode===`all`){let e=this.messages.slice();return this.messages=[],e}let e=this.messages[0];return e?(this.messages=this.messages.slice(1),[e]):[]}clear(){this.messages=[]}},ve=class{_state;listeners=new Set;steeringQueue;followUpQueue;convertToLlm;transformContext;streamFn;getApiKey;onPayload;onResponse;beforeToolCall;afterToolCall;activeRun;sessionId;thinkingBudgets;transport;maxRetryDelayMs;toolExecution;constructor(e={}){this._state=_e(e.initialState),this.convertToLlm=e.convertToLlm??me,this.transformContext=e.transformContext,this.streamFn=e.streamFn??r,this.getApiKey=e.getApiKey,this.onPayload=e.onPayload,this.onResponse=e.onResponse,this.beforeToolCall=e.beforeToolCall,this.afterToolCall=e.afterToolCall,this.steeringQueue=new w(e.steeringMode??`one-at-a-time`),this.followUpQueue=new w(e.followUpMode??`one-at-a-time`),this.sessionId=e.sessionId,this.thinkingBudgets=e.thinkingBudgets,this.transport=e.transport??`auto`,this.maxRetryDelayMs=e.maxRetryDelayMs,this.toolExecution=e.toolExecution??`parallel`}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}get state(){return this._state}set steeringMode(e){this.steeringQueue.mode=e}get steeringMode(){return this.steeringQueue.mode}set followUpMode(e){this.followUpQueue.mode=e}get followUpMode(){return this.followUpQueue.mode}steer(e){this.steeringQueue.enqueue(e)}followUp(e){this.followUpQueue.enqueue(e)}clearSteeringQueue(){this.steeringQueue.clear()}clearFollowUpQueue(){this.followUpQueue.clear()}clearAllQueues(){this.clearSteeringQueue(),this.clearFollowUpQueue()}hasQueuedMessages(){return this.steeringQueue.hasItems()||this.followUpQueue.hasItems()}get signal(){return this.activeRun?.abortController.signal}abort(){this.activeRun?.abortController.abort()}waitForIdle(){return this.activeRun?.promise??Promise.resolve()}reset(){this._state.messages=[],this._state.isStreaming=!1,this._state.streamingMessage=void 0,this._state.pendingToolCalls=new Set,this._state.errorMessage=void 0,this.clearFollowUpQueue(),this.clearSteeringQueue()}async prompt(e,t){if(this.activeRun)throw Error(`Agent is already processing a prompt. Use steer() or followUp() to queue messages, or wait for completion.`);let n=this.normalizePromptInput(e,t);await this.runPromptMessages(n)}async continue(){if(this.activeRun)throw Error(`Agent is already processing. Wait for completion before continuing.`);let e=this._state.messages[this._state.messages.length-1];if(!e)throw Error(`No messages to continue from`);if(e.role===`assistant`){let e=this.steeringQueue.drain();if(e.length>0){await this.runPromptMessages(e,{skipInitialSteeringPoll:!0});return}let t=this.followUpQueue.drain();if(t.length>0){await this.runPromptMessages(t);return}throw Error(`Cannot continue from message role: assistant`)}await this.runContinuation()}normalizePromptInput(e,t){if(Array.isArray(e))return e;if(typeof e!=`string`)return[e];let n=[{type:`text`,text:e}];return t&&t.length>0&&n.push(...t),[{role:`user`,content:n,timestamp:Date.now()}]}async runPromptMessages(e,t={}){await this.runWithLifecycle(async n=>{await ae(e,this.createContextSnapshot(),this.createLoopConfig(t),e=>this.processEvents(e),n,this.streamFn)})}async runContinuation(){await this.runWithLifecycle(async e=>{await oe(this.createContextSnapshot(),this.createLoopConfig(),e=>this.processEvents(e),e,this.streamFn)})}createContextSnapshot(){return{systemPrompt:this._state.systemPrompt,messages:this._state.messages.slice(),tools:this._state.tools.slice()}}createLoopConfig(e={}){let t=e.skipInitialSteeringPoll===!0;return{model:this._state.model,reasoning:this._state.thinkingLevel===`off`?void 0:this._state.thinkingLevel,sessionId:this.sessionId,onPayload:this.onPayload,onResponse:this.onResponse,transport:this.transport,thinkingBudgets:this.thinkingBudgets,maxRetryDelayMs:this.maxRetryDelayMs,toolExecution:this.toolExecution,beforeToolCall:this.beforeToolCall,afterToolCall:this.afterToolCall,convertToLlm:this.convertToLlm,transformContext:this.transformContext,getApiKey:this.getApiKey,getSteeringMessages:async()=>t?(t=!1,[]):this.steeringQueue.drain(),getFollowUpMessages:async()=>this.followUpQueue.drain()}}async runWithLifecycle(e){if(this.activeRun)throw Error(`Agent is already processing.`);let t=new AbortController,n=()=>{},r=new Promise(e=>{n=e});this.activeRun={promise:r,resolve:n,abortController:t},this._state.isStreaming=!0,this._state.streamingMessage=void 0,this._state.errorMessage=void 0;try{await e(t.signal)}catch(e){await this.handleRunFailure(e,t.signal.aborted)}finally{this.finishRun()}}async handleRunFailure(e,t){let n={role:`assistant`,content:[{type:`text`,text:``}],api:this._state.model.api,provider:this._state.model.provider,model:this._state.model.id,usage:he,stopReason:t?`aborted`:`error`,errorMessage:e instanceof Error?e.message:String(e),timestamp:Date.now()};this._state.messages.push(n),this._state.errorMessage=n.errorMessage,await this.processEvents({type:`agent_end`,messages:[n]})}finishRun(){this._state.isStreaming=!1,this._state.streamingMessage=void 0,this._state.pendingToolCalls=new Set,this.activeRun?.resolve(),this.activeRun=void 0}async processEvents(e){switch(e.type){case`message_start`:this._state.streamingMessage=e.message;break;case`message_update`:this._state.streamingMessage=e.message;break;case`message_end`:this._state.streamingMessage=void 0,this._state.messages.push(e.message);break;case`tool_execution_start`:{let t=new Set(this._state.pendingToolCalls);t.add(e.toolCallId),this._state.pendingToolCalls=t;break}case`tool_execution_end`:{let t=new Set(this._state.pendingToolCalls);t.delete(e.toolCallId),this._state.pendingToolCalls=t;break}case`turn_end`:e.message.role===`assistant`&&e.message.errorMessage&&(this._state.errorMessage=e.message.errorMessage);break;case`agent_end`:this._state.streamingMessage=void 0;break}let t=this.activeRun?.abortController.signal;if(!t)throw Error(`Agent listener invoked outside active run`);for(let n of this.listeners)await n(e,t)}};const T=`sessions`;function ye(){return new Promise((e,t)=>{let n=indexedDB.open(`agent-sessions`,1);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(T)||e.createObjectStore(T,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}var be=class{dbPromise=null;getDB(){return this.dbPromise||=ye(),this.dbPromise}async save(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(T,`readwrite`).objectStore(T).put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async load(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(T,`readonly`).objectStore(T).get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async delete(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(T,`readwrite`).objectStore(T).delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async list(){let e=await this.getDB();return new Promise((t,n)=>{let r=e.transaction(T,`readonly`).objectStore(T).getAll();r.onsuccess=()=>{t((r.result??[]).map(e=>({id:e.id,updatedAt:e.updatedAt})))},r.onerror=()=>n(r.error)})}async clearAll(){let e=await this.getDB();return new Promise((t,n)=>{let r=e.transaction(T,`readwrite`).objectStore(T).clear();r.onsuccess=()=>t(),r.onerror=()=>n(r.error)})}static newId(){return`session-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}static createSession(e,t){let n=Date.now();return{id:e,messages:[],config:t,createdAt:n,updatedAt:n}}static updateMessages(e,t){return{...e,messages:t,updatedAt:Date.now()}}};const E=t(`image-processor`),D=3932160,xe=new Set([`image/jpeg`,`image/png`,`image/gif`,`image/webp`]);function Se(e){return xe.has(e)}function Ce(e,t){try{if(t===`image/png`){if(e.length<32)return null;let t=atob(e.slice(0,32)),n=t.charCodeAt(16)<<24|t.charCodeAt(17)<<16|t.charCodeAt(18)<<8|t.charCodeAt(19),r=t.charCodeAt(20)<<24|t.charCodeAt(21)<<16|t.charCodeAt(22)<<8|t.charCodeAt(23);return n>0&&r>0?{width:n,height:r}:null}if(t===`image/gif`){if(e.length<16)return null;let t=atob(e.slice(0,16)),n=t.charCodeAt(6)|t.charCodeAt(7)<<8,r=t.charCodeAt(8)|t.charCodeAt(9)<<8;return n>0&&r>0?{width:n,height:r}:null}if(t===`image/jpeg`){let t=Math.min(21846*4,e.length),n=atob(e.slice(0,t));for(let e=0;e<n.length-8;e++)if(n.charCodeAt(e)===255){let t=n.charCodeAt(e+1);if(t===192||t===194){let t=n.charCodeAt(e+5)<<8|n.charCodeAt(e+6),r=n.charCodeAt(e+7)<<8|n.charCodeAt(e+8);return r>0&&t>0?{width:r,height:t}:null}}}}catch{}return null}async function we(e){if(!Se(e.mimeType))return E.warn(`Unsupported image format`,{mimeType:e.mimeType}),{type:`text`,text:`[Image removed: unsupported format "${e.mimeType}". Supported: JPEG, PNG, GIF, WebP]`};let t=e.data.length,n=Ce(e.data,e.mimeType);if(!(t>5242880||n!==null&&(n.width>8e3||n.height>8e3)||n!==null&&Math.max(n.width,n.height)>1568))return e;E.info(`Image needs processing`,{base64Size:t,dimensions:n?`${n.width}x${n.height}`:`unknown`,reason:t>5242880?`size`:`dimensions`});let r,i;try{let e=await import(`./magick-wasm-DwA3cs4T.js`).then(e=>e.n);r=e.getMagick,i=e.MIME_TO_MAGICK_FORMAT}catch(e){return E.error(`ImageMagick WASM module unavailable`,{error:e instanceof Error?e.message:String(e)}),{type:`text`,text:`[Image removed: resize service unavailable (ImageMagick WASM could not be loaded)]`}}let a;try{a=await r()}catch(e){return E.error(`ImageMagick WASM initialization failed`,{error:e instanceof Error?e.message:String(e)}),{type:`text`,text:`[Image removed: resize service unavailable (WASM init failed)]`}}try{let n=atob(e.data),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);let o={data:null,mime:e.mimeType};if(await a.ImageMagick.read(r,async t=>{let n=t.width,r=t.height,a=Math.max(n,r);if(a>1568){let e=1568/a,i=Math.round(n*e),o=Math.round(r*e);t.resize(i,o),E.info(`Resized image`,{from:`${n}x${r}`,to:`${i}x${o}`})}let s=i[e.mimeType]||`JPEG`;t.write(s,e=>{o.data=new Uint8Array(e)}),o.data&&o.data.length>D&&s!==`JPEG`?(E.info(`Still over 5MB, compressing to JPEG q80`),t.quality=80,t.write(`JPEG`,e=>{o.data=new Uint8Array(e)}),o.mime=`image/jpeg`):o.data&&o.data.length>D&&(E.info(`Still over 5MB as JPEG, reducing quality to 60`),t.quality=60,t.write(`JPEG`,e=>{o.data=new Uint8Array(e)}))}),!o.data)return E.warn(`ImageMagick produced no output`),{type:`text`,text:`[Image removed: could not be processed (empty output from resize)]`};if(o.data.length>D)return E.warn(`Image still over 5MB after resize+compress`,{size:o.data.length}),{type:`text`,text:`[Image removed: still ${Math.round(o.data.length/1024/1024*10)/10}MB after resize and compression, exceeds 5MB API limit]`};let s=``;for(let e=0;e<o.data.length;e++)s+=String.fromCharCode(o.data[e]);let c=btoa(s);return E.info(`Image processed successfully`,{originalBase64:t,newBase64:c.length,mimeType:o.mime}),{type:`image`,data:c,mimeType:o.mime}}catch(n){return E.error(`Image data processing failed (corrupt or unreadable)`,{mimeType:e.mimeType,estimatedBytes:t,error:n instanceof Error?n.message:String(n)}),{type:`text`,text:`[Image removed: image data could not be processed (${n instanceof Error?n.message:`corrupt or unreadable`})]`}}}const Te=t(`tool-adapter`),Ee=/<img:(data:(image\/[^;]+);base64,([^>]+))>/g;function O(e){let t=[],n=0;for(let r of e.matchAll(Ee)){let i=e.slice(n,r.index);i.trim()&&t.push({type:`text`,text:i.trimEnd()}),t.push({type:`image`,mimeType:r[2],data:r[3]}),n=r.index+r[0].length}let r=e.slice(n);return(r.trim()||t.length===0)&&t.push({type:`text`,text:r||e}),t}async function De(e){let t=O(e),n=[];for(let e of t)e.type===`image`?n.push(await we(e)):n.push(e);return n}function Oe(e,t){return{name:e.name,label:e.name,description:e.description,parameters:e.inputSchema,async execute(n,r,i,a){let o;a&&(o=m({onUpdate:a,toolName:e.name,toolCallId:n}));let s=t?t.processManager.spawn({kind:`tool`,argv:[e.name,...Ae(r)],owner:t.owner,ppid:t.getParentPid?.()}):null,c=null;s&&t&&i&&(i.aborted?t.processManager.signal(s.pid,`SIGINT`):i.addEventListener(`abort`,()=>t.processManager.signal(s.pid,`SIGINT`),{once:!0})),s&&t&&(c=t.processManager.onSignal((e,n)=>{e.pid!==s.pid||n!==`SIGKILL`||t.processManager.exit(s.pid,null)}));let l=s?s.abort.signal:i;try{let n=await e.execute(r??{},l),i;try{i=await De(n.content)}catch(t){Te.warn(`Image processing failed, falling back to raw content`,{tool:e.name,error:t instanceof Error?t.message:String(t)}),i=O(n.content)}return s&&t&&t.processManager.exit(s.pid,+!!n.isError),{content:i,details:{isError:n.isError}}}catch(e){throw s&&t&&t.processManager.exit(s.pid,s.abort.signal.aborted?null:1),e}finally{o&&h(o),c?.()}}}}function ke(e,t){return e.map(e=>Oe(e,t))}function Ae(e){if(typeof e!=`object`||!e)return[];let t=e;for(let e of[`command`,`file_path`,`path`,`pattern`,`url`,`key`,`name`,`query`,`message`]){let n=t[e];if(typeof n==`string`&&n.length>0)return[n]}for(let e of Object.values(t))if(typeof e==`string`&&e.length>0)return[e];return[]}function je(e){let t=`Ran \`${e.command}\`\n`;return e.output?t+=`\`\`\`\n${e.output}\n\`\`\``:t+=`(no output)`,e.cancelled?t+=`
2
-
3
- (command cancelled)`:e.exitCode!==null&&e.exitCode!==void 0&&e.exitCode!==0&&(t+=`\n\nCommand exited with code ${e.exitCode}`),e.truncated&&e.fullOutputPath&&(t+=`\n\n[Output truncated. Full output: ${e.fullOutputPath}]`),t}function Me(e){return e.map(e=>{switch(e.role){case`bashExecution`:return e.excludeFromContext?void 0:{role:`user`,content:[{type:`text`,text:je(e)}],timestamp:e.timestamp};case`custom`:return{role:`user`,content:typeof e.content==`string`?[{type:`text`,text:e.content}]:e.content,timestamp:e.timestamp};case`branchSummary`:return{role:`user`,content:[{type:`text`,text:`The following is a summary of a branch that this conversation came back from:
4
-
5
- <summary>
6
- `+e.summary+`</summary>`}],timestamp:e.timestamp};case`compactionSummary`:return{role:`user`,content:[{type:`text`,text:`The conversation history before this point was compacted into the following summary:
7
-
8
- <summary>
9
- `+e.summary+`
10
- </summary>`}],timestamp:e.timestamp};case`user`:case`assistant`:case`toolResult`:return e;default:return}}).filter(e=>e!==void 0)}function Ne(e,t){if(e.length<=t)return e;let n=e.length-t;return`${e.slice(0,t)}\n\n[... ${n} more characters truncated]`}function Pe(e){let t=[];for(let n of e)if(n.role===`user`){let e=typeof n.content==`string`?n.content:n.content.filter(e=>e.type===`text`).map(e=>e.text).join(``);e&&t.push(`[User]: ${e}`)}else if(n.role===`assistant`){let e=[],r=[],i=[];for(let t of n.content)if(t.type===`text`)e.push(t.text);else if(t.type===`thinking`)r.push(t.thinking);else if(t.type===`toolCall`){let e=t.arguments,n=Object.entries(e).map(([e,t])=>`${e}=${JSON.stringify(t)}`).join(`, `);i.push(`${t.name}(${n})`)}r.length>0&&t.push(`[Assistant thinking]: ${r.join(`
11
- `)}`),e.length>0&&t.push(`[Assistant]: ${e.join(`
12
- `)}`),i.length>0&&t.push(`[Assistant tool calls]: ${i.join(`; `)}`)}else if(n.role===`toolResult`){let e=n.content.filter(e=>e.type===`text`).map(e=>e.text).join(``);e&&t.push(`[Tool result]: ${Ne(e,2e3)}`)}return t.join(`
13
-
14
- `)}const k={enabled:!0,reserveTokens:16384,keepRecentTokens:2e4};function Fe(e,t,n){return n.enabled?e>t-n.reserveTokens:!1}function A(e){let t=0;switch(e.role){case`user`:{let n=e.content;if(typeof n==`string`)t=n.length;else if(Array.isArray(n))for(let e of n)e.type===`text`&&e.text&&(t+=e.text.length);return Math.ceil(t/4)}case`assistant`:{let n=e;for(let e of n.content)e.type===`text`?t+=e.text.length:e.type===`thinking`?t+=e.thinking.length:e.type===`toolCall`&&(t+=e.name.length+JSON.stringify(e.arguments).length);return Math.ceil(t/4)}case`custom`:case`toolResult`:if(typeof e.content==`string`)t=e.content.length;else for(let n of e.content)n.type===`text`&&n.text&&(t+=n.text.length),n.type===`image`&&(t+=4800);return Math.ceil(t/4);case`bashExecution`:return t=e.command.length+e.output.length,Math.ceil(t/4);case`branchSummary`:case`compactionSummary`:return t=e.summary.length,Math.ceil(t/4)}return 0}async function Ie(e,t,n,r,i,a,s,c,l){let u=Math.floor(.8*n),d=c?`The messages above are NEW conversation messages to incorporate into the existing summary provided in <previous-summary> tags.
15
-
16
- Update the existing structured summary with new information. RULES:
17
- - PRESERVE all existing information from the previous summary
18
- - ADD new progress, decisions, and context from the new messages
19
- - UPDATE the Progress section: move items from "In Progress" to "Done" when completed
20
- - UPDATE "Next Steps" based on what was accomplished
21
- - PRESERVE exact file paths, function names, and error messages
22
- - If something is no longer relevant, you may remove it
23
-
24
- Use this EXACT format:
25
-
26
- ## Goal
27
- [Preserve existing goals, add new ones if the task expanded]
28
-
29
- ## Constraints & Preferences
30
- - [Preserve existing, add new ones discovered]
31
-
32
- ## Progress
33
- ### Done
34
- - [x] [Include previously done items AND newly completed items]
35
-
36
- ### In Progress
37
- - [ ] [Current work - update based on progress]
38
-
39
- ### Blocked
40
- - [Current blockers - remove if resolved]
41
-
42
- ## Key Decisions
43
- - **[Decision]**: [Brief rationale] (preserve all previous, add new)
44
-
45
- ## Next Steps
46
- 1. [Update based on current state]
47
-
48
- ## Critical Context
49
- - [Preserve important context, add new if needed]
50
-
51
- Keep each section concise. Preserve exact file paths, function names, and error messages.`:`The messages above are a conversation to summarize. Create a structured context checkpoint summary that another LLM will use to continue the work.
52
-
53
- Use this EXACT format:
54
-
55
- ## Goal
56
- [What is the user trying to accomplish? Can be multiple items if the session covers different tasks.]
57
-
58
- ## Constraints & Preferences
59
- - [Any constraints, preferences, or requirements mentioned by user]
60
- - [Or "(none)" if none were mentioned]
61
-
62
- ## Progress
63
- ### Done
64
- - [x] [Completed tasks/changes]
65
-
66
- ### In Progress
67
- - [ ] [Current work]
68
-
69
- ### Blocked
70
- - [Issues preventing progress, if any]
71
-
72
- ## Key Decisions
73
- - **[Decision]**: [Brief rationale]
74
-
75
- ## Next Steps
76
- 1. [Ordered list of what should happen next]
77
-
78
- ## Critical Context
79
- - [Any data, examples, or references needed to continue]
80
- - [Or "(none)" if not applicable]
81
-
82
- Keep each section concise. Preserve exact file paths, function names, and error messages.`;s&&(d=`${d}\n\nAdditional focus: ${s}`);let f=`<conversation>\n${Pe(Me(e))}\n</conversation>\n\n`;c&&(f+=`<previous-summary>\n${c}\n</previous-summary>\n\n`),f+=d;let p=[{role:`user`,content:[{type:`text`,text:f}],timestamp:Date.now()}],m=t.reasoning&&l&&l!==`off`?{maxTokens:u,signal:a,apiKey:r,headers:i,reasoning:l}:{maxTokens:u,signal:a,apiKey:r,headers:i},h=await o(t,{systemPrompt:`You are a context summarization assistant. Your task is to read a conversation between a user and an AI coding assistant, then produce a structured summary following the exact format specified.
83
-
84
- Do NOT continue the conversation. Do NOT respond to any questions in the conversation. ONLY output the structured summary.`,messages:p},m);if(h.stopReason===`error`)throw Error(`Summarization failed: ${h.errorMessage||`Unknown error`}`);return h.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
85
- `)}const j=t(`context-compaction`);function M(e,t){return e.role===t}function N(e){let t=0;for(;t<e.length&&M(e[t],`toolResult`);){let n=e[t];j.warn(`Dropping orphaned toolResult (no preceding assistant message)`,{toolCallId:n.toolCallId}),t++}return t>0?e.slice(t):e}function Le(e){let t=e.contextWindow??2e5,n=e.reserveTokens??k.reserveTokens,r=e.keepRecentTokens??k.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+=A(e);if(!Fe(s,t,i))return a;j.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=A(a[e]);if(c+t>r&&l<a.length)break;c+=t,l=e}for(;l>0&&M(a[l],`toolResult`);)l--;if(l<=0||l>=a.length)return j.warn(`Cannot find valid cut point for compaction`),a;let u=a.slice(0,l),d=N(a.slice(l));j.info(`Compaction cut point`,{summarizing:u.length,keeping:d.length});let f=e.getApiKey();if(f)try{let t=await Ie(u,e.model,n,f,e.headers,o),r={role:`user`,content:[{type:`text`,text:`<context-summary>\n${t}\n</context-summary>`}],timestamp:Date.now()};return j.info(`LLM summarization successful`,{originalMessages:a.length,compactedMessages:1+d.length,summaryLength:t.length}),[r,...d]}catch(e){j.warn(`LLM summarization failed, falling back to naive drop`,{error:e instanceof Error?e.message:String(e)})}else j.warn(`No API key available for LLM summarization, falling back to naive drop`);let p={role:`user`,content:[{type:`text`,text:`[Earlier conversation messages were compacted to save context space]`}],timestamp:Date.now()};return j.info(`Naive compaction applied`,{originalMessages:a.length,compactedMessages:1+d.length}),[p,...d]}}function Re(e){if(!Number.isFinite(e)||e<=0)return`0 B`;let t=[`B`,`KB`,`MB`,`GB`],n=e,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r++;return`${n>=10||r===0?Math.round(n):Math.round(n*10)/10} ${t[r]}`}function ze(e){let t=e.mimeType||`application/octet-stream`;return`${e.name} (${t}, ${Re(e.size)})`}function Be(e){let t=ze(e);return e.kind===`image`&&e.data?`[Attached image: ${t}]`:e.kind===`text`&&e.text!==void 0?[`----- BEGIN ATTACHMENT ${t} -----`,e.text,`----- END ATTACHMENT ${e.name} -----`].join(`
86
- `):e.path?`[Attached ${e.kind===`image`?`image`:e.kind===`text`?`text file`:`file`} saved to ${e.path} — ${t}. Read it from the virtual filesystem when you need its contents.]`:e.error?`[Attachment not included: ${t}. ${e.error}]`:`[Attachment not included: ${t}. Unsupported binary attachment.]`}function Ve(e,t){if(!t?.length)return e;let n=t.map(Be),r=e.trim();return r?`${r}\n\n${n.join(`
87
-
88
- `)}`:n.join(`
89
-
90
- `)}function He(e){return e?.length?e.filter(e=>e.kind===`image`&&e.data).map(e=>({type:`image`,data:e.data,mimeType:e.mimeType})):[]}function Ue(e){}[...[`ghp_`,`gho_`,`ghu_`,`ghs_`,`ghr_`,`github_pat_`,`sk-`,`pk-`,`xoxb-`,`xoxp-`,`xoxa-`,`xoxs-`,`AKIA`,`ABIA`,`ACCA`,`ASIA`,`sk-ant-`,`Bearer `]].sort((e,t)=>t.length-e.length);function We(e,t){let n=e.toLowerCase(),r=t.toLowerCase();if(n===`*`)return!0;if(!n.startsWith(`*.`))return n===r;let i=n.slice(1);return r.length>i.length&&r.endsWith(i)}function Ge(e,t){return e.some(e=>We(e,t))}const P=`slicc_oauth_extra_domains`;function F(e){try{let t=e.getItem(P);if(!t)return{};let n=JSON.parse(t);if(typeof n!=`object`||!n||Array.isArray(n))return{};let r={};for(let[e,t]of Object.entries(n)){if(typeof e!=`string`||!Array.isArray(t))continue;let n=t.filter(e=>typeof e==`string`&&e.length>0);n.length>0&&(r[e]=n)}return r}catch{return{}}}function Ke(e,t){try{e.setItem(P,JSON.stringify(t))}catch(e){throw Error(`Failed to persist OAuth extras (localStorage quota exceeded?): ${e instanceof Error?e.message:String(e)}`)}}var qe=e({addAccount:()=>tt,getAccounts:()=>J,getAllAvailableModels:()=>q,getAllExtraOAuthDomains:()=>et,getApiKey:()=>lt,getApiKeyForProvider:()=>it,getApiVersionForProvider:()=>ot,getAvailableProviders:()=>Xe,getBaseUrlForProvider:()=>Z,getDeploymentForProvider:()=>at,getExtraOAuthDomains:()=>Y,getOAuthAccountInfo:()=>W,getProviderConfig:()=>V,getProviderModels:()=>U,getRawApiKeyForProvider:()=>rt,getSelectedModelId:()=>st,getSelectedProvider:()=>Q,isModelHiddenFromPicker:()=>K,resolveCurrentModel:()=>$,resolveModelById:()=>ut,saveOAuthAccount:()=>nt,setExtraOAuthDomains:()=>$e});const I=l,L=u,R=`slicc_accounts`,z=`selected-model`,Je=[`slicc_provider`,`slicc_api_key`,`slicc_base_url`,`anthropic_api_key`,`api_provider`,`azure_resource`,`bedrock_region`];let B=!1;function Ye(){if(!B){B=!0;for(let e of Je)try{localStorage.removeItem(e)}catch{}}}function Xe(){let e=c().filter(d),t=f();return[...new Set([...e,...t])]}function V(e){return p(e)||{id:e,name:e.split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),description:`${e} provider`,requiresApiKey:!0,requiresBaseUrl:!1}}function H(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),t.compat!==void 0&&(e.compat={...e.compat??{},...t.compat})}function U(e){try{if(e===`bedrock-camp`){let e=s(Z(`bedrock-camp`)),t=L(`amazon-bedrock`).filter(t=>i(t,e)),n=new Set(t.map(e=>e.id)),r=a().filter(t=>i(t,e)&&!n.has(t.id));return[...t,...r].map(e=>({...e,api:`bedrock-camp-converse`,provider:`bedrock-camp`}))}let t=V(e);if(t.getModelIds){let n;try{n=t.getModelIds()}catch(t){return G.error(`Provider getModelIds callback failed`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}let r=new Map;for(let e of c())try{for(let t of L(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&&H(o,s),H(o,n),o})}if(t.isOAuth){let n=L(`anthropic`),r=`${e}-anthropic`;return n.map(n=>{let i={...n,api:r,provider:e},a=t.modelOverrides?.[n.id];return a&&H(i,a),i})}return L(e===`azure-ai-foundry`?`anthropic`:e)}catch(t){return G.error(`Failed to load models`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}}function W(e){let t=J().find(t=>t.providerId===e);if(!t?.accessToken)return null;let n=!!t.tokenExpiresAt&&Date.now()>t.tokenExpiresAt-6e4;return{token:t.accessToken,maskedValue:t.maskedValue,expiresAt:t.tokenExpiresAt,userName:t.userName,userAvatar:t.userAvatar,expired:n}}Object.assign({})[`/packages/webapp/providers.json`];const G=t(`provider-settings`),Ze=[/haiku/i];function K(e){return Ze.some(t=>t.test(e))}function Qe(e){return e.filter(e=>!K(e.id))}function q(){let e=J();if(e.length===0)return[];let t=new Map;for(let n of e){if(t.has(n.providerId))continue;let e=Qe(U(n.providerId));if(e.length===0)continue;let r=V(n.providerId),i={providerId:n.providerId,providerName:r.name,models:e};t.set(n.providerId,i)}return[...t.values()]}function J(){Ye();let e=localStorage.getItem(R);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 Y(e){return F(localStorage)[e]??[]}function $e(e,t){let n=F(localStorage),r=t.map(e=>e.trim()).filter(e=>e.length>0);r.length===0?delete n[e]:n[e]=r,Ke(localStorage,n)}function et(){return F(localStorage)}function X(e){localStorage.setItem(R,JSON.stringify(e))}function tt(e,t,n,r,i){let a=J().filter(t=>t.providerId!==e),o={providerId:e,apiKey:t};n&&(o.baseUrl=n),r&&(o.deployment=r),i&&(o.apiVersion=i),a.push(o),X(a)}async function nt(e){let t=J().find(t=>t.providerId===e.providerId),n=J().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}),X(n);let r=V(e.providerId)?.oauthTokenDomains??[],i=Y(e.providerId),a=new Set,o=[];for(let e of[...r,...i]){let t=e.toLowerCase();a.has(t)||(a.add(t),o.push(e))}if(o.length===0)return;let s=typeof chrome<`u`&&!!chrome?.runtime?.id;try{if(s){await chrome.storage.local.set({[`oauth.${e.providerId}.token`]:e.accessToken,[`oauth.${e.providerId}.token_DOMAINS`]:o.join(`,`)});let t=await new Promise(t=>{chrome.runtime.sendMessage({type:`secrets.mask-oauth-token`,providerId:e.providerId},n=>{chrome.runtime.lastError&&G.error(`SW mask-oauth-token transport failed`,{providerId:e.providerId,error:chrome.runtime.lastError.message}),t(n??{})})});if(t.error&&G.warn(`SW mask-oauth-token returned error`,{providerId:e.providerId,error:t.error}),t.maskedValue){let n=J(),r=n.find(t=>t.providerId===e.providerId);r&&(r.maskedValue=t.maskedValue,X(n))}}else{let t=await fetch(`/api/secrets/oauth-update`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({providerId:e.providerId,accessToken:e.accessToken,domains:o})});if(t.ok){let n=await t.json(),r=J(),i=r.find(t=>t.providerId===e.providerId);i&&typeof n.maskedValue==`string`&&(i.maskedValue=n.maskedValue,X(r))}else G.warn(`OAuth replica POST non-ok`,{providerId:e.providerId,status:t.status})}}catch(t){G.error(`OAuth replica sync failed`,{providerId:e.providerId,isExtension:s,error:t instanceof Error?t.message:String(t)})}}function rt(e){let t=J().find(t=>t.providerId===e);return t&&(t.accessToken||t.apiKey)||null}function it(e){let t=J().find(t=>t.providerId===e);return t?t.accessToken||t.apiKey||(V(e).optionalApiKey?`local`:null):null}function Z(e){return J().find(t=>t.providerId===e)?.baseUrl??null}function at(e){return J().find(t=>t.providerId===e)?.deployment??null}function ot(e){return J().find(t=>t.providerId===e)?.apiVersion??null}function st(){let e=localStorage.getItem(z)||``,t=e.indexOf(`:`);return t>=0?e.slice(t+1):e}function ct(){return localStorage.getItem(z)||``}function Q(){let e=ct(),t=e.indexOf(`:`);if(t>0)return e.slice(0,t);let n=J();return n.length>0?n[0].providerId:`anthropic`}function lt(){return it(Q())}function ut(e){if(!e)return $();let t=Q(),n=Z(t);try{let r=V(t),i=I(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;return r.isOAuth?a=U(t).find(t=>t.id===e)||{...a,api:`${t}-anthropic`,provider:t}:t===`bedrock-camp`&&(a={...a,api:`bedrock-camp-converse`,provider:`bedrock-camp`}),n&&(a={...a,baseUrl:n}),a}catch{return $()}}function $(){let e=Q(),t=st(),n=Z(e),r=U(e),i=V(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=V(e),i=t.isOAuth||e===`azure-ai-foundry`?`anthropic`:e===`bedrock-camp`?`amazon-bedrock`:e,a=I(i,o);if(!a?.id)throw Error(`Model ${o} not found in ${i} registry`);let s=a;return t.isOAuth?s=r.find(e=>e.id===o)||{...s,api:`${e}-anthropic`,provider:e}:e===`bedrock-camp`&&(s={...s,api:`bedrock-camp-converse`,provider:`bedrock-camp`}),n&&(s={...s,baseUrl:n}),s}catch{let e=r.find(e=>e.id===o);return e?n?{...e,baseUrl:n}:e:I(`anthropic`,`claude-sonnet-4-0`)}}export{ie as C,re as S,ee as T,Le as _,Z as a,be as b,Q as c,ut as d,nt as f,He as g,Ve as h,ot as i,qe as l,Ue as m,q as n,at as o,Ge as p,lt as r,W as s,J as t,$ as u,N as v,te as w,ve as x,ke as y};
@@ -1 +0,0 @@
1
- import{p as e,x as t}from"./db-Cdoacmjm.js";const n=`slicc:last-seen-version`;function r(){return{version:`2.46.0`,releasedAt:`2026-05-13T20:38:16Z`}}async function i(){let t=await e(n);return t&&t.length>0?t:null}async function a(e){await t(n,e)}async function o(){let e=r(),t=await i();return t===null?(await a(e.version),{bundled:e,lastSeen:null,isUpgrade:!1}):t===e.version?{bundled:e,lastSeen:t,isUpgrade:!1}:{bundled:e,lastSeen:t,isUpgrade:!0}}async function s(e){await a(e)}export{o as detectUpgrade,s as recordVersionSeen};