shadow-claw 1.40.0 → 1.40.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.well-known/mcp/server-card.json +2 -2
- package/.well-known/mcp/servers.json +1 -1
- package/.well-known/mcp.json +2 -2
- package/dist/cli/cli.js +2 -2
- package/dist/lib/components/index.js +2 -2
- package/dist/lib/components/shadow-claw-file-viewer/shadow-claw-file-viewer.d.ts +1 -1
- package/dist/lib/components/shadow-claw-file-viewer.js +1 -1
- package/dist/lib/components/shadow-claw.js +1 -1
- package/dist/lib/core/orchestrator/orchestrator-state.d.ts +2 -1
- package/dist/lib/core/orchestrator/orchestrator.d.ts +2 -1
- package/dist/lib/core/orchestrator/utils/operations/task.d.ts +1 -0
- package/dist/lib/index.js +2 -2
- package/dist/lib/{orchestrator-Bq9ft3uG.js → orchestrator-CMN43L0F.js} +9 -13
- package/dist/lib/orchestrator-CMN43L0F.js.map +1 -0
- package/dist/lib/orchestrator-D9f5fDCb.js.map +1 -1
- package/dist/lib/{shadow-claw-MumteAJy.js → shadow-claw-4x3LqlII.js} +2 -2
- package/dist/lib/{shadow-claw-MumteAJy.js.map → shadow-claw-4x3LqlII.js.map} +1 -1
- package/dist/lib/{shadow-claw-file-viewer-CMOnFmcP.js → shadow-claw-file-viewer-CuDhkVcL.js} +21 -21
- package/dist/lib/{shadow-claw-file-viewer-CMOnFmcP.js.map → shadow-claw-file-viewer-CuDhkVcL.js.map} +1 -1
- package/dist/lib/syncWebMcpRegistration-Bbph0XZl.js.map +1 -1
- package/dist/public/.well-known/mcp/server-card.json +2 -2
- package/dist/public/.well-known/mcp/servers.json +1 -1
- package/dist/public/.well-known/mcp.json +2 -2
- package/dist/public/docs/decisions/native-web-components-and-signals.md +1 -1
- package/dist/public/docs/example/article/index.html +2 -2
- package/dist/public/docs/publishing/index.html +2 -2
- package/dist/public/docs/skill-creator/index.html +2 -2
- package/dist/public/index.html +2 -2
- package/dist/public/index.js +1 -1
- package/dist/public/main/index.html +2 -2
- package/dist/public/main/memory/index.html +2 -2
- package/dist/public/{orchestrator-BLkS_jpm.js → orchestrator-Dc_Q73La.js} +1 -1
- package/dist/public/service-worker.js +1 -1
- package/dist/public/{shadow-claw-DmrxnX3Q.js → shadow-claw-Dabb2AEp.js} +2 -2
- package/dist/public/{shadow-claw-file-viewer-a_uRA30F.js → shadow-claw-file-viewer-CDs1QGXk.js} +1 -1
- package/dist/server.js +1 -1
- package/package.json +1 -1
- package/src/cli/cli.ts +2 -2
- package/src/components/shadow-claw-file-viewer/shadow-claw-file-viewer.ts +31 -31
- package/src/core/effect.test.ts +19 -0
- package/src/core/orchestrator/orchestrator-state.ts +2 -1
- package/src/core/orchestrator/orchestrator.test.ts +686 -5
- package/src/core/orchestrator/orchestrator.ts +3 -10
- package/src/core/orchestrator/utils/compactContext.test.ts +423 -121
- package/src/core/orchestrator/utils/configurePeerJs.test.ts +27 -0
- package/src/core/orchestrator/utils/deliverResponse.test.ts +127 -0
- package/src/core/orchestrator/utils/dispatchSubagentInvoke.test.ts +23 -0
- package/src/core/orchestrator/utils/enqueue.test.ts +520 -86
- package/src/core/orchestrator/utils/handleWorkerMessage.test.ts +664 -144
- package/src/core/orchestrator/utils/initTasks.node.test.ts +147 -0
- package/src/core/orchestrator/utils/initTasks.test.ts +926 -191
- package/src/core/orchestrator/utils/initTasks.ts +5 -4
- package/src/core/orchestrator/utils/invokeAgent.test.ts +563 -110
- package/src/core/orchestrator/utils/invokeAgent.ts +8 -10
- package/src/core/orchestrator/utils/loadChannelConfigurations.test.ts +50 -0
- package/src/core/orchestrator/utils/operations/channel.test.ts +377 -170
- package/src/core/orchestrator/utils/operations/provider.test.ts +663 -85
- package/src/core/orchestrator/utils/operations/room.test.ts +74 -11
- package/src/core/orchestrator/utils/operations/task.test.ts +452 -56
- package/src/core/orchestrator/utils/operations/task.ts +1 -1
- package/src/core/orchestrator/utils/operations/vm.test.ts +66 -7
- package/src/core/orchestrator/utils/parseDirectToolCommand.test.ts +6 -0
- package/src/core/orchestrator/utils/settings.test.ts +248 -81
- package/src/core/orchestrator/utils/setupPushTaskListener.test.ts +58 -0
- package/src/core/orchestrator/utils/syncWebMcpRegistration.test.ts +341 -65
- package/src/core/orchestrator/utils/syncWebMcpRegistration.ts +4 -2
- package/src/server/routes/mcp.ts +2 -2
- package/src/stores/file-viewer.test.ts +11 -0
- package/src/stores/theme.test.ts +41 -2
- package/src/stores/toast.test.ts +25 -0
- package/src/worker/tools/bash/native-bash-executor.test.ts +31 -1
- package/src/worker/tools/git/utils/extractConflictPaths.test.ts +24 -0
- package/src/worker/tools/git/utils/parseConflictRegions.test.ts +46 -0
- package/src/worker/tools/git/utils/resolveCorsProxy.test.ts +26 -5
- package/src/worker/tools/git/utils/truncateSnippet.test.ts +16 -0
- package/src/worker/tools/node-transformers-executor.test.ts +105 -6
- package/src/worker/tools/remote-mcp/remote-mcp.test.ts +172 -47
- package/src/worker/tools/remote-mcp/utils/formatListToolsOutput.test.ts +19 -0
- package/src/worker/tools/remote-mcp/utils/isMcpReauthError.test.ts +45 -0
- package/src/worker/tools/remote-mcp/utils/resolveMcpReauth.test.ts +48 -0
- package/src/worker/tools/rooms/list-room-members.test.ts +24 -10
- package/src/worker/tools/tasks/list-tasks.test.ts +39 -8
- package/src/worker/tools/tasks/update-task.test.ts +78 -14
- package/src/worker/tools/ui/javascript.test.ts +70 -17
- package/src/worker/tools/ui/list-tool-profiles.test.ts +31 -9
- package/dist/lib/orchestrator-Bq9ft3uG.js.map +0 -1
|
@@ -12,4 +12,4 @@ import{D as e,E as t,F as n,I as r,M as i,O as a,P as o,R as s,T as c,_ as l,g a
|
|
|
12
12
|
`);for(let e of t)if(!(!e||e.startsWith(`:`))&&e.startsWith(`data: `)){let t=e.slice(6).trim();if(t===`[DONE]`)continue;try{yield JSON.parse(t)}catch{}}}}}finally{n.releaseLock()}}const Gt=6e4,Kt=new Map;function qt(e){let t=Kt.get(e);if(t)return t;let n={recentCalls:[],nextAllowedAt:0,remoteLimit:null,remoteRemaining:null,remoteResetAt:null};return Kt.set(e,n),n}function Jt(){return Date.now()}function Yt(e){if(!e)return null;let t=Number(e.trim());return Number.isFinite(t)?t:null}function Xt(e){if(!e)return null;let t=e.trim(),n=Number(t);if(Number.isFinite(n))return n<=0?null:Math.round(n*1e3);let r=Date.parse(t);if(!Number.isFinite(r))return null;let i=r-Jt();return i>0?i:null}function Zt(e){let t=Yt(e);return t===null||t<=0?null:t>=0xe8d4a51000?Math.round(t):t>=1e9?Math.round(t*1e3):Jt()+Math.round(t*1e3)}async function Qt(e,t){e<=0||await new Promise((n,r)=>{let i=setTimeout(()=>{o(),n()},e),a=()=>{o(),r(new DOMException(`Aborted`,`AbortError`))},o=()=>{i&&=(clearTimeout(i),null),t?.removeEventListener(`abort`,a)};if(t?.aborted){a();return}t?.addEventListener(`abort`,a)})}function $t(e,t){if(!Number.isFinite(t)||t<=0)return 0;let n=Jt();if(e.recentCalls=e.recentCalls.filter(e=>n-e<Gt),e.recentCalls.length<t)return 0;let r=e.recentCalls[0]||n;return Math.max(0,Gt-(n-r))}function en(e){let t=Jt(),n=0;return e.nextAllowedAt>t&&(n=Math.max(n,e.nextAllowedAt-t)),e.remoteRemaining!==null&&e.remoteRemaining<=0&&e.remoteResetAt!==null&&e.remoteResetAt>t&&(n=Math.max(n,e.remoteResetAt-t)),n}async function tn(e,t,n,r){let i=qt(e);for(;;){let e=$t(i,n.callsPerMinute),a=n.autoAdapt?en(i):0,o=Math.max(e,a);if(o<=0){let e=Jt();if(n.callsPerMinute>0&&i.recentCalls.push(e),n.autoAdapt&&i.remoteRemaining!==null&&i.remoteRemaining>0&&i.remoteResetAt!==null&&i.remoteResetAt>e){let t=i.remoteResetAt-e,n=Math.max(1,i.remoteRemaining),r=Math.ceil(t/n);i.nextAllowedAt=Math.max(i.nextAllowedAt,e+r)}return}o>=1e3&&U({type:`thinking-log`,payload:{groupId:t,level:`info`,label:`Rate limiter`,message:`Waiting ${Math.ceil(o/1e3)}s before next provider call to avoid 429s.`,timestamp:Date.now()}}),await Qt(o,r)}}function nn(e,t,n){if(!n.autoAdapt||!t||typeof t.get!=`function`)return;let r=qt(e),i=Jt(),a=Yt(t.get(`x-ratelimit-limit`)),o=Yt(t.get(`x-ratelimit-remaining`)),s=Zt(t.get(`x-ratelimit-reset`));a!==null&&(r.remoteLimit=Math.max(0,Math.floor(a))),o!==null&&(r.remoteRemaining=Math.max(0,Math.floor(o))),s!==null&&(r.remoteResetAt=s);let c=Xt(t.get(`retry-after`));c!==null&&(r.nextAllowedAt=Math.max(r.nextAllowedAt,i+c)),r.remoteRemaining!==null&&r.remoteRemaining<=0&&r.remoteResetAt!==null&&r.remoteResetAt>i&&(r.nextAllowedAt=Math.max(r.nextAllowedAt,r.remoteResetAt))}var rn=class{callbacks;contentBlocks=[];format;stopReason=`end_turn`;usage={input_tokens:0,output_tokens:0};#e=new Map;#t=``;#n=``;#r=new Map;constructor(e,t={}){this.format=e,this.callbacks=t}finalize(){return this.format===`openai`||this.format===`mesh-llm`?this.#a():this.#i()}push(e){this.format===`openai`||this.format===`mesh-llm`?this.#s(e):this.#o(e)}#i(){let e=[];for(let[,t]of[...this.#e.entries()].sort((e,t)=>e[0]-t[0]))if(t.type===`text`){let n=this.#c(t.text||``);n&&e.push({type:`text`,text:n})}else if(t.type===`tool_use`){let n;try{n=t.partialJson?JSON.parse(t.partialJson):{}}catch{n={}}e.push({type:`tool_use`,id:t.id||`call_${Date.now()}_${Math.random()}`,name:t.name,input:n})}else t.type===`thinking`?typeof t.text==`string`&&t.text.length>0&&e.push({type:`thinking`,thinking:t.text,...typeof t.id==`string`?{signature:t.id}:{}}):t.type===`redacted_thinking`&&typeof t.text==`string`&&t.text.length>0&&e.push({type:`redacted_thinking`,data:t.text});return{content:e,stop_reason:this.stopReason,usage:{...this.usage}}}#a(){let e=[];if(this.#n){let t=this.#c(this.#n);t&&e.push({type:`text`,text:t})}if(this.#t&&e.unshift({type:`thinking`,thinking:this.#t}),this.#r.size>0){this.stopReason=`tool_use`;for(let[,t]of[...this.#r.entries()].sort((e,t)=>e[0]-t[0])){let n;try{n=t.args?JSON.parse(t.args):{}}catch{n={}}e.push({type:`tool_use`,id:t.id||`call_${Date.now()}_${Math.random()}`,name:t.name,input:n})}}return{content:e,stop_reason:this.stopReason,usage:{...this.usage}}}#o(e){switch(e.type){case`message_start`:e.message?.usage&&(this.usage.input_tokens=e.message.usage.input_tokens||0,this.usage.cache_read_input_tokens=e.message.usage.cache_read_input_tokens||0,this.usage.cache_creation_input_tokens=e.message.usage.cache_creation_input_tokens||0);break;case`content_block_start`:{let t=e.index??this.#e.size,n=e.content_block||{};this.#e.set(t,{type:n.type||`text`,id:n.type===`thinking`?n.signature:n.id,name:n.name,text:n.text||n.thinking||n.data||``,partialJson:n.type===`tool_use`?``:void 0}),n.type===`tool_use`&&n.name&&this.callbacks.onToolStart?.(n.name);break}case`content_block_delta`:{let t=e.index??0,n=this.#e.get(t);if(!n){let r=e.delta?.type===`input_json_delta`?`tool_use`:`text`;n={type:r,text:r===`text`?``:void 0,partialJson:r===`tool_use`?``:void 0},this.#e.set(t,n)}let r=e.delta;if(!r)break;if(r.type===`text_delta`&&typeof r.text==`string`){let e=this.#c(r.text);if(!e)break;n.text=(n.text||``)+e,this.callbacks.onText?.(e)}r.type===`thinking_delta`&&typeof r.thinking==`string`&&(n.type=`thinking`,n.text=(n.text||``)+r.thinking,this.callbacks.onThinking?.(r.thinking)),r.type===`signature_delta`&&typeof r.signature==`string`&&(n.type=`thinking`,n.id=r.signature),r.type===`redacted_thinking_delta`&&typeof r.data==`string`&&(n.type=`redacted_thinking`,n.text=(n.text||``)+r.data),r.type===`input_json_delta`&&typeof r.partial_json==`string`&&(n.partialJson=(n.partialJson||``)+r.partial_json);break}case`content_block_stop`:break;case`message_delta`:e.delta?.stop_reason&&(this.stopReason=e.delta.stop_reason),e.usage&&(this.usage.output_tokens=e.usage.output_tokens||0,this.callbacks.onUsage?.(this.usage));break;case`message_stop`:break;default:break}}#s(e){e.usage&&(this.usage.input_tokens=e.usage.prompt_tokens||0,this.usage.output_tokens=e.usage.completion_tokens||0,this.usage.cache_read_input_tokens=e.usage.prompt_tokens_details?.cached_tokens||0,this.callbacks.onUsage?.(this.usage));let t=e.choices?.[0];if(!t)return;let n=t.delta;if(n){if(typeof n.content==`string`){let e=this.#c(n.content);e&&(this.#n+=e,this.callbacks.onText?.(e))}if(typeof n.reasoning==`string`)this.#t+=n.reasoning,this.callbacks.onThinking?.(n.reasoning);else if(n.reasoning&&typeof n.reasoning==`object`){let e=n.reasoning;typeof e.content==`string`?(this.#t+=e.content,this.callbacks.onThinking?.(e.content)):typeof e.text==`string`&&(this.#t+=e.text,this.callbacks.onThinking?.(e.text))}if(Array.isArray(n.tool_calls))for(let e of n.tool_calls){let t=e.index??0;this.#r.has(t)||(this.#r.set(t,{id:e.id||``,name:e.function?.name||``,args:``}),e.function?.name&&this.callbacks.onToolStart?.(e.function.name));let n=this.#r.get(t);n&&(e.id&&(n.id=e.id),e.function?.name&&(n.name=e.function.name),e.function?.arguments&&(n.args+=e.function.arguments))}t.finish_reason&&(t.finish_reason===`tool_calls`?this.stopReason=`tool_use`:t.finish_reason===`stop`?this.stopReason=`end_turn`:this.stopReason=t.finish_reason)}}#c(e){return G(e,this.callbacks.source??this.format)}};const an=new Map;function on(e){return an.get(e)}function sn(e){an.delete(e)}function cn(e,t){let n=e.trim().match(/^\[tool_code\]([\s\S]*?)\[\/tool_code\]$/i);if(!n?.[1])return{toolBlocks:[],residualText:e};let r=n[1].trim(),i=r.match(/^print\s*\(\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*\(\s*(.*?)\s*\)\s*\)$/s),a=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\s*\(\s*(.*?)\s*\)$/s),o=i||a;if(!o?.[1])return{toolBlocks:[],residualText:e};let s=o[1];if(!t.has(s))return{toolBlocks:[],residualText:e};let c=(o[2]||``).trim(),l={};if(c){if(!c.startsWith(`{`)||!c.endsWith(`}`))return{toolBlocks:[],residualText:e};try{let t=JSON.parse(c);if(!t||typeof t!=`object`||Array.isArray(t))return{toolBlocks:[],residualText:e};l=t}catch{return{toolBlocks:[],residualText:e}}}return{toolBlocks:[{type:`tool_use`,id:`tool_code_${Date.now()}_${Math.random()}`,name:s,input:l}],residualText:``}}function ln(e,t){if(!e||e.stop_reason===`tool_use`||!Array.isArray(e.content))return e;let n=new Set((t||[]).map(e=>typeof e?.name==`string`?e.name:``).filter(Boolean));if(n.size===0)return e;let r=[],i=!1;for(let t of e.content){if(t?.type!==`text`||typeof t.text!=`string`){r.push(t);continue}let e=cn(t.text,n);if(e.toolBlocks.length>0){i=!0,e.residualText.trim()&&r.push({type:`text`,text:e.residualText}),r.push(...e.toolBlocks);continue}r.push(t)}return i?{...e,content:r,stop_reason:`tool_use`}:e}function un(e){let t=e.filter(e=>e?.type===`tool_result`).map(e=>typeof e.content==`string`?e.content.trim():Array.isArray(e.content)?e.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
|
|
13
13
|
`).trim():JSON.stringify(e.content).trim()).filter(Boolean);return t.length===0?``:t.join(`
|
|
14
14
|
|
|
15
|
-
`).slice(0,1e4)}function dn(e){let t=e.trim();return t?`Tool result:\n${t}`:``}async function fn(e,t,r){let{apiKey:i,assistantName:a,contextCompression:o=!1,contextLimit:s,enabledTools:c,groupId:l,isScheduledTask:u=!1,maxIterations:d,maxTokens:f,memory:p,messages:m,model:h,provider:g,providerHeaders:_={},providerRuntimeOverrides:v,reasoning:y,rateLimitAutoAdapt:b=!0,rateLimitCallsPerMinute:x=0,storageHandle:S,streaming:C=!1,subagentModelSelectionMode:w,subagentMaxTokens:E,subagentPinnedModel:D,subagentPinnedProvider:ee,systemPrompt:k,workspaceGroupId:A}=t,j=!!t.subagentTask,M=j?l.startsWith(`subagent:`)?l:`subagent:${J()}`:l,ne=A||l;j&&Ee(M,[]);let N={autoAdapt:b!==!1,callsPerMinute:Number.isFinite(x)?Math.max(0,Math.floor(x)):0};S&&He(S);let P=n(g);if(!P){U({payload:{groupId:M,error:`Unknown provider: ${g}`},type:`error`});return}let F=P,I=C&&F.supportsStreaming===!0&&F.format!==`prompt_api`;U({type:`typing`,payload:{groupId:M}}),Z(M,`info`,`Starting`,`Provider: ${F.name} · Model: ${h} · Max tokens: ${f} · Streaming: ${I?`on`:`off`}${C&&!I?` (provider does not support streaming)`:``}`);try{let t=[...m],n=0,l=typeof d==`number`&&d>0?d:50,b=Array.isArray(c)?c:Je;Ve()&&(b=Be(b));let x=k,C=``,A={apiKey:i,assistantName:a??``,db:e,enabledTools:b,invokeSubagent:t=>hn(e,t,r),maxTokens:f,memory:p??``,model:h,provider:g,subagentModelSelectionMode:w,subagentMaxTokens:E,subagentPinnedProvider:ee,subagentPinnedModel:D,providerHeaders:_,providerRuntimeOverrides:v,storageHandle:S,streaming:!1,systemPrompt:x??``},j=[];for(;n<l;){n++;let c=on(M);c&&(b=c.enabledTools,x=te(a,p,b,c.systemPromptOverride,void 0,void 0,{groupId:M}));let l=s??O(h),d=ye(x),{messages:m,estimatedTokens:v}=ze(t,{contextLimit:l,maxOutputTokens:f,skimTop:o,systemPromptTokens:d}),S=v+d,w=Math.max(100,Math.min(f,l-S-500)),E=oe(F,m,b,{contextCompression:o,maxTokens:w,model:h,reasoning:y,system:x});Z(M,`api-call`,`API call #${n}`,`${m.length} messages in context`);let D={...R(F,i),..._},ee=F.baseUrl,k;Ve(),Ve(),k=I?await mn(g,F,ee,D,E,M,h,N,r):await pn(g,F,ee,D,E,M,N,r),k=ln(k,b),k.usage&&U(Ut(M,k.usage,O(h)));for(let e of k.content)e.type===`text`&&e.text&&Z(M,`text`,`Response text`,e.text.length>200?e.text.slice(0,200)+`…`:e.text);if(k.stop_reason===`tool_use`){let n=new Set(b.map(e=>typeof e?.name==`string`?e.name:``).filter(Boolean)),r=k.content.filter(e=>e.type===`text`).map(e=>e.text).join(``).replace(/<internal>[\s\S]*?<\/internal>/g,``).trim();r&&U({payload:{groupId:M,text:r},type:`intermediate-response`}),I&&U({payload:{groupId:M},type:`streaming-end`});let i=[];for(let t of k.content)if(t.type===`tool_use`){let r=n.has(t.name),a=`${t.name}:${JSON.stringify(t.input)}`,o=j.filter(e=>e===a).length;if(j.push(a),!r){let e=`SYSTEM ERROR: Tool '${t.name}' is disabled or unavailable for this request. Do not call it again. Try a different approach or ask the user for help.`;Z(M,`warning`,`Tool blocked`,e),i.push({content:e,tool_use_id:t.id,type:`tool_result`});continue}let s=JSON.stringify(t.input),c=s.length>300?s.slice(0,300)+`…`:s;Z(M,`tool-call`,`Tool: ${t.name}`,c),U(H(M,t.name,`running`));let l;o>=3?(l=`SYSTEM ERROR: You have repeatedly called this tool with the exact same input (${o+1} times). This is a rigid loop. STOP calling this tool with these arguments. Try a different approach, fix the underlying issue, or ask the user for help.`,console.warn(`[Worker] Blocked repetitive tool call:`,a)):l=await T(e,t.name,t.input,ne,{allowedTools:b,isScheduledTask:u,invokeContext:A});let d=typeof l==`string`?l:JSON.stringify(l),f=d.length>500?d.slice(0,500)+`…`:d;Z(M,`tool-result`,`Result: ${t.name}`,f),U(H(M,t.name,`done`)),Array.isArray(l)?i.push({content:l,tool_use_id:t.id,type:`tool_result`}):i.push({content:typeof l==`string`?l.slice(0,1e5):JSON.stringify(l).slice(0,1e5),tool_use_id:t.id,type:`tool_result`})}C=un(i),t.push({role:`assistant`,content:k.content}),t.push({role:`user`,content:i}),U({type:`typing`,payload:{groupId:M}})}else{let e=k.content.filter(e=>e.type===`text`).map(e=>e.text).join(``).replace(/<internal>[\s\S]*?<\/internal>/g,``).trim(),t=(e.toLowerCase()===`(no response)`?``:e)||(C?dn(C):`(no response)`);I&&U({payload:{groupId:M,text:t},type:`streaming-done`}),U({payload:{groupId:M,text:t},type:`response`});return}}U({payload:{text:`⚠️ Reached maximum tool-use iterations (${l}). Stopping to avoid excessive API usage.`,groupId:M},type:`response`})}catch(e){if(e instanceof Error&&e.name===`AbortError`)return;let t=e instanceof Error?e.message:String(e);I&&U({payload:{groupId:M,error:t},type:`streaming-error`}),U({type:`error`,payload:{groupId:M,error:t}})}finally{sn(M),j&&Me(M)}}async function pn(e,t,n,r,i,a,o,s){return L(async()=>{await tn(e,a,o,s);let c=await fetch(n,{body:JSON.stringify(i),headers:r,method:`POST`,signal:s});if(nn(e,c.headers,o),!c.ok){let e=await c.text(),n=Error(`${t.name} API error ${c.status}: ${e}`);throw n.status=c.status,n}return I(t,await c.json())},{baseDelayMs:2e3,jitterFactor:.5,maxDelayMs:3e4,maxRetries:3,onRetry:(e,t,n,r)=>{let i=r instanceof Error?r.message:String(r);Z(a,`warning`,`Retrying API call (${e}/${t})`,i),U({type:`show-toast`,payload:{message:`LLM API: Retrying (${e}/${t})… ${i.slice(0,120)}`,type:`warning`,duration:5e3}})},shouldRetry:e=>Oe(e),signal:s})}async function mn(e,t,n,r,i,a,o,s,c){let l={...i,stream:!0,...(t.format===`openai`||t.format===`mesh-llm`)&&{stream_options:{include_usage:!0}}};await tn(e,a,s,c);let u=await fetch(n,{body:JSON.stringify(l),headers:r,method:`POST`,signal:c});if(nn(e,u.headers,s),!u.ok){let e=await u.text(),n=Error(`${t.name} API error ${u.status}: ${e}`);throw n.status=u.status,n}if(!u.body)throw Error(`Streaming response has no body`);U({payload:{groupId:a},type:`streaming-start`});let d=0,f=``,p=0,m=``,h=(e=!1)=>{let t=Date.now();m&&(!e&&t-p<50||(Z(a,`info`,`Reasoning`,m.length>400?`${m.slice(0,400)}…`:m),m=``,p=t))},g=new rn(t.format,{source:t.id,onText:e=>{let t=Date.now();f+=e,t-d>=50&&(U({payload:{groupId:a,text:f},type:`streaming-chunk`}),f=``,d=t)},onToolStart:e=>{U(H(a,e,`running`))},onUsage:e=>{U(Ut(a,e,O(o)))},onThinking:e=>{m+=e,h(!1)}});for await(let e of Wt(u.body,c))g.push(e);f&&U({payload:{groupId:a,text:f},type:`streaming-chunk`}),h(!0);let _=g.finalize();return t.format===`mesh-llm`&&(_=N(_)),_}async function hn(e,t,n){let r=t.provider,i=async e=>{U(e)};if(r===`transformers_js_browser`){await Ht(e,t.groupId,t.systemPrompt,t.messages,t.maxTokens,i,n,t.enabledTools,t.model);return}if(r===`prompt_api`){if(!z())throw Error(`Prompt API provider is not supported in this environment.`);await ee(e,t.groupId,t.systemPrompt,t.messages,t.maxTokens,i,n,t.enabledTools);return}if(r===`litert_lm_browser`){if(!Ot())throw Error(`Litert LM Browser provider is not supported in this environment.`);await Rt(e,t.groupId,t.systemPrompt,t.messages,t.maxTokens,i,n,t.model,t.enabledTools);return}await fn(e,t,n)}async function gn(e,t,r,i,a=!1,s=!1){let c=s?`subagent:${J()}`:r;if(e.inFlightTriggerByGroup.set(c,i),e.setState(`thinking`,c),e.router?.setTyping(c,!0),e.events.emit(`typing`,{groupId:c,typing:!0}),i.startsWith(`[SCHEDULED TASK]`)){e.pendingScheduledTasks.add(r);let n={id:J(),groupId:r,sender:`Scheduler`,content:i,timestamp:Date.now(),channel:Te(e,r),isFromMe:!1,isTrigger:!0};await ce(t,n),e.events.emit(`message`,n)}let l=``;try{l=await Ge(t,r,`MEMORY.md`)}catch{}let u=(await xe(t)).find(e=>e.groupId===r),d=u?.pinnedProvider??e.provider,f=u?.pinnedModel??(u?.pinnedProvider?n(u.pinnedProvider)?.defaultModel??e.model:e.model),p=typeof u?.pinnedMaxTokens==`number`&&Number.isFinite(u.pinnedMaxTokens)&&u.pinnedMaxTokens>0?Math.floor(u.pinnedMaxTokens):e.maxTokens,h=f;d===`prompt_api`&&(f===`browser-built-in`||!f)&&!z()&&(h=await S(t,m.PROMPT_API_FALLBACK_MODEL)||`onnx-community/Qwen3-0.6B-ONNX`);let g=Math.max(1,Math.min(p,o(h))),_=n(d)??e.providerConfig;e.inFlightEffectiveProviderByGroup.set(c,{providerId:d,providerConfig:_,model:f});let v=Array.isArray(u?.toolTags)?K.allTools.filter(e=>u.toolTags.includes(e.name)):K.enabledTools,y=(await qe(t,c)).tools.filter(e=>!K.allTools.some(t=>t.name===e.name)),b=Array.isArray(u?.toolTags)?y.filter(e=>u.toolTags.includes(e.name)):y.filter(e=>K.isDeclarativeToolEnabled(e.name)),x=[...v,...b],C=await se(t,c),w=C.skills.length>0&&!x.some(e=>e.name===Ye.name)?[...x,Ye]:x,T=u?.subagentModelSelectionMode===`manual`?`manual`:`automatic`,E=u?.subagentMaxTokens,D=u?.subagentPinnedProvider,A=u?.subagentPinnedModel,j=u?.subagentFastProvider,ne=u?.subagentFastModel,N=u?.subagentSmartProvider,P=u?.subagentSmartModel,F=u?.subagentPowerfulProvider,I=u?.subagentPowerfulModel,L=u?.providerRuntimeOverrides,ie=W.getPeerState(r)||void 0,R=te(e.assistantName,l,w,K.systemPromptOverride,ie,C.skills,{groupId:r}),ae=O(h),oe=ye(R)+(w?.reduce((e,t)=>e+ye(JSON.stringify(t)),0)??0),B=await Ce(r,200);a&&(B=B.length>0?[B[B.length-1]]:[{role:`user`,content:i}]);let V=ze(B,{contextLimit:ae,systemPromptTokens:oe,maxOutputTokens:g,skimTop:e.contextCompressionEnabled}),le=V.messages,ue=V.estimatedTokens+oe;if(W.tokenUsage){let e=W.tokenUsage,t=(e.inputTokens||0)+(e.cacheReadTokens||0)+(e.outputTokens||0);ue=Math.max(ue,t)}if(e.events.emit(`context-usage`,{estimatedTokens:ue,contextLimit:ae,usagePercent:Math.min(100,Math.max(V.usagePercent,ue/ae*100)),truncatedCount:V.truncatedCount}),V.usagePercent>80&&V.truncatedCount>0&&B.length>10&&(e.events.emit(`show-toast`,{message:`Context ${V.usagePercent.toFixed(0)}% full — auto-compacting older messages…`,type:`info`,duration:4e3}),queueMicrotask(()=>De(e,t,r))),d===`transformers_js_browser`){let n=new AbortController;e.promptControllers.set(c,n);let r={apiKey:``,assistantName:e.assistantName,db:t,enabledTools:w,invokeSubagent:async e=>{await hn(t,e,n.signal)},maxTokens:g,memory:l??``,model:f,provider:d,providerHeaders:he(e,d,``,L),providerRuntimeOverrides:L,streaming:!1,subagentModelSelectionMode:T,subagentMaxTokens:E,subagentPinnedProvider:D,subagentPinnedModel:A,subagentFastProvider:j,subagentFastModel:ne,subagentSmartProvider:N,subagentSmartModel:P,subagentPowerfulProvider:F,subagentPowerfulModel:I,systemPrompt:R};try{await Ht(t,c,R,le,g,async n=>{await re(e,t,n)},n.signal,w,f,r)}catch(n){if(n instanceof Error&&n.name===`AbortError`)return;await Le(e,t,c,`⚠️ Error: ${n instanceof Error?n.message:String(n)}`)}finally{e.promptControllers.delete(c)}return}if(d===`prompt_api`){if(z()||await M(),!z()){await Le(e,t,c,`⚠️ Error: Prompt API is not available in this browser. Switch provider or enable experimental browser flags.`);return}let n=new AbortController;e.promptControllers.set(c,n);let r={apiKey:``,assistantName:e.assistantName,db:t,enabledTools:w,invokeSubagent:async e=>{await hn(t,e,n.signal)},maxTokens:g,memory:l??``,model:f,provider:d,providerHeaders:he(e,d,``,L),providerRuntimeOverrides:L,streaming:!1,subagentModelSelectionMode:T,subagentMaxTokens:E,subagentPinnedProvider:D,subagentPinnedModel:A,subagentFastProvider:j,subagentFastModel:ne,subagentSmartProvider:N,subagentSmartModel:P,subagentPowerfulProvider:F,subagentPowerfulModel:I,systemPrompt:R};try{await ee(t,c,R,le,g,async n=>{await re(e,t,n)},n.signal,w,r)}catch(n){if(n instanceof Error&&n.name===`AbortError`)return;await Le(e,t,c,`⚠️ Error: ${n instanceof Error?n.message:String(n)}`)}finally{e.promptControllers.delete(c)}return}if(d===`litert_lm_browser`){if(!Ot()){await Le(e,t,c,`⚠️ LiteRT-LM requires WebGPU and WebAssembly.Suspending. These are not both available in this browser.`);return}let n=new AbortController;e.promptControllers.set(c,n);let r={apiKey:``,assistantName:e.assistantName,db:t,enabledTools:w,invokeSubagent:async e=>{await hn(t,e,n.signal)},maxTokens:g,memory:l??``,model:f,provider:d,providerHeaders:he(e,d,``,L),providerRuntimeOverrides:L,streaming:!1,subagentModelSelectionMode:T,subagentMaxTokens:E,subagentPinnedProvider:D,subagentPinnedModel:A,subagentFastProvider:j,subagentFastModel:ne,subagentSmartProvider:N,subagentSmartModel:P,subagentPowerfulProvider:F,subagentPowerfulModel:I,systemPrompt:R};try{await Rt(t,c,R,le,g,async n=>{await re(e,t,n)},n.signal,f,w,r)}catch(n){if(n instanceof Error&&n.name===`AbortError`)return;await Le(e,t,c,`⚠️ Error: ${n instanceof Error?n.message:String(n)}`)}finally{e.promptControllers.delete(c)}return}let de=e.streamingEnabled&&_.supportsStreaming===!0&&(_.format===`openai`||_.format===`anthropic`);d===`transformers_js_local`&&ve(e,e.events,c);let fe=e.createProviderRequestId(c);e.agentWorker?.postMessage({type:`invoke`,payload:{apiKey:d===e.provider?await k(e):await e.getApiKeyForSpecificProvider(t,d),assistantName:e.assistantName,contextCompression:e.contextCompressionEnabled,contextLimit:O(h),enabledTools:w,groupId:c,isScheduledTask:e.schedulerTriggeredGroups.has(r),maxIterations:e.maxIterations,maxTokens:g,memory:l,messages:le,model:f,provider:d,providerHeaders:he(e,d,fe,L),providerRuntimeOverrides:L,reasoning:me(e),rateLimitAutoAdapt:e.rateLimitAutoAdapt,rateLimitCallsPerMinute:e.rateLimitCallsPerMinute,storageHandle:await S(t,m.STORAGE_HANDLE),streaming:de,subagentModelSelectionMode:T,subagentMaxTokens:E,subagentPinnedProvider:D,subagentPinnedModel:A,subagentFastProvider:j,subagentFastModel:ne,subagentSmartProvider:N,subagentSmartModel:P,subagentPowerfulProvider:F,subagentPowerfulModel:I,systemPrompt:R,subagentTask:s}})}function _n(e,t,n){if(!e.enabledChannelTypes.includes(n.channel))return null;let r=n.content.trim(),i=t.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),a=r;if(e.requireMention){let e=RegExp(`^@${i}\\b\\s*(?:-|:)?\\s*`,`i`);if(!e.test(a))return null;a=a.replace(e,``).trim()}let o=a.match(/^\/([a-zA-Z0-9_]+)(?:\s+([\s\S]+))?$/);if(!o)return null;let s=o[1];if(!e.allowedTools.includes(s))return null;let c=(o[2]||``).trim();if(!c)return{toolName:s,input:{}};let l=c.startsWith(`'`)&&c.endsWith(`'`)||c.startsWith(`"`)&&c.endsWith(`"`)?c.slice(1,-1).trim():c;try{let e=JSON.parse(l);return e&&typeof e==`object`?{toolName:s,input:e}:null}catch{return null}}function vn(e,t){let n=e.trim().match(/^\/([a-z0-9](?:[a-z0-9]|-(?!-))*[a-z0-9]|[a-z0-9])(?:\s+([\s\S]+))?$/u);if(!n)return null;let r=t.find(e=>e.name===n[1]&&e.userInvocable!==!1);return r?{skill:r,arguments:(n[2]||``).trim()}:null}async function yn(e,t,n){if(n.a2uiEnvelopes&&n.a2uiEnvelopes.length>0)for(let t of n.a2uiEnvelopes)e.events.emit(`a2ui-surface`,{groupId:n.groupId,envelope:t});n.a2uiAction&&e.events.emit(`a2ui-action`,{groupId:n.groupId,action:n.a2uiAction});let r=!!n.content,i=(n.attachments?.length??0)>0;if(!r&&!i&&(n.a2uiEnvelopes?.length??0)>0)return;let a=_n(e.directToolCommandPolicy,e.assistantName,n),o=a?null:vn(n.content,(await se(t,n.groupId)).skills),s=n.channel===`browser`,c=e.channelRegistry.shouldAutoTrigger(n.groupId),l=!1;(n.channel===`browser`||n.groupId.startsWith(`room:`))&&(l=e.triggerPattern.test(n.content.trim())),o&&(l=!0),s&&n.groupId.startsWith(`peer:`)&&e.peerCompletedContexts.delete(n.groupId);let u=!!a;if(!l&&e.peerjsMyPeerId){if(n.content.includes(`@${e.peerjsMyPeerId}`))l=!0;else if(e.peerjsMyAlias&&n.content.includes(`@${e.peerjsMyAlias}`))l=!0;else for(let[t,r]of Object.entries(e.peerjsPeerAliases))if(r===e.peerjsMyPeerId&&n.content.includes(`@${t}`)){l=!0;break}}n.content.trim().startsWith(`[SCHEDULED TASK]`)&&(l=!0),n.content.trim().startsWith(`[A2UI ACTION]`)&&(l=!0);let d=!1;d=u||l?!0:s?!(n.groupId.startsWith(`peer:`)||n.groupId.startsWith(`room:`)):c,d&&!s&&!o&&n.groupId.startsWith(`peer:`)&&e.peerCompletedContexts.has(n.groupId)&&(d=!1);let f=await $e(t,n.groupId,n.attachments||[]),p={...n,attachments:f,isFromMe:!1,isTrigger:d};if(d&&!u&&!o?.skill.execution&&e.messageQueue.push(o?{...n,content:`[SKILL COMMAND] Activate the "${o.skill.name}" skill and follow its instructions.\n${o.arguments}`}:n),await ce(t,p),e.events.emit(`message`,p),o?.skill.execution&&e.agentWorker){let t=o.skill.execution.tools.map(e=>{let t=e.input&&typeof e.input==`object`?{...e.input}:{};return o.arguments&&Object.keys(t).length===0&&(t.rawInput=o.arguments),{...e,input:t}});e.agentWorker.postMessage({type:`execute-skill-tools`,payload:{groupId:n.groupId,skillName:o.skill.name,tools:t}});return}if(n.channel===`peerjs`&&we(n.groupId),s&&(n.groupId.startsWith(`peer:`)||n.groupId.startsWith(`room:`))&&e.router?.send(n.groupId,n.content,f).catch(e=>{console.error(`Failed to route browser message to peer:`,e)}),a&&e.agentWorker){e.agentWorker.postMessage({type:`execute-direct-tool`,payload:{groupId:n.groupId,name:a.toolName,input:a.input}});return}bn(e,t)}async function bn(e,t){if(e.processing||e.messageQueue.length===0)return;let r=e.messageQueue[0]?.groupId,i=e.providerConfig,a=e.provider;if(r)try{let e=(await xe(t)).find(e=>e.groupId===r);if(e?.pinnedProvider){let t=n(e.pinnedProvider);t&&(i=t,a=e.pinnedProvider)}}catch{}let o=i?.requiresApiKey!==!1,s=!0;if(o&&(s=a===e.provider?!!await k(e):!!await e.getApiKeyForSpecificProvider(t,a)),o&&!s){let t=`API key not configured. Go to Settings to add your API key.`;e.events.emit(`provider-help`,{providerId:a,reason:t,helpType:B(a,t,o)});let n=e.messageQueue.shift();e.events.emit(`error`,{groupId:n.groupId,error:t});return}e.processing=!0;let c=e.messageQueue.shift();try{await gn(e,t,c.groupId,c.content,c.freshContext,c.subagent)}catch(e){console.error(`Failed to invoke agent:`,e)}finally{e.processing=!1,e.messageQueue.length>0&&bn(e,t)}}var xn=class{listeners;constructor(){this.listeners=new Map}emit(e,t){this.listeners.get(e)?.forEach(e=>e(t))}off(e,t){this.listeners.get(e)?.delete(t)}on(e,t){this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e)?.add(t)}};function Q(e,t){return{jsonrpc:`2.0`,method:e,params:t}}var Sn=class{static isRoomMethod(e){return e===Y.JOIN||e===Y.ROSTER||e===Y.LEAVE||e===Y.MESSAGE||e===Y.INVITE||e===Y.RELAY||e===Y.A2UI||e===Y.A2UI_ACTION}roomsSignal=new w.State([]);_opts;_rooms=new Map;_seen=new Map;_surfaceOwners=new Map;constructor(e){this._opts=e}broadcast(e,t,n){let r=this._rooms.get(e);if(!r)return null;let i=this._opts.getLocalMember(),a=J(),o={roomId:e,messageId:a,senderPeerId:i.peerId,senderAlias:i.alias,text:t,attachments:n?.map(e=>({fileName:e.fileName,mimeType:e.mimeType,path:e.path,size:e.size}))};return this._markSeen(e,a),this._deliverToMembers(r,Q(Y.MESSAGE,o)),a}broadcastA2UI(e,t){let n=this._rooms.get(e);if(!n)return null;let r=this._myPeerId;this._surfaceOwners.set(t.surfaceId,r);let i=J(),a={roomId:e,broadcastId:i,ownerPeerId:r,senderPeerId:r,envelope:t};return this._markSeen(e,i),this._deliverToMembers(n,Q(Y.A2UI,a)),i}broadcastA2UIAction(e,t){let n=this._rooms.get(e);if(!n)return null;let r=this._opts.getLocalMember(),i=this._surfaceOwners.get(t.surfaceId)??``,a=J(),o={roomId:e,broadcastId:a,ownerPeerId:i,senderPeerId:r.peerId,senderAlias:r.alias,action:t};return this._markSeen(e,a),this._deliverToMembers(n,Q(Y.A2UI_ACTION,o)),a}createRoom(e){let t=this._opts.getLocalMember(),n={roomId:J(),name:e,hostPeerId:t.peerId,members:[t],createdAt:Date.now()};return this._save(n),n}get(e){return this._rooms.get(e)??null}getSurfaceOwner(e){return this._surfaceOwners.get(e)}handleNotification(e,t,n){switch(t){case Y.JOIN:this._onJoin(e,n);break;case Y.ROSTER:this._onRoster(n);break;case Y.LEAVE:this._onLeave(e,n);break;case Y.MESSAGE:this._onMessage(n);break;case Y.INVITE:this._opts.onInvite?.(n);break;case Y.RELAY:this._onRelay(n);break;case Y.A2UI:this._onA2UI(n);break;case Y.A2UI_ACTION:this._onA2UIAction(n);break}}invite(e,t){let n=this._rooms.get(e);if(!n)return!1;let r=this._opts.getLocalMember(),i={roomId:e,roomName:n.name,hostPeerId:n.hostPeerId,fromPeerId:r.peerId,fromAlias:r.alias},a=this._opts.transport;return a.connectToPeer(t),a.sendToPeer(t,Q(Y.INVITE,i))}isHost(e){let t=this._rooms.get(e);return!!t&&t.hostPeerId===this._myPeerId}joinRoom(e,t,n){let r=this._opts.getLocalMember(),i=this._rooms.get(e)??{roomId:e,name:n,hostPeerId:t,members:[{peerId:t,alias:t,kind:`agent`},r],createdAt:Date.now()};this._save(i);let a=this._opts.transport;a.connectToPeer(t);let o={roomId:e,member:r};return a.sendToPeer(t,Q(Y.JOIN,o)),i}leaveRoom(e){let t=this._rooms.get(e);if(!t)return;let n=this._myPeerId;if(t.hostPeerId===n){let r={roomId:e,peerId:n,disbanded:!0};this._deliverToMembers(t,Q(Y.LEAVE,r))}else{let r={roomId:e,peerId:n};this._opts.transport.sendToPeer(t.hostPeerId,Q(Y.LEAVE,r))}this._rooms.delete(e),this._seen.delete(e),this._opts.removeRoom?.(e),this._publish()}list(){return Array.from(this._rooms.values())}loadRooms(e){this._rooms.clear();for(let t of e)this._rooms.set(t.roomId,t);this._publish()}_broadcastRoster(e){let t={roomId:e.roomId,name:e.name,hostPeerId:e.hostPeerId,members:e.members};this._deliverToMembers(e,Q(Y.ROSTER,t))}_deliverToMembers(e,t){let n=this._myPeerId;for(let r of e.members)r.peerId!==n&&this._deliverToPeer(e,r.peerId,t)}_deliverToPeer(e,t,n){let r=this._opts.transport;if(r.isConnected(t)){r.sendToPeer(t,n);return}let i=this._myPeerId;if(e.hostPeerId!==i&&e.hostPeerId!==t&&r.isConnected(e.hostPeerId)){let i={roomId:e.roomId,targetPeerId:t,inner:n};r.sendToPeer(e.hostPeerId,Q(Y.RELAY,i)),r.connectToPeer(t);return}r.connectToPeer(t),r.sendToPeer(t,n)}_hasSeen(e,t){return this._seen.get(e)?.has(t)??!1}_markSeen(e,t){let n=this._seen.get(e);if(n||(n=new Set,this._seen.set(e,n)),n.add(t),n.size>500){let e=n.values().next().value;e!==void 0&&n.delete(e)}}get _myPeerId(){return this._opts.transport.myPeerId}_onA2UI(e){if(!e||typeof e.roomId!=`string`||typeof e.broadcastId!=`string`||!e.envelope||!this._rooms.get(e.roomId)||this._hasSeen(e.roomId,e.broadcastId))return;this._markSeen(e.roomId,e.broadcastId);let t=e.envelope.surfaceId;this._surfaceOwners.get(t)!==this._myPeerId&&this._surfaceOwners.set(t,e.ownerPeerId);let n={id:e.broadcastId,groupId:Fe(e.roomId),sender:e.senderPeerId,content:``,timestamp:Date.now(),channel:`room`,a2uiEnvelopes:[e.envelope]};this._opts.onMessage(n)}_onA2UIAction(e){if(!e||typeof e.roomId!=`string`||typeof e.broadcastId!=`string`||!e.action||!this._rooms.get(e.roomId)||this._hasSeen(e.roomId,e.broadcastId)||(this._markSeen(e.roomId,e.broadcastId),this._surfaceOwners.get(e.action.surfaceId)!==this._myPeerId))return;let t={id:e.broadcastId,groupId:Fe(e.roomId),sender:e.senderAlias||e.senderPeerId,content:wt(e.action,e.senderAlias),timestamp:Date.now(),channel:`room`,a2uiAction:e.action};this._opts.onMessage(t)}_onJoin(e,t){if(!t||typeof t.roomId!=`string`)return;let n=this._rooms.get(t.roomId);if(!n||n.hostPeerId!==this._myPeerId)return;let r=t.member??{peerId:e,alias:e,kind:`human`};r.peerId=e;let i=n.members.findIndex(t=>t.peerId===e);i>=0?n.members[i]=r:n.members.push(r),this._save(n),this._broadcastRoster(n)}_onLeave(e,t){if(!t||typeof t.roomId!=`string`)return;let n=this._rooms.get(t.roomId);if(n){if(t.disbanded){this._rooms.delete(t.roomId),this._seen.delete(t.roomId),this._opts.removeRoom?.(t.roomId),this._publish();return}n.hostPeerId===this._myPeerId&&(n.members=n.members.filter(n=>n.peerId!==(t.peerId||e)),this._save(n),this._broadcastRoster(n))}}_onMessage(e){if(!e||typeof e.roomId!=`string`||typeof e.messageId!=`string`||!this._rooms.get(e.roomId)||this._hasSeen(e.roomId,e.messageId))return;this._markSeen(e.roomId,e.messageId);let t={id:e.messageId,groupId:Fe(e.roomId),sender:e.senderAlias||e.senderPeerId,content:e.text??``,timestamp:Date.now(),channel:`room`,attachments:e.attachments?.map(e=>({fileName:e.fileName,mimeType:e.mimeType,path:e.path,size:e.size}))};this._opts.onMessage(t)}_onRelay(e){!e||typeof e.targetPeerId!=`string`||!e.inner||this.isHost(e.roomId)&&this._opts.transport.sendToPeer(e.targetPeerId,e.inner)}_onRoster(e){if(!e||typeof e.roomId!=`string`)return;let t=this._rooms.get(e.roomId),n={roomId:e.roomId,name:e.name??t?.name??e.roomId,hostPeerId:e.hostPeerId,members:Array.isArray(e.members)?e.members:[],createdAt:t?.createdAt??Date.now()};this._save(n)}_publish(){this.roomsSignal.set(this.list())}_save(e){this._rooms.set(e.roomId,e),this._opts.persistRoom?.(e),this._publish()}};function Cn(e){return e&&b(e)?Promise.resolve().then(()=>(e.db.prepare(`SELECT * FROM tasks WHERE enabled = 1`).all()??[]).map(e=>({...e,enabled:!0,tools:e.tools?JSON.parse(e.tools):void 0}))):new Promise(async(t,n)=>{try{let r=e??await x();if(!r)return n(Error(`failed to get transaction, cannot get enabled tasks.`));let i=r.transaction(`tasks`,`readonly`);if(!i)return n(Error(`failed to get transaction`));let a=i.objectStore(`tasks`).index(`by-enabled`).getAll(1);a.onsuccess=()=>{t(a.result.map(e=>({...e,enabled:!0})))},a.onerror=()=>n(a.error)}catch(e){n(e)}})}function wn(e,t){if(typeof e!=`string`||!e.trim())return!1;let n=e.trim().split(/\s+/);if(n.length!==5)return!1;let[r,i,a,o,s]=n;return Tn(r,t.getMinutes())&&Tn(i,t.getHours())&&Tn(a,t.getDate())&&Tn(o,t.getMonth()+1)&&Tn(s,t.getDay())}function Tn(e,t){return e===`*`||e.split(`,`).some(e=>{if(e.includes(`/`)){let[n,r]=e.split(`/`),i=parseInt(r,10);if(isNaN(i)||i<=0)return!1;if(n===`*`)return t%i===0;if(n.includes(`-`)){let[e,r]=n.split(`-`).map(Number);return t>=e&&t<=r&&(t-e)%i===0}let a=parseInt(n,10);return t>=a&&(t-a)%i===0}if(e.includes(`-`)){let[n,r]=e.split(`-`).map(Number);return t>=n&&t<=r}return parseInt(e,10)===t})}var En=class{interval=null;onTaskChange;runner;constructor(e,t){this.runner=e,this.onTaskChange=t}ranThisMinute(e,t){if(!e.lastRun)return!1;let n=new Date(e.lastRun);return n.getFullYear()===t.getFullYear()&&n.getMonth()===t.getMonth()&&n.getDate()===t.getDate()&&n.getHours()===t.getHours()&&n.getMinutes()===t.getMinutes()}start(){this.interval||(this.interval=setInterval(()=>this.tick(),v),this.tick())}stop(){this.interval&&=(clearInterval(this.interval),null)}async tick(){try{let e=await Cn(),t=new Date;for(let n of e){let e=n.schedule||``;e!==``&&wn(e,t)&&!this.ranThisMinute(n,t)&&(await Ae(n.id,t.getTime()),this.onTaskChange?.(),this.runner(n).catch(e=>{console.error(`Task ${n.id} failed:`,e)}))}}catch(e){console.error(`Scheduler tick error:`,e)}}};function Dn(e){if(!e)return[];try{let t=JSON.parse(e);if(Array.isArray(t))return D(t.map(e=>String(e)))}catch{}return D(e.split(`,`))}async function On(e,t){e.channelEnabledByType.telegram=await be(`telegram`,t),e.channelEnabledByType.imessage=await be(`imessage`,t);let n=await e.loadSecretConfig(t,m.TELEGRAM_BOT_TOKEN),r=Dn(await S(t,m.TELEGRAM_CHAT_IDS)),i=await S(t,m.TELEGRAM_USE_PROXY)===`true`;e.telegramBotToken=n,e.telegramChatIds=r,e.telegramUseProxy=i,e.telegram.configure(n,r,i);let a=async(e,n)=>{try{let r=await Pe(t,e,n),i=new Uint8Array(r.byteLength);i.set(r);let a=Re(n.split(`/`).pop()||n);return new Blob([i],{type:a})}catch(e){return console.warn(`Orchestrator: channel fileReader failed for ${n}:`,e),null}};e.telegram.fileReader=a,e.imessage.fileReader=a;let o=(await S(t,m.IMESSAGE_SERVER_URL)||``).trim().replace(/\/+$/,``),s=await e.loadSecretConfig(t,m.IMESSAGE_API_KEY),c=Dn(await S(t,m.IMESSAGE_CHAT_IDS));e.imessageServerUrl=o,e.imessageApiKey=s,e.imessageChatIds=c,e.imessage.configure(o,s,c),e.channelEnabledByType.peerjs=await be(`peerjs`,t);let l=(await S(t,m.PEERJS_MY_PEER_ID)||``).trim(),u=Dn(await S(t,m.PEERJS_TRUSTED_PEER_IDS)),d=(await S(t,m.PEERJS_SERVER_HOST)||``).trim(),f=await S(t,m.PEERJS_SERVER_PORT),p=f&&parseInt(f,10)||0,h=(await S(t,m.PEERJS_SERVER_PATH)||``).trim(),g=await S(t,m.PEERJS_SERVER_SECURE)!==`false`,_={},v=await S(t,m.PEERJS_PEER_ALIASES);if(v)try{_=JSON.parse(v)}catch(e){console.warn(`Failed to parse peerjs_peer_aliases`,e)}e.peerjsMyPeerId=l,e.peerjsMyAlias=(await S(t,m.PEERJS_MY_ALIAS)||``).trim(),e.peerjsTrustedPeerIds=u,e.peerjsPeerAliases=_,e.peerjsServerHost=d,e.peerjsServerPort=p,e.peerjsServerPath=h,e.peerjsServerSecure=g;let y=d?{host:d,port:p||void 0,path:h||void 0,secure:g}:{};e.peerjs.configure(l,u,y)}const $={allowedTools:[`clear_chat`,`show_toast`],enabledChannelTypes:[`telegram`],requireMention:!0};function kn(e){if(!e)return{allowedTools:[...$.allowedTools],enabledChannelTypes:[...$.enabledChannelTypes],requireMention:$.requireMention};try{let t=JSON.parse(e),n=Array.isArray(t.enabledChannelTypes)?t.enabledChannelTypes.filter(e=>typeof e==`string`&&e.trim().length>0):$.enabledChannelTypes;return{allowedTools:Array.isArray(t.allowedTools)?t.allowedTools.filter(e=>typeof e==`string`&&e.trim().length>0):$.allowedTools,enabledChannelTypes:n,requireMention:typeof t.requireMention==`boolean`?t.requireMention:$.requireMention}}catch{return{allowedTools:[...$.allowedTools],enabledChannelTypes:[...$.enabledChannelTypes],requireMention:$.requireMention}}}function An(e,t){typeof navigator>`u`||!navigator.serviceWorker||navigator.serviceWorker.addEventListener(`message`,t=>{if(t.data?.type===`request-proxy-config`){E(e);return}if(t.data?.type!==`scheduled-task-trigger`)return;let{taskId:n,groupId:r,prompt:i,taskType:a,tools:o}=t.data;r&&(e.schedulerTriggeredGroups.add(r),(async()=>{let t=W.tasks.find(e=>e.id===n);if(t){W.runTask(t);return}if(a===`tools`&&Array.isArray(o)&&o.length>0){W.runTask({id:n||`push-task-${Date.now()}`,groupId:r,createdAt:Date.now(),enabled:!0,prompt:i||``,type:`tools`,tools:o,lastRun:null});return}i&&V(e,i,r)})().catch(e=>console.error(`Push-triggered task ${n} failed:`,e)).finally(()=>{e.schedulerTriggeredGroups.delete(r)}))})}function jn(e){return new Sn({transport:{get myPeerId(){return e.peerjs.myPeerId||e.peerjsMyPeerId},sendToPeer:(t,n)=>e.peerjs.sendRoomNotification(t,n),isConnected:t=>e.peerjs.isPeerConnected(t),connectToPeer:t=>e.peerjs.connectPeer(t)},getLocalMember:()=>({peerId:e.peerjs.myPeerId||e.peerjsMyPeerId,alias:e.peerjsMyAlias||e.peerjs.myPeerId||e.peerjsMyPeerId||e.assistantName,kind:`agent`,agentName:e.assistantName}),onMessage:t=>e.roomChannel.deliverInbound(t),onInvite:t=>ne(e,t),persistRoom:t=>{e.db&&ge(e.db,t).catch(e=>console.error(`Failed to persist room:`,e))},removeRoom:t=>{e.db&&A(e.db,t).catch(e=>console.error(`Failed to delete room:`,e))}})}async function Mn(e,t){e.initializeChannelRegistry(),e.channelRegistry.onMessage(n=>{yn(e,t,n).catch(e=>{console.error(`Failed to enqueue inbound message:`,e)})}),e.channelRegistry.onTyping((t,n)=>{e.events.emit(`typing`,{groupId:t,typing:n}),t.startsWith(`peer:`)&&W.setRemoteAgentTyping(t,n)}),e.peerjs.onTaskComplete(t=>{e.peerCompletedContexts.add(t)}),await On(e,t),Se(e);try{let n=await F(t);e.roomManager.loadRooms(n)}catch(e){console.error(`Failed to load rooms:`,e)}}async function Nn(e,t){e.assistantName=await S(t,m.ASSISTANT_NAME)||`ShadowClaw`,e.triggerPattern=a(e.assistantName)}async function Pn(e,t){let n=await S(t,m.VM_BOOT_MODE);e.vmBootMode=n===`disabled`||n===`auto`||n===`9p`||n===`ext2`?n:`disabled`,e.streamingEnabled=await S(t,m.STREAMING_ENABLED)!==`false`,e.webMcpToolsEnabled=await S(t,m.WEBMCP_TOOLS_ENABLED)!==`false`,e.vmBashFullInternetAccess=await S(t,m.VM_BASH_FULL_INTERNET_ACCESS)===`true`;let r=await S(t,m.WEBMCP_MODE);(r===`native`||r===`polyfill`)&&nt(r),e.contextCompressionEnabled=await S(t,m.CONTEXT_COMPRESSION_ENABLED)===`true`;let i=await S(t,m.REASONING_EFFORT);e.reasoningEffort=i?i.trim().toLowerCase():`none`,e.directToolCommandPolicy=kn(await S(t,m.DIRECT_TOOL_COMMAND_POLICY)),e.useProxy=await S(t,m.USE_PROXY)===`true`,e.proxyUrl=await S(t,m.PROXY_URL)||`/proxy`,e.gitProxyUrl=await S(t,m.GIT_PROXY_URL)||`/git-proxy`,e.taskServerEnabled=await S(t,m.TASK_SERVER_ENABLED)===`true`,e.taskServerUrl=await S(t,m.TASK_SERVER_URL)||(await import(`./config-D4lVqMs8.js`).then(e=>e.k)).DEFAULT_TASK_SERVER_URL}async function Fn(e,t){let n=await S(t,m.LLAMAFILE_MODE);n===`cli`||n===`server`?e.llamafileMode=n:await q(t,m.LLAMAFILE_MODE,e.llamafileMode);let r=await S(t,m.LLAMAFILE_HOST);r&&(e.llamafileHost=r);let i=await S(t,m.LLAMAFILE_PORT);if(i){let t=parseInt(i,10);Number.isFinite(t)&&t>=1&&t<=65535&&(e.llamafilePort=t)}await S(t,m.LLAMAFILE_OFFLINE)===`false`&&(e.llamafileOffline=!1),de(e);let a=await S(t,m.MESH_LLM_HOST);a&&(e.meshLlmHost=a),j(e)}async function In(e,t){let[r,a,c,l,u,d,f,p,h]=await Promise.all([S(t,m.PROVIDER),S(t,m.BEDROCK_REGION_FALLBACK),S(t,m.BEDROCK_PROFILE_FALLBACK),S(t,m.BEDROCK_AUTH_MODE),S(t,m.MODEL),S(t,m.MAX_TOKENS),S(t,m.MAX_ITERATIONS),S(t,m.RATE_LIMIT_CALLS_PER_MINUTE),S(t,m.RATE_LIMIT_AUTO_ADAPT)]);r&&n(r)&&(e.provider=r,e.providerConfig=n(r)||i()),await e.loadApiKeyForProvider(t,e.provider),e.bedrockRegionFallback=(a||``).trim(),e.bedrockProfileFallback=(c||``).trim(),e.bedrockAuthMode=(l||`provider_chain`).trim();let g=()=>{let t=()=>{fe(e).then(t=>s.fetchModelInfo(e.providerConfig,t||void 0,he(e,e.provider)))};typeof globalThis.requestIdleCallback==`function`?globalThis.requestIdleCallback(t,{timeout:5e3}):setTimeout(t,2e3)};typeof window<`u`&&typeof document<`u`?document.readyState===`complete`?g():window.addEventListener(`load`,g,{once:!0}):g(),u?e.model=u:e.model=e.providerConfig.defaultModel;let _=e.model;e.provider===`prompt_api`&&!z()&&(e.model===`browser-built-in`||!e.model)&&(_=await S(t,m.PROMPT_API_FALLBACK_MODEL)||`onnx-community/Qwen3-0.6B-ONNX`,ke(_).catch(()=>{}));let v=o(_);if(d===`8192`||e.provider===`prompt_api`&&!z()&&d===`4096`?e.maxTokens=v:e.maxTokens=Math.max(1,parseInt(d||String(v),10)),f&&(e.maxIterations=parseInt(f,10)||50),p){let t=parseInt(p,10);e.rateLimitCallsPerMinute=Number.isFinite(t)?Math.max(0,t):0}e.rateLimitAutoAdapt=h!==`false`}async function Ln(e,t){e.agentWorker=new Worker(C(new URL(`./agent.worker.js`,import.meta.url).href),{type:`module`}),e.agentWorker.onmessage=n=>re(e,t,n.data),e.agentWorker.onerror=e=>{console.error(`Agent worker error:`,e)};let n=await S(t,m.STORAGE_HANDLE);n&&e.agentWorker.postMessage({payload:{storageHandle:n},type:`set-storage`}),E(e),e.scheduler=new En(async t=>{await ie(e,t)},()=>{e.events.emit(`task-change`,{type:`executed`})}),ae().then(t=>{t&&e.scheduler?.start()}),An(e,t)}var Rn=class{agentWorker=null;assistantName=g;bedrockAuthMode=`provider_chain`;bedrockProfileFallback=``;bedrockRegionFallback=``;browserChat=new ct;channelEnabledByType={browser:!0,peerjs:!1,telegram:!1,imessage:!1};channelRegistry=new lt;contextCompressionEnabled=!1;db=null;directToolCommandPolicy={...$};ensureControlPlaneConnected=rt;events=new xn;gitProxyUrl=`/git-proxy`;imessage=new ut;imessageApiKey=``;imessageChatIds=[];imessageServerUrl=``;inFlightEffectiveProviderByGroup=new Map;inFlightProviderRequestIds=new Map;inFlightTriggerByGroup=new Map;llamafileHost=`127.0.0.1`;llamafileMode=`cli`;llamafileOffline=!0;llamafilePort=8080;maxIterations=50;maxTokens=h;meshLlmHost=``;messageQueue=[];model=i().defaultModel;peerCompletedContexts=new Set;peerjs=new et;peerjsMyAlias=``;peerjsMyPeerId=``;peerjsPeerAliases={};peerjsServerHost=``;peerjsServerPath=``;peerjsServerPort=0;peerjsServerSecure=!0;peerjsTrustedPeerIds=[];pendingScheduledTasks=new Set;processing=!1;promptControllers=new Map;provider=f;providerConfig=i();proxyUrl=`/proxy`;pushSubscriptionWarned=!1;rateLimitAutoAdapt=!0;rateLimitCallsPerMinute=0;reasoningEffort=`none`;roomChannel=new gt;roomManager;router=null;scheduler=null;schedulerTriggeredGroups=new Set;state=`idle`;streamingEnabled=!0;taskServerEnabled=!1;taskServerUrl=`/schedule`;telegram=new vt;telegramBotToken=``;telegramChatIds=[];telegramUseProxy=!1;transformersProgressPollers=new Map;triggerPattern=a(g);useProxy=!1;vmBashFullInternetAccess=!1;vmBootMode=`disabled`;vmStatus={ready:!1,booting:!1,bootAttempted:!1,error:null};webMcpEffectCleanup=null;webMcpRegistrationLock=Promise.resolve();webMcpToolsEnabled=!0;#e=null;#t=null;constructor(){this.roomManager=jn(this),this.initializeChannelRegistry()}clearProviderRequest(e){this.inFlightProviderRequestIds.delete(e)}createProviderRequestId(e){if(this.provider!==`llamafile`)return this.inFlightProviderRequestIds.delete(e),``;let t=`${e}:${Date.now().toString(36)}:${Math.random().toString(36).slice(2,10)}`;return this.inFlightProviderRequestIds.set(e,t),t}initializeChannelRegistry(){this.channelRegistry=new lt,this.channelRegistry.register(`br:`,this.browserChat,{badge:`Browser`,autoTrigger:!0}),this.channelRegistry.register(`tg:`,this.telegram,{badge:`Telegram`,autoTrigger:!1}),this.channelRegistry.register(`im:`,this.imessage,{badge:`iMessage`,autoTrigger:!0}),this.channelRegistry.register(`peer:`,this.peerjs,{badge:`PeerJS`,autoTrigger:!1}),this.channelRegistry.register(`room:`,this.roomChannel,{badge:`Room`,autoTrigger:!1}),this.roomChannel.setManager(this.roomManager),this.roomChannel.setPeerJs(this.peerjs),this.peerjs.setRoomNotificationHandler((e,t,n)=>this.roomManager.handleNotification(e,t,n)),this.router=new Tt(this.channelRegistry)}setState(e,t){this.state=e,this.events.emit(`state-change`,{state:e,groupId:t})}shutdown(){this.channelRegistry.stopAll(),this.scheduler?.stop();for(let e of this.transformersProgressPollers.keys())Ne(this,e);this.agentWorker?.terminate(),typeof this.webMcpEffectCleanup==`function`&&this.webMcpEffectCleanup(),tt()}async ensureAllConnections(e={}){let t=e.force??!1;try{await this.ensureControlPlaneConnected({orchestrator:this,db:this.db||void 0,force:t})}catch(e){console.warn(`Error ensuring Control Plane connection:`,e)}try{Se(this,t)}catch(e){console.warn(`Error ensuring channel connections:`,e)}this.taskServerEnabled&&this.db&&(W.replayTaskSyncOutbox(this.db),W.loadTasks(this.db)),this.scheduler&&(this.scheduler.start(),this.scheduler.tick())}stopCurrentRequest(e=p){if(this.state!==`thinking`&&this.state!==`responding`)return;Ne(this,e);let t=this.inFlightProviderRequestIds.get(e)||``;this.clearProviderRequest(e),this.agentWorker?.postMessage({type:`cancel`,payload:{groupId:e}}),this.provider===`llamafile`&&t&&le(t);let n=this.promptControllers.get(e);n&&(n.abort(),this.promptControllers.delete(e)),this.inFlightTriggerByGroup.delete(e),this.inFlightEffectiveProviderByGroup.delete(e),this.events.emit(`typing`,{groupId:e,typing:!1}),this.router?.setTyping(e,!1),this.setState(`idle`,e)}async getApiKey(){if(!this.#t)return null;let e=Date.now();if(this.#e&&this.#e.expiresAt>e)return this.#e.value;try{let t=await Ze(this.#t);return t===null?null:(this.#e={expiresAt:e+3e4,value:t},t)}catch(e){return console.error(`[Orchestrator] Failed to decrypt API key:`,e),null}}async getApiKeyForSpecificProvider(e,t){let n=await S(e,r(t));if(!n&&t===`openrouter`){let t=await S(e,m.API_KEY);t&&(n=t)}if(!n)return``;try{return await Ze(n)||``}catch(e){return console.error(`[Orchestrator] Failed to decrypt API key:`,e),``}}async handleCompactDone(e,t,n){await Ie(e,t),await ce(e,{channel:this.channelRegistry.getChannelType(t)??`browser`,content:`📝 **Context Compacted**\n\n${n}`,groupId:t,id:J(),isFromMe:!0,isTrigger:!1,sender:this.assistantName,timestamp:Date.now()}),this.events.emit(`context-compacted`,{groupId:t,summary:n}),this.events.emit(`typing`,{groupId:t,typing:!1}),this.setState(`idle`,t)}async init(){let e=await st();return this.db=e,await Promise.all([Nn(this,e),In(this,e),Fn(this,e),Pn(this,e)]),await Ln(this,e),Mn(this,e).then(()=>{this.browserChat.onDisplay(()=>{})}),this.events.emit(`ready`,void 0),await K.load(e),Xe(this,e),e}async loadApiKeyForProvider(e,t){let n=await S(e,r(t));if(!n&&t===`openrouter`){let i=await S(e,m.API_KEY);i&&(n=i,await q(e,r(t),i))}if(!n)this.#t=``;else try{this.#t=n}catch(e){console.warn(`[Orchestrator] Failed to load API key:`,e),this.#t=``}this.#e=null}async loadSecretConfig(e,t){let n=await S(e,t);if(!n)return``;try{return await Ze(n)||``}catch{let r=await Qe(n);return r&&await q(e,t,r),n}}async newSession(e,t=p){await Ie(e,t),this.events.emit(`session-reset`,{groupId:t})}async refreshContextUsage(e,t=p){let r=``;try{r=await Ge(e,t,`MEMORY.md`)}catch{}let i=K.enabledTools,a=W.getPeerState(t)||void 0,s=te(this.assistantName,r,i,K.systemPromptOverride,a,void 0,{groupId:t}),c=(await xe(e)).find(e=>e.groupId===t),l=c?.pinnedModel??(c?.pinnedProvider?n(c.pinnedProvider)?.defaultModel??this.model:this.model),u=l;(c?.pinnedProvider??this.provider)===`prompt_api`&&(l===`browser-built-in`||!l)&&!z()&&(u=await S(this.db,m.PROMPT_API_FALLBACK_MODEL)||`onnx-community/Qwen3-0.6B-ONNX`);let d=typeof c?.pinnedMaxTokens==`number`&&Number.isFinite(c.pinnedMaxTokens)&&c.pinnedMaxTokens>0?Math.floor(c.pinnedMaxTokens):this.maxTokens,f=Math.max(1,Math.min(d,o(u))),h=O(u),g=ye(s)+(i?.reduce((e,t)=>e+ye(JSON.stringify(t)),0)??0),_=ze(await Ce(t,200),{contextLimit:h,systemPromptTokens:g,maxOutputTokens:f,skimTop:this.contextCompressionEnabled}),v=_.estimatedTokens+g;if(W.tokenUsage){let e=W.tokenUsage,t=(e.inputTokens||0)+(e.cacheReadTokens||0)+(e.outputTokens||0);v=Math.max(v,t)}this.events.emit(`context-usage`,{estimatedTokens:v,contextLimit:h,usagePercent:Math.min(100,Math.max(_.usagePercent,v/h*100)),truncatedCount:_.truncatedCount})}async restartCurrentRequest(e=p){if(this.state!==`thinking`&&this.state!==`responding`||!this.db)return!1;let t=this.inFlightTriggerByGroup.get(e);return t?(this.stopCurrentRequest(e),await gn(this,this.db,e,t),!0):!1}async routeRoomA2UIAction(e,t){let n=P(e),r=this.peerjs.myPeerId||this.peerjsMyPeerId,i=this.roomManager.getSurfaceOwner(t.surfaceId);if(!i||i===r){if(!this.db)return;await yn(this,this.db,{id:J(),groupId:e,sender:this.peerjsMyAlias||r||`you`,content:wt(t),timestamp:Date.now(),channel:`room`,a2uiAction:t});return}this.roomManager.broadcastA2UIAction(n,t)}async saveSecretConfig(e,t,n){if(!n){await q(e,t,``);return}let r=await Qe(n);if(!r)throw Error(`Failed to encrypt secret config for ${t}`);await q(e,t,r)}async setApiKey(e,t){this.#t=await Qe(t),this.#e=null;let n=await Qe(t);if(!n)throw Error(`key failed to encrypt. config cannot set.`);await q(e,r(this.provider),n)}submitMessage(e,t=p){this.browserChat.submit(e,t)}};export{Rn as Orchestrator};
|
|
15
|
+
`).slice(0,1e4)}function dn(e){let t=e.trim();return t?`Tool result:\n${t}`:``}async function fn(e,t,r){let{apiKey:i,assistantName:a,contextCompression:o=!1,contextLimit:s,enabledTools:c,groupId:l,isScheduledTask:u=!1,maxIterations:d,maxTokens:f,memory:p,messages:m,model:h,provider:g,providerHeaders:_={},providerRuntimeOverrides:v,reasoning:y,rateLimitAutoAdapt:b=!0,rateLimitCallsPerMinute:x=0,storageHandle:S,streaming:C=!1,subagentModelSelectionMode:w,subagentMaxTokens:E,subagentPinnedModel:D,subagentPinnedProvider:ee,systemPrompt:k,workspaceGroupId:A}=t,j=!!t.subagentTask,M=j?l.startsWith(`subagent:`)?l:`subagent:${J()}`:l,ne=A||l;j&&Ee(M,[]);let N={autoAdapt:b!==!1,callsPerMinute:Number.isFinite(x)?Math.max(0,Math.floor(x)):0};S&&He(S);let P=n(g);if(!P){U({payload:{groupId:M,error:`Unknown provider: ${g}`},type:`error`});return}let F=P,I=C&&F.supportsStreaming===!0&&F.format!==`prompt_api`;U({type:`typing`,payload:{groupId:M}}),Z(M,`info`,`Starting`,`Provider: ${F.name} · Model: ${h} · Max tokens: ${f} · Streaming: ${I?`on`:`off`}${C&&!I?` (provider does not support streaming)`:``}`);try{let t=[...m],n=0,l=typeof d==`number`&&d>0?d:50,b=Array.isArray(c)?c:Je;Ve()&&(b=Be(b));let x=k,C=``,A={apiKey:i,assistantName:a??``,db:e,enabledTools:b,invokeSubagent:t=>hn(e,t,r),maxTokens:f,memory:p??``,model:h,provider:g,subagentModelSelectionMode:w,subagentMaxTokens:E,subagentPinnedProvider:ee,subagentPinnedModel:D,providerHeaders:_,providerRuntimeOverrides:v,storageHandle:S,streaming:!1,systemPrompt:x??``},j=[];for(;n<l;){n++;let c=on(M);c&&(b=c.enabledTools,x=te(a,p,b,c.systemPromptOverride,void 0,void 0,{groupId:M}));let l=s??O(h),d=ye(x),{messages:m,estimatedTokens:v}=ze(t,{contextLimit:l,maxOutputTokens:f,skimTop:o,systemPromptTokens:d}),S=v+d,w=Math.max(100,Math.min(f,l-S-500)),E=oe(F,m,b,{contextCompression:o,maxTokens:w,model:h,reasoning:y,system:x});Z(M,`api-call`,`API call #${n}`,`${m.length} messages in context`);let D={...R(F,i),..._},ee=F.baseUrl,k;Ve(),Ve(),k=I?await mn(g,F,ee,D,E,M,h,N,r):await pn(g,F,ee,D,E,M,N,r),k=ln(k,b),k.usage&&U(Ut(M,k.usage,O(h)));for(let e of k.content)e.type===`text`&&e.text&&Z(M,`text`,`Response text`,e.text.length>200?e.text.slice(0,200)+`…`:e.text);if(k.stop_reason===`tool_use`){let n=new Set(b.map(e=>typeof e?.name==`string`?e.name:``).filter(Boolean)),r=k.content.filter(e=>e.type===`text`).map(e=>e.text).join(``).replace(/<internal>[\s\S]*?<\/internal>/g,``).trim();r&&U({payload:{groupId:M,text:r},type:`intermediate-response`}),I&&U({payload:{groupId:M},type:`streaming-end`});let i=[];for(let t of k.content)if(t.type===`tool_use`){let r=n.has(t.name),a=`${t.name}:${JSON.stringify(t.input)}`,o=j.filter(e=>e===a).length;if(j.push(a),!r){let e=`SYSTEM ERROR: Tool '${t.name}' is disabled or unavailable for this request. Do not call it again. Try a different approach or ask the user for help.`;Z(M,`warning`,`Tool blocked`,e),i.push({content:e,tool_use_id:t.id,type:`tool_result`});continue}let s=JSON.stringify(t.input),c=s.length>300?s.slice(0,300)+`…`:s;Z(M,`tool-call`,`Tool: ${t.name}`,c),U(H(M,t.name,`running`));let l;o>=3?(l=`SYSTEM ERROR: You have repeatedly called this tool with the exact same input (${o+1} times). This is a rigid loop. STOP calling this tool with these arguments. Try a different approach, fix the underlying issue, or ask the user for help.`,console.warn(`[Worker] Blocked repetitive tool call:`,a)):l=await T(e,t.name,t.input,ne,{allowedTools:b,isScheduledTask:u,invokeContext:A});let d=typeof l==`string`?l:JSON.stringify(l),f=d.length>500?d.slice(0,500)+`…`:d;Z(M,`tool-result`,`Result: ${t.name}`,f),U(H(M,t.name,`done`)),Array.isArray(l)?i.push({content:l,tool_use_id:t.id,type:`tool_result`}):i.push({content:typeof l==`string`?l.slice(0,1e5):JSON.stringify(l).slice(0,1e5),tool_use_id:t.id,type:`tool_result`})}C=un(i),t.push({role:`assistant`,content:k.content}),t.push({role:`user`,content:i}),U({type:`typing`,payload:{groupId:M}})}else{let e=k.content.filter(e=>e.type===`text`).map(e=>e.text).join(``).replace(/<internal>[\s\S]*?<\/internal>/g,``).trim(),t=(e.toLowerCase()===`(no response)`?``:e)||(C?dn(C):`(no response)`);I&&U({payload:{groupId:M,text:t},type:`streaming-done`}),U({payload:{groupId:M,text:t},type:`response`});return}}U({payload:{text:`⚠️ Reached maximum tool-use iterations (${l}). Stopping to avoid excessive API usage.`,groupId:M},type:`response`})}catch(e){if(e instanceof Error&&e.name===`AbortError`)return;let t=e instanceof Error?e.message:String(e);I&&U({payload:{groupId:M,error:t},type:`streaming-error`}),U({type:`error`,payload:{groupId:M,error:t}})}finally{sn(M),j&&Me(M)}}async function pn(e,t,n,r,i,a,o,s){return L(async()=>{await tn(e,a,o,s);let c=await fetch(n,{body:JSON.stringify(i),headers:r,method:`POST`,signal:s});if(nn(e,c.headers,o),!c.ok){let e=await c.text(),n=Error(`${t.name} API error ${c.status}: ${e}`);throw n.status=c.status,n}return I(t,await c.json())},{baseDelayMs:2e3,jitterFactor:.5,maxDelayMs:3e4,maxRetries:3,onRetry:(e,t,n,r)=>{let i=r instanceof Error?r.message:String(r);Z(a,`warning`,`Retrying API call (${e}/${t})`,i),U({type:`show-toast`,payload:{message:`LLM API: Retrying (${e}/${t})… ${i.slice(0,120)}`,type:`warning`,duration:5e3}})},shouldRetry:e=>Oe(e),signal:s})}async function mn(e,t,n,r,i,a,o,s,c){let l={...i,stream:!0,...(t.format===`openai`||t.format===`mesh-llm`)&&{stream_options:{include_usage:!0}}};await tn(e,a,s,c);let u=await fetch(n,{body:JSON.stringify(l),headers:r,method:`POST`,signal:c});if(nn(e,u.headers,s),!u.ok){let e=await u.text(),n=Error(`${t.name} API error ${u.status}: ${e}`);throw n.status=u.status,n}if(!u.body)throw Error(`Streaming response has no body`);U({payload:{groupId:a},type:`streaming-start`});let d=0,f=``,p=0,m=``,h=(e=!1)=>{let t=Date.now();m&&(!e&&t-p<50||(Z(a,`info`,`Reasoning`,m.length>400?`${m.slice(0,400)}…`:m),m=``,p=t))},g=new rn(t.format,{source:t.id,onText:e=>{let t=Date.now();f+=e,t-d>=50&&(U({payload:{groupId:a,text:f},type:`streaming-chunk`}),f=``,d=t)},onToolStart:e=>{U(H(a,e,`running`))},onUsage:e=>{U(Ut(a,e,O(o)))},onThinking:e=>{m+=e,h(!1)}});for await(let e of Wt(u.body,c))g.push(e);f&&U({payload:{groupId:a,text:f},type:`streaming-chunk`}),h(!0);let _=g.finalize();return t.format===`mesh-llm`&&(_=N(_)),_}async function hn(e,t,n){let r=t.provider,i=async e=>{U(e)};if(r===`transformers_js_browser`){await Ht(e,t.groupId,t.systemPrompt,t.messages,t.maxTokens,i,n,t.enabledTools,t.model);return}if(r===`prompt_api`){if(!z())throw Error(`Prompt API provider is not supported in this environment.`);await ee(e,t.groupId,t.systemPrompt,t.messages,t.maxTokens,i,n,t.enabledTools);return}if(r===`litert_lm_browser`){if(!Ot())throw Error(`Litert LM Browser provider is not supported in this environment.`);await Rt(e,t.groupId,t.systemPrompt,t.messages,t.maxTokens,i,n,t.model,t.enabledTools);return}await fn(e,t,n)}async function gn(e,t,r,i,a=!1,s=!1){let c=s?`subagent:${J()}`:r;if(e.inFlightTriggerByGroup.set(c,i),e.setState(`thinking`,c),e.router?.setTyping(c,!0),e.events.emit(`typing`,{groupId:c,typing:!0}),i.startsWith(`[SCHEDULED TASK]`)){e.pendingScheduledTasks.add(r);let n={id:J(),groupId:r,sender:`Scheduler`,content:i,timestamp:Date.now(),channel:Te(e,r),isFromMe:!1,isTrigger:!0};await ce(t,n),e.events.emit(`message`,n)}let l=``;try{l=await Ge(t,r,`MEMORY.md`)}catch{}let u=(await xe(t)).find(e=>e.groupId===r),d=u?.pinnedProvider??e.provider,f=u?.pinnedModel??(u?.pinnedProvider?n(u.pinnedProvider)?.defaultModel??e.model:e.model),p=typeof u?.pinnedMaxTokens==`number`&&Number.isFinite(u.pinnedMaxTokens)&&u.pinnedMaxTokens>0?Math.floor(u.pinnedMaxTokens):e.maxTokens,h=f;d===`prompt_api`&&(f===`browser-built-in`||!f)&&!z()&&(h=await S(t,m.PROMPT_API_FALLBACK_MODEL)||`onnx-community/Qwen3-0.6B-ONNX`);let g=Math.max(1,Math.min(p,o(h))),_=n(d)??e.providerConfig;e.inFlightEffectiveProviderByGroup.set(c,{providerId:d,providerConfig:_,model:f});let v=Array.isArray(u?.toolTags)?K.allTools.filter(e=>u.toolTags.includes(e.name)):K.enabledTools,y=(await qe(t,c)).tools.filter(e=>!K.allTools.some(t=>t.name===e.name)),b=Array.isArray(u?.toolTags)?y.filter(e=>u.toolTags.includes(e.name)):y.filter(e=>K.isDeclarativeToolEnabled(e.name)),x=[...v,...b],C=await se(t,c),w=C.skills.length>0&&!x.some(e=>e.name===Ye.name)?[...x,Ye]:x,T=u?.subagentModelSelectionMode===`manual`?`manual`:`automatic`,E=u?.subagentMaxTokens,D=u?.subagentPinnedProvider,A=u?.subagentPinnedModel,j=u?.subagentFastProvider,ne=u?.subagentFastModel,N=u?.subagentSmartProvider,P=u?.subagentSmartModel,F=u?.subagentPowerfulProvider,I=u?.subagentPowerfulModel,L=u?.providerRuntimeOverrides,ie=W.getPeerState(r)||void 0,R=te(e.assistantName,l,w,K.systemPromptOverride,ie,C.skills,{groupId:r}),ae=O(h),oe=ye(R)+w.reduce((e,t)=>e+ye(JSON.stringify(t)),0),B=await Ce(r,200);a&&(B=B.length>0?[B[B.length-1]]:[{role:`user`,content:i}]);let V=ze(B,{contextLimit:ae,systemPromptTokens:oe,maxOutputTokens:g,skimTop:e.contextCompressionEnabled}),le=V.messages,ue=V.estimatedTokens+oe;if(W.tokenUsage){let e=W.tokenUsage,t=(e.inputTokens||0)+(e.cacheReadTokens||0)+(e.outputTokens||0);ue=Math.max(ue,t)}if(e.events.emit(`context-usage`,{estimatedTokens:ue,contextLimit:ae,usagePercent:Math.min(100,Math.max(V.usagePercent,ue/ae*100)),truncatedCount:V.truncatedCount}),V.usagePercent>80&&V.truncatedCount>0&&B.length>10&&(e.events.emit(`show-toast`,{message:`Context ${V.usagePercent.toFixed(0)}% full — auto-compacting older messages…`,type:`info`,duration:4e3}),queueMicrotask(()=>De(e,t,r))),d===`transformers_js_browser`){let n=new AbortController;e.promptControllers.set(c,n);let r={apiKey:``,assistantName:e.assistantName,db:t,enabledTools:w,invokeSubagent:async e=>{await hn(t,e,n.signal)},maxTokens:g,memory:l,model:f,provider:d,providerHeaders:he(e,d,``,L),providerRuntimeOverrides:L,streaming:!1,subagentModelSelectionMode:T,subagentMaxTokens:E,subagentPinnedProvider:D,subagentPinnedModel:A,subagentFastProvider:j,subagentFastModel:ne,subagentSmartProvider:N,subagentSmartModel:P,subagentPowerfulProvider:F,subagentPowerfulModel:I,systemPrompt:R};try{await Ht(t,c,R,le,g,async n=>{await re(e,t,n)},n.signal,w,f,r)}catch(n){if(n instanceof Error&&n.name===`AbortError`)return;await Le(e,t,c,`⚠️ Error: ${n instanceof Error?n.message:String(n)}`)}finally{e.promptControllers.delete(c)}return}if(d===`prompt_api`){if(z()||await M(),!z()){await Le(e,t,c,`⚠️ Error: Prompt API is not available in this browser. Switch provider or enable experimental browser flags.`);return}let n=new AbortController;e.promptControllers.set(c,n);let r={apiKey:``,assistantName:e.assistantName,db:t,enabledTools:w,invokeSubagent:async e=>{await hn(t,e,n.signal)},maxTokens:g,memory:l,model:f,provider:d,providerHeaders:he(e,d,``,L),providerRuntimeOverrides:L,streaming:!1,subagentModelSelectionMode:T,subagentMaxTokens:E,subagentPinnedProvider:D,subagentPinnedModel:A,subagentFastProvider:j,subagentFastModel:ne,subagentSmartProvider:N,subagentSmartModel:P,subagentPowerfulProvider:F,subagentPowerfulModel:I,systemPrompt:R};try{await ee(t,c,R,le,g,async n=>{await re(e,t,n)},n.signal,w,r)}catch(n){if(n instanceof Error&&n.name===`AbortError`)return;await Le(e,t,c,`⚠️ Error: ${n instanceof Error?n.message:String(n)}`)}finally{e.promptControllers.delete(c)}return}if(d===`litert_lm_browser`){if(!Ot()){await Le(e,t,c,`⚠️ LiteRT-LM requires WebGPU and WebAssembly.Suspending. These are not both available in this browser.`);return}let n=new AbortController;e.promptControllers.set(c,n);let r={apiKey:``,assistantName:e.assistantName,db:t,enabledTools:w,invokeSubagent:async e=>{await hn(t,e,n.signal)},maxTokens:g,memory:l,model:f,provider:d,providerHeaders:he(e,d,``,L),providerRuntimeOverrides:L,streaming:!1,subagentModelSelectionMode:T,subagentMaxTokens:E,subagentPinnedProvider:D,subagentPinnedModel:A,subagentFastProvider:j,subagentFastModel:ne,subagentSmartProvider:N,subagentSmartModel:P,subagentPowerfulProvider:F,subagentPowerfulModel:I,systemPrompt:R};try{await Rt(t,c,R,le,g,async n=>{await re(e,t,n)},n.signal,f,w,r)}catch(n){if(n instanceof Error&&n.name===`AbortError`)return;await Le(e,t,c,`⚠️ Error: ${n instanceof Error?n.message:String(n)}`)}finally{e.promptControllers.delete(c)}return}let de=e.streamingEnabled&&_.supportsStreaming===!0&&(_.format===`openai`||_.format===`anthropic`);d===`transformers_js_local`&&ve(e,e.events,c);let fe=e.createProviderRequestId(c);e.agentWorker?.postMessage({type:`invoke`,payload:{apiKey:d===e.provider?await k(e):await e.getApiKeyForSpecificProvider(t,d),assistantName:e.assistantName,contextCompression:e.contextCompressionEnabled,contextLimit:O(h),enabledTools:w,groupId:c,isScheduledTask:e.schedulerTriggeredGroups.has(r),maxIterations:e.maxIterations,maxTokens:g,memory:l,messages:le,model:f,provider:d,providerHeaders:he(e,d,fe,L),providerRuntimeOverrides:L,reasoning:me(e),rateLimitAutoAdapt:e.rateLimitAutoAdapt,rateLimitCallsPerMinute:e.rateLimitCallsPerMinute,storageHandle:await S(t,m.STORAGE_HANDLE),streaming:de,subagentModelSelectionMode:T,subagentMaxTokens:E,subagentPinnedProvider:D,subagentPinnedModel:A,subagentFastProvider:j,subagentFastModel:ne,subagentSmartProvider:N,subagentSmartModel:P,subagentPowerfulProvider:F,subagentPowerfulModel:I,systemPrompt:R,subagentTask:s}})}function _n(e,t,n){if(!e.enabledChannelTypes.includes(n.channel))return null;let r=n.content.trim(),i=t.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),a=r;if(e.requireMention){let e=RegExp(`^@${i}\\b\\s*(?:-|:)?\\s*`,`i`);if(!e.test(a))return null;a=a.replace(e,``).trim()}let o=a.match(/^\/([a-zA-Z0-9_]+)(?:\s+([\s\S]+))?$/);if(!o)return null;let s=o[1];if(!e.allowedTools.includes(s))return null;let c=(o[2]||``).trim();if(!c)return{toolName:s,input:{}};let l=c.startsWith(`'`)&&c.endsWith(`'`)||c.startsWith(`"`)&&c.endsWith(`"`)?c.slice(1,-1).trim():c;try{let e=JSON.parse(l);return e&&typeof e==`object`?{toolName:s,input:e}:null}catch{return null}}function vn(e,t){let n=e.trim().match(/^\/([a-z0-9](?:[a-z0-9]|-(?!-))*[a-z0-9]|[a-z0-9])(?:\s+([\s\S]+))?$/u);if(!n)return null;let r=t.find(e=>e.name===n[1]&&e.userInvocable!==!1);return r?{skill:r,arguments:(n[2]||``).trim()}:null}async function yn(e,t,n){if(n.a2uiEnvelopes&&n.a2uiEnvelopes.length>0)for(let t of n.a2uiEnvelopes)e.events.emit(`a2ui-surface`,{groupId:n.groupId,envelope:t});n.a2uiAction&&e.events.emit(`a2ui-action`,{groupId:n.groupId,action:n.a2uiAction});let r=!!n.content,i=(n.attachments?.length??0)>0;if(!r&&!i&&(n.a2uiEnvelopes?.length??0)>0)return;let a=_n(e.directToolCommandPolicy,e.assistantName,n),o=a?null:vn(n.content,(await se(t,n.groupId)).skills),s=n.channel===`browser`,c=e.channelRegistry.shouldAutoTrigger(n.groupId),l=!1;(n.channel===`browser`||n.groupId.startsWith(`room:`))&&(l=e.triggerPattern.test(n.content.trim())),o&&(l=!0),s&&n.groupId.startsWith(`peer:`)&&e.peerCompletedContexts.delete(n.groupId);let u=!!a;if(!l&&e.peerjsMyPeerId){if(n.content.includes(`@${e.peerjsMyPeerId}`))l=!0;else if(e.peerjsMyAlias&&n.content.includes(`@${e.peerjsMyAlias}`))l=!0;else for(let[t,r]of Object.entries(e.peerjsPeerAliases))if(r===e.peerjsMyPeerId&&n.content.includes(`@${t}`)){l=!0;break}}n.content.trim().startsWith(`[SCHEDULED TASK]`)&&(l=!0),n.content.trim().startsWith(`[A2UI ACTION]`)&&(l=!0);let d=!1;d=u||l?!0:s?!(n.groupId.startsWith(`peer:`)||n.groupId.startsWith(`room:`)):c,d&&!s&&!o&&n.groupId.startsWith(`peer:`)&&e.peerCompletedContexts.has(n.groupId)&&(d=!1);let f=await $e(t,n.groupId,n.attachments||[]),p={...n,attachments:f,isFromMe:!1,isTrigger:d};if(d&&!u&&!o?.skill.execution&&e.messageQueue.push(o?{...n,content:`[SKILL COMMAND] Activate the "${o.skill.name}" skill and follow its instructions.\n${o.arguments}`}:n),await ce(t,p),e.events.emit(`message`,p),o?.skill.execution&&e.agentWorker){let t=o.skill.execution.tools.map(e=>{let t=e.input&&typeof e.input==`object`?{...e.input}:{};return o.arguments&&Object.keys(t).length===0&&(t.rawInput=o.arguments),{...e,input:t}});e.agentWorker.postMessage({type:`execute-skill-tools`,payload:{groupId:n.groupId,skillName:o.skill.name,tools:t}});return}if(n.channel===`peerjs`&&we(n.groupId),s&&(n.groupId.startsWith(`peer:`)||n.groupId.startsWith(`room:`))&&e.router?.send(n.groupId,n.content,f).catch(e=>{console.error(`Failed to route browser message to peer:`,e)}),a&&e.agentWorker){e.agentWorker.postMessage({type:`execute-direct-tool`,payload:{groupId:n.groupId,name:a.toolName,input:a.input}});return}bn(e,t)}async function bn(e,t){if(e.processing||e.messageQueue.length===0)return;let r=e.messageQueue[0]?.groupId,i=e.providerConfig,a=e.provider;if(r)try{let e=(await xe(t)).find(e=>e.groupId===r);if(e?.pinnedProvider){let t=n(e.pinnedProvider);t&&(i=t,a=e.pinnedProvider)}}catch{}let o=i?.requiresApiKey!==!1,s=!0;if(o&&(s=a===e.provider?!!await k(e):!!await e.getApiKeyForSpecificProvider(t,a)),o&&!s){let t=`API key not configured. Go to Settings to add your API key.`;e.events.emit(`provider-help`,{providerId:a,reason:t,helpType:B(a,t,o)});let n=e.messageQueue.shift();e.events.emit(`error`,{groupId:n.groupId,error:t});return}e.processing=!0;let c=e.messageQueue.shift();try{await gn(e,t,c.groupId,c.content,c.freshContext,c.subagent)}catch(e){console.error(`Failed to invoke agent:`,e)}finally{e.processing=!1,e.messageQueue.length>0&&bn(e,t)}}var xn=class{listeners;constructor(){this.listeners=new Map}emit(e,t){this.listeners.get(e)?.forEach(e=>e(t))}off(e,t){this.listeners.get(e)?.delete(t)}on(e,t){this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e)?.add(t)}};function Q(e,t){return{jsonrpc:`2.0`,method:e,params:t}}var Sn=class{static isRoomMethod(e){return e===Y.JOIN||e===Y.ROSTER||e===Y.LEAVE||e===Y.MESSAGE||e===Y.INVITE||e===Y.RELAY||e===Y.A2UI||e===Y.A2UI_ACTION}roomsSignal=new w.State([]);_opts;_rooms=new Map;_seen=new Map;_surfaceOwners=new Map;constructor(e){this._opts=e}broadcast(e,t,n){let r=this._rooms.get(e);if(!r)return null;let i=this._opts.getLocalMember(),a=J(),o={roomId:e,messageId:a,senderPeerId:i.peerId,senderAlias:i.alias,text:t,attachments:n?.map(e=>({fileName:e.fileName,mimeType:e.mimeType,path:e.path,size:e.size}))};return this._markSeen(e,a),this._deliverToMembers(r,Q(Y.MESSAGE,o)),a}broadcastA2UI(e,t){let n=this._rooms.get(e);if(!n)return null;let r=this._myPeerId;this._surfaceOwners.set(t.surfaceId,r);let i=J(),a={roomId:e,broadcastId:i,ownerPeerId:r,senderPeerId:r,envelope:t};return this._markSeen(e,i),this._deliverToMembers(n,Q(Y.A2UI,a)),i}broadcastA2UIAction(e,t){let n=this._rooms.get(e);if(!n)return null;let r=this._opts.getLocalMember(),i=this._surfaceOwners.get(t.surfaceId)??``,a=J(),o={roomId:e,broadcastId:a,ownerPeerId:i,senderPeerId:r.peerId,senderAlias:r.alias,action:t};return this._markSeen(e,a),this._deliverToMembers(n,Q(Y.A2UI_ACTION,o)),a}createRoom(e){let t=this._opts.getLocalMember(),n={roomId:J(),name:e,hostPeerId:t.peerId,members:[t],createdAt:Date.now()};return this._save(n),n}get(e){return this._rooms.get(e)??null}getSurfaceOwner(e){return this._surfaceOwners.get(e)}handleNotification(e,t,n){switch(t){case Y.JOIN:this._onJoin(e,n);break;case Y.ROSTER:this._onRoster(n);break;case Y.LEAVE:this._onLeave(e,n);break;case Y.MESSAGE:this._onMessage(n);break;case Y.INVITE:this._opts.onInvite?.(n);break;case Y.RELAY:this._onRelay(n);break;case Y.A2UI:this._onA2UI(n);break;case Y.A2UI_ACTION:this._onA2UIAction(n);break}}invite(e,t){let n=this._rooms.get(e);if(!n)return!1;let r=this._opts.getLocalMember(),i={roomId:e,roomName:n.name,hostPeerId:n.hostPeerId,fromPeerId:r.peerId,fromAlias:r.alias},a=this._opts.transport;return a.connectToPeer(t),a.sendToPeer(t,Q(Y.INVITE,i))}isHost(e){let t=this._rooms.get(e);return!!t&&t.hostPeerId===this._myPeerId}joinRoom(e,t,n){let r=this._opts.getLocalMember(),i=this._rooms.get(e)??{roomId:e,name:n,hostPeerId:t,members:[{peerId:t,alias:t,kind:`agent`},r],createdAt:Date.now()};this._save(i);let a=this._opts.transport;a.connectToPeer(t);let o={roomId:e,member:r};return a.sendToPeer(t,Q(Y.JOIN,o)),i}leaveRoom(e){let t=this._rooms.get(e);if(!t)return;let n=this._myPeerId;if(t.hostPeerId===n){let r={roomId:e,peerId:n,disbanded:!0};this._deliverToMembers(t,Q(Y.LEAVE,r))}else{let r={roomId:e,peerId:n};this._opts.transport.sendToPeer(t.hostPeerId,Q(Y.LEAVE,r))}this._rooms.delete(e),this._seen.delete(e),this._opts.removeRoom?.(e),this._publish()}list(){return Array.from(this._rooms.values())}loadRooms(e){this._rooms.clear();for(let t of e)this._rooms.set(t.roomId,t);this._publish()}_broadcastRoster(e){let t={roomId:e.roomId,name:e.name,hostPeerId:e.hostPeerId,members:e.members};this._deliverToMembers(e,Q(Y.ROSTER,t))}_deliverToMembers(e,t){let n=this._myPeerId;for(let r of e.members)r.peerId!==n&&this._deliverToPeer(e,r.peerId,t)}_deliverToPeer(e,t,n){let r=this._opts.transport;if(r.isConnected(t)){r.sendToPeer(t,n);return}let i=this._myPeerId;if(e.hostPeerId!==i&&e.hostPeerId!==t&&r.isConnected(e.hostPeerId)){let i={roomId:e.roomId,targetPeerId:t,inner:n};r.sendToPeer(e.hostPeerId,Q(Y.RELAY,i)),r.connectToPeer(t);return}r.connectToPeer(t),r.sendToPeer(t,n)}_hasSeen(e,t){return this._seen.get(e)?.has(t)??!1}_markSeen(e,t){let n=this._seen.get(e);if(n||(n=new Set,this._seen.set(e,n)),n.add(t),n.size>500){let e=n.values().next().value;e!==void 0&&n.delete(e)}}get _myPeerId(){return this._opts.transport.myPeerId}_onA2UI(e){if(!e||typeof e.roomId!=`string`||typeof e.broadcastId!=`string`||!e.envelope||!this._rooms.get(e.roomId)||this._hasSeen(e.roomId,e.broadcastId))return;this._markSeen(e.roomId,e.broadcastId);let t=e.envelope.surfaceId;this._surfaceOwners.get(t)!==this._myPeerId&&this._surfaceOwners.set(t,e.ownerPeerId);let n={id:e.broadcastId,groupId:Fe(e.roomId),sender:e.senderPeerId,content:``,timestamp:Date.now(),channel:`room`,a2uiEnvelopes:[e.envelope]};this._opts.onMessage(n)}_onA2UIAction(e){if(!e||typeof e.roomId!=`string`||typeof e.broadcastId!=`string`||!e.action||!this._rooms.get(e.roomId)||this._hasSeen(e.roomId,e.broadcastId)||(this._markSeen(e.roomId,e.broadcastId),this._surfaceOwners.get(e.action.surfaceId)!==this._myPeerId))return;let t={id:e.broadcastId,groupId:Fe(e.roomId),sender:e.senderAlias||e.senderPeerId,content:wt(e.action,e.senderAlias),timestamp:Date.now(),channel:`room`,a2uiAction:e.action};this._opts.onMessage(t)}_onJoin(e,t){if(!t||typeof t.roomId!=`string`)return;let n=this._rooms.get(t.roomId);if(!n||n.hostPeerId!==this._myPeerId)return;let r=t.member??{peerId:e,alias:e,kind:`human`};r.peerId=e;let i=n.members.findIndex(t=>t.peerId===e);i>=0?n.members[i]=r:n.members.push(r),this._save(n),this._broadcastRoster(n)}_onLeave(e,t){if(!t||typeof t.roomId!=`string`)return;let n=this._rooms.get(t.roomId);if(n){if(t.disbanded){this._rooms.delete(t.roomId),this._seen.delete(t.roomId),this._opts.removeRoom?.(t.roomId),this._publish();return}n.hostPeerId===this._myPeerId&&(n.members=n.members.filter(n=>n.peerId!==(t.peerId||e)),this._save(n),this._broadcastRoster(n))}}_onMessage(e){if(!e||typeof e.roomId!=`string`||typeof e.messageId!=`string`||!this._rooms.get(e.roomId)||this._hasSeen(e.roomId,e.messageId))return;this._markSeen(e.roomId,e.messageId);let t={id:e.messageId,groupId:Fe(e.roomId),sender:e.senderAlias||e.senderPeerId,content:e.text??``,timestamp:Date.now(),channel:`room`,attachments:e.attachments?.map(e=>({fileName:e.fileName,mimeType:e.mimeType,path:e.path,size:e.size}))};this._opts.onMessage(t)}_onRelay(e){!e||typeof e.targetPeerId!=`string`||!e.inner||this.isHost(e.roomId)&&this._opts.transport.sendToPeer(e.targetPeerId,e.inner)}_onRoster(e){if(!e||typeof e.roomId!=`string`)return;let t=this._rooms.get(e.roomId),n={roomId:e.roomId,name:e.name??t?.name??e.roomId,hostPeerId:e.hostPeerId,members:Array.isArray(e.members)?e.members:[],createdAt:t?.createdAt??Date.now()};this._save(n)}_publish(){this.roomsSignal.set(this.list())}_save(e){this._rooms.set(e.roomId,e),this._opts.persistRoom?.(e),this._publish()}};function Cn(e){return e&&b(e)?Promise.resolve().then(()=>(e.db.prepare(`SELECT * FROM tasks WHERE enabled = 1`).all()??[]).map(e=>({...e,enabled:!0,tools:e.tools?JSON.parse(e.tools):void 0}))):new Promise(async(t,n)=>{try{let r=e??await x();if(!r)return n(Error(`failed to get transaction, cannot get enabled tasks.`));let i=r.transaction(`tasks`,`readonly`);if(!i)return n(Error(`failed to get transaction`));let a=i.objectStore(`tasks`).index(`by-enabled`).getAll(1);a.onsuccess=()=>{t(a.result.map(e=>({...e,enabled:!0})))},a.onerror=()=>n(a.error)}catch(e){n(e)}})}function wn(e,t){if(typeof e!=`string`||!e.trim())return!1;let n=e.trim().split(/\s+/);if(n.length!==5)return!1;let[r,i,a,o,s]=n;return Tn(r,t.getMinutes())&&Tn(i,t.getHours())&&Tn(a,t.getDate())&&Tn(o,t.getMonth()+1)&&Tn(s,t.getDay())}function Tn(e,t){return e===`*`||e.split(`,`).some(e=>{if(e.includes(`/`)){let[n,r]=e.split(`/`),i=parseInt(r,10);if(isNaN(i)||i<=0)return!1;if(n===`*`)return t%i===0;if(n.includes(`-`)){let[e,r]=n.split(`-`).map(Number);return t>=e&&t<=r&&(t-e)%i===0}let a=parseInt(n,10);return t>=a&&(t-a)%i===0}if(e.includes(`-`)){let[n,r]=e.split(`-`).map(Number);return t>=n&&t<=r}return parseInt(e,10)===t})}var En=class{interval=null;onTaskChange;runner;constructor(e,t){this.runner=e,this.onTaskChange=t}ranThisMinute(e,t){if(!e.lastRun)return!1;let n=new Date(e.lastRun);return n.getFullYear()===t.getFullYear()&&n.getMonth()===t.getMonth()&&n.getDate()===t.getDate()&&n.getHours()===t.getHours()&&n.getMinutes()===t.getMinutes()}start(){this.interval||(this.interval=setInterval(()=>this.tick(),v),this.tick())}stop(){this.interval&&=(clearInterval(this.interval),null)}async tick(){try{let e=await Cn(),t=new Date;for(let n of e){let e=n.schedule||``;e!==``&&wn(e,t)&&!this.ranThisMinute(n,t)&&(await Ae(n.id,t.getTime()),this.onTaskChange?.(),this.runner(n).catch(e=>{console.error(`Task ${n.id} failed:`,e)}))}}catch(e){console.error(`Scheduler tick error:`,e)}}};function Dn(e){if(!e)return[];try{let t=JSON.parse(e);if(Array.isArray(t))return D(t.map(e=>String(e)))}catch{}return D(e.split(`,`))}async function On(e,t){e.channelEnabledByType.telegram=await be(`telegram`,t),e.channelEnabledByType.imessage=await be(`imessage`,t);let n=await e.loadSecretConfig(t,m.TELEGRAM_BOT_TOKEN),r=Dn(await S(t,m.TELEGRAM_CHAT_IDS)),i=await S(t,m.TELEGRAM_USE_PROXY)===`true`;e.telegramBotToken=n,e.telegramChatIds=r,e.telegramUseProxy=i,e.telegram.configure(n,r,i);let a=async(e,n)=>{try{let r=await Pe(t,e,n),i=new Uint8Array(r.byteLength);i.set(r);let a=Re(n.split(`/`).pop()||n);return new Blob([i],{type:a})}catch(e){return console.warn(`Orchestrator: channel fileReader failed for ${n}:`,e),null}};e.telegram.fileReader=a,e.imessage.fileReader=a;let o=(await S(t,m.IMESSAGE_SERVER_URL)||``).trim().replace(/\/+$/,``),s=await e.loadSecretConfig(t,m.IMESSAGE_API_KEY),c=Dn(await S(t,m.IMESSAGE_CHAT_IDS));e.imessageServerUrl=o,e.imessageApiKey=s,e.imessageChatIds=c,e.imessage.configure(o,s,c),e.channelEnabledByType.peerjs=await be(`peerjs`,t);let l=(await S(t,m.PEERJS_MY_PEER_ID)||``).trim(),u=Dn(await S(t,m.PEERJS_TRUSTED_PEER_IDS)),d=(await S(t,m.PEERJS_SERVER_HOST)||``).trim(),f=await S(t,m.PEERJS_SERVER_PORT),p=f&&parseInt(f,10)||0,h=(await S(t,m.PEERJS_SERVER_PATH)||``).trim(),g=await S(t,m.PEERJS_SERVER_SECURE)!==`false`,_={},v=await S(t,m.PEERJS_PEER_ALIASES);if(v)try{_=JSON.parse(v)}catch(e){console.warn(`Failed to parse peerjs_peer_aliases`,e)}e.peerjsMyPeerId=l,e.peerjsMyAlias=(await S(t,m.PEERJS_MY_ALIAS)||``).trim(),e.peerjsTrustedPeerIds=u,e.peerjsPeerAliases=_,e.peerjsServerHost=d,e.peerjsServerPort=p,e.peerjsServerPath=h,e.peerjsServerSecure=g;let y=d?{host:d,port:p||void 0,path:h||void 0,secure:g}:{};e.peerjs.configure(l,u,y)}const $={allowedTools:[`clear_chat`,`show_toast`],enabledChannelTypes:[`telegram`],requireMention:!0};function kn(e){if(!e)return{allowedTools:[...$.allowedTools],enabledChannelTypes:[...$.enabledChannelTypes],requireMention:$.requireMention};try{let t=JSON.parse(e),n=Array.isArray(t.enabledChannelTypes)?t.enabledChannelTypes.filter(e=>typeof e==`string`&&e.trim().length>0):$.enabledChannelTypes;return{allowedTools:Array.isArray(t.allowedTools)?t.allowedTools.filter(e=>typeof e==`string`&&e.trim().length>0):$.allowedTools,enabledChannelTypes:n,requireMention:typeof t.requireMention==`boolean`?t.requireMention:$.requireMention}}catch{return{allowedTools:[...$.allowedTools],enabledChannelTypes:[...$.enabledChannelTypes],requireMention:$.requireMention}}}function An(e,t){typeof navigator>`u`||!navigator.serviceWorker||navigator.serviceWorker.addEventListener(`message`,t=>{if(t.data?.type===`request-proxy-config`){E(e);return}if(t.data?.type!==`scheduled-task-trigger`)return;let{taskId:n,groupId:r,prompt:i,taskType:a,tools:o}=t.data;r&&(e.schedulerTriggeredGroups.add(r),(async()=>{let t=W.tasks.find(e=>e.id===n);if(t){W.runTask(t);return}if(a===`tools`&&Array.isArray(o)&&o.length>0){W.runTask({id:n||`push-task-${Date.now()}`,groupId:r,createdAt:Date.now(),enabled:!0,prompt:i||``,type:`tools`,tools:o,lastRun:null});return}i&&V(e,i,r)})().catch(e=>console.error(`Push-triggered task ${n} failed:`,e)).finally(()=>{e.schedulerTriggeredGroups.delete(r)}))})}function jn(e){return new Sn({transport:{get myPeerId(){return e.peerjs.myPeerId||e.peerjsMyPeerId},sendToPeer:(t,n)=>e.peerjs.sendRoomNotification(t,n),isConnected:t=>e.peerjs.isPeerConnected(t),connectToPeer:t=>e.peerjs.connectPeer(t)},getLocalMember:()=>({peerId:e.peerjs.myPeerId||e.peerjsMyPeerId,alias:e.peerjsMyAlias||e.peerjs.myPeerId||e.peerjsMyPeerId||e.assistantName,kind:`agent`,agentName:e.assistantName}),onMessage:t=>e.roomChannel.deliverInbound(t),onInvite:t=>ne(e,t),persistRoom:t=>{e.db&&ge(e.db,t).catch(e=>console.error(`Failed to persist room:`,e))},removeRoom:t=>{e.db&&A(e.db,t).catch(e=>console.error(`Failed to delete room:`,e))}})}async function Mn(e,t){e.initializeChannelRegistry(),e.channelRegistry.onMessage(n=>{yn(e,t,n).catch(e=>{console.error(`Failed to enqueue inbound message:`,e)})}),e.channelRegistry.onTyping((t,n)=>{e.events.emit(`typing`,{groupId:t,typing:n}),t.startsWith(`peer:`)&&W.setRemoteAgentTyping(t,n)}),e.peerjs.onTaskComplete(t=>{e.peerCompletedContexts.add(t)}),await On(e,t),Se(e);try{let n=await F(t);e.roomManager.loadRooms(n)}catch(e){console.error(`Failed to load rooms:`,e)}}async function Nn(e,t){e.assistantName=await S(t,m.ASSISTANT_NAME)||`ShadowClaw`,e.triggerPattern=a(e.assistantName)}async function Pn(e,t){let n=await S(t,m.VM_BOOT_MODE);e.vmBootMode=n===`disabled`||n===`auto`||n===`9p`||n===`ext2`?n:`disabled`,e.streamingEnabled=await S(t,m.STREAMING_ENABLED)!==`false`,e.webMcpToolsEnabled=await S(t,m.WEBMCP_TOOLS_ENABLED)!==`false`,e.vmBashFullInternetAccess=await S(t,m.VM_BASH_FULL_INTERNET_ACCESS)===`true`;let r=await S(t,m.WEBMCP_MODE);(r===`native`||r===`polyfill`)&&nt(r),e.contextCompressionEnabled=await S(t,m.CONTEXT_COMPRESSION_ENABLED)===`true`;let i=await S(t,m.REASONING_EFFORT);e.reasoningEffort=i?i.trim().toLowerCase():`none`,e.directToolCommandPolicy=kn(await S(t,m.DIRECT_TOOL_COMMAND_POLICY)),e.useProxy=await S(t,m.USE_PROXY)===`true`,e.proxyUrl=await S(t,m.PROXY_URL)||`/proxy`,e.gitProxyUrl=await S(t,m.GIT_PROXY_URL)||`/git-proxy`,e.taskServerEnabled=await S(t,m.TASK_SERVER_ENABLED)===`true`,e.taskServerUrl=await S(t,m.TASK_SERVER_URL)||(await import(`./config-D4lVqMs8.js`).then(e=>e.k)).DEFAULT_TASK_SERVER_URL}async function Fn(e,t){let n=await S(t,m.LLAMAFILE_MODE);n===`cli`||n===`server`?e.llamafileMode=n:await q(t,m.LLAMAFILE_MODE,e.llamafileMode);let r=await S(t,m.LLAMAFILE_HOST);r&&(e.llamafileHost=r);let i=await S(t,m.LLAMAFILE_PORT);if(i){let t=parseInt(i,10);Number.isFinite(t)&&t>=1&&t<=65535&&(e.llamafilePort=t)}await S(t,m.LLAMAFILE_OFFLINE)===`false`&&(e.llamafileOffline=!1),de(e);let a=await S(t,m.MESH_LLM_HOST);a&&(e.meshLlmHost=a),j(e)}async function In(e,t){let[r,i,a,c,l,u,d,f,p]=await Promise.all([S(t,m.PROVIDER),S(t,m.BEDROCK_REGION_FALLBACK),S(t,m.BEDROCK_PROFILE_FALLBACK),S(t,m.BEDROCK_AUTH_MODE),S(t,m.MODEL),S(t,m.MAX_TOKENS),S(t,m.MAX_ITERATIONS),S(t,m.RATE_LIMIT_CALLS_PER_MINUTE),S(t,m.RATE_LIMIT_AUTO_ADAPT)]),h=r?n(r):void 0;r&&h&&(e.provider=r,e.providerConfig=h),await e.loadApiKeyForProvider(t,e.provider),e.bedrockRegionFallback=(i||``).trim(),e.bedrockProfileFallback=(a||``).trim(),e.bedrockAuthMode=(c||`provider_chain`).trim();let g=()=>{let t=()=>{fe(e).then(t=>s.fetchModelInfo(e.providerConfig,t||void 0,he(e,e.provider)))};typeof globalThis.requestIdleCallback==`function`?globalThis.requestIdleCallback(t,{timeout:5e3}):setTimeout(t,2e3)};typeof window<`u`&&typeof document<`u`?document.readyState===`complete`?g():window.addEventListener(`load`,g,{once:!0}):g(),l?e.model=l:e.model=e.providerConfig.defaultModel;let _=e.model;e.provider===`prompt_api`&&!z()&&(e.model===`browser-built-in`||!e.model)&&(_=await S(t,m.PROMPT_API_FALLBACK_MODEL)||`onnx-community/Qwen3-0.6B-ONNX`,ke(_).catch(()=>{}));let v=o(_);if(u===`8192`||e.provider===`prompt_api`&&!z()&&u===`4096`?e.maxTokens=v:e.maxTokens=Math.max(1,parseInt(u||String(v),10)),d&&(e.maxIterations=parseInt(d,10)||50),f){let t=parseInt(f,10);e.rateLimitCallsPerMinute=Number.isFinite(t)?Math.max(0,t):0}e.rateLimitAutoAdapt=p!==`false`}async function Ln(e,t){e.agentWorker=new Worker(C(new URL(`./agent.worker.js`,import.meta.url).href),{type:`module`}),e.agentWorker.onmessage=n=>re(e,t,n.data),e.agentWorker.onerror=e=>{console.error(`Agent worker error:`,e)};let n=await S(t,m.STORAGE_HANDLE);n&&e.agentWorker.postMessage({payload:{storageHandle:n},type:`set-storage`}),E(e),e.scheduler=new En(async t=>{await ie(e,t)},()=>{e.events.emit(`task-change`,{type:`executed`})}),ae().then(t=>{t&&e.scheduler?.start()}),An(e,t)}var Rn=class{agentWorker=null;assistantName=g;bedrockAuthMode=`provider_chain`;bedrockProfileFallback=``;bedrockRegionFallback=``;browserChat=new ct;channelEnabledByType={browser:!0,peerjs:!1,telegram:!1,imessage:!1};channelRegistry=new lt;contextCompressionEnabled=!1;db=null;directToolCommandPolicy={...$};ensureControlPlaneConnected=rt;events=new xn;gitProxyUrl=`/git-proxy`;imessage=new ut;imessageApiKey=``;imessageChatIds=[];imessageServerUrl=``;inFlightEffectiveProviderByGroup=new Map;inFlightProviderRequestIds=new Map;inFlightTriggerByGroup=new Map;llamafileHost=`127.0.0.1`;llamafileMode=`cli`;llamafileOffline=!0;llamafilePort=8080;maxIterations=50;maxTokens=h;meshLlmHost=``;messageQueue=[];model=i().defaultModel;peerCompletedContexts=new Set;peerjs=new et;peerjsMyAlias=``;peerjsMyPeerId=``;peerjsPeerAliases={};peerjsServerHost=``;peerjsServerPath=``;peerjsServerPort=0;peerjsServerSecure=!0;peerjsTrustedPeerIds=[];pendingScheduledTasks=new Set;processing=!1;promptControllers=new Map;provider=f;providerConfig=i();proxyUrl=`/proxy`;pushSubscriptionWarned=!1;rateLimitAutoAdapt=!0;rateLimitCallsPerMinute=0;reasoningEffort=`none`;roomChannel=new gt;roomManager;router=null;scheduler=null;schedulerTriggeredGroups=new Set;state=`idle`;streamingEnabled=!0;taskServerEnabled=!1;taskServerUrl=`/schedule`;telegram=new vt;telegramBotToken=``;telegramChatIds=[];telegramUseProxy=!1;transformersProgressPollers=new Map;triggerPattern=a(g);useProxy=!1;vmBashFullInternetAccess=!1;vmBootMode=`disabled`;vmStatus={ready:!1,booting:!1,bootAttempted:!1,error:null};webMcpEffectCleanup=null;webMcpRegistrationLock=Promise.resolve();webMcpToolsEnabled=!0;#e=null;#t=null;constructor(){this.roomManager=jn(this),this.initializeChannelRegistry()}clearProviderRequest(e){this.inFlightProviderRequestIds.delete(e)}createProviderRequestId(e){if(this.provider!==`llamafile`)return this.inFlightProviderRequestIds.delete(e),``;let t=`${e}:${Date.now().toString(36)}:${Math.random().toString(36).slice(2,10)}`;return this.inFlightProviderRequestIds.set(e,t),t}initializeChannelRegistry(){this.channelRegistry=new lt,this.channelRegistry.register(`br:`,this.browserChat,{badge:`Browser`,autoTrigger:!0}),this.channelRegistry.register(`tg:`,this.telegram,{badge:`Telegram`,autoTrigger:!1}),this.channelRegistry.register(`im:`,this.imessage,{badge:`iMessage`,autoTrigger:!0}),this.channelRegistry.register(`peer:`,this.peerjs,{badge:`PeerJS`,autoTrigger:!1}),this.channelRegistry.register(`room:`,this.roomChannel,{badge:`Room`,autoTrigger:!1}),this.roomChannel.setManager(this.roomManager),this.roomChannel.setPeerJs(this.peerjs),this.peerjs.setRoomNotificationHandler((e,t,n)=>this.roomManager.handleNotification(e,t,n)),this.router=new Tt(this.channelRegistry)}setState(e,t){this.state=e,this.events.emit(`state-change`,{state:e,groupId:t})}shutdown(){this.channelRegistry.stopAll(),this.scheduler?.stop();for(let e of this.transformersProgressPollers.keys())Ne(this,e);this.agentWorker?.terminate(),typeof this.webMcpEffectCleanup==`function`&&this.webMcpEffectCleanup(),tt()}async ensureAllConnections(e={}){let t=e.force??!1;try{await this.ensureControlPlaneConnected({orchestrator:this,db:this.db||void 0,force:t})}catch(e){console.warn(`Error ensuring Control Plane connection:`,e)}try{Se(this,t)}catch(e){console.warn(`Error ensuring channel connections:`,e)}this.taskServerEnabled&&this.db&&(W.replayTaskSyncOutbox(this.db),W.loadTasks(this.db)),this.scheduler&&(this.scheduler.start(),this.scheduler.tick())}stopCurrentRequest(e=p){if(this.state!==`thinking`&&this.state!==`responding`)return;Ne(this,e);let t=this.inFlightProviderRequestIds.get(e)||``;this.clearProviderRequest(e),this.agentWorker?.postMessage({type:`cancel`,payload:{groupId:e}}),this.provider===`llamafile`&&t&&le(t);let n=this.promptControllers.get(e);n&&(n.abort(),this.promptControllers.delete(e)),this.inFlightTriggerByGroup.delete(e),this.inFlightEffectiveProviderByGroup.delete(e),this.events.emit(`typing`,{groupId:e,typing:!1}),this.router?.setTyping(e,!1),this.setState(`idle`,e)}async getApiKey(){if(!this.#t)return null;let e=Date.now();if(this.#e&&this.#e.expiresAt>e)return this.#e.value;try{let t=await Ze(this.#t);return t===null?null:(this.#e={expiresAt:e+3e4,value:t},t)}catch(e){return console.error(`[Orchestrator] Failed to decrypt API key:`,e),null}}async getApiKeyForSpecificProvider(e,t){let n=await S(e,r(t));if(!n&&t===`openrouter`){let t=await S(e,m.API_KEY);t&&(n=t)}if(!n)return``;try{return await Ze(n)||``}catch(e){return console.error(`[Orchestrator] Failed to decrypt API key:`,e),``}}async handleCompactDone(e,t,n){await Ie(e,t),await ce(e,{channel:this.channelRegistry.getChannelType(t)??`browser`,content:`📝 **Context Compacted**\n\n${n}`,groupId:t,id:J(),isFromMe:!0,isTrigger:!1,sender:this.assistantName,timestamp:Date.now()}),this.events.emit(`context-compacted`,{groupId:t,summary:n}),this.events.emit(`typing`,{groupId:t,typing:!1}),this.setState(`idle`,t)}async init(){let e=await st();return this.db=e,await Promise.all([Nn(this,e),In(this,e),Fn(this,e),Pn(this,e)]),await Ln(this,e),Mn(this,e).then(()=>{this.browserChat.onDisplay(()=>{})}),this.events.emit(`ready`,void 0),await K.load(e),Xe(this,e),e}async loadApiKeyForProvider(e,t){let n=await S(e,r(t));if(!n&&t===`openrouter`){let i=await S(e,m.API_KEY);i&&(n=i,await q(e,r(t),i))}n?this.#t=n:this.#t=``,this.#e=null}async loadSecretConfig(e,t){let n=await S(e,t);if(!n)return``;try{return await Ze(n)||``}catch{let r=await Qe(n);return r&&await q(e,t,r),n}}async newSession(e,t=p){await Ie(e,t),this.events.emit(`session-reset`,{groupId:t})}async refreshContextUsage(e,t=p){let r=``;try{r=await Ge(e,t,`MEMORY.md`)}catch{}let i=K.enabledTools,a=W.getPeerState(t)||void 0,s=te(this.assistantName,r,i,K.systemPromptOverride,a,void 0,{groupId:t}),c=(await xe(e)).find(e=>e.groupId===t),l=c?.pinnedModel??(c?.pinnedProvider?n(c.pinnedProvider)?.defaultModel??this.model:this.model),u=l;(c?.pinnedProvider??this.provider)===`prompt_api`&&(l===`browser-built-in`||!l)&&!z()&&(u=await S(this.db,m.PROMPT_API_FALLBACK_MODEL)||`onnx-community/Qwen3-0.6B-ONNX`);let d=typeof c?.pinnedMaxTokens==`number`&&Number.isFinite(c.pinnedMaxTokens)&&c.pinnedMaxTokens>0?Math.floor(c.pinnedMaxTokens):this.maxTokens,f=Math.max(1,Math.min(d,o(u))),h=O(u),g=ye(s)+(i?.reduce((e,t)=>e+ye(JSON.stringify(t)),0)??0),_=ze(await Ce(t,200),{contextLimit:h,systemPromptTokens:g,maxOutputTokens:f,skimTop:this.contextCompressionEnabled}),v=_.estimatedTokens+g;if(W.tokenUsage){let e=W.tokenUsage,t=(e.inputTokens||0)+(e.cacheReadTokens||0)+(e.outputTokens||0);v=Math.max(v,t)}this.events.emit(`context-usage`,{estimatedTokens:v,contextLimit:h,usagePercent:Math.min(100,Math.max(_.usagePercent,v/h*100)),truncatedCount:_.truncatedCount})}async restartCurrentRequest(e=p){if(this.state!==`thinking`&&this.state!==`responding`||!this.db)return!1;let t=this.inFlightTriggerByGroup.get(e);return t?(this.stopCurrentRequest(e),await gn(this,this.db,e,t),!0):!1}async routeRoomA2UIAction(e,t){let n=P(e),r=this.peerjs.myPeerId||this.peerjsMyPeerId,i=this.roomManager.getSurfaceOwner(t.surfaceId);if(!i||i===r){if(!this.db)return;await yn(this,this.db,{id:J(),groupId:e,sender:this.peerjsMyAlias||r||`you`,content:wt(t),timestamp:Date.now(),channel:`room`,a2uiAction:t});return}this.roomManager.broadcastA2UIAction(n,t)}async saveSecretConfig(e,t,n){if(!n){await q(e,t,``);return}let r=await Qe(n);if(!r)throw Error(`Failed to encrypt secret config for ${t}`);await q(e,t,r)}async setApiKey(e,t){this.#t=await Qe(t),this.#e=null;let n=await Qe(t);if(!n)throw Error(`key failed to encrypt. config cannot set.`);await q(e,r(this.provider),n)}submitMessage(e,t=p){this.browserChat.submit(e,t)}};export{Rn as Orchestrator};
|
|
@@ -36,4 +36,4 @@ const shadowClawImportScripts = (...urls) => {
|
|
|
36
36
|
|
|
37
37
|
shadowClawNativeImportScripts(...urls.map((url) => shadowClawServiceWorkerTrustedTypesPolicy.createScriptURL(url)));
|
|
38
38
|
};
|
|
39
|
-
if(!self.define){let e,a={};const s=(s,c)=>(s=new URL(s+".js",c).href,a[s]||new Promise(a=>{if("document"in self){const e=document.createElement("script");e.src=s,e.onload=a,document.head.appendChild(e)}else e=s,shadowClawImportScripts(s),a()}).then(()=>{let e=a[s];if(!e)throw new Error(`Module ${s} didn’t register its module`);return e}));self.define=(c,o)=>{const i=e||("document"in self?document.currentScript.src:"")||location.href;if(a[i])return;let d={};const r=e=>s(e,i),n={module:{uri:i},exports:d,require:r};a[i]=Promise.all(c.map(e=>n[e]||r(e))).then(e=>(o(...e),d))}}define(["./workbox-92eae37e"],function(e){"use strict";shadowClawImportScripts("service-worker/fetch-proxy.js","service-worker/push-handler.js","service-worker/share-target.js"),self.addEventListener("message",e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()}),e.clientsClaim(),e.precacheAndRoute([{url:"index.css",revision:"411cebe9d73dc845bdbe6dc25374886d"},{url:"subsystems/channels/bindings/webrtc-datachannel/v1/index.css",revision:"84ea62c12532f5339a455f7da8e47048"},{url:"components/shadow-claw-tools/shadow-claw-tools.css",revision:"83e53f4fc50714d75f4f223c8cc1126b"},{url:"components/shadow-claw-toast/shadow-claw-toast.css",revision:"4ce2dcc1c81363147fa0a5e79474aed3"},{url:"components/shadow-claw-terminal/shadow-claw-terminal.css",revision:"34974a6d9a97832231fd931006a071d1"},{url:"components/shadow-claw-tasks/shadow-claw-tasks.css",revision:"520159be0d18dc3caad54e9e1dc1eb1b"},{url:"components/shadow-claw-settings/shadow-claw-settings.css",revision:"ad9bba0bb9beb555b3b43a90e590dfa1"},{url:"components/shadow-claw-pdf-viewer/shadow-claw-pdf-viewer.css",revision:"4c02b802e45b7e2377ecd915909ddf1c"},{url:"components/shadow-claw-pages/shadow-claw-pages.css",revision:"8ad238a0442ad57c12fe1c2094215cef"},{url:"components/shadow-claw-page-header/shadow-claw-page-header.css",revision:"5af6ca91ae275bdbb7f0f6bc470c83df"},{url:"components/shadow-claw-files/shadow-claw-files.css",revision:"8ea713f1228d9638039afde711505bab"},{url:"components/shadow-claw-file-viewer/shadow-claw-file-viewer.css",revision:"08101d1aefc62f51c5bff42cd468e663"},{url:"components/shadow-claw-file-viewer/highlightjs-atom-one-dark.min.css",revision:"70ec8740925f3c6615ec654090b9e2ce"},{url:"components/shadow-claw-conversations/shadow-claw-conversations.css",revision:"a941256c23d142754ea3c7e9b416f784"},{url:"components/shadow-claw-chat/shadow-claw-chat.css",revision:"b6c9d27682fce5e686696943ae1bf9b8"},{url:"components/shadow-claw-channels/shadow-claw-channels.css",revision:"431a76502c7ba3f8c83bb572f0afd71f"},{url:"components/shadow-claw-a2ui/shadow-claw-a2ui.css",revision:"d05fdf188a8295021735e601bcc5b743"},{url:"components/shadow-claw/shadow-claw.css",revision:"81482994292b2b187885d08316ef8a81"},{url:"components/settings/shadow-claw-webvm/shadow-claw-webvm.css",revision:"f8167aff26a24125d7b9b23aee8f728a"},{url:"components/settings/shadow-claw-task-server/shadow-claw-task-server.css",revision:"f6e534a6023b143270e772c7ee6119a0"},{url:"components/settings/shadow-claw-storage/shadow-claw-storage.css",revision:"dd8009443e450b709657368a19974f09"},{url:"components/settings/shadow-claw-peerjs/shadow-claw-peerjs.css",revision:"81e589816bc4fd4da2c7d688b3db5ba9"},{url:"components/settings/shadow-claw-notifications/shadow-claw-notifications.css",revision:"32804d3923655ae18f137db78bfaccfa"},{url:"components/settings/shadow-claw-networking/shadow-claw-networking.css",revision:"f186e80f555986dc26ab392cf7c29e92"},{url:"components/settings/shadow-claw-mcp-remote/shadow-claw-mcp-remote.css",revision:"c9be041c099a1d4733ed14a87ee37bfa"},{url:"components/settings/shadow-claw-llm/shadow-claw-llm.css",revision:"8703cbfc0af3167237d71d7e3f5da4f5"},{url:"components/settings/shadow-claw-integrations/shadow-claw-integrations.css",revision:"d7b9e45ff13eecf7c6571ed755dc8358"},{url:"components/settings/shadow-claw-git/shadow-claw-git.css",revision:"eab353bd20d322d0c87a7a53e639c2a6"},{url:"components/settings/shadow-claw-control-plane/shadow-claw-control-plane.css",revision:"2cc9185fc887fb10055d9edd405bd59c"},{url:"components/settings/shadow-claw-channel-config/shadow-claw-channel-config.css",revision:"c6da4c8aa3ad1b6359e6cb7af9d5f267"},{url:"components/settings/shadow-claw-accounts/shadow-claw-accounts.css",revision:"f9a43c87ce69b7be36ad18100311c14e"},{url:"components/common/shadow-claw-provider-module-settings/shadow-claw-provider-module-settings.css",revision:"b6bbdcee11cf8fd83c411f6734e10da8"},{url:"components/common/shadow-claw-provider-model-picker/shadow-claw-provider-model-picker.css",revision:"65f56fa4a760d0207440697739be250a"},{url:"components/common/shadow-claw-page-header-action-button/shadow-claw-page-header-action-button.css",revision:"192878cb48a9bb8cf206cea1672ec390"},{url:"components/common/shadow-claw-empty-state/shadow-claw-empty-state.css",revision:"001dbd8ee37eccb2b865795cb75b32e8"},{url:"components/common/shadow-claw-card/shadow-claw-card.css",revision:"ea9fb2a5ee318103b19fdf5df14dd2ea"},{url:"components/common/shadow-claw-actions/shadow-claw-actions.css",revision:"330a4d63944580d4dc150d7c08379f26"},{url:"bindings/webrtc-datachannel/v1/index.css",revision:"8c0f3bcf62cbe9579d136150c5288ba8"},{url:"index.html",revision:"bcb9b847b35d295b26b6808bb810927a"},{url:"404.html",revision:"74bc1afc55391d3ff43b99e39de1c72f"},{url:"subsystems/channels/bindings/webrtc-datachannel/v1/index.html",revision:"d6e785383b73b911b8593265c36eaecd"},{url:"static-main/index.html",revision:"38e716481eecfdb88c3349562d815f10"},{url:"static-main/~/docs/example/article.html",revision:"cb73f16b2098cf2e77db992b6b286805"},{url:"share/share-target.html",revision:"ea535454fa33b093d0ee59fddc6f5c02"},{url:"pages/main/index.html",revision:"38e716481eecfdb88c3349562d815f10"},{url:"pages/main/~/docs/example/article.html",revision:"cb73f16b2098cf2e77db992b6b286805"},{url:"main/index.html",revision:"bcb9b847b35d295b26b6808bb810927a"},{url:"main/memory/index.html",revision:"786147d4aa20e64d56b9172c0cace4ef"},{url:"files/main/index.html",revision:"38e716481eecfdb88c3349562d815f10"},{url:"files/main/~/docs/example/article.html",revision:"cb73f16b2098cf2e77db992b6b286805"},{url:"docs/skill-creator/index.html",revision:"37d8ad3449da47a32a0e743a254bf1a6"},{url:"docs/publishing/index.html",revision:"42bb34f993a90327763fc1b13339cb3f"},{url:"docs/example/article/index.html",revision:"967a1d55b3350610868335805fe4d957"},{url:"components/shadow-claw-tools/shadow-claw-tools.html",revision:"323310ef472dd2974ff78db1afbdd02c"},{url:"components/shadow-claw-toast/shadow-claw-toast.html",revision:"83ef4f69b85bc562f3e41d2038a75298"},{url:"components/shadow-claw-terminal/shadow-claw-terminal.html",revision:"d4a9d42553a49cccdabe858a1bcdfb6d"},{url:"components/shadow-claw-tasks/shadow-claw-tasks.html",revision:"6dde9f871430da8bb157d57f05876572"},{url:"components/shadow-claw-settings/shadow-claw-settings.html",revision:"dd5421c221ad0d1e11602b0466636eb0"},{url:"components/shadow-claw-pdf-viewer/shadow-claw-pdf-viewer.html",revision:"8b1d69f282f194a98c9e9e7a2eb87009"},{url:"components/shadow-claw-pages/shadow-claw-pages.html",revision:"0f03cef912be6910360117da9b98f94a"},{url:"components/shadow-claw-page-header/shadow-claw-page-header.html",revision:"9dd0f64e1c4d31367923ae2e56662b5e"},{url:"components/shadow-claw-files/shadow-claw-files.html",revision:"7727f97dd065000b055d303d5d8a671a"},{url:"components/shadow-claw-file-viewer/shadow-claw-file-viewer.html",revision:"ff21f570a074f875b13e20fc47f54b93"},{url:"components/shadow-claw-conversations/shadow-claw-conversations.html",revision:"e1dda7d82b02568714a37db5905f8dfd"},{url:"components/shadow-claw-chat/shadow-claw-chat.html",revision:"83927b073730bce66081aa1d720351c7"},{url:"components/shadow-claw-channels/shadow-claw-channels.html",revision:"ee52d98315e62d80086d156608a94e05"},{url:"components/shadow-claw-a2ui/shadow-claw-a2ui.html",revision:"04363cb02303c1f31ad6951105e2b630"},{url:"components/shadow-claw/shadow-claw.html",revision:"f06a2944fa75b8325f8a226c5429cb9a"},{url:"components/settings/shadow-claw-webvm/shadow-claw-webvm.html",revision:"b41ff0201055fc03963a115cbeef4de6"},{url:"components/settings/shadow-claw-task-server/shadow-claw-task-server.html",revision:"9e715d1a569b1e589834ffa77a109a95"},{url:"components/settings/shadow-claw-storage/shadow-claw-storage.html",revision:"33501ece794e35a2948ea03df57d47cc"},{url:"components/settings/shadow-claw-peerjs/shadow-claw-peerjs.html",revision:"40d51a573cfef6fda61358fc25d806b3"},{url:"components/settings/shadow-claw-notifications/shadow-claw-notifications.html",revision:"74d4d4d3f2b368d971e74cf9e600d6bf"},{url:"components/settings/shadow-claw-networking/shadow-claw-networking.html",revision:"bca46b725edc47a4ed30cb5e2ed4d8be"},{url:"components/settings/shadow-claw-mcp-remote/shadow-claw-mcp-remote.html",revision:"595f5626bd4a024572393c39aefe6155"},{url:"components/settings/shadow-claw-llm/shadow-claw-llm.html",revision:"ba05b5e3536c9d4a8f400696aad239b7"},{url:"components/settings/shadow-claw-integrations/shadow-claw-integrations.html",revision:"12a847b968869c521b6d17285211cf8a"},{url:"components/settings/shadow-claw-git/shadow-claw-git.html",revision:"7f0d55e8f5c74b30f2ee02cab5af93e3"},{url:"components/settings/shadow-claw-control-plane/shadow-claw-control-plane.html",revision:"83a363c0cc27bec61f7fc3126990b3b8"},{url:"components/settings/shadow-claw-channel-config/shadow-claw-channel-config.html",revision:"38805e60640572b4ada99d11343a64dd"},{url:"components/settings/shadow-claw-accounts/shadow-claw-accounts.html",revision:"6537ff4c3ee01a3107e8b138425812b9"},{url:"components/common/shadow-claw-provider-module-settings/shadow-claw-provider-module-settings.html",revision:"4022e66f6cd3ac15723063c394e429c2"},{url:"components/common/shadow-claw-provider-model-picker/shadow-claw-provider-model-picker.html",revision:"ce6d7fcbdaf710d498cdd650597d86c1"},{url:"components/common/shadow-claw-page-header-action-button/shadow-claw-page-header-action-button.html",revision:"89fa6723613dad5fcc9773685846a81f"},{url:"components/common/shadow-claw-empty-state/shadow-claw-empty-state.html",revision:"f1304d2789cf72435301709539f67a58"},{url:"components/common/shadow-claw-card/shadow-claw-card.html",revision:"332bf79a4dbd90356ea4982fc28f0312"},{url:"components/common/shadow-claw-actions/shadow-claw-actions.html",revision:"cbfba0838bc7cf14f38b80473e0d7cca"},{url:"bindings/webrtc-datachannel/v1/index.html",revision:"7f7ae8499f2c25e8e94409fa272f9f73"},{url:"favicon.ico",revision:"58fff7908409f246a6228529f384802e"},{url:"assets/icons/favicon.ico",revision:"58fff7908409f246a6228529f384802e"},{url:"static-routing.json",revision:"36f9e3515f28f864c4b329a9b3c7020a"},{url:"static-main-manifest.json",revision:"959aaefa4960add61f4f337126c3b5c7"},{url:"manifest.json",revision:"62f8d50f4e8fd710cb66c883f94b1c48"},{url:"writer-DSCZugcv.js",revision:"aa52e090e23fb66e87ae150868b73617"},{url:"writer-DKYhUsR4.js",revision:"2c1ebca2bcb7c424b3c40a335208f9f3"},{url:"webmcp-Bo3KTgRb.js",revision:"6247588e7944cfc805357755cea52f26"},{url:"webllm-_JXFm0yh.js",revision:"9eb250fab559a4b9781d8a3d8ed35ec7"},{url:"webllm-BDMz9yZR.js",revision:"86ffb13f1b7691d5d39b7a44210761ba"},{url:"ulid-BY7rQVLN.js",revision:"e1f3add55342551fd82b63ca9c9fa3ed"},{url:"txPromise-C2iYogHX.js",revision:"74a1df07fb201bd47d0a318f30b6f527"},{url:"translator-HKOMI-RS.js",revision:"0442e3e7545bf383ce11ad047ca3b4c8"},{url:"translator-CGBLZJIJ.js",revision:"484866c38f92eed3b1073f3a2cf63614"},{url:"transformers-js.worker.js",revision:"85d9dc5f8e5f3a31cddb9a7e7288504e"},{url:"transformers-BTGkWJf4.js",revision:"50bb330f47facc065c63f9d684375a58"},{url:"transformers--9oz-RLQ.js",revision:"b81607b6adb3b7b3a956301d3510c91e"},{url:"tools-vzWYHFBC.js",revision:"b8e70b785c14b2e2de15cde940497b51"},{url:"tools-nysPKnGT.js",revision:"0856cc0fd9a5b906591fef2e433e13cb"},{url:"tools-Day-D-vL.js",revision:"c10a562cce98174f91470e6cdafb0f14"},{url:"toast-BXgUfbyh.js",revision:"b7c62da49835547bd07f2010219562bd"},{url:"theme-init.js",revision:"8be9481cf42b1c5fa97853b8365cc1b0"},{url:"syncWebMcpRegistration-4bT0YUyZ.js",revision:"6dfcd918755f5829ff17c8c2cd5a9868"},{url:"summarizer-P3JHUhJ4.js",revision:"c61ee9cefeca591ad5618d95d153a2f4"},{url:"summarizer-CweqtGSY.js",revision:"fc2cafa5615e2284fbe262cc416fa32c"},{url:"shadow-claw-webvm-M7d5RH8H.js",revision:"62fb3e9704c68c642b16dd28a9d7deeb"},{url:"shadow-claw-tools-Bj6DLZ-2.js",revision:"76c49389b874b483bc509d75e4a2a7d9"},{url:"shadow-claw-toast-C_zXWKX9.js",revision:"b6a160902a77d1197facbca3603d990a"},{url:"shadow-claw-terminal-BSeTuyDa.js",revision:"818e1789b2be743bdd72be05b213212e"},{url:"shadow-claw-tasks-BO8aXM2B.js",revision:"aaeac16dd7bfe41b893edaae1ddc04c2"},{url:"shadow-claw-task-server-CMp5Vjza.js",revision:"f54e88d144101b5f4cf80efe4f86c128"},{url:"shadow-claw-storage-DK3pf11w.js",revision:"9d30d76dedd57afccceade1e967271d2"},{url:"shadow-claw-settings-BGrDNyqh.js",revision:"97c20722ca37b55df96b98ac17e73575"},{url:"shadow-claw-pdf-viewer-gOiW-_Bh.js",revision:"e84932e68c4b1a60d8d72b37cfc1c920"},{url:"shadow-claw-pages-BRQw8bTm.js",revision:"8efe43ff1eaf6e66c8421bd416af8ece"},{url:"shadow-claw-page-header-action-button-Bmua3mAb.js",revision:"2e4b1fc665cfcf6a51510a08ba0a5da0"},{url:"shadow-claw-page-header-CAXokjQy.js",revision:"8cb4cd1b9553604539b2baf095b7ed89"},{url:"shadow-claw-notifications-B9Xhcj1P.js",revision:"a5ec9c0aca0987e161431d800c603956"},{url:"shadow-claw-networking-DEMMygy0.js",revision:"5bd1dbbf7a4c14436263b4ffa314fef0"},{url:"shadow-claw-mcp-remote-BPuV22So.js",revision:"b526171aae63744e9d2fe1849881740a"},{url:"shadow-claw-llm-DfmITHde.js",revision:"ac2c6cce4d04d865af22306eac8439f9"},{url:"shadow-claw-integrations-CjtkA6l0.js",revision:"55a8e3d22e52d237a5de95a000fe5820"},{url:"shadow-claw-git-CTIPP0vs.js",revision:"bcea82dea5c7ad4fc35cda7824a7a0d5"},{url:"shadow-claw-files-B774Xz1d.js",revision:"48822d2210187226455778f2ada6b93b"},{url:"shadow-claw-file-viewer-a_uRA30F.js",revision:"51524fb7d1d9b452752a8e3a6031f110"},{url:"shadow-claw-empty-state-CkvLk0-B.js",revision:"1ef0891c108feeab7b5ca2f38ed07abf"},{url:"shadow-claw-element-DIrv3P6A.js",revision:"740ad3d06fc485e6ab3d815d996036ee"},{url:"shadow-claw-dialog-BrOwAOdk.js",revision:"cef105280f387f95d4763386497c3de9"},{url:"shadow-claw-conversations-DcwG05-H.js",revision:"da9c335e9d0e7b4c7fab6d69e6146791"},{url:"shadow-claw-control-plane-C1A-CZ9H.js",revision:"7a6afa39bcab548f47a8c401231a528f"},{url:"shadow-claw-chat-BxR6cBYQ.js",revision:"8a4c93a96b76697970856e86647da094"},{url:"shadow-claw-channels-Ci2UPaaA.js",revision:"a403d33019845a5af0da2a6e0b89da41"},{url:"shadow-claw-card-DCxWEHgX.js",revision:"16fb58ffeced559d6ae06ad22dc83449"},{url:"shadow-claw-accounts-BqGrm47Z.js",revision:"d883ac4d322369c2bb92a4f1d4375019"},{url:"shadow-claw-DmrxnX3Q.js",revision:"ce7a58a017b146a09f626f537ae4b676"},{url:"setConfig-DdSThoKj.js",revision:"c8468805ffd4cffac5c56b089a278ba6"},{url:"rolldown-runtime-aKtaBQYM.js",revision:"fe1c45aeeb5cda97a4081341cf8c64f0"},{url:"rewriter-CxdIIXnr.js",revision:"7fc8f9305671e6294279be5cd6055784"},{url:"rewriter-BLblP4kZ.js",revision:"2a9589202c37a5526d03e1ad2a4bbbf7"},{url:"push-client-_HUyJlFJ.js",revision:"c93d19b3a5ba03336b173d930d90e9de"},{url:"prompt-utils-DpfOVJQv-DorZAfZa.js",revision:"8d5a0482b00cf39c6d8ba0096bbce45e"},{url:"prompt-api-polyfill-DbfS1Lze.js",revision:"34df66e2fcb99a0cd133c7aceb7e183a"},{url:"prompt-api-polyfill-Bpb3g6PM.js",revision:"ad0fdd2c2d028167256c55596a697665"},{url:"prompt-api-OUOP-B-R.js",revision:"668dec7b318ba116659a49a0648c8a28"},{url:"peerjs-CYs1F7sq.js",revision:"865938c1361dd158b24bd0e5c1db8cb2"},{url:"pdf.worker.js",revision:"b169314e56c737213dba6418ab0b6512"},{url:"parseConfigBoolean-ByjZr9OM.js",revision:"3c1af0a9fb09aac85793c7e514ecd9c8"},{url:"orchestrator-D6tel2Zp.js",revision:"e78430cdadff81dd6c0b0abed1faae34"},{url:"orchestrator-BLkS_jpm.js",revision:"7eea210e3ebf285d6d3221efa1491375"},{url:"openai-DMG0vGCO.js",revision:"df9e8ac844b0d28349f23e0cfe7f5850"},{url:"openai-DFvWOhYR.js",revision:"2632c6c496b38c86d2facad810255b6e"},{url:"model-ranking-C60HgQ2c.js",revision:"1d4e60595bf418902c8845d595dea242"},{url:"memoryStorage-Bew1X8Uy.js",revision:"bc1a9624bbe401c5147e3f861b2c3a58"},{url:"mcp-reconnect-BK1bYBdC.js",revision:"bd1d18dfd4c03178ea763a4beba0e933"},{url:"markdown-CZA-Ye2Q.js",revision:"1189cbfb646b16254e34005fd4edfebf"},{url:"language-detector-DOtU3K2z.js",revision:"98fab7d797a22dff65667cd9a4fe7d26"},{url:"language-detector-BRaioT2A.js",revision:"1ba06db21f47352e1ab970aeff923fe2"},{url:"is-typed-array-CnI-JI7u.js",revision:"8fa25cfae743242964b3f06ed67f6297"},{url:"initControlPlane-DnVdYOPe.js",revision:"b3929dc85c26416e81958c1f2c32ece4"},{url:"initControlPlane-CNggzsRw.js",revision:"40939fe96d49b994a35ad21c30cacfd0"},{url:"initChatSplitResize-osJXM2gu.js",revision:"4d7a895335f8f436bdbf29454b7c9d2a"},{url:"index.js",revision:"e9b2a5bbf4a2d4a040e590fcd8ce5ca8"},{url:"iframe-storage-proxy-BvRiccH0.js",revision:"58acf97666f12aad6c1271aa3e5744e8"},{url:"iframe-sanitizer-CKOO7cxp.js",revision:"b9183ad55002c1002b31509e047377f8"},{url:"headless-BbtDA5cs.js",revision:"529c506ef1a2dbb425367d6fcaa6f490"},{url:"git-CS7jNXY4.js",revision:"32615331b0323826b33f327301f979c9"},{url:"git-Ba8AeviI.js",revision:"bbff780e6f23c09c971cbac81bd797d0"},{url:"getGroupDir-CLz5c8cg.js",revision:"93ab337e215a15bc42d143d81bba859e"},{url:"getConfig-4saf0Tkq.js",revision:"780d39ddfdf762ce720d202109fdf83a"},{url:"getAllTasks-CKZML6au.js",revision:"d1fd6769d57e12c0ca78f6fa9f71e6ef"},{url:"gemini-C4EOz8c4.js",revision:"92e9e18cb67f66af84aad790ccf35762"},{url:"firebase-CuxChDPd.js",revision:"c6f7f8621434c83c73aa2516ab73ed63"},{url:"firebase-BKi8D3q5.js",revision:"114f1f181b229e8b46a8be3c0abeb3a1"},{url:"file-viewer-DLUBvOVD.js",revision:"ae31226dbf3ba6401086b34655d3d3da"},{url:"effect-BJCrpFdp.js",revision:"853102f8a6f55c95dfa3fc82f9e0e3fb"},{url:"e2e-bridge-CybB810Q.js",revision:"37341e1ff9fbea0b2004dda71c83f44f"},{url:"downloadGroupFile-BiZQYY-O.js",revision:"25ff3b8a1c959055c1a0941ae72c9119"},{url:"dist-DUy1CvmT.js",revision:"8f723f5280a9a0153814b2010a389dea"},{url:"dist-B9m1QM9v.js",revision:"54b15459024339745e68780b3493fcd0"},{url:"defaults-DwNb0lWM-Drx4e34U.js",revision:"07f566607c044acac4fce8fb133d7837"},{url:"custom-element-security-piU2U-Ec.js",revision:"51b05a37641d92c072f4de2a094d83d0"},{url:"crypto-browserify-U1v0eryt.js",revision:"9ec767425b59e5d2796b521157dad059"},{url:"crypto-browserify-B0z4QnB8.js",revision:"247ca3e52ef33c59adda8b8d1f954acf"},{url:"crypto-C8c5wMzN.js",revision:"2e4e24021e870c5fda72a84c0875677b"},{url:"constants-DiETpg52.js",revision:"c9f220286288beca5e353a2ac1b9d7a4"},{url:"constants-BR3kgTKA.js",revision:"4db79026565dcb309e0462d27c05ef8e"},{url:"connections-CiukjGiH.js",revision:"ceed006a54deba5adece531f1a88dd33"},{url:"configurePeerJs-DDOAVSaH.js",revision:"313d3ba70f24cf82f0aab0828f66d884"},{url:"config-D4lVqMs8.js",revision:"fcb9ed4e2ae6b0d123064ddebc0ef82a"},{url:"bundler-0if-QelV.js",revision:"b3656ce7ef711de0b6975db785cde1c0"},{url:"buffer-9oRIc-5Z.js",revision:"5f8bcab43db1e23f92aae427e03fbb5a"},{url:"browser-nBz_r6l4.js",revision:"e7d5c0309995473bf0dd730d3575a102"},{url:"base-task-model-CYkpwnvU-DS4fzK9O.js",revision:"3786720aea61a5be150fb388767c844b"},{url:"base-task-model-CYkpwnvU-D-idZRbr.js",revision:"5d9f4020612c5a65ad0111b10e1780e4"},{url:"backup-controller-CvzDOq4T.js",revision:"bc3e84fcc8df8c5d18ed903487df3d83"},{url:"app-routes-BMQ4HFaM.js",revision:"254eb72a2d89b010f1d3420eef40cf99"},{url:"agent.worker.js",revision:"263f40dac0bf8100d35d3fac9684bcc4"},{url:"assets/iframe-storage-bridge.js",revision:"63df93333e520c84c9850ec0371894bd"},{url:"assets/file-viewer-preview-bridge.js",revision:"2c82c9cbe0d1a0554952c9b4f237b613"},{url:"assets/screenshots/xt-ml.github.io_shadow-claw-template-1024x768.png",revision:"1cc2cf3bfac85210d6d47f98a25bae84"},{url:"assets/screenshots/xt-ml.github.io_shadow-claw-agent-cli-weather-1024x768.png",revision:"a7c3d784e410c3284da9c2842f16842c"},{url:"assets/screenshots/shadow-claw-screenshot-731x1045.png",revision:"f3b9e801298660c14976d22f20a0c243"},{url:"assets/screenshots/shadow-claw-screenshot-1920x1052.png",revision:"16f391d0bbc913ec5aa239c8d577c7a4"},{url:"assets/screenshots/shadow-claw-screenshot-1024x768.png",revision:"3ee54a033db17e3bf3dfb7d0a11ab4e1"},{url:"assets/screenshots/kherrick.github.io_pwgen-knowledge-hub-1024x768.png",revision:"94ace19b1968a1955661d4390f9e11f4"},{url:"assets/screenshots/kherrick.github.io_block-garden-knowledge-hub-1024x768.png",revision:"fe5531f3dde6781830c3e5a5d9a3e705"},{url:"assets/icons/96.png",revision:"f91548690416c59ceb56cdb99809b955"},{url:"assets/icons/72.png",revision:"cba8470097972bdbc5d9a06fe67bfcf2"},{url:"assets/icons/512.png",revision:"ec2a8f28b812a0c2665a04cb3c535aab"},{url:"assets/icons/48.png",revision:"29eb2f38df4d5a6385399a04d7bdef00"},{url:"assets/icons/192.png",revision:"bf98264d7a62a47542e577245a292b77"},{url:"assets/icons/180.png",revision:"69128cf857af09292bb06fac0df9938b"},{url:"assets/icons/152.png",revision:"645ae818149dc508cc6146d620120db2"},{url:"assets/icons/128.png",revision:"84678d51d243c104d0c85a4e909fd0a6"},{url:"assets/icons/1024.png",revision:"ae17c81b3b93137df1702de6a9fcdab6"}],{}),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html"),{allowlist:[/^\/$/,/^\/(chat|files|pages|tasks|settings)(?:\/.*)?$/]})),e.registerRoute(({url:e,sameOrigin:a})=>{if(e.pathname.startsWith("/assets/v86.9pfs/"))return!1;const s=e.hostname.toLowerCase();if("huggingface.co"===s||s.endsWith(".huggingface.co")||s.endsWith(".hf.co")||"hf.co"===s||"hf-mirror.com"===s||s.endsWith(".hf-mirror.com")||"cdnjs.cloudflare.com"===s||"esm.sh"===s||s.endsWith(".esm.sh")||"unpkg.com"===s||"cdn.jsdelivr.net"===s||s.endsWith(".jsdelivr.net")||"esm.run"===s||"openrouter.ai"===s||s.endsWith(".openrouter.ai")||"api.telegram.org"===s)return!1;if(e.pathname.startsWith("/api/control/"))return!1;const c=e.pathname.endsWith("/share/share-target.html"),o="/proxy"===e.pathname||e.pathname.startsWith("/git-proxy/")||c||e.pathname.startsWith("/push/")||e.pathname.startsWith("/schedule/")||e.pathname.startsWith("/telegram/");return(!("localhost"===s||"127.0.0.1"===s||"::1"===s||"[::1]"===s)||!o)&&("boolean"!=typeof a||a)},new e.NetworkFirst({cacheName:"shadow-claw-cache",plugins:[new e.ExpirationPlugin({maxAgeSeconds:31536e3})]}),"GET")});
|
|
39
|
+
if(!self.define){let e,a={};const s=(s,c)=>(s=new URL(s+".js",c).href,a[s]||new Promise(a=>{if("document"in self){const e=document.createElement("script");e.src=s,e.onload=a,document.head.appendChild(e)}else e=s,shadowClawImportScripts(s),a()}).then(()=>{let e=a[s];if(!e)throw new Error(`Module ${s} didn’t register its module`);return e}));self.define=(c,o)=>{const i=e||("document"in self?document.currentScript.src:"")||location.href;if(a[i])return;let d={};const r=e=>s(e,i),n={module:{uri:i},exports:d,require:r};a[i]=Promise.all(c.map(e=>n[e]||r(e))).then(e=>(o(...e),d))}}define(["./workbox-92eae37e"],function(e){"use strict";shadowClawImportScripts("service-worker/fetch-proxy.js","service-worker/push-handler.js","service-worker/share-target.js"),self.addEventListener("message",e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()}),e.clientsClaim(),e.precacheAndRoute([{url:"index.css",revision:"411cebe9d73dc845bdbe6dc25374886d"},{url:"subsystems/channels/bindings/webrtc-datachannel/v1/index.css",revision:"84ea62c12532f5339a455f7da8e47048"},{url:"components/shadow-claw-tools/shadow-claw-tools.css",revision:"83e53f4fc50714d75f4f223c8cc1126b"},{url:"components/shadow-claw-toast/shadow-claw-toast.css",revision:"4ce2dcc1c81363147fa0a5e79474aed3"},{url:"components/shadow-claw-terminal/shadow-claw-terminal.css",revision:"34974a6d9a97832231fd931006a071d1"},{url:"components/shadow-claw-tasks/shadow-claw-tasks.css",revision:"520159be0d18dc3caad54e9e1dc1eb1b"},{url:"components/shadow-claw-settings/shadow-claw-settings.css",revision:"ad9bba0bb9beb555b3b43a90e590dfa1"},{url:"components/shadow-claw-pdf-viewer/shadow-claw-pdf-viewer.css",revision:"4c02b802e45b7e2377ecd915909ddf1c"},{url:"components/shadow-claw-pages/shadow-claw-pages.css",revision:"8ad238a0442ad57c12fe1c2094215cef"},{url:"components/shadow-claw-page-header/shadow-claw-page-header.css",revision:"5af6ca91ae275bdbb7f0f6bc470c83df"},{url:"components/shadow-claw-files/shadow-claw-files.css",revision:"8ea713f1228d9638039afde711505bab"},{url:"components/shadow-claw-file-viewer/shadow-claw-file-viewer.css",revision:"08101d1aefc62f51c5bff42cd468e663"},{url:"components/shadow-claw-file-viewer/highlightjs-atom-one-dark.min.css",revision:"70ec8740925f3c6615ec654090b9e2ce"},{url:"components/shadow-claw-conversations/shadow-claw-conversations.css",revision:"a941256c23d142754ea3c7e9b416f784"},{url:"components/shadow-claw-chat/shadow-claw-chat.css",revision:"b6c9d27682fce5e686696943ae1bf9b8"},{url:"components/shadow-claw-channels/shadow-claw-channels.css",revision:"431a76502c7ba3f8c83bb572f0afd71f"},{url:"components/shadow-claw-a2ui/shadow-claw-a2ui.css",revision:"d05fdf188a8295021735e601bcc5b743"},{url:"components/shadow-claw/shadow-claw.css",revision:"81482994292b2b187885d08316ef8a81"},{url:"components/settings/shadow-claw-webvm/shadow-claw-webvm.css",revision:"f8167aff26a24125d7b9b23aee8f728a"},{url:"components/settings/shadow-claw-task-server/shadow-claw-task-server.css",revision:"f6e534a6023b143270e772c7ee6119a0"},{url:"components/settings/shadow-claw-storage/shadow-claw-storage.css",revision:"dd8009443e450b709657368a19974f09"},{url:"components/settings/shadow-claw-peerjs/shadow-claw-peerjs.css",revision:"81e589816bc4fd4da2c7d688b3db5ba9"},{url:"components/settings/shadow-claw-notifications/shadow-claw-notifications.css",revision:"32804d3923655ae18f137db78bfaccfa"},{url:"components/settings/shadow-claw-networking/shadow-claw-networking.css",revision:"f186e80f555986dc26ab392cf7c29e92"},{url:"components/settings/shadow-claw-mcp-remote/shadow-claw-mcp-remote.css",revision:"c9be041c099a1d4733ed14a87ee37bfa"},{url:"components/settings/shadow-claw-llm/shadow-claw-llm.css",revision:"8703cbfc0af3167237d71d7e3f5da4f5"},{url:"components/settings/shadow-claw-integrations/shadow-claw-integrations.css",revision:"d7b9e45ff13eecf7c6571ed755dc8358"},{url:"components/settings/shadow-claw-git/shadow-claw-git.css",revision:"eab353bd20d322d0c87a7a53e639c2a6"},{url:"components/settings/shadow-claw-control-plane/shadow-claw-control-plane.css",revision:"2cc9185fc887fb10055d9edd405bd59c"},{url:"components/settings/shadow-claw-channel-config/shadow-claw-channel-config.css",revision:"c6da4c8aa3ad1b6359e6cb7af9d5f267"},{url:"components/settings/shadow-claw-accounts/shadow-claw-accounts.css",revision:"f9a43c87ce69b7be36ad18100311c14e"},{url:"components/common/shadow-claw-provider-module-settings/shadow-claw-provider-module-settings.css",revision:"b6bbdcee11cf8fd83c411f6734e10da8"},{url:"components/common/shadow-claw-provider-model-picker/shadow-claw-provider-model-picker.css",revision:"65f56fa4a760d0207440697739be250a"},{url:"components/common/shadow-claw-page-header-action-button/shadow-claw-page-header-action-button.css",revision:"192878cb48a9bb8cf206cea1672ec390"},{url:"components/common/shadow-claw-empty-state/shadow-claw-empty-state.css",revision:"001dbd8ee37eccb2b865795cb75b32e8"},{url:"components/common/shadow-claw-card/shadow-claw-card.css",revision:"ea9fb2a5ee318103b19fdf5df14dd2ea"},{url:"components/common/shadow-claw-actions/shadow-claw-actions.css",revision:"330a4d63944580d4dc150d7c08379f26"},{url:"bindings/webrtc-datachannel/v1/index.css",revision:"8c0f3bcf62cbe9579d136150c5288ba8"},{url:"index.html",revision:"732dcaf9b55033d05316b869f40175f6"},{url:"404.html",revision:"74bc1afc55391d3ff43b99e39de1c72f"},{url:"subsystems/channels/bindings/webrtc-datachannel/v1/index.html",revision:"d6e785383b73b911b8593265c36eaecd"},{url:"static-main/index.html",revision:"38e716481eecfdb88c3349562d815f10"},{url:"static-main/~/docs/example/article.html",revision:"cb73f16b2098cf2e77db992b6b286805"},{url:"share/share-target.html",revision:"ea535454fa33b093d0ee59fddc6f5c02"},{url:"pages/main/index.html",revision:"38e716481eecfdb88c3349562d815f10"},{url:"pages/main/~/docs/example/article.html",revision:"cb73f16b2098cf2e77db992b6b286805"},{url:"main/index.html",revision:"732dcaf9b55033d05316b869f40175f6"},{url:"main/memory/index.html",revision:"0826aaff0b5e2019e87e24ee0bf6414e"},{url:"files/main/index.html",revision:"38e716481eecfdb88c3349562d815f10"},{url:"files/main/~/docs/example/article.html",revision:"cb73f16b2098cf2e77db992b6b286805"},{url:"docs/skill-creator/index.html",revision:"d3ee872e1d15f3c860caad2078d3c6f8"},{url:"docs/publishing/index.html",revision:"4adb771197d3771ee6c6d0d440a4cc57"},{url:"docs/example/article/index.html",revision:"7686d43bca0df28523d5e029cd64d02c"},{url:"components/shadow-claw-tools/shadow-claw-tools.html",revision:"323310ef472dd2974ff78db1afbdd02c"},{url:"components/shadow-claw-toast/shadow-claw-toast.html",revision:"83ef4f69b85bc562f3e41d2038a75298"},{url:"components/shadow-claw-terminal/shadow-claw-terminal.html",revision:"d4a9d42553a49cccdabe858a1bcdfb6d"},{url:"components/shadow-claw-tasks/shadow-claw-tasks.html",revision:"6dde9f871430da8bb157d57f05876572"},{url:"components/shadow-claw-settings/shadow-claw-settings.html",revision:"dd5421c221ad0d1e11602b0466636eb0"},{url:"components/shadow-claw-pdf-viewer/shadow-claw-pdf-viewer.html",revision:"8b1d69f282f194a98c9e9e7a2eb87009"},{url:"components/shadow-claw-pages/shadow-claw-pages.html",revision:"0f03cef912be6910360117da9b98f94a"},{url:"components/shadow-claw-page-header/shadow-claw-page-header.html",revision:"9dd0f64e1c4d31367923ae2e56662b5e"},{url:"components/shadow-claw-files/shadow-claw-files.html",revision:"7727f97dd065000b055d303d5d8a671a"},{url:"components/shadow-claw-file-viewer/shadow-claw-file-viewer.html",revision:"ff21f570a074f875b13e20fc47f54b93"},{url:"components/shadow-claw-conversations/shadow-claw-conversations.html",revision:"e1dda7d82b02568714a37db5905f8dfd"},{url:"components/shadow-claw-chat/shadow-claw-chat.html",revision:"83927b073730bce66081aa1d720351c7"},{url:"components/shadow-claw-channels/shadow-claw-channels.html",revision:"ee52d98315e62d80086d156608a94e05"},{url:"components/shadow-claw-a2ui/shadow-claw-a2ui.html",revision:"04363cb02303c1f31ad6951105e2b630"},{url:"components/shadow-claw/shadow-claw.html",revision:"f06a2944fa75b8325f8a226c5429cb9a"},{url:"components/settings/shadow-claw-webvm/shadow-claw-webvm.html",revision:"b41ff0201055fc03963a115cbeef4de6"},{url:"components/settings/shadow-claw-task-server/shadow-claw-task-server.html",revision:"9e715d1a569b1e589834ffa77a109a95"},{url:"components/settings/shadow-claw-storage/shadow-claw-storage.html",revision:"33501ece794e35a2948ea03df57d47cc"},{url:"components/settings/shadow-claw-peerjs/shadow-claw-peerjs.html",revision:"40d51a573cfef6fda61358fc25d806b3"},{url:"components/settings/shadow-claw-notifications/shadow-claw-notifications.html",revision:"74d4d4d3f2b368d971e74cf9e600d6bf"},{url:"components/settings/shadow-claw-networking/shadow-claw-networking.html",revision:"bca46b725edc47a4ed30cb5e2ed4d8be"},{url:"components/settings/shadow-claw-mcp-remote/shadow-claw-mcp-remote.html",revision:"595f5626bd4a024572393c39aefe6155"},{url:"components/settings/shadow-claw-llm/shadow-claw-llm.html",revision:"ba05b5e3536c9d4a8f400696aad239b7"},{url:"components/settings/shadow-claw-integrations/shadow-claw-integrations.html",revision:"12a847b968869c521b6d17285211cf8a"},{url:"components/settings/shadow-claw-git/shadow-claw-git.html",revision:"7f0d55e8f5c74b30f2ee02cab5af93e3"},{url:"components/settings/shadow-claw-control-plane/shadow-claw-control-plane.html",revision:"83a363c0cc27bec61f7fc3126990b3b8"},{url:"components/settings/shadow-claw-channel-config/shadow-claw-channel-config.html",revision:"38805e60640572b4ada99d11343a64dd"},{url:"components/settings/shadow-claw-accounts/shadow-claw-accounts.html",revision:"6537ff4c3ee01a3107e8b138425812b9"},{url:"components/common/shadow-claw-provider-module-settings/shadow-claw-provider-module-settings.html",revision:"4022e66f6cd3ac15723063c394e429c2"},{url:"components/common/shadow-claw-provider-model-picker/shadow-claw-provider-model-picker.html",revision:"ce6d7fcbdaf710d498cdd650597d86c1"},{url:"components/common/shadow-claw-page-header-action-button/shadow-claw-page-header-action-button.html",revision:"89fa6723613dad5fcc9773685846a81f"},{url:"components/common/shadow-claw-empty-state/shadow-claw-empty-state.html",revision:"f1304d2789cf72435301709539f67a58"},{url:"components/common/shadow-claw-card/shadow-claw-card.html",revision:"332bf79a4dbd90356ea4982fc28f0312"},{url:"components/common/shadow-claw-actions/shadow-claw-actions.html",revision:"cbfba0838bc7cf14f38b80473e0d7cca"},{url:"bindings/webrtc-datachannel/v1/index.html",revision:"7f7ae8499f2c25e8e94409fa272f9f73"},{url:"favicon.ico",revision:"58fff7908409f246a6228529f384802e"},{url:"assets/icons/favicon.ico",revision:"58fff7908409f246a6228529f384802e"},{url:"static-routing.json",revision:"36f9e3515f28f864c4b329a9b3c7020a"},{url:"static-main-manifest.json",revision:"959aaefa4960add61f4f337126c3b5c7"},{url:"manifest.json",revision:"62f8d50f4e8fd710cb66c883f94b1c48"},{url:"writer-DSCZugcv.js",revision:"aa52e090e23fb66e87ae150868b73617"},{url:"writer-DKYhUsR4.js",revision:"2c1ebca2bcb7c424b3c40a335208f9f3"},{url:"webmcp-Bo3KTgRb.js",revision:"6247588e7944cfc805357755cea52f26"},{url:"webllm-_JXFm0yh.js",revision:"9eb250fab559a4b9781d8a3d8ed35ec7"},{url:"webllm-BDMz9yZR.js",revision:"86ffb13f1b7691d5d39b7a44210761ba"},{url:"ulid-BY7rQVLN.js",revision:"e1f3add55342551fd82b63ca9c9fa3ed"},{url:"txPromise-C2iYogHX.js",revision:"74a1df07fb201bd47d0a318f30b6f527"},{url:"translator-HKOMI-RS.js",revision:"0442e3e7545bf383ce11ad047ca3b4c8"},{url:"translator-CGBLZJIJ.js",revision:"484866c38f92eed3b1073f3a2cf63614"},{url:"transformers-js.worker.js",revision:"85d9dc5f8e5f3a31cddb9a7e7288504e"},{url:"transformers-BTGkWJf4.js",revision:"50bb330f47facc065c63f9d684375a58"},{url:"transformers--9oz-RLQ.js",revision:"b81607b6adb3b7b3a956301d3510c91e"},{url:"tools-vzWYHFBC.js",revision:"b8e70b785c14b2e2de15cde940497b51"},{url:"tools-nysPKnGT.js",revision:"0856cc0fd9a5b906591fef2e433e13cb"},{url:"tools-Day-D-vL.js",revision:"c10a562cce98174f91470e6cdafb0f14"},{url:"toast-BXgUfbyh.js",revision:"b7c62da49835547bd07f2010219562bd"},{url:"theme-init.js",revision:"8be9481cf42b1c5fa97853b8365cc1b0"},{url:"syncWebMcpRegistration-4bT0YUyZ.js",revision:"6dfcd918755f5829ff17c8c2cd5a9868"},{url:"summarizer-P3JHUhJ4.js",revision:"c61ee9cefeca591ad5618d95d153a2f4"},{url:"summarizer-CweqtGSY.js",revision:"fc2cafa5615e2284fbe262cc416fa32c"},{url:"shadow-claw-webvm-M7d5RH8H.js",revision:"62fb3e9704c68c642b16dd28a9d7deeb"},{url:"shadow-claw-tools-Bj6DLZ-2.js",revision:"76c49389b874b483bc509d75e4a2a7d9"},{url:"shadow-claw-toast-C_zXWKX9.js",revision:"b6a160902a77d1197facbca3603d990a"},{url:"shadow-claw-terminal-BSeTuyDa.js",revision:"818e1789b2be743bdd72be05b213212e"},{url:"shadow-claw-tasks-BO8aXM2B.js",revision:"aaeac16dd7bfe41b893edaae1ddc04c2"},{url:"shadow-claw-task-server-CMp5Vjza.js",revision:"f54e88d144101b5f4cf80efe4f86c128"},{url:"shadow-claw-storage-DK3pf11w.js",revision:"9d30d76dedd57afccceade1e967271d2"},{url:"shadow-claw-settings-BGrDNyqh.js",revision:"97c20722ca37b55df96b98ac17e73575"},{url:"shadow-claw-pdf-viewer-gOiW-_Bh.js",revision:"e84932e68c4b1a60d8d72b37cfc1c920"},{url:"shadow-claw-pages-BRQw8bTm.js",revision:"8efe43ff1eaf6e66c8421bd416af8ece"},{url:"shadow-claw-page-header-action-button-Bmua3mAb.js",revision:"2e4b1fc665cfcf6a51510a08ba0a5da0"},{url:"shadow-claw-page-header-CAXokjQy.js",revision:"8cb4cd1b9553604539b2baf095b7ed89"},{url:"shadow-claw-notifications-B9Xhcj1P.js",revision:"a5ec9c0aca0987e161431d800c603956"},{url:"shadow-claw-networking-DEMMygy0.js",revision:"5bd1dbbf7a4c14436263b4ffa314fef0"},{url:"shadow-claw-mcp-remote-BPuV22So.js",revision:"b526171aae63744e9d2fe1849881740a"},{url:"shadow-claw-llm-DfmITHde.js",revision:"ac2c6cce4d04d865af22306eac8439f9"},{url:"shadow-claw-integrations-CjtkA6l0.js",revision:"55a8e3d22e52d237a5de95a000fe5820"},{url:"shadow-claw-git-CTIPP0vs.js",revision:"bcea82dea5c7ad4fc35cda7824a7a0d5"},{url:"shadow-claw-files-B774Xz1d.js",revision:"48822d2210187226455778f2ada6b93b"},{url:"shadow-claw-file-viewer-CDs1QGXk.js",revision:"f1f8b7f8ecc641c40d3637267aaa6550"},{url:"shadow-claw-empty-state-CkvLk0-B.js",revision:"1ef0891c108feeab7b5ca2f38ed07abf"},{url:"shadow-claw-element-DIrv3P6A.js",revision:"740ad3d06fc485e6ab3d815d996036ee"},{url:"shadow-claw-dialog-BrOwAOdk.js",revision:"cef105280f387f95d4763386497c3de9"},{url:"shadow-claw-conversations-DcwG05-H.js",revision:"da9c335e9d0e7b4c7fab6d69e6146791"},{url:"shadow-claw-control-plane-C1A-CZ9H.js",revision:"7a6afa39bcab548f47a8c401231a528f"},{url:"shadow-claw-chat-BxR6cBYQ.js",revision:"8a4c93a96b76697970856e86647da094"},{url:"shadow-claw-channels-Ci2UPaaA.js",revision:"a403d33019845a5af0da2a6e0b89da41"},{url:"shadow-claw-card-DCxWEHgX.js",revision:"16fb58ffeced559d6ae06ad22dc83449"},{url:"shadow-claw-accounts-BqGrm47Z.js",revision:"d883ac4d322369c2bb92a4f1d4375019"},{url:"shadow-claw-Dabb2AEp.js",revision:"8374c2a17bf2bab6f3aaf1a3a5215164"},{url:"setConfig-DdSThoKj.js",revision:"c8468805ffd4cffac5c56b089a278ba6"},{url:"rolldown-runtime-aKtaBQYM.js",revision:"fe1c45aeeb5cda97a4081341cf8c64f0"},{url:"rewriter-CxdIIXnr.js",revision:"7fc8f9305671e6294279be5cd6055784"},{url:"rewriter-BLblP4kZ.js",revision:"2a9589202c37a5526d03e1ad2a4bbbf7"},{url:"push-client-_HUyJlFJ.js",revision:"c93d19b3a5ba03336b173d930d90e9de"},{url:"prompt-utils-DpfOVJQv-DorZAfZa.js",revision:"8d5a0482b00cf39c6d8ba0096bbce45e"},{url:"prompt-api-polyfill-DbfS1Lze.js",revision:"34df66e2fcb99a0cd133c7aceb7e183a"},{url:"prompt-api-polyfill-Bpb3g6PM.js",revision:"ad0fdd2c2d028167256c55596a697665"},{url:"prompt-api-OUOP-B-R.js",revision:"668dec7b318ba116659a49a0648c8a28"},{url:"peerjs-CYs1F7sq.js",revision:"865938c1361dd158b24bd0e5c1db8cb2"},{url:"pdf.worker.js",revision:"b169314e56c737213dba6418ab0b6512"},{url:"parseConfigBoolean-ByjZr9OM.js",revision:"3c1af0a9fb09aac85793c7e514ecd9c8"},{url:"orchestrator-Dc_Q73La.js",revision:"582e351bcd2dc6520f38fd00f9cdf93c"},{url:"orchestrator-D6tel2Zp.js",revision:"e78430cdadff81dd6c0b0abed1faae34"},{url:"openai-DMG0vGCO.js",revision:"df9e8ac844b0d28349f23e0cfe7f5850"},{url:"openai-DFvWOhYR.js",revision:"2632c6c496b38c86d2facad810255b6e"},{url:"model-ranking-C60HgQ2c.js",revision:"1d4e60595bf418902c8845d595dea242"},{url:"memoryStorage-Bew1X8Uy.js",revision:"bc1a9624bbe401c5147e3f861b2c3a58"},{url:"mcp-reconnect-BK1bYBdC.js",revision:"bd1d18dfd4c03178ea763a4beba0e933"},{url:"markdown-CZA-Ye2Q.js",revision:"1189cbfb646b16254e34005fd4edfebf"},{url:"language-detector-DOtU3K2z.js",revision:"98fab7d797a22dff65667cd9a4fe7d26"},{url:"language-detector-BRaioT2A.js",revision:"1ba06db21f47352e1ab970aeff923fe2"},{url:"is-typed-array-CnI-JI7u.js",revision:"8fa25cfae743242964b3f06ed67f6297"},{url:"initControlPlane-DnVdYOPe.js",revision:"b3929dc85c26416e81958c1f2c32ece4"},{url:"initControlPlane-CNggzsRw.js",revision:"40939fe96d49b994a35ad21c30cacfd0"},{url:"initChatSplitResize-osJXM2gu.js",revision:"4d7a895335f8f436bdbf29454b7c9d2a"},{url:"index.js",revision:"15a7503249ecdc4c71c1fa9ed06526fc"},{url:"iframe-storage-proxy-BvRiccH0.js",revision:"58acf97666f12aad6c1271aa3e5744e8"},{url:"iframe-sanitizer-CKOO7cxp.js",revision:"b9183ad55002c1002b31509e047377f8"},{url:"headless-BbtDA5cs.js",revision:"529c506ef1a2dbb425367d6fcaa6f490"},{url:"git-CS7jNXY4.js",revision:"32615331b0323826b33f327301f979c9"},{url:"git-Ba8AeviI.js",revision:"bbff780e6f23c09c971cbac81bd797d0"},{url:"getGroupDir-CLz5c8cg.js",revision:"93ab337e215a15bc42d143d81bba859e"},{url:"getConfig-4saf0Tkq.js",revision:"780d39ddfdf762ce720d202109fdf83a"},{url:"getAllTasks-CKZML6au.js",revision:"d1fd6769d57e12c0ca78f6fa9f71e6ef"},{url:"gemini-C4EOz8c4.js",revision:"92e9e18cb67f66af84aad790ccf35762"},{url:"firebase-CuxChDPd.js",revision:"c6f7f8621434c83c73aa2516ab73ed63"},{url:"firebase-BKi8D3q5.js",revision:"114f1f181b229e8b46a8be3c0abeb3a1"},{url:"file-viewer-DLUBvOVD.js",revision:"ae31226dbf3ba6401086b34655d3d3da"},{url:"effect-BJCrpFdp.js",revision:"853102f8a6f55c95dfa3fc82f9e0e3fb"},{url:"e2e-bridge-CybB810Q.js",revision:"37341e1ff9fbea0b2004dda71c83f44f"},{url:"downloadGroupFile-BiZQYY-O.js",revision:"25ff3b8a1c959055c1a0941ae72c9119"},{url:"dist-DUy1CvmT.js",revision:"8f723f5280a9a0153814b2010a389dea"},{url:"dist-B9m1QM9v.js",revision:"54b15459024339745e68780b3493fcd0"},{url:"defaults-DwNb0lWM-Drx4e34U.js",revision:"07f566607c044acac4fce8fb133d7837"},{url:"custom-element-security-piU2U-Ec.js",revision:"51b05a37641d92c072f4de2a094d83d0"},{url:"crypto-browserify-U1v0eryt.js",revision:"9ec767425b59e5d2796b521157dad059"},{url:"crypto-browserify-B0z4QnB8.js",revision:"247ca3e52ef33c59adda8b8d1f954acf"},{url:"crypto-C8c5wMzN.js",revision:"2e4e24021e870c5fda72a84c0875677b"},{url:"constants-DiETpg52.js",revision:"c9f220286288beca5e353a2ac1b9d7a4"},{url:"constants-BR3kgTKA.js",revision:"4db79026565dcb309e0462d27c05ef8e"},{url:"connections-CiukjGiH.js",revision:"ceed006a54deba5adece531f1a88dd33"},{url:"configurePeerJs-DDOAVSaH.js",revision:"313d3ba70f24cf82f0aab0828f66d884"},{url:"config-D4lVqMs8.js",revision:"fcb9ed4e2ae6b0d123064ddebc0ef82a"},{url:"bundler-0if-QelV.js",revision:"b3656ce7ef711de0b6975db785cde1c0"},{url:"buffer-9oRIc-5Z.js",revision:"5f8bcab43db1e23f92aae427e03fbb5a"},{url:"browser-nBz_r6l4.js",revision:"e7d5c0309995473bf0dd730d3575a102"},{url:"base-task-model-CYkpwnvU-DS4fzK9O.js",revision:"3786720aea61a5be150fb388767c844b"},{url:"base-task-model-CYkpwnvU-D-idZRbr.js",revision:"5d9f4020612c5a65ad0111b10e1780e4"},{url:"backup-controller-CvzDOq4T.js",revision:"bc3e84fcc8df8c5d18ed903487df3d83"},{url:"app-routes-BMQ4HFaM.js",revision:"254eb72a2d89b010f1d3420eef40cf99"},{url:"agent.worker.js",revision:"263f40dac0bf8100d35d3fac9684bcc4"},{url:"assets/iframe-storage-bridge.js",revision:"63df93333e520c84c9850ec0371894bd"},{url:"assets/file-viewer-preview-bridge.js",revision:"2c82c9cbe0d1a0554952c9b4f237b613"},{url:"assets/screenshots/xt-ml.github.io_shadow-claw-template-1024x768.png",revision:"1cc2cf3bfac85210d6d47f98a25bae84"},{url:"assets/screenshots/xt-ml.github.io_shadow-claw-agent-cli-weather-1024x768.png",revision:"a7c3d784e410c3284da9c2842f16842c"},{url:"assets/screenshots/shadow-claw-screenshot-731x1045.png",revision:"f3b9e801298660c14976d22f20a0c243"},{url:"assets/screenshots/shadow-claw-screenshot-1920x1052.png",revision:"16f391d0bbc913ec5aa239c8d577c7a4"},{url:"assets/screenshots/shadow-claw-screenshot-1024x768.png",revision:"3ee54a033db17e3bf3dfb7d0a11ab4e1"},{url:"assets/screenshots/kherrick.github.io_pwgen-knowledge-hub-1024x768.png",revision:"94ace19b1968a1955661d4390f9e11f4"},{url:"assets/screenshots/kherrick.github.io_block-garden-knowledge-hub-1024x768.png",revision:"fe5531f3dde6781830c3e5a5d9a3e705"},{url:"assets/icons/96.png",revision:"f91548690416c59ceb56cdb99809b955"},{url:"assets/icons/72.png",revision:"cba8470097972bdbc5d9a06fe67bfcf2"},{url:"assets/icons/512.png",revision:"ec2a8f28b812a0c2665a04cb3c535aab"},{url:"assets/icons/48.png",revision:"29eb2f38df4d5a6385399a04d7bdef00"},{url:"assets/icons/192.png",revision:"bf98264d7a62a47542e577245a292b77"},{url:"assets/icons/180.png",revision:"69128cf857af09292bb06fac0df9938b"},{url:"assets/icons/152.png",revision:"645ae818149dc508cc6146d620120db2"},{url:"assets/icons/128.png",revision:"84678d51d243c104d0c85a4e909fd0a6"},{url:"assets/icons/1024.png",revision:"ae17c81b3b93137df1702de6a9fcdab6"}],{}),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html"),{allowlist:[/^\/$/,/^\/(chat|files|pages|tasks|settings)(?:\/.*)?$/]})),e.registerRoute(({url:e,sameOrigin:a})=>{if(e.pathname.startsWith("/assets/v86.9pfs/"))return!1;const s=e.hostname.toLowerCase();if("huggingface.co"===s||s.endsWith(".huggingface.co")||s.endsWith(".hf.co")||"hf.co"===s||"hf-mirror.com"===s||s.endsWith(".hf-mirror.com")||"cdnjs.cloudflare.com"===s||"esm.sh"===s||s.endsWith(".esm.sh")||"unpkg.com"===s||"cdn.jsdelivr.net"===s||s.endsWith(".jsdelivr.net")||"esm.run"===s||"openrouter.ai"===s||s.endsWith(".openrouter.ai")||"api.telegram.org"===s)return!1;if(e.pathname.startsWith("/api/control/"))return!1;const c=e.pathname.endsWith("/share/share-target.html"),o="/proxy"===e.pathname||e.pathname.startsWith("/git-proxy/")||c||e.pathname.startsWith("/push/")||e.pathname.startsWith("/schedule/")||e.pathname.startsWith("/telegram/");return(!("localhost"===s||"127.0.0.1"===s||"::1"===s||"[::1]"===s)||!o)&&("boolean"!=typeof a||a)},new e.NetworkFirst({cacheName:"shadow-claw-cache",plugins:[new e.ExpirationPlugin({maxAgeSeconds:31536e3})]}),"GET")});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as e}from"./config-D4lVqMs8.js";import{c as t,n,r,u as i}from"./app-routes-BMQ4HFaM.js";import{i as a}from"./txPromise-C2iYogHX.js";import{t as o}from"./getConfig-4saf0Tkq.js";import{t as s}from"./dist-B9m1QM9v.js";import{R as c,Zt as l,a as u,c as d,lt as f,o as p,st as m,t as h,vt as g,w as ee,xn as te,xt as _}from"./orchestrator-D6tel2Zp.js";import{o as ne}from"./tools-nysPKnGT.js";import{t as re}from"./setConfig-DdSThoKj.js";import{t as v}from"./ulid-BY7rQVLN.js";import{a as y,r as b}from"./toast-BXgUfbyh.js";import{n as ie,r as ae,t as oe}from"./constants-DiETpg52.js";import{t as se}from"./shadow-claw-element-DIrv3P6A.js";import{t as x}from"./effect-BJCrpFdp.js";import{t as ce}from"./prompt-api-OUOP-B-R.js";import{t as S}from"./configurePeerJs-DDOAVSaH.js";import{t as C}from"./file-viewer-DLUBvOVD.js";import{t as le}from"./parseConfigBoolean-ByjZr9OM.js";const w={Light:`light`,Dark:`dark`,System:`system`},T=`shadow-claw-theme`;function ue(){return typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`}function E(e){return e===`system`?ue():e}function D(e){let t=document.documentElement;e===`dark`?(t.classList.add(`dark-mode`),t.classList.remove(`light-mode`)):(t.classList.add(`light-mode`),t.classList.remove(`dark-mode`));let n=document.querySelector(`shadow-claw`);n&&(e===`dark`?(n.classList.add(`dark-mode`),n.classList.remove(`light-mode`)):(n.classList.add(`light-mode`),n.classList.remove(`dark-mode`))),window.dispatchEvent(new CustomEvent(`shadow-claw-theme-change`,{detail:{theme:e}}))}const O=u(T)||`system`,k=E(O);D(k);const A=new class{_resolved;_theme;constructor(){this._theme=new s.State(O),this._resolved=new s.State(k)}getTheme(){return{theme:this.theme,resolved:this.resolved}}init(){typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-color-scheme: dark)`).addEventListener(`change`,()=>{let e=ue();d(T,`system`),D(e),this._theme.set(`system`),this._resolved.set(e)}),window.addEventListener(`storage`,e=>{let t=p(T);e.key===t&&e.newValue&&this.setTheme(e.newValue)})}get resolved(){return this._resolved.get()}setTheme(e){let t=E(e);d(T,e),D(t),this._theme.set(e),this._resolved.set(t)}get theme(){return this._theme.get()}};A.init();async function j(e,t=3){for(let n=0;n<t;n++){if(e())return;await new Promise(e=>{requestAnimationFrame(()=>e())})}}function M(e,t){let n=e.sidebarDefaultPage,r=[n,`pages`,`chat`,`tasks`,`files`];if(!t)return n===`pages`||n===`chat`||n===`tasks`||n===`files`?n:`chat`;for(let e of r){if(e===`pages`&&!t.pagesSidebarHidden)return`pages`;if(e===`chat`&&!t.chatSidebarHidden)return`chat`;if(e===`tasks`&&!t.tasksSidebarHidden)return`tasks`;if(e===`files`&&!t.filesSidebarHidden)return`files`}return`pages`}function de(e,t,n){return n&&t===`pages`?M(e):t}function fe(e,t){if(!e||![`chat`,`tasks`,`files`].includes(t))return null;let n=e.querySelector(`[data-page-id="${t}"]`);if(!(n instanceof HTMLElement))return null;let r=n.querySelector(`shadow-claw-chat, shadow-claw-tasks, shadow-claw-files`),i=r instanceof HTMLElement?r.shadowRoot?.querySelector(`[data-terminal-slot]`):null;return i instanceof HTMLElement?i:null}function pe(e,t,n,r){let i=n;if(!i)return;let a=fe(e,t);if(!a)return;i.parentElement!==a&&a.appendChild(i);let o=!r;i.hidden=o,o?(a.setAttribute(`hidden`,`hidden`),e?.querySelector(`shadow-claw-terminal`)?.setAttribute(`hidden`,`hidden`)):(a.removeAttribute(`hidden`),e?.querySelector(`shadow-claw-terminal`)?.removeAttribute(`hidden`))}const me={pages:()=>import(`./shadow-claw-pages-BRQw8bTm.js`),chat:()=>import(`./shadow-claw-chat-BxR6cBYQ.js`),tasks:()=>import(`./shadow-claw-tasks-BO8aXM2B.js`),files:()=>import(`./shadow-claw-files-B774Xz1d.js`),settings:()=>import(`./shadow-claw-settings-BGrDNyqh.js`),tools:()=>import(`./shadow-claw-tools-Bj6DLZ-2.js`),channels:()=>import(`./shadow-claw-channels-Ci2UPaaA.js`),terminal:()=>import(`./shadow-claw-terminal-BSeTuyDa.js`),"file-viewer":()=>import(`./shadow-claw-file-viewer-a_uRA30F.js`),"pdf-viewer":()=>import(`./shadow-claw-pdf-viewer-gOiW-_Bh.js`)},N=new Map;async function P(e){let t=N.get(e);if(!t){let n=me[e];n?(t=n().then(()=>void 0),N.set(e,t)):t=Promise.resolve()}await t}function F(e,t,n,r,i){r&&P(`terminal`).catch(console.error),i!==null&&cancelAnimationFrame(i),i=requestAnimationFrame(()=>{i=null,pe(e,t,n,r)})}function he(e){if(!e)return[];let t=[`shadow-claw-chat`,`shadow-claw-tasks`,`shadow-claw-files`,`shadow-claw-pages`,`shadow-claw-settings`,`shadow-claw-tools`,`shadow-claw-channels`],n=[];for(let r of t){let t=e.querySelector(r);if(!(t instanceof HTMLElement))continue;let i=t.shadowRoot?.querySelector(`shadow-claw-page-header`);i instanceof HTMLElement&&n.push(i)}return n}function I(e,t){if(e)for(let n of he(e))n.setMainCollapsedOverride?.(t)}function L(e,t,n){if(!e)return;let r=e.querySelector(`.activity-log-toggle`);r instanceof HTMLButtonElement&&(r.hidden=t!==`chat`||n===0)}function R(e){if(!e)return null;let t=e.querySelector(`.page.active`);if(!(t instanceof HTMLElement))return null;let n=t.querySelector(`shadow-claw-chat, shadow-claw-tasks, shadow-claw-files, shadow-claw-pages, shadow-claw-settings, shadow-claw-tools, shadow-claw-channels`);if(!(n instanceof HTMLElement))return null;let r=n.shadowRoot?.querySelector(`shadow-claw-page-header`);return r instanceof HTMLElement?r:null}function z(e,t){if(!e)return;let n=e.querySelector(`.header-main-toggle`);if(!(n instanceof HTMLButtonElement))return;let r=typeof t==`boolean`?t:R(e)?.isMainCollapsed?.()??!1;n.setAttribute(`aria-label`,r?`Show action header`:`Hide action header`),n.setAttribute(`title`,r?`Show action header`:`Hide action header`),n.setAttribute(`aria-pressed`,String(r))}function B(e,t,n,r){if(!e)return;let i=e.querySelector(`.webvm-toggle`);if(!(i instanceof HTMLButtonElement))return;let a=t===`chat`||t===`files`;if(i.hidden=!a,i.classList.toggle(`hidden`,!a),i.classList.remove(`webvm-toggle--hidden`,`webvm-toggle--visible`,`webvm-toggle--booting`,`webvm-toggle--ready`,`webvm-toggle--error`),!a){i.classList.add(`webvm-toggle--error`);return}i.classList.add(n?`webvm-toggle--visible`:`webvm-toggle--hidden`),r.ready?i.classList.add(`webvm-toggle--ready`):(r.booting||r.bootAttempted)&&i.classList.add(`webvm-toggle--booting`),i.setAttribute(`aria-label`,n?`Hide WebVM terminal`:`Show WebVM terminal`),i.setAttribute(`title`,n?`Hide WebVM terminal`:`Show WebVM terminal`),i.setAttribute(`aria-pressed`,String(n))}const V={chat:`shadow-claw-chat`,tasks:`shadow-claw-tasks`,files:`shadow-claw-files`,settings:`shadow-claw-settings`,tools:`shadow-claw-tools`,channels:`shadow-claw-channels`};function H(e,t){let n=V[t];if(!n)return;let r=e.querySelector(`[data-page-id="${t}"]`);!r||r.children.length>0||r.appendChild(document.createElement(n))}function U(e,t,n,r,i,a=!0){if(!e)return;let o=de(r,i,t.pagesSidebarHidden),s=!!t.chatSplitViewEnabled&&o!==`chat`,c=e.querySelector(`.main-content`),l=e.querySelector(`.chat-split-resize-handle`);if(s){let t=V.chat;t&&customElements.get(t)?H(e,`chat`):P(`chat`).then(()=>{e&&H(e,`chat`)}).catch(console.error),c&&c.classList.add(`split-chat-active`),l&&l.removeAttribute(`hidden`)}else c&&c.classList.remove(`split-chat-active`),l&&l.setAttribute(`hidden`,`hidden`);let u=V[o];u&&customElements.get(u)?H(e,o):P(o).then(()=>{e&&H(e,o)}).catch(console.error),e.querySelectorAll(`.page`).forEach(e=>{e.classList.remove(`active`)}),e.querySelectorAll(`.nav-item`).forEach(e=>{e.classList.remove(`active`)});let d=e.querySelector(`[data-page-id="${o}"]`);d&&d.classList.add(`active`);let f=e.querySelector(`[data-page="${o}"]`);f&&f.classList.add(`active`),t.currentPage=o,a&&n&&r.setActivePage(n,o).catch(console.error),F(e,t.currentPage,t.terminalElement,t.terminalVisible,t.terminalPlacementFrame),I(e,t.headerMainCollapsedOverride),z(e,t.headerMainCollapsedOverride),L(e,t.currentPage,r.activityLog.length),B(e,t.currentPage,t.terminalVisible,t.vmStatus);let p=e.querySelector(`.page.active`);if(p){let e=p;typeof e.scrollTo==`function`&&e.scrollTo(0,0)}if(o===`chat`){let t=e.querySelector(`shadow-claw-chat`);t&&typeof t.checkPromptApiOnboarding==`function`&&t.checkPromptApiOnboarding()}if(o===`files`&&n&&r.loadFiles(n).catch(console.error),o===`pages`){let t=e.querySelector(`shadow-claw-pages`);t&&typeof t.renderSelectedPage==`function`&&(t.renderSelectedPage(),typeof t.setupAutoRefreshTimer==`function`&&t.setupAutoRefreshTimer())}}async function W(e,t,n,r,i,a){let{page:o,groupId:s,path:c,anchor:l}=a;if(!n)return;let u=o?String(o).toLowerCase():``;if(u&&r.file&&!(u===`files`&&c&&c===r.file.path&&(!s||s===i.activeGroupId))){let t=e?.querySelector(`shadow-claw-file-viewer`);if(t&&typeof t.requestCloseViewer==`function`){if(!await t.requestCloseViewer())return}else r.closeFile()}if(s&&s!==i.activeGroupId?await i.switchConversation(n,s,u===`chat`):s&&(i.loadHistory(),(u===`tasks`||u===`files`)&&n&&i.loadFiles(n)),u&&U(e,t,n,i,u),u===`files`&&c)if(/\.[^./]+$/u.test(c))try{await r.openFile(n,c,s||i.activeGroupId),l&&await j(()=>{let t=e?.querySelector(`shadow-claw-file-viewer`);return t&&typeof t.handleAnchorNavigation==`function`?!!t.handleAnchorNavigation(l):!1})}catch(e){console.error(`Failed to open file via route navigation:`,c,e)}else try{await i.setCurrentPath(n,c),r.closeFile()}catch(e){console.error(`Failed to open folder via route navigation:`,c,e)}if(u===`pages`){if(typeof customElements<`u`&&await customElements.whenDefined(`shadow-claw-pages`),c)await i.setActivePinnedPage(n,{groupId:s||i.activeGroupId||`br:main`,path:c});else{let e=i.effectiveDefaultPage||i.pages&&i.pages[0]||null;e&&await i.setActivePinnedPage(n,e)}let t=e?.querySelector(`shadow-claw-pages`);t&&typeof t.renderSelectedPage==`function`&&(await t.renderSelectedPage(),typeof t.setupAutoRefreshTimer==`function`&&t.setupAutoRefreshTimer(),l&&await j(()=>typeof t.handleAnchorNavigation==`function`&&!!t.handleAnchorNavigation(l)))}}async function G(e,t,n,r,a,o){let s=await i(o,a.activeGroupId);s&&await W(e,t,n,r,a,s)}function K(e,t){let n=e?.querySelector(`.app-body`);if(!(n instanceof HTMLElement))return Math.max(200,Math.min(560,t));let r=Math.max(200,n.getBoundingClientRect().width-260);return Math.max(200,Math.min(Math.min(560,r),t))}async function q(t,n){if(t)try{await re(t,e.SIDEBAR_WIDTH,n)}catch{}}function J(e,t){let n=e?.querySelector(`.app-body`);if(!(n instanceof HTMLElement))return;let r=K(e,t);n.style.setProperty(`--sidebar-width`,`${r}px`)}async function ge(t,n,r,i){if(!t)return;let a=t.querySelector(`.sidebar-resize-handle`);if(!(a instanceof HTMLElement))return;a.setAttribute(`tabindex`,`0`),a.setAttribute(`role`,`separator`),a.setAttribute(`aria-orientation`,`vertical`),a.setAttribute(`aria-label`,`Resize sidebar width`);let s=()=>{let e=t.querySelector(`.app-body`);if(!(e instanceof HTMLElement))return 250;let n=parseFloat(e.style.getPropertyValue(`--sidebar-width`));return Number.isFinite(n)&&n>0?n:r.getBoundingClientRect().width||250},c=()=>{let e=Math.round(K(t,s())),n=Math.round(K(t,2**53-1));a.setAttribute(`aria-valuemin`,`200`),a.setAttribute(`aria-valuemax`,String(n)),a.setAttribute(`aria-valuenow`,String(e))};try{let n=i?await o(i,e.SIDEBAR_WIDTH):void 0;typeof n==`number`&&Number.isFinite(n)&&n>0?J(t,n):J(t,250)}catch{J(t,250)}let l=null,u=0,d=0,f=e=>{if(e.pointerId!==l)return;let n=e.clientX-u;J(t,d+n),c()},p=()=>{if(l===null)return;l=null,a.classList.remove(`active`),document.removeEventListener(`pointermove`,f);let e=t.querySelector(`.app-body`);if(e instanceof HTMLElement){let t=parseFloat(e.style.getPropertyValue(`--sidebar-width`));Number.isFinite(t)&&t>0&&i&&q(i,t)}},m=e=>{e.pointerId===l&&p()};a.addEventListener(`pointerdown`,e=>{e.pointerType===`mouse`&&e.button!==0&&e.button!==-1||window.innerWidth<896||(e.preventDefault(),l=e.pointerId,u=e.clientX,d=r.getBoundingClientRect().width,a.classList.add(`active`),a.setPointerCapture(e.pointerId),document.addEventListener(`pointermove`,f))}),a.addEventListener(`pointerup`,m),a.addEventListener(`pointercancel`,p),a.addEventListener(`dblclick`,()=>{J(t,250),i&&q(i,250),c()}),a.addEventListener(`keydown`,e=>{if(window.innerWidth<896)return;let n=e.shiftKey?32:12,r=s(),a=null;e.key===`ArrowRight`?a=r+n:e.key===`ArrowLeft`?a=r-n:e.key===`Home`?a=200:e.key===`End`&&(a=K(t,2**53-1)),a!==null&&(e.preventDefault(),J(t,a),c(),i&&q(i,K(t,s())))}),c(),n.addCleanup(()=>{p(),a.removeEventListener(`pointerup`,m),a.removeEventListener(`pointercancel`,p)})}async function Y(e,t,n){if(!t)return!1;let r=t.querySelector(`.app-dialog`),i=t.querySelector(`.app-dialog__title`),a=t.querySelector(`.app-dialog__message`),o=t.querySelector(`.app-dialog__details`),s=t.querySelector(`.app-dialog__links`),c=t.querySelector(`.app-dialog__btn--confirm`),l=t.querySelector(`.app-dialog__btn--cancel`),u=t.querySelector(`.app-dialog__countdown`);if(!r||!i||!a||!o||!s||!c||!l)return!1;r._autoCloseTimer&&=(clearInterval(r._autoCloseTimer),null),r.open&&r.close(),i.textContent=n.title,a.textContent=n.message,o.replaceChildren(),s.replaceChildren();let d=Array.isArray(n.details)?n.details:[];o.hidden=d.length===0;for(let t of d){let n=e.createElement(`li`);n.textContent=t,o.appendChild(n)}let f=Array.isArray(n.links)?n.links:[];s.hidden=f.length===0;for(let t of f){let n=e.createElement(`a`);n.className=`app-dialog__link`,n.href=t.href,n.rel=`noreferrer`,n.target=`_blank`,n.textContent=t.label,s.appendChild(n)}let p=n.mode||`confirm`,m=n.confirmLabel||(p===`info`?`OK`:`Confirm`);l.textContent=n.cancelLabel||`Cancel`,l.hidden=p===`info`;let h=null,g=()=>{h&&=(clearInterval(h),null),r._autoCloseTimer&&=null};if(typeof n.autoCloseSeconds==`number`&&n.autoCloseSeconds>0){let e=Math.max(1,Math.round(n.autoCloseSeconds));c.textContent=`${m} (${e}s)`,u&&(u.hidden=!1,u.textContent=`Auto-closing in ${e}s...`,u.setAttribute(`role`,`status`),u.setAttribute(`aria-live`,`polite`),u.setAttribute(`aria-atomic`,`true`)),h=setInterval(()=>{e--,e>0?(c.textContent=`${m} (${e}s)`,u&&(u.textContent=`Auto-closing in ${e}s...`)):(g(),r.returnValue=p===`info`?`confirm`:`cancel`,r.close(r.returnValue))},1e3),r._autoCloseTimer=h}else c.textContent=m,u&&(u.hidden=!0,u.textContent=``);return r.returnValue=``,await new Promise(e=>{let t=()=>{g(),r.removeEventListener(`close`,t),e(r.returnValue===`confirm`)};r.addEventListener(`close`,t),r.showModal()})}const _e={pages:e.SIDEBAR_PAGES_HIDDEN,chat:e.SIDEBAR_CHAT_HIDDEN,tasks:e.SIDEBAR_TASKS_HIDDEN,files:e.SIDEBAR_FILES_HIDDEN};function X(e,t,n){if(!e)return;let r=e.querySelector(`.nav-item[data-page="${t}"]`);r&&(r.hidden=n,r.setAttribute(`aria-hidden`,String(n)))}function ve(e){switch(e){case`pages`:return`pagesSidebarHidden`;case`chat`:return`chatSidebarHidden`;case`tasks`:return`tasksSidebarHidden`;case`files`:return`filesSidebarHidden`}}async function ye(e,t,n,r){for(let[n,i]of Object.entries(_e)){let a=n,s=!1;if(r)try{s=le(await o(r,i))}catch{s=!1}let c=ve(a);t[c]=s,X(e,a,s)}}function Z(e,t,n,r,i,a){switch(i){case`pages`:t.pagesSidebarHidden=a;break;case`chat`:t.chatSidebarHidden=a;break;case`tasks`:t.tasksSidebarHidden=a;break;case`files`:t.filesSidebarHidden=a;break}X(e,i,a),a&&t.currentPage===i&&U(e,t,r,n,M(n,t))}function be(e,t,n,r,i){Z(e,t,n,r,`pages`,i)}function Q(){let e=window.navigation;return!!(e&&typeof e.addEventListener==`function`&&typeof e.navigate==`function`)}function xe(e,t,n,r={}){let i=r.debounceMs??250,a=r.minSleepDurationMs??1e3,o=0,s=null,c=!1,l=e=>{e&&(c=!0),s!==null&&clearTimeout(s),s=setTimeout(()=>{s=null;let e=c;c=!1,n.ensureAllConnections({force:e})},i)},u=()=>{s!==null&&(clearTimeout(s),s=null),c=!1},d=()=>{if(t.visibilityState===`hidden`)o=Date.now(),u();else if(t.visibilityState===`visible`){let e=o>0&&Date.now()-o>=a;l(e)}},f=e=>{let n=!!(e&&e.persisted);l(n||t.visibilityState===`visible`)},p=()=>{t.visibilityState===`visible`&&l(!1)},m=()=>{l(!0)};return t.addEventListener(`visibilitychange`,d),e.addEventListener(`pageshow`,f),e.addEventListener(`focus`,p),e.addEventListener(`online`,m),()=>{u(),t.removeEventListener(`visibilitychange`,d),e.removeEventListener(`pageshow`,f),e.removeEventListener(`focus`,p),e.removeEventListener(`online`,m)}}function Se(e,t){if(!e)return;let n=e.querySelector(`shadow-claw-chat`);n&&typeof n.setActivityLogCollapsedOverride==`function`&&n.setActivityLogCollapsedOverride(t)}function Ce(e,t){if(!e)return;let n=e.querySelector(`.activity-log-toggle`);if(!(n instanceof HTMLButtonElement))return;let r=typeof globalThis.matchMedia==`function`&&!globalThis.matchMedia(`(min-width: 56rem) and (min-height: 401px)`).matches,i=typeof t==`boolean`?t:r;n.setAttribute(`aria-label`,i?`Show activity log`:`Hide activity log`),n.setAttribute(`title`,i?`Show activity log`:`Hide activity log`),n.setAttribute(`aria-pressed`,String(i))}function we(e){let t=typeof globalThis.matchMedia==`function`&&!globalThis.matchMedia(`(min-width: 56rem) and (min-height: 401px)`).matches;e.activityLogCollapsedOverride=!(typeof e.activityLogCollapsedOverride==`boolean`?e.activityLogCollapsedOverride:t),Se(e.shadowRoot,e.activityLogCollapsedOverride),Ce(e.shadowRoot,e.activityLogCollapsedOverride)}function Te(e){e.headerMainCollapsedOverride=!(typeof e.headerMainCollapsedOverride==`boolean`?e.headerMainCollapsedOverride:R(e.shadowRoot)?.isMainCollapsed?.()??!1),I(e.shadowRoot,e.headerMainCollapsedOverride),z(e.shadowRoot,e.headerMainCollapsedOverride)}function Ee(e,t){t.terminalVisible=!t.terminalVisible,B(e,t.currentPage,t.terminalVisible,t.vmStatus),F(e,t.currentPage,t.terminalElement,t.terminalVisible,t.terminalPlacementFrame)}function De(e,t){e===w.Dark?(t.add(`dark-mode`),t.remove(`light-mode`)):(t.add(`light-mode`),t.remove(`dark-mode`))}function Oe(e,t){if(!e)return;let n=e.querySelector(`.sun-icon`),r=e.querySelector(`.moon-icon`);n&&r&&(t===w.Dark?(n.style.display=`block`,n.removeAttribute(`hidden`),n.classList.remove(`hidden`),r.style.display=`none`,r.setAttribute(`hidden`,`hidden`),r.classList.add(`hidden`)):(n.style.display=`none`,n.setAttribute(`hidden`,`hidden`),n.classList.add(`hidden`),r.style.display=`block`,r.removeAttribute(`hidden`),r.classList.remove(`hidden`)))}function ke(e,t,n,r,i,a,o,s,c){if(!n||!e||!t)return;n.querySelectorAll(`.nav-item[data-page]`).forEach(e=>{let r=e;r.addEventListener(`click`,()=>{let e=r.dataset.page||M(a);n.querySelectorAll(`.nav-item`).forEach(e=>e.classList.remove(`active`)),r.classList.add(`active`),setTimeout(()=>{t.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:e},bubbles:!0,composed:!0}))},0)})});let l=n.getElementById(`menu-button`),u=n.querySelector(`.sidebar`);if(l&&u){l.addEventListener(`click`,()=>{u.classList.toggle(`open`)}),n.querySelectorAll(`.nav-item, .settings-btn`).forEach(t=>{t.addEventListener(`click`,()=>{e.innerWidth<896&&u.classList.remove(`open`)})}),t.addEventListener(`click`,t=>{let n=t.composedPath();e.innerWidth<896&&u.classList.contains(`open`)&&!n.includes(u)&&!n.includes(l)&&u.classList.remove(`open`)});let a=e.matchMedia?e.matchMedia(`(min-width: 56rem)`):{matches:!1,addEventListener:()=>{},removeEventListener:()=>{}},o=e=>{e.matches&&u.classList.remove(`open`)};o(a),a.addEventListener(`change`,o),ge(n,r,u,i)}let d=n.querySelector(`[data-action="show-settings"]`);d&&d.addEventListener(`click`,()=>{t.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:`settings`},bubbles:!0,composed:!0}))}),n.querySelector(`.header-main-toggle`)?.addEventListener(`click`,()=>{Te(r)}),n.querySelector(`.activity-log-toggle`)?.addEventListener(`click`,()=>{we(r)}),n.addEventListener(`navigate`,e=>{let n=e.detail?.page;n&&t.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:n},bubbles:!0,composed:!0}))}),n.addEventListener(`sidebar-pages-visibility-change`,e=>{be(n,r,a,i,!!e.detail?.hidden)}),n.addEventListener(`sidebar-chat-visibility-change`,e=>{Z(n,r,a,i,`chat`,!!e.detail?.hidden)}),n.addEventListener(`sidebar-tasks-visibility-change`,e=>{Z(n,r,a,i,`tasks`,!!e.detail?.hidden)}),n.addEventListener(`sidebar-files-visibility-change`,e=>{Z(n,r,a,i,`files`,!!e.detail?.hidden)}),n.addEventListener(`chat-split-view-change`,e=>{r.chatSplitViewEnabled=!!e.detail?.enabled,U(n,r,i,a,r.currentPage,!1)}),n.addEventListener(`navigate-back`,()=>t.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:`settings`},bubbles:!0,composed:!0})));let f=n.querySelector(`.theme-mode-toggle`);f&&f.addEventListener(`click`,()=>{let{resolved:e}=s.getTheme(),t=e===w.Dark?w.Light:w.Dark;s.setTheme(t)}),n.querySelector(`.webvm-toggle`)?.addEventListener(`click`,()=>Ee(n,r)),n.addEventListener(`shadow-claw-terminal-slot-ready`,()=>{F(n,r.currentPage,r.terminalElement,r.terminalVisible,r.terminalPlacementFrame),I(n,r.headerMainCollapsedOverride),z(n,r.headerMainCollapsedOverride)}),e.addEventListener(`resize`,()=>{r.headerMainCollapsedOverride===null&&z(n,r.headerMainCollapsedOverride)}),t.addEventListener(`shadow-claw-navigate`,r.shadowClawNav),Q()?(e.navigation.addEventListener(`navigate`,r.handleNavigationApiNavigate),r.navigationListenerAttached=!0):(r.popstateListener=()=>{G(n,r,i,o,a,new URL(e.location.href))},e.addEventListener(`popstate`,r.popstateListener),t.addEventListener(`click`,r.fallbackClickListener),r.fallbackClickListenerAttached=!0),e.addEventListener(`shadow-claw-theme-change`,e=>{let t=e.detail.theme;Oe(n,t),De(t,r.classList)}),e.addEventListener(`shadow-claw-peer-error`,e=>{let r=e.detail,i=r.remotePeerId,a=r.error;Y(t,n,{mode:`info`,title:`Peer Connection Error`,message:i?`Failed to communicate with peer ${i}: ${a}`:`PeerJS error: ${a}`,confirmLabel:`Dismiss`,autoCloseSeconds:30})});let p=s.resolved;Oe(n,p),De(p,r.classList),r.appLifecycleCleanup&&=(r.appLifecycleCleanup(),null),r.orchestrator&&(r.appLifecycleCleanup=xe(e,t,r.orchestrator))}function Ae(e){if(e===void 0)return;e.documentElement.classList.remove(ie,`sc-prerender-override`);let t=e.querySelector(`shadow-claw`);t?.removeAttribute(oe),t?.removeAttribute(ae)}function je(e,n){if(!e)return;let r=n;if(r.navigationType===`reload`)return;let i=r?.destination?.url;if(typeof i!=`string`)return;let a=new URL(i);if(a.origin===window.location.origin&&t(a.pathname))return{parsedUrl:a,navigateEvent:r}}function Me(e,n){if(n.defaultPrevented||n.button!==0||n.metaKey||n.ctrlKey||n.shiftKey||n.altKey)return null;let r=n.composedPath(),i=null;for(let e of r)if(e instanceof HTMLAnchorElement){i=e;break}if(!i)return null;let a=i.getAttribute(`href`)||``;return!a||a.startsWith(`javascript:`)||a.startsWith(`mailto:`)||a.startsWith(`tel:`)||i.target&&i.target!==`_self`||i.origin!==e.origin||!t(i.pathname)||i.pathname===e.pathname&&i.search===e.search&&i.hash!==e.hash?null:(n.preventDefault(),`${i.pathname}${i.search}${i.hash}`)}async function Ne(e,t,n){if(!t)return null;let r=t.querySelector(`.app-prompt-dialog`),i=t.querySelector(`.app-prompt-dialog__message`),a=t.querySelector(`.app-prompt-dialog__input-area`);if(!r||!i||!a)return null;if(r.open&&r.close(),i.textContent=n.question,a.replaceChildren(),Array.isArray(n.options)&&n.options.length>0){let t=e.createElement(`select`);t.className=`app-prompt-dialog__input`,t.name=`prompt-response`;for(let r of n.options){let n=e.createElement(`option`);n.value=r,n.textContent=r,t.appendChild(n)}a.appendChild(t)}else{let t=e.createElement(`input`);t.type=`text`,t.className=`app-prompt-dialog__input`,t.name=`prompt-response`,t.placeholder=`Enter your response...`,t.autocomplete=`off`,a.appendChild(t),setTimeout(()=>t.focus(),50)}return r.returnValue=``,await new Promise(e=>{let t=()=>{if(r.removeEventListener(`close`,t),r.returnValue===`submit`){let t=a.querySelector(`[name='prompt-response']`);e(t?t.value:null)}else e(null)};r.addEventListener(`close`,t),r.showModal()})}async function Pe(e,t,n,r){let i=await Ne(e,t,r);ee(n.orchestrator,r.id,i)}async function Fe(e,t,n,r){let i=r.path,a=r.groupId||t.activeGroupId;if(!(!i||!e))for(let t=0;t<=3;t++)try{await n.openFile(e,i,a);return}catch(e){let n=e instanceof DOMException&&e.name===`NotFoundError`;if(t<3&&n){await new Promise(e=>setTimeout(e,150*(t+1)));continue}b(`Failed to open file from tool: ${e instanceof Error?e.message:String(e)}`,5e3);return}}async function Ie(e,t,n){n?.providerId===`llamafile`?await Y(e,t,f(n.reason)):n?.providerId===`transformers_js_local`?await Y(e,t,m(n.reason)):n?.providerId===`prompt_api`?await Y(e,t,ce(n.reason)):n?.providerId&&n.helpType&&await Y(e,t,te(n.providerId,n.helpType,n.reason))}async function Le(e,t,n,r,i,a){if(!(!r||!a?.roomId||!a?.hostPeerId)&&await Y(e,t,{mode:`confirm`,title:`Room invitation`,message:`${a.fromAlias||a.fromPeerId} invited you to join "${a.roomName}".`,confirmLabel:`Join`,cancelLabel:`Decline`}))try{c(n.orchestrator,a.roomId,a.hostPeerId,a.roomName),await i.switchConversation(r,`room:${a.roomId}`),U(t,n,r,i,`chat`),y(`Joined room "${a.roomName}"`)}catch(e){b(`Failed to join room: ${e instanceof Error?e.message:String(e)}`,6e3)}}function Re(e,t,n){let r=n.useTrailingSlash&&!t.includes(`#`)?t.endsWith(`/`)?t:t+`/`:t;n.replace?e.replaceState({},``,r):e.pushState({},``,r)}async function ze(e,t,i,a,o,s,c={replace:!1}){let l=n(r(s));if(Q()){window.navigation.navigate(l,{history:c.replace?`replace`:`push`});return}l!==window.location.pathname&&Re(globalThis.history,l,{...c,useTrailingSlash:!1}),await W(e,t,i,a,o,s)}function Be(e){let t=String(e||`chat`).toLowerCase();return t===`chat`||t===`files`||t===`tasks`||t===`pages`||t===`settings`||t===`tools`||t===`channels`?t:`chat`}async function Ve(e,t,n,r,i,a){let o=a.detail;o&&await ze(e,t,n,r,i,{page:Be(String(o.page||`chat`)),groupId:o.groupId,path:o.path,anchor:o.anchor})}async function He(e,t,n,r){await ye(e,t,n,r)}async function Ue(e,t,n,r){if(!n)return;let i=new URL(window.location?.href||`http://localhost/`),a=i.searchParams.get(`peer`);if(!a)return;let o=a.trim();if(o)try{let a=g(r),s=a.myPeerId;s||=v().toLowerCase();let c=new Set(a.trustedPeerIds);c.add(o),await S(r,n,s,Array.from(c),a.serverHost,a.serverPort,a.serverPath,a.serverSecure),a.enabled||await _(r,n,`peerjs`,!0);let l=await h.ensurePeerConversation(n,o);await h.switchConversation(n,l),U(e,t,n,h,`chat`),i.searchParams.delete(`peer`);let u=`${i.pathname}${i.search}${i.hash}`;window.history.replaceState({},``,u||`/`),y(`Connected to Peer: ${o.substring(0,8)}`)}catch(e){b(`Failed to process peer parameter: ${e instanceof Error?e.message:String(e)}`,6e3)}}const We=`pendingShares`;function Ge(e){return{id:typeof e?.id==`string`?e.id:``,createdAt:typeof e?.createdAt==`number`?e.createdAt:0,title:typeof e?.title==`string`?e.title:``,text:typeof e?.text==`string`?e.text:``,url:typeof e?.url==`string`?e.url:``,fileName:typeof e?.fileName==`string`?e.fileName:``,fileType:typeof e?.fileType==`string`?e.fileType:``,fileBytes:e?.fileBytes instanceof ArrayBuffer?e.fileBytes:null}}async function Ke(e){return!e||typeof e.transaction!=`function`?[]:new Promise((t,n)=>{let r;try{r=e.transaction(We,`readwrite`)}catch(e){if(e instanceof DOMException&&e.name===`NotFoundError`){t([]);return}n(e);return}let i=r.objectStore(We),a=i.getAll();a.onerror=()=>{n(a.error||Error(`Failed to read pending shares`))},a.onsuccess=()=>{let e=Array.isArray(a.result)?a.result.map(Ge).filter(e=>typeof e.id==`string`&&e.id.length>0).sort((e,t)=>e.createdAt-t.createdAt):[],r=i.clear();r.onerror=()=>{n(r.error||Error(`Failed to clear pending shares`))},r.onsuccess=()=>{t(e)}},r.onabort=()=>{n(r.error||Error(`Pending share transaction aborted`))}})}function qe(e){let t=[`# Shared Content`,``];return e.title&&t.push(`Title: ${e.title}`),e.url&&t.push(`URL: ${e.url}`),e.text&&t.push(``,e.text),t.join(`
|
|
1
|
+
import{r as e}from"./config-D4lVqMs8.js";import{c as t,n,r,u as i}from"./app-routes-BMQ4HFaM.js";import{i as a}from"./txPromise-C2iYogHX.js";import{t as o}from"./getConfig-4saf0Tkq.js";import{t as s}from"./dist-B9m1QM9v.js";import{R as c,Zt as l,a as u,c as d,lt as f,o as p,st as m,t as h,vt as g,w as ee,xn as te,xt as _}from"./orchestrator-D6tel2Zp.js";import{o as ne}from"./tools-nysPKnGT.js";import{t as re}from"./setConfig-DdSThoKj.js";import{t as v}from"./ulid-BY7rQVLN.js";import{a as y,r as b}from"./toast-BXgUfbyh.js";import{n as ie,r as ae,t as oe}from"./constants-DiETpg52.js";import{t as se}from"./shadow-claw-element-DIrv3P6A.js";import{t as x}from"./effect-BJCrpFdp.js";import{t as ce}from"./prompt-api-OUOP-B-R.js";import{t as S}from"./configurePeerJs-DDOAVSaH.js";import{t as C}from"./file-viewer-DLUBvOVD.js";import{t as le}from"./parseConfigBoolean-ByjZr9OM.js";const w={Light:`light`,Dark:`dark`,System:`system`},T=`shadow-claw-theme`;function ue(){return typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`}function E(e){return e===`system`?ue():e}function D(e){let t=document.documentElement;e===`dark`?(t.classList.add(`dark-mode`),t.classList.remove(`light-mode`)):(t.classList.add(`light-mode`),t.classList.remove(`dark-mode`));let n=document.querySelector(`shadow-claw`);n&&(e===`dark`?(n.classList.add(`dark-mode`),n.classList.remove(`light-mode`)):(n.classList.add(`light-mode`),n.classList.remove(`dark-mode`))),window.dispatchEvent(new CustomEvent(`shadow-claw-theme-change`,{detail:{theme:e}}))}const O=u(T)||`system`,k=E(O);D(k);const A=new class{_resolved;_theme;constructor(){this._theme=new s.State(O),this._resolved=new s.State(k)}getTheme(){return{theme:this.theme,resolved:this.resolved}}init(){typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-color-scheme: dark)`).addEventListener(`change`,()=>{let e=ue();d(T,`system`),D(e),this._theme.set(`system`),this._resolved.set(e)}),window.addEventListener(`storage`,e=>{let t=p(T);e.key===t&&e.newValue&&this.setTheme(e.newValue)})}get resolved(){return this._resolved.get()}setTheme(e){let t=E(e);d(T,e),D(t),this._theme.set(e),this._resolved.set(t)}get theme(){return this._theme.get()}};A.init();async function j(e,t=3){for(let n=0;n<t;n++){if(e())return;await new Promise(e=>{requestAnimationFrame(()=>e())})}}function M(e,t){let n=e.sidebarDefaultPage,r=[n,`pages`,`chat`,`tasks`,`files`];if(!t)return n===`pages`||n===`chat`||n===`tasks`||n===`files`?n:`chat`;for(let e of r){if(e===`pages`&&!t.pagesSidebarHidden)return`pages`;if(e===`chat`&&!t.chatSidebarHidden)return`chat`;if(e===`tasks`&&!t.tasksSidebarHidden)return`tasks`;if(e===`files`&&!t.filesSidebarHidden)return`files`}return`pages`}function de(e,t,n){return n&&t===`pages`?M(e):t}function fe(e,t){if(!e||![`chat`,`tasks`,`files`].includes(t))return null;let n=e.querySelector(`[data-page-id="${t}"]`);if(!(n instanceof HTMLElement))return null;let r=n.querySelector(`shadow-claw-chat, shadow-claw-tasks, shadow-claw-files`),i=r instanceof HTMLElement?r.shadowRoot?.querySelector(`[data-terminal-slot]`):null;return i instanceof HTMLElement?i:null}function pe(e,t,n,r){let i=n;if(!i)return;let a=fe(e,t);if(!a)return;i.parentElement!==a&&a.appendChild(i);let o=!r;i.hidden=o,o?(a.setAttribute(`hidden`,`hidden`),e?.querySelector(`shadow-claw-terminal`)?.setAttribute(`hidden`,`hidden`)):(a.removeAttribute(`hidden`),e?.querySelector(`shadow-claw-terminal`)?.removeAttribute(`hidden`))}const me={pages:()=>import(`./shadow-claw-pages-BRQw8bTm.js`),chat:()=>import(`./shadow-claw-chat-BxR6cBYQ.js`),tasks:()=>import(`./shadow-claw-tasks-BO8aXM2B.js`),files:()=>import(`./shadow-claw-files-B774Xz1d.js`),settings:()=>import(`./shadow-claw-settings-BGrDNyqh.js`),tools:()=>import(`./shadow-claw-tools-Bj6DLZ-2.js`),channels:()=>import(`./shadow-claw-channels-Ci2UPaaA.js`),terminal:()=>import(`./shadow-claw-terminal-BSeTuyDa.js`),"file-viewer":()=>import(`./shadow-claw-file-viewer-CDs1QGXk.js`),"pdf-viewer":()=>import(`./shadow-claw-pdf-viewer-gOiW-_Bh.js`)},N=new Map;async function P(e){let t=N.get(e);if(!t){let n=me[e];n?(t=n().then(()=>void 0),N.set(e,t)):t=Promise.resolve()}await t}function F(e,t,n,r,i){r&&P(`terminal`).catch(console.error),i!==null&&cancelAnimationFrame(i),i=requestAnimationFrame(()=>{i=null,pe(e,t,n,r)})}function he(e){if(!e)return[];let t=[`shadow-claw-chat`,`shadow-claw-tasks`,`shadow-claw-files`,`shadow-claw-pages`,`shadow-claw-settings`,`shadow-claw-tools`,`shadow-claw-channels`],n=[];for(let r of t){let t=e.querySelector(r);if(!(t instanceof HTMLElement))continue;let i=t.shadowRoot?.querySelector(`shadow-claw-page-header`);i instanceof HTMLElement&&n.push(i)}return n}function I(e,t){if(e)for(let n of he(e))n.setMainCollapsedOverride?.(t)}function L(e,t,n){if(!e)return;let r=e.querySelector(`.activity-log-toggle`);r instanceof HTMLButtonElement&&(r.hidden=t!==`chat`||n===0)}function R(e){if(!e)return null;let t=e.querySelector(`.page.active`);if(!(t instanceof HTMLElement))return null;let n=t.querySelector(`shadow-claw-chat, shadow-claw-tasks, shadow-claw-files, shadow-claw-pages, shadow-claw-settings, shadow-claw-tools, shadow-claw-channels`);if(!(n instanceof HTMLElement))return null;let r=n.shadowRoot?.querySelector(`shadow-claw-page-header`);return r instanceof HTMLElement?r:null}function z(e,t){if(!e)return;let n=e.querySelector(`.header-main-toggle`);if(!(n instanceof HTMLButtonElement))return;let r=typeof t==`boolean`?t:R(e)?.isMainCollapsed?.()??!1;n.setAttribute(`aria-label`,r?`Show action header`:`Hide action header`),n.setAttribute(`title`,r?`Show action header`:`Hide action header`),n.setAttribute(`aria-pressed`,String(r))}function B(e,t,n,r){if(!e)return;let i=e.querySelector(`.webvm-toggle`);if(!(i instanceof HTMLButtonElement))return;let a=t===`chat`||t===`files`;if(i.hidden=!a,i.classList.toggle(`hidden`,!a),i.classList.remove(`webvm-toggle--hidden`,`webvm-toggle--visible`,`webvm-toggle--booting`,`webvm-toggle--ready`,`webvm-toggle--error`),!a){i.classList.add(`webvm-toggle--error`);return}i.classList.add(n?`webvm-toggle--visible`:`webvm-toggle--hidden`),r.ready?i.classList.add(`webvm-toggle--ready`):(r.booting||r.bootAttempted)&&i.classList.add(`webvm-toggle--booting`),i.setAttribute(`aria-label`,n?`Hide WebVM terminal`:`Show WebVM terminal`),i.setAttribute(`title`,n?`Hide WebVM terminal`:`Show WebVM terminal`),i.setAttribute(`aria-pressed`,String(n))}const V={chat:`shadow-claw-chat`,tasks:`shadow-claw-tasks`,files:`shadow-claw-files`,settings:`shadow-claw-settings`,tools:`shadow-claw-tools`,channels:`shadow-claw-channels`};function H(e,t){let n=V[t];if(!n)return;let r=e.querySelector(`[data-page-id="${t}"]`);!r||r.children.length>0||r.appendChild(document.createElement(n))}function U(e,t,n,r,i,a=!0){if(!e)return;let o=de(r,i,t.pagesSidebarHidden),s=!!t.chatSplitViewEnabled&&o!==`chat`,c=e.querySelector(`.main-content`),l=e.querySelector(`.chat-split-resize-handle`);if(s){let t=V.chat;t&&customElements.get(t)?H(e,`chat`):P(`chat`).then(()=>{e&&H(e,`chat`)}).catch(console.error),c&&c.classList.add(`split-chat-active`),l&&l.removeAttribute(`hidden`)}else c&&c.classList.remove(`split-chat-active`),l&&l.setAttribute(`hidden`,`hidden`);let u=V[o];u&&customElements.get(u)?H(e,o):P(o).then(()=>{e&&H(e,o)}).catch(console.error),e.querySelectorAll(`.page`).forEach(e=>{e.classList.remove(`active`)}),e.querySelectorAll(`.nav-item`).forEach(e=>{e.classList.remove(`active`)});let d=e.querySelector(`[data-page-id="${o}"]`);d&&d.classList.add(`active`);let f=e.querySelector(`[data-page="${o}"]`);f&&f.classList.add(`active`),t.currentPage=o,a&&n&&r.setActivePage(n,o).catch(console.error),F(e,t.currentPage,t.terminalElement,t.terminalVisible,t.terminalPlacementFrame),I(e,t.headerMainCollapsedOverride),z(e,t.headerMainCollapsedOverride),L(e,t.currentPage,r.activityLog.length),B(e,t.currentPage,t.terminalVisible,t.vmStatus);let p=e.querySelector(`.page.active`);if(p){let e=p;typeof e.scrollTo==`function`&&e.scrollTo(0,0)}if(o===`chat`){let t=e.querySelector(`shadow-claw-chat`);t&&typeof t.checkPromptApiOnboarding==`function`&&t.checkPromptApiOnboarding()}if(o===`files`&&n&&r.loadFiles(n).catch(console.error),o===`pages`){let t=e.querySelector(`shadow-claw-pages`);t&&typeof t.renderSelectedPage==`function`&&(t.renderSelectedPage(),typeof t.setupAutoRefreshTimer==`function`&&t.setupAutoRefreshTimer())}}async function W(e,t,n,r,i,a){let{page:o,groupId:s,path:c,anchor:l}=a;if(!n)return;let u=o?String(o).toLowerCase():``;if(u&&r.file&&!(u===`files`&&c&&c===r.file.path&&(!s||s===i.activeGroupId))){let t=e?.querySelector(`shadow-claw-file-viewer`);if(t&&typeof t.requestCloseViewer==`function`){if(!await t.requestCloseViewer())return}else r.closeFile()}if(s&&s!==i.activeGroupId?await i.switchConversation(n,s,u===`chat`):s&&(i.loadHistory(),(u===`tasks`||u===`files`)&&n&&i.loadFiles(n)),u&&U(e,t,n,i,u),u===`files`&&c)if(/\.[^./]+$/u.test(c))try{await r.openFile(n,c,s||i.activeGroupId),l&&await j(()=>{let t=e?.querySelector(`shadow-claw-file-viewer`);return t&&typeof t.handleAnchorNavigation==`function`?!!t.handleAnchorNavigation(l):!1})}catch(e){console.error(`Failed to open file via route navigation:`,c,e)}else try{await i.setCurrentPath(n,c),r.closeFile()}catch(e){console.error(`Failed to open folder via route navigation:`,c,e)}if(u===`pages`){if(typeof customElements<`u`&&await customElements.whenDefined(`shadow-claw-pages`),c)await i.setActivePinnedPage(n,{groupId:s||i.activeGroupId||`br:main`,path:c});else{let e=i.effectiveDefaultPage||i.pages&&i.pages[0]||null;e&&await i.setActivePinnedPage(n,e)}let t=e?.querySelector(`shadow-claw-pages`);t&&typeof t.renderSelectedPage==`function`&&(await t.renderSelectedPage(),typeof t.setupAutoRefreshTimer==`function`&&t.setupAutoRefreshTimer(),l&&await j(()=>typeof t.handleAnchorNavigation==`function`&&!!t.handleAnchorNavigation(l)))}}async function G(e,t,n,r,a,o){let s=await i(o,a.activeGroupId);s&&await W(e,t,n,r,a,s)}function K(e,t){let n=e?.querySelector(`.app-body`);if(!(n instanceof HTMLElement))return Math.max(200,Math.min(560,t));let r=Math.max(200,n.getBoundingClientRect().width-260);return Math.max(200,Math.min(Math.min(560,r),t))}async function q(t,n){if(t)try{await re(t,e.SIDEBAR_WIDTH,n)}catch{}}function J(e,t){let n=e?.querySelector(`.app-body`);if(!(n instanceof HTMLElement))return;let r=K(e,t);n.style.setProperty(`--sidebar-width`,`${r}px`)}async function ge(t,n,r,i){if(!t)return;let a=t.querySelector(`.sidebar-resize-handle`);if(!(a instanceof HTMLElement))return;a.setAttribute(`tabindex`,`0`),a.setAttribute(`role`,`separator`),a.setAttribute(`aria-orientation`,`vertical`),a.setAttribute(`aria-label`,`Resize sidebar width`);let s=()=>{let e=t.querySelector(`.app-body`);if(!(e instanceof HTMLElement))return 250;let n=parseFloat(e.style.getPropertyValue(`--sidebar-width`));return Number.isFinite(n)&&n>0?n:r.getBoundingClientRect().width||250},c=()=>{let e=Math.round(K(t,s())),n=Math.round(K(t,2**53-1));a.setAttribute(`aria-valuemin`,`200`),a.setAttribute(`aria-valuemax`,String(n)),a.setAttribute(`aria-valuenow`,String(e))};try{let n=i?await o(i,e.SIDEBAR_WIDTH):void 0;typeof n==`number`&&Number.isFinite(n)&&n>0?J(t,n):J(t,250)}catch{J(t,250)}let l=null,u=0,d=0,f=e=>{if(e.pointerId!==l)return;let n=e.clientX-u;J(t,d+n),c()},p=()=>{if(l===null)return;l=null,a.classList.remove(`active`),document.removeEventListener(`pointermove`,f);let e=t.querySelector(`.app-body`);if(e instanceof HTMLElement){let t=parseFloat(e.style.getPropertyValue(`--sidebar-width`));Number.isFinite(t)&&t>0&&i&&q(i,t)}},m=e=>{e.pointerId===l&&p()};a.addEventListener(`pointerdown`,e=>{e.pointerType===`mouse`&&e.button!==0&&e.button!==-1||window.innerWidth<896||(e.preventDefault(),l=e.pointerId,u=e.clientX,d=r.getBoundingClientRect().width,a.classList.add(`active`),a.setPointerCapture(e.pointerId),document.addEventListener(`pointermove`,f))}),a.addEventListener(`pointerup`,m),a.addEventListener(`pointercancel`,p),a.addEventListener(`dblclick`,()=>{J(t,250),i&&q(i,250),c()}),a.addEventListener(`keydown`,e=>{if(window.innerWidth<896)return;let n=e.shiftKey?32:12,r=s(),a=null;e.key===`ArrowRight`?a=r+n:e.key===`ArrowLeft`?a=r-n:e.key===`Home`?a=200:e.key===`End`&&(a=K(t,2**53-1)),a!==null&&(e.preventDefault(),J(t,a),c(),i&&q(i,K(t,s())))}),c(),n.addCleanup(()=>{p(),a.removeEventListener(`pointerup`,m),a.removeEventListener(`pointercancel`,p)})}async function Y(e,t,n){if(!t)return!1;let r=t.querySelector(`.app-dialog`),i=t.querySelector(`.app-dialog__title`),a=t.querySelector(`.app-dialog__message`),o=t.querySelector(`.app-dialog__details`),s=t.querySelector(`.app-dialog__links`),c=t.querySelector(`.app-dialog__btn--confirm`),l=t.querySelector(`.app-dialog__btn--cancel`),u=t.querySelector(`.app-dialog__countdown`);if(!r||!i||!a||!o||!s||!c||!l)return!1;r._autoCloseTimer&&=(clearInterval(r._autoCloseTimer),null),r.open&&r.close(),i.textContent=n.title,a.textContent=n.message,o.replaceChildren(),s.replaceChildren();let d=Array.isArray(n.details)?n.details:[];o.hidden=d.length===0;for(let t of d){let n=e.createElement(`li`);n.textContent=t,o.appendChild(n)}let f=Array.isArray(n.links)?n.links:[];s.hidden=f.length===0;for(let t of f){let n=e.createElement(`a`);n.className=`app-dialog__link`,n.href=t.href,n.rel=`noreferrer`,n.target=`_blank`,n.textContent=t.label,s.appendChild(n)}let p=n.mode||`confirm`,m=n.confirmLabel||(p===`info`?`OK`:`Confirm`);l.textContent=n.cancelLabel||`Cancel`,l.hidden=p===`info`;let h=null,g=()=>{h&&=(clearInterval(h),null),r._autoCloseTimer&&=null};if(typeof n.autoCloseSeconds==`number`&&n.autoCloseSeconds>0){let e=Math.max(1,Math.round(n.autoCloseSeconds));c.textContent=`${m} (${e}s)`,u&&(u.hidden=!1,u.textContent=`Auto-closing in ${e}s...`,u.setAttribute(`role`,`status`),u.setAttribute(`aria-live`,`polite`),u.setAttribute(`aria-atomic`,`true`)),h=setInterval(()=>{e--,e>0?(c.textContent=`${m} (${e}s)`,u&&(u.textContent=`Auto-closing in ${e}s...`)):(g(),r.returnValue=p===`info`?`confirm`:`cancel`,r.close(r.returnValue))},1e3),r._autoCloseTimer=h}else c.textContent=m,u&&(u.hidden=!0,u.textContent=``);return r.returnValue=``,await new Promise(e=>{let t=()=>{g(),r.removeEventListener(`close`,t),e(r.returnValue===`confirm`)};r.addEventListener(`close`,t),r.showModal()})}const _e={pages:e.SIDEBAR_PAGES_HIDDEN,chat:e.SIDEBAR_CHAT_HIDDEN,tasks:e.SIDEBAR_TASKS_HIDDEN,files:e.SIDEBAR_FILES_HIDDEN};function X(e,t,n){if(!e)return;let r=e.querySelector(`.nav-item[data-page="${t}"]`);r&&(r.hidden=n,r.setAttribute(`aria-hidden`,String(n)))}function ve(e){switch(e){case`pages`:return`pagesSidebarHidden`;case`chat`:return`chatSidebarHidden`;case`tasks`:return`tasksSidebarHidden`;case`files`:return`filesSidebarHidden`}}async function ye(e,t,n,r){for(let[n,i]of Object.entries(_e)){let a=n,s=!1;if(r)try{s=le(await o(r,i))}catch{s=!1}let c=ve(a);t[c]=s,X(e,a,s)}}function Z(e,t,n,r,i,a){switch(i){case`pages`:t.pagesSidebarHidden=a;break;case`chat`:t.chatSidebarHidden=a;break;case`tasks`:t.tasksSidebarHidden=a;break;case`files`:t.filesSidebarHidden=a;break}X(e,i,a),a&&t.currentPage===i&&U(e,t,r,n,M(n,t))}function be(e,t,n,r,i){Z(e,t,n,r,`pages`,i)}function Q(){let e=window.navigation;return!!(e&&typeof e.addEventListener==`function`&&typeof e.navigate==`function`)}function xe(e,t,n,r={}){let i=r.debounceMs??250,a=r.minSleepDurationMs??1e3,o=0,s=null,c=!1,l=e=>{e&&(c=!0),s!==null&&clearTimeout(s),s=setTimeout(()=>{s=null;let e=c;c=!1,n.ensureAllConnections({force:e})},i)},u=()=>{s!==null&&(clearTimeout(s),s=null),c=!1},d=()=>{if(t.visibilityState===`hidden`)o=Date.now(),u();else if(t.visibilityState===`visible`){let e=o>0&&Date.now()-o>=a;l(e)}},f=e=>{let n=!!(e&&e.persisted);l(n||t.visibilityState===`visible`)},p=()=>{t.visibilityState===`visible`&&l(!1)},m=()=>{l(!0)};return t.addEventListener(`visibilitychange`,d),e.addEventListener(`pageshow`,f),e.addEventListener(`focus`,p),e.addEventListener(`online`,m),()=>{u(),t.removeEventListener(`visibilitychange`,d),e.removeEventListener(`pageshow`,f),e.removeEventListener(`focus`,p),e.removeEventListener(`online`,m)}}function Se(e,t){if(!e)return;let n=e.querySelector(`shadow-claw-chat`);n&&typeof n.setActivityLogCollapsedOverride==`function`&&n.setActivityLogCollapsedOverride(t)}function Ce(e,t){if(!e)return;let n=e.querySelector(`.activity-log-toggle`);if(!(n instanceof HTMLButtonElement))return;let r=typeof globalThis.matchMedia==`function`&&!globalThis.matchMedia(`(min-width: 56rem) and (min-height: 401px)`).matches,i=typeof t==`boolean`?t:r;n.setAttribute(`aria-label`,i?`Show activity log`:`Hide activity log`),n.setAttribute(`title`,i?`Show activity log`:`Hide activity log`),n.setAttribute(`aria-pressed`,String(i))}function we(e){let t=typeof globalThis.matchMedia==`function`&&!globalThis.matchMedia(`(min-width: 56rem) and (min-height: 401px)`).matches;e.activityLogCollapsedOverride=!(typeof e.activityLogCollapsedOverride==`boolean`?e.activityLogCollapsedOverride:t),Se(e.shadowRoot,e.activityLogCollapsedOverride),Ce(e.shadowRoot,e.activityLogCollapsedOverride)}function Te(e){e.headerMainCollapsedOverride=!(typeof e.headerMainCollapsedOverride==`boolean`?e.headerMainCollapsedOverride:R(e.shadowRoot)?.isMainCollapsed?.()??!1),I(e.shadowRoot,e.headerMainCollapsedOverride),z(e.shadowRoot,e.headerMainCollapsedOverride)}function Ee(e,t){t.terminalVisible=!t.terminalVisible,B(e,t.currentPage,t.terminalVisible,t.vmStatus),F(e,t.currentPage,t.terminalElement,t.terminalVisible,t.terminalPlacementFrame)}function De(e,t){e===w.Dark?(t.add(`dark-mode`),t.remove(`light-mode`)):(t.add(`light-mode`),t.remove(`dark-mode`))}function Oe(e,t){if(!e)return;let n=e.querySelector(`.sun-icon`),r=e.querySelector(`.moon-icon`);n&&r&&(t===w.Dark?(n.style.display=`block`,n.removeAttribute(`hidden`),n.classList.remove(`hidden`),r.style.display=`none`,r.setAttribute(`hidden`,`hidden`),r.classList.add(`hidden`)):(n.style.display=`none`,n.setAttribute(`hidden`,`hidden`),n.classList.add(`hidden`),r.style.display=`block`,r.removeAttribute(`hidden`),r.classList.remove(`hidden`)))}function ke(e,t,n,r,i,a,o,s,c){if(!n||!e||!t)return;n.querySelectorAll(`.nav-item[data-page]`).forEach(e=>{let r=e;r.addEventListener(`click`,()=>{let e=r.dataset.page||M(a);n.querySelectorAll(`.nav-item`).forEach(e=>e.classList.remove(`active`)),r.classList.add(`active`),setTimeout(()=>{t.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:e},bubbles:!0,composed:!0}))},0)})});let l=n.getElementById(`menu-button`),u=n.querySelector(`.sidebar`);if(l&&u){l.addEventListener(`click`,()=>{u.classList.toggle(`open`)}),n.querySelectorAll(`.nav-item, .settings-btn`).forEach(t=>{t.addEventListener(`click`,()=>{e.innerWidth<896&&u.classList.remove(`open`)})}),t.addEventListener(`click`,t=>{let n=t.composedPath();e.innerWidth<896&&u.classList.contains(`open`)&&!n.includes(u)&&!n.includes(l)&&u.classList.remove(`open`)});let a=e.matchMedia?e.matchMedia(`(min-width: 56rem)`):{matches:!1,addEventListener:()=>{},removeEventListener:()=>{}},o=e=>{e.matches&&u.classList.remove(`open`)};o(a),a.addEventListener(`change`,o),ge(n,r,u,i)}let d=n.querySelector(`[data-action="show-settings"]`);d&&d.addEventListener(`click`,()=>{t.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:`settings`},bubbles:!0,composed:!0}))}),n.querySelector(`.header-main-toggle`)?.addEventListener(`click`,()=>{Te(r)}),n.querySelector(`.activity-log-toggle`)?.addEventListener(`click`,()=>{we(r)}),n.addEventListener(`navigate`,e=>{let n=e.detail?.page;n&&t.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:n},bubbles:!0,composed:!0}))}),n.addEventListener(`sidebar-pages-visibility-change`,e=>{be(n,r,a,i,!!e.detail?.hidden)}),n.addEventListener(`sidebar-chat-visibility-change`,e=>{Z(n,r,a,i,`chat`,!!e.detail?.hidden)}),n.addEventListener(`sidebar-tasks-visibility-change`,e=>{Z(n,r,a,i,`tasks`,!!e.detail?.hidden)}),n.addEventListener(`sidebar-files-visibility-change`,e=>{Z(n,r,a,i,`files`,!!e.detail?.hidden)}),n.addEventListener(`chat-split-view-change`,e=>{r.chatSplitViewEnabled=!!e.detail?.enabled,U(n,r,i,a,r.currentPage,!1)}),n.addEventListener(`navigate-back`,()=>t.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:`settings`},bubbles:!0,composed:!0})));let f=n.querySelector(`.theme-mode-toggle`);f&&f.addEventListener(`click`,()=>{let{resolved:e}=s.getTheme(),t=e===w.Dark?w.Light:w.Dark;s.setTheme(t)}),n.querySelector(`.webvm-toggle`)?.addEventListener(`click`,()=>Ee(n,r)),n.addEventListener(`shadow-claw-terminal-slot-ready`,()=>{F(n,r.currentPage,r.terminalElement,r.terminalVisible,r.terminalPlacementFrame),I(n,r.headerMainCollapsedOverride),z(n,r.headerMainCollapsedOverride)}),e.addEventListener(`resize`,()=>{r.headerMainCollapsedOverride===null&&z(n,r.headerMainCollapsedOverride)}),t.addEventListener(`shadow-claw-navigate`,r.shadowClawNav),Q()?(e.navigation.addEventListener(`navigate`,r.handleNavigationApiNavigate),r.navigationListenerAttached=!0):(r.popstateListener=()=>{G(n,r,i,o,a,new URL(e.location.href))},e.addEventListener(`popstate`,r.popstateListener),t.addEventListener(`click`,r.fallbackClickListener),r.fallbackClickListenerAttached=!0),e.addEventListener(`shadow-claw-theme-change`,e=>{let t=e.detail.theme;Oe(n,t),De(t,r.classList)}),e.addEventListener(`shadow-claw-peer-error`,e=>{let r=e.detail,i=r.remotePeerId,a=r.error;Y(t,n,{mode:`info`,title:`Peer Connection Error`,message:i?`Failed to communicate with peer ${i}: ${a}`:`PeerJS error: ${a}`,confirmLabel:`Dismiss`,autoCloseSeconds:30})});let p=s.resolved;Oe(n,p),De(p,r.classList),r.appLifecycleCleanup&&=(r.appLifecycleCleanup(),null),r.orchestrator&&(r.appLifecycleCleanup=xe(e,t,r.orchestrator))}function Ae(e){if(e===void 0)return;e.documentElement.classList.remove(ie,`sc-prerender-override`);let t=e.querySelector(`shadow-claw`);t?.removeAttribute(oe),t?.removeAttribute(ae)}function je(e,n){if(!e)return;let r=n;if(r.navigationType===`reload`)return;let i=r?.destination?.url;if(typeof i!=`string`)return;let a=new URL(i);if(a.origin===window.location.origin&&t(a.pathname))return{parsedUrl:a,navigateEvent:r}}function Me(e,n){if(n.defaultPrevented||n.button!==0||n.metaKey||n.ctrlKey||n.shiftKey||n.altKey)return null;let r=n.composedPath(),i=null;for(let e of r)if(e instanceof HTMLAnchorElement){i=e;break}if(!i)return null;let a=i.getAttribute(`href`)||``;return!a||a.startsWith(`javascript:`)||a.startsWith(`mailto:`)||a.startsWith(`tel:`)||i.target&&i.target!==`_self`||i.origin!==e.origin||!t(i.pathname)||i.pathname===e.pathname&&i.search===e.search&&i.hash!==e.hash?null:(n.preventDefault(),`${i.pathname}${i.search}${i.hash}`)}async function Ne(e,t,n){if(!t)return null;let r=t.querySelector(`.app-prompt-dialog`),i=t.querySelector(`.app-prompt-dialog__message`),a=t.querySelector(`.app-prompt-dialog__input-area`);if(!r||!i||!a)return null;if(r.open&&r.close(),i.textContent=n.question,a.replaceChildren(),Array.isArray(n.options)&&n.options.length>0){let t=e.createElement(`select`);t.className=`app-prompt-dialog__input`,t.name=`prompt-response`;for(let r of n.options){let n=e.createElement(`option`);n.value=r,n.textContent=r,t.appendChild(n)}a.appendChild(t)}else{let t=e.createElement(`input`);t.type=`text`,t.className=`app-prompt-dialog__input`,t.name=`prompt-response`,t.placeholder=`Enter your response...`,t.autocomplete=`off`,a.appendChild(t),setTimeout(()=>t.focus(),50)}return r.returnValue=``,await new Promise(e=>{let t=()=>{if(r.removeEventListener(`close`,t),r.returnValue===`submit`){let t=a.querySelector(`[name='prompt-response']`);e(t?t.value:null)}else e(null)};r.addEventListener(`close`,t),r.showModal()})}async function Pe(e,t,n,r){let i=await Ne(e,t,r);ee(n.orchestrator,r.id,i)}async function Fe(e,t,n,r){let i=r.path,a=r.groupId||t.activeGroupId;if(!(!i||!e))for(let t=0;t<=3;t++)try{await n.openFile(e,i,a);return}catch(e){let n=e instanceof DOMException&&e.name===`NotFoundError`;if(t<3&&n){await new Promise(e=>setTimeout(e,150*(t+1)));continue}b(`Failed to open file from tool: ${e instanceof Error?e.message:String(e)}`,5e3);return}}async function Ie(e,t,n){n?.providerId===`llamafile`?await Y(e,t,f(n.reason)):n?.providerId===`transformers_js_local`?await Y(e,t,m(n.reason)):n?.providerId===`prompt_api`?await Y(e,t,ce(n.reason)):n?.providerId&&n.helpType&&await Y(e,t,te(n.providerId,n.helpType,n.reason))}async function Le(e,t,n,r,i,a){if(!(!r||!a?.roomId||!a?.hostPeerId)&&await Y(e,t,{mode:`confirm`,title:`Room invitation`,message:`${a.fromAlias||a.fromPeerId} invited you to join "${a.roomName}".`,confirmLabel:`Join`,cancelLabel:`Decline`}))try{c(n.orchestrator,a.roomId,a.hostPeerId,a.roomName),await i.switchConversation(r,`room:${a.roomId}`),U(t,n,r,i,`chat`),y(`Joined room "${a.roomName}"`)}catch(e){b(`Failed to join room: ${e instanceof Error?e.message:String(e)}`,6e3)}}function Re(e,t,n){let r=n.useTrailingSlash&&!t.includes(`#`)?t.endsWith(`/`)?t:t+`/`:t;n.replace?e.replaceState({},``,r):e.pushState({},``,r)}async function ze(e,t,i,a,o,s,c={replace:!1}){let l=n(r(s));if(Q()){window.navigation.navigate(l,{history:c.replace?`replace`:`push`});return}l!==window.location.pathname&&Re(globalThis.history,l,{...c,useTrailingSlash:!1}),await W(e,t,i,a,o,s)}function Be(e){let t=String(e||`chat`).toLowerCase();return t===`chat`||t===`files`||t===`tasks`||t===`pages`||t===`settings`||t===`tools`||t===`channels`?t:`chat`}async function Ve(e,t,n,r,i,a){let o=a.detail;o&&await ze(e,t,n,r,i,{page:Be(String(o.page||`chat`)),groupId:o.groupId,path:o.path,anchor:o.anchor})}async function He(e,t,n,r){await ye(e,t,n,r)}async function Ue(e,t,n,r){if(!n)return;let i=new URL(window.location?.href||`http://localhost/`),a=i.searchParams.get(`peer`);if(!a)return;let o=a.trim();if(o)try{let a=g(r),s=a.myPeerId;s||=v().toLowerCase();let c=new Set(a.trustedPeerIds);c.add(o),await S(r,n,s,Array.from(c),a.serverHost,a.serverPort,a.serverPath,a.serverSecure),a.enabled||await _(r,n,`peerjs`,!0);let l=await h.ensurePeerConversation(n,o);await h.switchConversation(n,l),U(e,t,n,h,`chat`),i.searchParams.delete(`peer`);let u=`${i.pathname}${i.search}${i.hash}`;window.history.replaceState({},``,u||`/`),y(`Connected to Peer: ${o.substring(0,8)}`)}catch(e){b(`Failed to process peer parameter: ${e instanceof Error?e.message:String(e)}`,6e3)}}const We=`pendingShares`;function Ge(e){return{id:typeof e?.id==`string`?e.id:``,createdAt:typeof e?.createdAt==`number`?e.createdAt:0,title:typeof e?.title==`string`?e.title:``,text:typeof e?.text==`string`?e.text:``,url:typeof e?.url==`string`?e.url:``,fileName:typeof e?.fileName==`string`?e.fileName:``,fileType:typeof e?.fileType==`string`?e.fileType:``,fileBytes:e?.fileBytes instanceof ArrayBuffer?e.fileBytes:null}}async function Ke(e){return!e||typeof e.transaction!=`function`?[]:new Promise((t,n)=>{let r;try{r=e.transaction(We,`readwrite`)}catch(e){if(e instanceof DOMException&&e.name===`NotFoundError`){t([]);return}n(e);return}let i=r.objectStore(We),a=i.getAll();a.onerror=()=>{n(a.error||Error(`Failed to read pending shares`))},a.onsuccess=()=>{let e=Array.isArray(a.result)?a.result.map(Ge).filter(e=>typeof e.id==`string`&&e.id.length>0).sort((e,t)=>e.createdAt-t.createdAt):[],r=i.clear();r.onerror=()=>{n(r.error||Error(`Failed to clear pending shares`))},r.onsuccess=()=>{t(e)}},r.onabort=()=>{n(r.error||Error(`Pending share transaction aborted`))}})}function qe(e){let t=[`# Shared Content`,``];return e.title&&t.push(`Title: ${e.title}`),e.url&&t.push(`URL: ${e.url}`),e.text&&t.push(``,e.text),t.join(`
|
|
2
2
|
`).trim()+`
|
|
3
3
|
`}async function Je(e,t){let n=new Date,r=`Shared Files ${`${String(n.getFullYear())}-${String(n.getMonth()+1).padStart(2,`0`)}-${String(n.getDate()).padStart(2,`0`)}`}`,i=t.groups.find(e=>e.name===r);return i?(await t.switchConversation(e,i.groupId),i.groupId):(await t.createConversation(e,r)).groupId}function Ye(e,t){return(e.replace(/\\/g,`/`).split(`/`).filter(Boolean).pop()||``).replace(/\s+/g,`-`).replace(/[^A-Za-z0-9._-]/g,`-`).replace(/-+/g,`-`).replace(/^-+|-+$/g,``)||`${t}.txt`}async function Xe(e,t,n,r,i,a,o){if(!a)return;let s=await Ke(a);if(s.length!==0)try{let c=await Je(a,r),u=[];for(let e=0;e<s.length;e++){let t=s[e],n=`shared-${Date.now()}-${e+1}`;if(t.fileBytes instanceof ArrayBuffer){let e=Ye(t.fileName||(t.fileType===`application/pdf`?`${n}.pdf`:`${n}.bin`),n);await l(a,c,e,new Uint8Array(t.fileBytes)),u.push(e);continue}let r=Ye(t.fileName||`${n}.md`,n);await ne(a,c,r,qe(t)),u.push(r)}await r.loadFiles(a),U(t,n,a,r,`files`),u.length>0&&await i.openFile(a,u[0],c),y(`Imported ${u.length} shared item${u.length===1?``:`s`}.`);let d=o;if(d.searchParams.has(`share-target`)){d.searchParams.delete(`share-target`);let t=`${d.pathname}${d.search}${d.hash}`;e.history.replaceState({},``,t||`/`)}}catch(e){b(`Failed to import shared content: ${e instanceof Error?e.message:String(e)}`,6e3)}}async function Ze(e,t,n,r,i,a){if(!r)return;let o=new URL(window.location?.href||`http://localhost/`),s=(o.searchParams.get(`room`)||``).trim(),l=(o.searchParams.get(`host`)||``).trim(),u=(o.searchParams.get(`name`)||``).trim()||`Room`;if(!(!s||!l))try{let d=g(i),f=d.myPeerId;f||=v().toLowerCase();let p=new Set(d.trustedPeerIds);p.add(l),await S(i,r,f,Array.from(p),d.serverHost,d.serverPort,d.serverPath,d.serverSecure),d.enabled||await _(i,r,`peerjs`,!0),c(i,s,l,u),await a.switchConversation(r,`room:${s}`),U(t,n,r,a,`chat`),o.searchParams.delete(`room`),o.searchParams.delete(`host`),o.searchParams.delete(`name`);let m=`${o.pathname}${o.search}${o.hash}`;e.history.replaceState({},``,m||`/`),y(`Joined room "${u}"`)}catch(e){b(`Failed to join room: ${e instanceof Error?e.message:String(e)}`,6e3)}}function Qe(e,t,n,r){e&&(x(()=>{let t=C.file;t&&(P(`file-viewer`).then(()=>{if(e&&!e.querySelector(`shadow-claw-file-viewer`)){let t=e.querySelector(`.main-content`);if(t){let e=document.createElement(`shadow-claw-file-viewer`);e.id=`file-viewer`,t.appendChild(e)}}}).catch(console.error),t.kind===`pdf`&&P(`pdf-viewer`).catch(console.error))}),x(()=>{let e=r.state;e===`idle`&&(t.previousOrchestratorState===`thinking`||t.previousOrchestratorState===`responding`)&&y(`Response complete`,2500),t.previousOrchestratorState=e}),x(()=>{let i=r.activePage;i!==t.currentPage&&U(e,t,n,r,i,!1)}),x(()=>{r.activityLog,L(e,t.currentPage,r.activityLog.length)}))}const $e=new CSSStyleSheet;$e.replaceSync(`*,
|
|
4
4
|
*::before,
|
|
@@ -1121,4 +1121,4 @@ shadow-claw-conversations {
|
|
|
1121
1121
|
</shadow-claw-dialog>
|
|
1122
1122
|
</div>
|
|
1123
1123
|
</template>
|
|
1124
|
-
`,`text/html`),et=$.querySelector(`template`);let tt=[];tt=et?Array.from(et.content.children):Array.from($.head.children).concat(Array.from($.body.children));var nt=tt;const rt=`shadow-claw`;var it=class extends se{static styles=$e;static template=nt;activityLogCollapsedOverride=null;appLifecycleCleanup=null;chatSidebarHidden=!1;chatSplitViewEnabled=!1;currentPage=h.sidebarDefaultPage;db=null;fallbackClickListenerAttached=!1;filesSidebarHidden=!1;headerMainCollapsedOverride=null;navigationListenerAttached=!1;orchestrator;pagesSidebarHidden=!1;popstateListener=null;previousOrchestratorState=`idle`;tasksSidebarHidden=!1;terminalElement=null;terminalPlacementFrame=null;terminalVisible=!1;vmStatus={ready:!1,booting:!1,bootAttempted:!1,error:null};vmStatusCleanup=null;constructor(){super()}async connectedCallback(){if(!this.shadowRoot)throw Error(`shadowRoot not found`);try{let{Orchestrator:e}=await import(`./orchestrator-
|
|
1124
|
+
`,`text/html`),et=$.querySelector(`template`);let tt=[];tt=et?Array.from(et.content.children):Array.from($.head.children).concat(Array.from($.body.children));var nt=tt;const rt=`shadow-claw`;var it=class extends se{static styles=$e;static template=nt;activityLogCollapsedOverride=null;appLifecycleCleanup=null;chatSidebarHidden=!1;chatSplitViewEnabled=!1;currentPage=h.sidebarDefaultPage;db=null;fallbackClickListenerAttached=!1;filesSidebarHidden=!1;headerMainCollapsedOverride=null;navigationListenerAttached=!1;orchestrator;pagesSidebarHidden=!1;popstateListener=null;previousOrchestratorState=`idle`;tasksSidebarHidden=!1;terminalElement=null;terminalPlacementFrame=null;terminalVisible=!1;vmStatus={ready:!1,booting:!1,bootAttempted:!1,error:null};vmStatusCleanup=null;constructor(){super()}async connectedCallback(){if(!this.shadowRoot)throw Error(`shadowRoot not found`);try{let{Orchestrator:e}=await import(`./orchestrator-Dc_Q73La.js`);Promise.all([import(`./shadow-claw-conversations-DcwG05-H.js`),import(`./shadow-claw-dialog-BrOwAOdk.js`),import(`./shadow-claw-toast-C_zXWKX9.js`)]).catch(console.error),await new Promise(e=>{`requestIdleCallback`in window?window.requestIdleCallback(()=>e(null)):setTimeout(e,0)}),this.orchestrator||=new e,this.db=await this.orchestrator.init(),await h.init(this.db,this.orchestrator),a(this.db),await this.render();let t=h.activePage===`pages`&&this.pagesSidebarHidden||h.activePage===`chat`&&this.chatSidebarHidden||h.activePage===`tasks`&&this.tasksSidebarHidden||h.activePage===`files`&&this.filesSidebarHidden;h.hadPersistedActivePage&&!t?U(this.shadowRoot,this,this.db,h,h.activePage,!1):t?U(this.shadowRoot,this,this.db,h,M(h,this),!1):U(this.shadowRoot,this,this.db,h,h.activePage,!1),await G(this.shadowRoot,this,this.db,C,h,new URL(window.location.href)),await Ue(this.shadowRoot,this,this.db,this.orchestrator),await Ze(window,this.shadowRoot,this,this.db,this.orchestrator,h),await Xe(window,this.shadowRoot,this,h,C,this.db,new URL(window.location.href)),console.log(`ShadowClaw UI initialized`),typeof customElements<`u`&&await customElements.whenDefined(`shadow-claw-${this.currentPage}`);let{isMemoryStorageFallbackActive:n}=await import(`./memoryStorage-Bew1X8Uy.js`).then(e=>e.n);if(n()){let{showWarning:e}=await import(`./toast-BXgUfbyh.js`).then(e=>e.c);e(`Private Browsing / Limited Storage: Operating in temporary in-memory mode. Files and changes will not persist across page reloads.`,7e3)}h.setReady()}finally{Ae(document)}}disconnectedCallback(){if(super.disconnectedCallback(),this.vmStatusCleanup&&=(this.vmStatusCleanup(),null),this.appLifecycleCleanup&&=(this.appLifecycleCleanup(),null),this.terminalPlacementFrame!==null&&(cancelAnimationFrame(this.terminalPlacementFrame),this.terminalPlacementFrame=null),document.removeEventListener(`shadow-claw-navigate`,this.shadowClawNav),this.popstateListener&&=(window.removeEventListener(`popstate`,this.popstateListener),null),this.fallbackClickListenerAttached&&=(document.removeEventListener(`click`,this.fallbackClickListener),!1),this.navigationListenerAttached){let e=window.navigation;e&&typeof e.removeEventListener==`function`&&e.removeEventListener(`navigate`,this.handleNavigationApiNavigate),this.navigationListenerAttached=!1}}addCleanup(e){super.addCleanup(e)}fallbackClickListener=e=>{if(typeof window>`u`||!window.location)return;let t=Me(window.location,e);t&&(Re(globalThis.history,t,{replace:!1,useTrailingSlash:!1}),G(this.shadowRoot,this,this.db,C,h,new URL(window.location.href)))};handleNavigationApiNavigate=e=>{let{parsedUrl:t,navigateEvent:n}=je(this.db,e)??{};!t||!n||typeof n.intercept==`function`&&n.intercept({handler:async()=>{let{parseRouteFromUrlAsync:e}=await import(`./app-routes-BMQ4HFaM.js`).then(e=>e.t),n=await e(t,h.activeGroupId);n&&await W(this.shadowRoot,this,this.db,C,h,n)}})};shadowClawNav=e=>{!this.shadowRoot||!this.db||Ve(this.shadowRoot,this,this.db,C,h,e)};async render(){if(ke(window,document,this.shadowRoot,this,this.db,h,C,A,new URL(window.location.href)),await He(this.shadowRoot,this,h,this.db),this.db)try{let{getConfig:e}=await import(`./getConfig-4saf0Tkq.js`).then(e=>e.n),{parseConfigBoolean:t}=await import(`./parseConfigBoolean-ByjZr9OM.js`).then(e=>e.n),{CONFIG_KEYS:n}=await import(`./config-D4lVqMs8.js`).then(e=>e.k),r=await e(this.db,n.CHAT_SPLIT_VIEW_ENABLED);this.chatSplitViewEnabled=t(r)}catch{this.chatSplitViewEnabled=!1}let e=this.shadowRoot?.querySelector(`.chat-split-resize-handle`);if(this.shadowRoot&&e instanceof HTMLElement){let{initChatSplitResize:t}=await import(`./initChatSplitResize-osJXM2gu.js`);await t(this.shadowRoot,this,e,this.db)}this.terminalElement=document.createElement(`shadow-claw-terminal`),this.terminalElement&&(this.terminalElement.orchestrator=this.orchestrator),B(this.shadowRoot,this.currentPage,this.terminalVisible,this.vmStatus),F(this.shadowRoot,this.currentPage,this.terminalElement,this.terminalVisible,this.terminalPlacementFrame),I(this.shadowRoot,this.headerMainCollapsedOverride),z(this.shadowRoot,this.headerMainCollapsedOverride),L(this.shadowRoot,this.currentPage,h.activityLog.length);let t=e=>{this.vmStatus=e,e.error&&this.terminalVisible&&(this.terminalVisible=!1,this.terminalElement&&(this.terminalElement.hidden=!0),F(this.shadowRoot,this.currentPage,this.terminalElement,this.terminalVisible,this.terminalPlacementFrame)),B(this.shadowRoot,this.currentPage,this.terminalVisible,this.vmStatus)};this.vmStatus=this.orchestrator.vmStatus||this.vmStatus,B(this.shadowRoot,this.currentPage,this.terminalVisible,this.vmStatus),this.orchestrator.events.on?.(`vm-status`,t),this.vmStatusCleanup=()=>{this.orchestrator.events.off?.(`vm-status`,t)},this.orchestrator.events.on(`open-file`,e=>Fe(this.db,h,C,e)),this.orchestrator.events.on(`provider-help`,e=>Ie(document,this.shadowRoot,e)),this.orchestrator.events.on(`room-invite`,e=>Le(document,this.shadowRoot,this,this.db,h,e)),this.orchestrator.events.on(`ask-user`,e=>Pe(document,this.shadowRoot,this,e)),Qe(this.shadowRoot,this,this.db,h)}async requestDialog(e){return Y(document,this.shadowRoot,e)}};customElements.get(rt)||customElements.define(rt,it);
|