shadow-claw 1.54.0 → 1.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.well-known/mcp/server-card.json +1 -1
- package/.well-known/mcp.json +1 -1
- package/README.md +1 -1
- package/dist/cli/build/build.js +1 -1
- package/dist/cli/{chunk-DO2t9bUI.js → chunk--IuVyWfT.js} +24 -23
- package/dist/cli/{chunk-2ZYd9gYC.js → chunk--JpdI-Ht.js} +1 -1
- package/dist/cli/{chunk-m4Ineemy.js → chunk-4O8yrQuN.js} +1 -1
- package/dist/cli/{chunk-BiH9IXnQ.js → chunk-7S9Ywlfy.js} +1 -1
- package/dist/cli/{chunk-BmMOdYvk.js → chunk-B0SqqDSK.js} +1 -1
- package/dist/cli/chunk-BNaWaEm-.js +1 -0
- package/dist/cli/chunk-BXCsxO9e.js +1 -0
- package/dist/cli/chunk-Bq37qDoZ.js +18 -0
- package/dist/cli/{chunk-C1htf-nO.js → chunk-BrEeCKIo.js} +2 -2
- package/dist/cli/{chunk-BI1SOTM1.js → chunk-Bu3ylrhT.js} +8 -8
- package/dist/cli/{chunk-3smiGQoQ.js → chunk-C1v_s0Kb.js} +1 -1
- package/dist/cli/{chunk-DGeysxz3.js → chunk-C44G533y.js} +1 -1
- package/dist/cli/{chunk-9KiBalKu.js → chunk-C7hJLmsL.js} +1 -1
- package/dist/cli/{chunk-BFv9XSNd.js → chunk-CAaQWd6t.js} +1 -1
- package/dist/cli/chunk-CIkgn5Fh.js +1 -0
- package/dist/cli/chunk-CWEIN2kc.js +1 -0
- package/dist/cli/{chunk-BDeDZ-0L.js → chunk-CYg1lO1a.js} +1 -1
- package/dist/cli/{chunk-DXLmEQ3i.js → chunk-Ce09lwXT.js} +1 -1
- package/dist/cli/{chunk-XsfHeN4m.js → chunk-CpdqRSO-.js} +1 -1
- package/dist/cli/chunk-DB4x5L-B.js +1 -0
- package/dist/cli/{chunk-DaNyMqrk.js → chunk-DBvObsBQ.js} +1 -1
- package/dist/cli/chunk-DGPpt7Ka.js +1 -0
- package/dist/cli/chunk-DGagHluH.js +1 -0
- package/dist/cli/chunk-DUIs23D9.js +1 -0
- package/dist/cli/{chunk-CyvfQV16.js → chunk-DaurYOqg.js} +1 -1
- package/dist/cli/{chunk-DSFrcSyA.js → chunk-DfwRL0Ue.js} +1 -1
- package/dist/cli/{chunk-M2tZrzY5.js → chunk-DudYQk0p.js} +1 -1
- package/dist/cli/chunk-DvKo50Tp.js +2 -0
- package/dist/cli/{chunk-H_Mw5ypp.js → chunk-Dvrqte5Q.js} +2 -2
- package/dist/cli/{chunk-BtNO-m9T.js → chunk-DzhSExU0.js} +1 -1
- package/dist/cli/{chunk-IOMO88kZ.js → chunk-ENKlt3i9.js} +1 -1
- package/dist/cli/{chunk-Bspgzwsm.js → chunk-FWRwAX75.js} +8 -8
- package/dist/cli/chunk-Lf-Z-h48.js +32 -0
- package/dist/cli/{chunk-BucXnZ4Z.js → chunk-VRfkSLrD.js} +1 -1
- package/dist/cli/chunk-uaTxD024.js +1 -0
- package/dist/cli/cli.js +1 -1
- package/dist/cli/prerender/dsd-shell/prerender-dsd-shell.js +1 -1
- package/dist/headless-agent.js +2 -2
- package/dist/lib/components/index.js +25 -25
- package/dist/lib/components/settings/shadow-claw-accounts.js +1 -1
- package/dist/lib/components/settings/shadow-claw-channel-config.js +1 -1
- package/dist/lib/components/settings/shadow-claw-control-plane.js +1 -1
- package/dist/lib/components/settings/shadow-claw-git.js +1 -1
- package/dist/lib/components/settings/shadow-claw-integrations.js +1 -1
- package/dist/lib/components/settings/shadow-claw-llm.js +1 -1
- package/dist/lib/components/settings/shadow-claw-mcp-remote.js +1 -1
- package/dist/lib/components/settings/shadow-claw-networking.js +1 -1
- package/dist/lib/components/settings/shadow-claw-notifications.js +1 -1
- package/dist/lib/components/settings/shadow-claw-peerjs.js +1 -1
- package/dist/lib/components/settings/shadow-claw-storage.js +1 -1
- package/dist/lib/components/settings/shadow-claw-task-server.js +1 -1
- package/dist/lib/components/settings/shadow-claw-webvm.js +1 -1
- package/dist/lib/components/shadow-claw/utils/get-route.d.ts +3 -0
- package/dist/lib/components/shadow-claw/utils/sync-slotted-sidebar-active-links.d.ts +1 -1
- package/dist/lib/components/shadow-claw-accounts.js +1 -1
- package/dist/lib/components/shadow-claw-channel-config.js +1 -1
- package/dist/lib/components/shadow-claw-channels.js +1 -1
- package/dist/lib/components/shadow-claw-chat.js +1 -1
- package/dist/lib/components/shadow-claw-control-plane.js +1 -1
- package/dist/lib/components/shadow-claw-conversations.js +1 -1
- package/dist/lib/components/shadow-claw-file-viewer.js +1 -1
- package/dist/lib/components/shadow-claw-files.js +1 -1
- package/dist/lib/components/shadow-claw-git.js +1 -1
- package/dist/lib/components/shadow-claw-integrations.js +1 -1
- package/dist/lib/components/shadow-claw-llm.js +1 -1
- package/dist/lib/components/shadow-claw-mcp-remote.js +1 -1
- package/dist/lib/components/shadow-claw-networking.js +1 -1
- package/dist/lib/components/shadow-claw-notifications.js +1 -1
- package/dist/lib/components/shadow-claw-page-header.js +1 -1
- package/dist/lib/components/shadow-claw-pages.js +1 -1
- package/dist/lib/components/shadow-claw-peerjs.js +1 -1
- package/dist/lib/components/shadow-claw-settings.js +1 -1
- package/dist/lib/components/shadow-claw-storage.js +1 -1
- package/dist/lib/components/shadow-claw-task-server.js +1 -1
- package/dist/lib/components/shadow-claw-tasks.js +1 -1
- package/dist/lib/components/shadow-claw-terminal.js +1 -1
- package/dist/lib/components/shadow-claw-tools.js +1 -1
- package/dist/lib/components/shadow-claw-webvm.js +1 -1
- package/dist/lib/components/shadow-claw.js +1 -1
- package/dist/lib/{configure-peer-js-D5jDCtLx.js → configure-peer-js-C9554Slv.js} +2 -2
- package/dist/lib/{configure-peer-js-D5jDCtLx.js.map → configure-peer-js-C9554Slv.js.map} +1 -1
- package/dist/lib/{file-viewer-B4CL4e0i.js → file-viewer-DBc5dxNy.js} +2 -2
- package/dist/lib/{file-viewer-B4CL4e0i.js.map → file-viewer-DBc5dxNy.js.map} +1 -1
- package/dist/lib/index.js +28 -27
- package/dist/lib/{init-control-plane-l2uFnhGV.js → init-control-plane-D-41Fm5q.js} +12 -12
- package/dist/lib/{init-control-plane-l2uFnhGV.js.map → init-control-plane-D-41Fm5q.js.map} +1 -1
- package/dist/lib/{markdown-0_p_zfxL.js → markdown-KnDWzWJJ.js} +2 -2
- package/dist/lib/{markdown-0_p_zfxL.js.map → markdown-KnDWzWJJ.js.map} +1 -1
- package/dist/lib/{orchestrator-D6wm8Sec.js → orchestrator-BEZcqgR5.js} +9 -9
- package/dist/lib/{orchestrator-D6wm8Sec.js.map → orchestrator-BEZcqgR5.js.map} +1 -1
- package/dist/lib/{orchestrator-Dh-hnIpK.js → orchestrator-Cda13e5U.js} +4 -4
- package/dist/lib/{orchestrator-Dh-hnIpK.js.map → orchestrator-Cda13e5U.js.map} +1 -1
- package/dist/lib/{peerjs-BWZnsD0B.js → peerjs-DYkUTcee.js} +5 -5
- package/dist/lib/{peerjs-BWZnsD0B.js.map → peerjs-DYkUTcee.js.map} +1 -1
- package/dist/lib/{push-client-MybDfOdi.js → push-client-CQtCFDaD.js} +3 -3
- package/dist/lib/{push-client-MybDfOdi.js.map → push-client-CQtCFDaD.js.map} +1 -1
- package/dist/lib/security/custom-element-security.d.ts +8 -4
- package/dist/lib/{shadow-claw-PdOpgTxH.js → shadow-claw-DYe9u6Tp.js} +142 -33
- package/dist/lib/shadow-claw-DYe9u6Tp.js.map +1 -0
- package/dist/lib/{shadow-claw-accounts-3bR76EOb.js → shadow-claw-accounts-D2URoHys.js} +2 -2
- package/dist/lib/{shadow-claw-accounts-3bR76EOb.js.map → shadow-claw-accounts-D2URoHys.js.map} +1 -1
- package/dist/lib/{shadow-claw-channel-config-ChdZ1iB8.js → shadow-claw-channel-config-buXoz2xv.js} +3 -3
- package/dist/lib/{shadow-claw-channel-config-ChdZ1iB8.js.map → shadow-claw-channel-config-buXoz2xv.js.map} +1 -1
- package/dist/lib/{shadow-claw-channels-CK9sc7h_.js → shadow-claw-channels-5yVJ1gLk.js} +3 -3
- package/dist/lib/{shadow-claw-channels-CK9sc7h_.js.map → shadow-claw-channels-5yVJ1gLk.js.map} +1 -1
- package/dist/lib/{shadow-claw-chat-B6uuZnJ7.js → shadow-claw-chat-CVc-7ycM.js} +7 -7
- package/dist/lib/{shadow-claw-chat-B6uuZnJ7.js.map → shadow-claw-chat-CVc-7ycM.js.map} +1 -1
- package/dist/lib/{shadow-claw-control-plane-BpRcl312.js → shadow-claw-control-plane-B5vsF91B.js} +6 -6
- package/dist/lib/{shadow-claw-control-plane-BpRcl312.js.map → shadow-claw-control-plane-B5vsF91B.js.map} +1 -1
- package/dist/lib/{shadow-claw-conversations-Dc_Xk2mB.js → shadow-claw-conversations-PGK5zqn3.js} +54 -12
- package/dist/lib/{shadow-claw-conversations-Dc_Xk2mB.js.map → shadow-claw-conversations-PGK5zqn3.js.map} +1 -1
- package/dist/lib/{shadow-claw-file-viewer-C4x1PtB2.js → shadow-claw-file-viewer-DSqn0hgx.js} +6 -6
- package/dist/lib/{shadow-claw-file-viewer-C4x1PtB2.js.map → shadow-claw-file-viewer-DSqn0hgx.js.map} +1 -1
- package/dist/lib/{shadow-claw-files-DhnHbXKf.js → shadow-claw-files-vOa9ZWbr.js} +6 -6
- package/dist/lib/{shadow-claw-files-DhnHbXKf.js.map → shadow-claw-files-vOa9ZWbr.js.map} +1 -1
- package/dist/lib/{shadow-claw-git-BeQ1ElUd.js → shadow-claw-git-D54Z85Bj.js} +4 -4
- package/dist/lib/{shadow-claw-git-BeQ1ElUd.js.map → shadow-claw-git-D54Z85Bj.js.map} +1 -1
- package/dist/lib/{shadow-claw-integrations-Bbdolk3w.js → shadow-claw-integrations-BTubMH9d.js} +2 -2
- package/dist/lib/{shadow-claw-integrations-Bbdolk3w.js.map → shadow-claw-integrations-BTubMH9d.js.map} +1 -1
- package/dist/lib/{shadow-claw-llm-DPda4L3C.js → shadow-claw-llm-8koGTNYs.js} +3 -3
- package/dist/lib/{shadow-claw-llm-DPda4L3C.js.map → shadow-claw-llm-8koGTNYs.js.map} +1 -1
- package/dist/lib/{shadow-claw-mcp-remote-Dn9c30WI.js → shadow-claw-mcp-remote-C2jwBsQt.js} +2 -2
- package/dist/lib/{shadow-claw-mcp-remote-Dn9c30WI.js.map → shadow-claw-mcp-remote-C2jwBsQt.js.map} +1 -1
- package/dist/lib/{shadow-claw-networking-zqNuyn3-.js → shadow-claw-networking-BV-rna16.js} +2 -2
- package/dist/lib/{shadow-claw-networking-zqNuyn3-.js.map → shadow-claw-networking-BV-rna16.js.map} +1 -1
- package/dist/lib/{shadow-claw-notifications-DFgdo33v.js → shadow-claw-notifications-Dku7VBLk.js} +2 -2
- package/dist/lib/{shadow-claw-notifications-DFgdo33v.js.map → shadow-claw-notifications-Dku7VBLk.js.map} +1 -1
- package/dist/lib/{shadow-claw-page-header-B7LFGQRf.js → shadow-claw-page-header-VPjYWfsT.js} +2 -2
- package/dist/lib/{shadow-claw-page-header-B7LFGQRf.js.map → shadow-claw-page-header-VPjYWfsT.js.map} +1 -1
- package/dist/lib/{shadow-claw-pages-DLspFqdK.js → shadow-claw-pages-DXrM6hgZ.js} +29 -19
- package/dist/lib/shadow-claw-pages-DXrM6hgZ.js.map +1 -0
- package/dist/lib/{shadow-claw-peerjs-D8xWwuWR.js → shadow-claw-peerjs-D3xonez5.js} +3 -3
- package/dist/lib/{shadow-claw-peerjs-D8xWwuWR.js.map → shadow-claw-peerjs-D3xonez5.js.map} +1 -1
- package/dist/lib/{shadow-claw-settings-NbvzXASD.js → shadow-claw-settings-DMTx6OS9.js} +5 -5
- package/dist/lib/{shadow-claw-settings-NbvzXASD.js.map → shadow-claw-settings-DMTx6OS9.js.map} +1 -1
- package/dist/lib/{shadow-claw-storage-B_NAoZmd.js → shadow-claw-storage-BJLnukxa.js} +3 -3
- package/dist/lib/{shadow-claw-storage-B_NAoZmd.js.map → shadow-claw-storage-BJLnukxa.js.map} +1 -1
- package/dist/lib/{shadow-claw-task-server-BaQJXhYJ.js → shadow-claw-task-server-DcMj20hD.js} +2 -2
- package/dist/lib/{shadow-claw-task-server-BaQJXhYJ.js.map → shadow-claw-task-server-DcMj20hD.js.map} +1 -1
- package/dist/lib/{shadow-claw-tasks-CAZua0-j.js → shadow-claw-tasks-BQBe4lVi.js} +7 -7
- package/dist/lib/{shadow-claw-tasks-CAZua0-j.js.map → shadow-claw-tasks-BQBe4lVi.js.map} +1 -1
- package/dist/lib/{shadow-claw-terminal-B2YJhkJL.js → shadow-claw-terminal-DPEzTxXv.js} +2 -2
- package/dist/lib/{shadow-claw-terminal-B2YJhkJL.js.map → shadow-claw-terminal-DPEzTxXv.js.map} +1 -1
- package/dist/lib/{shadow-claw-tools-CkZWxxTm.js → shadow-claw-tools-BCnU8FaK.js} +6 -6
- package/dist/lib/{shadow-claw-tools-CkZWxxTm.js.map → shadow-claw-tools-BCnU8FaK.js.map} +1 -1
- package/dist/lib/{shadow-claw-webvm-BL9cgrP9.js → shadow-claw-webvm-CnW-hoJ8.js} +2 -2
- package/dist/lib/{shadow-claw-webvm-BL9cgrP9.js.map → shadow-claw-webvm-CnW-hoJ8.js.map} +1 -1
- package/dist/lib/subsystems/mcp/webmcp.d.ts +15 -2
- package/dist/lib/{sync-web-mcp-registration-dW2MVCj4.js → sync-web-mcp-registration-DwpGjVdo.js} +10 -4
- package/dist/lib/sync-web-mcp-registration-DwpGjVdo.js.map +1 -0
- package/dist/lib/{tools-D7whby3H.js → tools-CP6G0HF7.js} +5 -6
- package/dist/lib/tools-CP6G0HF7.js.map +1 -0
- package/dist/lib/{trusted-types-d0cdkut_.js → trusted-types-0cu5Dm6M.js} +29 -4
- package/dist/lib/{trusted-types-d0cdkut_.js.map → trusted-types-0cu5Dm6M.js.map} +1 -1
- package/dist/lib/utils/index.d.ts +1 -0
- package/dist/lib/utils/index.js +4 -2
- package/dist/lib/utils/index.js.map +1 -1
- package/dist/lib/utils/resolve-page-script-dependencies.d.ts +19 -0
- package/dist/lib/utils/resolve-page-script-dependencies.js +98 -0
- package/dist/lib/utils/resolve-page-script-dependencies.js.map +1 -0
- package/dist/lib/utils/utils.js +1 -1
- package/dist/lib/webmcp-Bf9rT7uu.js +2001 -0
- package/dist/lib/webmcp-Bf9rT7uu.js.map +1 -0
- package/dist/public/.well-known/mcp/server-card.json +1 -1
- package/dist/public/.well-known/mcp.json +1 -1
- package/dist/public/AGENTS.md +3 -3
- package/dist/public/README.md +1 -1
- package/dist/public/agent.worker.js +2 -2
- package/dist/public/components/shadow-claw/shadow-claw.css +1 -1
- package/dist/public/components/shadow-claw/shadow-claw.html +1 -1
- package/dist/public/components/shadow-claw-conversations/shadow-claw-conversations.css +1 -1
- package/dist/public/components/shadow-claw-conversations/shadow-claw-conversations.html +1 -1
- package/dist/public/{configure-peer-js-WLRM7Qa7.js → configure-peer-js-OYl3V8sW.js} +1 -1
- package/dist/public/{custom-element-security-Cl991z-x.js → custom-element-security-BR4V40j4.js} +1 -1
- package/dist/public/docs/example/article/index.html +3 -3
- package/dist/public/docs/example/article.html +3 -3
- package/dist/public/docs/publishing/index.html +3 -3
- package/dist/public/docs/publishing.html +3 -3
- package/dist/public/docs/skill-creator/index.html +3 -3
- package/dist/public/docs/skill-creator.html +3 -3
- package/dist/public/docs/subsystems/custom-element-security.md +19 -5
- package/dist/public/docs/subsystems/pages.md +10 -2
- package/dist/public/docs/subsystems/tools.md +1 -2
- package/dist/public/docs/subsystems/webmcp.md +41 -6
- package/dist/public/{download-group-file-fFjoIIp4.js → download-group-file-BNmK8wac.js} +1 -1
- package/dist/public/e2e/README.md +2 -2
- package/dist/public/{e2e-bridge-CiSfBRT4.js → e2e-bridge-4phD1JUQ.js} +1 -1
- package/dist/public/{file-viewer-DFC3kfeO.js → file-viewer-Dbh3K9nL.js} +1 -1
- package/dist/public/index.html +3 -3
- package/dist/public/index.js +1 -1
- package/dist/public/{init-control-plane-BEbcwmmv.js → init-control-plane-DGOY_RNS.js} +1 -1
- package/dist/public/llms.txt +1 -1
- package/dist/public/main/index.html +3 -3
- package/dist/public/main/memory/index.html +3 -3
- package/dist/public/main/memory.html +3 -3
- package/dist/public/main.html +3 -3
- package/dist/public/{markdown-BeglYzw9.js → markdown-BPZYpfGm.js} +1 -1
- package/dist/public/{orchestrator-BlvEG3PO.js → orchestrator-OoUK7CF9.js} +1 -1
- package/dist/public/{orchestrator-DTNrntd4.js → orchestrator-a9047bGu.js} +1 -1
- package/dist/public/{peerjs-CnBdK94R.js → peerjs-Cbn310Tz.js} +1 -1
- package/dist/public/{push-client-DOHbdCyj.js → push-client-Dy4LGJy9.js} +1 -1
- package/dist/public/service-worker.js +1 -1
- package/dist/public/shadow-claw-B-HWC1uN.js +1180 -0
- package/dist/public/{shadow-claw-accounts-C6FXVw2K.js → shadow-claw-accounts-Di-anCZ1.js} +1 -1
- package/dist/public/{shadow-claw-channels-tr_r60Kq.js → shadow-claw-channels-RVwCE8pE.js} +1 -1
- package/dist/public/{shadow-claw-chat-BAAPhAOs.js → shadow-claw-chat-DI1q8UnX.js} +1 -1
- package/dist/public/{shadow-claw-control-plane-C_5VIx8E.js → shadow-claw-control-plane-KXEdLOGl.js} +2 -2
- package/dist/public/{shadow-claw-conversations-DGYZdDa3.js → shadow-claw-conversations-BCBGtS30.js} +40 -6
- package/dist/public/{shadow-claw-file-viewer-5j2-Z3fN.js → shadow-claw-file-viewer-CW3t6j-w.js} +1 -1
- package/dist/public/{shadow-claw-files-DKF4Yy0m.js → shadow-claw-files-JQ-o0ImX.js} +1 -1
- package/dist/public/{shadow-claw-git-CtUTJXKT.js → shadow-claw-git-D2M8VixW.js} +2 -2
- package/dist/public/{shadow-claw-integrations-CuBy9D3z.js → shadow-claw-integrations-Cgw6v9_1.js} +1 -1
- package/dist/public/{shadow-claw-llm-BIfNNjGL.js → shadow-claw-llm-74ieXp7i.js} +1 -1
- package/dist/public/{shadow-claw-mcp-remote-C17FXvrb.js → shadow-claw-mcp-remote-BX0BkSmy.js} +1 -1
- package/dist/public/{shadow-claw-networking-CjxQ1CLI.js → shadow-claw-networking-DNX8vaIQ.js} +1 -1
- package/dist/public/{shadow-claw-notifications-Brn2O3Ps.js → shadow-claw-notifications-BLTaGAny.js} +1 -1
- package/dist/public/{shadow-claw-page-header-Bn1P7Cxb.js → shadow-claw-page-header-CjFOdo9v.js} +1 -1
- package/dist/public/shadow-claw-pages-DOQqMm0_.js +645 -0
- package/dist/public/{shadow-claw-settings-CfDm0hVA.js → shadow-claw-settings-DFtl0Fy8.js} +2 -2
- package/dist/public/{shadow-claw-storage-DOOesRzw.js → shadow-claw-storage-gQGExZRq.js} +1 -1
- package/dist/public/{shadow-claw-task-server-H36iDDp2.js → shadow-claw-task-server-Ca45uY7S.js} +1 -1
- package/dist/public/{shadow-claw-tasks-4JsjSGkN.js → shadow-claw-tasks-CCTaaSdi.js} +1 -1
- package/dist/public/{shadow-claw-terminal-CTRTcYz-.js → shadow-claw-terminal-BfgulLkl.js} +1 -1
- package/dist/public/{shadow-claw-tools-Dm1LxNf4.js → shadow-claw-tools-V8NA4n18.js} +1 -1
- package/dist/public/{shadow-claw-webvm-JzuPe9Nr.js → shadow-claw-webvm-CxxI2bnC.js} +1 -1
- package/dist/public/sync-web-mcp-registration-CkCA8UFm.js +1 -0
- package/dist/public/{tools-FiTtOlIt.js → tools-CwQq5tJH.js} +2 -2
- package/dist/public/webmcp-CmtWOAFm.js +6 -0
- package/dist/server.js +2 -2
- package/package.json +3 -3
- package/src/cli/prerender/dsd-shell/prerender-dsd-shell.test.ts +16 -0
- package/src/cli/prerender/dsd-shell/prerender-dsd-shell.ts +62 -1
- package/src/cli/prerender/pretty-paths/prerender-pretty-paths.test.ts +277 -0
- package/src/cli/prerender/pretty-paths/prerender-pretty-paths.ts +28 -1
- package/src/cli/site-config/custom-elements/build-custom-element-script-tags.ts +13 -1
- package/src/components/shadow-claw/shadow-claw.css +12 -0
- package/src/components/shadow-claw/shadow-claw.html +12 -2
- package/src/components/shadow-claw/utils/bind-event-listeners.test.ts +18 -0
- package/src/components/shadow-claw/utils/bind-event-listeners.ts +14 -0
- package/src/components/shadow-claw/utils/get-route.test.ts +35 -0
- package/src/components/shadow-claw/utils/get-route.ts +18 -0
- package/src/components/shadow-claw/utils/sync-slotted-sidebar-active-links.test.ts +152 -1
- package/src/components/shadow-claw/utils/sync-slotted-sidebar-active-links.ts +139 -8
- package/src/components/shadow-claw-conversations/shadow-claw-conversations.css +11 -0
- package/src/components/shadow-claw-conversations/shadow-claw-conversations.html +27 -4
- package/src/components/shadow-claw-conversations/shadow-claw-conversations.ts +32 -4
- package/src/components/shadow-claw-pages/shadow-claw-pages-scripts.test.ts +266 -0
- package/src/components/shadow-claw-pages/shadow-claw-pages.ts +41 -17
- package/src/core/orchestrator/utils/sync-web-mcp-registration.test.ts +18 -1
- package/src/core/orchestrator/utils/sync-web-mcp-registration.ts +8 -0
- package/src/core/utils/init-control-plane.test.ts +9 -4
- package/src/security/custom-element-security.test.ts +65 -0
- package/src/security/custom-element-security.ts +67 -4
- package/src/stores/tools.test.ts +5 -3
- package/src/stores/tools.ts +5 -10
- package/src/subsystems/mcp/webmcp.test.ts +84 -13
- package/src/subsystems/mcp/webmcp.ts +73 -10
- package/src/utils/index.ts +1 -0
- package/src/utils/resolve-page-script-dependencies.test.ts +245 -0
- package/src/utils/resolve-page-script-dependencies.ts +198 -0
- package/dist/cli/chunk-B1hufJeO.js +0 -1
- package/dist/cli/chunk-BZpn8npn.js +0 -1
- package/dist/cli/chunk-Bw5aOTFr.js +0 -1
- package/dist/cli/chunk-C8nH01Gw.js +0 -32
- package/dist/cli/chunk-CK1ZoyoE.js +0 -17
- package/dist/cli/chunk-CVkhDr-7.js +0 -1
- package/dist/cli/chunk-Cum07Vlh.js +0 -1
- package/dist/cli/chunk-D3UhDDmV.js +0 -2
- package/dist/cli/chunk-D8GI6qj6.js +0 -1
- package/dist/cli/chunk-DEH-FvmP.js +0 -1
- package/dist/cli/chunk-DksvJ_kf.js +0 -1
- package/dist/cli/chunk-RGb9wM4R.js +0 -1
- package/dist/lib/shadow-claw-PdOpgTxH.js.map +0 -1
- package/dist/lib/shadow-claw-pages-DLspFqdK.js.map +0 -1
- package/dist/lib/sync-web-mcp-registration-dW2MVCj4.js.map +0 -1
- package/dist/lib/tools-D7whby3H.js.map +0 -1
- package/dist/lib/webmcp-CYTNZfkn.js +0 -1687
- package/dist/lib/webmcp-CYTNZfkn.js.map +0 -1
- package/dist/public/shadow-claw-CnNX-WCh.js +0 -1158
- package/dist/public/shadow-claw-pages-BwOOqRWW.js +0 -645
- package/dist/public/sync-web-mcp-registration-BnHVUjat.js +0 -1
- package/dist/public/webmcp-_TBqXlVW.js +0 -1
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach } from "@jest/globals";
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
setupSlottedSidebarActiveLinks,
|
|
4
|
+
syncSlottedSidebarActiveLinks,
|
|
5
|
+
} from "./sync-slotted-sidebar-active-links.js";
|
|
3
6
|
|
|
4
7
|
describe("syncSlottedSidebarActiveLinks", () => {
|
|
5
8
|
let host: HTMLElement;
|
|
@@ -91,3 +94,151 @@ describe("syncSlottedSidebarActiveLinks", () => {
|
|
|
91
94
|
expect(corporateLink?.classList.contains("active")).toBe(false);
|
|
92
95
|
});
|
|
93
96
|
});
|
|
97
|
+
|
|
98
|
+
describe("setupSlottedSidebarActiveLinks", () => {
|
|
99
|
+
let host: HTMLElement;
|
|
100
|
+
let originalNavigation: any;
|
|
101
|
+
let originalReplaceState: any;
|
|
102
|
+
|
|
103
|
+
beforeEach(() => {
|
|
104
|
+
originalNavigation = (window as any).navigation;
|
|
105
|
+
originalReplaceState = window.history.replaceState;
|
|
106
|
+
|
|
107
|
+
host = document.createElement("div");
|
|
108
|
+
host.innerHTML = `
|
|
109
|
+
<div slot="sidebar" class="sidebar-custom-sections">
|
|
110
|
+
<a href="/" class="sidebar-link">Home</a>
|
|
111
|
+
<a href="/2022/11/27/c-sharp-in-the-browser-without-blazor/" class="sidebar-link">C# in the Browser Without Blazor</a>
|
|
112
|
+
<a href="/2021/04/18/using-open/" class="sidebar-link">Using Open</a>
|
|
113
|
+
<a href="/2021/02/27/the-web-is-dynamic/" class="sidebar-link">The Web Is Dynamic</a>
|
|
114
|
+
</div>
|
|
115
|
+
`;
|
|
116
|
+
|
|
117
|
+
// Ensure initial location is home
|
|
118
|
+
window.history.replaceState({}, "", "/");
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
afterEach(() => {
|
|
122
|
+
if (originalNavigation !== undefined) {
|
|
123
|
+
(window as any).navigation = originalNavigation;
|
|
124
|
+
} else {
|
|
125
|
+
delete (window as any).navigation;
|
|
126
|
+
}
|
|
127
|
+
window.history.replaceState = originalReplaceState;
|
|
128
|
+
window.history.replaceState({}, "", "/");
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
it("synchronizes active sidebar link on Navigation API navigate event using destination URL when window.location.href is still old URL", () => {
|
|
132
|
+
const nav = new EventTarget();
|
|
133
|
+
(window as any).navigation = nav;
|
|
134
|
+
|
|
135
|
+
const cleanup = setupSlottedSidebarActiveLinks(host);
|
|
136
|
+
|
|
137
|
+
const linkCSharp = host.querySelector<HTMLAnchorElement>(
|
|
138
|
+
'a[href="/2022/11/27/c-sharp-in-the-browser-without-blazor/"]',
|
|
139
|
+
);
|
|
140
|
+
const linkUsingOpen = host.querySelector<HTMLAnchorElement>(
|
|
141
|
+
'a[href="/2021/04/18/using-open/"]',
|
|
142
|
+
);
|
|
143
|
+
|
|
144
|
+
// Initial state: home is active, posts are not
|
|
145
|
+
expect(linkCSharp?.classList.contains("active")).toBe(false);
|
|
146
|
+
expect(linkUsingOpen?.classList.contains("active")).toBe(false);
|
|
147
|
+
|
|
148
|
+
// 1. User scrolls to C# post: replaceState triggers navigate event.
|
|
149
|
+
// Crucially: At this point, the browser has NOT committed navigation yet,
|
|
150
|
+
// so window.location.href is STILL "http://localhost/"!
|
|
151
|
+
const navEvent1 = new Event("navigate") as any;
|
|
152
|
+
navEvent1.destination = {
|
|
153
|
+
url: `${window.location.origin}/2022/11/27/c-sharp-in-the-browser-without-blazor/`,
|
|
154
|
+
};
|
|
155
|
+
nav.dispatchEvent(navEvent1);
|
|
156
|
+
|
|
157
|
+
// C# link MUST be highlighted immediately without off-by-one delay
|
|
158
|
+
expect(linkCSharp?.classList.contains("active")).toBe(true);
|
|
159
|
+
expect(linkCSharp?.getAttribute("aria-current")).toBe("page");
|
|
160
|
+
expect(linkUsingOpen?.classList.contains("active")).toBe(false);
|
|
161
|
+
|
|
162
|
+
// Browser now commits navigation: location updates to C# post
|
|
163
|
+
window.history.replaceState(
|
|
164
|
+
{},
|
|
165
|
+
"",
|
|
166
|
+
"/2022/11/27/c-sharp-in-the-browser-without-blazor/",
|
|
167
|
+
);
|
|
168
|
+
|
|
169
|
+
// 2. User scrolls down to "Using Open": replaceState triggers navigate event.
|
|
170
|
+
// window.location.href is STILL C# post URL!
|
|
171
|
+
const navEvent2 = new Event("navigate") as any;
|
|
172
|
+
navEvent2.destination = {
|
|
173
|
+
url: `${window.location.origin}/2021/04/18/using-open/`,
|
|
174
|
+
};
|
|
175
|
+
nav.dispatchEvent(navEvent2);
|
|
176
|
+
|
|
177
|
+
// "Using Open" MUST be highlighted, and C# link MUST NOT be highlighted
|
|
178
|
+
expect(linkCSharp?.classList.contains("active")).toBe(false);
|
|
179
|
+
expect(linkCSharp?.hasAttribute("aria-current")).toBe(false);
|
|
180
|
+
expect(linkUsingOpen?.classList.contains("active")).toBe(true);
|
|
181
|
+
expect(linkUsingOpen?.getAttribute("aria-current")).toBe("page");
|
|
182
|
+
|
|
183
|
+
cleanup();
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
it("synchronizes active sidebar link immediately when history.replaceState is called", () => {
|
|
187
|
+
delete (window as any).navigation;
|
|
188
|
+
|
|
189
|
+
const cleanup = setupSlottedSidebarActiveLinks(host);
|
|
190
|
+
|
|
191
|
+
const linkCSharp = host.querySelector<HTMLAnchorElement>(
|
|
192
|
+
'a[href="/2022/11/27/c-sharp-in-the-browser-without-blazor/"]',
|
|
193
|
+
);
|
|
194
|
+
const linkUsingOpen = host.querySelector<HTMLAnchorElement>(
|
|
195
|
+
'a[href="/2021/04/18/using-open/"]',
|
|
196
|
+
);
|
|
197
|
+
|
|
198
|
+
expect(linkCSharp?.classList.contains("active")).toBe(false);
|
|
199
|
+
|
|
200
|
+
// replaceState to C# post
|
|
201
|
+
window.history.replaceState(
|
|
202
|
+
{ inFeedScroll: true },
|
|
203
|
+
"",
|
|
204
|
+
"/2022/11/27/c-sharp-in-the-browser-without-blazor/",
|
|
205
|
+
);
|
|
206
|
+
|
|
207
|
+
expect(linkCSharp?.classList.contains("active")).toBe(true);
|
|
208
|
+
expect(linkUsingOpen?.classList.contains("active")).toBe(false);
|
|
209
|
+
|
|
210
|
+
// replaceState to Using Open
|
|
211
|
+
window.history.replaceState(
|
|
212
|
+
{ inFeedScroll: true },
|
|
213
|
+
"",
|
|
214
|
+
"/2021/04/18/using-open/",
|
|
215
|
+
);
|
|
216
|
+
|
|
217
|
+
expect(linkCSharp?.classList.contains("active")).toBe(false);
|
|
218
|
+
expect(linkUsingOpen?.classList.contains("active")).toBe(true);
|
|
219
|
+
|
|
220
|
+
cleanup();
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
it("synchronizes active sidebar link when shadow-claw-feed-scroll event is dispatched", () => {
|
|
224
|
+
const cleanup = setupSlottedSidebarActiveLinks(host);
|
|
225
|
+
|
|
226
|
+
const linkCSharp = host.querySelector<HTMLAnchorElement>(
|
|
227
|
+
'a[href="/2022/11/27/c-sharp-in-the-browser-without-blazor/"]',
|
|
228
|
+
);
|
|
229
|
+
|
|
230
|
+
window.dispatchEvent(
|
|
231
|
+
new CustomEvent("shadow-claw-feed-scroll", {
|
|
232
|
+
detail: {
|
|
233
|
+
url: "/2022/11/27/c-sharp-in-the-browser-without-blazor/",
|
|
234
|
+
title: "C# in the Browser Without Blazor",
|
|
235
|
+
},
|
|
236
|
+
}),
|
|
237
|
+
);
|
|
238
|
+
|
|
239
|
+
expect(linkCSharp?.classList.contains("active")).toBe(true);
|
|
240
|
+
expect(linkCSharp?.getAttribute("aria-current")).toBe("page");
|
|
241
|
+
|
|
242
|
+
cleanup();
|
|
243
|
+
});
|
|
244
|
+
});
|
|
@@ -65,7 +65,7 @@ export function syncSlottedSidebarActiveLinks(
|
|
|
65
65
|
|
|
66
66
|
/**
|
|
67
67
|
* Sets up listeners so slotted sidebar active links stay in sync whenever
|
|
68
|
-
* the URL changes (popstate, Navigation API navigate, or
|
|
68
|
+
* the URL changes (popstate, Navigation API navigate, replaceState, or feed scroll events).
|
|
69
69
|
* Returns a cleanup function to remove the listeners.
|
|
70
70
|
*/
|
|
71
71
|
export function setupSlottedSidebarActiveLinks(
|
|
@@ -75,26 +75,157 @@ export function setupSlottedSidebarActiveLinks(
|
|
|
75
75
|
return () => {};
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
const sync = () =>
|
|
78
|
+
const sync = (targetUrl?: URL) =>
|
|
79
|
+
syncSlottedSidebarActiveLinks(host, targetUrl);
|
|
79
80
|
|
|
80
81
|
// Initial sync
|
|
81
82
|
sync();
|
|
82
83
|
|
|
83
|
-
// Re-sync on back/forward navigation
|
|
84
|
-
|
|
84
|
+
// Re-sync on back/forward navigation
|
|
85
|
+
const handlePopstate = () => sync();
|
|
86
|
+
window.addEventListener("popstate", handlePopstate, { passive: true });
|
|
85
87
|
|
|
86
|
-
// Re-sync on
|
|
88
|
+
// Re-sync on custom feed-scroll or url-change events
|
|
89
|
+
const handleCustomFeedScroll = (ev: Event) => {
|
|
90
|
+
const detailUrl = (ev as CustomEvent)?.detail?.url;
|
|
91
|
+
if (detailUrl) {
|
|
92
|
+
try {
|
|
93
|
+
sync(new URL(detailUrl, window.location.href));
|
|
94
|
+
return;
|
|
95
|
+
} catch {}
|
|
96
|
+
}
|
|
97
|
+
sync();
|
|
98
|
+
};
|
|
99
|
+
window.addEventListener("shadow-claw-feed-scroll", handleCustomFeedScroll);
|
|
100
|
+
window.addEventListener("shadow-claw-url-change", handleCustomFeedScroll);
|
|
101
|
+
|
|
102
|
+
// Re-sync on Navigation API navigate (Chrome 102+)
|
|
103
|
+
// CRITICAL: On 'navigate', window.location.href has NOT yet updated (it holds the old URL).
|
|
104
|
+
// We must inspect ev.destination.url so the sidebar highlights the target article
|
|
105
|
+
// synchronously without an "off-by-one" lag.
|
|
87
106
|
const nav = (window as unknown as { navigation?: EventTarget }).navigation;
|
|
107
|
+
let handleNavigate: ((ev: any) => void) | null = null;
|
|
108
|
+
let handleCurrentEntryChange: (() => void) | null = null;
|
|
109
|
+
let handleNavigateSuccess: (() => void) | null = null;
|
|
110
|
+
|
|
88
111
|
if (nav && typeof nav.addEventListener === "function") {
|
|
89
|
-
|
|
112
|
+
handleNavigate = (ev: any) => {
|
|
113
|
+
const destUrl = ev?.destination?.url;
|
|
114
|
+
if (destUrl) {
|
|
115
|
+
try {
|
|
116
|
+
sync(new URL(destUrl));
|
|
117
|
+
return;
|
|
118
|
+
} catch {}
|
|
119
|
+
}
|
|
120
|
+
sync();
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
handleCurrentEntryChange = () => {
|
|
124
|
+
sync();
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
handleNavigateSuccess = () => {
|
|
128
|
+
sync();
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
nav.addEventListener("navigate", handleNavigate, {
|
|
132
|
+
passive: true,
|
|
133
|
+
} as EventListenerOptions);
|
|
134
|
+
|
|
135
|
+
nav.addEventListener("currententrychange", handleCurrentEntryChange, {
|
|
136
|
+
passive: true,
|
|
137
|
+
} as EventListenerOptions);
|
|
138
|
+
|
|
139
|
+
nav.addEventListener("navigatesuccess", handleNavigateSuccess, {
|
|
90
140
|
passive: true,
|
|
91
141
|
} as EventListenerOptions);
|
|
92
142
|
}
|
|
93
143
|
|
|
144
|
+
// Intercept history.replaceState and history.pushState so synchronous in-feed URL updates
|
|
145
|
+
// immediately update the slotted sidebar in environments without Navigation API or when invoked directly.
|
|
146
|
+
let origReplaceState: typeof window.history.replaceState | null = null;
|
|
147
|
+
let origPushState: typeof window.history.pushState | null = null;
|
|
148
|
+
const historyObj = typeof window !== "undefined" ? window.history : null;
|
|
149
|
+
let unhookHistory: (() => void) | null = null;
|
|
150
|
+
|
|
151
|
+
if (historyObj) {
|
|
152
|
+
origReplaceState = historyObj.replaceState;
|
|
153
|
+
origPushState = historyObj.pushState;
|
|
154
|
+
|
|
155
|
+
const wrappedReplaceState = function (
|
|
156
|
+
this: History,
|
|
157
|
+
_data: any,
|
|
158
|
+
_unused: string,
|
|
159
|
+
url?: string | URL | null,
|
|
160
|
+
) {
|
|
161
|
+
const res = origReplaceState?.apply(this, arguments as any);
|
|
162
|
+
try {
|
|
163
|
+
if (url) {
|
|
164
|
+
sync(new URL(url.toString(), window.location.href));
|
|
165
|
+
} else {
|
|
166
|
+
sync();
|
|
167
|
+
}
|
|
168
|
+
} catch {
|
|
169
|
+
sync();
|
|
170
|
+
}
|
|
171
|
+
return res;
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
const wrappedPushState = function (
|
|
175
|
+
this: History,
|
|
176
|
+
_data: any,
|
|
177
|
+
_unused: string,
|
|
178
|
+
url?: string | URL | null,
|
|
179
|
+
) {
|
|
180
|
+
const res = origPushState?.apply(this, arguments as any);
|
|
181
|
+
try {
|
|
182
|
+
if (url) {
|
|
183
|
+
sync(new URL(url.toString(), window.location.href));
|
|
184
|
+
} else {
|
|
185
|
+
sync();
|
|
186
|
+
}
|
|
187
|
+
} catch {
|
|
188
|
+
sync();
|
|
189
|
+
}
|
|
190
|
+
return res;
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
historyObj.replaceState = wrappedReplaceState;
|
|
194
|
+
historyObj.pushState = wrappedPushState;
|
|
195
|
+
|
|
196
|
+
unhookHistory = () => {
|
|
197
|
+
if (historyObj.replaceState === wrappedReplaceState && origReplaceState) {
|
|
198
|
+
historyObj.replaceState = origReplaceState;
|
|
199
|
+
}
|
|
200
|
+
if (historyObj.pushState === wrappedPushState && origPushState) {
|
|
201
|
+
historyObj.pushState = origPushState;
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
|
|
94
206
|
return () => {
|
|
95
|
-
window.removeEventListener("popstate",
|
|
207
|
+
window.removeEventListener("popstate", handlePopstate);
|
|
208
|
+
window.removeEventListener(
|
|
209
|
+
"shadow-claw-feed-scroll",
|
|
210
|
+
handleCustomFeedScroll,
|
|
211
|
+
);
|
|
212
|
+
window.removeEventListener(
|
|
213
|
+
"shadow-claw-url-change",
|
|
214
|
+
handleCustomFeedScroll,
|
|
215
|
+
);
|
|
96
216
|
if (nav && typeof nav.removeEventListener === "function") {
|
|
97
|
-
|
|
217
|
+
if (handleNavigate) {
|
|
218
|
+
nav.removeEventListener("navigate", handleNavigate);
|
|
219
|
+
}
|
|
220
|
+
if (handleCurrentEntryChange) {
|
|
221
|
+
nav.removeEventListener("currententrychange", handleCurrentEntryChange);
|
|
222
|
+
}
|
|
223
|
+
if (handleNavigateSuccess) {
|
|
224
|
+
nav.removeEventListener("navigatesuccess", handleNavigateSuccess);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
if (unhookHistory) {
|
|
228
|
+
unhookHistory();
|
|
98
229
|
}
|
|
99
230
|
};
|
|
100
231
|
}
|
|
@@ -615,3 +615,14 @@
|
|
|
615
615
|
flex: 1;
|
|
616
616
|
margin-bottom: 0;
|
|
617
617
|
}
|
|
618
|
+
|
|
619
|
+
form:tool-form-active,
|
|
620
|
+
.conversations__form:tool-form-active {
|
|
621
|
+
outline: 2px dashed var(--accent, #3b82f6);
|
|
622
|
+
outline-offset: 4px;
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
button:tool-submit-active {
|
|
626
|
+
outline: 2px dashed var(--warning, #f59e0b);
|
|
627
|
+
outline-offset: 2px;
|
|
628
|
+
}
|
|
@@ -25,7 +25,12 @@
|
|
|
25
25
|
dialog-aria-label="Create new conversation"
|
|
26
26
|
dialog-class="conversations__dialog conversations__create-dialog"
|
|
27
27
|
>
|
|
28
|
-
<form
|
|
28
|
+
<form
|
|
29
|
+
class="conversations__form"
|
|
30
|
+
method="dialog"
|
|
31
|
+
toolname="conversations_create"
|
|
32
|
+
tooldescription="Create a new conversation session"
|
|
33
|
+
>
|
|
29
34
|
<label class="conversations__label" for="conversations-create-name">
|
|
30
35
|
Conversation name
|
|
31
36
|
</label>
|
|
@@ -36,6 +41,7 @@
|
|
|
36
41
|
name="conversations-create-name"
|
|
37
42
|
required
|
|
38
43
|
type="text"
|
|
44
|
+
toolparamdescription="Display name of the new conversation"
|
|
39
45
|
/>
|
|
40
46
|
<div class="conversations__actions">
|
|
41
47
|
<button class="conversations__cancel" type="button">Cancel</button>
|
|
@@ -48,7 +54,12 @@
|
|
|
48
54
|
dialog-aria-label="Conversation Details"
|
|
49
55
|
dialog-class="conversations__dialog conversations__details-dialog"
|
|
50
56
|
>
|
|
51
|
-
<form
|
|
57
|
+
<form
|
|
58
|
+
class="conversations__form"
|
|
59
|
+
method="dialog"
|
|
60
|
+
toolname="conversations_edit_details"
|
|
61
|
+
tooldescription="Edit conversation details, model configuration, and pinned tools"
|
|
62
|
+
>
|
|
52
63
|
<label class="conversations__label" for="conversations-details-name">
|
|
53
64
|
Conversation name
|
|
54
65
|
</label>
|
|
@@ -59,6 +70,7 @@
|
|
|
59
70
|
name="conversations-details-name"
|
|
60
71
|
required
|
|
61
72
|
type="text"
|
|
73
|
+
toolparamdescription="Display name of the conversation"
|
|
62
74
|
/>
|
|
63
75
|
<label
|
|
64
76
|
class="conversations__label conversations__label--group-id"
|
|
@@ -73,6 +85,7 @@
|
|
|
73
85
|
name="conversations-details-group-id"
|
|
74
86
|
readonly
|
|
75
87
|
type="text"
|
|
88
|
+
toolparamdescription="Unique group identifier for the conversation"
|
|
76
89
|
/>
|
|
77
90
|
<button
|
|
78
91
|
type="button"
|
|
@@ -202,7 +215,12 @@
|
|
|
202
215
|
dialog-aria-label="Delete conversation"
|
|
203
216
|
dialog-class="conversations__dialog conversations__delete-dialog"
|
|
204
217
|
>
|
|
205
|
-
<form
|
|
218
|
+
<form
|
|
219
|
+
class="conversations__form"
|
|
220
|
+
method="dialog"
|
|
221
|
+
toolname="conversations_delete"
|
|
222
|
+
tooldescription="Confirm deletion of the selected conversation"
|
|
223
|
+
>
|
|
206
224
|
<p class="conversations__delete-message">
|
|
207
225
|
Delete conversation "<span class="conversations__delete-name"></span>"?
|
|
208
226
|
This cannot be undone.
|
|
@@ -220,7 +238,12 @@
|
|
|
220
238
|
dialog-aria-label="Clone conversation"
|
|
221
239
|
dialog-class="conversations__dialog conversations__clone-dialog"
|
|
222
240
|
>
|
|
223
|
-
<form
|
|
241
|
+
<form
|
|
242
|
+
class="conversations__form"
|
|
243
|
+
method="dialog"
|
|
244
|
+
toolname="conversations_clone"
|
|
245
|
+
tooldescription="Confirm cloning of the selected conversation into a new session"
|
|
246
|
+
>
|
|
224
247
|
<p class="conversations__delete-message">
|
|
225
248
|
Clone conversation "<span class="conversations__clone-name"></span>"?
|
|
226
249
|
</p>
|
|
@@ -1547,7 +1547,14 @@ export class ShadowClawConversations extends ShadowClawElement {
|
|
|
1547
1547
|
|
|
1548
1548
|
createForm?.addEventListener("submit", async (e) => {
|
|
1549
1549
|
e.preventDefault();
|
|
1550
|
-
|
|
1550
|
+
const promise = this._submitCreateDialog();
|
|
1551
|
+
if (
|
|
1552
|
+
(e as any).agentInvoked &&
|
|
1553
|
+
typeof (e as any).respondWith === "function"
|
|
1554
|
+
) {
|
|
1555
|
+
(e as any).respondWith(promise);
|
|
1556
|
+
}
|
|
1557
|
+
await promise;
|
|
1551
1558
|
});
|
|
1552
1559
|
|
|
1553
1560
|
// Details dialog
|
|
@@ -1577,7 +1584,14 @@ export class ShadowClawConversations extends ShadowClawElement {
|
|
|
1577
1584
|
|
|
1578
1585
|
detailsForm?.addEventListener("submit", async (e) => {
|
|
1579
1586
|
e.preventDefault();
|
|
1580
|
-
|
|
1587
|
+
const promise = this._submitDetailsDialog();
|
|
1588
|
+
if (
|
|
1589
|
+
(e as any).agentInvoked &&
|
|
1590
|
+
typeof (e as any).respondWith === "function"
|
|
1591
|
+
) {
|
|
1592
|
+
(e as any).respondWith(promise);
|
|
1593
|
+
}
|
|
1594
|
+
await promise;
|
|
1581
1595
|
});
|
|
1582
1596
|
|
|
1583
1597
|
// Delete dialog
|
|
@@ -1598,7 +1612,14 @@ export class ShadowClawConversations extends ShadowClawElement {
|
|
|
1598
1612
|
|
|
1599
1613
|
deleteForm?.addEventListener("submit", async (e) => {
|
|
1600
1614
|
e.preventDefault();
|
|
1601
|
-
|
|
1615
|
+
const promise = this._submitDeleteDialog();
|
|
1616
|
+
if (
|
|
1617
|
+
(e as any).agentInvoked &&
|
|
1618
|
+
typeof (e as any).respondWith === "function"
|
|
1619
|
+
) {
|
|
1620
|
+
(e as any).respondWith(promise);
|
|
1621
|
+
}
|
|
1622
|
+
await promise;
|
|
1602
1623
|
});
|
|
1603
1624
|
|
|
1604
1625
|
// Clone dialog
|
|
@@ -1619,7 +1640,14 @@ export class ShadowClawConversations extends ShadowClawElement {
|
|
|
1619
1640
|
|
|
1620
1641
|
cloneForm?.addEventListener("submit", async (e) => {
|
|
1621
1642
|
e.preventDefault();
|
|
1622
|
-
|
|
1643
|
+
const promise = this._submitCloneDialog();
|
|
1644
|
+
if (
|
|
1645
|
+
(e as any).agentInvoked &&
|
|
1646
|
+
typeof (e as any).respondWith === "function"
|
|
1647
|
+
) {
|
|
1648
|
+
(e as any).respondWith(promise);
|
|
1649
|
+
}
|
|
1650
|
+
await promise;
|
|
1623
1651
|
});
|
|
1624
1652
|
}
|
|
1625
1653
|
|