sliccy 2.51.0 → 2.51.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.
Files changed (64) hide show
  1. package/README.md +1 -1
  2. package/dist/ui/assets/adobe-BWQHpddw.js +1 -0
  3. package/dist/ui/assets/adobe-uLe8m5m4.js +2 -0
  4. package/dist/ui/assets/{agent-bridge-_b9qhuB1.js → agent-bridge-iNcXEu-Q.js} +1 -1
  5. package/dist/ui/assets/{agent-message-to-chat-D-i_wNCl.js → agent-message-to-chat-BDwJCjQ7.js} +1 -1
  6. package/dist/ui/assets/{azure-openai-B5yRnUrI.js → azure-openai-CORKw8jR.js} +1 -1
  7. package/dist/ui/assets/{azure-openai-CzgLPXOv.js → azure-openai-DlV1bEvU.js} +1 -1
  8. package/dist/ui/assets/{backend-local-P05Hg6Af.js → backend-local-BTd37iLF.js} +1 -1
  9. package/dist/ui/assets/{backend-local-mju0Ps5U.js → backend-local-D-jeTNnr.js} +1 -1
  10. package/dist/ui/assets/{bedrock-camp-9aDiXDk5.js → bedrock-camp-CWcpoTdM.js} +1 -1
  11. package/dist/ui/assets/{cdp-BZMz81BW.js → cdp-DEdJWT3H.js} +3 -3
  12. package/dist/ui/assets/cost-command-CD1kOMrM.js +1 -0
  13. package/dist/ui/assets/dist-Dioyrn6j.js +15 -0
  14. package/dist/ui/assets/{es-QJESnatf.js → es-BQdsraJb.js} +19 -2
  15. package/dist/ui/assets/{fs-kweAFR1R.js → fs-CVkrcCne.js} +3 -3
  16. package/dist/ui/assets/{fs-DjrRkR74.js → fs-ElRj9pi0.js} +2 -2
  17. package/dist/ui/assets/{github-B4XCkOr2.js → github-C2wW97g4.js} +2 -2
  18. package/dist/ui/assets/{github-14EoK2_l.js → github-DPFKZfnM.js} +1 -1
  19. package/dist/ui/assets/{google-CYM-5k2z.js → google-NhMHz8rQ.js} +1 -1
  20. package/dist/ui/assets/{google-shared-XoadLsBb.js → google-shared-CiHltZCP.js} +107 -12
  21. package/dist/ui/assets/{google-vertex-ByJZJUMR.js → google-vertex-C4h2ubmt.js} +1 -1
  22. package/dist/ui/assets/{index-D7t2PagM.js → index-C2W9-qsq.js} +110 -110
  23. package/dist/ui/assets/js-realm-worker-B3OvP1qG.js +1 -0
  24. package/dist/ui/assets/{kernel-worker-CC8wmKpJ.js → kernel-worker-ClzuHK8I.js} +194 -183
  25. package/dist/ui/assets/{local-llm-CPnz6WHK.js → local-llm-BFZ6apck.js} +1 -1
  26. package/dist/ui/assets/{local-llm-DCGyZkq_.js → local-llm-BnSkiFH7.js} +1 -1
  27. package/dist/ui/assets/{magick-wasm-DzXB38t6.js → magick-wasm-CzCzNDuk.js} +1 -1
  28. package/dist/ui/assets/{mount-CE7OcF7K.js → mount-B7LvUSs3.js} +2 -2
  29. package/dist/ui/assets/{mount-BhJJFqWQ.js → mount-DDtH922U.js} +1 -1
  30. package/dist/ui/assets/{nuke-command-Bu7nEXeF.js → nuke-command-DjQe5uR1.js} +1 -1
  31. package/dist/ui/assets/{oauth-bootstrap-CdfgJU5a.js → oauth-bootstrap-BdrqlsNz.js} +1 -1
  32. package/dist/ui/assets/{oauth-service-BXvVyyjr.js → oauth-service-Cnapr4F5.js} +1 -1
  33. package/dist/ui/assets/oauth-service-fWu6u3zh.js +1 -0
  34. package/dist/ui/assets/{offscreen-client-BSyVp60C.js → offscreen-client-C1bJuNEW.js} +1 -1
  35. package/dist/ui/assets/{onboarding-orchestrator-CQZGJqFi.js → onboarding-orchestrator-3zK6FiO4.js} +1 -1
  36. package/dist/ui/assets/panel-rpc-handlers-D6u8EbY-.js +1 -0
  37. package/dist/ui/assets/provider-settings-DN-LkAuR.js +28 -0
  38. package/dist/ui/assets/{provider-settings-DmKfnK2J.js → provider-settings-O8KVlYRG.js} +1 -1
  39. package/dist/ui/assets/{providers-DCsD1Clf.js → providers-CKcYW6JW.js} +1 -1
  40. package/dist/ui/assets/{py-realm-worker-Cg-6whKO.js → py-realm-worker-vbqFsiux.js} +1 -1
  41. package/dist/ui/assets/{remote-terminal-view-D5jfCEWy.js → remote-terminal-view-DKpFrNt5.js} +1 -1
  42. package/dist/ui/assets/{slicc-editor-DlLebxYv.js → slicc-editor-DfIx330Y.js} +1 -1
  43. package/dist/ui/assets/{spawn-36wn1Uji.js → spawn-ByxxtAAg.js} +1 -1
  44. package/dist/ui/assets/{telemetry-B7l3TtVP.js → telemetry-BHB_tqYb.js} +1 -1
  45. package/dist/ui/assets/{upgrade-detection-B6RbdxjA.js → upgrade-detection-tv9Mvr7D.js} +1 -1
  46. package/dist/ui/index.html +6 -6
  47. package/dist/ui/packages/webapp/index.html +6 -6
  48. package/package.json +4 -4
  49. package/dist/ui/assets/adobe-Buh8t3t7.js +0 -2
  50. package/dist/ui/assets/adobe-wEPP-tgD.js +0 -1
  51. package/dist/ui/assets/cost-command-Dou1mxVo.js +0 -1
  52. package/dist/ui/assets/dist-Nvn9jT7s.js +0 -9
  53. package/dist/ui/assets/js-realm-worker-Dh5NKB0f.js +0 -1
  54. package/dist/ui/assets/oauth-service-B7as8KRE.js +0 -1
  55. package/dist/ui/assets/panel-rpc-f0zFUOaZ.js +0 -1
  56. package/dist/ui/assets/panel-rpc-handlers-DlxXxaUM.js +0 -1
  57. package/dist/ui/assets/provider-settings-Db2SXpTa.js +0 -28
  58. /package/dist/ui/assets/{azure-ai-foundry-C3Uy67aF.js → azure-ai-foundry-rmhg6ipI.js} +0 -0
  59. /package/dist/ui/assets/{chat-fixture-CZVZdKyJ.js → chat-fixture-C_aYWFQ3.js} +0 -0
  60. /package/dist/ui/assets/{git-config-BL5EMAi6.js → git-config-BCAVbrIP.js} +0 -0
  61. /package/dist/ui/assets/{page-storage-sync-Ci60e2G8.js → page-storage-sync-B_kI_rjd.js} +0 -0
  62. /package/dist/ui/assets/{rum-CMSkYNP8.js → rum-DP66esB2.js} +0 -0
  63. /package/dist/ui/assets/{secret-env-C3EozEBc.js → secret-env-BN6ZnD74.js} +0 -0
  64. /package/dist/ui/assets/{sprinkle-bridge-channel-C5ki0FNk.js → sprinkle-bridge-channel-BJWN_rO5.js} +0 -0
