shadow-claw 1.59.7 → 1.60.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 +4 -12
- package/.well-known/mcp.json +4 -12
- package/README.md +6 -2
- package/dist/cli/build/build.js +1 -1
- package/dist/cli/{chunk-DDvuLVfW.js → chunk-3C5izdQW.js} +1 -1
- package/dist/cli/chunk-B-75h9gX.js +1 -0
- package/dist/cli/{chunk-hVf839t7.js → chunk-B7Kn-otm.js} +1 -1
- package/dist/cli/{chunk-YX32FcN7.js → chunk-BBczgswQ.js} +1 -1
- package/dist/cli/{chunk-DcNxjqH6.js → chunk-BE-lYWcn.js} +1 -1
- package/dist/cli/{chunk-CQaCgswD.js → chunk-BECr0WxI.js} +11 -11
- package/dist/cli/chunk-BEz1PD1_.js +1 -0
- package/dist/cli/chunk-BLzI1Fp2.js +1 -0
- package/dist/cli/{chunk-B3TrWbca.js → chunk-BVSC1MNQ.js} +11 -11
- package/dist/cli/{chunk-D_te8ufL.js → chunk-BdWcep6o.js} +1 -1
- package/dist/cli/{chunk-SRBRVorc.js → chunk-BfTpnSS4.js} +1 -1
- package/dist/cli/{chunk-D2_eAO83.js → chunk-BgvqTf7w.js} +1 -1
- package/dist/cli/chunk-BwsJfUT3.js +1 -0
- package/dist/cli/{chunk--PFY91kE.js → chunk-C9b4b7c_.js} +1 -1
- package/dist/cli/{chunk-SxK79JmB.js → chunk-CAw9XYFe.js} +1 -1
- package/dist/cli/chunk-CFCcbFs2.js +396 -0
- package/dist/cli/{chunk-Cnjb8Usu.js → chunk-CTarF4FC.js} +1 -1
- package/dist/cli/{chunk-3vNYrs_L.js → chunk-Cbq5hpjb.js} +4 -4
- package/dist/cli/chunk-CjTjKy_v.js +310 -0
- package/dist/cli/chunk-Cjyu4cr_.js +36 -0
- package/dist/cli/{chunk-DUGZPka_.js → chunk-ClMKygjZ.js} +1 -1
- package/dist/cli/chunk-Cppnq1KF.js +1 -0
- package/dist/cli/{chunk-DvemF16v.js → chunk-D9QCNFMO.js} +1 -1
- package/dist/cli/{chunk-iB8OoMmW.js → chunk-DB21BMqt.js} +1 -1
- package/dist/cli/{chunk-_Vo-o_e3.js → chunk-DHoIWvCc.js} +1 -1
- package/dist/cli/chunk-DZEN9T5y.js +1 -0
- package/dist/cli/{chunk-5rLO4DWS.js → chunk-Dl14OyYO.js} +9 -9
- package/dist/cli/chunk-Dl_vv0dI.js +1 -0
- package/dist/cli/chunk-Dpmfhlyl.js +1 -0
- package/dist/cli/{chunk-BrR1DOBS.js → chunk-Du7Xtucq.js} +1 -1
- package/dist/cli/{chunk-B88Z8T_9.js → chunk-DxcDFUi_.js} +1 -1
- package/dist/cli/{chunk-Dt7-hzJU.js → chunk-DyyEWbV7.js} +1 -1
- package/dist/cli/chunk-N0x3mXU0.js +1 -0
- package/dist/cli/{chunk-CGoE4llV.js → chunk-V-w0Bata.js} +1 -1
- package/dist/cli/{chunk-CncW6_WL.js → chunk-ZxDxSSn-.js} +1 -1
- package/dist/cli/{chunk-CZdCRqNe.js → chunk-lPvFUkd5.js} +1 -1
- package/dist/cli/{chunk-66BvqAV0.js → chunk-n5s-sCdU.js} +1 -1
- package/dist/cli/{chunk-CAAeGOdy.js → chunk-nD9VPVMq.js} +1 -1
- package/dist/cli/{chunk-DMs7kREC.js → chunk-rFuy8aS_.js} +1 -1
- package/dist/cli/{chunk-B0qusANw.js → chunk-wjM6JXWa.js} +1 -1
- package/dist/cli/{chunk-DhOU6GYX.js → chunk-zcES9rut.js} +1 -1
- package/dist/cli/cli.js +3 -3
- package/dist/headless-agent.js +1 -1
- package/dist/lib/{channel-mmdGzPkT.js → channel-DB77spML.js} +2 -2
- package/dist/lib/{channel-mmdGzPkT.js.map → channel-DB77spML.js.map} +1 -1
- package/dist/lib/{compact-context-CY9BBlUQ.js → compact-context-Q9t9aL1e.js} +7 -7
- package/dist/lib/{compact-context-CY9BBlUQ.js.map → compact-context-Q9t9aL1e.js.map} +1 -1
- package/dist/lib/components/index.js +21 -21
- 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-llm.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-channel-config.js +1 -1
- package/dist/lib/components/shadow-claw-channels.js +1 -1
- package/dist/lib/components/shadow-claw-chat.js +1 -1
- package/dist/lib/components/shadow-claw-control-plane.js +1 -1
- package/dist/lib/components/shadow-claw-conversations.js +1 -1
- package/dist/lib/components/shadow-claw-file-viewer.js +1 -1
- package/dist/lib/components/shadow-claw-files.js +1 -1
- package/dist/lib/components/shadow-claw-git.js +1 -1
- package/dist/lib/components/shadow-claw-llm.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-pages.js +1 -1
- package/dist/lib/components/shadow-claw-peerjs.js +1 -1
- package/dist/lib/components/shadow-claw-settings.js +1 -1
- package/dist/lib/components/shadow-claw-storage.js +1 -1
- package/dist/lib/components/shadow-claw-task-server.js +1 -1
- package/dist/lib/components/shadow-claw-tasks.js +1 -1
- package/dist/lib/components/shadow-claw-terminal.js +1 -1
- package/dist/lib/components/shadow-claw-tools.js +1 -1
- package/dist/lib/components/shadow-claw-webvm.js +1 -1
- package/dist/lib/components/shadow-claw.js +1 -1
- package/dist/lib/{configure-peer-js-ccNvax2N.js → configure-peer-js-CgFiwoxY.js} +2 -2
- package/dist/lib/{configure-peer-js-ccNvax2N.js.map → configure-peer-js-CgFiwoxY.js.map} +1 -1
- package/dist/lib/content/build-attachment-content-blocks.d.ts +2 -0
- package/dist/lib/{discover-skills-OwlQ2sXA.js → discover-skills-CXyaWHKi.js} +5 -5
- package/dist/lib/{discover-skills-OwlQ2sXA.js.map → discover-skills-CXyaWHKi.js.map} +1 -1
- package/dist/lib/{git-D2J_j9X9.js → git-CogDRlEz.js} +2 -2
- package/dist/lib/{git-D2J_j9X9.js.map → git-CogDRlEz.js.map} +1 -1
- package/dist/lib/index.js +21 -21
- package/dist/lib/{init-control-plane-B7blDVIE.js → init-control-plane-CEGdzgWX.js} +7 -7
- package/dist/lib/{init-control-plane-B7blDVIE.js.map → init-control-plane-CEGdzgWX.js.map} +1 -1
- package/dist/lib/{invoke-agent-SxvudiDT.js → invoke-agent-cac3gCsj.js} +6 -6
- package/dist/lib/{invoke-agent-SxvudiDT.js.map → invoke-agent-cac3gCsj.js.map} +1 -1
- package/dist/lib/{move-group-entry-DDpjxa10.js → move-group-entry-D8dptMg0.js} +2 -2
- package/dist/lib/{move-group-entry-DDpjxa10.js.map → move-group-entry-D8dptMg0.js.map} +1 -1
- package/dist/lib/{orchestrator-C7fkh7T7.js → orchestrator-BBAwy9Nm.js} +12 -12
- package/dist/lib/{orchestrator-C7fkh7T7.js.map → orchestrator-BBAwy9Nm.js.map} +1 -1
- package/dist/lib/{orchestrator-CCARkxQC.js → orchestrator-cRBe3lhq.js} +2 -2
- package/dist/lib/{orchestrator-CCARkxQC.js.map → orchestrator-cRBe3lhq.js.map} +1 -1
- package/dist/lib/{peerjs-Bfw_FWLB.js → peerjs-BLg8aGUj.js} +3 -3
- package/dist/lib/{peerjs-Bfw_FWLB.js.map → peerjs-BLg8aGUj.js.map} +1 -1
- package/dist/lib/{process-peer-query-param-BxYiZNdf.js → process-peer-query-param-BnsVnxzH.js} +5 -5
- package/dist/lib/{process-peer-query-param-BxYiZNdf.js.map → process-peer-query-param-BnsVnxzH.js.map} +1 -1
- package/dist/lib/{process-pending-shared-payloads-DPIbwRb3.js → process-pending-shared-payloads-DBZfZOOa.js} +2 -2
- package/dist/lib/{process-pending-shared-payloads-DPIbwRb3.js.map → process-pending-shared-payloads-DBZfZOOa.js.map} +1 -1
- package/dist/lib/{process-room-query-param-B2_d50nE.js → process-room-query-param-B8EYg_-r.js} +4 -4
- package/dist/lib/{process-room-query-param-B2_d50nE.js.map → process-room-query-param-B8EYg_-r.js.map} +1 -1
- package/dist/lib/{push-client-rrjTdc-U.js → push-client-CAm6UMvE.js} +3 -3
- package/dist/lib/{push-client-rrjTdc-U.js.map → push-client-CAm6UMvE.js.map} +1 -1
- package/dist/lib/{rooms-bwGoYb1q.js → rooms-Dzphx3rK.js} +2 -2
- package/dist/lib/{rooms-bwGoYb1q.js.map → rooms-Dzphx3rK.js.map} +1 -1
- package/dist/lib/{shadow-claw-CypGVlVO.js → shadow-claw-CGl8tXtG.js} +6 -6
- package/dist/lib/{shadow-claw-CypGVlVO.js.map → shadow-claw-CGl8tXtG.js.map} +1 -1
- package/dist/lib/{shadow-claw-channel-config-DJpDovkF.js → shadow-claw-channel-config-BNIWCdsL.js} +4 -4
- package/dist/lib/{shadow-claw-channel-config-DJpDovkF.js.map → shadow-claw-channel-config-BNIWCdsL.js.map} +1 -1
- package/dist/lib/{shadow-claw-channels-DJLwRovH.js → shadow-claw-channels-C2QSn4Ew.js} +2 -2
- package/dist/lib/{shadow-claw-channels-DJLwRovH.js.map → shadow-claw-channels-C2QSn4Ew.js.map} +1 -1
- package/dist/lib/{shadow-claw-chat-B92cPaft.js → shadow-claw-chat-Wx3y9y6c.js} +3 -3
- package/dist/lib/{shadow-claw-chat-B92cPaft.js.map → shadow-claw-chat-Wx3y9y6c.js.map} +1 -1
- package/dist/lib/{shadow-claw-control-plane-fvn-qyHj.js → shadow-claw-control-plane-D5E4cFGu.js} +6 -6
- package/dist/lib/{shadow-claw-control-plane-fvn-qyHj.js.map → shadow-claw-control-plane-D5E4cFGu.js.map} +1 -1
- package/dist/lib/{shadow-claw-conversations-CsVyDOny.js → shadow-claw-conversations-BtDv7GRW.js} +2 -2
- package/dist/lib/{shadow-claw-conversations-CsVyDOny.js.map → shadow-claw-conversations-BtDv7GRW.js.map} +1 -1
- package/dist/lib/{shadow-claw-file-viewer-DFfyP7s5.js → shadow-claw-file-viewer-CG40kwWV.js} +2 -2
- package/dist/lib/{shadow-claw-file-viewer-DFfyP7s5.js.map → shadow-claw-file-viewer-CG40kwWV.js.map} +1 -1
- package/dist/lib/{shadow-claw-files-cT6HL7ye.js → shadow-claw-files-BOUULrlX.js} +3 -3
- package/dist/lib/{shadow-claw-files-cT6HL7ye.js.map → shadow-claw-files-BOUULrlX.js.map} +1 -1
- package/dist/lib/{shadow-claw-git-Cv9mQgTx.js → shadow-claw-git-BeHV73_9.js} +3 -3
- package/dist/lib/{shadow-claw-git-Cv9mQgTx.js.map → shadow-claw-git-BeHV73_9.js.map} +1 -1
- package/dist/lib/{shadow-claw-llm-CKOYzPDp.js → shadow-claw-llm-KONyWKZM.js} +2 -2
- package/dist/lib/{shadow-claw-llm-CKOYzPDp.js.map → shadow-claw-llm-KONyWKZM.js.map} +1 -1
- package/dist/lib/{shadow-claw-networking-DYfiUQaH.js → shadow-claw-networking-Diy3JJkc.js} +2 -2
- package/dist/lib/{shadow-claw-networking-DYfiUQaH.js.map → shadow-claw-networking-Diy3JJkc.js.map} +1 -1
- package/dist/lib/{shadow-claw-notifications-JJlzriuX.js → shadow-claw-notifications-C-upPa-4.js} +2 -2
- package/dist/lib/{shadow-claw-notifications-JJlzriuX.js.map → shadow-claw-notifications-C-upPa-4.js.map} +1 -1
- package/dist/lib/{shadow-claw-pages-BCo3ihZI.js → shadow-claw-pages-CfAjUKgd.js} +2 -2
- package/dist/lib/{shadow-claw-pages-BCo3ihZI.js.map → shadow-claw-pages-CfAjUKgd.js.map} +1 -1
- package/dist/lib/{shadow-claw-peerjs-CFNjfrY5.js → shadow-claw-peerjs-t4YibS9s.js} +5 -5
- package/dist/lib/{shadow-claw-peerjs-CFNjfrY5.js.map → shadow-claw-peerjs-t4YibS9s.js.map} +1 -1
- package/dist/lib/{shadow-claw-settings-BMwne0bh.js → shadow-claw-settings-Cg5V0e9g.js} +2 -2
- package/dist/lib/{shadow-claw-settings-BMwne0bh.js.map → shadow-claw-settings-Cg5V0e9g.js.map} +1 -1
- package/dist/lib/{shadow-claw-storage-DUY8B9m-.js → shadow-claw-storage-C7tCnsSG.js} +2 -2
- package/dist/lib/{shadow-claw-storage-DUY8B9m-.js.map → shadow-claw-storage-C7tCnsSG.js.map} +1 -1
- package/dist/lib/{shadow-claw-task-server-yWeoA3eL.js → shadow-claw-task-server-BObsRdf8.js} +2 -2
- package/dist/lib/{shadow-claw-task-server-yWeoA3eL.js.map → shadow-claw-task-server-BObsRdf8.js.map} +1 -1
- package/dist/lib/{shadow-claw-tasks-Bg0uM15I.js → shadow-claw-tasks-B2EEqrcY.js} +3 -3
- package/dist/lib/{shadow-claw-tasks-Bg0uM15I.js.map → shadow-claw-tasks-B2EEqrcY.js.map} +1 -1
- package/dist/lib/{shadow-claw-terminal-fyJPppY_.js → shadow-claw-terminal-DSHfO2b9.js} +2 -2
- package/dist/lib/{shadow-claw-terminal-fyJPppY_.js.map → shadow-claw-terminal-DSHfO2b9.js.map} +1 -1
- package/dist/lib/{shadow-claw-tools-D0T8m3go.js → shadow-claw-tools-DwPBADua.js} +3 -3
- package/dist/lib/{shadow-claw-tools-D0T8m3go.js.map → shadow-claw-tools-DwPBADua.js.map} +1 -1
- package/dist/lib/{shadow-claw-webvm-CQvzJwKI.js → shadow-claw-webvm-CY4qGaMB.js} +2 -2
- package/dist/lib/{shadow-claw-webvm-CQvzJwKI.js.map → shadow-claw-webvm-CY4qGaMB.js.map} +1 -1
- package/dist/lib/{sync-web-mcp-registration-BFtG_4kx.js → sync-web-mcp-registration-BiOZvW-R.js} +3 -3
- package/dist/lib/{sync-web-mcp-registration-BFtG_4kx.js.map → sync-web-mcp-registration-BiOZvW-R.js.map} +1 -1
- package/dist/lib/{system-prompt-bhGRLoL2.js → system-prompt-CxJ3Nx4c.js} +4 -3
- package/dist/lib/system-prompt-CxJ3Nx4c.js.map +1 -0
- package/dist/public/.well-known/mcp/server-card.json +4 -12
- package/dist/public/.well-known/mcp.json +4 -12
- package/dist/public/AGENTS.md +3 -1
- package/dist/public/README.md +6 -2
- package/dist/public/agent.worker.js +1 -1
- package/dist/public/{channel-Dk7wl-Av.js → channel-DIpDQekL.js} +1 -1
- package/dist/public/{chat-template-BwAnTFKf.js → chat-template-CXKs8lFR.js} +1 -1
- package/dist/public/compact-context-BQ2ZXoAc.js +5 -0
- package/dist/public/{compact-context-fOTqwKF6.js → compact-context-dHitmPsV.js} +2 -2
- package/dist/public/{configure-peer-js-BOV0tR6G.js → configure-peer-js-DV1rqvFX.js} +1 -1
- package/dist/public/{create-model-cache-fetch-DSAFjOwc.js → create-model-cache-fetch-B0mSCEk6.js} +1 -1
- package/dist/public/{discover-skills-D1sNTy2r.js → discover-skills-BWJB8HUA.js} +1 -1
- package/dist/public/docs/architecture/overview.md +1 -1
- package/dist/public/docs/example/article/index.html +21 -21
- package/dist/public/docs/example/article.html +21 -21
- package/dist/public/docs/publishing/index.html +21 -21
- package/dist/public/docs/publishing.html +21 -21
- package/dist/public/docs/skill-creator/index.html +21 -21
- package/dist/public/docs/skill-creator.html +21 -21
- package/dist/public/docs/subsystems/attachment-capabilities.md +14 -1
- package/dist/public/docs/subsystems/cli.md +95 -51
- package/dist/public/docs/subsystems/pages.md +5 -0
- package/dist/public/e2e/README.md +1 -1
- package/dist/public/{e2e-bridge-Cz95DLlb.js → e2e-bridge-lP2qqiv3.js} +1 -1
- package/dist/public/{git-BmMlwIMP.js → git-DjmQ16rm.js} +1 -1
- package/dist/public/{iframe-bridge-scripts-Cibg0m6A.js → iframe-bridge-scripts-CO0izGjW.js} +1 -1
- package/dist/public/index.html +21 -21
- package/dist/public/index.js +1 -1
- package/dist/public/{init-control-plane-Cb31yLTY.js → init-control-plane-Ctz7FI8M.js} +1 -1
- package/dist/public/{invoke-agent-CN7mSV0Z.js → invoke-agent-C_geruwq.js} +1 -1
- package/dist/public/llms.txt +1 -1
- package/dist/public/main/index.html +21 -21
- package/dist/public/main/memory/index.html +21 -21
- package/dist/public/main/memory.html +21 -21
- package/dist/public/main.html +21 -21
- package/dist/public/{move-group-entry-CXneuNVa.js → move-group-entry-QQ9Hkk54.js} +1 -1
- package/dist/public/{orchestrator-Dyylc8IU.js → orchestrator-C1kaTltu.js} +2 -2
- package/dist/public/{orchestrator-DBO4NZqd.js → orchestrator-Li1UAsv7.js} +1 -1
- package/dist/public/{peerjs-l0jiBoh6.js → peerjs-DbBryE-9.js} +1 -1
- package/dist/public/{process-peer-query-param-s-aSP1Rq.js → process-peer-query-param-DQIgr3KL.js} +1 -1
- package/dist/public/{process-pending-shared-payloads-BN3GigPT.js → process-pending-shared-payloads-Ctb-TFqB.js} +1 -1
- package/dist/public/{process-room-query-param-B2Qe0F0M.js → process-room-query-param-F-XnIVoZ.js} +1 -1
- package/dist/public/{push-client-B2LC8Qp9.js → push-client-DRx9Eggz.js} +1 -1
- package/dist/public/{rooms-ChCEOvkw.js → rooms-BurBI7is.js} +1 -1
- package/dist/public/service-worker/init.js +1 -1
- package/dist/public/service-worker.js +1 -1
- package/dist/public/{shadow-claw-Br8mWDUx.js → shadow-claw-Bg9AQ5x_.js} +2 -2
- package/dist/public/{shadow-claw-accounts-Dm6G7KMP.js → shadow-claw-accounts-B3mjYI0M.js} +1 -1
- package/dist/public/{shadow-claw-card-CggS8uSa.js → shadow-claw-card-tcXRS1GF.js} +1 -1
- package/dist/public/{shadow-claw-channels-088vhuWO.js → shadow-claw-channels-BiSfLvWv.js} +1 -1
- package/dist/public/{shadow-claw-chat-BRwRlq-n.js → shadow-claw-chat-N5jMsXZZ.js} +1 -1
- package/dist/public/{shadow-claw-control-plane-rhKACK85.js → shadow-claw-control-plane-DFVe_Xdq.js} +2 -2
- package/dist/public/{shadow-claw-conversations-CF_yUfKl.js → shadow-claw-conversations-wAR06_ya.js} +1 -1
- package/dist/public/{shadow-claw-empty-state-CkpOSXCS.js → shadow-claw-empty-state-CnPm3NVM.js} +1 -1
- package/dist/public/{shadow-claw-file-viewer-DWCejuY3.js → shadow-claw-file-viewer-sZN_FCDW.js} +2 -2
- package/dist/public/{shadow-claw-files-L6_ioyzh.js → shadow-claw-files-CnvkCbd4.js} +2 -2
- package/dist/public/{shadow-claw-git-DsdkwLqQ.js → shadow-claw-git-BBHfClGk.js} +2 -2
- package/dist/public/{shadow-claw-integrations-CSbRTOm3.js → shadow-claw-integrations-DvdBqzRJ.js} +1 -1
- package/dist/public/{shadow-claw-llm-BitaeAVc.js → shadow-claw-llm-YfohG519.js} +1 -1
- package/dist/public/{shadow-claw-mcp-remote-gSbV5riy.js → shadow-claw-mcp-remote-BAVbf5pi.js} +1 -1
- package/dist/public/{shadow-claw-networking-Dn_y6Cl9.js → shadow-claw-networking-CZ4LWPW7.js} +1 -1
- package/dist/public/{shadow-claw-notifications-Cj4Lqx8U.js → shadow-claw-notifications-BHwyREkG.js} +1 -1
- package/dist/public/{shadow-claw-page-header-DR4OZFt2.js → shadow-claw-page-header-De6Qf6eY.js} +1 -1
- package/dist/public/{shadow-claw-page-header-action-button-BnCV_2Kb.js → shadow-claw-page-header-action-button-FSOhTc9z.js} +1 -1
- package/dist/public/{shadow-claw-pages-mpDOtNYj.js → shadow-claw-pages-D_oPyDca.js} +1 -1
- package/dist/public/{shadow-claw-pdf-viewer-DZ_84qJH.js → shadow-claw-pdf-viewer-CrU4wqRq.js} +1 -1
- package/dist/public/{shadow-claw-settings-CfFTYTEy.js → shadow-claw-settings-DkUhvxVr.js} +2 -2
- package/dist/public/{shadow-claw-storage-DLmiT4bG.js → shadow-claw-storage-D0o56Tjw.js} +1 -1
- package/dist/public/{shadow-claw-task-server-BoMBCsiS.js → shadow-claw-task-server-4rkroO9K.js} +1 -1
- package/dist/public/{shadow-claw-tasks-ChEp1j7x.js → shadow-claw-tasks-BdP7lmvu.js} +1 -1
- package/dist/public/{shadow-claw-terminal-BaoVbOda.js → shadow-claw-terminal-DVHX7Fsu.js} +1 -1
- package/dist/public/{shadow-claw-toast-e8oz7z6Z.js → shadow-claw-toast-B9Y9tSkW.js} +1 -1
- package/dist/public/{shadow-claw-tools-BYjUBiJz.js → shadow-claw-tools-BwwY53Lr.js} +1 -1
- package/dist/public/{shadow-claw-webvm-xGb13TME.js → shadow-claw-webvm-CXGdkCNM.js} +1 -1
- package/dist/public/{sync-web-mcp-registration-CQluj-Kz.js → sync-web-mcp-registration-DVK_IhXZ.js} +1 -1
- package/dist/public/{system-prompt-CTJn0tK-.js → system-prompt-BmswoQwF.js} +2 -2
- package/dist/public/{workbox-92eae37e.js → workbox-e4022e15.js} +1 -1
- package/dist/public/{zip-reader-DN7FB-Q0.js → zip-reader-JHoTbATw.js} +1 -1
- package/dist/server.js +5 -5
- package/package.json +1 -1
- package/dist/cli/chunk-2gZFafgY.js +0 -1
- package/dist/cli/chunk-BCjL0JXf.js +0 -1
- package/dist/cli/chunk-BNcu1oiT.js +0 -1
- package/dist/cli/chunk-BUNoeMKY.js +0 -36
- package/dist/cli/chunk-C5ypckWC.js +0 -225
- package/dist/cli/chunk-CFxww5Yz.js +0 -1
- package/dist/cli/chunk-CGIgtL6R.js +0 -1
- package/dist/cli/chunk-CafdvLx-.js +0 -1
- package/dist/cli/chunk-Dhap1VwA.js +0 -1
- package/dist/cli/chunk-Ds5-K-9o.js +0 -1
- package/dist/cli/chunk-DwvavohW.js +0 -1
- package/dist/cli/chunk-_a0CkUNS.js +0 -139
- package/dist/lib/system-prompt-bhGRLoL2.js.map +0 -1
- package/dist/public/compact-context-CX4H8V57.js +0 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./config-C16fFWtP.js";import{n as e}from"./db-BUuJo1Gf.js";import{t}from"./dist-CeFyqf9k.js";import{t as n}from"./ulid-BSJxYh6W.js";import{o as r}from"./tools-D-52Zmfc.js";import{a as i}from"./transformers-CQ9ss9rD.js";import{i as a}from"./mime-ClqNyXPc.js";import{t as o}from"./upload-group-file-A8kB7lvO.js";import{n as s}from"./filename-kBumOBho.js";import{t as c}from"./write-group-file-bytes-A8kB7lvO.js";function l(e){return s(e,{replacement:`-`,fallback:`attachment`,stripLeadingDots:!0,collapseReplacement:!0,stripControlChars:!0})}function u(e){return e.previewDisposition===`inline`||a(e.fileName,e.mimeType||``)===`image/png`}function d(e,t=``,n=Date.now()){let r=l(e),i=t.trim().replace(/[^a-zA-Z0-9._-]+/g,`-`).replace(/^-+|-+$/g,``);return`attachments/${n}-${i?`${i}-`:``}${r}`}async function f(e,t,n=[]){let r=[];for(let i of n){let n=l(i.fileName||``),s=i.path||d(n,i.id),c=i.source,u=a(n,i.mimeType||``),f=i.size;if(c){let r=await p(c);u=a(n,i.mimeType||r.type),f=typeof f==`number`?f:r.size,await o(e,t,s,r)}r.push(m({...i,fileName:n,mimeType:u,size:f,path:s,previewDisposition:i.previewDisposition||(u===`image/png`?`inline`:`file`)}))}return r}async function p(e){if(e.kind===`local-file`)return e.file;if(e.kind===`inline-text`)return new Blob([e.text],{type:e.mimeType||`text/plain`});let t=await fetch(e.url,{headers:e.headers});if(!t.ok)throw Error(`Attachment download failed: HTTP ${t.status} ${t.statusText}`);return await t.blob()}function m(e){let{source:t,...n}=e;return n}const h=/* @__PURE__ */ new Set([`TASK_STATE_COMPLETED`,`TASK_STATE_FAILED`,`TASK_STATE_CANCELED`,`TASK_STATE_REJECTED`]),g=/* @__PURE__ */ new Set([`TASK_STATE_INPUT_REQUIRED`,`TASK_STATE_AUTH_REQUIRED`]),_={SEND_MESSAGE:`SendMessage`,SEND_STREAMING_MESSAGE:`SendStreamingMessage`,GET_TASK:`GetTask`,CANCEL_TASK:`CancelTask`,GET_AGENT_CARD:`GetAgentCard`},v={EVENT:`agui/event`},y={STATUS_UPDATE:`tasks/statusUpdate`,ARTIFACT_UPDATE:`tasks/artifactUpdate`},b={JOIN:`room/join`,ROSTER:`room/roster`,LEAVE:`room/leave`,MESSAGE:`room/message`,INVITE:`room/invite`,RELAY:`room/relay`,A2UI:`room/a2ui`,A2UI_ACTION:`room/a2ui-action`},x={TASK_NOT_FOUND:-32001,TASK_NOT_CANCELABLE:-32002,PUSH_NOTIFICATION_NOT_SUPPORTED:-32003,UNSUPPORTED_OPERATION:-32004,CONTENT_TYPE_NOT_SUPPORTED:-32005,INVALID_AGENT_RESPONSE:-32006,PARSE_ERROR:-32700,INVALID_REQUEST:-32600,METHOD_NOT_FOUND:-32601,INVALID_PARAMS:-32602,INTERNAL_ERROR:-32603};function S(e){return typeof e==`object`&&!!e&&e.jsonrpc===`2.0`&&(e.id===null||typeof e.id==`string`||typeof e.id==`number`)&&typeof e.method==`string`}function C(e){return typeof e==`object`&&!!e&&e.jsonrpc===`2.0`&&(e.id===null||typeof e.id==`string`||typeof e.id==`number`)&&!(`method`in e)}function w(e){let t={url:`webrtc://${e.peerId}`,protocolBinding:`https://xt-ml.github.io/shadow-claw/bindings/webrtc-datachannel/v1`,protocolVersion:`1.0`},n={streaming:e.streaming??!0,pushNotifications:!1};return{name:e.name,description:e.description??`AI assistant agent (${e.name})`,version:e.version??`1.0.0`,supportedInterfaces:[t],capabilities:n,defaultInputModes:[`text/plain`,`application/json`],defaultOutputModes:[`text/plain`,`application/json`],skills:e.skills??[],iconUrl:e.iconUrl}}function T(){return{jsonrpc:`2.0`,id:n(),method:_.GET_AGENT_CARD}}function E(e,t){return{jsonrpc:`2.0`,id:e,result:t}}function D(e){if(e.error)return console.warn(`GetAgentCard returned error:`,e.error),null;let t=e.result;return!t||typeof t!=`object`||typeof t.name!=`string`||typeof t.version!=`string`?null:t}var O=class{_cards=/* @__PURE__ */ new Map;clear(){this._cards.clear()}delete(e){this._cards.delete(e)}entries(){return this._cards.entries()}get(e){return this._cards.get(e)}getDisplayName(e){return this._cards.get(e)?.name??e}has(e){return this._cards.has(e)}set(e,t){this._cards.set(e,t)}supportsStreaming(e){return this._cards.get(e)?.capabilities?.streaming??!1}};const k={maxTasks:100,maxHistoryPerTask:50},A=/* @__PURE__ */ new Map([[`TASK_STATE_SUBMITTED`,/* @__PURE__ */ new Set([`TASK_STATE_WORKING`,`TASK_STATE_REJECTED`,`TASK_STATE_CANCELED`,`TASK_STATE_FAILED`])],[`TASK_STATE_WORKING`,/* @__PURE__ */ new Set([`TASK_STATE_COMPLETED`,`TASK_STATE_FAILED`,`TASK_STATE_CANCELED`,`TASK_STATE_INPUT_REQUIRED`,`TASK_STATE_AUTH_REQUIRED`])],[`TASK_STATE_INPUT_REQUIRED`,/* @__PURE__ */ new Set([`TASK_STATE_WORKING`,`TASK_STATE_CANCELED`,`TASK_STATE_FAILED`])],[`TASK_STATE_AUTH_REQUIRED`,/* @__PURE__ */ new Set([`TASK_STATE_WORKING`,`TASK_STATE_CANCELED`,`TASK_STATE_FAILED`])]]);var j=class{_config;_contextActiveTask=/* @__PURE__ */ new Map;_listeners=/* @__PURE__ */ new Set;_taskOrder=[];_tasks=/* @__PURE__ */ new Map;constructor(e){this._config={...k,...e}}addArtifact(e,t,n=!1){let r=this._tasks.get(e);if(!r)return;if(r.artifacts||=[],n){let e=r.artifacts.find(e=>e.artifactId===t.artifactId);e?e.parts.push(...t.parts):r.artifacts.push(t)}else r.artifacts.push(t);let i={taskId:r.id,contextId:r.contextId??``,artifact:t,append:n,lastChunk:!1};this._emit({type:`artifactUpdate`,taskId:r.id,contextId:r.contextId??``,payload:i})}cancelTask(e){let t=this._tasks.get(e);return!t||h.has(t.status.state)?!1:(this._transitionState(t,`TASK_STATE_CANCELED`,{messageId:n(),role:`ROLE_AGENT`,parts:[{text:`Task canceled by peer request.`}]}),!0)}clear(){this._tasks.clear(),this._taskOrder=[],this._contextActiveTask.clear()}emitRunError(e,t,n){let r=this._tasks.get(e);if(!r)return;let i={type:`RUN_ERROR`,message:t,code:n,timestamp:Date.now()};this._emitAGUI(r,i)}emitRunFinished(e){let t=this._tasks.get(e);if(!t)return;let n={type:`RUN_FINISHED`,threadId:t.contextId??t.id,runId:t.id,timestamp:Date.now()};this._emitAGUI(t,n)}emitRunStarted(e){let t=this._tasks.get(e);if(!t)return;let n={type:`RUN_STARTED`,threadId:t.contextId??t.id,runId:t.id,timestamp:Date.now()};this._emitAGUI(t,n)}emitStateSnapshot(e,t){let n=this._tasks.get(e);if(!n)return;let r={type:`STATE_SNAPSHOT`,snapshot:t,timestamp:Date.now()};this._emitAGUI(n,r)}emitTextMessageContent(e,t,n){let r=this._tasks.get(e);if(!r)return;let i={type:`TEXT_MESSAGE_CONTENT`,messageId:t,delta:n,timestamp:Date.now()};this._emitAGUI(r,i)}emitTextMessageEnd(e,t){let n=this._tasks.get(e);if(!n)return;let r={type:`TEXT_MESSAGE_END`,messageId:t,timestamp:Date.now()};this._emitAGUI(n,r)}emitTextMessageStart(e,t,n=`assistant`){let r=this._tasks.get(e);if(!r)return;let i={type:`TEXT_MESSAGE_START`,messageId:t,role:n,timestamp:Date.now()};this._emitAGUI(r,i)}emitToolCallEnd(e,t){let n=this._tasks.get(e);if(!n)return;let r={type:`TOOL_CALL_END`,toolCallId:t,timestamp:Date.now()};this._emitAGUI(n,r)}emitToolCallStart(e,t,n,r){let i=this._tasks.get(e);if(!i)return;let a={type:`TOOL_CALL_START`,toolCallId:t,toolCallName:n,parentMessageId:r,timestamp:Date.now()};this._emitAGUI(i,a)}getActiveTaskForContext(e){let t=this._contextActiveTask.get(e);if(t)return this._tasks.get(t)}getActiveTasks(){return Array.from(this._tasks.values()).filter(e=>!h.has(e.status.state))}getAllTasks(){return Array.from(this._tasks.values())}getTask(e){return this._tasks.get(e)}handleSendMessage(e){let t=e.message,r=t.contextId??n(),i=t.taskId??this._contextActiveTask.get(r);return i&&this._tasks.has(i)?this._continueTask(i,t):this._createTask(r,t)}markCompleted(e,t){let n=this._tasks.get(e);n&&this._transitionState(n,`TASK_STATE_COMPLETED`,t)}markFailed(e,t){let r=this._tasks.get(e);r&&this._transitionState(r,`TASK_STATE_FAILED`,{messageId:n(),role:`ROLE_AGENT`,parts:[{text:t}]})}markInputRequired(e,t){let n=this._tasks.get(e);n&&this._transitionState(n,`TASK_STATE_INPUT_REQUIRED`,t)}markWorking(e){let t=this._tasks.get(e);t&&this._transitionState(t,`TASK_STATE_WORKING`)}off(e){this._listeners.delete(e)}on(e){this._listeners.add(e)}_addTask(e){for(this._tasks.set(e.id,e),this._taskOrder.push(e.id);this._taskOrder.length>this._config.maxTasks;){let e=this._taskOrder.shift(),t=this._tasks.get(e);if(t&&h.has(t.status.state))this._tasks.delete(e),t.contextId&&this._contextActiveTask.delete(t.contextId);else{this._taskOrder.unshift(e);break}}}_continueTask(e,t){let n=this._tasks.get(e);return g.has(n.status.state)&&this._transitionState(n,`TASK_STATE_WORKING`),n.history||=[],n.history.push(t),n.history.length>this._config.maxHistoryPerTask&&(n.history=n.history.slice(-this._config.maxHistoryPerTask)),this._touchTask(e),{task:n}}_createTask(e,t){let r=n(),i={id:r,contextId:e,status:{state:`TASK_STATE_SUBMITTED`,timestamp:(/* @__PURE__ */ new Date()).toISOString()},history:[t]};return this._addTask(i),this._contextActiveTask.set(e,r),this._emitStatusUpdate(i),{task:i}}_emit(e){for(let t of this._listeners)try{t(e)}catch(e){console.error(`PeerTaskManager: listener error`,e)}}_emitAGUI(e,t){this._emit({type:`aguiEvent`,taskId:e.id,contextId:e.contextId??``,payload:t})}_emitStatusUpdate(e){let t={taskId:e.id,contextId:e.contextId??``,status:e.status};this._emit({type:`statusUpdate`,taskId:e.id,contextId:e.contextId??``,payload:t})}_touchTask(e){let t=this._taskOrder.indexOf(e);t!==-1&&(this._taskOrder.splice(t,1),this._taskOrder.push(e))}_transitionState(e,t,n){let r=e.status.state,i=A.get(r);i&&!i.has(t)?console.warn(`PeerTaskManager: invalid transition ${r} → ${t} for task ${e.id}`):h.has(r)?console.warn(`PeerTaskManager: task ${e.id} is in terminal state ${r}, cannot transition`):(e.status={state:t,message:n,timestamp:(/* @__PURE__ */ new Date()).toISOString()},h.has(t)&&e.contextId&&this._contextActiveTask.get(e.contextId)===e.id&&this._contextActiveTask.delete(e.contextId),this._emitStatusUpdate(e))}};const M=new t.State(null);let N=null;function P(e){N!==null&&(clearTimeout(N),N=null),M.set(e)}function F(e=1500){N!==null&&clearTimeout(N),N=setTimeout(()=>{M.set(null),N=null},e)}const I=15360;var L=class a{static _RECONNECT_BASE_MS=1e3;static _RECONNECT_MAX_MS=6e4;connectedPeersSignal=new t.State([]);connections=/* @__PURE__ */ new Map;messageCallback=null;myPeerId=``;peerCards=new O;running=!1;serverConfig={};transferProgressSignal=M;trustedPeerIds=/* @__PURE__ */ new Set;type=`peerjs`;typingCallback=null;_inboundRemap=/* @__PURE__ */ new Map;_localCard=null;_onTaskCompleteCallback=null;peer=null;_inboundSavePromises=/* @__PURE__ */ new Map;_pendingInboundFile=null;_pendingRequests=/* @__PURE__ */ new Map;_reconnectAttempts=0;_reconnectTimer=null;_roomNotificationHandler=null;_taskManagers=/* @__PURE__ */ new Map;_inboundTransfers=/* @__PURE__ */ new Map;constructor(){typeof globalThis.addEventListener==`function`&&globalThis.addEventListener(`peerjs-dc-handle-chunk`,e=>{if(e?.detail?.chunkInfo){if(this._inboundTransfers.size>0)return;let{count:t,total:n}=e.detail.chunkInfo,r=t+1;P({count:r,total:n,direction:`receive`}),r>=n&&F(1500)}})}completeActiveTask(e){let t=e.replace(/^peer:/,``),n=this._taskManagers.get(t);if(!n)return!1;let r=n.getActiveTasks();if(r.length===0)return!1;let i=r[r.length-1];return n.markWorking(i.id),n.markCompleted(i.id),!0}configure(e,t,n={}){this.myPeerId=e.trim(),this.trustedPeerIds=new Set(t.map(e=>e.trim()).filter(Boolean)),this.serverConfig=n}connectPeer(e){this._getOrOpenConnection(e)}getTaskManager(e){let t=this._taskManagers.get(e);return t||(t=new j,this._taskManagers.set(e,t),t.on(t=>{this._forwardTaskEvent(e,t)})),t}isConfigured(){return this.myPeerId.length>0}isPeerConnected(e){let t=this.connections.get(e);return!!t&&!!t.open}onMessage(e){this.messageCallback=e}onTaskComplete(e){this._onTaskCompleteCallback=e}onTyping(e){this.typingCallback=e}sendRoomNotification(e,t){let n=this._getOrOpenConnection(e);if(!n)return!1;if(n.open)try{return n.send(t),!0}catch(t){return console.error(`PeerJsChannel: failed to send room notification to ${e}:`,t),!1}return this._waitForOpen(n).then(()=>{try{n.send(t)}catch(t){console.error(`PeerJsChannel: failed to flush room notification to ${e}:`,t)}}).catch(()=>{}),!0}setRoomNotificationHandler(e){this._roomNotificationHandler=e}async sendAttachmentsToRoom(t,r,a){let o=this.myPeerId,s=(a||[]).filter(e=>!!e.path);if(s.length!==0)try{let a=await e();for(let e of s){let s;try{s=await i(a,r,e.path)}catch(t){console.warn(`PeerJsChannel: failed to read file ${e.path} for room:`,t);continue}let c=e.path,l=e.mimeType||`application/octet-stream`,u=Math.max(1,Math.ceil(s.length/I));for(let i of t.members){if(i.peerId===o)continue;let t=this._getOrOpenConnection(i.peerId);if(t)try{await this._waitForOpen(t);let e=n();t.send({type:`__file_header`,id:e,name:c,mimeType:l,size:s.length,totalChunks:u,chunkSize:I,groupId:r});for(let n=0;n<u;n++){let r=n*I,i=Math.min(r+I,s.length),a=s.subarray(r,i),o=a.buffer.slice(a.byteOffset,a.byteOffset+a.byteLength);t.send({type:`__file_chunk`,id:e,name:c,index:n,totalChunks:u,data:o}),P({count:n+1,total:u,direction:`send`}),await this._waitForBufferDrain(t)}F(1500)}catch(t){console.warn(`PeerJsChannel: failed to stream file ${e.path} to room member ${i.peerId}:`,t)}}}}catch(e){console.error(`PeerJsChannel: failed to access DB for room file transfer`,e)}}setTyping(e,t){let n=e.replace(/^peer:/,``),r=this.connections.get(n);if(r)try{r.send({type:`typing`,typing:t})}catch{}}start(){this.isConfigured()&&!this.running&&(this.running=!0,this._localCard=w({peerId:this.myPeerId,name:this.myPeerId,description:`ShadowClaw AI assistant`,streaming:!0}),this._initPeer())}ensureConnected(e=!1){if(!this.running||!this.isConfigured())return;this._reconnectTimer!==null&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null),this._reconnectAttempts=0;let t=this.peer;if(!t||t.destroyed||e&&!t.open){if(t&&!t.destroyed)try{t.destroy()}catch{}this.peer=null,this._initPeer()}else if(t.disconnected)try{t.reconnect?.()}catch{this._initPeer()}}stop(){if(this.running=!1,this._reconnectTimer!==null&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null),this._reconnectAttempts=0,this.connections.forEach(e=>{try{e.close()}catch{}}),this.connections.clear(),this.peerCards.clear(),this._taskManagers.clear(),this._pendingRequests.forEach(({timer:e})=>clearTimeout(e)),this._pendingRequests.clear(),this._updateConnectedPeersSignal(),this.peer){try{this.peer.destroy()}catch{}this.peer=null}}async send(t,r,a){let o=t.replace(/^peer:/,``),s=this._getOrOpenConnection(o);if(!s)console.warn(`PeerJsChannel: no connection available for ${o}`);else try{await this._waitForOpen(s);let{attachments:o}=R(r),c=[...(a||[]).filter(e=>!!e.path),...o.map(e=>({path:e.path,mimeType:`application/octet-stream`}))],l=/* @__PURE__ */ new Map,u=[];try{let r=await e();for(let e of c)if(e.path)try{let a=await i(r,t,e.path),o=e.path;l.has(e.path)||l.set(e.path,o);let c=e.mimeType||`application/octet-stream`,d=n(),f=Math.max(1,Math.ceil(a.length/I));s.send({type:`__file_header`,id:d,name:o,mimeType:c,size:a.length,totalChunks:f,chunkSize:I,groupId:t});for(let e=0;e<f;e++){let t=e*I,n=Math.min(t+I,a.length),r=a.subarray(t,n),i=r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength);s.send({type:`__file_chunk`,id:d,name:o,index:e,totalChunks:f,data:i}),P({count:e+1,total:f,direction:`send`}),await this._waitForBufferDrain(s)}F(1500),u.push({kind:`file`,name:o,mimeType:c,size:a.length})}catch(t){console.warn(`PeerJsChannel: failed to process file ${e.path}:`,t)}}catch(e){console.error(`PeerJsChannel: failed to access DB`,e)}let d=r;for(let[e,t]of l){let n=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);d=d.replace(RegExp(`(!?\\[.*?\\])\\(${n}\\)`,`g`),`$1(${t})`)}let f=[...u,{kind:`text`,text:d}],p=n(),m={jsonrpc:`2.0`,id:p,method:_.SEND_MESSAGE,params:{message:{messageId:n(),role:`ROLE_AGENT`,parts:f}}};s.send(m),this._registerPendingRequest(p,e=>{})}catch(e){console.error(`PeerJsChannel: send failed for ${o}:`,e),window.dispatchEvent(new CustomEvent(`shadow-claw-peer-error`,{detail:{remotePeerId:o,error:e instanceof Error?e.message:String(e)}}))}}async sendA2UI(e,t){let r=e.replace(/^peer:/,``),i=this._getOrOpenConnection(r);if(!i)console.warn(`PeerJsChannel.sendA2UI: no connection available for ${r}`);else try{await this._waitForOpen(i);let e={jsonrpc:`2.0`,method:`message/send`,id:n(),params:{message:{role:`agent`,parts:[{kind:`a2ui`,envelope:t}]}}};i.send(e)}catch(e){console.error(`PeerJsChannel.sendA2UI: failed for ${r}:`,e)}}async sendA2UIAction(e,t){let r=e.replace(/^peer:/,``),i=this._getOrOpenConnection(r);if(!i)console.warn(`PeerJsChannel.sendA2UIAction: no connection available for ${r}`);else try{await this._waitForOpen(i);let e={jsonrpc:`2.0`,method:`message/send`,id:n(),params:{message:{role:`user`,parts:[{kind:`a2ui-action`,action:t}]}}};i.send(e)}catch(e){console.error(`PeerJsChannel.sendA2UIAction: failed for ${r}:`,e)}}_exchangeAgentCards(e,t){if(!this._localCard)return;let n=T();t.send(n),this._registerPendingRequest(n.id,t=>{let n=D(t);n&&(this.peerCards.set(e,n),console.log(`PeerJsChannel: received AgentCard from ${e}: "${n.name}"`))})}_forwardTaskEvent(e,t){let n=this.connections.get(e);if(!n)return;let r;switch(t.type){case`statusUpdate`:r=y.STATUS_UPDATE;break;case`artifactUpdate`:r=y.ARTIFACT_UPDATE;break;case`aguiEvent`:r=v.EVENT;break;default:return}let i={jsonrpc:`2.0`,method:r,params:t.payload};try{n.send(i)}catch(n){console.error(`PeerJsChannel: failed to forward ${t.type} to ${e}:`,n)}}_getOrOpenConnection(e){let t=this.connections.get(e);if(t)return t;if(!this.peer)return null;try{let t=this.peer.connect(e,{reliable:!0,serialization:`binary`});return t?(this._handleIncomingConnection(t),t):null}catch(t){return console.error(`PeerJsChannel: failed to connect to ${e}:`,t),null}}_handleA2ACancelTask(e,t){let n=t.params;if(!n?.taskId){this._sendJsonRpcError(e,t.id,{code:x.INVALID_PARAMS,message:`Missing taskId in CancelTask params`});return}let r=this._taskManagers.get(e);if(!r){this._sendJsonRpcError(e,t.id,{code:x.TASK_NOT_FOUND,message:`Task not found: ${n.taskId}`});return}if(!r.cancelTask(n.taskId)){this._sendJsonRpcError(e,t.id,{code:x.TASK_NOT_CANCELABLE,message:`Task not cancelable: ${n.taskId}`});return}let i=this.connections.get(e);if(i){let e=r.getTask(n.taskId),a={jsonrpc:`2.0`,id:t.id,result:{task:e}};i.send(a)}}_handleA2AGetTask(e,t){let n=t.params;if(!n?.taskId){this._sendJsonRpcError(e,t.id,{code:x.INVALID_PARAMS,message:`Missing taskId in GetTask params`});return}let r=this._taskManagers.get(e)?.getTask(n.taskId);if(!r){this._sendJsonRpcError(e,t.id,{code:x.TASK_NOT_FOUND,message:`Task not found: ${n.taskId}`});return}let i=this.connections.get(e);if(i){let e={jsonrpc:`2.0`,id:t.id,result:{task:r}};i.send(e)}}_handleA2AJsonRpc(e,t){if(C(t)){let e=String(t.id??``),n=this._pendingRequests.get(e);n&&(clearTimeout(n.timer),this._pendingRequests.delete(e),n.resolve(t));return}let n=t.method;if(n){if(n.startsWith(`room/`))this._roomNotificationHandler?.(e,n,t.params);else if(S(t)){let r={[_.GET_AGENT_CARD]:(e,t)=>this._handleGetAgentCard(e,t),[_.SEND_MESSAGE]:(e,t)=>this._handleA2ASendMessage(e,t),[_.CANCEL_TASK]:(e,t)=>this._handleA2ACancelTask(e,t),[_.GET_TASK]:(e,t)=>this._handleA2AGetTask(e,t)}[n];if(r){r(e,t);return}if(n===`message/send`){let n=t.params;n?.message?.parts&&Array.isArray(n.message.parts)&&this._processInboundA2AEnvelope(e,n.message.parts).catch(e=>console.error(`PeerJsChannel: failed to process inbound A2A envelope`,e))}else this._sendJsonRpcError(e,t.id,{code:x.METHOD_NOT_FOUND,message:`Method not found: ${n}`})}else({[v.EVENT]:(e,t)=>this._handleAGUIEventNotification(e,t),[y.STATUS_UPDATE]:(e,t)=>this._handleTaskStatusNotification(e,t),[y.ARTIFACT_UPDATE]:()=>{},"message/send":(e,t)=>{t?.message?.parts&&Array.isArray(t.message.parts)&&this._processInboundA2AEnvelope(e,t.message.parts).catch(e=>console.error(`PeerJsChannel: failed to process inbound A2A envelope`,e))}})[n]?.(e,t.params)}}_handleA2ASendMessage(e,t){let n=t.params;if(!n?.message){this._sendJsonRpcError(e,t.id,{code:x.INVALID_PARAMS,message:`Missing message in SendMessage params`});return}let r=this._taskManagers.get(e);r||(r=new j,this._taskManagers.set(e,r),r.on(t=>{this._forwardTaskEvent(e,t)}));let i=r.handleSendMessage(n),a=this.connections.get(e);if(a){let e={jsonrpc:`2.0`,id:t.id,result:i};a.send(e)}n.message.parts&&Array.isArray(n.message.parts)&&this._processInboundA2AEnvelope(e,n.message.parts,i.task?.id,i.task?.contextId).catch(e=>console.error(`PeerJsChannel: failed to process A2A SendMessage`,e))}_handleAGUIEventNotification(e,t){if(!t||typeof t!=`object`)return;let n=t;window.dispatchEvent(new CustomEvent(`shadow-claw-agui-event`,{detail:{remotePeerId:e,event:n}}))}_handleGetAgentCard(e,t){if(!this._localCard){this._sendJsonRpcError(e,t.id,{code:x.INTERNAL_ERROR,message:`Agent card not available`});return}let n=E(t.id,this._localCard),r=this.connections.get(e);r&&r.send(n)}_handleInboundData(e,t){if(t instanceof ArrayBuffer||t instanceof Uint8Array){if(this._pendingInboundFile){let n=this._pendingInboundFile.name,r=new Uint8Array(t),i=this._pendingInboundFile.targetGroupId||`peer:${e}`,a=this._saveInboundFile(i,n,r);this._inboundSavePromises.set(n,a),this._pendingInboundFile=null}return}if(!t||typeof t!=`object`)return;let r=t;if(r.type===`__file_header`){let t=r.id||r.name,n=r.totalChunks||1,i=this._inboundTransfers.get(t),a=typeof r.groupId==`string`&&r.groupId.startsWith(`room:`)?r.groupId:`peer:${e}`;this._inboundTransfers.set(t,{transferId:t,name:r.name,mimeType:r.mimeType||`application/octet-stream`,size:r.size||0,totalChunks:n,receivedChunks:i?.receivedChunks||/* @__PURE__ */ new Map,receivedBytes:i?.receivedBytes||0,targetGroupId:a}),this._pendingInboundFile={name:r.name,mimeType:r.mimeType,size:r.size,targetGroupId:a},P({count:0,total:n,direction:`receive`})}else if(r.type===`__file_chunk`){let t=r.id||r.name,n=this._inboundTransfers.get(t);if(!n){let e=r.totalChunks||1;n={transferId:t,name:r.name,mimeType:`application/octet-stream`,size:0,totalChunks:e,receivedChunks:/* @__PURE__ */ new Map,receivedBytes:0},this._inboundTransfers.set(t,n)}let i=typeof r.index==`number`?r.index:0,a=r.data instanceof ArrayBuffer?new Uint8Array(r.data):r.data instanceof Uint8Array?r.data:new Uint8Array(r.data||[]);if(n.receivedChunks.has(i)||(n.receivedChunks.set(i,a),n.receivedBytes+=a.byteLength),P({count:n.receivedChunks.size,total:n.totalChunks,direction:`receive`}),n.receivedChunks.size>=n.totalChunks){let r=new Uint8Array(n.size||n.receivedBytes),i=0;for(let e=0;e<n.totalChunks;e++){let t=n.receivedChunks.get(e);t&&(r.set(t,i),i+=t.byteLength)}let a=n.targetGroupId||`peer:${e}`,o=this._saveInboundFile(a,n.name,r);this._inboundSavePromises.set(n.name,o),this._inboundTransfers.delete(t),this._pendingInboundFile=null,F(1500)}}else if(r.type===`typing`)this.typingCallback?.(`peer:${e}`,!!r.typing);else if(r.type===`chat`){let t=typeof r.text==`string`?r.text.trim():``;t&&this.messageCallback?.({id:n(),groupId:`peer:${e}`,sender:e,content:t,timestamp:Date.now(),channel:`peerjs`})}else if(r.jsonrpc===`2.0`)this._handleA2AJsonRpc(e,r);else if(r.type===`command:execute`){let t=r.payload||{},i=t.action||``,a=t.args||{},o=t.commandId||``;import(`./init-control-plane-Cb31yLTY.js`).then(({executeClientControlCommand:e})=>e(i,a)).then(t=>{let r=this.connections.get(e);if(r){let e=!!t?.error;r.send({id:n(),type:`command:result`,payload:{commandId:o,action:i,success:!e,data:t,...e?{error:t.error}:{}}})}}).catch(t=>{let r=this.connections.get(e);r&&r.send({id:n(),type:`command:result`,payload:{commandId:o,action:i,success:!1,error:t?.message||String(t)}})})}}_isTrustedPeer(e){if(this.trustedPeerIds.size===0||this.trustedPeerIds.has(e))return!0;for(let t of this.trustedPeerIds){let n=t.trim();if(n.endsWith(`*`)&&e.startsWith(n.slice(0,-1))||n===`cli`&&e.startsWith(`cli-`))return!0}return!1}_handleIncomingConnection(e){let t=e.peer;if(this._isTrustedPeer(t))this._attachChunkProgressTracker(e),this.connections.set(t,e),this._updateConnectedPeersSignal(),e.on(`open`,()=>{console.log(`PeerJsChannel: connection opened with ${t}`),this._exchangeAgentCards(t,e)}),e.on(`data`,e=>{this._handleInboundData(t,e)}),e.on(`close`,()=>{console.log(`PeerJsChannel: connection closed with ${t}`),this.connections.delete(t),this.peerCards.delete(t),this._taskManagers.delete(t),this._updateConnectedPeersSignal()}),e.on(`error`,e=>{console.error(`PeerJsChannel: connection error with ${t}:`,e),this.connections.delete(t),this._updateConnectedPeersSignal(),window.dispatchEvent(new CustomEvent(`shadow-claw-peer-error`,{detail:{remotePeerId:t,error:e.message}}))}),e.on(`iceStateChanged`,e=>{(e===`failed`||e===`disconnected`||e===`closed`)&&(console.warn(`PeerJsChannel: ICE state changed to ${e} for ${t}`),this.connections.delete(t),this._updateConnectedPeersSignal())});else{console.warn(`PeerJsChannel: rejecting connection from untrusted peer: ${t}`);try{e.close()}catch{}}}_attachChunkProgressTracker(e){let t=e;if(t._chunkProgressPatched)return;t._chunkProgressPatched=!0;let n=this,r=t._handleChunk;typeof r==`function`&&(t._handleChunk=function(e){if(e&&typeof e==`object`&&`__peerData`in e&&n._inboundTransfers.size===0){let t=e.__peerData,n=this._chunkedData?.[t]?.count??0,r=e.total;if(typeof globalThis.dispatchEvent==`function`&&typeof CustomEvent==`function`)globalThis.dispatchEvent(new CustomEvent(`peerjs-dc-handle-chunk`,{detail:{chunkInfo:{count:n,total:r}}}));else{let e=n+1;P({count:e,total:r,direction:`receive`}),e>=r&&F(1500)}}return r.call(this,e)})}_handleTaskStatusNotification(e,t){if(!t||typeof t!=`object`)return;let n=t;if(n.status?.state&&h.has(n.status.state)){let t=`peer:${e}`;this._onTaskCompleteCallback?.(t)}window.dispatchEvent(new CustomEvent(`shadow-claw-task-status`,{detail:{remotePeerId:e,...n}}))}async _initPeer(){let{Peer:e}=await import(`./bundler-UnYfEehP.js`),t={},n=this.serverConfig.host??`0.peerjs.com`,r=this.serverConfig.port??443,i=this.serverConfig.path??`/`,a=this.serverConfig.secure??!0;t.host=n,t.port=r,t.path=i,t.secure=a,t.debug=3,t.config={iceServers:this.serverConfig.iceServers??[{urls:`stun:stun.l.google.com:19302`},{urls:`stun:stun1.l.google.com:19302`}]},this.peer=new e(this.myPeerId,t),this.peer.on(`open`,e=>{console.log(`PeerJsChannel: connected to signaling server, peer ID: ${e}`),this._reconnectAttempts=0}),this.peer.on(`connection`,e=>{this._handleIncomingConnection(e)}),this.peer.on(`error`,e=>{console.error(`PeerJsChannel: peer error [${e.type}]:`,e.message),(e.type===`peer-unavailable`||e.type===`unavailable-id`)&&window.dispatchEvent(new CustomEvent(`shadow-claw-peer-error`,{detail:{error:e.message}})),e.type!==`peer-unavailable`&&e.type!==`network`&&e.type!==`disconnected`&&e.type===`unavailable-id`&&console.warn(`PeerJsChannel: peer ID is already in use. Stop the channel and reconfigure.`)}),this.peer.on(`disconnected`,()=>{this.running&&this._scheduleReconnect()}),this.peer.on(`close`,()=>{console.log(`PeerJsChannel: peer closed`)})}_registerPendingRequest(e,t){let n=String(e??``),r=setTimeout(()=>{this._pendingRequests.delete(n),console.warn(`PeerJsChannel: JSON-RPC request ${n} timed out (10s)`)},1e4);this._pendingRequests.set(n,{resolve:t,timer:r})}_scheduleReconnect(){if(this._reconnectTimer!==null)return;let e=Math.min(a._RECONNECT_BASE_MS*2**this._reconnectAttempts,a._RECONNECT_MAX_MS);this._reconnectAttempts++,console.log(`PeerJsChannel: disconnected from signaling server, reconnecting in ${(e/1e3).toFixed(1)}s (attempt ${this._reconnectAttempts})`),this._reconnectTimer=setTimeout(()=>{if(this._reconnectTimer=null,this.running)try{this.peer?.reconnect?.()}catch{this._scheduleReconnect()}},e)}_sendJsonRpcError(e,t,n){let r=this.connections.get(e);if(!r)return;let i={jsonrpc:`2.0`,id:t,error:n};try{r.send(i)}catch{}}async _waitForBufferDrain(e,t=65536){let n=e.dataChannel||e._dc;n&&typeof n.bufferedAmount==`number`&&(n.bufferedAmount<=t||await new Promise(e=>{let r=setInterval(()=>{(!n||n.bufferedAmount<=t)&&(clearInterval(r),e())},20);if(typeof n.addEventListener==`function`){let i=()=>{clearInterval(r),n.removeEventListener(`bufferedamountlow`,i),e()};try{n.bufferedAmountLowThreshold=t,n.addEventListener(`bufferedamountlow`,i,{once:!0})}catch{}}}))}async _saveInboundFile(t,n,i){try{let a=await e(),o=n,s=1;for(;await r(a,t,o);){let e=n.lastIndexOf(`.`);if(e>0&&e<n.length-1){let t=n.substring(0,e),r=n.substring(e);o=`${t} (${s})${r}`}else o=`${n} (${s})`;s++}o!==n&&this._inboundRemap.set(n,o),await c(a,t,o,i);try{let{orchestratorStore:e}=await import(`./orchestrator-DBO4NZqd.js`).then(e=>e.n);e.activeGroupId===t&&await e.loadFiles(a)}catch{}}catch(e){console.error(`PeerJsChannel: failed to write inbound file bytes`,e)}}_updateConnectedPeersSignal(){this.connectedPeersSignal.set(Array.from(this.connections.keys()))}_waitForOpen(e){return e.open?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>{n(/* @__PURE__ */ Error(`Connection open timeout (5s)`))},5e3);e.on(`open`,()=>{clearTimeout(r),t()}),e.on(`error`,e=>{clearTimeout(r),n(e)})})}async _processInboundA2AEnvelope(e,t,r,i){let a=`peer:${e}`,o=``,s=[],c=[],l;for(let e of t)if(e.kind===`text`&&typeof e.text==`string`)o+=e.text;else if(e.kind===`file`){let t=e.name||`attachment`,n=this._inboundSavePromises.get(t);if(n)try{await n}catch{}finally{this._inboundSavePromises.delete(t)}if(this._inboundRemap.has(t)){let e=this._inboundRemap.get(t),n=t.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);o=o.replace(RegExp(`(!?\\[.*?\\])\\(${n}\\)`,`g`),`$1(${e})`),this._inboundRemap.delete(t),t=e}let r=t.split(`/`).pop()||`attachment`;s.push({fileName:r,mimeType:e.mimeType,path:t,size:e.size||0})}else e.kind===`a2ui`&&e.envelope?c.push(e.envelope):e.kind===`a2ui-action`&&e.action&&(l=e.action);o=o.trim(),(o||s.length!==0||c.length!==0||l)&&this.messageCallback?.({id:n(),groupId:a,sender:e,content:o,timestamp:Date.now(),channel:`peerjs`,attachments:s.length>0?s:void 0,a2uiEnvelopes:c.length>0?c:void 0,a2uiAction:l,taskId:r,contextId:i})}};function R(e){let t=[],n=/!?\[([^\]]*)\]\(([^)]+)\)/g,r,i=e;for(;(r=n.exec(e))!==null;){let e=r[1],n=z((r[2]||``).trim());n&&t.push({alt:e,path:n})}return{remainingText:i,attachments:t}}function z(e){if(!e)return null;let t=e.trim();if(/^[a-zA-Z][a-zA-Z\d+.-]*:/.test(t)||t.startsWith(`//`))return null;let n=t.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^\.\//,``);if(!n)return null;let r=n.split(`/`).filter(Boolean);return r.some(e=>e===`..`)?null:r.join(`/`)}export{u as a,f as i,M as n,b as r,L as t};
|
|
1
|
+
import"./config-C16fFWtP.js";import{n as e}from"./db-BUuJo1Gf.js";import{t}from"./dist-CeFyqf9k.js";import{t as n}from"./ulid-BSJxYh6W.js";import{o as r}from"./tools-D-52Zmfc.js";import{a as i}from"./transformers-CQ9ss9rD.js";import{i as a}from"./mime-ClqNyXPc.js";import{t as o}from"./upload-group-file-A8kB7lvO.js";import{n as s}from"./filename-kBumOBho.js";import{t as c}from"./write-group-file-bytes-A8kB7lvO.js";function l(e){return s(e,{replacement:`-`,fallback:`attachment`,stripLeadingDots:!0,collapseReplacement:!0,stripControlChars:!0})}function u(e){return e.previewDisposition===`inline`||a(e.fileName,e.mimeType||``)===`image/png`}function d(e,t=``,n=Date.now()){let r=l(e),i=t.trim().replace(/[^a-zA-Z0-9._-]+/g,`-`).replace(/^-+|-+$/g,``);return`attachments/${n}-${i?`${i}-`:``}${r}`}async function f(e,t,n=[]){let r=[];for(let i of n){let n=l(i.fileName||``),s=i.path||d(n,i.id),c=i.source,u=a(n,i.mimeType||``),f=i.size;if(c){let r=await p(c);u=a(n,i.mimeType||r.type),f=typeof f==`number`?f:r.size,await o(e,t,s,r)}r.push(m({...i,fileName:n,mimeType:u,size:f,path:s,previewDisposition:i.previewDisposition||(u===`image/png`?`inline`:`file`)}))}return r}async function p(e){if(e.kind===`local-file`)return e.file;if(e.kind===`inline-text`)return new Blob([e.text],{type:e.mimeType||`text/plain`});let t=await fetch(e.url,{headers:e.headers});if(!t.ok)throw Error(`Attachment download failed: HTTP ${t.status} ${t.statusText}`);return await t.blob()}function m(e){let{source:t,...n}=e;return n}const h=/* @__PURE__ */ new Set([`TASK_STATE_COMPLETED`,`TASK_STATE_FAILED`,`TASK_STATE_CANCELED`,`TASK_STATE_REJECTED`]),g=/* @__PURE__ */ new Set([`TASK_STATE_INPUT_REQUIRED`,`TASK_STATE_AUTH_REQUIRED`]),_={SEND_MESSAGE:`SendMessage`,SEND_STREAMING_MESSAGE:`SendStreamingMessage`,GET_TASK:`GetTask`,CANCEL_TASK:`CancelTask`,GET_AGENT_CARD:`GetAgentCard`},v={EVENT:`agui/event`},y={STATUS_UPDATE:`tasks/statusUpdate`,ARTIFACT_UPDATE:`tasks/artifactUpdate`},b={JOIN:`room/join`,ROSTER:`room/roster`,LEAVE:`room/leave`,MESSAGE:`room/message`,INVITE:`room/invite`,RELAY:`room/relay`,A2UI:`room/a2ui`,A2UI_ACTION:`room/a2ui-action`},x={TASK_NOT_FOUND:-32001,TASK_NOT_CANCELABLE:-32002,PUSH_NOTIFICATION_NOT_SUPPORTED:-32003,UNSUPPORTED_OPERATION:-32004,CONTENT_TYPE_NOT_SUPPORTED:-32005,INVALID_AGENT_RESPONSE:-32006,PARSE_ERROR:-32700,INVALID_REQUEST:-32600,METHOD_NOT_FOUND:-32601,INVALID_PARAMS:-32602,INTERNAL_ERROR:-32603};function S(e){return typeof e==`object`&&!!e&&e.jsonrpc===`2.0`&&(e.id===null||typeof e.id==`string`||typeof e.id==`number`)&&typeof e.method==`string`}function C(e){return typeof e==`object`&&!!e&&e.jsonrpc===`2.0`&&(e.id===null||typeof e.id==`string`||typeof e.id==`number`)&&!(`method`in e)}function w(e){let t={url:`webrtc://${e.peerId}`,protocolBinding:`https://xt-ml.github.io/shadow-claw/bindings/webrtc-datachannel/v1`,protocolVersion:`1.0`},n={streaming:e.streaming??!0,pushNotifications:!1};return{name:e.name,description:e.description??`AI assistant agent (${e.name})`,version:e.version??`1.0.0`,supportedInterfaces:[t],capabilities:n,defaultInputModes:[`text/plain`,`application/json`],defaultOutputModes:[`text/plain`,`application/json`],skills:e.skills??[],iconUrl:e.iconUrl}}function T(){return{jsonrpc:`2.0`,id:n(),method:_.GET_AGENT_CARD}}function E(e,t){return{jsonrpc:`2.0`,id:e,result:t}}function D(e){if(e.error)return console.warn(`GetAgentCard returned error:`,e.error),null;let t=e.result;return!t||typeof t!=`object`||typeof t.name!=`string`||typeof t.version!=`string`?null:t}var O=class{_cards=/* @__PURE__ */ new Map;clear(){this._cards.clear()}delete(e){this._cards.delete(e)}entries(){return this._cards.entries()}get(e){return this._cards.get(e)}getDisplayName(e){return this._cards.get(e)?.name??e}has(e){return this._cards.has(e)}set(e,t){this._cards.set(e,t)}supportsStreaming(e){return this._cards.get(e)?.capabilities?.streaming??!1}};const k={maxTasks:100,maxHistoryPerTask:50},A=/* @__PURE__ */ new Map([[`TASK_STATE_SUBMITTED`,/* @__PURE__ */ new Set([`TASK_STATE_WORKING`,`TASK_STATE_REJECTED`,`TASK_STATE_CANCELED`,`TASK_STATE_FAILED`])],[`TASK_STATE_WORKING`,/* @__PURE__ */ new Set([`TASK_STATE_COMPLETED`,`TASK_STATE_FAILED`,`TASK_STATE_CANCELED`,`TASK_STATE_INPUT_REQUIRED`,`TASK_STATE_AUTH_REQUIRED`])],[`TASK_STATE_INPUT_REQUIRED`,/* @__PURE__ */ new Set([`TASK_STATE_WORKING`,`TASK_STATE_CANCELED`,`TASK_STATE_FAILED`])],[`TASK_STATE_AUTH_REQUIRED`,/* @__PURE__ */ new Set([`TASK_STATE_WORKING`,`TASK_STATE_CANCELED`,`TASK_STATE_FAILED`])]]);var j=class{_config;_contextActiveTask=/* @__PURE__ */ new Map;_listeners=/* @__PURE__ */ new Set;_taskOrder=[];_tasks=/* @__PURE__ */ new Map;constructor(e){this._config={...k,...e}}addArtifact(e,t,n=!1){let r=this._tasks.get(e);if(!r)return;if(r.artifacts||=[],n){let e=r.artifacts.find(e=>e.artifactId===t.artifactId);e?e.parts.push(...t.parts):r.artifacts.push(t)}else r.artifacts.push(t);let i={taskId:r.id,contextId:r.contextId??``,artifact:t,append:n,lastChunk:!1};this._emit({type:`artifactUpdate`,taskId:r.id,contextId:r.contextId??``,payload:i})}cancelTask(e){let t=this._tasks.get(e);return!t||h.has(t.status.state)?!1:(this._transitionState(t,`TASK_STATE_CANCELED`,{messageId:n(),role:`ROLE_AGENT`,parts:[{text:`Task canceled by peer request.`}]}),!0)}clear(){this._tasks.clear(),this._taskOrder=[],this._contextActiveTask.clear()}emitRunError(e,t,n){let r=this._tasks.get(e);if(!r)return;let i={type:`RUN_ERROR`,message:t,code:n,timestamp:Date.now()};this._emitAGUI(r,i)}emitRunFinished(e){let t=this._tasks.get(e);if(!t)return;let n={type:`RUN_FINISHED`,threadId:t.contextId??t.id,runId:t.id,timestamp:Date.now()};this._emitAGUI(t,n)}emitRunStarted(e){let t=this._tasks.get(e);if(!t)return;let n={type:`RUN_STARTED`,threadId:t.contextId??t.id,runId:t.id,timestamp:Date.now()};this._emitAGUI(t,n)}emitStateSnapshot(e,t){let n=this._tasks.get(e);if(!n)return;let r={type:`STATE_SNAPSHOT`,snapshot:t,timestamp:Date.now()};this._emitAGUI(n,r)}emitTextMessageContent(e,t,n){let r=this._tasks.get(e);if(!r)return;let i={type:`TEXT_MESSAGE_CONTENT`,messageId:t,delta:n,timestamp:Date.now()};this._emitAGUI(r,i)}emitTextMessageEnd(e,t){let n=this._tasks.get(e);if(!n)return;let r={type:`TEXT_MESSAGE_END`,messageId:t,timestamp:Date.now()};this._emitAGUI(n,r)}emitTextMessageStart(e,t,n=`assistant`){let r=this._tasks.get(e);if(!r)return;let i={type:`TEXT_MESSAGE_START`,messageId:t,role:n,timestamp:Date.now()};this._emitAGUI(r,i)}emitToolCallEnd(e,t){let n=this._tasks.get(e);if(!n)return;let r={type:`TOOL_CALL_END`,toolCallId:t,timestamp:Date.now()};this._emitAGUI(n,r)}emitToolCallStart(e,t,n,r){let i=this._tasks.get(e);if(!i)return;let a={type:`TOOL_CALL_START`,toolCallId:t,toolCallName:n,parentMessageId:r,timestamp:Date.now()};this._emitAGUI(i,a)}getActiveTaskForContext(e){let t=this._contextActiveTask.get(e);if(t)return this._tasks.get(t)}getActiveTasks(){return Array.from(this._tasks.values()).filter(e=>!h.has(e.status.state))}getAllTasks(){return Array.from(this._tasks.values())}getTask(e){return this._tasks.get(e)}handleSendMessage(e){let t=e.message,r=t.contextId??n(),i=t.taskId??this._contextActiveTask.get(r);return i&&this._tasks.has(i)?this._continueTask(i,t):this._createTask(r,t)}markCompleted(e,t){let n=this._tasks.get(e);n&&this._transitionState(n,`TASK_STATE_COMPLETED`,t)}markFailed(e,t){let r=this._tasks.get(e);r&&this._transitionState(r,`TASK_STATE_FAILED`,{messageId:n(),role:`ROLE_AGENT`,parts:[{text:t}]})}markInputRequired(e,t){let n=this._tasks.get(e);n&&this._transitionState(n,`TASK_STATE_INPUT_REQUIRED`,t)}markWorking(e){let t=this._tasks.get(e);t&&this._transitionState(t,`TASK_STATE_WORKING`)}off(e){this._listeners.delete(e)}on(e){this._listeners.add(e)}_addTask(e){for(this._tasks.set(e.id,e),this._taskOrder.push(e.id);this._taskOrder.length>this._config.maxTasks;){let e=this._taskOrder.shift(),t=this._tasks.get(e);if(t&&h.has(t.status.state))this._tasks.delete(e),t.contextId&&this._contextActiveTask.delete(t.contextId);else{this._taskOrder.unshift(e);break}}}_continueTask(e,t){let n=this._tasks.get(e);return g.has(n.status.state)&&this._transitionState(n,`TASK_STATE_WORKING`),n.history||=[],n.history.push(t),n.history.length>this._config.maxHistoryPerTask&&(n.history=n.history.slice(-this._config.maxHistoryPerTask)),this._touchTask(e),{task:n}}_createTask(e,t){let r=n(),i={id:r,contextId:e,status:{state:`TASK_STATE_SUBMITTED`,timestamp:(/* @__PURE__ */ new Date()).toISOString()},history:[t]};return this._addTask(i),this._contextActiveTask.set(e,r),this._emitStatusUpdate(i),{task:i}}_emit(e){for(let t of this._listeners)try{t(e)}catch(e){console.error(`PeerTaskManager: listener error`,e)}}_emitAGUI(e,t){this._emit({type:`aguiEvent`,taskId:e.id,contextId:e.contextId??``,payload:t})}_emitStatusUpdate(e){let t={taskId:e.id,contextId:e.contextId??``,status:e.status};this._emit({type:`statusUpdate`,taskId:e.id,contextId:e.contextId??``,payload:t})}_touchTask(e){let t=this._taskOrder.indexOf(e);t!==-1&&(this._taskOrder.splice(t,1),this._taskOrder.push(e))}_transitionState(e,t,n){let r=e.status.state,i=A.get(r);i&&!i.has(t)?console.warn(`PeerTaskManager: invalid transition ${r} → ${t} for task ${e.id}`):h.has(r)?console.warn(`PeerTaskManager: task ${e.id} is in terminal state ${r}, cannot transition`):(e.status={state:t,message:n,timestamp:(/* @__PURE__ */ new Date()).toISOString()},h.has(t)&&e.contextId&&this._contextActiveTask.get(e.contextId)===e.id&&this._contextActiveTask.delete(e.contextId),this._emitStatusUpdate(e))}};const M=new t.State(null);let N=null;function P(e){N!==null&&(clearTimeout(N),N=null),M.set(e)}function F(e=1500){N!==null&&clearTimeout(N),N=setTimeout(()=>{M.set(null),N=null},e)}const I=15360;var L=class a{static _RECONNECT_BASE_MS=1e3;static _RECONNECT_MAX_MS=6e4;connectedPeersSignal=new t.State([]);connections=/* @__PURE__ */ new Map;messageCallback=null;myPeerId=``;peerCards=new O;running=!1;serverConfig={};transferProgressSignal=M;trustedPeerIds=/* @__PURE__ */ new Set;type=`peerjs`;typingCallback=null;_inboundRemap=/* @__PURE__ */ new Map;_localCard=null;_onTaskCompleteCallback=null;peer=null;_inboundSavePromises=/* @__PURE__ */ new Map;_pendingInboundFile=null;_pendingRequests=/* @__PURE__ */ new Map;_reconnectAttempts=0;_reconnectTimer=null;_roomNotificationHandler=null;_taskManagers=/* @__PURE__ */ new Map;_inboundTransfers=/* @__PURE__ */ new Map;constructor(){typeof globalThis.addEventListener==`function`&&globalThis.addEventListener(`peerjs-dc-handle-chunk`,e=>{if(e?.detail?.chunkInfo){if(this._inboundTransfers.size>0)return;let{count:t,total:n}=e.detail.chunkInfo,r=t+1;P({count:r,total:n,direction:`receive`}),r>=n&&F(1500)}})}completeActiveTask(e){let t=e.replace(/^peer:/,``),n=this._taskManagers.get(t);if(!n)return!1;let r=n.getActiveTasks();if(r.length===0)return!1;let i=r[r.length-1];return n.markWorking(i.id),n.markCompleted(i.id),!0}configure(e,t,n={}){this.myPeerId=e.trim(),this.trustedPeerIds=new Set(t.map(e=>e.trim()).filter(Boolean)),this.serverConfig=n}connectPeer(e){this._getOrOpenConnection(e)}getTaskManager(e){let t=this._taskManagers.get(e);return t||(t=new j,this._taskManagers.set(e,t),t.on(t=>{this._forwardTaskEvent(e,t)})),t}isConfigured(){return this.myPeerId.length>0}isPeerConnected(e){let t=this.connections.get(e);return!!t&&!!t.open}onMessage(e){this.messageCallback=e}onTaskComplete(e){this._onTaskCompleteCallback=e}onTyping(e){this.typingCallback=e}sendRoomNotification(e,t){let n=this._getOrOpenConnection(e);if(!n)return!1;if(n.open)try{return n.send(t),!0}catch(t){return console.error(`PeerJsChannel: failed to send room notification to ${e}:`,t),!1}return this._waitForOpen(n).then(()=>{try{n.send(t)}catch(t){console.error(`PeerJsChannel: failed to flush room notification to ${e}:`,t)}}).catch(()=>{}),!0}setRoomNotificationHandler(e){this._roomNotificationHandler=e}async sendAttachmentsToRoom(t,r,a){let o=this.myPeerId,s=(a||[]).filter(e=>!!e.path);if(s.length!==0)try{let a=await e();for(let e of s){let s;try{s=await i(a,r,e.path)}catch(t){console.warn(`PeerJsChannel: failed to read file ${e.path} for room:`,t);continue}let c=e.path,l=e.mimeType||`application/octet-stream`,u=Math.max(1,Math.ceil(s.length/I));for(let i of t.members){if(i.peerId===o)continue;let t=this._getOrOpenConnection(i.peerId);if(t)try{await this._waitForOpen(t);let e=n();t.send({type:`__file_header`,id:e,name:c,mimeType:l,size:s.length,totalChunks:u,chunkSize:I,groupId:r});for(let n=0;n<u;n++){let r=n*I,i=Math.min(r+I,s.length),a=s.subarray(r,i),o=a.buffer.slice(a.byteOffset,a.byteOffset+a.byteLength);t.send({type:`__file_chunk`,id:e,name:c,index:n,totalChunks:u,data:o}),P({count:n+1,total:u,direction:`send`}),await this._waitForBufferDrain(t)}F(1500)}catch(t){console.warn(`PeerJsChannel: failed to stream file ${e.path} to room member ${i.peerId}:`,t)}}}}catch(e){console.error(`PeerJsChannel: failed to access DB for room file transfer`,e)}}setTyping(e,t){let n=e.replace(/^peer:/,``),r=this.connections.get(n);if(r)try{r.send({type:`typing`,typing:t})}catch{}}start(){this.isConfigured()&&!this.running&&(this.running=!0,this._localCard=w({peerId:this.myPeerId,name:this.myPeerId,description:`ShadowClaw AI assistant`,streaming:!0}),this._initPeer())}ensureConnected(e=!1){if(!this.running||!this.isConfigured())return;this._reconnectTimer!==null&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null),this._reconnectAttempts=0;let t=this.peer;if(!t||t.destroyed||e&&!t.open){if(t&&!t.destroyed)try{t.destroy()}catch{}this.peer=null,this._initPeer()}else if(t.disconnected)try{t.reconnect?.()}catch{this._initPeer()}}stop(){if(this.running=!1,this._reconnectTimer!==null&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null),this._reconnectAttempts=0,this.connections.forEach(e=>{try{e.close()}catch{}}),this.connections.clear(),this.peerCards.clear(),this._taskManagers.clear(),this._pendingRequests.forEach(({timer:e})=>clearTimeout(e)),this._pendingRequests.clear(),this._updateConnectedPeersSignal(),this.peer){try{this.peer.destroy()}catch{}this.peer=null}}async send(t,r,a){let o=t.replace(/^peer:/,``),s=this._getOrOpenConnection(o);if(!s)console.warn(`PeerJsChannel: no connection available for ${o}`);else try{await this._waitForOpen(s);let{attachments:o}=R(r),c=[...(a||[]).filter(e=>!!e.path),...o.map(e=>({path:e.path,mimeType:`application/octet-stream`}))],l=/* @__PURE__ */ new Map,u=[];try{let r=await e();for(let e of c)if(e.path)try{let a=await i(r,t,e.path),o=e.path;l.has(e.path)||l.set(e.path,o);let c=e.mimeType||`application/octet-stream`,d=n(),f=Math.max(1,Math.ceil(a.length/I));s.send({type:`__file_header`,id:d,name:o,mimeType:c,size:a.length,totalChunks:f,chunkSize:I,groupId:t});for(let e=0;e<f;e++){let t=e*I,n=Math.min(t+I,a.length),r=a.subarray(t,n),i=r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength);s.send({type:`__file_chunk`,id:d,name:o,index:e,totalChunks:f,data:i}),P({count:e+1,total:f,direction:`send`}),await this._waitForBufferDrain(s)}F(1500),u.push({kind:`file`,name:o,mimeType:c,size:a.length})}catch(t){console.warn(`PeerJsChannel: failed to process file ${e.path}:`,t)}}catch(e){console.error(`PeerJsChannel: failed to access DB`,e)}let d=r;for(let[e,t]of l){let n=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);d=d.replace(RegExp(`(!?\\[.*?\\])\\(${n}\\)`,`g`),`$1(${t})`)}let f=[...u,{kind:`text`,text:d}],p=n(),m={jsonrpc:`2.0`,id:p,method:_.SEND_MESSAGE,params:{message:{messageId:n(),role:`ROLE_AGENT`,parts:f}}};s.send(m),this._registerPendingRequest(p,e=>{})}catch(e){console.error(`PeerJsChannel: send failed for ${o}:`,e),window.dispatchEvent(new CustomEvent(`shadow-claw-peer-error`,{detail:{remotePeerId:o,error:e instanceof Error?e.message:String(e)}}))}}async sendA2UI(e,t){let r=e.replace(/^peer:/,``),i=this._getOrOpenConnection(r);if(!i)console.warn(`PeerJsChannel.sendA2UI: no connection available for ${r}`);else try{await this._waitForOpen(i);let e={jsonrpc:`2.0`,method:`message/send`,id:n(),params:{message:{role:`agent`,parts:[{kind:`a2ui`,envelope:t}]}}};i.send(e)}catch(e){console.error(`PeerJsChannel.sendA2UI: failed for ${r}:`,e)}}async sendA2UIAction(e,t){let r=e.replace(/^peer:/,``),i=this._getOrOpenConnection(r);if(!i)console.warn(`PeerJsChannel.sendA2UIAction: no connection available for ${r}`);else try{await this._waitForOpen(i);let e={jsonrpc:`2.0`,method:`message/send`,id:n(),params:{message:{role:`user`,parts:[{kind:`a2ui-action`,action:t}]}}};i.send(e)}catch(e){console.error(`PeerJsChannel.sendA2UIAction: failed for ${r}:`,e)}}_exchangeAgentCards(e,t){if(!this._localCard)return;let n=T();t.send(n),this._registerPendingRequest(n.id,t=>{let n=D(t);n&&(this.peerCards.set(e,n),console.log(`PeerJsChannel: received AgentCard from ${e}: "${n.name}"`))})}_forwardTaskEvent(e,t){let n=this.connections.get(e);if(!n)return;let r;switch(t.type){case`statusUpdate`:r=y.STATUS_UPDATE;break;case`artifactUpdate`:r=y.ARTIFACT_UPDATE;break;case`aguiEvent`:r=v.EVENT;break;default:return}let i={jsonrpc:`2.0`,method:r,params:t.payload};try{n.send(i)}catch(n){console.error(`PeerJsChannel: failed to forward ${t.type} to ${e}:`,n)}}_getOrOpenConnection(e){let t=this.connections.get(e);if(t)return t;if(!this.peer)return null;try{let t=this.peer.connect(e,{reliable:!0,serialization:`binary`});return t?(this._handleIncomingConnection(t),t):null}catch(t){return console.error(`PeerJsChannel: failed to connect to ${e}:`,t),null}}_handleA2ACancelTask(e,t){let n=t.params;if(!n?.taskId){this._sendJsonRpcError(e,t.id,{code:x.INVALID_PARAMS,message:`Missing taskId in CancelTask params`});return}let r=this._taskManagers.get(e);if(!r){this._sendJsonRpcError(e,t.id,{code:x.TASK_NOT_FOUND,message:`Task not found: ${n.taskId}`});return}if(!r.cancelTask(n.taskId)){this._sendJsonRpcError(e,t.id,{code:x.TASK_NOT_CANCELABLE,message:`Task not cancelable: ${n.taskId}`});return}let i=this.connections.get(e);if(i){let e=r.getTask(n.taskId),a={jsonrpc:`2.0`,id:t.id,result:{task:e}};i.send(a)}}_handleA2AGetTask(e,t){let n=t.params;if(!n?.taskId){this._sendJsonRpcError(e,t.id,{code:x.INVALID_PARAMS,message:`Missing taskId in GetTask params`});return}let r=this._taskManagers.get(e)?.getTask(n.taskId);if(!r){this._sendJsonRpcError(e,t.id,{code:x.TASK_NOT_FOUND,message:`Task not found: ${n.taskId}`});return}let i=this.connections.get(e);if(i){let e={jsonrpc:`2.0`,id:t.id,result:{task:r}};i.send(e)}}_handleA2AJsonRpc(e,t){if(C(t)){let e=String(t.id??``),n=this._pendingRequests.get(e);n&&(clearTimeout(n.timer),this._pendingRequests.delete(e),n.resolve(t));return}let n=t.method;if(n){if(n.startsWith(`room/`))this._roomNotificationHandler?.(e,n,t.params);else if(S(t)){let r={[_.GET_AGENT_CARD]:(e,t)=>this._handleGetAgentCard(e,t),[_.SEND_MESSAGE]:(e,t)=>this._handleA2ASendMessage(e,t),[_.CANCEL_TASK]:(e,t)=>this._handleA2ACancelTask(e,t),[_.GET_TASK]:(e,t)=>this._handleA2AGetTask(e,t)}[n];if(r){r(e,t);return}if(n===`message/send`){let n=t.params;n?.message?.parts&&Array.isArray(n.message.parts)&&this._processInboundA2AEnvelope(e,n.message.parts).catch(e=>console.error(`PeerJsChannel: failed to process inbound A2A envelope`,e))}else this._sendJsonRpcError(e,t.id,{code:x.METHOD_NOT_FOUND,message:`Method not found: ${n}`})}else({[v.EVENT]:(e,t)=>this._handleAGUIEventNotification(e,t),[y.STATUS_UPDATE]:(e,t)=>this._handleTaskStatusNotification(e,t),[y.ARTIFACT_UPDATE]:()=>{},"message/send":(e,t)=>{t?.message?.parts&&Array.isArray(t.message.parts)&&this._processInboundA2AEnvelope(e,t.message.parts).catch(e=>console.error(`PeerJsChannel: failed to process inbound A2A envelope`,e))}})[n]?.(e,t.params)}}_handleA2ASendMessage(e,t){let n=t.params;if(!n?.message){this._sendJsonRpcError(e,t.id,{code:x.INVALID_PARAMS,message:`Missing message in SendMessage params`});return}let r=this._taskManagers.get(e);r||(r=new j,this._taskManagers.set(e,r),r.on(t=>{this._forwardTaskEvent(e,t)}));let i=r.handleSendMessage(n),a=this.connections.get(e);if(a){let e={jsonrpc:`2.0`,id:t.id,result:i};a.send(e)}n.message.parts&&Array.isArray(n.message.parts)&&this._processInboundA2AEnvelope(e,n.message.parts,i.task?.id,i.task?.contextId).catch(e=>console.error(`PeerJsChannel: failed to process A2A SendMessage`,e))}_handleAGUIEventNotification(e,t){if(!t||typeof t!=`object`)return;let n=t;window.dispatchEvent(new CustomEvent(`shadow-claw-agui-event`,{detail:{remotePeerId:e,event:n}}))}_handleGetAgentCard(e,t){if(!this._localCard){this._sendJsonRpcError(e,t.id,{code:x.INTERNAL_ERROR,message:`Agent card not available`});return}let n=E(t.id,this._localCard),r=this.connections.get(e);r&&r.send(n)}_handleInboundData(e,t){if(t instanceof ArrayBuffer||t instanceof Uint8Array){if(this._pendingInboundFile){let n=this._pendingInboundFile.name,r=new Uint8Array(t),i=this._pendingInboundFile.targetGroupId||`peer:${e}`,a=this._saveInboundFile(i,n,r);this._inboundSavePromises.set(n,a),this._pendingInboundFile=null}return}if(!t||typeof t!=`object`)return;let r=t;if(r.type===`__file_header`){let t=r.id||r.name,n=r.totalChunks||1,i=this._inboundTransfers.get(t),a=typeof r.groupId==`string`&&r.groupId.startsWith(`room:`)?r.groupId:`peer:${e}`;this._inboundTransfers.set(t,{transferId:t,name:r.name,mimeType:r.mimeType||`application/octet-stream`,size:r.size||0,totalChunks:n,receivedChunks:i?.receivedChunks||/* @__PURE__ */ new Map,receivedBytes:i?.receivedBytes||0,targetGroupId:a}),this._pendingInboundFile={name:r.name,mimeType:r.mimeType,size:r.size,targetGroupId:a},P({count:0,total:n,direction:`receive`})}else if(r.type===`__file_chunk`){let t=r.id||r.name,n=this._inboundTransfers.get(t);if(!n){let e=r.totalChunks||1;n={transferId:t,name:r.name,mimeType:`application/octet-stream`,size:0,totalChunks:e,receivedChunks:/* @__PURE__ */ new Map,receivedBytes:0},this._inboundTransfers.set(t,n)}let i=typeof r.index==`number`?r.index:0,a=r.data instanceof ArrayBuffer?new Uint8Array(r.data):r.data instanceof Uint8Array?r.data:new Uint8Array(r.data||[]);if(n.receivedChunks.has(i)||(n.receivedChunks.set(i,a),n.receivedBytes+=a.byteLength),P({count:n.receivedChunks.size,total:n.totalChunks,direction:`receive`}),n.receivedChunks.size>=n.totalChunks){let r=new Uint8Array(n.size||n.receivedBytes),i=0;for(let e=0;e<n.totalChunks;e++){let t=n.receivedChunks.get(e);t&&(r.set(t,i),i+=t.byteLength)}let a=n.targetGroupId||`peer:${e}`,o=this._saveInboundFile(a,n.name,r);this._inboundSavePromises.set(n.name,o),this._inboundTransfers.delete(t),this._pendingInboundFile=null,F(1500)}}else if(r.type===`typing`)this.typingCallback?.(`peer:${e}`,!!r.typing);else if(r.type===`chat`){let t=typeof r.text==`string`?r.text.trim():``;t&&this.messageCallback?.({id:n(),groupId:`peer:${e}`,sender:e,content:t,timestamp:Date.now(),channel:`peerjs`})}else if(r.jsonrpc===`2.0`)this._handleA2AJsonRpc(e,r);else if(r.type===`command:execute`){let t=r.payload||{},i=t.action||``,a=t.args||{},o=t.commandId||``;import(`./init-control-plane-Ctz7FI8M.js`).then(({executeClientControlCommand:e})=>e(i,a)).then(t=>{let r=this.connections.get(e);if(r){let e=!!t?.error;r.send({id:n(),type:`command:result`,payload:{commandId:o,action:i,success:!e,data:t,...e?{error:t.error}:{}}})}}).catch(t=>{let r=this.connections.get(e);r&&r.send({id:n(),type:`command:result`,payload:{commandId:o,action:i,success:!1,error:t?.message||String(t)}})})}}_isTrustedPeer(e){if(this.trustedPeerIds.size===0||this.trustedPeerIds.has(e))return!0;for(let t of this.trustedPeerIds){let n=t.trim();if(n.endsWith(`*`)&&e.startsWith(n.slice(0,-1))||n===`cli`&&e.startsWith(`cli-`))return!0}return!1}_handleIncomingConnection(e){let t=e.peer;if(this._isTrustedPeer(t))this._attachChunkProgressTracker(e),this.connections.set(t,e),this._updateConnectedPeersSignal(),e.on(`open`,()=>{console.log(`PeerJsChannel: connection opened with ${t}`),this._exchangeAgentCards(t,e)}),e.on(`data`,e=>{this._handleInboundData(t,e)}),e.on(`close`,()=>{console.log(`PeerJsChannel: connection closed with ${t}`),this.connections.delete(t),this.peerCards.delete(t),this._taskManagers.delete(t),this._updateConnectedPeersSignal()}),e.on(`error`,e=>{console.error(`PeerJsChannel: connection error with ${t}:`,e),this.connections.delete(t),this._updateConnectedPeersSignal(),window.dispatchEvent(new CustomEvent(`shadow-claw-peer-error`,{detail:{remotePeerId:t,error:e.message}}))}),e.on(`iceStateChanged`,e=>{(e===`failed`||e===`disconnected`||e===`closed`)&&(console.warn(`PeerJsChannel: ICE state changed to ${e} for ${t}`),this.connections.delete(t),this._updateConnectedPeersSignal())});else{console.warn(`PeerJsChannel: rejecting connection from untrusted peer: ${t}`);try{e.close()}catch{}}}_attachChunkProgressTracker(e){let t=e;if(t._chunkProgressPatched)return;t._chunkProgressPatched=!0;let n=this,r=t._handleChunk;typeof r==`function`&&(t._handleChunk=function(e){if(e&&typeof e==`object`&&`__peerData`in e&&n._inboundTransfers.size===0){let t=e.__peerData,n=this._chunkedData?.[t]?.count??0,r=e.total;if(typeof globalThis.dispatchEvent==`function`&&typeof CustomEvent==`function`)globalThis.dispatchEvent(new CustomEvent(`peerjs-dc-handle-chunk`,{detail:{chunkInfo:{count:n,total:r}}}));else{let e=n+1;P({count:e,total:r,direction:`receive`}),e>=r&&F(1500)}}return r.call(this,e)})}_handleTaskStatusNotification(e,t){if(!t||typeof t!=`object`)return;let n=t;if(n.status?.state&&h.has(n.status.state)){let t=`peer:${e}`;this._onTaskCompleteCallback?.(t)}window.dispatchEvent(new CustomEvent(`shadow-claw-task-status`,{detail:{remotePeerId:e,...n}}))}async _initPeer(){let{Peer:e}=await import(`./bundler-UnYfEehP.js`),t={},n=this.serverConfig.host??`0.peerjs.com`,r=this.serverConfig.port??443,i=this.serverConfig.path??`/`,a=this.serverConfig.secure??!0;t.host=n,t.port=r,t.path=i,t.secure=a,t.debug=3,t.config={iceServers:this.serverConfig.iceServers??[{urls:`stun:stun.l.google.com:19302`},{urls:`stun:stun1.l.google.com:19302`}]},this.peer=new e(this.myPeerId,t),this.peer.on(`open`,e=>{console.log(`PeerJsChannel: connected to signaling server, peer ID: ${e}`),this._reconnectAttempts=0}),this.peer.on(`connection`,e=>{this._handleIncomingConnection(e)}),this.peer.on(`error`,e=>{console.error(`PeerJsChannel: peer error [${e.type}]:`,e.message),(e.type===`peer-unavailable`||e.type===`unavailable-id`)&&window.dispatchEvent(new CustomEvent(`shadow-claw-peer-error`,{detail:{error:e.message}})),e.type!==`peer-unavailable`&&e.type!==`network`&&e.type!==`disconnected`&&e.type===`unavailable-id`&&console.warn(`PeerJsChannel: peer ID is already in use. Stop the channel and reconfigure.`)}),this.peer.on(`disconnected`,()=>{this.running&&this._scheduleReconnect()}),this.peer.on(`close`,()=>{console.log(`PeerJsChannel: peer closed`)})}_registerPendingRequest(e,t){let n=String(e??``),r=setTimeout(()=>{this._pendingRequests.delete(n),console.warn(`PeerJsChannel: JSON-RPC request ${n} timed out (10s)`)},1e4);this._pendingRequests.set(n,{resolve:t,timer:r})}_scheduleReconnect(){if(this._reconnectTimer!==null)return;let e=Math.min(a._RECONNECT_BASE_MS*2**this._reconnectAttempts,a._RECONNECT_MAX_MS);this._reconnectAttempts++,console.log(`PeerJsChannel: disconnected from signaling server, reconnecting in ${(e/1e3).toFixed(1)}s (attempt ${this._reconnectAttempts})`),this._reconnectTimer=setTimeout(()=>{if(this._reconnectTimer=null,this.running)try{this.peer?.reconnect?.()}catch{this._scheduleReconnect()}},e)}_sendJsonRpcError(e,t,n){let r=this.connections.get(e);if(!r)return;let i={jsonrpc:`2.0`,id:t,error:n};try{r.send(i)}catch{}}async _waitForBufferDrain(e,t=65536){let n=e.dataChannel||e._dc;n&&typeof n.bufferedAmount==`number`&&(n.bufferedAmount<=t||await new Promise(e=>{let r=setInterval(()=>{(!n||n.bufferedAmount<=t)&&(clearInterval(r),e())},20);if(typeof n.addEventListener==`function`){let i=()=>{clearInterval(r),n.removeEventListener(`bufferedamountlow`,i),e()};try{n.bufferedAmountLowThreshold=t,n.addEventListener(`bufferedamountlow`,i,{once:!0})}catch{}}}))}async _saveInboundFile(t,n,i){try{let a=await e(),o=n,s=1;for(;await r(a,t,o);){let e=n.lastIndexOf(`.`);if(e>0&&e<n.length-1){let t=n.substring(0,e),r=n.substring(e);o=`${t} (${s})${r}`}else o=`${n} (${s})`;s++}o!==n&&this._inboundRemap.set(n,o),await c(a,t,o,i);try{let{orchestratorStore:e}=await import(`./orchestrator-Li1UAsv7.js`).then(e=>e.n);e.activeGroupId===t&&await e.loadFiles(a)}catch{}}catch(e){console.error(`PeerJsChannel: failed to write inbound file bytes`,e)}}_updateConnectedPeersSignal(){this.connectedPeersSignal.set(Array.from(this.connections.keys()))}_waitForOpen(e){return e.open?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>{n(/* @__PURE__ */ Error(`Connection open timeout (5s)`))},5e3);e.on(`open`,()=>{clearTimeout(r),t()}),e.on(`error`,e=>{clearTimeout(r),n(e)})})}async _processInboundA2AEnvelope(e,t,r,i){let a=`peer:${e}`,o=``,s=[],c=[],l;for(let e of t)if(e.kind===`text`&&typeof e.text==`string`)o+=e.text;else if(e.kind===`file`){let t=e.name||`attachment`,n=this._inboundSavePromises.get(t);if(n)try{await n}catch{}finally{this._inboundSavePromises.delete(t)}if(this._inboundRemap.has(t)){let e=this._inboundRemap.get(t),n=t.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);o=o.replace(RegExp(`(!?\\[.*?\\])\\(${n}\\)`,`g`),`$1(${e})`),this._inboundRemap.delete(t),t=e}let r=t.split(`/`).pop()||`attachment`;s.push({fileName:r,mimeType:e.mimeType,path:t,size:e.size||0})}else e.kind===`a2ui`&&e.envelope?c.push(e.envelope):e.kind===`a2ui-action`&&e.action&&(l=e.action);o=o.trim(),(o||s.length!==0||c.length!==0||l)&&this.messageCallback?.({id:n(),groupId:a,sender:e,content:o,timestamp:Date.now(),channel:`peerjs`,attachments:s.length>0?s:void 0,a2uiEnvelopes:c.length>0?c:void 0,a2uiAction:l,taskId:r,contextId:i})}};function R(e){let t=[],n=/!?\[([^\]]*)\]\(([^)]+)\)/g,r,i=e;for(;(r=n.exec(e))!==null;){let e=r[1],n=z((r[2]||``).trim());n&&t.push({alt:e,path:n})}return{remainingText:i,attachments:t}}function z(e){if(!e)return null;let t=e.trim();if(/^[a-zA-Z][a-zA-Z\d+.-]*:/.test(t)||t.startsWith(`//`))return null;let n=t.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^\.\//,``);if(!n)return null;let r=n.split(`/`).filter(Boolean);return r.some(e=>e===`..`)?null:r.join(`/`)}export{u as a,f as i,M as n,b as r,L as t};
|
package/dist/public/{process-peer-query-param-s-aSP1Rq.js → process-peer-query-param-DQIgr3KL.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./orchestrator-
|
|
1
|
+
import{t as e}from"./orchestrator-Li1UAsv7.js";import{t}from"./ulid-BSJxYh6W.js";import{a as n,r}from"./toast-CtIuHprH.js";import{c as i,d as a}from"./channel-DIpDQekL.js";import{t as o}from"./configure-peer-js-DV1rqvFX.js";import{t as s}from"./shadow-claw-Bg9AQ5x_.js";async function c(c,l,u,d){if(!u)return;let f=new URL(window.location?.href||`http://localhost/`),p=f.searchParams.get(`peer`);if(!p)return;let m=p.trim();if(m)try{let r=i(d),p=r.myPeerId;p||=t().toLowerCase();let h=new Set(r.trustedPeerIds);h.add(m),await o(d,u,p,Array.from(h),r.serverHost,r.serverPort,r.serverPath,r.serverSecure),r.enabled||await a(d,u,`peerjs`,!0);let g=await e.ensurePeerConversation(u,m);await e.switchConversation(u,g),s(c,l,u,e,`chat`),f.searchParams.delete(`peer`);let _=`${f.pathname}${f.search}${f.hash}`;window.history.replaceState({},``,_||`/`),n(`Connected to Peer: ${m.substring(0,8)}`)}catch(e){let t=e instanceof Error?e.message:String(e);r(`Failed to process peer parameter: ${t}`,6e3)}}export{c as processPeerQueryParam};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{t as e}from"./write-group-file-R67DjJ-q.js";import{a as t,r as n}from"./toast-CtIuHprH.js";import{t as r}from"./write-group-file-bytes-A8kB7lvO.js";import{t as i}from"./shadow-claw-
|
|
1
|
+
import{t as e}from"./write-group-file-R67DjJ-q.js";import{a as t,r as n}from"./toast-CtIuHprH.js";import{t as r}from"./write-group-file-bytes-A8kB7lvO.js";import{t as i}from"./shadow-claw-Bg9AQ5x_.js";const a=`pendingShares`;function o(e){return{id:typeof e?.id==`string`?e.id:``,createdAt:typeof e?.createdAt==`number`?e.createdAt:0,title:typeof e?.title==`string`?e.title:``,text:typeof e?.text==`string`?e.text:``,url:typeof e?.url==`string`?e.url:``,fileName:typeof e?.fileName==`string`?e.fileName:``,fileType:typeof e?.fileType==`string`?e.fileType:``,fileBytes:e?.fileBytes instanceof ArrayBuffer?e.fileBytes:null}}async function s(e){return!e||typeof e.transaction!=`function`?[]:new Promise((t,n)=>{let r;try{r=e.transaction(a,`readwrite`)}catch(e){if(e instanceof DOMException&&e.name===`NotFoundError`){t([]);return}n(e);return}let i=r.objectStore(a),s=i.getAll();s.onerror=()=>{n(s.error||/* @__PURE__ */ Error(`Failed to read pending shares`))},s.onsuccess=()=>{let e=Array.isArray(s.result)?s.result.map(o).filter(e=>typeof e.id==`string`&&e.id.length>0).sort((e,t)=>e.createdAt-t.createdAt):[],r=i.clear();r.onerror=()=>{n(r.error||/* @__PURE__ */ Error(`Failed to clear pending shares`))},r.onsuccess=()=>{t(e)}},r.onabort=()=>{n(r.error||/* @__PURE__ */ Error(`Pending share transaction aborted`))}})}function c(e){let t=[`# Shared Content`,``];return e.title&&t.push(`Title: ${e.title}`),e.url&&t.push(`URL: ${e.url}`),e.text&&t.push(``,e.text),t.join(`
|
|
2
2
|
`).trim()+`
|
|
3
3
|
`}async function l(e,t){let n=/* @__PURE__ */ new Date,r=`Shared Files ${`${String(n.getFullYear())}-${String(n.getMonth()+1).padStart(2,`0`)}-${String(n.getDate()).padStart(2,`0`)}`}`,i=t.groups.find(e=>e.name===r);return i?(await t.switchConversation(e,i.groupId),i.groupId):(await t.createConversation(e,r)).groupId}function u(e,t){return(e.replace(/\\/g,`/`).split(`/`).filter(Boolean).pop()||``).replace(/\s+/g,`-`).replace(/[^A-Za-z0-9._-]/g,`-`).replace(/-+/g,`-`).replace(/^-+|-+$/g,``)||`${t}.txt`}async function d(a,o,d,f,p,m,h){if(!m)return;let g=await s(m);if(g.length!==0)try{let n=await l(m,f),s=[];for(let t=0;t<g.length;t++){let i=g[t],a=`shared-${Date.now()}-${t+1}`;if(i.fileBytes instanceof ArrayBuffer){let e=u(i.fileName||(i.fileType===`application/pdf`?`${a}.pdf`:`${a}.bin`),a);await r(m,n,e,new Uint8Array(i.fileBytes)),s.push(e);continue}let o=u(i.fileName||`${a}.md`,a),l=c(i);await e(m,n,o,l),s.push(o)}await f.loadFiles(m),i(o,d,m,f,`files`),s.length>0&&await p.openFile(m,s[0],n),t(`Imported ${s.length} shared item${s.length===1?``:`s`}.`);let _=h;if(_.searchParams.has(`share-target`)){_.searchParams.delete(`share-target`);let e=`${_.pathname}${_.search}${_.hash}`;a.history.replaceState({},``,e||`/`)}}catch(e){let t=e instanceof Error?e.message:String(e);n(`Failed to import shared content: ${t}`,6e3)}}export{d as processPendingSharedPayloads};
|
package/dist/public/{process-room-query-param-B2Qe0F0M.js → process-room-query-param-F-XnIVoZ.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./ulid-BSJxYh6W.js";import{a as t,r as n}from"./toast-CtIuHprH.js";import{l as r}from"./transformers-CQ9ss9rD.js";import{c as i,d as a}from"./channel-
|
|
1
|
+
import{t as e}from"./ulid-BSJxYh6W.js";import{a as t,r as n}from"./toast-CtIuHprH.js";import{l as r}from"./transformers-CQ9ss9rD.js";import{c as i,d as a}from"./channel-DIpDQekL.js";import{t as o}from"./configure-peer-js-DV1rqvFX.js";import{t as s}from"./shadow-claw-Bg9AQ5x_.js";async function c(c,l,u,d,f,p){if(!d)return;let m=new URL(window.location?.href||`http://localhost/`),h=(m.searchParams.get(`room`)||``).trim(),g=(m.searchParams.get(`host`)||``).trim(),_=(m.searchParams.get(`name`)||``).trim()||`Room`;if(h&&g)try{let n=i(f),v=n.myPeerId;v||=e().toLowerCase();let y=new Set(n.trustedPeerIds);y.add(g),await o(f,d,v,Array.from(y),n.serverHost,n.serverPort,n.serverPath,n.serverSecure),n.enabled||await a(f,d,`peerjs`,!0),r(f,h,g,_),await p.switchConversation(d,`room:${h}`),s(l,u,d,p,`chat`),m.searchParams.delete(`room`),m.searchParams.delete(`host`),m.searchParams.delete(`name`);let b=`${m.pathname}${m.search}${m.hash}`;c.history.replaceState({},``,b||`/`),t(`Joined room "${_}"`)}catch(e){let t=e instanceof Error?e.message:String(e);n(`Failed to join room: ${t}`,6e3)}}export{c as processRoomQueryParam};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./config-C16fFWtP.js";import{n as t}from"./db-BUuJo1Gf.js";import{t as n}from"./get-config-Bkvl__ZS.js";import{t as r}from"./get-or-create-subscriber-id-jVHnQfbr.js";async function i(r){let i=await t(),a=await n(i,e.PUSH_PROXY_URL);if(!a&&typeof localStorage<`u`)try{a=localStorage.getItem(e.PUSH_PROXY_URL)||void 0}catch{}if(!a)return r;let o=r.startsWith(`/`)?r:`/${r}`;return`${a.endsWith(`/`)?a.slice(0,-1):a}${o}`}function a(e,t={}){let n={...t};try{let t=typeof location<`u`?location.origin:`http://127.0.0.1:8888`,r=new URL(e,t).hostname.toLowerCase();r===`localhost`||r===`127.0.0.1`||r===`::1`||r===`[::1]`?n.targetAddressSpace=`loopback`:(/^(10\.|172\.(1[6-9]|2\d|3[01])\.|192\.168\.)/.test(r)||!r.includes(`.`)||r.endsWith(`.local`)||r.endsWith(`.lan`)||r.endsWith(`.home`)||r.endsWith(`.internal`))&&(n.targetAddressSpace=`private`)}catch{}return n}function o(e){let t=(e+`=`.repeat((4-e.length%4)%4)).replace(/-/g,`+`).replace(/_/g,`/`),n=atob(t);return Uint8Array.from([...n].map(e=>e.charCodeAt(0)))}async function s(){let e=await i(`/push/vapid-public-key`);return(await(await fetch(e,a(e))).json()).publicKey}async function c(n,c,l){let u=await navigator.serviceWorker.ready,d=await s(),f=await u.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:o(d)}),p=n||typeof localStorage<`u`&&localStorage.getItem(e.CONTROL_PLANE_CLIENT_ID)||void 0,m=c,h=l;if(!p||!m)try{let e=await import(`./init-control-plane-
|
|
1
|
+
import{r as e}from"./config-C16fFWtP.js";import{n as t}from"./db-BUuJo1Gf.js";import{t as n}from"./get-config-Bkvl__ZS.js";import{t as r}from"./get-or-create-subscriber-id-jVHnQfbr.js";async function i(r){let i=await t(),a=await n(i,e.PUSH_PROXY_URL);if(!a&&typeof localStorage<`u`)try{a=localStorage.getItem(e.PUSH_PROXY_URL)||void 0}catch{}if(!a)return r;let o=r.startsWith(`/`)?r:`/${r}`;return`${a.endsWith(`/`)?a.slice(0,-1):a}${o}`}function a(e,t={}){let n={...t};try{let t=typeof location<`u`?location.origin:`http://127.0.0.1:8888`,r=new URL(e,t).hostname.toLowerCase();r===`localhost`||r===`127.0.0.1`||r===`::1`||r===`[::1]`?n.targetAddressSpace=`loopback`:(/^(10\.|172\.(1[6-9]|2\d|3[01])\.|192\.168\.)/.test(r)||!r.includes(`.`)||r.endsWith(`.local`)||r.endsWith(`.lan`)||r.endsWith(`.home`)||r.endsWith(`.internal`))&&(n.targetAddressSpace=`private`)}catch{}return n}function o(e){let t=(e+`=`.repeat((4-e.length%4)%4)).replace(/-/g,`+`).replace(/_/g,`/`),n=atob(t);return Uint8Array.from([...n].map(e=>e.charCodeAt(0)))}async function s(){let e=await i(`/push/vapid-public-key`);return(await(await fetch(e,a(e))).json()).publicKey}async function c(n,c,l){let u=await navigator.serviceWorker.ready,d=await s(),f=await u.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:o(d)}),p=n||typeof localStorage<`u`&&localStorage.getItem(e.CONTROL_PLANE_CLIENT_ID)||void 0,m=c,h=l;if(!p||!m)try{let e=await import(`./init-control-plane-Ctz7FI8M.js`);!p&&typeof e.getOrCreateControlPlaneClientId==`function`&&(p=e.getOrCreateControlPlaneClientId()),!m&&typeof e.detectDeviceLabel==`function`&&(m=e.detectDeviceLabel())}catch{}if(!h)try{let e=await Promise.race([t(),new Promise(e=>setTimeout(()=>e(null),500))]);e&&(h=await r(e))}catch{}let g=typeof f.toJSON==`function`?f.toJSON():JSON.parse(JSON.stringify(f)),_=await i(`/push/subscribe`);return await fetch(_,a(_,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({...g,...p?{clientId:p}:{},...m?{deviceLabel:m}:{},...h?{subscriberId:h}:{}})})),f}async function l(n){if(typeof navigator<`u`&&navigator.serviceWorker)try{let o=await(await navigator.serviceWorker.ready).pushManager.getSubscription();if(!o)return;let s,c,l=n;typeof localStorage<`u`&&(s=localStorage.getItem(e.CONTROL_PLANE_CLIENT_ID)||void 0);try{let e=await import(`./init-control-plane-Ctz7FI8M.js`);!s&&typeof e.getOrCreateControlPlaneClientId==`function`&&(s=e.getOrCreateControlPlaneClientId()),typeof e.detectDeviceLabel==`function`&&(c=e.detectDeviceLabel())}catch{}if(!l)try{let e=await Promise.race([t(),new Promise(e=>setTimeout(()=>e(null),500))]);e&&(l=await r(e))}catch{}let u=typeof o.toJSON==`function`?o.toJSON():JSON.parse(JSON.stringify(o)),d=await i(`/push/subscribe`);await fetch(d,a(d,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({...u,...s?{clientId:s}:{},...c?{deviceLabel:c}:{},...l?{subscriberId:l}:{}})}))}catch{}}async function u(){let e=await(await navigator.serviceWorker.ready).pushManager.getSubscription();if(!e)return;let{endpoint:t}=e;await e.unsubscribe();let n=await i(`/push/subscribe`);await fetch(n,a(n,{method:`DELETE`,headers:{"Content-Type":`application/json`},body:JSON.stringify({endpoint:t})}))}async function d(){return(await navigator.serviceWorker.ready).pushManager.getSubscription()}export{l as a,c as i,a as n,u as o,i as r,d as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./get-config-Bkvl__ZS.js";import{T as t,w as n}from"./orchestrator-
|
|
1
|
+
import{t as e}from"./get-config-Bkvl__ZS.js";import{T as t,w as n}from"./orchestrator-Li1UAsv7.js";import{t as r}from"./set-config-DSiuMe0k.js";const i=`room_metadata`,a=`room:`;function o(e){return`${a}${e}`}function s(e){return e.startsWith(`room:`)?e.slice(5):e}async function c(t){let n=await e(t,i);if(!n)return[];try{let e=JSON.parse(n);return Array.isArray(e)?e:[]}catch{return[]}}async function l(e,t){await r(e,i,JSON.stringify(t))}async function u(e,t){let n=await c(e),r=n.findIndex(e=>e.roomId===t.roomId);r>=0?n[r]=t:n.push(t),await l(e,n),await d(e,t)}async function d(e,r){let i=await t(e),s=o(r.roomId);i.some(e=>e.groupId===s)||await n(e,r.name,a,r.roomId)}async function f(e,t){await l(e,(await c(e)).filter(e=>e.roomId!==t))}export{s as a,o as i,f as n,u as o,c as r,a as t};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
try{self[`workbox:window:7.4.0`]&&_()}catch{}function e(e,t){return new Promise((function(n){var r=new MessageChannel;r.port1.onmessage=function(e){n(e.data)},e.postMessage(t,[r.port2])}))}function t(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function n(e,t,n){return t&&function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,`value`in r&&(r.writable=!0),Object.defineProperty(e,a(r.key),r)}}(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function r(e,n){var r=typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(r)return(r=r.call(e)).next.bind(r);if(Array.isArray(e)||(r=function(e,n){if(e){if(typeof e==`string`)return t(e,n);var r={}.toString.call(e).slice(8,-1);return r===`Object`&&e.constructor&&(r=e.constructor.name),r===`Map`||r===`Set`?Array.from(e):r===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?t(e,n):void 0}}(e))||n){r&&(e=r);var i=0;return function(){return i>=e.length?{done:!0}:{done:!1,value:e[i++]}}}throw TypeError(`Invalid attempt to iterate non-iterable instance.
|
|
2
|
-
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function i(e,t){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},i(e,t)}function a(e){var t=function(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return String(e)}(e,`string`);return typeof t==`symbol`?t:t+``}try{self[`workbox:core:7.4.0`]&&_()}catch{}var o=function(){var e=this;this.promise=new Promise((function(t,n){e.resolve=t,e.reject=n}))};function s(e,t){var n=location.href;return new URL(e,n).href===new URL(t,n).href}var c=function(e,t){this.type=e,Object.assign(this,t)};function l(e,t,n){return e&&e.then||(e=Promise.resolve(e)),t?e.then(t):e}function u(){}var d={type:`SKIP_WAITING`};function f(e,t){return e&&e.then?e.then(u):Promise.resolve()}var p=function(t){function r(e,n){var r,i;return n===void 0&&(n={}),(r=t.call(this)||this).nn={},r.tn=0,r.rn=new o,r.en=new o,r.on=new o,r.un=0,r.an=/* @__PURE__ */ new Set,r.cn=function(){var e=r.fn,t=e.installing;r.tn>0||!s(t.scriptURL,r.sn.toString())||performance.now()>r.un+6e4?(r.vn=t,e.removeEventListener(`updatefound`,r.cn)):(r.hn=t,r.an.add(t),r.rn.resolve(t)),++r.tn,t.addEventListener(`statechange`,r.ln)},r.ln=function(e){var t=r.fn,n=e.target,i=n.state,a=n===r.vn,o={sw:n,isExternal:a,originalEvent:e};!a&&r.mn&&(o.isUpdate=!0),r.dispatchEvent(new c(i,o)),i===`installed`?r.wn=self.setTimeout((function(){i===`installed`&&t.waiting===n&&r.dispatchEvent(new c(`waiting`,o))}),200):i===`activating`&&(clearTimeout(r.wn),a||r.en.resolve(n))},r.yn=function(e){var t=r.hn,n=t!==navigator.serviceWorker.controller;r.dispatchEvent(new c(`controlling`,{isExternal:n,originalEvent:e,sw:t,isUpdate:r.mn})),n||r.on.resolve(t)},r.gn=(i=function(e){var t=e.data,n=e.ports,i=e.source;return l(r.getSW(),(function(){r.an.has(i)&&r.dispatchEvent(new c(`message`,{data:t,originalEvent:e,ports:n,sw:i}))}))},function(){var e=[...arguments];try{return Promise.resolve(i.apply(this,e))}catch(e){return Promise.reject(e)}}),r.sn=e,r.nn=n,navigator.serviceWorker.addEventListener(`message`,r.gn),r}var a,u=t;(a=r).prototype=Object.create(u.prototype),a.prototype.constructor=a,i(a,u);var p=r.prototype;return p.register=function(e){var t=(e===void 0?{}:e).immediate,n=t!==void 0&&t;try{var r=this;return l(function(e,t){var n=e();return n&&n.then?n.then(t):t(n)}((function(){if(!n&&document.readyState!==`complete`)return f(new Promise((function(e){return window.addEventListener(`load`,e)})))}),(function(){return r.mn=!!navigator.serviceWorker.controller,r.dn=r.pn(),l(r.bn(),(function(e){r.fn=e,r.dn&&(r.hn=r.dn,r.en.resolve(r.dn),r.on.resolve(r.dn),r.dn.addEventListener(`statechange`,r.ln,{once:!0}));var t=r.fn.waiting;return t&&s(t.scriptURL,r.sn.toString())&&(r.hn=t,Promise.resolve().then((function(){r.dispatchEvent(new c(`waiting`,{sw:t,wasWaitingBeforeRegister:!0}))})).then((function(){}))),r.hn&&(r.rn.resolve(r.hn),r.an.add(r.hn)),r.fn.addEventListener(`updatefound`,r.cn),navigator.serviceWorker.addEventListener(`controllerchange`,r.yn),r.fn}))})))}catch(e){return Promise.reject(e)}},p.update=function(){try{return this.fn?l(f(this.fn.update())):l()}catch(e){return Promise.reject(e)}},p.getSW=function(){return this.hn===void 0?this.rn.promise:Promise.resolve(this.hn)},p.messageSW=function(t){try{return l(this.getSW(),(function(n){return e(n,t)}))}catch(e){return Promise.reject(e)}},p.messageSkipWaiting=function(){this.fn&&this.fn.waiting&&e(this.fn.waiting,d)},p.pn=function(){var e=navigator.serviceWorker.controller;return e&&s(e.scriptURL,this.sn.toString())?e:void 0},p.bn=function(){try{var e=this;return l(function(e,t){try{var n=e()}catch(e){return t(e)}return n&&n.then?n.then(void 0,t):n}((function(){return l(navigator.serviceWorker.register(e.sn,e.nn),(function(t){return e.un=performance.now(),t}))}),(function(e){throw e})))}catch(e){return Promise.reject(e)}},n(r,[{key:`active`,get:function(){return this.en.promise}},{key:`controlling`,get:function(){return this.on.promise}}])}(function(){function e(){this.Pn=/* @__PURE__ */ new Map}var t=e.prototype;return t.addEventListener=function(e,t){this.jn(e).add(t)},t.removeEventListener=function(e,t){this.jn(e).delete(t)},t.dispatchEvent=function(e){e.target=this;for(var t,n=r(this.jn(e.type));!(t=n()).done;)(0,t.value)(e)},t.jn=function(e){return this.Pn.has(e)||this.Pn.set(e,/* @__PURE__ */ new Set),this.Pn.get(e)},e}());const m=`__shadowClawDefaultTrustedTypesPolicyState`,h=`default`,g=`shadowclaw-sandbox`;function v(){let e=globalThis;return e[m]||(e[m]={initialized:!1,policy:null}),e[m]}function y(){let e=v();if(e.initialized)return;let t=Reflect.get(globalThis,`trustedTypes`);if(t&&typeof t.createPolicy==`function`){e.initialized=!0;try{if(typeof t.getPolicy==`function`){let n=t.getPolicy(h);if(n){e.policy=n;return}}let n=!1;if(typeof t.getPolicyNames==`function`){let e=t.getPolicyNames();Array.isArray(e)&&e.includes(h)&&(n=!0)}if(n){if(typeof t.getPolicy==`function`){let n=t.getPolicy(g);if(n){e.policy=n;return}}e.policy=t.createPolicy(g,{createHTML:e=>e,createScriptURL:e=>e});return}e.policy=t.createPolicy(h,{createHTML:e=>e,createScriptURL:e=>e})}catch{typeof t.getPolicy==`function`&&(e.policy=t.getPolicy(h)??t.getPolicy(g)??null)}}}function b(e){y();let t=v().policy;return!t||typeof t.createScriptURL!=`function`?e:t.createScriptURL(e)}const x=`shadowclaw-oac-reload-attempted`,S=`shadowclaw-sw-update-intent`,C=3e4,w=`shadowclaw-sw-update-failure`;let T=!1,E=null;async function
|
|
2
|
+
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function i(e,t){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},i(e,t)}function a(e){var t=function(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return String(e)}(e,`string`);return typeof t==`symbol`?t:t+``}try{self[`workbox:core:7.4.0`]&&_()}catch{}var o=function(){var e=this;this.promise=new Promise((function(t,n){e.resolve=t,e.reject=n}))};function s(e,t){var n=location.href;return new URL(e,n).href===new URL(t,n).href}var c=function(e,t){this.type=e,Object.assign(this,t)};function l(e,t,n){return e&&e.then||(e=Promise.resolve(e)),t?e.then(t):e}function u(){}var d={type:`SKIP_WAITING`};function f(e,t){return e&&e.then?e.then(u):Promise.resolve()}var p=function(t){function r(e,n){var r,i;return n===void 0&&(n={}),(r=t.call(this)||this).nn={},r.tn=0,r.rn=new o,r.en=new o,r.on=new o,r.un=0,r.an=/* @__PURE__ */ new Set,r.cn=function(){var e=r.fn,t=e.installing;r.tn>0||!s(t.scriptURL,r.sn.toString())||performance.now()>r.un+6e4?(r.vn=t,e.removeEventListener(`updatefound`,r.cn)):(r.hn=t,r.an.add(t),r.rn.resolve(t)),++r.tn,t.addEventListener(`statechange`,r.ln)},r.ln=function(e){var t=r.fn,n=e.target,i=n.state,a=n===r.vn,o={sw:n,isExternal:a,originalEvent:e};!a&&r.mn&&(o.isUpdate=!0),r.dispatchEvent(new c(i,o)),i===`installed`?r.wn=self.setTimeout((function(){i===`installed`&&t.waiting===n&&r.dispatchEvent(new c(`waiting`,o))}),200):i===`activating`&&(clearTimeout(r.wn),a||r.en.resolve(n))},r.yn=function(e){var t=r.hn,n=t!==navigator.serviceWorker.controller;r.dispatchEvent(new c(`controlling`,{isExternal:n,originalEvent:e,sw:t,isUpdate:r.mn})),n||r.on.resolve(t)},r.gn=(i=function(e){var t=e.data,n=e.ports,i=e.source;return l(r.getSW(),(function(){r.an.has(i)&&r.dispatchEvent(new c(`message`,{data:t,originalEvent:e,ports:n,sw:i}))}))},function(){var e=[...arguments];try{return Promise.resolve(i.apply(this,e))}catch(e){return Promise.reject(e)}}),r.sn=e,r.nn=n,navigator.serviceWorker.addEventListener(`message`,r.gn),r}var a,u=t;(a=r).prototype=Object.create(u.prototype),a.prototype.constructor=a,i(a,u);var p=r.prototype;return p.register=function(e){var t=(e===void 0?{}:e).immediate,n=t!==void 0&&t;try{var r=this;return l(function(e,t){var n=e();return n&&n.then?n.then(t):t(n)}((function(){if(!n&&document.readyState!==`complete`)return f(new Promise((function(e){return window.addEventListener(`load`,e)})))}),(function(){return r.mn=!!navigator.serviceWorker.controller,r.dn=r.pn(),l(r.bn(),(function(e){r.fn=e,r.dn&&(r.hn=r.dn,r.en.resolve(r.dn),r.on.resolve(r.dn),r.dn.addEventListener(`statechange`,r.ln,{once:!0}));var t=r.fn.waiting;return t&&s(t.scriptURL,r.sn.toString())&&(r.hn=t,Promise.resolve().then((function(){r.dispatchEvent(new c(`waiting`,{sw:t,wasWaitingBeforeRegister:!0}))})).then((function(){}))),r.hn&&(r.rn.resolve(r.hn),r.an.add(r.hn)),r.fn.addEventListener(`updatefound`,r.cn),navigator.serviceWorker.addEventListener(`controllerchange`,r.yn),r.fn}))})))}catch(e){return Promise.reject(e)}},p.update=function(){try{return this.fn?l(f(this.fn.update())):l()}catch(e){return Promise.reject(e)}},p.getSW=function(){return this.hn===void 0?this.rn.promise:Promise.resolve(this.hn)},p.messageSW=function(t){try{return l(this.getSW(),(function(n){return e(n,t)}))}catch(e){return Promise.reject(e)}},p.messageSkipWaiting=function(){this.fn&&this.fn.waiting&&e(this.fn.waiting,d)},p.pn=function(){var e=navigator.serviceWorker.controller;return e&&s(e.scriptURL,this.sn.toString())?e:void 0},p.bn=function(){try{var e=this;return l(function(e,t){try{var n=e()}catch(e){return t(e)}return n&&n.then?n.then(void 0,t):n}((function(){return l(navigator.serviceWorker.register(e.sn,e.nn),(function(t){return e.un=performance.now(),t}))}),(function(e){throw e})))}catch(e){return Promise.reject(e)}},n(r,[{key:`active`,get:function(){return this.en.promise}},{key:`controlling`,get:function(){return this.on.promise}}])}(function(){function e(){this.Pn=/* @__PURE__ */ new Map}var t=e.prototype;return t.addEventListener=function(e,t){this.jn(e).add(t)},t.removeEventListener=function(e,t){this.jn(e).delete(t)},t.dispatchEvent=function(e){e.target=this;for(var t,n=r(this.jn(e.type));!(t=n()).done;)(0,t.value)(e)},t.jn=function(e){return this.Pn.has(e)||this.Pn.set(e,/* @__PURE__ */ new Set),this.Pn.get(e)},e}());const m=`__shadowClawDefaultTrustedTypesPolicyState`,h=`default`,g=`shadowclaw-sandbox`;function v(){let e=globalThis;return e[m]||(e[m]={initialized:!1,policy:null}),e[m]}function y(){let e=v();if(e.initialized)return;let t=Reflect.get(globalThis,`trustedTypes`);if(t&&typeof t.createPolicy==`function`){e.initialized=!0;try{if(typeof t.getPolicy==`function`){let n=t.getPolicy(h);if(n){e.policy=n;return}}let n=!1;if(typeof t.getPolicyNames==`function`){let e=t.getPolicyNames();Array.isArray(e)&&e.includes(h)&&(n=!0)}if(n){if(typeof t.getPolicy==`function`){let n=t.getPolicy(g);if(n){e.policy=n;return}}e.policy=t.createPolicy(g,{createHTML:e=>e,createScriptURL:e=>e});return}e.policy=t.createPolicy(h,{createHTML:e=>e,createScriptURL:e=>e})}catch{typeof t.getPolicy==`function`&&(e.policy=t.getPolicy(h)??t.getPolicy(g)??null)}}}function b(e){y();let t=v().policy;return!t||typeof t.createScriptURL!=`function`?e:t.createScriptURL(e)}const x=`shadowclaw-oac-reload-attempted`,S=`shadowclaw-sw-update-intent`,C=3e4,w=`shadowclaw-sw-update-failure`;let T=!1,E=!1,D=!1,O=0,k=0,A=!1,j=!1,M=null;async function N(e=5e3){let t=Date.now();for(;Date.now()-t<e;){let e=document.querySelector(`shadow-claw`);if(e&&typeof e.requestDialog==`function`)return e;await new Promise(e=>{globalThis.setTimeout(e,50)})}return null}async function P(){let e=await N();return e?.requestDialog?await e.requestDialog({title:`Update Available`,message:`A new version of ShadowClaw is ready. Reload now to apply the update?`,confirmLabel:`Reload now`,cancelLabel:`Later`}):null}async function F(){let e=await N();e?.requestDialog&&await e.requestDialog({title:`Update Failed`,message:`The app update failed to install automatically. Please try restarting your browser to complete the update.`,confirmLabel:`OK`}),console.warn(`[ShadowClaw] Service worker update failed. Please restart your browser to complete the update.`)}function I(){try{let e=globalThis.sessionStorage?.getItem(S);if(!e)return null;let t=JSON.parse(e);return typeof t.startedAt!=`number`||typeof t.fallbackReloadAttempts!=`number`?null:{startedAt:t.startedAt,fallbackReloadAttempts:t.fallbackReloadAttempts}}catch{return null}}function L(e){try{globalThis.sessionStorage?.setItem(S,JSON.stringify(e))}catch{}}function R(){try{globalThis.sessionStorage?.removeItem(S)}catch{}}function z(){let e=I();return e?Date.now()-e.startedAt<=C||(R(),!1):!1}function B(){U(),L({startedAt:Date.now(),fallbackReloadAttempts:0})}function V(){try{let e=globalThis.sessionStorage?.getItem(w);if(!e)return null;let t=JSON.parse(e);return typeof t.failedAt==`number`?{failedAt:t.failedAt}:null}catch{return null}}function H(e){try{globalThis.sessionStorage?.setItem(w,JSON.stringify(e))}catch{}}function U(){try{globalThis.sessionStorage?.removeItem(w)}catch{}}function W(){let e=V();return e?Date.now()-e.failedAt<=3e5||(U(),!1):!1}function G(){R(),H({failedAt:Date.now()})}function K(){if(T)return;T=!0,M!==null&&(globalThis.clearTimeout(M),M=null);let e=globalThis.location;typeof e?.reload==`function`&&e.reload()}async function q(){if(T||M!==null)return;let e=I();e&&(Date.now()-e.startedAt>C?R():e.fallbackReloadAttempts>=2?(G(),await F()):(L({...e,fallbackReloadAttempts:e.fallbackReloadAttempts+1}),M=globalThis.setTimeout(()=>{K()},3e3)))}async function J(e){e.messageSkipWaiting(),await q()}function Y(){return z()}function X(){if(globalThis.originAgentCluster!==!1)return!1;let e=globalThis.location?.protocol;if(e!==`http:`&&e!==`https:`)return!1;try{return!globalThis.sessionStorage?.getItem(x)}catch{return!1}}function ee(){try{globalThis.sessionStorage?.setItem(x,`1`)}catch{return}K()}function Z(){let e=Y();R(),U(),e?K():j?te():X()&&ee()}async function te(){if(!(A||T)){A=!0;try{await(await N())?.requestDialog?.({title:`Update Installed`,message:`A new version of ShadowClaw was installed. Reload now to use it?`,confirmLabel:`Reload now`,cancelLabel:`Later`})&&K()}finally{A=!1}}}async function Q(e){if(!(!E||D||Date.now()<O)&&!W()){if(z())await J(e);else{D=!0;try{let t=await P();if(t===null)return;t?(B(),await J(e)):O=Date.now()+9e5}finally{D=!1}}}}async function $(e,t){if(!(t&&Date.now()-k<3e4)){k=Date.now();try{await e.update()}catch{}await Q(e)}}function ne(e){globalThis.setInterval(()=>$(e,!1),36e5),globalThis.addEventListener(`focus`,()=>$(e,!0)),document.addEventListener(`visibilitychange`,async()=>{document.visibilityState===`visible`&&await $(e,!0)})}try{if(typeof navigator<`u`&&`serviceWorker`in navigator&&navigator.serviceWorker){y();let e=new p(b(`service-worker.js`),{updateViaCache:`none`});j=!!navigator.serviceWorker.controller,e.addEventListener(`waiting`,async()=>{E=!0,await Q(e)}),e.addEventListener(`controlling`,()=>{Z()}),navigator.serviceWorker.addEventListener(`controllerchange`,()=>{Z()});let t=()=>{globalThis.setTimeout(()=>{e.register(),ne(e)},1e4)};document.readyState===`complete`?t():globalThis.addEventListener(`load`,t)}}catch{}export{K as reloadCurrentPage,Y as shouldReloadAfterControllerChange,X as shouldReloadForOriginAgentCluster};
|
|
@@ -36,4 +36,4 @@ const shadowClawImportScripts = (...urls) => {
|
|
|
36
36
|
|
|
37
37
|
shadowClawNativeImportScripts(...urls.map((url) => shadowClawServiceWorkerTrustedTypesPolicy.createScriptURL(url)));
|
|
38
38
|
};
|
|
39
|
-
if(!self.define){let e,s={};const r=(r,i)=>(r=new URL(r+".js",i).href,s[r]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=r,e.onload=s,document.head.appendChild(e)}else e=r,shadowClawImportScripts(r),s()}).then(()=>{let e=s[r];if(!e)throw new Error(`Module ${r} didn’t register its module`);return e}));self.define=(i,c)=>{const n=e||("document"in self?document.currentScript.src:"")||location.href;if(s[n])return;let o={};const a=e=>r(e,n),t={module:{uri:n},exports:o,require:a};s[n]=Promise.all(i.map(e=>t[e]||a(e))).then(e=>(c(...e),o))}}define(["./workbox-
|
|
39
|
+
if(!self.define){let e,s={};const r=(r,i)=>(r=new URL(r+".js",i).href,s[r]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=r,e.onload=s,document.head.appendChild(e)}else e=r,shadowClawImportScripts(r),s()}).then(()=>{let e=s[r];if(!e)throw new Error(`Module ${r} didn’t register its module`);return e}));self.define=(i,c)=>{const n=e||("document"in self?document.currentScript.src:"")||location.href;if(s[n])return;let o={};const a=e=>r(e,n),t={module:{uri:n},exports:o,require:a};s[n]=Promise.all(i.map(e=>t[e]||a(e))).then(e=>(c(...e),o))}}define(["./workbox-e4022e15"],function(e){"use strict";shadowClawImportScripts("service-worker/fetch-proxy.js","service-worker/push-handler.js","service-worker/share-target.js"),self.addEventListener("message",e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()}),e.clientsClaim(),e.precacheAndRoute([{url:"index.html",revision:"a27799162a2ba34a92e69cf63e66bcb0"},{url:"404.html",revision:"74bc1afc55391d3ff43b99e39de1c72f"},{url:"index.css",revision:"7fd4b888962af18e251009bc1fe8a6ac"},{url:"index.js",revision:"09cebc15d50bad3223a040a119f1a305"},{url:"theme-init.js",revision:"7b5ff0abc56d80fc359785d019c5f9cb"},{url:"manifest.json",revision:"62f8d50f4e8fd710cb66c883f94b1c48"},{url:"favicon.ico",revision:"58fff7908409f246a6228529f384802e"},{url:"assets/icons/96.png",revision:"f91548690416c59ceb56cdb99809b955"},{url:"assets/icons/72.png",revision:"cba8470097972bdbc5d9a06fe67bfcf2"},{url:"assets/icons/512.png",revision:"ec2a8f28b812a0c2665a04cb3c535aab"},{url:"assets/icons/48.png",revision:"29eb2f38df4d5a6385399a04d7bdef00"},{url:"assets/icons/192.png",revision:"bf98264d7a62a47542e577245a292b77"},{url:"assets/icons/180.png",revision:"69128cf857af09292bb06fac0df9938b"},{url:"assets/icons/152.png",revision:"645ae818149dc508cc6146d620120db2"},{url:"assets/icons/128.png",revision:"84678d51d243c104d0c85a4e909fd0a6"},{url:"assets/icons/1024.png",revision:"ae17c81b3b93137df1702de6a9fcdab6"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html"),{allowlist:[/^\/$/,/^(?:\/[^/]+)*\/$/,/^(?:\/[^/]+)*\/(chat|files|pages|tasks|settings)(?:\/.*)?$/],denylist:[/\/assets\//,/\.(png|jpe?g|gif|webp|svg|ico|bmp|avif|mp4|webm|mp3|wav|ogg|pdf|zip|gz|tar|css|js|json|wasm)$/i]})),e.registerRoute(({url:e,sameOrigin:s})=>{if(e.pathname.startsWith("/assets/v86.9pfs/"))return!1;const r=e.hostname.toLowerCase();if("huggingface.co"===r||r.endsWith(".huggingface.co")||r.endsWith(".hf.co")||"hf.co"===r||"hf-mirror.com"===r||r.endsWith(".hf-mirror.com")||"cdnjs.cloudflare.com"===r||"esm.sh"===r||r.endsWith(".esm.sh")||"unpkg.com"===r||"cdn.jsdelivr.net"===r||r.endsWith(".jsdelivr.net")||"esm.run"===r||"openrouter.ai"===r||r.endsWith(".openrouter.ai")||"api.telegram.org"===r)return!1;if(e.pathname.startsWith("/api/control/"))return!1;const i=e.pathname.endsWith("/share/share-target.html"),c="/proxy"===e.pathname||e.pathname.startsWith("/git-proxy/")||i||e.pathname.startsWith("/push/")||e.pathname.startsWith("/schedule/")||e.pathname.startsWith("/telegram/");return(!("localhost"===r||"127.0.0.1"===r||"::1"===r||"[::1]"===r)||!c)&&("boolean"!=typeof s||s)},new e.NetworkFirst({cacheName:"shadow-claw-cache",plugins:[new e.ExpirationPlugin({maxAgeSeconds:31536e3})]}),"GET")});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{$ as e,B as t,H as n,K as r,Q as i,Y as a,o,q as s,r as c,z as l}from"./config-C16fFWtP.js";import{r as u}from"./db-BUuJo1Gf.js";import{t as d}from"./get-config-Bkvl__ZS.js";import{t as f}from"./dist-CeFyqf9k.js";import{Q as p,U as m,a as h,f as g,h as _,p as v,t as y}from"./orchestrator-DBO4NZqd.js";import{t as b}from"./set-config-DSiuMe0k.js";import{s as ee}from"./tools-D-52Zmfc.js";import{t as te}from"./get-group-dir-D--BiEyk.js";import{n as ne}from"./write-group-file-R67DjJ-q.js";import{a as re,r as ie}from"./toast-CtIuHprH.js";import{t as ae}from"./parse-boolean-config-BigJ9U46.js";import{n as oe,r as se,t as ce}from"./constants-DiETpg52.js";import{a as le,l as ue,p as de,r as fe,t as pe}from"./transformers-CQ9ss9rD.js";var x=class extends HTMLElement{static component;static styles;static template;_cleanups=[];constructor(){super();let{template:e,styles:t}=this.constructor;if(!this.shadowRoot){let t=this.attachShadow({mode:`open`});if(e&&Array.isArray(e)){let n=e.map(e=>e.cloneNode(!0));t.append(...n)}}this.shadowRoot&&t instanceof CSSStyleSheet&&(this.shadowRoot.adoptedStyleSheets=[t],this.shadowRoot.querySelectorAll(`style[data-dsd-style], link[rel="stylesheet"]:not([data-theme-stylesheet])`).forEach(e=>e.remove())),this.ensureShadowDialogs()}connectedCallback(){this.ensureShadowDialogs(),this.render()}disconnectedCallback(){this.disposeCleanups()}addCleanup(e){this._cleanups.push(e)}disposeCleanups(){this._cleanups.forEach(e=>e()),this._cleanups=[]}ensureShadowDialogs(){if(!this.shadowRoot)return;let e=this.shadowRoot.querySelectorAll(`shadow-claw-dialog`);for(let t of e)t instanceof HTMLElement&&customElements.upgrade(t),typeof t.ensureDialog==`function`&&t.ensureDialog()}render(){}};let S=!0;const C=new f.subtle.Watcher(()=>{S&&(S=!1,globalThis.queueMicrotask(me))});function me(){S=!0;for(let e of C.getPending())e.get();C.watch()}function w(e){let t,n=new f.Computed(()=>{typeof t==`function`&&t(),t=e()});return C.watch(n),n.get(),()=>{C.unwatch(n),typeof t==`function`&&t(),t=void 0}}function he(){if(typeof window>`u`&&typeof globalThis>`u`)return!1;let e=typeof window<`u`?window:globalThis;return!e.TRANSFORMERS_CONFIG&&!!(e.LanguageModel&&typeof e.LanguageModel.create==`function`||e.ai?.languageModel&&typeof e.ai.languageModel.create==`function`)}async function ge(){if(!he())return!1;let e=typeof window<`u`?window:globalThis,t=e.LanguageModel||e.ai?.languageModel;if(typeof t?.availability==`function`)try{let e=await t.availability();return e!==`unavailable`&&e!==`no`}catch{return!1}return!0}function _e(e){let t=[`ShadowClaw uses the browser-native Prompt API for local, private AI inference.`,`If native browser Prompt API is unavailable, ShadowClaw falls back to running a local ONNX model in your browser (defaulting to Qwen 0.6B).`,`To enable native Prompt API: enable the Prompt API flags and optimization guide under your browser's experimental flags (chrome://flags or edge://flags).`];return e&&e.trim()&&t.push(`Details: ${e.trim()}`),{mode:`info`,title:`Prompt API Setup & Info`,message:`ShadowClaw is configured to use the browser-native Prompt API.`,details:t,confirmLabel:`OK`,autoCloseSeconds:30,links:[{label:`Prompt API Documentation`,href:`https://developer.chrome.com/docs/ai/built-in`}]}}async function ve(e,t,n){let r=await te(e,t),{dirs:i,filename:a}=ne(n),o=r;for(let e of i)o=await o.getDirectoryHandle(e);return await(await o.getFileHandle(a)).getFile()}const T=new class{_file;constructor(){this._file=new f.State(null)}closeFile(){this._file.set(null)}get file(){return this._file.get()}getFile(){return this.file}getPreviewBinaryMimeType(e){return{"3gp":`video/3gpp`,"7z":`application/x-7z-compressed`,aac:`audio/aac`,apng:`image/apng`,avi:`video/x-msvideo`,avif:`image/avif`,bin:`application/octet-stream`,bmp:`image/bmp`,db:`application/vnd.sqlite3`,dll:`application/octet-stream`,dmg:`application/octet-stream`,dylib:`application/octet-stream`,exe:`application/vnd.microsoft.portable-executable`,flac:`audio/flac`,flv:`video/x-flv`,gif:`image/gif`,gz:`application/gzip`,heic:`image/heic`,heif:`image/heif`,ico:`image/x-icon`,iso:`application/octet-stream`,jpeg:`image/jpeg`,jpg:`image/jpeg`,m4a:`audio/mp4`,m4v:`video/mp4`,mkv:`video/x-matroska`,mov:`video/mp4`,mp3:`audio/mpeg`,mp4:`video/mp4`,oga:`audio/ogg`,ogg:`audio/ogg`,ogv:`video/ogg`,png:`image/png`,rar:`application/vnd.rar`,so:`application/octet-stream`,sqlite:`application/vnd.sqlite3`,sqlite3:`application/vnd.sqlite3`,tar:`application/x-tar`,tif:`image/tiff`,tiff:`image/tiff`,wasm:`application/wasm`,wav:`audio/wav`,weba:`audio/webm`,webm:`video/webm`,webp:`image/webp`,wmv:`video/x-ms-wmv`,zip:`application/zip`}[e.toLowerCase().split(`.`).pop()||``]||``}async openFile(e,t,n=o){try{let r=t.split(`/`).pop()||t,i=/\.pdf$/i.test(r),a=this.getPreviewBinaryMimeType(r);if(i){let i=await le(e,n,t);this._file.set({name:r,path:t,groupId:n,content:``,kind:`pdf`,binaryContent:i,mimeType:`application/pdf`});return}if(a){let i=await ve(e,n,t);this._file.set({name:r,path:t,groupId:n,content:``,kind:`binary`,binaryContent:null,nativeFile:i,mimeType:a});return}let o=await ee(e,n,t);this._file.set({name:r,path:t,groupId:n,content:o,kind:`text`,binaryContent:null,mimeType:`text/plain`})}catch(e){throw console.error(`Failed to open file:`,t,e),e}}},E={Light:`light`,Dark:`dark`,System:`system`},D=`shadow-claw-theme`;function O(){return typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`}function k(e){return e===`system`?O():e}function A(e){let t=document.documentElement;e===`dark`?(t.classList.add(`dark-mode`),t.classList.remove(`light-mode`)):(t.classList.add(`light-mode`),t.classList.remove(`dark-mode`));let n=document.querySelector(`shadow-claw`);n&&(e===`dark`?(n.classList.add(`dark-mode`),n.classList.remove(`light-mode`)):(n.classList.add(`light-mode`),n.classList.remove(`dark-mode`))),typeof document<`u`&&document.body&&(e===`dark`?(document.body.classList.add(`dark-mode`),document.body.classList.remove(`light-mode`)):(document.body.classList.add(`light-mode`),document.body.classList.remove(`dark-mode`))),window.dispatchEvent(new CustomEvent(`shadow-claw-theme-change`,{detail:{theme:e}}))}const j=g(D)||`system`,M=k(j);A(M);const N=new class{_resolved;_theme;constructor(){this._theme=new f.State(j),this._resolved=new f.State(M)}getTheme(){return{theme:this.theme,resolved:this.resolved}}init(){typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-color-scheme: dark)`).addEventListener(`change`,()=>{let e=O();_(D,`system`),A(e),this._theme.set(`system`),this._resolved.set(e)}),window.addEventListener(`storage`,e=>{let t=v(D);e.key===t&&e.newValue&&this.setTheme(e.newValue)})}get resolved(){return this._resolved.get()}setTheme(e){let t=k(e);_(D,e),A(t),this._theme.set(e),this._resolved.set(t)}get theme(){return this._theme.get()}};N.init();async function P(e,t=3){for(let n=0;n<t;n++){if(e())return;await new Promise(e=>{requestAnimationFrame(()=>e())})}}function F(e,t){let n=e.sidebarDefaultPage,r=[n,`pages`,`chat`,`tasks`,`files`];if(!t)return n===`pages`||n===`chat`||n===`tasks`||n===`files`?n:`chat`;for(let e of r){if(e===`pages`&&!t.pagesSidebarHidden)return`pages`;if(e===`chat`&&!t.chatSidebarHidden)return`chat`;if(e===`tasks`&&!t.tasksSidebarHidden)return`tasks`;if(e===`files`&&!t.filesSidebarHidden)return`files`}return`pages`}function ye(e,t,n,r){return n&&t===`pages`?e.sidebarDefaultPage===`pages`?`pages`:F(e,r):t}function be(e,t){if(!e||![`chat`,`tasks`,`files`].includes(t))return null;let n=e.querySelector(`[data-page-id="${t}"]`);if(!(n instanceof HTMLElement))return null;let r=n.querySelector(`shadow-claw-chat, shadow-claw-tasks, shadow-claw-files`),i=r instanceof HTMLElement?r.shadowRoot?.querySelector(`[data-terminal-slot]`):null;return i instanceof HTMLElement?i:null}function xe(e,t,n,r){let i=n;if(!i)return;let a=be(e,t);if(!a)return;i.parentElement!==a&&a.appendChild(i);let o=!r;i.hidden=o,o?(a.setAttribute(`hidden`,`hidden`),e?.querySelector(`shadow-claw-terminal`)?.setAttribute(`hidden`,`hidden`)):(a.removeAttribute(`hidden`),e?.querySelector(`shadow-claw-terminal`)?.removeAttribute(`hidden`))}const Se={pages:()=>import(`./shadow-claw-pages-mpDOtNYj.js`),chat:()=>import(`./shadow-claw-chat-BRwRlq-n.js`),conversations:()=>import(`./shadow-claw-conversations-CF_yUfKl.js`),tasks:()=>import(`./shadow-claw-tasks-ChEp1j7x.js`),files:()=>import(`./shadow-claw-files-L6_ioyzh.js`),settings:()=>import(`./shadow-claw-settings-CfFTYTEy.js`),tools:()=>import(`./shadow-claw-tools-BYjUBiJz.js`),channels:()=>import(`./shadow-claw-channels-088vhuWO.js`),terminal:()=>import(`./shadow-claw-terminal-BaoVbOda.js`),"file-viewer":()=>import(`./shadow-claw-file-viewer-DWCejuY3.js`),"pdf-viewer":()=>import(`./shadow-claw-pdf-viewer-DZ_84qJH.js`)},I=/* @__PURE__ */ new Map;async function L(e){let t=I.get(e);if(!t){let n=Se[e];n?(t=n().then(()=>void 0),I.set(e,t)):t=Promise.resolve()}await t}function R(e,t,n,r,i){r&&L(`terminal`).catch(console.error),i!==null&&cancelAnimationFrame(i),i=requestAnimationFrame(()=>{i=null,xe(e,t,n,r)})}function Ce(e){if(!e)return[];let t=[`shadow-claw-chat`,`shadow-claw-tasks`,`shadow-claw-files`,`shadow-claw-pages`,`shadow-claw-settings`,`shadow-claw-tools`,`shadow-claw-channels`],n=[];for(let r of t){let t=e.querySelector(r);if(!(t instanceof HTMLElement))continue;let i=t.shadowRoot?.querySelector(`shadow-claw-page-header`);i instanceof HTMLElement&&n.push(i)}return n}function z(e,t){if(e)for(let n of Ce(e))n.setMainCollapsedOverride?.(t)}function B(e,t,n){if(!e)return;let r=e.querySelector(`.activity-log-toggle`);r instanceof HTMLButtonElement&&(r.hidden=t!==`chat`||n===0)}function we(e){if(!e)return null;let t=e.querySelector(`.page.active`);if(!(t instanceof HTMLElement))return null;let n=t.querySelector(`shadow-claw-chat, shadow-claw-tasks, shadow-claw-files, shadow-claw-pages, shadow-claw-settings, shadow-claw-tools, shadow-claw-channels`);if(!(n instanceof HTMLElement))return null;let r=n.shadowRoot?.querySelector(`shadow-claw-page-header`);return r instanceof HTMLElement?r:null}function V(e,t){if(!e)return;let n=e.querySelector(`.header-main-toggle`);if(!(n instanceof HTMLButtonElement))return;let r=typeof t==`boolean`?t:we(e)?.isMainCollapsed?.()??!1;n.setAttribute(`aria-label`,r?`Show action header`:`Hide action header`),n.setAttribute(`title`,r?`Show action header`:`Hide action header`),n.setAttribute(`aria-pressed`,String(r))}function H(e,t,n,r){if(!e)return;let i=e.querySelector(`.webvm-toggle`);if(!(i instanceof HTMLButtonElement))return;let a=t===`chat`||t===`files`;i.hidden=!a,i.classList.toggle(`hidden`,!a),i.classList.remove(`webvm-toggle--hidden`,`webvm-toggle--visible`,`webvm-toggle--booting`,`webvm-toggle--ready`,`webvm-toggle--error`),a?(i.classList.add(n?`webvm-toggle--visible`:`webvm-toggle--hidden`),r.ready?i.classList.add(`webvm-toggle--ready`):(r.booting||r.bootAttempted)&&i.classList.add(`webvm-toggle--booting`),i.setAttribute(`aria-label`,n?`Hide WebVM terminal`:`Show WebVM terminal`),i.setAttribute(`title`,n?`Hide WebVM terminal`:`Show WebVM terminal`),i.setAttribute(`aria-pressed`,String(n))):i.classList.add(`webvm-toggle--error`)}const U={pages:`shadow-claw-pages`,chat:`shadow-claw-chat`,tasks:`shadow-claw-tasks`,files:`shadow-claw-files`,settings:`shadow-claw-settings`,tools:`shadow-claw-tools`,channels:`shadow-claw-channels`};function W(e,t){let n=U[t];if(!n)return;let r=e.querySelector(`[data-page-id="${t}"]`);!r||r.children.length>0||r.appendChild(document.createElement(n))}function G(e,t,n,r,i,a=!0,o=!0){if(!e)return;let s=ye(r,i,t.pagesSidebarHidden,t),c=!!t.chatSplitViewEnabled&&s!==`chat`,l=e.querySelector(`.main-content`),u=e.querySelector(`.chat-split-resize-handle`);if(c){L(`conversations`).catch(console.error),t.orchestrator?.ensureWorkerReady&&t.orchestrator.ensureWorkerReady(),typeof r?.loadHistory==`function`&&r.loadHistory().catch(console.error);let n=U.chat;n&&customElements.get(n)?W(e,`chat`):L(`chat`).then(()=>{e&&W(e,`chat`)}).catch(console.error),l&&l.classList.add(`split-chat-active`),u&&u.removeAttribute(`hidden`)}else l&&l.classList.remove(`split-chat-active`),u&&u.setAttribute(`hidden`,`hidden`);let d=U[s];d&&customElements.get(d)?(W(e,s),L(s).catch(console.error)):L(s).then(()=>{e&&W(e,s)}).catch(console.error),e.querySelectorAll(`.page`).forEach(e=>{e.classList.remove(`active`)}),e.querySelectorAll(`.nav-item`).forEach(e=>{e.classList.remove(`active`)});let f=e.querySelector(`[data-page-id="${s}"]`);f&&f.classList.add(`active`);let p=e.querySelector(`[data-page="${s}"]`);if(p&&p.classList.add(`active`),t.currentPage=s,a&&n&&r.setActivePage(n,s).catch(console.error),R(e,t.currentPage,t.terminalElement,t.terminalVisible,t.terminalPlacementFrame),z(e,t.headerMainCollapsedOverride),V(e,t.headerMainCollapsedOverride),B(e,t.currentPage,r.activityLog.length),H(e,t.currentPage,t.terminalVisible,t.vmStatus),o){let t=e.querySelector(`.page.active`);if(t){let e=t;typeof e.scrollTo==`function`&&e.scrollTo(0,0)}}if(s===`chat`){L(`conversations`).catch(console.error),t.orchestrator?.ensureWorkerReady&&t.orchestrator.ensureWorkerReady(),typeof r?.loadHistory==`function`&&r.loadHistory().catch(console.error);let n=e.querySelector(`shadow-claw-chat`);n&&typeof n.checkPromptApiOnboarding==`function`&&n.checkPromptApiOnboarding()}if(s===`tasks`&&(t.orchestrator?.ensureWorkerReady&&t.orchestrator.ensureWorkerReady(),n&&typeof r?.loadTasks==`function`&&r.loadTasks(n).catch(console.error)),s===`files`&&n&&r.loadFiles(n).catch(console.error),s===`pages`){let t=e.querySelector(`shadow-claw-pages`);t&&typeof t.renderSelectedPage==`function`&&(t.renderSelectedPage(),typeof t.setupAutoRefreshTimer==`function`&&t.setupAutoRefreshTimer())}}function Te(e,t){if(!e||typeof e.querySelectorAll!=`function`)return;let n=t||(typeof window<`u`&&window.location?.href?new URL(window.location.href):null);if(!n)return;let r=n.pathname.replace(/\/+$/,``)||`/`;e.querySelectorAll(`[slot="sidebar"] a[href], [slot="sidebar-nav"] a[href], [slot="sidebar-content"] a[href], [slot="sidebar-footer"] a[href], .sidebar-custom-sections a[href]`).forEach(e=>{try{let t=e.getAttribute(`href`)||``;if(!t||t.startsWith(`#`)||t.startsWith(`javascript:`)||t.startsWith(`mailto:`)||t.startsWith(`tel:`))return;let i=new URL(t,n.origin);if(i.origin!==n.origin){e.classList.remove(`active`),e.removeAttribute(`aria-current`);return}(i.pathname.replace(/\/+$/,``)||`/`)===r&&(i.hash?i.hash===n.hash:!n.hash)?(e.classList.add(`active`),e.setAttribute(`aria-current`,`page`)):(e.classList.remove(`active`),e.removeAttribute(`aria-current`))}catch{}})}function Ee(e){if(!e||typeof window>`u`)return()=>{};let t=t=>Te(e,t);t();let n=()=>t();window.addEventListener(`popstate`,n,{passive:!0});let r=e=>{let n=e?.detail?.url;if(n)try{t(new URL(n,window.location.href));return}catch{}t()};window.addEventListener(`shadow-claw-feed-scroll`,r),window.addEventListener(`shadow-claw-url-change`,r);let i=window.navigation,a=null,o=null,s=null;i&&typeof i.addEventListener==`function`&&(a=e=>{let n=e?.destination?.url;if(n)try{t(new URL(n));return}catch{}t()},o=()=>{t()},s=()=>{t()},i.addEventListener(`navigate`,a,{passive:!0}),i.addEventListener(`currententrychange`,o,{passive:!0}),i.addEventListener(`navigatesuccess`,s,{passive:!0}));let c=null,l=null,u=typeof window<`u`?window.history:null,d=null;if(u){c=u.replaceState,l=u.pushState;let e=function(e,n,r){let i=c?.apply(this,arguments);try{r?t(new URL(r.toString(),window.location.href)):t()}catch{t()}return i},n=function(e,n,r){let i=l?.apply(this,arguments);try{r?t(new URL(r.toString(),window.location.href)):t()}catch{t()}return i};u.replaceState=e,u.pushState=n,d=()=>{u.replaceState===e&&c&&(u.replaceState=c),u.pushState===n&&l&&(u.pushState=l)}}return()=>{window.removeEventListener(`popstate`,n),window.removeEventListener(`shadow-claw-feed-scroll`,r),window.removeEventListener(`shadow-claw-url-change`,r),i&&typeof i.removeEventListener==`function`&&(a&&i.removeEventListener(`navigate`,a),o&&i.removeEventListener(`currententrychange`,o),s&&i.removeEventListener(`navigatesuccess`,s)),d&&d()}}async function K(e,t,n,r,i,a){let{page:o,groupId:s,path:c,anchor:l}=a;if(!n)return;let u=o?String(o).toLowerCase():``;if(u&&r.file&&(u!==`files`||!c||c!==r.file.path||s&&s!==i.activeGroupId)){let t=e?.querySelector(`shadow-claw-file-viewer`);if(t&&typeof t.requestCloseViewer==`function`){if(!await t.requestCloseViewer())return}else r.closeFile()}if(s&&s!==i.activeGroupId?await i.switchConversation(n,s,u===`chat`):s&&(i.loadHistory(),(u===`tasks`||u===`files`)&&n&&i.loadFiles(n)),u&&(l?G(e,t,n,i,u,!0,!1):G(e,t,n,i,u)),u===`files`&&c){if(/\.[^./]+$/u.test(c))try{await r.openFile(n,c,s||i.activeGroupId),l&&await P(()=>{let t=e?.querySelector(`shadow-claw-file-viewer`);return t&&typeof t.handleAnchorNavigation==`function`?!!t.handleAnchorNavigation(l):!1})}catch(e){console.error(`Failed to open file via route navigation:`,c,e)}else try{await i.setCurrentPath(n,c),r.closeFile()}catch(e){console.error(`Failed to open folder via route navigation:`,c,e)}}if(u===`pages`){if(typeof customElements<`u`&&await customElements.whenDefined(`shadow-claw-pages`),c){let e=s||i.activeGroupId||`br:main`;if(typeof i.isPageAllowed!=`function`||i.isPageAllowed(c,e))await i.setActivePinnedPage(n,{groupId:e,path:c});else{let e=i.effectiveDefaultPage||i.pages&&i.pages[0]||null;await i.setActivePinnedPage(n,e)}}else{let e=i.effectiveDefaultPage||i.pages&&i.pages[0]||null;e&&await i.setActivePinnedPage(n,e)}let t=e?.querySelector(`shadow-claw-pages`);t&&typeof t.renderSelectedPage==`function`&&(await t.renderSelectedPage(),typeof t.setupAutoRefreshTimer==`function`&&t.setupAutoRefreshTimer(),l&&await P(()=>typeof t.handleAnchorNavigation==`function`&&!!t.handleAnchorNavigation(l),10))}Te(t)}async function q(t,r,o,s,c,u){let d=typeof history<`u`?history.state:null,f=typeof document<`u`&&(!!document.getElementById(`postsFeed`)||!!t?.querySelector(`#postsFeed`)||!!(t?.querySelector(`shadow-claw-pages`))?.shadowRoot?.querySelector(`#postsFeed`)||!!document.querySelector(`shadow-claw`)?.shadowRoot?.querySelector(`#postsFeed`)||!!(document.querySelector(`shadow-claw`)?.shadowRoot?.querySelector(`shadow-claw-pages`))?.shadowRoot?.querySelector(`#postsFeed`)||!!document.querySelector(`shadow-claw-pages`)?.shadowRoot?.querySelector(`#postsFeed`));if((d?.inFeedScroll||d?.scrollSpy||d?.suppressRouter)&&f)return;let p=u.pathname,m=n();m!==`/`&&p.startsWith(m)&&(p=`/`+p.slice(m.length));let g=p.split(`/`).filter(Boolean),_=g.length===0||g.length===1&&g[0]===`index.html`,v=c.defaultPinnedPage||i(h()),y=v||c.effectiveDefaultPage;if(_){let n={page:`pages`,groupId:y?.groupId||c.activeGroupId||`br:main`,path:y?.path};if(v){let t=await e(n);if(t&&t!==`/`&&typeof window<`u`&&window.history){let e=l(t);window.history.replaceState(null,``,e)}}await K(t,r,o,s,c,n);return}let b=await a(u,c.activeGroupId);b&&await K(t,r,o,s,c,b)}let De=null;function Oe(e){De=e}function ke(e,t){if(!e)return;let n=t;if(n.navigationType===`reload`)return;let i=typeof n?.destination?.getState==`function`?n.destination.getState():null,a=n.navigationType===`replace`?De:null,o=i||n?.info||a||(n.navigationType===`replace`&&typeof history<`u`?history.state:null);if(o?.inFeedScroll||o?.scrollSpy||o?.suppressRouter)return;let c=n?.destination?.url;if(typeof c!=`string`)return;let l=new URL(c);if(l.origin===window.location.origin&&!r(l.pathname)&&s(l.pathname))return{parsedUrl:l,navigateEvent:n}}function J(e,t){let n=e?.querySelector(`.app-body`);if(!(n instanceof HTMLElement))return Math.max(200,Math.min(560,t));let r=Math.max(200,n.getBoundingClientRect().width-260);return Math.max(200,Math.min(Math.min(560,r),t))}async function Y(e,t){if(e)try{await b(e,c.SIDEBAR_WIDTH,t)}catch{}}function X(e,t){let n=e?.querySelector(`.app-body`);if(!(n instanceof HTMLElement))return;let r=J(e,t);n.style.setProperty(`--sidebar-width`,`${r}px`)}async function Ae(e,t,n,r){if(!e)return;let i=e.querySelector(`.sidebar-resize-handle`);if(!(i instanceof HTMLElement))return;i.setAttribute(`tabindex`,`0`),i.setAttribute(`role`,`separator`),i.setAttribute(`aria-orientation`,`vertical`),i.setAttribute(`aria-label`,`Resize sidebar width`);let a=()=>{let t=e.querySelector(`.app-body`);if(!(t instanceof HTMLElement))return 250;let r=parseFloat(t.style.getPropertyValue(`--sidebar-width`));return Number.isFinite(r)&&r>0?r:n.getBoundingClientRect().width||250},o=()=>{let t=Math.round(J(e,a())),n=Math.round(J(e,2**53-1));i.setAttribute(`aria-valuemin`,`200`),i.setAttribute(`aria-valuemax`,String(n)),i.setAttribute(`aria-valuenow`,String(t))};try{let t=r?await d(r,c.SIDEBAR_WIDTH):void 0;typeof t==`number`&&Number.isFinite(t)&&t>0?X(e,t):X(e,250)}catch{X(e,250)}let s=null,l=0,u=0,f=t=>{if(t.pointerId!==s)return;let n=t.clientX-l;X(e,u+n),o()},p=()=>{if(s===null)return;s=null,i.classList.remove(`active`),document.removeEventListener(`pointermove`,f);let t=e.querySelector(`.app-body`);if(t instanceof HTMLElement){let e=parseFloat(t.style.getPropertyValue(`--sidebar-width`));Number.isFinite(e)&&e>0&&r&&Y(r,e)}},m=e=>{e.pointerId===s&&p()};i.addEventListener(`pointerdown`,e=>{(e.pointerType!==`mouse`||e.button===0||e.button===-1)&&(window.innerWidth<896||(e.preventDefault(),s=e.pointerId,l=e.clientX,u=n.getBoundingClientRect().width,i.classList.add(`active`),i.setPointerCapture(e.pointerId),document.addEventListener(`pointermove`,f)))}),i.addEventListener(`pointerup`,m),i.addEventListener(`pointercancel`,p),i.addEventListener(`dblclick`,()=>{X(e,250),r&&Y(r,250),o()}),i.addEventListener(`keydown`,t=>{if(window.innerWidth<896)return;let n=t.shiftKey?32:12,i=a(),s=null;t.key===`ArrowRight`?s=i+n:t.key===`ArrowLeft`?s=i-n:t.key===`Home`?s=200:t.key===`End`&&(s=J(e,2**53-1)),s!==null&&(t.preventDefault(),X(e,s),o(),r&&Y(r,J(e,a())))}),o(),t.addCleanup(()=>{p(),i.removeEventListener(`pointerup`,m),i.removeEventListener(`pointercancel`,p)})}async function Z(e,t,n){if(!t)return!1;let r=t.querySelector(`.app-dialog`),i=t.querySelector(`.app-dialog__title`),a=t.querySelector(`.app-dialog__message`),o=t.querySelector(`.app-dialog__details`),s=t.querySelector(`.app-dialog__links`),c=t.querySelector(`.app-dialog__btn--confirm`),l=t.querySelector(`.app-dialog__btn--cancel`),u=t.querySelector(`.app-dialog__countdown`);if(!r||!i||!a||!o||!s||!c||!l)return!1;r._autoCloseTimer&&=(clearInterval(r._autoCloseTimer),null),r.open&&r.close(),i.textContent=n.title,a.textContent=n.message,o.replaceChildren(),s.replaceChildren();let d=Array.isArray(n.details)?n.details:[];o.hidden=d.length===0;for(let t of d){let n=e.createElement(`li`);n.textContent=t,o.appendChild(n)}let f=Array.isArray(n.links)?n.links:[];s.hidden=f.length===0;for(let t of f){let n=e.createElement(`a`);n.className=`app-dialog__link`,n.href=t.href,n.rel=`noreferrer`,n.target=`_blank`,n.textContent=t.label,s.appendChild(n)}let p=n.mode||`confirm`,m=n.confirmLabel||(p===`info`?`OK`:`Confirm`);l.textContent=n.cancelLabel||`Cancel`,l.hidden=p===`info`;let h=null,g=()=>{h&&=(clearInterval(h),null),r._autoCloseTimer&&=null};if(typeof n.autoCloseSeconds==`number`&&n.autoCloseSeconds>0){let e=Math.max(1,Math.round(n.autoCloseSeconds));c.textContent=`${m} (${e}s)`,u&&(u.hidden=!1,u.textContent=`Auto-closing in ${e}s...`,u.setAttribute(`role`,`status`),u.setAttribute(`aria-live`,`polite`),u.setAttribute(`aria-atomic`,`true`)),h=setInterval(()=>{e--,e>0?(c.textContent=`${m} (${e}s)`,u&&(u.textContent=`Auto-closing in ${e}s...`)):(g(),r.returnValue=p===`info`?`confirm`:`cancel`,r.close(r.returnValue))},1e3),r._autoCloseTimer=h}else c.textContent=m,u&&(u.hidden=!0,u.textContent=``);return r.returnValue=``,await new Promise(e=>{let t=()=>{g(),r.removeEventListener(`close`,t),e(r.returnValue===`confirm`)};r.addEventListener(`close`,t),r.showModal()})}const je={pages:c.SIDEBAR_PAGES_HIDDEN,chat:c.SIDEBAR_CHAT_HIDDEN,tasks:c.SIDEBAR_TASKS_HIDDEN,files:c.SIDEBAR_FILES_HIDDEN};function Me(e,t,n){if(!e)return;let r=e.querySelector(`.nav-item[data-page="${t}"]`);if(r&&(r.hidden=n,r.setAttribute(`aria-hidden`,String(n))),t===`chat`){let t=e.querySelector(`shadow-claw-conversations`);t&&(t.hidden=n,t.setAttribute(`aria-hidden`,String(n)))}}function Ne(e){switch(e){case`pages`:return`pagesSidebarHidden`;case`chat`:return`chatSidebarHidden`;case`tasks`:return`tasksSidebarHidden`;case`files`:return`filesSidebarHidden`}}async function Pe(e,t,n,r){for(let[n,i]of Object.entries(je)){let a=n,o=!1;if(r)try{let e=await d(r,i);o=ae(e)}catch{o=!1}let s=Ne(a);t[s]=o,Me(e,a,o),a===`chat`&&!o&&await L(`conversations`)}}function Q(e,t,n,r,i,a){switch(i){case`pages`:t.pagesSidebarHidden=a;break;case`chat`:t.chatSidebarHidden=a,a||L(`conversations`).catch(console.error);break;case`tasks`:t.tasksSidebarHidden=a;break;case`files`:t.filesSidebarHidden=a}Me(e,i,a),a&&t.currentPage===i&&G(e,t,r,n,F(n,t))}function Fe(e,t,n,r,i){Q(e,t,n,r,`pages`,i)}function Ie(){let e=window.navigation;return!!(e&&typeof e.addEventListener==`function`&&typeof e.navigate==`function`)}function Le(e,t,n,r={}){let i=r.debounceMs??250,a=r.minSleepDurationMs??1e3,o=0,s=null,c=!1,l=e=>{e&&(c=!0),s!==null&&clearTimeout(s),s=setTimeout(()=>{s=null;let e=c;c=!1,n.ensureAllConnections({force:e})},i)},u=()=>{s!==null&&(clearTimeout(s),s=null),c=!1},d=()=>{if(t.visibilityState===`hidden`)o=Date.now(),u();else if(t.visibilityState===`visible`){let e=o>0&&Date.now()-o>=a;l(e)}},f=e=>{let n=!!(e&&e.persisted);l(n||t.visibilityState===`visible`)},p=()=>{t.visibilityState===`visible`&&l(!1)},m=()=>{l(!0)};return t.addEventListener(`visibilitychange`,d),e.addEventListener(`pageshow`,f),e.addEventListener(`focus`,p),e.addEventListener(`online`,m),()=>{u(),t.removeEventListener(`visibilitychange`,d),e.removeEventListener(`pageshow`,f),e.removeEventListener(`focus`,p),e.removeEventListener(`online`,m)}}function Re(e,t){if(!e)return;let n=e.querySelector(`shadow-claw-chat`);n&&typeof n.setActivityLogCollapsedOverride==`function`&&n.setActivityLogCollapsedOverride(t)}function ze(e,t){if(!e)return;let n=e.querySelector(`.activity-log-toggle`);if(!(n instanceof HTMLButtonElement))return;let r=typeof globalThis.matchMedia==`function`&&!globalThis.matchMedia(`(min-width: 56rem) and (min-height: 401px)`).matches,i=typeof t==`boolean`?t:r;n.setAttribute(`aria-label`,i?`Show activity log`:`Hide activity log`),n.setAttribute(`title`,i?`Show activity log`:`Hide activity log`),n.setAttribute(`aria-pressed`,String(i))}function Be(e){let t=typeof globalThis.matchMedia==`function`&&!globalThis.matchMedia(`(min-width: 56rem) and (min-height: 401px)`).matches;e.activityLogCollapsedOverride=!(typeof e.activityLogCollapsedOverride==`boolean`?e.activityLogCollapsedOverride:t),Re(e.shadowRoot,e.activityLogCollapsedOverride),ze(e.shadowRoot,e.activityLogCollapsedOverride)}function Ve(e){e.headerMainCollapsedOverride=!(typeof e.headerMainCollapsedOverride==`boolean`?e.headerMainCollapsedOverride:we(e.shadowRoot)?.isMainCollapsed?.()??!1),z(e.shadowRoot,e.headerMainCollapsedOverride),V(e.shadowRoot,e.headerMainCollapsedOverride)}function He(e,t){t.terminalVisible=!t.terminalVisible,H(e,t.currentPage,t.terminalVisible,t.vmStatus),R(e,t.currentPage,t.terminalElement,t.terminalVisible,t.terminalPlacementFrame)}function Ue(e,t){e===E.Dark?(t.add(`dark-mode`),t.remove(`light-mode`)):(t.add(`light-mode`),t.remove(`dark-mode`))}function We(e,t){if(!e)return;let n=e.querySelector(`.sun-icon`),r=e.querySelector(`.moon-icon`);n&&r&&(t===E.Dark?(n.style.display=`block`,n.removeAttribute(`hidden`),n.classList.remove(`hidden`),r.style.display=`none`,r.setAttribute(`hidden`,`hidden`),r.classList.add(`hidden`)):(n.style.display=`none`,n.setAttribute(`hidden`,`hidden`),n.classList.add(`hidden`),r.style.display=`block`,r.removeAttribute(`hidden`),r.classList.remove(`hidden`)))}function Ge(e,t,n,i,a,o,s,c,l){if(!n||!e||!t)return;n.querySelectorAll(`.nav-item[data-page]`).forEach(e=>{let r=e;r.addEventListener(`click`,()=>{let e=r.dataset.page||F(o);n.querySelectorAll(`.nav-item`).forEach(e=>e.classList.remove(`active`)),r.classList.add(`active`),setTimeout(()=>{t.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:e},bubbles:!0,composed:!0}))},0)})});let u=n.getElementById(`menu-button`),d=n.querySelector(`.sidebar`);if(u&&d){u.addEventListener(`click`,()=>{d.classList.toggle(`open`)}),n.querySelectorAll(`.nav-item, .settings-btn`).forEach(t=>{t.addEventListener(`click`,()=>{e.innerWidth<896&&d.classList.remove(`open`)})}),d.addEventListener(`click`,t=>{let n=t.target;e.innerWidth<896&&n?.closest(`a, button, .nav-item, .sidebar-link, .sidebar-item`)&&d.classList.remove(`open`)}),typeof i?.addEventListener==`function`&&i.addEventListener(`click`,t=>{let n=t.target;e.innerWidth<896&&n?.closest(`[slot^="sidebar"] a, .sidebar-custom-sections a`)&&d.classList.remove(`open`)}),t.addEventListener(`click`,t=>{let n=t.composedPath();e.innerWidth<896&&d.classList.contains(`open`)&&!n.includes(d)&&!n.includes(u)&&d.classList.remove(`open`)});let r=e.matchMedia?e.matchMedia(`(min-width: 56rem)`):{matches:!1,addEventListener:()=>{},removeEventListener:()=>{}},o=e=>{e.matches&&d.classList.remove(`open`)};o(r),r.addEventListener(`change`,o),Ae(n,i,d,a)}typeof i?.addEventListener==`function`&&i.addEventListener(`click`,t=>{let n=typeof t.composedPath==`function`?t.composedPath():[],i=null;for(let e of n)if(e instanceof HTMLAnchorElement||e&&e.tagName===`A`&&e.href){i=e;break}!i&&t.target?.closest&&(i=t.target.closest(`a[href]`));let a=e.location?.origin||window.location?.origin;if(i&&a){let n=null;try{let e=typeof i.getAttribute==`function`&&i.getAttribute(`href`)||i.href;n=new URL(e,a)}catch{}n&&n.origin===a&&r(n.pathname)&&(t.preventDefault(),typeof e.location?.assign==`function`?e.location.assign(n.href):typeof window.location?.assign==`function`&&window.location.assign(n.href))}});let f=n.querySelector(`[data-action="show-settings"]`);f&&f.addEventListener(`click`,()=>{t.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:`settings`},bubbles:!0,composed:!0}))}),n.querySelector(`.header-main-toggle`)?.addEventListener(`click`,()=>{Ve(i)}),n.querySelector(`.activity-log-toggle`)?.addEventListener(`click`,()=>{Be(i)}),n.addEventListener(`navigate`,e=>{let n=e.detail?.page;n&&t.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:n},bubbles:!0,composed:!0}))}),n.addEventListener(`sidebar-pages-visibility-change`,e=>{Fe(n,i,o,a,!!e.detail?.hidden)}),n.addEventListener(`sidebar-chat-visibility-change`,e=>{Q(n,i,o,a,`chat`,!!e.detail?.hidden)}),n.addEventListener(`sidebar-tasks-visibility-change`,e=>{Q(n,i,o,a,`tasks`,!!e.detail?.hidden)}),n.addEventListener(`sidebar-files-visibility-change`,e=>{Q(n,i,o,a,`files`,!!e.detail?.hidden)}),n.addEventListener(`chat-split-view-change`,e=>{i.chatSplitViewEnabled=!!e.detail?.enabled,G(n,i,a,o,i.currentPage,!1)}),n.addEventListener(`navigate-back`,()=>t.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:`settings`},bubbles:!0,composed:!0})));let p=n.querySelector(`.theme-mode-toggle`);if(p&&p.addEventListener(`click`,()=>{let{resolved:e}=c.getTheme(),t=e===E.Dark?E.Light:E.Dark;c.setTheme(t)}),n.querySelector(`.webvm-toggle`)?.addEventListener(`click`,()=>He(n,i)),n.addEventListener(`shadow-claw-terminal-slot-ready`,()=>{R(n,i.currentPage,i.terminalElement,i.terminalVisible,i.terminalPlacementFrame),z(n,i.headerMainCollapsedOverride),V(n,i.headerMainCollapsedOverride)}),e.addEventListener(`resize`,()=>{i.headerMainCollapsedOverride===null&&V(n,i.headerMainCollapsedOverride)}),t.addEventListener(`shadow-claw-navigate`,i.shadowClawNav),Ie()){if(e.history&&!e.history.__scReplaceStateTracked){let t=e.history.replaceState;e.history.replaceState=function(e,n,r){return Oe(e),t.call(this,e,n,r)},e.history.__scReplaceStateTracked=!0}e.navigation.addEventListener(`navigate`,i.handleNavigationApiNavigate),i.navigationListenerAttached=!0}else i.popstateListener=t=>{let r=t?.state||e.history?.state;r?.inFeedScroll||r?.scrollSpy||r?.suppressRouter||q(n,i,a,s,o,new URL(e.location.href))},e.addEventListener(`popstate`,i.popstateListener),e.addEventListener(`hashchange`,i.popstateListener),t.addEventListener(`click`,i.fallbackClickListener),i.fallbackClickListenerAttached=!0;e.addEventListener(`shadow-claw-theme-change`,e=>{let t=e.detail.theme;We(n,t),Ue(t,i.classList)}),e.addEventListener(`shadow-claw-peer-error`,e=>{let r=e.detail,i=r.remotePeerId,a=r.error;Z(t,n,{mode:`info`,title:`Peer Connection Error`,message:i?`Failed to communicate with peer ${i}: ${a}`:`PeerJS error: ${a}`,confirmLabel:`Dismiss`,autoCloseSeconds:30})});let m=c.resolved;We(n,m),Ue(m,i.classList),i.appLifecycleCleanup&&=(i.appLifecycleCleanup(),null),i.orchestrator&&(i.appLifecycleCleanup=Le(e,t,i.orchestrator)),Ee(i)}function Ke(e){if(e===void 0)return;e.documentElement.classList.remove(oe,`sc-prerender-override`);let t=e.querySelector(`shadow-claw`);t?.removeAttribute(ce),t?.removeAttribute(se)}function qe(e,t){if(t.defaultPrevented||t.button!==0||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey)return null;let n=t.composedPath(),r=null;for(let e of n)if(e instanceof HTMLAnchorElement){r=e;break}if(!r)return null;let i=r.getAttribute(`href`)||``;return!i||i.startsWith(`javascript:`)||i.startsWith(`mailto:`)||i.startsWith(`tel:`)||r.target&&r.target!==`_self`||r.origin!==e.origin||!s(r.pathname)||r.pathname===e.pathname&&r.search===e.search&&r.hash!==e.hash?null:(t.preventDefault(),`${r.pathname}${r.search}${r.hash}`)}async function Je(e,t,n){if(!t)return null;let r=t.querySelector(`.app-prompt-dialog`),i=t.querySelector(`.app-prompt-dialog__message`),a=t.querySelector(`.app-prompt-dialog__input-area`);if(!r||!i||!a)return null;if(r.open&&r.close(),i.textContent=n.question,a.replaceChildren(),Array.isArray(n.options)&&n.options.length>0){let t=e.createElement(`select`);t.className=`app-prompt-dialog__input`,t.name=`prompt-response`;for(let r of n.options){let n=e.createElement(`option`);n.value=r,n.textContent=r,t.appendChild(n)}a.appendChild(t)}else{let t=e.createElement(`input`);t.type=`text`,t.className=`app-prompt-dialog__input`,t.name=`prompt-response`,t.placeholder=`Enter your response...`,t.autocomplete=`off`,a.appendChild(t),setTimeout(()=>t.focus(),50)}return r.returnValue=``,await new Promise(e=>{let t=()=>{if(r.removeEventListener(`close`,t),r.returnValue===`submit`){let t=a.querySelector(`[name='prompt-response']`);e(t?t.value:null)}else e(null)};r.addEventListener(`close`,t),r.showModal()})}async function Ye(e,t,n,r){let i=await Je(e,t,r);m(n.orchestrator,r.id,i)}async function Xe(e,t,n,r){let i=r.path,a=r.groupId||t.activeGroupId;if(i&&e)for(let t=0;t<=3;t++)try{await n.openFile(e,i,a);return}catch(e){let n=e instanceof DOMException&&e.name===`NotFoundError`;if(t<3&&n){await new Promise(e=>setTimeout(e,150*(t+1)));continue}let r=e instanceof Error?e.message:String(e);ie(`Failed to open file from tool: ${r}`,5e3);return}}async function Ze(e,t,n){n?.providerId===`llamafile`?await Z(e,t,de(n.reason)):n?.providerId===`transformers_js_local`?await Z(e,t,pe(n.reason)):n?.providerId===`prompt_api`?await Z(e,t,_e(n.reason)):n?.providerId&&n.helpType&&await Z(e,t,fe(n.providerId,n.helpType,n.reason))}async function Qe(e,t,n,r,i,a){if(r&&a?.roomId&&a?.hostPeerId&&await Z(e,t,{mode:`confirm`,title:`Room invitation`,message:`${a.fromAlias||a.fromPeerId} invited you to join "${a.roomName}".`,confirmLabel:`Join`,cancelLabel:`Decline`}))try{ue(n.orchestrator,a.roomId,a.hostPeerId,a.roomName),await i.switchConversation(r,`room:${a.roomId}`),G(t,n,r,i,`chat`),re(`Joined room "${a.roomName}"`)}catch(e){let t=e instanceof Error?e.message:String(e);ie(`Failed to join room: ${t}`,6e3)}}function $e(e,t,n){let r=n.useTrailingSlash&&!t.includes(`#`)?t.endsWith(`/`)?t:t+`/`:t;n.replace?e.replaceState({},``,r):e.pushState({},``,r)}async function et(e,n,r,i,a,o,s={replace:!1}){let c=t(o),u=l(c),d=typeof window<`u`&&window.location?`${window.location.pathname}${window.location.search}${window.location.hash}`:``;d&&u===d?await K(e,n,r,i,a,o):Ie()?window.navigation.navigate(u,{history:s.replace?`replace`:`push`}):(u!==window.location.pathname&&$e(globalThis.history,u,{...s,useTrailingSlash:!1}),await K(e,n,r,i,a,o))}function tt(e){let t=String(e||`chat`).toLowerCase();return t===`chat`||t===`files`||t===`tasks`||t===`pages`||t===`settings`||t===`tools`||t===`channels`?t:`chat`}async function nt(e,t,n,r,i,a){let o=a.detail;o&&await et(e,t,n,r,i,{page:tt(String(o.page||`chat`)),groupId:o.groupId,path:o.path,anchor:o.anchor})}async function rt(e,t,n,r){await Pe(e,t,n,r)}function it(e,t,n,r){e&&(w(()=>{let t=T.file;t&&(L(`file-viewer`).then(()=>{if(e&&!e.querySelector(`shadow-claw-file-viewer`)){let t=e.querySelector(`.main-content`);if(t){let e=document.createElement(`shadow-claw-file-viewer`);e.id=`file-viewer`,t.appendChild(e)}}}).catch(console.error),t.kind===`pdf`&&L(`pdf-viewer`).catch(console.error))}),w(()=>{let e=r.state;e===`idle`&&(t.previousOrchestratorState===`thinking`||t.previousOrchestratorState===`responding`)&&re(`Response complete`,2500),t.previousOrchestratorState=e}),w(()=>{let i=r.activePage;i!==t.currentPage&&G(e,t,n,r,i,!1)}),w(()=>{r.activityLog,B(e,t.currentPage,r.activityLog.length)}))}const at=new CSSStyleSheet;at.replaceSync(`*,
|
|
1
|
+
import{$ as e,B as t,H as n,K as r,Q as i,Y as a,o,q as s,r as c,z as l}from"./config-C16fFWtP.js";import{r as u}from"./db-BUuJo1Gf.js";import{t as d}from"./get-config-Bkvl__ZS.js";import{t as f}from"./dist-CeFyqf9k.js";import{Q as p,U as m,a as h,f as g,h as _,p as v,t as y}from"./orchestrator-Li1UAsv7.js";import{t as b}from"./set-config-DSiuMe0k.js";import{s as ee}from"./tools-D-52Zmfc.js";import{t as te}from"./get-group-dir-D--BiEyk.js";import{n as ne}from"./write-group-file-R67DjJ-q.js";import{a as re,r as ie}from"./toast-CtIuHprH.js";import{t as ae}from"./parse-boolean-config-BigJ9U46.js";import{n as oe,r as se,t as ce}from"./constants-DiETpg52.js";import{a as le,l as ue,p as de,r as fe,t as pe}from"./transformers-CQ9ss9rD.js";var x=class extends HTMLElement{static component;static styles;static template;_cleanups=[];constructor(){super();let{template:e,styles:t}=this.constructor;if(!this.shadowRoot){let t=this.attachShadow({mode:`open`});if(e&&Array.isArray(e)){let n=e.map(e=>e.cloneNode(!0));t.append(...n)}}this.shadowRoot&&t instanceof CSSStyleSheet&&(this.shadowRoot.adoptedStyleSheets=[t],this.shadowRoot.querySelectorAll(`style[data-dsd-style], link[rel="stylesheet"]:not([data-theme-stylesheet])`).forEach(e=>e.remove())),this.ensureShadowDialogs()}connectedCallback(){this.ensureShadowDialogs(),this.render()}disconnectedCallback(){this.disposeCleanups()}addCleanup(e){this._cleanups.push(e)}disposeCleanups(){this._cleanups.forEach(e=>e()),this._cleanups=[]}ensureShadowDialogs(){if(!this.shadowRoot)return;let e=this.shadowRoot.querySelectorAll(`shadow-claw-dialog`);for(let t of e)t instanceof HTMLElement&&customElements.upgrade(t),typeof t.ensureDialog==`function`&&t.ensureDialog()}render(){}};let S=!0;const C=new f.subtle.Watcher(()=>{S&&(S=!1,globalThis.queueMicrotask(me))});function me(){S=!0;for(let e of C.getPending())e.get();C.watch()}function w(e){let t,n=new f.Computed(()=>{typeof t==`function`&&t(),t=e()});return C.watch(n),n.get(),()=>{C.unwatch(n),typeof t==`function`&&t(),t=void 0}}function he(){if(typeof window>`u`&&typeof globalThis>`u`)return!1;let e=typeof window<`u`?window:globalThis;return!e.TRANSFORMERS_CONFIG&&!!(e.LanguageModel&&typeof e.LanguageModel.create==`function`||e.ai?.languageModel&&typeof e.ai.languageModel.create==`function`)}async function ge(){if(!he())return!1;let e=typeof window<`u`?window:globalThis,t=e.LanguageModel||e.ai?.languageModel;if(typeof t?.availability==`function`)try{let e=await t.availability();return e!==`unavailable`&&e!==`no`}catch{return!1}return!0}function _e(e){let t=[`ShadowClaw uses the browser-native Prompt API for local, private AI inference.`,`If native browser Prompt API is unavailable, ShadowClaw falls back to running a local ONNX model in your browser (defaulting to Qwen 0.6B).`,`To enable native Prompt API: enable the Prompt API flags and optimization guide under your browser's experimental flags (chrome://flags or edge://flags).`];return e&&e.trim()&&t.push(`Details: ${e.trim()}`),{mode:`info`,title:`Prompt API Setup & Info`,message:`ShadowClaw is configured to use the browser-native Prompt API.`,details:t,confirmLabel:`OK`,autoCloseSeconds:30,links:[{label:`Prompt API Documentation`,href:`https://developer.chrome.com/docs/ai/built-in`}]}}async function ve(e,t,n){let r=await te(e,t),{dirs:i,filename:a}=ne(n),o=r;for(let e of i)o=await o.getDirectoryHandle(e);return await(await o.getFileHandle(a)).getFile()}const T=new class{_file;constructor(){this._file=new f.State(null)}closeFile(){this._file.set(null)}get file(){return this._file.get()}getFile(){return this.file}getPreviewBinaryMimeType(e){return{"3gp":`video/3gpp`,"7z":`application/x-7z-compressed`,aac:`audio/aac`,apng:`image/apng`,avi:`video/x-msvideo`,avif:`image/avif`,bin:`application/octet-stream`,bmp:`image/bmp`,db:`application/vnd.sqlite3`,dll:`application/octet-stream`,dmg:`application/octet-stream`,dylib:`application/octet-stream`,exe:`application/vnd.microsoft.portable-executable`,flac:`audio/flac`,flv:`video/x-flv`,gif:`image/gif`,gz:`application/gzip`,heic:`image/heic`,heif:`image/heif`,ico:`image/x-icon`,iso:`application/octet-stream`,jpeg:`image/jpeg`,jpg:`image/jpeg`,m4a:`audio/mp4`,m4v:`video/mp4`,mkv:`video/x-matroska`,mov:`video/mp4`,mp3:`audio/mpeg`,mp4:`video/mp4`,oga:`audio/ogg`,ogg:`audio/ogg`,ogv:`video/ogg`,png:`image/png`,rar:`application/vnd.rar`,so:`application/octet-stream`,sqlite:`application/vnd.sqlite3`,sqlite3:`application/vnd.sqlite3`,tar:`application/x-tar`,tif:`image/tiff`,tiff:`image/tiff`,wasm:`application/wasm`,wav:`audio/wav`,weba:`audio/webm`,webm:`video/webm`,webp:`image/webp`,wmv:`video/x-ms-wmv`,zip:`application/zip`}[e.toLowerCase().split(`.`).pop()||``]||``}async openFile(e,t,n=o){try{let r=t.split(`/`).pop()||t,i=/\.pdf$/i.test(r),a=this.getPreviewBinaryMimeType(r);if(i){let i=await le(e,n,t);this._file.set({name:r,path:t,groupId:n,content:``,kind:`pdf`,binaryContent:i,mimeType:`application/pdf`});return}if(a){let i=await ve(e,n,t);this._file.set({name:r,path:t,groupId:n,content:``,kind:`binary`,binaryContent:null,nativeFile:i,mimeType:a});return}let o=await ee(e,n,t);this._file.set({name:r,path:t,groupId:n,content:o,kind:`text`,binaryContent:null,mimeType:`text/plain`})}catch(e){throw console.error(`Failed to open file:`,t,e),e}}},E={Light:`light`,Dark:`dark`,System:`system`},D=`shadow-claw-theme`;function O(){return typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`}function k(e){return e===`system`?O():e}function A(e){let t=document.documentElement;e===`dark`?(t.classList.add(`dark-mode`),t.classList.remove(`light-mode`)):(t.classList.add(`light-mode`),t.classList.remove(`dark-mode`));let n=document.querySelector(`shadow-claw`);n&&(e===`dark`?(n.classList.add(`dark-mode`),n.classList.remove(`light-mode`)):(n.classList.add(`light-mode`),n.classList.remove(`dark-mode`))),typeof document<`u`&&document.body&&(e===`dark`?(document.body.classList.add(`dark-mode`),document.body.classList.remove(`light-mode`)):(document.body.classList.add(`light-mode`),document.body.classList.remove(`dark-mode`))),window.dispatchEvent(new CustomEvent(`shadow-claw-theme-change`,{detail:{theme:e}}))}const j=g(D)||`system`,M=k(j);A(M);const N=new class{_resolved;_theme;constructor(){this._theme=new f.State(j),this._resolved=new f.State(M)}getTheme(){return{theme:this.theme,resolved:this.resolved}}init(){typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-color-scheme: dark)`).addEventListener(`change`,()=>{let e=O();_(D,`system`),A(e),this._theme.set(`system`),this._resolved.set(e)}),window.addEventListener(`storage`,e=>{let t=v(D);e.key===t&&e.newValue&&this.setTheme(e.newValue)})}get resolved(){return this._resolved.get()}setTheme(e){let t=k(e);_(D,e),A(t),this._theme.set(e),this._resolved.set(t)}get theme(){return this._theme.get()}};N.init();async function P(e,t=3){for(let n=0;n<t;n++){if(e())return;await new Promise(e=>{requestAnimationFrame(()=>e())})}}function F(e,t){let n=e.sidebarDefaultPage,r=[n,`pages`,`chat`,`tasks`,`files`];if(!t)return n===`pages`||n===`chat`||n===`tasks`||n===`files`?n:`chat`;for(let e of r){if(e===`pages`&&!t.pagesSidebarHidden)return`pages`;if(e===`chat`&&!t.chatSidebarHidden)return`chat`;if(e===`tasks`&&!t.tasksSidebarHidden)return`tasks`;if(e===`files`&&!t.filesSidebarHidden)return`files`}return`pages`}function ye(e,t,n,r){return n&&t===`pages`?e.sidebarDefaultPage===`pages`?`pages`:F(e,r):t}function be(e,t){if(!e||![`chat`,`tasks`,`files`].includes(t))return null;let n=e.querySelector(`[data-page-id="${t}"]`);if(!(n instanceof HTMLElement))return null;let r=n.querySelector(`shadow-claw-chat, shadow-claw-tasks, shadow-claw-files`),i=r instanceof HTMLElement?r.shadowRoot?.querySelector(`[data-terminal-slot]`):null;return i instanceof HTMLElement?i:null}function xe(e,t,n,r){let i=n;if(!i)return;let a=be(e,t);if(!a)return;i.parentElement!==a&&a.appendChild(i);let o=!r;i.hidden=o,o?(a.setAttribute(`hidden`,`hidden`),e?.querySelector(`shadow-claw-terminal`)?.setAttribute(`hidden`,`hidden`)):(a.removeAttribute(`hidden`),e?.querySelector(`shadow-claw-terminal`)?.removeAttribute(`hidden`))}const Se={pages:()=>import(`./shadow-claw-pages-D_oPyDca.js`),chat:()=>import(`./shadow-claw-chat-N5jMsXZZ.js`),conversations:()=>import(`./shadow-claw-conversations-wAR06_ya.js`),tasks:()=>import(`./shadow-claw-tasks-BdP7lmvu.js`),files:()=>import(`./shadow-claw-files-CnvkCbd4.js`),settings:()=>import(`./shadow-claw-settings-DkUhvxVr.js`),tools:()=>import(`./shadow-claw-tools-BwwY53Lr.js`),channels:()=>import(`./shadow-claw-channels-BiSfLvWv.js`),terminal:()=>import(`./shadow-claw-terminal-DVHX7Fsu.js`),"file-viewer":()=>import(`./shadow-claw-file-viewer-sZN_FCDW.js`),"pdf-viewer":()=>import(`./shadow-claw-pdf-viewer-CrU4wqRq.js`)},I=/* @__PURE__ */ new Map;async function L(e){let t=I.get(e);if(!t){let n=Se[e];n?(t=n().then(()=>void 0),I.set(e,t)):t=Promise.resolve()}await t}function R(e,t,n,r,i){r&&L(`terminal`).catch(console.error),i!==null&&cancelAnimationFrame(i),i=requestAnimationFrame(()=>{i=null,xe(e,t,n,r)})}function Ce(e){if(!e)return[];let t=[`shadow-claw-chat`,`shadow-claw-tasks`,`shadow-claw-files`,`shadow-claw-pages`,`shadow-claw-settings`,`shadow-claw-tools`,`shadow-claw-channels`],n=[];for(let r of t){let t=e.querySelector(r);if(!(t instanceof HTMLElement))continue;let i=t.shadowRoot?.querySelector(`shadow-claw-page-header`);i instanceof HTMLElement&&n.push(i)}return n}function z(e,t){if(e)for(let n of Ce(e))n.setMainCollapsedOverride?.(t)}function B(e,t,n){if(!e)return;let r=e.querySelector(`.activity-log-toggle`);r instanceof HTMLButtonElement&&(r.hidden=t!==`chat`||n===0)}function we(e){if(!e)return null;let t=e.querySelector(`.page.active`);if(!(t instanceof HTMLElement))return null;let n=t.querySelector(`shadow-claw-chat, shadow-claw-tasks, shadow-claw-files, shadow-claw-pages, shadow-claw-settings, shadow-claw-tools, shadow-claw-channels`);if(!(n instanceof HTMLElement))return null;let r=n.shadowRoot?.querySelector(`shadow-claw-page-header`);return r instanceof HTMLElement?r:null}function V(e,t){if(!e)return;let n=e.querySelector(`.header-main-toggle`);if(!(n instanceof HTMLButtonElement))return;let r=typeof t==`boolean`?t:we(e)?.isMainCollapsed?.()??!1;n.setAttribute(`aria-label`,r?`Show action header`:`Hide action header`),n.setAttribute(`title`,r?`Show action header`:`Hide action header`),n.setAttribute(`aria-pressed`,String(r))}function H(e,t,n,r){if(!e)return;let i=e.querySelector(`.webvm-toggle`);if(!(i instanceof HTMLButtonElement))return;let a=t===`chat`||t===`files`;i.hidden=!a,i.classList.toggle(`hidden`,!a),i.classList.remove(`webvm-toggle--hidden`,`webvm-toggle--visible`,`webvm-toggle--booting`,`webvm-toggle--ready`,`webvm-toggle--error`),a?(i.classList.add(n?`webvm-toggle--visible`:`webvm-toggle--hidden`),r.ready?i.classList.add(`webvm-toggle--ready`):(r.booting||r.bootAttempted)&&i.classList.add(`webvm-toggle--booting`),i.setAttribute(`aria-label`,n?`Hide WebVM terminal`:`Show WebVM terminal`),i.setAttribute(`title`,n?`Hide WebVM terminal`:`Show WebVM terminal`),i.setAttribute(`aria-pressed`,String(n))):i.classList.add(`webvm-toggle--error`)}const U={pages:`shadow-claw-pages`,chat:`shadow-claw-chat`,tasks:`shadow-claw-tasks`,files:`shadow-claw-files`,settings:`shadow-claw-settings`,tools:`shadow-claw-tools`,channels:`shadow-claw-channels`};function W(e,t){let n=U[t];if(!n)return;let r=e.querySelector(`[data-page-id="${t}"]`);!r||r.children.length>0||r.appendChild(document.createElement(n))}function G(e,t,n,r,i,a=!0,o=!0){if(!e)return;let s=ye(r,i,t.pagesSidebarHidden,t),c=!!t.chatSplitViewEnabled&&s!==`chat`,l=e.querySelector(`.main-content`),u=e.querySelector(`.chat-split-resize-handle`);if(c){L(`conversations`).catch(console.error),t.orchestrator?.ensureWorkerReady&&t.orchestrator.ensureWorkerReady(),typeof r?.loadHistory==`function`&&r.loadHistory().catch(console.error);let n=U.chat;n&&customElements.get(n)?W(e,`chat`):L(`chat`).then(()=>{e&&W(e,`chat`)}).catch(console.error),l&&l.classList.add(`split-chat-active`),u&&u.removeAttribute(`hidden`)}else l&&l.classList.remove(`split-chat-active`),u&&u.setAttribute(`hidden`,`hidden`);let d=U[s];d&&customElements.get(d)?(W(e,s),L(s).catch(console.error)):L(s).then(()=>{e&&W(e,s)}).catch(console.error),e.querySelectorAll(`.page`).forEach(e=>{e.classList.remove(`active`)}),e.querySelectorAll(`.nav-item`).forEach(e=>{e.classList.remove(`active`)});let f=e.querySelector(`[data-page-id="${s}"]`);f&&f.classList.add(`active`);let p=e.querySelector(`[data-page="${s}"]`);if(p&&p.classList.add(`active`),t.currentPage=s,a&&n&&r.setActivePage(n,s).catch(console.error),R(e,t.currentPage,t.terminalElement,t.terminalVisible,t.terminalPlacementFrame),z(e,t.headerMainCollapsedOverride),V(e,t.headerMainCollapsedOverride),B(e,t.currentPage,r.activityLog.length),H(e,t.currentPage,t.terminalVisible,t.vmStatus),o){let t=e.querySelector(`.page.active`);if(t){let e=t;typeof e.scrollTo==`function`&&e.scrollTo(0,0)}}if(s===`chat`){L(`conversations`).catch(console.error),t.orchestrator?.ensureWorkerReady&&t.orchestrator.ensureWorkerReady(),typeof r?.loadHistory==`function`&&r.loadHistory().catch(console.error);let n=e.querySelector(`shadow-claw-chat`);n&&typeof n.checkPromptApiOnboarding==`function`&&n.checkPromptApiOnboarding()}if(s===`tasks`&&(t.orchestrator?.ensureWorkerReady&&t.orchestrator.ensureWorkerReady(),n&&typeof r?.loadTasks==`function`&&r.loadTasks(n).catch(console.error)),s===`files`&&n&&r.loadFiles(n).catch(console.error),s===`pages`){let t=e.querySelector(`shadow-claw-pages`);t&&typeof t.renderSelectedPage==`function`&&(t.renderSelectedPage(),typeof t.setupAutoRefreshTimer==`function`&&t.setupAutoRefreshTimer())}}function Te(e,t){if(!e||typeof e.querySelectorAll!=`function`)return;let n=t||(typeof window<`u`&&window.location?.href?new URL(window.location.href):null);if(!n)return;let r=n.pathname.replace(/\/+$/,``)||`/`;e.querySelectorAll(`[slot="sidebar"] a[href], [slot="sidebar-nav"] a[href], [slot="sidebar-content"] a[href], [slot="sidebar-footer"] a[href], .sidebar-custom-sections a[href]`).forEach(e=>{try{let t=e.getAttribute(`href`)||``;if(!t||t.startsWith(`#`)||t.startsWith(`javascript:`)||t.startsWith(`mailto:`)||t.startsWith(`tel:`))return;let i=new URL(t,n.origin);if(i.origin!==n.origin){e.classList.remove(`active`),e.removeAttribute(`aria-current`);return}(i.pathname.replace(/\/+$/,``)||`/`)===r&&(i.hash?i.hash===n.hash:!n.hash)?(e.classList.add(`active`),e.setAttribute(`aria-current`,`page`)):(e.classList.remove(`active`),e.removeAttribute(`aria-current`))}catch{}})}function Ee(e){if(!e||typeof window>`u`)return()=>{};let t=t=>Te(e,t);t();let n=()=>t();window.addEventListener(`popstate`,n,{passive:!0});let r=e=>{let n=e?.detail?.url;if(n)try{t(new URL(n,window.location.href));return}catch{}t()};window.addEventListener(`shadow-claw-feed-scroll`,r),window.addEventListener(`shadow-claw-url-change`,r);let i=window.navigation,a=null,o=null,s=null;i&&typeof i.addEventListener==`function`&&(a=e=>{let n=e?.destination?.url;if(n)try{t(new URL(n));return}catch{}t()},o=()=>{t()},s=()=>{t()},i.addEventListener(`navigate`,a,{passive:!0}),i.addEventListener(`currententrychange`,o,{passive:!0}),i.addEventListener(`navigatesuccess`,s,{passive:!0}));let c=null,l=null,u=typeof window<`u`?window.history:null,d=null;if(u){c=u.replaceState,l=u.pushState;let e=function(e,n,r){let i=c?.apply(this,arguments);try{r?t(new URL(r.toString(),window.location.href)):t()}catch{t()}return i},n=function(e,n,r){let i=l?.apply(this,arguments);try{r?t(new URL(r.toString(),window.location.href)):t()}catch{t()}return i};u.replaceState=e,u.pushState=n,d=()=>{u.replaceState===e&&c&&(u.replaceState=c),u.pushState===n&&l&&(u.pushState=l)}}return()=>{window.removeEventListener(`popstate`,n),window.removeEventListener(`shadow-claw-feed-scroll`,r),window.removeEventListener(`shadow-claw-url-change`,r),i&&typeof i.removeEventListener==`function`&&(a&&i.removeEventListener(`navigate`,a),o&&i.removeEventListener(`currententrychange`,o),s&&i.removeEventListener(`navigatesuccess`,s)),d&&d()}}async function K(e,t,n,r,i,a){let{page:o,groupId:s,path:c,anchor:l}=a;if(!n)return;let u=o?String(o).toLowerCase():``;if(u&&r.file&&(u!==`files`||!c||c!==r.file.path||s&&s!==i.activeGroupId)){let t=e?.querySelector(`shadow-claw-file-viewer`);if(t&&typeof t.requestCloseViewer==`function`){if(!await t.requestCloseViewer())return}else r.closeFile()}if(s&&s!==i.activeGroupId?await i.switchConversation(n,s,u===`chat`):s&&(i.loadHistory(),(u===`tasks`||u===`files`)&&n&&i.loadFiles(n)),u&&(l?G(e,t,n,i,u,!0,!1):G(e,t,n,i,u)),u===`files`&&c){if(/\.[^./]+$/u.test(c))try{await r.openFile(n,c,s||i.activeGroupId),l&&await P(()=>{let t=e?.querySelector(`shadow-claw-file-viewer`);return t&&typeof t.handleAnchorNavigation==`function`?!!t.handleAnchorNavigation(l):!1})}catch(e){console.error(`Failed to open file via route navigation:`,c,e)}else try{await i.setCurrentPath(n,c),r.closeFile()}catch(e){console.error(`Failed to open folder via route navigation:`,c,e)}}if(u===`pages`){if(typeof customElements<`u`&&await customElements.whenDefined(`shadow-claw-pages`),c){let e=s||i.activeGroupId||`br:main`;if(typeof i.isPageAllowed!=`function`||i.isPageAllowed(c,e))await i.setActivePinnedPage(n,{groupId:e,path:c});else{let e=i.effectiveDefaultPage||i.pages&&i.pages[0]||null;await i.setActivePinnedPage(n,e)}}else{let e=i.effectiveDefaultPage||i.pages&&i.pages[0]||null;e&&await i.setActivePinnedPage(n,e)}let t=e?.querySelector(`shadow-claw-pages`);t&&typeof t.renderSelectedPage==`function`&&(await t.renderSelectedPage(),typeof t.setupAutoRefreshTimer==`function`&&t.setupAutoRefreshTimer(),l&&await P(()=>typeof t.handleAnchorNavigation==`function`&&!!t.handleAnchorNavigation(l),10))}Te(t)}async function q(t,r,o,s,c,u){let d=typeof history<`u`?history.state:null,f=typeof document<`u`&&(!!document.getElementById(`postsFeed`)||!!t?.querySelector(`#postsFeed`)||!!(t?.querySelector(`shadow-claw-pages`))?.shadowRoot?.querySelector(`#postsFeed`)||!!document.querySelector(`shadow-claw`)?.shadowRoot?.querySelector(`#postsFeed`)||!!(document.querySelector(`shadow-claw`)?.shadowRoot?.querySelector(`shadow-claw-pages`))?.shadowRoot?.querySelector(`#postsFeed`)||!!document.querySelector(`shadow-claw-pages`)?.shadowRoot?.querySelector(`#postsFeed`));if((d?.inFeedScroll||d?.scrollSpy||d?.suppressRouter)&&f)return;let p=u.pathname,m=n();m!==`/`&&p.startsWith(m)&&(p=`/`+p.slice(m.length));let g=p.split(`/`).filter(Boolean),_=g.length===0||g.length===1&&g[0]===`index.html`,v=c.defaultPinnedPage||i(h()),y=v||c.effectiveDefaultPage;if(_){let n={page:`pages`,groupId:y?.groupId||c.activeGroupId||`br:main`,path:y?.path};if(v){let t=await e(n);if(t&&t!==`/`&&typeof window<`u`&&window.history){let e=l(t);window.history.replaceState(null,``,e)}}await K(t,r,o,s,c,n);return}let b=await a(u,c.activeGroupId);b&&await K(t,r,o,s,c,b)}let De=null;function Oe(e){De=e}function ke(e,t){if(!e)return;let n=t;if(n.navigationType===`reload`)return;let i=typeof n?.destination?.getState==`function`?n.destination.getState():null,a=n.navigationType===`replace`?De:null,o=i||n?.info||a||(n.navigationType===`replace`&&typeof history<`u`?history.state:null);if(o?.inFeedScroll||o?.scrollSpy||o?.suppressRouter)return;let c=n?.destination?.url;if(typeof c!=`string`)return;let l=new URL(c);if(l.origin===window.location.origin&&!r(l.pathname)&&s(l.pathname))return{parsedUrl:l,navigateEvent:n}}function J(e,t){let n=e?.querySelector(`.app-body`);if(!(n instanceof HTMLElement))return Math.max(200,Math.min(560,t));let r=Math.max(200,n.getBoundingClientRect().width-260);return Math.max(200,Math.min(Math.min(560,r),t))}async function Y(e,t){if(e)try{await b(e,c.SIDEBAR_WIDTH,t)}catch{}}function X(e,t){let n=e?.querySelector(`.app-body`);if(!(n instanceof HTMLElement))return;let r=J(e,t);n.style.setProperty(`--sidebar-width`,`${r}px`)}async function Ae(e,t,n,r){if(!e)return;let i=e.querySelector(`.sidebar-resize-handle`);if(!(i instanceof HTMLElement))return;i.setAttribute(`tabindex`,`0`),i.setAttribute(`role`,`separator`),i.setAttribute(`aria-orientation`,`vertical`),i.setAttribute(`aria-label`,`Resize sidebar width`);let a=()=>{let t=e.querySelector(`.app-body`);if(!(t instanceof HTMLElement))return 250;let r=parseFloat(t.style.getPropertyValue(`--sidebar-width`));return Number.isFinite(r)&&r>0?r:n.getBoundingClientRect().width||250},o=()=>{let t=Math.round(J(e,a())),n=Math.round(J(e,2**53-1));i.setAttribute(`aria-valuemin`,`200`),i.setAttribute(`aria-valuemax`,String(n)),i.setAttribute(`aria-valuenow`,String(t))};try{let t=r?await d(r,c.SIDEBAR_WIDTH):void 0;typeof t==`number`&&Number.isFinite(t)&&t>0?X(e,t):X(e,250)}catch{X(e,250)}let s=null,l=0,u=0,f=t=>{if(t.pointerId!==s)return;let n=t.clientX-l;X(e,u+n),o()},p=()=>{if(s===null)return;s=null,i.classList.remove(`active`),document.removeEventListener(`pointermove`,f);let t=e.querySelector(`.app-body`);if(t instanceof HTMLElement){let e=parseFloat(t.style.getPropertyValue(`--sidebar-width`));Number.isFinite(e)&&e>0&&r&&Y(r,e)}},m=e=>{e.pointerId===s&&p()};i.addEventListener(`pointerdown`,e=>{(e.pointerType!==`mouse`||e.button===0||e.button===-1)&&(window.innerWidth<896||(e.preventDefault(),s=e.pointerId,l=e.clientX,u=n.getBoundingClientRect().width,i.classList.add(`active`),i.setPointerCapture(e.pointerId),document.addEventListener(`pointermove`,f)))}),i.addEventListener(`pointerup`,m),i.addEventListener(`pointercancel`,p),i.addEventListener(`dblclick`,()=>{X(e,250),r&&Y(r,250),o()}),i.addEventListener(`keydown`,t=>{if(window.innerWidth<896)return;let n=t.shiftKey?32:12,i=a(),s=null;t.key===`ArrowRight`?s=i+n:t.key===`ArrowLeft`?s=i-n:t.key===`Home`?s=200:t.key===`End`&&(s=J(e,2**53-1)),s!==null&&(t.preventDefault(),X(e,s),o(),r&&Y(r,J(e,a())))}),o(),t.addCleanup(()=>{p(),i.removeEventListener(`pointerup`,m),i.removeEventListener(`pointercancel`,p)})}async function Z(e,t,n){if(!t)return!1;let r=t.querySelector(`.app-dialog`),i=t.querySelector(`.app-dialog__title`),a=t.querySelector(`.app-dialog__message`),o=t.querySelector(`.app-dialog__details`),s=t.querySelector(`.app-dialog__links`),c=t.querySelector(`.app-dialog__btn--confirm`),l=t.querySelector(`.app-dialog__btn--cancel`),u=t.querySelector(`.app-dialog__countdown`);if(!r||!i||!a||!o||!s||!c||!l)return!1;r._autoCloseTimer&&=(clearInterval(r._autoCloseTimer),null),r.open&&r.close(),i.textContent=n.title,a.textContent=n.message,o.replaceChildren(),s.replaceChildren();let d=Array.isArray(n.details)?n.details:[];o.hidden=d.length===0;for(let t of d){let n=e.createElement(`li`);n.textContent=t,o.appendChild(n)}let f=Array.isArray(n.links)?n.links:[];s.hidden=f.length===0;for(let t of f){let n=e.createElement(`a`);n.className=`app-dialog__link`,n.href=t.href,n.rel=`noreferrer`,n.target=`_blank`,n.textContent=t.label,s.appendChild(n)}let p=n.mode||`confirm`,m=n.confirmLabel||(p===`info`?`OK`:`Confirm`);l.textContent=n.cancelLabel||`Cancel`,l.hidden=p===`info`;let h=null,g=()=>{h&&=(clearInterval(h),null),r._autoCloseTimer&&=null};if(typeof n.autoCloseSeconds==`number`&&n.autoCloseSeconds>0){let e=Math.max(1,Math.round(n.autoCloseSeconds));c.textContent=`${m} (${e}s)`,u&&(u.hidden=!1,u.textContent=`Auto-closing in ${e}s...`,u.setAttribute(`role`,`status`),u.setAttribute(`aria-live`,`polite`),u.setAttribute(`aria-atomic`,`true`)),h=setInterval(()=>{e--,e>0?(c.textContent=`${m} (${e}s)`,u&&(u.textContent=`Auto-closing in ${e}s...`)):(g(),r.returnValue=p===`info`?`confirm`:`cancel`,r.close(r.returnValue))},1e3),r._autoCloseTimer=h}else c.textContent=m,u&&(u.hidden=!0,u.textContent=``);return r.returnValue=``,await new Promise(e=>{let t=()=>{g(),r.removeEventListener(`close`,t),e(r.returnValue===`confirm`)};r.addEventListener(`close`,t),r.showModal()})}const je={pages:c.SIDEBAR_PAGES_HIDDEN,chat:c.SIDEBAR_CHAT_HIDDEN,tasks:c.SIDEBAR_TASKS_HIDDEN,files:c.SIDEBAR_FILES_HIDDEN};function Me(e,t,n){if(!e)return;let r=e.querySelector(`.nav-item[data-page="${t}"]`);if(r&&(r.hidden=n,r.setAttribute(`aria-hidden`,String(n))),t===`chat`){let t=e.querySelector(`shadow-claw-conversations`);t&&(t.hidden=n,t.setAttribute(`aria-hidden`,String(n)))}}function Ne(e){switch(e){case`pages`:return`pagesSidebarHidden`;case`chat`:return`chatSidebarHidden`;case`tasks`:return`tasksSidebarHidden`;case`files`:return`filesSidebarHidden`}}async function Pe(e,t,n,r){for(let[n,i]of Object.entries(je)){let a=n,o=!1;if(r)try{let e=await d(r,i);o=ae(e)}catch{o=!1}let s=Ne(a);t[s]=o,Me(e,a,o),a===`chat`&&!o&&await L(`conversations`)}}function Q(e,t,n,r,i,a){switch(i){case`pages`:t.pagesSidebarHidden=a;break;case`chat`:t.chatSidebarHidden=a,a||L(`conversations`).catch(console.error);break;case`tasks`:t.tasksSidebarHidden=a;break;case`files`:t.filesSidebarHidden=a}Me(e,i,a),a&&t.currentPage===i&&G(e,t,r,n,F(n,t))}function Fe(e,t,n,r,i){Q(e,t,n,r,`pages`,i)}function Ie(){let e=window.navigation;return!!(e&&typeof e.addEventListener==`function`&&typeof e.navigate==`function`)}function Le(e,t,n,r={}){let i=r.debounceMs??250,a=r.minSleepDurationMs??1e3,o=0,s=null,c=!1,l=e=>{e&&(c=!0),s!==null&&clearTimeout(s),s=setTimeout(()=>{s=null;let e=c;c=!1,n.ensureAllConnections({force:e})},i)},u=()=>{s!==null&&(clearTimeout(s),s=null),c=!1},d=()=>{if(t.visibilityState===`hidden`)o=Date.now(),u();else if(t.visibilityState===`visible`){let e=o>0&&Date.now()-o>=a;l(e)}},f=e=>{let n=!!(e&&e.persisted);l(n||t.visibilityState===`visible`)},p=()=>{t.visibilityState===`visible`&&l(!1)},m=()=>{l(!0)};return t.addEventListener(`visibilitychange`,d),e.addEventListener(`pageshow`,f),e.addEventListener(`focus`,p),e.addEventListener(`online`,m),()=>{u(),t.removeEventListener(`visibilitychange`,d),e.removeEventListener(`pageshow`,f),e.removeEventListener(`focus`,p),e.removeEventListener(`online`,m)}}function Re(e,t){if(!e)return;let n=e.querySelector(`shadow-claw-chat`);n&&typeof n.setActivityLogCollapsedOverride==`function`&&n.setActivityLogCollapsedOverride(t)}function ze(e,t){if(!e)return;let n=e.querySelector(`.activity-log-toggle`);if(!(n instanceof HTMLButtonElement))return;let r=typeof globalThis.matchMedia==`function`&&!globalThis.matchMedia(`(min-width: 56rem) and (min-height: 401px)`).matches,i=typeof t==`boolean`?t:r;n.setAttribute(`aria-label`,i?`Show activity log`:`Hide activity log`),n.setAttribute(`title`,i?`Show activity log`:`Hide activity log`),n.setAttribute(`aria-pressed`,String(i))}function Be(e){let t=typeof globalThis.matchMedia==`function`&&!globalThis.matchMedia(`(min-width: 56rem) and (min-height: 401px)`).matches;e.activityLogCollapsedOverride=!(typeof e.activityLogCollapsedOverride==`boolean`?e.activityLogCollapsedOverride:t),Re(e.shadowRoot,e.activityLogCollapsedOverride),ze(e.shadowRoot,e.activityLogCollapsedOverride)}function Ve(e){e.headerMainCollapsedOverride=!(typeof e.headerMainCollapsedOverride==`boolean`?e.headerMainCollapsedOverride:we(e.shadowRoot)?.isMainCollapsed?.()??!1),z(e.shadowRoot,e.headerMainCollapsedOverride),V(e.shadowRoot,e.headerMainCollapsedOverride)}function He(e,t){t.terminalVisible=!t.terminalVisible,H(e,t.currentPage,t.terminalVisible,t.vmStatus),R(e,t.currentPage,t.terminalElement,t.terminalVisible,t.terminalPlacementFrame)}function Ue(e,t){e===E.Dark?(t.add(`dark-mode`),t.remove(`light-mode`)):(t.add(`light-mode`),t.remove(`dark-mode`))}function We(e,t){if(!e)return;let n=e.querySelector(`.sun-icon`),r=e.querySelector(`.moon-icon`);n&&r&&(t===E.Dark?(n.style.display=`block`,n.removeAttribute(`hidden`),n.classList.remove(`hidden`),r.style.display=`none`,r.setAttribute(`hidden`,`hidden`),r.classList.add(`hidden`)):(n.style.display=`none`,n.setAttribute(`hidden`,`hidden`),n.classList.add(`hidden`),r.style.display=`block`,r.removeAttribute(`hidden`),r.classList.remove(`hidden`)))}function Ge(e,t,n,i,a,o,s,c,l){if(!n||!e||!t)return;n.querySelectorAll(`.nav-item[data-page]`).forEach(e=>{let r=e;r.addEventListener(`click`,()=>{let e=r.dataset.page||F(o);n.querySelectorAll(`.nav-item`).forEach(e=>e.classList.remove(`active`)),r.classList.add(`active`),setTimeout(()=>{t.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:e},bubbles:!0,composed:!0}))},0)})});let u=n.getElementById(`menu-button`),d=n.querySelector(`.sidebar`);if(u&&d){u.addEventListener(`click`,()=>{d.classList.toggle(`open`)}),n.querySelectorAll(`.nav-item, .settings-btn`).forEach(t=>{t.addEventListener(`click`,()=>{e.innerWidth<896&&d.classList.remove(`open`)})}),d.addEventListener(`click`,t=>{let n=t.target;e.innerWidth<896&&n?.closest(`a, button, .nav-item, .sidebar-link, .sidebar-item`)&&d.classList.remove(`open`)}),typeof i?.addEventListener==`function`&&i.addEventListener(`click`,t=>{let n=t.target;e.innerWidth<896&&n?.closest(`[slot^="sidebar"] a, .sidebar-custom-sections a`)&&d.classList.remove(`open`)}),t.addEventListener(`click`,t=>{let n=t.composedPath();e.innerWidth<896&&d.classList.contains(`open`)&&!n.includes(d)&&!n.includes(u)&&d.classList.remove(`open`)});let r=e.matchMedia?e.matchMedia(`(min-width: 56rem)`):{matches:!1,addEventListener:()=>{},removeEventListener:()=>{}},o=e=>{e.matches&&d.classList.remove(`open`)};o(r),r.addEventListener(`change`,o),Ae(n,i,d,a)}typeof i?.addEventListener==`function`&&i.addEventListener(`click`,t=>{let n=typeof t.composedPath==`function`?t.composedPath():[],i=null;for(let e of n)if(e instanceof HTMLAnchorElement||e&&e.tagName===`A`&&e.href){i=e;break}!i&&t.target?.closest&&(i=t.target.closest(`a[href]`));let a=e.location?.origin||window.location?.origin;if(i&&a){let n=null;try{let e=typeof i.getAttribute==`function`&&i.getAttribute(`href`)||i.href;n=new URL(e,a)}catch{}n&&n.origin===a&&r(n.pathname)&&(t.preventDefault(),typeof e.location?.assign==`function`?e.location.assign(n.href):typeof window.location?.assign==`function`&&window.location.assign(n.href))}});let f=n.querySelector(`[data-action="show-settings"]`);f&&f.addEventListener(`click`,()=>{t.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:`settings`},bubbles:!0,composed:!0}))}),n.querySelector(`.header-main-toggle`)?.addEventListener(`click`,()=>{Ve(i)}),n.querySelector(`.activity-log-toggle`)?.addEventListener(`click`,()=>{Be(i)}),n.addEventListener(`navigate`,e=>{let n=e.detail?.page;n&&t.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:n},bubbles:!0,composed:!0}))}),n.addEventListener(`sidebar-pages-visibility-change`,e=>{Fe(n,i,o,a,!!e.detail?.hidden)}),n.addEventListener(`sidebar-chat-visibility-change`,e=>{Q(n,i,o,a,`chat`,!!e.detail?.hidden)}),n.addEventListener(`sidebar-tasks-visibility-change`,e=>{Q(n,i,o,a,`tasks`,!!e.detail?.hidden)}),n.addEventListener(`sidebar-files-visibility-change`,e=>{Q(n,i,o,a,`files`,!!e.detail?.hidden)}),n.addEventListener(`chat-split-view-change`,e=>{i.chatSplitViewEnabled=!!e.detail?.enabled,G(n,i,a,o,i.currentPage,!1)}),n.addEventListener(`navigate-back`,()=>t.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:`settings`},bubbles:!0,composed:!0})));let p=n.querySelector(`.theme-mode-toggle`);if(p&&p.addEventListener(`click`,()=>{let{resolved:e}=c.getTheme(),t=e===E.Dark?E.Light:E.Dark;c.setTheme(t)}),n.querySelector(`.webvm-toggle`)?.addEventListener(`click`,()=>He(n,i)),n.addEventListener(`shadow-claw-terminal-slot-ready`,()=>{R(n,i.currentPage,i.terminalElement,i.terminalVisible,i.terminalPlacementFrame),z(n,i.headerMainCollapsedOverride),V(n,i.headerMainCollapsedOverride)}),e.addEventListener(`resize`,()=>{i.headerMainCollapsedOverride===null&&V(n,i.headerMainCollapsedOverride)}),t.addEventListener(`shadow-claw-navigate`,i.shadowClawNav),Ie()){if(e.history&&!e.history.__scReplaceStateTracked){let t=e.history.replaceState;e.history.replaceState=function(e,n,r){return Oe(e),t.call(this,e,n,r)},e.history.__scReplaceStateTracked=!0}e.navigation.addEventListener(`navigate`,i.handleNavigationApiNavigate),i.navigationListenerAttached=!0}else i.popstateListener=t=>{let r=t?.state||e.history?.state;r?.inFeedScroll||r?.scrollSpy||r?.suppressRouter||q(n,i,a,s,o,new URL(e.location.href))},e.addEventListener(`popstate`,i.popstateListener),e.addEventListener(`hashchange`,i.popstateListener),t.addEventListener(`click`,i.fallbackClickListener),i.fallbackClickListenerAttached=!0;e.addEventListener(`shadow-claw-theme-change`,e=>{let t=e.detail.theme;We(n,t),Ue(t,i.classList)}),e.addEventListener(`shadow-claw-peer-error`,e=>{let r=e.detail,i=r.remotePeerId,a=r.error;Z(t,n,{mode:`info`,title:`Peer Connection Error`,message:i?`Failed to communicate with peer ${i}: ${a}`:`PeerJS error: ${a}`,confirmLabel:`Dismiss`,autoCloseSeconds:30})});let m=c.resolved;We(n,m),Ue(m,i.classList),i.appLifecycleCleanup&&=(i.appLifecycleCleanup(),null),i.orchestrator&&(i.appLifecycleCleanup=Le(e,t,i.orchestrator)),Ee(i)}function Ke(e){if(e===void 0)return;e.documentElement.classList.remove(oe,`sc-prerender-override`);let t=e.querySelector(`shadow-claw`);t?.removeAttribute(ce),t?.removeAttribute(se)}function qe(e,t){if(t.defaultPrevented||t.button!==0||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey)return null;let n=t.composedPath(),r=null;for(let e of n)if(e instanceof HTMLAnchorElement){r=e;break}if(!r)return null;let i=r.getAttribute(`href`)||``;return!i||i.startsWith(`javascript:`)||i.startsWith(`mailto:`)||i.startsWith(`tel:`)||r.target&&r.target!==`_self`||r.origin!==e.origin||!s(r.pathname)||r.pathname===e.pathname&&r.search===e.search&&r.hash!==e.hash?null:(t.preventDefault(),`${r.pathname}${r.search}${r.hash}`)}async function Je(e,t,n){if(!t)return null;let r=t.querySelector(`.app-prompt-dialog`),i=t.querySelector(`.app-prompt-dialog__message`),a=t.querySelector(`.app-prompt-dialog__input-area`);if(!r||!i||!a)return null;if(r.open&&r.close(),i.textContent=n.question,a.replaceChildren(),Array.isArray(n.options)&&n.options.length>0){let t=e.createElement(`select`);t.className=`app-prompt-dialog__input`,t.name=`prompt-response`;for(let r of n.options){let n=e.createElement(`option`);n.value=r,n.textContent=r,t.appendChild(n)}a.appendChild(t)}else{let t=e.createElement(`input`);t.type=`text`,t.className=`app-prompt-dialog__input`,t.name=`prompt-response`,t.placeholder=`Enter your response...`,t.autocomplete=`off`,a.appendChild(t),setTimeout(()=>t.focus(),50)}return r.returnValue=``,await new Promise(e=>{let t=()=>{if(r.removeEventListener(`close`,t),r.returnValue===`submit`){let t=a.querySelector(`[name='prompt-response']`);e(t?t.value:null)}else e(null)};r.addEventListener(`close`,t),r.showModal()})}async function Ye(e,t,n,r){let i=await Je(e,t,r);m(n.orchestrator,r.id,i)}async function Xe(e,t,n,r){let i=r.path,a=r.groupId||t.activeGroupId;if(i&&e)for(let t=0;t<=3;t++)try{await n.openFile(e,i,a);return}catch(e){let n=e instanceof DOMException&&e.name===`NotFoundError`;if(t<3&&n){await new Promise(e=>setTimeout(e,150*(t+1)));continue}let r=e instanceof Error?e.message:String(e);ie(`Failed to open file from tool: ${r}`,5e3);return}}async function Ze(e,t,n){n?.providerId===`llamafile`?await Z(e,t,de(n.reason)):n?.providerId===`transformers_js_local`?await Z(e,t,pe(n.reason)):n?.providerId===`prompt_api`?await Z(e,t,_e(n.reason)):n?.providerId&&n.helpType&&await Z(e,t,fe(n.providerId,n.helpType,n.reason))}async function Qe(e,t,n,r,i,a){if(r&&a?.roomId&&a?.hostPeerId&&await Z(e,t,{mode:`confirm`,title:`Room invitation`,message:`${a.fromAlias||a.fromPeerId} invited you to join "${a.roomName}".`,confirmLabel:`Join`,cancelLabel:`Decline`}))try{ue(n.orchestrator,a.roomId,a.hostPeerId,a.roomName),await i.switchConversation(r,`room:${a.roomId}`),G(t,n,r,i,`chat`),re(`Joined room "${a.roomName}"`)}catch(e){let t=e instanceof Error?e.message:String(e);ie(`Failed to join room: ${t}`,6e3)}}function $e(e,t,n){let r=n.useTrailingSlash&&!t.includes(`#`)?t.endsWith(`/`)?t:t+`/`:t;n.replace?e.replaceState({},``,r):e.pushState({},``,r)}async function et(e,n,r,i,a,o,s={replace:!1}){let c=t(o),u=l(c),d=typeof window<`u`&&window.location?`${window.location.pathname}${window.location.search}${window.location.hash}`:``;d&&u===d?await K(e,n,r,i,a,o):Ie()?window.navigation.navigate(u,{history:s.replace?`replace`:`push`}):(u!==window.location.pathname&&$e(globalThis.history,u,{...s,useTrailingSlash:!1}),await K(e,n,r,i,a,o))}function tt(e){let t=String(e||`chat`).toLowerCase();return t===`chat`||t===`files`||t===`tasks`||t===`pages`||t===`settings`||t===`tools`||t===`channels`?t:`chat`}async function nt(e,t,n,r,i,a){let o=a.detail;o&&await et(e,t,n,r,i,{page:tt(String(o.page||`chat`)),groupId:o.groupId,path:o.path,anchor:o.anchor})}async function rt(e,t,n,r){await Pe(e,t,n,r)}function it(e,t,n,r){e&&(w(()=>{let t=T.file;t&&(L(`file-viewer`).then(()=>{if(e&&!e.querySelector(`shadow-claw-file-viewer`)){let t=e.querySelector(`.main-content`);if(t){let e=document.createElement(`shadow-claw-file-viewer`);e.id=`file-viewer`,t.appendChild(e)}}}).catch(console.error),t.kind===`pdf`&&L(`pdf-viewer`).catch(console.error))}),w(()=>{let e=r.state;e===`idle`&&(t.previousOrchestratorState===`thinking`||t.previousOrchestratorState===`responding`)&&re(`Response complete`,2500),t.previousOrchestratorState=e}),w(()=>{let i=r.activePage;i!==t.currentPage&&G(e,t,n,r,i,!1)}),w(()=>{r.activityLog,B(e,t.currentPage,r.activityLog.length)}))}const at=new CSSStyleSheet;at.replaceSync(`*,
|
|
2
2
|
*::before,
|
|
3
3
|
*::after {
|
|
4
4
|
box-sizing: border-box;
|
|
@@ -1173,4 +1173,4 @@ button:tool-submit-active {
|
|
|
1173
1173
|
</shadow-claw-dialog>
|
|
1174
1174
|
</div>
|
|
1175
1175
|
</template>
|
|
1176
|
-
`,`text/html`),ot=$.querySelector(`template`);let st=[];st=ot?Array.from(ot.content.children):Array.from($.head.children).concat(Array.from($.body.children));var ct=st;const lt=`shadow-claw`;var ut=class extends x{static styles=at;static template=ct;activityLogCollapsedOverride=null;appLifecycleCleanup=null;chatSidebarHidden=!1;chatSplitViewEnabled=!1;currentPage=y.sidebarDefaultPage;db=null;fallbackClickListenerAttached=!1;filesSidebarHidden=!1;headerMainCollapsedOverride=null;navigationListenerAttached=!1;orchestrator;pagesSidebarHidden=!1;popstateListener=null;previousOrchestratorState=`idle`;tasksSidebarHidden=!1;terminalElement=null;terminalPlacementFrame=null;terminalVisible=!1;vmStatus={ready:!1,booting:!1,bootAttempted:!1,error:null};vmStatusCleanup=null;constructor(){super()}async connectedCallback(){if(!this.shadowRoot)throw Error(`shadowRoot not found`);let e=typeof window<`u`&&window.location?.href?new URL(window.location.href):null;await p();try{let{Orchestrator:t}=await import(`./orchestrator-
|
|
1176
|
+
`,`text/html`),ot=$.querySelector(`template`);let st=[];st=ot?Array.from(ot.content.children):Array.from($.head.children).concat(Array.from($.body.children));var ct=st;const lt=`shadow-claw`;var ut=class extends x{static styles=at;static template=ct;activityLogCollapsedOverride=null;appLifecycleCleanup=null;chatSidebarHidden=!1;chatSplitViewEnabled=!1;currentPage=y.sidebarDefaultPage;db=null;fallbackClickListenerAttached=!1;filesSidebarHidden=!1;headerMainCollapsedOverride=null;navigationListenerAttached=!1;orchestrator;pagesSidebarHidden=!1;popstateListener=null;previousOrchestratorState=`idle`;tasksSidebarHidden=!1;terminalElement=null;terminalPlacementFrame=null;terminalVisible=!1;vmStatus={ready:!1,booting:!1,bootAttempted:!1,error:null};vmStatusCleanup=null;constructor(){super()}async connectedCallback(){if(!this.shadowRoot)throw Error(`shadowRoot not found`);let e=typeof window<`u`&&window.location?.href?new URL(window.location.href):null;await p();try{let{Orchestrator:t}=await import(`./orchestrator-C1kaTltu.js`);await p();let n=()=>{Promise.all([import(`./shadow-claw-dialog-BVGf_c3S.js`),import(`./shadow-claw-toast-B9Y9tSkW.js`)]).catch(console.error)};typeof window<`u`&&`requestIdleCallback`in window?window.requestIdleCallback(n):setTimeout(n,200),await p(),this.orchestrator||=new t,this.db=await this.orchestrator.init(),await p(),await y.init(this.db,this.orchestrator),u(this.db),await p(),await this.render(),await p();let r=!this.chatSidebarHidden||!this.tasksSidebarHidden||!this.filesSidebarHidden,i=y.activePage===`pages`&&this.pagesSidebarHidden&&y.sidebarDefaultPage!==`pages`&&r||y.activePage===`chat`&&this.chatSidebarHidden||y.activePage===`tasks`&&this.tasksSidebarHidden||y.activePage===`files`&&this.filesSidebarHidden;y.hadPersistedActivePage&&!i?G(this.shadowRoot,this,this.db,y,y.activePage,!1):i?G(this.shadowRoot,this,this.db,y,F(y,this),!1):G(this.shadowRoot,this,this.db,y,y.activePage,!1),await q(this.shadowRoot,this,this.db,T,y,e||new URL(window.location.href));let a=e||(typeof window<`u`&&window.location?.href?new URL(window.location.href):null);if(a?.searchParams?.has(`peer`)){let{processPeerQueryParam:e}=await import(`./process-peer-query-param-DQIgr3KL.js`);await e(this.shadowRoot,this,this.db,this.orchestrator)}if(a?.searchParams?.has(`room`)||a?.searchParams?.has(`host`)){let{processRoomQueryParam:e}=await import(`./process-room-query-param-F-XnIVoZ.js`);await e(window,this.shadowRoot,this,this.db,this.orchestrator,y)}let o=async()=>{if(!this.db)return;let{processPendingSharedPayloads:e}=await import(`./process-pending-shared-payloads-Ctb-TFqB.js`);await e(window,this.shadowRoot,this,y,T,this.db,a||new URL(window.location.href))};if(a?.searchParams?.has(`share-target`)||globalThis.__SHADOWCLAW_E2E_ENABLE__===!0?await o():typeof window<`u`&&`requestIdleCallback`in window?window.requestIdleCallback(()=>{o().catch(console.error)}):setTimeout(()=>{o().catch(console.error)},1e3),console.log(`ShadowClaw UI initialized`),typeof customElements<`u`&&await customElements.whenDefined(`shadow-claw-${this.currentPage}`),this.currentPage===`pages`){let e=this.shadowRoot?.querySelector(`shadow-claw-pages`);e&&typeof e.renderSelectedPage==`function`&&!e.renderedKey&&await e.renderSelectedPage()}let{isMemoryStorageFallbackActive:s}=await import(`./memory-storage-2m7KZ-aP.js`).then(e=>e.n);if(s()){let{showWarning:e}=await import(`./toast-CtIuHprH.js`).then(e=>e.c);e(`Private Browsing / Limited Storage: Operating in temporary in-memory mode. Files and changes will not persist across page reloads.`,7e3)}y.setReady()}finally{Ke(document)}}disconnectedCallback(){if(super.disconnectedCallback(),this.vmStatusCleanup&&=(this.vmStatusCleanup(),null),this.appLifecycleCleanup&&=(this.appLifecycleCleanup(),null),this.terminalPlacementFrame!==null&&(cancelAnimationFrame(this.terminalPlacementFrame),this.terminalPlacementFrame=null),document.removeEventListener(`shadow-claw-navigate`,this.shadowClawNav),this.popstateListener&&=(window.removeEventListener(`popstate`,this.popstateListener),window.removeEventListener(`hashchange`,this.popstateListener),null),this.fallbackClickListenerAttached&&=(document.removeEventListener(`click`,this.fallbackClickListener),!1),this.navigationListenerAttached){let e=window.navigation;e&&typeof e.removeEventListener==`function`&&e.removeEventListener(`navigate`,this.handleNavigationApiNavigate),this.navigationListenerAttached=!1}}addCleanup(e){super.addCleanup(e)}fallbackClickListener=e=>{if(typeof window>`u`||!window.location)return;let t=qe(window.location,e);t&&($e(globalThis.history,t,{replace:!1,useTrailingSlash:!1}),q(this.shadowRoot,this,this.db,T,y,new URL(window.location.href)))};handleNavigationApiNavigate=e=>{let{parsedUrl:t,navigateEvent:n}=ke(this.db,e)??{};t&&n&&typeof n.intercept==`function`&&n.intercept({scroll:`manual`,handler:async()=>{await q(this.shadowRoot,this,this.db,T,y,t)}})};shadowClawNav=e=>{this.shadowRoot&&this.db&&nt(this.shadowRoot,this,this.db,T,y,e)};async render(){if(Ge(window,document,this.shadowRoot,this,this.db,y,T,N,new URL(window.location.href)),await rt(this.shadowRoot,this,y,this.db),this.db)try{let{getConfig:e}=await import(`./get-config-Bkvl__ZS.js`).then(e=>e.n),{isTruthyConfigValue:t}=await import(`./parse-boolean-config-BigJ9U46.js`).then(e=>e.r),{CONFIG_KEYS:n}=await import(`./config-C16fFWtP.js`).then(e=>e.k),r=await e(this.db,n.CHAT_SPLIT_VIEW_ENABLED);this.chatSplitViewEnabled=t(r)}catch{this.chatSplitViewEnabled=!1}let e=this.shadowRoot?.querySelector(`.chat-split-resize-handle`);if(this.chatSplitViewEnabled&&!this.chatSidebarHidden&&this.shadowRoot&&e instanceof HTMLElement){let{initChatSplitResize:t}=await import(`./init-chat-split-resize-C8AqCCiK.js`);await t(this.shadowRoot,this,e,this.db)}this.terminalElement=document.createElement(`shadow-claw-terminal`),this.terminalElement&&(this.terminalElement.orchestrator=this.orchestrator),H(this.shadowRoot,this.currentPage,this.terminalVisible,this.vmStatus),R(this.shadowRoot,this.currentPage,this.terminalElement,this.terminalVisible,this.terminalPlacementFrame),z(this.shadowRoot,this.headerMainCollapsedOverride),V(this.shadowRoot,this.headerMainCollapsedOverride),B(this.shadowRoot,this.currentPage,y.activityLog.length);let t=e=>{this.vmStatus=e,e.error&&this.terminalVisible&&(this.terminalVisible=!1,this.terminalElement&&(this.terminalElement.hidden=!0),R(this.shadowRoot,this.currentPage,this.terminalElement,this.terminalVisible,this.terminalPlacementFrame)),H(this.shadowRoot,this.currentPage,this.terminalVisible,this.vmStatus)};this.vmStatus=this.orchestrator.vmStatus||this.vmStatus,H(this.shadowRoot,this.currentPage,this.terminalVisible,this.vmStatus),this.orchestrator.events.on?.(`vm-status`,t),this.vmStatusCleanup=()=>{this.orchestrator.events.off?.(`vm-status`,t)},this.orchestrator.events.on(`open-file`,e=>Xe(this.db,y,T,e)),this.orchestrator.events.on(`provider-help`,e=>Ze(document,this.shadowRoot,e)),this.orchestrator.events.on(`room-invite`,e=>Qe(document,this.shadowRoot,this,this.db,y,e)),this.orchestrator.events.on(`ask-user`,e=>Ye(document,this.shadowRoot,this,e)),it(this.shadowRoot,this,this.db,y)}async requestDialog(e){return Z(document,this.shadowRoot,e)}};customElements.get(lt)||customElements.define(lt,ut);export{w as a,he as i,T as n,x as o,ge as r,G as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{p as e}from"./custom-element-security-B2daIE5r.js";import{b as t,r as n}from"./config-C16fFWtP.js";import{n as r}from"./db-BUuJo1Gf.js";import{t as i}from"./get-config-Bkvl__ZS.js";import{t as a}from"./html-BwtE_7wp.js";import{a as o,r as s}from"./toast-CtIuHprH.js";import"./shadow-claw-card-
|
|
1
|
+
import{p as e}from"./custom-element-security-B2daIE5r.js";import{b as t,r as n}from"./config-C16fFWtP.js";import{n as r}from"./db-BUuJo1Gf.js";import{t as i}from"./get-config-Bkvl__ZS.js";import{t as a}from"./html-BwtE_7wp.js";import{a as o,r as s}from"./toast-CtIuHprH.js";import"./shadow-claw-card-tcXRS1GF.js";import"./shadow-claw-empty-state-CnPm3NVM.js";import{o as c}from"./shadow-claw-Bg9AQ5x_.js";function l(e){return!e||e.authMode===`token`||e.authMode===`token`?`token`:e.authMode===`basic`?`basic`:e.authMode===`oauth`||e.oauthProviderId||e.oauthClientId||e.oauthClientSecret||e.refreshToken||e.accessTokenExpiresAt||e.tokenType||e.oauthReauthRequired?`oauth`:`token`}const u=new CSSStyleSheet;u.replaceSync(`*,
|
|
2
2
|
*::before,
|
|
3
3
|
*::after {
|
|
4
4
|
font-family: var(--shadow-claw-font-sans);
|