shadow-claw 1.24.0 → 1.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/bin/cli.mjs +111 -2
- package/bin/commands/webrtc-listen.mjs +21 -1
- package/bin/utils/control-client.mjs +44 -30
- package/bin/utils/control-client.test.mjs +10 -0
- package/bin/utils/webrtc-control-client.mjs +23 -4
- package/dist/public/AGENTS.md +8 -1
- package/dist/public/README.md +2 -1
- package/dist/public/agent.worker.js +49 -49
- package/dist/public/backup-controller-CvzDOq4T.js +1 -0
- package/dist/public/{configurePeerJs-CxpZeDJJ.js → configurePeerJs-UfQ6HUlv.js} +1 -1
- package/dist/public/docs/README.md +1 -1
- package/dist/public/docs/example/article/index.html +1 -1
- package/dist/public/docs/guides/server-development-configuration.md +28 -0
- package/dist/public/docs/publishing/index.html +1 -1
- package/dist/public/docs/skill-creator/index.html +1 -1
- package/dist/public/docs/subsystems/cli.md +25 -19
- package/dist/public/docs/subsystems/control-plane.md +11 -0
- package/dist/public/{downloadGroupFile-By0GR6eV.js → downloadGroupFile-9niHBj9n.js} +1 -1
- package/dist/public/{e2e-bridge-IGWsRl4i.js → e2e-bridge-D28tOggc.js} +1 -1
- package/dist/public/{file-viewer-D0eflgt6.js → file-viewer-BVg3B_JH.js} +1 -1
- package/dist/public/index.html +1 -1
- package/dist/public/index.js +1 -1
- package/dist/public/initControlPlane-D5kHKcB5.js +1 -0
- package/dist/public/llms.txt +1 -1
- package/dist/public/main/index.html +1 -1
- package/dist/public/main/memory/index.html +1 -1
- package/dist/public/{markdown-BnpKxSxl.js → markdown-SiFq0PTy.js} +1 -1
- package/dist/public/{orchestrator-nJj59RqD.js → orchestrator-CnwkoBpe.js} +1 -1
- package/dist/public/{orchestrator-3h9xxHUm.js → orchestrator-tHWrqi_F.js} +5 -5
- package/dist/public/{peerjs-BP4laMXj.js → peerjs-CuSJUH-r.js} +1 -1
- package/dist/public/push-client-D0lkwrK0.js +1 -0
- package/dist/public/service-worker/fetch-proxy.js +1 -1
- package/dist/public/service-worker.js +1 -1
- package/dist/public/{shadow-claw-CbwETBWf.js → shadow-claw-CUbhMmcB.js} +2 -2
- package/dist/public/{shadow-claw-channels-BDWG5Qa3.js → shadow-claw-channels-mY-JMvib.js} +1 -1
- package/dist/public/{shadow-claw-chat-Crv0DTCY.js → shadow-claw-chat-BN85a1xk.js} +1 -1
- package/dist/public/{shadow-claw-control-plane-CX1IGbh9.js → shadow-claw-control-plane-C0lSxLpW.js} +2 -2
- package/dist/public/{shadow-claw-conversations-_9qAaRXk.js → shadow-claw-conversations-0Q-VC_7N.js} +1 -1
- package/dist/public/{shadow-claw-file-viewer-Blf6yGVD.js → shadow-claw-file-viewer-AZfG4D-u.js} +1 -1
- package/dist/public/{shadow-claw-files-CYySBDCl.js → shadow-claw-files-Bx4v0Ggp.js} +1 -1
- package/dist/public/{shadow-claw-git-v8S0JjuR.js → shadow-claw-git-DD7iQRxq.js} +2 -2
- package/dist/public/{shadow-claw-llm-GWgoVfhI.js → shadow-claw-llm-CfeDBZKB.js} +1 -1
- package/dist/public/{shadow-claw-networking-qHbP95z9.js → shadow-claw-networking-e0EarDVs.js} +1 -1
- package/dist/public/{shadow-claw-notifications-YyHOK2Fr.js → shadow-claw-notifications-BkxuDEQI.js} +3 -3
- package/dist/public/{shadow-claw-pages-DFZHhzFZ.js → shadow-claw-pages-BWSE91I1.js} +1 -1
- package/dist/public/{shadow-claw-settings-DhxrKIfA.js → shadow-claw-settings-BZWrAoQA.js} +2 -2
- package/dist/public/{shadow-claw-storage-BFynbP0j.js → shadow-claw-storage-Crs6LY15.js} +1 -1
- package/dist/public/{shadow-claw-task-server-3BIeb5oZ.js → shadow-claw-task-server-CKm_Ennl.js} +1 -1
- package/dist/public/{shadow-claw-tasks-Caxc9atL.js → shadow-claw-tasks-Czx6Ucf5.js} +1 -1
- package/dist/public/{shadow-claw-terminal-Beb5qF-U.js → shadow-claw-terminal-Dmtr9KY1.js} +1 -1
- package/dist/public/{shadow-claw-tools-BfJx3A9W.js → shadow-claw-tools-t3Qq4TDO.js} +1 -1
- package/dist/public/{shadow-claw-webvm-BCS8ykeP.js → shadow-claw-webvm-CIuSywD_.js} +1 -1
- package/dist/public/{syncWebMcpRegistration-B_M2fCjH.js → syncWebMcpRegistration-DzC80wVG.js} +1 -1
- package/dist/server.js +203 -203
- package/package.json +1 -1
- package/src/components/settings/shadow-claw-notifications/shadow-claw-notifications.test.ts +3 -0
- package/src/components/settings/shadow-claw-notifications/shadow-claw-notifications.ts +43 -9
- package/src/core/backup-controller.ts +33 -4
- package/src/core/control-plane-client.test.ts +9 -2
- package/src/core/control-plane-client.ts +18 -2
- package/src/core/orchestrator/utils/operations/task.ts +46 -15
- package/src/core/utils/initControlPlane.ts +2 -0
- package/src/server/app.ts +2 -0
- package/src/server/config.test.ts +49 -0
- package/src/server/config.ts +47 -0
- package/src/server/control-plane.test.ts +36 -0
- package/src/server/control-plane.ts +41 -14
- package/src/server/middleware/pna.test.ts +15 -3
- package/src/server/middleware/pna.ts +6 -2
- package/src/server/peer.ts +6 -2
- package/src/server/routes/backup.test.ts +14 -0
- package/src/server/routes/backup.ts +44 -15
- package/src/server/server.test.ts +118 -0
- package/src/server/server.ts +22 -5
- package/src/server/tls.test.ts +266 -0
- package/src/server/tls.ts +178 -0
- package/src/service-worker/fetch-proxy-rules.test.ts +41 -0
- package/src/service-worker/fetch-proxy-rules.ts +15 -8
- package/src/service-worker/fetch-proxy.ts +18 -2
- package/src/subsystems/notifications/push-client.test.ts +5 -1
- package/src/subsystems/notifications/push-client.ts +50 -12
- package/dist/public/backup-controller-C_s9in2t.js +0 -1
- package/dist/public/initControlPlane-C9jpnWev.js +0 -1
- package/dist/public/push-client-CrjEXK3U.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./config-CrHchneq.js";import{n as e}from"./txPromise-EBECky1b.js";import{n as t}from"./toast-60iDlgiH.js";import{Zt as n,bn as r,cn as i,nn as a}from"./orchestrator-3h9xxHUm.js";import{t as o}from"./ulid-BY7rQVLN.js";const s={apng:`image/apng`,avif:`image/avif`,bmp:`image/bmp`,css:`text/css`,gif:`image/gif`,htm:`text/html`,html:`text/html`,jpeg:`image/jpeg`,jpg:`image/jpeg`,js:`text/javascript`,json:`application/json`,markdown:`text/markdown`,md:`text/markdown`,mp3:`audio/mpeg`,mp4:`video/mp4`,oga:`audio/ogg`,ogg:`audio/ogg`,ogv:`video/ogg`,pdf:`application/pdf`,png:`image/png`,svg:`image/svg+xml`,txt:`text/plain`,wav:`audio/wav`,webm:`video/webm`,webp:`image/webp`};function c(e){return e.trim().replace(/[\u0000-\u001f\u007f]+/g,``).replace(/[\\/:*?"<>|]+/g,`-`).replace(/\s+/g,` `).replace(/^\.+/,``).trim()||`attachment`}function l(e,t=``){if(t)return t;let n=e.toLowerCase().split(`.`).pop()||``;return s[n]||`application/octet-stream`}function u(e){return e.previewDisposition===`inline`||l(e.fileName,e.mimeType||``)===`image/png`}function d(e,t=``,n=Date.now()){let r=c(e),i=t.trim().replace(/[^a-zA-Z0-9._-]+/g,`-`).replace(/^-+|-+$/g,``);return`attachments/${n}-${i?`${i}-`:``}${r}`}async function f(e,t,n=[]){let r=[];for(let a of n){let n=c(a.fileName||``),o=a.path||d(n,a.id),s=a.source,u=l(n,a.mimeType||``),f=a.size;if(s){let r=await p(s);u=l(n,a.mimeType||r.type),f=typeof f==`number`?f:r.size,await i(e,t,o,r)}r.push(m({...a,fileName:n,mimeType:u,size:f,path:o,previewDisposition:a.previewDisposition||(u===`image/png`?`inline`:`file`)}))}return r}async function p(e){if(e.kind===`local-file`)return e.file;if(e.kind===`inline-text`)return new Blob([e.text],{type:e.mimeType||`text/plain`});let t=await fetch(e.url,{headers:e.headers});if(!t.ok)throw Error(`Attachment download failed: HTTP ${t.status} ${t.statusText}`);return await t.blob()}function m(e){let{source:t,...n}=e;return n}const h=new Set([`TASK_STATE_COMPLETED`,`TASK_STATE_FAILED`,`TASK_STATE_CANCELED`,`TASK_STATE_REJECTED`]),g=new Set([`TASK_STATE_INPUT_REQUIRED`,`TASK_STATE_AUTH_REQUIRED`]),_={SEND_MESSAGE:`SendMessage`,SEND_STREAMING_MESSAGE:`SendStreamingMessage`,GET_TASK:`GetTask`,CANCEL_TASK:`CancelTask`,GET_AGENT_CARD:`GetAgentCard`},v={EVENT:`agui/event`},y={STATUS_UPDATE:`tasks/statusUpdate`,ARTIFACT_UPDATE:`tasks/artifactUpdate`},b={JOIN:`room/join`,ROSTER:`room/roster`,LEAVE:`room/leave`,MESSAGE:`room/message`,INVITE:`room/invite`,RELAY:`room/relay`,A2UI:`room/a2ui`,A2UI_ACTION:`room/a2ui-action`},x={TASK_NOT_FOUND:-32001,TASK_NOT_CANCELABLE:-32002,PUSH_NOTIFICATION_NOT_SUPPORTED:-32003,UNSUPPORTED_OPERATION:-32004,CONTENT_TYPE_NOT_SUPPORTED:-32005,INVALID_AGENT_RESPONSE:-32006,PARSE_ERROR:-32700,INVALID_REQUEST:-32600,METHOD_NOT_FOUND:-32601,INVALID_PARAMS:-32602,INTERNAL_ERROR:-32603};function S(e){return typeof e==`object`&&!!e&&e.jsonrpc===`2.0`&&typeof e.id==`string`&&typeof e.method==`string`}function C(e){return typeof e==`object`&&!!e&&e.jsonrpc===`2.0`&&typeof e.id==`string`&&!(`method`in e)}function w(e){let t={url:`webrtc://${e.peerId}`,protocolBinding:`https://xt-ml.github.io/shadow-claw/bindings/webrtc-datachannel/v1`,protocolVersion:`1.0`},n={streaming:e.streaming??!0,pushNotifications:!1};return{name:e.name,description:e.description??`AI assistant agent (${e.name})`,version:e.version??`1.0.0`,supportedInterfaces:[t],capabilities:n,defaultInputModes:[`text/plain`,`application/json`],defaultOutputModes:[`text/plain`,`application/json`],skills:e.skills??[],iconUrl:e.iconUrl}}function T(){return{jsonrpc:`2.0`,id:o(),method:_.GET_AGENT_CARD}}function E(e,t){return{jsonrpc:`2.0`,id:e,result:t}}function D(e){if(e.error)return console.warn(`GetAgentCard returned error:`,e.error),null;let t=e.result;return!t||typeof t!=`object`||typeof t.name!=`string`||typeof t.version!=`string`?null:t}var O=class{_cards=new Map;clear(){this._cards.clear()}delete(e){this._cards.delete(e)}entries(){return this._cards.entries()}get(e){return this._cards.get(e)}getDisplayName(e){return this._cards.get(e)?.name??e}has(e){return this._cards.has(e)}set(e,t){this._cards.set(e,t)}supportsStreaming(e){return this._cards.get(e)?.capabilities?.streaming??!1}};const k={maxTasks:100,maxHistoryPerTask:50},A=new Map([[`TASK_STATE_SUBMITTED`,new Set([`TASK_STATE_WORKING`,`TASK_STATE_REJECTED`,`TASK_STATE_CANCELED`,`TASK_STATE_FAILED`])],[`TASK_STATE_WORKING`,new Set([`TASK_STATE_COMPLETED`,`TASK_STATE_FAILED`,`TASK_STATE_CANCELED`,`TASK_STATE_INPUT_REQUIRED`,`TASK_STATE_AUTH_REQUIRED`])],[`TASK_STATE_INPUT_REQUIRED`,new Set([`TASK_STATE_WORKING`,`TASK_STATE_CANCELED`,`TASK_STATE_FAILED`])],[`TASK_STATE_AUTH_REQUIRED`,new Set([`TASK_STATE_WORKING`,`TASK_STATE_CANCELED`,`TASK_STATE_FAILED`])]]);var j=class{_config;_contextActiveTask=new Map;_listeners=new Set;_taskOrder=[];_tasks=new Map;constructor(e){this._config={...k,...e}}addArtifact(e,t,n=!1){let r=this._tasks.get(e);if(!r)return;if(r.artifacts||=[],n){let e=r.artifacts.find(e=>e.artifactId===t.artifactId);e?e.parts.push(...t.parts):r.artifacts.push(t)}else r.artifacts.push(t);let i={taskId:r.id,contextId:r.contextId??``,artifact:t,append:n,lastChunk:!1};this._emit({type:`artifactUpdate`,taskId:r.id,contextId:r.contextId??``,payload:i})}cancelTask(e){let t=this._tasks.get(e);return!t||h.has(t.status.state)?!1:(this._transitionState(t,`TASK_STATE_CANCELED`,{messageId:o(),role:`ROLE_AGENT`,parts:[{text:`Task canceled by peer request.`}]}),!0)}clear(){this._tasks.clear(),this._taskOrder=[],this._contextActiveTask.clear()}emitRunError(e,t,n){let r=this._tasks.get(e);if(!r)return;let i={type:`RUN_ERROR`,message:t,code:n,timestamp:Date.now()};this._emitAGUI(r,i)}emitRunFinished(e){let t=this._tasks.get(e);if(!t)return;let n={type:`RUN_FINISHED`,threadId:t.contextId??t.id,runId:t.id,timestamp:Date.now()};this._emitAGUI(t,n)}emitRunStarted(e){let t=this._tasks.get(e);if(!t)return;let n={type:`RUN_STARTED`,threadId:t.contextId??t.id,runId:t.id,timestamp:Date.now()};this._emitAGUI(t,n)}emitStateSnapshot(e,t){let n=this._tasks.get(e);if(!n)return;let r={type:`STATE_SNAPSHOT`,snapshot:t,timestamp:Date.now()};this._emitAGUI(n,r)}emitTextMessageContent(e,t,n){let r=this._tasks.get(e);if(!r)return;let i={type:`TEXT_MESSAGE_CONTENT`,messageId:t,delta:n,timestamp:Date.now()};this._emitAGUI(r,i)}emitTextMessageEnd(e,t){let n=this._tasks.get(e);if(!n)return;let r={type:`TEXT_MESSAGE_END`,messageId:t,timestamp:Date.now()};this._emitAGUI(n,r)}emitTextMessageStart(e,t,n=`assistant`){let r=this._tasks.get(e);if(!r)return;let i={type:`TEXT_MESSAGE_START`,messageId:t,role:n,timestamp:Date.now()};this._emitAGUI(r,i)}emitToolCallEnd(e,t){let n=this._tasks.get(e);if(!n)return;let r={type:`TOOL_CALL_END`,toolCallId:t,timestamp:Date.now()};this._emitAGUI(n,r)}emitToolCallStart(e,t,n,r){let i=this._tasks.get(e);if(!i)return;let a={type:`TOOL_CALL_START`,toolCallId:t,toolCallName:n,parentMessageId:r,timestamp:Date.now()};this._emitAGUI(i,a)}getActiveTaskForContext(e){let t=this._contextActiveTask.get(e);if(t)return this._tasks.get(t)}getActiveTasks(){return Array.from(this._tasks.values()).filter(e=>!h.has(e.status.state))}getAllTasks(){return Array.from(this._tasks.values())}getTask(e){return this._tasks.get(e)}handleSendMessage(e){let t=e.message,n=t.contextId??o(),r=t.taskId??this._contextActiveTask.get(n);return r&&this._tasks.has(r)?this._continueTask(r,t):this._createTask(n,t)}markCompleted(e,t){let n=this._tasks.get(e);n&&this._transitionState(n,`TASK_STATE_COMPLETED`,t)}markFailed(e,t){let n=this._tasks.get(e);n&&this._transitionState(n,`TASK_STATE_FAILED`,{messageId:o(),role:`ROLE_AGENT`,parts:[{text:t}]})}markInputRequired(e,t){let n=this._tasks.get(e);n&&this._transitionState(n,`TASK_STATE_INPUT_REQUIRED`,t)}markWorking(e){let t=this._tasks.get(e);t&&this._transitionState(t,`TASK_STATE_WORKING`)}off(e){this._listeners.delete(e)}on(e){this._listeners.add(e)}_addTask(e){for(this._tasks.set(e.id,e),this._taskOrder.push(e.id);this._taskOrder.length>this._config.maxTasks;){let e=this._taskOrder.shift(),t=this._tasks.get(e);if(t&&h.has(t.status.state))this._tasks.delete(e),t.contextId&&this._contextActiveTask.delete(t.contextId);else{this._taskOrder.unshift(e);break}}}_continueTask(e,t){let n=this._tasks.get(e);return g.has(n.status.state)&&this._transitionState(n,`TASK_STATE_WORKING`),n.history||=[],n.history.push(t),n.history.length>this._config.maxHistoryPerTask&&(n.history=n.history.slice(-this._config.maxHistoryPerTask)),this._touchTask(e),{task:n}}_createTask(e,t){let n=o(),r={id:n,contextId:e,status:{state:`TASK_STATE_SUBMITTED`,timestamp:new Date().toISOString()},history:[t]};return this._addTask(r),this._contextActiveTask.set(e,n),this._emitStatusUpdate(r),{task:r}}_emit(e){for(let t of this._listeners)try{t(e)}catch(e){console.error(`PeerTaskManager: listener error`,e)}}_emitAGUI(e,t){this._emit({type:`aguiEvent`,taskId:e.id,contextId:e.contextId??``,payload:t})}_emitStatusUpdate(e){let t={taskId:e.id,contextId:e.contextId??``,status:e.status};this._emit({type:`statusUpdate`,taskId:e.id,contextId:e.contextId??``,payload:t})}_touchTask(e){let t=this._taskOrder.indexOf(e);t!==-1&&(this._taskOrder.splice(t,1),this._taskOrder.push(e))}_transitionState(e,t,n){let r=e.status.state,i=A.get(r);if(i&&!i.has(t)){console.warn(`PeerTaskManager: invalid transition ${r} → ${t} for task ${e.id}`);return}if(h.has(r)){console.warn(`PeerTaskManager: task ${e.id} is in terminal state ${r}, cannot transition`);return}e.status={state:t,message:n,timestamp:new Date().toISOString()},h.has(t)&&e.contextId&&this._contextActiveTask.get(e.contextId)===e.id&&this._contextActiveTask.delete(e.contextId),this._emitStatusUpdate(e)}};const M=new t.State(null);var N=class i{static _RECONNECT_BASE_MS=1e3;static _RECONNECT_MAX_MS=6e4;connectedPeersSignal=new t.State([]);connections=new Map;messageCallback=null;myPeerId=``;peerCards=new O;running=!1;serverConfig={};transferProgressSignal=M;trustedPeerIds=new Set;type=`peerjs`;typingCallback=null;_inboundRemap=new Map;_localCard=null;_onTaskCompleteCallback=null;peer=null;_pendingInboundFile=null;_pendingRequests=new Map;_reconnectAttempts=0;_reconnectTimer=null;_roomNotificationHandler=null;_taskManagers=new Map;constructor(){typeof globalThis.addEventListener==`function`&&globalThis.addEventListener(`peerjs-dc-handle-chunk`,e=>{if(e?.detail?.chunkInfo){let{count:t,total:n}=e.detail.chunkInfo,r=t+1;M.set({count:r,total:n,direction:`receive`}),r>=n&&setTimeout(()=>M.set(null),1500)}})}completeActiveTask(e){let t=e.replace(/^peer:/,``),n=this._taskManagers.get(t);if(!n)return!1;let r=n.getActiveTasks();if(r.length===0)return!1;let i=r[r.length-1];return n.markWorking(i.id),n.markCompleted(i.id),!0}configure(e,t,n={}){this.myPeerId=e.trim(),this.trustedPeerIds=new Set(t.map(e=>e.trim()).filter(Boolean)),this.serverConfig=n}connectPeer(e){this._getOrOpenConnection(e)}getTaskManager(e){let t=this._taskManagers.get(e);return t||(t=new j,this._taskManagers.set(e,t),t.on(t=>{this._forwardTaskEvent(e,t)})),t}isConfigured(){return this.myPeerId.length>0}isPeerConnected(e){let t=this.connections.get(e);return!!t&&!!t.open}onMessage(e){this.messageCallback=e}onTaskComplete(e){this._onTaskCompleteCallback=e}onTyping(e){this.typingCallback=e}sendRoomNotification(e,t){let n=this._getOrOpenConnection(e);if(!n)return!1;if(n.open)try{return n.send(t),!0}catch(t){return console.error(`PeerJsChannel: failed to send room notification to ${e}:`,t),!1}return this._waitForOpen(n).then(()=>{try{n.send(t)}catch(t){console.error(`PeerJsChannel: failed to flush room notification to ${e}:`,t)}}).catch(()=>{}),!0}setRoomNotificationHandler(e){this._roomNotificationHandler=e}setTyping(e,t){let n=e.replace(/^peer:/,``),r=this.connections.get(n);if(r)try{r.send({type:`typing`,typing:t})}catch{}}start(){!this.isConfigured()||this.running||(this.running=!0,this._localCard=w({peerId:this.myPeerId,name:this.myPeerId,description:`ShadowClaw AI assistant`,streaming:!0}),this._initPeer())}stop(){if(this.running=!1,this._reconnectTimer!==null&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null),this._reconnectAttempts=0,this.connections.forEach(e=>{try{e.close()}catch{}}),this.connections.clear(),this.peerCards.clear(),this._taskManagers.clear(),this._pendingRequests.forEach(({timer:e})=>clearTimeout(e)),this._pendingRequests.clear(),this._updateConnectedPeersSignal(),this.peer){try{this.peer.destroy()}catch{}this.peer=null}}async send(t,n,i){let a=t.replace(/^peer:/,``),s=this._getOrOpenConnection(a);if(!s){console.warn(`PeerJsChannel: no connection available for ${a}`);return}try{await this._waitForOpen(s);let{attachments:a}=P(n),c=[...(i||[]).filter(e=>!!e.path),...a.map(e=>({path:e.path,mimeType:`application/octet-stream`}))],l=new Map,u=[];try{let n=await e();for(let e of c)if(e.path)try{let i=await r(n,t,e.path),a=e.path;l.has(e.path)||l.set(e.path,a);let o=e.mimeType||`application/octet-stream`;s.send({type:`__file_header`,name:a,mimeType:o,size:i.length});let c=this._trackSendProgress(s,i.length);s.send(i.buffer),await c,u.push({kind:`file`,name:a,mimeType:o,size:i.length})}catch(t){console.warn(`PeerJsChannel: failed to process file ${e.path}:`,t)}}catch(e){console.error(`PeerJsChannel: failed to access DB`,e)}let d=n;for(let[e,t]of l){let n=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);d=d.replace(RegExp(`(!?\\[.*?\\])\\(${n}\\)`,`g`),`$1(${t})`)}let f=[...u,{kind:`text`,text:d}],p=o(),m={jsonrpc:`2.0`,id:p,method:_.SEND_MESSAGE,params:{message:{messageId:o(),role:`ROLE_AGENT`,parts:f}}};s.send(m),this._registerPendingRequest(p,e=>{})}catch(e){console.error(`PeerJsChannel: send failed for ${a}:`,e),window.dispatchEvent(new CustomEvent(`shadow-claw-peer-error`,{detail:{remotePeerId:a,error:e instanceof Error?e.message:String(e)}}))}}async sendA2UI(e,t){let n=e.replace(/^peer:/,``),r=this._getOrOpenConnection(n);if(!r){console.warn(`PeerJsChannel.sendA2UI: no connection available for ${n}`);return}try{await this._waitForOpen(r);let e={jsonrpc:`2.0`,method:`message/send`,id:o(),params:{message:{role:`agent`,parts:[{kind:`a2ui`,envelope:t}]}}};r.send(e)}catch(e){console.error(`PeerJsChannel.sendA2UI: failed for ${n}:`,e)}}async sendA2UIAction(e,t){let n=e.replace(/^peer:/,``),r=this._getOrOpenConnection(n);if(!r){console.warn(`PeerJsChannel.sendA2UIAction: no connection available for ${n}`);return}try{await this._waitForOpen(r);let e={jsonrpc:`2.0`,method:`message/send`,id:o(),params:{message:{role:`user`,parts:[{kind:`a2ui-action`,action:t}]}}};r.send(e)}catch(e){console.error(`PeerJsChannel.sendA2UIAction: failed for ${n}:`,e)}}_exchangeAgentCards(e,t){if(!this._localCard)return;let n=T();t.send(n),this._registerPendingRequest(n.id,t=>{let n=D(t);n&&(this.peerCards.set(e,n),console.log(`PeerJsChannel: received AgentCard from ${e}: "${n.name}"`))})}_forwardTaskEvent(e,t){let n=this.connections.get(e);if(!n)return;let r;switch(t.type){case`statusUpdate`:r=y.STATUS_UPDATE;break;case`artifactUpdate`:r=y.ARTIFACT_UPDATE;break;case`aguiEvent`:r=v.EVENT;break;default:return}let i={jsonrpc:`2.0`,method:r,params:t.payload};try{n.send(i)}catch(n){console.error(`PeerJsChannel: failed to forward ${t.type} to ${e}:`,n)}}_getOrOpenConnection(e){let t=this.connections.get(e);if(t)return t;if(!this.peer)return null;try{let t=this.peer.connect(e,{reliable:!0,serialization:`binary`});return t?(this._handleIncomingConnection(t),t):null}catch(t){return console.error(`PeerJsChannel: failed to connect to ${e}:`,t),null}}_handleA2ACancelTask(e,t){let n=t.params;if(!n?.taskId){this._sendJsonRpcError(e,t.id,{code:x.INVALID_PARAMS,message:`Missing taskId in CancelTask params`});return}let r=this._taskManagers.get(e);if(!r){this._sendJsonRpcError(e,t.id,{code:x.TASK_NOT_FOUND,message:`Task not found: ${n.taskId}`});return}if(!r.cancelTask(n.taskId)){this._sendJsonRpcError(e,t.id,{code:x.TASK_NOT_CANCELABLE,message:`Task not cancelable: ${n.taskId}`});return}let i=this.connections.get(e);if(i){let e=r.getTask(n.taskId),a={jsonrpc:`2.0`,id:t.id,result:{task:e}};i.send(a)}}_handleA2AGetTask(e,t){let n=t.params;if(!n?.taskId){this._sendJsonRpcError(e,t.id,{code:x.INVALID_PARAMS,message:`Missing taskId in GetTask params`});return}let r=this._taskManagers.get(e)?.getTask(n.taskId);if(!r){this._sendJsonRpcError(e,t.id,{code:x.TASK_NOT_FOUND,message:`Task not found: ${n.taskId}`});return}let i=this.connections.get(e);if(i){let e={jsonrpc:`2.0`,id:t.id,result:{task:r}};i.send(e)}}_handleA2AJsonRpc(e,t){if(C(t)){let e=this._pendingRequests.get(t.id);e&&(clearTimeout(e.timer),this._pendingRequests.delete(t.id),e.resolve(t));return}let n=t.method;if(n){if(n.startsWith(`room/`)){this._roomNotificationHandler?.(e,n,t.params);return}if(S(t)){switch(n){case _.GET_AGENT_CARD:this._handleGetAgentCard(e,t);break;case _.SEND_MESSAGE:this._handleA2ASendMessage(e,t);break;case _.CANCEL_TASK:this._handleA2ACancelTask(e,t);break;case _.GET_TASK:this._handleA2AGetTask(e,t);break;default:if(n===`message/send`){let n=t.params;n?.message?.parts&&Array.isArray(n.message.parts)&&this._processInboundA2AEnvelope(e,n.message.parts).catch(e=>console.error(`PeerJsChannel: failed to process inbound A2A envelope`,e))}else this._sendJsonRpcError(e,t.id,{code:x.METHOD_NOT_FOUND,message:`Method not found: ${n}`})}return}switch(n){case v.EVENT:this._handleAGUIEventNotification(e,t.params);break;case y.STATUS_UPDATE:this._handleTaskStatusNotification(e,t.params);break;case y.ARTIFACT_UPDATE:break;case`message/send`:{let n=t.params;n?.message?.parts&&Array.isArray(n.message.parts)&&this._processInboundA2AEnvelope(e,n.message.parts).catch(e=>console.error(`PeerJsChannel: failed to process inbound A2A envelope`,e))}break}}}_handleA2ASendMessage(e,t){let n=t.params;if(!n?.message){this._sendJsonRpcError(e,t.id,{code:x.INVALID_PARAMS,message:`Missing message in SendMessage params`});return}let r=this._taskManagers.get(e);r||(r=new j,this._taskManagers.set(e,r),r.on(t=>{this._forwardTaskEvent(e,t)}));let i=r.handleSendMessage(n),a=this.connections.get(e);if(a){let e={jsonrpc:`2.0`,id:t.id,result:i};a.send(e)}n.message.parts&&Array.isArray(n.message.parts)&&this._processInboundA2AEnvelope(e,n.message.parts,i.task?.id,i.task?.contextId).catch(e=>console.error(`PeerJsChannel: failed to process A2A SendMessage`,e))}_handleAGUIEventNotification(e,t){if(!t||typeof t!=`object`)return;let n=t;window.dispatchEvent(new CustomEvent(`shadow-claw-agui-event`,{detail:{remotePeerId:e,event:n}}))}_handleGetAgentCard(e,t){if(!this._localCard){this._sendJsonRpcError(e,t.id,{code:x.INTERNAL_ERROR,message:`Agent card not available`});return}let n=E(t.id,this._localCard),r=this.connections.get(e);r&&r.send(n)}_handleInboundData(t,r){if(r instanceof ArrayBuffer||r instanceof Uint8Array){if(this._pendingInboundFile){let i=this._pendingInboundFile.name,o=`peer:${t}`,s=new Uint8Array(r);e().then(async e=>{let t=i,r=1;for(;await a(e,o,t);){let e=i.lastIndexOf(`.`);if(e>0&&e<i.length-1){let n=i.substring(0,e),a=i.substring(e);t=`${n} (${r})${a}`}else t=`${i} (${r})`;r++}t!==i&&this._inboundRemap.set(i,t),n(e,o,t,s).catch(e=>{console.error(`PeerJsChannel: failed to write inbound file bytes`,e)})}),this._pendingInboundFile=null}return}if(!r||typeof r!=`object`)return;let i=r;if(i.type===`__file_header`){this._pendingInboundFile={name:i.name,mimeType:i.mimeType,size:i.size};return}if(i.type===`typing`){this.typingCallback?.(`peer:${t}`,!!i.typing);return}if(i.type===`chat`){let e=typeof i.text==`string`?i.text.trim():``;e&&this.messageCallback?.({id:o(),groupId:`peer:${t}`,sender:t,content:e,timestamp:Date.now(),channel:`peerjs`});return}if(i.jsonrpc===`2.0`){this._handleA2AJsonRpc(t,i);return}if(i.type===`command:execute`){let e=i.payload||{},n=e.action||``,r=e.args||{},a=e.commandId||``;import(`./initControlPlane-C9jpnWev.js`).then(({executeClientControlCommand:e})=>e(n,r)).then(e=>{let r=this.connections.get(t);if(r){let t=!!e?.error;r.send({id:o(),type:`command:result`,payload:{commandId:a,action:n,success:!t,data:e,...t?{error:e.error}:{}}})}}).catch(e=>{let r=this.connections.get(t);r&&r.send({id:o(),type:`command:result`,payload:{commandId:a,action:n,success:!1,error:e?.message||String(e)}})});return}}_isTrustedPeer(e){if(this.trustedPeerIds.size===0||this.trustedPeerIds.has(e))return!0;for(let t of this.trustedPeerIds){let n=t.trim();if(n.endsWith(`*`)&&e.startsWith(n.slice(0,-1))||n===`cli`&&e.startsWith(`cli-`))return!0}return!1}_handleIncomingConnection(e){let t=e.peer;if(!this._isTrustedPeer(t)){console.warn(`PeerJsChannel: rejecting connection from untrusted peer: ${t}`);try{e.close()}catch{}return}this.connections.set(t,e),this._updateConnectedPeersSignal(),e.on(`open`,()=>{console.log(`PeerJsChannel: connection opened with ${t}`),this._exchangeAgentCards(t,e)}),e.on(`data`,e=>{this._handleInboundData(t,e)}),e.on(`close`,()=>{console.log(`PeerJsChannel: connection closed with ${t}`),this.connections.delete(t),this.peerCards.delete(t),this._taskManagers.delete(t),this._updateConnectedPeersSignal()}),e.on(`error`,e=>{console.error(`PeerJsChannel: connection error with ${t}:`,e),this.connections.delete(t),this._updateConnectedPeersSignal(),window.dispatchEvent(new CustomEvent(`shadow-claw-peer-error`,{detail:{remotePeerId:t,error:e.message}}))}),e.on(`iceStateChanged`,e=>{(e===`failed`||e===`disconnected`||e===`closed`)&&(console.warn(`PeerJsChannel: ICE state changed to ${e} for ${t}`),this.connections.delete(t),this._updateConnectedPeersSignal())})}_handleTaskStatusNotification(e,t){if(!t||typeof t!=`object`)return;let n=t;if(n.status?.state&&h.has(n.status.state)){let t=`peer:${e}`;this._onTaskCompleteCallback?.(t)}window.dispatchEvent(new CustomEvent(`shadow-claw-task-status`,{detail:{remotePeerId:e,...n}}))}async _initPeer(){let{Peer:e}=await import(`./bundler-Ca-Xwln8.js`),t={},n=this.serverConfig.host??`0.peerjs.com`,r=this.serverConfig.port??443,i=this.serverConfig.path??`/`,a=this.serverConfig.secure??!0;t.host=n,t.port=r,t.path=i,t.secure=a,t.debug=3,t.config={iceServers:this.serverConfig.iceServers??[{urls:`stun:stun.l.google.com:19302`},{urls:`stun:stun1.l.google.com:19302`}]},this.peer=new e(this.myPeerId,t),this.peer.on(`open`,e=>{console.log(`PeerJsChannel: connected to signaling server, peer ID: ${e}`),this._reconnectAttempts=0}),this.peer.on(`connection`,e=>{this._handleIncomingConnection(e)}),this.peer.on(`error`,e=>{console.error(`PeerJsChannel: peer error [${e.type}]:`,e.message),(e.type===`peer-unavailable`||e.type===`unavailable-id`)&&window.dispatchEvent(new CustomEvent(`shadow-claw-peer-error`,{detail:{error:e.message}})),!(e.type===`peer-unavailable`||e.type===`network`||e.type===`disconnected`)&&e.type===`unavailable-id`&&console.warn(`PeerJsChannel: peer ID is already in use. Stop the channel and reconfigure.`)}),this.peer.on(`disconnected`,()=>{this.running&&this._scheduleReconnect()}),this.peer.on(`close`,()=>{console.log(`PeerJsChannel: peer closed`)})}_registerPendingRequest(e,t){let n=setTimeout(()=>{this._pendingRequests.delete(e),console.warn(`PeerJsChannel: JSON-RPC request ${e} timed out (10s)`)},1e4);this._pendingRequests.set(e,{resolve:t,timer:n})}_scheduleReconnect(){if(this._reconnectTimer!==null)return;let e=Math.min(i._RECONNECT_BASE_MS*2**this._reconnectAttempts,i._RECONNECT_MAX_MS);this._reconnectAttempts++,console.log(`PeerJsChannel: disconnected from signaling server, reconnecting in ${(e/1e3).toFixed(1)}s (attempt ${this._reconnectAttempts})`),this._reconnectTimer=setTimeout(()=>{if(this._reconnectTimer=null,this.running)try{this.peer?.reconnect?.()}catch{this._scheduleReconnect()}},e)}_sendJsonRpcError(e,t,n){let r=this.connections.get(e);if(!r)return;let i={jsonrpc:`2.0`,id:t,error:n};try{r.send(i)}catch{}}_trackSendProgress(e,t){return new Promise(n=>{let r=e._dc;if(!r||t===0){this.transferProgressSignal.set(null),n();return}this.transferProgressSignal.set({count:0,total:t,direction:`send`});let i=setInterval(()=>{let e=r.bufferedAmount,a=Math.max(0,t-e);this.transferProgressSignal.set({count:a,total:t,direction:`send`}),e===0&&(clearInterval(i),this.transferProgressSignal.set({count:t,total:t,direction:`send`}),setTimeout(()=>this.transferProgressSignal.set(null),1500),n())},80)})}_updateConnectedPeersSignal(){this.connectedPeersSignal.set(Array.from(this.connections.keys()))}_waitForOpen(e){return e.open?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>{n(Error(`Connection open timeout (5s)`))},5e3);e.on(`open`,()=>{clearTimeout(r),t()}),e.on(`error`,e=>{clearTimeout(r),n(e)})})}async _processInboundA2AEnvelope(e,t,n,r){let i=`peer:${e}`,a=``,s=[],c=[],l;for(let e of t)if(e.kind===`text`&&typeof e.text==`string`)a+=e.text;else if(e.kind===`file`){let t=e.name||`attachment`;if(this._inboundRemap.has(t)){let e=this._inboundRemap.get(t),n=t.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);a=a.replace(RegExp(`(!?\\[.*?\\])\\(${n}\\)`,`g`),`$1(${e})`),this._inboundRemap.delete(t),t=e}let n=t.split(`/`).pop()||`attachment`;s.push({fileName:n,mimeType:e.mimeType,path:t,size:e.size||0})}else e.kind===`a2ui`&&e.envelope?c.push(e.envelope):e.kind===`a2ui-action`&&e.action&&(l=e.action);a=a.trim(),!(!a&&s.length===0&&c.length===0&&!l)&&this.messageCallback?.({id:o(),groupId:i,sender:e,content:a,timestamp:Date.now(),channel:`peerjs`,attachments:s.length>0?s:void 0,a2uiEnvelopes:c.length>0?c:void 0,a2uiAction:l,taskId:n,contextId:r})}};function P(e){let t=[],n=/!?\[([^\]]*)\]\(([^)]+)\)/g,r,i=e;for(;(r=n.exec(e))!==null;){let e=r[1],n=F((r[2]||``).trim());n&&t.push({alt:e,path:n})}return{remainingText:i,attachments:t}}function F(e){if(!e)return null;let t=e.trim();if(/^[a-zA-Z][a-zA-Z\d+.-]*:/.test(t)||t.startsWith(`//`))return null;let n=t.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^\.\//,``);if(!n)return null;let r=n.split(`/`).filter(Boolean);return r.some(e=>e===`..`)?null:r.join(`/`)}export{f as a,l as i,M as n,u as o,b as r,N as t};
|
|
1
|
+
import"./config-CrHchneq.js";import{n as e}from"./txPromise-EBECky1b.js";import{n as t}from"./toast-60iDlgiH.js";import{Zt as n,bn as r,cn as i,nn as a}from"./orchestrator-tHWrqi_F.js";import{t as o}from"./ulid-BY7rQVLN.js";const s={apng:`image/apng`,avif:`image/avif`,bmp:`image/bmp`,css:`text/css`,gif:`image/gif`,htm:`text/html`,html:`text/html`,jpeg:`image/jpeg`,jpg:`image/jpeg`,js:`text/javascript`,json:`application/json`,markdown:`text/markdown`,md:`text/markdown`,mp3:`audio/mpeg`,mp4:`video/mp4`,oga:`audio/ogg`,ogg:`audio/ogg`,ogv:`video/ogg`,pdf:`application/pdf`,png:`image/png`,svg:`image/svg+xml`,txt:`text/plain`,wav:`audio/wav`,webm:`video/webm`,webp:`image/webp`};function c(e){return e.trim().replace(/[\u0000-\u001f\u007f]+/g,``).replace(/[\\/:*?"<>|]+/g,`-`).replace(/\s+/g,` `).replace(/^\.+/,``).trim()||`attachment`}function l(e,t=``){if(t)return t;let n=e.toLowerCase().split(`.`).pop()||``;return s[n]||`application/octet-stream`}function u(e){return e.previewDisposition===`inline`||l(e.fileName,e.mimeType||``)===`image/png`}function d(e,t=``,n=Date.now()){let r=c(e),i=t.trim().replace(/[^a-zA-Z0-9._-]+/g,`-`).replace(/^-+|-+$/g,``);return`attachments/${n}-${i?`${i}-`:``}${r}`}async function f(e,t,n=[]){let r=[];for(let a of n){let n=c(a.fileName||``),o=a.path||d(n,a.id),s=a.source,u=l(n,a.mimeType||``),f=a.size;if(s){let r=await p(s);u=l(n,a.mimeType||r.type),f=typeof f==`number`?f:r.size,await i(e,t,o,r)}r.push(m({...a,fileName:n,mimeType:u,size:f,path:o,previewDisposition:a.previewDisposition||(u===`image/png`?`inline`:`file`)}))}return r}async function p(e){if(e.kind===`local-file`)return e.file;if(e.kind===`inline-text`)return new Blob([e.text],{type:e.mimeType||`text/plain`});let t=await fetch(e.url,{headers:e.headers});if(!t.ok)throw Error(`Attachment download failed: HTTP ${t.status} ${t.statusText}`);return await t.blob()}function m(e){let{source:t,...n}=e;return n}const h=new Set([`TASK_STATE_COMPLETED`,`TASK_STATE_FAILED`,`TASK_STATE_CANCELED`,`TASK_STATE_REJECTED`]),g=new Set([`TASK_STATE_INPUT_REQUIRED`,`TASK_STATE_AUTH_REQUIRED`]),_={SEND_MESSAGE:`SendMessage`,SEND_STREAMING_MESSAGE:`SendStreamingMessage`,GET_TASK:`GetTask`,CANCEL_TASK:`CancelTask`,GET_AGENT_CARD:`GetAgentCard`},v={EVENT:`agui/event`},y={STATUS_UPDATE:`tasks/statusUpdate`,ARTIFACT_UPDATE:`tasks/artifactUpdate`},b={JOIN:`room/join`,ROSTER:`room/roster`,LEAVE:`room/leave`,MESSAGE:`room/message`,INVITE:`room/invite`,RELAY:`room/relay`,A2UI:`room/a2ui`,A2UI_ACTION:`room/a2ui-action`},x={TASK_NOT_FOUND:-32001,TASK_NOT_CANCELABLE:-32002,PUSH_NOTIFICATION_NOT_SUPPORTED:-32003,UNSUPPORTED_OPERATION:-32004,CONTENT_TYPE_NOT_SUPPORTED:-32005,INVALID_AGENT_RESPONSE:-32006,PARSE_ERROR:-32700,INVALID_REQUEST:-32600,METHOD_NOT_FOUND:-32601,INVALID_PARAMS:-32602,INTERNAL_ERROR:-32603};function S(e){return typeof e==`object`&&!!e&&e.jsonrpc===`2.0`&&typeof e.id==`string`&&typeof e.method==`string`}function C(e){return typeof e==`object`&&!!e&&e.jsonrpc===`2.0`&&typeof e.id==`string`&&!(`method`in e)}function w(e){let t={url:`webrtc://${e.peerId}`,protocolBinding:`https://xt-ml.github.io/shadow-claw/bindings/webrtc-datachannel/v1`,protocolVersion:`1.0`},n={streaming:e.streaming??!0,pushNotifications:!1};return{name:e.name,description:e.description??`AI assistant agent (${e.name})`,version:e.version??`1.0.0`,supportedInterfaces:[t],capabilities:n,defaultInputModes:[`text/plain`,`application/json`],defaultOutputModes:[`text/plain`,`application/json`],skills:e.skills??[],iconUrl:e.iconUrl}}function T(){return{jsonrpc:`2.0`,id:o(),method:_.GET_AGENT_CARD}}function E(e,t){return{jsonrpc:`2.0`,id:e,result:t}}function D(e){if(e.error)return console.warn(`GetAgentCard returned error:`,e.error),null;let t=e.result;return!t||typeof t!=`object`||typeof t.name!=`string`||typeof t.version!=`string`?null:t}var O=class{_cards=new Map;clear(){this._cards.clear()}delete(e){this._cards.delete(e)}entries(){return this._cards.entries()}get(e){return this._cards.get(e)}getDisplayName(e){return this._cards.get(e)?.name??e}has(e){return this._cards.has(e)}set(e,t){this._cards.set(e,t)}supportsStreaming(e){return this._cards.get(e)?.capabilities?.streaming??!1}};const k={maxTasks:100,maxHistoryPerTask:50},A=new Map([[`TASK_STATE_SUBMITTED`,new Set([`TASK_STATE_WORKING`,`TASK_STATE_REJECTED`,`TASK_STATE_CANCELED`,`TASK_STATE_FAILED`])],[`TASK_STATE_WORKING`,new Set([`TASK_STATE_COMPLETED`,`TASK_STATE_FAILED`,`TASK_STATE_CANCELED`,`TASK_STATE_INPUT_REQUIRED`,`TASK_STATE_AUTH_REQUIRED`])],[`TASK_STATE_INPUT_REQUIRED`,new Set([`TASK_STATE_WORKING`,`TASK_STATE_CANCELED`,`TASK_STATE_FAILED`])],[`TASK_STATE_AUTH_REQUIRED`,new Set([`TASK_STATE_WORKING`,`TASK_STATE_CANCELED`,`TASK_STATE_FAILED`])]]);var j=class{_config;_contextActiveTask=new Map;_listeners=new Set;_taskOrder=[];_tasks=new Map;constructor(e){this._config={...k,...e}}addArtifact(e,t,n=!1){let r=this._tasks.get(e);if(!r)return;if(r.artifacts||=[],n){let e=r.artifacts.find(e=>e.artifactId===t.artifactId);e?e.parts.push(...t.parts):r.artifacts.push(t)}else r.artifacts.push(t);let i={taskId:r.id,contextId:r.contextId??``,artifact:t,append:n,lastChunk:!1};this._emit({type:`artifactUpdate`,taskId:r.id,contextId:r.contextId??``,payload:i})}cancelTask(e){let t=this._tasks.get(e);return!t||h.has(t.status.state)?!1:(this._transitionState(t,`TASK_STATE_CANCELED`,{messageId:o(),role:`ROLE_AGENT`,parts:[{text:`Task canceled by peer request.`}]}),!0)}clear(){this._tasks.clear(),this._taskOrder=[],this._contextActiveTask.clear()}emitRunError(e,t,n){let r=this._tasks.get(e);if(!r)return;let i={type:`RUN_ERROR`,message:t,code:n,timestamp:Date.now()};this._emitAGUI(r,i)}emitRunFinished(e){let t=this._tasks.get(e);if(!t)return;let n={type:`RUN_FINISHED`,threadId:t.contextId??t.id,runId:t.id,timestamp:Date.now()};this._emitAGUI(t,n)}emitRunStarted(e){let t=this._tasks.get(e);if(!t)return;let n={type:`RUN_STARTED`,threadId:t.contextId??t.id,runId:t.id,timestamp:Date.now()};this._emitAGUI(t,n)}emitStateSnapshot(e,t){let n=this._tasks.get(e);if(!n)return;let r={type:`STATE_SNAPSHOT`,snapshot:t,timestamp:Date.now()};this._emitAGUI(n,r)}emitTextMessageContent(e,t,n){let r=this._tasks.get(e);if(!r)return;let i={type:`TEXT_MESSAGE_CONTENT`,messageId:t,delta:n,timestamp:Date.now()};this._emitAGUI(r,i)}emitTextMessageEnd(e,t){let n=this._tasks.get(e);if(!n)return;let r={type:`TEXT_MESSAGE_END`,messageId:t,timestamp:Date.now()};this._emitAGUI(n,r)}emitTextMessageStart(e,t,n=`assistant`){let r=this._tasks.get(e);if(!r)return;let i={type:`TEXT_MESSAGE_START`,messageId:t,role:n,timestamp:Date.now()};this._emitAGUI(r,i)}emitToolCallEnd(e,t){let n=this._tasks.get(e);if(!n)return;let r={type:`TOOL_CALL_END`,toolCallId:t,timestamp:Date.now()};this._emitAGUI(n,r)}emitToolCallStart(e,t,n,r){let i=this._tasks.get(e);if(!i)return;let a={type:`TOOL_CALL_START`,toolCallId:t,toolCallName:n,parentMessageId:r,timestamp:Date.now()};this._emitAGUI(i,a)}getActiveTaskForContext(e){let t=this._contextActiveTask.get(e);if(t)return this._tasks.get(t)}getActiveTasks(){return Array.from(this._tasks.values()).filter(e=>!h.has(e.status.state))}getAllTasks(){return Array.from(this._tasks.values())}getTask(e){return this._tasks.get(e)}handleSendMessage(e){let t=e.message,n=t.contextId??o(),r=t.taskId??this._contextActiveTask.get(n);return r&&this._tasks.has(r)?this._continueTask(r,t):this._createTask(n,t)}markCompleted(e,t){let n=this._tasks.get(e);n&&this._transitionState(n,`TASK_STATE_COMPLETED`,t)}markFailed(e,t){let n=this._tasks.get(e);n&&this._transitionState(n,`TASK_STATE_FAILED`,{messageId:o(),role:`ROLE_AGENT`,parts:[{text:t}]})}markInputRequired(e,t){let n=this._tasks.get(e);n&&this._transitionState(n,`TASK_STATE_INPUT_REQUIRED`,t)}markWorking(e){let t=this._tasks.get(e);t&&this._transitionState(t,`TASK_STATE_WORKING`)}off(e){this._listeners.delete(e)}on(e){this._listeners.add(e)}_addTask(e){for(this._tasks.set(e.id,e),this._taskOrder.push(e.id);this._taskOrder.length>this._config.maxTasks;){let e=this._taskOrder.shift(),t=this._tasks.get(e);if(t&&h.has(t.status.state))this._tasks.delete(e),t.contextId&&this._contextActiveTask.delete(t.contextId);else{this._taskOrder.unshift(e);break}}}_continueTask(e,t){let n=this._tasks.get(e);return g.has(n.status.state)&&this._transitionState(n,`TASK_STATE_WORKING`),n.history||=[],n.history.push(t),n.history.length>this._config.maxHistoryPerTask&&(n.history=n.history.slice(-this._config.maxHistoryPerTask)),this._touchTask(e),{task:n}}_createTask(e,t){let n=o(),r={id:n,contextId:e,status:{state:`TASK_STATE_SUBMITTED`,timestamp:new Date().toISOString()},history:[t]};return this._addTask(r),this._contextActiveTask.set(e,n),this._emitStatusUpdate(r),{task:r}}_emit(e){for(let t of this._listeners)try{t(e)}catch(e){console.error(`PeerTaskManager: listener error`,e)}}_emitAGUI(e,t){this._emit({type:`aguiEvent`,taskId:e.id,contextId:e.contextId??``,payload:t})}_emitStatusUpdate(e){let t={taskId:e.id,contextId:e.contextId??``,status:e.status};this._emit({type:`statusUpdate`,taskId:e.id,contextId:e.contextId??``,payload:t})}_touchTask(e){let t=this._taskOrder.indexOf(e);t!==-1&&(this._taskOrder.splice(t,1),this._taskOrder.push(e))}_transitionState(e,t,n){let r=e.status.state,i=A.get(r);if(i&&!i.has(t)){console.warn(`PeerTaskManager: invalid transition ${r} → ${t} for task ${e.id}`);return}if(h.has(r)){console.warn(`PeerTaskManager: task ${e.id} is in terminal state ${r}, cannot transition`);return}e.status={state:t,message:n,timestamp:new Date().toISOString()},h.has(t)&&e.contextId&&this._contextActiveTask.get(e.contextId)===e.id&&this._contextActiveTask.delete(e.contextId),this._emitStatusUpdate(e)}};const M=new t.State(null);var N=class i{static _RECONNECT_BASE_MS=1e3;static _RECONNECT_MAX_MS=6e4;connectedPeersSignal=new t.State([]);connections=new Map;messageCallback=null;myPeerId=``;peerCards=new O;running=!1;serverConfig={};transferProgressSignal=M;trustedPeerIds=new Set;type=`peerjs`;typingCallback=null;_inboundRemap=new Map;_localCard=null;_onTaskCompleteCallback=null;peer=null;_pendingInboundFile=null;_pendingRequests=new Map;_reconnectAttempts=0;_reconnectTimer=null;_roomNotificationHandler=null;_taskManagers=new Map;constructor(){typeof globalThis.addEventListener==`function`&&globalThis.addEventListener(`peerjs-dc-handle-chunk`,e=>{if(e?.detail?.chunkInfo){let{count:t,total:n}=e.detail.chunkInfo,r=t+1;M.set({count:r,total:n,direction:`receive`}),r>=n&&setTimeout(()=>M.set(null),1500)}})}completeActiveTask(e){let t=e.replace(/^peer:/,``),n=this._taskManagers.get(t);if(!n)return!1;let r=n.getActiveTasks();if(r.length===0)return!1;let i=r[r.length-1];return n.markWorking(i.id),n.markCompleted(i.id),!0}configure(e,t,n={}){this.myPeerId=e.trim(),this.trustedPeerIds=new Set(t.map(e=>e.trim()).filter(Boolean)),this.serverConfig=n}connectPeer(e){this._getOrOpenConnection(e)}getTaskManager(e){let t=this._taskManagers.get(e);return t||(t=new j,this._taskManagers.set(e,t),t.on(t=>{this._forwardTaskEvent(e,t)})),t}isConfigured(){return this.myPeerId.length>0}isPeerConnected(e){let t=this.connections.get(e);return!!t&&!!t.open}onMessage(e){this.messageCallback=e}onTaskComplete(e){this._onTaskCompleteCallback=e}onTyping(e){this.typingCallback=e}sendRoomNotification(e,t){let n=this._getOrOpenConnection(e);if(!n)return!1;if(n.open)try{return n.send(t),!0}catch(t){return console.error(`PeerJsChannel: failed to send room notification to ${e}:`,t),!1}return this._waitForOpen(n).then(()=>{try{n.send(t)}catch(t){console.error(`PeerJsChannel: failed to flush room notification to ${e}:`,t)}}).catch(()=>{}),!0}setRoomNotificationHandler(e){this._roomNotificationHandler=e}setTyping(e,t){let n=e.replace(/^peer:/,``),r=this.connections.get(n);if(r)try{r.send({type:`typing`,typing:t})}catch{}}start(){!this.isConfigured()||this.running||(this.running=!0,this._localCard=w({peerId:this.myPeerId,name:this.myPeerId,description:`ShadowClaw AI assistant`,streaming:!0}),this._initPeer())}stop(){if(this.running=!1,this._reconnectTimer!==null&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null),this._reconnectAttempts=0,this.connections.forEach(e=>{try{e.close()}catch{}}),this.connections.clear(),this.peerCards.clear(),this._taskManagers.clear(),this._pendingRequests.forEach(({timer:e})=>clearTimeout(e)),this._pendingRequests.clear(),this._updateConnectedPeersSignal(),this.peer){try{this.peer.destroy()}catch{}this.peer=null}}async send(t,n,i){let a=t.replace(/^peer:/,``),s=this._getOrOpenConnection(a);if(!s){console.warn(`PeerJsChannel: no connection available for ${a}`);return}try{await this._waitForOpen(s);let{attachments:a}=P(n),c=[...(i||[]).filter(e=>!!e.path),...a.map(e=>({path:e.path,mimeType:`application/octet-stream`}))],l=new Map,u=[];try{let n=await e();for(let e of c)if(e.path)try{let i=await r(n,t,e.path),a=e.path;l.has(e.path)||l.set(e.path,a);let o=e.mimeType||`application/octet-stream`;s.send({type:`__file_header`,name:a,mimeType:o,size:i.length});let c=this._trackSendProgress(s,i.length);s.send(i.buffer),await c,u.push({kind:`file`,name:a,mimeType:o,size:i.length})}catch(t){console.warn(`PeerJsChannel: failed to process file ${e.path}:`,t)}}catch(e){console.error(`PeerJsChannel: failed to access DB`,e)}let d=n;for(let[e,t]of l){let n=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);d=d.replace(RegExp(`(!?\\[.*?\\])\\(${n}\\)`,`g`),`$1(${t})`)}let f=[...u,{kind:`text`,text:d}],p=o(),m={jsonrpc:`2.0`,id:p,method:_.SEND_MESSAGE,params:{message:{messageId:o(),role:`ROLE_AGENT`,parts:f}}};s.send(m),this._registerPendingRequest(p,e=>{})}catch(e){console.error(`PeerJsChannel: send failed for ${a}:`,e),window.dispatchEvent(new CustomEvent(`shadow-claw-peer-error`,{detail:{remotePeerId:a,error:e instanceof Error?e.message:String(e)}}))}}async sendA2UI(e,t){let n=e.replace(/^peer:/,``),r=this._getOrOpenConnection(n);if(!r){console.warn(`PeerJsChannel.sendA2UI: no connection available for ${n}`);return}try{await this._waitForOpen(r);let e={jsonrpc:`2.0`,method:`message/send`,id:o(),params:{message:{role:`agent`,parts:[{kind:`a2ui`,envelope:t}]}}};r.send(e)}catch(e){console.error(`PeerJsChannel.sendA2UI: failed for ${n}:`,e)}}async sendA2UIAction(e,t){let n=e.replace(/^peer:/,``),r=this._getOrOpenConnection(n);if(!r){console.warn(`PeerJsChannel.sendA2UIAction: no connection available for ${n}`);return}try{await this._waitForOpen(r);let e={jsonrpc:`2.0`,method:`message/send`,id:o(),params:{message:{role:`user`,parts:[{kind:`a2ui-action`,action:t}]}}};r.send(e)}catch(e){console.error(`PeerJsChannel.sendA2UIAction: failed for ${n}:`,e)}}_exchangeAgentCards(e,t){if(!this._localCard)return;let n=T();t.send(n),this._registerPendingRequest(n.id,t=>{let n=D(t);n&&(this.peerCards.set(e,n),console.log(`PeerJsChannel: received AgentCard from ${e}: "${n.name}"`))})}_forwardTaskEvent(e,t){let n=this.connections.get(e);if(!n)return;let r;switch(t.type){case`statusUpdate`:r=y.STATUS_UPDATE;break;case`artifactUpdate`:r=y.ARTIFACT_UPDATE;break;case`aguiEvent`:r=v.EVENT;break;default:return}let i={jsonrpc:`2.0`,method:r,params:t.payload};try{n.send(i)}catch(n){console.error(`PeerJsChannel: failed to forward ${t.type} to ${e}:`,n)}}_getOrOpenConnection(e){let t=this.connections.get(e);if(t)return t;if(!this.peer)return null;try{let t=this.peer.connect(e,{reliable:!0,serialization:`binary`});return t?(this._handleIncomingConnection(t),t):null}catch(t){return console.error(`PeerJsChannel: failed to connect to ${e}:`,t),null}}_handleA2ACancelTask(e,t){let n=t.params;if(!n?.taskId){this._sendJsonRpcError(e,t.id,{code:x.INVALID_PARAMS,message:`Missing taskId in CancelTask params`});return}let r=this._taskManagers.get(e);if(!r){this._sendJsonRpcError(e,t.id,{code:x.TASK_NOT_FOUND,message:`Task not found: ${n.taskId}`});return}if(!r.cancelTask(n.taskId)){this._sendJsonRpcError(e,t.id,{code:x.TASK_NOT_CANCELABLE,message:`Task not cancelable: ${n.taskId}`});return}let i=this.connections.get(e);if(i){let e=r.getTask(n.taskId),a={jsonrpc:`2.0`,id:t.id,result:{task:e}};i.send(a)}}_handleA2AGetTask(e,t){let n=t.params;if(!n?.taskId){this._sendJsonRpcError(e,t.id,{code:x.INVALID_PARAMS,message:`Missing taskId in GetTask params`});return}let r=this._taskManagers.get(e)?.getTask(n.taskId);if(!r){this._sendJsonRpcError(e,t.id,{code:x.TASK_NOT_FOUND,message:`Task not found: ${n.taskId}`});return}let i=this.connections.get(e);if(i){let e={jsonrpc:`2.0`,id:t.id,result:{task:r}};i.send(e)}}_handleA2AJsonRpc(e,t){if(C(t)){let e=this._pendingRequests.get(t.id);e&&(clearTimeout(e.timer),this._pendingRequests.delete(t.id),e.resolve(t));return}let n=t.method;if(n){if(n.startsWith(`room/`)){this._roomNotificationHandler?.(e,n,t.params);return}if(S(t)){switch(n){case _.GET_AGENT_CARD:this._handleGetAgentCard(e,t);break;case _.SEND_MESSAGE:this._handleA2ASendMessage(e,t);break;case _.CANCEL_TASK:this._handleA2ACancelTask(e,t);break;case _.GET_TASK:this._handleA2AGetTask(e,t);break;default:if(n===`message/send`){let n=t.params;n?.message?.parts&&Array.isArray(n.message.parts)&&this._processInboundA2AEnvelope(e,n.message.parts).catch(e=>console.error(`PeerJsChannel: failed to process inbound A2A envelope`,e))}else this._sendJsonRpcError(e,t.id,{code:x.METHOD_NOT_FOUND,message:`Method not found: ${n}`})}return}switch(n){case v.EVENT:this._handleAGUIEventNotification(e,t.params);break;case y.STATUS_UPDATE:this._handleTaskStatusNotification(e,t.params);break;case y.ARTIFACT_UPDATE:break;case`message/send`:{let n=t.params;n?.message?.parts&&Array.isArray(n.message.parts)&&this._processInboundA2AEnvelope(e,n.message.parts).catch(e=>console.error(`PeerJsChannel: failed to process inbound A2A envelope`,e))}break}}}_handleA2ASendMessage(e,t){let n=t.params;if(!n?.message){this._sendJsonRpcError(e,t.id,{code:x.INVALID_PARAMS,message:`Missing message in SendMessage params`});return}let r=this._taskManagers.get(e);r||(r=new j,this._taskManagers.set(e,r),r.on(t=>{this._forwardTaskEvent(e,t)}));let i=r.handleSendMessage(n),a=this.connections.get(e);if(a){let e={jsonrpc:`2.0`,id:t.id,result:i};a.send(e)}n.message.parts&&Array.isArray(n.message.parts)&&this._processInboundA2AEnvelope(e,n.message.parts,i.task?.id,i.task?.contextId).catch(e=>console.error(`PeerJsChannel: failed to process A2A SendMessage`,e))}_handleAGUIEventNotification(e,t){if(!t||typeof t!=`object`)return;let n=t;window.dispatchEvent(new CustomEvent(`shadow-claw-agui-event`,{detail:{remotePeerId:e,event:n}}))}_handleGetAgentCard(e,t){if(!this._localCard){this._sendJsonRpcError(e,t.id,{code:x.INTERNAL_ERROR,message:`Agent card not available`});return}let n=E(t.id,this._localCard),r=this.connections.get(e);r&&r.send(n)}_handleInboundData(t,r){if(r instanceof ArrayBuffer||r instanceof Uint8Array){if(this._pendingInboundFile){let i=this._pendingInboundFile.name,o=`peer:${t}`,s=new Uint8Array(r);e().then(async e=>{let t=i,r=1;for(;await a(e,o,t);){let e=i.lastIndexOf(`.`);if(e>0&&e<i.length-1){let n=i.substring(0,e),a=i.substring(e);t=`${n} (${r})${a}`}else t=`${i} (${r})`;r++}t!==i&&this._inboundRemap.set(i,t),n(e,o,t,s).catch(e=>{console.error(`PeerJsChannel: failed to write inbound file bytes`,e)})}),this._pendingInboundFile=null}return}if(!r||typeof r!=`object`)return;let i=r;if(i.type===`__file_header`){this._pendingInboundFile={name:i.name,mimeType:i.mimeType,size:i.size};return}if(i.type===`typing`){this.typingCallback?.(`peer:${t}`,!!i.typing);return}if(i.type===`chat`){let e=typeof i.text==`string`?i.text.trim():``;e&&this.messageCallback?.({id:o(),groupId:`peer:${t}`,sender:t,content:e,timestamp:Date.now(),channel:`peerjs`});return}if(i.jsonrpc===`2.0`){this._handleA2AJsonRpc(t,i);return}if(i.type===`command:execute`){let e=i.payload||{},n=e.action||``,r=e.args||{},a=e.commandId||``;import(`./initControlPlane-D5kHKcB5.js`).then(({executeClientControlCommand:e})=>e(n,r)).then(e=>{let r=this.connections.get(t);if(r){let t=!!e?.error;r.send({id:o(),type:`command:result`,payload:{commandId:a,action:n,success:!t,data:e,...t?{error:e.error}:{}}})}}).catch(e=>{let r=this.connections.get(t);r&&r.send({id:o(),type:`command:result`,payload:{commandId:a,action:n,success:!1,error:e?.message||String(e)}})});return}}_isTrustedPeer(e){if(this.trustedPeerIds.size===0||this.trustedPeerIds.has(e))return!0;for(let t of this.trustedPeerIds){let n=t.trim();if(n.endsWith(`*`)&&e.startsWith(n.slice(0,-1))||n===`cli`&&e.startsWith(`cli-`))return!0}return!1}_handleIncomingConnection(e){let t=e.peer;if(!this._isTrustedPeer(t)){console.warn(`PeerJsChannel: rejecting connection from untrusted peer: ${t}`);try{e.close()}catch{}return}this.connections.set(t,e),this._updateConnectedPeersSignal(),e.on(`open`,()=>{console.log(`PeerJsChannel: connection opened with ${t}`),this._exchangeAgentCards(t,e)}),e.on(`data`,e=>{this._handleInboundData(t,e)}),e.on(`close`,()=>{console.log(`PeerJsChannel: connection closed with ${t}`),this.connections.delete(t),this.peerCards.delete(t),this._taskManagers.delete(t),this._updateConnectedPeersSignal()}),e.on(`error`,e=>{console.error(`PeerJsChannel: connection error with ${t}:`,e),this.connections.delete(t),this._updateConnectedPeersSignal(),window.dispatchEvent(new CustomEvent(`shadow-claw-peer-error`,{detail:{remotePeerId:t,error:e.message}}))}),e.on(`iceStateChanged`,e=>{(e===`failed`||e===`disconnected`||e===`closed`)&&(console.warn(`PeerJsChannel: ICE state changed to ${e} for ${t}`),this.connections.delete(t),this._updateConnectedPeersSignal())})}_handleTaskStatusNotification(e,t){if(!t||typeof t!=`object`)return;let n=t;if(n.status?.state&&h.has(n.status.state)){let t=`peer:${e}`;this._onTaskCompleteCallback?.(t)}window.dispatchEvent(new CustomEvent(`shadow-claw-task-status`,{detail:{remotePeerId:e,...n}}))}async _initPeer(){let{Peer:e}=await import(`./bundler-Ca-Xwln8.js`),t={},n=this.serverConfig.host??`0.peerjs.com`,r=this.serverConfig.port??443,i=this.serverConfig.path??`/`,a=this.serverConfig.secure??!0;t.host=n,t.port=r,t.path=i,t.secure=a,t.debug=3,t.config={iceServers:this.serverConfig.iceServers??[{urls:`stun:stun.l.google.com:19302`},{urls:`stun:stun1.l.google.com:19302`}]},this.peer=new e(this.myPeerId,t),this.peer.on(`open`,e=>{console.log(`PeerJsChannel: connected to signaling server, peer ID: ${e}`),this._reconnectAttempts=0}),this.peer.on(`connection`,e=>{this._handleIncomingConnection(e)}),this.peer.on(`error`,e=>{console.error(`PeerJsChannel: peer error [${e.type}]:`,e.message),(e.type===`peer-unavailable`||e.type===`unavailable-id`)&&window.dispatchEvent(new CustomEvent(`shadow-claw-peer-error`,{detail:{error:e.message}})),!(e.type===`peer-unavailable`||e.type===`network`||e.type===`disconnected`)&&e.type===`unavailable-id`&&console.warn(`PeerJsChannel: peer ID is already in use. Stop the channel and reconfigure.`)}),this.peer.on(`disconnected`,()=>{this.running&&this._scheduleReconnect()}),this.peer.on(`close`,()=>{console.log(`PeerJsChannel: peer closed`)})}_registerPendingRequest(e,t){let n=setTimeout(()=>{this._pendingRequests.delete(e),console.warn(`PeerJsChannel: JSON-RPC request ${e} timed out (10s)`)},1e4);this._pendingRequests.set(e,{resolve:t,timer:n})}_scheduleReconnect(){if(this._reconnectTimer!==null)return;let e=Math.min(i._RECONNECT_BASE_MS*2**this._reconnectAttempts,i._RECONNECT_MAX_MS);this._reconnectAttempts++,console.log(`PeerJsChannel: disconnected from signaling server, reconnecting in ${(e/1e3).toFixed(1)}s (attempt ${this._reconnectAttempts})`),this._reconnectTimer=setTimeout(()=>{if(this._reconnectTimer=null,this.running)try{this.peer?.reconnect?.()}catch{this._scheduleReconnect()}},e)}_sendJsonRpcError(e,t,n){let r=this.connections.get(e);if(!r)return;let i={jsonrpc:`2.0`,id:t,error:n};try{r.send(i)}catch{}}_trackSendProgress(e,t){return new Promise(n=>{let r=e._dc;if(!r||t===0){this.transferProgressSignal.set(null),n();return}this.transferProgressSignal.set({count:0,total:t,direction:`send`});let i=setInterval(()=>{let e=r.bufferedAmount,a=Math.max(0,t-e);this.transferProgressSignal.set({count:a,total:t,direction:`send`}),e===0&&(clearInterval(i),this.transferProgressSignal.set({count:t,total:t,direction:`send`}),setTimeout(()=>this.transferProgressSignal.set(null),1500),n())},80)})}_updateConnectedPeersSignal(){this.connectedPeersSignal.set(Array.from(this.connections.keys()))}_waitForOpen(e){return e.open?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>{n(Error(`Connection open timeout (5s)`))},5e3);e.on(`open`,()=>{clearTimeout(r),t()}),e.on(`error`,e=>{clearTimeout(r),n(e)})})}async _processInboundA2AEnvelope(e,t,n,r){let i=`peer:${e}`,a=``,s=[],c=[],l;for(let e of t)if(e.kind===`text`&&typeof e.text==`string`)a+=e.text;else if(e.kind===`file`){let t=e.name||`attachment`;if(this._inboundRemap.has(t)){let e=this._inboundRemap.get(t),n=t.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);a=a.replace(RegExp(`(!?\\[.*?\\])\\(${n}\\)`,`g`),`$1(${e})`),this._inboundRemap.delete(t),t=e}let n=t.split(`/`).pop()||`attachment`;s.push({fileName:n,mimeType:e.mimeType,path:t,size:e.size||0})}else e.kind===`a2ui`&&e.envelope?c.push(e.envelope):e.kind===`a2ui-action`&&e.action&&(l=e.action);a=a.trim(),!(!a&&s.length===0&&c.length===0&&!l)&&this.messageCallback?.({id:o(),groupId:i,sender:e,content:a,timestamp:Date.now(),channel:`peerjs`,attachments:s.length>0?s:void 0,a2uiEnvelopes:c.length>0?c:void 0,a2uiAction:l,taskId:n,contextId:r})}};function P(e){let t=[],n=/!?\[([^\]]*)\]\(([^)]+)\)/g,r,i=e;for(;(r=n.exec(e))!==null;){let e=r[1],n=F((r[2]||``).trim());n&&t.push({alt:e,path:n})}return{remainingText:i,attachments:t}}function F(e){if(!e)return null;let t=e.trim();if(/^[a-zA-Z][a-zA-Z\d+.-]*:/.test(t)||t.startsWith(`//`))return null;let n=t.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^\.\//,``);if(!n)return null;let r=n.split(`/`).filter(Boolean);return r.some(e=>e===`..`)?null:r.join(`/`)}export{f as a,l as i,M as n,u as o,b as r,N as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./config-CrHchneq.js";import{n as t}from"./txPromise-EBECky1b.js";import{t as n}from"./getConfig-D89uJgo5.js";async function r(r){let i=await n(await t(),e.PUSH_PROXY_URL);if(!i&&typeof localStorage<`u`)try{i=localStorage.getItem(e.PUSH_PROXY_URL)||void 0}catch{}if(!i)return r;let a=r.startsWith(`/`)?r:`/${r}`;return`${i.endsWith(`/`)?i.slice(0,-1):i}${a}`}function i(e,t={}){let n={...t};try{let t=typeof location<`u`?location.origin:`http://127.0.0.1:8888`,r=new URL(e,t).hostname.toLowerCase();r===`localhost`||r===`127.0.0.1`||r===`::1`||r===`[::1]`?n.targetAddressSpace=`loopback`:/^(10\.|172\.(1[6-9]|2\d|3[01])\.|192\.168\.)/.test(r)&&(n.targetAddressSpace=`private`)}catch{}return n}function a(e){let t=(e+`=`.repeat((4-e.length%4)%4)).replace(/-/g,`+`).replace(/_/g,`/`),n=atob(t);return Uint8Array.from([...n].map(e=>e.charCodeAt(0)))}async function o(){let e=await r(`/push/vapid-public-key`);return(await(await fetch(e,i(e))).json()).publicKey}async function s(){let e=await navigator.serviceWorker.ready,t=await o(),n=await e.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:a(t)}),s=await r(`/push/subscribe`);return await fetch(s,i(s,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n)})),n}async function c(){let e=await(await navigator.serviceWorker.ready).pushManager.getSubscription();if(!e)return;let{endpoint:t}=e;await e.unsubscribe();let n=await r(`/push/subscribe`);await fetch(n,i(n,{method:`DELETE`,headers:{"Content-Type":`application/json`},body:JSON.stringify({endpoint:t})}))}async function l(){return(await navigator.serviceWorker.ready).pushManager.getSubscription()}export{c as a,s as i,i as n,r,l as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(){function e(e){return e.replace(/^\/+|\/+$/g,``)}function t(t){let n=e(t);return n.endsWith(`/index.html`)?n=n.slice(0,-11):n.endsWith(`index.html`)&&(n=n.slice(0,-10)),e(n)}function n(t){let n=e(t),r=n.split(`/`).filter(Boolean);if(r.length===0)return null;let i=r[0].toLowerCase();if(i===`pages`){if(r.length>=3){let e=r[1];return{page:`pages`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e,path:r.slice(2).join(`/`)}}return{page:`pages`,groupId:`br:main`,path:r.slice(1).join(`/`)}}if(i===`files`){let e=r[1]||`main`;return{page:`files`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e,path:r.slice(2).join(`/`)||void 0}}if(i===`chat`){let e=r[1]||`main`;return{page:`chat`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e}}if(i===`tasks`){let e=r[1]||`main`;return{page:`tasks`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e}}return i===`main`?{page:`pages`,groupId:`br:main`,path:r.slice(1).join(`/`)}:{page:`pages`,groupId:`br:main`,path:n}}function r(){if(typeof document<`u`){let e=document.getElementById(`shadow-claw-static-routing`);if(e&&e.textContent)try{let t=JSON.parse(e.textContent);if(t&&typeof t==`object`&&t.routes)return t}catch(e){console.warn(`Failed to parse embedded static routing manifest:`,e)}}return null}function i(e,i){let a=i||r();if(!a||!a.routes)return null;let o=t(e);if(!o)return null;for(let[e,r]of Object.entries(a.routes))if(!(!r||!r.prettyPath)&&t(r.prettyPath)===o)return n(e);return null}function a(e){try{return decodeURIComponent(e)}catch{return e}}let o=null,s=new Set([`chat`,`files`,`tasks`,`pages`,`settings`,`tools`,`channels`]);function c(){o=null}typeof globalThis<`u`&&(globalThis.__applyBasePathCacheReset=c);function l(){let e=typeof window<`u`?window:typeof self<`u`?self:globalThis;if(e&&e.__SHADOWCLAW_DEPLOY_ID__){let t=String(e.__SHADOWCLAW_DEPLOY_ID__).trim();if(t)return t.replace(/[^a-zA-Z0-9_-]/g,`-`)}let t=globalThis.process;if(t&&t.env&&t.env.SHADOWCLAW_DEPLOY_ID){let e=String(t.env.SHADOWCLAW_DEPLOY_ID).trim();if(e)return e.replace(/[^a-zA-Z0-9_-]/g,`-`)}let n=u();return!n||n===`/`?``:n.replace(/^\/+|\/+$/g,``).replace(/[^a-zA-Z0-9_-]/g,`-`)}function u(){if(o!==null)return o;if((typeof window>`u`||globalThis.WorkerGlobalScope!==void 0&&typeof self<`u`&&self instanceof globalThis.WorkerGlobalScope)&&typeof self<`u`&&self.location){let e=(self.location.pathname||`/`).split(`/`).filter(Boolean);if(e.length<=1)return o=`/`,o;let t=e[0].toLowerCase(),n=t===`service-worker.js`||t===`sw.js`||t===`manifest.json`||t===`sitemap.xml`||t===`favicon.ico`||t===`index.html`||t===`service-worker`||t===`assets`||t===`dist`||t===`public`;if(n&&e.length===2)return o=`/`,o;if(!n)return o=`/`+e[0]+`/`,o}let e=typeof window<`u`&&window.location?window.location:typeof self<`u`&&self.location?self.location:null;if(!e)return`/`;if(typeof document<`u`&&typeof document.querySelector==`function`){let t=document.querySelector(`base[href]`);if(t){let n=t.getAttribute(`href`);if(n)try{let t=new URL(n,e.origin).pathname;return t.endsWith(`/`)||(t+=`/`),o=t,o}catch{}}}let t=e.pathname||`/`;if(t===`/`)return o=`/`,o;let n=t.split(`/`).filter(Boolean),r=n.findIndex(e=>s.has(e.toLowerCase()));return r>=0?r===0?(o=`/`,o):(o=`/`+n.slice(0,r).join(`/`)+`/`,o):i(t)?(o=`/`,o):n.length===1&&!t.includes(`.`)?(o=`/`+n[0]+`/`,o):(o=`/`,o)}function d(e){return e.replace(/^\/+|\/+$/g,``)}function f(e){return e&&(e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e)}function p(e){if(!e)return;let t=d(e.replace(/\\/g,`/`));if(!t)return;let n=t.split(`/`).filter(Boolean).filter(e=>e!==`.`&&e!==`..`);if(n.length!==0)return n.join(`/`)}function m(e){let t=e,n=u();n!==`/`&&t.startsWith(n)&&(t=`/`+t.slice(n.length));let r=t.split(`/`).filter(Boolean).map(e=>a(e));if(r.length<3||r[0]!==`files`)return null;let i=f(r[1])||r[1],o=p(r.slice(2).join(`/`));return!i||!o?null:{groupId:i,path:o}}let h=[`cdnjs.cloudflare.com`,`esm.sh`,`unpkg.com`,`cdn.jsdelivr.net`,`esm.run`,`huggingface.co`,`hf.co`,`hf-mirror.com`],g=[`openrouter.ai`,`router.huggingface.co`,`api-inference.huggingface.co`,`api.telegram.org`];function _(e,t){if(e.origin===t)return!0;let n=e.hostname.toLowerCase();
|
|
1
|
+
(function(){function e(e){return e.replace(/^\/+|\/+$/g,``)}function t(t){let n=e(t);return n.endsWith(`/index.html`)?n=n.slice(0,-11):n.endsWith(`index.html`)&&(n=n.slice(0,-10)),e(n)}function n(t){let n=e(t),r=n.split(`/`).filter(Boolean);if(r.length===0)return null;let i=r[0].toLowerCase();if(i===`pages`){if(r.length>=3){let e=r[1];return{page:`pages`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e,path:r.slice(2).join(`/`)}}return{page:`pages`,groupId:`br:main`,path:r.slice(1).join(`/`)}}if(i===`files`){let e=r[1]||`main`;return{page:`files`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e,path:r.slice(2).join(`/`)||void 0}}if(i===`chat`){let e=r[1]||`main`;return{page:`chat`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e}}if(i===`tasks`){let e=r[1]||`main`;return{page:`tasks`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e}}return i===`main`?{page:`pages`,groupId:`br:main`,path:r.slice(1).join(`/`)}:{page:`pages`,groupId:`br:main`,path:n}}function r(){if(typeof document<`u`){let e=document.getElementById(`shadow-claw-static-routing`);if(e&&e.textContent)try{let t=JSON.parse(e.textContent);if(t&&typeof t==`object`&&t.routes)return t}catch(e){console.warn(`Failed to parse embedded static routing manifest:`,e)}}return null}function i(e,i){let a=i||r();if(!a||!a.routes)return null;let o=t(e);if(!o)return null;for(let[e,r]of Object.entries(a.routes))if(!(!r||!r.prettyPath)&&t(r.prettyPath)===o)return n(e);return null}function a(e){try{return decodeURIComponent(e)}catch{return e}}let o=null,s=new Set([`chat`,`files`,`tasks`,`pages`,`settings`,`tools`,`channels`]);function c(){o=null}typeof globalThis<`u`&&(globalThis.__applyBasePathCacheReset=c);function l(){let e=typeof window<`u`?window:typeof self<`u`?self:globalThis;if(e&&e.__SHADOWCLAW_DEPLOY_ID__){let t=String(e.__SHADOWCLAW_DEPLOY_ID__).trim();if(t)return t.replace(/[^a-zA-Z0-9_-]/g,`-`)}let t=globalThis.process;if(t&&t.env&&t.env.SHADOWCLAW_DEPLOY_ID){let e=String(t.env.SHADOWCLAW_DEPLOY_ID).trim();if(e)return e.replace(/[^a-zA-Z0-9_-]/g,`-`)}let n=u();return!n||n===`/`?``:n.replace(/^\/+|\/+$/g,``).replace(/[^a-zA-Z0-9_-]/g,`-`)}function u(){if(o!==null)return o;if((typeof window>`u`||globalThis.WorkerGlobalScope!==void 0&&typeof self<`u`&&self instanceof globalThis.WorkerGlobalScope)&&typeof self<`u`&&self.location){let e=(self.location.pathname||`/`).split(`/`).filter(Boolean);if(e.length<=1)return o=`/`,o;let t=e[0].toLowerCase(),n=t===`service-worker.js`||t===`sw.js`||t===`manifest.json`||t===`sitemap.xml`||t===`favicon.ico`||t===`index.html`||t===`service-worker`||t===`assets`||t===`dist`||t===`public`;if(n&&e.length===2)return o=`/`,o;if(!n)return o=`/`+e[0]+`/`,o}let e=typeof window<`u`&&window.location?window.location:typeof self<`u`&&self.location?self.location:null;if(!e)return`/`;if(typeof document<`u`&&typeof document.querySelector==`function`){let t=document.querySelector(`base[href]`);if(t){let n=t.getAttribute(`href`);if(n)try{let t=new URL(n,e.origin).pathname;return t.endsWith(`/`)||(t+=`/`),o=t,o}catch{}}}let t=e.pathname||`/`;if(t===`/`)return o=`/`,o;let n=t.split(`/`).filter(Boolean),r=n.findIndex(e=>s.has(e.toLowerCase()));return r>=0?r===0?(o=`/`,o):(o=`/`+n.slice(0,r).join(`/`)+`/`,o):i(t)?(o=`/`,o):n.length===1&&!t.includes(`.`)?(o=`/`+n[0]+`/`,o):(o=`/`,o)}function d(e){return e.replace(/^\/+|\/+$/g,``)}function f(e){return e&&(e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e)}function p(e){if(!e)return;let t=d(e.replace(/\\/g,`/`));if(!t)return;let n=t.split(`/`).filter(Boolean).filter(e=>e!==`.`&&e!==`..`);if(n.length!==0)return n.join(`/`)}function m(e){let t=e,n=u();n!==`/`&&t.startsWith(n)&&(t=`/`+t.slice(n.length));let r=t.split(`/`).filter(Boolean).map(e=>a(e));if(r.length<3||r[0]!==`files`)return null;let i=f(r[1])||r[1],o=p(r.slice(2).join(`/`));return!i||!o?null:{groupId:i,path:o}}let h=[`cdnjs.cloudflare.com`,`esm.sh`,`unpkg.com`,`cdn.jsdelivr.net`,`esm.run`,`huggingface.co`,`hf.co`,`hf-mirror.com`],g=[`openrouter.ai`,`router.huggingface.co`,`api-inference.huggingface.co`,`api.telegram.org`];function _(e,t){if(e.origin===t)return!0;let n=e.hostname.toLowerCase();return!!(h.includes(n)||n.endsWith(`.huggingface.co`)||n.endsWith(`.hf.co`)||n.endsWith(`.hf-mirror.com`)||n.endsWith(`.esm.sh`)||n.endsWith(`.jsdelivr.net`)||g.includes(n)||n.endsWith(`.openrouter.ai`)||n===`localhost`||n===`127.0.0.1`||n===`::1`||n===`[::1]`||/^(10\.|172\.(1[6-9]|2\d|3[01])\.|192\.168\.)/.test(n))}let v=!1,y=`/proxy`,b={"3gp":`video/3gpp`,aac:`audio/aac`,apng:`image/apng`,avi:`video/x-msvideo`,avif:`image/avif`,bin:`application/octet-stream`,css:`text/css; charset=utf-8`,db:`application/vnd.sqlite3`,dll:`application/octet-stream`,dmg:`application/octet-stream`,dylib:`application/octet-stream`,exe:`application/vnd.microsoft.portable-executable`,flac:`audio/flac`,flv:`video/x-flv`,gif:`image/gif`,gz:`application/gzip`,heic:`image/heic`,heif:`image/heif`,htm:`text/html; charset=utf-8`,html:`text/html; charset=utf-8`,iso:`application/octet-stream`,jpeg:`image/jpeg`,jpg:`image/jpeg`,js:`application/javascript; charset=utf-8`,json:`application/json; charset=utf-8`,m4a:`audio/mp4`,m4v:`video/mp4`,mjs:`application/javascript; charset=utf-8`,mkv:`video/x-matroska`,mov:`video/mp4`,mp3:`audio/mpeg`,mp4:`video/mp4`,pdf:`application/pdf`,png:`image/png`,rar:`application/vnd.rar`,so:`application/octet-stream`,sqlite:`application/vnd.sqlite3`,sqlite3:`application/vnd.sqlite3`,svg:`image/svg+xml`,tar:`application/x-tar`,tif:`image/tiff`,tiff:`image/tiff`,ts:`video/mp2t`,txt:`text/plain; charset=utf-8`,wasm:`application/wasm`,wav:`audio/wav`,weba:`audio/webm`,webm:`video/webm`,webp:`image/webp`,wmv:`video/x-ms-wmv`,zip:`application/zip`};function x(e){let t=e.split(`.`).pop()?.toLowerCase()||``;return b[t]||`application/octet-stream`}function S(e){return!(e.method!==`GET`||e.mode===`navigate`||e.destination===`document`)}async function C(e,t){let n=navigator.storage;if(!n||typeof n.getDirectory!=`function`)return null;try{let r=await n.getDirectory(),i=l(),a=i?`shadowclaw-${i}`:`shadowclaw`,o=await(await r.getDirectoryHandle(a,{create:!0})).getDirectoryHandle(`groups`,{create:!0}),s=e.replace(/:/g,`-`),c=await o.getDirectoryHandle(s,{create:!1}),u=t.split(`/`).filter(Boolean);if(u.length===0)return null;let d=u.pop();if(!d)return null;let f=c;for(let e of u)f=await f.getDirectoryHandle(e,{create:!1});return await(await f.getFileHandle(d,{create:!1})).getFile()}catch{return null}}async function w(e){let t=m(new URL(e.url).pathname);if(!t||!S(e))return null;try{let e=await C(t.groupId,t.path);return e?new Response(e,{status:200,headers:{"Content-Type":e.type||x(t.path),"Content-Length":String(e.size),"Cache-Control":`no-store`,"Access-Control-Allow-Origin":`*`}}):null}catch{return null}}let T=!1,E=[];function D(){T=!0;for(let e of E)e();E=[]}self.clients.matchAll({type:`window`}).then(e=>{e.length===0?D():(e.forEach(e=>e.postMessage({type:`request-proxy-config`})),setTimeout(D,2e3))}),self.addEventListener(`message`,e=>{e.data?.type===`set-proxy-config`?(v=!!e.data.payload?.useProxy,y=e.data.payload?.proxyUrl||`/proxy`,console.log(`fetch proxy: config updated`,{useProxy:v,proxyUrl:y}),D()):e.data?.type===`set-use-proxy`&&(v=!!e.data.payload?.useProxy,D())}),self.addEventListener(`fetch`,e=>{let t=new URL(e.request.url);if(t.origin===location.origin&&m(t.pathname)&&S(e.request)){e.respondWith((async()=>await w(e.request)||fetch(e.request).catch(e=>(console.error(`fetch proxy fallback error:`,e),new Response(`Network error`,{status:502}))))());return}_(t,location.origin)||t.protocol.startsWith(`http`)&&e.respondWith((async()=>{if(T||await new Promise(e=>E.push(e)),!v)return fetch(e.request);try{let t={};e.request.headers.forEach((e,n)=>{t[n]=e});let n;if(e.request.method!==`GET`&&e.request.method!==`HEAD`)try{n=await e.request.clone().text()}catch(e){console.error(`fetch proxy: error reading body text:`,e)}let r=new URL(y,location.origin);r.pathname=(r.pathname.endsWith(`/`)?``:`/`)+`proxy/`+e.request.url;let i={method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({url:e.request.url,method:e.request.method,headers:t,body:n})},a=r.hostname.toLowerCase();return a===`localhost`||a===`127.0.0.1`||a===`::1`||a===`[::1]`?i.targetAddressSpace=`loopback`:/^(10\.|172\.(1[6-9]|2\d|3[01])\.|192\.168\.)/.test(a)&&(i.targetAddressSpace=`private`),await fetch(r.href,i)}catch(t){return console.error(`fetch proxy error:`,t),fetch(e.request).catch(e=>(console.error(`fetch proxy fallback error:`,e),new Response(`Network error`,{status:502})))}})())})})();
|
|
@@ -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:"ce317734e5be3db2648cd6aca335b838"},{url:"subsystems/channels/bindings/webrtc-datachannel/v1/index.css",revision:"84ea62c12532f5339a455f7da8e47048"},{url:"components/shadow-claw-tools/shadow-claw-tools.css",revision:"538a702063eb88dadccbccf46c51da92"},{url:"components/shadow-claw-toast/shadow-claw-toast.css",revision:"5ec1acbbc61b41803c9dcf62451df397"},{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:"aa05ff06a2da5b565fc37b8abd25caf9"},{url:"components/shadow-claw-file-viewer/shadow-claw-file-viewer.css",revision:"63f9489f50eeea4ddcfdfc2f8fab11d4"},{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:"f6e534a6023b143270e772c7ee6119a0"},{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:"a9ccd7350e0a7d38df119b8e3da98614"},{url:"404.html",revision:"465b683b06ff76a1a6d2d1b30658bfc9"},{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:"0513706596ace59be0264ddd5a75f9df"},{url:"pages/main/index.html",revision:"38e716481eecfdb88c3349562d815f10"},{url:"pages/main/~/docs/example/article.html",revision:"cb73f16b2098cf2e77db992b6b286805"},{url:"main/index.html",revision:"a9ccd7350e0a7d38df119b8e3da98614"},{url:"main/memory/index.html",revision:"cd5ff57f27fa0c558a80b84c06e10f68"},{url:"files/main/index.html",revision:"38e716481eecfdb88c3349562d815f10"},{url:"files/main/~/docs/example/article.html",revision:"cb73f16b2098cf2e77db992b6b286805"},{url:"docs/skill-creator/index.html",revision:"30d987a66853a09f045559db4dd88449"},{url:"docs/publishing/index.html",revision:"305c8d2a7376240a3990e5b76a61dcbb"},{url:"docs/example/article/index.html",revision:"87c5db8b459bec381640939bcaeb6a07"},{url:"components/shadow-claw-tools/shadow-claw-tools.html",revision:"ded34716fde770c62d98fc55ea3a90a3"},{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:"34ce16a00090f278b14be7a73e6915a2"},{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:"605562727a3d51c03ebdb0e209c93ed5"},{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:"95b9e07a871d78f646fc0778c803e23b"},{url:"manifest.json",revision:"37fbcc968787b25508d134f0e9a450ec"},{url:"writer-DxE1imv0.js",revision:"9060e6fd0f833d96fcdfdfead8a17a53"},{url:"writer-CD9oN2pq.js",revision:"7e3e5dbe762d5517a7bba9fb52f899e5"},{url:"webllm-CHN5H-Sy.js",revision:"66a060e91915d6e1a701d9e3d0724a87"},{url:"webllm-BDMz9yZR.js",revision:"86ffb13f1b7691d5d39b7a44210761ba"},{url:"ulid-BY7rQVLN.js",revision:"e1f3add55342551fd82b63ca9c9fa3ed"},{url:"txPromise-EBECky1b.js",revision:"68ed6c191afed31ac1c998e0b8f2b508"},{url:"translator-DEQXb7ZL.js",revision:"4cad7698da803b6aea92decde28bb975"},{url:"translator-B-3qYqN5.js",revision:"5e61b3f704ed7e0f77a748b9bfec1bd5"},{url:"transformers-js.worker.js",revision:"91bfe6c1d35c6c130eef161b6778fd56"},{url:"transformers-D6p2onvB.js",revision:"aff41eecf51876bbd7f8dda3134de021"},{url:"transformers-BhQMWQG5.js",revision:"2fccf1f04a71682215867ed1900ab0d0"},{url:"toast-D3gxhZpN.js",revision:"0f0bcdab5c09f31a773326a18b285d43"},{url:"toast-60iDlgiH.js",revision:"f0c403a1edcaf400f3dbaaedd9de02c9"},{url:"theme-init.js",revision:"0940b3e69e4fa4de11c94907f3372daf"},{url:"syncWebMcpRegistration-B_M2fCjH.js",revision:"dd60e3cc90ec67dbd55766aee813ab7e"},{url:"summarizer-VJNr-7xG.js",revision:"a0147a995a2ff494830f8c5aa3757cb7"},{url:"summarizer-BV_Oq6Xe.js",revision:"92698a77c4846bf98e6a2488de9a4dc4"},{url:"shadow-claw-webvm-BCS8ykeP.js",revision:"2d75f5f6450599b2224eb7be432127f9"},{url:"shadow-claw-tools-BfJx3A9W.js",revision:"5d2ce2c7ef9c457db1fb67c052f77499"},{url:"shadow-claw-toast-B9hcLfjz.js",revision:"420062bbc1f424442db9dd1e51e86869"},{url:"shadow-claw-terminal-Beb5qF-U.js",revision:"aee5595de67d583229a7070bb4ea9149"},{url:"shadow-claw-tasks-Caxc9atL.js",revision:"d18995391ab593b39650d642d9fd824e"},{url:"shadow-claw-task-server-3BIeb5oZ.js",revision:"993da8f81a51eafd04f4ba3118df45f8"},{url:"shadow-claw-storage-BFynbP0j.js",revision:"751f4963050ee3922248854557fe7bea"},{url:"shadow-claw-settings-DhxrKIfA.js",revision:"f1b25880537e6a39c2a952a5b8d44354"},{url:"shadow-claw-pdf-viewer-gOiW-_Bh.js",revision:"e84932e68c4b1a60d8d72b37cfc1c920"},{url:"shadow-claw-pages-DFZHhzFZ.js",revision:"f70dff25d9d9a8858eee02fc7c8787b6"},{url:"shadow-claw-page-header-action-button-Bmua3mAb.js",revision:"2e4b1fc665cfcf6a51510a08ba0a5da0"},{url:"shadow-claw-page-header-DMKbkv3s.js",revision:"157d0e0570f901d033aed031bb6d760d"},{url:"shadow-claw-notifications-YyHOK2Fr.js",revision:"7b367a5e2cd4ec8b02f61422854cc71e"},{url:"shadow-claw-networking-qHbP95z9.js",revision:"65759838d0f8396ddb6b346166469240"},{url:"shadow-claw-mcp-remote-kY4LMFNN.js",revision:"e1cc9f5d5570775acaea46183aa728f1"},{url:"shadow-claw-llm-GWgoVfhI.js",revision:"488115dd22c28644b3b5cfde2ad83b5f"},{url:"shadow-claw-integrations-D7ufpwhX.js",revision:"c914d07ac9d925ec2b85c6db7823230d"},{url:"shadow-claw-git-v8S0JjuR.js",revision:"c8e988254a34e9401c165a4b97c536cd"},{url:"shadow-claw-files-CYySBDCl.js",revision:"9a5a3b3d957b938bcb96bbf1b431557e"},{url:"shadow-claw-file-viewer-Blf6yGVD.js",revision:"fd6a844137549f62bf217c9595d8e40d"},{url:"shadow-claw-empty-state-obMInUIf.js",revision:"9638cf849e610882d52f430a007b0ce6"},{url:"shadow-claw-element-DIrv3P6A.js",revision:"740ad3d06fc485e6ab3d815d996036ee"},{url:"shadow-claw-dialog-BrOwAOdk.js",revision:"cef105280f387f95d4763386497c3de9"},{url:"shadow-claw-conversations-_9qAaRXk.js",revision:"4634c633b21f320a17c78ad3fa140713"},{url:"shadow-claw-control-plane-CX1IGbh9.js",revision:"969661595cc1c83dcdc2b2e356460182"},{url:"shadow-claw-chat-Crv0DTCY.js",revision:"c90b52b7943cb10d685685ef41020dcb"},{url:"shadow-claw-channels-BDWG5Qa3.js",revision:"3ea2018db0471287df1db9e3fccd741c"},{url:"shadow-claw-card-DCxWEHgX.js",revision:"16fb58ffeced559d6ae06ad22dc83449"},{url:"shadow-claw-accounts-B4sBTQEj.js",revision:"942c40f2f9e6d687002ce3e3df17e5b4"},{url:"shadow-claw-CbwETBWf.js",revision:"45a46b85abf4f82980747f3c7f20f322"},{url:"setConfig-DFMYnYLE.js",revision:"d56a0db494ca06686fbc49c0006b6627"},{url:"rolldown-runtime-aKtaBQYM.js",revision:"fe1c45aeeb5cda97a4081341cf8c64f0"},{url:"rewriter-j6D9LDER.js",revision:"2a6e7c883707dcfc9df9d522525267e8"},{url:"rewriter-DL7u2Z8W.js",revision:"a5fee6aa5d8dcac4451c455834e278bc"},{url:"push-client-CrjEXK3U.js",revision:"16cde5173bf9517365f1ab8732cf04f8"},{url:"prompt-utils-DpfOVJQv-DorZAfZa.js",revision:"8d5a0482b00cf39c6d8ba0096bbce45e"},{url:"prompt-api-polyfill-Dl1kbJhR.js",revision:"842d74a9e41add1c72ac3ccebf435c0b"},{url:"prompt-api-polyfill-BBORqGSw.js",revision:"04f2a69a08477549196c9e6ad70efabe"},{url:"prompt-api-OUOP-B-R.js",revision:"668dec7b318ba116659a49a0648c8a28"},{url:"peerjs-BP4laMXj.js",revision:"09e8fabe562a6beb8b10415a14d7bfa9"},{url:"pdf.worker.js",revision:"b169314e56c737213dba6418ab0b6512"},{url:"parseConfigBoolean-ByjZr9OM.js",revision:"3c1af0a9fb09aac85793c7e514ecd9c8"},{url:"orchestrator-nJj59RqD.js",revision:"5638f3c3ea1abecd291102ac4fb67345"},{url:"orchestrator-3h9xxHUm.js",revision:"61cf35dd0bd1784962fbcd3643a5a2ac"},{url:"openai-DMG0vGCO.js",revision:"df9e8ac844b0d28349f23e0cfe7f5850"},{url:"openai-Bpd71Oja.js",revision:"61d214a51390cc136e218582bf6fc62a"},{url:"model-ranking-C60HgQ2c.js",revision:"1d4e60595bf418902c8845d595dea242"},{url:"memoryStorage-C0KvLNUp.js",revision:"c4a372382d9fe9bd4fb43dc2f510ecf4"},{url:"mcp-reconnect-9emsqGRe.js",revision:"6f24866cb60c4796afbbbccaaba0195c"},{url:"markdown-BnpKxSxl.js",revision:"0fa3836b002954950aed8dc3b6f203a0"},{url:"language-detector-IQm4FUqH.js",revision:"f62880138d8955b3699f8d051ff524fe"},{url:"language-detector-BRKrlra0.js",revision:"0c2ed270708b22bf374afe4e8697548d"},{url:"initControlPlane-C9jpnWev.js",revision:"6d151b6be4a2d339688d3ff128bf1af7"},{url:"initChatSplitResize-CzV2E7Ul.js",revision:"d71f1f7a74c4b42b91afc88cabe008a3"},{url:"index.js",revision:"771326262c9bb3b3d2a6aaf72974944f"},{url:"iframe-storage-proxy-B9Zt-vJ2.js",revision:"2c6289506d6c55854d14f4fa5a5ecddb"},{url:"iframe-sanitizer-y2Z1pPwY.js",revision:"c7c68ab0162c4bd3907602b25273dcd1"},{url:"git-CkhCJonj.js",revision:"fc1dfbe2ca654d4cc7feb7a949db656d"},{url:"git-7Vq_SJSp.js",revision:"efb8740c40346fc58b5f6dd5f543b13a"},{url:"getGroupDir-P1h9wl6S.js",revision:"a2c16cde82f4c9009795ad0a583d36da"},{url:"getConfig-D89uJgo5.js",revision:"8dee86ba2f1a33b29fa5240540c047ad"},{url:"getAllTasks-vpBlgGsc.js",revision:"08c22a4197deb6e39e6ec3fce337a5a4"},{url:"gemini-C4EOz8c4.js",revision:"92e9e18cb67f66af84aad790ccf35762"},{url:"firebase-OSDX3viP.js",revision:"b48e4e86381947b06c187bf821c5e42f"},{url:"firebase-BKi8D3q5.js",revision:"114f1f181b229e8b46a8be3c0abeb3a1"},{url:"file-viewer-D0eflgt6.js",revision:"bfb27a3643de87342642b27d9525c3a6"},{url:"effect-BEsuusE8.js",revision:"a70669e11d9beb90b531e580dee72a81"},{url:"e2e-bridge-IGWsRl4i.js",revision:"d48b60ede062143845d464862ecbe337"},{url:"downloadGroupFile-By0GR6eV.js",revision:"25483a4864b50194c2c87de4042c7222"},{url:"dist-DUy1CvmT.js",revision:"8f723f5280a9a0153814b2010a389dea"},{url:"defaults-DwNb0lWM-Drx4e34U.js",revision:"07f566607c044acac4fce8fb133d7837"},{url:"custom-element-security-NCqQ5lmC.js",revision:"380a61d521e856e6ea1fb1a17fa5ddcc"},{url:"crypto-C8c5wMzN.js",revision:"2e4e24021e870c5fda72a84c0875677b"},{url:"constants-DiETpg52.js",revision:"c9f220286288beca5e353a2ac1b9d7a4"},{url:"constants-7AKqaY3G.js",revision:"14a4da9d0dc8fb65f4cf9608e7782970"},{url:"connections-DvbgdkaB.js",revision:"7ec97858ab1c56048b4636279870db46"},{url:"configurePeerJs-CxpZeDJJ.js",revision:"9820840a8aaf821e9b91e906a778d1da"},{url:"config-value-oBfKgLT4.js",revision:"c93acb2ff0551e778e8dcd7d4fc79d1c"},{url:"config-CrHchneq.js",revision:"bec45eb2b69a56deb4cfb16e8b3f857e"},{url:"bundler-Ca-Xwln8.js",revision:"e5384a2db390254a5a4664ae2972163e"},{url:"buffer-9oRIc-5Z.js",revision:"5f8bcab43db1e23f92aae427e03fbb5a"},{url:"browser-nBz_r6l4.js",revision:"e7d5c0309995473bf0dd730d3575a102"},{url:"base-task-model-CYkpwnvU-DDfHUUIS.js",revision:"4fe8a137da9d73cb45ef71873c8c36b6"},{url:"base-task-model-CYkpwnvU-CLmOqgI_.js",revision:"c5cd6a3e5e1cf4770aa169b54f550fc3"},{url:"backup-controller-C_s9in2t.js",revision:"4a969ea8c6621056f46fb0b641e87ca2"},{url:"app-routes-Bs-riIvr.js",revision:"62ddbf31db8629c8325b7389646394a3"},{url:"agent.worker.js",revision:"22eb437d8c4b27a0530af61278302e9d"},{url:"assets/iframe-storage-bridge.js",revision:"63df93333e520c84c9850ec0371894bd"},{url:"assets/file-viewer-preview-bridge.js",revision:"2c82c9cbe0d1a0554952c9b4f237b613"},{url:"assets/screenshots/shadow-claw-screenshot-731x1045.png",revision:"f3b9e801298660c14976d22f20a0c243"},{url:"assets/screenshots/shadow-claw-screenshot-1920x1052.png",revision:"16f391d0bbc913ec5aa239c8d577c7a4"},{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})=>{if(e.pathname.startsWith("/assets/v86.9pfs/"))return!1;const a=e.hostname.toLowerCase();if("huggingface.co"===a||a.endsWith(".huggingface.co")||a.endsWith(".hf.co")||"hf.co"===a||"hf-mirror.com"===a||a.endsWith(".hf-mirror.com")||"cdnjs.cloudflare.com"===a||"esm.sh"===a||a.endsWith(".esm.sh")||"unpkg.com"===a||"cdn.jsdelivr.net"===a||a.endsWith(".jsdelivr.net")||"esm.run"===a||"openrouter.ai"===a||a.endsWith(".openrouter.ai")||"api.telegram.org"===a)return!1;const s="localhost"===a||"127.0.0.1"===a,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!(s&&o)},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:"ce317734e5be3db2648cd6aca335b838"},{url:"subsystems/channels/bindings/webrtc-datachannel/v1/index.css",revision:"84ea62c12532f5339a455f7da8e47048"},{url:"components/shadow-claw-tools/shadow-claw-tools.css",revision:"538a702063eb88dadccbccf46c51da92"},{url:"components/shadow-claw-toast/shadow-claw-toast.css",revision:"5ec1acbbc61b41803c9dcf62451df397"},{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:"aa05ff06a2da5b565fc37b8abd25caf9"},{url:"components/shadow-claw-file-viewer/shadow-claw-file-viewer.css",revision:"63f9489f50eeea4ddcfdfc2f8fab11d4"},{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:"f6e534a6023b143270e772c7ee6119a0"},{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:"adf691e4bf96b4f0ab722db8ac011267"},{url:"404.html",revision:"465b683b06ff76a1a6d2d1b30658bfc9"},{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:"0513706596ace59be0264ddd5a75f9df"},{url:"pages/main/index.html",revision:"38e716481eecfdb88c3349562d815f10"},{url:"pages/main/~/docs/example/article.html",revision:"cb73f16b2098cf2e77db992b6b286805"},{url:"main/index.html",revision:"adf691e4bf96b4f0ab722db8ac011267"},{url:"main/memory/index.html",revision:"41bab878397008aee954ce0d94909a59"},{url:"files/main/index.html",revision:"38e716481eecfdb88c3349562d815f10"},{url:"files/main/~/docs/example/article.html",revision:"cb73f16b2098cf2e77db992b6b286805"},{url:"docs/skill-creator/index.html",revision:"ecb288f09b34f1246d0a4db80167d3e9"},{url:"docs/publishing/index.html",revision:"b27b4b1811851b2227883cbda27b34cf"},{url:"docs/example/article/index.html",revision:"494384c18f7b288cfc2ca4d737ac5719"},{url:"components/shadow-claw-tools/shadow-claw-tools.html",revision:"ded34716fde770c62d98fc55ea3a90a3"},{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:"34ce16a00090f278b14be7a73e6915a2"},{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:"605562727a3d51c03ebdb0e209c93ed5"},{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:"95b9e07a871d78f646fc0778c803e23b"},{url:"manifest.json",revision:"37fbcc968787b25508d134f0e9a450ec"},{url:"writer-DxE1imv0.js",revision:"9060e6fd0f833d96fcdfdfead8a17a53"},{url:"writer-CD9oN2pq.js",revision:"7e3e5dbe762d5517a7bba9fb52f899e5"},{url:"webllm-CHN5H-Sy.js",revision:"66a060e91915d6e1a701d9e3d0724a87"},{url:"webllm-BDMz9yZR.js",revision:"86ffb13f1b7691d5d39b7a44210761ba"},{url:"ulid-BY7rQVLN.js",revision:"e1f3add55342551fd82b63ca9c9fa3ed"},{url:"txPromise-EBECky1b.js",revision:"68ed6c191afed31ac1c998e0b8f2b508"},{url:"translator-DEQXb7ZL.js",revision:"4cad7698da803b6aea92decde28bb975"},{url:"translator-B-3qYqN5.js",revision:"5e61b3f704ed7e0f77a748b9bfec1bd5"},{url:"transformers-js.worker.js",revision:"91bfe6c1d35c6c130eef161b6778fd56"},{url:"transformers-D6p2onvB.js",revision:"aff41eecf51876bbd7f8dda3134de021"},{url:"transformers-BhQMWQG5.js",revision:"2fccf1f04a71682215867ed1900ab0d0"},{url:"toast-D3gxhZpN.js",revision:"0f0bcdab5c09f31a773326a18b285d43"},{url:"toast-60iDlgiH.js",revision:"f0c403a1edcaf400f3dbaaedd9de02c9"},{url:"theme-init.js",revision:"0940b3e69e4fa4de11c94907f3372daf"},{url:"syncWebMcpRegistration-DzC80wVG.js",revision:"6d1d26add5bb9b6eb2bff1a63a883f8b"},{url:"summarizer-VJNr-7xG.js",revision:"a0147a995a2ff494830f8c5aa3757cb7"},{url:"summarizer-BV_Oq6Xe.js",revision:"92698a77c4846bf98e6a2488de9a4dc4"},{url:"shadow-claw-webvm-CIuSywD_.js",revision:"a6d1f0c04dce3e6277810020cf13b1af"},{url:"shadow-claw-tools-t3Qq4TDO.js",revision:"06894a93d580642415f2cad0f01526c2"},{url:"shadow-claw-toast-B9hcLfjz.js",revision:"420062bbc1f424442db9dd1e51e86869"},{url:"shadow-claw-terminal-Dmtr9KY1.js",revision:"6979d851880e57d4262305cda095a19a"},{url:"shadow-claw-tasks-Czx6Ucf5.js",revision:"d587fad248c8a50f417a9efae025effb"},{url:"shadow-claw-task-server-CKm_Ennl.js",revision:"dc8b6d04bf3806c4c66a35c69f6105cc"},{url:"shadow-claw-storage-Crs6LY15.js",revision:"096f484f4c4828a62344dce7d7f714db"},{url:"shadow-claw-settings-BZWrAoQA.js",revision:"80ec722d5e691ce8b5d824bbfdd50271"},{url:"shadow-claw-pdf-viewer-gOiW-_Bh.js",revision:"e84932e68c4b1a60d8d72b37cfc1c920"},{url:"shadow-claw-pages-BWSE91I1.js",revision:"d03103799ae8e12233ea94531eea5706"},{url:"shadow-claw-page-header-action-button-Bmua3mAb.js",revision:"2e4b1fc665cfcf6a51510a08ba0a5da0"},{url:"shadow-claw-page-header-DMKbkv3s.js",revision:"157d0e0570f901d033aed031bb6d760d"},{url:"shadow-claw-notifications-BkxuDEQI.js",revision:"3e4545b311e79f24f43999f2e33d9e56"},{url:"shadow-claw-networking-e0EarDVs.js",revision:"26e251803799192d47fc0be9b45aa906"},{url:"shadow-claw-mcp-remote-kY4LMFNN.js",revision:"e1cc9f5d5570775acaea46183aa728f1"},{url:"shadow-claw-llm-CfeDBZKB.js",revision:"c62b6ad2ca7d8a8b4a3bdbfa852c357f"},{url:"shadow-claw-integrations-D7ufpwhX.js",revision:"c914d07ac9d925ec2b85c6db7823230d"},{url:"shadow-claw-git-DD7iQRxq.js",revision:"f87d04756b7fbf40879e846944da1ebb"},{url:"shadow-claw-files-Bx4v0Ggp.js",revision:"c06b810dfb1abfc6fb1b1b15d5590e7c"},{url:"shadow-claw-file-viewer-AZfG4D-u.js",revision:"85e23a532d0e878053bb84146c0f8222"},{url:"shadow-claw-empty-state-obMInUIf.js",revision:"9638cf849e610882d52f430a007b0ce6"},{url:"shadow-claw-element-DIrv3P6A.js",revision:"740ad3d06fc485e6ab3d815d996036ee"},{url:"shadow-claw-dialog-BrOwAOdk.js",revision:"cef105280f387f95d4763386497c3de9"},{url:"shadow-claw-conversations-0Q-VC_7N.js",revision:"c0edf7203aa31bcb2c8e89385a0b8e41"},{url:"shadow-claw-control-plane-C0lSxLpW.js",revision:"6b0e49070eba237046604274326a7428"},{url:"shadow-claw-chat-BN85a1xk.js",revision:"55c74fdc0bb5e20ee0d94115280c7455"},{url:"shadow-claw-channels-mY-JMvib.js",revision:"159468c7a187ef7f71409ab7c1d8a5d3"},{url:"shadow-claw-card-DCxWEHgX.js",revision:"16fb58ffeced559d6ae06ad22dc83449"},{url:"shadow-claw-accounts-B4sBTQEj.js",revision:"942c40f2f9e6d687002ce3e3df17e5b4"},{url:"shadow-claw-CUbhMmcB.js",revision:"ed40c324efcec9a6110f4b2955d0643c"},{url:"setConfig-DFMYnYLE.js",revision:"d56a0db494ca06686fbc49c0006b6627"},{url:"rolldown-runtime-aKtaBQYM.js",revision:"fe1c45aeeb5cda97a4081341cf8c64f0"},{url:"rewriter-j6D9LDER.js",revision:"2a6e7c883707dcfc9df9d522525267e8"},{url:"rewriter-DL7u2Z8W.js",revision:"a5fee6aa5d8dcac4451c455834e278bc"},{url:"push-client-D0lkwrK0.js",revision:"c518bb943270e966d939dc085a602156"},{url:"prompt-utils-DpfOVJQv-DorZAfZa.js",revision:"8d5a0482b00cf39c6d8ba0096bbce45e"},{url:"prompt-api-polyfill-Dl1kbJhR.js",revision:"842d74a9e41add1c72ac3ccebf435c0b"},{url:"prompt-api-polyfill-BBORqGSw.js",revision:"04f2a69a08477549196c9e6ad70efabe"},{url:"prompt-api-OUOP-B-R.js",revision:"668dec7b318ba116659a49a0648c8a28"},{url:"peerjs-CuSJUH-r.js",revision:"821f6276bd23e68e4f10d85a65b9aeae"},{url:"pdf.worker.js",revision:"b169314e56c737213dba6418ab0b6512"},{url:"parseConfigBoolean-ByjZr9OM.js",revision:"3c1af0a9fb09aac85793c7e514ecd9c8"},{url:"orchestrator-tHWrqi_F.js",revision:"f48199c1eb00b80e2d18b85c6d6dd34e"},{url:"orchestrator-CnwkoBpe.js",revision:"33c2e557978573ddc9f7d6d77f89e4a1"},{url:"openai-DMG0vGCO.js",revision:"df9e8ac844b0d28349f23e0cfe7f5850"},{url:"openai-Bpd71Oja.js",revision:"61d214a51390cc136e218582bf6fc62a"},{url:"model-ranking-C60HgQ2c.js",revision:"1d4e60595bf418902c8845d595dea242"},{url:"memoryStorage-C0KvLNUp.js",revision:"c4a372382d9fe9bd4fb43dc2f510ecf4"},{url:"mcp-reconnect-9emsqGRe.js",revision:"6f24866cb60c4796afbbbccaaba0195c"},{url:"markdown-SiFq0PTy.js",revision:"f47cbaafc66769ba73eb8b5810bf3963"},{url:"language-detector-IQm4FUqH.js",revision:"f62880138d8955b3699f8d051ff524fe"},{url:"language-detector-BRKrlra0.js",revision:"0c2ed270708b22bf374afe4e8697548d"},{url:"initControlPlane-D5kHKcB5.js",revision:"e73f24221a857668c53414c190d5ccad"},{url:"initChatSplitResize-CzV2E7Ul.js",revision:"d71f1f7a74c4b42b91afc88cabe008a3"},{url:"index.js",revision:"33544a3380cfcce0bd53872f2ec3fcd4"},{url:"iframe-storage-proxy-B9Zt-vJ2.js",revision:"2c6289506d6c55854d14f4fa5a5ecddb"},{url:"iframe-sanitizer-y2Z1pPwY.js",revision:"c7c68ab0162c4bd3907602b25273dcd1"},{url:"git-CkhCJonj.js",revision:"fc1dfbe2ca654d4cc7feb7a949db656d"},{url:"git-7Vq_SJSp.js",revision:"efb8740c40346fc58b5f6dd5f543b13a"},{url:"getGroupDir-P1h9wl6S.js",revision:"a2c16cde82f4c9009795ad0a583d36da"},{url:"getConfig-D89uJgo5.js",revision:"8dee86ba2f1a33b29fa5240540c047ad"},{url:"getAllTasks-vpBlgGsc.js",revision:"08c22a4197deb6e39e6ec3fce337a5a4"},{url:"gemini-C4EOz8c4.js",revision:"92e9e18cb67f66af84aad790ccf35762"},{url:"firebase-OSDX3viP.js",revision:"b48e4e86381947b06c187bf821c5e42f"},{url:"firebase-BKi8D3q5.js",revision:"114f1f181b229e8b46a8be3c0abeb3a1"},{url:"file-viewer-BVg3B_JH.js",revision:"fafd7b4bb0ce755ec31f9c2f1e317ad4"},{url:"effect-BEsuusE8.js",revision:"a70669e11d9beb90b531e580dee72a81"},{url:"e2e-bridge-D28tOggc.js",revision:"aff540b472d55b93d4e3994115565e3b"},{url:"downloadGroupFile-9niHBj9n.js",revision:"b59325140eeef03ca904569fdcc9bea5"},{url:"dist-DUy1CvmT.js",revision:"8f723f5280a9a0153814b2010a389dea"},{url:"defaults-DwNb0lWM-Drx4e34U.js",revision:"07f566607c044acac4fce8fb133d7837"},{url:"custom-element-security-NCqQ5lmC.js",revision:"380a61d521e856e6ea1fb1a17fa5ddcc"},{url:"crypto-C8c5wMzN.js",revision:"2e4e24021e870c5fda72a84c0875677b"},{url:"constants-DiETpg52.js",revision:"c9f220286288beca5e353a2ac1b9d7a4"},{url:"constants-7AKqaY3G.js",revision:"14a4da9d0dc8fb65f4cf9608e7782970"},{url:"connections-DvbgdkaB.js",revision:"7ec97858ab1c56048b4636279870db46"},{url:"configurePeerJs-UfQ6HUlv.js",revision:"4872d6893b82220883f6de3ba127cedb"},{url:"config-value-oBfKgLT4.js",revision:"c93acb2ff0551e778e8dcd7d4fc79d1c"},{url:"config-CrHchneq.js",revision:"bec45eb2b69a56deb4cfb16e8b3f857e"},{url:"bundler-Ca-Xwln8.js",revision:"e5384a2db390254a5a4664ae2972163e"},{url:"buffer-9oRIc-5Z.js",revision:"5f8bcab43db1e23f92aae427e03fbb5a"},{url:"browser-nBz_r6l4.js",revision:"e7d5c0309995473bf0dd730d3575a102"},{url:"base-task-model-CYkpwnvU-DDfHUUIS.js",revision:"4fe8a137da9d73cb45ef71873c8c36b6"},{url:"base-task-model-CYkpwnvU-CLmOqgI_.js",revision:"c5cd6a3e5e1cf4770aa169b54f550fc3"},{url:"backup-controller-CvzDOq4T.js",revision:"bc3e84fcc8df8c5d18ed903487df3d83"},{url:"app-routes-Bs-riIvr.js",revision:"62ddbf31db8629c8325b7389646394a3"},{url:"agent.worker.js",revision:"7600a6c175fbbdc21f00953cc0927cf1"},{url:"assets/iframe-storage-bridge.js",revision:"63df93333e520c84c9850ec0371894bd"},{url:"assets/file-viewer-preview-bridge.js",revision:"2c82c9cbe0d1a0554952c9b4f237b613"},{url:"assets/screenshots/shadow-claw-screenshot-731x1045.png",revision:"f3b9e801298660c14976d22f20a0c243"},{url:"assets/screenshots/shadow-claw-screenshot-1920x1052.png",revision:"16f391d0bbc913ec5aa239c8d577c7a4"},{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})=>{if(e.pathname.startsWith("/assets/v86.9pfs/"))return!1;const a=e.hostname.toLowerCase();if("huggingface.co"===a||a.endsWith(".huggingface.co")||a.endsWith(".hf.co")||"hf.co"===a||"hf-mirror.com"===a||a.endsWith(".hf-mirror.com")||"cdnjs.cloudflare.com"===a||"esm.sh"===a||a.endsWith(".esm.sh")||"unpkg.com"===a||"cdn.jsdelivr.net"===a||a.endsWith(".jsdelivr.net")||"esm.run"===a||"openrouter.ai"===a||a.endsWith(".openrouter.ai")||"api.telegram.org"===a)return!1;const s="localhost"===a||"127.0.0.1"===a,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!(s&&o)},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-CrHchneq.js";import{l as t,n,r,s as i}from"./app-routes-Bs-riIvr.js";import{r as a}from"./txPromise-EBECky1b.js";import{t as o}from"./getConfig-D89uJgo5.js";import{n as s}from"./toast-60iDlgiH.js";import{Dn as c,R as l,Zt as u,a as d,c as f,lt as p,o as m,sn as h,st as g,t as _,vt as v,w as ee,xt as y}from"./orchestrator-3h9xxHUm.js";import{t as te}from"./setConfig-DFMYnYLE.js";import{t as ne}from"./ulid-BY7rQVLN.js";import{r as b,t as x}from"./toast-D3gxhZpN.js";import{n as re,r as ie,t as ae}from"./constants-DiETpg52.js";import{t as oe}from"./shadow-claw-element-DIrv3P6A.js";import{t as S}from"./effect-BEsuusE8.js";import{t as se}from"./prompt-api-OUOP-B-R.js";import{t as C}from"./configurePeerJs-CxpZeDJJ.js";import{t as w}from"./file-viewer-D0eflgt6.js";import{t as ce}from"./parseConfigBoolean-ByjZr9OM.js";const T={Light:`light`,Dark:`dark`,System:`system`},E=`shadow-claw-theme`;function le(){return typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`}function D(e){return e===`system`?le():e}function O(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 k=d(E)||`system`,A=D(k);O(A);const j=new class{_resolved;_theme;constructor(){this._theme=new s.State(k),this._resolved=new s.State(A)}getTheme(){return{theme:this.theme,resolved:this.resolved}}init(){typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-color-scheme: dark)`).addEventListener(`change`,()=>{let e=le();f(E,`system`),O(e),this._theme.set(`system`),this._resolved.set(e)}),window.addEventListener(`storage`,e=>{let t=m(E);e.key===t&&e.newValue&&this.setTheme(e.newValue)})}get resolved(){return this._resolved.get()}setTheme(e){let t=D(e);f(E,e),O(t),this._theme.set(e),this._resolved.set(t)}get theme(){return this._theme.get()}};j.init();async function M(e,t=3){for(let n=0;n<t;n++){if(e())return;await new Promise(e=>{requestAnimationFrame(()=>e())})}}function N(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 ue(e,t,n){return n&&t===`pages`?N(e):t}function de(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 fe(e,t,n,r){let i=n;if(!i)return;let a=de(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 pe={pages:()=>import(`./shadow-claw-pages-DFZHhzFZ.js`),chat:()=>import(`./shadow-claw-chat-Crv0DTCY.js`),tasks:()=>import(`./shadow-claw-tasks-Caxc9atL.js`),files:()=>import(`./shadow-claw-files-CYySBDCl.js`),settings:()=>import(`./shadow-claw-settings-DhxrKIfA.js`),tools:()=>import(`./shadow-claw-tools-BfJx3A9W.js`),channels:()=>import(`./shadow-claw-channels-BDWG5Qa3.js`),terminal:()=>import(`./shadow-claw-terminal-Beb5qF-U.js`),"file-viewer":()=>import(`./shadow-claw-file-viewer-Blf6yGVD.js`),"pdf-viewer":()=>import(`./shadow-claw-pdf-viewer-gOiW-_Bh.js`)},P=new Map;async function F(e){let t=P.get(e);if(!t){let n=pe[e];n?(t=n().then(()=>void 0),P.set(e,t)):t=Promise.resolve()}await t}function I(e,t,n,r,i){r&&F(`terminal`).catch(console.error),i!==null&&cancelAnimationFrame(i),i=requestAnimationFrame(()=>{i=null,fe(e,t,n,r)})}function me(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 L(e,t){if(e)for(let n of me(e))n.setMainCollapsedOverride?.(t)}function R(e,t,n){if(!e)return;let r=e.querySelector(`.activity-log-toggle`);r instanceof HTMLButtonElement&&(r.hidden=t!==`chat`||n===0)}function z(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 B(e,t){if(!e)return;let n=e.querySelector(`.header-main-toggle`);if(!(n instanceof HTMLButtonElement))return;let r=typeof t==`boolean`?t:z(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 V(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 H={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 U(e,t){let n=H[t];if(!n)return;let r=e.querySelector(`[data-page-id="${t}"]`);!r||r.children.length>0||r.appendChild(document.createElement(n))}function W(e,t,n,r,i,a=!0){if(!e)return;let o=ue(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=H.chat;t&&customElements.get(t)?U(e,`chat`):F(`chat`).then(()=>{e&&U(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=H[o];u&&customElements.get(u)?U(e,o):F(o).then(()=>{e&&U(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),I(e,t.currentPage,t.terminalElement,t.terminalVisible,t.terminalPlacementFrame),L(e,t.headerMainCollapsedOverride),B(e,t.headerMainCollapsedOverride),R(e,t.currentPage,r.activityLog.length),V(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 G(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&&W(e,t,n,i,u),u===`files`&&c)if(/\.[^./]+$/u.test(c))try{await r.openFile(n,c,s||i.activeGroupId),l&&await M(()=>{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 M(()=>typeof t.handleAnchorNavigation==`function`&&!!t.handleAnchorNavigation(l)))}}async function K(e,n,r,i,a,o){let s=await t(o,a.activeGroupId);s&&await G(e,n,r,i,a,s)}function q(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 J(t,n){if(t)try{await te(t,e.SIDEBAR_WIDTH,n)}catch{}}function Y(e,t){let n=e?.querySelector(`.app-body`);if(!(n instanceof HTMLElement))return;let r=q(e,t);n.style.setProperty(`--sidebar-width`,`${r}px`)}async function he(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(q(t,s())),n=Math.round(q(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?Y(t,n):Y(t,250)}catch{Y(t,250)}let l=null,u=0,d=0,f=e=>{if(e.pointerId!==l)return;let n=e.clientX-u;Y(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&&J(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`,()=>{Y(t,250),i&&J(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=q(t,2**53-1)),a!==null&&(e.preventDefault(),Y(t,a),c(),i&&J(i,q(t,s())))}),c(),n.addCleanup(()=>{p(),a.removeEventListener(`pointerup`,m),a.removeEventListener(`pointercancel`,p)})}async function X(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 ge={pages:e.SIDEBAR_PAGES_HIDDEN,chat:e.SIDEBAR_CHAT_HIDDEN,tasks:e.SIDEBAR_TASKS_HIDDEN,files:e.SIDEBAR_FILES_HIDDEN};function Z(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 _e(e){switch(e){case`pages`:return`pagesSidebarHidden`;case`chat`:return`chatSidebarHidden`;case`tasks`:return`tasksSidebarHidden`;case`files`:return`filesSidebarHidden`}}async function ve(e,t,n,r){for(let[n,i]of Object.entries(ge)){let a=n,s=!1;if(r)try{s=ce(await o(r,i))}catch{s=!1}let c=_e(a);t[c]=s,Z(e,a,s)}}function Q(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}Z(e,i,a),a&&t.currentPage===i&&W(e,t,r,n,N(n,t))}function ye(e,t,n,r,i){Q(e,t,n,r,`pages`,i)}function be(){let e=window.navigation;return!!(e&&typeof e.addEventListener==`function`&&typeof e.navigate==`function`)}function xe(e,t){if(!e)return;let n=e.querySelector(`shadow-claw-chat`);n&&typeof n.setActivityLogCollapsedOverride==`function`&&n.setActivityLogCollapsedOverride(t)}function Se(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 Ce(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),xe(e.shadowRoot,e.activityLogCollapsedOverride),Se(e.shadowRoot,e.activityLogCollapsedOverride)}function we(e){e.headerMainCollapsedOverride=!(typeof e.headerMainCollapsedOverride==`boolean`?e.headerMainCollapsedOverride:z(e.shadowRoot)?.isMainCollapsed?.()??!1),L(e.shadowRoot,e.headerMainCollapsedOverride),B(e.shadowRoot,e.headerMainCollapsedOverride)}function Te(e,t){t.terminalVisible=!t.terminalVisible,V(e,t.currentPage,t.terminalVisible,t.vmStatus),I(e,t.currentPage,t.terminalElement,t.terminalVisible,t.terminalPlacementFrame)}function Ee(e,t){e===T.Dark?(t.add(`dark-mode`),t.remove(`light-mode`)):(t.add(`light-mode`),t.remove(`dark-mode`))}function De(e,t){if(!e)return;let n=e.querySelector(`.sun-icon`),r=e.querySelector(`.moon-icon`);n&&r&&(t===T.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 Oe(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||N(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),he(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`,()=>{we(r)}),n.querySelector(`.activity-log-toggle`)?.addEventListener(`click`,()=>{Ce(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=>{ye(n,r,a,i,!!e.detail?.hidden)}),n.addEventListener(`sidebar-chat-visibility-change`,e=>{Q(n,r,a,i,`chat`,!!e.detail?.hidden)}),n.addEventListener(`sidebar-tasks-visibility-change`,e=>{Q(n,r,a,i,`tasks`,!!e.detail?.hidden)}),n.addEventListener(`sidebar-files-visibility-change`,e=>{Q(n,r,a,i,`files`,!!e.detail?.hidden)}),n.addEventListener(`chat-split-view-change`,e=>{r.chatSplitViewEnabled=!!e.detail?.enabled,W(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===T.Dark?T.Light:T.Dark;s.setTheme(t)}),n.querySelector(`.webvm-toggle`)?.addEventListener(`click`,()=>Te(n,r)),n.addEventListener(`shadow-claw-terminal-slot-ready`,()=>{I(n,r.currentPage,r.terminalElement,r.terminalVisible,r.terminalPlacementFrame),L(n,r.headerMainCollapsedOverride),B(n,r.headerMainCollapsedOverride)}),e.addEventListener(`resize`,()=>{r.headerMainCollapsedOverride===null&&B(n,r.headerMainCollapsedOverride)}),t.addEventListener(`shadow-claw-navigate`,r.shadowClawNav),be()?(e.navigation.addEventListener(`navigate`,r.handleNavigationApiNavigate),r.navigationListenerAttached=!0):(r.popstateListener=()=>{K(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;De(n,t),Ee(t,r.classList)}),e.addEventListener(`shadow-claw-peer-error`,e=>{let r=e.detail,i=r.remotePeerId,a=r.error;X(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;De(n,p),Ee(p,r.classList)}function ke(e){if(e===void 0)return;e.documentElement.classList.remove(re,`sc-prerender-override`);let t=e.querySelector(`shadow-claw`);t?.removeAttribute(ae),t?.removeAttribute(ie)}function Ae(e,t){if(!e)return;let n=t;if(n.navigationType===`reload`)return;let r=n?.destination?.url;if(typeof r!=`string`)return;let a=new URL(r);if(a.origin===window.location.origin&&i(a.pathname))return{parsedUrl:a,navigateEvent:n}}function je(e,t){if(t.defaultPrevented||t.button!==0||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey)return null;let n=t.composedPath(),r=null;for(let e of n)if(e instanceof HTMLAnchorElement){r=e;break}if(!r)return null;let a=r.getAttribute(`href`)||``;return!a||a.startsWith(`javascript:`)||a.startsWith(`mailto:`)||a.startsWith(`tel:`)||r.target&&r.target!==`_self`||r.origin!==e.origin||!i(r.pathname)||r.pathname===e.pathname&&r.search===e.search&&r.hash!==e.hash?null:(t.preventDefault(),`${r.pathname}${r.search}${r.hash}`)}async function Me(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 Ne(e,t,n,r){let i=await Me(e,t,r);ee(n.orchestrator,r.id,i)}async function Pe(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}x(`Failed to open file from tool: ${e instanceof Error?e.message:String(e)}`,5e3);return}}async function Fe(e,t,n){n?.providerId===`llamafile`?await X(e,t,p(n.reason)):n?.providerId===`transformers_js_local`?await X(e,t,g(n.reason)):n?.providerId===`prompt_api`?await X(e,t,se(n.reason)):n?.providerId&&n.helpType&&await X(e,t,c(n.providerId,n.helpType,n.reason))}async function Ie(e,t,n,r,i,a){if(!(!r||!a?.roomId||!a?.hostPeerId)&&await X(e,t,{mode:`confirm`,title:`Room invitation`,message:`${a.fromAlias||a.fromPeerId} invited you to join "${a.roomName}".`,confirmLabel:`Join`,cancelLabel:`Decline`}))try{l(n.orchestrator,a.roomId,a.hostPeerId,a.roomName),await i.switchConversation(r,`room:${a.roomId}`),W(t,n,r,i,`chat`),b(`Joined room "${a.roomName}"`)}catch(e){x(`Failed to join room: ${e instanceof Error?e.message:String(e)}`,6e3)}}function Le(e,t,n){let r=n.useTrailingSlash&&!t.includes(`#`)?t.endsWith(`/`)?t:t+`/`:t;n.replace?e.replaceState({},``,r):e.pushState({},``,r)}async function Re(e,t,i,a,o,s,c={replace:!1}){let l=n(r(s));if(be()){window.navigation.navigate(l,{history:c.replace?`replace`:`push`});return}l!==window.location.pathname&&Le(globalThis.history,l,{...c,useTrailingSlash:!1}),await G(e,t,i,a,o,s)}function ze(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 Be(e,t,n,r,i,a){let o=a.detail;o&&await Re(e,t,n,r,i,{page:ze(String(o.page||`chat`)),groupId:o.groupId,path:o.path,anchor:o.anchor})}async function Ve(e,t,n,r){await ve(e,t,n,r)}async function He(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=v(r),s=a.myPeerId;s||=ne().toLowerCase();let c=new Set(a.trustedPeerIds);c.add(o),await C(r,n,s,Array.from(c),a.serverHost,a.serverPort,a.serverPath,a.serverSecure),a.enabled||await y(r,n,`peerjs`,!0);let l=await _.ensurePeerConversation(n,o);await _.switchConversation(n,l),W(e,t,n,_,`chat`),i.searchParams.delete(`peer`);let u=`${i.pathname}${i.search}${i.hash}`;window.history.replaceState({},``,u||`/`),b(`Connected to Peer: ${o.substring(0,8)}`)}catch(e){x(`Failed to process peer parameter: ${e instanceof Error?e.message:String(e)}`,6e3)}}const Ue=`pendingShares`;function We(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 Ge(e){return!e||typeof e.transaction!=`function`?[]:new Promise((t,n)=>{let r;try{r=e.transaction(Ue,`readwrite`)}catch(e){if(e instanceof DOMException&&e.name===`NotFoundError`){t([]);return}n(e);return}let i=r.objectStore(Ue),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(We).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 Ke(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-CrHchneq.js";import{l as t,n,r,s as i}from"./app-routes-Bs-riIvr.js";import{r as a}from"./txPromise-EBECky1b.js";import{t as o}from"./getConfig-D89uJgo5.js";import{n as s}from"./toast-60iDlgiH.js";import{Dn as c,R as l,Zt as u,a as d,c as f,lt as p,o as m,sn as h,st as g,t as _,vt as v,w as ee,xt as y}from"./orchestrator-tHWrqi_F.js";import{t as te}from"./setConfig-DFMYnYLE.js";import{t as ne}from"./ulid-BY7rQVLN.js";import{r as b,t as x}from"./toast-D3gxhZpN.js";import{n as re,r as ie,t as ae}from"./constants-DiETpg52.js";import{t as oe}from"./shadow-claw-element-DIrv3P6A.js";import{t as S}from"./effect-BEsuusE8.js";import{t as se}from"./prompt-api-OUOP-B-R.js";import{t as C}from"./configurePeerJs-UfQ6HUlv.js";import{t as w}from"./file-viewer-BVg3B_JH.js";import{t as ce}from"./parseConfigBoolean-ByjZr9OM.js";const T={Light:`light`,Dark:`dark`,System:`system`},E=`shadow-claw-theme`;function le(){return typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`}function D(e){return e===`system`?le():e}function O(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 k=d(E)||`system`,A=D(k);O(A);const j=new class{_resolved;_theme;constructor(){this._theme=new s.State(k),this._resolved=new s.State(A)}getTheme(){return{theme:this.theme,resolved:this.resolved}}init(){typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-color-scheme: dark)`).addEventListener(`change`,()=>{let e=le();f(E,`system`),O(e),this._theme.set(`system`),this._resolved.set(e)}),window.addEventListener(`storage`,e=>{let t=m(E);e.key===t&&e.newValue&&this.setTheme(e.newValue)})}get resolved(){return this._resolved.get()}setTheme(e){let t=D(e);f(E,e),O(t),this._theme.set(e),this._resolved.set(t)}get theme(){return this._theme.get()}};j.init();async function M(e,t=3){for(let n=0;n<t;n++){if(e())return;await new Promise(e=>{requestAnimationFrame(()=>e())})}}function N(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 ue(e,t,n){return n&&t===`pages`?N(e):t}function de(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 fe(e,t,n,r){let i=n;if(!i)return;let a=de(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 pe={pages:()=>import(`./shadow-claw-pages-BWSE91I1.js`),chat:()=>import(`./shadow-claw-chat-BN85a1xk.js`),tasks:()=>import(`./shadow-claw-tasks-Czx6Ucf5.js`),files:()=>import(`./shadow-claw-files-Bx4v0Ggp.js`),settings:()=>import(`./shadow-claw-settings-BZWrAoQA.js`),tools:()=>import(`./shadow-claw-tools-t3Qq4TDO.js`),channels:()=>import(`./shadow-claw-channels-mY-JMvib.js`),terminal:()=>import(`./shadow-claw-terminal-Dmtr9KY1.js`),"file-viewer":()=>import(`./shadow-claw-file-viewer-AZfG4D-u.js`),"pdf-viewer":()=>import(`./shadow-claw-pdf-viewer-gOiW-_Bh.js`)},P=new Map;async function F(e){let t=P.get(e);if(!t){let n=pe[e];n?(t=n().then(()=>void 0),P.set(e,t)):t=Promise.resolve()}await t}function I(e,t,n,r,i){r&&F(`terminal`).catch(console.error),i!==null&&cancelAnimationFrame(i),i=requestAnimationFrame(()=>{i=null,fe(e,t,n,r)})}function me(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 L(e,t){if(e)for(let n of me(e))n.setMainCollapsedOverride?.(t)}function R(e,t,n){if(!e)return;let r=e.querySelector(`.activity-log-toggle`);r instanceof HTMLButtonElement&&(r.hidden=t!==`chat`||n===0)}function z(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 B(e,t){if(!e)return;let n=e.querySelector(`.header-main-toggle`);if(!(n instanceof HTMLButtonElement))return;let r=typeof t==`boolean`?t:z(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 V(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 H={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 U(e,t){let n=H[t];if(!n)return;let r=e.querySelector(`[data-page-id="${t}"]`);!r||r.children.length>0||r.appendChild(document.createElement(n))}function W(e,t,n,r,i,a=!0){if(!e)return;let o=ue(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=H.chat;t&&customElements.get(t)?U(e,`chat`):F(`chat`).then(()=>{e&&U(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=H[o];u&&customElements.get(u)?U(e,o):F(o).then(()=>{e&&U(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),I(e,t.currentPage,t.terminalElement,t.terminalVisible,t.terminalPlacementFrame),L(e,t.headerMainCollapsedOverride),B(e,t.headerMainCollapsedOverride),R(e,t.currentPage,r.activityLog.length),V(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 G(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&&W(e,t,n,i,u),u===`files`&&c)if(/\.[^./]+$/u.test(c))try{await r.openFile(n,c,s||i.activeGroupId),l&&await M(()=>{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 M(()=>typeof t.handleAnchorNavigation==`function`&&!!t.handleAnchorNavigation(l)))}}async function K(e,n,r,i,a,o){let s=await t(o,a.activeGroupId);s&&await G(e,n,r,i,a,s)}function q(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 J(t,n){if(t)try{await te(t,e.SIDEBAR_WIDTH,n)}catch{}}function Y(e,t){let n=e?.querySelector(`.app-body`);if(!(n instanceof HTMLElement))return;let r=q(e,t);n.style.setProperty(`--sidebar-width`,`${r}px`)}async function he(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(q(t,s())),n=Math.round(q(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?Y(t,n):Y(t,250)}catch{Y(t,250)}let l=null,u=0,d=0,f=e=>{if(e.pointerId!==l)return;let n=e.clientX-u;Y(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&&J(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`,()=>{Y(t,250),i&&J(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=q(t,2**53-1)),a!==null&&(e.preventDefault(),Y(t,a),c(),i&&J(i,q(t,s())))}),c(),n.addCleanup(()=>{p(),a.removeEventListener(`pointerup`,m),a.removeEventListener(`pointercancel`,p)})}async function X(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 ge={pages:e.SIDEBAR_PAGES_HIDDEN,chat:e.SIDEBAR_CHAT_HIDDEN,tasks:e.SIDEBAR_TASKS_HIDDEN,files:e.SIDEBAR_FILES_HIDDEN};function Z(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 _e(e){switch(e){case`pages`:return`pagesSidebarHidden`;case`chat`:return`chatSidebarHidden`;case`tasks`:return`tasksSidebarHidden`;case`files`:return`filesSidebarHidden`}}async function ve(e,t,n,r){for(let[n,i]of Object.entries(ge)){let a=n,s=!1;if(r)try{s=ce(await o(r,i))}catch{s=!1}let c=_e(a);t[c]=s,Z(e,a,s)}}function Q(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}Z(e,i,a),a&&t.currentPage===i&&W(e,t,r,n,N(n,t))}function ye(e,t,n,r,i){Q(e,t,n,r,`pages`,i)}function be(){let e=window.navigation;return!!(e&&typeof e.addEventListener==`function`&&typeof e.navigate==`function`)}function xe(e,t){if(!e)return;let n=e.querySelector(`shadow-claw-chat`);n&&typeof n.setActivityLogCollapsedOverride==`function`&&n.setActivityLogCollapsedOverride(t)}function Se(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 Ce(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),xe(e.shadowRoot,e.activityLogCollapsedOverride),Se(e.shadowRoot,e.activityLogCollapsedOverride)}function we(e){e.headerMainCollapsedOverride=!(typeof e.headerMainCollapsedOverride==`boolean`?e.headerMainCollapsedOverride:z(e.shadowRoot)?.isMainCollapsed?.()??!1),L(e.shadowRoot,e.headerMainCollapsedOverride),B(e.shadowRoot,e.headerMainCollapsedOverride)}function Te(e,t){t.terminalVisible=!t.terminalVisible,V(e,t.currentPage,t.terminalVisible,t.vmStatus),I(e,t.currentPage,t.terminalElement,t.terminalVisible,t.terminalPlacementFrame)}function Ee(e,t){e===T.Dark?(t.add(`dark-mode`),t.remove(`light-mode`)):(t.add(`light-mode`),t.remove(`dark-mode`))}function De(e,t){if(!e)return;let n=e.querySelector(`.sun-icon`),r=e.querySelector(`.moon-icon`);n&&r&&(t===T.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 Oe(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||N(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),he(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`,()=>{we(r)}),n.querySelector(`.activity-log-toggle`)?.addEventListener(`click`,()=>{Ce(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=>{ye(n,r,a,i,!!e.detail?.hidden)}),n.addEventListener(`sidebar-chat-visibility-change`,e=>{Q(n,r,a,i,`chat`,!!e.detail?.hidden)}),n.addEventListener(`sidebar-tasks-visibility-change`,e=>{Q(n,r,a,i,`tasks`,!!e.detail?.hidden)}),n.addEventListener(`sidebar-files-visibility-change`,e=>{Q(n,r,a,i,`files`,!!e.detail?.hidden)}),n.addEventListener(`chat-split-view-change`,e=>{r.chatSplitViewEnabled=!!e.detail?.enabled,W(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===T.Dark?T.Light:T.Dark;s.setTheme(t)}),n.querySelector(`.webvm-toggle`)?.addEventListener(`click`,()=>Te(n,r)),n.addEventListener(`shadow-claw-terminal-slot-ready`,()=>{I(n,r.currentPage,r.terminalElement,r.terminalVisible,r.terminalPlacementFrame),L(n,r.headerMainCollapsedOverride),B(n,r.headerMainCollapsedOverride)}),e.addEventListener(`resize`,()=>{r.headerMainCollapsedOverride===null&&B(n,r.headerMainCollapsedOverride)}),t.addEventListener(`shadow-claw-navigate`,r.shadowClawNav),be()?(e.navigation.addEventListener(`navigate`,r.handleNavigationApiNavigate),r.navigationListenerAttached=!0):(r.popstateListener=()=>{K(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;De(n,t),Ee(t,r.classList)}),e.addEventListener(`shadow-claw-peer-error`,e=>{let r=e.detail,i=r.remotePeerId,a=r.error;X(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;De(n,p),Ee(p,r.classList)}function ke(e){if(e===void 0)return;e.documentElement.classList.remove(re,`sc-prerender-override`);let t=e.querySelector(`shadow-claw`);t?.removeAttribute(ae),t?.removeAttribute(ie)}function Ae(e,t){if(!e)return;let n=t;if(n.navigationType===`reload`)return;let r=n?.destination?.url;if(typeof r!=`string`)return;let a=new URL(r);if(a.origin===window.location.origin&&i(a.pathname))return{parsedUrl:a,navigateEvent:n}}function je(e,t){if(t.defaultPrevented||t.button!==0||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey)return null;let n=t.composedPath(),r=null;for(let e of n)if(e instanceof HTMLAnchorElement){r=e;break}if(!r)return null;let a=r.getAttribute(`href`)||``;return!a||a.startsWith(`javascript:`)||a.startsWith(`mailto:`)||a.startsWith(`tel:`)||r.target&&r.target!==`_self`||r.origin!==e.origin||!i(r.pathname)||r.pathname===e.pathname&&r.search===e.search&&r.hash!==e.hash?null:(t.preventDefault(),`${r.pathname}${r.search}${r.hash}`)}async function Me(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 Ne(e,t,n,r){let i=await Me(e,t,r);ee(n.orchestrator,r.id,i)}async function Pe(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}x(`Failed to open file from tool: ${e instanceof Error?e.message:String(e)}`,5e3);return}}async function Fe(e,t,n){n?.providerId===`llamafile`?await X(e,t,p(n.reason)):n?.providerId===`transformers_js_local`?await X(e,t,g(n.reason)):n?.providerId===`prompt_api`?await X(e,t,se(n.reason)):n?.providerId&&n.helpType&&await X(e,t,c(n.providerId,n.helpType,n.reason))}async function Ie(e,t,n,r,i,a){if(!(!r||!a?.roomId||!a?.hostPeerId)&&await X(e,t,{mode:`confirm`,title:`Room invitation`,message:`${a.fromAlias||a.fromPeerId} invited you to join "${a.roomName}".`,confirmLabel:`Join`,cancelLabel:`Decline`}))try{l(n.orchestrator,a.roomId,a.hostPeerId,a.roomName),await i.switchConversation(r,`room:${a.roomId}`),W(t,n,r,i,`chat`),b(`Joined room "${a.roomName}"`)}catch(e){x(`Failed to join room: ${e instanceof Error?e.message:String(e)}`,6e3)}}function Le(e,t,n){let r=n.useTrailingSlash&&!t.includes(`#`)?t.endsWith(`/`)?t:t+`/`:t;n.replace?e.replaceState({},``,r):e.pushState({},``,r)}async function Re(e,t,i,a,o,s,c={replace:!1}){let l=n(r(s));if(be()){window.navigation.navigate(l,{history:c.replace?`replace`:`push`});return}l!==window.location.pathname&&Le(globalThis.history,l,{...c,useTrailingSlash:!1}),await G(e,t,i,a,o,s)}function ze(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 Be(e,t,n,r,i,a){let o=a.detail;o&&await Re(e,t,n,r,i,{page:ze(String(o.page||`chat`)),groupId:o.groupId,path:o.path,anchor:o.anchor})}async function Ve(e,t,n,r){await ve(e,t,n,r)}async function He(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=v(r),s=a.myPeerId;s||=ne().toLowerCase();let c=new Set(a.trustedPeerIds);c.add(o),await C(r,n,s,Array.from(c),a.serverHost,a.serverPort,a.serverPath,a.serverSecure),a.enabled||await y(r,n,`peerjs`,!0);let l=await _.ensurePeerConversation(n,o);await _.switchConversation(n,l),W(e,t,n,_,`chat`),i.searchParams.delete(`peer`);let u=`${i.pathname}${i.search}${i.hash}`;window.history.replaceState({},``,u||`/`),b(`Connected to Peer: ${o.substring(0,8)}`)}catch(e){x(`Failed to process peer parameter: ${e instanceof Error?e.message:String(e)}`,6e3)}}const Ue=`pendingShares`;function We(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 Ge(e){return!e||typeof e.transaction!=`function`?[]:new Promise((t,n)=>{let r;try{r=e.transaction(Ue,`readwrite`)}catch(e){if(e instanceof DOMException&&e.name===`NotFoundError`){t([]);return}n(e);return}let i=r.objectStore(Ue),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(We).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 Ke(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 qe(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 Je(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 Ye(e,t,n,r,i,a,o){if(!a)return;let s=await Ge(a);if(s.length!==0)try{let c=await qe(a,r),l=[];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=Je(t.fileName||(t.fileType===`application/pdf`?`${n}.pdf`:`${n}.bin`),n);await u(a,c,e,new Uint8Array(t.fileBytes)),l.push(e);continue}let r=Je(t.fileName||`${n}.md`,n);await h(a,c,r,Ke(t)),l.push(r)}await r.loadFiles(a),W(t,n,a,r,`files`),l.length>0&&await i.openFile(a,l[0],c),b(`Imported ${l.length} shared item${l.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){x(`Failed to import shared content: ${e instanceof Error?e.message:String(e)}`,6e3)}}async function Xe(e,t,n,r,i,a){if(!r)return;let o=new URL(window.location?.href||`http://localhost/`),s=(o.searchParams.get(`room`)||``).trim(),c=(o.searchParams.get(`host`)||``).trim(),u=(o.searchParams.get(`name`)||``).trim()||`Room`;if(!(!s||!c))try{let d=v(i),f=d.myPeerId;f||=ne().toLowerCase();let p=new Set(d.trustedPeerIds);p.add(c),await C(i,r,f,Array.from(p),d.serverHost,d.serverPort,d.serverPath,d.serverSecure),d.enabled||await y(i,r,`peerjs`,!0),l(i,s,c,u),await a.switchConversation(r,`room:${s}`),W(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||`/`),b(`Joined room "${u}"`)}catch(e){x(`Failed to join room: ${e instanceof Error?e.message:String(e)}`,6e3)}}function Ze(e,t,n,r){e&&(S(()=>{let t=w.file;t&&(F(`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`&&F(`pdf-viewer`).catch(console.error))}),S(()=>{let e=r.state;e===`idle`&&(t.previousOrchestratorState===`thinking`||t.previousOrchestratorState===`responding`)&&b(`Response complete`,2500),t.previousOrchestratorState=e}),S(()=>{let i=r.activePage;i!==t.currentPage&&W(e,t,n,r,i,!1)}),S(()=>{r.activityLog,R(e,t.currentPage,r.activityLog.length)}))}const Qe=new CSSStyleSheet;Qe.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`),$e=$.querySelector(`template`);let et=[];et=$e?Array.from($e.content.children):Array.from($.head.children).concat(Array.from($.body.children));var tt=et;const nt=`shadow-claw`;var rt=class extends oe{static styles=Qe;static template=tt;activityLogCollapsedOverride=null;chatSidebarHidden=!1;chatSplitViewEnabled=!1;currentPage=_.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`),$e=$.querySelector(`template`);let et=[];et=$e?Array.from($e.content.children):Array.from($.head.children).concat(Array.from($.body.children));var tt=et;const nt=`shadow-claw`;var rt=class extends oe{static styles=Qe;static template=tt;activityLogCollapsedOverride=null;chatSidebarHidden=!1;chatSplitViewEnabled=!1;currentPage=_.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-CnwkoBpe.js`);Promise.all([import(`./shadow-claw-conversations-0Q-VC_7N.js`),import(`./shadow-claw-dialog-BrOwAOdk.js`),import(`./shadow-claw-toast-B9hcLfjz.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 _.init(this.db,this.orchestrator),a(this.db),await this.render();let t=_.activePage===`pages`&&this.pagesSidebarHidden||_.activePage===`chat`&&this.chatSidebarHidden||_.activePage===`tasks`&&this.tasksSidebarHidden||_.activePage===`files`&&this.filesSidebarHidden;_.hadPersistedActivePage&&!t?W(this.shadowRoot,this,this.db,_,_.activePage,!1):t?W(this.shadowRoot,this,this.db,_,N(_,this),!1):W(this.shadowRoot,this,this.db,_,_.activePage,!1),await K(this.shadowRoot,this,this.db,w,_,new URL(window.location.href)),await He(this.shadowRoot,this,this.db,this.orchestrator),await Xe(window,this.shadowRoot,this,this.db,this.orchestrator,_),await Ye(window,this.shadowRoot,this,_,w,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-C0KvLNUp.js`).then(e=>e.n);if(n()){let{showWarning:e}=await import(`./toast-D3gxhZpN.js`).then(e=>e.o);e(`Private Browsing / Limited Storage: Operating in temporary in-memory mode. Files and changes will not persist across page reloads.`,7e3)}_.setReady()}finally{ke(document)}}disconnectedCallback(){if(super.disconnectedCallback(),this.vmStatusCleanup&&=(this.vmStatusCleanup(),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=je(window.location,e);t&&(Le(globalThis.history,t,{replace:!1,useTrailingSlash:!1}),K(this.shadowRoot,this,this.db,w,_,new URL(window.location.href)))};handleNavigationApiNavigate=e=>{let{parsedUrl:t,navigateEvent:n}=Ae(this.db,e)??{};!t||!n||typeof n.intercept==`function`&&n.intercept({handler:async()=>{let{parseRouteFromUrlAsync:e}=await import(`./app-routes-Bs-riIvr.js`).then(e=>e.t),n=await e(t,_.activeGroupId);n&&await G(this.shadowRoot,this,this.db,w,_,n)}})};shadowClawNav=e=>{!this.shadowRoot||!this.db||Be(this.shadowRoot,this,this.db,w,_,e)};async render(){if(Oe(window,document,this.shadowRoot,this,this.db,_,w,j,new URL(window.location.href)),await Ve(this.shadowRoot,this,_,this.db),this.db)try{let{getConfig:e}=await import(`./getConfig-D89uJgo5.js`).then(e=>e.n),{parseConfigBoolean:t}=await import(`./parseConfigBoolean-ByjZr9OM.js`).then(e=>e.n),{CONFIG_KEYS:n}=await import(`./config-CrHchneq.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-CzV2E7Ul.js`);await t(this.shadowRoot,this,e,this.db)}this.terminalElement=document.createElement(`shadow-claw-terminal`),this.terminalElement&&(this.terminalElement.orchestrator=this.orchestrator),V(this.shadowRoot,this.currentPage,this.terminalVisible,this.vmStatus),I(this.shadowRoot,this.currentPage,this.terminalElement,this.terminalVisible,this.terminalPlacementFrame),L(this.shadowRoot,this.headerMainCollapsedOverride),B(this.shadowRoot,this.headerMainCollapsedOverride),R(this.shadowRoot,this.currentPage,_.activityLog.length);let t=e=>{this.vmStatus=e,e.error&&this.terminalVisible&&(this.terminalVisible=!1,this.terminalElement&&(this.terminalElement.hidden=!0),I(this.shadowRoot,this.currentPage,this.terminalElement,this.terminalVisible,this.terminalPlacementFrame)),V(this.shadowRoot,this.currentPage,this.terminalVisible,this.vmStatus)};this.vmStatus=this.orchestrator.vmStatus||this.vmStatus,V(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=>Pe(this.db,_,w,e)),this.orchestrator.events.on(`provider-help`,e=>Fe(document,this.shadowRoot,e)),this.orchestrator.events.on(`room-invite`,e=>Ie(document,this.shadowRoot,this,this.db,_,e)),this.orchestrator.events.on(`ask-user`,e=>Ne(document,this.shadowRoot,this,e)),Ze(this.shadowRoot,this,this.db,_)}async requestDialog(e){return X(document,this.shadowRoot,e)}};customElements.get(nt)||customElements.define(nt,rt);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{i as e,t}from"./rolldown-runtime-aKtaBQYM.js";import{n}from"./txPromise-EBECky1b.js";import{B as r,F as i,Jt as a,L as o,_t as s,mt as c,nt as l,pt as u,rt as d,t as f,vt as p,xt as m,yt as h,z as g}from"./orchestrator-
|
|
1
|
+
import{i as e,t}from"./rolldown-runtime-aKtaBQYM.js";import{n}from"./txPromise-EBECky1b.js";import{B as r,F as i,Jt as a,L as o,_t as s,mt as c,nt as l,pt as u,rt as d,t as f,vt as p,xt as m,yt as h,z as g}from"./orchestrator-tHWrqi_F.js";import{t as _}from"./ulid-BY7rQVLN.js";import{a as v,r as y,t as b}from"./toast-D3gxhZpN.js";import{t as x}from"./shadow-claw-element-DIrv3P6A.js";import{t as S}from"./effect-BEsuusE8.js";import"./shadow-claw-page-header-action-button-Bmua3mAb.js";import{t as C}from"./configurePeerJs-UfQ6HUlv.js";import"./shadow-claw-page-header-DMKbkv3s.js";var w=t(((e,t)=>{t.exports=function(){return typeof Promise==`function`&&Promise.prototype&&Promise.prototype.then}})),T=t((e=>{let t,n=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];e.getSymbolSize=function(e){if(!e)throw Error(`"version" cannot be null or undefined`);if(e<1||e>40)throw Error(`"version" should be in range from 1 to 40`);return e*4+17},e.getSymbolTotalCodewords=function(e){return n[e]},e.getBCHDigit=function(e){let t=0;for(;e!==0;)t++,e>>>=1;return t},e.setToSJISFunction=function(e){if(typeof e!=`function`)throw Error(`"toSJISFunc" is not a valid function.`);t=e},e.isKanjiModeEnabled=function(){return t!==void 0},e.toSJIS=function(e){return t(e)}})),E=t((e=>{e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2};function t(t){if(typeof t!=`string`)throw Error(`Param is not a string`);switch(t.toLowerCase()){case`l`:case`low`:return e.L;case`m`:case`medium`:return e.M;case`q`:case`quartile`:return e.Q;case`h`:case`high`:return e.H;default:throw Error(`Unknown EC Level: `+t)}}e.isValid=function(e){return e&&e.bit!==void 0&&e.bit>=0&&e.bit<4},e.from=function(n,r){if(e.isValid(n))return n;try{return t(n)}catch{return r}}})),D=t(((e,t)=>{function n(){this.buffer=[],this.length=0}n.prototype={get:function(e){let t=Math.floor(e/8);return(this.buffer[t]>>>7-e%8&1)==1},put:function(e,t){for(let n=0;n<t;n++)this.putBit((e>>>t-n-1&1)==1)},getLengthInBits:function(){return this.length},putBit:function(e){let t=Math.floor(this.length/8);this.buffer.length<=t&&this.buffer.push(0),e&&(this.buffer[t]|=128>>>this.length%8),this.length++}},t.exports=n})),ee=t(((e,t)=>{function n(e){if(!e||e<1)throw Error(`BitMatrix size must be defined and greater than 0`);this.size=e,this.data=new Uint8Array(e*e),this.reservedBit=new Uint8Array(e*e)}n.prototype.set=function(e,t,n,r){let i=e*this.size+t;this.data[i]=n,r&&(this.reservedBit[i]=!0)},n.prototype.get=function(e,t){return this.data[e*this.size+t]},n.prototype.xor=function(e,t,n){this.data[e*this.size+t]^=n},n.prototype.isReserved=function(e,t){return this.reservedBit[e*this.size+t]},t.exports=n})),te=t((e=>{let t=T().getSymbolSize;e.getRowColCoords=function(e){if(e===1)return[];let n=Math.floor(e/7)+2,r=t(e),i=r===145?26:Math.ceil((r-13)/(2*n-2))*2,a=[r-7];for(let e=1;e<n-1;e++)a[e]=a[e-1]-i;return a.push(6),a.reverse()},e.getPositions=function(t){let n=[],r=e.getRowColCoords(t),i=r.length;for(let e=0;e<i;e++)for(let t=0;t<i;t++)e===0&&t===0||e===0&&t===i-1||e===i-1&&t===0||n.push([r[e],r[t]]);return n}})),ne=t((e=>{let t=T().getSymbolSize;e.getPositions=function(e){let n=t(e);return[[0,0],[n-7,0],[0,n-7]]}})),O=t((e=>{e.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};let t={N1:3,N2:3,N3:40,N4:10};e.isValid=function(e){return e!=null&&e!==``&&!isNaN(e)&&e>=0&&e<=7},e.from=function(t){return e.isValid(t)?parseInt(t,10):void 0},e.getPenaltyN1=function(e){let n=e.size,r=0,i=0,a=0,o=null,s=null;for(let c=0;c<n;c++){i=a=0,o=s=null;for(let l=0;l<n;l++){let n=e.get(c,l);n===o?i++:(i>=5&&(r+=t.N1+(i-5)),o=n,i=1),n=e.get(l,c),n===s?a++:(a>=5&&(r+=t.N1+(a-5)),s=n,a=1)}i>=5&&(r+=t.N1+(i-5)),a>=5&&(r+=t.N1+(a-5))}return r},e.getPenaltyN2=function(e){let n=e.size,r=0;for(let t=0;t<n-1;t++)for(let i=0;i<n-1;i++){let n=e.get(t,i)+e.get(t,i+1)+e.get(t+1,i)+e.get(t+1,i+1);(n===4||n===0)&&r++}return r*t.N2},e.getPenaltyN3=function(e){let n=e.size,r=0,i=0,a=0;for(let t=0;t<n;t++){i=a=0;for(let o=0;o<n;o++)i=i<<1&2047|e.get(t,o),o>=10&&(i===1488||i===93)&&r++,a=a<<1&2047|e.get(o,t),o>=10&&(a===1488||a===93)&&r++}return r*t.N3},e.getPenaltyN4=function(e){let n=0,r=e.data.length;for(let t=0;t<r;t++)n+=e.data[t];return Math.abs(Math.ceil(n*100/r/5)-10)*t.N4};function n(t,n,r){switch(t){case e.Patterns.PATTERN000:return(n+r)%2==0;case e.Patterns.PATTERN001:return n%2==0;case e.Patterns.PATTERN010:return r%3==0;case e.Patterns.PATTERN011:return(n+r)%3==0;case e.Patterns.PATTERN100:return(Math.floor(n/2)+Math.floor(r/3))%2==0;case e.Patterns.PATTERN101:return n*r%2+n*r%3==0;case e.Patterns.PATTERN110:return(n*r%2+n*r%3)%2==0;case e.Patterns.PATTERN111:return(n*r%3+(n+r)%2)%2==0;default:throw Error(`bad maskPattern:`+t)}}e.applyMask=function(e,t){let r=t.size;for(let i=0;i<r;i++)for(let a=0;a<r;a++)t.isReserved(a,i)||t.xor(a,i,n(e,a,i))},e.getBestMask=function(t,n){let r=Object.keys(e.Patterns).length,i=0,a=1/0;for(let o=0;o<r;o++){n(o),e.applyMask(o,t);let r=e.getPenaltyN1(t)+e.getPenaltyN2(t)+e.getPenaltyN3(t)+e.getPenaltyN4(t);e.applyMask(o,t),r<a&&(a=r,i=o)}return i}})),k=t((e=>{let t=E(),n=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],r=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];e.getBlocksCount=function(e,r){switch(r){case t.L:return n[(e-1)*4+0];case t.M:return n[(e-1)*4+1];case t.Q:return n[(e-1)*4+2];case t.H:return n[(e-1)*4+3];default:return}},e.getTotalCodewordsCount=function(e,n){switch(n){case t.L:return r[(e-1)*4+0];case t.M:return r[(e-1)*4+1];case t.Q:return r[(e-1)*4+2];case t.H:return r[(e-1)*4+3];default:return}}})),re=t((e=>{let t=new Uint8Array(512),n=new Uint8Array(256);(function(){let e=1;for(let r=0;r<255;r++)t[r]=e,n[e]=r,e<<=1,e&256&&(e^=285);for(let e=255;e<512;e++)t[e]=t[e-255]})(),e.log=function(e){if(e<1)throw Error(`log(`+e+`)`);return n[e]},e.exp=function(e){return t[e]},e.mul=function(e,r){return e===0||r===0?0:t[n[e]+n[r]]}})),A=t((e=>{let t=re();e.mul=function(e,n){let r=new Uint8Array(e.length+n.length-1);for(let i=0;i<e.length;i++)for(let a=0;a<n.length;a++)r[i+a]^=t.mul(e[i],n[a]);return r},e.mod=function(e,n){let r=new Uint8Array(e);for(;r.length-n.length>=0;){let e=r[0];for(let i=0;i<n.length;i++)r[i]^=t.mul(n[i],e);let i=0;for(;i<r.length&&r[i]===0;)i++;r=r.slice(i)}return r},e.generateECPolynomial=function(n){let r=new Uint8Array([1]);for(let i=0;i<n;i++)r=e.mul(r,new Uint8Array([1,t.exp(i)]));return r}})),ie=t(((e,t)=>{let n=A();function r(e){this.genPoly=void 0,this.degree=e,this.degree&&this.initialize(this.degree)}r.prototype.initialize=function(e){this.degree=e,this.genPoly=n.generateECPolynomial(this.degree)},r.prototype.encode=function(e){if(!this.genPoly)throw Error(`Encoder not initialized`);let t=new Uint8Array(e.length+this.degree);t.set(e);let r=n.mod(t,this.genPoly),i=this.degree-r.length;if(i>0){let e=new Uint8Array(this.degree);return e.set(r,i),e}return r},t.exports=r})),j=t((e=>{e.isValid=function(e){return!isNaN(e)&&e>=1&&e<=40}})),M=t((e=>{let t=`(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+`;t=t.replace(/u/g,`\\u`);let n=`(?:(?![A-Z0-9 $%*+\\-./:]|`+t+`)(?:.|[\r
|
|
2
2
|
]))+`;e.KANJI=new RegExp(t,`g`),e.BYTE_KANJI=RegExp(`[^A-Z0-9 $%*+\\-./:]+`,`g`),e.BYTE=new RegExp(n,`g`),e.NUMERIC=RegExp(`[0-9]+`,`g`),e.ALPHANUMERIC=RegExp(`[A-Z $%*+\\-./:]+`,`g`);let r=RegExp(`^`+t+`$`),i=RegExp(`^[0-9]+$`),a=RegExp(`^[A-Z0-9 $%*+\\-./:]+$`);e.testKanji=function(e){return r.test(e)},e.testNumeric=function(e){return i.test(e)},e.testAlphanumeric=function(e){return a.test(e)}})),N=t((e=>{let t=j(),n=M();e.NUMERIC={id:`Numeric`,bit:1,ccBits:[10,12,14]},e.ALPHANUMERIC={id:`Alphanumeric`,bit:2,ccBits:[9,11,13]},e.BYTE={id:`Byte`,bit:4,ccBits:[8,16,16]},e.KANJI={id:`Kanji`,bit:8,ccBits:[8,10,12]},e.MIXED={bit:-1},e.getCharCountIndicator=function(e,n){if(!e.ccBits)throw Error(`Invalid mode: `+e);if(!t.isValid(n))throw Error(`Invalid version: `+n);return n>=1&&n<10?e.ccBits[0]:n<27?e.ccBits[1]:e.ccBits[2]},e.getBestModeForData=function(t){return n.testNumeric(t)?e.NUMERIC:n.testAlphanumeric(t)?e.ALPHANUMERIC:n.testKanji(t)?e.KANJI:e.BYTE},e.toString=function(e){if(e&&e.id)return e.id;throw Error(`Invalid mode`)},e.isValid=function(e){return e&&e.bit&&e.ccBits};function r(t){if(typeof t!=`string`)throw Error(`Param is not a string`);switch(t.toLowerCase()){case`numeric`:return e.NUMERIC;case`alphanumeric`:return e.ALPHANUMERIC;case`kanji`:return e.KANJI;case`byte`:return e.BYTE;default:throw Error(`Unknown mode: `+t)}}e.from=function(t,n){if(e.isValid(t))return t;try{return r(t)}catch{return n}}})),ae=t((e=>{let t=T(),n=k(),r=E(),i=N(),a=j(),o=7973,s=t.getBCHDigit(o);function c(t,n,r){for(let i=1;i<=40;i++)if(n<=e.getCapacity(i,r,t))return i}function l(e,t){return i.getCharCountIndicator(e,t)+4}function u(e,t){let n=0;return e.forEach(function(e){let r=l(e.mode,t);n+=r+e.getBitsLength()}),n}function d(t,n){for(let r=1;r<=40;r++)if(u(t,r)<=e.getCapacity(r,n,i.MIXED))return r}e.from=function(e,t){return a.isValid(e)?parseInt(e,10):t},e.getCapacity=function(e,r,o){if(!a.isValid(e))throw Error(`Invalid QR Code version`);o===void 0&&(o=i.BYTE);let s=(t.getSymbolTotalCodewords(e)-n.getTotalCodewordsCount(e,r))*8;if(o===i.MIXED)return s;let c=s-l(o,e);switch(o){case i.NUMERIC:return Math.floor(c/10*3);case i.ALPHANUMERIC:return Math.floor(c/11*2);case i.KANJI:return Math.floor(c/13);case i.BYTE:default:return Math.floor(c/8)}},e.getBestVersionForData=function(e,t){let n,i=r.from(t,r.M);if(Array.isArray(e)){if(e.length>1)return d(e,i);if(e.length===0)return 1;n=e[0]}else n=e;return c(n.mode,n.getLength(),i)},e.getEncodedBits=function(e){if(!a.isValid(e)||e<7)throw Error(`Invalid QR Code version`);let n=e<<12;for(;t.getBCHDigit(n)-s>=0;)n^=o<<t.getBCHDigit(n)-s;return e<<12|n}})),oe=t((e=>{let t=T(),n=1335,r=t.getBCHDigit(n);e.getEncodedBits=function(e,i){let a=e.bit<<3|i,o=a<<10;for(;t.getBCHDigit(o)-r>=0;)o^=n<<t.getBCHDigit(o)-r;return(a<<10|o)^21522}})),se=t(((e,t)=>{let n=N();function r(e){this.mode=n.NUMERIC,this.data=e.toString()}r.getBitsLength=function(e){return 10*Math.floor(e/3)+(e%3?e%3*3+1:0)},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(e){let t,n,r;for(t=0;t+3<=this.data.length;t+=3)n=this.data.substr(t,3),r=parseInt(n,10),e.put(r,10);let i=this.data.length-t;i>0&&(n=this.data.substr(t),r=parseInt(n,10),e.put(r,i*3+1))},t.exports=r})),ce=t(((e,t)=>{let n=N(),r=`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:`.split(``);function i(e){this.mode=n.ALPHANUMERIC,this.data=e}i.getBitsLength=function(e){return 11*Math.floor(e/2)+e%2*6},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(e){let t;for(t=0;t+2<=this.data.length;t+=2){let n=r.indexOf(this.data[t])*45;n+=r.indexOf(this.data[t+1]),e.put(n,11)}this.data.length%2&&e.put(r.indexOf(this.data[t]),6)},t.exports=i})),le=t(((e,t)=>{let n=N();function r(e){this.mode=n.BYTE,typeof e==`string`?this.data=new TextEncoder().encode(e):this.data=new Uint8Array(e)}r.getBitsLength=function(e){return e*8},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(e){for(let t=0,n=this.data.length;t<n;t++)e.put(this.data[t],8)},t.exports=r})),ue=t(((e,t)=>{let n=N(),r=T();function i(e){this.mode=n.KANJI,this.data=e}i.getBitsLength=function(e){return e*13},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(e){let t;for(t=0;t<this.data.length;t++){let n=r.toSJIS(this.data[t]);if(n>=33088&&n<=40956)n-=33088;else if(n>=57408&&n<=60351)n-=49472;else throw Error(`Invalid SJIS character: `+this.data[t]+`
|
|
3
3
|
Make sure your charset is UTF-8`);n=(n>>>8&255)*192+(n&255),e.put(n,13)}},t.exports=i})),de=t(((e,t)=>{var n={single_source_shortest_paths:function(e,t,r){var i={},a={};a[t]=0;var o=n.PriorityQueue.make();o.push(t,0);for(var s,c,l,u,d,f,p,m,h;!o.empty();)for(l in s=o.pop(),c=s.value,u=s.cost,d=e[c]||{},d)d.hasOwnProperty(l)&&(f=d[l],p=u+f,m=a[l],h=a[l]===void 0,(h||m>p)&&(a[l]=p,o.push(l,p),i[l]=c));if(r!==void 0&&a[r]===void 0){var g=[`Could not find a path from `,t,` to `,r,`.`].join(``);throw Error(g)}return i},extract_shortest_path_from_predecessor_list:function(e,t){for(var n=[],r=t;r;)n.push(r),e[r],r=e[r];return n.reverse(),n},find_path:function(e,t,r){var i=n.single_source_shortest_paths(e,t,r);return n.extract_shortest_path_from_predecessor_list(i,r)},PriorityQueue:{make:function(e){var t=n.PriorityQueue,r={},i;for(i in e||={},t)t.hasOwnProperty(i)&&(r[i]=t[i]);return r.queue=[],r.sorter=e.sorter||t.default_sorter,r},default_sorter:function(e,t){return e.cost-t.cost},push:function(e,t){var n={value:e,cost:t};this.queue.push(n),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};t!==void 0&&(t.exports=n)})),fe=t((e=>{let t=N(),n=se(),r=ce(),i=le(),a=ue(),o=M(),s=T(),c=de();function l(e){return unescape(encodeURIComponent(e)).length}function u(e,t,n){let r=[],i;for(;(i=e.exec(n))!==null;)r.push({data:i[0],index:i.index,mode:t,length:i[0].length});return r}function d(e){let n=u(o.NUMERIC,t.NUMERIC,e),r=u(o.ALPHANUMERIC,t.ALPHANUMERIC,e),i,a;return s.isKanjiModeEnabled()?(i=u(o.BYTE,t.BYTE,e),a=u(o.KANJI,t.KANJI,e)):(i=u(o.BYTE_KANJI,t.BYTE,e),a=[]),n.concat(r,i,a).sort(function(e,t){return e.index-t.index}).map(function(e){return{data:e.data,mode:e.mode,length:e.length}})}function f(e,o){switch(o){case t.NUMERIC:return n.getBitsLength(e);case t.ALPHANUMERIC:return r.getBitsLength(e);case t.KANJI:return a.getBitsLength(e);case t.BYTE:return i.getBitsLength(e)}}function p(e){return e.reduce(function(e,t){let n=e.length-1>=0?e[e.length-1]:null;return n&&n.mode===t.mode?(e[e.length-1].data+=t.data,e):(e.push(t),e)},[])}function m(e){let n=[];for(let r=0;r<e.length;r++){let i=e[r];switch(i.mode){case t.NUMERIC:n.push([i,{data:i.data,mode:t.ALPHANUMERIC,length:i.length},{data:i.data,mode:t.BYTE,length:i.length}]);break;case t.ALPHANUMERIC:n.push([i,{data:i.data,mode:t.BYTE,length:i.length}]);break;case t.KANJI:n.push([i,{data:i.data,mode:t.BYTE,length:l(i.data)}]);break;case t.BYTE:n.push([{data:i.data,mode:t.BYTE,length:l(i.data)}])}}return n}function h(e,n){let r={},i={start:{}},a=[`start`];for(let o=0;o<e.length;o++){let s=e[o],c=[];for(let e=0;e<s.length;e++){let l=s[e],u=``+o+e;c.push(u),r[u]={node:l,lastCount:0},i[u]={};for(let e=0;e<a.length;e++){let o=a[e];r[o]&&r[o].node.mode===l.mode?(i[o][u]=f(r[o].lastCount+l.length,l.mode)-f(r[o].lastCount,l.mode),r[o].lastCount+=l.length):(r[o]&&(r[o].lastCount=l.length),i[o][u]=f(l.length,l.mode)+4+t.getCharCountIndicator(l.mode,n))}}a=c}for(let e=0;e<a.length;e++)i[a[e]].end=0;return{map:i,table:r}}function g(e,o){let c,l=t.getBestModeForData(e);if(c=t.from(o,l),c!==t.BYTE&&c.bit<l.bit)throw Error(`"`+e+`" cannot be encoded with mode `+t.toString(c)+`.
|
|
4
4
|
Suggested mode is: `+t.toString(l));switch(c===t.KANJI&&!s.isKanjiModeEnabled()&&(c=t.BYTE),c){case t.NUMERIC:return new n(e);case t.ALPHANUMERIC:return new r(e);case t.KANJI:return new a(e);case t.BYTE:return new i(e)}}e.fromArray=function(e){return e.reduce(function(e,t){return typeof t==`string`?e.push(g(t,null)):t.data&&e.push(g(t.data,t.mode)),e},[])},e.fromString=function(t,n){let r=h(m(d(t,s.isKanjiModeEnabled())),n),i=c.find_path(r.map,`start`,`end`),a=[];for(let e=1;e<i.length-1;e++)a.push(r.table[i[e]].node);return e.fromArray(p(a))},e.rawSplit=function(t){return e.fromArray(d(t,s.isKanjiModeEnabled()))}})),pe=t((e=>{let t=T(),n=E(),r=D(),i=ee(),a=te(),o=ne(),s=O(),c=k(),l=ie(),u=ae(),d=oe(),f=N(),p=fe();function m(e,t){let n=e.size,r=o.getPositions(t);for(let t=0;t<r.length;t++){let i=r[t][0],a=r[t][1];for(let t=-1;t<=7;t++)if(!(i+t<=-1||n<=i+t))for(let r=-1;r<=7;r++)a+r<=-1||n<=a+r||(t>=0&&t<=6&&(r===0||r===6)||r>=0&&r<=6&&(t===0||t===6)||t>=2&&t<=4&&r>=2&&r<=4?e.set(i+t,a+r,!0,!0):e.set(i+t,a+r,!1,!0))}}function h(e){let t=e.size;for(let n=8;n<t-8;n++){let t=n%2==0;e.set(n,6,t,!0),e.set(6,n,t,!0)}}function g(e,t){let n=a.getPositions(t);for(let t=0;t<n.length;t++){let r=n[t][0],i=n[t][1];for(let t=-2;t<=2;t++)for(let n=-2;n<=2;n++)t===-2||t===2||n===-2||n===2||t===0&&n===0?e.set(r+t,i+n,!0,!0):e.set(r+t,i+n,!1,!0)}}function _(e,t){let n=e.size,r=u.getEncodedBits(t),i,a,o;for(let t=0;t<18;t++)i=Math.floor(t/3),a=t%3+n-8-3,o=(r>>t&1)==1,e.set(i,a,o,!0),e.set(a,i,o,!0)}function v(e,t,n){let r=e.size,i=d.getEncodedBits(t,n),a,o;for(a=0;a<15;a++)o=(i>>a&1)==1,a<6?e.set(a,8,o,!0):a<8?e.set(a+1,8,o,!0):e.set(r-15+a,8,o,!0),a<8?e.set(8,r-a-1,o,!0):a<9?e.set(8,15-a-1+1,o,!0):e.set(8,15-a-1,o,!0);e.set(r-8,8,1,!0)}function y(e,t){let n=e.size,r=-1,i=n-1,a=7,o=0;for(let s=n-1;s>0;s-=2)for(s===6&&s--;;){for(let n=0;n<2;n++)if(!e.isReserved(i,s-n)){let r=!1;o<t.length&&(r=(t[o]>>>a&1)==1),e.set(i,s-n,r),a--,a===-1&&(o++,a=7)}if(i+=r,i<0||n<=i){i-=r,r=-r;break}}}function b(e,n,i){let a=new r;i.forEach(function(t){a.put(t.mode.bit,4),a.put(t.getLength(),f.getCharCountIndicator(t.mode,e)),t.write(a)});let o=(t.getSymbolTotalCodewords(e)-c.getTotalCodewordsCount(e,n))*8;for(a.getLengthInBits()+4<=o&&a.put(0,4);a.getLengthInBits()%8!=0;)a.putBit(0);let s=(o-a.getLengthInBits())/8;for(let e=0;e<s;e++)a.put(e%2?17:236,8);return x(a,e,n)}function x(e,n,r){let i=t.getSymbolTotalCodewords(n),a=i-c.getTotalCodewordsCount(n,r),o=c.getBlocksCount(n,r),s=o-i%o,u=Math.floor(i/o),d=Math.floor(a/o),f=d+1,p=u-d,m=new l(p),h=0,g=Array(o),_=Array(o),v=0,y=new Uint8Array(e.buffer);for(let e=0;e<o;e++){let t=e<s?d:f;g[e]=y.slice(h,h+t),_[e]=m.encode(g[e]),h+=t,v=Math.max(v,t)}let b=new Uint8Array(i),x=0,S,C;for(S=0;S<v;S++)for(C=0;C<o;C++)S<g[C].length&&(b[x++]=g[C][S]);for(S=0;S<p;S++)for(C=0;C<o;C++)b[x++]=_[C][S];return b}function S(e,n,r,a){let o;if(Array.isArray(e))o=p.fromArray(e);else if(typeof e==`string`){let t=n;if(!t){let n=p.rawSplit(e);t=u.getBestVersionForData(n,r)}o=p.fromString(e,t||40)}else throw Error(`Invalid data`);let c=u.getBestVersionForData(o,r);if(!c)throw Error(`The amount of data is too big to be stored in a QR Code`);if(!n)n=c;else if(n<c)throw Error(`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{i as e,r as t,t as n}from"./rolldown-runtime-aKtaBQYM.js";import{c as r,r as i}from"./config-CrHchneq.js";import{n as a,t as o}from"./txPromise-EBECky1b.js";import{t as s}from"./getConfig-D89uJgo5.js";import{_ as c,g as l,h as u,u as d}from"./custom-element-security-NCqQ5lmC.js";import{n as f}from"./toast-60iDlgiH.js";import{Cn as p,Sn as m,Tt as h,a as g,bn as _,t as v,u as y,wn as b}from"./orchestrator-
|
|
1
|
+
import{i as e,r as t,t as n}from"./rolldown-runtime-aKtaBQYM.js";import{c as r,r as i}from"./config-CrHchneq.js";import{n as a,t as o}from"./txPromise-EBECky1b.js";import{t as s}from"./getConfig-D89uJgo5.js";import{_ as c,g as l,h as u,u as d}from"./custom-element-security-NCqQ5lmC.js";import{n as f}from"./toast-60iDlgiH.js";import{Cn as p,Sn as m,Tt as h,a as g,bn as _,t as v,u as y,wn as b}from"./orchestrator-tHWrqi_F.js";import{t as x}from"./setConfig-DFMYnYLE.js";import{t as S}from"./browser-nBz_r6l4.js";import{t as C}from"./buffer-9oRIc-5Z.js";import{a as w,n as T,r as E,t as D}from"./toast-D3gxhZpN.js";import{n as O}from"./e2e-bridge-D28tOggc.js";import{t as k}from"./shadow-claw-element-DIrv3P6A.js";import{t as A}from"./effect-BEsuusE8.js";import{i as j,n as M,r as N}from"./prompt-api-OUOP-B-R.js";import{t as P}from"./config-value-oBfKgLT4.js";import"./shadow-claw-page-header-action-button-Bmua3mAb.js";import"./shadow-claw-page-header-DMKbkv3s.js";import{t as F}from"./markdown-SiFq0PTy.js";import{i as I,n as L,o as R}from"./peerjs-CuSJUH-r.js";import{t as z}from"./downloadGroupFile-9niHBj9n.js";import{t as B}from"./file-viewer-BVg3B_JH.js";import"./shadow-claw-dialog-BrOwAOdk.js"
|
|
2
2
|
/*!
|
|
3
3
|
|
|
4
4
|
JSZip v3.10.1 - A JavaScript class for generating and reading zip files
|