@@ -1,4 +1,4 @@
1
- import{r as e}from"./chunk-jRWAZmH_.js";import{t}from"./logger-BHrAkMIS.js";import{n,r}from"./tool-ui-D9h6SJkp.js";import{a as i,c as a,i as o,r as s,s as c,t as l}from"./bedrock-camp-9aDiXDk5.js";import{d as u,l as d,u as f}from"./transform-messages-uhk4b6os.js";import{a as p,n as m,t as ee}from"./providers-DCsD1Clf.js";const te=`slicc.trayWorkerBaseUrl`,ne=`https://www.sliccy.ai`;let re={state:`inactive`,joinUrl:null,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:null,lastError:null};function ie(){return{...re}}const h=new Set;function ae(e){return h.add(e),()=>{h.delete(e)}}async function oe(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 g(s,o,n,i,r,a),o}async function se(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 g(o,a,t,r,n,i),a}async function g(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 ce(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 le(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 ce(e,t,n,r,i){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=i||a,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 r({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 r({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 r({type:`message_start`,message:{...t}}),await r({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 r({type:`message_start`,message:{...m}})),await r({type:`message_end`,message:m}),m}async function le(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?ue(e,t,a,n,r,i):de(e,t,a,n,r,i)}async function ue(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 pe(e,t,c,r,i),l;l=n.kind===`immediate`?{toolCall:c,result:n.result,isError:n.isError}:await he(e,t,n,await me(n,i,a),r,i),await y(l,a);let u=b(l);await x(u,a),o.push(l),s.push(u)}return{messages:s,terminate:_(o)}}async function de(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 pe(e,t,s,r,i);if(n.kind===`immediate`){let e={toolCall:s,result:n.result,isError:n.isError};await y(e,a),o.push(e);continue}o.push(async()=>{let o=await he(e,t,n,await me(n,i,a),r,i);return await y(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=b(e);await x(t,a),c.push(t)}return{messages:c,terminate:_(s)}}function _(e){return e.length>0&&e.every(e=>e.result.terminate===!0)}function fe(e,t){if(!e.prepareArguments)return t;let n=e.prepareArguments(t.arguments);return n===t.arguments?t:{...t,arguments:n}}async function pe(e,t,n,r,a){let o=e.tools?.find(e=>e.name===n.name);if(!o)return{kind:`immediate`,result:v(`Tool ${n.name} not found`),isError:!0};try{let s=i(o,fe(o,n));if(r.beforeToolCall){let i=await r.beforeToolCall({assistantMessage:t,toolCall:n,args:s,context:e},a);if(i?.block)return{kind:`immediate`,result:v(i.reason||`Tool execution was blocked`),isError:!0}}return{kind:`prepared`,toolCall:n,tool:o,args:s}}catch(e){return{kind:`immediate`,result:v(e instanceof Error?e.message:String(e)),isError:!0}}}async function me(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:v(e instanceof Error?e.message:String(e)),isError:!0}}}async function he(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=v(e instanceof Error?e.message:String(e)),s=!0}return{toolCall:n.toolCall,result:o,isError:s}}function v(e){return{content:[{type:`text`,text:e}],details:{}}}async function y(e,t){await t({type:`tool_execution_end`,toolCallId:e.toolCall.id,toolName:e.toolCall.name,result:e.result,isError:e.isError})}function b(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 x(e,t){await t({type:`message_start`,message:e}),await t({type:`message_end`,message:e})}function ge(e){return e.filter(e=>e.role===`user`||e.role===`assistant`||e.role===`toolResult`)}const _e={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},ve={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 ye(e){let t=e?.tools?.slice()??[],n=e?.messages?.slice()??[];return{systemPrompt:e?.systemPrompt??``,model:e?.model??ve,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 S=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=[]}},be=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=ye(e.initialState),this.convertToLlm=e.convertToLlm??ge,this.transformContext=e.transformContext,this.streamFn=e.streamFn??a,this.getApiKey=e.getApiKey,this.onPayload=e.onPayload,this.onResponse=e.onResponse,this.beforeToolCall=e.beforeToolCall,this.afterToolCall=e.afterToolCall,this.steeringQueue=new S(e.steeringMode??`one-at-a-time`),this.followUpQueue=new S(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 oe(e,this.createContextSnapshot(),this.createLoopConfig(t),e=>this.processEvents(e),n,this.streamFn)})}async runContinuation(){await this.runWithLifecycle(async e=>{await se(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:_e,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 C=`sessions`;function xe(){return new Promise((e,t)=>{let n=indexedDB.open(`agent-sessions`,1);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(C)||e.createObjectStore(C,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}var Se=class{dbPromise=null;getDB(){return this.dbPromise||=xe(),this.dbPromise}async save(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(C,`readwrite`).objectStore(C).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(C,`readonly`).objectStore(C).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(C,`readwrite`).objectStore(C).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(C,`readonly`).objectStore(C).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(C,`readwrite`).objectStore(C).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 w=t(`image-processor`),T=3932160,Ce=new Set([`image/jpeg`,`image/png`,`image/gif`,`image/webp`]);function we(e){return Ce.has(e)}function Te(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 Ee(e){if(!we(e.mimeType))return w.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=Te(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;w.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-CTqVspRN.js`).then(e=>e.n);r=e.getMagick,i=e.MIME_TO_MAGICK_FORMAT}catch(e){return w.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 w.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),w.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>T&&s!==`JPEG`?(w.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>T&&(w.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 w.warn(`ImageMagick produced no output`),{type:`text`,text:`[Image removed: could not be processed (empty output from resize)]`};if(o.data.length>T)return w.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 w.info(`Image processed successfully`,{originalBase64:t,newBase64:c.length,mimeType:o.mime}),{type:`image`,data:c,mimeType:o.mime}}catch(n){return w.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 De=t(`tool-adapter`),Oe=/<img:(data:(image\/[^;]+);base64,([^>]+))>/g;function E(e){let t=[],n=0;for(let r of e.matchAll(Oe)){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 ke(e){let t=E(e),n=[];for(let e of t)e.type===`image`?n.push(await Ee(e)):n.push(e);return n}function Ae(e,t){return{name:e.name,label:e.name,description:e.description,parameters:e.inputSchema,async execute(i,a,o,s){let c;s&&(c=r({onUpdate:s,toolName:e.name,toolCallId:i}));let l=t?t.processManager.spawn({kind:`tool`,argv:[e.name,...Me(a)],owner:t.owner,ppid:t.getParentPid?.()}):null,u=null;l&&t&&o&&(o.aborted?t.processManager.signal(l.pid,`SIGINT`):o.addEventListener(`abort`,()=>t.processManager.signal(l.pid,`SIGINT`),{once:!0})),l&&t&&(u=t.processManager.onSignal((e,n)=>{e.pid!==l.pid||n!==`SIGKILL`||t.processManager.exit(l.pid,null)}));let d=l?l.abort.signal:o;try{let n=await e.execute(a??{},d),r;try{r=await ke(n.content)}catch(t){De.warn(`Image processing failed, falling back to raw content`,{tool:e.name,error:t instanceof Error?t.message:String(t)}),r=E(n.content)}return l&&t&&t.processManager.exit(l.pid,+!!n.isError),{content:r,details:{isError:n.isError}}}catch(e){throw l&&t&&t.processManager.exit(l.pid,l.abort.signal.aborted?null:1),e}finally{c&&n(c),u?.()}}}}function je(e,t){return e.map(e=>Ae(e,t))}function Me(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[]}const D={enabled:!0,reserveTokens:16384,keepRecentTokens:2e4};function Ne(e,t,n){return n.enabled?e>t-n.reserveTokens:!1}function O(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}const k=t(`context-compaction`);function A(e,t){return e.role===t}function j(e){let t=0;for(;t<e.length&&A(e[t],`toolResult`);){let n=e[t];k.warn(`Dropping orphaned toolResult (no preceding assistant message)`,{toolCallId:n.toolCallId}),t++}return t>0?e.slice(t):e}function Pe(e){let t=[];for(let n of e){let e=n;switch(e.role){case`user`:t.push(`<user>\n${M(e.content)}\n</user>`);break;case`assistant`:t.push(`<assistant>\n${M(e.content)}\n</assistant>`);break;case`toolResult`:{let n=e.toolName??`tool`;t.push(`<tool-result name="${n}">\n${M(e.content)}\n</tool-result>`);break}case`bashExecution`:t.push(`<bash>\n$ ${e.command??``}\n${e.output??``}\n</bash>`);break;case`branchSummary`:case`compactionSummary`:t.push(`<prior-summary>\n${e.summary??``}\n</prior-summary>`);break;default:t.push(`<${e.role}>\n${M(e.content)}\n</${e.role}>`)}}return t.join(`
1
+ import{r as e}from"./chunk-jRWAZmH_.js";import{t}from"./logger-BHrAkMIS.js";import{n,r}from"./tool-ui-D9h6SJkp.js";import{a as i,c as a,i as o,r as s,s as c,t as l}from"./bedrock-camp-CWcpoTdM.js";import{d as u,l as d,u as f}from"./transform-messages-uhk4b6os.js";import{a as p,n as m,t as ee}from"./providers-CKcYW6JW.js";const te=`slicc.trayWorkerBaseUrl`,ne=`https://www.sliccy.ai`;let re={state:`inactive`,joinUrl:null,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:null,lastError:null};function ie(){return{...re}}const h=new Set;function ae(e){return h.add(e),()=>{h.delete(e)}}async function oe(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 g(s,o,n,i,r,a),o}async function se(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 g(o,a,t,r,n,i),a}async function g(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 ce(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 le(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 ce(e,t,n,r,i){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=i||a,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 r({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 r({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 r({type:`message_start`,message:{...t}}),await r({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 r({type:`message_start`,message:{...m}})),await r({type:`message_end`,message:m}),m}async function le(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?ue(e,t,a,n,r,i):de(e,t,a,n,r,i)}async function ue(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 pe(e,t,c,r,i),l;l=n.kind===`immediate`?{toolCall:c,result:n.result,isError:n.isError}:await he(e,t,n,await me(n,i,a),r,i),await y(l,a);let u=b(l);await x(u,a),o.push(l),s.push(u)}return{messages:s,terminate:_(o)}}async function de(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 pe(e,t,s,r,i);if(n.kind===`immediate`){let e={toolCall:s,result:n.result,isError:n.isError};await y(e,a),o.push(e);continue}o.push(async()=>{let o=await he(e,t,n,await me(n,i,a),r,i);return await y(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=b(e);await x(t,a),c.push(t)}return{messages:c,terminate:_(s)}}function _(e){return e.length>0&&e.every(e=>e.result.terminate===!0)}function fe(e,t){if(!e.prepareArguments)return t;let n=e.prepareArguments(t.arguments);return n===t.arguments?t:{...t,arguments:n}}async function pe(e,t,n,r,a){let o=e.tools?.find(e=>e.name===n.name);if(!o)return{kind:`immediate`,result:v(`Tool ${n.name} not found`),isError:!0};try{let s=i(o,fe(o,n));if(r.beforeToolCall){let i=await r.beforeToolCall({assistantMessage:t,toolCall:n,args:s,context:e},a);if(i?.block)return{kind:`immediate`,result:v(i.reason||`Tool execution was blocked`),isError:!0}}return{kind:`prepared`,toolCall:n,tool:o,args:s}}catch(e){return{kind:`immediate`,result:v(e instanceof Error?e.message:String(e)),isError:!0}}}async function me(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:v(e instanceof Error?e.message:String(e)),isError:!0}}}async function he(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=v(e instanceof Error?e.message:String(e)),s=!0}return{toolCall:n.toolCall,result:o,isError:s}}function v(e){return{content:[{type:`text`,text:e}],details:{}}}async function y(e,t){await t({type:`tool_execution_end`,toolCallId:e.toolCall.id,toolName:e.toolCall.name,result:e.result,isError:e.isError})}function b(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 x(e,t){await t({type:`message_start`,message:e}),await t({type:`message_end`,message:e})}function ge(e){return e.filter(e=>e.role===`user`||e.role===`assistant`||e.role===`toolResult`)}const _e={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},ve={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 ye(e){let t=e?.tools?.slice()??[],n=e?.messages?.slice()??[];return{systemPrompt:e?.systemPrompt??``,model:e?.model??ve,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 S=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=[]}},be=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=ye(e.initialState),this.convertToLlm=e.convertToLlm??ge,this.transformContext=e.transformContext,this.streamFn=e.streamFn??a,this.getApiKey=e.getApiKey,this.onPayload=e.onPayload,this.onResponse=e.onResponse,this.beforeToolCall=e.beforeToolCall,this.afterToolCall=e.afterToolCall,this.steeringQueue=new S(e.steeringMode??`one-at-a-time`),this.followUpQueue=new S(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 oe(e,this.createContextSnapshot(),this.createLoopConfig(t),e=>this.processEvents(e),n,this.streamFn)})}async runContinuation(){await this.runWithLifecycle(async e=>{await se(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:_e,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 C=`sessions`;function xe(){return new Promise((e,t)=>{let n=indexedDB.open(`agent-sessions`,1);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(C)||e.createObjectStore(C,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}var Se=class{dbPromise=null;getDB(){return this.dbPromise||=xe(),this.dbPromise}async save(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(C,`readwrite`).objectStore(C).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(C,`readonly`).objectStore(C).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(C,`readwrite`).objectStore(C).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(C,`readonly`).objectStore(C).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(C,`readwrite`).objectStore(C).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 w=t(`image-processor`),T=3932160,Ce=new Set([`image/jpeg`,`image/png`,`image/gif`,`image/webp`]);function we(e){return Ce.has(e)}function Te(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 Ee(e){if(!we(e.mimeType))return w.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=Te(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;w.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-CTqVspRN.js`).then(e=>e.n);r=e.getMagick,i=e.MIME_TO_MAGICK_FORMAT}catch(e){return w.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 w.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),w.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>T&&s!==`JPEG`?(w.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>T&&(w.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 w.warn(`ImageMagick produced no output`),{type:`text`,text:`[Image removed: could not be processed (empty output from resize)]`};if(o.data.length>T)return w.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 w.info(`Image processed successfully`,{originalBase64:t,newBase64:c.length,mimeType:o.mime}),{type:`image`,data:c,mimeType:o.mime}}catch(n){return w.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 De=t(`tool-adapter`),Oe=/<img:(data:(image\/[^;]+);base64,([^>]+))>/g;function E(e){let t=[],n=0;for(let r of e.matchAll(Oe)){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 ke(e){let t=E(e),n=[];for(let e of t)e.type===`image`?n.push(await Ee(e)):n.push(e);return n}function Ae(e,t){return{name:e.name,label:e.name,description:e.description,parameters:e.inputSchema,async execute(i,a,o,s){let c;s&&(c=r({onUpdate:s,toolName:e.name,toolCallId:i}));let l=t?t.processManager.spawn({kind:`tool`,argv:[e.name,...Me(a)],owner:t.owner,ppid:t.getParentPid?.()}):null,u=null;l&&t&&o&&(o.aborted?t.processManager.signal(l.pid,`SIGINT`):o.addEventListener(`abort`,()=>t.processManager.signal(l.pid,`SIGINT`),{once:!0})),l&&t&&(u=t.processManager.onSignal((e,n)=>{e.pid!==l.pid||n!==`SIGKILL`||t.processManager.exit(l.pid,null)}));let d=l?l.abort.signal:o;try{let n=await e.execute(a??{},d),r;try{r=await ke(n.content)}catch(t){De.warn(`Image processing failed, falling back to raw content`,{tool:e.name,error:t instanceof Error?t.message:String(t)}),r=E(n.content)}return l&&t&&t.processManager.exit(l.pid,+!!n.isError),{content:r,details:{isError:n.isError}}}catch(e){throw l&&t&&t.processManager.exit(l.pid,l.abort.signal.aborted?null:1),e}finally{c&&n(c),u?.()}}}}function je(e,t){return e.map(e=>Ae(e,t))}function Me(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[]}const D={enabled:!0,reserveTokens:16384,keepRecentTokens:2e4};function Ne(e,t,n){return n.enabled?e>t-n.reserveTokens:!1}function O(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}const k=t(`context-compaction`);function A(e,t){return e.role===t}function j(e){let t=0;for(;t<e.length&&A(e[t],`toolResult`);){let n=e[t];k.warn(`Dropping orphaned toolResult (no preceding assistant message)`,{toolCallId:n.toolCallId}),t++}return t>0?e.slice(t):e}function Pe(e){let t=[];for(let n of e){let e=n;switch(e.role){case`user`:t.push(`<user>\n${M(e.content)}\n</user>`);break;case`assistant`:t.push(`<assistant>\n${M(e.content)}\n</assistant>`);break;case`toolResult`:{let n=e.toolName??`tool`;t.push(`<tool-result name="${n}">\n${M(e.content)}\n</tool-result>`);break}case`bashExecution`:t.push(`<bash>\n$ ${e.command??``}\n${e.output??``}\n</bash>`);break;case`branchSummary`:case`compactionSummary`:t.push(`<prior-summary>\n${e.summary??``}\n</prior-summary>`);break;default:t.push(`<${e.role}>\n${M(e.content)}\n</${e.role}>`)}}return t.join(`
2
2
 
3
3
  `)}function M(e){if(typeof e==`string`)return e;if(!Array.isArray(e))return``;let t=[];for(let n of e){let e=n;e.type===`text`&&e.text?t.push(e.text):e.type===`thinking`&&e.thinking?t.push(`[thinking] ${e.thinking}`):e.type===`toolCall`?t.push(`[tool-call ${e.name??`?`}] ${JSON.stringify(e.arguments??{})}`):e.type===`image`&&t.push(`[image]`)}return t.join(`
4
4
  `)}function Fe(e){return`You are a context compaction assistant. You are shown the prefix of a conversation between a user and an AI coding assistant, and asked to produce either a structured summary, durable memory bullets, or a short title — depending on the user's instruction.
@@ -1 +1 @@
1
- import{r as e}from"./chunk-jRWAZmH_.js";var t={include:[`*`],exclude:[]},n=e({getRegisteredProviderConfig:()=>u,getRegisteredProviderIds:()=>d,registerProviders:()=>l,shouldIncludeProvider:()=>i});const r=Object.assign({"/packages/dev-tools/providers.build.json":t})[`/packages/dev-tools/providers.build.json`]??{include:[`*`],exclude:[]};function i(e){let{include:t,exclude:n}=r;return n.includes(`*`)||n.includes(e)?!1:!!(t.includes(`*`)||t.includes(e))}const a=Object.assign({"./built-in/azure-ai-foundry.ts":()=>import(`./azure-ai-foundry-BitUTPkG.js`),"./built-in/azure-openai.ts":()=>import(`./azure-openai-B5yRnUrI.js`),"./built-in/bedrock-camp.ts":()=>import(`./bedrock-camp-9aDiXDk5.js`).then(e=>e.n),"./built-in/local-llm.ts":()=>import(`./local-llm-CPnz6WHK.js`).then(e=>e.n)}),o=Object.assign({"/packages/webapp/providers/adobe.ts":()=>import(`./adobe-wEPP-tgD.js`),"/packages/webapp/providers/github.ts":()=>import(`./github-14EoK2_l.js`)}),s=new Map;let c=null;function l(){return c||(c=(async()=>{for(let[e,t]of Object.entries(a)){let e=await t();e.config&&i(e.config.id)&&(s.set(e.config.id,e.config),e.register?.())}for(let[e,t]of Object.entries(o)){let e=await t();e.config&&(s.set(e.config.id,e.config),e.register?.())}})(),c)}function u(e){return s.get(e)}function d(){return[...s.keys()]}export{i as a,l as i,d as n,n as r,u as t};
1
+ import{r as e}from"./chunk-jRWAZmH_.js";var t={include:[`*`],exclude:[]},n=e({getRegisteredProviderConfig:()=>u,getRegisteredProviderIds:()=>d,registerProviders:()=>l,shouldIncludeProvider:()=>i});const r=Object.assign({"/packages/dev-tools/providers.build.json":t})[`/packages/dev-tools/providers.build.json`]??{include:[`*`],exclude:[]};function i(e){let{include:t,exclude:n}=r;return n.includes(`*`)||n.includes(e)?!1:!!(t.includes(`*`)||t.includes(e))}const a=Object.assign({"./built-in/azure-ai-foundry.ts":()=>import(`./azure-ai-foundry-BitUTPkG.js`),"./built-in/azure-openai.ts":()=>import(`./azure-openai-CORKw8jR.js`),"./built-in/bedrock-camp.ts":()=>import(`./bedrock-camp-CWcpoTdM.js`).then(e=>e.n),"./built-in/local-llm.ts":()=>import(`./local-llm-BFZ6apck.js`).then(e=>e.n)}),o=Object.assign({"/packages/webapp/providers/adobe.ts":()=>import(`./adobe-BWQHpddw.js`),"/packages/webapp/providers/github.ts":()=>import(`./github-DPFKZfnM.js`)}),s=new Map;let c=null;function l(){return c||(c=(async()=>{for(let[e,t]of Object.entries(a)){let e=await t();e.config&&i(e.config.id)&&(s.set(e.config.id,e.config),e.register?.())}for(let[e,t]of Object.entries(o)){let e=await t();e.config&&(s.set(e.config.id,e.config),e.register?.())}})(),c)}function u(e){return s.get(e)}function d(){return[...s.keys()]}export{i as a,l as i,d as n,n as r,u as t};
@@ -1,4 +1,4 @@
1
- function e(e,t){if(typeof t!=`string`||!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(t))throw Error(`${e} must use an exact semver version in package.json`);return t}var t=class{nextId=1;pending=new Map;handler;disposed=!1;constructor(e){this.port=e,this.handler=e=>{if(e.data?.type!==`realm-rpc-res`)return;let t=e.data,n=this.pending.get(t.id);n&&(this.pending.delete(t.id),typeof t.error==`string`?n.reject(Error(t.error)):n.resolve(t.result))},e.addEventListener(`message`,this.handler),e.start?.()}call(e,t,n=[]){if(this.disposed)return Promise.reject(Error(`realm-rpc: client disposed`));let r=this.nextId++,i={type:`realm-rpc-req`,id:r,channel:e,op:t,args:n};return new Promise((e,t)=>{this.pending.set(r,{resolve:e,reject:t}),this.port.postMessage(i)})}dispose(){if(this.disposed)return;this.disposed=!0,this.port.removeEventListener(`message`,this.handler);let e=Error(`realm-rpc: client disposed`);for(let t of this.pending.values())t.reject(e);this.pending.clear()}};`${e(`pyodide`,`0.29.4`)}`;async function n(e,n,r=()=>import(`./pyodide-DhfjhWo1.js`)){let o=[],s=[],c=new t(n),l;try{l=await(await r()).loadPyodide({indexURL:e.pyodideIndexURL,fullStdLib:!1})}catch(e){c.dispose();let t={type:`realm-error`,message:`loadPyodide: ${e instanceof Error?e.message:String(e)}`};n.postMessage(t);return}let u=e.pyodideSyncDirs??[e.cwd,`/tmp`],d=e=>{s.push(`Warning: ${e}\n`)},f={files:new Map,dirs:new Set};try{f=await i(c,l,u,d)}catch(e){d(`VFS→Pyodide sync failed: ${e instanceof Error?e.message:String(e)}`)}try{l.FS.chdir(e.cwd)}catch{}l.setStdout({batched:e=>o.push(e+`
1
+ function e(e,t){if(typeof t!=`string`||!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(t))throw Error(`${e} must use an exact semver version in package.json`);return t}var t=class{port;nextId=1;pending=new Map;handler;disposed=!1;constructor(e){this.port=e,this.handler=e=>{if(e.data?.type!==`realm-rpc-res`)return;let t=e.data,n=this.pending.get(t.id);n&&(this.pending.delete(t.id),typeof t.error==`string`?n.reject(Error(t.error)):n.resolve(t.result))},e.addEventListener(`message`,this.handler),e.start?.()}call(e,t,n=[]){if(this.disposed)return Promise.reject(Error(`realm-rpc: client disposed`));let r=this.nextId++,i={type:`realm-rpc-req`,id:r,channel:e,op:t,args:n};return new Promise((e,t)=>{this.pending.set(r,{resolve:e,reject:t}),this.port.postMessage(i)})}dispose(){if(this.disposed)return;this.disposed=!0,this.port.removeEventListener(`message`,this.handler);let e=Error(`realm-rpc: client disposed`);for(let t of this.pending.values())t.reject(e);this.pending.clear()}};`${e(`pyodide`,`0.29.4`)}`;async function n(e,n,r=()=>import(`./pyodide-DhfjhWo1.js`)){let o=[],s=[],c=new t(n),l;try{l=await(await r()).loadPyodide({indexURL:e.pyodideIndexURL,fullStdLib:!1})}catch(e){c.dispose();let t={type:`realm-error`,message:`loadPyodide: ${e instanceof Error?e.message:String(e)}`};n.postMessage(t);return}let u=e.pyodideSyncDirs??[e.cwd,`/tmp`],d=e=>{s.push(`Warning: ${e}\n`)},f={files:new Map,dirs:new Set};try{f=await i(c,l,u,d)}catch(e){d(`VFS→Pyodide sync failed: ${e instanceof Error?e.message:String(e)}`)}try{l.FS.chdir(e.cwd)}catch{}l.setStdout({batched:e=>o.push(e+`
2
2
  `)}),l.setStderr({batched:e=>s.push(e+`
3
3
  `)});let p=!1;l.setStdin({stdin:()=>p||!e.stdin?null:(p=!0,e.stdin)}),l.globals.set(`__slicc_code`,e.code),l.globals.set(`__slicc_filename`,e.filename),l.globals.set(`__slicc_argv`,e.argv);let m;try{await l.runPythonAsync(`
4
4
  import sys
@@ -1,5 +1,5 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/xterm-BmfB5bmM.css","assets/mount-picker-popup-DJJfRF_c.js","assets/chunk-jRWAZmH_.js","assets/logger-B-No_qN_.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-ca-nBW7U.js";var t=class{client;sid;onEvent;nextExecId=1;pending=new Map;buffers=new Map;opened=!1;openWaiters=[];unsubscribe=null;constructor(e){this.client=e.client,this.sid=e.sid,this.onEvent=e.onEvent??null,this.unsubscribe=this.subscribeToEvents()}open(e={}){return this.opened?Promise.resolve():new Promise((t,n)=>{this.openWaiters.push(e=>e?n(e):t()),this.send({type:`terminal-open`,sid:this.sid,cwd:e.cwd,env:e.env})})}exec(e){let t=`e${this.nextExecId++}`;return new Promise(n=>{this.pending.set(t,n),this.buffers.set(t,{stdout:``,stderr:``}),this.send({type:`terminal-exec`,sid:this.sid,execId:t,command:e})})}signal(e){this.send({type:`terminal-signal`,sid:this.sid,signal:e})}resize(e,t){this.send({type:`terminal-resize`,sid:this.sid,cols:e,rows:t})}close(){if(this.opened){this.send({type:`terminal-close`,sid:this.sid}),this.opened=!1;for(let e of this.openWaiters)e(Error(`terminal session closed`));this.openWaiters=[];for(let[e,t]of this.pending){let n=this.buffers.get(e)??{stdout:``,stderr:``};t({stdout:n.stdout,stderr:n.stderr,exitCode:130})}this.pending.clear(),this.buffers.clear()}}dispose(){this.unsubscribe?.(),this.unsubscribe=null}send(e){this.client.sendRaw(e)}subscribeToEvents(){return this.client.onTerminalEvent(e=>{e.sid===this.sid&&this.handleEvent(e)})}handleEvent(e){switch(this.onEvent?.(e),e.type){case`terminal-status`:{let t=e;if(t.state===`opened`){this.opened=!0;for(let e of this.openWaiters)e();this.openWaiters=[]}else if(t.state===`error`){this.opened=!1;let e=Error(t.error??`terminal session error`);for(let t of this.openWaiters)t(e);this.openWaiters=[]}return}case`terminal-output`:{let t=e;if(t.execId!==void 0){let e=this.buffers.get(t.execId);if(!e)return;t.stream===`stdout`?e.stdout+=t.data:e.stderr+=t.data}else for(let e of this.buffers.values())t.stream===`stdout`?e.stdout+=t.data:e.stderr+=t.data;return}case`terminal-exit`:{let t=e,n=this.pending.get(t.execId),r=this.buffers.get(t.execId);this.pending.delete(t.execId),this.buffers.delete(t.execId),n&&n({stdout:r?.stdout??``,stderr:r?.stderr??``,exitCode:t.exitCode});return}case`terminal-cleared`:case`terminal-media-preview`:return}}},n={background:`#141414`,foreground:`#cfcfcf`,cursor:`#3562ff`,cursorAccent:`#141414`,selectionBackground:`#3562ff40`,selectionForeground:`#ffffff`,black:`#1a1a1a`,red:`#e34850`,green:`#2d9d78`,yellow:`#e68619`,blue:`#3562ff`,magenta:`#a962e8`,cyan:`#2db9be`,white:`#cfcfcf`,brightBlack:`#5a5a5a`,brightRed:`#e34850`,brightGreen:`#2d9d78`,brightYellow:`#e68619`,brightBlue:`#4a75ff`,brightMagenta:`#a962e8`,brightCyan:`#2db9be`,brightWhite:`#ffffff`},r={background:`#f0f0f0`,foreground:`#1a1a1a`,cursor:`#2b54db`,cursorAccent:`#f0f0f0`,selectionBackground:`#2b54db30`,selectionForeground:`#000000`,black:`#1a1a1a`,red:`#d73220`,green:`#268e6c`,yellow:`#d17a00`,blue:`#2b54db`,magenta:`#8839ef`,cyan:`#1a9088`,white:`#e8e8e8`,brightBlack:`#6e6e6e`,brightRed:`#d73220`,brightGreen:`#268e6c`,brightYellow:`#d17a00`,brightBlue:`#1e44c4`,brightMagenta:`#8839ef`,brightCyan:`#1a9088`,brightWhite:`#ffffff`},i=`\x1B[34m/\x1B[0m \x1B[90m$\x1B[0m `,a=4,o=class{client;terminal=null;fitAddon=null;terminalHost=null;resizeObserver=null;themeObserver=null;currentLine=``;cursorPos=0;history=[];historyIndex=-1;isExecuting=!1;execInFlight=null;suppressOutput=!1;tabBusy=!1;constructor(e){this.options=e;let n=e.sid??`panel-terminal-${Date.now()}`;this.client=new t({client:e.client,sid:n,onEvent:e=>this.handleEvent(e)})}async mount(t){let{Terminal:i}=await e(async()=>{let{Terminal:e}=await import(`./xterm-ucbPh68r.js`);return{Terminal:e}},[]),{FitAddon:a}=await e(async()=>{let{FitAddon:e}=await import(`./addon-fit-CVV7fTw9.js`);return{FitAddon:e}},[]);await e(()=>Promise.resolve({}),__vite__mapDeps([0]));let o=!document.documentElement.classList.contains(`theme-light`);this.terminal=new i({cursorBlink:!0,fontSize:11,fontFamily:`'Source Code Pro', 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace`,theme:o?n:r,convertEol:!0}),this.themeObserver=new MutationObserver(()=>{if(!this.terminal)return;let e=document.documentElement.classList.contains(`theme-light`);this.terminal.options.theme=e?r:n}),this.themeObserver.observe(document.documentElement,{attributes:!0,attributeFilter:[`class`]}),this.fitAddon=new a,this.terminal.loadAddon(this.fitAddon),t.replaceChildren(),this.terminalHost=document.createElement(`div`),this.terminalHost.className=`terminal-panel__terminal-host`,t.appendChild(this.terminalHost),this.terminal.open(this.terminalHost),this.fitAddon.fit(),this.resizeObserver=new ResizeObserver(()=>this.refit()),this.resizeObserver.observe(this.terminalHost),this.terminal.writeln(`\x1B[1mslicc\x1B[0m \x1B[90mshell (kernel)\x1B[0m`),this.terminal.writeln(`\x1B[90mType "help" for available commands.\x1B[0m
2
+ import{t as e}from"./preload-helper-ca-nBW7U.js";var t=class{client;sid;onEvent;nextExecId=1;pending=new Map;buffers=new Map;opened=!1;openWaiters=[];unsubscribe=null;constructor(e){this.client=e.client,this.sid=e.sid,this.onEvent=e.onEvent??null,this.unsubscribe=this.subscribeToEvents()}open(e={}){return this.opened?Promise.resolve():new Promise((t,n)=>{this.openWaiters.push(e=>e?n(e):t()),this.send({type:`terminal-open`,sid:this.sid,cwd:e.cwd,env:e.env})})}exec(e){let t=`e${this.nextExecId++}`;return new Promise(n=>{this.pending.set(t,n),this.buffers.set(t,{stdout:``,stderr:``}),this.send({type:`terminal-exec`,sid:this.sid,execId:t,command:e})})}signal(e){this.send({type:`terminal-signal`,sid:this.sid,signal:e})}resize(e,t){this.send({type:`terminal-resize`,sid:this.sid,cols:e,rows:t})}close(){if(this.opened){this.send({type:`terminal-close`,sid:this.sid}),this.opened=!1;for(let e of this.openWaiters)e(Error(`terminal session closed`));this.openWaiters=[];for(let[e,t]of this.pending){let n=this.buffers.get(e)??{stdout:``,stderr:``};t({stdout:n.stdout,stderr:n.stderr,exitCode:130})}this.pending.clear(),this.buffers.clear()}}dispose(){this.unsubscribe?.(),this.unsubscribe=null}send(e){this.client.sendRaw(e)}subscribeToEvents(){return this.client.onTerminalEvent(e=>{e.sid===this.sid&&this.handleEvent(e)})}handleEvent(e){switch(this.onEvent?.(e),e.type){case`terminal-status`:{let t=e;if(t.state===`opened`){this.opened=!0;for(let e of this.openWaiters)e();this.openWaiters=[]}else if(t.state===`error`){this.opened=!1;let e=Error(t.error??`terminal session error`);for(let t of this.openWaiters)t(e);this.openWaiters=[]}return}case`terminal-output`:{let t=e;if(t.execId!==void 0){let e=this.buffers.get(t.execId);if(!e)return;t.stream===`stdout`?e.stdout+=t.data:e.stderr+=t.data}else for(let e of this.buffers.values())t.stream===`stdout`?e.stdout+=t.data:e.stderr+=t.data;return}case`terminal-exit`:{let t=e,n=this.pending.get(t.execId),r=this.buffers.get(t.execId);this.pending.delete(t.execId),this.buffers.delete(t.execId),n&&n({stdout:r?.stdout??``,stderr:r?.stderr??``,exitCode:t.exitCode});return}case`terminal-cleared`:case`terminal-media-preview`:return}}},n={background:`#141414`,foreground:`#cfcfcf`,cursor:`#3562ff`,cursorAccent:`#141414`,selectionBackground:`#3562ff40`,selectionForeground:`#ffffff`,black:`#1a1a1a`,red:`#e34850`,green:`#2d9d78`,yellow:`#e68619`,blue:`#3562ff`,magenta:`#a962e8`,cyan:`#2db9be`,white:`#cfcfcf`,brightBlack:`#5a5a5a`,brightRed:`#e34850`,brightGreen:`#2d9d78`,brightYellow:`#e68619`,brightBlue:`#4a75ff`,brightMagenta:`#a962e8`,brightCyan:`#2db9be`,brightWhite:`#ffffff`},r={background:`#f0f0f0`,foreground:`#1a1a1a`,cursor:`#2b54db`,cursorAccent:`#f0f0f0`,selectionBackground:`#2b54db30`,selectionForeground:`#000000`,black:`#1a1a1a`,red:`#d73220`,green:`#268e6c`,yellow:`#d17a00`,blue:`#2b54db`,magenta:`#8839ef`,cyan:`#1a9088`,white:`#e8e8e8`,brightBlack:`#6e6e6e`,brightRed:`#d73220`,brightGreen:`#268e6c`,brightYellow:`#d17a00`,brightBlue:`#1e44c4`,brightMagenta:`#8839ef`,brightCyan:`#1a9088`,brightWhite:`#ffffff`},i=`\x1B[34m/\x1B[0m \x1B[90m$\x1B[0m `,a=4,o=class{options;client;terminal=null;fitAddon=null;terminalHost=null;resizeObserver=null;themeObserver=null;currentLine=``;cursorPos=0;history=[];historyIndex=-1;isExecuting=!1;execInFlight=null;suppressOutput=!1;tabBusy=!1;constructor(e){this.options=e;let n=e.sid??`panel-terminal-${Date.now()}`;this.client=new t({client:e.client,sid:n,onEvent:e=>this.handleEvent(e)})}async mount(t){let{Terminal:i}=await e(async()=>{let{Terminal:e}=await import(`./xterm-ucbPh68r.js`);return{Terminal:e}},[]),{FitAddon:a}=await e(async()=>{let{FitAddon:e}=await import(`./addon-fit-CVV7fTw9.js`);return{FitAddon:e}},[]);await e(()=>Promise.resolve({}),__vite__mapDeps([0]));let o=!document.documentElement.classList.contains(`theme-light`);this.terminal=new i({cursorBlink:!0,fontSize:11,fontFamily:`'Source Code Pro', 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace`,theme:o?n:r,convertEol:!0}),this.themeObserver=new MutationObserver(()=>{if(!this.terminal)return;let e=document.documentElement.classList.contains(`theme-light`);this.terminal.options.theme=e?r:n}),this.themeObserver.observe(document.documentElement,{attributes:!0,attributeFilter:[`class`]}),this.fitAddon=new a,this.terminal.loadAddon(this.fitAddon),t.replaceChildren(),this.terminalHost=document.createElement(`div`),this.terminalHost.className=`terminal-panel__terminal-host`,t.appendChild(this.terminalHost),this.terminal.open(this.terminalHost),this.fitAddon.fit(),this.resizeObserver=new ResizeObserver(()=>this.refit()),this.resizeObserver.observe(this.terminalHost),this.terminal.writeln(`\x1B[1mslicc\x1B[0m \x1B[90mshell (kernel)\x1B[0m`),this.terminal.writeln(`\x1B[90mType "help" for available commands.\x1B[0m
3
3
  `),await this.client.open({cwd:this.options.cwd,env:this.options.env}),this.showPrompt(),this.setupInputHandler()}refit(){this.fitAddon?.fit()}clearTerminal(){this.terminal?.clear()}async executeCommandInTerminal(e){let t=e.trim();return t?this.terminal?this.isExecuting||this.currentLine.length>0?{stdout:``,stderr:`terminal is busy; finish current input first
4
4
  `,exitCode:1}:(this.history[this.history.length-1]!==t&&this.history.push(t),this.historyIndex=-1,this.terminal.write(t),this.terminal.writeln(``),this.runRemote(t)):this.client.exec(t):{stdout:``,stderr:``,exitCode:0}}dispose(){this.themeObserver?.disconnect(),this.themeObserver=null,this.resizeObserver?.disconnect(),this.resizeObserver=null,this.terminal?.dispose(),this.terminal=null,this.fitAddon=null,this.terminalHost=null,this.client.close(),this.client.dispose()}showPrompt(){this.terminal?.write(i)}setupInputHandler(){this.terminal&&this.terminal.onData(e=>{if(this.isExecuting){(e===``||e.length===1&&e.charCodeAt(0)===3)&&(this.client.signal(`SIGINT`),this.terminal?.writeln(`^C`));return}if(e.startsWith(`\x1B[`)||e.startsWith(`\x1BO`)){switch(e){case`\x1B[A`:this.handleHistoryUp();return;case`\x1B[B`:this.handleHistoryDown();return;case`\x1B[C`:this.handleArrowRight();return;case`\x1B[D`:this.handleArrowLeft();return;case`\x1B[H`:case`\x1BOH`:case`\x1B[1~`:this.handleHome();return;case`\x1B[F`:case`\x1BOF`:case`\x1B[4~`:this.handleEnd();return;case`\x1B[3~`:this.handleDelete();return}return}for(let t of e)switch(t){case`\r`:this.handleEnter();break;case``:this.handleBackspace();break;case``:this.terminal?.writeln(`^C`),this.currentLine=``,this.cursorPos=0,this.showPrompt();break;case` `:this.handleTab();break;default:t>=` `&&this.insertChar(t)}})}insertChar(e){if(!this.terminal)return;let t=this.currentLine.slice(this.cursorPos);this.currentLine=this.currentLine.slice(0,this.cursorPos)+e+t,this.cursorPos++,this.terminal.write(e),t.length>0&&(this.terminal.write(t),this.terminal.write(`\x1b[${t.length}D`))}handleBackspace(){if(!this.terminal||this.cursorPos<=0)return;let e=this.currentLine.slice(this.cursorPos);this.currentLine=this.currentLine.slice(0,this.cursorPos-1)+e,this.cursorPos--,this.terminal.write(`\b\x1B[K`),e.length>0&&(this.terminal.write(e),this.terminal.write(`\x1b[${e.length}D`))}handleDelete(){if(!this.terminal||this.cursorPos>=this.currentLine.length)return;let e=this.currentLine.slice(this.cursorPos+1);this.currentLine=this.currentLine.slice(0,this.cursorPos)+e,this.terminal.write(`\x1B[K`),e.length>0&&(this.terminal.write(e),this.terminal.write(`\x1b[${e.length}D`))}handleArrowLeft(){this.cursorPos<=0||(this.cursorPos--,this.terminal?.write(`\x1B[D`))}handleArrowRight(){this.cursorPos>=this.currentLine.length||(this.cursorPos++,this.terminal?.write(`\x1B[C`))}handleHome(){this.cursorPos!==0&&(this.terminal?.write(`\x1b[${this.cursorPos}D`),this.cursorPos=0)}handleEnd(){let e=this.currentLine.length-this.cursorPos;e<=0||(this.terminal?.write(`\x1b[${e}C`),this.cursorPos=this.currentLine.length)}handleHistoryUp(){if(this.history.length===0)return;let e=this.historyIndex===-1?this.history.length-1:Math.max(0,this.historyIndex-1);this.historyIndex=e,this.replaceLine(this.history[e])}handleHistoryDown(){if(this.historyIndex===-1)return;let e=this.historyIndex+1;e>=this.history.length?(this.historyIndex=-1,this.replaceLine(``)):(this.historyIndex=e,this.replaceLine(this.history[e]))}async handleTab(){if(!this.terminal||this.tabBusy)return;this.tabBusy=!0;let e=this.isExecuting;this.isExecuting=!0;try{let{currentWord:e,isFirstWord:t,compgenCmd:n}=u(this.currentLine.slice(0,this.cursorPos));this.suppressOutput=!0;let r=``;try{r=(await this.client.exec(n)).stdout}finally{this.suppressOutput=!1}let i=r.split(`
5
5
  `).filter(Boolean);if(i.length===0)return;if(i.length===1){let n=i[0],r=n.slice(e.length);r&&this.insertText(r);let a=` `;if(!t){this.suppressOutput=!0;try{(await this.client.exec(d(n))).stdout.trim()===n&&(a=`/`)}finally{this.suppressOutput=!1}}this.insertText(a);return}let a=f(i).slice(e.length);if(a){this.insertText(a);return}this.terminal.writeln(``),this.terminal.writeln(i.map(e=>e.split(`/`).pop()??e).join(` `)),this.showPrompt(),this.terminal.write(this.currentLine);let o=this.currentLine.length-this.cursorPos;o>0&&this.terminal.write(`\x1b[${o}D`)}catch(e){console.warn(`[RemoteTerminal] Tab completion failed:`,e instanceof Error?e.message:String(e))}finally{this.tabBusy=!1,this.isExecuting=e}}insertText(e){if(!this.terminal||e.length===0)return;let t=this.currentLine.slice(this.cursorPos);this.currentLine=this.currentLine.slice(0,this.cursorPos)+e+this.currentLine.slice(this.cursorPos),this.cursorPos+=e.length,this.terminal.write(e),t.length>0&&(this.terminal.write(t),this.terminal.write(`\x1b[${t.length}D`))}replaceLine(e){if(!this.terminal)return;let t=this.currentLine.length-this.cursorPos;t>0&&this.terminal.write(`\x1b[${t}C`),this.terminal.write(`\r`),this.terminal.write(`\x1b[${a+this.currentLine.length}D`),this.terminal.write(`\x1B[K`),this.showPrompt(),this.terminal.write(e),this.currentLine=e,this.cursorPos=e.length}handleEnter(){if(!this.terminal)return;let e=this.currentLine.trim();if(this.terminal.writeln(``),this.currentLine=``,this.cursorPos=0,this.historyIndex=-1,!e){this.showPrompt();return}this.history[this.history.length-1]!==e&&this.history.push(e);let t=s(e);if(t){this.runRemoteWithLocalPicker(e,t);return}this.runRemote(e)}async runRemoteWithLocalPicker(t,n){this.isExecuting=!0;try{let r=window;if(typeof r.showDirectoryPicker!=`function`){this.terminal?.writeln(`mount: File System Access API not available
@@ -9,4 +9,4 @@ import{t as e}from"./preload-helper-ca-nBW7U.js";import{$ as t,A as n,B as r,D a
9
9
  .cm-editor {
10
10
  background: var(--s2-bg-layer-2, var(--s2-gray-75, #252525));
11
11
  }
12
- `,dn=class extends oe{constructor(e,t){super(),this.color=e,this.tooltip=t}toDOM(){let e=document.createElement(`span`);return e.style.cssText=`display:inline-block;width:8px;height:8px;border-radius:50%;background:${this.color};`,this.tooltip&&(e.title=this.tooltip),e}},fn=class extends HTMLElement{view=null;langCompartment=new r;highlightCompartment=new r;lineNumberCompartment=new r;readonlyCompartment=new r;gutterCompartment=new r;placeholderCompartment=new r;shadowRoot_;placeholderText=``;connected=!1;langRequestId=0;static get observedAttributes(){return[`language`,`line-numbers`,`readonly`]}constructor(){super(),this.shadowRoot_=this.attachShadow({mode:`open`})}connectedCallback(){if(this.connected)return;this.connected=!0,this.placeholderText=this.textContent?.trim()??``,this.textContent=``;let e=sn(cn(this)),t=[ln(),this.highlightCompartment.of(a(e)),a(ae,{fallback:!0}),this.langCompartment.of([]),this.lineNumberCompartment.of(this.hasAttribute(`line-numbers`)?o():[]),this.readonlyCompartment.of(s.readOnly.of(this.hasAttribute(`readonly`))),this.gutterCompartment.of([]),this.placeholderCompartment.of(this.placeholderText?c(this.placeholderText):[]),Ce(),f.of([...an,...Fe]),n.updateListener.of(e=>{e.docChanged&&this.dispatchEvent(new CustomEvent(`change`,{detail:{value:e.state.doc.toString()},bubbles:!0}))})],r=document.createElement(`style`);r.textContent=un,this.shadowRoot_.appendChild(r);let i=document.createElement(`div`);this.shadowRoot_.appendChild(i),this.view=new n({state:s.create({extensions:t}),parent:i,root:this.shadowRoot_});let l=this.getAttribute(`language`);l&&this.loadLanguage(l)}disconnectedCallback(){this.view?.destroy(),this.view=null,this.connected=!1}attributeChangedCallback(e,t,n){if(this.view)switch(e){case`language`:n?this.loadLanguage(n):this.view.dispatch({effects:this.langCompartment.reconfigure([])});break;case`line-numbers`:this.view.dispatch({effects:this.lineNumberCompartment.reconfigure(n===null?[]:o())});break;case`readonly`:this.view.dispatch({effects:this.readonlyCompartment.reconfigure(s.readOnly.of(n!==null))});break}}get value(){return this.view?.state.doc.toString()??``}set value(e){this.view&&this.view.dispatch({changes:{from:0,to:this.view.state.doc.length,insert:e}})}setHighlighter(e){if(!this.view)return;let t=ie.define(e);this.view.dispatch({effects:this.langCompartment.reconfigure(t)})}setGutterMarkers(e){if(!this.view)return;let t=new Map;for(let[n,r]of Object.entries(e))t.set(Number(n),new dn(r.color,r.tooltip));let n=d({class:`cm-slicc-markers`,lineMarker:(e,n)=>{let r=e.state.doc.lineAt(n.from).number;return t.get(r)??null}});this.view.dispatch({effects:this.gutterCompartment.reconfigure(n)})}async loadLanguage(e){let t=++this.langRequestId,n=on[e.toLowerCase()];if(!n){this.langRequestId===t&&this.view?.dispatch({effects:this.langCompartment.reconfigure([])});return}let r=await n();this.langRequestId===t&&this.view?.dispatch({effects:this.langCompartment.reconfigure(r)})}};customElements.get(`slicc-editor`)||customElements.define(`slicc-editor`,fn);export{fn as SliccEditorElement};
12
+ `,dn=class extends oe{color;tooltip;constructor(e,t){super(),this.color=e,this.tooltip=t}toDOM(){let e=document.createElement(`span`);return e.style.cssText=`display:inline-block;width:8px;height:8px;border-radius:50%;background:${this.color};`,this.tooltip&&(e.title=this.tooltip),e}},fn=class extends HTMLElement{view=null;langCompartment=new r;highlightCompartment=new r;lineNumberCompartment=new r;readonlyCompartment=new r;gutterCompartment=new r;placeholderCompartment=new r;shadowRoot_;placeholderText=``;connected=!1;langRequestId=0;static get observedAttributes(){return[`language`,`line-numbers`,`readonly`]}constructor(){super(),this.shadowRoot_=this.attachShadow({mode:`open`})}connectedCallback(){if(this.connected)return;this.connected=!0,this.placeholderText=this.textContent?.trim()??``,this.textContent=``;let e=sn(cn(this)),t=[ln(),this.highlightCompartment.of(a(e)),a(ae,{fallback:!0}),this.langCompartment.of([]),this.lineNumberCompartment.of(this.hasAttribute(`line-numbers`)?o():[]),this.readonlyCompartment.of(s.readOnly.of(this.hasAttribute(`readonly`))),this.gutterCompartment.of([]),this.placeholderCompartment.of(this.placeholderText?c(this.placeholderText):[]),Ce(),f.of([...an,...Fe]),n.updateListener.of(e=>{e.docChanged&&this.dispatchEvent(new CustomEvent(`change`,{detail:{value:e.state.doc.toString()},bubbles:!0}))})],r=document.createElement(`style`);r.textContent=un,this.shadowRoot_.appendChild(r);let i=document.createElement(`div`);this.shadowRoot_.appendChild(i),this.view=new n({state:s.create({extensions:t}),parent:i,root:this.shadowRoot_});let l=this.getAttribute(`language`);l&&this.loadLanguage(l)}disconnectedCallback(){this.view?.destroy(),this.view=null,this.connected=!1}attributeChangedCallback(e,t,n){if(this.view)switch(e){case`language`:n?this.loadLanguage(n):this.view.dispatch({effects:this.langCompartment.reconfigure([])});break;case`line-numbers`:this.view.dispatch({effects:this.lineNumberCompartment.reconfigure(n===null?[]:o())});break;case`readonly`:this.view.dispatch({effects:this.readonlyCompartment.reconfigure(s.readOnly.of(n!==null))});break}}get value(){return this.view?.state.doc.toString()??``}set value(e){this.view&&this.view.dispatch({changes:{from:0,to:this.view.state.doc.length,insert:e}})}setHighlighter(e){if(!this.view)return;let t=ie.define(e);this.view.dispatch({effects:this.langCompartment.reconfigure(t)})}setGutterMarkers(e){if(!this.view)return;let t=new Map;for(let[n,r]of Object.entries(e))t.set(Number(n),new dn(r.color,r.tooltip));let n=d({class:`cm-slicc-markers`,lineMarker:(e,n)=>{let r=e.state.doc.lineAt(n.from).number;return t.get(r)??null}});this.view.dispatch({effects:this.gutterCompartment.reconfigure(n)})}async loadLanguage(e){let t=++this.langRequestId,n=on[e.toLowerCase()];if(!n){this.langRequestId===t&&this.view?.dispatch({effects:this.langCompartment.reconfigure([])});return}let r=await n();this.langRequestId===t&&this.view?.dispatch({effects:this.langCompartment.reconfigure(r)})}};customElements.get(`slicc-editor`)||customElements.define(`slicc-editor`,fn);export{fn as SliccEditorElement};
@@ -1 +1 @@
1
- import{OffscreenClient as e}from"./offscreen-client-BSyVp60C.js";function t(e){let t=!1,n=()=>{t||(t=!0,typeof e.start==`function`&&e.start())};return{onMessage:t=>{let r=e=>{t(e.data)};return e.addEventListener(`message`,r),n(),()=>{e.removeEventListener(`message`,r)}},send:t=>{e.postMessage(t)}}}function n(e){let n=t(e);return{onMessage:e=>n.onMessage(e),send:e=>{n.send({source:`panel`,payload:e})}}}function r(e,n){let r=t(e),i=new Map,a=r.onMessage(async e=>{let t=e;if(t?.type){if(t.type===`cdp-cmd`){let t=e;try{let e=await n.send(t.method,t.params,t.sessionId);r.send({type:`cdp-response`,id:t.id,result:e})}catch(e){r.send({type:`cdp-response`,id:t.id,error:e instanceof Error?e.message:String(e)})}return}if(t.type===`cdp-subscribe`){let t=e;if(i.has(t.event))return;let a=e=>{r.send({type:`cdp-event`,method:t.event,params:e})};i.set(t.event,a),n.on(t.event,a);return}if(t.type===`cdp-unsubscribe`){let t=e,r=i.get(t.event);if(!r)return;i.delete(t.event),n.off(t.event,r);return}}});return()=>{a();for(let[e,t]of i)n.off(e,t);i.clear()}}function i(){let e={};if(typeof localStorage>`u`)return e;for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);if(n===null)continue;let r=localStorage.getItem(n);r!==null&&(e[n]=r)}return e}function a(t){let{worker:i,realCdpTransport:a,callbacks:o}=t,s=t.readyTimeoutMs??3e4,c=t.localStorageSeed??{},l=new MessageChannel,u=new MessageChannel,d=new e(o,n(l.port1)),f=r(u.port1,a),p=null,m=new Promise((e,t)=>{let n=null,r=null;p=()=>{r!==null&&(l.port1.removeEventListener(`message`,r),r=null),n!==null&&(clearTimeout(n),n=null)},r=t=>{t.data?.type===`kernel-worker-ready`&&(p?.(),e())},l.port1.addEventListener(`message`,r),n=setTimeout(()=>{p?.(),t(Error(`Kernel worker did not signal ready within ${s}ms`))},s)}),h={type:`kernel-worker-init`,kernelPort:l.port2,cdpPort:u.port2,localStorageSeed:c,instanceId:t.instanceId};i.postMessage(h,[l.port2,u.port2]);let g=!1;return{client:d,ready:m,dispose(){if(!g){g=!0,p?.(),f();try{i.postMessage({type:`kernel-worker-shutdown`})}catch{}i.terminate(),l.port1.close(),u.port1.close()}}}}function o(e){return a({worker:e.workerUrl?new Worker(e.workerUrl,{type:`module`}):new Worker(new URL(`/assets/kernel-worker-CC8wmKpJ.js`,``+import.meta.url),{type:`module`}),realCdpTransport:e.realCdpTransport,callbacks:e.callbacks,readyTimeoutMs:e.readyTimeoutMs,localStorageSeed:e.localStorageSeed??i(),instanceId:e.instanceId})}export{o as spawnKernelWorker};
1
+ import{OffscreenClient as e}from"./offscreen-client-C1bJuNEW.js";function t(e){let t=!1,n=()=>{t||(t=!0,typeof e.start==`function`&&e.start())};return{onMessage:t=>{let r=e=>{t(e.data)};return e.addEventListener(`message`,r),n(),()=>{e.removeEventListener(`message`,r)}},send:t=>{e.postMessage(t)}}}function n(e){let n=t(e);return{onMessage:e=>n.onMessage(e),send:e=>{n.send({source:`panel`,payload:e})}}}function r(e,n){let r=t(e),i=new Map,a=r.onMessage(async e=>{let t=e;if(t?.type){if(t.type===`cdp-cmd`){let t=e;try{let e=await n.send(t.method,t.params,t.sessionId);r.send({type:`cdp-response`,id:t.id,result:e})}catch(e){r.send({type:`cdp-response`,id:t.id,error:e instanceof Error?e.message:String(e)})}return}if(t.type===`cdp-subscribe`){let t=e;if(i.has(t.event))return;let a=e=>{r.send({type:`cdp-event`,method:t.event,params:e})};i.set(t.event,a),n.on(t.event,a);return}if(t.type===`cdp-unsubscribe`){let t=e,r=i.get(t.event);if(!r)return;i.delete(t.event),n.off(t.event,r);return}}});return()=>{a();for(let[e,t]of i)n.off(e,t);i.clear()}}function i(){let e={};if(typeof localStorage>`u`)return e;for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);if(n===null)continue;let r=localStorage.getItem(n);r!==null&&(e[n]=r)}return e}function a(t){let{worker:i,realCdpTransport:a,callbacks:o}=t,s=t.readyTimeoutMs??3e4,c=t.localStorageSeed??{},l=new MessageChannel,u=new MessageChannel,d=new e(o,n(l.port1)),f=r(u.port1,a),p=null,m=new Promise((e,t)=>{let n=null,r=null;p=()=>{r!==null&&(l.port1.removeEventListener(`message`,r),r=null),n!==null&&(clearTimeout(n),n=null)},r=t=>{t.data?.type===`kernel-worker-ready`&&(p?.(),e())},l.port1.addEventListener(`message`,r),n=setTimeout(()=>{p?.(),t(Error(`Kernel worker did not signal ready within ${s}ms`))},s)}),h={type:`kernel-worker-init`,kernelPort:l.port2,cdpPort:u.port2,localStorageSeed:c,instanceId:t.instanceId};i.postMessage(h,[l.port2,u.port2]);let g=!1;return{client:d,ready:m,dispose(){if(!g){g=!0,p?.(),f();try{i.postMessage({type:`kernel-worker-shutdown`})}catch{}i.terminate(),l.port1.close(),u.port1.close()}}}}function o(e){return a({worker:e.workerUrl?new Worker(e.workerUrl,{type:`module`}):new Worker(new URL(`/assets/kernel-worker-ClzuHK8I.js`,``+import.meta.url),{type:`module`}),realCdpTransport:e.realCdpTransport,callbacks:e.callbacks,readyTimeoutMs:e.readyTimeoutMs,localStorageSeed:e.localStorageSeed??i(),instanceId:e.instanceId})}export{o as spawnKernelWorker};
@@ -1 +1 @@
1
- import{t as e}from"./preload-helper-ca-nBW7U.js";var t=null,n=!1;function r(){return typeof chrome<`u`&&chrome?.runtime?.id?`extension`:typeof document<`u`&&document.documentElement?.dataset?.electronOverlay?`electron`:`cli`}async function i(){if(!n&&!(typeof localStorage<`u`&&localStorage.getItem(`telemetry-disabled`)===`true`))try{let i=r();typeof window<`u`&&(window.RUM_GENERATION=`slicc-${i}`),i===`extension`?(t=(await e(()=>import(`./rum-CMSkYNP8.js`),[])).default,typeof window<`u`&&(window.addEventListener(`error`,e=>{c(`js`,u(e.message??``))}),window.addEventListener(`unhandledrejection`,e=>{let t=e.reason;c(`js`,u(t instanceof Error?t.message:String(t)))}))):(typeof window<`u`&&(window.SAMPLE_PAGEVIEWS_AT_RATE=`high`),t=(await e(()=>import(`./src-BcpYRmFj.js`),[])).sampleRUM),n=!0,t&&t(`navigate`,{source:typeof document<`u`?document.referrer:``,target:i})}catch{}}function a(e,n){t?.(`formsubmit`,{source:e,target:n})}function o(e){t?.(`viewblock`,{source:e})}function s(e){t?.(`viewmedia`,{source:e})}function c(e,n){t?.(`error`,{source:e,target:n})}function l(e){t?.(`signup`,{source:e})}function u(e){return(e??``).slice(0,200).replace(/(\/[a-z]+)(?:\/[^\s/]+)+/gi,`$1/.../`)}export{o as a,l as i,a as n,s as r,i as t};
1
+ import{t as e}from"./preload-helper-ca-nBW7U.js";var t=null,n=!1;function r(){return typeof chrome<`u`&&chrome?.runtime?.id?`extension`:typeof document<`u`&&document.documentElement?.dataset?.electronOverlay?`electron`:`cli`}async function i(){if(!n&&!(typeof localStorage<`u`&&localStorage.getItem(`telemetry-disabled`)===`true`))try{let i=r();typeof window<`u`&&(window.RUM_GENERATION=`slicc-${i}`),i===`extension`?(t=(await e(()=>import(`./rum-DP66esB2.js`),[])).default,typeof window<`u`&&(window.addEventListener(`error`,e=>{c(`js`,u(e.message??``))}),window.addEventListener(`unhandledrejection`,e=>{let t=e.reason;c(`js`,u(t instanceof Error?t.message:String(t)))}))):(typeof window<`u`&&(window.SAMPLE_PAGEVIEWS_AT_RATE=`high`),t=(await e(()=>import(`./src-BcpYRmFj.js`),[])).sampleRUM),n=!0,t&&t(`navigate`,{source:typeof document<`u`?document.referrer:``,target:i})}catch{}}function a(e,n){t?.(`formsubmit`,{source:e,target:n})}function o(e){t?.(`viewblock`,{source:e})}function s(e){t?.(`viewmedia`,{source:e})}function c(e,n){t?.(`error`,{source:e,target:n})}function l(e){t?.(`signup`,{source:e})}function u(e){return(e??``).slice(0,200).replace(/(\/[a-z]+)(?:\/[^\s/]+)+/gi,`$1/.../`)}export{o as a,l as i,a as n,s as r,i as t};
@@ -1 +1 @@
1
- import{S as e,m as t}from"./db-DPvmo9md.js";const n=`slicc:last-seen-version`;function r(){return{version:`2.51.0`,releasedAt:`2026-05-17T14:01:09Z`}}async function i(){let e=await t(n);return e&&e.length>0?e:null}async function a(t){await e(n,t)}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};
1
+ import{S as e,m as t}from"./db-DPvmo9md.js";const n=`slicc:last-seen-version`;function r(){return{version:`2.51.2`,releasedAt:`2026-05-19T14:24:44Z`}}async function i(){let e=await t(n);return e&&e.length>0?e:null}async function a(t){await e(n,t)}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};
@@ -5,7 +5,7 @@
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-D7t2PagM.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-C2W9-qsq.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-jRWAZmH_.js">
10
10
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-ca-nBW7U.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/env-api-keys-DxKb6C4Q.js">
@@ -15,14 +15,14 @@
15
15
  <link rel="modulepreload" crossorigin href="/assets/tray-follower-status-DKq8RTLd.js">
16
16
  <link rel="modulepreload" crossorigin href="/assets/logger-B-No_qN_.js">
17
17
  <link rel="modulepreload" crossorigin href="/assets/tool-ui-B3Bihlxa.js">
18
- <link rel="modulepreload" crossorigin href="/assets/telemetry-B7l3TtVP.js">
19
- <link rel="modulepreload" crossorigin href="/assets/provider-settings-Db2SXpTa.js">
18
+ <link rel="modulepreload" crossorigin href="/assets/telemetry-BHB_tqYb.js">
19
+ <link rel="modulepreload" crossorigin href="/assets/provider-settings-DN-LkAuR.js">
20
20
  <link rel="modulepreload" crossorigin href="/assets/mount-picker-popup-DJJfRF_c.js">
21
- <link rel="modulepreload" crossorigin href="/assets/backend-local-mju0Ps5U.js">
21
+ <link rel="modulepreload" crossorigin href="/assets/backend-local-D-jeTNnr.js">
22
22
  <link rel="modulepreload" crossorigin href="/assets/path-utils-d3qOVZOu.js">
23
- <link rel="modulepreload" crossorigin href="/assets/fs-kweAFR1R.js">
23
+ <link rel="modulepreload" crossorigin href="/assets/fs-CVkrcCne.js">
24
24
  <link rel="modulepreload" crossorigin href="/assets/mime-types-DL940yDZ.js">
25
- <link rel="modulepreload" crossorigin href="/assets/mount-CE7OcF7K.js">
25
+ <link rel="modulepreload" crossorigin href="/assets/mount-B7LvUSs3.js">
26
26
  <link rel="stylesheet" crossorigin href="/assets/index-eWuuouO-.css">
27
27
  </head>
28
28
  <body>
@@ -5,7 +5,7 @@
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-D7t2PagM.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-C2W9-qsq.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-jRWAZmH_.js">
10
10
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-ca-nBW7U.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/env-api-keys-DxKb6C4Q.js">
@@ -15,14 +15,14 @@
15
15
  <link rel="modulepreload" crossorigin href="/assets/tray-follower-status-DKq8RTLd.js">
16
16
  <link rel="modulepreload" crossorigin href="/assets/logger-B-No_qN_.js">
17
17
  <link rel="modulepreload" crossorigin href="/assets/tool-ui-B3Bihlxa.js">
18
- <link rel="modulepreload" crossorigin href="/assets/telemetry-B7l3TtVP.js">
19
- <link rel="modulepreload" crossorigin href="/assets/provider-settings-Db2SXpTa.js">
18
+ <link rel="modulepreload" crossorigin href="/assets/telemetry-BHB_tqYb.js">
19
+ <link rel="modulepreload" crossorigin href="/assets/provider-settings-DN-LkAuR.js">
20
20
  <link rel="modulepreload" crossorigin href="/assets/mount-picker-popup-DJJfRF_c.js">
21
- <link rel="modulepreload" crossorigin href="/assets/backend-local-mju0Ps5U.js">
21
+ <link rel="modulepreload" crossorigin href="/assets/backend-local-D-jeTNnr.js">
22
22
  <link rel="modulepreload" crossorigin href="/assets/path-utils-d3qOVZOu.js">
23
- <link rel="modulepreload" crossorigin href="/assets/fs-kweAFR1R.js">
23
+ <link rel="modulepreload" crossorigin href="/assets/fs-CVkrcCne.js">
24
24
  <link rel="modulepreload" crossorigin href="/assets/mime-types-DL940yDZ.js">
25
- <link rel="modulepreload" crossorigin href="/assets/mount-CE7OcF7K.js">
25
+ <link rel="modulepreload" crossorigin href="/assets/mount-B7LvUSs3.js">
26
26
  <link rel="stylesheet" crossorigin href="/assets/index-eWuuouO-.css">
27
27
  </head>
28
28
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sliccy",
3
- "version": "2.51.0",
3
+ "version": "2.51.2",
4
4
  "description": "Browser-based coding agent with thin CLI server",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -86,9 +86,9 @@
86
86
  "semantic-release": "25.0.3",
87
87
  "tsx": "4.21.0",
88
88
  "typescript": "^6.0.0",
89
- "typescript-eslint": "8.59.2",
90
- "vite": "8.0.11",
91
- "vitest": "4.1.5"
89
+ "typescript-eslint": "8.59.3",
90
+ "vite": "8.0.12",
91
+ "vitest": "4.1.6"
92
92
  },
93
93
  "lint-staged": {
94
94
  "**/*.{ts,js,mjs}": [
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/oauth-service-B7as8KRE.js","assets/panel-rpc-f0zFUOaZ.js","assets/chunk-jRWAZmH_.js"])))=>i.map(i=>d[i]);
2
- import{r as e,s as t,v as n}from"./provider-settings-Db2SXpTa.js";import{t as r}from"./preload-helper-ca-nBW7U.js";import{c as i,l as a,o,s,u as c}from"./bedrock-camp-CqXHYC67.js";import{d as l,o as u,u as d}from"./simple-options-imi_RHvn.js";import{getOAuthPageOrigin as f}from"./oauth-service-B7as8KRE.js";var p=Object.assign({"/packages/webapp/providers/adobe-config.json":{proxyEndpoint:`https://adobe-llm-proxy.paolo-moz.workers.dev`,redirectUri:`https://www.sliccy.ai/auth/callback`,extensionRedirectUri:`https://akjjllgokmbgpbdbmafpiefnhidlmbgf.chromiumapp.org/adobe`}})[`/packages/webapp/providers/adobe-config.json`]??{clientId:``,proxyEndpoint:``,scopes:`openid,profile,email`};function m(){let e=t(`adobe`);if(e)return e.replace(/\/$/,``);if(p.proxyEndpoint)return p.proxyEndpoint.replace(/\/$/,``);throw Error(`Adobe proxy endpoint not configured — set it in Settings or adobe-config.json`)}var h=new Map,g=new Map;async function _(e){let t=h.get(e);if(t)return t;try{let t=await fetch(`${e}/v1/config`,{headers:{[M]:`2.51.0`}});if(t.ok){let n=await t.json();return h.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 h.set(e,n),n}function v(e){let t=e.clientId||p.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 y(e){return e.scopes||p.scopes}function b(e){return e.imsEnvironment||p.imsEnvironment||`prod`}var x={prod:`https://ims-na1.adobelogin.com`,stg1:`https://ims-na1-stg1.adobelogin.com`};function S(e){return x[e??p.imsEnvironment??`prod`]??x.prod}var C=typeof chrome<`u`&&!!chrome?.runtime?.id;function w(){return e().find(e=>e.providerId===`adobe`)}async function T(e,t){try{let n=await fetch(`${S(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 E(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 D={id:`adobe`,name:`Adobe`,description:`Claude via Adobe — login with your Adobe ID`,requiresApiKey:!1,requiresBaseUrl:!p.proxyEndpoint,baseUrlPlaceholder:`https://your-proxy.example.com`,baseUrlDescription:`Anthropic-compatible proxy endpoint`,isOAuth:!0,defaultModelId:`sonnet`,oauthTokenDomains:[`ims-na1.adobelogin.com`,`ims-na1-stg1.adobelogin.com`,`*.adobelogin.com`,`*.adobe.io`,`firefall.adobe.io`],getModelIds:()=>{let e=e=>{let t={id:e.id,name:e.name??e.id},n=g.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),/haiku/i.test(e.id)&&(t.compat={supportsEagerToolInputStreaming:!1}),t};for(let t of R.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 h.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 r=m(),i=await _(r),a=v(i),o=y(i),s=b(i),c=C?null:await f(),l=C?p.extensionRedirectUri??`https://${chrome.runtime.id}.chromiumapp.org/`:p.redirectUri??`${c.origin}/auth/callback`,u=C?void 0:btoa(JSON.stringify({port:parseInt(new URL(c.href).port||`5710`,10),path:`/auth/callback`,nonce:crypto.randomUUID()})),d=u?JSON.parse(atob(u)).nonce:null,h=new URLSearchParams({client_id:a,scope:o,response_type:`token`,redirect_uri:l});u&&h.set(`state`,u);let g=await e(`${S(s)}/ims/authorize/v2?${h}`);if(!g)return;if(d&&g)try{if(new URL(g).searchParams.get(`nonce`)!==d){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 x=E(g);if(!x){console.error(`[adobe] Could not extract token from redirect URL`);return}let w=await T(x.accessToken,s);await n({providerId:`adobe`,accessToken:x.accessToken,tokenExpiresAt:Date.now()+x.expiresIn*1e3,userName:w.name,userAvatar:w.avatar,baseUrl:p.proxyEndpoint?void 0:r}),await z().catch(e=>console.warn(`[adobe] Failed to fetch models after login:`,e instanceof Error?e.message:String(e))),t()},onOAuthLogout:async()=>{let e=w();if(e?.accessToken)try{let t=h.values().next().value??{},n=t.clientId||p.clientId,r=b(t);if(n){let t=await fetch(`${S(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))}await n({providerId:`adobe`,accessToken:``})},onSilentRenew:async()=>w()?.accessToken?j():null},O=null;async function k(){let e=w();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 j();if(e)return e}catch(e){console.warn(`[adobe] Silent renewal failed:`,e instanceof Error?e.message:String(e))}let t=w();if((t?.tokenExpiresAt??0)-Date.now()>0&&t?.accessToken)return t.accessToken;throw Error(`Adobe session expired — please log in again`)}function A(){let e=w();return e?.tokenExpiresAt?Date.now()>e.tokenExpiresAt-6e4:!0}async function j(){return typeof window>`u`?null:O||(O=(async()=>{try{let e=m(),t=await _(e),i=v(t),a=y(t),o=b(t),s=C?p.extensionRedirectUri??`https://${chrome.runtime.id}.chromiumapp.org/`:p.redirectUri??`${window.location.origin}/auth/callback`,c=C?void 0:btoa(JSON.stringify({port:parseInt(new URL(window.location.href).port||`5710`,10),path:`/auth/callback`,nonce:crypto.randomUUID()})),l=c?JSON.parse(atob(c)).nonce:null,u=new URLSearchParams({client_id:i,scope:a,response_type:`token`,redirect_uri:s,prompt:`none`});c&&u.set(`state`,c);let d=`${S(o)}/ims/authorize/v2?${u}`,{createOAuthLauncher:f}=await r(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-B7as8KRE.js`);return{createOAuthLauncher:e}},__vite__mapDeps([0,1,2])),h=await f()(d);if(!h)return null;if(l&&h)try{if(new URL(h).searchParams.get(`nonce`)!==l)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 g=E(h);if(!g)return null;let x=w();return await n({providerId:`adobe`,accessToken:g.accessToken,tokenExpiresAt:Date.now()+g.expiresIn*1e3,userName:x?.userName,userAvatar:x?.userAvatar,baseUrl:p.proxyEndpoint?void 0:e}),console.log(`[adobe] Token renewed silently`),await z().catch(e=>console.warn(`[adobe] Failed to refresh models after silent renewal:`,e instanceof Error?e.message:String(e))),g.accessToken}catch(e){return console.warn(`[adobe] Silent renewal error:`,e instanceof Error?e.message:String(e)),null}finally{O=null}})(),O)}var M=`X-Slicc-Version`;function N(e){let t={},n=M.toLowerCase();if(e.headers)for(let[r,i]of Object.entries(e.headers))r.toLowerCase()!==n&&(t[r]=i);return t[M]=`2.51.0`,{...e,headers:t}}function P(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 F=(e,t,n={})=>{let r=u();return(async()=>{try{let i=await k();if(String(e.api).includes(`openai`)){let a=s({...e,baseUrl:`${m()}/v1`,api:`openai-completions`,compat:{...e.compat,supportsStore:!1,supportsDeveloperRole:!1}},t,N({...n,apiKey:i}));for await(let e of a)r.push(e)}else{let a=o({...e,baseUrl:m(),api:`anthropic-messages`},t,N({...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(P(e,t)),r.end()}})(),r},I=(e,t,n)=>{let r=u();return(async()=>{try{let o=await k();if(String(e.api).includes(`openai`)){let i=a({...e,baseUrl:`${m()}/v1`,api:`openai-completions`,compat:{...e.compat,supportsStore:!1,supportsDeveloperRole:!1}},t,N({...n,apiKey:o}));for await(let e of i)r.push(e)}else{let a=i({...e,baseUrl:m(),api:`anthropic-messages`},t,N({...n,apiKey:o}));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(P(e,t)),r.end()}})(),r};async function L(){try{let e=await k(),t=m(),n=await fetch(`${t}/v1/models`,{headers:{Authorization:`Bearer ${e}`,[M]:`2.51.0`}});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),g.set(t.id,e)}let n=new Map;for(let e of l())try{for(let t of d(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 d(`anthropic`).map(e=>({...e,provider:`adobe`,api:`adobe-anthropic`}))}var R=new Map;async function z(){let e=m(),t=R.get(e);if(t)return t;let n=await L();return R.set(e,n),n}function B(){c({api:`adobe-anthropic`,stream:F,streamSimple:I}),c({api:`adobe-openai`,stream:F,streamSimple:I})}export{D as config,z as getAdobeModels,k as getValidAccessToken,A as isTokenExpired,B as register};
@@ -1 +0,0 @@
1
- import{a as e,f as t,t as n}from"./provider-settings-DmKfnK2J.js";import{d as r,f as i,l as a,p as o,u as s}from"./bedrock-camp-9aDiXDk5.js";import{d as c,o as l,u}from"./transform-messages-uhk4b6os.js";import{getOAuthPageOrigin as d}from"./oauth-service-BXvVyyjr.js";const f=Object.assign({"/packages/webapp/providers/adobe-config.json":{proxyEndpoint:`https://adobe-llm-proxy.paolo-moz.workers.dev`,redirectUri:`https://www.sliccy.ai/auth/callback`,extensionRedirectUri:`https://akjjllgokmbgpbdbmafpiefnhidlmbgf.chromiumapp.org/adobe`}})[`/packages/webapp/providers/adobe-config.json`]??{clientId:``,proxyEndpoint:``,scopes:`openid,profile,email`};function p(){let t=e(`adobe`);if(t)return t.replace(/\/$/,``);if(f.proxyEndpoint)return f.proxyEndpoint.replace(/\/$/,``);throw Error(`Adobe proxy endpoint not configured — set it in Settings or adobe-config.json`)}const m=new Map,h=new Map;async function g(e){let t=m.get(e);if(t)return t;try{let t=await fetch(`${e}/v1/config`,{headers:{[j]:`2.51.0`}});if(t.ok){let n=await t.json();return m.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 m.set(e,n),n}function _(e){let t=e.clientId||f.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 v(e){return e.scopes||f.scopes}function y(e){return e.imsEnvironment||f.imsEnvironment||`prod`}const b={prod:`https://ims-na1.adobelogin.com`,stg1:`https://ims-na1-stg1.adobelogin.com`};function x(e){return b[e??f.imsEnvironment??`prod`]??b.prod}const S=typeof chrome<`u`&&!!chrome?.runtime?.id;function C(){return n().find(e=>e.providerId===`adobe`)}async function w(e,t){try{let n=await fetch(`${x(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 T(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}const E={id:`adobe`,name:`Adobe`,description:`Claude via Adobe — login with your Adobe ID`,requiresApiKey:!1,requiresBaseUrl:!f.proxyEndpoint,baseUrlPlaceholder:`https://your-proxy.example.com`,baseUrlDescription:`Anthropic-compatible proxy endpoint`,isOAuth:!0,defaultModelId:`sonnet`,oauthTokenDomains:[`ims-na1.adobelogin.com`,`ims-na1-stg1.adobelogin.com`,`*.adobelogin.com`,`*.adobe.io`,`firefall.adobe.io`],getModelIds:()=>{let e=e=>{let t={id:e.id,name:e.name??e.id},n=h.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),/haiku/i.test(e.id)&&(t.compat={supportsEagerToolInputStreaming:!1}),t};for(let t of L.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 m.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,n)=>{let r=p(),i=await g(r),a=_(i),o=v(i),s=y(i),c=S?null:await d(),l=S?f.extensionRedirectUri??`https://${chrome.runtime.id}.chromiumapp.org/`:f.redirectUri??`${c.origin}/auth/callback`,u=S?void 0:btoa(JSON.stringify({port:parseInt(new URL(c.href).port||`5710`,10),path:`/auth/callback`,nonce:crypto.randomUUID()})),m=u?JSON.parse(atob(u)).nonce:null,h=new URLSearchParams({client_id:a,scope:o,response_type:`token`,redirect_uri:l});u&&h.set(`state`,u);let b=await e(`${x(s)}/ims/authorize/v2?${h}`);if(!b)return;if(m&&b)try{if(new URL(b).searchParams.get(`nonce`)!==m){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 C=T(b);if(!C){console.error(`[adobe] Could not extract token from redirect URL`);return}let E=await w(C.accessToken,s);await t({providerId:`adobe`,accessToken:C.accessToken,tokenExpiresAt:Date.now()+C.expiresIn*1e3,userName:E.name,userAvatar:E.avatar,baseUrl:f.proxyEndpoint?void 0:r}),await R().catch(e=>console.warn(`[adobe] Failed to fetch models after login:`,e instanceof Error?e.message:String(e))),n()},onOAuthLogout:async()=>{let e=C();if(e?.accessToken)try{let t=m.values().next().value??{},n=t.clientId||f.clientId,r=y(t);if(n){let t=await fetch(`${x(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))}await t({providerId:`adobe`,accessToken:``})},onSilentRenew:async()=>C()?.accessToken?A():null};let D=null;async function O(){let e=C();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 A();if(e)return e}catch(e){console.warn(`[adobe] Silent renewal failed:`,e instanceof Error?e.message:String(e))}let t=C();if((t?.tokenExpiresAt??0)-Date.now()>0&&t?.accessToken)return t.accessToken;throw Error(`Adobe session expired — please log in again`)}function k(){let e=C();return e?.tokenExpiresAt?Date.now()>e.tokenExpiresAt-6e4:!0}async function A(){return typeof window>`u`?null:D||(D=(async()=>{try{let e=p(),n=await g(e),r=_(n),i=v(n),a=y(n),o=S?f.extensionRedirectUri??`https://${chrome.runtime.id}.chromiumapp.org/`:f.redirectUri??`${window.location.origin}/auth/callback`,s=S?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,prompt:`none`});s&&l.set(`state`,s);let u=`${x(a)}/ims/authorize/v2?${l}`,{createOAuthLauncher:d}=await import(`./oauth-service-BXvVyyjr.js`),m=await d()(u);if(!m)return null;if(c&&m)try{if(new URL(m).searchParams.get(`nonce`)!==c)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 h=T(m);if(!h)return null;let b=C();return await t({providerId:`adobe`,accessToken:h.accessToken,tokenExpiresAt:Date.now()+h.expiresIn*1e3,userName:b?.userName,userAvatar:b?.userAvatar,baseUrl:f.proxyEndpoint?void 0:e}),console.log(`[adobe] Token renewed silently`),await R().catch(e=>console.warn(`[adobe] Failed to refresh models after silent renewal:`,e instanceof Error?e.message:String(e))),h.accessToken}catch(e){return console.warn(`[adobe] Silent renewal error:`,e instanceof Error?e.message:String(e)),null}finally{D=null}})(),D)}const j=`X-Slicc-Version`;function M(e){let t={};if(e.headers)for(let[n,r]of Object.entries(e.headers))n.toLowerCase()!==`x-slicc-version`&&(t[n]=r);return t[j]=`2.51.0`,{...e,headers:t}}function N(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()}}}const P=(e,t,n={})=>{let r=l();return(async()=>{try{let i=await O();if(String(e.api).includes(`openai`)){let a=s({...e,baseUrl:`${p()}/v1`,api:`openai-completions`,compat:{...e.compat,supportsStore:!1,supportsDeveloperRole:!1}},t,M({...n,apiKey:i}));for await(let e of a)r.push(e)}else{let o=a({...e,baseUrl:p(),api:`anthropic-messages`},t,M({...n,apiKey:i}));for await(let e of o)r.push(e)}r.end()}catch(t){console.error(`[adobe] Stream error:`,t instanceof Error?t.message:String(t)),r.push(N(e,t)),r.end()}})(),r},F=(e,t,n)=>{let a=l();return(async()=>{try{let o=await O();if(String(e.api).includes(`openai`)){let r=i({...e,baseUrl:`${p()}/v1`,api:`openai-completions`,compat:{...e.compat,supportsStore:!1,supportsDeveloperRole:!1}},t,M({...n,apiKey:o}));for await(let e of r)a.push(e)}else{let i=r({...e,baseUrl:p(),api:`anthropic-messages`},t,M({...n,apiKey:o}));for await(let e of i)a.push(e)}a.end()}catch(t){console.error(`[adobe] Stream error:`,t instanceof Error?t.message:String(t)),a.push(N(e,t)),a.end()}})(),a};async function I(){try{let e=await O(),t=p(),n=await fetch(`${t}/v1/models`,{headers:{Authorization:`Bearer ${e}`,[j]:`2.51.0`}});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),h.set(t.id,e)}let n=new Map;for(let e of c())try{for(let t of u(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 u(`anthropic`).map(e=>({...e,provider:`adobe`,api:`adobe-anthropic`}))}const L=new Map;async function R(){let e=p(),t=L.get(e);if(t)return t;let n=await I();return L.set(e,n),n}function z(){o({api:`adobe-anthropic`,stream:P,streamSimple:F}),o({api:`adobe-openai`,stream:P,streamSimple:F})}export{E as config,R as getAdobeModels,O as getValidAccessToken,k as isTokenExpired,z as register};
@@ -1 +0,0 @@
1
- import"./index-D7t2PagM.js";function e(e){}export{e as registerSessionCostsProvider};
@@ -1,9 +0,0 @@
1
- let e;const t=globalThis.process?.release?.name===`node`,n=typeof window<`u`;async function r(e,t={}){let{getDocument:n}=await i();return await n({data:e,isEvalSupported:!1,useSystemFonts:!0,...t}).promise}async function i(){return e||await a(),e}async function a(t,{reload:n=!1}={}){if(!(e&&!n)){if(t)try{e=await s(t());return}catch(e){throw Error(`PDF.js could not be resolved: ${e}`)}try{e=await import(`./pdfjs-jzfXBGiL.js`)}catch(e){throw Error(`Serverless PDF.js bundle could not be resolved: ${e}`)}}}function o(e){return typeof e==`object`&&!!e&&`_pdfInfo`in e}async function s(e){let t=await e;return t.default||t}let c;
2
- /**
3
- * Derived from the PDF.js project by the Mozilla Foundation.
4
- * @see https://github.com/mozilla/pdf.js/blob/b8de9a372f9bbf7e33adb362eeae5ef1919dba73/src/display/canvas_factory.js#L18
5
- * @license Apache-2.0
6
- */
7
- var l=class{#e=!1;constructor({enableHWA:e=!1}={}){this.#e=e}create(e,t){let n=this._createCanvas(e,t);return{canvas:n,context:n.getContext(`2d`,{willReadFrequently:!this.#e})}}reset({canvas:e},t,n){if(!e)throw Error(`Canvas is not specified`);e.width=t,e.height=n}destroy(e){if(!e.canvas)throw Error(`Canvas is not specified`);e.canvas.width=0,e.canvas.height=0,e.canvas=void 0,e.context=void 0}_createCanvas(e,t){throw Error(`Not implemented`)}},u=class extends l{_document;constructor({ownerDocument:e=globalThis.document,enableHWA:t=!1}={}){super({enableHWA:t}),this._document=e}_createCanvas(e,t){let n=this._document.createElement(`canvas`);return n.width=e,n.height=t,n}},d=class extends l{constructor({enableHWA:e=!1}={}){super({enableHWA:e})}_createCanvas(e,t){if(!c)throw Error(`@napi-rs/canvas module is not resolved`);return c.createCanvas(e,t)}};async function f(e){c??=await s(e())}function p(){c&&(globalThis.DOMMatrix===void 0&&(globalThis.DOMMatrix=c.DOMMatrix),globalThis.ImageData===void 0&&(globalThis.ImageData=c.ImageData),globalThis.Path2D===void 0&&(globalThis.Path2D=c.Path2D))}async function m(e,t){let n=o(e)?e:await r(e);if(t<1||t>n.numPages)throw Error(`Invalid page number. Must be between 1 and ${n.numPages}.`);let a=await n.getPage(t),s=await a.getOperatorList(),{OPS:c}=await i(),l=[];for(let e=0;e<s.fnArray.length;e++){if(s.fnArray[e]!==c.paintImageXObject)continue;let t=s.argsArray[e][0],n=await new Promise(e=>(t.startsWith(`g_`)?a.commonObjs:a.objs).get(t,e));if(!n||!n.data||!n.width||!n.height)continue;let{width:r,height:i,data:o}=n,u=o.length/(r*i);if(![1,3,4].includes(u))continue;let d=u;l.push({data:o,width:r,height:i,channels:d,key:t})}return l}async function h(e,t,n={}){let i=await g(n.canvasImport),a=o(e)?e:await r(e,{CanvasFactory:i}),s=await a.getPage(t);if(t<1||t>a.numPages)throw Error(`Invalid page number. Must be between 1 and ${a.numPages}.`);let c=s.getViewport({scale:1}),l=n.scale||1;n.width?l=n.width/c.width:n.height&&(l=n.height/c.height);let u=s.getViewport({scale:Math.max(0,l)}),d=new i().create(u.width,u.height);await s.render({canvas:d.canvas,canvasContext:d.context,viewport:u}).promise;let f=d.canvas.toDataURL();return n.toDataURL?f:await(await fetch(f)).arrayBuffer()}async function g(e){if(n)return u;if(t){if(!e)throw Error(`Parameter "canvasImport" is required in Node.js environment.`);return await f(e),p(),d}throw Error(`Unsupported environment for canvas creation.`)}async function _(e){let t=o(e)?e:await r(e),n=await Promise.all(Array.from({length:t.numPages},(e,n)=>v(t,n+1)));return{totalPages:t.numPages,links:n.flat()}}async function v(e,t){let n=await(await e.getPage(t)).getAnnotations(),r=[];for(let e of n)e.subtype===`Link`&&e.url&&r.push(e.url);return r}const y=[`xmp:createdate`,`xmp:modifydate`,`xmp:metadatadate`,`xap:createdate`,`xap:modifydate`,`xap:metadatadate`];async function b(e,t={}){let n=await(o(e)?e:await r(e)).getMetadata(),a=n?.info||{};if(t.parseDates){let{PDFDateString:e}=await i();a?.CreationDate&&(a.CreationDate=e.toDateObject(a?.CreationDate)),a?.ModDate&&(a.ModDate=e.toDateObject(a?.ModDate)),n.metadata&&=new Proxy(n.metadata,{get(e,t){return t===`get`?t=>{let n=e.get(t);return y.includes(t)&&n?x(n):n}:e[t]}})}return{info:a,metadata:n?.metadata||{}}}function x(e){if(!e)return;let t=Date.parse(e);if(!Number.isNaN(t))return new Date(t)}async function S(e,t={}){let{mergePages:n=!1}=t,i=o(e)?e:await r(e),a=await Promise.all(Array.from({length:i.numPages},(e,t)=>C(i,t+1)));return{totalPages:i.numPages,text:n?a.join(`
8
- `).replace(/\s+/g,` `):a}}async function C(e,t){return(await(await e.getPage(t)).getTextContent()).items.filter(e=>e.str!=null).map(e=>e.str+(e.hasEOL?`
9
- `:``)).join(``)}async function w(e){await a(e,{reload:!0})}async function T(e){await a(e.pdfjs,{reload:!0})}const E=async(...e)=>(await a(),await b(...e)),D=async(...e)=>(await a(),await S(...e)),O=async(...e)=>(await a(),await m(...e)),k=async(...e)=>(await a(),await h(...e)),A=async(...e)=>(await a(),await _(...e));export{T as configureUnPDF,g as createIsomorphicCanvasFactory,w as definePDFJSModule,O as extractImages,A as extractLinks,D as extractText,r as getDocumentProxy,E as getMeta,i as getResolvedPDFJS,k as renderPageAsImage,a as resolvePDFJSImport};
@@ -1 +0,0 @@
1
- var e=class{nextId=1;pending=new Map;handler;disposed=!1;constructor(e){this.port=e,this.handler=e=>{if(e.data?.type!==`realm-rpc-res`)return;let t=e.data,n=this.pending.get(t.id);n&&(this.pending.delete(t.id),typeof t.error==`string`?n.reject(Error(t.error)):n.resolve(t.result))},e.addEventListener(`message`,this.handler),e.start?.()}call(e,t,n=[]){if(this.disposed)return Promise.reject(Error(`realm-rpc: client disposed`));let r=this.nextId++,i={type:`realm-rpc-req`,id:r,channel:e,op:t,args:n};return new Promise((e,t)=>{this.pending.set(r,{resolve:e,reject:t}),this.port.postMessage(i)})}dispose(){if(this.disposed)return;this.disposed=!0,this.port.removeEventListener(`message`,this.handler);let e=Error(`realm-rpc: client disposed`);for(let t of this.pending.values())t.reject(e);this.pending.clear()}};const t=new Set([`bcrypt`,`better-sqlite3`,`canvas`,`cpu-features`,`fsevents`,`leveldown`,`libxmljs`,`libxmljs2`,`node-gyp-build`,`node-sass`,`puppeteer`,`robotjs`,`sass-embedded`,`sharp`,`snappy`,`sqlite3`,`tree-sitter`,`usb`]),n={sharp:` Use the built-in 'convert' shell command for image work.`,canvas:` Use the built-in 'convert' / OffscreenCanvas for image work.`,"better-sqlite3":` Use the built-in 'sqlite3' shell command (sql.js WASM).`,sqlite3:` Use the built-in 'sqlite3' shell command (sql.js WASM).`,bcrypt:` Use crypto.subtle.digest() with PBKDF2 / Argon2 in pure JS.`,puppeteer:` Use the built-in browser-automation shell commands.`};function r(e,t){let r=n[t]??``;return Error(`require('${e}'): '${t}' is a Node native module (C++ bindings) — it cannot run in the browser sandbox.${r}`)}function i(e,t,n){return new Promise((r,i)=>{let a=setTimeout(()=>{i(Error(`Timed out after ${t/1e3}s loading ${n}`))},t);e.then(e=>{clearTimeout(a),r(e)},e=>{clearTimeout(a),i(e)})})}const a=new Set([`http`,`https`,`net`,`tls`,`dgram`,`dns`,`cluster`,`worker_threads`,`child_process`,`crypto`,`os`,`stream`,`zlib`,`vm`,`v8`,`perf_hooks`,`readline`,`repl`,`tty`,`inspector`]),o=new Set([`fs`,`process`,`buffer`]);var s=class extends Error{constructor(e){super(`Process exited with code ${e}`),this.code=e,this.name=`NodeExitError`}};function c(e){let t=/\brequire\s*\(\s*(['"`])([^'"`\s]+)\1\s*\)/g,n=new Set,r;for(;(r=t.exec(e))!==null;)n.add(r[2]);return[...n]}function l(e){if(typeof e==`string`)return e;if(e==null)return String(e);try{return JSON.stringify(e)}catch{return String(e)}}async function u(n,u,p=f){let m=[],h=[],g=e=>{m.push(typeof e==`string`?e:String(e))},_=e=>{h.push(typeof e==`string`?e:String(e))},v={log:(...e)=>g(`${e.map(l).join(` `)}\n`),info:(...e)=>g(`${e.map(l).join(` `)}\n`),warn:(...e)=>_(`${e.map(l).join(` `)}\n`),error:(...e)=>_(`${e.map(l).join(` `)}\n`)},y=n.stdin??``,b=!1,x={isTTY:!1,read(){return b?null:(b=!0,y)},toString(){return y},[Symbol.asyncIterator](){return{async next(){return b?{value:void 0,done:!0}:(b=!0,{value:y,done:!1})}}}},S={argv:n.argv,env:n.env,cwd:()=>n.cwd,exit:e=>{throw new s(Number.isFinite(e)?Number(e):0)},stdin:x,stdout:{write:g},stderr:{write:_}},C=new e(u),w={readFile:e=>C.call(`vfs`,`readFile`,[e]),readFileBinary:e=>C.call(`vfs`,`readFileBinary`,[e]),writeFile:(e,t)=>C.call(`vfs`,`writeFile`,[e,t]),writeFileBinary:(e,t)=>C.call(`vfs`,`writeFileBinary`,[e,t]),readDir:e=>C.call(`vfs`,`readDir`,[e]),exists:e=>C.call(`vfs`,`exists`,[e]),stat:e=>C.call(`vfs`,`stat`,[e]),mkdir:e=>C.call(`vfs`,`mkdir`,[e]),rm:e=>C.call(`vfs`,`rm`,[e]),fetchToFile:async(e,t)=>{let n=await E(e);if(!n.ok)throw Error(`fetch ${n.status} ${n.statusText}`);let r=new Uint8Array(await n.arrayBuffer());return await C.call(`vfs`,`writeFileBinary`,[t,r]),r.byteLength}},T=e=>C.call(`exec`,`run`,[e]);async function E(e,t){let n=e instanceof Request?e.url:e instanceof URL?e.toString():String(e),r=await C.call(`fetch`,`request`,[n,d(t,e)]),i=r.body.byteLength===0?null:r.body.buffer.slice(r.body.byteOffset,r.body.byteOffset+r.body.byteLength),a=new Response(i,{status:r.status,statusText:r.statusText,headers:r.headers});return Object.defineProperty(a,`url`,{value:r.url||n}),a}let D=c(n.code).map(e=>e.startsWith(`node:`)?e.slice(5):e).filter(e=>!o.has(e)&&!a.has(e)),O=D.filter(e=>t.has(e)),k=D.filter(e=>!t.has(e));for(let e of O)_(`Warning: ${r(e,e).message}\n`);let A=Object.create(null);if(k.length>0){let e=await Promise.allSettled(k.map(async e=>{let t=await i(p(e),15e3,`require('${e}')`);A[e]=t&&`default`in t?t.default:t}));for(let t=0;t<e.length;t++){let n=e[t];if(n.status===`rejected`){let e=n.reason instanceof Error?n.reason.message:String(n.reason);_(`Warning: failed to pre-load require('${k[t]}'): ${e}\n`)}}}let j=e=>{let n=e.startsWith(`node:`)?e.slice(5):e;if(n===`fs`)return w;if(n===`process`)return S;if(n===`buffer`)return{Buffer:globalThis.Buffer};if(n===`path`){if(`path`in A)return A.path;if(e in A)return A[e];throw Error(`require('${e}'): path module not pre-loaded. Add require('path') as a static import.`)}if(t.has(n))throw r(e,n);if(a.has(n))throw Error(`require('${e}'): Node built-in '${n}' is not available in the browser environment.${{http:` Use fetch() instead.`,https:` Use fetch() instead.`,child_process:` Use exec() which is available as a shell bridge.`,crypto:` Use globalThis.crypto (Web Crypto API) instead.`}[n]||``}`);if(e in A)return A[e];if(n in A)return A[n];throw Error(`require('${e}'): module not pre-loaded. Use a string literal so it can be pre-fetched, or use \`await import('https://esm.sh/${e}')\` directly.`)},M={exports:{},filename:n.filename},N=0;try{let e=Object.getPrototypeOf(async function(){}).constructor;await new e(`fs`,`process`,`console`,`require`,`module`,`exports`,`exec`,`fetch`,`"use strict";\n${n.code}`)(w,S,v,j,M,M.exports,T,E)}catch(e){e instanceof s?N=e.code:(_(`${e instanceof Error?e.stack??e.message:String(e)}\n`),N=1)}C.dispose();let P={type:`realm-done`,stdout:m.join(``),stderr:h.join(``),exitCode:N};u.postMessage(P)}function d(e,t){if(!e&&!(t instanceof Request))return;let n=t instanceof Request?t:null,r=(e?.method??n?.method??`GET`).toUpperCase(),i={};if(e?.headers)if(e.headers instanceof Headers)e.headers.forEach((e,t)=>{i[t]=e});else if(Array.isArray(e.headers))for(let[t,n]of e.headers)i[t]=n;else Object.assign(i,e.headers);else n&&n.headers.forEach((e,t)=>{i[t]=e});let a;return e?.body!==void 0&&e?.body!==null&&e?.body!==``&&(a=typeof e.body==`string`?e.body:String(e.body)),{method:r,headers:i,body:a}}async function f(e){return await import(`https://esm.sh/`+e)}const p={postMessage:(e,t)=>t?self.postMessage(e,t):self.postMessage(e),addEventListener:(e,t)=>self.addEventListener(e,t),removeEventListener:(e,t)=>self.removeEventListener(e,t)};self.addEventListener(`message`,e=>{if(e.data?.type!==`realm-init`)return;let t=e.data;t.kind===`js`&&u(t,p).catch(e=>{let t={type:`realm-error`,message:e instanceof Error?e.message:String(e)};self.postMessage(t)})});
@@ -1 +0,0 @@
1
- import{t as e}from"./panel-rpc-f0zFUOaZ.js";var t=typeof chrome<`u`&&!!chrome?.runtime?.id;function n(){return t?o:typeof window>`u`?i:a}async function r(){if(typeof window<`u`)return{origin:window.location.origin,href:window.location.href};let t=e();if(!t)throw Error(`OAuth from worker context requires the panel-RPC bridge (no page-info available)`);let n=await t.call(`page-info`,void 0);return{origin:n.origin,href:n.href}}async function i(t){let n=e();if(!n)return console.error(`[oauth-service] panel-RPC client unavailable in worker`),null;try{return(await n.call(`oauth-popup`,{url:t},{timeoutMs:13e4})).redirectUrl}catch(e){return console.error(`[oauth-service] oauth-popup RPC failed:`,e instanceof Error?e.message:String(e)),null}}async function a(e){return new Promise(t=>{let n=window.open(e,`_blank`,`width=500,height=700,popup=yes`),r=!1,i=null,a=()=>{r||(r=!0,window.removeEventListener(`message`,o),clearTimeout(s),i&&clearInterval(i))},o=e=>{if(e.data?.type!==`oauth-callback`||e.origin!==window.location.origin||n&&e.source!==n)return;if(a(),e.data.error){console.error(`[oauth-service] CLI OAuth error:`,e.data.error),t(null);return}let r=e.data.redirectUrl;typeof r!=`string`&&r!=null||t(r??null)};window.addEventListener(`message`,o),(location.pathname.startsWith(`/electron`)||new URLSearchParams(location.search).get(`runtime`)===`electron-overlay`)&&(i=setInterval(async()=>{if(!r)try{let e=await fetch(`/api/oauth-result`);if(e.status===204)return;let n=await e.json();if(r)return;if(a(),n.error){console.error(`[oauth-service] Server relay OAuth error:`,n.error),t(null);return}t(n.redirectUrl??null)}catch(e){console.warn(`[oauth-service] Poll failed:`,e instanceof Error?e.message:String(e))}},1e3));let s=setTimeout(()=>{a();try{n?.close()}catch{}t(null)},12e4)})}async function o(e){return new Promise(t=>{let n=!1,r=()=>{n||(n=!0,chrome.runtime.onMessage.removeListener(i),clearTimeout(a))},i=e=>{if(e?.source===`service-worker`&&e?.payload?.type===`oauth-result`){if(r(),e.payload.error){console.error(`[oauth-service] Extension OAuth error:`,e.payload.error),t(null);return}t(e.payload.redirectUrl??null)}};chrome.runtime.onMessage.addListener(i),chrome.runtime.sendMessage({source:`panel`,payload:{type:`oauth-request`,providerId:`oauth`,authorizeUrl:e}}).catch(e=>{console.error(`[oauth-service] Failed to send OAuth request to service worker:`,e)});let a=setTimeout(()=>{r(),t(null)},12e4)})}export{n as createOAuthLauncher,r as getOAuthPageOrigin};
@@ -1 +0,0 @@
1
- import{r as e}from"./chunk-jRWAZmH_.js";var t=e({getPanelRpcClient:()=>a,installPanelRpcHandler:()=>i,panelRpcChannelName:()=>r}),n=`slicc-panel-rpc`;function r(e){return e?`${n}:${e}`:n}function i(e){if(typeof BroadcastChannel!=`function`)return()=>{};let t=new BroadcastChannel(r(e.instanceId)),n=(e,n,r)=>{let i={type:`panel-rpc-response`,id:e};r===void 0?i.result=n:i.error=r;try{t.postMessage(i)}catch(t){let n=t instanceof Error?t.message:String(t);console.warn(`panel-rpc: failed to post response for id=${e}: ${n}`)}},i=async t=>{let r=t.data;if(!r||r.type!==`panel-rpc-request`)return;let i=e.handlers[r.op];if(!i){n(r.id,void 0,`panel-rpc: no handler for op '${r.op}'`);return}try{let e=await i(r.payload);n(r.id,e)}catch(e){n(r.id,void 0,e instanceof Error?e.message:String(e))}};return t.addEventListener(`message`,i),()=>{t.removeEventListener(`message`,i);try{t.close()}catch{}}}function a(){return globalThis.__slicc_panelRpc??null}export{t as n,a as t};
@@ -1 +0,0 @@
1
- function e(){return{"page-info":()=>({origin:window.location.origin,href:window.location.href,title:document.title||``}),screencapture:async({mimeType:e,quality:t})=>{let n=await s(e,t),r=await n.arrayBuffer(),i=await c(n);return{bytes:r,width:i.width,height:i.height,mimeType:e}},"speak-text":async({text:e,lang:t,voice:n,rate:r,pitch:i,volume:a})=>{if(typeof speechSynthesis>`u`)throw Error(`speechSynthesis is unavailable in this page`);return await new Promise((o,s)=>{let c=new SpeechSynthesisUtterance(e);if(t!==void 0&&(c.lang=t),r!==void 0&&(c.rate=r),i!==void 0&&(c.pitch=i),a!==void 0&&(c.volume=a),n){let e=speechSynthesis.getVoices().find(e=>e.name===n);e&&(c.voice=e)}c.onend=()=>o(),c.onerror=e=>s(Error(`speak: ${e.error||`utterance failed`}`)),speechSynthesis.speak(c)}),{done:!0}},"list-voices":async()=>{if(typeof speechSynthesis>`u`)throw Error(`speechSynthesis is unavailable in this page`);let e=speechSynthesis.getVoices();return e.length>0?{voices:e.map(o)}:{voices:(await new Promise(e=>{let t=()=>{speechSynthesis.removeEventListener(`voiceschanged`,t),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,t),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,t),e(speechSynthesis.getVoices())},1e3)})).map(o)}},"play-audio":async({bytes:e,volume:t})=>{if(typeof AudioContext>`u`)throw Error(`Web Audio API is unavailable in this page`);let n=new AudioContext;try{let r=await n.decodeAudioData(e.slice(0)),i=n.createBufferSource();if(i.buffer=r,t!==void 0){let e=n.createGain();e.gain.value=Math.max(0,Math.min(1,t)),i.connect(e),e.connect(n.destination)}else i.connect(n.destination);await new Promise(e=>{i.onended=()=>e(),i.start()})}finally{try{await n.close()}catch{}}return{done:!0}},"play-chime":async({tone:e})=>{let t={success:[880,1320],error:[440,220],notify:[660,660]},[n,r]=t[e??`notify`]??t.notify;if(typeof AudioContext>`u`)throw Error(`Web Audio API is unavailable in this page`);let i=new AudioContext;try{let e=i.currentTime;for(let[t,a]of[n,r].entries()){let n=i.createOscillator();n.type=`sine`,n.frequency.value=a;let r=i.createGain();r.gain.setValueAtTime(1e-4,e+t*.18),r.gain.exponentialRampToValueAtTime(.2,e+t*.18+.02),r.gain.exponentialRampToValueAtTime(1e-4,e+t*.18+.18),n.connect(r),r.connect(i.destination),n.start(e+t*.18),n.stop(e+t*.18+.2)}await new Promise(e=>setTimeout(e,450))}finally{try{await i.close()}catch{}}return{done:!0}},"clipboard-read-text":async()=>{if(!navigator.clipboard?.readText)throw Error(`clipboard API unavailable`);return{text:await navigator.clipboard.readText()}},"clipboard-write-text":async({text:e})=>{if(!navigator.clipboard?.writeText)throw Error(`clipboard API unavailable`);return await u(),await navigator.clipboard.writeText(e),{done:!0}},"clipboard-write-image":async({bytes:e,mimeType:t})=>{if(!navigator.clipboard?.write||typeof ClipboardItem>`u`)throw Error(`clipboard image API unavailable`);let n,r=new Blob([e],{type:t});return n=t===`image/png`?r:await l(r),await u(),await navigator.clipboard.write([new ClipboardItem({"image/png":n})]),{done:!0}},"window-open":async({url:e,target:t,features:n})=>({opened:window.open(e,t??`_blank`,n??`noopener,noreferrer`)!==null}),"oauth-popup":async({url:e})=>({redirectUrl:await a(e)}),"capture-camera":async e=>await n(e),"enumerate-media-devices":async()=>{if(!navigator.mediaDevices?.enumerateDevices)throw Error(`enumerateDevices is not supported in this browser`);let e=await navigator.mediaDevices.enumerateDevices(),t=e=>({deviceId:e.deviceId,label:e.label||``,...e.groupId?{groupId:e.groupId}:{}});return{videoinputs:e.filter(e=>e.kind===`videoinput`).map(t),audioinputs:e.filter(e=>e.kind===`audioinput`).map(t)}}}}var t=1500;async function n(e){if(!navigator.mediaDevices?.getUserMedia)throw Error(`getUserMedia is not supported in this browser`);let n=e.mode===`photo`||e.captureVideo!==!1,a=!!e.captureAudio&&e.mode===`video`;if(!n&&!a)throw Error(`camera capture: at least one of video or audio must be requested`);let o=await i({wantVideo:n,videoDeviceId:n?await r(e.deviceId,`videoinput`):void 0,audioDeviceId:a?await r(e.audioDeviceId,`audioinput`):void 0,wantAudio:a,width:e.width,height:e.height,frameRate:e.frameRate,exact:!!e.exactSize});try{let r=null,i=0,a=0;if(n){r=document.createElement(`video`),r.srcObject=o,r.muted=!0,r.playsInline=!0;let e=r;await new Promise((t,n)=>{e.onloadedmetadata=()=>e.play().then(()=>t()).catch(n),e.onerror=()=>n(Error(`Failed to load camera stream`))}),await new Promise(e=>requestAnimationFrame(()=>e())),await new Promise(e=>requestAnimationFrame(()=>e())),i=e.videoWidth,a=e.videoHeight}if(e.mode===`photo`){if(!r)throw Error(`photo capture requires a video track`);let n=e.warmupMs??t;n>0&&await new Promise(e=>setTimeout(e,n));let o=document.createElement(`canvas`);o.width=i,o.height=a;let s=o.getContext(`2d`);if(!s)throw Error(`Failed to get canvas context`);s.drawImage(r,0,0,i,a);let c=await new Promise((t,n)=>{o.toBlob(e=>e?t(e):n(Error(`Failed to encode photo`)),e.mimeType,e.quality)});return{bytes:await c.arrayBuffer(),mimeType:c.type||e.mimeType,width:i,height:a}}let s=Math.max(100,Math.min(e.durationMs??5e3,6e4)),c=typeof MediaRecorder<`u`&&MediaRecorder.isTypeSupported(e.mimeType)?e.mimeType:`video/webm`,l=new MediaRecorder(o,{mimeType:c}),u=[];l.ondataavailable=e=>{e.data&&e.data.size>0&&u.push(e.data)};let d=new Promise(e=>{l.onstop=()=>e()});l.start(),await new Promise(e=>setTimeout(e,s)),l.stop(),await d;let f=new Blob(u,{type:c});return{bytes:await f.arrayBuffer(),mimeType:f.type||c,width:i,height:a,durationMs:s}}finally{o.getTracks().forEach(e=>e.stop())}}async function r(e,t){if(e===void 0||e===``)return;if(!/^\d+$/.test(e))return e;if(!navigator.mediaDevices?.enumerateDevices)return;let n=parseInt(e,10);return(await navigator.mediaDevices.enumerateDevices()).filter(e=>e.kind===t)[n]?.deviceId}async function i(e){let t=t=>{if(!e.wantVideo)return!1;let n={};return e.videoDeviceId&&(n.deviceId={exact:e.videoDeviceId}),e.width&&(n.width=t===`exact`?{exact:e.width}:{ideal:e.width}),e.height&&(n.height=t===`exact`?{exact:e.height}:{ideal:e.height}),e.frameRate&&(n.frameRate=t===`exact`?{exact:e.frameRate}:{ideal:e.frameRate}),Object.keys(n).length>0?n:!0},n=()=>e.wantAudio?e.audioDeviceId?{deviceId:{exact:e.audioDeviceId}}:!0:!1;try{return await navigator.mediaDevices.getUserMedia({video:t(e.exact?`exact`:`ideal`),audio:n()})}catch(r){let i=r?.name;if(!e.exact||i!==`OverconstrainedError`&&i!==`NotReadableError`)throw r;return console.warn(`panel-rpc:capture-camera: exact ${e.width??`?`}x${e.height??`?`}@${e.frameRate??`?`} unmet, falling back to ideal`),await navigator.mediaDevices.getUserMedia({video:t(`ideal`),audio:n()})}}function a(e){return new Promise(t=>{let n=window.open(e,`_blank`,`width=500,height=700,popup=yes`),r=!1,i=null,a=()=>{r||(r=!0,window.removeEventListener(`message`,o),clearTimeout(s),i&&clearInterval(i))},o=e=>{if(e.data?.type!==`oauth-callback`||e.origin!==window.location.origin||n&&e.source!==n)return;if(a(),e.data.error){console.error(`[panel-rpc:oauth-popup] OAuth error:`,e.data.error),t(null);return}let r=e.data.redirectUrl;typeof r!=`string`&&r!=null||t(r??null)};window.addEventListener(`message`,o),(location.pathname.startsWith(`/electron`)||new URLSearchParams(location.search).get(`runtime`)===`electron-overlay`)&&(i=setInterval(async()=>{if(!r)try{let e=await fetch(`/api/oauth-result`);if(e.status===204)return;let n=await e.json();if(r)return;if(a(),n.error){console.error(`[panel-rpc:oauth-popup] Server relay OAuth error:`,n.error),t(null);return}t(n.redirectUrl??null)}catch{}},1e3));let s=setTimeout(()=>{a();try{n?.close()}catch{}t(null)},12e4)})}function o(e){return{name:e.name,lang:e.lang,default:e.default}}async function s(e,t){if(!navigator.mediaDevices?.getDisplayMedia)throw Error(`screen capture is not supported in this browser`);let n=await navigator.mediaDevices.getDisplayMedia({video:!0,audio:!1});try{let r=document.createElement(`video`);r.srcObject=n,r.muted=!0,r.playsInline=!0,await new Promise((e,t)=>{r.onloadedmetadata=()=>r.play().then(()=>e()).catch(t),r.onerror=()=>t(Error(`Failed to load video stream`))}),await new Promise(e=>requestAnimationFrame(()=>e()));let i=r.videoWidth,a=r.videoHeight,o=document.createElement(`canvas`);o.width=i,o.height=a;let s=o.getContext(`2d`);if(!s)throw Error(`Failed to get canvas context`);return s.drawImage(r,0,0,i,a),await new Promise((n,r)=>{o.toBlob(e=>e?n(e):r(Error(`Failed to create image blob`)),e,t)})}finally{n.getTracks().forEach(e=>e.stop())}}async function c(e){let t=URL.createObjectURL(e);try{let e=new Image;return await new Promise((n,r)=>{e.onload=()=>n(),e.onerror=()=>r(Error(`Failed to decode capture`)),e.src=t}),{width:e.naturalWidth,height:e.naturalHeight}}finally{URL.revokeObjectURL(t)}}async function l(e){let t=URL.createObjectURL(e);try{let e=new Image;await new Promise((n,r)=>{e.onload=()=>n(),e.onerror=()=>r(Error(`Failed to load image for clipboard conversion`)),e.src=t});let n=document.createElement(`canvas`);n.width=e.naturalWidth,n.height=e.naturalHeight;let r=n.getContext(`2d`);if(!r)throw Error(`Failed to get canvas context`);return r.drawImage(e,0,0),await new Promise((e,t)=>{n.toBlob(n=>n?e(n):t(Error(`PNG re-encode failed`)),`image/png`)})}finally{URL.revokeObjectURL(t)}}async function u(e=5*6e4){typeof document>`u`||typeof document.hasFocus==`function`&&(document.hasFocus()||await new Promise((t,n)=>{let r=()=>{window.removeEventListener(`focus`,i),document.removeEventListener(`visibilitychange`,a),clearTimeout(o)},i=()=>{document.hasFocus()&&(r(),t())},a=()=>{document.visibilityState===`visible`&&document.hasFocus()&&(r(),t())},o=setTimeout(()=>{r(),n(Error(`timed out waiting for window focus`))},e);window.addEventListener(`focus`,i),document.addEventListener(`visibilitychange`,a)}))}export{e as createStandalonePanelRpcHandlers};
@@ -1,28 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/magick-wasm-DzXB38t6.js","assets/index-D7t2PagM.js","assets/chunk-jRWAZmH_.js","assets/preload-helper-ca-nBW7U.js","assets/bedrock-camp-CqXHYC67.js","assets/env-api-keys-DxKb6C4Q.js","assets/simple-options-imi_RHvn.js","assets/json-parse-C5jSA6JB.js","assets/fs-kweAFR1R.js","assets/logger-B-No_qN_.js","assets/backend-local-mju0Ps5U.js","assets/mount-picker-popup-DJJfRF_c.js","assets/tool-ui-B3Bihlxa.js","assets/path-utils-d3qOVZOu.js","assets/tray-follower-status-DKq8RTLd.js","assets/mime-types-DL940yDZ.js","assets/mount-CE7OcF7K.js","assets/telemetry-B7l3TtVP.js","assets/index-eWuuouO-.css","assets/azure-openai-CzgLPXOv.js","assets/openai-CRGaNv9i.js","assets/local-llm-DCGyZkq_.js","assets/openai-completions-D5rB4vsV.js","assets/github-copilot-headers-B6Fvsk-Y.js","assets/headers-DkHU-pcw.js","assets/sanitize-unicode-BD2XKRoV.js","assets/adobe-Buh8t3t7.js","assets/oauth-service-B7as8KRE.js","assets/panel-rpc-f0zFUOaZ.js","assets/github-B4XCkOr2.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"./tool-ui-B3Bihlxa.js";import{a as r,i,r as a,t as o}from"./bedrock-camp-CqXHYC67.js";import{d as s,l as c,u as l}from"./simple-options-imi_RHvn.js";import{f as u,t as d,u as f}from"./tray-follower-status-DKq8RTLd.js";import{i as p}from"./telemetry-B7l3TtVP.js";function m(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 h(e){let t=e.mimeType||`application/octet-stream`;return`${e.name} (${t}, ${m(e.size)})`}function g(e,t=`The original file lives on a remote runtime and is not accessible here.`){return e?.length?e.map(e=>{if(!e.path)return{...e};let{path:n,...r}=e;return e.kind===`image`&&e.data||e.kind===`text`&&e.text!==void 0?r:{...r,error:r.error??t}}):[]}var _=t(`image-processor`),v=3932160,y=1568,b=new Set([`image/jpeg`,`image/png`,`image/gif`,`image/webp`]);function x(e){return b.has(e)}function S(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 C(e){if(!x(e.mimeType))return _.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=S(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;_.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-DzXB38t6.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]));i=e.getMagick,a=e.MIME_TO_MAGICK_FORMAT}catch(e){return _.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 _.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=y/o,i=Math.round(n*e),a=Math.round(r*e);t.resize(i,a),_.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>v&&s!==`JPEG`?(_.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>v&&(_.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 _.warn(`ImageMagick produced no output`),{type:`text`,text:`[Image removed: could not be processed (empty output from resize)]`};if(i.data.length>v)return _.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 _.info(`Image processed successfully`,{originalBase64:t,newBase64:c.length,mimeType:i.mime}),{type:`image`,data:c,mimeType:i.mime}}catch(n){return _.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`})]`}}}var w=`agent-sessions`,T=1,E=`sessions`;function D(){return new Promise((e,t)=>{let n=indexedDB.open(w,T);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(E)||e.createObjectStore(E,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}var O=class{dbPromise=null;getDB(){return this.dbPromise||=D(),this.dbPromise}async save(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(E,`readwrite`).objectStore(E).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(E,`readonly`).objectStore(E).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(E,`readwrite`).objectStore(E).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(E,`readonly`).objectStore(E).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(E,`readwrite`).objectStore(E).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()}}};t(`tool-adapter`),t(`context-compaction`);function k(e){let t=[];for(let n of e){let e=n;switch(e.role){case`user`:t.push(`<user>\n${A(e.content)}\n</user>`);break;case`assistant`:t.push(`<assistant>\n${A(e.content)}\n</assistant>`);break;case`toolResult`:{let n=e.toolName??`tool`;t.push(`<tool-result name="${n}">\n${A(e.content)}\n</tool-result>`);break}case`bashExecution`:t.push(`<bash>\n$ ${e.command??``}\n${e.output??``}\n</bash>`);break;case`branchSummary`:case`compactionSummary`:t.push(`<prior-summary>\n${e.summary??``}\n</prior-summary>`);break;default:t.push(`<${e.role}>\n${A(e.content)}\n</${e.role}>`)}}return t.join(`
3
-
4
- `)}function A(e){if(typeof e==`string`)return e;if(!Array.isArray(e))return``;let t=[];for(let n of e){let e=n;e.type===`text`&&e.text?t.push(e.text):e.type===`thinking`&&e.thinking?t.push(`[thinking] ${e.thinking}`):e.type===`toolCall`?t.push(`[tool-call ${e.name??`?`}] ${JSON.stringify(e.arguments??{})}`):e.type===`image`&&t.push(`[image]`)}return t.join(`
5
- `)}var j=`From the conversation above, extract durable memories worth persisting to a global memory file shared across future sessions.
6
-
7
- Focus on:
8
- - User preferences, working style, opinions stated explicitly.
9
- - Stable project facts (architecture decisions, conventions, constraints).
10
- - Validated approaches the user accepted ("yes, exactly", "perfect"), not just corrections.
11
- - External resources/links the user named.
12
-
13
- DO NOT include:
14
- - Ephemeral state (current task, in-progress work).
15
- - Information already obvious from the codebase (file paths, function names, framework conventions).
16
- - Generic restatements of what the conversation was about.
17
-
18
- If nothing in the conversation is worth persisting, return exactly the single line:
19
- NONE
20
-
21
- Otherwise, output ONLY a markdown bullet list (one bullet per memory), no headers, no preamble, no follow-up. Each bullet is one line. Be specific. Prefer one fact per bullet over multi-clause sentences.`;function M(e){return`You are a context compaction assistant. You are shown the prefix of a conversation between a user and an AI coding assistant, and asked to produce either a structured summary, durable memory bullets, or a short title — depending on the user's instruction.
22
-
23
- Do NOT continue the conversation. Do NOT answer questions inside the conversation. Output ONLY what the user asks for in the format specified.
24
-
25
- <conversation>
26
- ${e}
27
- </conversation>`}async function N(e,t,n,i,a,o,s){let c=await r(e,{systemPrompt:n,messages:[{role:`user`,content:[{type:`text`,text:i}],timestamp:Date.now()}]},{maxTokens:a,apiKey:t,headers:o,signal:s});if(c.stopReason===`error`)throw Error(`Compaction call failed: ${c.errorMessage||`Unknown error`}`);return c.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
28
- `).trim()}async function ee(e){let t=M(k(e.messages));return N(e.model,e.apiKey,t,e.instruction,e.maxTokens,e.headers,e.signal)}var te=j,ne=`Generate a short title (3 to 6 words) summarizing what this conversation was about. Output ONLY the title text — no quotes, no punctuation other than what belongs in the title, no preamble.`;function re(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??ie(t.state)??`Mirroring another browser.`}}function ie(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 ae(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 oe=Object.assign({"/packages/dev-tools/providers.build.json":{include:[`*`],exclude:[]}})[`/packages/dev-tools/providers.build.json`]??{include:[`*`],exclude:[]};function se(e){let{include:t,exclude:n}=oe;return n.includes(`*`)||n.includes(e)?!1:!!(t.includes(`*`)||t.includes(e))}var ce=Object.assign({"./built-in/azure-ai-foundry.ts":()=>n(()=>import(`./azure-ai-foundry-C3Uy67aF.js`),[]),"./built-in/azure-openai.ts":()=>n(()=>import(`./azure-openai-CzgLPXOv.js`),__vite__mapDeps([19,4,2,3,5,6,7,20])),"./built-in/bedrock-camp.ts":()=>n(()=>import(`./bedrock-camp-CqXHYC67.js`).then(e=>e.n),__vite__mapDeps([4,2,3,5,6,7])),"./built-in/local-llm.ts":()=>n(()=>import(`./local-llm-DCGyZkq_.js`),__vite__mapDeps([21,4,2,3,5,6,7,22,23,24,25,20,9]))}),le=Object.assign({"/packages/webapp/providers/adobe.ts":()=>n(()=>import(`./adobe-Buh8t3t7.js`),__vite__mapDeps([26,3,4,2,5,6,7,27,28])),"/packages/webapp/providers/github.ts":()=>n(()=>import(`./github-B4XCkOr2.js`),__vite__mapDeps([29,3,4,2,5,6,7,14,27,28]))}),P=new Map,F=null;function ue(){return F||(F=(async()=>{for(let[e,t]of Object.entries(ce)){let e=await t();e.config&&se(e.config.id)&&(P.set(e.config.id,e.config),e.register?.())}for(let[e,t]of Object.entries(le)){let e=await t();e.config&&(P.set(e.config.id,e.config),e.register?.())}})(),F)}function de(e){return P.get(e)}function fe(){return[...P.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 pe=`slicc_oauth_extra_domains`;function me(e){try{let t=e.getItem(pe);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 he=e({addAccount:()=>q,applyProviderDefaults:()=>Se,clearAllSettings:()=>Re,describeInvalidJoinUrl:()=>ae,downloadProviders:()=>Le,exportProviders:()=>Ie,getAccounts:()=>G,getAllAvailableModels:()=>Ee,getApiKey:()=>Fe,getApiKeyForProvider:()=>Ae,getApiVersionForProvider:()=>Me,getAvailableProviders:()=>B,getBaseUrlForProvider:()=>Y,getDeploymentForProvider:()=>je,getExtraOAuthDomains:()=>De,getOAuthAccountInfo:()=>be,getProviderConfig:()=>V,getProviderModels:()=>U,getSelectedModelId:()=>X,getSelectedProvider:()=>Z,isModelHiddenFromPicker:()=>we,removeAccount:()=>J,resolveCurrentModel:()=>Q,resolveModelById:()=>ze,saveOAuthAccount:()=>Oe,setSelectedModelId:()=>Ne,showProviderSettings:()=>$}),I=c,L=l;function ge(){return typeof chrome<`u`&&!!chrome?.runtime?.id}var R=`slicc_accounts`,z=`selected-model`,_e=[`slicc_provider`,`slicc_api_key`,`slicc_base_url`,`anthropic_api_key`,`api_provider`,`azure_resource`,`bedrock_region`],ve=!1;function ye(){if(!ve){ve=!0;for(let e of _e)try{localStorage.removeItem(e)}catch{}}}function B(){let e=s().filter(se),t=fe();return[...new Set([...e,...t])]}function V(e){return de(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=o(Y(`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 W.error(`Provider getModelIds callback failed`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}let r=new Map;for(let e of s())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 W.error(`Failed to load models`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}}function be(e){let t=G().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 xe=Object.assign({})[`/packages/webapp/providers.json`]??[],W=t(`provider-settings`);function Se(e=xe){if(e.length===0||G().length>0)return;let t=new Set(B());for(let n of e)if(!(!n.providerId||!n.apiKey)){if(!t.has(n.providerId)){W.warn(`Unknown provider "${n.providerId}" in providers.json — skipping`);continue}q(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}`)}var Ce=[/haiku/i];function we(e){return Ce.some(t=>t.test(e))}function Te(e){return e.filter(e=>!we(e.id))}function Ee(){let e=G();if(e.length===0)return[];let t=new Map;for(let n of e){if(t.has(n.providerId))continue;let e=Te(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 G(){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 De(e){return me(localStorage)[e]??[]}function K(e){localStorage.setItem(R,JSON.stringify(e))}function q(e,t,n,r,i){let a=G().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),K(a)}async function J(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&&W.warn(`OAuth replica DELETE non-ok`,{providerId:e,status:t.status})}}catch(n){W.error(`OAuth replica removal failed`,{providerId:e,isExtension:t,error:n instanceof Error?n.message:String(n)})}K(G().filter(t=>t.providerId!==e));let n=localStorage.getItem(z)??``,r=n.indexOf(`:`);r>0&&n.slice(0,r)===e&&localStorage.removeItem(z)}async function Oe(e){let t=G().find(t=>t.providerId===e.providerId),n=G().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}),K(n);let r=V(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&&W.error(`SW mask-oauth-token transport failed`,{providerId:e.providerId,error:chrome.runtime.lastError.message}),t(n??{})})});if(t.error&&W.warn(`SW mask-oauth-token returned error`,{providerId:e.providerId,error:t.error}),t.maskedValue){let n=G(),r=n.find(t=>t.providerId===e.providerId);r&&(r.maskedValue=t.maskedValue,K(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=G(),i=r.find(t=>t.providerId===e.providerId);i&&typeof n.maskedValue==`string`&&(i.maskedValue=n.maskedValue,K(r))}else W.warn(`OAuth replica POST non-ok`,{providerId:e.providerId,status:t.status})}}catch(t){W.error(`OAuth replica sync failed`,{providerId:e.providerId,isExtension:s,error:t instanceof Error?t.message:String(t)})}}var ke=`local`;function Ae(e){let t=G().find(t=>t.providerId===e);return t?t.accessToken||t.apiKey||(V(e).optionalApiKey?ke:null):null}function Y(e){return G().find(t=>t.providerId===e)?.baseUrl??null}function je(e){return G().find(t=>t.providerId===e)?.deployment??null}function Me(e){return G().find(t=>t.providerId===e)?.apiVersion??null}function X(){let e=localStorage.getItem(z)||``,t=e.indexOf(`:`);return t>=0?e.slice(t+1):e}function Ne(e){if(e.includes(`:`))localStorage.setItem(z,e);else{let t=Z();localStorage.setItem(z,`${t}:${e}`)}}function Pe(){return localStorage.getItem(z)||``}function Z(){let e=Pe(),t=e.indexOf(`:`);if(t>0)return e.slice(0,t);let n=G();return n.length>0?n[0].providerId:`anthropic`}function Fe(){return Ae(Z())}function Ie(){let e=G(),t=Z(),n=X();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 Le(){let e=JSON.stringify(Ie(),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 Re(){let e=G();await Promise.allSettled(e.map(e=>J(e.providerId))),localStorage.removeItem(R),localStorage.removeItem(z);for(let e of _e)localStorage.removeItem(e)}function ze(e){if(!e)return Q();let t=Z(),n=Y(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 Q()}}function Q(){let e=Z(),t=X(),n=Y(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`)}}function Be(e){return e.length<=10?`****`:e.slice(0,4)+`...`+e.slice(-4)}function Ve(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 He={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 $(e){return p(`button`),new Promise(t=>{let r=localStorage.getItem(R)??``,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;`,G().length>0?o():e?.autoJoinUrl?c(e.autoJoinUrl):e?.preferTrayJoin?l():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=G(),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=V(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=Be(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(Ve(He.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(Ve(He.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 J(t.providerId),o()}),u.appendChild(f),r.appendChild(u),e.appendChild(r)}a.appendChild(e)}let u=document.createElement(`div`);u.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()),u.appendChild(p);let m=document.createElement(`button`);m.className=`dialog__btn dialog__btn--secondary`,m.style.flex=`1`,m.textContent=`Export`,m.addEventListener(`click`,()=>Le()),u.appendChild(m),a.appendChild(u);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=f(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`,()=>l()),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(R)??``)!==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=V(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=B(),t=new Set(G().map(e=>e.providerId)),n=[...e].sort((e,t)=>{let n=V(e).name,r=V(t).name;return n.localeCompare(r)});for(let e of n){if(t.has(e))continue;let n=V(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 u=document.createElement(`div`);u.style.cssText=`margin-bottom: 16px; display: none;`;let d=document.createElement(`button`);d.className=`dialog__btn`,d.textContent=`Login`,d.style.cssText=`width: 100%; margin-bottom: 8px;`,u.appendChild(d);let f=document.createElement(`div`);f.className=`dialog__desc`,f.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); text-align: center;`,u.appendChild(f),d.addEventListener(`click`,async()=>{let e=s.value;if(!e)return;let t=V(e);if(!t.onOAuthLogin)return;let r=G().some(t=>t.providerId===e),i=Y(e);if(t.requiresBaseUrl&&!v.value.trim()&&!i){f.textContent=`Base URL is required.`,f.style.color=`var(--slicc-cone)`,v.focus();return}t.requiresBaseUrl&&v.value.trim()&&q(e,``,v.value.trim()),f.textContent=`Opening login window...`;try{let{createOAuthLauncher:e}=await n(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-B7as8KRE.js`);return{createOAuthLauncher:e}},__vite__mapDeps([27,28,2])),r=e();await t.onOAuthLogin(r,o)}catch(t){if(!r)try{await J(e)}catch{}W.error(`OAuth login failed`,{providerId:e,error:t instanceof Error?t.message:String(t)}),f.textContent=`Login failed: ${t instanceof Error?t.message:String(t)}`}}),t&&e.userName&&(f.textContent=`Logged in as ${e.userName}`,d.textContent=`Re-login`),a.appendChild(u);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=V(e);if(c.textContent=t.description,t.isOAuth)u.style.display=``,p.style.display=`none`,g.style.display=t.requiresBaseUrl?``:`none`,t.requiresBaseUrl&&(v.placeholder=t.baseUrlPlaceholder||`https://...`,y.textContent=t.baseUrlDescription||``),d.textContent=`Login with ${t.name}`,k.style.display=`none`;else{u.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=V(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}q(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=G().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`,()=>{l()}),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=V(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 l=document.createElement(`button`);l.className=`dialog__btn`,l.textContent=`Connect`,l.addEventListener(`click`,()=>{let n=u(window.localStorage,e);if(!n){c.textContent=`Invalid sync URL.`,c.style.display=``,c.style.color=`var(--slicc-cone)`;return}if(ge()){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(l);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 l(){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 l=document.createElement(`ol`);l.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,l.appendChild(t)}c.appendChild(l),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=u(window.localStorage,e);if(!n){p.textContent=ae(e),p.style.display=``,f.focus();return}if(ge()){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{m as A,re as C,O as D,ee as E,g as M,x as O,ue as S,ne as T,ze as _,Fe as a,$ as b,je as c,U as d,X as f,Q as g,J as h,Ee as i,h as j,C as k,be as l,he as m,Re as n,Me as o,Z as p,G as r,Y as s,Se as t,V as u,Oe as v,te as w,de as x,Ne as y};