shadow-claw 1.51.0 → 1.52.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/README.md +1 -1
- package/dist/cli/{chunk-Dtse8rAn.js → chunk-5ryVpyup.js} +1 -1
- package/dist/cli/chunk-Aq3057Xo.js +1 -0
- package/dist/cli/{chunk-4CZJpLqA.js → chunk-BV9JBYpl.js} +2 -2
- package/dist/cli/{chunk-mbFAP9Ev.js → chunk-BZI3bWDA.js} +1 -1
- package/dist/cli/chunk-BaUCHRPD.js +1 -0
- package/dist/cli/{chunk-vzUrhBN5.js → chunk-BdbEt6gM.js} +1 -1
- package/dist/cli/{chunk-BU8UG4L_.js → chunk-BiWLawPV.js} +1 -1
- package/dist/cli/chunk-BkLnHJeo.js +1 -0
- package/dist/cli/{chunk-BqfPWIBf.js → chunk-BzWY1sKE.js} +1 -1
- package/dist/cli/{chunk-DajM7Kro.js → chunk-C79eIU-4.js} +1 -1
- package/dist/cli/{chunk-CI9r1AM5.js → chunk-CDw214Zi.js} +1 -1
- package/dist/cli/chunk-CNqc7LLn.js +1 -0
- package/dist/cli/{chunk-CEhU-Ah-.js → chunk-CWW7dqIv.js} +1 -1
- package/dist/cli/{chunk-BT_C3OlA.js → chunk-CcSTYHtR.js} +1 -1
- package/dist/cli/chunk-ClOfk6Ga.js +1 -0
- package/dist/cli/chunk-ComXUwW0.js +1 -0
- package/dist/cli/{chunk-lL1BhHVe.js → chunk-CooeO4UQ.js} +1 -1
- package/dist/cli/{chunk-khr7--yI.js → chunk-CtfWY4G6.js} +1 -1
- package/dist/cli/{chunk-C4iW1XuQ.js → chunk-DFgSiYMW.js} +1 -1
- package/dist/cli/chunk-DGBnjngK.js +1 -0
- package/dist/cli/{chunk-D7bFIUK3.js → chunk-DGu1OhJs.js} +1 -1
- package/dist/cli/{chunk-CzfOerQR.js → chunk-DIjCY0Wf.js} +1 -1
- package/dist/cli/{chunk-D-iqEY5G.js → chunk-DJ_LeQtz.js} +1 -1
- package/dist/cli/{chunk-BmEsDkRK.js → chunk-DQRu-9wO.js} +1 -1
- package/dist/cli/{chunk-DojiYody.js → chunk-DToVgO9a.js} +1 -1
- package/dist/cli/{chunk-De5a_Rlp.js → chunk-DVbNkQRL.js} +1 -1
- package/dist/cli/{chunk-c8MIYB2y.js → chunk-Ddtzaj43.js} +1 -1
- package/dist/cli/{chunk-aJ6fufe-.js → chunk-DiqS56rD.js} +1 -1
- package/dist/cli/{chunk-CeUEmZNt.js → chunk-DnRcu9b4.js} +1 -1
- package/dist/cli/chunk-DtgZDsJA.js +1 -0
- package/dist/cli/{chunk-DVMcK7g6.js → chunk-Du4qvxo_.js} +2 -2
- package/dist/cli/{chunk-CegcvNc9.js → chunk-Dz5_hgvL.js} +8 -8
- package/dist/cli/{chunk-Cd4Dv5Eq.js → chunk-I3mxEelq.js} +1 -1
- package/dist/cli/{chunk-Do3VICh1.js → chunk-IU2SH_ti.js} +1 -1
- package/dist/cli/{chunk-BQveaAaD.js → chunk-NC8XsSSA.js} +1 -1
- package/dist/cli/{chunk-D702W_Ry.js → chunk-Q4BZ9QN9.js} +1 -1
- package/dist/cli/chunk-WTlDd4Ou.js +1 -0
- package/dist/cli/chunk-XGzq5joC.js +1 -0
- package/dist/cli/{chunk-ar7eAlxK.js → chunk-aJfaGe2s.js} +8 -8
- package/dist/cli/chunk-bPVrFlmk.js +1 -0
- package/dist/cli/chunk-jXJHKxdR.js +1 -0
- package/dist/cli/{chunk-C3dTAmV_.js → chunk-rstVU7U0.js} +1 -1
- package/dist/cli/{chunk-DGfTzQui.js → chunk-t72uObQ7.js} +1 -1
- package/dist/cli/{chunk-DDgfljzN.js → chunk-vq8xlroY.js} +1 -1
- package/dist/cli/cli.js +1 -1
- package/dist/headless-agent.js +1 -1
- package/dist/lib/components/common/shadow-claw-provider-model-picker.js +1 -1
- package/dist/lib/components/index.js +27 -27
- 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/model-ranking.d.ts +12 -0
- 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/shadow-claw-chat.d.ts +1 -0
- 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-provider-model-picker.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/config.d.ts +2 -1
- package/dist/lib/{config-DxDaVDTn.js → config-DFLs7eoC.js} +3 -2
- package/dist/lib/config-DFLs7eoC.js.map +1 -0
- package/dist/lib/{configurePeerJs-ScwZiGbF.js → configurePeerJs-DJ0H6e6s.js} +3 -3
- package/dist/lib/{configurePeerJs-ScwZiGbF.js.map → configurePeerJs-DJ0H6e6s.js.map} +1 -1
- package/dist/lib/{connections-D82zele0.js → connections-DT3nPylw.js} +2 -2
- package/dist/lib/{connections-D82zele0.js.map → connections-DT3nPylw.js.map} +1 -1
- package/dist/lib/{downloadGroupFile-D7-5y6NI.js → downloadGroupFile-DMnAiPj4.js} +2 -2
- package/dist/lib/{downloadGroupFile-D7-5y6NI.js.map → downloadGroupFile-DMnAiPj4.js.map} +1 -1
- package/dist/lib/{file-viewer-BMvvndPQ.js → file-viewer-OHmGC_l7.js} +5 -5
- package/dist/lib/{file-viewer-BMvvndPQ.js.map → file-viewer-OHmGC_l7.js.map} +1 -1
- package/dist/lib/{getGroupDir-BidwYPfP.js → getGroupDir-mTV2Iz2b.js} +3 -3
- package/dist/lib/{getGroupDir-BidwYPfP.js.map → getGroupDir-mTV2Iz2b.js.map} +1 -1
- package/dist/lib/{git-CXmWufWS.js → git-CGdKghMC.js} +3 -3
- package/dist/lib/{git-CXmWufWS.js.map → git-CGdKghMC.js.map} +1 -1
- package/dist/lib/index.js +28 -28
- package/dist/lib/{initChatSplitResize-tvUZ-wsp.js → initChatSplitResize-B8zHHQdm.js} +2 -2
- package/dist/lib/{initChatSplitResize-tvUZ-wsp.js.map → initChatSplitResize-B8zHHQdm.js.map} +1 -1
- package/dist/lib/{initControlPlane-Dnjkb-6J.js → initControlPlane-BczrlTf3.js} +14 -14
- package/dist/lib/{initControlPlane-Dnjkb-6J.js.map → initControlPlane-BczrlTf3.js.map} +1 -1
- package/dist/lib/{markdown-WCXar9C8.js → markdown-D-7Cjyye.js} +3 -3
- package/dist/lib/{markdown-WCXar9C8.js.map → markdown-D-7Cjyye.js.map} +1 -1
- package/dist/lib/{mcp-reconnect-WTOQONHZ.js → mcp-reconnect-Czf7QCCv.js} +2 -2
- package/dist/lib/{mcp-reconnect-WTOQONHZ.js.map → mcp-reconnect-Czf7QCCv.js.map} +1 -1
- package/dist/lib/{memoryStorage-Bo2Wpfmg.js → memoryStorage-CXyKsKMo.js} +2 -2
- package/dist/lib/{memoryStorage-Bo2Wpfmg.js.map → memoryStorage-CXyKsKMo.js.map} +1 -1
- package/dist/lib/model-ranking-Bo8CpGH1.js +116 -0
- package/dist/lib/model-ranking-Bo8CpGH1.js.map +1 -0
- package/dist/lib/{orchestrator-Crw4btGn.js → orchestrator-BK138MkV.js} +10 -10
- package/dist/lib/{orchestrator-Crw4btGn.js.map → orchestrator-BK138MkV.js.map} +1 -1
- package/dist/lib/{orchestrator-Dro541iH.js → orchestrator-BtbxiPQB.js} +17 -16
- package/dist/lib/{orchestrator-Dro541iH.js.map → orchestrator-BtbxiPQB.js.map} +1 -1
- package/dist/lib/{peerjs-D741bHrf.js → peerjs-QJr03K9F.js} +7 -7
- package/dist/lib/{peerjs-D741bHrf.js.map → peerjs-QJr03K9F.js.map} +1 -1
- package/dist/lib/{prompt-api-D9XdrCep.js → prompt-api-vf351sf2.js} +2 -19
- package/dist/lib/{prompt-api-D9XdrCep.js.map → prompt-api-vf351sf2.js.map} +1 -1
- package/dist/lib/{push-client-DKFUY_Ti.js → push-client-BOHgqHbk.js} +4 -4
- package/dist/lib/{push-client-DKFUY_Ti.js.map → push-client-BOHgqHbk.js.map} +1 -1
- package/dist/lib/{readGroupFileBytes-C8Xqlb8l.js → readGroupFileBytes-CRA6dmgT.js} +2 -2
- package/dist/lib/{readGroupFileBytes-C8Xqlb8l.js.map → readGroupFileBytes-CRA6dmgT.js.map} +1 -1
- package/dist/lib/{shadow-claw-a2ui-CPydWVdW.js → shadow-claw-a2ui-DbZa4Gxp.js} +2 -2
- package/dist/lib/{shadow-claw-a2ui-CPydWVdW.js.map → shadow-claw-a2ui-DbZa4Gxp.js.map} +1 -1
- package/dist/lib/{shadow-claw-accounts-CUypXc3I.js → shadow-claw-accounts-B6OW2NVD.js} +3 -3
- package/dist/lib/{shadow-claw-accounts-CUypXc3I.js.map → shadow-claw-accounts-B6OW2NVD.js.map} +1 -1
- package/dist/lib/{shadow-claw-channel-config-D_Vb2ous.js → shadow-claw-channel-config-F_EJ-uK2.js} +3 -3
- package/dist/lib/{shadow-claw-channel-config-D_Vb2ous.js.map → shadow-claw-channel-config-F_EJ-uK2.js.map} +1 -1
- package/dist/lib/{shadow-claw-channels-hgjjzvRr.js → shadow-claw-channels-XYylMpjg.js} +3 -3
- package/dist/lib/{shadow-claw-channels-hgjjzvRr.js.map → shadow-claw-channels-XYylMpjg.js.map} +1 -1
- package/dist/lib/{shadow-claw-chat-D69IiLXd.js → shadow-claw-chat-dbK_DGO_.js} +124 -38
- package/dist/lib/shadow-claw-chat-dbK_DGO_.js.map +1 -0
- package/dist/lib/{shadow-claw-control-plane-zBYlFvzQ.js → shadow-claw-control-plane-BJKkmahQ.js} +7 -7
- package/dist/lib/{shadow-claw-control-plane-zBYlFvzQ.js.map → shadow-claw-control-plane-BJKkmahQ.js.map} +1 -1
- package/dist/lib/{shadow-claw-conversations-1GW8_e8o.js → shadow-claw-conversations-BKSsMYTc.js} +6 -6
- package/dist/lib/{shadow-claw-conversations-1GW8_e8o.js.map → shadow-claw-conversations-BKSsMYTc.js.map} +1 -1
- package/dist/lib/{shadow-claw-D3z3tFyE.js → shadow-claw-eBB2dbpd.js} +11 -11
- package/dist/lib/{shadow-claw-D3z3tFyE.js.map → shadow-claw-eBB2dbpd.js.map} +1 -1
- package/dist/lib/{shadow-claw-file-viewer-DI4r7Th9.js → shadow-claw-file-viewer-BqChtTvM.js} +8 -8
- package/dist/lib/{shadow-claw-file-viewer-DI4r7Th9.js.map → shadow-claw-file-viewer-BqChtTvM.js.map} +1 -1
- package/dist/lib/{shadow-claw-files-BM7qW3TW.js → shadow-claw-files-Bu7VCQw6.js} +9 -9
- package/dist/lib/{shadow-claw-files-BM7qW3TW.js.map → shadow-claw-files-Bu7VCQw6.js.map} +1 -1
- package/dist/lib/{shadow-claw-git-BBTiTYIn.js → shadow-claw-git-CdPPN6Qb.js} +6 -6
- package/dist/lib/{shadow-claw-git-BBTiTYIn.js.map → shadow-claw-git-CdPPN6Qb.js.map} +1 -1
- package/dist/lib/{shadow-claw-integrations-DTY3E545.js → shadow-claw-integrations-DehqBSRe.js} +4 -4
- package/dist/lib/{shadow-claw-integrations-DTY3E545.js.map → shadow-claw-integrations-DehqBSRe.js.map} +1 -1
- package/dist/lib/{shadow-claw-llm-AJwzkOGo.js → shadow-claw-llm-COZkufA8.js} +13 -11
- package/dist/lib/shadow-claw-llm-COZkufA8.js.map +1 -0
- package/dist/lib/{shadow-claw-mcp-remote-n7YXKxmv.js → shadow-claw-mcp-remote-axF50-le.js} +4 -4
- package/dist/lib/{shadow-claw-mcp-remote-n7YXKxmv.js.map → shadow-claw-mcp-remote-axF50-le.js.map} +1 -1
- package/dist/lib/{shadow-claw-networking-B3leDgZ4.js → shadow-claw-networking-BT_Rxj36.js} +2 -2
- package/dist/lib/{shadow-claw-networking-B3leDgZ4.js.map → shadow-claw-networking-BT_Rxj36.js.map} +1 -1
- package/dist/lib/{shadow-claw-notifications-Bm2aHQ0U.js → shadow-claw-notifications-ClqAXDDN.js} +3 -3
- package/dist/lib/{shadow-claw-notifications-Bm2aHQ0U.js.map → shadow-claw-notifications-ClqAXDDN.js.map} +1 -1
- package/dist/lib/{shadow-claw-page-header-BBqSWlhP.js → shadow-claw-page-header-bigC_h6U.js} +2 -2
- package/dist/lib/{shadow-claw-page-header-BBqSWlhP.js.map → shadow-claw-page-header-bigC_h6U.js.map} +1 -1
- package/dist/lib/{shadow-claw-pages-BFOcluFY.js → shadow-claw-pages-kA2qa-4B.js} +9 -9
- package/dist/lib/{shadow-claw-pages-BFOcluFY.js.map → shadow-claw-pages-kA2qa-4B.js.map} +1 -1
- package/dist/lib/{shadow-claw-peerjs-BvD_MH_l.js → shadow-claw-peerjs-CvcH2DkA.js} +3 -3
- package/dist/lib/{shadow-claw-peerjs-BvD_MH_l.js.map → shadow-claw-peerjs-CvcH2DkA.js.map} +1 -1
- package/dist/lib/{shadow-claw-provider-model-picker-CsA-507a.js → shadow-claw-provider-model-picker-fcVQdDtQ.js} +2 -2
- package/dist/lib/{shadow-claw-provider-model-picker-CsA-507a.js.map → shadow-claw-provider-model-picker-fcVQdDtQ.js.map} +1 -1
- package/dist/lib/{shadow-claw-settings-CZgGMz0a.js → shadow-claw-settings-CkO6JjA4.js} +6 -6
- package/dist/lib/{shadow-claw-settings-CZgGMz0a.js.map → shadow-claw-settings-CkO6JjA4.js.map} +1 -1
- package/dist/lib/{shadow-claw-storage-BTUpEKO0.js → shadow-claw-storage-10w-y8vL.js} +5 -5
- package/dist/lib/{shadow-claw-storage-BTUpEKO0.js.map → shadow-claw-storage-10w-y8vL.js.map} +1 -1
- package/dist/lib/{shadow-claw-task-server-B1X2AYyZ.js → shadow-claw-task-server-U98sZxPu.js} +2 -2
- package/dist/lib/{shadow-claw-task-server-B1X2AYyZ.js.map → shadow-claw-task-server-U98sZxPu.js.map} +1 -1
- package/dist/lib/{shadow-claw-tasks-BYtaRUAd.js → shadow-claw-tasks-DrSVUOsP.js} +8 -8
- package/dist/lib/{shadow-claw-tasks-BYtaRUAd.js.map → shadow-claw-tasks-DrSVUOsP.js.map} +1 -1
- package/dist/lib/{shadow-claw-terminal-LGuXKu77.js → shadow-claw-terminal-B7HYLuce.js} +2 -2
- package/dist/lib/{shadow-claw-terminal-LGuXKu77.js.map → shadow-claw-terminal-B7HYLuce.js.map} +1 -1
- package/dist/lib/{shadow-claw-tools-C_S-xXVG.js → shadow-claw-tools-BKrXzZfF.js} +7 -7
- package/dist/lib/{shadow-claw-tools-C_S-xXVG.js.map → shadow-claw-tools-BKrXzZfF.js.map} +1 -1
- package/dist/lib/{shadow-claw-webvm-Cab1n1bu.js → shadow-claw-webvm-Duwa5oiW.js} +3 -3
- package/dist/lib/{shadow-claw-webvm-Cab1n1bu.js.map → shadow-claw-webvm-Duwa5oiW.js.map} +1 -1
- package/dist/lib/{syncWebMcpRegistration-Dy5NS_4G.js → syncWebMcpRegistration-BOx-0F6_.js} +5 -5
- package/dist/lib/{syncWebMcpRegistration-Dy5NS_4G.js.map → syncWebMcpRegistration-BOx-0F6_.js.map} +1 -1
- package/dist/lib/{tools-B7gC1eb_.js → tools-BEuBatUs.js} +4 -4
- package/dist/lib/{tools-B7gC1eb_.js.map → tools-BEuBatUs.js.map} +1 -1
- package/dist/lib/utils/index.js +1 -1
- package/dist/lib/utils/utils.js +1 -1
- package/dist/lib/{utils-D_ylqOY-.js → utils-D8AxCH6m.js} +2 -2
- package/dist/lib/{utils-D_ylqOY-.js.map → utils-D8AxCH6m.js.map} +1 -1
- package/dist/lib/{webmcp-CkYINKJj.js → webmcp-BjfVWX1K.js} +2 -2
- package/dist/lib/{webmcp-CkYINKJj.js.map → webmcp-BjfVWX1K.js.map} +1 -1
- package/dist/public/.well-known/mcp/server-card.json +1 -1
- package/dist/public/.well-known/mcp.json +1 -1
- package/dist/public/README.md +1 -1
- package/dist/public/agent.worker.js +1 -1
- package/dist/public/components/shadow-claw-chat/shadow-claw-chat.html +1 -1
- package/dist/public/config-071HSho8.js +1 -0
- package/dist/public/{configurePeerJs-DQQ6YL-5.js → configurePeerJs-DL-LurJY.js} +1 -1
- package/dist/public/{connections-CRNk2FxF.js → connections-Bb0rBpV-.js} +1 -1
- package/dist/public/{custom-element-security-3_FKCXcg.js → custom-element-security-Td4vrRc_.js} +1 -1
- package/dist/public/docs/example/article/index.html +1 -1
- package/dist/public/docs/example/article.html +1 -1
- package/dist/public/docs/publishing/index.html +1 -1
- package/dist/public/docs/publishing.html +1 -1
- package/dist/public/docs/skill-creator/index.html +1 -1
- package/dist/public/docs/skill-creator.html +1 -1
- package/dist/public/docs/subsystems/providers.md +1 -1
- package/dist/public/{downloadGroupFile-wkdhVgrZ.js → downloadGroupFile-Unq8_7D9.js} +1 -1
- package/dist/public/{e2e-bridge-DnFHPuwg.js → e2e-bridge-Dbc9fCDq.js} +1 -1
- package/dist/public/{file-viewer-C92v4Ggd.js → file-viewer-QkCuknFn.js} +1 -1
- package/dist/public/{getGroupDir-BGGIJL4Y.js → getGroupDir-Bj5XCflQ.js} +1 -1
- package/dist/public/{git-BH6qyToB.js → git-Bhz4YHc8.js} +2 -2
- package/dist/public/index.html +1 -1
- package/dist/public/index.js +1 -1
- package/dist/public/{initChatSplitResize--RH5kzVF.js → initChatSplitResize-KNL9Oh7s.js} +1 -1
- package/dist/public/{initControlPlane-yPJ3ajkj.js → initControlPlane-D2fVhRFC.js} +1 -1
- package/dist/public/main/index.html +1 -1
- package/dist/public/main/memory/index.html +1 -1
- package/dist/public/main/memory.html +1 -1
- package/dist/public/main.html +1 -1
- package/dist/public/{markdown-CA0v11cd.js → markdown-By6gdUvF.js} +1 -1
- package/dist/public/{mcp-reconnect-uyNSigzu.js → mcp-reconnect-CDRJPuoN.js} +1 -1
- package/dist/public/{memoryStorage-DjPNAT5t.js → memoryStorage-C-ao9y-j.js} +1 -1
- package/dist/public/model-ranking-DUdrFOcC.js +1 -0
- package/dist/public/{orchestrator-DTzgyL23.js → orchestrator-B7MpomoG.js} +2 -2
- package/dist/public/{orchestrator-Cmr69pMC.js → orchestrator-C8aIHbDy.js} +2 -2
- package/dist/public/{peerjs-Br38mUFC.js → peerjs-DwGjY5VX.js} +1 -1
- package/dist/public/prompt-api-BWe_j3Wg.js +1 -0
- package/dist/public/{push-client-CB8haOGC.js → push-client-o8g5_EOe.js} +1 -1
- package/dist/public/service-worker.js +1 -1
- package/dist/public/{shadow-claw-RuFQ2Ej5.js → shadow-claw-Ba2ZFE9m.js} +2 -2
- package/dist/public/{shadow-claw-accounts-BMsEItB6.js → shadow-claw-accounts-BbNPiiaV.js} +1 -1
- package/dist/public/{shadow-claw-channels-Q_AXuEaI.js → shadow-claw-channels-CHGtPkfY.js} +1 -1
- package/dist/public/{shadow-claw-chat-DZQ3OaH7.js → shadow-claw-chat-3TmjJA6-.js} +90 -23
- package/dist/public/{shadow-claw-control-plane-CyXA8tB8.js → shadow-claw-control-plane-BAFT06LL.js} +2 -2
- package/dist/public/{shadow-claw-conversations-BLKtlvHe.js → shadow-claw-conversations-DsQ_kxWm.js} +1 -1
- package/dist/public/{shadow-claw-file-viewer-CVLDfpZe.js → shadow-claw-file-viewer-hBxTknL2.js} +1 -1
- package/dist/public/{shadow-claw-files-DB6VVjir.js → shadow-claw-files-Daw6IIrJ.js} +1 -1
- package/dist/public/{shadow-claw-git-D57bTSMF.js → shadow-claw-git-CxGwyxim.js} +2 -2
- package/dist/public/{shadow-claw-integrations-BOwhUY-4.js → shadow-claw-integrations-DnIr6xp-.js} +1 -1
- package/dist/public/{shadow-claw-llm-CYenm-mm.js → shadow-claw-llm-Bc6tZ8kk.js} +3 -3
- package/dist/public/{shadow-claw-mcp-remote-CJ-Ckl0j.js → shadow-claw-mcp-remote-nGPpFpI-.js} +1 -1
- package/dist/public/{shadow-claw-networking-Cut76YQL.js → shadow-claw-networking-B6YgtiA7.js} +1 -1
- package/dist/public/{shadow-claw-notifications-C3kYCrIa.js → shadow-claw-notifications-BSxifptS.js} +1 -1
- package/dist/public/{shadow-claw-page-header-Dd7QafUk.js → shadow-claw-page-header-LzVgEn46.js} +1 -1
- package/dist/public/{shadow-claw-pages-BWtVtwTG.js → shadow-claw-pages-Cy6T0G9y.js} +1 -1
- package/dist/public/{shadow-claw-settings-Bj7jnngO.js → shadow-claw-settings-DGkwt1ge.js} +2 -2
- package/dist/public/{shadow-claw-storage-CMSzQs1-.js → shadow-claw-storage-DX_4T7KR.js} +1 -1
- package/dist/public/{shadow-claw-task-server-CFclo7UX.js → shadow-claw-task-server-DTsbEs5z.js} +1 -1
- package/dist/public/{shadow-claw-tasks-ClDdeB6Z.js → shadow-claw-tasks-rr6fMxAM.js} +1 -1
- package/dist/public/{shadow-claw-terminal-3ysWZJix.js → shadow-claw-terminal-C7DhrrX6.js} +1 -1
- package/dist/public/{shadow-claw-tools-DQVwpTcZ.js → shadow-claw-tools-DcQroojH.js} +1 -1
- package/dist/public/{shadow-claw-webvm-Cnxz04Fk.js → shadow-claw-webvm-bZj44Did.js} +1 -1
- package/dist/public/{syncWebMcpRegistration-QwnLMAK3.js → syncWebMcpRegistration-XJjIlDNO.js} +1 -1
- package/dist/public/{tools-DvQ_ngXn.js → tools-BpZh7hgB.js} +1 -1
- package/dist/public/{webmcp-CJymew4t.js → webmcp-CkfDZfZ0.js} +1 -1
- package/dist/server.js +1 -1
- package/package.json +1 -1
- package/src/components/settings/shadow-claw-llm/model-ranking.test.ts +121 -7
- package/src/components/settings/shadow-claw-llm/model-ranking.ts +97 -0
- package/src/components/settings/shadow-claw-llm/shadow-claw-llm.test.ts +35 -0
- package/src/components/settings/shadow-claw-llm/shadow-claw-llm.ts +15 -5
- package/src/components/shadow-claw-chat/shadow-claw-chat.html +81 -14
- package/src/components/shadow-claw-chat/shadow-claw-chat.test.ts +73 -0
- package/src/components/shadow-claw-chat/shadow-claw-chat.trusted-types.test.ts +3 -0
- package/src/components/shadow-claw-chat/shadow-claw-chat.ts +79 -32
- package/src/config/config.test.ts +4 -4
- package/src/config/config.ts +2 -1
- package/src/core/orchestrator/orchestrator.test.ts +2 -1
- package/src/core/orchestrator/utils/initTasks.ts +5 -4
- package/dist/cli/chunk-B3S061IE.js +0 -1
- package/dist/cli/chunk-BUJdF9o3.js +0 -1
- package/dist/cli/chunk-BX0R2gIY.js +0 -1
- package/dist/cli/chunk-BoiPfhwJ.js +0 -1
- package/dist/cli/chunk-BtJYj7vB.js +0 -1
- package/dist/cli/chunk-BwXrZVeU.js +0 -1
- package/dist/cli/chunk-CaWh9Pru.js +0 -1
- package/dist/cli/chunk-Ck4ePI8z.js +0 -1
- package/dist/cli/chunk-Ctg-SXcP.js +0 -1
- package/dist/cli/chunk-DTKv1-tk.js +0 -1
- package/dist/cli/chunk-DdYpd9Nu.js +0 -1
- package/dist/cli/chunk-DflhmBY2.js +0 -1
- package/dist/lib/config-DxDaVDTn.js.map +0 -1
- package/dist/lib/model-ranking-CDXs7hkK.js +0 -57
- package/dist/lib/model-ranking-CDXs7hkK.js.map +0 -1
- package/dist/lib/shadow-claw-chat-D69IiLXd.js.map +0 -1
- package/dist/lib/shadow-claw-llm-AJwzkOGo.js.map +0 -1
- package/dist/public/config-Dqn5OMfC.js +0 -1
- package/dist/public/model-ranking-DLIC9IDU.js +0 -1
- package/dist/public/prompt-api-B-8N-MRY.js +0 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DBVvNlSN.js";import{o as t}from"./config-Dqn5OMfC.js";import{t as n}from"./tools-CHxUdGxZ.js";import"./tools-C4xNCwrc.js";const r=`Tool was executed but the invocation failed. For example, the script function threw an error`,i=/^[A-Za-z0-9_.-]{1,128}$/u;function a(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function o(e){if(typeof e==`symbol`)throw TypeError(`Symbol values cannot be converted to a DOMString`);return String(e)}function s(e){let t=Reflect.get(e,`name`),n=Reflect.get(e,`description`),r=Reflect.get(e,`title`);if(t===void 0)throw TypeError(`Tool "name" is required`);if(n===void 0)throw TypeError(`Tool "description" is required`);let i=Reflect.get(e,`annotations`),s=a(i)?i:{},c=Reflect.get(e,`inputSchema`),l=Reflect.get(e,`outputSchema`),u=Reflect.get(e,`execute`);return{name:o(t),...r===void 0?{}:{title:o(r).toWellFormed()},description:o(n),...c===void 0?{}:{inputSchema:c},...l===void 0?{}:{outputSchema:l},execute:u,...i===void 0?{}:{annotations:{...s.title===void 0?{}:{title:o(s.title).toWellFormed()},readOnlyHint:!!s.readOnlyHint,...s.destructiveHint===void 0?{}:{destructiveHint:!!s.destructiveHint},...s.idempotentHint===void 0?{}:{idempotentHint:!!s.idempotentHint},...s.openWorldHint===void 0?{}:{openWorldHint:!!s.openWorldHint},untrustedContentHint:!!s.untrustedContentHint}}}}function c(e){return new DOMException(e,`UnknownError`)}function l(e){return c(e instanceof Error?`${r}: ${e.message}`:r)}function u(e){return new DOMException(e,`InvalidStateError`)}function d(e){if(e.name===``)throw u(`Tool "name" must be a non-empty string`);if(typeof e.name!=`string`||!i.test(e.name))throw u(`Tool "name" must be 1–128 characters and contain only ASCII alphanumeric, underscore, hyphen, or period`);if(typeof e.description!=`string`||e.description.length===0)throw u(`Tool "description" must be a non-empty string`);if(typeof e.execute!=`function`)throw TypeError(`Tool "execute" must be a function`)}function f(e){return{readOnlyHint:e.readOnlyHint??!1,untrustedContentHint:e.untrustedContentHint??!1}}function p(e){try{let t=JSON.parse(e);if(Array.isArray(t)||a(t))return t}catch{}throw c(`Failed to parse input arguments`)}function m(e){if(typeof e==`object`&&e||typeof e==`function`)try{let t=JSON.stringify(e);if(t)return t}catch{}return String(e)||`Operation succeeded`}function h(e,t,n=()=>t?.reason){return t?t.aborted?Promise.reject(n()):new Promise((r,i)=>{let a=()=>{o(),i(n())},o=()=>t.removeEventListener(`abort`,a);t.addEventListener(`abort`,a,{once:!0}),e.then(e=>{o(),r(e)},e=>{o(),i(e)})}):e}function g(e){let t=e.origin===`null`?e:new URL(e.origin),n=t.protocol;if([`https:`,`wss:`,`file:`,`chrome-extension:`,`moz-extension:`].includes(n))return!0;let r=t.hostname.toLowerCase(),i=r.split(`.`),a=i.length===4&&i.every(e=>/^\d{1,3}$/u.test(e)&&Number(e)<=255)&&Number(i[0])===127;return r===`::1`||r===`[::1]`||r===`localhost`||r===`localhost.`||r.endsWith(`.localhost`)||r.endsWith(`.localhost.`)||a}function ee(e){for(let t of e??[]){let e;try{e=new URL(t)}catch{throw new DOMException(`Invalid or untrustworthy origin: ${String(t)}`,`SecurityError`)}if(!g(e))throw new DOMException(`Invalid or untrustworthy origin: ${t}`,`SecurityError`)}}function _(e){if(te(),!e)return;let t=e.defaultView?.DOMException??DOMException,n=!1;try{let t=e.defaultView;n=!!(t&&t.document===e)}catch{}if(!n)throw new t(`The associated document is not fully active`,`InvalidStateError`);let r=Reflect.get(e,`permissionsPolicy`)??Reflect.get(e,`featurePolicy`);if(r&&typeof r==`object`){let e=Reflect.get(r,`features`),n=Reflect.get(r,`allowsFeature`);if(typeof e==`function`&&typeof n==`function`){let i=Reflect.apply(e,r,[]);if(Array.isArray(i)&&i.includes(`tools`)){if(Reflect.apply(n,r,[`tools`])===!0)return;throw new t(`WebMCP is disabled by Permissions Policy`,`NotAllowedError`)}}}let i=e.defaultView;if(i&&i.parent!==i){try{i.parent.document;return}catch{}throw new t(`WebMCP in cross-origin frames requires native Permissions Policy support`,`NotAllowedError`)}}function te(){if(globalThis.originAgentCluster===!1&&globalThis.location?.protocol!==`file:`)throw new DOMException(``,`SecurityError`)}function ne(e){try{if(new URL(String(e)).origin!==`null`)return}catch{}throw new DOMException(`Unsupported tool origin: ${String(e)}`,`NotSupportedError`)}function re(e){if(e===null||typeof e!=`object`&&typeof e!=`function`)throw TypeError(`inputSchema must be an object`);let t=JSON.stringify(e);if(t===void 0)throw TypeError(`inputSchema must be JSON-serializable`);return t}const v=/* @__PURE__ */ new WeakSet,y=/* @__PURE__ */ new WeakMap,b=/* @__PURE__ */ new WeakMap;function x(e){return e.isTrusted&&(v.has(e)||e.eventPhase!==Event.NONE&&e.target instanceof HTMLFormElement&&b.has(e.target))}function ie(e,t){if(!x(e))throw new DOMException(`respondWith() is only available during an agent-invoked submit event`,`InvalidStateError`);if(!e.defaultPrevented)throw new DOMException(`respondWith() requires preventDefault() during an agent-invoked submit event`,`InvalidStateError`);if(e.eventPhase===Event.NONE)throw new DOMException(`respondWith() is only available while the submit event is being dispatched`,`InvalidStateError`);v.add(e);let n=Promise.resolve(t);y.set(e,n),e.target instanceof HTMLFormElement&&b.get(e.target)?.respond(e)}const S=/* @__PURE__ */ new Set([`email`,`password`,`search`,`tel`,`text`,`url`]),ae=/* @__PURE__ */ new Set([...S,`date`,`datetime-local`,`month`,`number`,`time`,`week`]);function C(e){return e instanceof HTMLInputElement||e instanceof HTMLSelectElement||e instanceof HTMLTextAreaElement}function w(e){return Reflect.get(HTMLFormElement.prototype,`elements`,e)}function T(e,t){return Reflect.apply(Element.prototype.getAttribute,e,[t])}function E(e,t){return Reflect.apply(Element.prototype.hasAttribute,e,[t])}function oe(e){return Reflect.get(Node.prototype,`isConnected`,e)}function se(e){return Reflect.get(Element.prototype,`shadowRoot`,e)}function ce(e){return Reflect.apply(HTMLFormElement.prototype.checkValidity,e,[])}function le(e,t){Reflect.apply(HTMLFormElement.prototype.requestSubmit,e,t?[t]:[])}function ue(e){return[...w(e)].filter(e=>C(e)&&!e.matches(`:disabled`)&&!(`readOnly`in e&&e.readOnly&&(e instanceof HTMLTextAreaElement||ae.has(e.type))))}function de(e){let t=/* @__PURE__ */ new Map;for(let n of ue(e)){let e=n.name.trim(),r=t.get(e);r?r.push(n):t.set(e,[n])}return t}function fe(e){return[...e.labels??[]].map(e=>{let t=e.cloneNode(!0);return t instanceof HTMLElement?(t.querySelectorAll(`button, input, meter, output, progress, select, textarea`).forEach(e=>e.remove()),t.textContent?.trim()??``):``}).filter(Boolean).join(`; `)}function pe(e,t){for(let n=t[0]?.parentElement;n&&n!==e;n=n.parentElement)if(n instanceof HTMLFieldSetElement&&t.every(e=>n.contains(e)))return n}function me(e,t){if(t.length===1){let e=t[0];return e&&(e.getAttribute(`toolparamdescription`)||fe(e)||e.getAttribute(`aria-description`))||void 0}return pe(e,t)?.getAttribute(`toolparamdescription`)||void 0}function D(e,t,n,r){let i=me(t,n),a=i&&r?`${i} (${r})`:i||r;return a?{...e,description:a}:e}function he(e,t){let n=e.getAttribute(t);if(n===null||n.trim()===``)return;let r=Number(n);return Number.isFinite(r)?r:void 0}function ge(e,t){let n=e/t;return Math.abs(n-Math.round(n))<2**-52*16}function O(e){let t=e.getAttribute(`pattern`);if(t!==null)try{return new RegExp(t,`v`),t}catch{return}}function k(e,t=!0){let n={type:`number`},r=he(e,`min`),i=he(e,`max`);r!==void 0&&(n.minimum=r),i!==void 0&&(n.maximum=i);let a=e.getAttribute(`step`);if(a!==`any`){let t=a===null||a===``?1:Number(a),i=Number.isFinite(t)&&t>0?t:1,o=Number(e.getAttribute(`value`));ge(r??(Number.isFinite(o)?o:0),i)&&(n.multipleOf=i)}let o=t?O(e):void 0;return o!==void 0&&(n.pattern=o),n}function A(e,t){let n=e.getAttribute(`step`),r=n===null||n===``?60:Number(n),i=Number.isFinite(r)&&r>0?r:60;return i<1?`${t}(:[0-5][0-9](\\.[0-9]{1,3})?)?$`:i<60?`${t}(:[0-5][0-9])?$`:`${t}$`}function _e(e){return{anyOf:e.map(e=>({type:`string`,const:e.value,title:e.textContent??``})),enum:e.map(e=>e.value)}}function j(e){return{anyOf:e.map(e=>{let t=fe(e);return{type:`string`,const:e.value,...t?{title:t}:{}}}),enum:e.map(e=>e.value)}}function M(e,t){let n=t[0];if(n){if(t.length>1)return t.every(e=>e instanceof HTMLInputElement)?t.every(e=>e.type===`checkbox`)?D({type:`array`,items:{type:`string`,...j(t)},uniqueItems:!0},e,t):t.every(e=>e.type===`radio`)?D({type:`string`,...j(t)},e,t):void 0:void 0;if(n instanceof HTMLTextAreaElement)return D({type:`string`},e,t);if(n instanceof HTMLSelectElement){let r=_e([...n.options]);return D(n.multiple?{type:`array`,items:{type:`string`,...r},uniqueItems:!0}:{type:`string`,...r},e,t)}if(S.has(n.type)){let r={type:`string`},i=O(n);return i!==void 0&&(r.pattern=i),D(r,e,t)}if(n.type===`hidden`)return n.getAttribute(`toolparamdescription`)?D({type:`string`},e,t):void 0;if(n.type===`number`)return D(k(n),e,t);if(n.type===`range`){let r=k(n,!1);return r.minimum??=0,r.maximum??=100,D(r,e,t)}if(n.type===`checkbox`)return D({type:`boolean`},e,t);if(n.type===`radio`)return D({type:`string`,...j([n])},e,t);if(n.type===`date`)return D({type:`string`,format:`date`},e,t,`Dates MUST be provided in 'YYYY-MM-DD' format.`);if(n.type===`month`)return D({type:`string`,format:`^[0-9]{4}-(0[1-9]|1[0-2])$`},e,t);if(n.type===`week`)return D({type:`string`,format:`^[0-9]{4}-W(0[1-9]|[1-4][0-9]|5[0-3])$`},e,t);if(n.type===`time`)return D({type:`string`,format:A(n,`^([01][0-9]|2[0-3]):[0-5][0-9]`)},e,t);if(n.type===`datetime-local`)return D({type:`string`,format:A(n,`^[0-9]{4}-(0[1-9]|1[0-2])-[0-9]{2}T([01][0-9]|2[0-3]):[0-5][0-9]`)},e,t);if(n.type===`color`)return D({type:`string`,format:`^#[0-9a-zA-Z]{6}$`},e,t)}}function ve(e){let t={},n=[];for(let[r,i]of de(e)){if(!r)continue;let a=M(e,i);a&&(Object.defineProperty(t,r,{configurable:!0,enumerable:!0,value:a,writable:!0}),i.some(e=>e.required)&&n.push(r))}return{type:`object`,properties:t,required:n}}function ye(e){return{name:T(e,`toolname`)??``,title:T(e,`tooltitle`)??``,description:T(e,`tooldescription`)??``,inputSchema:ve(e),autosubmit:E(e,`toolautosubmit`)}}function N(e){if(typeof e==`string`||typeof e==`boolean`||typeof e==`number`&&Number.isFinite(e))return String(e)}function P(e){if(typeof e==`boolean`)return e;if(typeof e==`number`&&Number.isInteger(e))return e!==0;if(typeof e==`string`){if(e===`1`||e.toLowerCase()===`true`)return!0;if(e===`0`||e.toLowerCase()===`false`)return!1}}function F(e,t){if(!Array.isArray(e))return!1;let n=new Set(t);for(let t of e){let e=N(t);if(e===void 0||!n.delete(e))return!1}return!0}function be(e,t){if(t===``)return e.type!==`number`&&e.type!==`range`;let n=e.ownerDocument.createElement(`input`);return n.type=e.type,n.value=t,n.value!==``}function xe(e,t,n){let r=t[0];if(!r||!M(e,t))return!1;if(t.length>1){if(!t.every(e=>e instanceof HTMLInputElement))return!1;if(t.every(e=>e.type===`checkbox`))return F(n,new Set(t.map(e=>e.value)));if(t.every(e=>e.type===`radio`)){let e=N(n);return e!==void 0&&t.some(t=>t.value===e)}return!1}if(r instanceof HTMLSelectElement){let e=new Set([...r.options].map(e=>e.value));if(r.multiple)return F(n,e);let t=N(n);return t!==void 0&&e.has(t)}if(r instanceof HTMLTextAreaElement)return N(n)!==void 0;if(r.type===`checkbox`)return P(n)!==void 0;if(r.type===`radio`){let e=N(n);return e!==void 0&&r.value===e}let i=N(n);return i!==void 0&&be(r,i)}function I(e){e.dispatchEvent(new Event(`input`,{bubbles:!0,composed:!0})),e.dispatchEvent(new Event(`change`,{bubbles:!0}))}function Se(e,t){let n=e instanceof HTMLInputElement?HTMLInputElement.prototype:HTMLTextAreaElement.prototype;Object.getOwnPropertyDescriptor(n,`value`)?.set?.call(e,t)}function L(e,t){Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,`checked`)?.set?.call(e,t)}function Ce(e,t){let n=e[0];if(!n)return;if(e.length>1&&e.every(e=>e instanceof HTMLInputElement)){if(e.every(e=>e.type===`checkbox`)&&Array.isArray(t)){let n=new Set(t.map(N));for(let t of e){let e=n.has(t.value);t.checked!==e&&(L(t,e),I(t))}return}let n=N(t),r=e.find(e=>e.value===n);r&&!r.checked&&(L(r,!0),I(r));return}if(n instanceof HTMLSelectElement){if(n.multiple&&Array.isArray(t)){let e=new Set(t.map(N)),r=!1;for(let t of n.options){let n=e.has(t.value);t.selected!==n&&(t.selected=n,r=!0)}r&&I(n);return}let e=N(t);e!==void 0&&n.value!==e&&(n.value=e,I(n));return}if(n instanceof HTMLInputElement&&n.type===`checkbox`){let e=P(t);e!==void 0&&n.checked!==e&&(L(n,e),I(n));return}if(n instanceof HTMLInputElement&&n.type===`radio`){N(t)===n.value&&!n.checked&&(L(n,!0),I(n));return}let r=N(t);r!==void 0&&n.value!==r&&(Se(n,r),I(n))}function we(e,t){if(Array.isArray(t))throw TypeError(`Declarative tool input must be an object`);let n=de(e);for(let[r,i]of Object.entries(t)){let t=n.get(r);if(!t||!xe(e,t,i))throw TypeError(`Invalid value for declarative form parameter "${r}"`)}for(let[e,r]of Object.entries(t))Ce(n.get(e)??[],r)}function Te(e){return[...w(e)].find(e=>!e.matches(`:disabled`)&&(e instanceof HTMLButtonElement&&e.type===`submit`||e instanceof HTMLInputElement&&[`image`,`submit`].includes(e.type)))}function Ee(e){let t=[...w(e)].filter(e=>C(e)&&e.willValidate&&!e.validity.valid).map(e=>`${e.name.trim()||`{unknown}`}: ${e.validationMessage}`).join(`. `);return new DOMException(`Form validation failed: ${t}`,`UnknownError`)}function R(e){let t=new Event(`toolactivated`);return Object.defineProperty(t,"toolName",{enumerable:!0,value:e}),t}function De(e,t,n,r){let{form:i}=e;return e.cancelPending?.(new DOMException(`Tool execution cancelled`,`UnknownError`)),new Promise((a,o)=>{let s=!1,c=()=>{Reflect.apply(EventTarget.prototype.removeEventListener,i,[`invalid`,f,!0]),b.delete(i),e.cancelPending===u&&delete e.cancelPending},l=e=>{s||(s=!0,c(),e())},u=e=>l(()=>o(e)),d=e=>{e.then(e=>l(()=>a(e)),e=>l(()=>o(e)))},f=e=>{e.isTrusted&&queueMicrotask(()=>{ce(i)||u(Ee(i))})};if(b.set(i,{complete(e){queueMicrotask(()=>{let t=y.get(e);t?d(t):e.defaultPrevented?u(new DOMException(`preventDefault() requires respondWith()`,`UnknownError`)):l(()=>a(void 0))})},direct(){l(()=>a(void 0))},respond(e){queueMicrotask(()=>{let t=y.get(e);t&&d(t)})}}),e.cancelPending=u,Reflect.apply(EventTarget.prototype.addEventListener,i,[`invalid`,f,!0]),!n)r?.focus(),window.dispatchEvent(R(t));else try{le(i,r),window.dispatchEvent(R(t))}catch(e){u(e)}})}function Oe(e,t){let n=!0,r=/* @__PURE__ */ new Map,i=/* @__PURE__ */ new Map,a=/* @__PURE__ */ new Map,o=e=>{if(!(e instanceof SubmitEvent)||!e.isTrusted||!(e.target instanceof HTMLFormElement))return;let t=b.get(e.target);t&&(v.add(e),t.complete(e))},s=e=>{if(!e.isTrusted||!(e.target instanceof HTMLFormElement))return;let t=e.target;queueMicrotask(()=>{e.defaultPrevented||r.get(t)?.cancelPending?.(new DOMException(`Tool execution cancelled by form reset`,`UnknownError`))})};function c(e){a.get(e)?.disconnect(),a.delete(e),e.removeEventListener(`reset`,s,!0),e.removeEventListener(`submit`,o,!0)}function l(e){if(a.has(e))return;let t=new MutationObserver(u);a.set(e,t),t.observe(e,{attributes:!0,characterData:!0,childList:!0,subtree:!0}),e.addEventListener(`reset`,s,!0),e.addEventListener(`submit`,o,!0)}function u(){l(e);for(let e of a.keys())e instanceof ShadowRoot&&!Reflect.get(Node.prototype,`isConnected`,e.host)&&c(e);let n=/* @__PURE__ */ new Set,o=/* @__PURE__ */ new Map,s=/* @__PURE__ */ new Map;for(let e of a.keys())for(let t of e.querySelectorAll(`*`)){let e=se(t);if(e&&l(e),!(t instanceof HTMLFormElement)||!E(t,`toolname`)||!E(t,`tooldescription`)||!oe(t))continue;let r=t;n.add(r);let a=ye(r),c=JSON.stringify(a),u=i.get(r);if(u===c)continue;let d=u!==void 0;i.delete(r);let f=s.get(a.name);if(f&&!d)i.set(r,c);else{if(f){let e=o.get(f);e&&(i.set(f,e.fingerprint),o.delete(f))}s.set(a.name,r),o.set(r,{definition:a,fingerprint:c})}}for(let e of i.keys())n.has(e)||i.delete(e);for(let[e,t]of r)o.get(e)?.fingerprint!==t.fingerprint&&(t.cancelPending?.(new DOMException(`Tool execution cancelled because its form changed`,`UnknownError`)),t.controller.abort(),r.delete(e));for(let[e,{definition:n,fingerprint:i}]of o){if(r.has(e))continue;let a=new AbortController,o={controller:a,fingerprint:i,form:e};r.set(e,o),t.registerTool({name:n.name,title:n.title,description:n.description,inputSchema:n.inputSchema,execute(t){let r=Te(e);if(!n.autosubmit&&!r)throw new DOMException(`A declarative form without toolautosubmit requires a submit button`,`UnknownError`);return we(e,t),De(o,n.name,n.autosubmit,r)}},{signal:a.signal}).catch(e=>{a.abort(),e?.name!==`AbortError`&&console.error(`[webmcp] declarative form tool "${n.name}" was not registered:`,e)})}}let d=()=>{},f=e.defaultView?.Element.prototype,p=f?Object.getOwnPropertyDescriptor(f,`attachShadow`):void 0;if(f&&p?.configurable){let t=f.attachShadow,r=function(r){let i=t.call(this,r);return n&&i.mode===`open`&&Reflect.get(Node.prototype,`ownerDocument`,this)===e&&Reflect.get(Node.prototype,`isConnected`,this)&&l(i),i};Object.defineProperty(f,"attachShadow",{...p,value:r}),d=()=>{f.attachShadow===r&&Object.defineProperty(f,"attachShadow",p)}}let m=()=>{},h=e.defaultView?.HTMLFormElement.prototype,g=h?Object.getOwnPropertyDescriptor(h,`submit`):void 0;if(h&&g?.configurable){let e=h.submit,t=function(){e.call(this),n&&b.get(this)?.direct()};Object.defineProperty(h,"submit",{...g,value:t}),m=()=>{h.submit===t&&Object.defineProperty(h,"submit",g)}}return u(),()=>{n=!1,m(),d();for(let e of a.keys())c(e);i.clear();for(let e of r.values())e.cancelPending?.(new DOMException(`Tool execution cancelled`,`UnknownError`)),e.controller.abort();r.clear()}}const z=Symbol(`registeredInputSchema`),B=Symbol(`registrationSignal`),ke=Symbol(`registrationAbort`),V=[];let H=null,U=null;function Ae(){return typeof globalThis.origin==`string`?globalThis.origin:globalThis.location?.origin??``}function W(e,t,n){let r=Object.getOwnPropertyDescriptor(e,t);try{Object.defineProperty(e,t,n)}catch(e){throw ze(),e}V.push({target:e,key:t,previous:r})}var G=class extends EventTarget{#e=/* @__PURE__ */ new Map;#t=null;#n=null;#r=e=>{this.#n?.call(this,e)};#i;#a;constructor(e){super(),this.#a=e,this.#i=e?.defaultView?.DOMException??DOMException,Object.defineProperty(this,"__isWebMCPPolyfill",{value:!0,enumerable:!1,writable:!1,configurable:!1})}get ontoolchange(){return this.#n}set ontoolchange(e){let t=typeof e==`function`?e:null;t===null?(this.#n=null,super.removeEventListener(`toolchange`,this.#r)):(this.#n===null&&super.addEventListener(`toolchange`,this.#r),this.#n=t)}async registerTool(e,t={}){_(this.#a);let n=t?.signal,r=Me(e,this.#e);if(n?.throwIfAborted(),ee(t?.exposedTo),n?.throwIfAborted(),t?.exposedTo?.length)throw new this.#i(`Cross-document tool exposure requires native WebMCP`,`NotSupportedError`);if(this.#e.set(r.name,r),n){let e=()=>{this.#o(r.name,r)&&this.#c()};r[B]=n,r[ke]=e,n.addEventListener(`abort`,e,{once:!0})}if(await this.#c(),n?.aborted)throw n.reason}async getTools(e={}){if(_(this.#a),ee(e?.fromOrigins),e?.fromOrigins?.length)throw new this.#i(`Cross-document tool discovery requires native WebMCP`,`NotSupportedError`);let t=[...this.#e.values()].map(e=>{let t=e[z],n=t===void 0?void 0:JSON.parse(t);return{name:e.name,title:e.title??``,description:e.description,...a(n)?{inputSchema:n}:{},origin:Ae(),window:globalThis.window,...e.annotations?{annotations:f(e.annotations)}:{}}}).sort((e,t)=>e.name<t.name?-1:+(e.name>t.name));return await new Promise(e=>setTimeout(e,0)),t}async executeTool(e,t,n={}){if(_(this.#a),typeof e!=`object`||!e)throw TypeError(`RegisteredTool must be an object`);for(let t of[`name`,`description`,`window`,`origin`])if(!(t in e))throw TypeError(`RegisteredTool.${t} is required`);if(ne(e.origin),e.window!==globalThis.window||e.origin!==Ae())throw c(`Tool not found: ${e.name}`);return this.#s(e.name,t,n)}static getTestingShim(e){return e.#t??=new je(e),e.#t}static getToolInfos(e){return[...e.#e.values()].map(e=>({name:e.name,description:e.description,...e[z]===void 0?{}:{inputSchema:e[z]}}))}static executeToolForTesting(e,t,n,r){return _(e.#a),e.#s(t,n,r)}static dispose(e){for(let t of e.#e.keys())e.#o(t);e.ontoolchange=null,e.#t?.dispose()}#o(e,t){let n=this.#e.get(e);if(!n||t&&n!==t)return!1;let r=n[B],i=n[ke];return r&&i&&r.removeEventListener(`abort`,i),this.#e.delete(e)}async#s(e,t,n){n?.signal?.throwIfAborted();let r=this.#e.get(e);if(!r)throw c(`Tool not found: ${e}`);let i=p(t);if(n?.signal?.throwIfAborted(),r[B]?.aborted)throw c(`Tool unregistered`);let a;try{let e=r[B];a=await h(h(Promise.resolve(r.execute(i)),e,()=>c(`Tool unregistered`)),n?.signal)}catch(e){throw n?.signal?.aborted&&e===n.signal.reason||r[B]?.aborted?e:l(e)}return m(a)}async#c(){await new Promise(e=>setTimeout(e,0)),this.dispatchEvent(new Event(`toolchange`)),this.#t?.dispatchToolChange()}};const K=function(){throw TypeError(`Illegal constructor`)};Object.defineProperty(K,"name",{value:`ModelContext`}),Object.defineProperty(K,"prototype",{value:G.prototype,writable:!1}),Object.setPrototypeOf(K,EventTarget),Object.defineProperty(G.prototype,"constructor",{configurable:!0,writable:!0,value:K}),Object.defineProperty(G.prototype,Symbol.toStringTag,{configurable:!0,value:`ModelContext`});for(let e of[`registerTool`,`getTools`,`executeTool`,`ontoolchange`]){let t=Object.getOwnPropertyDescriptor(G.prototype,e);t&&Object.defineProperty(G.prototype,e,{...t,enumerable:!0})}var je=class extends EventTarget{_ontoolchange=null;ontoolchangeListener=e=>{this._ontoolchange?.call(this,e)};#e;constructor(e){super(),this.#e=e}listTools(){return G.getToolInfos(this.#e)}executeTool(e,t,n){return G.executeToolForTesting(this.#e,e,t,n)}get ontoolchange(){return this._ontoolchange}set ontoolchange(e){let t=typeof e==`function`?e:null;t===null?(this._ontoolchange=null,super.removeEventListener(`toolchange`,this.ontoolchangeListener)):(this._ontoolchange===null&&super.addEventListener(`toolchange`,this.ontoolchangeListener),this._ontoolchange=t)}dispatchToolChange(){this.dispatchEvent(new Event(`toolchange`))}dispose(){this.ontoolchange=null}};function Me(e,t){if(!e||typeof e!=`object`)throw TypeError(`registerTool(tool) requires a tool object`);let n=s(e);if(d(n),t.has(n.name))throw u(`Tool already registered: ${n.name}`);let r=n.inputSchema===void 0?void 0:re(n.inputSchema);return{name:n.name,...n.title===void 0?{}:{title:n.title},description:n.description,...n.inputSchema===void 0?{}:{inputSchema:n.inputSchema},...n.annotations===void 0?{}:{annotations:n.annotations},execute:e=>Reflect.apply(n.execute,void 0,[e]),...r===void 0?{}:{[z]:r}}}let q=!1;const Ne=/* @__PURE__ */ new WeakMap,{modelContext:Pe}={modelContext(){if(!(this instanceof Document))throw TypeError(`Illegal invocation`);return Ne.get(this)}};Object.defineProperty(Pe,"name",{value:`get modelContext`});function Fe(e,t){Ne.set(e,t),!Object.hasOwn(Document.prototype,`modelContext`)&&W(Document.prototype,`modelContext`,{configurable:!0,enumerable:!0,get:Pe})}function Ie(e,t){W(e,`modelContext`,{configurable:!0,enumerable:!0,get(){return q||(q=!0,console.warn(`[WebMCPPolyfill] navigator.modelContext is deprecated. The May 27, 2026 WebMCP draft moved the modelContext getter from Navigator to Document — use document.modelContext instead. See https://github.com/webmachinelearning/webmcp/pull/184.`)),t}})}function Le(){let e=SubmitEvent.prototype;`agentInvoked`in e||W(e,`agentInvoked`,{configurable:!0,enumerable:!0,get(){return x(this)}}),`respondWith`in e||W(e,`respondWith`,{configurable:!0,enumerable:!0,writable:!0,value(e){ie(this,e)}})}function Re(e){if(globalThis.isSecureContext===!1)return;let t=typeof navigator>`u`?null:navigator,n=typeof document>`u`?null:document;if(!t||!n||typeof window>`u`||n.modelContext)return;let r=t.modelContext;if(V.length>0&&ze(),r){Fe(n,r);return}let i=Object.getOwnPropertyDescriptor(window,`ModelContext`);if(i&&!i.configurable){if(!Object.is(Reflect.get(window,`ModelContext`),K))throw TypeError(`Cannot install ModelContext over a non-configurable globalThis`)}else W(window,`ModelContext`,{configurable:!0,enumerable:!1,writable:!0,value:K});let a=new G(n);H=a,Fe(n,a),q=!1,Ie(t,a),Le(),e?.installTestingShim&&!t.modelContextTesting&&W(t,`modelContextTesting`,{configurable:!0,enumerable:!0,writable:!1,value:G.getTestingShim(a)}),U=Oe(n,a)}function ze(){U?.(),U=null,H&&G.dispose(H),H=null;for(let{target:e,key:t,previous:n}of[...V].reverse())n?Object.defineProperty(e,t,n):Reflect.deleteProperty(e,t);V.length=0,q=!1}var Be=/* @__PURE__ */ e({CONSEQUENTIAL_TOOL_NAMES:()=>Ze,READ_ONLY_TOOL_NAMES:()=>Qe,addWebMcpEventListener:()=>$,executeWebMcpTool:()=>qe,extractAbortSignal:()=>Q,getWebMcpEventTarget:()=>Je,getWebMcpMode:()=>He,getWebMcpTools:()=>Ke,onWebMcpToolActivated:()=>Ye,onWebMcpToolCancel:()=>Xe,parseWebMcpInputSchema:()=>Z,registerWebMcpTools:()=>et,resolveWebMcpToolAnnotations:()=>$e,setWebMcpMode:()=>Ve,unregisterWebMcpTools:()=>tt});const J=/* @__PURE__ */ new Map,Y=/* @__PURE__ */ new Set;let X=`polyfill`;function Ve(e){X=e}function He(){return X}function Ue(){try{Re()}catch(e){console.warn(`WebMCP polyfill initialization failed:`,e)}}function We(){return globalThis.originAgentCluster===void 0||globalThis.location?.protocol===`file:`||globalThis.originAgentCluster!==!1}function Ge(){if(typeof document>`u`&&typeof navigator>`u`)return null;X===`polyfill`&&Ue();try{let e=typeof document<`u`&&document.modelContext!==void 0?Reflect.get(document,`modelContext`):typeof navigator<`u`&&navigator.modelContext!==void 0?Reflect.get(navigator,`modelContext`):void 0;if(!e||typeof e!=`object`)return null;let t=e;return typeof t.registerTool==`function`?t:null}catch(e){return console.warn(`WebMCP modelContext access failed:`,e),null}}function Z(e){if(typeof e==`string`){try{let t=JSON.parse(e);if(t&&typeof t==`object`&&!Array.isArray(t))return t}catch{}return{type:`object`,properties:{}}}return e&&typeof e==`object`&&!Array.isArray(e)?e:{type:`object`,properties:{}}}function Q(e){if(e){if(typeof AbortSignal<`u`&&e instanceof AbortSignal)return e;if(typeof e==`object`&&`signal`in e&&typeof AbortSignal<`u`&&e.signal instanceof AbortSignal)return e.signal}}async function Ke(){let e=Ge();if(!e||typeof e.getTools!=`function`)return[];try{let t=await e.getTools();return Array.isArray(t)?t.map(e=>({name:e.name,...e.description?{description:e.description}:{},inputSchema:Z(e.inputSchema),...e.annotations?{annotations:e.annotations}:{},...e.execute?{execute:e.execute}:{}})):[]}catch(e){return console.warn(`Failed to retrieve WebMCP tools via getTools():`,e),[]}}async function qe(e,t,n,r){if(!e||typeof e.executeTool!=`function`)throw Error(`ModelContext executeTool is not available`);let i,a;if(typeof n==`string`){a=n;try{let e=JSON.parse(n);i=e&&typeof e==`object`&&!Array.isArray(e)?e:{}}catch{i={}}}else if(n&&typeof n==`object`&&!Array.isArray(n)){i=n;try{a=JSON.stringify(n)}catch{a=`{}`}}else i={},a=`{}`;try{return await e.executeTool(t,i,r)}catch(n){let i=typeof n?.message==`string`&&n.message.startsWith(`Failed to parse input`),o=n instanceof TypeError;if(i||o)return await e.executeTool(t,a,r);throw n}}function Je(e){let t=typeof document<`u`?document:void 0,n=typeof window<`u`?window:void 0,r=typeof navigator<`u`?navigator:void 0,i=t?.modelContext??r?.modelContext,a=i&&typeof i.addEventListener==`function`,o=n&&typeof n.addEventListener==`function`;if(e){let t=`on${e}`;if(i&&t in i&&a)return i;if(n&&t in n&&o)return n}return a?i:o?n:null}function $(e,t,n){let r=Je(e),i=typeof n==`object`?n:void 0,a=i?.listenBoth??!1,o=typeof window<`u`&&typeof window.addEventListener==`function`?window:null,s=typeof document<`u`?document:null,c=typeof navigator<`u`?navigator:null,l=s?.modelContext??c?.modelContext,u=l&&typeof l.addEventListener==`function`,d=a?r===l?o===r?null:o:u?l:null:null;if(!r&&!d)return()=>{};let f=null,p=null,m=e=>{let n=e.toolName;if(typeof n!=`string`&&`detail`in e&&typeof e.detail==`object`&&(n=e.detail?.toolName),typeof n!=`string`&&(n=``),!(`toolName`in e)||e.toolName!==n)try{Object.defineProperty(e,"toolName",{value:n,configurable:!0,enumerable:!0})}catch{}if(a&&n){if(f||=/* @__PURE__ */ new Set,f.has(n))return;f.add(n),p||=setTimeout(()=>{f?.clear(),p=null},100)}t(e)};r&&r.addEventListener(e,m,n),d&&d.addEventListener(e,m,n);let h=!1,g=()=>{h||(h=!0,p&&=(clearTimeout(p),null),r&&r.removeEventListener(e,m,n),d&&d.removeEventListener(e,m,n))};if(i?.signal){if(i.signal.aborted)return g(),()=>{};i.signal.addEventListener(`abort`,()=>g(),{once:!0})}return g}function Ye(e,t){return $(`toolactivated`,e,t)}function Xe(e,t){return $(`toolcancel`,e,t)}const Ze=/* @__PURE__ */ new Set([`bash`,`clear_chat`,`delete_file`,`delete_task`,`email_send_message`,`git_delete_branch`,`git_delete_repo`,`git_push`,`git_reset`]),Qe=/* @__PURE__ */ new Set(/* @__PURE__ */ `ask_user.detect_language.diff_files.email_read_messages.fetch_url.get_current_time.git_branches.git_diff.git_list_repos.git_log.git_read_file_at_ref.git_show.git_status.list_components.list_files.list_room_members.list_tasks.list_tool_profiles.proofread_text.read_file.remote_mcp_list_tools.rewrite_text.search_files.summarize_text.translate_text.web_search.write_text`.split(`.`));function $e(e,t){let n=Ze.has(e);return{readOnlyHint:!n&&Qe.has(e),consequentialHint:n,untrustedContentHint:!0,...t||{}}}async function et(e,r,i=t,a){let o=Array.isArray(a)?a:n;if(o.length===0)return!0;if(X===`polyfill`&&!We())return console.warn(`WebMCP polyfill registration skipped: this browser reports originAgentCluster = false. The @mcp-b/webmcp-polyfill v5.1.0+ requires an origin-keyed agent cluster (Chrome enforces this automatically for HTTPS; Firefox requires the server to send Origin-Agent-Cluster: ?1). WebMCP tools are unavailable in this browser session.`),!1;let s=Ge();if(!s)return!1;for(let t of o){if(Y.has(t.name))continue;let n=new AbortController;J.set(t.name,n),Y.add(t.name);try{let r={name:t.name,description:t.description,inputSchema:Z(t.input_schema),annotations:$e(t.name,t.annotations),execute:(n,r)=>{if(!e)throw Error(`Cannot execute tool: agent worker is not ready`);let a=Q(r);return a?.aborted?Promise.reject(/* @__PURE__ */ Error(`Tool execution aborted`)):new Promise((r,o)=>{let s=Date.now().toString(36)+Math.random().toString(36).slice(2),c=null,l=()=>{c!==null&&(clearTimeout(c),c=null),e?.removeEventListener(`message`,d),a&&u&&a.removeEventListener(`abort`,u)},u=()=>{l(),o(/* @__PURE__ */ Error(`Tool execution aborted`))};a&&a.addEventListener(`abort`,u,{once:!0}),c=setTimeout(()=>{l(),o(/* @__PURE__ */ Error(`Timeout waiting for tool execution`))},6e5);let d=e=>{let t=e.data;t&&t.type===`execute-tool-result`&&t.callId===s&&(l(),t.error?o(Error(t.error)):r(t.result))};e.addEventListener(`message`,d),e.postMessage({type:`execute-tool`,callId:s,payload:{name:t.name,input:n||{},groupId:i}})})}};await s.registerTool(r,{signal:n.signal}),await new Promise(e=>setTimeout(e,0))}catch(e){if(J.delete(t.name),Y.delete(t.name),e instanceof Error&&(e.message.includes(`already registered`)||e.message.includes(`Duplicate tool name`)))continue;if(e instanceof DOMException&&e.name===`SecurityError`)return console.warn(`WebMCP tool registration aborted: browser security policy (SecurityError) prevented registration. Remaining tools will not be registered for this session.`,e),!1;throw console.error(`Failed to register tool ${t.name}:`,e),e}}return!0}function tt(){for(let e of J.values())try{e.abort()}catch{}J.clear(),Y.clear()}export{Ve as a,et as i,Ye as n,tt as o,Xe as r,Be as s,He as t};
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DBVvNlSN.js";import{o as t}from"./config-071HSho8.js";import{t as n}from"./tools-CHxUdGxZ.js";import"./tools-C4xNCwrc.js";const r=`Tool was executed but the invocation failed. For example, the script function threw an error`,i=/^[A-Za-z0-9_.-]{1,128}$/u;function a(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function o(e){if(typeof e==`symbol`)throw TypeError(`Symbol values cannot be converted to a DOMString`);return String(e)}function s(e){let t=Reflect.get(e,`name`),n=Reflect.get(e,`description`),r=Reflect.get(e,`title`);if(t===void 0)throw TypeError(`Tool "name" is required`);if(n===void 0)throw TypeError(`Tool "description" is required`);let i=Reflect.get(e,`annotations`),s=a(i)?i:{},c=Reflect.get(e,`inputSchema`),l=Reflect.get(e,`outputSchema`),u=Reflect.get(e,`execute`);return{name:o(t),...r===void 0?{}:{title:o(r).toWellFormed()},description:o(n),...c===void 0?{}:{inputSchema:c},...l===void 0?{}:{outputSchema:l},execute:u,...i===void 0?{}:{annotations:{...s.title===void 0?{}:{title:o(s.title).toWellFormed()},readOnlyHint:!!s.readOnlyHint,...s.destructiveHint===void 0?{}:{destructiveHint:!!s.destructiveHint},...s.idempotentHint===void 0?{}:{idempotentHint:!!s.idempotentHint},...s.openWorldHint===void 0?{}:{openWorldHint:!!s.openWorldHint},untrustedContentHint:!!s.untrustedContentHint}}}}function c(e){return new DOMException(e,`UnknownError`)}function l(e){return c(e instanceof Error?`${r}: ${e.message}`:r)}function u(e){return new DOMException(e,`InvalidStateError`)}function d(e){if(e.name===``)throw u(`Tool "name" must be a non-empty string`);if(typeof e.name!=`string`||!i.test(e.name))throw u(`Tool "name" must be 1–128 characters and contain only ASCII alphanumeric, underscore, hyphen, or period`);if(typeof e.description!=`string`||e.description.length===0)throw u(`Tool "description" must be a non-empty string`);if(typeof e.execute!=`function`)throw TypeError(`Tool "execute" must be a function`)}function f(e){return{readOnlyHint:e.readOnlyHint??!1,untrustedContentHint:e.untrustedContentHint??!1}}function p(e){try{let t=JSON.parse(e);if(Array.isArray(t)||a(t))return t}catch{}throw c(`Failed to parse input arguments`)}function m(e){if(typeof e==`object`&&e||typeof e==`function`)try{let t=JSON.stringify(e);if(t)return t}catch{}return String(e)||`Operation succeeded`}function h(e,t,n=()=>t?.reason){return t?t.aborted?Promise.reject(n()):new Promise((r,i)=>{let a=()=>{o(),i(n())},o=()=>t.removeEventListener(`abort`,a);t.addEventListener(`abort`,a,{once:!0}),e.then(e=>{o(),r(e)},e=>{o(),i(e)})}):e}function g(e){let t=e.origin===`null`?e:new URL(e.origin),n=t.protocol;if([`https:`,`wss:`,`file:`,`chrome-extension:`,`moz-extension:`].includes(n))return!0;let r=t.hostname.toLowerCase(),i=r.split(`.`),a=i.length===4&&i.every(e=>/^\d{1,3}$/u.test(e)&&Number(e)<=255)&&Number(i[0])===127;return r===`::1`||r===`[::1]`||r===`localhost`||r===`localhost.`||r.endsWith(`.localhost`)||r.endsWith(`.localhost.`)||a}function ee(e){for(let t of e??[]){let e;try{e=new URL(t)}catch{throw new DOMException(`Invalid or untrustworthy origin: ${String(t)}`,`SecurityError`)}if(!g(e))throw new DOMException(`Invalid or untrustworthy origin: ${t}`,`SecurityError`)}}function _(e){if(te(),!e)return;let t=e.defaultView?.DOMException??DOMException,n=!1;try{let t=e.defaultView;n=!!(t&&t.document===e)}catch{}if(!n)throw new t(`The associated document is not fully active`,`InvalidStateError`);let r=Reflect.get(e,`permissionsPolicy`)??Reflect.get(e,`featurePolicy`);if(r&&typeof r==`object`){let e=Reflect.get(r,`features`),n=Reflect.get(r,`allowsFeature`);if(typeof e==`function`&&typeof n==`function`){let i=Reflect.apply(e,r,[]);if(Array.isArray(i)&&i.includes(`tools`)){if(Reflect.apply(n,r,[`tools`])===!0)return;throw new t(`WebMCP is disabled by Permissions Policy`,`NotAllowedError`)}}}let i=e.defaultView;if(i&&i.parent!==i){try{i.parent.document;return}catch{}throw new t(`WebMCP in cross-origin frames requires native Permissions Policy support`,`NotAllowedError`)}}function te(){if(globalThis.originAgentCluster===!1&&globalThis.location?.protocol!==`file:`)throw new DOMException(``,`SecurityError`)}function ne(e){try{if(new URL(String(e)).origin!==`null`)return}catch{}throw new DOMException(`Unsupported tool origin: ${String(e)}`,`NotSupportedError`)}function re(e){if(e===null||typeof e!=`object`&&typeof e!=`function`)throw TypeError(`inputSchema must be an object`);let t=JSON.stringify(e);if(t===void 0)throw TypeError(`inputSchema must be JSON-serializable`);return t}const v=/* @__PURE__ */ new WeakSet,y=/* @__PURE__ */ new WeakMap,b=/* @__PURE__ */ new WeakMap;function x(e){return e.isTrusted&&(v.has(e)||e.eventPhase!==Event.NONE&&e.target instanceof HTMLFormElement&&b.has(e.target))}function ie(e,t){if(!x(e))throw new DOMException(`respondWith() is only available during an agent-invoked submit event`,`InvalidStateError`);if(!e.defaultPrevented)throw new DOMException(`respondWith() requires preventDefault() during an agent-invoked submit event`,`InvalidStateError`);if(e.eventPhase===Event.NONE)throw new DOMException(`respondWith() is only available while the submit event is being dispatched`,`InvalidStateError`);v.add(e);let n=Promise.resolve(t);y.set(e,n),e.target instanceof HTMLFormElement&&b.get(e.target)?.respond(e)}const S=/* @__PURE__ */ new Set([`email`,`password`,`search`,`tel`,`text`,`url`]),ae=/* @__PURE__ */ new Set([...S,`date`,`datetime-local`,`month`,`number`,`time`,`week`]);function C(e){return e instanceof HTMLInputElement||e instanceof HTMLSelectElement||e instanceof HTMLTextAreaElement}function w(e){return Reflect.get(HTMLFormElement.prototype,`elements`,e)}function T(e,t){return Reflect.apply(Element.prototype.getAttribute,e,[t])}function E(e,t){return Reflect.apply(Element.prototype.hasAttribute,e,[t])}function oe(e){return Reflect.get(Node.prototype,`isConnected`,e)}function se(e){return Reflect.get(Element.prototype,`shadowRoot`,e)}function ce(e){return Reflect.apply(HTMLFormElement.prototype.checkValidity,e,[])}function le(e,t){Reflect.apply(HTMLFormElement.prototype.requestSubmit,e,t?[t]:[])}function ue(e){return[...w(e)].filter(e=>C(e)&&!e.matches(`:disabled`)&&!(`readOnly`in e&&e.readOnly&&(e instanceof HTMLTextAreaElement||ae.has(e.type))))}function de(e){let t=/* @__PURE__ */ new Map;for(let n of ue(e)){let e=n.name.trim(),r=t.get(e);r?r.push(n):t.set(e,[n])}return t}function fe(e){return[...e.labels??[]].map(e=>{let t=e.cloneNode(!0);return t instanceof HTMLElement?(t.querySelectorAll(`button, input, meter, output, progress, select, textarea`).forEach(e=>e.remove()),t.textContent?.trim()??``):``}).filter(Boolean).join(`; `)}function pe(e,t){for(let n=t[0]?.parentElement;n&&n!==e;n=n.parentElement)if(n instanceof HTMLFieldSetElement&&t.every(e=>n.contains(e)))return n}function me(e,t){if(t.length===1){let e=t[0];return e&&(e.getAttribute(`toolparamdescription`)||fe(e)||e.getAttribute(`aria-description`))||void 0}return pe(e,t)?.getAttribute(`toolparamdescription`)||void 0}function D(e,t,n,r){let i=me(t,n),a=i&&r?`${i} (${r})`:i||r;return a?{...e,description:a}:e}function he(e,t){let n=e.getAttribute(t);if(n===null||n.trim()===``)return;let r=Number(n);return Number.isFinite(r)?r:void 0}function ge(e,t){let n=e/t;return Math.abs(n-Math.round(n))<2**-52*16}function O(e){let t=e.getAttribute(`pattern`);if(t!==null)try{return new RegExp(t,`v`),t}catch{return}}function k(e,t=!0){let n={type:`number`},r=he(e,`min`),i=he(e,`max`);r!==void 0&&(n.minimum=r),i!==void 0&&(n.maximum=i);let a=e.getAttribute(`step`);if(a!==`any`){let t=a===null||a===``?1:Number(a),i=Number.isFinite(t)&&t>0?t:1,o=Number(e.getAttribute(`value`));ge(r??(Number.isFinite(o)?o:0),i)&&(n.multipleOf=i)}let o=t?O(e):void 0;return o!==void 0&&(n.pattern=o),n}function A(e,t){let n=e.getAttribute(`step`),r=n===null||n===``?60:Number(n),i=Number.isFinite(r)&&r>0?r:60;return i<1?`${t}(:[0-5][0-9](\\.[0-9]{1,3})?)?$`:i<60?`${t}(:[0-5][0-9])?$`:`${t}$`}function _e(e){return{anyOf:e.map(e=>({type:`string`,const:e.value,title:e.textContent??``})),enum:e.map(e=>e.value)}}function j(e){return{anyOf:e.map(e=>{let t=fe(e);return{type:`string`,const:e.value,...t?{title:t}:{}}}),enum:e.map(e=>e.value)}}function M(e,t){let n=t[0];if(n){if(t.length>1)return t.every(e=>e instanceof HTMLInputElement)?t.every(e=>e.type===`checkbox`)?D({type:`array`,items:{type:`string`,...j(t)},uniqueItems:!0},e,t):t.every(e=>e.type===`radio`)?D({type:`string`,...j(t)},e,t):void 0:void 0;if(n instanceof HTMLTextAreaElement)return D({type:`string`},e,t);if(n instanceof HTMLSelectElement){let r=_e([...n.options]);return D(n.multiple?{type:`array`,items:{type:`string`,...r},uniqueItems:!0}:{type:`string`,...r},e,t)}if(S.has(n.type)){let r={type:`string`},i=O(n);return i!==void 0&&(r.pattern=i),D(r,e,t)}if(n.type===`hidden`)return n.getAttribute(`toolparamdescription`)?D({type:`string`},e,t):void 0;if(n.type===`number`)return D(k(n),e,t);if(n.type===`range`){let r=k(n,!1);return r.minimum??=0,r.maximum??=100,D(r,e,t)}if(n.type===`checkbox`)return D({type:`boolean`},e,t);if(n.type===`radio`)return D({type:`string`,...j([n])},e,t);if(n.type===`date`)return D({type:`string`,format:`date`},e,t,`Dates MUST be provided in 'YYYY-MM-DD' format.`);if(n.type===`month`)return D({type:`string`,format:`^[0-9]{4}-(0[1-9]|1[0-2])$`},e,t);if(n.type===`week`)return D({type:`string`,format:`^[0-9]{4}-W(0[1-9]|[1-4][0-9]|5[0-3])$`},e,t);if(n.type===`time`)return D({type:`string`,format:A(n,`^([01][0-9]|2[0-3]):[0-5][0-9]`)},e,t);if(n.type===`datetime-local`)return D({type:`string`,format:A(n,`^[0-9]{4}-(0[1-9]|1[0-2])-[0-9]{2}T([01][0-9]|2[0-3]):[0-5][0-9]`)},e,t);if(n.type===`color`)return D({type:`string`,format:`^#[0-9a-zA-Z]{6}$`},e,t)}}function ve(e){let t={},n=[];for(let[r,i]of de(e)){if(!r)continue;let a=M(e,i);a&&(Object.defineProperty(t,r,{configurable:!0,enumerable:!0,value:a,writable:!0}),i.some(e=>e.required)&&n.push(r))}return{type:`object`,properties:t,required:n}}function ye(e){return{name:T(e,`toolname`)??``,title:T(e,`tooltitle`)??``,description:T(e,`tooldescription`)??``,inputSchema:ve(e),autosubmit:E(e,`toolautosubmit`)}}function N(e){if(typeof e==`string`||typeof e==`boolean`||typeof e==`number`&&Number.isFinite(e))return String(e)}function P(e){if(typeof e==`boolean`)return e;if(typeof e==`number`&&Number.isInteger(e))return e!==0;if(typeof e==`string`){if(e===`1`||e.toLowerCase()===`true`)return!0;if(e===`0`||e.toLowerCase()===`false`)return!1}}function F(e,t){if(!Array.isArray(e))return!1;let n=new Set(t);for(let t of e){let e=N(t);if(e===void 0||!n.delete(e))return!1}return!0}function be(e,t){if(t===``)return e.type!==`number`&&e.type!==`range`;let n=e.ownerDocument.createElement(`input`);return n.type=e.type,n.value=t,n.value!==``}function xe(e,t,n){let r=t[0];if(!r||!M(e,t))return!1;if(t.length>1){if(!t.every(e=>e instanceof HTMLInputElement))return!1;if(t.every(e=>e.type===`checkbox`))return F(n,new Set(t.map(e=>e.value)));if(t.every(e=>e.type===`radio`)){let e=N(n);return e!==void 0&&t.some(t=>t.value===e)}return!1}if(r instanceof HTMLSelectElement){let e=new Set([...r.options].map(e=>e.value));if(r.multiple)return F(n,e);let t=N(n);return t!==void 0&&e.has(t)}if(r instanceof HTMLTextAreaElement)return N(n)!==void 0;if(r.type===`checkbox`)return P(n)!==void 0;if(r.type===`radio`){let e=N(n);return e!==void 0&&r.value===e}let i=N(n);return i!==void 0&&be(r,i)}function I(e){e.dispatchEvent(new Event(`input`,{bubbles:!0,composed:!0})),e.dispatchEvent(new Event(`change`,{bubbles:!0}))}function Se(e,t){let n=e instanceof HTMLInputElement?HTMLInputElement.prototype:HTMLTextAreaElement.prototype;Object.getOwnPropertyDescriptor(n,`value`)?.set?.call(e,t)}function L(e,t){Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,`checked`)?.set?.call(e,t)}function Ce(e,t){let n=e[0];if(!n)return;if(e.length>1&&e.every(e=>e instanceof HTMLInputElement)){if(e.every(e=>e.type===`checkbox`)&&Array.isArray(t)){let n=new Set(t.map(N));for(let t of e){let e=n.has(t.value);t.checked!==e&&(L(t,e),I(t))}return}let n=N(t),r=e.find(e=>e.value===n);r&&!r.checked&&(L(r,!0),I(r));return}if(n instanceof HTMLSelectElement){if(n.multiple&&Array.isArray(t)){let e=new Set(t.map(N)),r=!1;for(let t of n.options){let n=e.has(t.value);t.selected!==n&&(t.selected=n,r=!0)}r&&I(n);return}let e=N(t);e!==void 0&&n.value!==e&&(n.value=e,I(n));return}if(n instanceof HTMLInputElement&&n.type===`checkbox`){let e=P(t);e!==void 0&&n.checked!==e&&(L(n,e),I(n));return}if(n instanceof HTMLInputElement&&n.type===`radio`){N(t)===n.value&&!n.checked&&(L(n,!0),I(n));return}let r=N(t);r!==void 0&&n.value!==r&&(Se(n,r),I(n))}function we(e,t){if(Array.isArray(t))throw TypeError(`Declarative tool input must be an object`);let n=de(e);for(let[r,i]of Object.entries(t)){let t=n.get(r);if(!t||!xe(e,t,i))throw TypeError(`Invalid value for declarative form parameter "${r}"`)}for(let[e,r]of Object.entries(t))Ce(n.get(e)??[],r)}function Te(e){return[...w(e)].find(e=>!e.matches(`:disabled`)&&(e instanceof HTMLButtonElement&&e.type===`submit`||e instanceof HTMLInputElement&&[`image`,`submit`].includes(e.type)))}function Ee(e){let t=[...w(e)].filter(e=>C(e)&&e.willValidate&&!e.validity.valid).map(e=>`${e.name.trim()||`{unknown}`}: ${e.validationMessage}`).join(`. `);return new DOMException(`Form validation failed: ${t}`,`UnknownError`)}function R(e){let t=new Event(`toolactivated`);return Object.defineProperty(t,"toolName",{enumerable:!0,value:e}),t}function De(e,t,n,r){let{form:i}=e;return e.cancelPending?.(new DOMException(`Tool execution cancelled`,`UnknownError`)),new Promise((a,o)=>{let s=!1,c=()=>{Reflect.apply(EventTarget.prototype.removeEventListener,i,[`invalid`,f,!0]),b.delete(i),e.cancelPending===u&&delete e.cancelPending},l=e=>{s||(s=!0,c(),e())},u=e=>l(()=>o(e)),d=e=>{e.then(e=>l(()=>a(e)),e=>l(()=>o(e)))},f=e=>{e.isTrusted&&queueMicrotask(()=>{ce(i)||u(Ee(i))})};if(b.set(i,{complete(e){queueMicrotask(()=>{let t=y.get(e);t?d(t):e.defaultPrevented?u(new DOMException(`preventDefault() requires respondWith()`,`UnknownError`)):l(()=>a(void 0))})},direct(){l(()=>a(void 0))},respond(e){queueMicrotask(()=>{let t=y.get(e);t&&d(t)})}}),e.cancelPending=u,Reflect.apply(EventTarget.prototype.addEventListener,i,[`invalid`,f,!0]),!n)r?.focus(),window.dispatchEvent(R(t));else try{le(i,r),window.dispatchEvent(R(t))}catch(e){u(e)}})}function Oe(e,t){let n=!0,r=/* @__PURE__ */ new Map,i=/* @__PURE__ */ new Map,a=/* @__PURE__ */ new Map,o=e=>{if(!(e instanceof SubmitEvent)||!e.isTrusted||!(e.target instanceof HTMLFormElement))return;let t=b.get(e.target);t&&(v.add(e),t.complete(e))},s=e=>{if(!e.isTrusted||!(e.target instanceof HTMLFormElement))return;let t=e.target;queueMicrotask(()=>{e.defaultPrevented||r.get(t)?.cancelPending?.(new DOMException(`Tool execution cancelled by form reset`,`UnknownError`))})};function c(e){a.get(e)?.disconnect(),a.delete(e),e.removeEventListener(`reset`,s,!0),e.removeEventListener(`submit`,o,!0)}function l(e){if(a.has(e))return;let t=new MutationObserver(u);a.set(e,t),t.observe(e,{attributes:!0,characterData:!0,childList:!0,subtree:!0}),e.addEventListener(`reset`,s,!0),e.addEventListener(`submit`,o,!0)}function u(){l(e);for(let e of a.keys())e instanceof ShadowRoot&&!Reflect.get(Node.prototype,`isConnected`,e.host)&&c(e);let n=/* @__PURE__ */ new Set,o=/* @__PURE__ */ new Map,s=/* @__PURE__ */ new Map;for(let e of a.keys())for(let t of e.querySelectorAll(`*`)){let e=se(t);if(e&&l(e),!(t instanceof HTMLFormElement)||!E(t,`toolname`)||!E(t,`tooldescription`)||!oe(t))continue;let r=t;n.add(r);let a=ye(r),c=JSON.stringify(a),u=i.get(r);if(u===c)continue;let d=u!==void 0;i.delete(r);let f=s.get(a.name);if(f&&!d)i.set(r,c);else{if(f){let e=o.get(f);e&&(i.set(f,e.fingerprint),o.delete(f))}s.set(a.name,r),o.set(r,{definition:a,fingerprint:c})}}for(let e of i.keys())n.has(e)||i.delete(e);for(let[e,t]of r)o.get(e)?.fingerprint!==t.fingerprint&&(t.cancelPending?.(new DOMException(`Tool execution cancelled because its form changed`,`UnknownError`)),t.controller.abort(),r.delete(e));for(let[e,{definition:n,fingerprint:i}]of o){if(r.has(e))continue;let a=new AbortController,o={controller:a,fingerprint:i,form:e};r.set(e,o),t.registerTool({name:n.name,title:n.title,description:n.description,inputSchema:n.inputSchema,execute(t){let r=Te(e);if(!n.autosubmit&&!r)throw new DOMException(`A declarative form without toolautosubmit requires a submit button`,`UnknownError`);return we(e,t),De(o,n.name,n.autosubmit,r)}},{signal:a.signal}).catch(e=>{a.abort(),e?.name!==`AbortError`&&console.error(`[webmcp] declarative form tool "${n.name}" was not registered:`,e)})}}let d=()=>{},f=e.defaultView?.Element.prototype,p=f?Object.getOwnPropertyDescriptor(f,`attachShadow`):void 0;if(f&&p?.configurable){let t=f.attachShadow,r=function(r){let i=t.call(this,r);return n&&i.mode===`open`&&Reflect.get(Node.prototype,`ownerDocument`,this)===e&&Reflect.get(Node.prototype,`isConnected`,this)&&l(i),i};Object.defineProperty(f,"attachShadow",{...p,value:r}),d=()=>{f.attachShadow===r&&Object.defineProperty(f,"attachShadow",p)}}let m=()=>{},h=e.defaultView?.HTMLFormElement.prototype,g=h?Object.getOwnPropertyDescriptor(h,`submit`):void 0;if(h&&g?.configurable){let e=h.submit,t=function(){e.call(this),n&&b.get(this)?.direct()};Object.defineProperty(h,"submit",{...g,value:t}),m=()=>{h.submit===t&&Object.defineProperty(h,"submit",g)}}return u(),()=>{n=!1,m(),d();for(let e of a.keys())c(e);i.clear();for(let e of r.values())e.cancelPending?.(new DOMException(`Tool execution cancelled`,`UnknownError`)),e.controller.abort();r.clear()}}const z=Symbol(`registeredInputSchema`),B=Symbol(`registrationSignal`),ke=Symbol(`registrationAbort`),V=[];let H=null,U=null;function Ae(){return typeof globalThis.origin==`string`?globalThis.origin:globalThis.location?.origin??``}function W(e,t,n){let r=Object.getOwnPropertyDescriptor(e,t);try{Object.defineProperty(e,t,n)}catch(e){throw ze(),e}V.push({target:e,key:t,previous:r})}var G=class extends EventTarget{#e=/* @__PURE__ */ new Map;#t=null;#n=null;#r=e=>{this.#n?.call(this,e)};#i;#a;constructor(e){super(),this.#a=e,this.#i=e?.defaultView?.DOMException??DOMException,Object.defineProperty(this,"__isWebMCPPolyfill",{value:!0,enumerable:!1,writable:!1,configurable:!1})}get ontoolchange(){return this.#n}set ontoolchange(e){let t=typeof e==`function`?e:null;t===null?(this.#n=null,super.removeEventListener(`toolchange`,this.#r)):(this.#n===null&&super.addEventListener(`toolchange`,this.#r),this.#n=t)}async registerTool(e,t={}){_(this.#a);let n=t?.signal,r=Me(e,this.#e);if(n?.throwIfAborted(),ee(t?.exposedTo),n?.throwIfAborted(),t?.exposedTo?.length)throw new this.#i(`Cross-document tool exposure requires native WebMCP`,`NotSupportedError`);if(this.#e.set(r.name,r),n){let e=()=>{this.#o(r.name,r)&&this.#c()};r[B]=n,r[ke]=e,n.addEventListener(`abort`,e,{once:!0})}if(await this.#c(),n?.aborted)throw n.reason}async getTools(e={}){if(_(this.#a),ee(e?.fromOrigins),e?.fromOrigins?.length)throw new this.#i(`Cross-document tool discovery requires native WebMCP`,`NotSupportedError`);let t=[...this.#e.values()].map(e=>{let t=e[z],n=t===void 0?void 0:JSON.parse(t);return{name:e.name,title:e.title??``,description:e.description,...a(n)?{inputSchema:n}:{},origin:Ae(),window:globalThis.window,...e.annotations?{annotations:f(e.annotations)}:{}}}).sort((e,t)=>e.name<t.name?-1:+(e.name>t.name));return await new Promise(e=>setTimeout(e,0)),t}async executeTool(e,t,n={}){if(_(this.#a),typeof e!=`object`||!e)throw TypeError(`RegisteredTool must be an object`);for(let t of[`name`,`description`,`window`,`origin`])if(!(t in e))throw TypeError(`RegisteredTool.${t} is required`);if(ne(e.origin),e.window!==globalThis.window||e.origin!==Ae())throw c(`Tool not found: ${e.name}`);return this.#s(e.name,t,n)}static getTestingShim(e){return e.#t??=new je(e),e.#t}static getToolInfos(e){return[...e.#e.values()].map(e=>({name:e.name,description:e.description,...e[z]===void 0?{}:{inputSchema:e[z]}}))}static executeToolForTesting(e,t,n,r){return _(e.#a),e.#s(t,n,r)}static dispose(e){for(let t of e.#e.keys())e.#o(t);e.ontoolchange=null,e.#t?.dispose()}#o(e,t){let n=this.#e.get(e);if(!n||t&&n!==t)return!1;let r=n[B],i=n[ke];return r&&i&&r.removeEventListener(`abort`,i),this.#e.delete(e)}async#s(e,t,n){n?.signal?.throwIfAborted();let r=this.#e.get(e);if(!r)throw c(`Tool not found: ${e}`);let i=p(t);if(n?.signal?.throwIfAborted(),r[B]?.aborted)throw c(`Tool unregistered`);let a;try{let e=r[B];a=await h(h(Promise.resolve(r.execute(i)),e,()=>c(`Tool unregistered`)),n?.signal)}catch(e){throw n?.signal?.aborted&&e===n.signal.reason||r[B]?.aborted?e:l(e)}return m(a)}async#c(){await new Promise(e=>setTimeout(e,0)),this.dispatchEvent(new Event(`toolchange`)),this.#t?.dispatchToolChange()}};const K=function(){throw TypeError(`Illegal constructor`)};Object.defineProperty(K,"name",{value:`ModelContext`}),Object.defineProperty(K,"prototype",{value:G.prototype,writable:!1}),Object.setPrototypeOf(K,EventTarget),Object.defineProperty(G.prototype,"constructor",{configurable:!0,writable:!0,value:K}),Object.defineProperty(G.prototype,Symbol.toStringTag,{configurable:!0,value:`ModelContext`});for(let e of[`registerTool`,`getTools`,`executeTool`,`ontoolchange`]){let t=Object.getOwnPropertyDescriptor(G.prototype,e);t&&Object.defineProperty(G.prototype,e,{...t,enumerable:!0})}var je=class extends EventTarget{_ontoolchange=null;ontoolchangeListener=e=>{this._ontoolchange?.call(this,e)};#e;constructor(e){super(),this.#e=e}listTools(){return G.getToolInfos(this.#e)}executeTool(e,t,n){return G.executeToolForTesting(this.#e,e,t,n)}get ontoolchange(){return this._ontoolchange}set ontoolchange(e){let t=typeof e==`function`?e:null;t===null?(this._ontoolchange=null,super.removeEventListener(`toolchange`,this.ontoolchangeListener)):(this._ontoolchange===null&&super.addEventListener(`toolchange`,this.ontoolchangeListener),this._ontoolchange=t)}dispatchToolChange(){this.dispatchEvent(new Event(`toolchange`))}dispose(){this.ontoolchange=null}};function Me(e,t){if(!e||typeof e!=`object`)throw TypeError(`registerTool(tool) requires a tool object`);let n=s(e);if(d(n),t.has(n.name))throw u(`Tool already registered: ${n.name}`);let r=n.inputSchema===void 0?void 0:re(n.inputSchema);return{name:n.name,...n.title===void 0?{}:{title:n.title},description:n.description,...n.inputSchema===void 0?{}:{inputSchema:n.inputSchema},...n.annotations===void 0?{}:{annotations:n.annotations},execute:e=>Reflect.apply(n.execute,void 0,[e]),...r===void 0?{}:{[z]:r}}}let q=!1;const Ne=/* @__PURE__ */ new WeakMap,{modelContext:Pe}={modelContext(){if(!(this instanceof Document))throw TypeError(`Illegal invocation`);return Ne.get(this)}};Object.defineProperty(Pe,"name",{value:`get modelContext`});function Fe(e,t){Ne.set(e,t),!Object.hasOwn(Document.prototype,`modelContext`)&&W(Document.prototype,`modelContext`,{configurable:!0,enumerable:!0,get:Pe})}function Ie(e,t){W(e,`modelContext`,{configurable:!0,enumerable:!0,get(){return q||(q=!0,console.warn(`[WebMCPPolyfill] navigator.modelContext is deprecated. The May 27, 2026 WebMCP draft moved the modelContext getter from Navigator to Document — use document.modelContext instead. See https://github.com/webmachinelearning/webmcp/pull/184.`)),t}})}function Le(){let e=SubmitEvent.prototype;`agentInvoked`in e||W(e,`agentInvoked`,{configurable:!0,enumerable:!0,get(){return x(this)}}),`respondWith`in e||W(e,`respondWith`,{configurable:!0,enumerable:!0,writable:!0,value(e){ie(this,e)}})}function Re(e){if(globalThis.isSecureContext===!1)return;let t=typeof navigator>`u`?null:navigator,n=typeof document>`u`?null:document;if(!t||!n||typeof window>`u`||n.modelContext)return;let r=t.modelContext;if(V.length>0&&ze(),r){Fe(n,r);return}let i=Object.getOwnPropertyDescriptor(window,`ModelContext`);if(i&&!i.configurable){if(!Object.is(Reflect.get(window,`ModelContext`),K))throw TypeError(`Cannot install ModelContext over a non-configurable globalThis`)}else W(window,`ModelContext`,{configurable:!0,enumerable:!1,writable:!0,value:K});let a=new G(n);H=a,Fe(n,a),q=!1,Ie(t,a),Le(),e?.installTestingShim&&!t.modelContextTesting&&W(t,`modelContextTesting`,{configurable:!0,enumerable:!0,writable:!1,value:G.getTestingShim(a)}),U=Oe(n,a)}function ze(){U?.(),U=null,H&&G.dispose(H),H=null;for(let{target:e,key:t,previous:n}of[...V].reverse())n?Object.defineProperty(e,t,n):Reflect.deleteProperty(e,t);V.length=0,q=!1}var Be=/* @__PURE__ */ e({CONSEQUENTIAL_TOOL_NAMES:()=>Ze,READ_ONLY_TOOL_NAMES:()=>Qe,addWebMcpEventListener:()=>$,executeWebMcpTool:()=>qe,extractAbortSignal:()=>Q,getWebMcpEventTarget:()=>Je,getWebMcpMode:()=>He,getWebMcpTools:()=>Ke,onWebMcpToolActivated:()=>Ye,onWebMcpToolCancel:()=>Xe,parseWebMcpInputSchema:()=>Z,registerWebMcpTools:()=>et,resolveWebMcpToolAnnotations:()=>$e,setWebMcpMode:()=>Ve,unregisterWebMcpTools:()=>tt});const J=/* @__PURE__ */ new Map,Y=/* @__PURE__ */ new Set;let X=`polyfill`;function Ve(e){X=e}function He(){return X}function Ue(){try{Re()}catch(e){console.warn(`WebMCP polyfill initialization failed:`,e)}}function We(){return globalThis.originAgentCluster===void 0||globalThis.location?.protocol===`file:`||globalThis.originAgentCluster!==!1}function Ge(){if(typeof document>`u`&&typeof navigator>`u`)return null;X===`polyfill`&&Ue();try{let e=typeof document<`u`&&document.modelContext!==void 0?Reflect.get(document,`modelContext`):typeof navigator<`u`&&navigator.modelContext!==void 0?Reflect.get(navigator,`modelContext`):void 0;if(!e||typeof e!=`object`)return null;let t=e;return typeof t.registerTool==`function`?t:null}catch(e){return console.warn(`WebMCP modelContext access failed:`,e),null}}function Z(e){if(typeof e==`string`){try{let t=JSON.parse(e);if(t&&typeof t==`object`&&!Array.isArray(t))return t}catch{}return{type:`object`,properties:{}}}return e&&typeof e==`object`&&!Array.isArray(e)?e:{type:`object`,properties:{}}}function Q(e){if(e){if(typeof AbortSignal<`u`&&e instanceof AbortSignal)return e;if(typeof e==`object`&&`signal`in e&&typeof AbortSignal<`u`&&e.signal instanceof AbortSignal)return e.signal}}async function Ke(){let e=Ge();if(!e||typeof e.getTools!=`function`)return[];try{let t=await e.getTools();return Array.isArray(t)?t.map(e=>({name:e.name,...e.description?{description:e.description}:{},inputSchema:Z(e.inputSchema),...e.annotations?{annotations:e.annotations}:{},...e.execute?{execute:e.execute}:{}})):[]}catch(e){return console.warn(`Failed to retrieve WebMCP tools via getTools():`,e),[]}}async function qe(e,t,n,r){if(!e||typeof e.executeTool!=`function`)throw Error(`ModelContext executeTool is not available`);let i,a;if(typeof n==`string`){a=n;try{let e=JSON.parse(n);i=e&&typeof e==`object`&&!Array.isArray(e)?e:{}}catch{i={}}}else if(n&&typeof n==`object`&&!Array.isArray(n)){i=n;try{a=JSON.stringify(n)}catch{a=`{}`}}else i={},a=`{}`;try{return await e.executeTool(t,i,r)}catch(n){let i=typeof n?.message==`string`&&n.message.startsWith(`Failed to parse input`),o=n instanceof TypeError;if(i||o)return await e.executeTool(t,a,r);throw n}}function Je(e){let t=typeof document<`u`?document:void 0,n=typeof window<`u`?window:void 0,r=typeof navigator<`u`?navigator:void 0,i=t?.modelContext??r?.modelContext,a=i&&typeof i.addEventListener==`function`,o=n&&typeof n.addEventListener==`function`;if(e){let t=`on${e}`;if(i&&t in i&&a)return i;if(n&&t in n&&o)return n}return a?i:o?n:null}function $(e,t,n){let r=Je(e),i=typeof n==`object`?n:void 0,a=i?.listenBoth??!1,o=typeof window<`u`&&typeof window.addEventListener==`function`?window:null,s=typeof document<`u`?document:null,c=typeof navigator<`u`?navigator:null,l=s?.modelContext??c?.modelContext,u=l&&typeof l.addEventListener==`function`,d=a?r===l?o===r?null:o:u?l:null:null;if(!r&&!d)return()=>{};let f=null,p=null,m=e=>{let n=e.toolName;if(typeof n!=`string`&&`detail`in e&&typeof e.detail==`object`&&(n=e.detail?.toolName),typeof n!=`string`&&(n=``),!(`toolName`in e)||e.toolName!==n)try{Object.defineProperty(e,"toolName",{value:n,configurable:!0,enumerable:!0})}catch{}if(a&&n){if(f||=/* @__PURE__ */ new Set,f.has(n))return;f.add(n),p||=setTimeout(()=>{f?.clear(),p=null},100)}t(e)};r&&r.addEventListener(e,m,n),d&&d.addEventListener(e,m,n);let h=!1,g=()=>{h||(h=!0,p&&=(clearTimeout(p),null),r&&r.removeEventListener(e,m,n),d&&d.removeEventListener(e,m,n))};if(i?.signal){if(i.signal.aborted)return g(),()=>{};i.signal.addEventListener(`abort`,()=>g(),{once:!0})}return g}function Ye(e,t){return $(`toolactivated`,e,t)}function Xe(e,t){return $(`toolcancel`,e,t)}const Ze=/* @__PURE__ */ new Set([`bash`,`clear_chat`,`delete_file`,`delete_task`,`email_send_message`,`git_delete_branch`,`git_delete_repo`,`git_push`,`git_reset`]),Qe=/* @__PURE__ */ new Set(/* @__PURE__ */ `ask_user.detect_language.diff_files.email_read_messages.fetch_url.get_current_time.git_branches.git_diff.git_list_repos.git_log.git_read_file_at_ref.git_show.git_status.list_components.list_files.list_room_members.list_tasks.list_tool_profiles.proofread_text.read_file.remote_mcp_list_tools.rewrite_text.search_files.summarize_text.translate_text.web_search.write_text`.split(`.`));function $e(e,t){let n=Ze.has(e);return{readOnlyHint:!n&&Qe.has(e),consequentialHint:n,untrustedContentHint:!0,...t||{}}}async function et(e,r,i=t,a){let o=Array.isArray(a)?a:n;if(o.length===0)return!0;if(X===`polyfill`&&!We())return console.warn(`WebMCP polyfill registration skipped: this browser reports originAgentCluster = false. The @mcp-b/webmcp-polyfill v5.1.0+ requires an origin-keyed agent cluster (Chrome enforces this automatically for HTTPS; Firefox requires the server to send Origin-Agent-Cluster: ?1). WebMCP tools are unavailable in this browser session.`),!1;let s=Ge();if(!s)return!1;for(let t of o){if(Y.has(t.name))continue;let n=new AbortController;J.set(t.name,n),Y.add(t.name);try{let r={name:t.name,description:t.description,inputSchema:Z(t.input_schema),annotations:$e(t.name,t.annotations),execute:(n,r)=>{if(!e)throw Error(`Cannot execute tool: agent worker is not ready`);let a=Q(r);return a?.aborted?Promise.reject(/* @__PURE__ */ Error(`Tool execution aborted`)):new Promise((r,o)=>{let s=Date.now().toString(36)+Math.random().toString(36).slice(2),c=null,l=()=>{c!==null&&(clearTimeout(c),c=null),e?.removeEventListener(`message`,d),a&&u&&a.removeEventListener(`abort`,u)},u=()=>{l(),o(/* @__PURE__ */ Error(`Tool execution aborted`))};a&&a.addEventListener(`abort`,u,{once:!0}),c=setTimeout(()=>{l(),o(/* @__PURE__ */ Error(`Timeout waiting for tool execution`))},6e5);let d=e=>{let t=e.data;t&&t.type===`execute-tool-result`&&t.callId===s&&(l(),t.error?o(Error(t.error)):r(t.result))};e.addEventListener(`message`,d),e.postMessage({type:`execute-tool`,callId:s,payload:{name:t.name,input:n||{},groupId:i}})})}};await s.registerTool(r,{signal:n.signal}),await new Promise(e=>setTimeout(e,0))}catch(e){if(J.delete(t.name),Y.delete(t.name),e instanceof Error&&(e.message.includes(`already registered`)||e.message.includes(`Duplicate tool name`)))continue;if(e instanceof DOMException&&e.name===`SecurityError`)return console.warn(`WebMCP tool registration aborted: browser security policy (SecurityError) prevented registration. Remaining tools will not be registered for this session.`,e),!1;throw console.error(`Failed to register tool ${t.name}:`,e),e}}return!0}function tt(){for(let e of J.values())try{e.abort()}catch{}J.clear(),Y.clear()}export{Ve as a,et as i,Ye as n,tt as o,Xe as r,Be as s,He as t};
|
package/dist/server.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import e,{createRequire as t}from"node:module";import n from"process";import r,{env as i,exit as a}from"node:process";import o from"node:http";import s from"node:https";import c,{basename as l,dirname as u,join as d,sep as f}from"node:path";import p,{constants as m,createReadStream as h,existsSync as g,promises as _,readFileSync as v,statSync as y}from"node:fs";import b,{availableParallelism as x,tmpdir as S}from"node:os";import C,{URL as w,fileURLToPath as T,format as E,pathToFileURL as D}from"node:url";import O from"tcp-port-used";import k from"compression";import A from"express";import j from"web-push";import{DatabaseSync as M}from"node:sqlite";import{createHash as ee,randomBytes as te,randomUUID as ne}from"node:crypto";import re from"cors";import{Buffer as N}from"buffer";import ie from"express-urlrewrite";import{BedrockClient as ae,ListFoundationModelsCommand as oe,ListInferenceProfilesCommand as se}from"@aws-sdk/client-bedrock";import{BedrockRuntimeClient as ce,ConverseCommand as le,ConverseStreamCommand as ue}from"@aws-sdk/client-bedrock-runtime";import{fromNodeProviderChain as de,fromSSO as fe}from"@aws-sdk/credential-providers";import*as pe from"fs";import me,{createWriteStream as he}from"fs";import*as ge from"stream";import{Readable as _e}from"stream";import ve from"node:tty";import P from"url";import ye,{constants as be,gunzipSync as xe,gzipSync as Se}from"node:zlib";import Ce,{PassThrough as we,Readable as Te,pipeline as F}from"node:stream";import{Buffer as I}from"node:buffer";import Ee,{deprecate as De,promisify as Oe,types as ke}from"node:util";import{isIP as Ae}from"node:net";import je,*as Me from"path";import*as Ne from"fs/promises";import{writeFile as Pe}from"fs/promises";import{finished as Fe}from"node:stream/promises";import{access as Ie,constants as Le,mkdir as Re,mkdtemp as ze,open as Be,readFile as Ve,readdir as He,rename as Ue,rm as We,rmdir as Ge,stat as Ke,unlink as qe,writeFile as Je}from"node:fs/promises";import{exec as Ye,execFileSync as Xe,spawn as Ze,spawnSync as Qe}from"node:child_process";import $e,{EventEmitter as et}from"node:events";import{createRequire as tt}from"module";import{lookup as nt}from"node:dns";import{Worker as rt}from"node:worker_threads";import{AsyncLocalStorage as it}from"node:async_hooks";import{pipeline as L}from"stream/promises";import{runInNewContext as at}from"node:vm";import ot from"node:readline/promises";var st=Object.create,ct=Object.defineProperty,lt=Object.getOwnPropertyDescriptor,ut=Object.getOwnPropertyNames,dt=Object.getPrototypeOf,ft=Object.prototype.hasOwnProperty,R=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(e){throw n=[e],e}},z=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),pt=(e,t)=>{let n={};for(var r in e)ct(n,r,{get:e[r],enumerable:!0});return t||ct(n,Symbol.toStringTag,{value:`Module`}),n},mt=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=ut(t),a=0,o=i.length,s;a<o;a++)s=i[a],!ft.call(e,s)&&s!==n&&ct(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=lt(t,s))||r.enumerable});return e},ht=(e,t,n)=>(n=e==null?{}:st(dt(e)),mt(t||!e||!e.__esModule||!ft.call(e,`default`)?ct(n,`default`,{value:e,enumerable:!0}):n,e)),gt=e=>ft.call(e,`module.exports`)?e[`module.exports`]:mt(ct({},`__esModule`,{value:!0}),e),B=/* @__PURE__ */ t(import.meta.url);function _t(e){bt=e}function vt(e){let t=e||bt;if(t)for(let e of yt)t.registerModelInfo(e.id,{contextWindow:e.contextWindow,maxOutput:e.maxOutput,supportsImageInput:e.supportsImages,supportsDocumentInput:e.supportsDocuments,...e.supportsAudio!==void 0&&{supportsAudioInput:e.supportsAudio},...e.supportsVideo!==void 0&&{supportsVideoInput:e.supportsVideo},...e.supportsPromptCaching!==void 0&&{supportsPromptCaching:e.supportsPromptCaching}})}var yt,bt,xt=R((()=>{yt=[{id:`claude-fable-5`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-fable-5.1`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-fable`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-sonnet-5`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-opus-5`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-opus-4.8`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-haiku-5`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsPromptCaching:!0},{id:`claude-mythos-5`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-mythos`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`gpt-6-astra`,provider:`openai`,contextWindow:105e4,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gpt-6-sol`,provider:`openai`,contextWindow:105e4,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gpt-6-luna`,provider:`openai`,contextWindow:1e6,maxOutput:64e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gpt-6`,provider:`openai`,contextWindow:105e4,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`astra`,provider:`openai`,contextWindow:105e4,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gpt-5`,provider:`openai`,contextWindow:4e5,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gemini-3.5-pro`,provider:`google`,contextWindow:2097152,maxOutput:65536,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gemini-3.5-flash`,provider:`google`,contextWindow:1048576,maxOutput:65536,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gemini-3.8-flash`,provider:`google`,contextWindow:1048576,maxOutput:65536,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gemini-2.5-pro`,provider:`google`,contextWindow:1048576,maxOutput:65536,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gemini-2.5-flash`,provider:`google`,contextWindow:1048576,maxOutput:65536,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1}]})),St,Ct,wt=R((()=>{xt(),St=class{loading=!1;models=/* @__PURE__ */ 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()}seedStaticCatalog(){vt(this)}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=this.modalitiesInclude(i,`document`,`pdf`,`file`)||(typeof e.supports_document_input==`boolean`?e.supports_document_input:typeof e.supportsDocumentInput==`boolean`?e.supportsDocumentInput:void 0),u=e.id===`openrouter/free`||this.supportedParametersInclude(e,`image`,`vision`,`audio`,`tool`,`structured`),d=this.extractReasoning(e),f=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},...l!==void 0&&{supportsDocumentInput:l},...d&&{reasoning:d},...u&&{routesByRequestFeatures:u},...f!==void 0&&{supportsPromptCaching:f}})}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)))}},Ct=new St,_t(Ct)}));function Tt(e){return e.replace(/^\/+|\/+$/g,``)}function Et(e){let t=Tt(e);return t.endsWith(`/index.html`)?t=t.slice(0,-11):t.endsWith(`index.html`)&&(t=t.slice(0,-10)),Tt(t)}function Dt(e){let t=Tt(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 Ot(){if(typeof document<`u`){let e=document.getElementById(Mt);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 kt(e,t){let n=t||Nt||Ot();if(!n||!n.routes)return null;let r=Et(e);for(let[e,t]of Object.entries(n.routes))if(t&&t.prettyPath&&Et(t.prettyPath)===r)return Dt(e);return null}function At(e){if(!e)return null;if(typeof e==`object`)return typeof e.path==`string`&&e.path.trim().length>0?{groupId:e.groupId||jt,path:e.path.trim()}:null;if(typeof e==`string`){let t=e.trim();if(!t)return null;try{let e=JSON.parse(t);if(e&&typeof e.path==`string`&&e.path.trim().length>0)return{groupId:e.groupId||jt,path:e.path.trim()}}catch{}let n=Dt(t);if(n&&n.path)return{groupId:n.groupId||jt,path:n.path};let r=Tt(t);if(r)return{groupId:jt,path:r}}return null}var jt,Mt,Nt,Pt=R((()=>{Ut(),jt=`br:main`,Mt=`shadow-claw-static-routing`,Nt=null}));function Ft(){Bt=null}function It(){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=Lt();return!n||n===`/`?``:n.replace(/^\/+|\/+$/g,``).replace(/[^a-zA-Z0-9_-]/g,`-`)}function Lt(){if(Bt!==null)return Bt;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 Bt=`/`,Bt;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 Bt=`/`,Bt;if(!n)return Bt=`/`+e[0]+`/`,Bt}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+=`/`),Bt=t,Bt}catch{}}}let t=e.pathname||`/`;if(t===`/`)return Bt=`/`,Bt;let n=t.split(`/`).filter(Boolean),r=n.findIndex(e=>Vt.has(e.toLowerCase()));return r>=0?r===0?(Bt=`/`,Bt):(Bt=`/`+n.slice(0,r).join(`/`)+`/`,Bt):kt(t)?(Bt=`/`,Bt):n.length===1&&!t.includes(`.`)?(Bt=`/`+n[0]+`/`,Bt):(Bt=`/`,Bt)}function Rt(e){let t=Lt();if(t===`/`)return e;let[n,...r]=e.split(/(?=[?#])/);if(n===t||n.startsWith(t))return e;let i=t+(n.startsWith(`/`)?n.slice(1):n);return i=i.replace(/\/{2,}/g,`/`),i+r.join(``)}function zt(e){if(!e)return!1;let t=e.split(/[?#]/,1)[0].replace(/\\/g,`/`).split(`/`).pop()||``,n=t.lastIndexOf(`.`);if(n<=0)return!1;let r=t.slice(n+1).toLowerCase();return!Ht.has(r)}var Bt,Vt,Ht,Ut=R((()=>{Pt(),Bt=null,Vt=/* @__PURE__ */ new Set([`chat`,`files`,`tasks`,`pages`,`settings`,`tools`,`channels`]),typeof globalThis<`u`&&(globalThis.__applyBasePathCacheReset=Ft),Ht=/* @__PURE__ */ new Set([`html`,`htm`,`xhtml`,`md`,`markdown`])}));function Wt(e){let t=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return RegExp(`(^|\\s)@${t}\\b`,`i`)}function Gt(e){if(!e)return tn;let t=Ct.getModelInfo(e);if(t){if(typeof t.maxOutput==`number`){let e=t.contextWindow?Math.max(8192,Math.floor(t.contextWindow/2)):32768;return Math.min(t.maxOutput,e)}if(t.contextWindow){let e;return e=t.contextWindow>=2e5?131072:t.contextWindow>=1e5?65536:32768,Math.min(e,Math.floor(t.contextWindow/2))}}for(let{pattern:t,maxTokens:n}of nn)if(e.includes(t))return n;return tn}function Kt(){let e=It();return e?`shadowclaw-${e}`:cn}function qt(e){return wn[e]||null}function Jt(){return wn[rn]}function Yt(){return Object.keys(wn)}function Xt(e){return`api_key:${e}`}function Zt(e){return Sn[e]||null}function Qt(e,t,n=`http_api`){let r=Zt(e);return r&&(r.tokenAuthByServiceType?.[n]?.[t]||r.tokenAuth[t])||null}function $t(e){return Cn[e]||null}var en,tn,nn,rn,an,on,sn,cn,ln,un,dn,fn,pn,mn,hn,gn,_n,vn,yn,bn,xn,Sn,Cn,wn,V,Tn,En,Dn,On,kn,An=R((()=>{wt(),Ut(),en=`ShadowClaw`,Wt(en),tn=8192,nn=[{pattern:`claude-fable-5`,maxTokens:128e3},{pattern:`claude-fable`,maxTokens:128e3},{pattern:`claude-mythos-5`,maxTokens:128e3},{pattern:`claude-mythos`,maxTokens:128e3},{pattern:`claude-sonnet-5`,maxTokens:128e3},{pattern:`claude-opus-5`,maxTokens:128e3},{pattern:`claude-opus-4-8`,maxTokens:128e3},{pattern:`claude-opus-4`,maxTokens:128e3},{pattern:`claude-sonnet-4`,maxTokens:64e3},{pattern:`claude-haiku-5`,maxTokens:128e3},{pattern:`claude-haiku-4`,maxTokens:64e3},{pattern:`claude-3-5`,maxTokens:8192},{pattern:`claude-3`,maxTokens:4096},{pattern:`gpt-6-luna`,maxTokens:64e3},{pattern:`gpt-6-sol`,maxTokens:128e3},{pattern:`gpt-6-astra`,maxTokens:128e3},{pattern:`astra`,maxTokens:128e3},{pattern:`gpt-6`,maxTokens:128e3},{pattern:`gpt-5`,maxTokens:128e3},{pattern:`gemini-3`,maxTokens:65536},{pattern:`gemini-2.5`,maxTokens:65536},{pattern:`gemini-2.0`,maxTokens:65536},{pattern:`gpt-4o`,maxTokens:16384},{pattern:`gpt-4.1`,maxTokens:32768},{pattern:`gpt-4-turbo`,maxTokens:4096},{pattern:`gpt-4`,maxTokens:8192},{pattern:`gpt-3.5`,maxTokens:4096},{pattern:`qwen-2.5`,maxTokens:32768},{pattern:`Qwen3.5`,maxTokens:32768},{pattern:`qwen3.5`,maxTokens:32768},{pattern:`Qwen3`,maxTokens:32768},{pattern:`qwen3`,maxTokens:32768},{pattern:`gemma-4`,maxTokens:16384},{pattern:`gemini-nano`,maxTokens:4096},{pattern:`phi-mini`,maxTokens:9216},{pattern:`aion`,maxTokens:9216},{pattern:`gemma-3-1b-it-ONNX-GQA`,maxTokens:32768},{pattern:`gemma-3-1b-it-ONNX`,maxTokens:32768},{pattern:`gemma-3`,maxTokens:32768},{pattern:`Qwen3-0.6B-ONNX`,maxTokens:32768},{pattern:`Qwen3.5`,maxTokens:32768},{pattern:`Llama-3.2`,maxTokens:32768},{pattern:`SmolLM`,maxTokens:8192},{pattern:`DeepSeek-R1`,maxTokens:32768},{pattern:`Phi-4`,maxTokens:16384},{pattern:`Phi-3.5`,maxTokens:16384},{pattern:`LFM2`,maxTokens:16384},{pattern:`gpt-oss`,maxTokens:32768},{pattern:`browser-built-in`,maxTokens:4096},{pattern:`mesh`,maxTokens:32768},{pattern:`openrouter/free`,maxTokens:32768},{pattern:`qwen3:8b`,maxTokens:4096},{pattern:`llama3:8b`,maxTokens:8192}],rn=`prompt_api`,an=102400,on=1800,sn=`wss://relay.widgetry.org/`,cn=`shadowclaw`,Kt(),ln=`shadowclaw`,un=`br:main`,dn=`server:main`,fn=`http://localhost:8888/bedrock-proxy/invoke`,pn=`http://localhost:8888/bedrock-proxy/models`,mn=`http://localhost:8888/transformers-js-proxy/chat/completions`,hn=`http://localhost:8888/transformers-js-proxy/models`,gn=`http://localhost:8888/llamafile-proxy/chat/completions`,_n=`http://localhost:8888/llamafile-proxy/models`,vn=`http://localhost:8888/agentfile-proxy/chat/completions`,yn=`http://localhost:8888/agentfile-proxy/models`,bn=`http://localhost:8888/ollama-proxy/chat/completions`,xn=`http://localhost:8888/ollama-proxy/models`,Sn={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`}}},Cn=Object.fromEntries(Object.values(Sn).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(Sn).map(e=>[e.providerId,{providerId:e.providerId,modes:e.modes,defaultMode:e.defaultMode}])),wn={openrouter:{id:`openrouter`,name:`OpenRouter`,baseUrl:`https://openrouter.ai/api/v1/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,apiKeyHeaderFormat:`Bearer {key}`,headers:{"HTTP-Referer":`https://xt-ml.github.io/shadow-claw/`,"X-OpenRouter-Title":`ShadowClaw`},defaultModel:`openrouter/free`,modelsUrl:`https://openrouter.ai/api/v1/models`,requiresApiKey:!0,supportsStreaming:!0,reasoningParam:`reasoning`},huggingface:{id:`huggingface`,name:`HuggingFace`,baseUrl:`https://router.huggingface.co/v1/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,apiKeyHeaderFormat:`Bearer {key}`,headers:{},defaultModel:`meta-llama/Llama-3.1-8B-Instruct`,modelsUrl:`https://router.huggingface.co/v1/models`,requiresApiKey:!0,supportsStreaming:!0},bedrock_proxy:{id:`bedrock_proxy`,name:`AWS Bedrock (Local Proxy)`,baseUrl:fn,format:`anthropic`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`anthropic.claude-sonnet-5-v1:0`,modelsUrl:pn,requiresApiKey:!1,supportsStreaming:!0,reasoningParam:`thinking`},gemini_proxy:{id:`gemini_proxy`,name:`Gemini (Local Proxy)`,baseUrl:`http://localhost:8888/gemini-proxy/chat/completions`,format:`openai`,apiKeyHeader:`x-goog-api-key`,headers:{},defaultModel:`gemini-2.0-flash`,modelsUrl:`http://localhost:8888/gemini-proxy/models`,requiresApiKey:!0,supportsStreaming:!0,reasoningParam:`thinkingConfig`},vertex_ai:{id:`vertex_ai`,name:`Vertex AI (Local Proxy)`,baseUrl:`http://localhost:8888/vertex-ai-proxy/chat/completions`,format:`openai`,apiKeyHeader:`x-vertex-project`,headers:{},defaultModel:`gemini-2.5-flash`,modelsUrl:`http://localhost:8888/vertex-ai-proxy/models`,requiresApiKey:!0,supportsStreaming:!0,reasoningParam:`thinkingConfig`},"mesh-llm":{id:`mesh-llm`,name:`Mesh LLM (Local Proxy)`,baseUrl:`http://localhost:8888/mesh-llm-proxy/chat/completions`,format:`mesh-llm`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`mesh`,modelsUrl:`http://localhost:8888/mesh-llm-proxy/models`,requiresApiKey:!1,supportsStreaming:!0},ollama:{id:`ollama`,name:`Ollama (Local Proxy)`,baseUrl:bn,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`qwen3:8b`,modelsUrl:xn,requiresApiKey:!1,supportsStreaming:!0},llamafile:{id:`llamafile`,name:`Llamafile (Local Proxy)`,baseUrl:gn,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`Qwen3.5-9B-Q5_K_S`,modelsUrl:_n,requiresApiKey:!1,supportsStreaming:!0},agentfile:{id:`agentfile`,name:`Agentfile (Local Binary)`,baseUrl:vn,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`default.agentfile`,modelsUrl:yn,requiresApiKey:!1,supportsStreaming:!0},transformers_js_local:{id:`transformers_js_local`,name:`Transformers.js (Local Proxy)`,baseUrl:mn,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`onnx-community/Qwen3-0.6B-ONNX`,modelsUrl:hn,models:[`onnx-community/DeepSeek-R1-Distill-Qwen-1.5B-ONNX`,`onnx-community/gemma-3-1b-it-ONNX-GQA`,`onnx-community/gemma-3-1b-it-ONNX`,`onnx-community/gemma-4-E2B-it-ONNX`,`onnx-community/gemma-4-E2B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E4B-it-ONNX`,`onnx-community/gemma-4-E4B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E9B-it-ONNX`,`onnx-community/gemma-4-12B-it-ONNX`,`onnx-community/gemma-4-12B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E27B-it-ONNX`,`onnx-community/gpt-oss-20b-ONNX`,`onnx-community/LFM2-1.2B-ONNX`,`onnx-community/Llama-3.2-1B-Instruct-ONNX`,`onnx-community/Llama-3.2-3B-Instruct-ONNX`,`onnx-community/Phi-3.5-mini-instruct-onnx-web`,`onnx-community/Phi-4-mini-instruct-ONNX`,`onnx-community/Qwen3-0.6B-ONNX`,`onnx-community/Qwen3.5-0.8B-ONNX-OPT`,`onnx-community/Qwen3.5-4B-ONNX-OPT`,`HuggingFaceTB/SmolLM3-3B-ONNX`,`LiquidAI/LFM2.5-1.2B-Thinking-ONNX`,`webgpu/Qwen3-4B-ONNX`],requiresApiKey:!1,supportsStreaming:!0},transformers_js_browser:{id:`transformers_js_browser`,name:`Transformers.js (Browser)`,baseUrl:`local://transformers-js`,format:`transformers_js`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`onnx-community/Qwen3-0.6B-ONNX`,modelsUrl:`https://huggingface.co/api/models?author=onnx-community`,models:[`onnx-community/Qwen3-0.6B-ONNX`,`onnx-community/gemma-3-1b-it-ONNX`,`onnx-community/gemma-3-1b-it-ONNX-GQA`,`onnx-community/gemma-4-E2B-it-ONNX`,`onnx-community/gemma-4-E4B-it-ONNX`,`onnx-community/gemma-4-E9B-it-ONNX`,`onnx-community/gemma-4-E27B-it-ONNX`,`onnx-community/gemma-4-12B-it-ONNX`,`onnx-community/gemma-4-E2B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E4B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-12B-it-qat-mobile-ONNX`,`onnx-community/Phi-3.5-mini-instruct-onnx-web`,`onnx-community/Phi-4-mini-instruct-ONNX`,`onnx-community/Llama-3.2-1B-Instruct-ONNX`,`onnx-community/Llama-3.2-3B-Instruct-ONNX`,`webgpu/Qwen3-4B-ONNX`,`onnx-community/DeepSeek-R1-Distill-Qwen-1.5B-ONNX`,`onnx-community/gpt-oss-20b-ONNX`,`onnx-community/LFM2-1.2B-ONNX`,`LiquidAI/LFM2.5-1.2B-Thinking-ONNX`,`HuggingFaceTB/SmolLM3-3B-ONNX`,`onnx-community/Qwen3.5-0.8B-ONNX-OPT`,`onnx-community/Qwen3.5-4B-ONNX-OPT`],requiresApiKey:!1,supportsStreaming:!1},litert_lm_browser:{id:`litert_lm_browser`,name:`LiteRT-LM (Browser)`,baseUrl:`local://litert-lm`,format:`transformers_js`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`litert-community/gemma-4-E2B-it-litert-lm`,models:[`litert-community/gemma-4-E2B-it-litert-lm`,`litert-community/gemma-4-E4B-it-litert-lm`],requiresApiKey:!1,supportsStreaming:!1},prompt_api:{id:`prompt_api`,name:`Prompt API (Browser)`,baseUrl:`builtin://language-model`,format:`prompt_api`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`browser-built-in`,models:[`browser-built-in`],requiresApiKey:!1,supportsStreaming:!1}},V={ACTIVE_TOOL_PROFILE:`active_tool_profile`,ACTIVITY_LOG_DISK_LOGGING_ENABLED:`activity_log_disk_logging_enabled`,ALLOWED_CUSTOM_ELEMENTS:`allowed_custom_elements`,ALLOWED_CUSTOM_ELEMENT_HOST_PATTERNS:`allowed_custom_element_host_patterns`,ALLOWED_IFRAME_HOST_PATTERNS:`allowed_iframe_host_patterns`,API_KEY:`api_key`,ASSISTANT_NAME:`assistant_name`,BEDROCK_AUTH_MODE:`bedrock_auth_mode`,BEDROCK_PROFILE_FALLBACK:`bedrock_profile_fallback`,BEDROCK_REGION_FALLBACK:`bedrock_region_fallback`,BUILTIN_AI_SUBAGENT_ROUTING:`builtin_ai_subagent_routing`,BUILTIN_AI_TOOLS_BACKEND:`builtin_ai_tools_backend`,CHANNEL_ENABLED_PREFIX:`channel_enabled:`,CHAT_INPUT_AREA_HEIGHT:`chat_input_area_height`,CHAT_SPLIT_VIEW_ENABLED:`chat_split_view_enabled`,CHAT_SPLIT_VIEW_HEIGHT:`chat_split_view_height`,COMPACTION_ENGINE_PREFERENCE:`compaction_engine_preference`,CONTEXT_COMPRESSION_ENABLED:`context_compression_enabled`,CONTROL_PLANE_CLIENT_ID:`control_plane_client_id`,CONTROL_PLANE_ENABLED:`control_plane_enabled`,CONTROL_PLANE_TRANSPORT:`control_plane_transport`,CONTROL_PLANE_URL:`control_plane_url`,CONVERSATIONS_HEIGHT:`conversations_height`,CUSTOM_TOOLS:`custom_tools`,DB_MIGRATED_FROM_LEGACY:`db_migrated_from_legacy`,DECLARATIVE_TOOLS_ENABLED:`declarative_tools_enabled`,DEFAULT_PINNED_PAGE:`default_pinned_page`,DIRECT_TOOL_COMMAND_POLICY:`direct_tool_command_policy`,ENABLED_TOOLS:`enabled_tools`,FILES_UPLOAD_APPEND_ULID:`files_upload_append_ulid`,GIT_ACCOUNTS:`git_accounts`,GIT_AUTHOR_EMAIL:`git_author_email`,GIT_AUTHOR_NAME:`git_author_name`,GIT_CORS_PROXY:`git_cors_proxy`,GIT_DEFAULT_ACCOUNT:`git_default_account`,GIT_PASSWORD:`git_password`,GIT_PROXY_URL:`git_proxy_url`,GIT_TOKEN:`git_token`,GIT_USERNAME:`git_username`,IMESSAGE_API_KEY:`imessage_api_key`,IMESSAGE_CHAT_IDS:`imessage_chat_ids`,IMESSAGE_SERVER_URL:`imessage_server_url`,INTEGRATION_CONNECTIONS:`integration_connections`,MARKDOWN_FRONTMATTER_CHAT:`markdown_frontmatter_chat`,MARKDOWN_FRONTMATTER_FILE_VIEWER:`markdown_frontmatter_file_viewer`,MARKDOWN_FRONTMATTER_PAGES:`markdown_frontmatter_pages`,MARKDOWN_FRONTMATTER_TASKS:`markdown_frontmatter_tasks`,LAST_ACTIVE_GROUP:`last_active_group`,LAST_ACTIVE_PAGE:`last_active_page`,LAST_SELECTED_PINNED_PAGE:`last_selected_pinned_page`,LLAMAFILE_HOST:`llamafile_host`,LLAMAFILE_MODE:`llamafile_mode`,LLAMAFILE_OFFLINE:`llamafile_offline`,LLAMAFILE_PORT:`llamafile_port`,MAIN_GROUP_INDEX_SUPPRESSED:`main_group_index_suppressed`,MAIN_GROUP_README_SUPPRESSED:`main_group_readme_suppressed`,MAX_ITERATIONS:`max_iterations`,MAX_TOKENS:`max_tokens`,MESH_LLM_HOST:`mesh_llm_host`,MODEL:`model`,OAUTH_PROVIDER_DEFINITIONS:`oauth_provider_definitions`,OPFS_MIGRATED_FROM_LEGACY:`opfs_migrated_from_legacy`,OVERRIDE_PRERENDER_SKELETON:`override_prerender_skeleton`,PAGES_ALLOW_LIST:`pages_allow_list`,PAGES_AUTO_REFRESH_INTERVAL:`pages_auto_refresh_interval`,PAGES_DENY_LIST:`pages_deny_list`,PAGES_LIST:`pages_list`,PASSPHRASE_SALT:`passphrase_salt`,PASSPHRASE_VERIFY:`passphrase_verify`,PROMPT_API_BACKEND:`prompt_api_backend`,PROMPT_API_DTYPE_STRATEGY:`prompt_api_dtype_strategy`,PROMPT_API_FALLBACK_MODEL:`prompt_api_fallback_model`,PROMPT_API_ONBOARDING_SEEN:`prompt_api_onboarding_seen`,PEERJS_MY_ALIAS:`peerjs_my_alias`,PEERJS_MY_PEER_ID:`peerjs_my_peer_id`,PEERJS_PEER_ALIASES:`peerjs_peer_aliases`,PEERJS_SERVER_HOST:`peerjs_server_host`,PEERJS_SERVER_PATH:`peerjs_server_path`,PEERJS_SERVER_PORT:`peerjs_server_port`,PEERJS_SERVER_SECURE:`peerjs_server_secure`,PEERJS_TRUSTED_PEER_IDS:`peerjs_trusted_peer_ids`,PROVIDER:`provider`,PROXY_URL:`proxy_url`,PUSH_PROXY_URL:`push_proxy_url`,RATE_LIMIT_AUTO_ADAPT:`rate_limit_auto_adapt`,RATE_LIMIT_CALLS_PER_MINUTE:`rate_limit_calls_per_minute`,REASONING_EFFORT:`reasoning_effort`,REMOTE_MCP_CONNECTIONS:`remote_mcp_connections`,SERVICE_ACCOUNTS:`service_accounts`,SERVICE_DEFAULT_ACCOUNT:`service_default_account`,SIDEBAR_CHAT_HIDDEN:`sidebar_chat_hidden`,SIDEBAR_DEFAULT_PAGE:`sidebar_default_page`,SIDEBAR_FILES_HIDDEN:`sidebar_files_hidden`,SIDEBAR_PAGES_HIDDEN:`sidebar_pages_hidden`,SIDEBAR_TASKS_HIDDEN:`sidebar_tasks_hidden`,SIDEBAR_WIDTH:`sidebar_width`,SITE_CONFIG_SEEDED:`site_config_seeded`,STATIC_MAIN_SITE_SEEDED:`static_main_site_seeded`,STORAGE_HANDLE:`storage_handle`,SUBSCRIBER_ID:`subscriber_id`,STREAMING_ENABLED:`streaming_enabled`,SUBAGENT_MAX_PARALLEL:`subagent_max_parallel`,SUBAGENT_WORKSPACE_MODE:`subagent_workspace_mode`,SUPPRESSED_PAGES_LIST:`suppressed_pages_list`,SYSTEM_PROMPT_OVERRIDE:`system_prompt_override`,TASK_SERVER_ENABLED:`task_server_enabled`,TASK_SERVER_URL:`task_server_url`,TASK_SYNC_OUTBOX:`task_sync_outbox`,TELEGRAM_BOT_TOKEN:`telegram_bot_token`,TELEGRAM_CHAT_IDS:`telegram_chat_ids`,TELEGRAM_USE_PROXY:`telegram_use_proxy`,TOOL_PROFILES:`tool_profiles`,TRANSFORMERS_JS_BACKEND:`transformers_js_backend`,TRANSFORMERS_JS_DTYPE_STRATEGY:`transformers_js_dtype_strategy`,TRIGGER_PATTERN:`trigger_pattern`,USE_PROXY:`use_proxy`,VAPID_SUBJECT:`vapid_subject`,VM_BASH_FULL_INTERNET_ACCESS:`vm_bash_full_internet_access`,VM_BASH_TIMEOUT_SEC:`vm_bash_timeout_sec`,VM_BOOT_HOST:`vm_boot_host`,VM_BOOT_MODE:`vm_boot_mode`,VM_NETWORK_RELAY_URL:`vm_network_relay_url`,WEBMCP_MODE:`webmcp_mode`,WEBMCP_TOOLS_ENABLED:`webmcp_tools_enabled`,WEB_SEARCH_PROXY_URL:`web_search_proxy_url`,WEB_SEARCH_URL:`web_search_url`,WEB_SEARCH_USE_PROXY:`web_search_use_proxy`,SEARCH_FILES_MAX_FILE_BYTES:`search_files_max_file_bytes`,SEARCH_FILES_MAX_FILES_VISITED:`search_files_max_files_visited`,SEARCH_FILES_SKIP_DIRS:`search_files_skip_dirs`},Tn=`localhost`,En=`127.0.0.1`,Dn=8888,On=`automatic`,kn=`onnx-community/Qwen3-0.6B-ONNX`}));An();let jn=null;function Mn(e=`database/push-subscriptions.db`){if(jn)return jn;jn=new M(e),jn.exec(`
|
|
1
|
+
import e,{createRequire as t}from"node:module";import n from"process";import r,{env as i,exit as a}from"node:process";import o from"node:http";import s from"node:https";import c,{basename as l,dirname as u,join as d,sep as f}from"node:path";import p,{constants as m,createReadStream as h,existsSync as g,promises as _,readFileSync as v,statSync as y}from"node:fs";import b,{availableParallelism as x,tmpdir as S}from"node:os";import C,{URL as w,fileURLToPath as T,format as E,pathToFileURL as D}from"node:url";import O from"tcp-port-used";import k from"compression";import A from"express";import j from"web-push";import{DatabaseSync as M}from"node:sqlite";import{createHash as ee,randomBytes as te,randomUUID as ne}from"node:crypto";import re from"cors";import{Buffer as N}from"buffer";import ie from"express-urlrewrite";import{BedrockClient as ae,ListFoundationModelsCommand as oe,ListInferenceProfilesCommand as se}from"@aws-sdk/client-bedrock";import{BedrockRuntimeClient as ce,ConverseCommand as le,ConverseStreamCommand as ue}from"@aws-sdk/client-bedrock-runtime";import{fromNodeProviderChain as de,fromSSO as fe}from"@aws-sdk/credential-providers";import*as pe from"fs";import me,{createWriteStream as he}from"fs";import*as ge from"stream";import{Readable as _e}from"stream";import ve from"node:tty";import P from"url";import ye,{constants as be,gunzipSync as xe,gzipSync as Se}from"node:zlib";import Ce,{PassThrough as we,Readable as Te,pipeline as F}from"node:stream";import{Buffer as I}from"node:buffer";import Ee,{deprecate as De,promisify as Oe,types as ke}from"node:util";import{isIP as Ae}from"node:net";import je,*as Me from"path";import*as Ne from"fs/promises";import{writeFile as Pe}from"fs/promises";import{finished as Fe}from"node:stream/promises";import{access as Ie,constants as Le,mkdir as Re,mkdtemp as ze,open as Be,readFile as Ve,readdir as He,rename as Ue,rm as We,rmdir as Ge,stat as Ke,unlink as qe,writeFile as Je}from"node:fs/promises";import{exec as Ye,execFileSync as Xe,spawn as Ze,spawnSync as Qe}from"node:child_process";import $e,{EventEmitter as et}from"node:events";import{createRequire as tt}from"module";import{lookup as nt}from"node:dns";import{Worker as rt}from"node:worker_threads";import{AsyncLocalStorage as it}from"node:async_hooks";import{pipeline as L}from"stream/promises";import{runInNewContext as at}from"node:vm";import ot from"node:readline/promises";var st=Object.create,ct=Object.defineProperty,lt=Object.getOwnPropertyDescriptor,ut=Object.getOwnPropertyNames,dt=Object.getPrototypeOf,ft=Object.prototype.hasOwnProperty,R=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(e){throw n=[e],e}},z=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),pt=(e,t)=>{let n={};for(var r in e)ct(n,r,{get:e[r],enumerable:!0});return t||ct(n,Symbol.toStringTag,{value:`Module`}),n},mt=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=ut(t),a=0,o=i.length,s;a<o;a++)s=i[a],!ft.call(e,s)&&s!==n&&ct(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=lt(t,s))||r.enumerable});return e},ht=(e,t,n)=>(n=e==null?{}:st(dt(e)),mt(t||!e||!e.__esModule||!ft.call(e,`default`)?ct(n,`default`,{value:e,enumerable:!0}):n,e)),gt=e=>ft.call(e,`module.exports`)?e[`module.exports`]:mt(ct({},`__esModule`,{value:!0}),e),B=/* @__PURE__ */ t(import.meta.url);function _t(e){bt=e}function vt(e){let t=e||bt;if(t)for(let e of yt)t.registerModelInfo(e.id,{contextWindow:e.contextWindow,maxOutput:e.maxOutput,supportsImageInput:e.supportsImages,supportsDocumentInput:e.supportsDocuments,...e.supportsAudio!==void 0&&{supportsAudioInput:e.supportsAudio},...e.supportsVideo!==void 0&&{supportsVideoInput:e.supportsVideo},...e.supportsPromptCaching!==void 0&&{supportsPromptCaching:e.supportsPromptCaching}})}var yt,bt,xt=R((()=>{yt=[{id:`claude-fable-5`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-fable-5.1`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-fable`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-sonnet-5`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-opus-5`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-opus-4.8`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-haiku-5`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsPromptCaching:!0},{id:`claude-mythos-5`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-mythos`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`gpt-6-astra`,provider:`openai`,contextWindow:105e4,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gpt-6-sol`,provider:`openai`,contextWindow:105e4,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gpt-6-luna`,provider:`openai`,contextWindow:1e6,maxOutput:64e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gpt-6`,provider:`openai`,contextWindow:105e4,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`astra`,provider:`openai`,contextWindow:105e4,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gpt-5`,provider:`openai`,contextWindow:4e5,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gemini-3.5-pro`,provider:`google`,contextWindow:2097152,maxOutput:65536,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gemini-3.5-flash`,provider:`google`,contextWindow:1048576,maxOutput:65536,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gemini-3.8-flash`,provider:`google`,contextWindow:1048576,maxOutput:65536,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gemini-2.5-pro`,provider:`google`,contextWindow:1048576,maxOutput:65536,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gemini-2.5-flash`,provider:`google`,contextWindow:1048576,maxOutput:65536,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1}]})),St,Ct,wt=R((()=>{xt(),St=class{loading=!1;models=/* @__PURE__ */ 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()}seedStaticCatalog(){vt(this)}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=this.modalitiesInclude(i,`document`,`pdf`,`file`)||(typeof e.supports_document_input==`boolean`?e.supports_document_input:typeof e.supportsDocumentInput==`boolean`?e.supportsDocumentInput:void 0),u=e.id===`openrouter/free`||this.supportedParametersInclude(e,`image`,`vision`,`audio`,`tool`,`structured`),d=this.extractReasoning(e),f=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},...l!==void 0&&{supportsDocumentInput:l},...d&&{reasoning:d},...u&&{routesByRequestFeatures:u},...f!==void 0&&{supportsPromptCaching:f}})}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)))}},Ct=new St,_t(Ct)}));function Tt(e){return e.replace(/^\/+|\/+$/g,``)}function Et(e){let t=Tt(e);return t.endsWith(`/index.html`)?t=t.slice(0,-11):t.endsWith(`index.html`)&&(t=t.slice(0,-10)),Tt(t)}function Dt(e){let t=Tt(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 Ot(){if(typeof document<`u`){let e=document.getElementById(Mt);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 kt(e,t){let n=t||Nt||Ot();if(!n||!n.routes)return null;let r=Et(e);for(let[e,t]of Object.entries(n.routes))if(t&&t.prettyPath&&Et(t.prettyPath)===r)return Dt(e);return null}function At(e){if(!e)return null;if(typeof e==`object`)return typeof e.path==`string`&&e.path.trim().length>0?{groupId:e.groupId||jt,path:e.path.trim()}:null;if(typeof e==`string`){let t=e.trim();if(!t)return null;try{let e=JSON.parse(t);if(e&&typeof e.path==`string`&&e.path.trim().length>0)return{groupId:e.groupId||jt,path:e.path.trim()}}catch{}let n=Dt(t);if(n&&n.path)return{groupId:n.groupId||jt,path:n.path};let r=Tt(t);if(r)return{groupId:jt,path:r}}return null}var jt,Mt,Nt,Pt=R((()=>{Ut(),jt=`br:main`,Mt=`shadow-claw-static-routing`,Nt=null}));function Ft(){Bt=null}function It(){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=Lt();return!n||n===`/`?``:n.replace(/^\/+|\/+$/g,``).replace(/[^a-zA-Z0-9_-]/g,`-`)}function Lt(){if(Bt!==null)return Bt;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 Bt=`/`,Bt;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 Bt=`/`,Bt;if(!n)return Bt=`/`+e[0]+`/`,Bt}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+=`/`),Bt=t,Bt}catch{}}}let t=e.pathname||`/`;if(t===`/`)return Bt=`/`,Bt;let n=t.split(`/`).filter(Boolean),r=n.findIndex(e=>Vt.has(e.toLowerCase()));return r>=0?r===0?(Bt=`/`,Bt):(Bt=`/`+n.slice(0,r).join(`/`)+`/`,Bt):kt(t)?(Bt=`/`,Bt):n.length===1&&!t.includes(`.`)?(Bt=`/`+n[0]+`/`,Bt):(Bt=`/`,Bt)}function Rt(e){let t=Lt();if(t===`/`)return e;let[n,...r]=e.split(/(?=[?#])/);if(n===t||n.startsWith(t))return e;let i=t+(n.startsWith(`/`)?n.slice(1):n);return i=i.replace(/\/{2,}/g,`/`),i+r.join(``)}function zt(e){if(!e)return!1;let t=e.split(/[?#]/,1)[0].replace(/\\/g,`/`).split(`/`).pop()||``,n=t.lastIndexOf(`.`);if(n<=0)return!1;let r=t.slice(n+1).toLowerCase();return!Ht.has(r)}var Bt,Vt,Ht,Ut=R((()=>{Pt(),Bt=null,Vt=/* @__PURE__ */ new Set([`chat`,`files`,`tasks`,`pages`,`settings`,`tools`,`channels`]),typeof globalThis<`u`&&(globalThis.__applyBasePathCacheReset=Ft),Ht=/* @__PURE__ */ new Set([`html`,`htm`,`xhtml`,`md`,`markdown`])}));function Wt(e){let t=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return RegExp(`(^|\\s)@${t}\\b`,`i`)}function Gt(e){if(!e)return tn;let t=Ct.getModelInfo(e);if(t){if(typeof t.maxOutput==`number`){let e=t.contextWindow?Math.max(8192,Math.floor(t.contextWindow/2)):32768;return Math.min(t.maxOutput,e)}if(t.contextWindow){let e;return e=t.contextWindow>=2e5?131072:t.contextWindow>=1e5?65536:32768,Math.min(e,Math.floor(t.contextWindow/2))}}for(let{pattern:t,maxTokens:n}of nn)if(e.includes(t))return n;return tn}function Kt(){let e=It();return e?`shadowclaw-${e}`:cn}function qt(e){return wn[e]||null}function Jt(){return wn[rn]}function Yt(){return Object.keys(wn)}function Xt(e){return`api_key:${e}`}function Zt(e){return Sn[e]||null}function Qt(e,t,n=`http_api`){let r=Zt(e);return r&&(r.tokenAuthByServiceType?.[n]?.[t]||r.tokenAuth[t])||null}function $t(e){return Cn[e]||null}var en,tn,nn,rn,an,on,sn,cn,ln,un,dn,fn,pn,mn,hn,gn,_n,vn,yn,bn,xn,Sn,Cn,wn,V,Tn,En,Dn,On,kn,An=R((()=>{wt(),Ut(),en=`ShadowClaw`,Wt(en),tn=8192,nn=[{pattern:`claude-fable-5`,maxTokens:128e3},{pattern:`claude-fable`,maxTokens:128e3},{pattern:`claude-mythos-5`,maxTokens:128e3},{pattern:`claude-mythos`,maxTokens:128e3},{pattern:`claude-sonnet-5`,maxTokens:128e3},{pattern:`claude-opus-5`,maxTokens:128e3},{pattern:`claude-opus-4-8`,maxTokens:128e3},{pattern:`claude-opus-4`,maxTokens:128e3},{pattern:`claude-sonnet-4`,maxTokens:64e3},{pattern:`claude-haiku-5`,maxTokens:128e3},{pattern:`claude-haiku-4`,maxTokens:64e3},{pattern:`claude-3-5`,maxTokens:8192},{pattern:`claude-3`,maxTokens:4096},{pattern:`gpt-6-luna`,maxTokens:64e3},{pattern:`gpt-6-sol`,maxTokens:128e3},{pattern:`gpt-6-astra`,maxTokens:128e3},{pattern:`astra`,maxTokens:128e3},{pattern:`gpt-6`,maxTokens:128e3},{pattern:`gpt-5`,maxTokens:128e3},{pattern:`gemini-3`,maxTokens:65536},{pattern:`gemini-2.5`,maxTokens:65536},{pattern:`gemini-2.0`,maxTokens:65536},{pattern:`gpt-4o`,maxTokens:16384},{pattern:`gpt-4.1`,maxTokens:32768},{pattern:`gpt-4-turbo`,maxTokens:4096},{pattern:`gpt-4`,maxTokens:8192},{pattern:`gpt-3.5`,maxTokens:4096},{pattern:`qwen-2.5`,maxTokens:32768},{pattern:`Qwen3.5`,maxTokens:32768},{pattern:`qwen3.5`,maxTokens:32768},{pattern:`Qwen3`,maxTokens:32768},{pattern:`qwen3`,maxTokens:32768},{pattern:`gemma-4`,maxTokens:16384},{pattern:`gemini-nano`,maxTokens:4096},{pattern:`phi-mini`,maxTokens:9216},{pattern:`aion`,maxTokens:9216},{pattern:`gemma-3-1b-it-ONNX-GQA`,maxTokens:32768},{pattern:`gemma-3-1b-it-ONNX`,maxTokens:32768},{pattern:`gemma-3`,maxTokens:32768},{pattern:`Qwen3-0.6B-ONNX`,maxTokens:32768},{pattern:`Qwen3.5`,maxTokens:32768},{pattern:`Llama-3.2`,maxTokens:32768},{pattern:`SmolLM`,maxTokens:8192},{pattern:`DeepSeek-R1`,maxTokens:32768},{pattern:`Phi-4`,maxTokens:16384},{pattern:`Phi-3.5`,maxTokens:16384},{pattern:`LFM2`,maxTokens:16384},{pattern:`gpt-oss`,maxTokens:32768},{pattern:`browser-built-in`,maxTokens:4096},{pattern:`mesh`,maxTokens:32768},{pattern:`openrouter/free`,maxTokens:32768},{pattern:`qwen3:8b`,maxTokens:4096},{pattern:`llama3:8b`,maxTokens:8192}],rn=`transformers_js_browser`,an=102400,on=1800,sn=`wss://relay.widgetry.org/`,cn=`shadowclaw`,Kt(),ln=`shadowclaw`,un=`br:main`,dn=`server:main`,fn=`http://localhost:8888/bedrock-proxy/invoke`,pn=`http://localhost:8888/bedrock-proxy/models`,mn=`http://localhost:8888/transformers-js-proxy/chat/completions`,hn=`http://localhost:8888/transformers-js-proxy/models`,gn=`http://localhost:8888/llamafile-proxy/chat/completions`,_n=`http://localhost:8888/llamafile-proxy/models`,vn=`http://localhost:8888/agentfile-proxy/chat/completions`,yn=`http://localhost:8888/agentfile-proxy/models`,bn=`http://localhost:8888/ollama-proxy/chat/completions`,xn=`http://localhost:8888/ollama-proxy/models`,Sn={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`}}},Cn=Object.fromEntries(Object.values(Sn).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(Sn).map(e=>[e.providerId,{providerId:e.providerId,modes:e.modes,defaultMode:e.defaultMode}])),wn={openrouter:{id:`openrouter`,name:`OpenRouter`,baseUrl:`https://openrouter.ai/api/v1/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,apiKeyHeaderFormat:`Bearer {key}`,headers:{"HTTP-Referer":`https://xt-ml.github.io/shadow-claw/`,"X-OpenRouter-Title":`ShadowClaw`},defaultModel:`openrouter/free`,modelsUrl:`https://openrouter.ai/api/v1/models`,requiresApiKey:!0,supportsStreaming:!0,reasoningParam:`reasoning`},huggingface:{id:`huggingface`,name:`HuggingFace`,baseUrl:`https://router.huggingface.co/v1/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,apiKeyHeaderFormat:`Bearer {key}`,headers:{},defaultModel:`meta-llama/Llama-3.1-8B-Instruct`,modelsUrl:`https://router.huggingface.co/v1/models`,requiresApiKey:!0,supportsStreaming:!0},bedrock_proxy:{id:`bedrock_proxy`,name:`AWS Bedrock (Local Proxy)`,baseUrl:fn,format:`anthropic`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`anthropic.claude-sonnet-5-v1:0`,modelsUrl:pn,requiresApiKey:!1,supportsStreaming:!0,reasoningParam:`thinking`},gemini_proxy:{id:`gemini_proxy`,name:`Gemini (Local Proxy)`,baseUrl:`http://localhost:8888/gemini-proxy/chat/completions`,format:`openai`,apiKeyHeader:`x-goog-api-key`,headers:{},defaultModel:`gemini-2.0-flash`,modelsUrl:`http://localhost:8888/gemini-proxy/models`,requiresApiKey:!0,supportsStreaming:!0,reasoningParam:`thinkingConfig`},vertex_ai:{id:`vertex_ai`,name:`Vertex AI (Local Proxy)`,baseUrl:`http://localhost:8888/vertex-ai-proxy/chat/completions`,format:`openai`,apiKeyHeader:`x-vertex-project`,headers:{},defaultModel:`gemini-2.5-flash`,modelsUrl:`http://localhost:8888/vertex-ai-proxy/models`,requiresApiKey:!0,supportsStreaming:!0,reasoningParam:`thinkingConfig`},"mesh-llm":{id:`mesh-llm`,name:`Mesh LLM (Local Proxy)`,baseUrl:`http://localhost:8888/mesh-llm-proxy/chat/completions`,format:`mesh-llm`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`mesh`,modelsUrl:`http://localhost:8888/mesh-llm-proxy/models`,requiresApiKey:!1,supportsStreaming:!0},ollama:{id:`ollama`,name:`Ollama (Local Proxy)`,baseUrl:bn,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`qwen3:8b`,modelsUrl:xn,requiresApiKey:!1,supportsStreaming:!0},llamafile:{id:`llamafile`,name:`Llamafile (Local Proxy)`,baseUrl:gn,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`Qwen3.5-9B-Q5_K_S`,modelsUrl:_n,requiresApiKey:!1,supportsStreaming:!0},agentfile:{id:`agentfile`,name:`Agentfile (Local Binary)`,baseUrl:vn,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`default.agentfile`,modelsUrl:yn,requiresApiKey:!1,supportsStreaming:!0},transformers_js_local:{id:`transformers_js_local`,name:`Transformers.js (Local Proxy)`,baseUrl:mn,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`onnx-community/Qwen3-0.6B-ONNX`,modelsUrl:hn,models:[`onnx-community/DeepSeek-R1-Distill-Qwen-1.5B-ONNX`,`onnx-community/gemma-3-1b-it-ONNX-GQA`,`onnx-community/gemma-3-1b-it-ONNX`,`onnx-community/gemma-4-E2B-it-ONNX`,`onnx-community/gemma-4-E2B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E4B-it-ONNX`,`onnx-community/gemma-4-E4B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E9B-it-ONNX`,`onnx-community/gemma-4-12B-it-ONNX`,`onnx-community/gemma-4-12B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E27B-it-ONNX`,`onnx-community/gpt-oss-20b-ONNX`,`onnx-community/LFM2-1.2B-ONNX`,`onnx-community/Llama-3.2-1B-Instruct-ONNX`,`onnx-community/Llama-3.2-3B-Instruct-ONNX`,`onnx-community/Phi-3.5-mini-instruct-onnx-web`,`onnx-community/Phi-4-mini-instruct-ONNX`,`onnx-community/Qwen3-0.6B-ONNX`,`onnx-community/Qwen3.5-0.8B-ONNX-OPT`,`onnx-community/Qwen3.5-4B-ONNX-OPT`,`HuggingFaceTB/SmolLM3-3B-ONNX`,`LiquidAI/LFM2.5-1.2B-Thinking-ONNX`,`webgpu/Qwen3-4B-ONNX`],requiresApiKey:!1,supportsStreaming:!0},transformers_js_browser:{id:`transformers_js_browser`,name:`Transformers.js (Browser)`,baseUrl:`local://transformers-js`,format:`transformers_js`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`onnx-community/Qwen3-0.6B-ONNX`,modelsUrl:`https://huggingface.co/api/models?author=onnx-community`,models:[`onnx-community/Qwen3-0.6B-ONNX`,`onnx-community/gemma-3-1b-it-ONNX`,`onnx-community/gemma-3-1b-it-ONNX-GQA`,`onnx-community/gemma-4-E2B-it-ONNX`,`onnx-community/gemma-4-E4B-it-ONNX`,`onnx-community/gemma-4-E9B-it-ONNX`,`onnx-community/gemma-4-E27B-it-ONNX`,`onnx-community/gemma-4-12B-it-ONNX`,`onnx-community/gemma-4-E2B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E4B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-12B-it-qat-mobile-ONNX`,`onnx-community/Phi-3.5-mini-instruct-onnx-web`,`onnx-community/Phi-4-mini-instruct-ONNX`,`onnx-community/Llama-3.2-1B-Instruct-ONNX`,`onnx-community/Llama-3.2-3B-Instruct-ONNX`,`webgpu/Qwen3-4B-ONNX`,`onnx-community/DeepSeek-R1-Distill-Qwen-1.5B-ONNX`,`onnx-community/gpt-oss-20b-ONNX`,`onnx-community/LFM2-1.2B-ONNX`,`LiquidAI/LFM2.5-1.2B-Thinking-ONNX`,`HuggingFaceTB/SmolLM3-3B-ONNX`,`onnx-community/Qwen3.5-0.8B-ONNX-OPT`,`onnx-community/Qwen3.5-4B-ONNX-OPT`],requiresApiKey:!1,supportsStreaming:!1},litert_lm_browser:{id:`litert_lm_browser`,name:`LiteRT-LM (Browser)`,baseUrl:`local://litert-lm`,format:`transformers_js`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`litert-community/gemma-4-E2B-it-litert-lm`,models:[`litert-community/gemma-4-E2B-it-litert-lm`,`litert-community/gemma-4-E4B-it-litert-lm`],requiresApiKey:!1,supportsStreaming:!1},prompt_api:{id:`prompt_api`,name:`Prompt API (Browser)`,baseUrl:`builtin://language-model`,format:`prompt_api`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`browser-built-in`,models:[`browser-built-in`],requiresApiKey:!1,supportsStreaming:!1}},V={ACTIVE_TOOL_PROFILE:`active_tool_profile`,ACTIVITY_LOG_DISK_LOGGING_ENABLED:`activity_log_disk_logging_enabled`,ALLOWED_CUSTOM_ELEMENTS:`allowed_custom_elements`,ALLOWED_CUSTOM_ELEMENT_HOST_PATTERNS:`allowed_custom_element_host_patterns`,ALLOWED_IFRAME_HOST_PATTERNS:`allowed_iframe_host_patterns`,API_KEY:`api_key`,ASSISTANT_NAME:`assistant_name`,BEDROCK_AUTH_MODE:`bedrock_auth_mode`,BEDROCK_PROFILE_FALLBACK:`bedrock_profile_fallback`,BEDROCK_REGION_FALLBACK:`bedrock_region_fallback`,BUILTIN_AI_SUBAGENT_ROUTING:`builtin_ai_subagent_routing`,BUILTIN_AI_TOOLS_BACKEND:`builtin_ai_tools_backend`,CHANNEL_ENABLED_PREFIX:`channel_enabled:`,CHAT_INPUT_AREA_HEIGHT:`chat_input_area_height`,CHAT_SPLIT_VIEW_ENABLED:`chat_split_view_enabled`,CHAT_SPLIT_VIEW_HEIGHT:`chat_split_view_height`,COMPACTION_ENGINE_PREFERENCE:`compaction_engine_preference`,CONTEXT_COMPRESSION_ENABLED:`context_compression_enabled`,CONTROL_PLANE_CLIENT_ID:`control_plane_client_id`,CONTROL_PLANE_ENABLED:`control_plane_enabled`,CONTROL_PLANE_TRANSPORT:`control_plane_transport`,CONTROL_PLANE_URL:`control_plane_url`,CONVERSATIONS_HEIGHT:`conversations_height`,CUSTOM_TOOLS:`custom_tools`,DB_MIGRATED_FROM_LEGACY:`db_migrated_from_legacy`,DECLARATIVE_TOOLS_ENABLED:`declarative_tools_enabled`,DEFAULT_PINNED_PAGE:`default_pinned_page`,DIRECT_TOOL_COMMAND_POLICY:`direct_tool_command_policy`,ENABLED_TOOLS:`enabled_tools`,FILES_UPLOAD_APPEND_ULID:`files_upload_append_ulid`,GIT_ACCOUNTS:`git_accounts`,GIT_AUTHOR_EMAIL:`git_author_email`,GIT_AUTHOR_NAME:`git_author_name`,GIT_CORS_PROXY:`git_cors_proxy`,GIT_DEFAULT_ACCOUNT:`git_default_account`,GIT_PASSWORD:`git_password`,GIT_PROXY_URL:`git_proxy_url`,GIT_TOKEN:`git_token`,GIT_USERNAME:`git_username`,IMESSAGE_API_KEY:`imessage_api_key`,IMESSAGE_CHAT_IDS:`imessage_chat_ids`,IMESSAGE_SERVER_URL:`imessage_server_url`,INTEGRATION_CONNECTIONS:`integration_connections`,MARKDOWN_FRONTMATTER_CHAT:`markdown_frontmatter_chat`,MARKDOWN_FRONTMATTER_FILE_VIEWER:`markdown_frontmatter_file_viewer`,MARKDOWN_FRONTMATTER_PAGES:`markdown_frontmatter_pages`,MARKDOWN_FRONTMATTER_TASKS:`markdown_frontmatter_tasks`,LAST_ACTIVE_GROUP:`last_active_group`,LAST_ACTIVE_PAGE:`last_active_page`,LAST_SELECTED_PINNED_PAGE:`last_selected_pinned_page`,LLAMAFILE_HOST:`llamafile_host`,LLAMAFILE_MODE:`llamafile_mode`,LLAMAFILE_OFFLINE:`llamafile_offline`,LLAMAFILE_PORT:`llamafile_port`,MAIN_GROUP_INDEX_SUPPRESSED:`main_group_index_suppressed`,MAIN_GROUP_README_SUPPRESSED:`main_group_readme_suppressed`,MAX_ITERATIONS:`max_iterations`,MAX_TOKENS:`max_tokens`,MESH_LLM_HOST:`mesh_llm_host`,MODEL:`model`,OAUTH_PROVIDER_DEFINITIONS:`oauth_provider_definitions`,OPFS_MIGRATED_FROM_LEGACY:`opfs_migrated_from_legacy`,OVERRIDE_PRERENDER_SKELETON:`override_prerender_skeleton`,PAGES_ALLOW_LIST:`pages_allow_list`,PAGES_AUTO_REFRESH_INTERVAL:`pages_auto_refresh_interval`,PAGES_DENY_LIST:`pages_deny_list`,PAGES_LIST:`pages_list`,PASSPHRASE_SALT:`passphrase_salt`,PASSPHRASE_VERIFY:`passphrase_verify`,PROMPT_API_BACKEND:`prompt_api_backend`,PROMPT_API_DTYPE_STRATEGY:`prompt_api_dtype_strategy`,PROMPT_API_FALLBACK_MODEL:`prompt_api_fallback_model`,PROMPT_API_ONBOARDING_SEEN:`prompt_api_onboarding_seen`,TRANSFORMERS_JS_ONBOARDING_SEEN:`transformers_js_onboarding_seen`,PEERJS_MY_ALIAS:`peerjs_my_alias`,PEERJS_MY_PEER_ID:`peerjs_my_peer_id`,PEERJS_PEER_ALIASES:`peerjs_peer_aliases`,PEERJS_SERVER_HOST:`peerjs_server_host`,PEERJS_SERVER_PATH:`peerjs_server_path`,PEERJS_SERVER_PORT:`peerjs_server_port`,PEERJS_SERVER_SECURE:`peerjs_server_secure`,PEERJS_TRUSTED_PEER_IDS:`peerjs_trusted_peer_ids`,PROVIDER:`provider`,PROXY_URL:`proxy_url`,PUSH_PROXY_URL:`push_proxy_url`,RATE_LIMIT_AUTO_ADAPT:`rate_limit_auto_adapt`,RATE_LIMIT_CALLS_PER_MINUTE:`rate_limit_calls_per_minute`,REASONING_EFFORT:`reasoning_effort`,REMOTE_MCP_CONNECTIONS:`remote_mcp_connections`,SERVICE_ACCOUNTS:`service_accounts`,SERVICE_DEFAULT_ACCOUNT:`service_default_account`,SIDEBAR_CHAT_HIDDEN:`sidebar_chat_hidden`,SIDEBAR_DEFAULT_PAGE:`sidebar_default_page`,SIDEBAR_FILES_HIDDEN:`sidebar_files_hidden`,SIDEBAR_PAGES_HIDDEN:`sidebar_pages_hidden`,SIDEBAR_TASKS_HIDDEN:`sidebar_tasks_hidden`,SIDEBAR_WIDTH:`sidebar_width`,SITE_CONFIG_SEEDED:`site_config_seeded`,STATIC_MAIN_SITE_SEEDED:`static_main_site_seeded`,STORAGE_HANDLE:`storage_handle`,SUBSCRIBER_ID:`subscriber_id`,STREAMING_ENABLED:`streaming_enabled`,SUBAGENT_MAX_PARALLEL:`subagent_max_parallel`,SUBAGENT_WORKSPACE_MODE:`subagent_workspace_mode`,SUPPRESSED_PAGES_LIST:`suppressed_pages_list`,SYSTEM_PROMPT_OVERRIDE:`system_prompt_override`,TASK_SERVER_ENABLED:`task_server_enabled`,TASK_SERVER_URL:`task_server_url`,TASK_SYNC_OUTBOX:`task_sync_outbox`,TELEGRAM_BOT_TOKEN:`telegram_bot_token`,TELEGRAM_CHAT_IDS:`telegram_chat_ids`,TELEGRAM_USE_PROXY:`telegram_use_proxy`,TOOL_PROFILES:`tool_profiles`,TRANSFORMERS_JS_BACKEND:`transformers_js_backend`,TRANSFORMERS_JS_DTYPE_STRATEGY:`transformers_js_dtype_strategy`,TRIGGER_PATTERN:`trigger_pattern`,USE_PROXY:`use_proxy`,VAPID_SUBJECT:`vapid_subject`,VM_BASH_FULL_INTERNET_ACCESS:`vm_bash_full_internet_access`,VM_BASH_TIMEOUT_SEC:`vm_bash_timeout_sec`,VM_BOOT_HOST:`vm_boot_host`,VM_BOOT_MODE:`vm_boot_mode`,VM_NETWORK_RELAY_URL:`vm_network_relay_url`,WEBMCP_MODE:`webmcp_mode`,WEBMCP_TOOLS_ENABLED:`webmcp_tools_enabled`,WEB_SEARCH_PROXY_URL:`web_search_proxy_url`,WEB_SEARCH_URL:`web_search_url`,WEB_SEARCH_USE_PROXY:`web_search_use_proxy`,SEARCH_FILES_MAX_FILE_BYTES:`search_files_max_file_bytes`,SEARCH_FILES_MAX_FILES_VISITED:`search_files_max_files_visited`,SEARCH_FILES_SKIP_DIRS:`search_files_skip_dirs`},Tn=`localhost`,En=`127.0.0.1`,Dn=8888,On=`automatic`,kn=`onnx-community/Qwen3-0.6B-ONNX`}));An();let jn=null;function Mn(e=`database/push-subscriptions.db`){if(jn)return jn;jn=new M(e),jn.exec(`
|
|
2
2
|
CREATE TABLE IF NOT EXISTS vapid_keys (
|
|
3
3
|
id INTEGER PRIMARY KEY CHECK (id = 1),
|
|
4
4
|
public_key TEXT NOT NULL,
|
package/package.json
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
compareLocalModelCandidates,
|
|
3
|
+
getSortedTransformersJsBrowserModelIds,
|
|
3
4
|
isLikelyInstructionModelId,
|
|
5
|
+
ORIGINAL_PROMPT_API_MODELS,
|
|
6
|
+
renderTransformersJsBrowserModelOptions,
|
|
4
7
|
} from "./model-ranking.js";
|
|
5
8
|
|
|
6
9
|
describe("model-ranking", () => {
|
|
@@ -47,25 +50,136 @@ describe("model-ranking", () => {
|
|
|
47
50
|
expect(compareLocalModelCandidates(b, a, "local")).toBeGreaterThan(0);
|
|
48
51
|
});
|
|
49
52
|
|
|
50
|
-
it("ranks
|
|
51
|
-
const
|
|
52
|
-
id: "onnx-community/
|
|
53
|
+
it("ranks the original 4 prompt api models at the top in order, with remainder models alphabetized for transformers_js_browser", () => {
|
|
54
|
+
const qwen3 = {
|
|
55
|
+
id: "onnx-community/Qwen3-0.6B-ONNX",
|
|
53
56
|
supportsTools: true,
|
|
54
57
|
contextLength: 32768,
|
|
55
58
|
};
|
|
56
|
-
const
|
|
57
|
-
id: "
|
|
59
|
+
const gemma3 = {
|
|
60
|
+
id: "onnx-community/gemma-3-1b-it-ONNX-GQA",
|
|
61
|
+
supportsTools: true,
|
|
62
|
+
contextLength: 8192,
|
|
63
|
+
};
|
|
64
|
+
const gemma4E2B = {
|
|
65
|
+
id: "onnx-community/gemma-4-E2B-it-ONNX",
|
|
66
|
+
supportsTools: true,
|
|
67
|
+
contextLength: 128000,
|
|
68
|
+
};
|
|
69
|
+
const gemma4E4B = {
|
|
70
|
+
id: "onnx-community/gemma-4-E4B-it-ONNX",
|
|
71
|
+
supportsTools: true,
|
|
72
|
+
contextLength: 128000,
|
|
73
|
+
};
|
|
74
|
+
const remainderA = {
|
|
75
|
+
id: "HuggingFaceTB/SmolLM3-3B-ONNX",
|
|
76
|
+
supportsTools: true,
|
|
77
|
+
contextLength: 8192,
|
|
78
|
+
};
|
|
79
|
+
const remainderZ = {
|
|
80
|
+
id: "webgpu/Qwen3-4B-ONNX",
|
|
58
81
|
supportsTools: true,
|
|
59
82
|
contextLength: 8192,
|
|
60
83
|
};
|
|
61
84
|
|
|
85
|
+
// Top 4 in order
|
|
86
|
+
expect(
|
|
87
|
+
compareLocalModelCandidates(qwen3, gemma3, "transformers_js_browser"),
|
|
88
|
+
).toBeLessThan(0);
|
|
62
89
|
expect(
|
|
63
90
|
compareLocalModelCandidates(
|
|
64
|
-
|
|
65
|
-
|
|
91
|
+
gemma3,
|
|
92
|
+
gemma4E2B,
|
|
66
93
|
"transformers_js_browser",
|
|
67
94
|
),
|
|
68
95
|
).toBeLessThan(0);
|
|
96
|
+
expect(
|
|
97
|
+
compareLocalModelCandidates(
|
|
98
|
+
gemma4E2B,
|
|
99
|
+
gemma4E4B,
|
|
100
|
+
"transformers_js_browser",
|
|
101
|
+
),
|
|
102
|
+
).toBeLessThan(0);
|
|
103
|
+
|
|
104
|
+
// Top 4 vs remainder
|
|
105
|
+
expect(
|
|
106
|
+
compareLocalModelCandidates(
|
|
107
|
+
gemma4E4B,
|
|
108
|
+
remainderA,
|
|
109
|
+
"transformers_js_browser",
|
|
110
|
+
),
|
|
111
|
+
).toBeLessThan(0);
|
|
112
|
+
expect(
|
|
113
|
+
compareLocalModelCandidates(
|
|
114
|
+
remainderA,
|
|
115
|
+
qwen3,
|
|
116
|
+
"transformers_js_browser",
|
|
117
|
+
),
|
|
118
|
+
).toBeGreaterThan(0);
|
|
119
|
+
|
|
120
|
+
// Remainder alphabetized
|
|
121
|
+
expect(
|
|
122
|
+
compareLocalModelCandidates(
|
|
123
|
+
remainderA,
|
|
124
|
+
remainderZ,
|
|
125
|
+
"transformers_js_browser",
|
|
126
|
+
),
|
|
127
|
+
).toBeLessThan(0);
|
|
128
|
+
expect(
|
|
129
|
+
compareLocalModelCandidates(
|
|
130
|
+
remainderZ,
|
|
131
|
+
remainderA,
|
|
132
|
+
"transformers_js_browser",
|
|
133
|
+
),
|
|
134
|
+
).toBeGreaterThan(0);
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
it("getSortedTransformersJsBrowserModelIds returns original 4 at top and remainder alphabetized", () => {
|
|
138
|
+
const sorted = getSortedTransformersJsBrowserModelIds();
|
|
139
|
+
expect(sorted.slice(0, 4)).toEqual(ORIGINAL_PROMPT_API_MODELS);
|
|
140
|
+
const remainder = sorted.slice(4);
|
|
141
|
+
const remainderSorted = [...remainder].sort((a, b) => a.localeCompare(b));
|
|
142
|
+
expect(remainder).toEqual(remainderSorted);
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
it("renderTransformersJsBrowserModelOptions renders top 4 models, hr separator, and alphabetized remainder", () => {
|
|
146
|
+
const html = renderTransformersJsBrowserModelOptions(
|
|
147
|
+
"onnx-community/Qwen3-0.6B-ONNX",
|
|
148
|
+
);
|
|
149
|
+
|
|
150
|
+
// Verify top 4 models rendered with curated labels
|
|
151
|
+
expect(html).toContain(
|
|
152
|
+
'<option value="onnx-community/Qwen3-0.6B-ONNX" selected>onnx-community/Qwen3-0.6B-ONNX — Recommended (Fast, Compact & Tool Calling)</option>',
|
|
153
|
+
);
|
|
154
|
+
expect(html).toContain(
|
|
155
|
+
'<option value="onnx-community/gemma-3-1b-it-ONNX-GQA">onnx-community/gemma-3-1b-it-ONNX-GQA — Alternative (1B Parameters)</option>',
|
|
156
|
+
);
|
|
157
|
+
expect(html).toContain(
|
|
158
|
+
'<option value="onnx-community/gemma-4-E2B-it-ONNX">onnx-community/gemma-4-E2B-it-ONNX — Alternative (2B Parameters, 128k Context)</option>',
|
|
159
|
+
);
|
|
160
|
+
expect(html).toContain(
|
|
161
|
+
'<option value="onnx-community/gemma-4-E4B-it-ONNX">onnx-community/gemma-4-E4B-it-ONNX — Alternative (4B Parameters, 128k Context)</option>',
|
|
162
|
+
);
|
|
163
|
+
|
|
164
|
+
// Verify <hr /> separator is placed after top 4 models
|
|
165
|
+
const idxGemma4E4B = html.indexOf(
|
|
166
|
+
'value="onnx-community/gemma-4-E4B-it-ONNX"',
|
|
167
|
+
);
|
|
168
|
+
const idxHr = html.indexOf("<hr>");
|
|
169
|
+
const idxSmol = html.indexOf('value="HuggingFaceTB/SmolLM3-3B-ONNX"');
|
|
170
|
+
|
|
171
|
+
expect(idxHr).toBeGreaterThan(idxGemma4E4B);
|
|
172
|
+
expect(idxHr).toBeLessThan(idxSmol);
|
|
173
|
+
|
|
174
|
+
// Verify custom model option is appended when requested
|
|
175
|
+
const withCustom = renderTransformersJsBrowserModelOptions(
|
|
176
|
+
"onnx-community/Qwen3-0.6B-ONNX",
|
|
177
|
+
undefined,
|
|
178
|
+
{ includeCustom: true },
|
|
179
|
+
);
|
|
180
|
+
expect(withCustom).toContain(
|
|
181
|
+
'<option value="__custom__">-- Custom Model ID --</option>',
|
|
182
|
+
);
|
|
69
183
|
});
|
|
70
184
|
|
|
71
185
|
it("handles various model sizes (0.7b, 1.1b, 1.5b, 7b, unstated size)", () => {
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { LocalModelRankCandidate } from "../../types.js";
|
|
2
|
+
import { PROVIDERS } from "../../../config/config.js";
|
|
3
|
+
import { escapeHtml } from "../../../utils/utils.js";
|
|
2
4
|
|
|
3
5
|
function parseModelBillionsFromId(modelId: string): number | null {
|
|
4
6
|
const normalized = modelId.toLowerCase();
|
|
@@ -109,11 +111,46 @@ function getLocalModelSortScore(
|
|
|
109
111
|
return score;
|
|
110
112
|
}
|
|
111
113
|
|
|
114
|
+
export const ORIGINAL_PROMPT_API_MODELS: readonly string[] = [
|
|
115
|
+
"onnx-community/Qwen3-0.6B-ONNX",
|
|
116
|
+
"onnx-community/gemma-3-1b-it-ONNX-GQA",
|
|
117
|
+
"onnx-community/gemma-4-E2B-it-ONNX",
|
|
118
|
+
"onnx-community/gemma-4-E4B-it-ONNX",
|
|
119
|
+
];
|
|
120
|
+
|
|
121
|
+
export const CURATED_PROMPT_API_MODEL_LABELS: Record<string, string> = {
|
|
122
|
+
"onnx-community/Qwen3-0.6B-ONNX":
|
|
123
|
+
"onnx-community/Qwen3-0.6B-ONNX — Recommended (Fast, Compact & Tool Calling)",
|
|
124
|
+
"onnx-community/gemma-3-1b-it-ONNX-GQA":
|
|
125
|
+
"onnx-community/gemma-3-1b-it-ONNX-GQA — Alternative (1B Parameters)",
|
|
126
|
+
"onnx-community/gemma-4-E2B-it-ONNX":
|
|
127
|
+
"onnx-community/gemma-4-E2B-it-ONNX — Alternative (2B Parameters, 128k Context)",
|
|
128
|
+
"onnx-community/gemma-4-E4B-it-ONNX":
|
|
129
|
+
"onnx-community/gemma-4-E4B-it-ONNX — Alternative (4B Parameters, 128k Context)",
|
|
130
|
+
};
|
|
131
|
+
|
|
112
132
|
export function compareLocalModelCandidates(
|
|
113
133
|
a: LocalModelRankCandidate,
|
|
114
134
|
b: LocalModelRankCandidate,
|
|
115
135
|
providerId: string,
|
|
116
136
|
): number {
|
|
137
|
+
if (providerId === "transformers_js_browser") {
|
|
138
|
+
const idxA = ORIGINAL_PROMPT_API_MODELS.indexOf(a.id);
|
|
139
|
+
const idxB = ORIGINAL_PROMPT_API_MODELS.indexOf(b.id);
|
|
140
|
+
|
|
141
|
+
if (idxA !== -1 && idxB !== -1) {
|
|
142
|
+
return idxA - idxB;
|
|
143
|
+
}
|
|
144
|
+
if (idxA !== -1) {
|
|
145
|
+
return -1;
|
|
146
|
+
}
|
|
147
|
+
if (idxB !== -1) {
|
|
148
|
+
return 1;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return a.id.localeCompare(b.id);
|
|
152
|
+
}
|
|
153
|
+
|
|
117
154
|
const scoreA = getLocalModelSortScore(a, providerId);
|
|
118
155
|
const scoreB = getLocalModelSortScore(b, providerId);
|
|
119
156
|
|
|
@@ -127,3 +164,63 @@ export function compareLocalModelCandidates(
|
|
|
127
164
|
|
|
128
165
|
return a.id.localeCompare(b.id);
|
|
129
166
|
}
|
|
167
|
+
|
|
168
|
+
export function getSortedTransformersJsBrowserModelIds(
|
|
169
|
+
modelItems?: Array<string | { id?: string; name?: string }>,
|
|
170
|
+
): string[] {
|
|
171
|
+
const staticModels = PROVIDERS.transformers_js_browser?.models || [];
|
|
172
|
+
const rawItems =
|
|
173
|
+
modelItems && modelItems.length > 0 ? modelItems : staticModels;
|
|
174
|
+
|
|
175
|
+
const idSet = new Set<string>();
|
|
176
|
+
for (const item of rawItems) {
|
|
177
|
+
const id = typeof item === "string" ? item : item?.id || item?.name;
|
|
178
|
+
if (id && typeof id === "string" && id.trim()) {
|
|
179
|
+
idSet.add(id.trim());
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
for (const id of ORIGINAL_PROMPT_API_MODELS) {
|
|
183
|
+
idSet.add(id);
|
|
184
|
+
}
|
|
185
|
+
for (const id of staticModels) {
|
|
186
|
+
idSet.add(id);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
const allIds = Array.from(idSet);
|
|
190
|
+
return allIds.sort((a, b) =>
|
|
191
|
+
compareLocalModelCandidates(
|
|
192
|
+
{ id: a, supportsTools: isLikelyInstructionModelId(a), contextLength: 0 },
|
|
193
|
+
{ id: b, supportsTools: isLikelyInstructionModelId(b), contextLength: 0 },
|
|
194
|
+
"transformers_js_browser",
|
|
195
|
+
),
|
|
196
|
+
);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
export function renderTransformersJsBrowserModelOptions(
|
|
200
|
+
selectedModel: string,
|
|
201
|
+
modelItems?: Array<string | { id?: string; name?: string }>,
|
|
202
|
+
options?: { includeCustom?: boolean },
|
|
203
|
+
): string {
|
|
204
|
+
const sortedModelIds = getSortedTransformersJsBrowserModelIds(modelItems);
|
|
205
|
+
let html = "";
|
|
206
|
+
for (let i = 0; i < sortedModelIds.length; i++) {
|
|
207
|
+
const id = sortedModelIds[i];
|
|
208
|
+
const isSelected = id === selectedModel ? " selected" : "";
|
|
209
|
+
const label =
|
|
210
|
+
CURATED_PROMPT_API_MODEL_LABELS[id] ||
|
|
211
|
+
`${id}${isLikelyInstructionModelId(id) ? " 🛠️" : ""}`;
|
|
212
|
+
html += `<option value="${escapeHtml(id)}"${isSelected}>${escapeHtml(label)}</option>`;
|
|
213
|
+
if (i === 3 && sortedModelIds.length > 4) {
|
|
214
|
+
html += "<hr>";
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (options?.includeCustom) {
|
|
218
|
+
const isCustomSelected =
|
|
219
|
+
selectedModel === "__custom__" ||
|
|
220
|
+
(selectedModel !== "" && !sortedModelIds.includes(selectedModel))
|
|
221
|
+
? " selected"
|
|
222
|
+
: "";
|
|
223
|
+
html += `<option value="__custom__"${isCustomSelected}>-- Custom Model ID --</option>`;
|
|
224
|
+
}
|
|
225
|
+
return html;
|
|
226
|
+
}
|