shadow-claw 1.32.0 → 1.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.well-known/mcp/server-card.json +1 -1
- package/.well-known/mcp.json +1 -1
- package/dist/electron/main.cjs +1 -1
- package/dist/lib/components/index.js +26 -26
- package/dist/lib/components/settings/shadow-claw-accounts.js +1 -1
- package/dist/lib/components/settings/shadow-claw-channel-config.js +1 -1
- package/dist/lib/components/settings/shadow-claw-control-plane.js +1 -1
- package/dist/lib/components/settings/shadow-claw-git.js +1 -1
- package/dist/lib/components/settings/shadow-claw-integrations.js +1 -1
- package/dist/lib/components/settings/shadow-claw-llm.js +1 -1
- package/dist/lib/components/settings/shadow-claw-mcp-remote.js +1 -1
- package/dist/lib/components/settings/shadow-claw-networking.js +1 -1
- package/dist/lib/components/settings/shadow-claw-notifications.js +1 -1
- package/dist/lib/components/settings/shadow-claw-peerjs.js +1 -1
- package/dist/lib/components/settings/shadow-claw-storage.js +1 -1
- package/dist/lib/components/settings/shadow-claw-task-server.js +1 -1
- package/dist/lib/components/settings/shadow-claw-webvm.js +1 -1
- package/dist/lib/components/shadow-claw-a2ui.js +1 -1
- package/dist/lib/components/shadow-claw-accounts.js +1 -1
- package/dist/lib/components/shadow-claw-channel-config.js +1 -1
- package/dist/lib/components/shadow-claw-channels.js +1 -1
- package/dist/lib/components/shadow-claw-chat.js +1 -1
- package/dist/lib/components/shadow-claw-control-plane.js +1 -1
- package/dist/lib/components/shadow-claw-conversations.js +1 -1
- package/dist/lib/components/shadow-claw-file-viewer.js +1 -1
- package/dist/lib/components/shadow-claw-files.js +1 -1
- package/dist/lib/components/shadow-claw-git.js +1 -1
- package/dist/lib/components/shadow-claw-integrations.js +1 -1
- package/dist/lib/components/shadow-claw-llm.js +1 -1
- package/dist/lib/components/shadow-claw-mcp-remote.js +1 -1
- package/dist/lib/components/shadow-claw-networking.js +1 -1
- package/dist/lib/components/shadow-claw-notifications.js +1 -1
- package/dist/lib/components/shadow-claw-page-header.js +1 -1
- package/dist/lib/components/shadow-claw-pages.js +1 -1
- package/dist/lib/components/shadow-claw-peerjs.js +1 -1
- package/dist/lib/components/shadow-claw-settings.js +1 -1
- package/dist/lib/components/shadow-claw-storage.js +1 -1
- package/dist/lib/components/shadow-claw-task-server.js +1 -1
- package/dist/lib/components/shadow-claw-tasks.js +1 -1
- package/dist/lib/components/shadow-claw-terminal.js +1 -1
- package/dist/lib/components/shadow-claw-tools.js +1 -1
- package/dist/lib/components/shadow-claw-webvm.js +1 -1
- package/dist/lib/components/shadow-claw.js +1 -1
- package/dist/lib/{config-DjZ9QWc4.js → config-BcFbkaQv.js} +21 -4
- package/dist/lib/config-BcFbkaQv.js.map +1 -0
- package/dist/lib/{configurePeerJs-DD3G3Pms.js → configurePeerJs-CBMPHbwa.js} +3 -3
- package/dist/lib/{configurePeerJs-DD3G3Pms.js.map → configurePeerJs-CBMPHbwa.js.map} +1 -1
- package/dist/lib/{connections-BURqMIUv.js → connections-PZrUDf49.js} +2 -2
- package/dist/lib/{connections-BURqMIUv.js.map → connections-PZrUDf49.js.map} +1 -1
- package/dist/lib/{downloadGroupFile-B8J4up2a.js → downloadGroupFile-DSRUa9Au.js} +2 -2
- package/dist/lib/{downloadGroupFile-B8J4up2a.js.map → downloadGroupFile-DSRUa9Au.js.map} +1 -1
- package/dist/lib/{file-viewer-DoHM75Jz.js → file-viewer-11VVOpJv.js} +5 -5
- package/dist/lib/{file-viewer-DoHM75Jz.js.map → file-viewer-11VVOpJv.js.map} +1 -1
- package/dist/lib/{getGroupDir-QrN2aTo8.js → getGroupDir-BxKMYPPm.js} +3 -3
- package/dist/lib/{getGroupDir-QrN2aTo8.js.map → getGroupDir-BxKMYPPm.js.map} +1 -1
- package/dist/lib/{git-Brr7JIbs.js → git-BppibnJW.js} +3 -3
- package/dist/lib/{git-Brr7JIbs.js.map → git-BppibnJW.js.map} +1 -1
- package/dist/lib/{iframe-sanitizer-Bujgq14T.js → iframe-sanitizer-Dp8EYffI.js} +2 -2
- package/dist/lib/{iframe-sanitizer-Bujgq14T.js.map → iframe-sanitizer-Dp8EYffI.js.map} +1 -1
- package/dist/lib/index.js +27 -27
- package/dist/lib/{initChatSplitResize-BjiWoqC_.js → initChatSplitResize-CE_kWaLf.js} +2 -2
- package/dist/lib/{initChatSplitResize-BjiWoqC_.js.map → initChatSplitResize-CE_kWaLf.js.map} +1 -1
- package/dist/lib/{initControlPlane-3TUdhRBM.js → initControlPlane-BRIIOzoH.js} +18 -17
- package/dist/lib/{initControlPlane-3TUdhRBM.js.map → initControlPlane-BRIIOzoH.js.map} +1 -1
- package/dist/lib/{markdown-BFUTPQoO.js → markdown-Cq4sVwUT.js} +4 -4
- package/dist/lib/{markdown-BFUTPQoO.js.map → markdown-Cq4sVwUT.js.map} +1 -1
- package/dist/lib/{mcp-reconnect-BxJ77WSb.js → mcp-reconnect-CoHDMjmY.js} +2 -2
- package/dist/lib/{mcp-reconnect-BxJ77WSb.js.map → mcp-reconnect-CoHDMjmY.js.map} +1 -1
- package/dist/lib/{memoryStorage-D3FBwO9T.js → memoryStorage-DcFWrn_y.js} +2 -2
- package/dist/lib/{memoryStorage-D3FBwO9T.js.map → memoryStorage-DcFWrn_y.js.map} +1 -1
- package/dist/lib/{orchestrator-DW5l2bbW.js → orchestrator-C3TgDZvq.js} +81 -18
- package/dist/lib/{orchestrator-DW5l2bbW.js.map → orchestrator-C3TgDZvq.js.map} +1 -1
- package/dist/lib/{orchestrator-DLnCmeTZ.js → orchestrator-Ce9_lmL2.js} +12 -12
- package/dist/lib/{orchestrator-DLnCmeTZ.js.map → orchestrator-Ce9_lmL2.js.map} +1 -1
- package/dist/lib/{peerjs-BXlMuIQn.js → peerjs-PTYQ7yEG.js} +6 -6
- package/dist/lib/{peerjs-BXlMuIQn.js.map → peerjs-PTYQ7yEG.js.map} +1 -1
- package/dist/lib/{push-client-B419nn-i.js → push-client-DDV5Rcg6.js} +3 -3
- package/dist/lib/{push-client-B419nn-i.js.map → push-client-DDV5Rcg6.js.map} +1 -1
- package/dist/lib/{readGroupFileBytes-CSA7u-nJ.js → readGroupFileBytes-7C8G-yps.js} +2 -2
- package/dist/lib/{readGroupFileBytes-CSA7u-nJ.js.map → readGroupFileBytes-7C8G-yps.js.map} +1 -1
- package/dist/lib/{shadow-claw-DmMO4vVG.js → shadow-claw-WrWoPqFx.js} +10 -10
- package/dist/lib/{shadow-claw-DmMO4vVG.js.map → shadow-claw-WrWoPqFx.js.map} +1 -1
- package/dist/lib/{shadow-claw-a2ui-2I5nffIn.js → shadow-claw-a2ui-CcmJNXQP.js} +2 -2
- package/dist/lib/{shadow-claw-a2ui-2I5nffIn.js.map → shadow-claw-a2ui-CcmJNXQP.js.map} +1 -1
- package/dist/lib/{shadow-claw-accounts-DMb0y4ca.js → shadow-claw-accounts-CcB2429E.js} +3 -3
- package/dist/lib/{shadow-claw-accounts-DMb0y4ca.js.map → shadow-claw-accounts-CcB2429E.js.map} +1 -1
- package/dist/lib/{shadow-claw-channel-config-BhxHf6wZ.js → shadow-claw-channel-config-C4v0h8oa.js} +3 -3
- package/dist/lib/{shadow-claw-channel-config-BhxHf6wZ.js.map → shadow-claw-channel-config-C4v0h8oa.js.map} +1 -1
- package/dist/lib/{shadow-claw-channels-B5vzE9Z2.js → shadow-claw-channels-CyV88k9T.js} +3 -3
- package/dist/lib/{shadow-claw-channels-B5vzE9Z2.js.map → shadow-claw-channels-CyV88k9T.js.map} +1 -1
- package/dist/lib/{shadow-claw-chat-BsYnJ4-G.js → shadow-claw-chat-DSYtuZod.js} +11 -11
- package/dist/lib/{shadow-claw-chat-BsYnJ4-G.js.map → shadow-claw-chat-DSYtuZod.js.map} +1 -1
- package/dist/lib/{shadow-claw-control-plane-DqcgQsun.js → shadow-claw-control-plane-DBSGuDT1.js} +7 -7
- package/dist/lib/{shadow-claw-control-plane-DqcgQsun.js.map → shadow-claw-control-plane-DBSGuDT1.js.map} +1 -1
- package/dist/lib/{shadow-claw-conversations-B9Pn58g3.js → shadow-claw-conversations-Cp8pK4PM.js} +5 -5
- package/dist/lib/{shadow-claw-conversations-B9Pn58g3.js.map → shadow-claw-conversations-Cp8pK4PM.js.map} +1 -1
- package/dist/lib/{shadow-claw-file-viewer-DL6c4oPK.js → shadow-claw-file-viewer-B8G8yo48.js} +8 -8
- package/dist/lib/{shadow-claw-file-viewer-DL6c4oPK.js.map → shadow-claw-file-viewer-B8G8yo48.js.map} +1 -1
- package/dist/lib/{shadow-claw-files-C_ksPb8W.js → shadow-claw-files-D1COKzuC.js} +9 -9
- package/dist/lib/{shadow-claw-files-C_ksPb8W.js.map → shadow-claw-files-D1COKzuC.js.map} +1 -1
- package/dist/lib/{shadow-claw-git-jwsY7L1N.js → shadow-claw-git-60tWU4Ee.js} +6 -6
- package/dist/lib/{shadow-claw-git-jwsY7L1N.js.map → shadow-claw-git-60tWU4Ee.js.map} +1 -1
- package/dist/lib/{shadow-claw-integrations-yT7j07TM.js → shadow-claw-integrations-Bw1cG1ze.js} +4 -4
- package/dist/lib/{shadow-claw-integrations-yT7j07TM.js.map → shadow-claw-integrations-Bw1cG1ze.js.map} +1 -1
- package/dist/lib/{shadow-claw-llm-CEPJh1Jh.js → shadow-claw-llm-By5CvsFJ.js} +6 -6
- package/dist/lib/{shadow-claw-llm-CEPJh1Jh.js.map → shadow-claw-llm-By5CvsFJ.js.map} +1 -1
- package/dist/lib/{shadow-claw-mcp-remote-DGDWjByQ.js → shadow-claw-mcp-remote-BaNODd1v.js} +4 -4
- package/dist/lib/{shadow-claw-mcp-remote-DGDWjByQ.js.map → shadow-claw-mcp-remote-BaNODd1v.js.map} +1 -1
- package/dist/lib/{shadow-claw-networking-Bi4yvc73.js → shadow-claw-networking-DtZ5bsTz.js} +2 -2
- package/dist/lib/{shadow-claw-networking-Bi4yvc73.js.map → shadow-claw-networking-DtZ5bsTz.js.map} +1 -1
- package/dist/lib/{shadow-claw-notifications-C-JgGqQx.js → shadow-claw-notifications-C3VEba_A.js} +3 -3
- package/dist/lib/{shadow-claw-notifications-C-JgGqQx.js.map → shadow-claw-notifications-C3VEba_A.js.map} +1 -1
- package/dist/lib/{shadow-claw-page-header-DrAcWCZ9.js → shadow-claw-page-header-BLowJopA.js} +2 -2
- package/dist/lib/{shadow-claw-page-header-DrAcWCZ9.js.map → shadow-claw-page-header-BLowJopA.js.map} +1 -1
- package/dist/lib/{shadow-claw-pages-OEOClgA8.js → shadow-claw-pages-CpeUV-hw.js} +9 -9
- package/dist/lib/{shadow-claw-pages-OEOClgA8.js.map → shadow-claw-pages-CpeUV-hw.js.map} +1 -1
- package/dist/lib/{shadow-claw-peerjs-DmC2CV-9.js → shadow-claw-peerjs-DYAzJbTy.js} +3 -3
- package/dist/lib/{shadow-claw-peerjs-DmC2CV-9.js.map → shadow-claw-peerjs-DYAzJbTy.js.map} +1 -1
- package/dist/lib/{shadow-claw-settings-xAtFog0T.js → shadow-claw-settings-ByxwW3WK.js} +9 -9
- package/dist/lib/{shadow-claw-settings-xAtFog0T.js.map → shadow-claw-settings-ByxwW3WK.js.map} +1 -1
- package/dist/lib/{shadow-claw-storage-B4UHl-po.js → shadow-claw-storage-CsSPYVDJ.js} +5 -5
- package/dist/lib/{shadow-claw-storage-B4UHl-po.js.map → shadow-claw-storage-CsSPYVDJ.js.map} +1 -1
- package/dist/lib/{shadow-claw-task-server-B0eWzg57.js → shadow-claw-task-server-De2WCEw4.js} +2 -2
- package/dist/lib/{shadow-claw-task-server-B0eWzg57.js.map → shadow-claw-task-server-De2WCEw4.js.map} +1 -1
- package/dist/lib/{shadow-claw-tasks-HHU_8Gyg.js → shadow-claw-tasks-zHWT4GaE.js} +7 -7
- package/dist/lib/{shadow-claw-tasks-HHU_8Gyg.js.map → shadow-claw-tasks-zHWT4GaE.js.map} +1 -1
- package/dist/lib/{shadow-claw-terminal-CdC2G6Zz.js → shadow-claw-terminal-Bpawfv4N.js} +2 -2
- package/dist/lib/{shadow-claw-terminal-CdC2G6Zz.js.map → shadow-claw-terminal-Bpawfv4N.js.map} +1 -1
- package/dist/lib/{shadow-claw-tools-2AICxVXA.js → shadow-claw-tools-BbKdWcps.js} +7 -7
- package/dist/lib/{shadow-claw-tools-2AICxVXA.js.map → shadow-claw-tools-BbKdWcps.js.map} +1 -1
- package/dist/lib/{shadow-claw-webvm-Cy-Ia2vs.js → shadow-claw-webvm-DLqK0AxW.js} +3 -3
- package/dist/lib/{shadow-claw-webvm-Cy-Ia2vs.js.map → shadow-claw-webvm-DLqK0AxW.js.map} +1 -1
- package/dist/lib/subsystems/mcp/webmcp.d.ts +37 -0
- package/dist/lib/subsystems/providers/model-registry.d.ts +4 -1
- package/dist/lib/subsystems/providers/providers.d.ts +10 -0
- package/dist/lib/{syncWebMcpRegistration-CaAPPg2V.js → syncWebMcpRegistration-mlbbvcdm.js} +5 -5
- package/dist/lib/{syncWebMcpRegistration-CaAPPg2V.js.map → syncWebMcpRegistration-mlbbvcdm.js.map} +1 -1
- package/dist/lib/{tools-f1WPNDSS.js → tools-Bb2ujM2E.js} +4 -4
- package/dist/lib/{tools-f1WPNDSS.js.map → tools-Bb2ujM2E.js.map} +1 -1
- package/dist/lib/utils/index.js +1 -1
- package/dist/lib/utils/utils.js +1 -1
- package/dist/lib/{utils-B99XP70b.js → utils-mpsYPfS7.js} +3 -3
- package/dist/lib/{utils-B99XP70b.js.map → utils-mpsYPfS7.js.map} +1 -1
- package/dist/lib/webmcp-BVR2lBVo.js +1544 -0
- package/dist/lib/webmcp-BVR2lBVo.js.map +1 -0
- package/dist/public/.well-known/mcp/server-card.json +1 -1
- package/dist/public/.well-known/mcp.json +1 -1
- package/dist/public/agent.worker.js +44 -44
- package/dist/public/config-BqecTktB.js +1 -0
- package/dist/public/{configurePeerJs--JGpJVti.js → configurePeerJs-BPKfWuEt.js} +1 -1
- package/dist/public/{connections-6575KDGE.js → connections-C_3tYsmX.js} +1 -1
- package/dist/public/{custom-element-security-Da_6HQ6X.js → custom-element-security-DXwU3Lae.js} +1 -1
- package/dist/public/docs/example/article/index.html +2 -2
- package/dist/public/docs/publishing/index.html +2 -2
- package/dist/public/docs/skill-creator/index.html +2 -2
- package/dist/public/docs/subsystems/tools.md +4 -3
- package/dist/public/docs/subsystems/webmcp.md +58 -13
- package/dist/public/{downloadGroupFile-Dj-AMNsd.js → downloadGroupFile-DTyf5DIC.js} +1 -1
- package/dist/public/{e2e-bridge-CbYqdMp-.js → e2e-bridge-DXwWCQKw.js} +1 -1
- package/dist/public/{file-viewer-vHJ5Zsgk.js → file-viewer-ConEyDDG.js} +1 -1
- package/dist/public/{getGroupDir-BwprrdrQ.js → getGroupDir-ZfZsiq6d.js} +1 -1
- package/dist/public/{git-8F7wvoUB.js → git-BtBaLC1-.js} +2 -2
- package/dist/public/{iframe-sanitizer-viROQkRn.js → iframe-sanitizer-Corkvo_d.js} +1 -1
- package/dist/public/index.html +2 -2
- package/dist/public/index.js +1 -1
- package/dist/public/{initChatSplitResize-BA18wLQQ.js → initChatSplitResize-CUc-TEmT.js} +1 -1
- package/dist/public/{initControlPlane-C5v0FtJE.js → initControlPlane-B_uYS8a4.js} +1 -1
- package/dist/public/main/index.html +2 -2
- package/dist/public/main/memory/index.html +2 -2
- package/dist/public/{markdown-eFKxxpVP.js → markdown-Cfa6GuJs.js} +1 -1
- package/dist/public/{mcp-reconnect-CBHuaYdF.js → mcp-reconnect-CUOkdPEz.js} +1 -1
- package/dist/public/{memoryStorage-C1llaYus.js → memoryStorage-Bh8fjmip.js} +1 -1
- package/dist/public/{orchestrator-DNr2HDI2.js → orchestrator-BcSzrg6E.js} +2 -2
- package/dist/public/{orchestrator-BeJfwtvz.js → orchestrator-Bi5OdVZD.js} +11 -11
- package/dist/public/{peerjs-mG30TAJ_.js → peerjs-CzCXG-NW.js} +1 -1
- package/dist/public/{push-client-C2zMT3Sf.js → push-client-Cr3Ruahp.js} +1 -1
- package/dist/public/service-worker.js +1 -1
- package/dist/public/{shadow-claw-Ble6l0Iw.js → shadow-claw-CzUYuuOa.js} +2 -2
- package/dist/public/{shadow-claw-accounts-D1y-zbMs.js → shadow-claw-accounts-BgIHB_aP.js} +1 -1
- package/dist/public/{shadow-claw-channels-D_xfBoWp.js → shadow-claw-channels-Ce_trJ5D.js} +1 -1
- package/dist/public/{shadow-claw-chat-D_Lbi5oH.js → shadow-claw-chat-CdECLLwL.js} +1 -1
- package/dist/public/{shadow-claw-control-plane-CrnA5lM0.js → shadow-claw-control-plane-DM62UmOz.js} +2 -2
- package/dist/public/{shadow-claw-conversations-BN-hFmN1.js → shadow-claw-conversations-AM5g3C00.js} +1 -1
- package/dist/public/{shadow-claw-file-viewer-BKEpzpbx.js → shadow-claw-file-viewer-BP7gWS5g.js} +1 -1
- package/dist/public/{shadow-claw-files-DDZMk5AA.js → shadow-claw-files-RPPGszcK.js} +1 -1
- package/dist/public/{shadow-claw-git-CqOO97Re.js → shadow-claw-git-BsHEvLrb.js} +2 -2
- package/dist/public/{shadow-claw-integrations-CRGL78Fy.js → shadow-claw-integrations-B0vbcOqg.js} +1 -1
- package/dist/public/{shadow-claw-llm-DoGxEHQL.js → shadow-claw-llm-FNNamrc_.js} +2 -2
- package/dist/public/{shadow-claw-mcp-remote-DyGnK4S_.js → shadow-claw-mcp-remote-7mDgniQu.js} +1 -1
- package/dist/public/{shadow-claw-networking-DJeCdb7e.js → shadow-claw-networking-CGsetaLp.js} +1 -1
- package/dist/public/{shadow-claw-notifications-hSKJeMXb.js → shadow-claw-notifications-pnwRcR-4.js} +1 -1
- package/dist/public/{shadow-claw-page-header-DA-FG08G.js → shadow-claw-page-header-BUy15Poz.js} +1 -1
- package/dist/public/{shadow-claw-pages-DTS98Zbi.js → shadow-claw-pages-ILAjGWNk.js} +1 -1
- package/dist/public/{shadow-claw-settings-5w0ce8SP.js → shadow-claw-settings-Bx5IgVqN.js} +3 -3
- package/dist/public/{shadow-claw-storage-DqlVt27X.js → shadow-claw-storage-PAtNykaF.js} +1 -1
- package/dist/public/{shadow-claw-task-server-ByZwKI6S.js → shadow-claw-task-server-Cbbi_2OO.js} +1 -1
- package/dist/public/{shadow-claw-tasks-Dc4G4zBu.js → shadow-claw-tasks-B-jKYWZJ.js} +1 -1
- package/dist/public/{shadow-claw-terminal-DvusP7wg.js → shadow-claw-terminal-BRejND-Z.js} +1 -1
- package/dist/public/{shadow-claw-tools-BEsid8q-.js → shadow-claw-tools-DNQe3oa-.js} +1 -1
- package/dist/public/{shadow-claw-webvm-BWlIeK78.js → shadow-claw-webvm-BFuwRifU.js} +1 -1
- package/dist/public/{syncWebMcpRegistration-CqVCB6m8.js → syncWebMcpRegistration-FxKAPwaz.js} +1 -1
- package/dist/public/theme-init.js +1 -1
- package/dist/public/{tools-Cp1gequ8.js → tools-BwQKGsro.js} +1 -1
- package/dist/public/transformers-js.worker.js +1 -1
- package/dist/public/webmcp-C28PAlfy.js +1 -0
- package/dist/server.js +1 -1
- package/package.json +3 -3
- package/src/core/utils/initControlPlane.test.ts +122 -1
- package/src/core/utils/initControlPlane.ts +12 -8
- package/src/subsystems/mcp/webmcp.test.ts +253 -1
- package/src/subsystems/mcp/webmcp.ts +147 -4
- package/src/subsystems/providers/model-registry.test.ts +139 -0
- package/src/subsystems/providers/model-registry.ts +54 -2
- package/src/subsystems/providers/providers.test.ts +329 -0
- package/src/subsystems/providers/providers.ts +135 -11
- package/dist/lib/config-DjZ9QWc4.js.map +0 -1
- package/dist/lib/webmcp-BC8_WafM.js +0 -1710
- package/dist/lib/webmcp-BC8_WafM.js.map +0 -1
- package/dist/public/config-Bnwx4EfS.js +0 -1
- package/dist/public/webmcp-DBONjQWd.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memoryStorage-D3FBwO9T.js","names":[],"sources":["../../src/storage/memoryStorage.ts"],"sourcesContent":["import { OPFS_ROOT } from \"../config/config.js\";\n\nfunction createDOMException(message: string, name: string): DOMException {\n if (typeof DOMException !== \"undefined\") {\n try {\n return new DOMException(message, name);\n } catch {\n // Fall back if constructor fails\n }\n }\n\n const err = new Error(message) as any;\n err.name = name;\n\n return err;\n}\n\nfunction makeAsyncIterator<T>(\n gen: () => AsyncGenerator<T>,\n): FileSystemDirectoryHandleAsyncIterator<T> {\n const iterator = gen();\n (iterator as any)[Symbol.asyncDispose ?? Symbol.for(\"Symbol.asyncDispose\")] =\n async () => {};\n\n return iterator as any;\n}\n\n/**\n * In-memory implementation of FileSystemSyncAccessHandle.\n */\nexport class MemorySyncAccessHandle {\n private _file: MemoryFileHandle;\n private _closed = false;\n\n constructor(file: MemoryFileHandle) {\n this._file = file;\n }\n\n close(): void {\n this._closed = true;\n }\n\n flush(): void {\n // No-op for in-memory storage\n }\n\n getSize(): number {\n if (this._closed) {\n throw createDOMException(\n \"SyncAccessHandle is closed\",\n \"InvalidStateError\",\n );\n }\n\n return this._file.getRawData().byteLength;\n }\n\n read(buffer: ArrayBufferView, options?: { at?: number }): number {\n if (this._closed) {\n throw createDOMException(\n \"SyncAccessHandle is closed\",\n \"InvalidStateError\",\n );\n }\n const data = this._file.getRawData();\n const at = options?.at ?? 0;\n if (at >= data.byteLength) {\n return 0;\n }\n const target = new Uint8Array(\n buffer.buffer,\n buffer.byteOffset,\n buffer.byteLength,\n );\n const source = data.subarray(at, at + target.byteLength);\n target.set(source);\n\n return source.byteLength;\n }\n\n write(buffer: ArrayBufferView, options?: { at?: number }): number {\n if (this._closed) {\n throw createDOMException(\n \"SyncAccessHandle is closed\",\n \"InvalidStateError\",\n );\n }\n const src = new Uint8Array(\n buffer.buffer,\n buffer.byteOffset,\n buffer.byteLength,\n );\n const at = options?.at ?? 0;\n const current = this._file.getRawData();\n const needed = at + src.byteLength;\n let newBuf: Uint8Array;\n if (needed > current.byteLength) {\n newBuf = new Uint8Array(needed);\n newBuf.set(current);\n } else {\n newBuf = new Uint8Array(current);\n }\n newBuf.set(src, at);\n this._file.setRawData(newBuf);\n\n return src.byteLength;\n }\n\n truncate(newSize: number): void {\n if (this._closed) {\n throw createDOMException(\n \"SyncAccessHandle is closed\",\n \"InvalidStateError\",\n );\n }\n const current = this._file.getRawData();\n const newBuf = new Uint8Array(newSize);\n newBuf.set(current.subarray(0, Math.min(current.byteLength, newSize)));\n this._file.setRawData(newBuf);\n }\n}\n\n/**\n * In-memory implementation of FileSystemWritableFileStream.\n */\nexport class MemoryWritableStream {\n private _file: MemoryFileHandle;\n private _buffer: Uint8Array;\n private _position = 0;\n private _length = 0;\n private _closed = false;\n\n constructor(file: MemoryFileHandle, keepExistingData = false) {\n this._file = file;\n const existing = file.getRawData();\n if (keepExistingData) {\n this._buffer = new Uint8Array(existing);\n this._length = existing.byteLength;\n } else {\n this._buffer = new Uint8Array(1024);\n this._length = 0;\n }\n }\n\n async write(chunk: any): Promise<void> {\n if (this._closed) {\n throw createDOMException(\"WritableStream is closed\", \"InvalidStateError\");\n }\n\n let bytes: Uint8Array;\n if (typeof chunk === \"string\") {\n bytes = new TextEncoder().encode(chunk);\n } else if (chunk instanceof Uint8Array) {\n bytes = chunk;\n } else if (chunk instanceof ArrayBuffer) {\n bytes = new Uint8Array(chunk);\n } else if (typeof Blob !== \"undefined\" && chunk instanceof Blob) {\n if (typeof chunk.arrayBuffer === \"function\") {\n bytes = new Uint8Array(await chunk.arrayBuffer());\n } else if (typeof (chunk as any).text === \"function\") {\n bytes = new TextEncoder().encode(await (chunk as any).text());\n } else if (typeof FileReader !== \"undefined\") {\n bytes = await new Promise<Uint8Array>((resolve) => {\n const reader = new FileReader();\n reader.onload = () => {\n resolve(new Uint8Array(reader.result as ArrayBuffer));\n };\n reader.onerror = () => resolve(new Uint8Array(0));\n reader.readAsArrayBuffer(chunk);\n });\n } else {\n bytes = new Uint8Array(0);\n }\n } else if (chunk && typeof chunk === \"object\" && \"type\" in chunk) {\n if (chunk.type === \"write\") {\n if (typeof chunk.position === \"number\") {\n this._position = chunk.position;\n }\n const data = chunk.data;\n if (typeof data === \"string\") {\n bytes = new TextEncoder().encode(data);\n } else if (data instanceof Uint8Array) {\n bytes = data;\n } else if (data instanceof ArrayBuffer) {\n bytes = new Uint8Array(data);\n } else if (typeof Blob !== \"undefined\" && data instanceof Blob) {\n if (typeof data.arrayBuffer === \"function\") {\n bytes = new Uint8Array(await data.arrayBuffer());\n } else {\n bytes = new Uint8Array(0);\n }\n } else {\n bytes = new Uint8Array(0);\n }\n } else if (chunk.type === \"seek\") {\n this._position = chunk.position ?? 0;\n\n return;\n } else if (chunk.type === \"truncate\") {\n this._truncate(chunk.size ?? 0);\n\n return;\n } else {\n bytes = new Uint8Array(0);\n }\n } else {\n bytes = new Uint8Array(0);\n }\n\n const needed = this._position + bytes.length;\n if (needed > this._buffer.length) {\n const newCapacity = Math.max(this._buffer.length * 2, needed, 1024);\n const newBuf = new Uint8Array(newCapacity);\n newBuf.set(this._buffer);\n this._buffer = newBuf;\n }\n\n this._buffer.set(bytes, this._position);\n this._position += bytes.length;\n if (this._position > this._length) {\n this._length = this._position;\n }\n }\n\n private _truncate(newSize: number): void {\n if (newSize < this._length) {\n this._length = newSize;\n } else if (newSize > this._length) {\n if (newSize > this._buffer.length) {\n const newBuf = new Uint8Array(newSize);\n newBuf.set(this._buffer);\n this._buffer = newBuf;\n }\n this._length = newSize;\n }\n if (this._position > newSize) {\n this._position = newSize;\n }\n }\n\n async seek(position: number): Promise<void> {\n if (this._closed) {\n throw createDOMException(\"WritableStream is closed\", \"InvalidStateError\");\n }\n this._position = position;\n }\n\n async truncate(size: number): Promise<void> {\n if (this._closed) {\n throw createDOMException(\"WritableStream is closed\", \"InvalidStateError\");\n }\n this._truncate(size);\n }\n\n async close(): Promise<void> {\n if (this._closed) {\n return;\n }\n this._closed = true;\n const finalData = this._buffer.slice(0, this._length);\n this._file.setRawData(finalData);\n }\n\n async abort(): Promise<void> {\n this._closed = true;\n }\n}\n\n/**\n * In-memory implementation of FileSystemFileHandle.\n */\nexport class MemoryFileHandle implements FileSystemFileHandle {\n readonly kind = \"file\" as const;\n readonly name: string;\n private _data: Uint8Array;\n private _lastModified: number;\n\n constructor(name: string, initialData: Uint8Array = new Uint8Array()) {\n this.name = name;\n this._data = initialData;\n this._lastModified = Date.now();\n }\n\n getRawData(): Uint8Array {\n return this._data;\n }\n\n setRawData(data: Uint8Array): void {\n this._data = data;\n this._lastModified = Date.now();\n }\n\n private _getArrayBuffer(): ArrayBuffer {\n const ab = new ArrayBuffer(this._data.byteLength);\n new Uint8Array(ab).set(this._data);\n\n return ab;\n }\n\n async getFile(): Promise<File> {\n const arrayBuffer = this._getArrayBuffer();\n const data = this._data;\n const name = this.name;\n const lastModified = this._lastModified;\n\n const fileObj = {\n name,\n size: data.byteLength,\n type: \"\",\n lastModified,\n async text(): Promise<string> {\n return new TextDecoder().decode(data);\n },\n async arrayBuffer(): Promise<ArrayBuffer> {\n return arrayBuffer;\n },\n slice(start = 0, end = data.byteLength): Blob {\n return new Blob([arrayBuffer.slice(start, end)]);\n },\n };\n\n if (typeof File !== \"undefined\") {\n try {\n const file = new File([arrayBuffer], this.name, {\n lastModified: this._lastModified,\n });\n if (typeof (file as any).text !== \"function\") {\n (file as any).text = fileObj.text;\n }\n if (typeof (file as any).arrayBuffer !== \"function\") {\n (file as any).arrayBuffer = fileObj.arrayBuffer;\n }\n\n return file;\n } catch {\n // Continue to fallback\n }\n }\n\n return fileObj as any;\n }\n\n async createWritable(\n options?: FileSystemCreateWritableOptions,\n ): Promise<FileSystemWritableFileStream> {\n return new MemoryWritableStream(\n this,\n options?.keepExistingData ?? false,\n ) as any;\n }\n\n async createSyncAccessHandle(): Promise<any> {\n return new MemorySyncAccessHandle(this);\n }\n\n async isSameEntry(other: FileSystemHandle): Promise<boolean> {\n return this === (other as any);\n }\n\n async queryPermission(): Promise<PermissionState> {\n return \"granted\";\n }\n\n async requestPermission(): Promise<PermissionState> {\n return \"granted\";\n }\n}\n\n/**\n * In-memory implementation of FileSystemDirectoryHandle.\n */\nexport class MemoryDirectoryHandle implements FileSystemDirectoryHandle {\n readonly kind = \"directory\" as const;\n readonly name: string;\n private _entries = new Map<\n string,\n MemoryDirectoryHandle | MemoryFileHandle\n >();\n\n constructor(name: string) {\n this.name = name;\n }\n\n _setEntry(\n name: string,\n handle: MemoryDirectoryHandle | MemoryFileHandle,\n ): void {\n this._entries.set(name, handle);\n }\n\n async getDirectoryHandle(\n name: string,\n options?: FileSystemGetDirectoryOptions,\n ): Promise<FileSystemDirectoryHandle> {\n if (name === \".\" || name === \"\") {\n return this;\n }\n if (name === \"..\") {\n throw createDOMException(\n \"Cannot navigate to parent directory with '..'\",\n \"SecurityError\",\n );\n }\n\n const existing = this._entries.get(name);\n if (existing) {\n if (existing.kind === \"directory\") {\n return existing as MemoryDirectoryHandle;\n }\n throw createDOMException(\n `\"${name}\" is a file, not a directory`,\n \"TypeMismatchError\",\n );\n }\n\n if (options?.create) {\n const newDir = new MemoryDirectoryHandle(name);\n this._entries.set(name, newDir);\n\n return newDir;\n }\n\n throw createDOMException(\n `A requested file or directory could not be found at \"${name}\"`,\n \"NotFoundError\",\n );\n }\n\n async getFileHandle(\n name: string,\n options?: FileSystemGetFileOptions,\n ): Promise<FileSystemFileHandle> {\n if (name === \".\" || name === \"..\" || name === \"\") {\n throw createDOMException(\n `Invalid file name \"${name}\"`,\n \"TypeMismatchError\",\n );\n }\n\n const existing = this._entries.get(name);\n if (existing) {\n if (existing.kind === \"file\") {\n return existing as MemoryFileHandle;\n }\n throw createDOMException(\n `\"${name}\" is a directory, not a file`,\n \"TypeMismatchError\",\n );\n }\n\n if (options?.create) {\n const newFile = new MemoryFileHandle(name);\n this._entries.set(name, newFile);\n\n return newFile;\n }\n\n throw createDOMException(\n `A requested file could not be found at \"${name}\"`,\n \"NotFoundError\",\n );\n }\n\n async removeEntry(\n name: string,\n options?: FileSystemRemoveOptions,\n ): Promise<void> {\n const existing = this._entries.get(name);\n if (!existing) {\n throw createDOMException(`Entry \"${name}\" not found`, \"NotFoundError\");\n }\n\n if (\n existing.kind === \"directory\" &&\n (existing as MemoryDirectoryHandle)._entries.size > 0 &&\n !options?.recursive\n ) {\n throw createDOMException(\n `Directory \"${name}\" is not empty`,\n \"InvalidModificationError\",\n );\n }\n\n this._entries.delete(name);\n }\n\n async resolve(\n possibleDescendant: FileSystemHandle,\n ): Promise<string[] | null> {\n if (this === (possibleDescendant as any)) {\n return [];\n }\n\n for (const [name, handle] of this._entries.entries()) {\n if (handle === (possibleDescendant as any)) {\n return [name];\n }\n if (handle.kind === \"directory\") {\n const childPath = await (handle as MemoryDirectoryHandle).resolve(\n possibleDescendant,\n );\n if (childPath) {\n return [name, ...childPath];\n }\n }\n }\n\n return null;\n }\n\n entries(): FileSystemDirectoryHandleAsyncIterator<\n [string, FileSystemDirectoryHandle | FileSystemFileHandle]\n > {\n const self = this;\n\n return makeAsyncIterator(async function* () {\n for (const [name, handle] of self._entries.entries()) {\n yield [name, handle as any];\n }\n });\n }\n\n values(): FileSystemDirectoryHandleAsyncIterator<\n FileSystemDirectoryHandle | FileSystemFileHandle\n > {\n const self = this;\n\n return makeAsyncIterator(async function* () {\n for (const handle of self._entries.values()) {\n yield handle as any;\n }\n });\n }\n\n keys(): FileSystemDirectoryHandleAsyncIterator<string> {\n const self = this;\n\n return makeAsyncIterator(async function* () {\n for (const name of self._entries.keys()) {\n yield name;\n }\n });\n }\n\n [Symbol.asyncIterator](): FileSystemDirectoryHandleAsyncIterator<\n [string, FileSystemDirectoryHandle | FileSystemFileHandle]\n > {\n return this.entries();\n }\n\n async isSameEntry(other: FileSystemHandle): Promise<boolean> {\n return this === (other as any);\n }\n\n async queryPermission(): Promise<PermissionState> {\n return \"granted\";\n }\n\n async requestPermission(): Promise<PermissionState> {\n return \"granted\";\n }\n}\n\nlet memoryOpfsRoot: MemoryDirectoryHandle | null = null;\n\n/**\n * Get or create the singleton in-memory root for OPFS fallback.\n */\nexport function getMemoryOpfsRoot(): FileSystemDirectoryHandle {\n if (!memoryOpfsRoot) {\n const root = new MemoryDirectoryHandle(\"memory-root\");\n const opfsChild = new MemoryDirectoryHandle(OPFS_ROOT);\n root._setEntry(OPFS_ROOT, opfsChild);\n memoryOpfsRoot = opfsChild;\n }\n\n return memoryOpfsRoot;\n}\n\n/**\n * Check if the in-memory storage fallback is currently active.\n */\nexport function isMemoryStorageFallbackActive(): boolean {\n return memoryOpfsRoot !== null;\n}\n\n/**\n * Clear the in-memory OPFS root (primarily for tests).\n */\nexport function resetMemoryOpfsRoot(): void {\n memoryOpfsRoot = null;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"memoryStorage-DcFWrn_y.js","names":[],"sources":["../../src/storage/memoryStorage.ts"],"sourcesContent":["import { OPFS_ROOT } from \"../config/config.js\";\n\nfunction createDOMException(message: string, name: string): DOMException {\n if (typeof DOMException !== \"undefined\") {\n try {\n return new DOMException(message, name);\n } catch {\n // Fall back if constructor fails\n }\n }\n\n const err = new Error(message) as any;\n err.name = name;\n\n return err;\n}\n\nfunction makeAsyncIterator<T>(\n gen: () => AsyncGenerator<T>,\n): FileSystemDirectoryHandleAsyncIterator<T> {\n const iterator = gen();\n (iterator as any)[Symbol.asyncDispose ?? Symbol.for(\"Symbol.asyncDispose\")] =\n async () => {};\n\n return iterator as any;\n}\n\n/**\n * In-memory implementation of FileSystemSyncAccessHandle.\n */\nexport class MemorySyncAccessHandle {\n private _file: MemoryFileHandle;\n private _closed = false;\n\n constructor(file: MemoryFileHandle) {\n this._file = file;\n }\n\n close(): void {\n this._closed = true;\n }\n\n flush(): void {\n // No-op for in-memory storage\n }\n\n getSize(): number {\n if (this._closed) {\n throw createDOMException(\n \"SyncAccessHandle is closed\",\n \"InvalidStateError\",\n );\n }\n\n return this._file.getRawData().byteLength;\n }\n\n read(buffer: ArrayBufferView, options?: { at?: number }): number {\n if (this._closed) {\n throw createDOMException(\n \"SyncAccessHandle is closed\",\n \"InvalidStateError\",\n );\n }\n const data = this._file.getRawData();\n const at = options?.at ?? 0;\n if (at >= data.byteLength) {\n return 0;\n }\n const target = new Uint8Array(\n buffer.buffer,\n buffer.byteOffset,\n buffer.byteLength,\n );\n const source = data.subarray(at, at + target.byteLength);\n target.set(source);\n\n return source.byteLength;\n }\n\n write(buffer: ArrayBufferView, options?: { at?: number }): number {\n if (this._closed) {\n throw createDOMException(\n \"SyncAccessHandle is closed\",\n \"InvalidStateError\",\n );\n }\n const src = new Uint8Array(\n buffer.buffer,\n buffer.byteOffset,\n buffer.byteLength,\n );\n const at = options?.at ?? 0;\n const current = this._file.getRawData();\n const needed = at + src.byteLength;\n let newBuf: Uint8Array;\n if (needed > current.byteLength) {\n newBuf = new Uint8Array(needed);\n newBuf.set(current);\n } else {\n newBuf = new Uint8Array(current);\n }\n newBuf.set(src, at);\n this._file.setRawData(newBuf);\n\n return src.byteLength;\n }\n\n truncate(newSize: number): void {\n if (this._closed) {\n throw createDOMException(\n \"SyncAccessHandle is closed\",\n \"InvalidStateError\",\n );\n }\n const current = this._file.getRawData();\n const newBuf = new Uint8Array(newSize);\n newBuf.set(current.subarray(0, Math.min(current.byteLength, newSize)));\n this._file.setRawData(newBuf);\n }\n}\n\n/**\n * In-memory implementation of FileSystemWritableFileStream.\n */\nexport class MemoryWritableStream {\n private _file: MemoryFileHandle;\n private _buffer: Uint8Array;\n private _position = 0;\n private _length = 0;\n private _closed = false;\n\n constructor(file: MemoryFileHandle, keepExistingData = false) {\n this._file = file;\n const existing = file.getRawData();\n if (keepExistingData) {\n this._buffer = new Uint8Array(existing);\n this._length = existing.byteLength;\n } else {\n this._buffer = new Uint8Array(1024);\n this._length = 0;\n }\n }\n\n async write(chunk: any): Promise<void> {\n if (this._closed) {\n throw createDOMException(\"WritableStream is closed\", \"InvalidStateError\");\n }\n\n let bytes: Uint8Array;\n if (typeof chunk === \"string\") {\n bytes = new TextEncoder().encode(chunk);\n } else if (chunk instanceof Uint8Array) {\n bytes = chunk;\n } else if (chunk instanceof ArrayBuffer) {\n bytes = new Uint8Array(chunk);\n } else if (typeof Blob !== \"undefined\" && chunk instanceof Blob) {\n if (typeof chunk.arrayBuffer === \"function\") {\n bytes = new Uint8Array(await chunk.arrayBuffer());\n } else if (typeof (chunk as any).text === \"function\") {\n bytes = new TextEncoder().encode(await (chunk as any).text());\n } else if (typeof FileReader !== \"undefined\") {\n bytes = await new Promise<Uint8Array>((resolve) => {\n const reader = new FileReader();\n reader.onload = () => {\n resolve(new Uint8Array(reader.result as ArrayBuffer));\n };\n reader.onerror = () => resolve(new Uint8Array(0));\n reader.readAsArrayBuffer(chunk);\n });\n } else {\n bytes = new Uint8Array(0);\n }\n } else if (chunk && typeof chunk === \"object\" && \"type\" in chunk) {\n if (chunk.type === \"write\") {\n if (typeof chunk.position === \"number\") {\n this._position = chunk.position;\n }\n const data = chunk.data;\n if (typeof data === \"string\") {\n bytes = new TextEncoder().encode(data);\n } else if (data instanceof Uint8Array) {\n bytes = data;\n } else if (data instanceof ArrayBuffer) {\n bytes = new Uint8Array(data);\n } else if (typeof Blob !== \"undefined\" && data instanceof Blob) {\n if (typeof data.arrayBuffer === \"function\") {\n bytes = new Uint8Array(await data.arrayBuffer());\n } else {\n bytes = new Uint8Array(0);\n }\n } else {\n bytes = new Uint8Array(0);\n }\n } else if (chunk.type === \"seek\") {\n this._position = chunk.position ?? 0;\n\n return;\n } else if (chunk.type === \"truncate\") {\n this._truncate(chunk.size ?? 0);\n\n return;\n } else {\n bytes = new Uint8Array(0);\n }\n } else {\n bytes = new Uint8Array(0);\n }\n\n const needed = this._position + bytes.length;\n if (needed > this._buffer.length) {\n const newCapacity = Math.max(this._buffer.length * 2, needed, 1024);\n const newBuf = new Uint8Array(newCapacity);\n newBuf.set(this._buffer);\n this._buffer = newBuf;\n }\n\n this._buffer.set(bytes, this._position);\n this._position += bytes.length;\n if (this._position > this._length) {\n this._length = this._position;\n }\n }\n\n private _truncate(newSize: number): void {\n if (newSize < this._length) {\n this._length = newSize;\n } else if (newSize > this._length) {\n if (newSize > this._buffer.length) {\n const newBuf = new Uint8Array(newSize);\n newBuf.set(this._buffer);\n this._buffer = newBuf;\n }\n this._length = newSize;\n }\n if (this._position > newSize) {\n this._position = newSize;\n }\n }\n\n async seek(position: number): Promise<void> {\n if (this._closed) {\n throw createDOMException(\"WritableStream is closed\", \"InvalidStateError\");\n }\n this._position = position;\n }\n\n async truncate(size: number): Promise<void> {\n if (this._closed) {\n throw createDOMException(\"WritableStream is closed\", \"InvalidStateError\");\n }\n this._truncate(size);\n }\n\n async close(): Promise<void> {\n if (this._closed) {\n return;\n }\n this._closed = true;\n const finalData = this._buffer.slice(0, this._length);\n this._file.setRawData(finalData);\n }\n\n async abort(): Promise<void> {\n this._closed = true;\n }\n}\n\n/**\n * In-memory implementation of FileSystemFileHandle.\n */\nexport class MemoryFileHandle implements FileSystemFileHandle {\n readonly kind = \"file\" as const;\n readonly name: string;\n private _data: Uint8Array;\n private _lastModified: number;\n\n constructor(name: string, initialData: Uint8Array = new Uint8Array()) {\n this.name = name;\n this._data = initialData;\n this._lastModified = Date.now();\n }\n\n getRawData(): Uint8Array {\n return this._data;\n }\n\n setRawData(data: Uint8Array): void {\n this._data = data;\n this._lastModified = Date.now();\n }\n\n private _getArrayBuffer(): ArrayBuffer {\n const ab = new ArrayBuffer(this._data.byteLength);\n new Uint8Array(ab).set(this._data);\n\n return ab;\n }\n\n async getFile(): Promise<File> {\n const arrayBuffer = this._getArrayBuffer();\n const data = this._data;\n const name = this.name;\n const lastModified = this._lastModified;\n\n const fileObj = {\n name,\n size: data.byteLength,\n type: \"\",\n lastModified,\n async text(): Promise<string> {\n return new TextDecoder().decode(data);\n },\n async arrayBuffer(): Promise<ArrayBuffer> {\n return arrayBuffer;\n },\n slice(start = 0, end = data.byteLength): Blob {\n return new Blob([arrayBuffer.slice(start, end)]);\n },\n };\n\n if (typeof File !== \"undefined\") {\n try {\n const file = new File([arrayBuffer], this.name, {\n lastModified: this._lastModified,\n });\n if (typeof (file as any).text !== \"function\") {\n (file as any).text = fileObj.text;\n }\n if (typeof (file as any).arrayBuffer !== \"function\") {\n (file as any).arrayBuffer = fileObj.arrayBuffer;\n }\n\n return file;\n } catch {\n // Continue to fallback\n }\n }\n\n return fileObj as any;\n }\n\n async createWritable(\n options?: FileSystemCreateWritableOptions,\n ): Promise<FileSystemWritableFileStream> {\n return new MemoryWritableStream(\n this,\n options?.keepExistingData ?? false,\n ) as any;\n }\n\n async createSyncAccessHandle(): Promise<any> {\n return new MemorySyncAccessHandle(this);\n }\n\n async isSameEntry(other: FileSystemHandle): Promise<boolean> {\n return this === (other as any);\n }\n\n async queryPermission(): Promise<PermissionState> {\n return \"granted\";\n }\n\n async requestPermission(): Promise<PermissionState> {\n return \"granted\";\n }\n}\n\n/**\n * In-memory implementation of FileSystemDirectoryHandle.\n */\nexport class MemoryDirectoryHandle implements FileSystemDirectoryHandle {\n readonly kind = \"directory\" as const;\n readonly name: string;\n private _entries = new Map<\n string,\n MemoryDirectoryHandle | MemoryFileHandle\n >();\n\n constructor(name: string) {\n this.name = name;\n }\n\n _setEntry(\n name: string,\n handle: MemoryDirectoryHandle | MemoryFileHandle,\n ): void {\n this._entries.set(name, handle);\n }\n\n async getDirectoryHandle(\n name: string,\n options?: FileSystemGetDirectoryOptions,\n ): Promise<FileSystemDirectoryHandle> {\n if (name === \".\" || name === \"\") {\n return this;\n }\n if (name === \"..\") {\n throw createDOMException(\n \"Cannot navigate to parent directory with '..'\",\n \"SecurityError\",\n );\n }\n\n const existing = this._entries.get(name);\n if (existing) {\n if (existing.kind === \"directory\") {\n return existing as MemoryDirectoryHandle;\n }\n throw createDOMException(\n `\"${name}\" is a file, not a directory`,\n \"TypeMismatchError\",\n );\n }\n\n if (options?.create) {\n const newDir = new MemoryDirectoryHandle(name);\n this._entries.set(name, newDir);\n\n return newDir;\n }\n\n throw createDOMException(\n `A requested file or directory could not be found at \"${name}\"`,\n \"NotFoundError\",\n );\n }\n\n async getFileHandle(\n name: string,\n options?: FileSystemGetFileOptions,\n ): Promise<FileSystemFileHandle> {\n if (name === \".\" || name === \"..\" || name === \"\") {\n throw createDOMException(\n `Invalid file name \"${name}\"`,\n \"TypeMismatchError\",\n );\n }\n\n const existing = this._entries.get(name);\n if (existing) {\n if (existing.kind === \"file\") {\n return existing as MemoryFileHandle;\n }\n throw createDOMException(\n `\"${name}\" is a directory, not a file`,\n \"TypeMismatchError\",\n );\n }\n\n if (options?.create) {\n const newFile = new MemoryFileHandle(name);\n this._entries.set(name, newFile);\n\n return newFile;\n }\n\n throw createDOMException(\n `A requested file could not be found at \"${name}\"`,\n \"NotFoundError\",\n );\n }\n\n async removeEntry(\n name: string,\n options?: FileSystemRemoveOptions,\n ): Promise<void> {\n const existing = this._entries.get(name);\n if (!existing) {\n throw createDOMException(`Entry \"${name}\" not found`, \"NotFoundError\");\n }\n\n if (\n existing.kind === \"directory\" &&\n (existing as MemoryDirectoryHandle)._entries.size > 0 &&\n !options?.recursive\n ) {\n throw createDOMException(\n `Directory \"${name}\" is not empty`,\n \"InvalidModificationError\",\n );\n }\n\n this._entries.delete(name);\n }\n\n async resolve(\n possibleDescendant: FileSystemHandle,\n ): Promise<string[] | null> {\n if (this === (possibleDescendant as any)) {\n return [];\n }\n\n for (const [name, handle] of this._entries.entries()) {\n if (handle === (possibleDescendant as any)) {\n return [name];\n }\n if (handle.kind === \"directory\") {\n const childPath = await (handle as MemoryDirectoryHandle).resolve(\n possibleDescendant,\n );\n if (childPath) {\n return [name, ...childPath];\n }\n }\n }\n\n return null;\n }\n\n entries(): FileSystemDirectoryHandleAsyncIterator<\n [string, FileSystemDirectoryHandle | FileSystemFileHandle]\n > {\n const self = this;\n\n return makeAsyncIterator(async function* () {\n for (const [name, handle] of self._entries.entries()) {\n yield [name, handle as any];\n }\n });\n }\n\n values(): FileSystemDirectoryHandleAsyncIterator<\n FileSystemDirectoryHandle | FileSystemFileHandle\n > {\n const self = this;\n\n return makeAsyncIterator(async function* () {\n for (const handle of self._entries.values()) {\n yield handle as any;\n }\n });\n }\n\n keys(): FileSystemDirectoryHandleAsyncIterator<string> {\n const self = this;\n\n return makeAsyncIterator(async function* () {\n for (const name of self._entries.keys()) {\n yield name;\n }\n });\n }\n\n [Symbol.asyncIterator](): FileSystemDirectoryHandleAsyncIterator<\n [string, FileSystemDirectoryHandle | FileSystemFileHandle]\n > {\n return this.entries();\n }\n\n async isSameEntry(other: FileSystemHandle): Promise<boolean> {\n return this === (other as any);\n }\n\n async queryPermission(): Promise<PermissionState> {\n return \"granted\";\n }\n\n async requestPermission(): Promise<PermissionState> {\n return \"granted\";\n }\n}\n\nlet memoryOpfsRoot: MemoryDirectoryHandle | null = null;\n\n/**\n * Get or create the singleton in-memory root for OPFS fallback.\n */\nexport function getMemoryOpfsRoot(): FileSystemDirectoryHandle {\n if (!memoryOpfsRoot) {\n const root = new MemoryDirectoryHandle(\"memory-root\");\n const opfsChild = new MemoryDirectoryHandle(OPFS_ROOT);\n root._setEntry(OPFS_ROOT, opfsChild);\n memoryOpfsRoot = opfsChild;\n }\n\n return memoryOpfsRoot;\n}\n\n/**\n * Check if the in-memory storage fallback is currently active.\n */\nexport function isMemoryStorageFallbackActive(): boolean {\n return memoryOpfsRoot !== null;\n}\n\n/**\n * Clear the in-memory OPFS root (primarily for tests).\n */\nexport function resetMemoryOpfsRoot(): void {\n memoryOpfsRoot = null;\n}\n"],"mappings":"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"}
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
import { i as __toESM, n as __exportAll, r as __require, t as __commonJSMin } from "./rolldown-runtime-DZ8SGSJo.js";
|
|
2
2
|
import { n as getDb, t as txPromise } from "./txPromise-CuGh-TGK.js";
|
|
3
3
|
import { t as Signal } from "./dist-Bxg3C_zy.js";
|
|
4
|
-
import { a as getStorageStatus, i as getStorageRoot, o as invalidateStorageRoot, r as getOpfsRootDirName, s as isStaleHandleError, t as getGroupDir } from "./getGroupDir-
|
|
5
|
-
import { C as PROVIDERS, F as getProvider, I as getProviderApiKeyConfigKey, O as buildTriggerPattern, P as getModelMaxTokens, R as modelRegistry, c as DEFAULT_PROMPT_API_FALLBACK_MODEL, d as DEFAULT_TASK_SERVER_URL, m as FETCH_MAX_RESPONSE, n as BASH_MAX_TIMEOUT_SEC, o as DEFAULT_GROUP_ID, p as DEFAULT_VM_NETWORK_RELAY_URL, r as CONFIG_KEYS, t as ASSISTANT_NAME, u as DEFAULT_SUBAGENT_WORKSPACE_MODE, y as LLAMAFILE_PROXY_URL } from "./config-
|
|
4
|
+
import { a as getStorageStatus, i as getStorageRoot, o as invalidateStorageRoot, r as getOpfsRootDirName, s as isStaleHandleError, t as getGroupDir } from "./getGroupDir-BxKMYPPm.js";
|
|
5
|
+
import { C as PROVIDERS, F as getProvider, I as getProviderApiKeyConfigKey, O as buildTriggerPattern, P as getModelMaxTokens, R as modelRegistry, c as DEFAULT_PROMPT_API_FALLBACK_MODEL, d as DEFAULT_TASK_SERVER_URL, m as FETCH_MAX_RESPONSE, n as BASH_MAX_TIMEOUT_SEC, o as DEFAULT_GROUP_ID, p as DEFAULT_VM_NETWORK_RELAY_URL, r as CONFIG_KEYS, t as ASSISTANT_NAME, u as DEFAULT_SUBAGENT_WORKSPACE_MODE, y as LLAMAFILE_PROXY_URL } from "./config-BcFbkaQv.js";
|
|
6
6
|
import { n as applyBasePath } from "./app-routes-BAEMLu9g.js";
|
|
7
7
|
import { t as getConfig } from "./getConfig-BxxXMyuM.js";
|
|
8
8
|
import { t as parsePath } from "./parsePath-DwC_YZjw.js";
|
|
9
|
-
import { a as groupFileExists, c as writeOpfsPathViaWorker, d as DEFAULT_BUILTIN_PROFILE, f as readGroupFile, l as findDeclarativeTool, o as writeGroupFile, r as parseSkill, s as writeFileHandle, t as toolsStore } from "./tools-
|
|
10
|
-
import { t as readGroupFileBytes } from "./readGroupFileBytes-
|
|
9
|
+
import { a as groupFileExists, c as writeOpfsPathViaWorker, d as DEFAULT_BUILTIN_PROFILE, f as readGroupFile, l as findDeclarativeTool, o as writeGroupFile, r as parseSkill, s as writeFileHandle, t as toolsStore } from "./tools-Bb2ujM2E.js";
|
|
10
|
+
import { t as readGroupFileBytes } from "./readGroupFileBytes-7C8G-yps.js";
|
|
11
11
|
import { t as setConfig } from "./setConfig-BFED5CXn.js";
|
|
12
12
|
import { ulid } from "./utils/ulid.js";
|
|
13
13
|
import { i as BASIC_CATALOG_REFERENCE, r as A2UI_BASIC_CATALOG_ID, t as TOOL_DEFINITIONS } from "./tools-DKzPWc0q.js";
|
|
14
14
|
import "./tools-C3Kft940.js";
|
|
15
15
|
import { t as require_browser } from "./browser-FvTfy_Ym.js";
|
|
16
|
-
import { g as loadCustomElementSecurityFromDb, l as configureCustomElementSecurity, m as installCustomElementsRegistryGuard, p as installCustomElementDomGuard } from "./utils-
|
|
16
|
+
import { g as loadCustomElementSecurityFromDb, l as configureCustomElementSecurity, m as installCustomElementsRegistryGuard, p as installCustomElementDomGuard } from "./utils-mpsYPfS7.js";
|
|
17
17
|
import { t as require_buffer } from "./buffer-BEXn271X.js";
|
|
18
18
|
import { n as decryptValue, r as encryptValue } from "./crypto-BPECyFrG.js";
|
|
19
|
-
import { c as getRemoteMcpConnection, d as buildAuthHeaders, i as listRemoteMcpTools, l as listRemoteMcpConnections, m as resolveServiceCredentials, n as McpReauthRequiredError, p as resolveGitCredentials, r as callRemoteMcpTool, t as reconnectMcpOAuth } from "./mcp-reconnect-
|
|
19
|
+
import { c as getRemoteMcpConnection, d as buildAuthHeaders, i as listRemoteMcpTools, l as listRemoteMcpConnections, m as resolveServiceCredentials, n as McpReauthRequiredError, p as resolveGitCredentials, r as callRemoteMcpTool, t as reconnectMcpOAuth } from "./mcp-reconnect-CoHDMjmY.js";
|
|
20
20
|
import { a as require_define_data_property, c as require_hasown, d as require_type, f as require_es_object_atoms, h as require_stream_browserify, i as require_has_property_descriptors, l as require_get_proto, m as require_shams$1, n as require_which_typed_array, o as require_call_bound, p as require_shams, r as require_call_bind, s as require_get_intrinsic, t as require_is_typed_array, u as require_gopd, y as require_inherits_browser } from "./is-typed-array-CTIxWDdM.js";
|
|
21
21
|
import { n as require_inflate, o as require_zstream, r as require_deflate, t as require_constants } from "./constants-DsXVuJVP.js";
|
|
22
|
-
import { a as upsertEmailConnection, i as listEmailConnections, n as deleteEmailConnection, o as getEmailPluginManifest, r as getEmailConnection, s as listEmailPluginManifests, t as bindEmailCredentialRef } from "./connections-
|
|
22
|
+
import { a as upsertEmailConnection, i as listEmailConnections, n as deleteEmailConnection, o as getEmailPluginManifest, r as getEmailConnection, s as listEmailPluginManifests, t as bindEmailCredentialRef } from "./connections-PZrUDf49.js";
|
|
23
23
|
import { t as getAllTasks } from "./getAllTasks-BVJn5ZNH.js";
|
|
24
|
-
import { r as getPushUrl } from "./push-client-
|
|
24
|
+
import { r as getPushUrl } from "./push-client-DDV5Rcg6.js";
|
|
25
25
|
import { o as showToast, r as showError } from "./toast-DZ6r7_YI.js";
|
|
26
26
|
import { getNamespacedItem, setNamespacedItem } from "./utils/namespacedStorage.js";
|
|
27
27
|
import { applyJsonPatch } from "./utils/jsonPatch.js";
|
|
@@ -80538,7 +80538,7 @@ function isRetryableFetchError(error) {
|
|
|
80538
80538
|
//#region src/worker/utils/executeTool.ts
|
|
80539
80539
|
let gitSubsystemPromise = null;
|
|
80540
80540
|
async function loadGitSubsystem() {
|
|
80541
|
-
if (!gitSubsystemPromise) gitSubsystemPromise = import("./git-
|
|
80541
|
+
if (!gitSubsystemPromise) gitSubsystemPromise = import("./git-BppibnJW.js");
|
|
80542
80542
|
return gitSubsystemPromise;
|
|
80543
80543
|
}
|
|
80544
80544
|
function toAllowedToolNameSet(allowedTools) {
|
|
@@ -81579,11 +81579,40 @@ function mapOpenAiUserContent(blocks, model) {
|
|
|
81579
81579
|
}
|
|
81580
81580
|
return content;
|
|
81581
81581
|
}
|
|
81582
|
+
function normalizeModelId(model) {
|
|
81583
|
+
if (typeof model !== "string" || model.trim().length === 0) return "";
|
|
81584
|
+
return model.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "");
|
|
81585
|
+
}
|
|
81586
|
+
function isLegacyClaudeModel(model) {
|
|
81587
|
+
const id = normalizeModelId(model);
|
|
81588
|
+
if (!id) return false;
|
|
81589
|
+
return id.includes("claude-1") || id.includes("claude-2") || id.includes("claude-v1") || id.includes("claude-v2") || id.includes("claude-instant");
|
|
81590
|
+
}
|
|
81591
|
+
/**
|
|
81592
|
+
* Check if a model supports Anthropic/Bedrock prompt caching.
|
|
81593
|
+
*
|
|
81594
|
+
* 1. Checks ModelRegistry for dynamic capability metadata (e.g. from OpenRouter
|
|
81595
|
+
* `supported_parameters` or explicit registration).
|
|
81596
|
+
* 2. Normalizes model identifiers (handling dots, slashes, uppercase).
|
|
81597
|
+
* 3. Rejects legacy models (Claude 1, 2, instant).
|
|
81598
|
+
* 4. Matches modern Claude 3, 3.5, 3.7, 4+, 5+ families.
|
|
81599
|
+
*/
|
|
81582
81600
|
function supportsPromptCaching(model) {
|
|
81583
81601
|
if (typeof model !== "string" || model.trim().length === 0) return false;
|
|
81584
|
-
const
|
|
81585
|
-
|
|
81602
|
+
const modelInfo = modelRegistry.getModelInfo(model);
|
|
81603
|
+
if (typeof modelInfo?.supportsPromptCaching === "boolean") return modelInfo.supportsPromptCaching;
|
|
81604
|
+
const id = normalizeModelId(model);
|
|
81605
|
+
if (isLegacyClaudeModel(id)) return false;
|
|
81606
|
+
if (id.includes("claude-3-5-sonnet") || id.includes("claude-3-5-haiku") || id.includes("claude-3-7-sonnet")) return true;
|
|
81607
|
+
if (id.includes("claude-3-haiku") || id.includes("claude-3-opus")) return true;
|
|
81608
|
+
if (/claude-(?:sonnet|opus|haiku)-[4-9]/.test(id) || /claude-[4-9]-(?:sonnet|opus|haiku)/.test(id)) return true;
|
|
81609
|
+
return false;
|
|
81586
81610
|
}
|
|
81611
|
+
/**
|
|
81612
|
+
* Maps incoming content blocks to Anthropic Messages format.
|
|
81613
|
+
* Preserves caller-specified `cache_control` blocks if already present on incoming blocks
|
|
81614
|
+
* (e.g. from orchestrators or replayed conversation history).
|
|
81615
|
+
*/
|
|
81587
81616
|
function mapAnthropicContent(blocks, model) {
|
|
81588
81617
|
const content = [];
|
|
81589
81618
|
const canSendImages = canSendNativeImage(model);
|
|
@@ -81593,7 +81622,8 @@ function mapAnthropicContent(blocks, model) {
|
|
|
81593
81622
|
if (text.trim().length === 0) continue;
|
|
81594
81623
|
content.push({
|
|
81595
81624
|
type: "text",
|
|
81596
|
-
text
|
|
81625
|
+
text,
|
|
81626
|
+
...block.cache_control && { cache_control: block.cache_control }
|
|
81597
81627
|
});
|
|
81598
81628
|
continue;
|
|
81599
81629
|
}
|
|
@@ -81630,7 +81660,8 @@ function mapAnthropicContent(blocks, model) {
|
|
|
81630
81660
|
type: "base64",
|
|
81631
81661
|
media_type: block.mimeType,
|
|
81632
81662
|
data: block.data
|
|
81633
|
-
}
|
|
81663
|
+
},
|
|
81664
|
+
...block.cache_control && { cache_control: block.cache_control }
|
|
81634
81665
|
});
|
|
81635
81666
|
else if (block.mediaType === "document" && typeof block.data === "string" && block.data && canSendNativeDocument(model)) content.push({
|
|
81636
81667
|
type: "document",
|
|
@@ -81638,11 +81669,13 @@ function mapAnthropicContent(blocks, model) {
|
|
|
81638
81669
|
type: "base64",
|
|
81639
81670
|
media_type: "application/pdf",
|
|
81640
81671
|
data: block.data
|
|
81641
|
-
}
|
|
81672
|
+
},
|
|
81673
|
+
...block.cache_control && { cache_control: block.cache_control }
|
|
81642
81674
|
});
|
|
81643
81675
|
else content.push({
|
|
81644
81676
|
type: "text",
|
|
81645
|
-
text: formatAttachmentFallbackText(block)
|
|
81677
|
+
text: formatAttachmentFallbackText(block),
|
|
81678
|
+
...block.cache_control && { cache_control: block.cache_control }
|
|
81646
81679
|
});
|
|
81647
81680
|
}
|
|
81648
81681
|
return content;
|
|
@@ -81815,9 +81848,10 @@ var OpenAIAdapter = class extends BaseAdapter {
|
|
|
81815
81848
|
var AnthropicAdapter = class extends BaseAdapter {
|
|
81816
81849
|
formatRequest(messages, tools, options) {
|
|
81817
81850
|
const { model, maxTokens, system, reasoning } = options;
|
|
81818
|
-
const
|
|
81851
|
+
const modelInfo = modelRegistry.getModelInfo(model);
|
|
81852
|
+
const cacheEnabled = !(isLegacyClaudeModel(model) || modelInfo?.supportsPromptCaching === false) && (options.promptCaching === true || options.promptCaching !== false && supportsPromptCaching(model));
|
|
81819
81853
|
const filteredMessages = messages.filter((msg) => msg.role !== "system").map((msg) => {
|
|
81820
|
-
if (!Array.isArray(msg.content)) return msg;
|
|
81854
|
+
if (!Array.isArray(msg.content)) return { ...msg };
|
|
81821
81855
|
return {
|
|
81822
81856
|
...msg,
|
|
81823
81857
|
content: mapAnthropicContent(msg.content, model)
|
|
@@ -81837,6 +81871,35 @@ var AnthropicAdapter = class extends BaseAdapter {
|
|
|
81837
81871
|
text: system,
|
|
81838
81872
|
cache_control: { type: "ephemeral" }
|
|
81839
81873
|
}] : system;
|
|
81874
|
+
if (cacheEnabled && filteredMessages.length > 1) for (let i = filteredMessages.length - 1; i >= 0; i--) {
|
|
81875
|
+
const msg = filteredMessages[i];
|
|
81876
|
+
if (msg.role === "user") {
|
|
81877
|
+
if (typeof msg.content === "string") filteredMessages[i] = {
|
|
81878
|
+
...msg,
|
|
81879
|
+
content: [{
|
|
81880
|
+
type: "text",
|
|
81881
|
+
text: msg.content,
|
|
81882
|
+
cache_control: { type: "ephemeral" }
|
|
81883
|
+
}]
|
|
81884
|
+
};
|
|
81885
|
+
else if (Array.isArray(msg.content) && msg.content.length > 0) {
|
|
81886
|
+
const updated = [...msg.content];
|
|
81887
|
+
const lastIdx = updated.length - 1;
|
|
81888
|
+
const lastBlock = updated[lastIdx];
|
|
81889
|
+
if (lastBlock && typeof lastBlock === "object" && !lastBlock.cache_control) {
|
|
81890
|
+
updated[lastIdx] = {
|
|
81891
|
+
...lastBlock,
|
|
81892
|
+
cache_control: { type: "ephemeral" }
|
|
81893
|
+
};
|
|
81894
|
+
filteredMessages[i] = {
|
|
81895
|
+
...msg,
|
|
81896
|
+
content: updated
|
|
81897
|
+
};
|
|
81898
|
+
}
|
|
81899
|
+
}
|
|
81900
|
+
break;
|
|
81901
|
+
}
|
|
81902
|
+
}
|
|
81840
81903
|
const request = {
|
|
81841
81904
|
model,
|
|
81842
81905
|
max_tokens: maxTokens,
|
|
@@ -85851,4 +85914,4 @@ const orchestratorStore = new OrchestratorStore();
|
|
|
85851
85914
|
|
|
85852
85915
|
//#endregion
|
|
85853
85916
|
export { setPeerjsPeerAliases as $, unregisterSubagentCollector as $t, shouldStartLocalScheduler as A, isRetryableHttpError as At, getApiKeyForHeaders as B, deleteRoom as Bt, sendTerminalInput as C, formatRequest as Ct, compactContext as D, invokeWithPromptApi as Dt, setVMNetworkRelayURL as E, parseResponse as Et, leaveRoom as F, copyGroupEntry as Ft, getProviderRuntimeHeaders as G, writeGroupFileBytes as Gt, getAvailableProviders as H, roomGroupId as Ht, listRooms as I, ensureBuiltinAiPolyfills as It, setBedrockSettings as J, ensureMainGroupIndex as Jt, getReasoningConfig as K, createGroupDirectory as Kt, applyLlamafileHeaders as L, fetchTokenizerConfig as Lt, handleRoomInvite as M, discoverSkills as Mt, inviteToRoom as N, moveGroupEntry as Nt, handleWorkerMessage as O, isPromptApiSupported as Ot, joinRoomViaLink as P, deleteGroupDirectory as Pt, setPeerjsMyAlias as Q, setPostHandler as Qt, applyMeshLlmHeaders as R, loadModelStream as Rt, openTerminalSession as S, buildHeaders as St, setVMBootMode as T, normalizeMeshLlmResult as Tt, getBedrockSettings as U, roomIdFromGroupId as Ut, getApiKeyForRequest as V, getRoomMetadata as Vt, getLlamafileSettings as W, upsertRoom as Wt, setMeshLlmSettings as X, post as Xt, setLlamafileSettings as Y, ensureMainGroupMemory as Yt, setModel as Z, registerSubagentCollector as Zt, setUseProxy as _, setChannelEnabled as _t, updateTaskLastRun as a, buildConversationMessages as an, buildLlamafileHelpDialogOptions as at, answerUserPrompt as b, saveMessage as bt, setMaxIterations as c, getModelAttachmentCapabilities as cn, clearPeerJsTypingState as ct, setRateLimitAutoAdapt as d, buildProviderHelpDialogOptions as dn, getChannelEnabled as dt, uploadGroupFile as en, setProvider as et, setRateLimitCallsPerMinute as f, detectProviderHelpType as fn, getChannelTypeForGroup as ft, setTaskServerUrl as g, loadChannelEnabled as gt, setTaskServerEnabled as h, getTelegramConfig as ht, deleteAllGroupFiles as i, listGroups as in, LLAMAFILE_EXPECTED_DIR as it, createRoom as j, withRetry as jt, runTaskAsScheduled as k, executeTool as kt, setMaxTokens as l, buildDynamicContext as ln, configureIMessage as lt, setStreamingEnabled as m, getPeerJsConfig as mt, orchestrator_exports as n, createLogMessage as nn, stopTransformersProgressPolling as nt, clearGroupMessages as o, formatModelAttachmentCapabilitySummary as on, deliverResponse as ot, setReasoningEffort as p, getIMessageConfig as pt, setAssistantName as q, deleteGroupFile as qt, getStaticPageContent as r, sanitizeModelOutput as rn, buildTransformersJsHelpDialogOptions as rt, setContextCompressionEnabled as s, getAttachmentCategory as sn, applyAllChannelRunningStates as st, orchestratorStore as t, createToolActivityMessage as tn, startTransformersProgressPolling as tt, setProxyUrl as u, estimateTokens as un, configureTelegram as ut, setVMBashTimeout as v, submitMessage as vt, setVMBootHost as w, getContextLimit as wt, closeTerminalSession as x, buildSystemPrompt as xt, syncProxyConfigToServiceWorker as y, normalizeStringList as yt, cancelLlamafileRequest as z, DEFAULT_CHUNK_SIZE as zt };
|
|
85854
|
-
//# sourceMappingURL=orchestrator-
|
|
85917
|
+
//# sourceMappingURL=orchestrator-C3TgDZvq.js.map
|