shadow-claw 1.43.0 → 1.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/.well-known/mcp/server-card.json +1 -1
  2. package/.well-known/mcp.json +1 -1
  3. package/dist/cli/chunk--nlZNQrZ2.js +1 -0
  4. package/dist/cli/{chunk-CbhVal4Q.js → chunk-2IASlfOI.js} +1 -1
  5. package/dist/cli/chunk-2zUw4dTY.js +1 -0
  6. package/dist/cli/{chunk-C_vLt0YP2.js → chunk-B2WxN9-12.js} +11 -11
  7. package/dist/cli/{chunk-Cweo3Jpw.js → chunk-B5hVBRV-.js} +1 -1
  8. package/dist/cli/chunk-B7vuMvBg.js +1 -0
  9. package/dist/cli/{chunk-C9b5a_Uy.js → chunk-B9Fx2rWZ.js} +1 -1
  10. package/dist/cli/chunk-BChoeGdY2.js +1 -0
  11. package/dist/cli/{chunk-CcWCWTJe.js → chunk-BJmbRsHN.js} +1 -1
  12. package/dist/cli/{chunk-BN0tqRNn.js → chunk-BQyGyg86.js} +1 -1
  13. package/dist/cli/chunk-B_FQjokZ.js +1 -0
  14. package/dist/cli/chunk-BaAL1yLC.js +1 -0
  15. package/dist/cli/{chunk-L61wFp4H2.js → chunk-BaSEVtTB2.js} +1 -1
  16. package/dist/cli/chunk-BckYclkX2.js +1 -0
  17. package/dist/cli/chunk-Bh0Uxjld.js +1 -0
  18. package/dist/cli/{chunk-D57WTK9e2.js → chunk-By9miObI2.js} +2 -2
  19. package/dist/cli/chunk-C0cwwqX52.js +1 -0
  20. package/dist/cli/{chunk-DJ1pR9f82.js → chunk-C0vTb5Ur2.js} +1 -1
  21. package/dist/cli/{chunk-BBCAo_6N2.js → chunk-C3iVPEyi2.js} +1 -1
  22. package/dist/cli/{chunk-D3NWfUvq2.js → chunk-CJpZQ6NS2.js} +1 -1
  23. package/dist/cli/{chunk-Dhh0lHO6.js → chunk-CKksk-lA.js} +1 -1
  24. package/dist/cli/chunk-CKm7-SCu.js +1 -0
  25. package/dist/cli/{chunk-BPcMKhha2.js → chunk-CLKlXl_32.js} +1 -1
  26. package/dist/cli/{chunk-rvRQOKXp.js → chunk-CQeDQc3C.js} +1 -1
  27. package/dist/cli/{chunk-DYGlH-un.js → chunk-CSMegkz6.js} +1 -1
  28. package/dist/cli/{chunk-B1TEXFG-2.js → chunk-CTnzEqW82.js} +1 -1
  29. package/dist/cli/chunk-CiHV_7H62.js +1 -0
  30. package/dist/cli/{chunk-D9F645K62.js → chunk-CimeIb1j2.js} +1 -1
  31. package/dist/cli/{chunk-D-lQkf5X.js → chunk-CjhfhiNM.js} +1 -1
  32. package/dist/cli/{chunk-BTe1dZD0.js → chunk-ClBaEe8W.js} +1 -1
  33. package/dist/cli/{chunk-BmDywCXL.js → chunk-Cvv2Fuue.js} +1 -1
  34. package/dist/cli/{chunk-DcYfXgpg2.js → chunk-Cx8_qww-2.js} +1 -1
  35. package/dist/cli/{chunk-CvKmsXS02.js → chunk-D0UlHLhC2.js} +1 -1
  36. package/dist/cli/chunk-D0jQVYRk.js +5 -0
  37. package/dist/cli/chunk-D0sHV-Z82.js +1 -0
  38. package/dist/cli/{chunk-DeMPVxlQ.js → chunk-D2FGpjOO.js} +1 -1
  39. package/dist/cli/chunk-D3cH54jW.js +1 -0
  40. package/dist/cli/{chunk-Di4LxQG-2.js → chunk-D9dG7jP92.js} +1 -1
  41. package/dist/cli/{chunk-qTCLBos1.js → chunk-DKw-oTLT.js} +1 -1
  42. package/dist/cli/{chunk-BHnjkiBp2.js → chunk-DOkl85Te2.js} +1 -1
  43. package/dist/cli/{chunk-XS0fMLl1.js → chunk-DPySd-KC.js} +1 -1
  44. package/dist/cli/{chunk-BkTdHRZ6.js → chunk-DSleWP3c.js} +1 -1
  45. package/dist/cli/chunk-DjKQO7aV.js +1 -0
  46. package/dist/cli/{chunk-CA8_jPwF2.js → chunk-Dk750_9R2.js} +11 -11
  47. package/dist/cli/{chunk-nsFY_QXf.js → chunk-Do2xLVwC.js} +1 -1
  48. package/dist/cli/{chunk-DcMyZrds.js → chunk-DoVkBeQv.js} +1 -1
  49. package/dist/cli/chunk-DrB5Gd6y2.js +1 -0
  50. package/dist/cli/chunk-DwKjgkq92.js +1 -0
  51. package/dist/cli/{chunk-DJU6hg1K2.js → chunk-DxZ6DcRo2.js} +63 -63
  52. package/dist/cli/chunk-IGlHHKOH.js +1 -0
  53. package/dist/cli/{chunk-CpoiOFRV.js → chunk-NclDuGcY.js} +1 -1
  54. package/dist/cli/{chunk-CeFei3f_2.js → chunk-TO5qzf3J2.js} +303 -303
  55. package/dist/cli/{chunk-swUMQyE2.js → chunk-TYwbIsK9.js} +9 -9
  56. package/dist/cli/{chunk-CWs_KY8q.js → chunk-Xz02ooJU.js} +1 -1
  57. package/dist/cli/{chunk-DfKXmvNq.js → chunk-e4ARaRhY.js} +1 -1
  58. package/dist/cli/{chunk-DuTr5h_-.js → chunk-g3j2rSPJ.js} +9 -9
  59. package/dist/cli/{chunk-JMI-k9_C.js → chunk-j0KG-6x9.js} +1 -1
  60. package/dist/cli/chunk-ud_DUk_f2.js +1 -0
  61. package/dist/cli/{chunk-BzqpsHxW2.js → chunk-zUKEZHmz2.js} +1 -1
  62. package/dist/cli/cli.js +2 -2
  63. package/dist/headless-agent.js +10 -10
  64. package/dist/public/.well-known/mcp/server-card.json +1 -1
  65. package/dist/public/.well-known/mcp.json +1 -1
  66. package/dist/public/docs/example/article/index.html +1 -1
  67. package/dist/public/docs/publishing/index.html +1 -1
  68. package/dist/public/docs/skill-creator/index.html +1 -1
  69. package/dist/public/docs/subsystems/cli.md +4 -0
  70. package/dist/public/index.html +1 -1
  71. package/dist/public/main/index.html +1 -1
  72. package/dist/public/main/memory/index.html +1 -1
  73. package/dist/public/service-worker.js +1 -1
  74. package/dist/server.js +761 -761
  75. package/package.json +1 -1
  76. package/src/cli/cli.ts +5 -1
  77. package/src/cli/commands/agent.test.ts +97 -4
  78. package/src/cli/commands/agent.ts +28 -2
  79. package/src/db/sqlite/openSqliteDatabase.test.ts +24 -0
  80. package/src/db/sqlite/openSqliteDatabase.ts +8 -1
  81. package/dist/cli/chunk-0WvYaMdi.js +0 -1
  82. package/dist/cli/chunk-BXNdnbwK.js +0 -1
  83. package/dist/cli/chunk-BlNmgi3c2.js +0 -1
  84. package/dist/cli/chunk-C7irE8d42.js +0 -1
  85. package/dist/cli/chunk-Cbbk_aex2.js +0 -1
  86. package/dist/cli/chunk-CdNTakxH2.js +0 -1
  87. package/dist/cli/chunk-Cqd6ZDkT.js +0 -1
  88. package/dist/cli/chunk-CvoMdhST2.js +0 -1
  89. package/dist/cli/chunk-DCRmnjTH.js +0 -1
  90. package/dist/cli/chunk-DFLqhyP_.js +0 -5
  91. package/dist/cli/chunk-DLUNHJGc.js +0 -1
  92. package/dist/cli/chunk-DfwnnpVo.js +0 -1
  93. package/dist/cli/chunk-DhJvrfsM.js +0 -1
  94. package/dist/cli/chunk-DhQQhCTL2.js +0 -1
  95. package/dist/cli/chunk-Drx4e34U.js +0 -1
  96. package/dist/cli/chunk-DwEMut0N.js +0 -1
  97. package/dist/cli/chunk-STsbFGCh2.js +0 -1
  98. /package/dist/cli/{chunk-Bb_85Mew.js → chunk-Bb_85Mew2.js} +0 -0
  99. /package/dist/cli/{chunk-CrWRlKmP.js → chunk-CrWRlKmP2.js} +0 -0
  100. /package/dist/cli/{chunk-D2vZJXHH2.js → chunk-D2vZJXHH.js} +0 -0
  101. /package/dist/cli/{chunk-D5U9WJ9X.js → chunk-D5U9WJ9X2.js} +0 -0
  102. /package/dist/cli/{chunk-DV5sRVN1.js → chunk-DV5sRVN12.js} +0 -0
  103. /package/dist/cli/{chunk-DXSwo4q72.js → chunk-DXSwo4q7.js} +0 -0
  104. /package/dist/cli/{chunk-Dv5oFrVy2.js → chunk-Dv5oFrVy.js} +0 -0
