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{L as e,N as t,b as n,h as r,r as i}from"./config-Dqn5OMfC.js";import{t as a}from"./getConfig-DSieAlsi.js";import{t as o}from"./setConfig-CIdSs9rh.js";import{t as s}from"./ulid-BSJxYh6W.js";import{n as c,r as l}from"./crypto-4ETeplbS.js";function u(e){return!e||e.authMode===`token`||e.authMode===`pat`?`token`:e.authMode===`basic`?`basic`:e.authMode===`oauth`||e.oauthProviderId||e.oauthClientId||e.oauthClientSecret||e.refreshToken||e.accessTokenExpiresAt||e.tokenType||e.oauthReauthRequired?`oauth`:`token`}function d(e){return u(e)}function f(e,t){return d(e)!==`oauth`||e.oauthReauthRequired||!e.refreshToken||!e.oauthProviderId||!e.oauthClientId?!1:t.forceRefresh?!0:e.accessTokenExpiresAt?e.accessTokenExpiresAt<=Date.now()+6e4:!1}async function p(e,t,n){if(!n.refreshToken||!n.oauthProviderId||!n.oauthClientId)return n;let r=await c(n.refreshToken);if(!r)return n;let a=n.oauthClientSecret?await c(n.oauthClientSecret):void 0,s=async r=>{let a=t.findIndex(e=>e.id===n.id);a!==-1&&(t[a]=r,await o(e,i.SERVICE_ACCOUNTS,t))},u=async()=>{let e=(n.oauthRefreshFailureCount||0)+1,t=e>=3,r={...n,oauthRefreshFailureCount:e,oauthReauthRequired:t,oauthReauthRequiredAt:t?n.oauthReauthRequiredAt||Date.now():void 0};return await s(r),r};try{let e=await fetch(`/oauth/refresh`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({providerId:n.oauthProviderId,clientId:n.oauthClientId,clientSecret:a,refreshToken:r,scope:n.scopes,tokenUrl:n.oauthCustomTokenUrl})});if(!e.ok)return u();let t=await e.json();if(!t.accessToken)return u();let i=await l(t.accessToken);if(!i)return u();let o=n.refreshToken;if(t.refreshToken){let e=await l(t.refreshToken);e&&(o=e)}let c={...n,token:i,refreshToken:o,accessTokenExpiresAt:t.expiresIn?Date.now()+t.expiresIn*1e3:n.accessTokenExpiresAt,tokenType:t.tokenType||n.tokenType,scopes:t.scope?t.scope.split(/[\s,]+/).map(e=>e.trim()).filter(Boolean):n.scopes,oauthRefreshFailureCount:0,oauthReauthRequired:!1,oauthReauthRequiredAt:void 0};return await s(c),c}catch{return u()}}function m(e,n){if(e.oauthProviderId){let n=t(e.oauthProviderId);if(n)return n}let i=[e.service,e.hostPattern,n].filter(e=>!!e).map(e=>e.toLowerCase());for(let e of Object.values(r))if([e.providerId,...e.aliases||[]].map(e=>e.toLowerCase()).some(e=>i.some(t=>t.includes(e))))return e;return null}function h(e,t){let n=d(e),r=m(e,t);if(r){let e;return e=n===`oauth`?r.tokenAuth.oauth:n===`basic`&&r.tokenAuth.basic?r.tokenAuth.basic:r.tokenAuth.token,{headerName:e.headerName,headerPrefix:e.headerPrefix||``}}return{headerName:`Authorization`,headerPrefix:n===`basic`?`Basic `:`Bearer `}}function g(e,t){let n=[],r=-1,i=t.toLowerCase();for(let t of e){if(!t.hostPattern)continue;let e=t.hostPattern.toLowerCase();i.includes(e)&&(e.length>r?(r=e.length,n.length=0,n.push(t)):e.length===r&&n.push(t))}return n}function _(e,t){return e.length?t&&e.find(e=>d(e)===t)||e[0]:void 0}async function v(e,t,n={}){let r=await a(e,i.SERVICE_ACCOUNTS),o=Array.isArray(r)?r:[];if(o.length===0)return;let s;if(n.accountId&&(s=o.find(e=>e.id===n.accountId)),!s&&t){let e=g(o,t);s=n.authMode?_(e,n.authMode):_(e,e[0]?m(e[0],t)?.defaultMode:void 0)}if(!s){let t=await a(e,i.SERVICE_DEFAULT_ACCOUNT);t&&(s=o.find(e=>e.id===t))}if(!s&&n.authMode&&(s=_(o,n.authMode)),s||=o[0],!s)return;if(f(s,n)&&(s=await p(e,o,s)),d(s)===`oauth`&&s.oauthReauthRequired)return{token:``,service:s.service,hostPattern:s.hostPattern,headerName:`Authorization`,headerValue:``,accountId:s.id,authMode:`oauth`,reauthRequired:!0};let l=``;s.token&&(l=await c(s.token)??``);let{headerName:u,headerPrefix:v}=h(s,t),y=l;d(s)===`basic`&&s.basicUsername&&(y=btoa(`${s.basicUsername}:${l}`));let b=v?`${v}${y}`:y;return{token:l,service:s.service,hostPattern:s.hostPattern,headerName:u,headerValue:b,accountId:s.id,authMode:d(s)}}function y(e){return u(e)}function b(e){switch(e){case`azure-devops`:return`azure_devops`;default:return e}}function x(e){if(!e)return`generic`;let t=e.toLowerCase();return t.includes(`github`)?`github`:t.includes(`dev.azure.com`)||t.includes(`visualstudio.com`)?`azure-devops`:t.includes(`gitlab`)?`gitlab`:`generic`}function S(t){if(t.reauthRequired)return{};let n=t.provider||x(t.hostPattern||``),r=b(n),i=t.authMode||`token`;if(t.token&&r===`azure_devops`&&e(r,i,`git_remote`)?.headerPrefix===`Basic `)return{Authorization:`Basic ${btoa(`:`+t.token)}`};if(n===`azure-devops`&&t.username&&t.password)return{Authorization:`Basic ${btoa(t.username+`:`+t.password)}`};if(t.token){let n=e(r,i,`git_remote`);return n?.headerName?{[n.headerName]:`${n.headerPrefix||``}${t.token}`}:{Authorization:`Bearer ${t.token}`}}return{}}function C(e){try{let t=new URL(e),n=t.pathname.replace(/\/+$/,``);return n?t.hostname+n:t.hostname}catch{return}}function w(e,t){let n=t.toLowerCase(),r=[],i=-1;for(let t of e){if(!t.hostPattern)continue;let e=t.hostPattern.toLowerCase();n.includes(e)&&(e.length>i?(i=e.length,r.length=0,r.push(t)):e.length===i&&r.push(t))}return r}function T(e,t){if(!e.length)return;if(!t)return e[0];let n=e.find(e=>y(e)===t);if(n)return n;if(t===`token`){let t=e.find(e=>y(e)===`token`&&!e.authMode);if(t)return t}return e[0]}async function E(e){if(e)return await c(e)??void 0}function D(e,t){return y(e)!==`oauth`||e.oauthReauthRequired||!e.refreshToken||!e.oauthProviderId||!e.oauthClientId?!1:t.forceRefresh?!0:e.accessTokenExpiresAt?e.accessTokenExpiresAt<=Date.now()+6e4:!1}async function O(e,t,n){if(!n.refreshToken||!n.oauthProviderId||!n.oauthClientId)return n;let r=await E(n.refreshToken);if(!r)return n;let a=n.oauthClientSecret?await E(n.oauthClientSecret):void 0,s=async r=>{let a=t.findIndex(e=>e.id===n.id);a!==-1&&(t[a]=r,await o(e,i.GIT_ACCOUNTS,t))},c=async()=>{let e=(n.oauthRefreshFailureCount||0)+1,t=e>=3,r={...n,oauthRefreshFailureCount:e,oauthReauthRequired:t,oauthReauthRequiredAt:t?n.oauthReauthRequiredAt||Date.now():void 0};return await s(r),r};try{let e=await fetch(`/oauth/refresh`,{body:JSON.stringify({clientId:n.oauthClientId,clientSecret:a,providerId:n.oauthProviderId,refreshToken:r,scope:n.scopes}),headers:{"content-type":`application/json`},method:`POST`});if(!e.ok)return c();let t=await e.json();if(!t.accessToken)return c();let i=await l(t.accessToken);if(!i)return c();let o=n.refreshToken;if(t.refreshToken){let e=await l(t.refreshToken);e&&(o=e)}let u={...n,token:i,refreshToken:o,accessTokenExpiresAt:t.expiresIn?Date.now()+t.expiresIn*1e3:n.accessTokenExpiresAt,tokenType:t.tokenType||n.tokenType,scopes:t.scope?t.scope.split(/[\s,]+/).map(e=>e.trim()).filter(Boolean):n.scopes,oauthRefreshFailureCount:0,oauthReauthRequired:!1,oauthReauthRequiredAt:void 0};return await s(u),u}catch{return c()}}async function k(e,t,n={}){let r=await a(e,i.GIT_ACCOUNTS);return Array.isArray(r)&&r.length>0?ee(e,r,t,n):A(e)}async function ee(e,t,n,r={}){let o;if(r.accountId&&(o=t.find(e=>e.id===r.accountId)),!o&&n){let e=C(n);e&&(o=T(w(t,e),r.authMode))}if(!o){let r=await a(e,i.GIT_DEFAULT_ACCOUNT);if(r){let e=t.find(e=>e.id===r);if(e){if(!n)o=e;else{let t=C(n);if(t&&e.hostPattern){let n=t?.toLowerCase(),r=e.hostPattern.toLowerCase();n?.includes(r)&&(o=e)}}}}}if(!o&&!n&&r.authMode&&(o=T(t,r.authMode)),!o&&!n&&(o=t[0]),!o)return{authMode:`token`,authorEmail:void 0,authorName:void 0,password:void 0,provider:`generic`,token:void 0,username:void 0};D(o,r)&&(o=await O(e,t,o));let s=o.provider||x(o.hostPattern||``);return y(o)===`oauth`&&o.oauthReauthRequired?{accountId:o.id,authMode:`oauth`,authorEmail:o.authorEmail||void 0,authorName:o.authorName||void 0,hostPattern:o.hostPattern||void 0,password:void 0,provider:s,reauthRequired:!0,token:void 0,username:o.username||void 0}:{accountId:o.id,authMode:y(o),authorEmail:o.authorEmail||void 0,authorName:o.authorName||void 0,hostPattern:o.hostPattern||void 0,password:await E(o.password),provider:s,token:await E(o.token),username:o.username||void 0}}async function A(e){let t=await a(e,i.GIT_TOKEN),n=await a(e,i.GIT_PASSWORD);return{authMode:`token`,authorEmail:await a(e,i.GIT_AUTHOR_EMAIL)||void 0,authorName:await a(e,i.GIT_AUTHOR_NAME)||void 0,password:n?await E(n):void 0,provider:`generic`,token:t?await E(t):void 0,username:await a(e,i.GIT_USERNAME)||void 0}}function j(e){if(typeof e!=`string`||!e.trim())return!1;try{let t=new URL(e);return t.protocol===`https:`||t.protocol===`http:`}catch{return!1}}function M(e,t){if(!e||typeof e!=`object`)return null;let n=e;if(!n.serviceType||!n.authType)return null;if(n.serviceType!==t)throw Error(`Credential ref serviceType must match connection serviceType`);return{serviceType:n.serviceType,authType:n.authType,providerId:n.providerId||void 0,accountId:n.accountId||void 0,gitAccountId:n.gitAccountId||void 0,headerName:n.headerName||void 0,encryptedValue:n.encryptedValue||void 0}}function N(e){if(!e||typeof e!=`object`)return null;let t=e;return!t.id||!t.label||!t.serviceType||!t.transport||typeof t.enabled!=`boolean`||typeof t.createdAt!=`number`||typeof t.updatedAt!=`number`||!j(t.serverUrl)||t.serviceType!==`mcp_remote`&&t.serviceType!==`webmcp_local`||t.transport!==`streamable_http`&&t.transport!==`sse`&&t.transport!==`websocket`?null:{id:t.id,label:t.label,serviceType:t.serviceType,serverUrl:t.serverUrl,transport:t.transport,enabled:t.enabled,autoReconnectOAuth:t.autoReconnectOAuth===!0,createdAt:t.createdAt,updatedAt:t.updatedAt,credentialRef:M(t.credentialRef,t.serviceType)}}async function P(e){let t=await a(e,i.REMOTE_MCP_CONNECTIONS);if(!Array.isArray(t))return[];let n=[];for(let e of t){let t=N(e);t&&n.push(t)}return n}async function F(e,t){await o(e,i.REMOTE_MCP_CONNECTIONS,t)}async function te(e){return P(e)}async function I(e,t){if(!t)return null;let n=await P(e);return n.find(e=>e.id===t)||n.find(e=>e.label.toLowerCase()===t.toLowerCase())||null}async function ne(e,t){if(!t?.label?.trim())throw Error(`Connection label is required`);if(!j(t.serverUrl))throw Error(`Connection serverUrl must be an absolute http(s) URL`);let n=t.serviceType||`mcp_remote`;if(n!==`mcp_remote`&&n!==`webmcp_local`)throw Error(`Unsupported serviceType for remote MCP connection`);let r=await P(e),i=Date.now();if(t.id){let a=r.findIndex(e=>e.id===t.id);if(a!==-1){let o=r[a],s={...o,label:t.label.trim(),serviceType:n,serverUrl:t.serverUrl,transport:t.transport,enabled:t.enabled??o.enabled,autoReconnectOAuth:t.autoReconnectOAuth??o.autoReconnectOAuth,updatedAt:i};return r[a]=s,await F(e,r),s}}let a={id:t.id||s(),label:t.label.trim(),serviceType:n,serverUrl:t.serverUrl,transport:t.transport,enabled:t.enabled??!0,autoReconnectOAuth:t.autoReconnectOAuth??!1,createdAt:i,updatedAt:i,credentialRef:null};return r.push(a),await F(e,r),a}async function re(e,t,n){if(!t)return null;let r=await P(e),i=r.findIndex(e=>e.id===t);if(i===-1)return null;let a=r[i],o=n?M(n,a.serviceType):null,s={...a,credentialRef:o,updatedAt:Date.now()};return r[i]=s,await F(e,r),s}async function L(e,t){if(!t)return!1;let n=await P(e),r=n.filter(e=>e.id!==t);return r.length!==n.length&&(await F(e,r),!0)}function R(e){return e===`oauth`?`oauth`:`token`}async function z(e,t,n={}){let r=await I(e,t);if(!r)return null;let i=r.credentialRef;if(!i||i.authType===`none`)return{connection:r,authType:`none`,headers:{}};if(i.authType===`custom_header`){if(!i.headerName||!i.encryptedValue)return{connection:r,authType:`custom_header`,headers:{}};let e=await c(i.encryptedValue);return{connection:r,authType:`custom_header`,headers:e?{[i.headerName]:e}:{}}}let a=R(i.authType);if(i.accountId){let t=await v(e,r.serverUrl,{accountId:i.accountId,authMode:a,forceRefresh:n.forceRefresh});return t?t.reauthRequired?{connection:r,authType:i.authType,headers:{},reauthRequired:!0}:{connection:r,authType:i.authType,headers:t.headerValue?{[t.headerName]:t.headerValue}:{}}:{connection:r,authType:i.authType,headers:{}}}if(i.gitAccountId){let t=await k(e,r.serverUrl,{accountId:i.gitAccountId,authMode:a,forceRefresh:n.forceRefresh});return t.reauthRequired?{connection:r,authType:i.authType,headers:{},reauthRequired:!0}:{connection:r,authType:i.authType,headers:S(t)}}return{connection:r,authType:i.authType,headers:{}}}const B=/* @__PURE__ */ new Map;function V(e){return typeof e==`object`&&!!e&&`method`in e&&`id`in e&&!(`result`in e)&&!(`error`in e)}function H(e){let t=(e.requestedSchema||{}).properties||{},n={};for(let[e,r]of Object.entries(t))`default`in r?n[e]=r.default:r.type===`boolean`&&(n[e]=!0);return n}var U=class extends Error{constructor(e){super(e),this.name=`InvalidRemoteMcpSessionError`}},W=class extends Error{status;constructor(e,t){super(t),this.name=`HttpRemoteMcpError`,this.status=e}},G=class extends Error{connectionId;constructor(e){super(`OAuth reconnect required for remote MCP connection`),this.name=`McpReauthRequiredError`,this.connectionId=e}};function K(e,t){return!e.headers||typeof e.headers.get!=`function`?null:e.headers.get(t)}function ie(e){return/no valid session id provided/i.test(e)}function q(e,t){let n=t&&`error`in t?t.error.message||`Remote MCP JSON-RPC error`:``;return ie(n)?new U(n):e.ok?Error(n||`Remote MCP JSON-RPC error`):new W(e.status,n?`Remote MCP HTTP error: ${e.status} (${n})`:`Remote MCP HTTP error: ${e.status}`)}function ae(e){if(!e)return null;let t=null,n=e.split(/\r?\n/);for(let e of n){let n=e.trim();if(!n.startsWith(`data:`))continue;let r=n.slice(5).trim();if(r&&r!==`[DONE]`)try{let e=JSON.parse(r);e&&typeof e==`object`&&`jsonrpc`in e&&(t=e)}catch{}}return t}function oe(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}async function J(e,t,n){let r=await fetch(e,{method:`POST`,headers:{"content-type":`application/json`,accept:`application/json, text/event-stream`,...t},body:JSON.stringify(n)}),i=(K(r,`content-type`)||``).toLowerCase(),a=null;if(typeof r.text==`function`){let e=await r.text();a=i.includes(`text/event-stream`)?ae(e):oe(e)}else try{a=await r.json()}catch{a=null}return{response:r,payload:a}}async function se(e,t,n){let{response:r,payload:i}=await J(e,{...t,"mcp-session-id":n},{jsonrpc:`2.0`,method:`notifications/initialized`,params:{}});if(!r.ok||i&&`error`in i)throw q(r,i)}async function Y(e,t,n){let r=B.get(e);if(r?.sessionId)return r;let{response:i,payload:a}=await J(t,n,{jsonrpc:`2.0`,id:`initialize-${Date.now().toString(36)}`,method:`initialize`,params:{protocolVersion:`2025-03-26`,capabilities:{elicitation:{}},clientInfo:{name:`shadowclaw-remote-mcp-client`,version:`1.0.0`}}});if(!i.ok||a&&`error`in a)throw q(i,a);let o=K(i,`mcp-session-id`)||`local-${Date.now()}-${Math.random().toString(36).slice(2)}`,s={sessionId:o,protocolVersion:K(i,`mcp-protocol-version`)||a?.result?.protocolVersion,lastUsedAt:Date.now()};return await se(t,n,o),B.set(e,s),s}async function X(e,t,n,r,i){let a=await Y(e,t,n),o=async e=>{let a={jsonrpc:`2.0`,id:Date.now().toString(),method:r,params:i||{}},o={...n,"mcp-session-id":e},{response:s,payload:c}=await J(t,o,a),l=0;for(;V(c)&&l<5&&(l++,c.method===`elicitation/create`);){let e=H(c.params||{});({response:s,payload:c}=await J(t,o,{jsonrpc:`2.0`,id:c.id,result:{action:`accept`,content:e}}))}if(V(c))throw Error(`Unsupported server request: ${c.method}`);if(!s.ok||!c||`error`in c)throw q(s,c);return c.result};try{let t=await o(a.sessionId);return a.lastUsedAt=Date.now(),B.set(e,a),t}catch(r){if(!(r instanceof U))throw r;B.delete(e),a=await Y(e,t,n);let i=await o(a.sessionId);return a.lastUsedAt=Date.now(),B.set(e,a),i}}function Z(e){e&&B.delete(e)}async function Q(e,t,n,r){let i=await z(e,t);if(!i)throw Error(`Remote MCP connection not found`);if(i.reauthRequired)throw new G(t);let{connection:a,authType:o,headers:s}=i;if(a.transport!==`streamable_http`)throw Error(`Unsupported remote MCP transport`);try{return await X(t,a.serverUrl,s,n,r)}catch(i){if(!(i instanceof W)||i.status!==401||o!==`oauth`)throw i;Z(t);let a=await z(e,t,{forceRefresh:!0});if(!a||a.reauthRequired)throw new G(t);try{return await X(t,a.connection.serverUrl,a.headers,n,r)}catch(e){throw e instanceof W&&e.status===401?new G(t):e}}}async function ce(e,t){let n=await Q(e,t,`tools/list`);return Array.isArray(n.tools)?n.tools:[]}async function le(e,t,n,r={}){return Q(e,t,`tools/call`,{name:n,arguments:r})}async function ue(e,t){let n=[],r;try{r=await z(e,t)}catch(e){let t=e instanceof Error?e.message:String(e);return n.push({step:`Resolve authentication`,status:`error`,detail:t}),{success:!1,error:t,toolCount:0,toolNames:[],steps:n}}if(!r)return n.push({step:`Resolve authentication`,status:`error`,detail:`Connection not found`}),{success:!1,error:`Connection not found`,toolCount:0,toolNames:[],steps:n};if(r.reauthRequired){let e=`OAuth token expired or revoked — re-authenticate in Settings`;return n.push({step:`Resolve authentication`,status:`error`,detail:e}),{success:!1,error:e,toolCount:0,toolNames:[],steps:n}}n.push({step:`Resolve authentication`,status:`ok`,detail:`Auth type: ${r.authType}`});let{connection:i,authType:a,headers:o}=r;if(i.transport!==`streamable_http`){let e=`Unsupported transport: ${i.transport}`;return n.push({step:`Establish MCP session`,status:`error`,detail:e}),{success:!1,error:e,toolCount:0,toolNames:[],steps:n}}Z(t);try{await Y(t,i.serverUrl,o),n.push({step:`Establish MCP session`,status:`ok`,detail:`Session established`})}catch(r){let s=r instanceof Error?r.message:String(r);if(n.push({step:`Establish MCP session`,status:`error`,detail:s}),r instanceof W&&r.status===401&&a===`oauth`){Z(t);let r=await z(e,t,{forceRefresh:!0});if(r&&!r.reauthRequired){n.push({step:`Refresh OAuth token`,status:`ok`,detail:`Token refreshed, retrying`}),i=r.connection,o=r.headers;try{await Y(t,i.serverUrl,o),n.push({step:`Establish MCP session`,status:`ok`,detail:`Session established`})}catch(e){let t=e instanceof Error?e.message:String(e),r=e instanceof W&&e.status===401?`${t} — re-authorize in Settings → Accounts`:t;return n.push({step:`Establish MCP session`,status:`error`,detail:r}),{success:!1,error:r,toolCount:0,toolNames:[],steps:n}}}else return n.push({step:`Refresh OAuth token`,status:`error`,detail:`Token refresh failed — re-authenticate in Settings`}),{success:!1,error:s,toolCount:0,toolNames:[],steps:n}}else return{success:!1,error:s,toolCount:0,toolNames:[],steps:n}}try{let e=await X(t,i.serverUrl,o,`tools/list`),r=Array.isArray(e.tools)?e.tools:[],a=r.map(e=>e.name);return n.push({step:`Discover tools`,status:`ok`,detail:`${r.length} tool${r.length===1?``:`s`} available`}),{success:!0,error:null,toolCount:r.length,toolNames:a,steps:n}}catch(e){let t=e instanceof Error?e.message:String(e);return n.push({step:`Discover tools`,status:`error`,detail:t}),{success:!1,error:t,toolCount:0,toolNames:[],steps:n}}}function $(e,t,n,r){return{accessTokenExpiresAt:e.expiresIn?Date.now()+e.expiresIn*1e3:t.accessTokenExpiresAt,oauthReauthRequired:!1,oauthReauthRequiredAt:void 0,oauthRefreshFailureCount:0,refreshToken:r,scopes:e.scope?e.scope.split(/[\s,]+/).map(e=>e.trim()).filter(Boolean):t.scopes,token:n,tokenType:e.tokenType||t.tokenType}}async function de(e,t,n,r,a,s,u){if(!t.refreshToken)return{success:!1,error:`No refresh token available.`};let d=await c(t.refreshToken);if(!d)return{success:!1,error:`Failed to decrypt refresh token.`};let f=t.oauthClientSecret?await c(t.oauthClientSecret):void 0;try{let c=await fetch(`/oauth/refresh`,{body:JSON.stringify({clientId:t.oauthClientId,clientSecret:f||void 0,providerId:t.oauthProviderId,refreshToken:d,scope:t.scopes,tokenUrl:t.oauthCustomTokenUrl}),headers:{"content-type":`application/json`},method:`POST`});if(!c.ok)return{success:!1,error:`Token refresh request failed.`};let p=await c.json();if(!p.accessToken)return{success:!1,error:`No access token in refresh response.`};let m=await l(p.accessToken);if(!m)return{success:!1,error:`Failed to encrypt access token.`};let h=t.refreshToken;if(p.refreshToken){let e=await l(p.refreshToken);e&&(h=e)}let g=$({accessToken:p.accessToken,expiresIn:p.expiresIn,refreshToken:p.refreshToken,scope:p.scope,tokenType:p.tokenType},t,m,h);if(n===`service`&&s.accountId){let t=r.findIndex(e=>e.id===s.accountId);t!==-1&&(Object.assign(r[t],g),await o(e,i.SERVICE_ACCOUNTS,r))}else if(n===`git`&&s.gitAccountId){let t=a.findIndex(e=>e.id===s.gitAccountId);t!==-1&&(Object.assign(a[t],g),await o(e,i.GIT_ACCOUNTS,a))}return Z(u),{success:!0}}catch(e){return{success:!1,error:`Silent refresh failed: ${e instanceof Error?e.message:String(e)}`}}}async function fe(e,t,r={}){let s=await I(e,t);if(!s?.credentialRef)return{success:!1,error:`Connection not found.`};let u=s.credentialRef;if(u.authType!==`oauth`)return{success:!1,error:`This connection does not use OAuth authentication.`};let d=await a(e,i.SERVICE_ACCOUNTS),f=Array.isArray(d)?d:[],p=await a(e,i.GIT_ACCOUNTS),m=Array.isArray(p)?p:[],h,g=null;if(u.accountId?(h=f.find(e=>e.id===u.accountId),g=`service`):u.gitAccountId&&(h=m.find(e=>e.id===u.gitAccountId),g=`git`),!h||!g)return{error:`Linked account not found. Edit the connection to re-configure authentication.`,success:!1};let _=h.oauthClientId,v=h.oauthProviderId;if(!v||!_)return{error:`Account is missing OAuth provider or client ID. Edit the account in Settings → Accounts to fix.`,success:!1};if(h.refreshToken){let n=await de(e,h,g,f,m,u,t);if(n.success)return n}if(r.silentOnly)return{error:`Silent token refresh failed. Use Settings → Remote MCP → Reconnect OAuth for full re-authorization.`,success:!1};let y=h.oauthClientSecret?await c(h.oauthClientSecret):void 0,b=h.scopes,x=n[v],S=v===`custom_mcp`,C=S&&h.oauthCustomRedirectUri?h.oauthCustomRedirectUri:x?.redirectUri?x.redirectUri:`${globalThis.location?.origin||``}/oauth/callback`;try{let n=await fetch(`/oauth/authorize`,{body:JSON.stringify({providerId:v,clientId:_,clientSecret:y||void 0,redirectUri:C,scope:b,...S&&h.oauthCustomAuthorizeUrl?{authorizeUrl:h.oauthCustomAuthorizeUrl}:{},...S&&h.oauthCustomTokenUrl?{tokenUrl:h.oauthCustomTokenUrl}:{},...S&&typeof h.oauthCustomUsePkce==`boolean`?{usePkce:h.oauthCustomUsePkce}:{}}),headers:{"content-type":`application/json`},method:`POST`}),r=await n.json();if(!n.ok||!r.state||!r.authorizeUrl)throw Error(r.error||`OAuth authorize failed`);let a=window.open(r.authorizeUrl,`shadowclaw-oauth`,`popup=yes,width=540,height=720`);if(!a||a.closed||a.closed===void 0)throw Error(`OAuth popup was blocked by the browser. Please enable popups for this site and try again.`);let s=r.state,c=`pending`;for(let e=0;e<60;e++){let e=await fetch(`/oauth/session/${encodeURIComponent(s)}`),t=await e.json();if(!e.ok)throw Error(t.error||`OAuth session not found`);if(c=t.status||`pending`,c===`authorized`)break;if(c===`error`)throw Error(t.error||`OAuth authorization failed`);await new Promise(e=>setTimeout(e,1e3))}if(c!==`authorized`)throw Error(`OAuth authorization timed out`);let d=await fetch(`/oauth/token`,{body:JSON.stringify({state:s}),headers:{"content-type":`application/json`},method:`POST`}),p=await d.json();if(!d.ok||!p.accessToken)throw Error(p.error||`OAuth token exchange failed`);let x=await l(p.accessToken);if(!x)throw Error(`Failed to encrypt access token`);let w=h.refreshToken;if(p.refreshToken){let e=await l(p.refreshToken);e&&(w=e)}let T=$({accessToken:p.accessToken,expiresIn:p.expiresIn,refreshToken:p.refreshToken,scope:p.scope,tokenType:p.tokenType},h,x,w);if(g===`service`&&u.accountId){let t=f.findIndex(e=>e.id===u.accountId);t!==-1&&(Object.assign(f[t],T),await o(e,i.SERVICE_ACCOUNTS,f))}else if(g===`git`&&u.gitAccountId){let t=m.findIndex(e=>e.id===u.gitAccountId);t!==-1&&(Object.assign(m[t],T),await o(e,i.GIT_ACCOUNTS,m))}return Z(t),{success:!0}}catch(e){return{success:!1,error:e instanceof Error?e.message:String(e)}}}export{ue as a,I as c,S as d,x as f,u as h,ce as i,te as l,v as m,G as n,re as o,k as p,le as r,L as s,fe as t,ne as u};
|
|
1
|
+
import{L as e,N as t,b as n,h as r,r as i}from"./config-071HSho8.js";import{t as a}from"./getConfig-DSieAlsi.js";import{t as o}from"./setConfig-CIdSs9rh.js";import{t as s}from"./ulid-BSJxYh6W.js";import{n as c,r as l}from"./crypto-4ETeplbS.js";function u(e){return!e||e.authMode===`token`||e.authMode===`pat`?`token`:e.authMode===`basic`?`basic`:e.authMode===`oauth`||e.oauthProviderId||e.oauthClientId||e.oauthClientSecret||e.refreshToken||e.accessTokenExpiresAt||e.tokenType||e.oauthReauthRequired?`oauth`:`token`}function d(e){return u(e)}function f(e,t){return d(e)!==`oauth`||e.oauthReauthRequired||!e.refreshToken||!e.oauthProviderId||!e.oauthClientId?!1:t.forceRefresh?!0:e.accessTokenExpiresAt?e.accessTokenExpiresAt<=Date.now()+6e4:!1}async function p(e,t,n){if(!n.refreshToken||!n.oauthProviderId||!n.oauthClientId)return n;let r=await c(n.refreshToken);if(!r)return n;let a=n.oauthClientSecret?await c(n.oauthClientSecret):void 0,s=async r=>{let a=t.findIndex(e=>e.id===n.id);a!==-1&&(t[a]=r,await o(e,i.SERVICE_ACCOUNTS,t))},u=async()=>{let e=(n.oauthRefreshFailureCount||0)+1,t=e>=3,r={...n,oauthRefreshFailureCount:e,oauthReauthRequired:t,oauthReauthRequiredAt:t?n.oauthReauthRequiredAt||Date.now():void 0};return await s(r),r};try{let e=await fetch(`/oauth/refresh`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({providerId:n.oauthProviderId,clientId:n.oauthClientId,clientSecret:a,refreshToken:r,scope:n.scopes,tokenUrl:n.oauthCustomTokenUrl})});if(!e.ok)return u();let t=await e.json();if(!t.accessToken)return u();let i=await l(t.accessToken);if(!i)return u();let o=n.refreshToken;if(t.refreshToken){let e=await l(t.refreshToken);e&&(o=e)}let c={...n,token:i,refreshToken:o,accessTokenExpiresAt:t.expiresIn?Date.now()+t.expiresIn*1e3:n.accessTokenExpiresAt,tokenType:t.tokenType||n.tokenType,scopes:t.scope?t.scope.split(/[\s,]+/).map(e=>e.trim()).filter(Boolean):n.scopes,oauthRefreshFailureCount:0,oauthReauthRequired:!1,oauthReauthRequiredAt:void 0};return await s(c),c}catch{return u()}}function m(e,n){if(e.oauthProviderId){let n=t(e.oauthProviderId);if(n)return n}let i=[e.service,e.hostPattern,n].filter(e=>!!e).map(e=>e.toLowerCase());for(let e of Object.values(r))if([e.providerId,...e.aliases||[]].map(e=>e.toLowerCase()).some(e=>i.some(t=>t.includes(e))))return e;return null}function h(e,t){let n=d(e),r=m(e,t);if(r){let e;return e=n===`oauth`?r.tokenAuth.oauth:n===`basic`&&r.tokenAuth.basic?r.tokenAuth.basic:r.tokenAuth.token,{headerName:e.headerName,headerPrefix:e.headerPrefix||``}}return{headerName:`Authorization`,headerPrefix:n===`basic`?`Basic `:`Bearer `}}function g(e,t){let n=[],r=-1,i=t.toLowerCase();for(let t of e){if(!t.hostPattern)continue;let e=t.hostPattern.toLowerCase();i.includes(e)&&(e.length>r?(r=e.length,n.length=0,n.push(t)):e.length===r&&n.push(t))}return n}function _(e,t){return e.length?t&&e.find(e=>d(e)===t)||e[0]:void 0}async function v(e,t,n={}){let r=await a(e,i.SERVICE_ACCOUNTS),o=Array.isArray(r)?r:[];if(o.length===0)return;let s;if(n.accountId&&(s=o.find(e=>e.id===n.accountId)),!s&&t){let e=g(o,t);s=n.authMode?_(e,n.authMode):_(e,e[0]?m(e[0],t)?.defaultMode:void 0)}if(!s){let t=await a(e,i.SERVICE_DEFAULT_ACCOUNT);t&&(s=o.find(e=>e.id===t))}if(!s&&n.authMode&&(s=_(o,n.authMode)),s||=o[0],!s)return;if(f(s,n)&&(s=await p(e,o,s)),d(s)===`oauth`&&s.oauthReauthRequired)return{token:``,service:s.service,hostPattern:s.hostPattern,headerName:`Authorization`,headerValue:``,accountId:s.id,authMode:`oauth`,reauthRequired:!0};let l=``;s.token&&(l=await c(s.token)??``);let{headerName:u,headerPrefix:v}=h(s,t),y=l;d(s)===`basic`&&s.basicUsername&&(y=btoa(`${s.basicUsername}:${l}`));let b=v?`${v}${y}`:y;return{token:l,service:s.service,hostPattern:s.hostPattern,headerName:u,headerValue:b,accountId:s.id,authMode:d(s)}}function y(e){return u(e)}function b(e){switch(e){case`azure-devops`:return`azure_devops`;default:return e}}function x(e){if(!e)return`generic`;let t=e.toLowerCase();return t.includes(`github`)?`github`:t.includes(`dev.azure.com`)||t.includes(`visualstudio.com`)?`azure-devops`:t.includes(`gitlab`)?`gitlab`:`generic`}function S(t){if(t.reauthRequired)return{};let n=t.provider||x(t.hostPattern||``),r=b(n),i=t.authMode||`token`;if(t.token&&r===`azure_devops`&&e(r,i,`git_remote`)?.headerPrefix===`Basic `)return{Authorization:`Basic ${btoa(`:`+t.token)}`};if(n===`azure-devops`&&t.username&&t.password)return{Authorization:`Basic ${btoa(t.username+`:`+t.password)}`};if(t.token){let n=e(r,i,`git_remote`);return n?.headerName?{[n.headerName]:`${n.headerPrefix||``}${t.token}`}:{Authorization:`Bearer ${t.token}`}}return{}}function C(e){try{let t=new URL(e),n=t.pathname.replace(/\/+$/,``);return n?t.hostname+n:t.hostname}catch{return}}function w(e,t){let n=t.toLowerCase(),r=[],i=-1;for(let t of e){if(!t.hostPattern)continue;let e=t.hostPattern.toLowerCase();n.includes(e)&&(e.length>i?(i=e.length,r.length=0,r.push(t)):e.length===i&&r.push(t))}return r}function T(e,t){if(!e.length)return;if(!t)return e[0];let n=e.find(e=>y(e)===t);if(n)return n;if(t===`token`){let t=e.find(e=>y(e)===`token`&&!e.authMode);if(t)return t}return e[0]}async function E(e){if(e)return await c(e)??void 0}function D(e,t){return y(e)!==`oauth`||e.oauthReauthRequired||!e.refreshToken||!e.oauthProviderId||!e.oauthClientId?!1:t.forceRefresh?!0:e.accessTokenExpiresAt?e.accessTokenExpiresAt<=Date.now()+6e4:!1}async function O(e,t,n){if(!n.refreshToken||!n.oauthProviderId||!n.oauthClientId)return n;let r=await E(n.refreshToken);if(!r)return n;let a=n.oauthClientSecret?await E(n.oauthClientSecret):void 0,s=async r=>{let a=t.findIndex(e=>e.id===n.id);a!==-1&&(t[a]=r,await o(e,i.GIT_ACCOUNTS,t))},c=async()=>{let e=(n.oauthRefreshFailureCount||0)+1,t=e>=3,r={...n,oauthRefreshFailureCount:e,oauthReauthRequired:t,oauthReauthRequiredAt:t?n.oauthReauthRequiredAt||Date.now():void 0};return await s(r),r};try{let e=await fetch(`/oauth/refresh`,{body:JSON.stringify({clientId:n.oauthClientId,clientSecret:a,providerId:n.oauthProviderId,refreshToken:r,scope:n.scopes}),headers:{"content-type":`application/json`},method:`POST`});if(!e.ok)return c();let t=await e.json();if(!t.accessToken)return c();let i=await l(t.accessToken);if(!i)return c();let o=n.refreshToken;if(t.refreshToken){let e=await l(t.refreshToken);e&&(o=e)}let u={...n,token:i,refreshToken:o,accessTokenExpiresAt:t.expiresIn?Date.now()+t.expiresIn*1e3:n.accessTokenExpiresAt,tokenType:t.tokenType||n.tokenType,scopes:t.scope?t.scope.split(/[\s,]+/).map(e=>e.trim()).filter(Boolean):n.scopes,oauthRefreshFailureCount:0,oauthReauthRequired:!1,oauthReauthRequiredAt:void 0};return await s(u),u}catch{return c()}}async function k(e,t,n={}){let r=await a(e,i.GIT_ACCOUNTS);return Array.isArray(r)&&r.length>0?ee(e,r,t,n):A(e)}async function ee(e,t,n,r={}){let o;if(r.accountId&&(o=t.find(e=>e.id===r.accountId)),!o&&n){let e=C(n);e&&(o=T(w(t,e),r.authMode))}if(!o){let r=await a(e,i.GIT_DEFAULT_ACCOUNT);if(r){let e=t.find(e=>e.id===r);if(e){if(!n)o=e;else{let t=C(n);if(t&&e.hostPattern){let n=t?.toLowerCase(),r=e.hostPattern.toLowerCase();n?.includes(r)&&(o=e)}}}}}if(!o&&!n&&r.authMode&&(o=T(t,r.authMode)),!o&&!n&&(o=t[0]),!o)return{authMode:`token`,authorEmail:void 0,authorName:void 0,password:void 0,provider:`generic`,token:void 0,username:void 0};D(o,r)&&(o=await O(e,t,o));let s=o.provider||x(o.hostPattern||``);return y(o)===`oauth`&&o.oauthReauthRequired?{accountId:o.id,authMode:`oauth`,authorEmail:o.authorEmail||void 0,authorName:o.authorName||void 0,hostPattern:o.hostPattern||void 0,password:void 0,provider:s,reauthRequired:!0,token:void 0,username:o.username||void 0}:{accountId:o.id,authMode:y(o),authorEmail:o.authorEmail||void 0,authorName:o.authorName||void 0,hostPattern:o.hostPattern||void 0,password:await E(o.password),provider:s,token:await E(o.token),username:o.username||void 0}}async function A(e){let t=await a(e,i.GIT_TOKEN),n=await a(e,i.GIT_PASSWORD);return{authMode:`token`,authorEmail:await a(e,i.GIT_AUTHOR_EMAIL)||void 0,authorName:await a(e,i.GIT_AUTHOR_NAME)||void 0,password:n?await E(n):void 0,provider:`generic`,token:t?await E(t):void 0,username:await a(e,i.GIT_USERNAME)||void 0}}function j(e){if(typeof e!=`string`||!e.trim())return!1;try{let t=new URL(e);return t.protocol===`https:`||t.protocol===`http:`}catch{return!1}}function M(e,t){if(!e||typeof e!=`object`)return null;let n=e;if(!n.serviceType||!n.authType)return null;if(n.serviceType!==t)throw Error(`Credential ref serviceType must match connection serviceType`);return{serviceType:n.serviceType,authType:n.authType,providerId:n.providerId||void 0,accountId:n.accountId||void 0,gitAccountId:n.gitAccountId||void 0,headerName:n.headerName||void 0,encryptedValue:n.encryptedValue||void 0}}function N(e){if(!e||typeof e!=`object`)return null;let t=e;return!t.id||!t.label||!t.serviceType||!t.transport||typeof t.enabled!=`boolean`||typeof t.createdAt!=`number`||typeof t.updatedAt!=`number`||!j(t.serverUrl)||t.serviceType!==`mcp_remote`&&t.serviceType!==`webmcp_local`||t.transport!==`streamable_http`&&t.transport!==`sse`&&t.transport!==`websocket`?null:{id:t.id,label:t.label,serviceType:t.serviceType,serverUrl:t.serverUrl,transport:t.transport,enabled:t.enabled,autoReconnectOAuth:t.autoReconnectOAuth===!0,createdAt:t.createdAt,updatedAt:t.updatedAt,credentialRef:M(t.credentialRef,t.serviceType)}}async function P(e){let t=await a(e,i.REMOTE_MCP_CONNECTIONS);if(!Array.isArray(t))return[];let n=[];for(let e of t){let t=N(e);t&&n.push(t)}return n}async function F(e,t){await o(e,i.REMOTE_MCP_CONNECTIONS,t)}async function te(e){return P(e)}async function I(e,t){if(!t)return null;let n=await P(e);return n.find(e=>e.id===t)||n.find(e=>e.label.toLowerCase()===t.toLowerCase())||null}async function ne(e,t){if(!t?.label?.trim())throw Error(`Connection label is required`);if(!j(t.serverUrl))throw Error(`Connection serverUrl must be an absolute http(s) URL`);let n=t.serviceType||`mcp_remote`;if(n!==`mcp_remote`&&n!==`webmcp_local`)throw Error(`Unsupported serviceType for remote MCP connection`);let r=await P(e),i=Date.now();if(t.id){let a=r.findIndex(e=>e.id===t.id);if(a!==-1){let o=r[a],s={...o,label:t.label.trim(),serviceType:n,serverUrl:t.serverUrl,transport:t.transport,enabled:t.enabled??o.enabled,autoReconnectOAuth:t.autoReconnectOAuth??o.autoReconnectOAuth,updatedAt:i};return r[a]=s,await F(e,r),s}}let a={id:t.id||s(),label:t.label.trim(),serviceType:n,serverUrl:t.serverUrl,transport:t.transport,enabled:t.enabled??!0,autoReconnectOAuth:t.autoReconnectOAuth??!1,createdAt:i,updatedAt:i,credentialRef:null};return r.push(a),await F(e,r),a}async function re(e,t,n){if(!t)return null;let r=await P(e),i=r.findIndex(e=>e.id===t);if(i===-1)return null;let a=r[i],o=n?M(n,a.serviceType):null,s={...a,credentialRef:o,updatedAt:Date.now()};return r[i]=s,await F(e,r),s}async function L(e,t){if(!t)return!1;let n=await P(e),r=n.filter(e=>e.id!==t);return r.length!==n.length&&(await F(e,r),!0)}function R(e){return e===`oauth`?`oauth`:`token`}async function z(e,t,n={}){let r=await I(e,t);if(!r)return null;let i=r.credentialRef;if(!i||i.authType===`none`)return{connection:r,authType:`none`,headers:{}};if(i.authType===`custom_header`){if(!i.headerName||!i.encryptedValue)return{connection:r,authType:`custom_header`,headers:{}};let e=await c(i.encryptedValue);return{connection:r,authType:`custom_header`,headers:e?{[i.headerName]:e}:{}}}let a=R(i.authType);if(i.accountId){let t=await v(e,r.serverUrl,{accountId:i.accountId,authMode:a,forceRefresh:n.forceRefresh});return t?t.reauthRequired?{connection:r,authType:i.authType,headers:{},reauthRequired:!0}:{connection:r,authType:i.authType,headers:t.headerValue?{[t.headerName]:t.headerValue}:{}}:{connection:r,authType:i.authType,headers:{}}}if(i.gitAccountId){let t=await k(e,r.serverUrl,{accountId:i.gitAccountId,authMode:a,forceRefresh:n.forceRefresh});return t.reauthRequired?{connection:r,authType:i.authType,headers:{},reauthRequired:!0}:{connection:r,authType:i.authType,headers:S(t)}}return{connection:r,authType:i.authType,headers:{}}}const B=/* @__PURE__ */ new Map;function V(e){return typeof e==`object`&&!!e&&`method`in e&&`id`in e&&!(`result`in e)&&!(`error`in e)}function H(e){let t=(e.requestedSchema||{}).properties||{},n={};for(let[e,r]of Object.entries(t))`default`in r?n[e]=r.default:r.type===`boolean`&&(n[e]=!0);return n}var U=class extends Error{constructor(e){super(e),this.name=`InvalidRemoteMcpSessionError`}},W=class extends Error{status;constructor(e,t){super(t),this.name=`HttpRemoteMcpError`,this.status=e}},G=class extends Error{connectionId;constructor(e){super(`OAuth reconnect required for remote MCP connection`),this.name=`McpReauthRequiredError`,this.connectionId=e}};function K(e,t){return!e.headers||typeof e.headers.get!=`function`?null:e.headers.get(t)}function ie(e){return/no valid session id provided/i.test(e)}function q(e,t){let n=t&&`error`in t?t.error.message||`Remote MCP JSON-RPC error`:``;return ie(n)?new U(n):e.ok?Error(n||`Remote MCP JSON-RPC error`):new W(e.status,n?`Remote MCP HTTP error: ${e.status} (${n})`:`Remote MCP HTTP error: ${e.status}`)}function ae(e){if(!e)return null;let t=null,n=e.split(/\r?\n/);for(let e of n){let n=e.trim();if(!n.startsWith(`data:`))continue;let r=n.slice(5).trim();if(r&&r!==`[DONE]`)try{let e=JSON.parse(r);e&&typeof e==`object`&&`jsonrpc`in e&&(t=e)}catch{}}return t}function oe(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}async function J(e,t,n){let r=await fetch(e,{method:`POST`,headers:{"content-type":`application/json`,accept:`application/json, text/event-stream`,...t},body:JSON.stringify(n)}),i=(K(r,`content-type`)||``).toLowerCase(),a=null;if(typeof r.text==`function`){let e=await r.text();a=i.includes(`text/event-stream`)?ae(e):oe(e)}else try{a=await r.json()}catch{a=null}return{response:r,payload:a}}async function se(e,t,n){let{response:r,payload:i}=await J(e,{...t,"mcp-session-id":n},{jsonrpc:`2.0`,method:`notifications/initialized`,params:{}});if(!r.ok||i&&`error`in i)throw q(r,i)}async function Y(e,t,n){let r=B.get(e);if(r?.sessionId)return r;let{response:i,payload:a}=await J(t,n,{jsonrpc:`2.0`,id:`initialize-${Date.now().toString(36)}`,method:`initialize`,params:{protocolVersion:`2025-03-26`,capabilities:{elicitation:{}},clientInfo:{name:`shadowclaw-remote-mcp-client`,version:`1.0.0`}}});if(!i.ok||a&&`error`in a)throw q(i,a);let o=K(i,`mcp-session-id`)||`local-${Date.now()}-${Math.random().toString(36).slice(2)}`,s={sessionId:o,protocolVersion:K(i,`mcp-protocol-version`)||a?.result?.protocolVersion,lastUsedAt:Date.now()};return await se(t,n,o),B.set(e,s),s}async function X(e,t,n,r,i){let a=await Y(e,t,n),o=async e=>{let a={jsonrpc:`2.0`,id:Date.now().toString(),method:r,params:i||{}},o={...n,"mcp-session-id":e},{response:s,payload:c}=await J(t,o,a),l=0;for(;V(c)&&l<5&&(l++,c.method===`elicitation/create`);){let e=H(c.params||{});({response:s,payload:c}=await J(t,o,{jsonrpc:`2.0`,id:c.id,result:{action:`accept`,content:e}}))}if(V(c))throw Error(`Unsupported server request: ${c.method}`);if(!s.ok||!c||`error`in c)throw q(s,c);return c.result};try{let t=await o(a.sessionId);return a.lastUsedAt=Date.now(),B.set(e,a),t}catch(r){if(!(r instanceof U))throw r;B.delete(e),a=await Y(e,t,n);let i=await o(a.sessionId);return a.lastUsedAt=Date.now(),B.set(e,a),i}}function Z(e){e&&B.delete(e)}async function Q(e,t,n,r){let i=await z(e,t);if(!i)throw Error(`Remote MCP connection not found`);if(i.reauthRequired)throw new G(t);let{connection:a,authType:o,headers:s}=i;if(a.transport!==`streamable_http`)throw Error(`Unsupported remote MCP transport`);try{return await X(t,a.serverUrl,s,n,r)}catch(i){if(!(i instanceof W)||i.status!==401||o!==`oauth`)throw i;Z(t);let a=await z(e,t,{forceRefresh:!0});if(!a||a.reauthRequired)throw new G(t);try{return await X(t,a.connection.serverUrl,a.headers,n,r)}catch(e){throw e instanceof W&&e.status===401?new G(t):e}}}async function ce(e,t){let n=await Q(e,t,`tools/list`);return Array.isArray(n.tools)?n.tools:[]}async function le(e,t,n,r={}){return Q(e,t,`tools/call`,{name:n,arguments:r})}async function ue(e,t){let n=[],r;try{r=await z(e,t)}catch(e){let t=e instanceof Error?e.message:String(e);return n.push({step:`Resolve authentication`,status:`error`,detail:t}),{success:!1,error:t,toolCount:0,toolNames:[],steps:n}}if(!r)return n.push({step:`Resolve authentication`,status:`error`,detail:`Connection not found`}),{success:!1,error:`Connection not found`,toolCount:0,toolNames:[],steps:n};if(r.reauthRequired){let e=`OAuth token expired or revoked — re-authenticate in Settings`;return n.push({step:`Resolve authentication`,status:`error`,detail:e}),{success:!1,error:e,toolCount:0,toolNames:[],steps:n}}n.push({step:`Resolve authentication`,status:`ok`,detail:`Auth type: ${r.authType}`});let{connection:i,authType:a,headers:o}=r;if(i.transport!==`streamable_http`){let e=`Unsupported transport: ${i.transport}`;return n.push({step:`Establish MCP session`,status:`error`,detail:e}),{success:!1,error:e,toolCount:0,toolNames:[],steps:n}}Z(t);try{await Y(t,i.serverUrl,o),n.push({step:`Establish MCP session`,status:`ok`,detail:`Session established`})}catch(r){let s=r instanceof Error?r.message:String(r);if(n.push({step:`Establish MCP session`,status:`error`,detail:s}),r instanceof W&&r.status===401&&a===`oauth`){Z(t);let r=await z(e,t,{forceRefresh:!0});if(r&&!r.reauthRequired){n.push({step:`Refresh OAuth token`,status:`ok`,detail:`Token refreshed, retrying`}),i=r.connection,o=r.headers;try{await Y(t,i.serverUrl,o),n.push({step:`Establish MCP session`,status:`ok`,detail:`Session established`})}catch(e){let t=e instanceof Error?e.message:String(e),r=e instanceof W&&e.status===401?`${t} — re-authorize in Settings → Accounts`:t;return n.push({step:`Establish MCP session`,status:`error`,detail:r}),{success:!1,error:r,toolCount:0,toolNames:[],steps:n}}}else return n.push({step:`Refresh OAuth token`,status:`error`,detail:`Token refresh failed — re-authenticate in Settings`}),{success:!1,error:s,toolCount:0,toolNames:[],steps:n}}else return{success:!1,error:s,toolCount:0,toolNames:[],steps:n}}try{let e=await X(t,i.serverUrl,o,`tools/list`),r=Array.isArray(e.tools)?e.tools:[],a=r.map(e=>e.name);return n.push({step:`Discover tools`,status:`ok`,detail:`${r.length} tool${r.length===1?``:`s`} available`}),{success:!0,error:null,toolCount:r.length,toolNames:a,steps:n}}catch(e){let t=e instanceof Error?e.message:String(e);return n.push({step:`Discover tools`,status:`error`,detail:t}),{success:!1,error:t,toolCount:0,toolNames:[],steps:n}}}function $(e,t,n,r){return{accessTokenExpiresAt:e.expiresIn?Date.now()+e.expiresIn*1e3:t.accessTokenExpiresAt,oauthReauthRequired:!1,oauthReauthRequiredAt:void 0,oauthRefreshFailureCount:0,refreshToken:r,scopes:e.scope?e.scope.split(/[\s,]+/).map(e=>e.trim()).filter(Boolean):t.scopes,token:n,tokenType:e.tokenType||t.tokenType}}async function de(e,t,n,r,a,s,u){if(!t.refreshToken)return{success:!1,error:`No refresh token available.`};let d=await c(t.refreshToken);if(!d)return{success:!1,error:`Failed to decrypt refresh token.`};let f=t.oauthClientSecret?await c(t.oauthClientSecret):void 0;try{let c=await fetch(`/oauth/refresh`,{body:JSON.stringify({clientId:t.oauthClientId,clientSecret:f||void 0,providerId:t.oauthProviderId,refreshToken:d,scope:t.scopes,tokenUrl:t.oauthCustomTokenUrl}),headers:{"content-type":`application/json`},method:`POST`});if(!c.ok)return{success:!1,error:`Token refresh request failed.`};let p=await c.json();if(!p.accessToken)return{success:!1,error:`No access token in refresh response.`};let m=await l(p.accessToken);if(!m)return{success:!1,error:`Failed to encrypt access token.`};let h=t.refreshToken;if(p.refreshToken){let e=await l(p.refreshToken);e&&(h=e)}let g=$({accessToken:p.accessToken,expiresIn:p.expiresIn,refreshToken:p.refreshToken,scope:p.scope,tokenType:p.tokenType},t,m,h);if(n===`service`&&s.accountId){let t=r.findIndex(e=>e.id===s.accountId);t!==-1&&(Object.assign(r[t],g),await o(e,i.SERVICE_ACCOUNTS,r))}else if(n===`git`&&s.gitAccountId){let t=a.findIndex(e=>e.id===s.gitAccountId);t!==-1&&(Object.assign(a[t],g),await o(e,i.GIT_ACCOUNTS,a))}return Z(u),{success:!0}}catch(e){return{success:!1,error:`Silent refresh failed: ${e instanceof Error?e.message:String(e)}`}}}async function fe(e,t,r={}){let s=await I(e,t);if(!s?.credentialRef)return{success:!1,error:`Connection not found.`};let u=s.credentialRef;if(u.authType!==`oauth`)return{success:!1,error:`This connection does not use OAuth authentication.`};let d=await a(e,i.SERVICE_ACCOUNTS),f=Array.isArray(d)?d:[],p=await a(e,i.GIT_ACCOUNTS),m=Array.isArray(p)?p:[],h,g=null;if(u.accountId?(h=f.find(e=>e.id===u.accountId),g=`service`):u.gitAccountId&&(h=m.find(e=>e.id===u.gitAccountId),g=`git`),!h||!g)return{error:`Linked account not found. Edit the connection to re-configure authentication.`,success:!1};let _=h.oauthClientId,v=h.oauthProviderId;if(!v||!_)return{error:`Account is missing OAuth provider or client ID. Edit the account in Settings → Accounts to fix.`,success:!1};if(h.refreshToken){let n=await de(e,h,g,f,m,u,t);if(n.success)return n}if(r.silentOnly)return{error:`Silent token refresh failed. Use Settings → Remote MCP → Reconnect OAuth for full re-authorization.`,success:!1};let y=h.oauthClientSecret?await c(h.oauthClientSecret):void 0,b=h.scopes,x=n[v],S=v===`custom_mcp`,C=S&&h.oauthCustomRedirectUri?h.oauthCustomRedirectUri:x?.redirectUri?x.redirectUri:`${globalThis.location?.origin||``}/oauth/callback`;try{let n=await fetch(`/oauth/authorize`,{body:JSON.stringify({providerId:v,clientId:_,clientSecret:y||void 0,redirectUri:C,scope:b,...S&&h.oauthCustomAuthorizeUrl?{authorizeUrl:h.oauthCustomAuthorizeUrl}:{},...S&&h.oauthCustomTokenUrl?{tokenUrl:h.oauthCustomTokenUrl}:{},...S&&typeof h.oauthCustomUsePkce==`boolean`?{usePkce:h.oauthCustomUsePkce}:{}}),headers:{"content-type":`application/json`},method:`POST`}),r=await n.json();if(!n.ok||!r.state||!r.authorizeUrl)throw Error(r.error||`OAuth authorize failed`);let a=window.open(r.authorizeUrl,`shadowclaw-oauth`,`popup=yes,width=540,height=720`);if(!a||a.closed||a.closed===void 0)throw Error(`OAuth popup was blocked by the browser. Please enable popups for this site and try again.`);let s=r.state,c=`pending`;for(let e=0;e<60;e++){let e=await fetch(`/oauth/session/${encodeURIComponent(s)}`),t=await e.json();if(!e.ok)throw Error(t.error||`OAuth session not found`);if(c=t.status||`pending`,c===`authorized`)break;if(c===`error`)throw Error(t.error||`OAuth authorization failed`);await new Promise(e=>setTimeout(e,1e3))}if(c!==`authorized`)throw Error(`OAuth authorization timed out`);let d=await fetch(`/oauth/token`,{body:JSON.stringify({state:s}),headers:{"content-type":`application/json`},method:`POST`}),p=await d.json();if(!d.ok||!p.accessToken)throw Error(p.error||`OAuth token exchange failed`);let x=await l(p.accessToken);if(!x)throw Error(`Failed to encrypt access token`);let w=h.refreshToken;if(p.refreshToken){let e=await l(p.refreshToken);e&&(w=e)}let T=$({accessToken:p.accessToken,expiresIn:p.expiresIn,refreshToken:p.refreshToken,scope:p.scope,tokenType:p.tokenType},h,x,w);if(g===`service`&&u.accountId){let t=f.findIndex(e=>e.id===u.accountId);t!==-1&&(Object.assign(f[t],T),await o(e,i.SERVICE_ACCOUNTS,f))}else if(g===`git`&&u.gitAccountId){let t=m.findIndex(e=>e.id===u.gitAccountId);t!==-1&&(Object.assign(m[t],T),await o(e,i.GIT_ACCOUNTS,m))}return Z(t),{success:!0}}catch(e){return{success:!1,error:e instanceof Error?e.message:String(e)}}}export{ue as a,I as c,S as d,x as f,u as h,ce as i,te as l,v as m,G as n,re as o,k as p,le as r,L as s,fe as t,ne as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DBVvNlSN.js";import{x as t}from"./config-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DBVvNlSN.js";import{x as t}from"./config-071HSho8.js";var n=/* @__PURE__ */ e({MemoryDirectoryHandle:()=>c,MemoryFileHandle:()=>s,MemorySyncAccessHandle:()=>a,MemoryWritableStream:()=>o,getMemoryOpfsRoot:()=>u,isMemoryStorageFallbackActive:()=>d});function r(e,t){if(typeof DOMException<`u`)try{return new DOMException(e,t)}catch{}let n=Error(e);return n.name=t,n}function i(e){let t=e();return t[Symbol.asyncDispose??Symbol.for(`Symbol.asyncDispose`)]=async()=>{},t}var a=class{_file;_closed=!1;constructor(e){this._file=e}close(){this._closed=!0}flush(){}getSize(){if(this._closed)throw r(`SyncAccessHandle is closed`,`InvalidStateError`);return this._file.getRawData().byteLength}read(e,t){if(this._closed)throw r(`SyncAccessHandle is closed`,`InvalidStateError`);let n=this._file.getRawData(),i=t?.at??0;if(i>=n.byteLength)return 0;let a=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),o=n.subarray(i,i+a.byteLength);return a.set(o),o.byteLength}write(e,t){if(this._closed)throw r(`SyncAccessHandle is closed`,`InvalidStateError`);let n=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),i=t?.at??0,a=this._file.getRawData(),o=i+n.byteLength,s;return o>a.byteLength?(s=new Uint8Array(o),s.set(a)):s=new Uint8Array(a),s.set(n,i),this._file.setRawData(s),n.byteLength}truncate(e){if(this._closed)throw r(`SyncAccessHandle is closed`,`InvalidStateError`);let t=this._file.getRawData(),n=new Uint8Array(e);n.set(t.subarray(0,Math.min(t.byteLength,e))),this._file.setRawData(n)}},o=class{_file;_buffer;_position=0;_length=0;_closed=!1;constructor(e,t=!1){this._file=e;let n=e.getRawData();t?(this._buffer=new Uint8Array(n),this._length=n.byteLength):(this._buffer=/* @__PURE__ */ new Uint8Array(1024),this._length=0)}async write(e){if(this._closed)throw r(`WritableStream is closed`,`InvalidStateError`);let t;if(typeof e==`string`)t=new TextEncoder().encode(e);else if(e instanceof Uint8Array)t=e;else if(e instanceof ArrayBuffer)t=new Uint8Array(e);else if(typeof Blob<`u`&&e instanceof Blob)t=typeof e.arrayBuffer==`function`?new Uint8Array(await e.arrayBuffer()):typeof e.text==`function`?new TextEncoder().encode(await e.text()):typeof FileReader<`u`?await new Promise(t=>{let n=new FileReader;n.onload=()=>{t(new Uint8Array(n.result))},n.onerror=()=>t(/* @__PURE__ */ new Uint8Array),n.readAsArrayBuffer(e)}):/* @__PURE__ */ new Uint8Array;else if(e&&typeof e==`object`&&`type`in e){if(e.type===`write`){typeof e.position==`number`&&(this._position=e.position);let n=e.data;t=typeof n==`string`?new TextEncoder().encode(n):n instanceof Uint8Array?n:n instanceof ArrayBuffer?new Uint8Array(n):typeof Blob<`u`&&n instanceof Blob&&typeof n.arrayBuffer==`function`?new Uint8Array(await n.arrayBuffer()):/* @__PURE__ */ new Uint8Array}else if(e.type===`seek`){this._position=e.position??0;return}else if(e.type===`truncate`){this._truncate(e.size??0);return}else t=/* @__PURE__ */ new Uint8Array}else t=/* @__PURE__ */ new Uint8Array;let n=this._position+t.length;if(n>this._buffer.length){let e=Math.max(this._buffer.length*2,n,1024),t=new Uint8Array(e);t.set(this._buffer),this._buffer=t}this._buffer.set(t,this._position),this._position+=t.length,this._position>this._length&&(this._length=this._position)}_truncate(e){if(e<this._length)this._length=e;else if(e>this._length){if(e>this._buffer.length){let t=new Uint8Array(e);t.set(this._buffer),this._buffer=t}this._length=e}this._position>e&&(this._position=e)}async seek(e){if(this._closed)throw r(`WritableStream is closed`,`InvalidStateError`);this._position=e}async truncate(e){if(this._closed)throw r(`WritableStream is closed`,`InvalidStateError`);this._truncate(e)}async close(){if(this._closed)return;this._closed=!0;let e=this._buffer.slice(0,this._length);this._file.setRawData(e)}async abort(){this._closed=!0}},s=class{kind=`file`;name;_data;_lastModified;constructor(e,t=/* @__PURE__ */ new Uint8Array){this.name=e,this._data=t,this._lastModified=Date.now()}getRawData(){return this._data}setRawData(e){this._data=e,this._lastModified=Date.now()}_getArrayBuffer(){let e=new ArrayBuffer(this._data.byteLength);return new Uint8Array(e).set(this._data),e}async getFile(){let e=this._getArrayBuffer(),t=this._data,n=this.name,r=this._lastModified,i={name:n,size:t.byteLength,type:``,lastModified:r,async text(){return new TextDecoder().decode(t)},async arrayBuffer(){return e},slice(n=0,r=t.byteLength){return new Blob([e.slice(n,r)])}};if(typeof File<`u`)try{let t=new File([e],this.name,{lastModified:this._lastModified});return typeof t.text!=`function`&&(t.text=i.text),typeof t.arrayBuffer!=`function`&&(t.arrayBuffer=i.arrayBuffer),t}catch{}return i}async createWritable(e){return new o(this,e?.keepExistingData??!1)}async createSyncAccessHandle(){return new a(this)}async isSameEntry(e){return this===e}async queryPermission(){return`granted`}async requestPermission(){return`granted`}},c=class e{kind=`directory`;name;_entries=/* @__PURE__ */ new Map;constructor(e){this.name=e}_setEntry(e,t){this._entries.set(e,t)}async getDirectoryHandle(t,n){if(t===`.`||t===``)return this;if(t===`..`)throw r(`Cannot navigate to parent directory with '..'`,`SecurityError`);let i=this._entries.get(t);if(i){if(i.kind===`directory`)return i;throw r(`"${t}" is a file, not a directory`,`TypeMismatchError`)}if(n?.create){let n=new e(t);return this._entries.set(t,n),n}throw r(`A requested file or directory could not be found at "${t}"`,`NotFoundError`)}async getFileHandle(e,t){if(e===`.`||e===`..`||e===``)throw r(`Invalid file name "${e}"`,`TypeMismatchError`);let n=this._entries.get(e);if(n){if(n.kind===`file`)return n;throw r(`"${e}" is a directory, not a file`,`TypeMismatchError`)}if(t?.create){let t=new s(e);return this._entries.set(e,t),t}throw r(`A requested file could not be found at "${e}"`,`NotFoundError`)}async removeEntry(e,t){let n=this._entries.get(e);if(!n)throw r(`Entry "${e}" not found`,`NotFoundError`);if(n.kind===`directory`&&n._entries.size>0&&!t?.recursive)throw r(`Directory "${e}" is not empty`,`InvalidModificationError`);this._entries.delete(e)}async resolve(e){if(this===e)return[];for(let[t,n]of this._entries.entries()){if(n===e)return[t];if(n.kind===`directory`){let r=await n.resolve(e);if(r)return[t,...r]}}return null}entries(){let e=this;return i(async function*(){for(let[t,n]of e._entries.entries())yield[t,n]})}values(){let e=this;return i(async function*(){for(let t of e._entries.values())yield t})}keys(){let e=this;return i(async function*(){for(let t of e._entries.keys())yield t})}[Symbol.asyncIterator](){return this.entries()}async isSameEntry(e){return this===e}async queryPermission(){return`granted`}async requestPermission(){return`granted`}};let l=null;function u(){if(!l){let e=new c(`memory-root`),n=new c(t);e._setEntry(t,n),l=n}return l}function d(){return l!==null}export{n,u as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{C as e}from"./config-071HSho8.js";import{y as t}from"./custom-element-security-Td4vrRc_.js";function n(e){let t=e.toLowerCase(),n=/(?:^|[-_\/.])(\d+(?:\.\d+)?)b(?:[-_\/.]|$)/i.exec(t);if(n){let e=Number(n[1]);if(Number.isFinite(e)&&e>0)return e}let r=/(?:^|[-_\/.])e(\d+(?:\.\d+)?)b(?:[-_\/.]|$)/i.exec(t);if(!r)return null;let i=Number(r[1]);return!Number.isFinite(i)||i<=0?null:i}function r(e){let t=e.toLowerCase();return!!(/(^|[-_./])(instruct|chat|assistant|tool|it)([-_./]|$)/i.test(t)||/(qwen\d*(?:\.\d+)?|deepseek-r1-distill)/i.test(t))}function i(e){return/(^|[-_./])(q\d+|int8|uint8|4bit|8bit|bnb4|opt)([-_./]|$)/i.test(e)}function a(e,t){let a=e.id.toLowerCase(),o=n(e.id),s=0;return e.supportsTools||(s+=60),r(e.id)&&(s-=40),a.includes(`onnx`)?s-=30:s+=90,i(a)&&(s-=20),o===null?s+=10:o<=.6?s-=120:o<=.8?s-=100:o<=1.2?s-=80:o<=1.8?s-=40:s+=o<=3?20:80,/thinking|reasoning/i.test(a)&&(s+=25),t===`transformers_js_browser`&&(o!==null&&o>1.5&&(s+=40),a.includes(`onnx`)||(s+=80)),s}const o=[`onnx-community/Qwen3-0.6B-ONNX`,`onnx-community/gemma-3-1b-it-ONNX-GQA`,`onnx-community/gemma-4-E2B-it-ONNX`,`onnx-community/gemma-4-E4B-it-ONNX`],s={"onnx-community/Qwen3-0.6B-ONNX":`onnx-community/Qwen3-0.6B-ONNX — Recommended (Fast, Compact & Tool Calling)`,"onnx-community/gemma-3-1b-it-ONNX-GQA":`onnx-community/gemma-3-1b-it-ONNX-GQA — Alternative (1B Parameters)`,"onnx-community/gemma-4-E2B-it-ONNX":`onnx-community/gemma-4-E2B-it-ONNX — Alternative (2B Parameters, 128k Context)`,"onnx-community/gemma-4-E4B-it-ONNX":`onnx-community/gemma-4-E4B-it-ONNX — Alternative (4B Parameters, 128k Context)`};function c(e,t,n){if(n===`transformers_js_browser`){let n=o.indexOf(e.id),r=o.indexOf(t.id);return n!==-1&&r!==-1?n-r:n===-1?r===-1?e.id.localeCompare(t.id):1:-1}let r=a(e,n),i=a(t,n);return r===i?e.contextLength===t.contextLength?e.id.localeCompare(t.id):t.contextLength-e.contextLength:r-i}function l(t){let n=e.transformers_js_browser?.models||[],i=t&&t.length>0?t:n,a=/* @__PURE__ */ new Set;for(let e of i){let t=typeof e==`string`?e:e?.id||e?.name;t&&typeof t==`string`&&t.trim()&&a.add(t.trim())}for(let e of o)a.add(e);for(let e of n)a.add(e);return Array.from(a).sort((e,t)=>c({id:e,supportsTools:r(e),contextLength:0},{id:t,supportsTools:r(t),contextLength:0},`transformers_js_browser`))}function u(e,n,i){let a=l(n),o=``;for(let n=0;n<a.length;n++){let i=a[n],c=i===e?` selected`:``,l=s[i]||`${i}${r(i)?` 🛠️`:``}`;o+=`<option value="${t(i)}"${c}>${t(l)}</option>`,n===3&&a.length>4&&(o+=`<hr>`)}if(i?.includeCustom){let t=e===`__custom__`||e!==``&&!a.includes(e)?` selected`:``;o+=`<option value="__custom__"${t}>-- Custom Model ID --</option>`}return o}export{u as i,l as n,r,c as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{i as e,n as t,r as n,t as r}from"./rolldown-runtime-DBVvNlSN.js";import{C as i,F as a,I as o,O as s,P as c,R as l,c as u,m as d,n as f,o as p,r as m,u as h,y as g}from"./config-
|
|
1
|
+
import{i as e,n as t,r as n,t as r}from"./rolldown-runtime-DBVvNlSN.js";import{C as i,F as a,I as o,O as s,P as c,R as l,c as u,m as d,n as f,o as p,r as m,u as h,y as g}from"./config-071HSho8.js";import{a as _,n as v,o as y,p as b}from"./app-routes-CanH2f3S.js";import{n as x,r as S,t as C}from"./txPromise-DlzJBj9N.js";import{t as w}from"./getConfig-DSieAlsi.js";import{c as T,f as E,s as D,t as O}from"./custom-element-security-Td4vrRc_.js";import{t as ee}from"./browser-B1SoUj6D.js";import{t as k}from"./dist-CeFyqf9k.js";import{n as te,r as ne,t as re}from"./headless-D6caaop6.js";import{a as ie,o as ae,r as oe,s as se,t as ce}from"./getGroupDir-Bj5XCflQ.js";import{a as le,c as ue,d as de,f as fe,l as pe,o as me,p as he,r as ge,s as _e,t as ve}from"./tools-BpZh7hgB.js";import{t as A}from"./setConfig-CIdSs9rh.js";import{t as ye}from"./ulid-BSJxYh6W.js";import{i as be,r as xe,t as Se}from"./tools-CHxUdGxZ.js";import"./tools-C4xNCwrc.js";import{t as Ce}from"./buffer-B98mcmH0.js";import{n as we,r as Te}from"./crypto-4ETeplbS.js";import{c as Ee,d as De,i as Oe,l as ke,m as Ae,n as je,p as Me,r as Ne,t as Pe}from"./mcp-reconnect-CDRJPuoN.js";import{t as Fe}from"./stream-browserify-D3GBRf4E.js";import{a as Ie,c as Le,d as Re,f as ze,h as Be,i as Ve,l as He,m as Ue,n as We,o as Ge,p as Ke,r as qe,s as Je,t as Ye,u as Xe}from"./is-typed-array-BGsHBea7.js";import{n as Ze,o as Qe,r as $e,t as et}from"./constants-DySRhLEI.js";import{a as tt,i as nt,n as rt,o as it,r as at,s as ot,t as st}from"./connections-Bb0rBpV-.js";import{t as ct}from"./getAllTasks-C0FzJ32l.js";import{r as lt,s as ut}from"./push-client-o8g5_EOe.js";import{a as dt,o as ft,r as pt}from"./toast-CtIuHprH.js";const mt={openrouter:{label:`OpenRouter API Keys`,href:`https://openrouter.ai/keys`},huggingface:{label:`HuggingFace Access Tokens`,href:`https://huggingface.co/settings/tokens`},bedrock_proxy:{label:`AWS Bedrock Setup`,href:`https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html`},ollama:{label:`Install Ollama`,href:`https://ollama.com/download`},prompt_api:{label:`Prompt API Docs`,href:`https://developer.chrome.com/docs/ai/built-in`}},ht=/* @__PURE__ */ new Set([`ollama`,`bedrock_proxy`,`llamafile`,`transformers_js_local`]);function gt(e){return a(e)?.name||e}function _t(e,t,n){let r=(t||``).toLowerCase();return r?n&&(r.includes(`api key not configured`)||r.includes(`go to settings to add your api key`)||r.includes(`missing api key`)||r.includes(`no api key`))?`api-key-missing`:n&&(r.includes(`invalid api key`)||r.includes(`incorrect api key`)||r.includes(`authentication failed`)||r.includes(`401`)||r.includes(`403`)||r.includes(`unauthorized`)||r.includes(`forbidden`))?`api-key-invalid`:r.includes(`429`)||r.includes(`rate limit`)||r.includes(`too many requests`)?`rate-limited`:r.includes(`failed to fetch`)||r.includes(`networkerror`)||r.includes(`network error`)||r.includes(`econnrefused`)||r.includes(`connection refused`)||r.includes(`enotfound`)||r.includes(`timed out`)||r.includes(`timeout`)||r.includes(`503`)||r.includes(`502`)?`provider-unreachable`:null:null}function vt(e,t,n){let r=gt(e),i=mt[e]?[mt[e]]:[],a=[],o=`${r} Issue`,s=`ShadowClaw hit a ${r} provider error.`;return t===`api-key-missing`?(o=`${r} API Key Required`,s=`${r} needs an API key before requests can run.`,a.push(`Open Settings > AI > Model Provider and enter an API key as required.`),a.push(`Click Save Provider, then retry your message.`)):t===`api-key-invalid`?(o=`${r} Authentication Failed`,s=`${r} rejected the current API key.`,a.push(`Generate or copy a fresh API key for this provider.`),a.push(`Open Settings > AI > Model Provider, replace the key, click Save Provider, then retry.`)):t===`provider-unreachable`?(o=`${r} Not Reachable`,s=`ShadowClaw could not reach ${r}.`,ht.has(e)?(a.push(`Make sure the local ShadowClaw server is running (npm start) and the proxy URL in Settings is correct.`),a.push(`If this provider depends on another local runtime, verify it is running too.`)):(a.push(`Check internet connectivity and confirm the provider service is available.`),a.push(`If you are using a proxy or VPN, ensure requests to the provider are allowed.`))):t===`rate-limited`&&(o=`${r} Rate Limited`,s=`${r} is throttling requests right now.`,a.push(`Wait a moment and retry the request.`),a.push(`If this keeps happening, switch to a lower-traffic model or reduce request frequency.`)),n&&n.trim()&&a.push(`Details: ${n.trim()}`),{mode:`info`,title:o,message:s,details:a,links:i,confirmLabel:`OK`,autoCloseSeconds:30}}function yt(e){if(typeof e.size==`number`&&e.size>0)return e.size;if(typeof e.data==`string`&&e.data.length>0){let t=e.data.endsWith(`==`)?2:+!!e.data.endsWith(`=`);return Math.max(0,Math.floor(e.data.length*3/4)-t)}return 0}function bt(e){return e?e.startsWith(`text/`)||e===`json`||e===`xml`||e===`javascript`||e===`csv`||e===`markdown`:!1}function xt(e){let t=yt(e);if(t===0)return 0;switch(e.mediaType){case`image`:return 1500;case`audio`:return 1500;case`video`:return 2500;default:return bt(e.mimeType)?Math.ceil(t/4):Math.ceil(t/16)}}function St(e){return e?Math.ceil(e.length/4):0}function Ct(e){let t=0;if(typeof e.content==`string`)t=St(e.content);else if(Array.isArray(e.content))for(let n of e.content)if(n.type===`text`&&n.text)t+=St(n.text);else if(n.type===`tool_use`)t+=St(n.name),t+=St(JSON.stringify(n.input));else if(n.type===`tool_result`){let e=n.content;t+=St(typeof e==`string`?e:JSON.stringify(e))}else n.type===`attachment`&&(t+=St(n.fileName),t+=St(n.mimeType),t+=St(n.path),t+=xt(n));return t+4}function wt(e,t){if(!e)return``;if(e.length<=t)return e;let n=e.slice(0,t).lastIndexOf(`
|
|
2
2
|
`),r=n>t*.5?n:t;return`${e.slice(0,r)}\n[...truncated ${e.length-r} chars]`}function Tt(e,t){let{contextLimit:n,systemPromptTokens:r,maxOutputTokens:i,skimTop:a=!1}=t;if(e.length===0)return{messages:[],estimatedTokens:0,truncatedCount:0,contextLimit:n,usagePercent:0};let o=Math.max(0,n-r-i),s=Math.min(25e3,Math.max(1e3,Math.floor(o*.6*4))),c=e.map(e=>Et(e,s)),l=0,u=c.length,d=null,f=0;if(a&&c.length>0){let e=c[0];(e.role===`user`||e.role===`system`)&&(f=Ct(e),f<=o&&(d=e))}let p=o-f;for(let e=c.length-1;e>=+!!d;e--){let t=Ct(c[e]),n=c[e],r=!1;if(n.role===`user`&&Array.isArray(n.content)&&n.content.some(e=>e.type===`tool_result`)){let n=c[e-1];n&&n.role===`assistant`&&Array.isArray(n.content)&&n.content.some(e=>e.type===`tool_use`)&&(r=!0,t+=Ct(n))}if(l+t>p&&e<c.length-1)break;l+=t,r?(u=e-1,e--):u=e}let m=c.slice(u),h=u;d&&u>0&&(m=[d,...m],h=Math.max(0,u-1));let g=l+f,_=g+r,v=n>0?Math.round(_/n*100*10)/10:0;return{messages:m,estimatedTokens:g,truncatedCount:h,contextLimit:n,usagePercent:v}}function Et(e,t){if(!Array.isArray(e.content))return e;let n=e.content.map(e=>e.type===`tool_result`&&typeof e.content==`string`?{...e,content:wt(e.content,t)}:e);return{...e,content:n}}function Dt(e){let t=``,n=32768;for(let r=0;r<e.length;r+=n){let i=e.subarray(r,r+n);t+=String.fromCharCode(...i)}return btoa(t)}function Ot(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}const kt={apng:`image/apng`,avif:`image/avif`,bmp:`image/bmp`,gif:`image/gif`,heic:`image/heic`,heif:`image/heif`,ico:`image/x-icon`,jpeg:`image/jpeg`,jpg:`image/jpeg`,png:`image/png`,svg:`image/svg+xml`,tif:`image/tiff`,tiff:`image/tiff`,webp:`image/webp`},At={...kt,"3gp":`video/3gpp`,aac:`audio/aac`,avi:`video/x-msvideo`,bin:`application/octet-stream`,css:`text/css`,csv:`text/csv`,db:`application/vnd.sqlite3`,dll:`application/octet-stream`,dmg:`application/octet-stream`,dylib:`application/octet-stream`,exe:`application/vnd.microsoft.portable-executable`,flac:`audio/flac`,flv:`video/x-flv`,gz:`application/gzip`,htm:`text/html`,html:`text/html`,iso:`application/octet-stream`,js:`text/javascript`,json:`application/json`,m4a:`audio/mp4`,m4v:`video/mp4`,markdown:`text/markdown`,md:`text/markdown`,mjs:`text/javascript`,mkv:`video/x-matroska`,mov:`video/mp4`,mp3:`audio/mpeg`,mp4:`video/mp4`,oga:`audio/ogg`,ogg:`audio/ogg`,ogv:`video/ogg`,pdf:`application/pdf`,rar:`application/vnd.rar`,so:`application/octet-stream`,sqlite:`application/vnd.sqlite3`,sqlite3:`application/vnd.sqlite3`,tar:`application/x-tar`,ts:`text/typescript`,tsx:`text/typescript`,txt:`text/plain`,wasm:`application/wasm`,wav:`audio/wav`,weba:`audio/webm`,webm:`video/webm`,wmv:`video/x-ms-wmv`,xml:`application/xml`,yaml:`text/yaml`,yml:`text/yaml`,zip:`application/zip`};function jt(e){return e&&(e.split(/[?#]/,1)[0].replace(/\\/g,`/`).split(`/`).pop()||``).toLowerCase().split(`.`).pop()||``}function Mt(e,t){let n=jt(e);return At[n]??t}function Nt(e){let t=jt(e);return kt[t]||null}function Pt(e){return Nt(e)!==null}function Ft(e){let t=jt(e);if(t===`md`||t===`markdown`||t===`txt`)return`text/plain`;if(t===`pdf`)return`application/pdf`;if(kt[t])return kt[t]}function It(e,t=``){return t||Mt(e,`application/octet-stream`)}function Lt(e=``,t=``){let n=(e&&e!==`application/octet-stream`?e:Mt(t)||e).toLowerCase(),r=t.toLowerCase();return n.startsWith(`text/`)||n.includes(`json`)||n.includes(`xml`)||r.endsWith(`.md`)||r.endsWith(`.txt`)?`text`:n.startsWith(`image/`)?`image`:n.startsWith(`audio/`)?`audio`:n.startsWith(`video/`)?`video`:n===`application/pdf`||r.endsWith(`.pdf`)?`document`:`file`}function Rt(e){let t=(e||``).toLowerCase(),n=l.getModelInfo(t);if(n){let e=n.supportsImageInput===!0||n.routesByRequestFeatures===!0,t=n.supportsAudioInput===!0||n.routesByRequestFeatures===!0,r=n.supportsVideoInput===!0||n.routesByRequestFeatures===!0,i=n.supportsDocumentInput===!0||n.routesByRequestFeatures===!0;if(n.supportsImageInput!==void 0||n.supportsAudioInput!==void 0||n.supportsVideoInput!==void 0||n.supportsDocumentInput!==void 0||n.routesByRequestFeatures)return{images:e,audio:t,video:r,documents:i,routerByFeatures:!!n.routesByRequestFeatures,source:`metadata`}}let r=t.includes(`no-vision`)||t.includes(`non-vision`)||t.includes(`text-only`),i=t===`openrouter/free`||t===`openrouter/auto`,a=!r&&[`gpt-4o`,`gpt-4.1`,`gpt-5`,`gpt-6`,`astra`,`claude-3`,`claude-4`,`claude-5`,`claude-sonnet`,`claude-haiku`,`claude-opus`,`claude-fable`,`claude-mythos`,`gemini`,`omni`,`llava`,`qwen-vl`,`-vl`,`vision`,`pixtral`].some(e=>t.includes(e)),o=!r&&(t.includes(`claude-3-5`)||t.includes(`claude-3.5`)||t.includes(`claude-3-7`)||t.includes(`claude-3.7`)||t.includes(`claude-4`)||t.includes(`claude-5`)||t.includes(`claude-fable`)||t.includes(`claude-mythos`)||t.includes(`gemini`)||t.includes(`gpt-4.1`)||t.includes(`gpt-5`)||t.includes(`gpt-6`)||t.includes(`astra`)||/claude-(?:sonnet|haiku|opus|fable|mythos)-\d/.test(t));return a?{images:!0,audio:t.includes(`omni`)||t.includes(`audio`),video:t.includes(`omni`)||t.includes(`video`)||t.includes(`gemini`),documents:o,routerByFeatures:i,source:`heuristic`}:{images:!1,audio:!1,video:!1,documents:!1,routerByFeatures:i,source:`unknown`}}function zt(e){let t=Rt(e),n=[t.images?`images native`:`images fallback`,t.audio?`audio native`:`audio fallback`,t.video?`video native`:`video fallback`,t.documents?`PDFs native`:`PDFs fallback`];return t.routerByFeatures&&n.push(`router can adapt by request features`),n.join(` · `)}async function Bt(e=[],t,n={}){let r=n.maxInlineTextBytes??102400,i=[];for(let n of e){let e=n.mimeType||`application/octet-stream`,a=Lt(e,n.fileName),o=a===`text`?`file`:a===`document`?`document`:a,s=null;try{s=await t(n)}catch{s=null}let c=s?.length??(typeof n.size==`number`?n.size:0);if(a===`text`&&s&&c<=r)try{let e=new TextDecoder(`utf-8`).decode(s),t=e.includes("```")?`~~~~`:"```";i.push({type:`text`,text:`Attachment: ${n.fileName}\n${t}\n${e}\n${t}`});continue}catch{}let l={type:`attachment`,mediaType:o,fileName:n.fileName,mimeType:e,size:n.size,path:n.path};s&&(o===`image`&&c<=3145728||o===`audio`&&c<=5242880||o===`document`&&c<=20971520)&&(l.data=Dt(s)),i.push(l)}return i}async function Vt(e,t,n){let r=await ce(e,t),{dirs:i,filename:a}=he(n),o=r;for(let e of i)o=await o.getDirectoryHandle(e);let s=await o.getFileHandle(a);try{let e=await s.createSyncAccessHandle(),t=e.getSize(),n=new Uint8Array(t);return e.read(n,{at:0}),e.close(),n}catch{let e=await(await s.getFile()).arrayBuffer();return new Uint8Array(e)}}function Ht(e,t,n){let r=null,i,a;return typeof e==`string`?(i=e,a=t):(r=e,i=t,a=n??50),r&&x(r)?Promise.resolve().then(()=>(r.db.prepare(`SELECT * FROM messages WHERE groupId = ? ORDER BY timestamp DESC LIMIT ?`).all(i,a)??[]).reverse().map(Ut)):new Promise(async(e,t)=>{try{let n=r??await S();if(!n)return t(/* @__PURE__ */ Error(`failed to get transaction, cannot get recent messages.`));let o=n.transaction(`messages`,`readonly`);if(!o)return t(/* @__PURE__ */ Error(`failed to get transaction`));let s=o.objectStore(`messages`).index(`by-group-time`),c=IDBKeyRange.bound([i,0],[i,1/0]),l=s.openCursor(c,`prev`),u=[];l.onsuccess=()=>{let t=l.result;t&&u.length<a?(u.push(t.value),t.continue()):e(u.reverse())},l.onerror=()=>t(l.error)}catch(e){t(e)}})}function Ut(e){return{...e,isFromMe:!!e.isFromMe,isTrigger:!!e.isTrigger,attachments:e.attachments?JSON.parse(e.attachments):void 0,a2uiAction:e.a2uiAction?JSON.parse(e.a2uiAction):void 0,a2uiEnvelopes:e.a2uiEnvelopes?JSON.parse(e.a2uiEnvelopes):void 0}}async function Wt(e,t){let n=await Ht(e,t),r=await S();return await Promise.all(n.map(async t=>{if(t.isFromMe)return{role:`assistant`,content:t.content};let n=`${t.sender}: ${t.content}`,i=t.attachments||[];if(i.length===0)return{role:`user`,content:n};let a=await Bt(i,async t=>!r||!t.path?null:Vt(r,e,t.path));return a.length===0?{role:`user`,content:n}:{role:`user`,content:[{type:`text`,text:n},...a]}}))}const Gt=`group_metadata`;async function Kt(e){let t=await w(e,Gt);if(!t)return[];try{return JSON.parse(t)}catch{return[]}}async function qt(e,t){await A(e,Gt,JSON.stringify(t))}async function Jt(e,t,n=`br:`,r){let i=await Kt(e),a={groupId:`${n}${r??ye()}`,name:t,createdAt:Date.now()};return i.push(a),await qt(e,i),a}async function Yt(e,t,n){let r=await Kt(e),i=r.find(e=>e.groupId===t);i&&(i.name=n),await qt(e,r)}async function Xt(e,t,n){let r=await Kt(e),i=r.find(e=>e.groupId===t);i&&(n&&n.length>0?i.toolTags=n:delete i.toolTags),await qt(e,r)}async function Zt(e,t){await qt(e,(await Kt(e)).filter(e=>e.groupId!==t))}async function Qt(e){let t=await Kt(e);if(t.length===0){let t={groupId:p,name:`Main`,createdAt:0};return await qt(e,[t]),[t]}return t}async function $t(e,t){let n=await Kt(e),r=new Map(n.map(e=>[e.groupId,e])),i=[];for(let e of t){let t=r.get(e);t&&(i.push(t),r.delete(e))}for(let e of n)r.has(e.groupId)&&i.push(e);await qt(e,i)}async function en(e,t){let n=await Kt(e),r=n.find(e=>e.groupId===t);if(!r)return null;let i=t.indexOf(`:`),a={groupId:`${i>=0?t.slice(0,i+1):`br:`}${ye()}`,name:`${r.name} (copy)`,createdAt:Date.now(),pinnedMaxTokens:r.pinnedMaxTokens,providerRuntimeOverrides:r.providerRuntimeOverrides?JSON.parse(JSON.stringify(r.providerRuntimeOverrides)):void 0,subagentModelSelectionMode:r.subagentModelSelectionMode,subagentMaxTokens:r.subagentMaxTokens,subagentPinnedProvider:r.subagentPinnedProvider,subagentPinnedModel:r.subagentPinnedModel,subagentFastProvider:r.subagentFastProvider,subagentFastModel:r.subagentFastModel,subagentSmartProvider:r.subagentSmartProvider,subagentSmartModel:r.subagentSmartModel,subagentPowerfulProvider:r.subagentPowerfulProvider,subagentPowerfulModel:r.subagentPowerfulModel,toolTags:r.toolTags?[...r.toolTags]:void 0};return n.push(a),await qt(e,n),a}async function tn(e,t,n,r,i){let a=await Kt(e),o=a.find(e=>e.groupId===t);o&&(n?o.pinnedProvider=n:delete o.pinnedProvider,r?o.pinnedModel=r:delete o.pinnedModel,typeof i==`number`&&Number.isFinite(i)&&i>0?o.pinnedMaxTokens=Math.floor(i):delete o.pinnedMaxTokens),await qt(e,a)}async function nn(e,t,n,r,i,a){let o=await Kt(e),s=o.find(e=>e.groupId===t);s&&(s.subagentModelSelectionMode=n,n===`manual`?(r?s.subagentPinnedProvider=r:delete s.subagentPinnedProvider,i?s.subagentPinnedModel=i:delete s.subagentPinnedModel):(delete s.subagentPinnedProvider,delete s.subagentPinnedModel),typeof a==`number`&&Number.isFinite(a)&&a>0?s.subagentMaxTokens=Math.floor(a):delete s.subagentMaxTokens),await qt(e,o)}async function rn(e,t,n){let r=await Kt(e),i=r.find(e=>e.groupId===t);i&&(n&&Object.keys(n).length>0?i.providerRuntimeOverrides=JSON.parse(JSON.stringify(n)):delete i.providerRuntimeOverrides),await qt(e,r)}const an=[/<\|start_header_id\|>\s*(?:system|user|assistant|tool)\s*<\|end_header_id\|>/gi,/<\|(?:begin_of_text|end_of_text|eot_id|im_start|im_end|end_of_message)\|>/gi,/<\|(?:startofturn|endofturn|start_of_turn|end_of_turn)\|>/gi,/<\|(?:image|audio|video|tool_call|tool_response|tool_result|function_call)\|>|<\|\/function_call\|>/gi,/<|(?:system|user|assistant|im_start|im_end)|>/g,/\[\s*INST\s*\]|\[\s*\/INST\s*\]|<<\s*SYS\s*>>|<<\s*\/SYS\s*>>/gi,/<\/?s>|<\/?bos>|<\/?eos>|<\|(?:bos|eos|pad|unk)\|>/gi,/<\|(?:START_OF_TURN_TOKEN|END_OF_TURN_TOKEN|CHATBOT_TOKEN|USER_TOKEN|SYSTEM_TOKEN)\|>/gi,/<\|(?:system|user|assistant|end|endoftext|placeholder\d*)\|>/gi,/<|(?:begin▁of▁sentence|end▁of▁sentence)|>/g,/<\|start\|>\s*(?:system|user|assistant|tool)\s*<\|message\|>/gi];function on(e){for(let t of an)if(t.test(e))return!0;return!1}function sn(e){let t=String(e||``),n=t;for(let e of an)t=t.replace(e,``);return t!==n&&(t=t.replace(/^[ \t]+$/gm,``),t=t.replace(/\n{3,}/g,`
|
|
3
3
|
|
|
4
4
|
`)),t}function cn(e,t){let n=sn(e);return n!==e&&on(e)&&console.info(`[ShadowClaw] Chat-template control token(s) detected and stripped from "${t}" output. The provider or model may not be applying its chat template correctly. Original length: ${e.length}, cleaned length: ${n.length}.`),n}function ln(e,t,n,r){return{type:`thinking-log`,payload:{groupId:e,level:t,timestamp:Date.now(),label:n,message:r||``}}}function un(e,t,n){return{type:`tool-activity`,payload:{groupId:e,tool:t,status:n}}}async function dn(e,t,n,r){let{dirs:i,filename:a}=he(n);for(let n=0;n<2;n++)try{let n=await ce(e,t);for(let e of i)n=await n.getDirectoryHandle(e,{create:!0});let o=await n.getFileHandle(a,{create:!0});try{await _e(o,r);return}catch(t){if(!((t instanceof Error?t.message:String(t)).includes(`Writable file streams are not supported`)&&(await ie(e)).type===`opfs`))throw t}let s=t.replace(/:/g,`-`);await ue([oe(),`groups`,s,...i,a],r);return}catch(e){if(n===0&&se(e)){ae();continue}throw e}}let fn=null;function pn(e){fn=e}const mn=/* @__PURE__ */ new Map;function hn(e,t){mn.set(e,t)}function gn(e){mn.delete(e)}function _n(e){let t=e?.payload?.groupId;t&&mn.has(t)?mn.get(t).push(e):fn?fn(e):typeof self<`u`&&typeof self.postMessage==`function`&&self.postMessage(e)}function vn(e,t){let n=RegExp(`<${t}[^>]*>`,`i`),r=e.match(n);if(!r||r.index===void 0)return null;let i=r.index+r[0].length,a=RegExp(`</${t}>`,`i`),o=e.slice(i).match(a);return!o||o.index===void 0?null:e.slice(i,i+o.index)}function yn(e,t){let n=e;for(let e of t)n=n.replace(RegExp(`<${e}[^>]*>[\\s\\S]*?</${e}>`,`gi`),``);return n}function bn(e){let t=e;return t=t.replace(/<[^>]+>/g,` `),t=t.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`).replace(/ /g,` `).replace(/&#\d+;/g,``),t=t.replace(/[ \t]+/g,` `).replace(/\n\s*\n/g,`
|
|
@@ -2064,7 +2064,7 @@ const restoreGlobals = applyGlobalShadows();
|
|
|
2064
2064
|
|
|
2065
2065
|
`).trim()}function iW(e){let t=/<\|tool_call>call:([a-zA-Z_][a-zA-Z0-9_]*)(\{[\s\S]*?\})?<tool_call\|>/g,n=[];return{toolBlocks:n,residualText:e.replace(t,(e,t,r)=>{let i={};if(r)try{let e=JSON.parse(r);e&&typeof e==`object`&&!Array.isArray(e)&&(i=e)}catch{}return n.push({type:`tool_use`,id:`mesh_llm_call_${Date.now()}_${Math.random().toString(36).slice(2)}`,name:t,input:i}),``}).replace(/^[ \t]+$/gm,``).replace(/\n{3,}/g,`
|
|
2066
2066
|
|
|
2067
|
-
`).trim()}}function aW(e){if(!e||!Array.isArray(e.content))return e;let t=[],n=!1;for(let r of e.content){if(r.type!==`text`){t.push(r);continue}let{toolBlocks:e,residualText:i}=iW(rW(r.text));i&&t.push({type:`text`,text:i}),e.length>0&&(n=!0,t.push(...e))}return{...e,content:t,stop_reason:n||e.stop_reason===`tool_use`?`tool_use`:e.stop_reason}}const oW={openai:$U,anthropic:eW,google:nW,"mesh-llm":class extends $U{parseResponse(e){return aW(super.parseResponse(e))}}};function sW(e){let t=oW[e.format];if(!t)throw Error(`Unsupported provider format: ${e.format}`);return new t(e)}function cW(e,t,n,r){return sW(e).formatRequest(t,n,r)}function lW(e){let t=e.toLowerCase();return t===`none`?0:t===`max`||t===`xhigh`?.95:t===`high`?.8:t===`medium`?.5:t===`low`?.2:t===`minimal`?.1:0}function uW(e,t){return sW(e).parseResponse(t)}function dW(e){let t=l.getModelInfo(e);if(t?.contextWindow)return t.contextWindow;let n=e.toLowerCase();return n.includes(`gpt-6-luna`)?1e6:n.includes(`gpt-6`)||n.includes(`astra`)?105e4:n.includes(`gpt-4.1`)?1047576:n.includes(`gpt-5`)?4e5:n.includes(`gpt-4o`)||n.includes(`gpt-4-turbo`)?128e3:n===`gpt-4`||n.startsWith(`gpt-4-`)?8192:n.includes(`gpt-3.5-turbo`)?16385:n.includes(`gpt-3.5`)?4096:n.includes(`o1`)||n.includes(`o3`)||n.includes(`o4`)?2e5:/claude-(?:sonnet|opus|haiku|fable|mythos)-[4-9]/.test(n)||/claude-[4-9]-(?:sonnet|opus|haiku|fable|mythos)/.test(n)||n.includes(`claude-opus-4`)||n.includes(`claude-sonnet-4`)||n.includes(`claude-fable`)||n.includes(`claude-mythos`)?1e6:n.includes(`claude`)?2e5:n.includes(`gemini-nano`)?4096:n.includes(`gemini-3.5-pro`)||n.includes(`gemini-3-pro`)||n.includes(`gemini-1.5-pro`)?2097152:n.includes(`gemini-3`)||n.includes(`gemini-2.5`)||n.includes(`gemini-2.0`)||n.includes(`gemini-1.5`)?1048576:n.includes(`gemini-1.0`)||n.includes(`gemini-pro`)?32768:n.includes(`gemini`)?1048576:n.includes(`llama-3.1`)||n.includes(`llama-3-1`)?128e3:n.includes(`llama-3`)?8192:n.includes(`llama`)?4096:n.includes(`gemma-4-12b`)||n.includes(`gemma-4-26b`)||n.includes(`gemma-4-31b`)||n.includes(`gemma-4-e9b`)||n.includes(`gemma-4-e27b`)?256e3:n.includes(`gemma-4`)||n.includes(`gemma 4`)||n.includes(`gemma-3-4b`)||n.includes(`gemma-3-12b`)||n.includes(`gemma-3-27b`)?128e3:n.includes(`gemma-3`)||n.includes(`gemma 3`)?32e3:n.includes(`gemma-2`)||n.includes(`gemma-7b`)||n.includes(`gemma-2b`)||n.includes(`gemma`)?8192:n.includes(`mistral-large`)?128e3:n.includes(`mistral`)?32e3:n.includes(`amazon.titan`)?8192:n.includes(`amazon.nova-micro`)||n.includes(`nova-micro`)?128e3:n.includes(`amazon.nova`)||n.includes(`nova-pro`)||n.includes(`nova-lite`)?3e5:n.includes(`ai21`)?8192:n.includes(`cohere`)||n.includes(`phi-4-mini`)?128e3:n.includes(`phi-4`)?16384:n.includes(`phi-3.5`)||n.includes(`128k`)?128e3:n.includes(`phi-3`)?4096:n.includes(`qwen3.5`)?262144:n.includes(`qwen3-0.6b`)||n.includes(`qwen3-1.7b`)?40960:n.includes(`qwen3`)?128e3:n===`mesh`?242144:4096}function fW(e,t){if(e===`translate`)return`Translate the following text from ${t.sourceLanguage||`auto`} to ${t.targetLanguage}. Provide ONLY the raw translated text without commentary or quotation marks:\n\n${t.text}`;if(e===`summarize`)return t.overridePrompt?`${t.overridePrompt}\n\n${t.text}`:`Summarize the following text (type: ${t.type||`tldr`}, format: ${t.format||`plain-text`}, length: ${t.length||`medium`}). Provide ONLY the summary:\n\n${t.text}`;if(e===`write`)return`Draft content for the following request (tone: ${t.tone||`neutral`}, format: ${t.format||`plain-text`}, length: ${t.length||`short`}, context: ${t.context||`none`}):\n\n${t.prompt}`;if(e===`rewrite`)return`Rewrite the following text (tone: ${t.tone||`as-is`}, format: ${t.format||`as-is`}, length: ${t.length||`as-is`}, context: ${t.context||`none`}):\n\n${t.text}`;if(e===`proofread`)return`Proofread and correct grammar, spelling, and style in the following text. Provide ONLY the corrected text:\n\n${t.text}`;if(e===`detect-language`)return`Detect the language of the following text. Return ONLY a JSON array of objects with "detectedLanguage" (BCP 47 code) and "confidence" (0.0 - 1.0), e.g. [{"detectedLanguage":"en","confidence":0.99}]:\n\n${t.text}`;if(e===`semantic-embedder`)return`Provide a concise semantic description/representation for the following content:\n\n${JSON.stringify(t.text)}`;throw Error(`Unknown native AI task type: ${e}`)}async function pW(e){if(e.toolsBackendPref)return e.toolsBackendPref;if(e.db)try{let{getConfig:t}=await import(`./getConfig-DSieAlsi.js`).then(e=>e.n),n=await t(e.db,m.BUILTIN_AI_TOOLS_BACKEND);if(n)return n}catch{}return`active_provider`}async function mW(e,t,n){if(n.apiKey!==void 0)return n.apiKey;if(j.default!==void 0&&j.default.env){let e=j.default.env.SHADOW_CLAW_API_KEY;if(e)return e;switch(t){case`openrouter`:if(j.default.env.OPENROUTER_API_KEY)return j.default.env.OPENROUTER_API_KEY;break;case`huggingface`:if(j.default.env.HUGGINGFACE_API_KEY||j.default.env.HF_TOKEN)return j.default.env.HUGGINGFACE_API_KEY||j.default.env.HF_TOKEN||``;break;case`gemini_proxy`:if(j.default.env.GEMINI_API_KEY)return j.default.env.GEMINI_API_KEY}let n=`${t.toUpperCase()}_API_KEY`;if(j.default.env[n])return j.default.env[n]}if(n.db)try{let{getConfig:e}=await import(`./getConfig-DSieAlsi.js`).then(e=>e.n),r=await e(n.db,`api_key:${t}`)||await e(n.db,`apiKey`);if(r)return r}catch{}return``}async function hW(e){let{taskType:t,input:n,onProgress:r}=e;if(await pW(e)===`local`){if(t===`summarize`)return await CH(n.text,{...n,onProgress:r});if(t===`write`)return await wH(n.prompt,{...n,onProgress:r});if(t===`rewrite`)return await TH(n.text,{...n,onProgress:r});if(t===`proofread`)return await OH(n.text,{...n,onProgress:r});if(t===`detect-language`)return await EH(n.text,{onProgress:r});if(t===`translate`)return await DH(n.text,{sourceLanguage:n.sourceLanguage||`auto`,targetLanguage:n.targetLanguage||`en`,...n,onProgress:r});if(t===`semantic-embedder`)return await kH(n.text,{...n,onProgress:r});throw Error(`Unknown native AI task: ${t}`)}let i=ne()?`openrouter`:`prompt_api`,o=e.providerId;if(!o&&e.db)try{let{getConfig:t}=await import(`./getConfig-DSieAlsi.js`).then(e=>e.n);o=await t(e.db,m.PROVIDER)||i}catch{}o||=j.default!==void 0&&(j.default.env.SHADOW_CLAW_PROVIDER||j.default.env.SHADOW_CLAW_DEFAULT_PROVIDER)||i;let s=fW(t,n);if(o===`prompt_api`){await xH();let e=globalThis,n=e.LanguageModel||e.ai?.languageModel;if(n&&typeof n.create==`function`){let e;try{e=await n.create()}catch(e){console.warn(`Prompt API session creation failed in active provider task:`,e)}if(e)try{let n=await e.prompt(s),r=String(n||``).trim();if(t===`detect-language`)try{let e=JSON.parse(r);return Array.isArray(e)?e:[e]}catch{return[{detectedLanguage:`en`,confidence:.8}]}return r}finally{typeof e.destroy==`function`&&e.destroy()}}}let c=a(o);if(!c||!c.baseUrl||c.baseUrl.startsWith(`builtin://`)||c.baseUrl.startsWith(`local://`)||c.format===`prompt_api`||c.format===`transformers_js`){if(t===`summarize`)return await CH(n.text,n);if(t===`write`)return await wH(n.prompt,n);if(t===`rewrite`)return await TH(n.text,n);if(t===`proofread`)return await OH(n.text,n);if(t===`detect-language`)return await EH(n.text);if(t===`translate`)return await DH(n.text,{sourceLanguage:n.sourceLanguage||`auto`,targetLanguage:n.targetLanguage||`en`,...n});if(t===`semantic-embedder`)return await kH(n.text,n);throw Error(`Provider ${o} not found and no local fallback available`)}let l=ne()&&(o===`transformers_js_local`||o===`llamafile`),u=await mW(c,o,e);if(!l&&c.requiresApiKey!==!1&&!u)throw Error(`Provider "${c.name||o}" requires an API key for task "${t}". Please provide an API key or configure tools backend.`);let d=e.model||c.defaultModel||`default`,f={...ZU(c,u),...e.headers||{}},p=cW(c,[{role:`user`,content:s}],[],{maxTokens:e.maxTokens||2048,model:d,system:`You are a specialized text task assistant. Fulfill the user request directly and accurately without conversational filler.`});if(ne()&&o===`transformers_js_local`){let n=globalThis.__nodeTransformersTaskExecutor;if(n){let r=uW(c,await n({modelId:d,messages:p?.messages||[{role:`user`,content:s}],maxTokens:e.maxTokens||2048,abortSignal:e.abortSignal,onProgress:e.onProgress})).content?.filter(e=>e.type===`text`)?.map(e=>e.text)?.join(``)?.trim()||``;if(t===`detect-language`)try{let e=JSON.parse(r);return Array.isArray(e)?e:[e]}catch{return[{detectedLanguage:`en`,confidence:.8}]}return r}}if(ne()&&(o===`llamafile`||o===`agentfile`)){let n=globalThis.__nodeLlamafileTaskExecutor;if(n){let r=uW(c,await n({model:d,messages:p?.messages||[{role:`user`,content:s}],maxTokens:e.maxTokens||2048,abortSignal:e.abortSignal})).content?.filter(e=>e.type===`text`)?.map(e=>e.text)?.join(``)?.trim()||``;if(t===`detect-language`)try{let e=JSON.parse(r);return Array.isArray(e)?e:[e]}catch{return[{detectedLanguage:`en`,confidence:.8}]}return r}}let h=await fetch(c.baseUrl,{body:JSON.stringify(p),headers:f,method:`POST`});if(!h.ok){let e=await h.text();throw Error(`Active provider task API error ${h.status}: ${e}`)}let g=uW(c,await h.json()).content?.filter(e=>e.type===`text`)?.map(e=>e.text)?.join(``)?.trim()||``;if(t===`detect-language`)try{let e=JSON.parse(g);return Array.isArray(e)?e:[e]}catch{return[{detectedLanguage:`en`,confidence:.8}]}return g}async function gW(e,t,n,r){if(ne()){let i=r?.invokeContext;return await hW({taskType:t,input:n,groupId:e,providerId:i?.provider,model:i?.model,apiKey:i?.apiKey,maxTokens:i?.maxTokens,headers:i?.providerHeaders,db:r?.db||i?.db})}let i=ye();return _n({type:`request-native-ai-task`,payload:{id:i,groupId:e,taskType:t,input:n}}),await new Promise((e,t)=>{globalThis.pendingNativeAiResolvers=globalThis.pendingNativeAiResolvers||{},globalThis.pendingNativeAiResolvers[i]={resolve:e,reject:t}})}async function _W(e,t,n){let r=String(e.text||``).trim();if(!r)return`Error: text is required for summarize_text`;try{return await gW(t,`summarize`,{text:r,type:e.type,format:e.format,length:e.length,preference:e.preference,context:e.context,outputLanguage:e.outputLanguage,overridePrompt:e.overridePrompt,sharedContext:e.sharedContext},n)}catch(e){return`Error summarizing text: ${e instanceof Error?e.message:String(e)}`}}async function vW(e,t,n){let r=String(e.prompt||``).trim();if(!r)return`Error: prompt is required for write_text`;try{return await gW(t,`write`,{prompt:r,context:e.context,tone:e.tone,format:e.format,length:e.length,outputLanguage:e.outputLanguage,sharedContext:e.sharedContext},n)}catch(e){return`Error writing text: ${e instanceof Error?e.message:String(e)}`}}async function yW(e,t,n){let r=String(e.text||``).trim();if(!r)return`Error: text is required for rewrite_text`;try{return await gW(t,`rewrite`,{text:r,tone:e.tone,format:e.format,length:e.length,context:e.context,outputLanguage:e.outputLanguage,sharedContext:e.sharedContext},n)}catch(e){return`Error rewriting text: ${e instanceof Error?e.message:String(e)}`}}async function bW(e,t,n){let r=String(e.text||``).trim();if(!r)return`Error: text is required for proofread_text`;try{return await gW(t,`proofread`,{text:r,context:e.context},n)}catch(e){return`Error proofreading text: ${e instanceof Error?e.message:String(e)}`}}async function xW(e,t,n){let r=String(e.text||``).trim();if(!r)return`Error: text is required for detect_language`;try{let e=await gW(t,`detect-language`,{text:r},n);return typeof e==`string`?e:JSON.stringify(e,null,2)}catch(e){return`Error detecting language: ${e instanceof Error?e.message:String(e)}`}}async function SW(e,t,n){let r=String(e.text||``).trim(),i=String(e.sourceLanguage||``).trim(),a=String(e.targetLanguage||``).trim();if(!r||!i||!a)return`Error: text, sourceLanguage, and targetLanguage are required for translate_text`;try{return await gW(t,`translate`,{text:r,sourceLanguage:i,targetLanguage:a},n)}catch(e){return`Error translating text: ${e instanceof Error?e.message:String(e)}`}}async function CW(e,t,n){let r=e.text;if(!r||Array.isArray(r)&&r.length===0)return`Error: text is required for embed_text`;try{let i=await gW(t,`semantic-embedder`,{text:r,taskType:e.taskType},n);return typeof i==`string`?i:JSON.stringify(i,null,2)}catch(e){return`Error generating embeddings: ${e instanceof Error?e.message:String(e)}`}}async function wW(e,t={}){let{maxRetries:n=3,baseDelayMs:r=1e3,maxDelayMs:i=3e4,jitterFactor:a=.5,shouldRetry:o=()=>!0,onRetry:s,signal:c}=t,l;for(let t=0;t<=n;t++){if(c?.aborted)throw c.reason??new DOMException(`Aborted`,`AbortError`);try{return await e()}catch(e){if(l=e,e instanceof DOMException&&e.name===`AbortError`||e instanceof Error&&e.name===`AbortError`)throw e;if(t>=n||!o(e,t+1))break;let u=qV(t,r,i,a);s&&s(t+1,n,u,e),await JV(u,c)}}throw l}const TW=/* @__PURE__ */ new Set([408,429,500,502,503,504]);function EW(e){return/network|ECONNRESET|ECONNREFUSED|ETIMEDOUT|fetch failed|EAI_AGAIN|EAI_NONAME|getaddrinfo/i.test(e.message)}function DW(e){if(e instanceof TypeError)return!0;if(typeof e?.status==`number`)return TW.has(e.status);if(e instanceof Error){let t=e.message.match(/\b(4\d{2}|5\d{2})\b/);if(t)return TW.has(Number(t[1]));if(EW(e))return!0}return!1}function OW(e){return e instanceof TypeError?!0:e&&typeof e.status==`number`?TW.has(e.status):e instanceof Error&&EW(e)}const kW=/* @__PURE__ */ new Set([`create_task`,`update_task`,`delete_task`,`enable_task`,`disable_task`,`send_notification`,`create_room`,`invite_to_room`,`leave_room`]);function AW(e){if(!Array.isArray(e))return null;let t=e.map(e=>typeof e==`string`?e:typeof e?.name==`string`?e.name:null).filter(Boolean);return new Set(t)}function jW(e,t){let n=AW(t);return n&&!n.has(e)?`Tool "${e}" is not allowed in the current context. Do not call it again. Use one of the available tools or ask for help.`:null}function MW(e,t,n){return(t||n)&&e===`run_task`?`Tool "run_task" cannot be called from within a task execution to prevent infinite loops.`:null}function NW(e,t){return t&&kW.has(e)?`Tool "${e}" is not allowed during scheduled task execution to prevent recursion.`:null}function PW(e){return ne()&&re.has(e)?`Tool "${e}" is not available in headless CLI mode. It requires a browser UI.`:null}function FW(e,t={}){return jW(e,t.allowedTools)||MW(e,t.isScheduledTask,t.isTaskExecution)||NW(e,t.isScheduledTask)||PW(e)||null}async function IW(e,t,n,r,i={},a){let o=await pe(e,r,t);if(!o)return`Unknown tool: ${t}`;let s=i.declarativeDepth||0;if(s>=8)return`Tool error (${t}): declarative tool nesting limit exceeded.`;if(o.execution.type===`tool`){let c=o.execution.name;return c?await a(e,c,o.execution.input?{...n,...o.execution.input}:n,r,{...i,declarativeDepth:s+1}):`Tool error (${t}): declarative tool target is missing.`}return o.execution.type===`bash`?await zB(e,{command:o.execution.command,stdin:JSON.stringify(n)},r):await tU(e,{code:o.execution.code,data:JSON.stringify(n)})}let LW=null;async function RW(){return LW||=import(`./git-BH6qyToB.js`),LW}async function zW(e,t,n,r){let i=await RW();return await gV(e,t,n,r,{configKeys:{GIT_CORS_PROXY:m.GIT_CORS_PROXY,GIT_PROXY_URL:m.GIT_PROXY_URL,GIT_AUTHOR_NAME:m.GIT_AUTHOR_NAME,GIT_AUTHOR_EMAIL:m.GIT_AUTHOR_EMAIL},getConfig:w,getGroupDir:ce,getProxyUrl:i.getProxyUrl,getRemoteUrl:i.getRemoteUrl,gitAdd:i.gitAdd,gitBranch:i.gitBranch,gitCheckout:i.gitCheckout,gitClone:i.gitClone,gitCommit:i.gitCommit,gitConfig:i.gitConfig,gitDeleteBranch:i.gitDeleteBranch,gitDeleteRepo:i.gitDeleteRepo,gitDiff:i.gitDiff,gitFetch:i.gitFetch,gitInit:i.gitInit,gitListBranches:i.gitListBranches,gitListRepos:i.gitListRepos,gitListTags:i.gitListTags,gitLog:i.gitLog,gitMerge:i.gitMerge,gitPull:i.gitPull,gitPush:i.gitPush,gitReadFileAtRef:i.gitReadFileAtRef,gitRemote:i.gitRemote,gitReset:i.gitReset,gitShow:i.gitShow,gitStatus:i.gitStatus,gitTag:i.gitTag,gitUnstage:i.gitUnstage,readGroupFile:fe,resolveGitCredentials:Me})}const $=/* @__PURE__ */ new Map;$.set(`bash`,(e,t,n)=>zB(e,t,n)),$.set(`read_file`,(e,t,n)=>EU(e,t,n)),$.set(`open_file`,(e,t,n)=>wU(e,t,n)),$.set(`attach_file_to_chat`,(e,t,n)=>dU(e,t,n)),$.set(`send_file`,(e,t,n)=>AU(e,t,n)),$.set(`write_file`,(e,t,n)=>MU(e,t,n)),$.set(`delete_file`,(e,t,n)=>yU(e,t,n)),$.set(`move_file`,(e,t,n)=>CU(e,t,n)),$.set(`copy_file`,(e,t,n)=>gU(e,t,n)),$.set(`create_directory`,(e,t,n)=>_U(e,t,n)),$.set(`patch_file`,(e,t,n)=>TU(e,t,n)),$.set(`list_files`,(e,t,n)=>xU(e,t,n)),$.set(`manage_tools`,(e,t,n)=>iU(t,n)),$.set(`list_tool_profiles`,e=>rU(e)),$.set(`fetch_url`,(e,t,n)=>lV(e,t,n,{buildAuthHeaders:De,fetchImpl:fetch,fetchMaxResponse:d,isRetryableFetchError:OW,post:_n,resolveGitCredentials:Me,resolveServiceCredentials:Ae,retryableStatusCodes:TW,stripHtml:xn,uploadGroupFile:dn,withRetry:wW})),$.set(`fetch_file`,(e,t,n)=>sV(e,t,n,{buildAuthHeaders:De,fetchImpl:fetch,isRetryableFetchError:OW,post:_n,resolveGitCredentials:Me,resolveServiceCredentials:Ae,retryableStatusCodes:TW,uploadGroupFile:dn,withRetry:wW,writeGroupFile:me})),$.set(`update_memory`,(e,t,n)=>jU(e,t,n)),$.set(`create_task`,(e,t,n)=>RH(t,n)),$.set(`javascript`,(e,t)=>tU(e,t)),$.set(`activate_skill`,(e,t,n)=>LU(e,t,n)),$.set(`list_tasks`,(e,t,n)=>UH(e,n)),$.set(`update_task`,(e,t,n)=>GH(e,t,n)),$.set(`enable_task`,(e,t,n)=>HH(e,t,n)),$.set(`disable_task`,(e,t,n)=>VH(e,t,n)),$.set(`delete_task`,(e,t,n)=>zH(t,n)),$.set(`run_task`,(e,t,n)=>WH(e,t,n)),$.set(`clear_chat`,(e,t,n)=>qH(n)),$.set(`show_toast`,(e,t)=>cU(t)),$.set(`send_notification`,(e,t,n)=>sU(t,n)),$.set(`create_room`,(e,t)=>EV(t)),$.set(`invite_to_room`,(e,t,n)=>IV(t,n)),$.set(`leave_room`,(e,t,n)=>LV(t,n)),$.set(`list_room_members`,(e,t,n)=>RV(e,t,n)),$.set(`prompt_peer`,(e,t,n)=>BV(e,t,n)),$.set(`list_peers`,(e,t,n)=>VV(e,t,n));const BW=(e,t,n)=>QB(e,t,n);$.set(`manage_email`,BW),$.set(`manage_integration`,BW),$.set(`email_read_messages`,(e,t,n)=>VW(e,`manage_email`,{...t,action:`read_messages`},n)),$.set(`integration_read_messages`,(e,t,n)=>VW(e,`manage_email`,{...t,action:`read_messages`},n)),$.set(`email_send_message`,(e,t,n)=>VW(e,`manage_email`,{...t,action:`send_message`},n)),$.set(`integration_send_message`,(e,t,n)=>VW(e,`manage_email`,{...t,action:`send_message`},n)),$.set(`remote_mcp_list_tools`,(e,t,n)=>wV(e,t,n,{callRemoteMcpTool:Ne,listRemoteMcpTools:Oe,McpReauthRequiredError:je,post:_n})),$.set(`remote_mcp_call_tool`,(e,t,n)=>TV(e,t,n,{callRemoteMcpTool:Ne,listRemoteMcpTools:Oe,McpReauthRequiredError:je,post:_n}));for(let e of[`git_clone`,`git_checkout`,`git_branch`,`git_status`,`git_add`,`git_log`,`git_diff`,`git_branches`,`git_list_repos`,`git_delete_repo`,`git_commit`,`git_pull`,`git_push`,`git_merge`,`git_reset`,`git_fetch`,`git_read_file_at_ref`,`git_show`,`git_delete_branch`,`git_init`,`git_tag`,`git_remote`,`git_config`,`git_unstage`])$.set(e,(t,n,r)=>zW(t,e,n,r));$.set(`list_components`,()=>nU()),$.set(`render_component`,(e,t,n)=>oU(t,n)),$.set(`spawn_subagent`,async(e,t,n,r)=>r?.invokeContext?await LH(t,n,r.invokeContext):`Error: spawn_subagent requires an active agent invocation context. This tool cannot be called directly.`),$.set(`get_current_time`,(e,t)=>JH(t)),$.set(`search_files`,(e,t,n)=>kU(e,t,n,{maxFileBytes:ve.searchFilesMaxFileBytes,maxFilesVisited:ve.searchFilesMaxFilesVisited,skipDirs:ve.searchFilesSkipDirsSet})),$.set(`diff_files`,(e,t,n)=>bU(e,t,n)),$.set(`ask_user`,(e,t,n)=>KH(t,n)),$.set(`web_search`,(e,t)=>lU(t)),$.set(`summarize_text`,(e,t,n,r)=>_W(t,n,{db:e,invokeContext:r?.invokeContext})),$.set(`write_text`,(e,t,n,r)=>vW(t,n,{db:e,invokeContext:r?.invokeContext})),$.set(`rewrite_text`,(e,t,n,r)=>yW(t,n,{db:e,invokeContext:r?.invokeContext})),$.set(`proofread_text`,(e,t,n,r)=>bW(t,n,{db:e,invokeContext:r?.invokeContext})),$.set(`detect_language`,(e,t,n,r)=>xW(t,n,{db:e,invokeContext:r?.invokeContext})),$.set(`translate_text`,(e,t,n,r)=>SW(t,n,{db:e,invokeContext:r?.invokeContext})),$.set(`embed_text`,(e,t,n,r)=>CW(t,n,{db:e,invokeContext:r?.invokeContext}));async function VW(e,t,n,r,i={}){try{let a=FW(t,i);if(a)return a;let o=$.get(t);return o?await o(e,n,r,i):await IW(e,t,n,r,i,VW)}catch(e){return`Tool error (${t}): ${e instanceof Error?e.message:String(e)}`}}const HW=880803840;var UW=class{emitter;expectedTotalBytes;logEvents;suppressInitialZero;_hasEmitted=!1;hasStreamEvents=!1;urlBytesMap=/* @__PURE__ */ new Map;maxProgressFraction=0;maxLoadedBytes=0;maxEffectiveTotal=0;lastReportedMessage=``;lastReportedFraction=null;constructor(e,t){this.emitter=e,this.expectedTotalBytes=t?.expectedTotalBytes===void 0?HW:t.expectedTotalBytes,this.logEvents=t?.logEvents??!1,this.suppressInitialZero=t?.suppressInitialZero??!1}get hasEmitted(){return this._hasEmitted}markActive(){this._hasEmitted=!0}onStreamProgress(e,t,n,r=!1){if(!Number.isFinite(t)||t<0)return;this.hasStreamEvents=!0,this.urlBytesMap.set(e,{received:t,total:n,complete:r});let i=0,a=0,o=this.urlBytesMap.size>0;for(let e of this.urlBytesMap.values())i+=e.received,e.total!=null&&Number.isFinite(e.total)&&e.total>0&&(a+=e.total),e.complete||(o=!1);let s=this.maxEffectiveTotal,c=this.expectedTotalBytes>0?this.expectedTotalBytes:0,l=Math.max(a,c);this.maxEffectiveTotal=Math.max(this.maxEffectiveTotal,l);let u=this.maxEffectiveTotal;if(this.maxLoadedBytes=Math.max(this.maxLoadedBytes,i),u>0){let e=Math.min(1,Math.max(0,this.maxLoadedBytes/u)),t=o?e:Math.min(.99,e);this.maxProgressFraction=u>s&&s>0?t:Math.max(this.maxProgressFraction,t);let n=`Downloading Prompt API model... (${(this.maxLoadedBytes/1048576).toFixed(1)} / ${(u/1048576).toFixed(1)} MB · ${Math.min(o?100:99,Math.round(this.maxProgressFraction*100))}%)`;this.emit(this.maxProgressFraction,n)}else{let e=`Downloading Prompt API model... (${(this.maxLoadedBytes/1048576).toFixed(1)} MB downloaded)`;this.emit(null,e)}}onProgressEvent(e){let t=Number(e?.loaded),n=Number(e?.total);if(this.logEvents&&console.log(`[PromptApiProgressAggregator] onProgressEvent:`,{loaded:t,total:n,type:e?.type}),!(!Number.isFinite(t)||t<0)&&!(this.hasStreamEvents&&t<=1)&&!(this.suppressInitialZero&&!this._hasEmitted&&t===0&&(!Number.isFinite(n)||n<=1))){if(Number.isFinite(n)&&n>1){let e=this.expectedTotalBytes>0?this.expectedTotalBytes:0,r=Math.max(n,e,this.maxEffectiveTotal);this.maxEffectiveTotal=r,this.maxLoadedBytes=Math.max(this.maxLoadedBytes,t);let i=Math.min(.99,this.maxLoadedBytes/r);this.maxProgressFraction=Math.max(this.maxProgressFraction,i);let a=(this.maxLoadedBytes/1048576).toFixed(1),o=(r/1048576).toFixed(1),s=Math.round(this.maxProgressFraction*100);this.emit(this.maxProgressFraction,`Downloading Prompt API model... (${a} / ${o} MB · ${s}%)`)}else if(t>=0&&t<=1){let e=Math.max(0,Math.min(1,t)),n=e>=1?.99:e;this.maxProgressFraction=Math.max(this.maxProgressFraction,n);let r=Math.max(this.maxEffectiveTotal,this.expectedTotalBytes);if(r>0){let e=(Math.round(this.maxProgressFraction*r)/1048576).toFixed(1),t=(r/1048576).toFixed(1),n=Math.round(this.maxProgressFraction*100);this.emit(this.maxProgressFraction,`Downloading Prompt API model... (${e} / ${t} MB · ${n}%)`)}else{let e=Math.round(this.maxProgressFraction*100);this.emit(this.maxProgressFraction,`Downloading Prompt API model... ${e}%`)}}else if(t>1){this.maxLoadedBytes=Math.max(this.maxLoadedBytes,t);let e=Math.max(this.maxEffectiveTotal,this.expectedTotalBytes);if(e>0){let t=Math.max(this.maxLoadedBytes,e),n=Math.min(.99,this.maxLoadedBytes/t);this.maxProgressFraction=Math.max(this.maxProgressFraction,n);let r=(this.maxLoadedBytes/1048576).toFixed(1),i=(t/1048576).toFixed(1),a=Math.round(this.maxProgressFraction*100);this.emit(this.maxProgressFraction,`Downloading Prompt API model... (${r} / ${i} MB · ${a}%)`)}else{let e=(this.maxLoadedBytes/1048576).toFixed(1);this.emit(null,`Downloading Prompt API model... (${e} MB downloaded)`)}}}}onDone(){this.maxProgressFraction=1,this.emitter(`done`,1,`Prompt API model ready.`)}onError(e){let t=e instanceof Error?e.message:String(e);this.emitter(`error`,null,t)}emit(e,t){this._hasEmitted=!0,(this.lastReportedMessage!==t||this.lastReportedFraction!==e)&&(this.lastReportedMessage=t,this.lastReportedFraction=e,this.emitter(`running`,e,t))}},WW=Object.defineProperty,GW=(e,t,n)=>t in e?WW(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,KW=(e,t,n)=>(GW(e,typeof t==`symbol`?t:t+``,n),n),qW=Object.freeze({Text:`Text`,NumericLiteral:`NumericLiteral`,StringLiteral:`StringLiteral`,Identifier:`Identifier`,Equals:`Equals`,OpenParen:`OpenParen`,CloseParen:`CloseParen`,OpenStatement:`OpenStatement`,CloseStatement:`CloseStatement`,OpenExpression:`OpenExpression`,CloseExpression:`CloseExpression`,OpenSquareBracket:`OpenSquareBracket`,CloseSquareBracket:`CloseSquareBracket`,OpenCurlyBracket:`OpenCurlyBracket`,CloseCurlyBracket:`CloseCurlyBracket`,Comma:`Comma`,Dot:`Dot`,Colon:`Colon`,Pipe:`Pipe`,CallOperator:`CallOperator`,AdditiveBinaryOperator:`AdditiveBinaryOperator`,MultiplicativeBinaryOperator:`MultiplicativeBinaryOperator`,ExponentiationBinaryOperator:`ExponentiationBinaryOperator`,ComparisonBinaryOperator:`ComparisonBinaryOperator`,UnaryOperator:`UnaryOperator`,Comment:`Comment`});qW.OpenStatement,qW.CloseStatement,qW.OpenExpression,qW.CloseExpression,qW.OpenParen,qW.CloseParen,qW.OpenCurlyBracket,qW.CloseCurlyBracket,qW.OpenSquareBracket,qW.CloseSquareBracket,qW.Comma,qW.Dot,qW.Colon,qW.Pipe,qW.ComparisonBinaryOperator,qW.ComparisonBinaryOperator,qW.ComparisonBinaryOperator,qW.ComparisonBinaryOperator,qW.ComparisonBinaryOperator,qW.ComparisonBinaryOperator,qW.AdditiveBinaryOperator,qW.AdditiveBinaryOperator,qW.AdditiveBinaryOperator,qW.ExponentiationBinaryOperator,qW.MultiplicativeBinaryOperator,qW.MultiplicativeBinaryOperator,qW.MultiplicativeBinaryOperator,qW.MultiplicativeBinaryOperator,qW.Equals;function JW(e){return e.replace(/\b\w/g,e=>e.toUpperCase())}function YW(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function XW(e,t,n,r){if(r===0)return e;let i=r==null||r<0?1/0:r,a=t.length===0?/* @__PURE__ */ RegExp(`(?=)`,`gu`):new RegExp(YW(t),`gu`);return e.replaceAll(a,e=>i>0?(--i,n):e)}var ZW=/* @__PURE__ */ new Map,QW=class{type=`RuntimeValue`;value;get builtins(){return ZW}constructor(e=void 0){this.value=e}__bool__(){return new nG(!!this.value)}toString(){return String(this.value)}},$W=class extends QW{type=`IntegerValue`},eG=class extends QW{type=`FloatValue`;toString(){return Object.is(this.value,-0)?`-0.0`:this.value%1==0?this.value.toFixed(1):this.value.toString()}},tG=class extends QW{type=`StringValue`;_builtins;get builtins(){return this._builtins??=/* @__PURE__ */ new Map([[`upper`,new uG(()=>new tG(this.value.toUpperCase()))],[`lower`,new uG(()=>new tG(this.value.toLowerCase()))],[`strip`,new uG(()=>new tG(this.value.trim()))],[`title`,new uG(()=>new tG(JW(this.value)))],[`capitalize`,new uG(()=>new tG(this.value.charAt(0).toUpperCase()+this.value.slice(1)))],[`length`,new $W(this.value.length)],[`rstrip`,new uG(()=>new tG(this.value.trimEnd()))],[`lstrip`,new uG(()=>new tG(this.value.trimStart()))],[`startswith`,new uG(e=>{if(e.length===0)throw Error(`startswith() requires at least one argument`);let t=e[0];if(t instanceof tG)return new nG(this.value.startsWith(t.value));if(t instanceof lG){for(let e of t.value){if(!(e instanceof tG))throw Error(`startswith() tuple elements must be strings`);if(this.value.startsWith(e.value))return new nG(!0)}return new nG(!1)}throw Error(`startswith() argument must be a string or tuple of strings`)})],[`endswith`,new uG(e=>{if(e.length===0)throw Error(`endswith() requires at least one argument`);let t=e[0];if(t instanceof tG)return new nG(this.value.endsWith(t.value));if(t instanceof lG){for(let e of t.value){if(!(e instanceof tG))throw Error(`endswith() tuple elements must be strings`);if(this.value.endsWith(e.value))return new nG(!0)}return new nG(!1)}throw Error(`endswith() argument must be a string or tuple of strings`)})],[`split`,new uG(e=>{let t=e[0]??new dG;if(!(t instanceof tG||t instanceof dG))throw Error(`sep argument must be a string or null`);let n=e[1]??new $W(-1);if(!(n instanceof $W))throw Error(`maxsplit argument must be a number`);let r=[];if(t instanceof dG){let e=this.value.trimStart();for(let{0:t,index:i}of e.matchAll(/\S+/g)){if(n.value!==-1&&r.length>=n.value&&i!==void 0){r.push(t+e.slice(i+t.length));break}r.push(t)}}else{if(t.value===``)throw Error(`empty separator`);r=this.value.split(t.value),n.value!==-1&&r.length>n.value&&r.push(r.splice(n.value).join(t.value))}return new lG(r.map(e=>new tG(e)))})],[`replace`,new uG(e=>{if(e.length<2)throw Error(`replace() requires at least two arguments`);let t=e[0],n=e[1];if(!(t instanceof tG&&n instanceof tG))throw Error(`replace() arguments must be strings`);let r;if(r=e.length>2?e[2].type===`KeywordArgumentsValue`?e[2].value.get(`count`)??new dG:e[2]:new dG,!(r instanceof $W||r instanceof dG))throw Error(`replace() count argument must be a number or null`);return new tG(XW(this.value,t.value,n.value,r.value))})]])}},nG=class extends QW{type=`BooleanValue`},rG=/[\x7f-\uffff]/g;function iG(e){return e.replace(rG,e=>`\\u`+e.charCodeAt(0).toString(16).padStart(4,`0`))}function aG(e,t={},n=0,r=!0){let{indent:i=null,ensureAscii:a=!1,separators:o=null,sortKeys:s=!1}=t,c,l;switch(o?[c,l]=o:i?(c=`,`,l=`: `):(c=`, `,l=`: `),e.type){case`NullValue`:return`null`;case`UndefinedValue`:return r?`null`:`undefined`;case`IntegerValue`:case`FloatValue`:case`BooleanValue`:return JSON.stringify(e.value);case`StringValue`:{let t=JSON.stringify(e.value);return a&&(t=iG(t)),t}case`ArrayValue`:case`NamespaceValue`:case`ObjectValue`:{let o=i?` `.repeat(i):``,u=`
|
|
2067
|
+
`).trim()}}function aW(e){if(!e||!Array.isArray(e.content))return e;let t=[],n=!1;for(let r of e.content){if(r.type!==`text`){t.push(r);continue}let{toolBlocks:e,residualText:i}=iW(rW(r.text));i&&t.push({type:`text`,text:i}),e.length>0&&(n=!0,t.push(...e))}return{...e,content:t,stop_reason:n||e.stop_reason===`tool_use`?`tool_use`:e.stop_reason}}const oW={openai:$U,anthropic:eW,google:nW,"mesh-llm":class extends $U{parseResponse(e){return aW(super.parseResponse(e))}}};function sW(e){let t=oW[e.format];if(!t)throw Error(`Unsupported provider format: ${e.format}`);return new t(e)}function cW(e,t,n,r){return sW(e).formatRequest(t,n,r)}function lW(e){let t=e.toLowerCase();return t===`none`?0:t===`max`||t===`xhigh`?.95:t===`high`?.8:t===`medium`?.5:t===`low`?.2:t===`minimal`?.1:0}function uW(e,t){return sW(e).parseResponse(t)}function dW(e){let t=l.getModelInfo(e);if(t?.contextWindow)return t.contextWindow;let n=e.toLowerCase();return n.includes(`gpt-6-luna`)?1e6:n.includes(`gpt-6`)||n.includes(`astra`)?105e4:n.includes(`gpt-4.1`)?1047576:n.includes(`gpt-5`)?4e5:n.includes(`gpt-4o`)||n.includes(`gpt-4-turbo`)?128e3:n===`gpt-4`||n.startsWith(`gpt-4-`)?8192:n.includes(`gpt-3.5-turbo`)?16385:n.includes(`gpt-3.5`)?4096:n.includes(`o1`)||n.includes(`o3`)||n.includes(`o4`)?2e5:/claude-(?:sonnet|opus|haiku|fable|mythos)-[4-9]/.test(n)||/claude-[4-9]-(?:sonnet|opus|haiku|fable|mythos)/.test(n)||n.includes(`claude-opus-4`)||n.includes(`claude-sonnet-4`)||n.includes(`claude-fable`)||n.includes(`claude-mythos`)?1e6:n.includes(`claude`)?2e5:n.includes(`gemini-nano`)?4096:n.includes(`gemini-3.5-pro`)||n.includes(`gemini-3-pro`)||n.includes(`gemini-1.5-pro`)?2097152:n.includes(`gemini-3`)||n.includes(`gemini-2.5`)||n.includes(`gemini-2.0`)||n.includes(`gemini-1.5`)?1048576:n.includes(`gemini-1.0`)||n.includes(`gemini-pro`)?32768:n.includes(`gemini`)?1048576:n.includes(`llama-3.1`)||n.includes(`llama-3-1`)?128e3:n.includes(`llama-3`)?8192:n.includes(`llama`)?4096:n.includes(`gemma-4-12b`)||n.includes(`gemma-4-26b`)||n.includes(`gemma-4-31b`)||n.includes(`gemma-4-e9b`)||n.includes(`gemma-4-e27b`)?256e3:n.includes(`gemma-4`)||n.includes(`gemma 4`)||n.includes(`gemma-3-4b`)||n.includes(`gemma-3-12b`)||n.includes(`gemma-3-27b`)?128e3:n.includes(`gemma-3`)||n.includes(`gemma 3`)?32e3:n.includes(`gemma-2`)||n.includes(`gemma-7b`)||n.includes(`gemma-2b`)||n.includes(`gemma`)?8192:n.includes(`mistral-large`)?128e3:n.includes(`mistral`)?32e3:n.includes(`amazon.titan`)?8192:n.includes(`amazon.nova-micro`)||n.includes(`nova-micro`)?128e3:n.includes(`amazon.nova`)||n.includes(`nova-pro`)||n.includes(`nova-lite`)?3e5:n.includes(`ai21`)?8192:n.includes(`cohere`)||n.includes(`phi-4-mini`)?128e3:n.includes(`phi-4`)?16384:n.includes(`phi-3.5`)||n.includes(`128k`)?128e3:n.includes(`phi-3`)?4096:n.includes(`qwen3.5`)?262144:n.includes(`qwen3-0.6b`)||n.includes(`qwen3-1.7b`)?40960:n.includes(`qwen3`)?128e3:n===`mesh`?242144:4096}function fW(e,t){if(e===`translate`)return`Translate the following text from ${t.sourceLanguage||`auto`} to ${t.targetLanguage}. Provide ONLY the raw translated text without commentary or quotation marks:\n\n${t.text}`;if(e===`summarize`)return t.overridePrompt?`${t.overridePrompt}\n\n${t.text}`:`Summarize the following text (type: ${t.type||`tldr`}, format: ${t.format||`plain-text`}, length: ${t.length||`medium`}). Provide ONLY the summary:\n\n${t.text}`;if(e===`write`)return`Draft content for the following request (tone: ${t.tone||`neutral`}, format: ${t.format||`plain-text`}, length: ${t.length||`short`}, context: ${t.context||`none`}):\n\n${t.prompt}`;if(e===`rewrite`)return`Rewrite the following text (tone: ${t.tone||`as-is`}, format: ${t.format||`as-is`}, length: ${t.length||`as-is`}, context: ${t.context||`none`}):\n\n${t.text}`;if(e===`proofread`)return`Proofread and correct grammar, spelling, and style in the following text. Provide ONLY the corrected text:\n\n${t.text}`;if(e===`detect-language`)return`Detect the language of the following text. Return ONLY a JSON array of objects with "detectedLanguage" (BCP 47 code) and "confidence" (0.0 - 1.0), e.g. [{"detectedLanguage":"en","confidence":0.99}]:\n\n${t.text}`;if(e===`semantic-embedder`)return`Provide a concise semantic description/representation for the following content:\n\n${JSON.stringify(t.text)}`;throw Error(`Unknown native AI task type: ${e}`)}async function pW(e){if(e.toolsBackendPref)return e.toolsBackendPref;if(e.db)try{let{getConfig:t}=await import(`./getConfig-DSieAlsi.js`).then(e=>e.n),n=await t(e.db,m.BUILTIN_AI_TOOLS_BACKEND);if(n)return n}catch{}return`active_provider`}async function mW(e,t,n){if(n.apiKey!==void 0)return n.apiKey;if(j.default!==void 0&&j.default.env){let e=j.default.env.SHADOW_CLAW_API_KEY;if(e)return e;switch(t){case`openrouter`:if(j.default.env.OPENROUTER_API_KEY)return j.default.env.OPENROUTER_API_KEY;break;case`huggingface`:if(j.default.env.HUGGINGFACE_API_KEY||j.default.env.HF_TOKEN)return j.default.env.HUGGINGFACE_API_KEY||j.default.env.HF_TOKEN||``;break;case`gemini_proxy`:if(j.default.env.GEMINI_API_KEY)return j.default.env.GEMINI_API_KEY}let n=`${t.toUpperCase()}_API_KEY`;if(j.default.env[n])return j.default.env[n]}if(n.db)try{let{getConfig:e}=await import(`./getConfig-DSieAlsi.js`).then(e=>e.n),r=await e(n.db,`api_key:${t}`)||await e(n.db,`apiKey`);if(r)return r}catch{}return``}async function hW(e){let{taskType:t,input:n,onProgress:r}=e;if(await pW(e)===`local`){if(t===`summarize`)return await CH(n.text,{...n,onProgress:r});if(t===`write`)return await wH(n.prompt,{...n,onProgress:r});if(t===`rewrite`)return await TH(n.text,{...n,onProgress:r});if(t===`proofread`)return await OH(n.text,{...n,onProgress:r});if(t===`detect-language`)return await EH(n.text,{onProgress:r});if(t===`translate`)return await DH(n.text,{sourceLanguage:n.sourceLanguage||`auto`,targetLanguage:n.targetLanguage||`en`,...n,onProgress:r});if(t===`semantic-embedder`)return await kH(n.text,{...n,onProgress:r});throw Error(`Unknown native AI task: ${t}`)}let i=ne()?`openrouter`:`prompt_api`,o=e.providerId;if(!o&&e.db)try{let{getConfig:t}=await import(`./getConfig-DSieAlsi.js`).then(e=>e.n);o=await t(e.db,m.PROVIDER)||i}catch{}o||=j.default!==void 0&&(j.default.env.SHADOW_CLAW_PROVIDER||j.default.env.SHADOW_CLAW_DEFAULT_PROVIDER)||i;let s=fW(t,n);if(o===`prompt_api`){await xH();let e=globalThis,n=e.LanguageModel||e.ai?.languageModel;if(n&&typeof n.create==`function`){let e;try{e=await n.create()}catch(e){console.warn(`Prompt API session creation failed in active provider task:`,e)}if(e)try{let n=await e.prompt(s),r=String(n||``).trim();if(t===`detect-language`)try{let e=JSON.parse(r);return Array.isArray(e)?e:[e]}catch{return[{detectedLanguage:`en`,confidence:.8}]}return r}finally{typeof e.destroy==`function`&&e.destroy()}}}let c=a(o);if(!c||!c.baseUrl||c.baseUrl.startsWith(`builtin://`)||c.baseUrl.startsWith(`local://`)||c.format===`prompt_api`||c.format===`transformers_js`){if(t===`summarize`)return await CH(n.text,n);if(t===`write`)return await wH(n.prompt,n);if(t===`rewrite`)return await TH(n.text,n);if(t===`proofread`)return await OH(n.text,n);if(t===`detect-language`)return await EH(n.text);if(t===`translate`)return await DH(n.text,{sourceLanguage:n.sourceLanguage||`auto`,targetLanguage:n.targetLanguage||`en`,...n});if(t===`semantic-embedder`)return await kH(n.text,n);throw Error(`Provider ${o} not found and no local fallback available`)}let l=ne()&&(o===`transformers_js_local`||o===`llamafile`),u=await mW(c,o,e);if(!l&&c.requiresApiKey!==!1&&!u)throw Error(`Provider "${c.name||o}" requires an API key for task "${t}". Please provide an API key or configure tools backend.`);let d=e.model||c.defaultModel||`default`,f={...ZU(c,u),...e.headers||{}},p=cW(c,[{role:`user`,content:s}],[],{maxTokens:e.maxTokens||2048,model:d,system:`You are a specialized text task assistant. Fulfill the user request directly and accurately without conversational filler.`});if(ne()&&o===`transformers_js_local`){let n=globalThis.__nodeTransformersTaskExecutor;if(n){let r=uW(c,await n({modelId:d,messages:p?.messages||[{role:`user`,content:s}],maxTokens:e.maxTokens||2048,abortSignal:e.abortSignal,onProgress:e.onProgress})).content?.filter(e=>e.type===`text`)?.map(e=>e.text)?.join(``)?.trim()||``;if(t===`detect-language`)try{let e=JSON.parse(r);return Array.isArray(e)?e:[e]}catch{return[{detectedLanguage:`en`,confidence:.8}]}return r}}if(ne()&&(o===`llamafile`||o===`agentfile`)){let n=globalThis.__nodeLlamafileTaskExecutor;if(n){let r=uW(c,await n({model:d,messages:p?.messages||[{role:`user`,content:s}],maxTokens:e.maxTokens||2048,abortSignal:e.abortSignal})).content?.filter(e=>e.type===`text`)?.map(e=>e.text)?.join(``)?.trim()||``;if(t===`detect-language`)try{let e=JSON.parse(r);return Array.isArray(e)?e:[e]}catch{return[{detectedLanguage:`en`,confidence:.8}]}return r}}let h=await fetch(c.baseUrl,{body:JSON.stringify(p),headers:f,method:`POST`});if(!h.ok){let e=await h.text();throw Error(`Active provider task API error ${h.status}: ${e}`)}let g=uW(c,await h.json()).content?.filter(e=>e.type===`text`)?.map(e=>e.text)?.join(``)?.trim()||``;if(t===`detect-language`)try{let e=JSON.parse(g);return Array.isArray(e)?e:[e]}catch{return[{detectedLanguage:`en`,confidence:.8}]}return g}async function gW(e,t,n,r){if(ne()){let i=r?.invokeContext;return await hW({taskType:t,input:n,groupId:e,providerId:i?.provider,model:i?.model,apiKey:i?.apiKey,maxTokens:i?.maxTokens,headers:i?.providerHeaders,db:r?.db||i?.db})}let i=ye();return _n({type:`request-native-ai-task`,payload:{id:i,groupId:e,taskType:t,input:n}}),await new Promise((e,t)=>{globalThis.pendingNativeAiResolvers=globalThis.pendingNativeAiResolvers||{},globalThis.pendingNativeAiResolvers[i]={resolve:e,reject:t}})}async function _W(e,t,n){let r=String(e.text||``).trim();if(!r)return`Error: text is required for summarize_text`;try{return await gW(t,`summarize`,{text:r,type:e.type,format:e.format,length:e.length,preference:e.preference,context:e.context,outputLanguage:e.outputLanguage,overridePrompt:e.overridePrompt,sharedContext:e.sharedContext},n)}catch(e){return`Error summarizing text: ${e instanceof Error?e.message:String(e)}`}}async function vW(e,t,n){let r=String(e.prompt||``).trim();if(!r)return`Error: prompt is required for write_text`;try{return await gW(t,`write`,{prompt:r,context:e.context,tone:e.tone,format:e.format,length:e.length,outputLanguage:e.outputLanguage,sharedContext:e.sharedContext},n)}catch(e){return`Error writing text: ${e instanceof Error?e.message:String(e)}`}}async function yW(e,t,n){let r=String(e.text||``).trim();if(!r)return`Error: text is required for rewrite_text`;try{return await gW(t,`rewrite`,{text:r,tone:e.tone,format:e.format,length:e.length,context:e.context,outputLanguage:e.outputLanguage,sharedContext:e.sharedContext},n)}catch(e){return`Error rewriting text: ${e instanceof Error?e.message:String(e)}`}}async function bW(e,t,n){let r=String(e.text||``).trim();if(!r)return`Error: text is required for proofread_text`;try{return await gW(t,`proofread`,{text:r,context:e.context},n)}catch(e){return`Error proofreading text: ${e instanceof Error?e.message:String(e)}`}}async function xW(e,t,n){let r=String(e.text||``).trim();if(!r)return`Error: text is required for detect_language`;try{let e=await gW(t,`detect-language`,{text:r},n);return typeof e==`string`?e:JSON.stringify(e,null,2)}catch(e){return`Error detecting language: ${e instanceof Error?e.message:String(e)}`}}async function SW(e,t,n){let r=String(e.text||``).trim(),i=String(e.sourceLanguage||``).trim(),a=String(e.targetLanguage||``).trim();if(!r||!i||!a)return`Error: text, sourceLanguage, and targetLanguage are required for translate_text`;try{return await gW(t,`translate`,{text:r,sourceLanguage:i,targetLanguage:a},n)}catch(e){return`Error translating text: ${e instanceof Error?e.message:String(e)}`}}async function CW(e,t,n){let r=e.text;if(!r||Array.isArray(r)&&r.length===0)return`Error: text is required for embed_text`;try{let i=await gW(t,`semantic-embedder`,{text:r,taskType:e.taskType},n);return typeof i==`string`?i:JSON.stringify(i,null,2)}catch(e){return`Error generating embeddings: ${e instanceof Error?e.message:String(e)}`}}async function wW(e,t={}){let{maxRetries:n=3,baseDelayMs:r=1e3,maxDelayMs:i=3e4,jitterFactor:a=.5,shouldRetry:o=()=>!0,onRetry:s,signal:c}=t,l;for(let t=0;t<=n;t++){if(c?.aborted)throw c.reason??new DOMException(`Aborted`,`AbortError`);try{return await e()}catch(e){if(l=e,e instanceof DOMException&&e.name===`AbortError`||e instanceof Error&&e.name===`AbortError`)throw e;if(t>=n||!o(e,t+1))break;let u=qV(t,r,i,a);s&&s(t+1,n,u,e),await JV(u,c)}}throw l}const TW=/* @__PURE__ */ new Set([408,429,500,502,503,504]);function EW(e){return/network|ECONNRESET|ECONNREFUSED|ETIMEDOUT|fetch failed|EAI_AGAIN|EAI_NONAME|getaddrinfo/i.test(e.message)}function DW(e){if(e instanceof TypeError)return!0;if(typeof e?.status==`number`)return TW.has(e.status);if(e instanceof Error){let t=e.message.match(/\b(4\d{2}|5\d{2})\b/);if(t)return TW.has(Number(t[1]));if(EW(e))return!0}return!1}function OW(e){return e instanceof TypeError?!0:e&&typeof e.status==`number`?TW.has(e.status):e instanceof Error&&EW(e)}const kW=/* @__PURE__ */ new Set([`create_task`,`update_task`,`delete_task`,`enable_task`,`disable_task`,`send_notification`,`create_room`,`invite_to_room`,`leave_room`]);function AW(e){if(!Array.isArray(e))return null;let t=e.map(e=>typeof e==`string`?e:typeof e?.name==`string`?e.name:null).filter(Boolean);return new Set(t)}function jW(e,t){let n=AW(t);return n&&!n.has(e)?`Tool "${e}" is not allowed in the current context. Do not call it again. Use one of the available tools or ask for help.`:null}function MW(e,t,n){return(t||n)&&e===`run_task`?`Tool "run_task" cannot be called from within a task execution to prevent infinite loops.`:null}function NW(e,t){return t&&kW.has(e)?`Tool "${e}" is not allowed during scheduled task execution to prevent recursion.`:null}function PW(e){return ne()&&re.has(e)?`Tool "${e}" is not available in headless CLI mode. It requires a browser UI.`:null}function FW(e,t={}){return jW(e,t.allowedTools)||MW(e,t.isScheduledTask,t.isTaskExecution)||NW(e,t.isScheduledTask)||PW(e)||null}async function IW(e,t,n,r,i={},a){let o=await pe(e,r,t);if(!o)return`Unknown tool: ${t}`;let s=i.declarativeDepth||0;if(s>=8)return`Tool error (${t}): declarative tool nesting limit exceeded.`;if(o.execution.type===`tool`){let c=o.execution.name;return c?await a(e,c,o.execution.input?{...n,...o.execution.input}:n,r,{...i,declarativeDepth:s+1}):`Tool error (${t}): declarative tool target is missing.`}return o.execution.type===`bash`?await zB(e,{command:o.execution.command,stdin:JSON.stringify(n)},r):await tU(e,{code:o.execution.code,data:JSON.stringify(n)})}let LW=null;async function RW(){return LW||=import(`./git-Bhz4YHc8.js`),LW}async function zW(e,t,n,r){let i=await RW();return await gV(e,t,n,r,{configKeys:{GIT_CORS_PROXY:m.GIT_CORS_PROXY,GIT_PROXY_URL:m.GIT_PROXY_URL,GIT_AUTHOR_NAME:m.GIT_AUTHOR_NAME,GIT_AUTHOR_EMAIL:m.GIT_AUTHOR_EMAIL},getConfig:w,getGroupDir:ce,getProxyUrl:i.getProxyUrl,getRemoteUrl:i.getRemoteUrl,gitAdd:i.gitAdd,gitBranch:i.gitBranch,gitCheckout:i.gitCheckout,gitClone:i.gitClone,gitCommit:i.gitCommit,gitConfig:i.gitConfig,gitDeleteBranch:i.gitDeleteBranch,gitDeleteRepo:i.gitDeleteRepo,gitDiff:i.gitDiff,gitFetch:i.gitFetch,gitInit:i.gitInit,gitListBranches:i.gitListBranches,gitListRepos:i.gitListRepos,gitListTags:i.gitListTags,gitLog:i.gitLog,gitMerge:i.gitMerge,gitPull:i.gitPull,gitPush:i.gitPush,gitReadFileAtRef:i.gitReadFileAtRef,gitRemote:i.gitRemote,gitReset:i.gitReset,gitShow:i.gitShow,gitStatus:i.gitStatus,gitTag:i.gitTag,gitUnstage:i.gitUnstage,readGroupFile:fe,resolveGitCredentials:Me})}const $=/* @__PURE__ */ new Map;$.set(`bash`,(e,t,n)=>zB(e,t,n)),$.set(`read_file`,(e,t,n)=>EU(e,t,n)),$.set(`open_file`,(e,t,n)=>wU(e,t,n)),$.set(`attach_file_to_chat`,(e,t,n)=>dU(e,t,n)),$.set(`send_file`,(e,t,n)=>AU(e,t,n)),$.set(`write_file`,(e,t,n)=>MU(e,t,n)),$.set(`delete_file`,(e,t,n)=>yU(e,t,n)),$.set(`move_file`,(e,t,n)=>CU(e,t,n)),$.set(`copy_file`,(e,t,n)=>gU(e,t,n)),$.set(`create_directory`,(e,t,n)=>_U(e,t,n)),$.set(`patch_file`,(e,t,n)=>TU(e,t,n)),$.set(`list_files`,(e,t,n)=>xU(e,t,n)),$.set(`manage_tools`,(e,t,n)=>iU(t,n)),$.set(`list_tool_profiles`,e=>rU(e)),$.set(`fetch_url`,(e,t,n)=>lV(e,t,n,{buildAuthHeaders:De,fetchImpl:fetch,fetchMaxResponse:d,isRetryableFetchError:OW,post:_n,resolveGitCredentials:Me,resolveServiceCredentials:Ae,retryableStatusCodes:TW,stripHtml:xn,uploadGroupFile:dn,withRetry:wW})),$.set(`fetch_file`,(e,t,n)=>sV(e,t,n,{buildAuthHeaders:De,fetchImpl:fetch,isRetryableFetchError:OW,post:_n,resolveGitCredentials:Me,resolveServiceCredentials:Ae,retryableStatusCodes:TW,uploadGroupFile:dn,withRetry:wW,writeGroupFile:me})),$.set(`update_memory`,(e,t,n)=>jU(e,t,n)),$.set(`create_task`,(e,t,n)=>RH(t,n)),$.set(`javascript`,(e,t)=>tU(e,t)),$.set(`activate_skill`,(e,t,n)=>LU(e,t,n)),$.set(`list_tasks`,(e,t,n)=>UH(e,n)),$.set(`update_task`,(e,t,n)=>GH(e,t,n)),$.set(`enable_task`,(e,t,n)=>HH(e,t,n)),$.set(`disable_task`,(e,t,n)=>VH(e,t,n)),$.set(`delete_task`,(e,t,n)=>zH(t,n)),$.set(`run_task`,(e,t,n)=>WH(e,t,n)),$.set(`clear_chat`,(e,t,n)=>qH(n)),$.set(`show_toast`,(e,t)=>cU(t)),$.set(`send_notification`,(e,t,n)=>sU(t,n)),$.set(`create_room`,(e,t)=>EV(t)),$.set(`invite_to_room`,(e,t,n)=>IV(t,n)),$.set(`leave_room`,(e,t,n)=>LV(t,n)),$.set(`list_room_members`,(e,t,n)=>RV(e,t,n)),$.set(`prompt_peer`,(e,t,n)=>BV(e,t,n)),$.set(`list_peers`,(e,t,n)=>VV(e,t,n));const BW=(e,t,n)=>QB(e,t,n);$.set(`manage_email`,BW),$.set(`manage_integration`,BW),$.set(`email_read_messages`,(e,t,n)=>VW(e,`manage_email`,{...t,action:`read_messages`},n)),$.set(`integration_read_messages`,(e,t,n)=>VW(e,`manage_email`,{...t,action:`read_messages`},n)),$.set(`email_send_message`,(e,t,n)=>VW(e,`manage_email`,{...t,action:`send_message`},n)),$.set(`integration_send_message`,(e,t,n)=>VW(e,`manage_email`,{...t,action:`send_message`},n)),$.set(`remote_mcp_list_tools`,(e,t,n)=>wV(e,t,n,{callRemoteMcpTool:Ne,listRemoteMcpTools:Oe,McpReauthRequiredError:je,post:_n})),$.set(`remote_mcp_call_tool`,(e,t,n)=>TV(e,t,n,{callRemoteMcpTool:Ne,listRemoteMcpTools:Oe,McpReauthRequiredError:je,post:_n}));for(let e of[`git_clone`,`git_checkout`,`git_branch`,`git_status`,`git_add`,`git_log`,`git_diff`,`git_branches`,`git_list_repos`,`git_delete_repo`,`git_commit`,`git_pull`,`git_push`,`git_merge`,`git_reset`,`git_fetch`,`git_read_file_at_ref`,`git_show`,`git_delete_branch`,`git_init`,`git_tag`,`git_remote`,`git_config`,`git_unstage`])$.set(e,(t,n,r)=>zW(t,e,n,r));$.set(`list_components`,()=>nU()),$.set(`render_component`,(e,t,n)=>oU(t,n)),$.set(`spawn_subagent`,async(e,t,n,r)=>r?.invokeContext?await LH(t,n,r.invokeContext):`Error: spawn_subagent requires an active agent invocation context. This tool cannot be called directly.`),$.set(`get_current_time`,(e,t)=>JH(t)),$.set(`search_files`,(e,t,n)=>kU(e,t,n,{maxFileBytes:ve.searchFilesMaxFileBytes,maxFilesVisited:ve.searchFilesMaxFilesVisited,skipDirs:ve.searchFilesSkipDirsSet})),$.set(`diff_files`,(e,t,n)=>bU(e,t,n)),$.set(`ask_user`,(e,t,n)=>KH(t,n)),$.set(`web_search`,(e,t)=>lU(t)),$.set(`summarize_text`,(e,t,n,r)=>_W(t,n,{db:e,invokeContext:r?.invokeContext})),$.set(`write_text`,(e,t,n,r)=>vW(t,n,{db:e,invokeContext:r?.invokeContext})),$.set(`rewrite_text`,(e,t,n,r)=>yW(t,n,{db:e,invokeContext:r?.invokeContext})),$.set(`proofread_text`,(e,t,n,r)=>bW(t,n,{db:e,invokeContext:r?.invokeContext})),$.set(`detect_language`,(e,t,n,r)=>xW(t,n,{db:e,invokeContext:r?.invokeContext})),$.set(`translate_text`,(e,t,n,r)=>SW(t,n,{db:e,invokeContext:r?.invokeContext})),$.set(`embed_text`,(e,t,n,r)=>CW(t,n,{db:e,invokeContext:r?.invokeContext}));async function VW(e,t,n,r,i={}){try{let a=FW(t,i);if(a)return a;let o=$.get(t);return o?await o(e,n,r,i):await IW(e,t,n,r,i,VW)}catch(e){return`Tool error (${t}): ${e instanceof Error?e.message:String(e)}`}}const HW=880803840;var UW=class{emitter;expectedTotalBytes;logEvents;suppressInitialZero;_hasEmitted=!1;hasStreamEvents=!1;urlBytesMap=/* @__PURE__ */ new Map;maxProgressFraction=0;maxLoadedBytes=0;maxEffectiveTotal=0;lastReportedMessage=``;lastReportedFraction=null;constructor(e,t){this.emitter=e,this.expectedTotalBytes=t?.expectedTotalBytes===void 0?HW:t.expectedTotalBytes,this.logEvents=t?.logEvents??!1,this.suppressInitialZero=t?.suppressInitialZero??!1}get hasEmitted(){return this._hasEmitted}markActive(){this._hasEmitted=!0}onStreamProgress(e,t,n,r=!1){if(!Number.isFinite(t)||t<0)return;this.hasStreamEvents=!0,this.urlBytesMap.set(e,{received:t,total:n,complete:r});let i=0,a=0,o=this.urlBytesMap.size>0;for(let e of this.urlBytesMap.values())i+=e.received,e.total!=null&&Number.isFinite(e.total)&&e.total>0&&(a+=e.total),e.complete||(o=!1);let s=this.maxEffectiveTotal,c=this.expectedTotalBytes>0?this.expectedTotalBytes:0,l=Math.max(a,c);this.maxEffectiveTotal=Math.max(this.maxEffectiveTotal,l);let u=this.maxEffectiveTotal;if(this.maxLoadedBytes=Math.max(this.maxLoadedBytes,i),u>0){let e=Math.min(1,Math.max(0,this.maxLoadedBytes/u)),t=o?e:Math.min(.99,e);this.maxProgressFraction=u>s&&s>0?t:Math.max(this.maxProgressFraction,t);let n=`Downloading Prompt API model... (${(this.maxLoadedBytes/1048576).toFixed(1)} / ${(u/1048576).toFixed(1)} MB · ${Math.min(o?100:99,Math.round(this.maxProgressFraction*100))}%)`;this.emit(this.maxProgressFraction,n)}else{let e=`Downloading Prompt API model... (${(this.maxLoadedBytes/1048576).toFixed(1)} MB downloaded)`;this.emit(null,e)}}onProgressEvent(e){let t=Number(e?.loaded),n=Number(e?.total);if(this.logEvents&&console.log(`[PromptApiProgressAggregator] onProgressEvent:`,{loaded:t,total:n,type:e?.type}),!(!Number.isFinite(t)||t<0)&&!(this.hasStreamEvents&&t<=1)&&!(this.suppressInitialZero&&!this._hasEmitted&&t===0&&(!Number.isFinite(n)||n<=1))){if(Number.isFinite(n)&&n>1){let e=this.expectedTotalBytes>0?this.expectedTotalBytes:0,r=Math.max(n,e,this.maxEffectiveTotal);this.maxEffectiveTotal=r,this.maxLoadedBytes=Math.max(this.maxLoadedBytes,t);let i=Math.min(.99,this.maxLoadedBytes/r);this.maxProgressFraction=Math.max(this.maxProgressFraction,i);let a=(this.maxLoadedBytes/1048576).toFixed(1),o=(r/1048576).toFixed(1),s=Math.round(this.maxProgressFraction*100);this.emit(this.maxProgressFraction,`Downloading Prompt API model... (${a} / ${o} MB · ${s}%)`)}else if(t>=0&&t<=1){let e=Math.max(0,Math.min(1,t)),n=e>=1?.99:e;this.maxProgressFraction=Math.max(this.maxProgressFraction,n);let r=Math.max(this.maxEffectiveTotal,this.expectedTotalBytes);if(r>0){let e=(Math.round(this.maxProgressFraction*r)/1048576).toFixed(1),t=(r/1048576).toFixed(1),n=Math.round(this.maxProgressFraction*100);this.emit(this.maxProgressFraction,`Downloading Prompt API model... (${e} / ${t} MB · ${n}%)`)}else{let e=Math.round(this.maxProgressFraction*100);this.emit(this.maxProgressFraction,`Downloading Prompt API model... ${e}%`)}}else if(t>1){this.maxLoadedBytes=Math.max(this.maxLoadedBytes,t);let e=Math.max(this.maxEffectiveTotal,this.expectedTotalBytes);if(e>0){let t=Math.max(this.maxLoadedBytes,e),n=Math.min(.99,this.maxLoadedBytes/t);this.maxProgressFraction=Math.max(this.maxProgressFraction,n);let r=(this.maxLoadedBytes/1048576).toFixed(1),i=(t/1048576).toFixed(1),a=Math.round(this.maxProgressFraction*100);this.emit(this.maxProgressFraction,`Downloading Prompt API model... (${r} / ${i} MB · ${a}%)`)}else{let e=(this.maxLoadedBytes/1048576).toFixed(1);this.emit(null,`Downloading Prompt API model... (${e} MB downloaded)`)}}}}onDone(){this.maxProgressFraction=1,this.emitter(`done`,1,`Prompt API model ready.`)}onError(e){let t=e instanceof Error?e.message:String(e);this.emitter(`error`,null,t)}emit(e,t){this._hasEmitted=!0,(this.lastReportedMessage!==t||this.lastReportedFraction!==e)&&(this.lastReportedMessage=t,this.lastReportedFraction=e,this.emitter(`running`,e,t))}},WW=Object.defineProperty,GW=(e,t,n)=>t in e?WW(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,KW=(e,t,n)=>(GW(e,typeof t==`symbol`?t:t+``,n),n),qW=Object.freeze({Text:`Text`,NumericLiteral:`NumericLiteral`,StringLiteral:`StringLiteral`,Identifier:`Identifier`,Equals:`Equals`,OpenParen:`OpenParen`,CloseParen:`CloseParen`,OpenStatement:`OpenStatement`,CloseStatement:`CloseStatement`,OpenExpression:`OpenExpression`,CloseExpression:`CloseExpression`,OpenSquareBracket:`OpenSquareBracket`,CloseSquareBracket:`CloseSquareBracket`,OpenCurlyBracket:`OpenCurlyBracket`,CloseCurlyBracket:`CloseCurlyBracket`,Comma:`Comma`,Dot:`Dot`,Colon:`Colon`,Pipe:`Pipe`,CallOperator:`CallOperator`,AdditiveBinaryOperator:`AdditiveBinaryOperator`,MultiplicativeBinaryOperator:`MultiplicativeBinaryOperator`,ExponentiationBinaryOperator:`ExponentiationBinaryOperator`,ComparisonBinaryOperator:`ComparisonBinaryOperator`,UnaryOperator:`UnaryOperator`,Comment:`Comment`});qW.OpenStatement,qW.CloseStatement,qW.OpenExpression,qW.CloseExpression,qW.OpenParen,qW.CloseParen,qW.OpenCurlyBracket,qW.CloseCurlyBracket,qW.OpenSquareBracket,qW.CloseSquareBracket,qW.Comma,qW.Dot,qW.Colon,qW.Pipe,qW.ComparisonBinaryOperator,qW.ComparisonBinaryOperator,qW.ComparisonBinaryOperator,qW.ComparisonBinaryOperator,qW.ComparisonBinaryOperator,qW.ComparisonBinaryOperator,qW.AdditiveBinaryOperator,qW.AdditiveBinaryOperator,qW.AdditiveBinaryOperator,qW.ExponentiationBinaryOperator,qW.MultiplicativeBinaryOperator,qW.MultiplicativeBinaryOperator,qW.MultiplicativeBinaryOperator,qW.MultiplicativeBinaryOperator,qW.Equals;function JW(e){return e.replace(/\b\w/g,e=>e.toUpperCase())}function YW(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function XW(e,t,n,r){if(r===0)return e;let i=r==null||r<0?1/0:r,a=t.length===0?/* @__PURE__ */ RegExp(`(?=)`,`gu`):new RegExp(YW(t),`gu`);return e.replaceAll(a,e=>i>0?(--i,n):e)}var ZW=/* @__PURE__ */ new Map,QW=class{type=`RuntimeValue`;value;get builtins(){return ZW}constructor(e=void 0){this.value=e}__bool__(){return new nG(!!this.value)}toString(){return String(this.value)}},$W=class extends QW{type=`IntegerValue`},eG=class extends QW{type=`FloatValue`;toString(){return Object.is(this.value,-0)?`-0.0`:this.value%1==0?this.value.toFixed(1):this.value.toString()}},tG=class extends QW{type=`StringValue`;_builtins;get builtins(){return this._builtins??=/* @__PURE__ */ new Map([[`upper`,new uG(()=>new tG(this.value.toUpperCase()))],[`lower`,new uG(()=>new tG(this.value.toLowerCase()))],[`strip`,new uG(()=>new tG(this.value.trim()))],[`title`,new uG(()=>new tG(JW(this.value)))],[`capitalize`,new uG(()=>new tG(this.value.charAt(0).toUpperCase()+this.value.slice(1)))],[`length`,new $W(this.value.length)],[`rstrip`,new uG(()=>new tG(this.value.trimEnd()))],[`lstrip`,new uG(()=>new tG(this.value.trimStart()))],[`startswith`,new uG(e=>{if(e.length===0)throw Error(`startswith() requires at least one argument`);let t=e[0];if(t instanceof tG)return new nG(this.value.startsWith(t.value));if(t instanceof lG){for(let e of t.value){if(!(e instanceof tG))throw Error(`startswith() tuple elements must be strings`);if(this.value.startsWith(e.value))return new nG(!0)}return new nG(!1)}throw Error(`startswith() argument must be a string or tuple of strings`)})],[`endswith`,new uG(e=>{if(e.length===0)throw Error(`endswith() requires at least one argument`);let t=e[0];if(t instanceof tG)return new nG(this.value.endsWith(t.value));if(t instanceof lG){for(let e of t.value){if(!(e instanceof tG))throw Error(`endswith() tuple elements must be strings`);if(this.value.endsWith(e.value))return new nG(!0)}return new nG(!1)}throw Error(`endswith() argument must be a string or tuple of strings`)})],[`split`,new uG(e=>{let t=e[0]??new dG;if(!(t instanceof tG||t instanceof dG))throw Error(`sep argument must be a string or null`);let n=e[1]??new $W(-1);if(!(n instanceof $W))throw Error(`maxsplit argument must be a number`);let r=[];if(t instanceof dG){let e=this.value.trimStart();for(let{0:t,index:i}of e.matchAll(/\S+/g)){if(n.value!==-1&&r.length>=n.value&&i!==void 0){r.push(t+e.slice(i+t.length));break}r.push(t)}}else{if(t.value===``)throw Error(`empty separator`);r=this.value.split(t.value),n.value!==-1&&r.length>n.value&&r.push(r.splice(n.value).join(t.value))}return new lG(r.map(e=>new tG(e)))})],[`replace`,new uG(e=>{if(e.length<2)throw Error(`replace() requires at least two arguments`);let t=e[0],n=e[1];if(!(t instanceof tG&&n instanceof tG))throw Error(`replace() arguments must be strings`);let r;if(r=e.length>2?e[2].type===`KeywordArgumentsValue`?e[2].value.get(`count`)??new dG:e[2]:new dG,!(r instanceof $W||r instanceof dG))throw Error(`replace() count argument must be a number or null`);return new tG(XW(this.value,t.value,n.value,r.value))})]])}},nG=class extends QW{type=`BooleanValue`},rG=/[\x7f-\uffff]/g;function iG(e){return e.replace(rG,e=>`\\u`+e.charCodeAt(0).toString(16).padStart(4,`0`))}function aG(e,t={},n=0,r=!0){let{indent:i=null,ensureAscii:a=!1,separators:o=null,sortKeys:s=!1}=t,c,l;switch(o?[c,l]=o:i?(c=`,`,l=`: `):(c=`, `,l=`: `),e.type){case`NullValue`:return`null`;case`UndefinedValue`:return r?`null`:`undefined`;case`IntegerValue`:case`FloatValue`:case`BooleanValue`:return JSON.stringify(e.value);case`StringValue`:{let t=JSON.stringify(e.value);return a&&(t=iG(t)),t}case`ArrayValue`:case`NamespaceValue`:case`ObjectValue`:{let o=i?` `.repeat(i):``,u=`
|
|
2068
2068
|
`+o.repeat(n),d=u+o;if(e.type===`ArrayValue`){let a=e.value.map(e=>aG(e,t,n+1,r));return i?`[${d}${a.join(`${c}${d}`)}${u}]`:`[${a.join(c)}]`}{let o=Array.from(e.value.entries());s&&(o=o.sort(([e],[t])=>e.localeCompare(t)));let f=o.map(([e,o])=>{let s=JSON.stringify(e);a&&(s=iG(s));let c=`${s}${l}${aG(o,t,n+1,r)}`;return i?`${d}${c}`:c});return i?`{${f.join(c)}${u}}`:`{${f.join(c)}}`}}default:throw Error(`Cannot convert to JSON: ${e.type}`)}}var oG=class extends QW{type=`ObjectValue`;_builtins;__bool__(){return new nG(this.value.size>0)}get builtins(){return this._builtins??=/* @__PURE__ */ new Map([[`get`,new uG(([e,t])=>{if(!(e instanceof tG))throw Error(`Object key must be a string: got ${e.type}`);return this.value.get(e.value)??t??new dG})],[`items`,new uG(()=>this.items())],[`keys`,new uG(()=>this.keys())],[`values`,new uG(()=>this.values())],[`dictsort`,new uG(e=>{let t=/* @__PURE__ */ new Map,n=e.filter(e=>e instanceof sG?(t=e.value,!1):!0),r=n.at(0)??t.get(`case_sensitive`)??new nG(!1);if(!(r instanceof nG))throw Error(`case_sensitive must be a boolean`);let i=n.at(1)??t.get(`by`)??new tG(`key`);if(!(i instanceof tG))throw Error(`by must be a string`);if(![`key`,`value`].includes(i.value))throw Error(`by must be either 'key' or 'value'`);let a=n.at(2)??t.get(`reverse`)??new nG(!1);if(!(a instanceof nG))throw Error(`reverse must be a boolean`);return new lG(Array.from(this.value.entries()).map(([e,t])=>new lG([new tG(e),t])).sort((e,t)=>{let n=i.value===`key`?0:1,o=e.value[n],s=t.value[n],c=_G(o,s,r.value);return a.value?-c:c}))})]])}items(){return new lG(Array.from(this.value.entries()).map(([e,t])=>new lG([new tG(e),t])))}keys(){return new lG(Array.from(this.value.keys()).map(e=>new tG(e)))}values(){return new lG(Array.from(this.value.values()))}toString(){return aG(this,{},0,!1)}},sG=class extends oG{type=`KeywordArgumentsValue`},cG=class extends QW{type=`NamespaceValue`;toString(){return aG(this,{},0,!1)}},lG=class extends QW{type=`ArrayValue`;_builtins;get builtins(){return this._builtins??=/* @__PURE__ */ new Map([[`length`,new $W(this.value.length)]])}__bool__(){return new nG(this.value.length>0)}toString(){return aG(this,{},0,!1)}},uG=class extends QW{type=`FunctionValue`},dG=class extends QW{type=`NullValue`},fG=class extends QW{type=`UndefinedValue`};function pG(e){let t;if(e instanceof lG?t=e.value:e instanceof tG&&(t=Array.from(e.value,e=>new tG(e))),!t||t.length!==2)throw Error(`namespace expected an object or an iterable of [key, value] pairs`);let[n,r]=t;if(!(n instanceof tG))throw Error(`namespace keys must be strings`);return[n,r]}var mG=class{constructor(e){this.parent=e}variables=/* @__PURE__ */ new Map([[`namespace`,new uG(e=>{let t=e.slice(),n;if(t.at(-1)instanceof sG&&(n=t.pop()),t.length>1)throw Error(`namespace expected at most 1 argument, got ${t.length}`);let r=/* @__PURE__ */ new Map;if(t.length===1){let e=t[0];if(e instanceof oG)for(let[t,n]of e.value)r.set(t,n);else if(e instanceof lG)for(let t of e.value){let[e,n]=pG(t);r.set(e.value,n)}else throw Error(`'${e.type}' object is not iterable`)}if(n)for(let[e,t]of n.value)r.set(e,t);return new cG(r)})]]);tests=mG.TESTS;set(e,t){return this.declareVariable(e,vG(t))}declareVariable(e,t){if(this.variables.has(e))throw SyntaxError(`Variable already declared: ${e}`);return this.variables.set(e,t),t}setVariable(e,t){return this.variables.set(e,t),t}resolve(e){if(this.variables.has(e))return this;if(this.parent)return this.parent.resolve(e);throw Error(`Unknown variable: ${e}`)}lookupVariable(e){try{return this.resolve(e).variables.get(e)??new fG}catch{return new fG}}};KW(mG,`TESTS`,/* @__PURE__ */ new Map([[`boolean`,e=>e.type===`BooleanValue`],[`callable`,e=>e instanceof uG],[`odd`,e=>{if(!(e instanceof $W))throw Error(`cannot odd on ${e.type}`);return e.value%2!=0}],[`even`,e=>{if(!(e instanceof $W))throw Error(`cannot even on ${e.type}`);return e.value%2==0}],[`false`,e=>e.type===`BooleanValue`&&!e.value],[`true`,e=>e.type===`BooleanValue`&&e.value],[`none`,e=>e.type===`NullValue`],[`string`,e=>e.type===`StringValue`],[`number`,e=>e instanceof $W||e instanceof eG],[`integer`,e=>e instanceof $W],[`iterable`,e=>e.type===`ArrayValue`||e.type===`StringValue`],[`mapping`,e=>e instanceof oG],[`sequence`,e=>e instanceof lG||e instanceof oG||e instanceof tG],[`lower`,e=>{let t=e.value;return e.type===`StringValue`&&t===t.toLowerCase()}],[`upper`,e=>{let t=e.value;return e.type===`StringValue`&&t===t.toUpperCase()}],[`none`,e=>e.type===`NullValue`],[`defined`,e=>e.type!==`UndefinedValue`],[`undefined`,e=>e.type===`UndefinedValue`],[`equalto`,(e,t)=>e.value===t.value],[`eq`,(e,t)=>e.value===t.value]]));function hG(e){return e instanceof $W||e instanceof eG||e instanceof nG}function gG(e){return e instanceof nG?Number(e.value):e.value}function _G(e,t,n=!1){if(e instanceof dG&&t instanceof dG)return 0;if(e instanceof dG||t instanceof dG)throw Error(`Cannot compare ${e.type} with ${t.type}`);if(e instanceof fG&&t instanceof fG)return 0;if(e instanceof fG||t instanceof fG)throw Error(`Cannot compare ${e.type} with ${t.type}`);if(hG(e)&&hG(t)){let n=gG(e),r=gG(t);return n<r?-1:+(n>r)}if(e.type!==t.type)throw Error(`Cannot compare different types: ${e.type} and ${t.type}`);switch(e.type){case`StringValue`:{let r=e.value,i=t.value;return n||(r=r.toLowerCase(),i=i.toLowerCase()),r<i?-1:+(r>i)}default:throw Error(`Cannot compare type: ${e.type}`)}}function vG(e){switch(typeof e){case`number`:return Number.isInteger(e)?new $W(e):new eG(e);case`string`:return new tG(e);case`boolean`:return new nG(e);case`undefined`:return new fG;case`object`:return e===null?new dG:Array.isArray(e)?new lG(e.map(vG)):new oG(new Map(Object.entries(e).map(([e,t])=>[e,vG(t)])));case`function`:return new uG((t,n)=>vG(e(...t.map(e=>e.value))??null));default:throw Error(`Cannot convert to runtime value: ${e}`)}}Object.freeze({CONDITIONAL:0,LOGICAL_OR:1,LOGICAL_AND:2,LOGICAL_NOT:3,COMPARISON:4,ADDITIVE:5,MULTIPLICATIVE:6,EXPONENTIATION:7,TEST:8,FILTER:9,UNARY_SIGN:10,ATOM:11});const yG=/* @__PURE__ */ new Map;function bG(e){return typeof e==`string`?e:e?Array.isArray(e)?e.map(e=>{if(!e)return``;if(typeof e==`string`)return e;if(e.type===`text`)return e.text||e.value||``;if(e.type===`tool_use`)return`[TOOL_CALL ${e.name}] ${JSON.stringify(e.input||{})}`;if(e.type===`tool_result`){let t=typeof e.content==`string`?e.content:JSON.stringify(e.content||``);return`[TOOL_RESULT ${e.tool_use_id||``}] ${t}`}return e.type===`attachment`?`[ATTACHMENT ${e.mediaType||`file`}] ${e.fileName||`attachment`}`:``}).filter(Boolean).join(`
|
|
2069
2069
|
`):typeof e==`object`?JSON.stringify(e):String(e):``}async function xG(e,t){let n=String(e||``).trim();if(!n)return null;if(yG.has(n))return yG.get(n);let r=t||(typeof globalThis.fetch==`function`?globalThis.fetch.bind(globalThis):void 0);if(!r)return null;let i=t||iH(r),a=`https://huggingface.co/${encodeURI(n)}/resolve/main/tokenizer_config.json`;try{let e=await i(a);if(e.ok){let t=await e.json();if(t&&typeof t==`object`){if(!t.chat_template)try{let e=await i(`https://huggingface.co/${encodeURI(n)}/resolve/main/chat_template.jinja`);if(e.ok){let n=await e.text();n&&n.trim()&&(t.chat_template=n.trim())}}catch{}if(typeof t.model_max_length==`number`&&Number.isFinite(t.model_max_length)&&t.model_max_length>0&&t.model_max_length<=2097152){let e=l.getModelInfo(n);l.registerModelInfo(n,{contextWindow:t.model_max_length,maxOutput:e?.maxOutput??null,...e||{}})}return yG.set(n,t),t}}}catch{}return null}function SG(e,t){let n=String(t||``).trim(),r=[],i=/* @__PURE__ */ new Map;for(let t of e){if(t?.tool_calls&&Array.isArray(t.tool_calls))for(let e of t.tool_calls){let t=e?.id||e?.tool_call_id,n=e?.function?.name||e?.name;t&&n&&i.set(t,n)}if(Array.isArray(t?.content))for(let e of t.content)e?.type===`tool_use`&&e.id&&e.name&&i.set(e.id,e.name)}for(let t of e){if(!t)continue;let e=String(t.role||`user`).toLowerCase(),a=bG(t.content);if(e===`system`)n=n?`${n}\n\n${a}`:a;else if(e===`tool`){let e=t.name||(t.tool_call_id?i.get(t.tool_call_id):void 0)||`unknown`;r.push({role:`tool`,content:a,...t.tool_call_id?{tool_call_id:t.tool_call_id}:{},name:e})}else if(e===`assistant`||e===`model`){let e=t.tool_calls,n=a;if(Array.isArray(t.content)){let r=t.content.filter(e=>e?.type===`tool_use`);r.length>0&&(e||=r.map(e=>({id:e.id||`call_${Math.random().toString(36).slice(2,9)}`,type:`function`,function:{name:e.name,arguments:typeof e.input==`object`&&e.input!==null?e.input:{}}})),n=bG(t.content.filter(e=>e?.type!==`tool_use`)))}Array.isArray(e)&&(e=e.map(e=>{if(!e||typeof e!=`object`)return e;let t=e.function;if(t&&typeof t==`object`&&typeof t.arguments==`string`)try{let n=JSON.parse(t.arguments);if(n&&typeof n==`object`&&!Array.isArray(n))return{...e,function:{...t,arguments:n}}}catch{}return e})),r.push({role:`assistant`,content:n,...e?{tool_calls:e}:{}})}else if(Array.isArray(t.content)&&t.content.some(e=>e?.type===`tool_result`))for(let e of t.content)if(e?.type===`tool_result`){let t=typeof e.content==`string`?e.content:JSON.stringify(e.content||``),n=e.name||(e.tool_use_id?i.get(e.tool_use_id):void 0)||`unknown`;r.push({role:`tool`,content:t,...e.tool_use_id?{tool_call_id:e.tool_use_id}:{},name:n})}else{let t=bG([e]);t&&r.push({role:`user`,content:t})}else r.push({role:`user`,content:a})}let a=[];for(let e of r)if(a.length>0&&a[a.length-1].role===e.role&&e.role!==`tool`){let t=a[a.length-1];t.content=t.content?`${t.content}\n\n${e.content}`:e.content,e.tool_calls&&(t.tool_calls=[...t.tool_calls||[],...e.tool_calls])}else a.push({...e});a.length>0&&a[0].role===`assistant`&&a.unshift({role:`user`,content:`Hello`}),a.length===0&&!n&&a.push({role:`user`,content:`Hello`});let o=[];return n&&o.push({role:`system`,content:n}),o.push(...a),o}const CG=Se.filter(e=>de.enabledToolNames.includes(e.name));function wG(){let e=globalThis.LanguageModel;return!e||typeof e!=`function`||typeof e.availability!=`function`||typeof e.create!=`function`?null:e}function TG(){return!!wG()}function EG(){return!0}const DG={expectedInputs:[{type:`text`,languages:[`en`]}],expectedOutputs:[{type:`text`,languages:[`en`]}]},OG={key:null,session:null,cleanupTimer:null};function kG(){OG.cleanupTimer&&=(clearTimeout(OG.cleanupTimer),null)}async function AG(){kG(),OG.session&&=(await Promise.resolve(OG.session.destroy?.()).catch(()=>{}),null),OG.key=null}function jG(){kG(),OG.cleanupTimer=setTimeout(()=>{AG()},1e4)}function MG(e){return typeof e?.content==`string`?e.content:Array.isArray(e?.content)?e.content.map(e=>e?.type===`text`?e.text||``:e?.type===`tool_use`?`[TOOL_CALL ${e.name}] ${JSON.stringify(e.input||{})}`:e?.type===`tool_result`?`[TOOL_RESULT ${e.tool_use_id}] ${String(e.content||``)}`:e?.type===`attachment`?`[ATTACHMENT ${e.mediaType}] ${e.fileName} (${e.mimeType})`:``).filter(Boolean).join(`
|
|
2070
2070
|
`):``}function NG(e,t=[]){return SG(t,e)}async function PG(e,t,n,r,i){await e({type:`model-download-progress`,payload:{groupId:t,status:n,progress:r,...i?{message:i}:{}}})}async function FG(e,t,n){await e(ln(t,`info`,`Prompt API`,n))}function IG(e){let t=(e instanceof Error?e.message:String(e||``)).toLowerCase();return t.includes(`unable to create a session`)&&(t.includes(`availability()`)||t.includes(`availability`)||t.includes(`check the result`))}async function LG(e){if(await new Promise(e=>{setTimeout(()=>{e()},500)}),e?.aborted)throw Error(`Prompt API session creation aborted.`)}function RG(e,t){let n=UG(e,t)||`unknown`,r={model:n};[`model`,`modelId`,`modelName`,`name`,`id`].forEach(t=>{let n=e[t];n!==void 0&&(r[t]=n)});let i=Object.entries(r).map(([e,t])=>`${e}=${t}`).join(`, `),a=e.capabilities||{},o=e.metadata||{},s=Object.keys({...a,...o});return[`resolved model: ${n}`,i?`session fields: ${i}`:`session fields: none`,s.length>0?`capabilities: ${s.join(`, `)}`:`capabilities: none`].join(` | `)}async function zG(e,t){try{let n=await fetch(`https://huggingface.co/api/models/${encodeURI(e)}/tree/main?recursive=true`);if(n.ok){let e=await n.json();if(Array.isArray(e)&&e.length>0){let n=e.filter(e=>e.type===`file`),r=n.filter(e=>[`config.json`,`generation_config.json`,`tokenizer.json`,`tokenizer_config.json`,`special_tokens_map.json`,`added_tokens.json`,`chat_template.jinja`,`tokenizer.model`].includes(e.path)).reduce((e,t)=>e+(Number(t.size)||0),0),i=n.filter(e=>{let n=String(e.path||``).toLowerCase();if(!n.endsWith(`.onnx`)&&!n.includes(`.onnx_data`)&&!n.includes(`.onnx.data`)&&!n.includes(`_data`))return!1;if(t){let e=t.toLowerCase();if(n.includes(`model_${e}.`)||n.includes(`model_${e}_`)||n.includes(`_${e}.`)||n.includes(`_${e}_`)||n.includes(`/${e}/`))return!0}return!1});i.length===0&&(i=n.filter(e=>{let t=String(e.path||``).toLowerCase();return(t.includes(`onnx/model.`)||t.includes(`onnx/model_quantized.`)||t.includes(`model.`))&&(t.endsWith(`.onnx`)||t.includes(`.onnx_data`)||t.includes(`.onnx.data`))}));let a=r+i.reduce((e,t)=>e+(Number(t.size)||0),0);if(a>5242880)return a}}}catch{}let n=[`config.json`,`generation_config.json`,`tokenizer.json`,`tokenizer_config.json`,`special_tokens_map.json`,`onnx/model_${t}.onnx`,`onnx/model_${t}.onnx_data`,`onnx/model_${t}.onnx.data`,`onnx/model.onnx`,`onnx/model.onnx_data`,`onnx/model_quantized.onnx`,`onnx/model_quantized.onnx_data`];try{let t=(await Promise.all(n.map(async t=>{try{let n=await fetch(`https://huggingface.co/${e}/resolve/main/${t}`,{method:`HEAD`});if(n.ok)return parseInt(n.headers.get(`content-length`)||`0`,10)}catch{}return 0}))).reduce((e,t)=>e+t,0);if(t>5242880)return t}catch{}return HW}async function BG(e,t,n,r=[],i=!0,a,o){await xH();let s=wG();if(!s)throw Error(`Prompt API is unavailable in this browser. Enable Prompt API flags in a supported browser (for example Edge Dev/Canary or Chrome with the required flags) or switch provider.`);let c=s,l={...a?.samplingMode?{samplingMode:a.samplingMode}:{},...typeof a?.temperature==`number`&&Number.isFinite(a.temperature)?{temperature:a.temperature}:{},...typeof a?.topK==`number`&&Number.isFinite(a.topK)?{topK:Math.floor(a.topK)}:{}},u=o&&o.length>0?o.map(e=>({name:e.name,description:e.description,inputSchema:e.input_schema,parameters:e.input_schema,...typeof e.execute==`function`?{execute:e.execute}:{}})):void 0,d;try{d=await c.availability({...DG,...l,...u?{tools:u}:{},...r&&r.length>0?{initialPrompts:r}:{}})??`available`}catch{d=`unavailable`}if(await FG(e,t,`availability() returned: ${d}`),d===`unavailable`||d===`no`){await FG(e,t,`Native Prompt API is unavailable (${d}). Falling back to local transformers.js model...`);try{let n=globalThis;n.TRANSFORMERS_CONFIG||={apiKey:`dummy`,device:`wasm`,dtype:`q4f16`,modelName:await yH(),env:{useBrowserCache:!1,useWasmCache:!0,fetch:iH()}};let i=await import(`./prompt-api-polyfill-a8J5aUE5.js`);i?.LanguageModel&&(n.LanguageModel=i.LanguageModel,c=i.LanguageModel);try{d=await c.availability({...DG,...l,...u?{tools:u}:{},...r&&r.length>0?{initialPrompts:r}:{}})??`available`}catch{d=`available`}await FG(e,t,`Polyfill availability() returned: ${d}`)}catch(e){console.warn(`Failed to load prompt-api-polyfill fallback:`,e)}}if(d===`unavailable`||d===`no`)throw Error(`Prompt API model is unavailable on this device/browser. Switch provider or enable the feature flags.`);let f=d===`readily`,p=d!==`readily`&&d!==`available`,m=!!globalThis.TRANSFORMERS_CONFIG||d===`available`&&!(`LanguageModel`in globalThis)&&!globalThis.ai?.languageModel,h=0;if(m){let e=globalThis.TRANSFORMERS_CONFIG||{};h=await zG(e.modelName||await yH(),e.dtype||`q4`)}let g=new UW((n,r,i)=>{PG(e,t,n,r,i)},{expectedTotalBytes:h,suppressInitialZero:!0,logEvents:!1});p&&(g.markActive(),await PG(e,t,`running`,d===`downloading`?null:0,`Downloading Prompt API model...`));let _,v=d;try{nH((e,t,n,r)=>{g.onStreamProgress(e,t,n,!!r)});let i=f?{}:{monitor(e){e&&typeof e.addEventListener==`function`&&e.addEventListener(`downloadprogress`,e=>{g.onProgressEvent(e)})}};for(let a=1;a<=4;a++){await FG(e,t,`Creating Prompt API session... (attempt ${a}/4)`);try{_=await bH(c,{...DG,...l,...u?{tools:u}:{},...r.length>0?{initialPrompts:r}:{},signal:n,...i});break}catch(i){if(!(v!==`readily`&&v!==`available`&&v!==`unavailable`&&v!==`no`&&IG(i))||a>=4)throw i;await FG(e,t,`Session creation failed while model is still downloading; retrying shortly...`),v=await c.availability({...DG,...l,...u?{tools:u}:{},...r&&r.length>0?{initialPrompts:r}:{}}),await FG(e,t,`availability() recheck returned: ${v}`),v!==`readily`&&v!==`available`&&v!==`unavailable`&&v!==`no`&&(g.hasEmitted||await PG(e,t,`running`,v===`downloading`?null:0,`Downloading Prompt API model...`)),await LG(n)}}}catch(n){let r=n instanceof Error?n.message:String(n);throw i&&g.onError(n),await FG(e,t,`Session creation failed: ${r}`),n}finally{rH()}return await FG(e,t,RG(_,c)),(p||g.hasEmitted)&&g.onDone(),_}function VG(e){let t=(e instanceof Error?e.message:String(e||``)).toLowerCase();return t.includes(`monitor option`)||t.includes(`downloadprogresscallback`)||t.includes(`dictionary`)||t.includes(`initialprompts`)||t.includes(`not supported`)&&(t.includes(`option`)||t.includes(`monitor`))}function HG(e){let t=e.toLowerCase();return t.includes(`gemma4`)||t.includes(`gemma 4`)||t.includes(`gemma-4`)?`Gemma 4`:t.includes(`nano_v3`)||t.includes(`gemini nano`)||t.includes(`gemini-nano`)||t.includes(`prompt_api`)?`Gemini Nano`:e}function UG(e,t){let n=[e.model,e.modelId,e.modelName,e.id,e.name,t.model,t.modelId,t.modelName,t.id,t.name].find(e=>typeof e==`string`&&e.trim());return n?HG(n.trim()):`Gemini Nano`}async function WG(e,t,n,r,i,a,o=[]){await xH();let s=wG();if(!s)throw Error(`Prompt API is unavailable in this browser. Enable Prompt API flags in a supported browser (for example Edge Dev/Canary or Chrome with the required flags) or switch provider.`);let c=NG(n,o),l={...i?.samplingMode?{samplingMode:i.samplingMode}:{},...typeof i?.temperature==`number`&&Number.isFinite(i.temperature)?{temperature:i.temperature}:{},...typeof i?.topK==`number`&&Number.isFinite(i.topK)?{topK:Math.floor(i.topK)}:{}},u=a&&a.length>0?a.map(e=>({name:e.name,description:e.description,inputSchema:e.input_schema,parameters:e.input_schema})):void 0;return await BG(e,t,r,c,!1,i,a).catch(async n=>{if(!VG(n))throw n;let i;try{i=await bH(s,{...DG,...l,...u?{tools:u}:{},...c.length>0?{initialPrompts:c}:{},signal:r})}catch(n){throw await PG(e,t,`error`,null,n instanceof Error?n.message:String(n)),n}let a=await s.availability({...DG,...l,...u?{tools:u}:{},...c&&c.length>0?{initialPrompts:c}:{}}).catch(()=>`available`);return a!==`readily`&&a!==`available`&&await PG(e,t,`done`,1,`Prompt API model ready.`),i})}async function GG(e,t,n,r,i,a,o=[]){let s=String(n||``)+(o.length?JSON.stringify(o):``);if(kG(),OG.session&&OG.key===s&&typeof OG.session.clone==`function`)try{let e=await OG.session.clone();return jG(),{session:e,destroyAfterUse:!0}}catch{await AG()}await AG();let c=await WG(e,t,n,r,i,a,o);if(typeof c.clone==`function`){OG.session=c,OG.key=s,jG();try{return{session:await c.clone(),destroyAfterUse:!0}}catch{}}return{session:c,destroyAfterUse:!0}}function KG(e,t,n=[],r=!0){let i=r?[`SYSTEM INSTRUCTIONS:`,e,``,`CONVERSATION:`]:[`CONVERSATION:`];for(let e of t){let t=e?.role===`assistant`?`ASSISTANT`:`USER`;if(typeof e?.content==`string`)i.push(`${t}: ${e.content}`);else if(Array.isArray(e?.content)){let n=e.content.map(e=>e?.type===`text`?e.text||``:e?.type===`tool_use`?`[TOOL_CALL ${e.name}] ${JSON.stringify(e.input||{})}`:e?.type===`tool_result`?`[TOOL_RESULT ${e.tool_use_id}] ${String(e.content||``)}`:e?.type===`attachment`?`[ATTACHMENT ${e.mediaType}] ${e.fileName} (${e.mimeType})`:``).filter(Boolean).join(`
|