@@ -1,4 +1,4 @@
1
- <!doctype html><html lang="en"><head><title>ShadowClaw</title><meta charset="utf-8"><meta name="revision" content="36047b4ebfb0b650b1d8e7bd976ae757789acd44" /><meta name="version" content="1.43.0" /><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"><meta name="description" content="ShadowClaw - multi-runtime AI assistant." /><link rel="canonical" href="https://xt-ml.github.io/shadow-claw/"><meta property="og:title" content="ShadowClaw"><meta property="og:description" content="Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution."><meta property="og:type" content="website"><meta property="og:url" content="https://xt-ml.github.io/shadow-claw/"><meta property="og:image" content="https://xt-ml.github.io/shadow-claw/assets/icons/512.png"><meta name="twitter:card" content="summary"><meta name="twitter:title" content="ShadowClaw"><meta name="twitter:description" content="Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution."><meta name="twitter:image" content="https://xt-ml.github.io/shadow-claw/assets/icons/512.png"><script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"SoftwareApplication","@id":"https://xt-ml.github.io/shadow-claw/#software","name":"ShadowClaw","description":"Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution.","url":"https://xt-ml.github.io/shadow-claw/","applicationCategory":"DeveloperApplication","operatingSystem":"Web, Browser, Desktop","offers":{"@type":"Offer","price":"0","priceCurrency":"USD"},"author":{"@type":"Organization","name":"xt-ml","url":"https://github.com/xt-ml"},"codeRepository":"https://github.com/xt-ml/shadow-claw","license":"https://github.com/xt-ml/shadow-claw/blob/main/LICENSE"},{"@type":"WebSite","@id":"https://xt-ml.github.io/shadow-claw/#website","url":"https://xt-ml.github.io/shadow-claw/","name":"ShadowClaw","description":"Official website and live deployment of ShadowClaw multi-runtime AI assistant.","publisher":{"@type":"Organization","name":"xt-ml","url":"https://github.com/xt-ml"}},{"@type":"Organization","@id":"https://xt-ml.github.io/shadow-claw/#organization","name":"xt-ml","url":"https://github.com/xt-ml","sameAs":["https://github.com/xt-ml"]}]}</script><meta name="theme-color" content="#fff" /><meta http-equiv="origin-trial" content="A88uTgESYWcVgREKVReKB6jom41uP8TzW6ei3jNdidf+Xl6ONqKRjKNBphsxhrZmdkakLK3oXDgkGq53rtZYSAMAAAB2eyJvcmlnaW4iOiJodHRwczovL3h0LW1sLmdpdGh1Yi5pbzo0NDMiLCJmZWF0dXJlIjoiV2ViTUNQIiwiZXhwaXJ5IjoxNzk0ODczNjAwLCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlfQ=="><base href="/shadow-claw/" /><script id="shadow-claw-site-config" type="application/json">{"$schema":"https:\u002f\u002fjson-schema.org\u002fdraft\u002f2020-12\u002fschema","site":{"title":"ShadowClaw","description":"ShadowClaw - multi-runtime AI assistant.","themeColor":"#fff"},"branding":{"faviconPath":"assets\u002ficons\u002ffavicon.ico","appleTouchIconPath":"assets\u002ficons\u002f180.png","notFoundPath":"404.html"},"pwa":{"manifestPath":"manifest.json","themeColor":"#000000"},"sitemapPath":"sitemap.xml","assets":["assets"],"sidebar":{"pagesHidden":false,"chatHidden":false,"tasksHidden":false,"filesHidden":false,"defaultPage":"pages"},"pages":{"allowList":[],"denyList":[]},"settings":{"defaultToolsProfile":"__builtin_default"},"agent":{"defaultProvider":"transformers_js_local","defaultModel":"onnx-community\u002fgemma-3-1b-it-ONNX-GQA"},"customElements":{"allowedElements":["block-garden","block-garden-option","block-garden-select"],"allowedDomains":["kherrick.github.io","cdn.jsdelivr.net"]},"security":{"connectSrc":["'self'","blob:","data:","https:\u002f\u002fkherrick.github.io","https:\u002f\u002fcdn.jsdelivr.net"]}}</script>
1
+ <!doctype html><html lang="en"><head><title>ShadowClaw</title><meta charset="utf-8"><meta name="revision" content="6fd038c992eb684e7eca8ec9c8c3ce35519a511b" /><meta name="version" content="1.44.0" /><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"><meta name="description" content="ShadowClaw - multi-runtime AI assistant." /><link rel="canonical" href="https://xt-ml.github.io/shadow-claw/"><meta property="og:title" content="ShadowClaw"><meta property="og:description" content="Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution."><meta property="og:type" content="website"><meta property="og:url" content="https://xt-ml.github.io/shadow-claw/"><meta property="og:image" content="https://xt-ml.github.io/shadow-claw/assets/icons/512.png"><meta name="twitter:card" content="summary"><meta name="twitter:title" content="ShadowClaw"><meta name="twitter:description" content="Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution."><meta name="twitter:image" content="https://xt-ml.github.io/shadow-claw/assets/icons/512.png"><script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"SoftwareApplication","@id":"https://xt-ml.github.io/shadow-claw/#software","name":"ShadowClaw","description":"Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution.","url":"https://xt-ml.github.io/shadow-claw/","applicationCategory":"DeveloperApplication","operatingSystem":"Web, Browser, Desktop","offers":{"@type":"Offer","price":"0","priceCurrency":"USD"},"author":{"@type":"Organization","name":"xt-ml","url":"https://github.com/xt-ml"},"codeRepository":"https://github.com/xt-ml/shadow-claw","license":"https://github.com/xt-ml/shadow-claw/blob/main/LICENSE"},{"@type":"WebSite","@id":"https://xt-ml.github.io/shadow-claw/#website","url":"https://xt-ml.github.io/shadow-claw/","name":"ShadowClaw","description":"Official website and live deployment of ShadowClaw multi-runtime AI assistant.","publisher":{"@type":"Organization","name":"xt-ml","url":"https://github.com/xt-ml"}},{"@type":"Organization","@id":"https://xt-ml.github.io/shadow-claw/#organization","name":"xt-ml","url":"https://github.com/xt-ml","sameAs":["https://github.com/xt-ml"]}]}</script><meta name="theme-color" content="#fff" /><meta http-equiv="origin-trial" content="A88uTgESYWcVgREKVReKB6jom41uP8TzW6ei3jNdidf+Xl6ONqKRjKNBphsxhrZmdkakLK3oXDgkGq53rtZYSAMAAAB2eyJvcmlnaW4iOiJodHRwczovL3h0LW1sLmdpdGh1Yi5pbzo0NDMiLCJmZWF0dXJlIjoiV2ViTUNQIiwiZXhwaXJ5IjoxNzk0ODczNjAwLCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlfQ=="><base href="/shadow-claw/" /><script id="shadow-claw-site-config" type="application/json">{"$schema":"https:\u002f\u002fjson-schema.org\u002fdraft\u002f2020-12\u002fschema","site":{"title":"ShadowClaw","description":"ShadowClaw - multi-runtime AI assistant.","themeColor":"#fff"},"branding":{"faviconPath":"assets\u002ficons\u002ffavicon.ico","appleTouchIconPath":"assets\u002ficons\u002f180.png","notFoundPath":"404.html"},"pwa":{"manifestPath":"manifest.json","themeColor":"#000000"},"sitemapPath":"sitemap.xml","assets":["assets"],"sidebar":{"pagesHidden":false,"chatHidden":false,"tasksHidden":false,"filesHidden":false,"defaultPage":"pages"},"pages":{"allowList":[],"denyList":[]},"settings":{"defaultToolsProfile":"__builtin_default"},"agent":{"defaultProvider":"transformers_js_local","defaultModel":"onnx-community\u002fgemma-3-1b-it-ONNX-GQA"},"customElements":{"allowedElements":["block-garden","block-garden-option","block-garden-select"],"allowedDomains":["kherrick.github.io","cdn.jsdelivr.net"]},"security":{"connectSrc":["'self'","blob:","data:","https:\u002f\u002fkherrick.github.io","https:\u002f\u002fcdn.jsdelivr.net"]}}</script>
2
2
  <script>var ShadowClawThemeInit=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports);function n(){if(globalThis.trustedTypes)return;let e=new Map;globalThis.trustedTypes={createPolicy:(t,n)=>{if(e.has(t))throw TypeError(`Policy with name "${t}" already exists.`);let r={createHTML:n.createHTML?e=>n.createHTML(e):void 0,createScriptURL:n.createScriptURL?e=>n.createScriptURL(e):void 0,createScript:n.createScript?e=>n.createScript(e):void 0};return e.set(t,r),r},getPolicy:t=>e.get(t)??null,isHTML:e=>typeof e==`string`||e instanceof Object&&`toString`in e,isScriptURL:e=>typeof e==`string`||e instanceof Object&&`toString`in e,isScript:e=>typeof e==`string`||e instanceof Object&&`toString`in e}}let r=`__shadowClawDefaultTrustedTypesPolicyState`,i=`default`,a=`shadowclaw-sandbox`;function o(){let e=globalThis;return e[r]||(e[r]={initialized:!1,policy:null}),e[r]}function s(){let e=o();if(e.initialized)return;let t=Reflect.get(globalThis,`trustedTypes`);if(!(!t||typeof t.createPolicy!=`function`)){e.initialized=!0;try{if(typeof t.getPolicy==`function`){let n=t.getPolicy(i);if(n){e.policy=n;return}}let n=!1;if(typeof t.getPolicyNames==`function`){let e=t.getPolicyNames();Array.isArray(e)&&e.includes(i)&&(n=!0)}if(n){if(typeof t.getPolicy==`function`){let n=t.getPolicy(a);if(n){e.policy=n;return}}e.policy=t.createPolicy(a,{createHTML:e=>e,createScriptURL:e=>e});return}e.policy=t.createPolicy(i,{createHTML:e=>e,createScriptURL:e=>e})}catch{typeof t.getPolicy==`function`&&(e.policy=t.getPolicy(i)??t.getPolicy(a)??null)}}}new class{loading=!1;models=new Map;getModelInfo(e){if(!e||typeof e!=`string`)return null;let t=e.toLowerCase().trim(),n=this.models.get(t);if(n)return n;if(t.includes(`/`)){let e=t.split(`/`).pop();if(e&&this.models.has(e))return this.models.get(e)}else for(let[e,n]of this.models.entries())if(e.endsWith(`/${t}`))return n;if(t.includes(`:`)){let e=t.split(`:`)[0],n=this.getModelInfo(e);if(n)return n}return null}registerModelInfo(e,t){this.models.set(e.toLowerCase(),t)}clear(){this.models.clear()}async fetchModelInfo(e,t,n){if(e.modelsUrl){this.loading=!0;try{let r=new Headers;if(r.set(`Content-Type`,`application/json`),e.headers)for(let[t,n]of Object.entries(e.headers))r.set(t,n);if(n)for(let[e,t]of Object.entries(n))r.set(e,t);if(t&&e.apiKeyHeader){let n=e.apiKeyHeaderFormat;r.set(e.apiKeyHeader,n?n.replace(`{key}`,t):t)}let i=await fetch(e.modelsUrl,{headers:r});if(!i.ok)throw Error(`HTTP ${i.status} ${i.statusText}`);let a=await i.json(),o=Array.isArray(a.data)?a.data:Array.isArray(a.models)?a.models:[];for(let e of o){if(!e.id)continue;let t=e.context_length??e.context_window??0,n=e.max_completion_tokens||e.per_request_limits?.completion_tokens||e.top_provider?.max_completion_tokens||null,r=typeof e.supports_tools==`boolean`?e.supports_tools:typeof e.supportsTools==`boolean`?e.supportsTools:void 0,i=this.extractModalities(e,`input`),a=this.extractModalities(e,`output`),o=this.modalitiesInclude(i,`image`,`vision`),s=this.modalitiesInclude(i,`audio`,`voice`,`hearing`),c=this.modalitiesInclude(i,`video`),l=e.id===`openrouter/free`||this.supportedParametersInclude(e,`image`,`vision`,`audio`,`tool`,`structured`),u=this.extractReasoning(e),d=typeof e.supports_prompt_caching==`boolean`?e.supports_prompt_caching:typeof e.supportsPromptCaching==`boolean`?e.supportsPromptCaching:this.supportedParametersInclude(e,`cache_control`,`prompt_caching`)?!0:void 0;!t&&Array.isArray(e.providers)&&e.providers.length>0&&(t=e.providers[0]?.context_length||0),this.registerModelInfo(e.id,{contextWindow:t,maxOutput:n,...r!==void 0&&{supportsTools:r},...i.length>0&&{inputModalities:i},...a.length>0&&{outputModalities:a},...o!==void 0&&{supportsImageInput:o},...s!==void 0&&{supportsAudioInput:s},...c!==void 0&&{supportsVideoInput:c},...u&&{reasoning:u},...l&&{routesByRequestFeatures:l},...d!==void 0&&{supportsPromptCaching:d}})}o.length>0&&console.log(`[ModelRegistry] Registered ${o.length} models for provider "${e.id}"`)}catch(t){console.error(`[ModelRegistry] Error fetching models for ${e.id}:`,t)}finally{this.loading=!1}}}extractModalities(e,t){let n=t===`input`?e.input_modalities||e.inputModalities:e.output_modalities||e.outputModalities,r=e.architecture||{},i=t===`input`?r.input_modalities||r.inputModalities:r.output_modalities||r.outputModalities,a=typeof r.modality==`string`?r.modality:``,o=this.parseArchitectureModality(a,t),s=[...this.normalizeStringArray(n),...this.normalizeStringArray(i),...o];return Array.from(new Set(s))}extractReasoning(e){let t=e?.reasoning;if(!t||typeof t!=`object`)return;let n=this.normalizeStringArray(t.supported_efforts),r=typeof t.default_effort==`string`?t.default_effort.toLowerCase():void 0,i=typeof t.default_enabled==`boolean`?t.default_enabled:void 0,a=typeof t.supports_max_tokens==`boolean`?t.supports_max_tokens:void 0,o=typeof t.mandatory==`boolean`?t.mandatory:void 0;if(!(n.length===0&&r===void 0&&i===void 0&&a===void 0&&o===void 0))return{...n.length>0&&{supportedEfforts:n},...r!==void 0&&{defaultEffort:r},...i!==void 0&&{defaultEnabled:i},...a!==void 0&&{supportsMaxTokens:a},...o!==void 0&&{mandatory:o}}}modalitiesInclude(e,...t){if(e.length!==0)return t.some(t=>e.some(e=>e.includes(t)))}normalizeStringArray(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`).map(e=>e.toLowerCase()):[]}parseArchitectureModality(e,t){if(!e)return[];let[n=``,r=``]=e.toLowerCase().split(`->`).map(e=>e.trim());return(t===`input`?n:r).split(/[+,/\s]+/).map(e=>e.trim()).filter(Boolean)}supportedParametersInclude(e,...t){let n=this.normalizeStringArray(e.supported_parameters||e.supportedParameters);return t.some(e=>n.some(t=>t.includes(e)))}};function c(e){return e.replace(/^\/+|\/+$/g,``)}function l(e){let t=c(e);return t.endsWith(`/index.html`)?t=t.slice(0,-11):t.endsWith(`index.html`)&&(t=t.slice(0,-10)),c(t)}function u(e){let t=c(e),n=t.split(`/`).filter(Boolean);if(n.length===0)return null;let r=n[0].toLowerCase();if(r===`pages`){if(n.length>=3){let e=n[1];return{page:`pages`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e,path:n.slice(2).join(`/`)}}return{page:`pages`,groupId:`br:main`,path:n.slice(1).join(`/`)}}if(r===`files`){let e=n[1]||`main`;return{page:`files`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e,path:n.slice(2).join(`/`)||void 0}}if(r===`chat`){let e=n[1]||`main`;return{page:`chat`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e}}if(r===`tasks`){let e=n[1]||`main`;return{page:`tasks`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e}}return r===`main`?{page:`pages`,groupId:`br:main`,path:n.slice(1).join(`/`)}:{page:`pages`,groupId:`br:main`,path:t}}function d(){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 f(e,t){let n=t||d();if(!n||!n.routes)return null;let r=l(e);for(let[e,t]of Object.entries(n.routes))if(!(!t||!t.prettyPath)&&l(t.prettyPath)===r)return u(e);return null}let p=null,ee=new Set([`chat`,`files`,`tasks`,`pages`,`settings`,`tools`,`channels`]);function m(){p=null}typeof globalThis<`u`&&(globalThis.__applyBasePathCacheReset=m);function h(){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=te();return!n||n===`/`?``:n.replace(/^\/+|\/+$/g,``).replace(/[^a-zA-Z0-9_-]/g,`-`)}function te(){if(p!==null)return p;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 p=`/`,p;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 p=`/`,p;if(!n)return p=`/`+e[0]+`/`,p}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+=`/`),p=t,p}catch{}}}let t=e.pathname||`/`;if(t===`/`)return p=`/`,p;let n=t.split(`/`).filter(Boolean),r=n.findIndex(e=>ee.has(e.toLowerCase()));return r>=0?r===0?(p=`/`,p):(p=`/`+n.slice(0,r).join(`/`)+`/`,p):f(t)?(p=`/`,p):n.length===1&&!t.includes(`.`)?(p=`/`+n[0]+`/`,p):(p=`/`,p)}function ne(e){let t=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return RegExp(`(^|\\s)@${t}\\b`,`i`)}ne(`ShadowClaw`);function g(){let e=h();return e?`shadowclaw-${e}`:`shadowclaw`}g();let _={github:{providerId:`github`,name:`GitHub`,aliases:[`github`,`api.github.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`token `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://github.com/login/oauth/authorize`,tokenUrl:`https://github.com/login/oauth/access_token`,defaultScopes:[`repo`,`read:user`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},gitlab:{providerId:`gitlab`,name:`GitLab`,aliases:[`gitlab`,`gitlab.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`PRIVATE-TOKEN`,headerPrefix:``},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},tokenAuthByServiceType:{git_remote:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}}},oauth:{authorizeUrl:`https://gitlab.com/oauth/authorize`,tokenUrl:`https://gitlab.com/oauth/token`,defaultScopes:[`read_api`,`read_user`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},figma:{providerId:`figma`,name:`Figma`,aliases:[`figma`,`api.figma.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`X-Figma-Token`,headerPrefix:``},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://www.figma.com/oauth`,tokenUrl:`https://api.figma.com/v1/oauth/token`,refreshUrl:`https://api.figma.com/v1/oauth/refresh`,defaultScopes:[],usePkce:!0,clientAuthMethod:`basic_header`,scopeSeparator:`space`}},notion:{providerId:`notion`,name:`Notion`,aliases:[`notion`,`api.notion.com`,`notion.so`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://api.notion.com/v1/oauth/authorize`,tokenUrl:`https://api.notion.com/v1/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`basic_header`,scopeSeparator:`space`}},microsoft_graph:{providerId:`microsoft_graph`,name:`Microsoft Graph`,aliases:[`microsoft`,`graph.microsoft.com`,`microsoft_graph`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://login.microsoftonline.com/common/oauth2/v2.0/authorize`,tokenUrl:`https://login.microsoftonline.com/common/oauth2/v2.0/token`,defaultScopes:[`openid`,`profile`,`offline_access`,`User.Read`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},yahoo_mail:{providerId:`yahoo_mail`,name:`Yahoo Mail`,aliases:[`yahoo`,`yahoo_mail`,`mail.yahoo.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://api.login.yahoo.com/oauth2/request_auth`,tokenUrl:`https://api.login.yahoo.com/oauth2/get_token`,defaultScopes:[`mail-r`,`mail-w`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},google:{providerId:`google`,name:`Google`,aliases:[`google`,`googleapis.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://accounts.google.com/o/oauth2/v2/auth`,tokenUrl:`https://oauth2.googleapis.com/token`,defaultScopes:[`openid`,`profile`,`email`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},atlassian:{providerId:`atlassian`,name:`Atlassian`,aliases:[`atlassian`,`api.atlassian.com`],modes:[`oauth`,`token`,`basic`],defaultMode:`basic`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`,`basic_userpass`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `},basic:{headerName:`Authorization`,headerPrefix:`Basic `}},oauth:{authorizeUrl:`https://auth.atlassian.com/authorize`,tokenUrl:`https://auth.atlassian.com/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},slack:{providerId:`slack`,name:`Slack`,aliases:[`slack`,`slack.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://slack.com/oauth/v2/authorize`,tokenUrl:`https://slack.com/api/oauth.v2.access`,defaultScopes:[],usePkce:!1,clientAuthMethod:`request_body`,scopeSeparator:`comma`}},linear:{providerId:`linear`,name:`Linear`,aliases:[`linear`,`api.linear.app`,`linear.app`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://linear.app/oauth/authorize`,tokenUrl:`https://api.linear.app/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},azure_devops:{providerId:`azure_devops`,name:`Azure DevOps`,aliases:[`azure_devops`,`dev.azure.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`,`basic_userpass`,`ssh_key`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},tokenAuthByServiceType:{git_remote:{token:{headerName:`Authorization`,headerPrefix:`Basic `},oauth:{headerName:`Authorization`,headerPrefix:`Basic `}}},oauth:{authorizeUrl:`https://app.vssps.visualstudio.com/oauth2/authorize`,tokenUrl:`https://app.vssps.visualstudio.com/oauth2/token`,defaultScopes:[`vso.code`,`vso.profile`,`offline_access`],usePkce:!1,clientAuthMethod:`request_body`,scopeSeparator:`space`}},custom_mcp:{providerId:`custom_mcp`,name:`Custom MCP`,aliases:[`custom_mcp`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`mcp_remote`,`webmcp_local`],authTypes:[`none`,`token`,`oauth`,`custom_header`,`ssh_key`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://example.com/oauth/authorize`,tokenUrl:`https://example.com/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}}};Object.fromEntries(Object.values(_).filter(e=>!!e.oauth).map(e=>{let t=e.oauth;return[e.providerId,{id:e.providerId,name:e.name,authorizeUrl:t.authorizeUrl,tokenUrl:t.tokenUrl,redirectUri:t.redirectUri,defaultScopes:t.defaultScopes,usePkce:t.usePkce,clientAuthMethod:t.clientAuthMethod,scopeSeparator:t.scopeSeparator}]})),Object.fromEntries(Object.values(_).map(e=>[e.providerId,{providerId:e.providerId,modes:e.modes,defaultMode:e.defaultMode}])),new Promise(e=>{});
3
3
  /*! @license DOMPurify 3.4.13 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.13/LICENSE */
4
4
  function v(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function y(e){if(Array.isArray(e))return e}function b(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,t!==0)for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return s}}function re(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
@@ -192,6 +192,7 @@ npx shadow-claw agent import https://xt-ml.github.io/shadow-claw-agent-cli-weath
192
192
  | `init` | `[dir]` | Initializes workspace directory with `.agents/skills`, `.agents/tools`, `database/`, and default `shadow-claw.config.json`. In interactive TTY environments, prompts for default model and offers immediate prewarm downloading (`--download`). |
193
193
  | `model`, `models` | `[action] [id]` | Inspects, queries, downloads, or configures local models (`list`, `remote`, `download`, `set`). Defaults to `list`. |
194
194
  | `run` | `<prompt>` | Executes a one-shot agent invocation. Persists messages to SQLite, formats conversation history, runs tool loop, streams output to stdout, and exits. Accepts `-` to read the prompt from stdin, or combines `<prompt>` with piped stdin data. |
195
+ | `clear` | none | Deletes all stored messages for the `--group` conversation (default `server:main`). |
195
196
  | `skills` | `[dir]` | Discovers and prints all available skills in `.agents/skills/` along with user-invocable status and diagnostics. |
196
197
  | `tools` | none | Lists all registered tools (built-in and declarative) annotated with `[headless-safe]` or `[browser-only]` capability tags. |
197
198
  | `tool` | `<name> [jsonArgs]` | When called with only `<name>`, prints the tool description and JSON Schema. When called with `[jsonArgs]`, executes the tool headlessly and prints the result. Accepts JSON arguments or plain text from stdin (auto-mapped to tool schema). |
@@ -213,6 +214,7 @@ npx shadow-claw agent import https://xt-ml.github.io/shadow-claw-agent-cli-weath
213
214
  | `--download` | boolean | Prewarm and download the model during agent init or before execution | `false` |
214
215
  | `--api-key <key>` | string | API key for cloud providers | auto-resolved from env |
215
216
  | `--stream` / `--no-stream` | boolean | Stream response tokens to stdout as they arrive | `true` |
217
+ | `--no-history` | boolean | Do not load prior conversation history for `agent run` | history loaded |
216
218
  | `--progress` / `--no-progress` | boolean | Show terminal progress bar during model downloads | `true` |
217
219
  | `--system-prompt <text>` | string | Override system prompt with inline text | `undefined` |
218
220
  | `--system-prompt-file <file>` | string | Load system prompt from a text or markdown file | `undefined` |
@@ -654,6 +656,7 @@ When running an autonomous agent (`shadow-claw agent run`), agents can discover
654
656
 
655
657
  1. **`list_peers`**: Discover active peer IDs.
656
658
  2. **`send_file`**: Send a workspace file with an optional prompt to another peer:
659
+
657
660
  ```json
658
661
  {
659
662
  "file_path": "reports/summary.md",
@@ -661,6 +664,7 @@ When running an autonomous agent (`shadow-claw agent run`), agents can discover
661
664
  "prompt": "Please review this summary report."
662
665
  }
663
666
  ```
667
+
664
668
  3. **`prompt_peer`**: Follow up with queries or instructions to the remote peer.
665
669
 
666
670
  ### `shadow-claw skills:index [dir]` (alias `agent-skills`)
@@ -1,4 +1,4 @@
1
- <!doctype html><html lang="en"><head><title>ShadowClaw</title><meta charset="utf-8"><meta name="revision" content="36047b4ebfb0b650b1d8e7bd976ae757789acd44" /><meta name="version" content="1.43.0" /><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"><meta name="description" content="ShadowClaw - multi-runtime AI assistant." /><link rel="canonical" href="https://xt-ml.github.io/shadow-claw/"><meta property="og:title" content="ShadowClaw"><meta property="og:description" content="Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution."><meta property="og:type" content="website"><meta property="og:url" content="https://xt-ml.github.io/shadow-claw/"><meta property="og:image" content="https://xt-ml.github.io/shadow-claw/assets/icons/512.png"><meta name="twitter:card" content="summary"><meta name="twitter:title" content="ShadowClaw"><meta name="twitter:description" content="Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution."><meta name="twitter:image" content="https://xt-ml.github.io/shadow-claw/assets/icons/512.png"><script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"SoftwareApplication","@id":"https://xt-ml.github.io/shadow-claw/#software","name":"ShadowClaw","description":"Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution.","url":"https://xt-ml.github.io/shadow-claw/","applicationCategory":"DeveloperApplication","operatingSystem":"Web, Browser, Desktop","offers":{"@type":"Offer","price":"0","priceCurrency":"USD"},"author":{"@type":"Organization","name":"xt-ml","url":"https://github.com/xt-ml"},"codeRepository":"https://github.com/xt-ml/shadow-claw","license":"https://github.com/xt-ml/shadow-claw/blob/main/LICENSE"},{"@type":"WebSite","@id":"https://xt-ml.github.io/shadow-claw/#website","url":"https://xt-ml.github.io/shadow-claw/","name":"ShadowClaw","description":"Official website and live deployment of ShadowClaw multi-runtime AI assistant.","publisher":{"@type":"Organization","name":"xt-ml","url":"https://github.com/xt-ml"}},{"@type":"Organization","@id":"https://xt-ml.github.io/shadow-claw/#organization","name":"xt-ml","url":"https://github.com/xt-ml","sameAs":["https://github.com/xt-ml"]}]}</script><meta name="theme-color" content="#fff" /><meta http-equiv="origin-trial" content="A88uTgESYWcVgREKVReKB6jom41uP8TzW6ei3jNdidf+Xl6ONqKRjKNBphsxhrZmdkakLK3oXDgkGq53rtZYSAMAAAB2eyJvcmlnaW4iOiJodHRwczovL3h0LW1sLmdpdGh1Yi5pbzo0NDMiLCJmZWF0dXJlIjoiV2ViTUNQIiwiZXhwaXJ5IjoxNzk0ODczNjAwLCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlfQ=="><base href="/shadow-claw/" /><script id="shadow-claw-site-config" type="application/json">{"$schema":"https:\u002f\u002fjson-schema.org\u002fdraft\u002f2020-12\u002fschema","site":{"title":"ShadowClaw","description":"ShadowClaw - multi-runtime AI assistant.","themeColor":"#fff"},"branding":{"faviconPath":"assets\u002ficons\u002ffavicon.ico","appleTouchIconPath":"assets\u002ficons\u002f180.png","notFoundPath":"404.html"},"pwa":{"manifestPath":"manifest.json","themeColor":"#000000"},"sitemapPath":"sitemap.xml","assets":["assets"],"sidebar":{"pagesHidden":false,"chatHidden":false,"tasksHidden":false,"filesHidden":false,"defaultPage":"pages"},"pages":{"allowList":[],"denyList":[]},"settings":{"defaultToolsProfile":"__builtin_default"},"agent":{"defaultProvider":"transformers_js_local","defaultModel":"onnx-community\u002fgemma-3-1b-it-ONNX-GQA"},"customElements":{"allowedElements":["block-garden","block-garden-option","block-garden-select"],"allowedDomains":["kherrick.github.io","cdn.jsdelivr.net"]},"security":{"connectSrc":["'self'","blob:","data:","https:\u002f\u002fkherrick.github.io","https:\u002f\u002fcdn.jsdelivr.net"]}}</script>
1
+ <!doctype html><html lang="en"><head><title>ShadowClaw</title><meta charset="utf-8"><meta name="revision" content="6fd038c992eb684e7eca8ec9c8c3ce35519a511b" /><meta name="version" content="1.44.0" /><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"><meta name="description" content="ShadowClaw - multi-runtime AI assistant." /><link rel="canonical" href="https://xt-ml.github.io/shadow-claw/"><meta property="og:title" content="ShadowClaw"><meta property="og:description" content="Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution."><meta property="og:type" content="website"><meta property="og:url" content="https://xt-ml.github.io/shadow-claw/"><meta property="og:image" content="https://xt-ml.github.io/shadow-claw/assets/icons/512.png"><meta name="twitter:card" content="summary"><meta name="twitter:title" content="ShadowClaw"><meta name="twitter:description" content="Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution."><meta name="twitter:image" content="https://xt-ml.github.io/shadow-claw/assets/icons/512.png"><script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"SoftwareApplication","@id":"https://xt-ml.github.io/shadow-claw/#software","name":"ShadowClaw","description":"Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution.","url":"https://xt-ml.github.io/shadow-claw/","applicationCategory":"DeveloperApplication","operatingSystem":"Web, Browser, Desktop","offers":{"@type":"Offer","price":"0","priceCurrency":"USD"},"author":{"@type":"Organization","name":"xt-ml","url":"https://github.com/xt-ml"},"codeRepository":"https://github.com/xt-ml/shadow-claw","license":"https://github.com/xt-ml/shadow-claw/blob/main/LICENSE"},{"@type":"WebSite","@id":"https://xt-ml.github.io/shadow-claw/#website","url":"https://xt-ml.github.io/shadow-claw/","name":"ShadowClaw","description":"Official website and live deployment of ShadowClaw multi-runtime AI assistant.","publisher":{"@type":"Organization","name":"xt-ml","url":"https://github.com/xt-ml"}},{"@type":"Organization","@id":"https://xt-ml.github.io/shadow-claw/#organization","name":"xt-ml","url":"https://github.com/xt-ml","sameAs":["https://github.com/xt-ml"]}]}</script><meta name="theme-color" content="#fff" /><meta http-equiv="origin-trial" content="A88uTgESYWcVgREKVReKB6jom41uP8TzW6ei3jNdidf+Xl6ONqKRjKNBphsxhrZmdkakLK3oXDgkGq53rtZYSAMAAAB2eyJvcmlnaW4iOiJodHRwczovL3h0LW1sLmdpdGh1Yi5pbzo0NDMiLCJmZWF0dXJlIjoiV2ViTUNQIiwiZXhwaXJ5IjoxNzk0ODczNjAwLCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlfQ=="><base href="/shadow-claw/" /><script id="shadow-claw-site-config" type="application/json">{"$schema":"https:\u002f\u002fjson-schema.org\u002fdraft\u002f2020-12\u002fschema","site":{"title":"ShadowClaw","description":"ShadowClaw - multi-runtime AI assistant.","themeColor":"#fff"},"branding":{"faviconPath":"assets\u002ficons\u002ffavicon.ico","appleTouchIconPath":"assets\u002ficons\u002f180.png","notFoundPath":"404.html"},"pwa":{"manifestPath":"manifest.json","themeColor":"#000000"},"sitemapPath":"sitemap.xml","assets":["assets"],"sidebar":{"pagesHidden":false,"chatHidden":false,"tasksHidden":false,"filesHidden":false,"defaultPage":"pages"},"pages":{"allowList":[],"denyList":[]},"settings":{"defaultToolsProfile":"__builtin_default"},"agent":{"defaultProvider":"transformers_js_local","defaultModel":"onnx-community\u002fgemma-3-1b-it-ONNX-GQA"},"customElements":{"allowedElements":["block-garden","block-garden-option","block-garden-select"],"allowedDomains":["kherrick.github.io","cdn.jsdelivr.net"]},"security":{"connectSrc":["'self'","blob:","data:","https:\u002f\u002fkherrick.github.io","https:\u002f\u002fcdn.jsdelivr.net"]}}</script>
2
2
  <script>var ShadowClawThemeInit=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports);function n(){if(globalThis.trustedTypes)return;let e=new Map;globalThis.trustedTypes={createPolicy:(t,n)=>{if(e.has(t))throw TypeError(`Policy with name "${t}" already exists.`);let r={createHTML:n.createHTML?e=>n.createHTML(e):void 0,createScriptURL:n.createScriptURL?e=>n.createScriptURL(e):void 0,createScript:n.createScript?e=>n.createScript(e):void 0};return e.set(t,r),r},getPolicy:t=>e.get(t)??null,isHTML:e=>typeof e==`string`||e instanceof Object&&`toString`in e,isScriptURL:e=>typeof e==`string`||e instanceof Object&&`toString`in e,isScript:e=>typeof e==`string`||e instanceof Object&&`toString`in e}}let r=`__shadowClawDefaultTrustedTypesPolicyState`,i=`default`,a=`shadowclaw-sandbox`;function o(){let e=globalThis;return e[r]||(e[r]={initialized:!1,policy:null}),e[r]}function s(){let e=o();if(e.initialized)return;let t=Reflect.get(globalThis,`trustedTypes`);if(!(!t||typeof t.createPolicy!=`function`)){e.initialized=!0;try{if(typeof t.getPolicy==`function`){let n=t.getPolicy(i);if(n){e.policy=n;return}}let n=!1;if(typeof t.getPolicyNames==`function`){let e=t.getPolicyNames();Array.isArray(e)&&e.includes(i)&&(n=!0)}if(n){if(typeof t.getPolicy==`function`){let n=t.getPolicy(a);if(n){e.policy=n;return}}e.policy=t.createPolicy(a,{createHTML:e=>e,createScriptURL:e=>e});return}e.policy=t.createPolicy(i,{createHTML:e=>e,createScriptURL:e=>e})}catch{typeof t.getPolicy==`function`&&(e.policy=t.getPolicy(i)??t.getPolicy(a)??null)}}}new class{loading=!1;models=new Map;getModelInfo(e){if(!e||typeof e!=`string`)return null;let t=e.toLowerCase().trim(),n=this.models.get(t);if(n)return n;if(t.includes(`/`)){let e=t.split(`/`).pop();if(e&&this.models.has(e))return this.models.get(e)}else for(let[e,n]of this.models.entries())if(e.endsWith(`/${t}`))return n;if(t.includes(`:`)){let e=t.split(`:`)[0],n=this.getModelInfo(e);if(n)return n}return null}registerModelInfo(e,t){this.models.set(e.toLowerCase(),t)}clear(){this.models.clear()}async fetchModelInfo(e,t,n){if(e.modelsUrl){this.loading=!0;try{let r=new Headers;if(r.set(`Content-Type`,`application/json`),e.headers)for(let[t,n]of Object.entries(e.headers))r.set(t,n);if(n)for(let[e,t]of Object.entries(n))r.set(e,t);if(t&&e.apiKeyHeader){let n=e.apiKeyHeaderFormat;r.set(e.apiKeyHeader,n?n.replace(`{key}`,t):t)}let i=await fetch(e.modelsUrl,{headers:r});if(!i.ok)throw Error(`HTTP ${i.status} ${i.statusText}`);let a=await i.json(),o=Array.isArray(a.data)?a.data:Array.isArray(a.models)?a.models:[];for(let e of o){if(!e.id)continue;let t=e.context_length??e.context_window??0,n=e.max_completion_tokens||e.per_request_limits?.completion_tokens||e.top_provider?.max_completion_tokens||null,r=typeof e.supports_tools==`boolean`?e.supports_tools:typeof e.supportsTools==`boolean`?e.supportsTools:void 0,i=this.extractModalities(e,`input`),a=this.extractModalities(e,`output`),o=this.modalitiesInclude(i,`image`,`vision`),s=this.modalitiesInclude(i,`audio`,`voice`,`hearing`),c=this.modalitiesInclude(i,`video`),l=e.id===`openrouter/free`||this.supportedParametersInclude(e,`image`,`vision`,`audio`,`tool`,`structured`),u=this.extractReasoning(e),d=typeof e.supports_prompt_caching==`boolean`?e.supports_prompt_caching:typeof e.supportsPromptCaching==`boolean`?e.supportsPromptCaching:this.supportedParametersInclude(e,`cache_control`,`prompt_caching`)?!0:void 0;!t&&Array.isArray(e.providers)&&e.providers.length>0&&(t=e.providers[0]?.context_length||0),this.registerModelInfo(e.id,{contextWindow:t,maxOutput:n,...r!==void 0&&{supportsTools:r},...i.length>0&&{inputModalities:i},...a.length>0&&{outputModalities:a},...o!==void 0&&{supportsImageInput:o},...s!==void 0&&{supportsAudioInput:s},...c!==void 0&&{supportsVideoInput:c},...u&&{reasoning:u},...l&&{routesByRequestFeatures:l},...d!==void 0&&{supportsPromptCaching:d}})}o.length>0&&console.log(`[ModelRegistry] Registered ${o.length} models for provider "${e.id}"`)}catch(t){console.error(`[ModelRegistry] Error fetching models for ${e.id}:`,t)}finally{this.loading=!1}}}extractModalities(e,t){let n=t===`input`?e.input_modalities||e.inputModalities:e.output_modalities||e.outputModalities,r=e.architecture||{},i=t===`input`?r.input_modalities||r.inputModalities:r.output_modalities||r.outputModalities,a=typeof r.modality==`string`?r.modality:``,o=this.parseArchitectureModality(a,t),s=[...this.normalizeStringArray(n),...this.normalizeStringArray(i),...o];return Array.from(new Set(s))}extractReasoning(e){let t=e?.reasoning;if(!t||typeof t!=`object`)return;let n=this.normalizeStringArray(t.supported_efforts),r=typeof t.default_effort==`string`?t.default_effort.toLowerCase():void 0,i=typeof t.default_enabled==`boolean`?t.default_enabled:void 0,a=typeof t.supports_max_tokens==`boolean`?t.supports_max_tokens:void 0,o=typeof t.mandatory==`boolean`?t.mandatory:void 0;if(!(n.length===0&&r===void 0&&i===void 0&&a===void 0&&o===void 0))return{...n.length>0&&{supportedEfforts:n},...r!==void 0&&{defaultEffort:r},...i!==void 0&&{defaultEnabled:i},...a!==void 0&&{supportsMaxTokens:a},...o!==void 0&&{mandatory:o}}}modalitiesInclude(e,...t){if(e.length!==0)return t.some(t=>e.some(e=>e.includes(t)))}normalizeStringArray(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`).map(e=>e.toLowerCase()):[]}parseArchitectureModality(e,t){if(!e)return[];let[n=``,r=``]=e.toLowerCase().split(`->`).map(e=>e.trim());return(t===`input`?n:r).split(/[+,/\s]+/).map(e=>e.trim()).filter(Boolean)}supportedParametersInclude(e,...t){let n=this.normalizeStringArray(e.supported_parameters||e.supportedParameters);return t.some(e=>n.some(t=>t.includes(e)))}};function c(e){return e.replace(/^\/+|\/+$/g,``)}function l(e){let t=c(e);return t.endsWith(`/index.html`)?t=t.slice(0,-11):t.endsWith(`index.html`)&&(t=t.slice(0,-10)),c(t)}function u(e){let t=c(e),n=t.split(`/`).filter(Boolean);if(n.length===0)return null;let r=n[0].toLowerCase();if(r===`pages`){if(n.length>=3){let e=n[1];return{page:`pages`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e,path:n.slice(2).join(`/`)}}return{page:`pages`,groupId:`br:main`,path:n.slice(1).join(`/`)}}if(r===`files`){let e=n[1]||`main`;return{page:`files`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e,path:n.slice(2).join(`/`)||void 0}}if(r===`chat`){let e=n[1]||`main`;return{page:`chat`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e}}if(r===`tasks`){let e=n[1]||`main`;return{page:`tasks`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e}}return r===`main`?{page:`pages`,groupId:`br:main`,path:n.slice(1).join(`/`)}:{page:`pages`,groupId:`br:main`,path:t}}function d(){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 f(e,t){let n=t||d();if(!n||!n.routes)return null;let r=l(e);for(let[e,t]of Object.entries(n.routes))if(!(!t||!t.prettyPath)&&l(t.prettyPath)===r)return u(e);return null}let p=null,ee=new Set([`chat`,`files`,`tasks`,`pages`,`settings`,`tools`,`channels`]);function m(){p=null}typeof globalThis<`u`&&(globalThis.__applyBasePathCacheReset=m);function h(){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=te();return!n||n===`/`?``:n.replace(/^\/+|\/+$/g,``).replace(/[^a-zA-Z0-9_-]/g,`-`)}function te(){if(p!==null)return p;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 p=`/`,p;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 p=`/`,p;if(!n)return p=`/`+e[0]+`/`,p}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+=`/`),p=t,p}catch{}}}let t=e.pathname||`/`;if(t===`/`)return p=`/`,p;let n=t.split(`/`).filter(Boolean),r=n.findIndex(e=>ee.has(e.toLowerCase()));return r>=0?r===0?(p=`/`,p):(p=`/`+n.slice(0,r).join(`/`)+`/`,p):f(t)?(p=`/`,p):n.length===1&&!t.includes(`.`)?(p=`/`+n[0]+`/`,p):(p=`/`,p)}function ne(e){let t=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return RegExp(`(^|\\s)@${t}\\b`,`i`)}ne(`ShadowClaw`);function g(){let e=h();return e?`shadowclaw-${e}`:`shadowclaw`}g();let _={github:{providerId:`github`,name:`GitHub`,aliases:[`github`,`api.github.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`token `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://github.com/login/oauth/authorize`,tokenUrl:`https://github.com/login/oauth/access_token`,defaultScopes:[`repo`,`read:user`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},gitlab:{providerId:`gitlab`,name:`GitLab`,aliases:[`gitlab`,`gitlab.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`PRIVATE-TOKEN`,headerPrefix:``},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},tokenAuthByServiceType:{git_remote:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}}},oauth:{authorizeUrl:`https://gitlab.com/oauth/authorize`,tokenUrl:`https://gitlab.com/oauth/token`,defaultScopes:[`read_api`,`read_user`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},figma:{providerId:`figma`,name:`Figma`,aliases:[`figma`,`api.figma.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`X-Figma-Token`,headerPrefix:``},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://www.figma.com/oauth`,tokenUrl:`https://api.figma.com/v1/oauth/token`,refreshUrl:`https://api.figma.com/v1/oauth/refresh`,defaultScopes:[],usePkce:!0,clientAuthMethod:`basic_header`,scopeSeparator:`space`}},notion:{providerId:`notion`,name:`Notion`,aliases:[`notion`,`api.notion.com`,`notion.so`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://api.notion.com/v1/oauth/authorize`,tokenUrl:`https://api.notion.com/v1/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`basic_header`,scopeSeparator:`space`}},microsoft_graph:{providerId:`microsoft_graph`,name:`Microsoft Graph`,aliases:[`microsoft`,`graph.microsoft.com`,`microsoft_graph`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://login.microsoftonline.com/common/oauth2/v2.0/authorize`,tokenUrl:`https://login.microsoftonline.com/common/oauth2/v2.0/token`,defaultScopes:[`openid`,`profile`,`offline_access`,`User.Read`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},yahoo_mail:{providerId:`yahoo_mail`,name:`Yahoo Mail`,aliases:[`yahoo`,`yahoo_mail`,`mail.yahoo.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://api.login.yahoo.com/oauth2/request_auth`,tokenUrl:`https://api.login.yahoo.com/oauth2/get_token`,defaultScopes:[`mail-r`,`mail-w`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},google:{providerId:`google`,name:`Google`,aliases:[`google`,`googleapis.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://accounts.google.com/o/oauth2/v2/auth`,tokenUrl:`https://oauth2.googleapis.com/token`,defaultScopes:[`openid`,`profile`,`email`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},atlassian:{providerId:`atlassian`,name:`Atlassian`,aliases:[`atlassian`,`api.atlassian.com`],modes:[`oauth`,`token`,`basic`],defaultMode:`basic`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`,`basic_userpass`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `},basic:{headerName:`Authorization`,headerPrefix:`Basic `}},oauth:{authorizeUrl:`https://auth.atlassian.com/authorize`,tokenUrl:`https://auth.atlassian.com/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},slack:{providerId:`slack`,name:`Slack`,aliases:[`slack`,`slack.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://slack.com/oauth/v2/authorize`,tokenUrl:`https://slack.com/api/oauth.v2.access`,defaultScopes:[],usePkce:!1,clientAuthMethod:`request_body`,scopeSeparator:`comma`}},linear:{providerId:`linear`,name:`Linear`,aliases:[`linear`,`api.linear.app`,`linear.app`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://linear.app/oauth/authorize`,tokenUrl:`https://api.linear.app/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},azure_devops:{providerId:`azure_devops`,name:`Azure DevOps`,aliases:[`azure_devops`,`dev.azure.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`,`basic_userpass`,`ssh_key`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},tokenAuthByServiceType:{git_remote:{token:{headerName:`Authorization`,headerPrefix:`Basic `},oauth:{headerName:`Authorization`,headerPrefix:`Basic `}}},oauth:{authorizeUrl:`https://app.vssps.visualstudio.com/oauth2/authorize`,tokenUrl:`https://app.vssps.visualstudio.com/oauth2/token`,defaultScopes:[`vso.code`,`vso.profile`,`offline_access`],usePkce:!1,clientAuthMethod:`request_body`,scopeSeparator:`space`}},custom_mcp:{providerId:`custom_mcp`,name:`Custom MCP`,aliases:[`custom_mcp`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`mcp_remote`,`webmcp_local`],authTypes:[`none`,`token`,`oauth`,`custom_header`,`ssh_key`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://example.com/oauth/authorize`,tokenUrl:`https://example.com/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}}};Object.fromEntries(Object.values(_).filter(e=>!!e.oauth).map(e=>{let t=e.oauth;return[e.providerId,{id:e.providerId,name:e.name,authorizeUrl:t.authorizeUrl,tokenUrl:t.tokenUrl,redirectUri:t.redirectUri,defaultScopes:t.defaultScopes,usePkce:t.usePkce,clientAuthMethod:t.clientAuthMethod,scopeSeparator:t.scopeSeparator}]})),Object.fromEntries(Object.values(_).map(e=>[e.providerId,{providerId:e.providerId,modes:e.modes,defaultMode:e.defaultMode}])),new Promise(e=>{});
3
3
  /*! @license DOMPurify 3.4.13 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.13/LICENSE */
4
4
  function v(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function y(e){if(Array.isArray(e))return e}function b(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,t!==0)for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return s}}function re(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
@@ -1,4 +1,4 @@
1
- <!doctype html><html lang="en"><head><title>ShadowClaw</title><meta charset="utf-8"><meta name="revision" content="36047b4ebfb0b650b1d8e7bd976ae757789acd44" /><meta name="version" content="1.43.0" /><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"><meta name="description" content="ShadowClaw - multi-runtime AI assistant." /><link rel="canonical" href="https://xt-ml.github.io/shadow-claw/"><meta property="og:title" content="ShadowClaw"><meta property="og:description" content="Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution."><meta property="og:type" content="website"><meta property="og:url" content="https://xt-ml.github.io/shadow-claw/"><meta property="og:image" content="https://xt-ml.github.io/shadow-claw/assets/icons/512.png"><meta name="twitter:card" content="summary"><meta name="twitter:title" content="ShadowClaw"><meta name="twitter:description" content="Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution."><meta name="twitter:image" content="https://xt-ml.github.io/shadow-claw/assets/icons/512.png"><script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"SoftwareApplication","@id":"https://xt-ml.github.io/shadow-claw/#software","name":"ShadowClaw","description":"Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution.","url":"https://xt-ml.github.io/shadow-claw/","applicationCategory":"DeveloperApplication","operatingSystem":"Web, Browser, Desktop","offers":{"@type":"Offer","price":"0","priceCurrency":"USD"},"author":{"@type":"Organization","name":"xt-ml","url":"https://github.com/xt-ml"},"codeRepository":"https://github.com/xt-ml/shadow-claw","license":"https://github.com/xt-ml/shadow-claw/blob/main/LICENSE"},{"@type":"WebSite","@id":"https://xt-ml.github.io/shadow-claw/#website","url":"https://xt-ml.github.io/shadow-claw/","name":"ShadowClaw","description":"Official website and live deployment of ShadowClaw multi-runtime AI assistant.","publisher":{"@type":"Organization","name":"xt-ml","url":"https://github.com/xt-ml"}},{"@type":"Organization","@id":"https://xt-ml.github.io/shadow-claw/#organization","name":"xt-ml","url":"https://github.com/xt-ml","sameAs":["https://github.com/xt-ml"]}]}</script><meta name="theme-color" content="#fff" /><meta http-equiv="origin-trial" content="A88uTgESYWcVgREKVReKB6jom41uP8TzW6ei3jNdidf+Xl6ONqKRjKNBphsxhrZmdkakLK3oXDgkGq53rtZYSAMAAAB2eyJvcmlnaW4iOiJodHRwczovL3h0LW1sLmdpdGh1Yi5pbzo0NDMiLCJmZWF0dXJlIjoiV2ViTUNQIiwiZXhwaXJ5IjoxNzk0ODczNjAwLCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlfQ=="><base href="/shadow-claw/" /><script id="shadow-claw-site-config" type="application/json">{"$schema":"https:\u002f\u002fjson-schema.org\u002fdraft\u002f2020-12\u002fschema","site":{"title":"ShadowClaw","description":"ShadowClaw - multi-runtime AI assistant.","themeColor":"#fff"},"branding":{"faviconPath":"assets\u002ficons\u002ffavicon.ico","appleTouchIconPath":"assets\u002ficons\u002f180.png","notFoundPath":"404.html"},"pwa":{"manifestPath":"manifest.json","themeColor":"#000000"},"sitemapPath":"sitemap.xml","assets":["assets"],"sidebar":{"pagesHidden":false,"chatHidden":false,"tasksHidden":false,"filesHidden":false,"defaultPage":"pages"},"pages":{"allowList":[],"denyList":[]},"settings":{"defaultToolsProfile":"__builtin_default"},"agent":{"defaultProvider":"transformers_js_local","defaultModel":"onnx-community\u002fgemma-3-1b-it-ONNX-GQA"},"customElements":{"allowedElements":["block-garden","block-garden-option","block-garden-select"],"allowedDomains":["kherrick.github.io","cdn.jsdelivr.net"]},"security":{"connectSrc":["'self'","blob:","data:","https:\u002f\u002fkherrick.github.io","https:\u002f\u002fcdn.jsdelivr.net"]}}</script>
1
+ <!doctype html><html lang="en"><head><title>ShadowClaw</title><meta charset="utf-8"><meta name="revision" content="6fd038c992eb684e7eca8ec9c8c3ce35519a511b" /><meta name="version" content="1.44.0" /><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"><meta name="description" content="ShadowClaw - multi-runtime AI assistant." /><link rel="canonical" href="https://xt-ml.github.io/shadow-claw/"><meta property="og:title" content="ShadowClaw"><meta property="og:description" content="Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution."><meta property="og:type" content="website"><meta property="og:url" content="https://xt-ml.github.io/shadow-claw/"><meta property="og:image" content="https://xt-ml.github.io/shadow-claw/assets/icons/512.png"><meta name="twitter:card" content="summary"><meta name="twitter:title" content="ShadowClaw"><meta name="twitter:description" content="Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution."><meta name="twitter:image" content="https://xt-ml.github.io/shadow-claw/assets/icons/512.png"><script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"SoftwareApplication","@id":"https://xt-ml.github.io/shadow-claw/#software","name":"ShadowClaw","description":"Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution.","url":"https://xt-ml.github.io/shadow-claw/","applicationCategory":"DeveloperApplication","operatingSystem":"Web, Browser, Desktop","offers":{"@type":"Offer","price":"0","priceCurrency":"USD"},"author":{"@type":"Organization","name":"xt-ml","url":"https://github.com/xt-ml"},"codeRepository":"https://github.com/xt-ml/shadow-claw","license":"https://github.com/xt-ml/shadow-claw/blob/main/LICENSE"},{"@type":"WebSite","@id":"https://xt-ml.github.io/shadow-claw/#website","url":"https://xt-ml.github.io/shadow-claw/","name":"ShadowClaw","description":"Official website and live deployment of ShadowClaw multi-runtime AI assistant.","publisher":{"@type":"Organization","name":"xt-ml","url":"https://github.com/xt-ml"}},{"@type":"Organization","@id":"https://xt-ml.github.io/shadow-claw/#organization","name":"xt-ml","url":"https://github.com/xt-ml","sameAs":["https://github.com/xt-ml"]}]}</script><meta name="theme-color" content="#fff" /><meta http-equiv="origin-trial" content="A88uTgESYWcVgREKVReKB6jom41uP8TzW6ei3jNdidf+Xl6ONqKRjKNBphsxhrZmdkakLK3oXDgkGq53rtZYSAMAAAB2eyJvcmlnaW4iOiJodHRwczovL3h0LW1sLmdpdGh1Yi5pbzo0NDMiLCJmZWF0dXJlIjoiV2ViTUNQIiwiZXhwaXJ5IjoxNzk0ODczNjAwLCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlfQ=="><base href="/shadow-claw/" /><script id="shadow-claw-site-config" type="application/json">{"$schema":"https:\u002f\u002fjson-schema.org\u002fdraft\u002f2020-12\u002fschema","site":{"title":"ShadowClaw","description":"ShadowClaw - multi-runtime AI assistant.","themeColor":"#fff"},"branding":{"faviconPath":"assets\u002ficons\u002ffavicon.ico","appleTouchIconPath":"assets\u002ficons\u002f180.png","notFoundPath":"404.html"},"pwa":{"manifestPath":"manifest.json","themeColor":"#000000"},"sitemapPath":"sitemap.xml","assets":["assets"],"sidebar":{"pagesHidden":false,"chatHidden":false,"tasksHidden":false,"filesHidden":false,"defaultPage":"pages"},"pages":{"allowList":[],"denyList":[]},"settings":{"defaultToolsProfile":"__builtin_default"},"agent":{"defaultProvider":"transformers_js_local","defaultModel":"onnx-community\u002fgemma-3-1b-it-ONNX-GQA"},"customElements":{"allowedElements":["block-garden","block-garden-option","block-garden-select"],"allowedDomains":["kherrick.github.io","cdn.jsdelivr.net"]},"security":{"connectSrc":["'self'","blob:","data:","https:\u002f\u002fkherrick.github.io","https:\u002f\u002fcdn.jsdelivr.net"]}}</script>
2
2
  <script>var ShadowClawThemeInit=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports);function n(){if(globalThis.trustedTypes)return;let e=new Map;globalThis.trustedTypes={createPolicy:(t,n)=>{if(e.has(t))throw TypeError(`Policy with name "${t}" already exists.`);let r={createHTML:n.createHTML?e=>n.createHTML(e):void 0,createScriptURL:n.createScriptURL?e=>n.createScriptURL(e):void 0,createScript:n.createScript?e=>n.createScript(e):void 0};return e.set(t,r),r},getPolicy:t=>e.get(t)??null,isHTML:e=>typeof e==`string`||e instanceof Object&&`toString`in e,isScriptURL:e=>typeof e==`string`||e instanceof Object&&`toString`in e,isScript:e=>typeof e==`string`||e instanceof Object&&`toString`in e}}let r=`__shadowClawDefaultTrustedTypesPolicyState`,i=`default`,a=`shadowclaw-sandbox`;function o(){let e=globalThis;return e[r]||(e[r]={initialized:!1,policy:null}),e[r]}function s(){let e=o();if(e.initialized)return;let t=Reflect.get(globalThis,`trustedTypes`);if(!(!t||typeof t.createPolicy!=`function`)){e.initialized=!0;try{if(typeof t.getPolicy==`function`){let n=t.getPolicy(i);if(n){e.policy=n;return}}let n=!1;if(typeof t.getPolicyNames==`function`){let e=t.getPolicyNames();Array.isArray(e)&&e.includes(i)&&(n=!0)}if(n){if(typeof t.getPolicy==`function`){let n=t.getPolicy(a);if(n){e.policy=n;return}}e.policy=t.createPolicy(a,{createHTML:e=>e,createScriptURL:e=>e});return}e.policy=t.createPolicy(i,{createHTML:e=>e,createScriptURL:e=>e})}catch{typeof t.getPolicy==`function`&&(e.policy=t.getPolicy(i)??t.getPolicy(a)??null)}}}new class{loading=!1;models=new Map;getModelInfo(e){if(!e||typeof e!=`string`)return null;let t=e.toLowerCase().trim(),n=this.models.get(t);if(n)return n;if(t.includes(`/`)){let e=t.split(`/`).pop();if(e&&this.models.has(e))return this.models.get(e)}else for(let[e,n]of this.models.entries())if(e.endsWith(`/${t}`))return n;if(t.includes(`:`)){let e=t.split(`:`)[0],n=this.getModelInfo(e);if(n)return n}return null}registerModelInfo(e,t){this.models.set(e.toLowerCase(),t)}clear(){this.models.clear()}async fetchModelInfo(e,t,n){if(e.modelsUrl){this.loading=!0;try{let r=new Headers;if(r.set(`Content-Type`,`application/json`),e.headers)for(let[t,n]of Object.entries(e.headers))r.set(t,n);if(n)for(let[e,t]of Object.entries(n))r.set(e,t);if(t&&e.apiKeyHeader){let n=e.apiKeyHeaderFormat;r.set(e.apiKeyHeader,n?n.replace(`{key}`,t):t)}let i=await fetch(e.modelsUrl,{headers:r});if(!i.ok)throw Error(`HTTP ${i.status} ${i.statusText}`);let a=await i.json(),o=Array.isArray(a.data)?a.data:Array.isArray(a.models)?a.models:[];for(let e of o){if(!e.id)continue;let t=e.context_length??e.context_window??0,n=e.max_completion_tokens||e.per_request_limits?.completion_tokens||e.top_provider?.max_completion_tokens||null,r=typeof e.supports_tools==`boolean`?e.supports_tools:typeof e.supportsTools==`boolean`?e.supportsTools:void 0,i=this.extractModalities(e,`input`),a=this.extractModalities(e,`output`),o=this.modalitiesInclude(i,`image`,`vision`),s=this.modalitiesInclude(i,`audio`,`voice`,`hearing`),c=this.modalitiesInclude(i,`video`),l=e.id===`openrouter/free`||this.supportedParametersInclude(e,`image`,`vision`,`audio`,`tool`,`structured`),u=this.extractReasoning(e),d=typeof e.supports_prompt_caching==`boolean`?e.supports_prompt_caching:typeof e.supportsPromptCaching==`boolean`?e.supportsPromptCaching:this.supportedParametersInclude(e,`cache_control`,`prompt_caching`)?!0:void 0;!t&&Array.isArray(e.providers)&&e.providers.length>0&&(t=e.providers[0]?.context_length||0),this.registerModelInfo(e.id,{contextWindow:t,maxOutput:n,...r!==void 0&&{supportsTools:r},...i.length>0&&{inputModalities:i},...a.length>0&&{outputModalities:a},...o!==void 0&&{supportsImageInput:o},...s!==void 0&&{supportsAudioInput:s},...c!==void 0&&{supportsVideoInput:c},...u&&{reasoning:u},...l&&{routesByRequestFeatures:l},...d!==void 0&&{supportsPromptCaching:d}})}o.length>0&&console.log(`[ModelRegistry] Registered ${o.length} models for provider "${e.id}"`)}catch(t){console.error(`[ModelRegistry] Error fetching models for ${e.id}:`,t)}finally{this.loading=!1}}}extractModalities(e,t){let n=t===`input`?e.input_modalities||e.inputModalities:e.output_modalities||e.outputModalities,r=e.architecture||{},i=t===`input`?r.input_modalities||r.inputModalities:r.output_modalities||r.outputModalities,a=typeof r.modality==`string`?r.modality:``,o=this.parseArchitectureModality(a,t),s=[...this.normalizeStringArray(n),...this.normalizeStringArray(i),...o];return Array.from(new Set(s))}extractReasoning(e){let t=e?.reasoning;if(!t||typeof t!=`object`)return;let n=this.normalizeStringArray(t.supported_efforts),r=typeof t.default_effort==`string`?t.default_effort.toLowerCase():void 0,i=typeof t.default_enabled==`boolean`?t.default_enabled:void 0,a=typeof t.supports_max_tokens==`boolean`?t.supports_max_tokens:void 0,o=typeof t.mandatory==`boolean`?t.mandatory:void 0;if(!(n.length===0&&r===void 0&&i===void 0&&a===void 0&&o===void 0))return{...n.length>0&&{supportedEfforts:n},...r!==void 0&&{defaultEffort:r},...i!==void 0&&{defaultEnabled:i},...a!==void 0&&{supportsMaxTokens:a},...o!==void 0&&{mandatory:o}}}modalitiesInclude(e,...t){if(e.length!==0)return t.some(t=>e.some(e=>e.includes(t)))}normalizeStringArray(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`).map(e=>e.toLowerCase()):[]}parseArchitectureModality(e,t){if(!e)return[];let[n=``,r=``]=e.toLowerCase().split(`->`).map(e=>e.trim());return(t===`input`?n:r).split(/[+,/\s]+/).map(e=>e.trim()).filter(Boolean)}supportedParametersInclude(e,...t){let n=this.normalizeStringArray(e.supported_parameters||e.supportedParameters);return t.some(e=>n.some(t=>t.includes(e)))}};function c(e){return e.replace(/^\/+|\/+$/g,``)}function l(e){let t=c(e);return t.endsWith(`/index.html`)?t=t.slice(0,-11):t.endsWith(`index.html`)&&(t=t.slice(0,-10)),c(t)}function u(e){let t=c(e),n=t.split(`/`).filter(Boolean);if(n.length===0)return null;let r=n[0].toLowerCase();if(r===`pages`){if(n.length>=3){let e=n[1];return{page:`pages`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e,path:n.slice(2).join(`/`)}}return{page:`pages`,groupId:`br:main`,path:n.slice(1).join(`/`)}}if(r===`files`){let e=n[1]||`main`;return{page:`files`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e,path:n.slice(2).join(`/`)||void 0}}if(r===`chat`){let e=n[1]||`main`;return{page:`chat`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e}}if(r===`tasks`){let e=n[1]||`main`;return{page:`tasks`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e}}return r===`main`?{page:`pages`,groupId:`br:main`,path:n.slice(1).join(`/`)}:{page:`pages`,groupId:`br:main`,path:t}}function d(){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 f(e,t){let n=t||d();if(!n||!n.routes)return null;let r=l(e);for(let[e,t]of Object.entries(n.routes))if(!(!t||!t.prettyPath)&&l(t.prettyPath)===r)return u(e);return null}let p=null,ee=new Set([`chat`,`files`,`tasks`,`pages`,`settings`,`tools`,`channels`]);function m(){p=null}typeof globalThis<`u`&&(globalThis.__applyBasePathCacheReset=m);function h(){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=te();return!n||n===`/`?``:n.replace(/^\/+|\/+$/g,``).replace(/[^a-zA-Z0-9_-]/g,`-`)}function te(){if(p!==null)return p;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 p=`/`,p;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 p=`/`,p;if(!n)return p=`/`+e[0]+`/`,p}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+=`/`),p=t,p}catch{}}}let t=e.pathname||`/`;if(t===`/`)return p=`/`,p;let n=t.split(`/`).filter(Boolean),r=n.findIndex(e=>ee.has(e.toLowerCase()));return r>=0?r===0?(p=`/`,p):(p=`/`+n.slice(0,r).join(`/`)+`/`,p):f(t)?(p=`/`,p):n.length===1&&!t.includes(`.`)?(p=`/`+n[0]+`/`,p):(p=`/`,p)}function ne(e){let t=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return RegExp(`(^|\\s)@${t}\\b`,`i`)}ne(`ShadowClaw`);function g(){let e=h();return e?`shadowclaw-${e}`:`shadowclaw`}g();let _={github:{providerId:`github`,name:`GitHub`,aliases:[`github`,`api.github.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`token `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://github.com/login/oauth/authorize`,tokenUrl:`https://github.com/login/oauth/access_token`,defaultScopes:[`repo`,`read:user`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},gitlab:{providerId:`gitlab`,name:`GitLab`,aliases:[`gitlab`,`gitlab.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`PRIVATE-TOKEN`,headerPrefix:``},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},tokenAuthByServiceType:{git_remote:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}}},oauth:{authorizeUrl:`https://gitlab.com/oauth/authorize`,tokenUrl:`https://gitlab.com/oauth/token`,defaultScopes:[`read_api`,`read_user`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},figma:{providerId:`figma`,name:`Figma`,aliases:[`figma`,`api.figma.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`X-Figma-Token`,headerPrefix:``},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://www.figma.com/oauth`,tokenUrl:`https://api.figma.com/v1/oauth/token`,refreshUrl:`https://api.figma.com/v1/oauth/refresh`,defaultScopes:[],usePkce:!0,clientAuthMethod:`basic_header`,scopeSeparator:`space`}},notion:{providerId:`notion`,name:`Notion`,aliases:[`notion`,`api.notion.com`,`notion.so`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://api.notion.com/v1/oauth/authorize`,tokenUrl:`https://api.notion.com/v1/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`basic_header`,scopeSeparator:`space`}},microsoft_graph:{providerId:`microsoft_graph`,name:`Microsoft Graph`,aliases:[`microsoft`,`graph.microsoft.com`,`microsoft_graph`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://login.microsoftonline.com/common/oauth2/v2.0/authorize`,tokenUrl:`https://login.microsoftonline.com/common/oauth2/v2.0/token`,defaultScopes:[`openid`,`profile`,`offline_access`,`User.Read`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},yahoo_mail:{providerId:`yahoo_mail`,name:`Yahoo Mail`,aliases:[`yahoo`,`yahoo_mail`,`mail.yahoo.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://api.login.yahoo.com/oauth2/request_auth`,tokenUrl:`https://api.login.yahoo.com/oauth2/get_token`,defaultScopes:[`mail-r`,`mail-w`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},google:{providerId:`google`,name:`Google`,aliases:[`google`,`googleapis.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://accounts.google.com/o/oauth2/v2/auth`,tokenUrl:`https://oauth2.googleapis.com/token`,defaultScopes:[`openid`,`profile`,`email`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},atlassian:{providerId:`atlassian`,name:`Atlassian`,aliases:[`atlassian`,`api.atlassian.com`],modes:[`oauth`,`token`,`basic`],defaultMode:`basic`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`,`basic_userpass`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `},basic:{headerName:`Authorization`,headerPrefix:`Basic `}},oauth:{authorizeUrl:`https://auth.atlassian.com/authorize`,tokenUrl:`https://auth.atlassian.com/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},slack:{providerId:`slack`,name:`Slack`,aliases:[`slack`,`slack.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://slack.com/oauth/v2/authorize`,tokenUrl:`https://slack.com/api/oauth.v2.access`,defaultScopes:[],usePkce:!1,clientAuthMethod:`request_body`,scopeSeparator:`comma`}},linear:{providerId:`linear`,name:`Linear`,aliases:[`linear`,`api.linear.app`,`linear.app`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://linear.app/oauth/authorize`,tokenUrl:`https://api.linear.app/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},azure_devops:{providerId:`azure_devops`,name:`Azure DevOps`,aliases:[`azure_devops`,`dev.azure.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`,`basic_userpass`,`ssh_key`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},tokenAuthByServiceType:{git_remote:{token:{headerName:`Authorization`,headerPrefix:`Basic `},oauth:{headerName:`Authorization`,headerPrefix:`Basic `}}},oauth:{authorizeUrl:`https://app.vssps.visualstudio.com/oauth2/authorize`,tokenUrl:`https://app.vssps.visualstudio.com/oauth2/token`,defaultScopes:[`vso.code`,`vso.profile`,`offline_access`],usePkce:!1,clientAuthMethod:`request_body`,scopeSeparator:`space`}},custom_mcp:{providerId:`custom_mcp`,name:`Custom MCP`,aliases:[`custom_mcp`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`mcp_remote`,`webmcp_local`],authTypes:[`none`,`token`,`oauth`,`custom_header`,`ssh_key`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://example.com/oauth/authorize`,tokenUrl:`https://example.com/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}}};Object.fromEntries(Object.values(_).filter(e=>!!e.oauth).map(e=>{let t=e.oauth;return[e.providerId,{id:e.providerId,name:e.name,authorizeUrl:t.authorizeUrl,tokenUrl:t.tokenUrl,redirectUri:t.redirectUri,defaultScopes:t.defaultScopes,usePkce:t.usePkce,clientAuthMethod:t.clientAuthMethod,scopeSeparator:t.scopeSeparator}]})),Object.fromEntries(Object.values(_).map(e=>[e.providerId,{providerId:e.providerId,modes:e.modes,defaultMode:e.defaultMode}])),new Promise(e=>{});
3
3
  /*! @license DOMPurify 3.4.13 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.13/LICENSE */
4
4
  function v(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function y(e){if(Array.isArray(e))return e}function b(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,t!==0)for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return s}}function re(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
@@ -1,4 +1,4 @@
1
- <!doctype html><html lang="en"><head><title>ShadowClaw</title><meta charset="utf-8"><meta name="revision" content="36047b4ebfb0b650b1d8e7bd976ae757789acd44" /><meta name="version" content="1.43.0" /><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"><meta name="description" content="ShadowClaw - multi-runtime AI assistant." /><link rel="canonical" href="https://xt-ml.github.io/shadow-claw/"><meta property="og:title" content="ShadowClaw"><meta property="og:description" content="Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution."><meta property="og:type" content="website"><meta property="og:url" content="https://xt-ml.github.io/shadow-claw/"><meta property="og:image" content="https://xt-ml.github.io/shadow-claw/assets/icons/512.png"><meta name="twitter:card" content="summary"><meta name="twitter:title" content="ShadowClaw"><meta name="twitter:description" content="Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution."><meta name="twitter:image" content="https://xt-ml.github.io/shadow-claw/assets/icons/512.png"><script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"SoftwareApplication","@id":"https://xt-ml.github.io/shadow-claw/#software","name":"ShadowClaw","description":"Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution.","url":"https://xt-ml.github.io/shadow-claw/","applicationCategory":"DeveloperApplication","operatingSystem":"Web, Browser, Desktop","offers":{"@type":"Offer","price":"0","priceCurrency":"USD"},"author":{"@type":"Organization","name":"xt-ml","url":"https://github.com/xt-ml"},"codeRepository":"https://github.com/xt-ml/shadow-claw","license":"https://github.com/xt-ml/shadow-claw/blob/main/LICENSE"},{"@type":"WebSite","@id":"https://xt-ml.github.io/shadow-claw/#website","url":"https://xt-ml.github.io/shadow-claw/","name":"ShadowClaw","description":"Official website and live deployment of ShadowClaw multi-runtime AI assistant.","publisher":{"@type":"Organization","name":"xt-ml","url":"https://github.com/xt-ml"}},{"@type":"Organization","@id":"https://xt-ml.github.io/shadow-claw/#organization","name":"xt-ml","url":"https://github.com/xt-ml","sameAs":["https://github.com/xt-ml"]}]}</script><meta name="theme-color" content="#fff" /><meta http-equiv="origin-trial" content="A88uTgESYWcVgREKVReKB6jom41uP8TzW6ei3jNdidf+Xl6ONqKRjKNBphsxhrZmdkakLK3oXDgkGq53rtZYSAMAAAB2eyJvcmlnaW4iOiJodHRwczovL3h0LW1sLmdpdGh1Yi5pbzo0NDMiLCJmZWF0dXJlIjoiV2ViTUNQIiwiZXhwaXJ5IjoxNzk0ODczNjAwLCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlfQ=="><base href="/shadow-claw/" /><script id="shadow-claw-site-config" type="application/json">{"$schema":"https:\u002f\u002fjson-schema.org\u002fdraft\u002f2020-12\u002fschema","site":{"title":"ShadowClaw","description":"ShadowClaw - multi-runtime AI assistant.","themeColor":"#fff"},"branding":{"faviconPath":"assets\u002ficons\u002ffavicon.ico","appleTouchIconPath":"assets\u002ficons\u002f180.png","notFoundPath":"404.html"},"pwa":{"manifestPath":"manifest.json","themeColor":"#000000"},"sitemapPath":"sitemap.xml","assets":["assets"],"sidebar":{"pagesHidden":false,"chatHidden":false,"tasksHidden":false,"filesHidden":false,"defaultPage":"pages"},"pages":{"allowList":[],"denyList":[]},"settings":{"defaultToolsProfile":"__builtin_default"},"agent":{"defaultProvider":"transformers_js_local","defaultModel":"onnx-community\u002fgemma-3-1b-it-ONNX-GQA"},"customElements":{"allowedElements":["block-garden","block-garden-option","block-garden-select"],"allowedDomains":["kherrick.github.io","cdn.jsdelivr.net"]},"security":{"connectSrc":["'self'","blob:","data:","https:\u002f\u002fkherrick.github.io","https:\u002f\u002fcdn.jsdelivr.net"]}}</script>
1
+ <!doctype html><html lang="en"><head><title>ShadowClaw</title><meta charset="utf-8"><meta name="revision" content="6fd038c992eb684e7eca8ec9c8c3ce35519a511b" /><meta name="version" content="1.44.0" /><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"><meta name="description" content="ShadowClaw - multi-runtime AI assistant." /><link rel="canonical" href="https://xt-ml.github.io/shadow-claw/"><meta property="og:title" content="ShadowClaw"><meta property="og:description" content="Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution."><meta property="og:type" content="website"><meta property="og:url" content="https://xt-ml.github.io/shadow-claw/"><meta property="og:image" content="https://xt-ml.github.io/shadow-claw/assets/icons/512.png"><meta name="twitter:card" content="summary"><meta name="twitter:title" content="ShadowClaw"><meta name="twitter:description" content="Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution."><meta name="twitter:image" content="https://xt-ml.github.io/shadow-claw/assets/icons/512.png"><script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"SoftwareApplication","@id":"https://xt-ml.github.io/shadow-claw/#software","name":"ShadowClaw","description":"Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution.","url":"https://xt-ml.github.io/shadow-claw/","applicationCategory":"DeveloperApplication","operatingSystem":"Web, Browser, Desktop","offers":{"@type":"Offer","price":"0","priceCurrency":"USD"},"author":{"@type":"Organization","name":"xt-ml","url":"https://github.com/xt-ml"},"codeRepository":"https://github.com/xt-ml/shadow-claw","license":"https://github.com/xt-ml/shadow-claw/blob/main/LICENSE"},{"@type":"WebSite","@id":"https://xt-ml.github.io/shadow-claw/#website","url":"https://xt-ml.github.io/shadow-claw/","name":"ShadowClaw","description":"Official website and live deployment of ShadowClaw multi-runtime AI assistant.","publisher":{"@type":"Organization","name":"xt-ml","url":"https://github.com/xt-ml"}},{"@type":"Organization","@id":"https://xt-ml.github.io/shadow-claw/#organization","name":"xt-ml","url":"https://github.com/xt-ml","sameAs":["https://github.com/xt-ml"]}]}</script><meta name="theme-color" content="#fff" /><meta http-equiv="origin-trial" content="A88uTgESYWcVgREKVReKB6jom41uP8TzW6ei3jNdidf+Xl6ONqKRjKNBphsxhrZmdkakLK3oXDgkGq53rtZYSAMAAAB2eyJvcmlnaW4iOiJodHRwczovL3h0LW1sLmdpdGh1Yi5pbzo0NDMiLCJmZWF0dXJlIjoiV2ViTUNQIiwiZXhwaXJ5IjoxNzk0ODczNjAwLCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlfQ=="><base href="/shadow-claw/" /><script id="shadow-claw-site-config" type="application/json">{"$schema":"https:\u002f\u002fjson-schema.org\u002fdraft\u002f2020-12\u002fschema","site":{"title":"ShadowClaw","description":"ShadowClaw - multi-runtime AI assistant.","themeColor":"#fff"},"branding":{"faviconPath":"assets\u002ficons\u002ffavicon.ico","appleTouchIconPath":"assets\u002ficons\u002f180.png","notFoundPath":"404.html"},"pwa":{"manifestPath":"manifest.json","themeColor":"#000000"},"sitemapPath":"sitemap.xml","assets":["assets"],"sidebar":{"pagesHidden":false,"chatHidden":false,"tasksHidden":false,"filesHidden":false,"defaultPage":"pages"},"pages":{"allowList":[],"denyList":[]},"settings":{"defaultToolsProfile":"__builtin_default"},"agent":{"defaultProvider":"transformers_js_local","defaultModel":"onnx-community\u002fgemma-3-1b-it-ONNX-GQA"},"customElements":{"allowedElements":["block-garden","block-garden-option","block-garden-select"],"allowedDomains":["kherrick.github.io","cdn.jsdelivr.net"]},"security":{"connectSrc":["'self'","blob:","data:","https:\u002f\u002fkherrick.github.io","https:\u002f\u002fcdn.jsdelivr.net"]}}</script>
2
2
  <script>var ShadowClawThemeInit=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports);function n(){if(globalThis.trustedTypes)return;let e=new Map;globalThis.trustedTypes={createPolicy:(t,n)=>{if(e.has(t))throw TypeError(`Policy with name "${t}" already exists.`);let r={createHTML:n.createHTML?e=>n.createHTML(e):void 0,createScriptURL:n.createScriptURL?e=>n.createScriptURL(e):void 0,createScript:n.createScript?e=>n.createScript(e):void 0};return e.set(t,r),r},getPolicy:t=>e.get(t)??null,isHTML:e=>typeof e==`string`||e instanceof Object&&`toString`in e,isScriptURL:e=>typeof e==`string`||e instanceof Object&&`toString`in e,isScript:e=>typeof e==`string`||e instanceof Object&&`toString`in e}}let r=`__shadowClawDefaultTrustedTypesPolicyState`,i=`default`,a=`shadowclaw-sandbox`;function o(){let e=globalThis;return e[r]||(e[r]={initialized:!1,policy:null}),e[r]}function s(){let e=o();if(e.initialized)return;let t=Reflect.get(globalThis,`trustedTypes`);if(!(!t||typeof t.createPolicy!=`function`)){e.initialized=!0;try{if(typeof t.getPolicy==`function`){let n=t.getPolicy(i);if(n){e.policy=n;return}}let n=!1;if(typeof t.getPolicyNames==`function`){let e=t.getPolicyNames();Array.isArray(e)&&e.includes(i)&&(n=!0)}if(n){if(typeof t.getPolicy==`function`){let n=t.getPolicy(a);if(n){e.policy=n;return}}e.policy=t.createPolicy(a,{createHTML:e=>e,createScriptURL:e=>e});return}e.policy=t.createPolicy(i,{createHTML:e=>e,createScriptURL:e=>e})}catch{typeof t.getPolicy==`function`&&(e.policy=t.getPolicy(i)??t.getPolicy(a)??null)}}}new class{loading=!1;models=new Map;getModelInfo(e){if(!e||typeof e!=`string`)return null;let t=e.toLowerCase().trim(),n=this.models.get(t);if(n)return n;if(t.includes(`/`)){let e=t.split(`/`).pop();if(e&&this.models.has(e))return this.models.get(e)}else for(let[e,n]of this.models.entries())if(e.endsWith(`/${t}`))return n;if(t.includes(`:`)){let e=t.split(`:`)[0],n=this.getModelInfo(e);if(n)return n}return null}registerModelInfo(e,t){this.models.set(e.toLowerCase(),t)}clear(){this.models.clear()}async fetchModelInfo(e,t,n){if(e.modelsUrl){this.loading=!0;try{let r=new Headers;if(r.set(`Content-Type`,`application/json`),e.headers)for(let[t,n]of Object.entries(e.headers))r.set(t,n);if(n)for(let[e,t]of Object.entries(n))r.set(e,t);if(t&&e.apiKeyHeader){let n=e.apiKeyHeaderFormat;r.set(e.apiKeyHeader,n?n.replace(`{key}`,t):t)}let i=await fetch(e.modelsUrl,{headers:r});if(!i.ok)throw Error(`HTTP ${i.status} ${i.statusText}`);let a=await i.json(),o=Array.isArray(a.data)?a.data:Array.isArray(a.models)?a.models:[];for(let e of o){if(!e.id)continue;let t=e.context_length??e.context_window??0,n=e.max_completion_tokens||e.per_request_limits?.completion_tokens||e.top_provider?.max_completion_tokens||null,r=typeof e.supports_tools==`boolean`?e.supports_tools:typeof e.supportsTools==`boolean`?e.supportsTools:void 0,i=this.extractModalities(e,`input`),a=this.extractModalities(e,`output`),o=this.modalitiesInclude(i,`image`,`vision`),s=this.modalitiesInclude(i,`audio`,`voice`,`hearing`),c=this.modalitiesInclude(i,`video`),l=e.id===`openrouter/free`||this.supportedParametersInclude(e,`image`,`vision`,`audio`,`tool`,`structured`),u=this.extractReasoning(e),d=typeof e.supports_prompt_caching==`boolean`?e.supports_prompt_caching:typeof e.supportsPromptCaching==`boolean`?e.supportsPromptCaching:this.supportedParametersInclude(e,`cache_control`,`prompt_caching`)?!0:void 0;!t&&Array.isArray(e.providers)&&e.providers.length>0&&(t=e.providers[0]?.context_length||0),this.registerModelInfo(e.id,{contextWindow:t,maxOutput:n,...r!==void 0&&{supportsTools:r},...i.length>0&&{inputModalities:i},...a.length>0&&{outputModalities:a},...o!==void 0&&{supportsImageInput:o},...s!==void 0&&{supportsAudioInput:s},...c!==void 0&&{supportsVideoInput:c},...u&&{reasoning:u},...l&&{routesByRequestFeatures:l},...d!==void 0&&{supportsPromptCaching:d}})}o.length>0&&console.log(`[ModelRegistry] Registered ${o.length} models for provider "${e.id}"`)}catch(t){console.error(`[ModelRegistry] Error fetching models for ${e.id}:`,t)}finally{this.loading=!1}}}extractModalities(e,t){let n=t===`input`?e.input_modalities||e.inputModalities:e.output_modalities||e.outputModalities,r=e.architecture||{},i=t===`input`?r.input_modalities||r.inputModalities:r.output_modalities||r.outputModalities,a=typeof r.modality==`string`?r.modality:``,o=this.parseArchitectureModality(a,t),s=[...this.normalizeStringArray(n),...this.normalizeStringArray(i),...o];return Array.from(new Set(s))}extractReasoning(e){let t=e?.reasoning;if(!t||typeof t!=`object`)return;let n=this.normalizeStringArray(t.supported_efforts),r=typeof t.default_effort==`string`?t.default_effort.toLowerCase():void 0,i=typeof t.default_enabled==`boolean`?t.default_enabled:void 0,a=typeof t.supports_max_tokens==`boolean`?t.supports_max_tokens:void 0,o=typeof t.mandatory==`boolean`?t.mandatory:void 0;if(!(n.length===0&&r===void 0&&i===void 0&&a===void 0&&o===void 0))return{...n.length>0&&{supportedEfforts:n},...r!==void 0&&{defaultEffort:r},...i!==void 0&&{defaultEnabled:i},...a!==void 0&&{supportsMaxTokens:a},...o!==void 0&&{mandatory:o}}}modalitiesInclude(e,...t){if(e.length!==0)return t.some(t=>e.some(e=>e.includes(t)))}normalizeStringArray(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`).map(e=>e.toLowerCase()):[]}parseArchitectureModality(e,t){if(!e)return[];let[n=``,r=``]=e.toLowerCase().split(`->`).map(e=>e.trim());return(t===`input`?n:r).split(/[+,/\s]+/).map(e=>e.trim()).filter(Boolean)}supportedParametersInclude(e,...t){let n=this.normalizeStringArray(e.supported_parameters||e.supportedParameters);return t.some(e=>n.some(t=>t.includes(e)))}};function c(e){return e.replace(/^\/+|\/+$/g,``)}function l(e){let t=c(e);return t.endsWith(`/index.html`)?t=t.slice(0,-11):t.endsWith(`index.html`)&&(t=t.slice(0,-10)),c(t)}function u(e){let t=c(e),n=t.split(`/`).filter(Boolean);if(n.length===0)return null;let r=n[0].toLowerCase();if(r===`pages`){if(n.length>=3){let e=n[1];return{page:`pages`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e,path:n.slice(2).join(`/`)}}return{page:`pages`,groupId:`br:main`,path:n.slice(1).join(`/`)}}if(r===`files`){let e=n[1]||`main`;return{page:`files`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e,path:n.slice(2).join(`/`)||void 0}}if(r===`chat`){let e=n[1]||`main`;return{page:`chat`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e}}if(r===`tasks`){let e=n[1]||`main`;return{page:`tasks`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e}}return r===`main`?{page:`pages`,groupId:`br:main`,path:n.slice(1).join(`/`)}:{page:`pages`,groupId:`br:main`,path:t}}function d(){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 f(e,t){let n=t||d();if(!n||!n.routes)return null;let r=l(e);for(let[e,t]of Object.entries(n.routes))if(!(!t||!t.prettyPath)&&l(t.prettyPath)===r)return u(e);return null}let p=null,ee=new Set([`chat`,`files`,`tasks`,`pages`,`settings`,`tools`,`channels`]);function m(){p=null}typeof globalThis<`u`&&(globalThis.__applyBasePathCacheReset=m);function h(){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=te();return!n||n===`/`?``:n.replace(/^\/+|\/+$/g,``).replace(/[^a-zA-Z0-9_-]/g,`-`)}function te(){if(p!==null)return p;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 p=`/`,p;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 p=`/`,p;if(!n)return p=`/`+e[0]+`/`,p}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+=`/`),p=t,p}catch{}}}let t=e.pathname||`/`;if(t===`/`)return p=`/`,p;let n=t.split(`/`).filter(Boolean),r=n.findIndex(e=>ee.has(e.toLowerCase()));return r>=0?r===0?(p=`/`,p):(p=`/`+n.slice(0,r).join(`/`)+`/`,p):f(t)?(p=`/`,p):n.length===1&&!t.includes(`.`)?(p=`/`+n[0]+`/`,p):(p=`/`,p)}function ne(e){let t=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return RegExp(`(^|\\s)@${t}\\b`,`i`)}ne(`ShadowClaw`);function g(){let e=h();return e?`shadowclaw-${e}`:`shadowclaw`}g();let _={github:{providerId:`github`,name:`GitHub`,aliases:[`github`,`api.github.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`token `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://github.com/login/oauth/authorize`,tokenUrl:`https://github.com/login/oauth/access_token`,defaultScopes:[`repo`,`read:user`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},gitlab:{providerId:`gitlab`,name:`GitLab`,aliases:[`gitlab`,`gitlab.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`PRIVATE-TOKEN`,headerPrefix:``},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},tokenAuthByServiceType:{git_remote:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}}},oauth:{authorizeUrl:`https://gitlab.com/oauth/authorize`,tokenUrl:`https://gitlab.com/oauth/token`,defaultScopes:[`read_api`,`read_user`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},figma:{providerId:`figma`,name:`Figma`,aliases:[`figma`,`api.figma.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`X-Figma-Token`,headerPrefix:``},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://www.figma.com/oauth`,tokenUrl:`https://api.figma.com/v1/oauth/token`,refreshUrl:`https://api.figma.com/v1/oauth/refresh`,defaultScopes:[],usePkce:!0,clientAuthMethod:`basic_header`,scopeSeparator:`space`}},notion:{providerId:`notion`,name:`Notion`,aliases:[`notion`,`api.notion.com`,`notion.so`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://api.notion.com/v1/oauth/authorize`,tokenUrl:`https://api.notion.com/v1/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`basic_header`,scopeSeparator:`space`}},microsoft_graph:{providerId:`microsoft_graph`,name:`Microsoft Graph`,aliases:[`microsoft`,`graph.microsoft.com`,`microsoft_graph`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://login.microsoftonline.com/common/oauth2/v2.0/authorize`,tokenUrl:`https://login.microsoftonline.com/common/oauth2/v2.0/token`,defaultScopes:[`openid`,`profile`,`offline_access`,`User.Read`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},yahoo_mail:{providerId:`yahoo_mail`,name:`Yahoo Mail`,aliases:[`yahoo`,`yahoo_mail`,`mail.yahoo.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://api.login.yahoo.com/oauth2/request_auth`,tokenUrl:`https://api.login.yahoo.com/oauth2/get_token`,defaultScopes:[`mail-r`,`mail-w`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},google:{providerId:`google`,name:`Google`,aliases:[`google`,`googleapis.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://accounts.google.com/o/oauth2/v2/auth`,tokenUrl:`https://oauth2.googleapis.com/token`,defaultScopes:[`openid`,`profile`,`email`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},atlassian:{providerId:`atlassian`,name:`Atlassian`,aliases:[`atlassian`,`api.atlassian.com`],modes:[`oauth`,`token`,`basic`],defaultMode:`basic`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`,`basic_userpass`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `},basic:{headerName:`Authorization`,headerPrefix:`Basic `}},oauth:{authorizeUrl:`https://auth.atlassian.com/authorize`,tokenUrl:`https://auth.atlassian.com/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},slack:{providerId:`slack`,name:`Slack`,aliases:[`slack`,`slack.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://slack.com/oauth/v2/authorize`,tokenUrl:`https://slack.com/api/oauth.v2.access`,defaultScopes:[],usePkce:!1,clientAuthMethod:`request_body`,scopeSeparator:`comma`}},linear:{providerId:`linear`,name:`Linear`,aliases:[`linear`,`api.linear.app`,`linear.app`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://linear.app/oauth/authorize`,tokenUrl:`https://api.linear.app/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},azure_devops:{providerId:`azure_devops`,name:`Azure DevOps`,aliases:[`azure_devops`,`dev.azure.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`,`basic_userpass`,`ssh_key`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},tokenAuthByServiceType:{git_remote:{token:{headerName:`Authorization`,headerPrefix:`Basic `},oauth:{headerName:`Authorization`,headerPrefix:`Basic `}}},oauth:{authorizeUrl:`https://app.vssps.visualstudio.com/oauth2/authorize`,tokenUrl:`https://app.vssps.visualstudio.com/oauth2/token`,defaultScopes:[`vso.code`,`vso.profile`,`offline_access`],usePkce:!1,clientAuthMethod:`request_body`,scopeSeparator:`space`}},custom_mcp:{providerId:`custom_mcp`,name:`Custom MCP`,aliases:[`custom_mcp`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`mcp_remote`,`webmcp_local`],authTypes:[`none`,`token`,`oauth`,`custom_header`,`ssh_key`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://example.com/oauth/authorize`,tokenUrl:`https://example.com/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}}};Object.fromEntries(Object.values(_).filter(e=>!!e.oauth).map(e=>{let t=e.oauth;return[e.providerId,{id:e.providerId,name:e.name,authorizeUrl:t.authorizeUrl,tokenUrl:t.tokenUrl,redirectUri:t.redirectUri,defaultScopes:t.defaultScopes,usePkce:t.usePkce,clientAuthMethod:t.clientAuthMethod,scopeSeparator:t.scopeSeparator}]})),Object.fromEntries(Object.values(_).map(e=>[e.providerId,{providerId:e.providerId,modes:e.modes,defaultMode:e.defaultMode}])),new Promise(e=>{});
3
3
  /*! @license DOMPurify 3.4.13 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.13/LICENSE */
4
4
  function v(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function y(e){if(Array.isArray(e))return e}function b(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,t!==0)for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return s}}function re(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
@@ -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 r={};const d=e=>s(e,i),n={module:{uri:i},exports:r,require:d};a[i]=Promise.all(c.map(e=>n[e]||d(e))).then(e=>(o(...e),r))}}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:"10c81022d769eaf356596013f6fd620e"},{url:"subsystems/channels/bindings/webrtc-datachannel/v1/index.css",revision:"84ea62c12532f5339a455f7da8e47048"},{url:"components/shadow-claw-tools/shadow-claw-tools.css",revision:"83e53f4fc50714d75f4f223c8cc1126b"},{url:"components/shadow-claw-toast/shadow-claw-toast.css",revision:"4ce2dcc1c81363147fa0a5e79474aed3"},{url:"components/shadow-claw-terminal/shadow-claw-terminal.css",revision:"34974a6d9a97832231fd931006a071d1"},{url:"components/shadow-claw-tasks/shadow-claw-tasks.css",revision:"520159be0d18dc3caad54e9e1dc1eb1b"},{url:"components/shadow-claw-settings/shadow-claw-settings.css",revision:"ad9bba0bb9beb555b3b43a90e590dfa1"},{url:"components/shadow-claw-pdf-viewer/shadow-claw-pdf-viewer.css",revision:"4c02b802e45b7e2377ecd915909ddf1c"},{url:"components/shadow-claw-pages/shadow-claw-pages.css",revision:"e36aeac18a9bf867dc30627a11773449"},{url:"components/shadow-claw-page-header/shadow-claw-page-header.css",revision:"5af6ca91ae275bdbb7f0f6bc470c83df"},{url:"components/shadow-claw-files/shadow-claw-files.css",revision:"8ea713f1228d9638039afde711505bab"},{url:"components/shadow-claw-file-viewer/shadow-claw-file-viewer.css",revision:"08101d1aefc62f51c5bff42cd468e663"},{url:"components/shadow-claw-file-viewer/highlightjs-atom-one-dark.min.css",revision:"70ec8740925f3c6615ec654090b9e2ce"},{url:"components/shadow-claw-conversations/shadow-claw-conversations.css",revision:"a941256c23d142754ea3c7e9b416f784"},{url:"components/shadow-claw-chat/shadow-claw-chat.css",revision:"b6c9d27682fce5e686696943ae1bf9b8"},{url:"components/shadow-claw-channels/shadow-claw-channels.css",revision:"431a76502c7ba3f8c83bb572f0afd71f"},{url:"components/shadow-claw-a2ui/shadow-claw-a2ui.css",revision:"d05fdf188a8295021735e601bcc5b743"},{url:"components/shadow-claw/shadow-claw.css",revision:"eccf6bd64cf5649e156ba6c676ed628f"},{url:"components/settings/shadow-claw-webvm/shadow-claw-webvm.css",revision:"f8167aff26a24125d7b9b23aee8f728a"},{url:"components/settings/shadow-claw-task-server/shadow-claw-task-server.css",revision:"f6e534a6023b143270e772c7ee6119a0"},{url:"components/settings/shadow-claw-storage/shadow-claw-storage.css",revision:"dd8009443e450b709657368a19974f09"},{url:"components/settings/shadow-claw-peerjs/shadow-claw-peerjs.css",revision:"81e589816bc4fd4da2c7d688b3db5ba9"},{url:"components/settings/shadow-claw-notifications/shadow-claw-notifications.css",revision:"32804d3923655ae18f137db78bfaccfa"},{url:"components/settings/shadow-claw-networking/shadow-claw-networking.css",revision:"f186e80f555986dc26ab392cf7c29e92"},{url:"components/settings/shadow-claw-mcp-remote/shadow-claw-mcp-remote.css",revision:"c9be041c099a1d4733ed14a87ee37bfa"},{url:"components/settings/shadow-claw-llm/shadow-claw-llm.css",revision:"8703cbfc0af3167237d71d7e3f5da4f5"},{url:"components/settings/shadow-claw-integrations/shadow-claw-integrations.css",revision:"d7b9e45ff13eecf7c6571ed755dc8358"},{url:"components/settings/shadow-claw-git/shadow-claw-git.css",revision:"eab353bd20d322d0c87a7a53e639c2a6"},{url:"components/settings/shadow-claw-control-plane/shadow-claw-control-plane.css",revision:"2cc9185fc887fb10055d9edd405bd59c"},{url:"components/settings/shadow-claw-channel-config/shadow-claw-channel-config.css",revision:"c6da4c8aa3ad1b6359e6cb7af9d5f267"},{url:"components/settings/shadow-claw-accounts/shadow-claw-accounts.css",revision:"f9a43c87ce69b7be36ad18100311c14e"},{url:"components/common/shadow-claw-provider-module-settings/shadow-claw-provider-module-settings.css",revision:"b6bbdcee11cf8fd83c411f6734e10da8"},{url:"components/common/shadow-claw-provider-model-picker/shadow-claw-provider-model-picker.css",revision:"65f56fa4a760d0207440697739be250a"},{url:"components/common/shadow-claw-page-header-action-button/shadow-claw-page-header-action-button.css",revision:"192878cb48a9bb8cf206cea1672ec390"},{url:"components/common/shadow-claw-empty-state/shadow-claw-empty-state.css",revision:"001dbd8ee37eccb2b865795cb75b32e8"},{url:"components/common/shadow-claw-card/shadow-claw-card.css",revision:"ea9fb2a5ee318103b19fdf5df14dd2ea"},{url:"components/common/shadow-claw-actions/shadow-claw-actions.css",revision:"330a4d63944580d4dc150d7c08379f26"},{url:"bindings/webrtc-datachannel/v1/index.css",revision:"8c0f3bcf62cbe9579d136150c5288ba8"},{url:"index.html",revision:"af72a3f0efb8eabd9d77c92a397208c2"},{url:"404.html",revision:"74bc1afc55391d3ff43b99e39de1c72f"},{url:"subsystems/channels/bindings/webrtc-datachannel/v1/index.html",revision:"d6e785383b73b911b8593265c36eaecd"},{url:"static-main/index.html",revision:"38e716481eecfdb88c3349562d815f10"},{url:"static-main/~/docs/example/article.html",revision:"cb73f16b2098cf2e77db992b6b286805"},{url:"share/share-target.html",revision:"ea535454fa33b093d0ee59fddc6f5c02"},{url:"pages/main/index.html",revision:"38e716481eecfdb88c3349562d815f10"},{url:"pages/main/~/docs/example/article.html",revision:"cb73f16b2098cf2e77db992b6b286805"},{url:"main/index.html",revision:"af72a3f0efb8eabd9d77c92a397208c2"},{url:"main/memory/index.html",revision:"15bedbe0f40d6d36ff9d0e8d0f63668d"},{url:"files/main/index.html",revision:"38e716481eecfdb88c3349562d815f10"},{url:"files/main/~/docs/example/article.html",revision:"cb73f16b2098cf2e77db992b6b286805"},{url:"docs/skill-creator/index.html",revision:"5f42399a044d82e0372bf887fbb6758c"},{url:"docs/publishing/index.html",revision:"ea85a5c112bdc1e6b20f89a2a0ad51bf"},{url:"docs/example/article/index.html",revision:"dbe298b65ed8e2387c9be4a7012867a4"},{url:"components/shadow-claw-tools/shadow-claw-tools.html",revision:"323310ef472dd2974ff78db1afbdd02c"},{url:"components/shadow-claw-toast/shadow-claw-toast.html",revision:"83ef4f69b85bc562f3e41d2038a75298"},{url:"components/shadow-claw-terminal/shadow-claw-terminal.html",revision:"d4a9d42553a49cccdabe858a1bcdfb6d"},{url:"components/shadow-claw-tasks/shadow-claw-tasks.html",revision:"6dde9f871430da8bb157d57f05876572"},{url:"components/shadow-claw-settings/shadow-claw-settings.html",revision:"dd5421c221ad0d1e11602b0466636eb0"},{url:"components/shadow-claw-pdf-viewer/shadow-claw-pdf-viewer.html",revision:"8b1d69f282f194a98c9e9e7a2eb87009"},{url:"components/shadow-claw-pages/shadow-claw-pages.html",revision:"0f03cef912be6910360117da9b98f94a"},{url:"components/shadow-claw-page-header/shadow-claw-page-header.html",revision:"9dd0f64e1c4d31367923ae2e56662b5e"},{url:"components/shadow-claw-files/shadow-claw-files.html",revision:"7727f97dd065000b055d303d5d8a671a"},{url:"components/shadow-claw-file-viewer/shadow-claw-file-viewer.html",revision:"ff21f570a074f875b13e20fc47f54b93"},{url:"components/shadow-claw-conversations/shadow-claw-conversations.html",revision:"e1dda7d82b02568714a37db5905f8dfd"},{url:"components/shadow-claw-chat/shadow-claw-chat.html",revision:"83927b073730bce66081aa1d720351c7"},{url:"components/shadow-claw-channels/shadow-claw-channels.html",revision:"ee52d98315e62d80086d156608a94e05"},{url:"components/shadow-claw-a2ui/shadow-claw-a2ui.html",revision:"04363cb02303c1f31ad6951105e2b630"},{url:"components/shadow-claw/shadow-claw.html",revision:"6053ef3e7ca69b3df17539e153dbc278"},{url:"components/settings/shadow-claw-webvm/shadow-claw-webvm.html",revision:"b41ff0201055fc03963a115cbeef4de6"},{url:"components/settings/shadow-claw-task-server/shadow-claw-task-server.html",revision:"9e715d1a569b1e589834ffa77a109a95"},{url:"components/settings/shadow-claw-storage/shadow-claw-storage.html",revision:"33501ece794e35a2948ea03df57d47cc"},{url:"components/settings/shadow-claw-peerjs/shadow-claw-peerjs.html",revision:"40d51a573cfef6fda61358fc25d806b3"},{url:"components/settings/shadow-claw-notifications/shadow-claw-notifications.html",revision:"74d4d4d3f2b368d971e74cf9e600d6bf"},{url:"components/settings/shadow-claw-networking/shadow-claw-networking.html",revision:"bca46b725edc47a4ed30cb5e2ed4d8be"},{url:"components/settings/shadow-claw-mcp-remote/shadow-claw-mcp-remote.html",revision:"595f5626bd4a024572393c39aefe6155"},{url:"components/settings/shadow-claw-llm/shadow-claw-llm.html",revision:"ba05b5e3536c9d4a8f400696aad239b7"},{url:"components/settings/shadow-claw-integrations/shadow-claw-integrations.html",revision:"12a847b968869c521b6d17285211cf8a"},{url:"components/settings/shadow-claw-git/shadow-claw-git.html",revision:"7f0d55e8f5c74b30f2ee02cab5af93e3"},{url:"components/settings/shadow-claw-control-plane/shadow-claw-control-plane.html",revision:"83a363c0cc27bec61f7fc3126990b3b8"},{url:"components/settings/shadow-claw-channel-config/shadow-claw-channel-config.html",revision:"38805e60640572b4ada99d11343a64dd"},{url:"components/settings/shadow-claw-accounts/shadow-claw-accounts.html",revision:"6537ff4c3ee01a3107e8b138425812b9"},{url:"components/common/shadow-claw-provider-module-settings/shadow-claw-provider-module-settings.html",revision:"4022e66f6cd3ac15723063c394e429c2"},{url:"components/common/shadow-claw-provider-model-picker/shadow-claw-provider-model-picker.html",revision:"ce6d7fcbdaf710d498cdd650597d86c1"},{url:"components/common/shadow-claw-page-header-action-button/shadow-claw-page-header-action-button.html",revision:"89fa6723613dad5fcc9773685846a81f"},{url:"components/common/shadow-claw-empty-state/shadow-claw-empty-state.html",revision:"f1304d2789cf72435301709539f67a58"},{url:"components/common/shadow-claw-card/shadow-claw-card.html",revision:"332bf79a4dbd90356ea4982fc28f0312"},{url:"components/common/shadow-claw-actions/shadow-claw-actions.html",revision:"cbfba0838bc7cf14f38b80473e0d7cca"},{url:"bindings/webrtc-datachannel/v1/index.html",revision:"7f7ae8499f2c25e8e94409fa272f9f73"},{url:"favicon.ico",revision:"58fff7908409f246a6228529f384802e"},{url:"assets/icons/favicon.ico",revision:"58fff7908409f246a6228529f384802e"},{url:"static-routing.json",revision:"36f9e3515f28f864c4b329a9b3c7020a"},{url:"static-main-manifest.json",revision:"959aaefa4960add61f4f337126c3b5c7"},{url:"manifest.json",revision:"62f8d50f4e8fd710cb66c883f94b1c48"},{url:"writer-DSCZugcv.js",revision:"aa52e090e23fb66e87ae150868b73617"},{url:"writer-DKYhUsR4.js",revision:"2c1ebca2bcb7c424b3c40a335208f9f3"},{url:"webmcp-Csjin2oB.js",revision:"d4ae358b45e553a0a95524ba927866bb"},{url:"webllm-_JXFm0yh.js",revision:"9eb250fab559a4b9781d8a3d8ed35ec7"},{url:"webllm-BDMz9yZR.js",revision:"86ffb13f1b7691d5d39b7a44210761ba"},{url:"ulid-BY7rQVLN.js",revision:"e1f3add55342551fd82b63ca9c9fa3ed"},{url:"txPromise-C2iYogHX.js",revision:"74a1df07fb201bd47d0a318f30b6f527"},{url:"translator-HKOMI-RS.js",revision:"0442e3e7545bf383ce11ad047ca3b4c8"},{url:"translator-CGBLZJIJ.js",revision:"484866c38f92eed3b1073f3a2cf63614"},{url:"transformers-js.worker.js",revision:"85d9dc5f8e5f3a31cddb9a7e7288504e"},{url:"transformers-BTGkWJf4.js",revision:"50bb330f47facc065c63f9d684375a58"},{url:"transformers--9oz-RLQ.js",revision:"b81607b6adb3b7b3a956301d3510c91e"},{url:"tools-vzWYHFBC.js",revision:"b8e70b785c14b2e2de15cde940497b51"},{url:"tools-vVsKTc2N.js",revision:"fbdf899d877fd53339bc5ae48f924b66"},{url:"tools-Day-D-vL.js",revision:"c10a562cce98174f91470e6cdafb0f14"},{url:"toast-BXgUfbyh.js",revision:"b7c62da49835547bd07f2010219562bd"},{url:"theme-init.js",revision:"6f9c26eafb08dd52db7915d53604f57a"},{url:"syncWebMcpRegistration-BPFAOeDk.js",revision:"7ad12f72d1168bcb9b3652ba40ebcbe7"},{url:"summarizer-P3JHUhJ4.js",revision:"c61ee9cefeca591ad5618d95d153a2f4"},{url:"summarizer-CweqtGSY.js",revision:"fc2cafa5615e2284fbe262cc416fa32c"},{url:"shadow-claw-webvm-SMhN9Hz0.js",revision:"a1f9d7c8e5f74d832b50e003e027484f"},{url:"shadow-claw-tools-CNX-9T3T.js",revision:"43a77dff1ed46f050657700f62288597"},{url:"shadow-claw-toast-C_zXWKX9.js",revision:"b6a160902a77d1197facbca3603d990a"},{url:"shadow-claw-terminal-P9RS0Kux.js",revision:"b516dd259568120f8e8decc17ef6fcd2"},{url:"shadow-claw-tasks-ewhmptQN.js",revision:"2cd94e095486da9af1cc2d96cafeb3b5"},{url:"shadow-claw-task-server-BM1ndNkT.js",revision:"5981d35ae53a14acce43c0a625fefc04"},{url:"shadow-claw-storage-DdFawD3r.js",revision:"22c2b7f8bda29cffaf9e996dd666d1ff"},{url:"shadow-claw-settings-CNz3eBNN.js",revision:"0b8a4f40928cf99ae853bbe85bd45eee"},{url:"shadow-claw-pdf-viewer-gOiW-_Bh.js",revision:"e84932e68c4b1a60d8d72b37cfc1c920"},{url:"shadow-claw-pages-CMP6CCs0.js",revision:"6a9b991d4bbeca512b5ffad84af1e194"},{url:"shadow-claw-page-header-action-button-Bmua3mAb.js",revision:"2e4b1fc665cfcf6a51510a08ba0a5da0"},{url:"shadow-claw-page-header-Bb2Vo6_u.js",revision:"43462fded0a21110a8391ba1b46a2e3e"},{url:"shadow-claw-oXCQySZy.js",revision:"45e037d8d9092411f8d1ad063c20a556"},{url:"shadow-claw-notifications-DVmyPMSF.js",revision:"9ea523d972c6c4ae6da7839daab86a94"},{url:"shadow-claw-networking-0NosaYt5.js",revision:"bf3b1dfec356f01b913faa28607a1cdd"},{url:"shadow-claw-mcp-remote-sf64l52x.js",revision:"bf0b10494727cbba290dc404af797c48"},{url:"shadow-claw-llm-C0OoBYEC.js",revision:"764edba615ddb7ec530413ce9af9cce4"},{url:"shadow-claw-integrations-Cgv6aawT.js",revision:"0f5402eb35349bf58ea64805d1d4ca49"},{url:"shadow-claw-git-LLp5M1qv.js",revision:"7a17003fbac1f3d4940fe38a0197aae1"},{url:"shadow-claw-files-BNU3b63h.js",revision:"4a2eceaed9d8290bc7e12278adffc068"},{url:"shadow-claw-file-viewer-xRJ0lqj2.js",revision:"aaafa9631323104ad063c2daebf96ed1"},{url:"shadow-claw-empty-state-CkvLk0-B.js",revision:"1ef0891c108feeab7b5ca2f38ed07abf"},{url:"shadow-claw-element-DIrv3P6A.js",revision:"740ad3d06fc485e6ab3d815d996036ee"},{url:"shadow-claw-dialog-BrOwAOdk.js",revision:"cef105280f387f95d4763386497c3de9"},{url:"shadow-claw-conversations-BmujFtOj.js",revision:"95ec2447fca2b98e8c5f612844b037f1"},{url:"shadow-claw-control-plane-BH7GgX1q.js",revision:"af943337a39886044f13d994af7609c3"},{url:"shadow-claw-chat-C-ULqqjn.js",revision:"5f98ea8240cd2f5ef41362c3f8920d76"},{url:"shadow-claw-channels-IOf1W3h7.js",revision:"4ca80c3da9ee35c228bf3ba4cc50ac01"},{url:"shadow-claw-card-DCxWEHgX.js",revision:"16fb58ffeced559d6ae06ad22dc83449"},{url:"shadow-claw-accounts-CbZCjfNn.js",revision:"be915b78305cd764a1219bcad37f92ec"},{url:"setConfig-DdSThoKj.js",revision:"c8468805ffd4cffac5c56b089a278ba6"},{url:"rolldown-runtime-aKtaBQYM.js",revision:"fe1c45aeeb5cda97a4081341cf8c64f0"},{url:"rewriter-CxdIIXnr.js",revision:"7fc8f9305671e6294279be5cd6055784"},{url:"rewriter-BLblP4kZ.js",revision:"2a9589202c37a5526d03e1ad2a4bbbf7"},{url:"push-client-CXh91qNd.js",revision:"8e102a78d1e61116ee3a045059e92634"},{url:"prompt-utils-DpfOVJQv-DorZAfZa.js",revision:"8d5a0482b00cf39c6d8ba0096bbce45e"},{url:"prompt-api-polyfill-DbfS1Lze.js",revision:"34df66e2fcb99a0cd133c7aceb7e183a"},{url:"prompt-api-polyfill-Bpb3g6PM.js",revision:"ad0fdd2c2d028167256c55596a697665"},{url:"prompt-api-OUOP-B-R.js",revision:"668dec7b318ba116659a49a0648c8a28"},{url:"peerjs-GCtyaaD2.js",revision:"7fd4b7a2a14edc0a997ce3f096aef39d"},{url:"pdf.worker.js",revision:"b169314e56c737213dba6418ab0b6512"},{url:"parseConfigBoolean-ByjZr9OM.js",revision:"3c1af0a9fb09aac85793c7e514ecd9c8"},{url:"orchestrator-d5egM-WM.js",revision:"74adeeafd64b276319b3cb512f032eae"},{url:"orchestrator-DuMaNh6v.js",revision:"035e5b813e93635b4d7a72bd8b6ffc85"},{url:"openai-DMG0vGCO.js",revision:"df9e8ac844b0d28349f23e0cfe7f5850"},{url:"openai-DFvWOhYR.js",revision:"2632c6c496b38c86d2facad810255b6e"},{url:"model-ranking-C60HgQ2c.js",revision:"1d4e60595bf418902c8845d595dea242"},{url:"memoryStorage-BsRU47xo.js",revision:"2a63653c80e276eeee7897895d2b9fa9"},{url:"mcp-reconnect-C1tWZW7h.js",revision:"d0ad926a11e50e6f89a68096a2a20cfd"},{url:"markdown-CcWPplTc.js",revision:"5e1104953df3f7c98641947619221c05"},{url:"language-detector-DOtU3K2z.js",revision:"98fab7d797a22dff65667cd9a4fe7d26"},{url:"language-detector-BRaioT2A.js",revision:"1ba06db21f47352e1ab970aeff923fe2"},{url:"is-typed-array-CnI-JI7u.js",revision:"8fa25cfae743242964b3f06ed67f6297"},{url:"initControlPlane-DnVdYOPe.js",revision:"b3929dc85c26416e81958c1f2c32ece4"},{url:"initControlPlane-C5jnOiDZ.js",revision:"278c9dc3fdc85d888675cfe62a37208c"},{url:"initChatSplitResize-CaR_LD0z.js",revision:"bb4f2798dc857b625e939dcfd6d1aaf1"},{url:"index.js",revision:"772127b894a86c7038e2bb9cc47427e3"},{url:"iframe-storage-proxy-DFcqzv9x.js",revision:"e3c329c100e98b770e3e2d221769b969"},{url:"iframe-sanitizer-Ak-I-vtM.js",revision:"f594e9c023aa05d7e13bae8ea3a4e307"},{url:"headless-BbtDA5cs.js",revision:"529c506ef1a2dbb425367d6fcaa6f490"},{url:"git-CS7jNXY4.js",revision:"32615331b0323826b33f327301f979c9"},{url:"git-C-q4ucyB.js",revision:"084ee91f3e6eba9126e8480a862bfdc5"},{url:"getGroupDir-DGlwK7pN.js",revision:"b614283090c0dd63e2bde8bf59ab3352"},{url:"getConfig-4saf0Tkq.js",revision:"780d39ddfdf762ce720d202109fdf83a"},{url:"getAllTasks-CKZML6au.js",revision:"d1fd6769d57e12c0ca78f6fa9f71e6ef"},{url:"gemini-C4EOz8c4.js",revision:"92e9e18cb67f66af84aad790ccf35762"},{url:"firebase-CuxChDPd.js",revision:"c6f7f8621434c83c73aa2516ab73ed63"},{url:"firebase-BKi8D3q5.js",revision:"114f1f181b229e8b46a8be3c0abeb3a1"},{url:"file-viewer-BGDIml-f.js",revision:"1760cfa3544c569697c56ef288bd3152"},{url:"effect-BJCrpFdp.js",revision:"853102f8a6f55c95dfa3fc82f9e0e3fb"},{url:"e2e-bridge-B-wC-Lpp.js",revision:"9e90952709f89bd26c1bd0dd38535052"},{url:"downloadGroupFile-CharmyBb.js",revision:"a64f5a502995accc1a72001f61504119"},{url:"dist-DUy1CvmT.js",revision:"8f723f5280a9a0153814b2010a389dea"},{url:"dist-B9m1QM9v.js",revision:"54b15459024339745e68780b3493fcd0"},{url:"defaults-DwNb0lWM-Drx4e34U.js",revision:"07f566607c044acac4fce8fb133d7837"},{url:"custom-element-security-B2GD0obL.js",revision:"c7dcd29d71eeaf87db004a9fdd064309"},{url:"crypto-browserify-U1v0eryt.js",revision:"9ec767425b59e5d2796b521157dad059"},{url:"crypto-browserify-B0z4QnB8.js",revision:"247ca3e52ef33c59adda8b8d1f954acf"},{url:"crypto-C8c5wMzN.js",revision:"2e4e24021e870c5fda72a84c0875677b"},{url:"constants-DiETpg52.js",revision:"c9f220286288beca5e353a2ac1b9d7a4"},{url:"constants-BR3kgTKA.js",revision:"4db79026565dcb309e0462d27c05ef8e"},{url:"connections-CmUXtq7r.js",revision:"915fa039d57b8f3c389e405aff6d29f4"},{url:"configurePeerJs-DnoQjlCx.js",revision:"6403463ef5766e7e4c1411d0459f36e5"},{url:"config-vxIupSU4.js",revision:"8cb5537af894841872f3a3b045592b61"},{url:"bundler-0if-QelV.js",revision:"b3656ce7ef711de0b6975db785cde1c0"},{url:"buffer-9oRIc-5Z.js",revision:"5f8bcab43db1e23f92aae427e03fbb5a"},{url:"browser-nBz_r6l4.js",revision:"e7d5c0309995473bf0dd730d3575a102"},{url:"base-task-model-CYkpwnvU-DS4fzK9O.js",revision:"3786720aea61a5be150fb388767c844b"},{url:"base-task-model-CYkpwnvU-D-idZRbr.js",revision:"5d9f4020612c5a65ad0111b10e1780e4"},{url:"backup-controller-CvzDOq4T.js",revision:"bc3e84fcc8df8c5d18ed903487df3d83"},{url:"app-routes-Dp9frfan.js",revision:"6e029ed587a0f5dd86dabe25cd616568"},{url:"agent.worker.js",revision:"60d335f14fa6a4a4c7d9dde1566cde75"},{url:"assets/iframe-storage-bridge.js",revision:"63df93333e520c84c9850ec0371894bd"},{url:"assets/file-viewer-preview-bridge.js",revision:"68858045b9734fc7bfb45398b0e43abb"},{url:"assets/screenshots/xt-ml.github.io_shadow-claw-template-1024x768.png",revision:"1cc2cf3bfac85210d6d47f98a25bae84"},{url:"assets/screenshots/xt-ml.github.io_shadow-claw-agent-cli-weather-1024x768.png",revision:"a7c3d784e410c3284da9c2842f16842c"},{url:"assets/screenshots/shadow-claw-screenshot-731x1045.png",revision:"f3b9e801298660c14976d22f20a0c243"},{url:"assets/screenshots/shadow-claw-screenshot-1920x1052.png",revision:"16f391d0bbc913ec5aa239c8d577c7a4"},{url:"assets/screenshots/shadow-claw-screenshot-1024x768.png",revision:"3ee54a033db17e3bf3dfb7d0a11ab4e1"},{url:"assets/screenshots/kherrick.github.io_pwgen-knowledge-hub-1024x768.png",revision:"94ace19b1968a1955661d4390f9e11f4"},{url:"assets/screenshots/kherrick.github.io_block-garden-knowledge-hub-1024x768.png",revision:"fe5531f3dde6781830c3e5a5d9a3e705"},{url:"assets/icons/96.png",revision:"f91548690416c59ceb56cdb99809b955"},{url:"assets/icons/72.png",revision:"cba8470097972bdbc5d9a06fe67bfcf2"},{url:"assets/icons/512.png",revision:"ec2a8f28b812a0c2665a04cb3c535aab"},{url:"assets/icons/48.png",revision:"29eb2f38df4d5a6385399a04d7bdef00"},{url:"assets/icons/192.png",revision:"bf98264d7a62a47542e577245a292b77"},{url:"assets/icons/180.png",revision:"69128cf857af09292bb06fac0df9938b"},{url:"assets/icons/152.png",revision:"645ae818149dc508cc6146d620120db2"},{url:"assets/icons/128.png",revision:"84678d51d243c104d0c85a4e909fd0a6"},{url:"assets/icons/1024.png",revision:"ae17c81b3b93137df1702de6a9fcdab6"}],{}),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html"),{allowlist:[/^\/$/,/^\/(chat|files|pages|tasks|settings)(?:\/.*)?$/],denylist:[/\/assets\//,/\.(png|jpe?g|gif|webp|svg|ico|bmp|avif|mp4|webm|mp3|wav|ogg|pdf|zip|gz|tar|css|js|json|wasm)$/i]})),e.registerRoute(({url:e,sameOrigin:a})=>{if(e.pathname.startsWith("/assets/v86.9pfs/"))return!1;const s=e.hostname.toLowerCase();if("huggingface.co"===s||s.endsWith(".huggingface.co")||s.endsWith(".hf.co")||"hf.co"===s||"hf-mirror.com"===s||s.endsWith(".hf-mirror.com")||"cdnjs.cloudflare.com"===s||"esm.sh"===s||s.endsWith(".esm.sh")||"unpkg.com"===s||"cdn.jsdelivr.net"===s||s.endsWith(".jsdelivr.net")||"esm.run"===s||"openrouter.ai"===s||s.endsWith(".openrouter.ai")||"api.telegram.org"===s)return!1;if(e.pathname.startsWith("/api/control/"))return!1;const c=e.pathname.endsWith("/share/share-target.html"),o="/proxy"===e.pathname||e.pathname.startsWith("/git-proxy/")||c||e.pathname.startsWith("/push/")||e.pathname.startsWith("/schedule/")||e.pathname.startsWith("/telegram/");return(!("localhost"===s||"127.0.0.1"===s||"::1"===s||"[::1]"===s)||!o)&&("boolean"!=typeof a||a)},new e.NetworkFirst({cacheName:"shadow-claw-cache",plugins:[new e.ExpirationPlugin({maxAgeSeconds:31536e3})]}),"GET")});
39
+ if(!self.define){let e,a={};const s=(s,c)=>(s=new URL(s+".js",c).href,a[s]||new Promise(a=>{if("document"in self){const e=document.createElement("script");e.src=s,e.onload=a,document.head.appendChild(e)}else e=s,shadowClawImportScripts(s),a()}).then(()=>{let e=a[s];if(!e)throw new Error(`Module ${s} didn’t register its module`);return e}));self.define=(c,o)=>{const i=e||("document"in self?document.currentScript.src:"")||location.href;if(a[i])return;let r={};const d=e=>s(e,i),n={module:{uri:i},exports:r,require:d};a[i]=Promise.all(c.map(e=>n[e]||d(e))).then(e=>(o(...e),r))}}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:"10c81022d769eaf356596013f6fd620e"},{url:"subsystems/channels/bindings/webrtc-datachannel/v1/index.css",revision:"84ea62c12532f5339a455f7da8e47048"},{url:"components/shadow-claw-tools/shadow-claw-tools.css",revision:"83e53f4fc50714d75f4f223c8cc1126b"},{url:"components/shadow-claw-toast/shadow-claw-toast.css",revision:"4ce2dcc1c81363147fa0a5e79474aed3"},{url:"components/shadow-claw-terminal/shadow-claw-terminal.css",revision:"34974a6d9a97832231fd931006a071d1"},{url:"components/shadow-claw-tasks/shadow-claw-tasks.css",revision:"520159be0d18dc3caad54e9e1dc1eb1b"},{url:"components/shadow-claw-settings/shadow-claw-settings.css",revision:"ad9bba0bb9beb555b3b43a90e590dfa1"},{url:"components/shadow-claw-pdf-viewer/shadow-claw-pdf-viewer.css",revision:"4c02b802e45b7e2377ecd915909ddf1c"},{url:"components/shadow-claw-pages/shadow-claw-pages.css",revision:"e36aeac18a9bf867dc30627a11773449"},{url:"components/shadow-claw-page-header/shadow-claw-page-header.css",revision:"5af6ca91ae275bdbb7f0f6bc470c83df"},{url:"components/shadow-claw-files/shadow-claw-files.css",revision:"8ea713f1228d9638039afde711505bab"},{url:"components/shadow-claw-file-viewer/shadow-claw-file-viewer.css",revision:"08101d1aefc62f51c5bff42cd468e663"},{url:"components/shadow-claw-file-viewer/highlightjs-atom-one-dark.min.css",revision:"70ec8740925f3c6615ec654090b9e2ce"},{url:"components/shadow-claw-conversations/shadow-claw-conversations.css",revision:"a941256c23d142754ea3c7e9b416f784"},{url:"components/shadow-claw-chat/shadow-claw-chat.css",revision:"b6c9d27682fce5e686696943ae1bf9b8"},{url:"components/shadow-claw-channels/shadow-claw-channels.css",revision:"431a76502c7ba3f8c83bb572f0afd71f"},{url:"components/shadow-claw-a2ui/shadow-claw-a2ui.css",revision:"d05fdf188a8295021735e601bcc5b743"},{url:"components/shadow-claw/shadow-claw.css",revision:"eccf6bd64cf5649e156ba6c676ed628f"},{url:"components/settings/shadow-claw-webvm/shadow-claw-webvm.css",revision:"f8167aff26a24125d7b9b23aee8f728a"},{url:"components/settings/shadow-claw-task-server/shadow-claw-task-server.css",revision:"f6e534a6023b143270e772c7ee6119a0"},{url:"components/settings/shadow-claw-storage/shadow-claw-storage.css",revision:"dd8009443e450b709657368a19974f09"},{url:"components/settings/shadow-claw-peerjs/shadow-claw-peerjs.css",revision:"81e589816bc4fd4da2c7d688b3db5ba9"},{url:"components/settings/shadow-claw-notifications/shadow-claw-notifications.css",revision:"32804d3923655ae18f137db78bfaccfa"},{url:"components/settings/shadow-claw-networking/shadow-claw-networking.css",revision:"f186e80f555986dc26ab392cf7c29e92"},{url:"components/settings/shadow-claw-mcp-remote/shadow-claw-mcp-remote.css",revision:"c9be041c099a1d4733ed14a87ee37bfa"},{url:"components/settings/shadow-claw-llm/shadow-claw-llm.css",revision:"8703cbfc0af3167237d71d7e3f5da4f5"},{url:"components/settings/shadow-claw-integrations/shadow-claw-integrations.css",revision:"d7b9e45ff13eecf7c6571ed755dc8358"},{url:"components/settings/shadow-claw-git/shadow-claw-git.css",revision:"eab353bd20d322d0c87a7a53e639c2a6"},{url:"components/settings/shadow-claw-control-plane/shadow-claw-control-plane.css",revision:"2cc9185fc887fb10055d9edd405bd59c"},{url:"components/settings/shadow-claw-channel-config/shadow-claw-channel-config.css",revision:"c6da4c8aa3ad1b6359e6cb7af9d5f267"},{url:"components/settings/shadow-claw-accounts/shadow-claw-accounts.css",revision:"f9a43c87ce69b7be36ad18100311c14e"},{url:"components/common/shadow-claw-provider-module-settings/shadow-claw-provider-module-settings.css",revision:"b6bbdcee11cf8fd83c411f6734e10da8"},{url:"components/common/shadow-claw-provider-model-picker/shadow-claw-provider-model-picker.css",revision:"65f56fa4a760d0207440697739be250a"},{url:"components/common/shadow-claw-page-header-action-button/shadow-claw-page-header-action-button.css",revision:"192878cb48a9bb8cf206cea1672ec390"},{url:"components/common/shadow-claw-empty-state/shadow-claw-empty-state.css",revision:"001dbd8ee37eccb2b865795cb75b32e8"},{url:"components/common/shadow-claw-card/shadow-claw-card.css",revision:"ea9fb2a5ee318103b19fdf5df14dd2ea"},{url:"components/common/shadow-claw-actions/shadow-claw-actions.css",revision:"330a4d63944580d4dc150d7c08379f26"},{url:"bindings/webrtc-datachannel/v1/index.css",revision:"8c0f3bcf62cbe9579d136150c5288ba8"},{url:"index.html",revision:"1339c8c1eaf4288a4712868395b2475b"},{url:"404.html",revision:"74bc1afc55391d3ff43b99e39de1c72f"},{url:"subsystems/channels/bindings/webrtc-datachannel/v1/index.html",revision:"d6e785383b73b911b8593265c36eaecd"},{url:"static-main/index.html",revision:"38e716481eecfdb88c3349562d815f10"},{url:"static-main/~/docs/example/article.html",revision:"cb73f16b2098cf2e77db992b6b286805"},{url:"share/share-target.html",revision:"ea535454fa33b093d0ee59fddc6f5c02"},{url:"pages/main/index.html",revision:"38e716481eecfdb88c3349562d815f10"},{url:"pages/main/~/docs/example/article.html",revision:"cb73f16b2098cf2e77db992b6b286805"},{url:"main/index.html",revision:"1339c8c1eaf4288a4712868395b2475b"},{url:"main/memory/index.html",revision:"1264d41b746f97695c00a2077810bce2"},{url:"files/main/index.html",revision:"38e716481eecfdb88c3349562d815f10"},{url:"files/main/~/docs/example/article.html",revision:"cb73f16b2098cf2e77db992b6b286805"},{url:"docs/skill-creator/index.html",revision:"6691863c56529194d767f804dc98ab75"},{url:"docs/publishing/index.html",revision:"930e7bfe5ea8fe47c6c10a1368c30a7b"},{url:"docs/example/article/index.html",revision:"cc74111a79d72ed1ce81f9d703719023"},{url:"components/shadow-claw-tools/shadow-claw-tools.html",revision:"323310ef472dd2974ff78db1afbdd02c"},{url:"components/shadow-claw-toast/shadow-claw-toast.html",revision:"83ef4f69b85bc562f3e41d2038a75298"},{url:"components/shadow-claw-terminal/shadow-claw-terminal.html",revision:"d4a9d42553a49cccdabe858a1bcdfb6d"},{url:"components/shadow-claw-tasks/shadow-claw-tasks.html",revision:"6dde9f871430da8bb157d57f05876572"},{url:"components/shadow-claw-settings/shadow-claw-settings.html",revision:"dd5421c221ad0d1e11602b0466636eb0"},{url:"components/shadow-claw-pdf-viewer/shadow-claw-pdf-viewer.html",revision:"8b1d69f282f194a98c9e9e7a2eb87009"},{url:"components/shadow-claw-pages/shadow-claw-pages.html",revision:"0f03cef912be6910360117da9b98f94a"},{url:"components/shadow-claw-page-header/shadow-claw-page-header.html",revision:"9dd0f64e1c4d31367923ae2e56662b5e"},{url:"components/shadow-claw-files/shadow-claw-files.html",revision:"7727f97dd065000b055d303d5d8a671a"},{url:"components/shadow-claw-file-viewer/shadow-claw-file-viewer.html",revision:"ff21f570a074f875b13e20fc47f54b93"},{url:"components/shadow-claw-conversations/shadow-claw-conversations.html",revision:"e1dda7d82b02568714a37db5905f8dfd"},{url:"components/shadow-claw-chat/shadow-claw-chat.html",revision:"83927b073730bce66081aa1d720351c7"},{url:"components/shadow-claw-channels/shadow-claw-channels.html",revision:"ee52d98315e62d80086d156608a94e05"},{url:"components/shadow-claw-a2ui/shadow-claw-a2ui.html",revision:"04363cb02303c1f31ad6951105e2b630"},{url:"components/shadow-claw/shadow-claw.html",revision:"6053ef3e7ca69b3df17539e153dbc278"},{url:"components/settings/shadow-claw-webvm/shadow-claw-webvm.html",revision:"b41ff0201055fc03963a115cbeef4de6"},{url:"components/settings/shadow-claw-task-server/shadow-claw-task-server.html",revision:"9e715d1a569b1e589834ffa77a109a95"},{url:"components/settings/shadow-claw-storage/shadow-claw-storage.html",revision:"33501ece794e35a2948ea03df57d47cc"},{url:"components/settings/shadow-claw-peerjs/shadow-claw-peerjs.html",revision:"40d51a573cfef6fda61358fc25d806b3"},{url:"components/settings/shadow-claw-notifications/shadow-claw-notifications.html",revision:"74d4d4d3f2b368d971e74cf9e600d6bf"},{url:"components/settings/shadow-claw-networking/shadow-claw-networking.html",revision:"bca46b725edc47a4ed30cb5e2ed4d8be"},{url:"components/settings/shadow-claw-mcp-remote/shadow-claw-mcp-remote.html",revision:"595f5626bd4a024572393c39aefe6155"},{url:"components/settings/shadow-claw-llm/shadow-claw-llm.html",revision:"ba05b5e3536c9d4a8f400696aad239b7"},{url:"components/settings/shadow-claw-integrations/shadow-claw-integrations.html",revision:"12a847b968869c521b6d17285211cf8a"},{url:"components/settings/shadow-claw-git/shadow-claw-git.html",revision:"7f0d55e8f5c74b30f2ee02cab5af93e3"},{url:"components/settings/shadow-claw-control-plane/shadow-claw-control-plane.html",revision:"83a363c0cc27bec61f7fc3126990b3b8"},{url:"components/settings/shadow-claw-channel-config/shadow-claw-channel-config.html",revision:"38805e60640572b4ada99d11343a64dd"},{url:"components/settings/shadow-claw-accounts/shadow-claw-accounts.html",revision:"6537ff4c3ee01a3107e8b138425812b9"},{url:"components/common/shadow-claw-provider-module-settings/shadow-claw-provider-module-settings.html",revision:"4022e66f6cd3ac15723063c394e429c2"},{url:"components/common/shadow-claw-provider-model-picker/shadow-claw-provider-model-picker.html",revision:"ce6d7fcbdaf710d498cdd650597d86c1"},{url:"components/common/shadow-claw-page-header-action-button/shadow-claw-page-header-action-button.html",revision:"89fa6723613dad5fcc9773685846a81f"},{url:"components/common/shadow-claw-empty-state/shadow-claw-empty-state.html",revision:"f1304d2789cf72435301709539f67a58"},{url:"components/common/shadow-claw-card/shadow-claw-card.html",revision:"332bf79a4dbd90356ea4982fc28f0312"},{url:"components/common/shadow-claw-actions/shadow-claw-actions.html",revision:"cbfba0838bc7cf14f38b80473e0d7cca"},{url:"bindings/webrtc-datachannel/v1/index.html",revision:"7f7ae8499f2c25e8e94409fa272f9f73"},{url:"favicon.ico",revision:"58fff7908409f246a6228529f384802e"},{url:"assets/icons/favicon.ico",revision:"58fff7908409f246a6228529f384802e"},{url:"static-routing.json",revision:"36f9e3515f28f864c4b329a9b3c7020a"},{url:"static-main-manifest.json",revision:"959aaefa4960add61f4f337126c3b5c7"},{url:"manifest.json",revision:"62f8d50f4e8fd710cb66c883f94b1c48"},{url:"writer-DSCZugcv.js",revision:"aa52e090e23fb66e87ae150868b73617"},{url:"writer-DKYhUsR4.js",revision:"2c1ebca2bcb7c424b3c40a335208f9f3"},{url:"webmcp-Csjin2oB.js",revision:"d4ae358b45e553a0a95524ba927866bb"},{url:"webllm-_JXFm0yh.js",revision:"9eb250fab559a4b9781d8a3d8ed35ec7"},{url:"webllm-BDMz9yZR.js",revision:"86ffb13f1b7691d5d39b7a44210761ba"},{url:"ulid-BY7rQVLN.js",revision:"e1f3add55342551fd82b63ca9c9fa3ed"},{url:"txPromise-C2iYogHX.js",revision:"74a1df07fb201bd47d0a318f30b6f527"},{url:"translator-HKOMI-RS.js",revision:"0442e3e7545bf383ce11ad047ca3b4c8"},{url:"translator-CGBLZJIJ.js",revision:"484866c38f92eed3b1073f3a2cf63614"},{url:"transformers-js.worker.js",revision:"85d9dc5f8e5f3a31cddb9a7e7288504e"},{url:"transformers-BTGkWJf4.js",revision:"50bb330f47facc065c63f9d684375a58"},{url:"transformers--9oz-RLQ.js",revision:"b81607b6adb3b7b3a956301d3510c91e"},{url:"tools-vzWYHFBC.js",revision:"b8e70b785c14b2e2de15cde940497b51"},{url:"tools-vVsKTc2N.js",revision:"fbdf899d877fd53339bc5ae48f924b66"},{url:"tools-Day-D-vL.js",revision:"c10a562cce98174f91470e6cdafb0f14"},{url:"toast-BXgUfbyh.js",revision:"b7c62da49835547bd07f2010219562bd"},{url:"theme-init.js",revision:"6f9c26eafb08dd52db7915d53604f57a"},{url:"syncWebMcpRegistration-BPFAOeDk.js",revision:"7ad12f72d1168bcb9b3652ba40ebcbe7"},{url:"summarizer-P3JHUhJ4.js",revision:"c61ee9cefeca591ad5618d95d153a2f4"},{url:"summarizer-CweqtGSY.js",revision:"fc2cafa5615e2284fbe262cc416fa32c"},{url:"shadow-claw-webvm-SMhN9Hz0.js",revision:"a1f9d7c8e5f74d832b50e003e027484f"},{url:"shadow-claw-tools-CNX-9T3T.js",revision:"43a77dff1ed46f050657700f62288597"},{url:"shadow-claw-toast-C_zXWKX9.js",revision:"b6a160902a77d1197facbca3603d990a"},{url:"shadow-claw-terminal-P9RS0Kux.js",revision:"b516dd259568120f8e8decc17ef6fcd2"},{url:"shadow-claw-tasks-ewhmptQN.js",revision:"2cd94e095486da9af1cc2d96cafeb3b5"},{url:"shadow-claw-task-server-BM1ndNkT.js",revision:"5981d35ae53a14acce43c0a625fefc04"},{url:"shadow-claw-storage-DdFawD3r.js",revision:"22c2b7f8bda29cffaf9e996dd666d1ff"},{url:"shadow-claw-settings-CNz3eBNN.js",revision:"0b8a4f40928cf99ae853bbe85bd45eee"},{url:"shadow-claw-pdf-viewer-gOiW-_Bh.js",revision:"e84932e68c4b1a60d8d72b37cfc1c920"},{url:"shadow-claw-pages-CMP6CCs0.js",revision:"6a9b991d4bbeca512b5ffad84af1e194"},{url:"shadow-claw-page-header-action-button-Bmua3mAb.js",revision:"2e4b1fc665cfcf6a51510a08ba0a5da0"},{url:"shadow-claw-page-header-Bb2Vo6_u.js",revision:"43462fded0a21110a8391ba1b46a2e3e"},{url:"shadow-claw-oXCQySZy.js",revision:"45e037d8d9092411f8d1ad063c20a556"},{url:"shadow-claw-notifications-DVmyPMSF.js",revision:"9ea523d972c6c4ae6da7839daab86a94"},{url:"shadow-claw-networking-0NosaYt5.js",revision:"bf3b1dfec356f01b913faa28607a1cdd"},{url:"shadow-claw-mcp-remote-sf64l52x.js",revision:"bf0b10494727cbba290dc404af797c48"},{url:"shadow-claw-llm-C0OoBYEC.js",revision:"764edba615ddb7ec530413ce9af9cce4"},{url:"shadow-claw-integrations-Cgv6aawT.js",revision:"0f5402eb35349bf58ea64805d1d4ca49"},{url:"shadow-claw-git-LLp5M1qv.js",revision:"7a17003fbac1f3d4940fe38a0197aae1"},{url:"shadow-claw-files-BNU3b63h.js",revision:"4a2eceaed9d8290bc7e12278adffc068"},{url:"shadow-claw-file-viewer-xRJ0lqj2.js",revision:"aaafa9631323104ad063c2daebf96ed1"},{url:"shadow-claw-empty-state-CkvLk0-B.js",revision:"1ef0891c108feeab7b5ca2f38ed07abf"},{url:"shadow-claw-element-DIrv3P6A.js",revision:"740ad3d06fc485e6ab3d815d996036ee"},{url:"shadow-claw-dialog-BrOwAOdk.js",revision:"cef105280f387f95d4763386497c3de9"},{url:"shadow-claw-conversations-BmujFtOj.js",revision:"95ec2447fca2b98e8c5f612844b037f1"},{url:"shadow-claw-control-plane-BH7GgX1q.js",revision:"af943337a39886044f13d994af7609c3"},{url:"shadow-claw-chat-C-ULqqjn.js",revision:"5f98ea8240cd2f5ef41362c3f8920d76"},{url:"shadow-claw-channels-IOf1W3h7.js",revision:"4ca80c3da9ee35c228bf3ba4cc50ac01"},{url:"shadow-claw-card-DCxWEHgX.js",revision:"16fb58ffeced559d6ae06ad22dc83449"},{url:"shadow-claw-accounts-CbZCjfNn.js",revision:"be915b78305cd764a1219bcad37f92ec"},{url:"setConfig-DdSThoKj.js",revision:"c8468805ffd4cffac5c56b089a278ba6"},{url:"rolldown-runtime-aKtaBQYM.js",revision:"fe1c45aeeb5cda97a4081341cf8c64f0"},{url:"rewriter-CxdIIXnr.js",revision:"7fc8f9305671e6294279be5cd6055784"},{url:"rewriter-BLblP4kZ.js",revision:"2a9589202c37a5526d03e1ad2a4bbbf7"},{url:"push-client-CXh91qNd.js",revision:"8e102a78d1e61116ee3a045059e92634"},{url:"prompt-utils-DpfOVJQv-DorZAfZa.js",revision:"8d5a0482b00cf39c6d8ba0096bbce45e"},{url:"prompt-api-polyfill-DbfS1Lze.js",revision:"34df66e2fcb99a0cd133c7aceb7e183a"},{url:"prompt-api-polyfill-Bpb3g6PM.js",revision:"ad0fdd2c2d028167256c55596a697665"},{url:"prompt-api-OUOP-B-R.js",revision:"668dec7b318ba116659a49a0648c8a28"},{url:"peerjs-GCtyaaD2.js",revision:"7fd4b7a2a14edc0a997ce3f096aef39d"},{url:"pdf.worker.js",revision:"b169314e56c737213dba6418ab0b6512"},{url:"parseConfigBoolean-ByjZr9OM.js",revision:"3c1af0a9fb09aac85793c7e514ecd9c8"},{url:"orchestrator-d5egM-WM.js",revision:"74adeeafd64b276319b3cb512f032eae"},{url:"orchestrator-DuMaNh6v.js",revision:"035e5b813e93635b4d7a72bd8b6ffc85"},{url:"openai-DMG0vGCO.js",revision:"df9e8ac844b0d28349f23e0cfe7f5850"},{url:"openai-DFvWOhYR.js",revision:"2632c6c496b38c86d2facad810255b6e"},{url:"model-ranking-C60HgQ2c.js",revision:"1d4e60595bf418902c8845d595dea242"},{url:"memoryStorage-BsRU47xo.js",revision:"2a63653c80e276eeee7897895d2b9fa9"},{url:"mcp-reconnect-C1tWZW7h.js",revision:"d0ad926a11e50e6f89a68096a2a20cfd"},{url:"markdown-CcWPplTc.js",revision:"5e1104953df3f7c98641947619221c05"},{url:"language-detector-DOtU3K2z.js",revision:"98fab7d797a22dff65667cd9a4fe7d26"},{url:"language-detector-BRaioT2A.js",revision:"1ba06db21f47352e1ab970aeff923fe2"},{url:"is-typed-array-CnI-JI7u.js",revision:"8fa25cfae743242964b3f06ed67f6297"},{url:"initControlPlane-DnVdYOPe.js",revision:"b3929dc85c26416e81958c1f2c32ece4"},{url:"initControlPlane-C5jnOiDZ.js",revision:"278c9dc3fdc85d888675cfe62a37208c"},{url:"initChatSplitResize-CaR_LD0z.js",revision:"bb4f2798dc857b625e939dcfd6d1aaf1"},{url:"index.js",revision:"772127b894a86c7038e2bb9cc47427e3"},{url:"iframe-storage-proxy-DFcqzv9x.js",revision:"e3c329c100e98b770e3e2d221769b969"},{url:"iframe-sanitizer-Ak-I-vtM.js",revision:"f594e9c023aa05d7e13bae8ea3a4e307"},{url:"headless-BbtDA5cs.js",revision:"529c506ef1a2dbb425367d6fcaa6f490"},{url:"git-CS7jNXY4.js",revision:"32615331b0323826b33f327301f979c9"},{url:"git-C-q4ucyB.js",revision:"084ee91f3e6eba9126e8480a862bfdc5"},{url:"getGroupDir-DGlwK7pN.js",revision:"b614283090c0dd63e2bde8bf59ab3352"},{url:"getConfig-4saf0Tkq.js",revision:"780d39ddfdf762ce720d202109fdf83a"},{url:"getAllTasks-CKZML6au.js",revision:"d1fd6769d57e12c0ca78f6fa9f71e6ef"},{url:"gemini-C4EOz8c4.js",revision:"92e9e18cb67f66af84aad790ccf35762"},{url:"firebase-CuxChDPd.js",revision:"c6f7f8621434c83c73aa2516ab73ed63"},{url:"firebase-BKi8D3q5.js",revision:"114f1f181b229e8b46a8be3c0abeb3a1"},{url:"file-viewer-BGDIml-f.js",revision:"1760cfa3544c569697c56ef288bd3152"},{url:"effect-BJCrpFdp.js",revision:"853102f8a6f55c95dfa3fc82f9e0e3fb"},{url:"e2e-bridge-B-wC-Lpp.js",revision:"9e90952709f89bd26c1bd0dd38535052"},{url:"downloadGroupFile-CharmyBb.js",revision:"a64f5a502995accc1a72001f61504119"},{url:"dist-DUy1CvmT.js",revision:"8f723f5280a9a0153814b2010a389dea"},{url:"dist-B9m1QM9v.js",revision:"54b15459024339745e68780b3493fcd0"},{url:"defaults-DwNb0lWM-Drx4e34U.js",revision:"07f566607c044acac4fce8fb133d7837"},{url:"custom-element-security-B2GD0obL.js",revision:"c7dcd29d71eeaf87db004a9fdd064309"},{url:"crypto-browserify-U1v0eryt.js",revision:"9ec767425b59e5d2796b521157dad059"},{url:"crypto-browserify-B0z4QnB8.js",revision:"247ca3e52ef33c59adda8b8d1f954acf"},{url:"crypto-C8c5wMzN.js",revision:"2e4e24021e870c5fda72a84c0875677b"},{url:"constants-DiETpg52.js",revision:"c9f220286288beca5e353a2ac1b9d7a4"},{url:"constants-BR3kgTKA.js",revision:"4db79026565dcb309e0462d27c05ef8e"},{url:"connections-CmUXtq7r.js",revision:"915fa039d57b8f3c389e405aff6d29f4"},{url:"configurePeerJs-DnoQjlCx.js",revision:"6403463ef5766e7e4c1411d0459f36e5"},{url:"config-vxIupSU4.js",revision:"8cb5537af894841872f3a3b045592b61"},{url:"bundler-0if-QelV.js",revision:"b3656ce7ef711de0b6975db785cde1c0"},{url:"buffer-9oRIc-5Z.js",revision:"5f8bcab43db1e23f92aae427e03fbb5a"},{url:"browser-nBz_r6l4.js",revision:"e7d5c0309995473bf0dd730d3575a102"},{url:"base-task-model-CYkpwnvU-DS4fzK9O.js",revision:"3786720aea61a5be150fb388767c844b"},{url:"base-task-model-CYkpwnvU-D-idZRbr.js",revision:"5d9f4020612c5a65ad0111b10e1780e4"},{url:"backup-controller-CvzDOq4T.js",revision:"bc3e84fcc8df8c5d18ed903487df3d83"},{url:"app-routes-Dp9frfan.js",revision:"6e029ed587a0f5dd86dabe25cd616568"},{url:"agent.worker.js",revision:"60d335f14fa6a4a4c7d9dde1566cde75"},{url:"assets/iframe-storage-bridge.js",revision:"63df93333e520c84c9850ec0371894bd"},{url:"assets/file-viewer-preview-bridge.js",revision:"68858045b9734fc7bfb45398b0e43abb"},{url:"assets/screenshots/xt-ml.github.io_shadow-claw-template-1024x768.png",revision:"1cc2cf3bfac85210d6d47f98a25bae84"},{url:"assets/screenshots/xt-ml.github.io_shadow-claw-agent-cli-weather-1024x768.png",revision:"a7c3d784e410c3284da9c2842f16842c"},{url:"assets/screenshots/shadow-claw-screenshot-731x1045.png",revision:"f3b9e801298660c14976d22f20a0c243"},{url:"assets/screenshots/shadow-claw-screenshot-1920x1052.png",revision:"16f391d0bbc913ec5aa239c8d577c7a4"},{url:"assets/screenshots/shadow-claw-screenshot-1024x768.png",revision:"3ee54a033db17e3bf3dfb7d0a11ab4e1"},{url:"assets/screenshots/kherrick.github.io_pwgen-knowledge-hub-1024x768.png",revision:"94ace19b1968a1955661d4390f9e11f4"},{url:"assets/screenshots/kherrick.github.io_block-garden-knowledge-hub-1024x768.png",revision:"fe5531f3dde6781830c3e5a5d9a3e705"},{url:"assets/icons/96.png",revision:"f91548690416c59ceb56cdb99809b955"},{url:"assets/icons/72.png",revision:"cba8470097972bdbc5d9a06fe67bfcf2"},{url:"assets/icons/512.png",revision:"ec2a8f28b812a0c2665a04cb3c535aab"},{url:"assets/icons/48.png",revision:"29eb2f38df4d5a6385399a04d7bdef00"},{url:"assets/icons/192.png",revision:"bf98264d7a62a47542e577245a292b77"},{url:"assets/icons/180.png",revision:"69128cf857af09292bb06fac0df9938b"},{url:"assets/icons/152.png",revision:"645ae818149dc508cc6146d620120db2"},{url:"assets/icons/128.png",revision:"84678d51d243c104d0c85a4e909fd0a6"},{url:"assets/icons/1024.png",revision:"ae17c81b3b93137df1702de6a9fcdab6"}],{}),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html"),{allowlist:[/^\/$/,/^\/(chat|files|pages|tasks|settings)(?:\/.*)?$/],denylist:[/\/assets\//,/\.(png|jpe?g|gif|webp|svg|ico|bmp|avif|mp4|webm|mp3|wav|ogg|pdf|zip|gz|tar|css|js|json|wasm)$/i]})),e.registerRoute(({url:e,sameOrigin:a})=>{if(e.pathname.startsWith("/assets/v86.9pfs/"))return!1;const s=e.hostname.toLowerCase();if("huggingface.co"===s||s.endsWith(".huggingface.co")||s.endsWith(".hf.co")||"hf.co"===s||"hf-mirror.com"===s||s.endsWith(".hf-mirror.com")||"cdnjs.cloudflare.com"===s||"esm.sh"===s||s.endsWith(".esm.sh")||"unpkg.com"===s||"cdn.jsdelivr.net"===s||s.endsWith(".jsdelivr.net")||"esm.run"===s||"openrouter.ai"===s||s.endsWith(".openrouter.ai")||"api.telegram.org"===s)return!1;if(e.pathname.startsWith("/api/control/"))return!1;const c=e.pathname.endsWith("/share/share-target.html"),o="/proxy"===e.pathname||e.pathname.startsWith("/git-proxy/")||c||e.pathname.startsWith("/push/")||e.pathname.startsWith("/schedule/")||e.pathname.startsWith("/telegram/");return(!("localhost"===s||"127.0.0.1"===s||"::1"===s||"[::1]"===s)||!o)&&("boolean"!=typeof a||a)},new e.NetworkFirst({cacheName:"shadow-claw-cache",plugins:[new e.ExpirationPlugin({maxAgeSeconds:31536e3})]}),"GET")});