shadow-claw 1.40.0 → 1.41.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 +2 -2
- package/.well-known/mcp/servers.json +1 -1
- package/.well-known/mcp.json +2 -2
- package/README.md +1 -0
- package/dist/cli/build/build.js +1 -1
- package/dist/cli/{chunk-Bfz2NYgD.js → chunk-0IeC97mU.js} +7 -7
- package/dist/cli/chunk-3oLxlxPn.js +1 -0
- package/dist/cli/{chunk-BXg4-9Rq2.js → chunk-8CrZyP1b2.js} +1 -1
- package/dist/cli/{chunk-BP5Hg6CM.js → chunk-B--ueArB.js} +1 -1
- package/dist/cli/chunk-BIh7rXlJ2.js +1 -0
- package/dist/cli/{chunk-Drr0VSGA2.js → chunk-BKnTOLLS2.js} +1 -1
- package/dist/cli/{chunk-C5PuRV08.js → chunk-BLMC1Bxv.js} +1 -1
- package/dist/cli/{chunk-B2tNSlFy2.js → chunk-BOigzz2U2.js} +1 -1
- package/dist/cli/{chunk-DOf3DZdR.js → chunk-BOzn335y.js} +1 -1
- package/dist/cli/chunk-BjOeVLb42.js +1 -0
- package/dist/cli/{chunk-DqTx0rRp2.js → chunk-Bjqh5_SU2.js} +1 -1
- package/dist/cli/chunk-BqWBd_jF2.js +1 -0
- package/dist/cli/{chunk-Bc9nRNyN.js → chunk-BvVUnHTq.js} +12 -9
- package/dist/cli/{chunk-DIbSoQmd2.js → chunk-C6FFByBU2.js} +2 -2
- package/dist/cli/{chunk-Drq18VZe.js → chunk-C9-aL3rF.js} +1 -1
- package/dist/cli/{chunk-BUhqHeEA2.js → chunk-C9czddEh2.js} +2 -2
- package/dist/cli/chunk-CCx8WOwz2.js +1 -0
- package/dist/cli/{chunk-BkMSjVJb.js → chunk-CK6ejMig.js} +1 -1
- package/dist/cli/chunk-CUUERioR2.js +1 -0
- package/dist/cli/chunk-CXAobnJd.js +1 -0
- package/dist/cli/chunk-CY1X0pOF2.js +1 -0
- package/dist/cli/chunk-CZvvgLVv.js +1 -0
- package/dist/cli/chunk-CbcwbfJB.js +1 -0
- package/dist/cli/{chunk-quilB3TV2.js → chunk-Ci9OJGcd2.js} +1 -1
- package/dist/cli/chunk-Cj9wl0qx.js +1 -0
- package/dist/cli/{chunk-3gRhOmGo2.js → chunk-CjJsVrKI2.js} +1 -1
- package/dist/cli/{chunk-CmEfzm-_.js → chunk-ClPZ4Rea.js} +1 -1
- package/dist/cli/{chunk-WMPAfIvV2.js → chunk-DHJCGRuG2.js} +1 -1
- package/dist/cli/{chunk-C7Y2xIk4.js → chunk-DKVkYTV9.js} +1 -1
- package/dist/cli/chunk-DR2XtWRo.js +1 -0
- package/dist/cli/{chunk-DID5VvOG.js → chunk-DTES-dE6.js} +3 -3
- package/dist/cli/{chunk-BiVJVh_S.js → chunk-DUlIqkaX.js} +7 -7
- package/dist/cli/{chunk-CkpueGaZ2.js → chunk-DjWle8FF2.js} +1 -1
- package/dist/cli/{chunk-CSvHmNOk.js → chunk-DmRXVLfy.js} +1 -1
- package/dist/cli/{chunk-BT1xXZn72.js → chunk-HlSiTC-u2.js} +1 -1
- package/dist/cli/{chunk-da0bsiOn.js → chunk-P4JSeFBI.js} +1 -1
- package/dist/cli/chunk-UcNbHaRQ.js +1 -0
- package/dist/cli/{chunk-BXFHFbEd.js → chunk-UweLmfQS.js} +1 -1
- package/dist/cli/chunk-bQQkVCw-.js +94 -0
- package/dist/cli/{chunk-CGiXWHTi2.js → chunk-gwpxl-0W2.js} +1 -1
- package/dist/cli/{chunk-NH8koEis2.js → chunk-nmDhxXH_2.js} +1 -1
- package/dist/cli/chunk-p0n_c-I2.js +1 -0
- package/dist/cli/{chunk-D7xP72La.js → chunk-q7r4FosZ.js} +1 -1
- package/dist/cli/cli.js +3 -3
- package/dist/cli/prerender/dsd-shell/prerender-dsd-shell.js +1 -1
- package/dist/electron/main.cjs +1 -1
- package/dist/headless-agent.js +1 -1
- package/dist/lib/{app-routes-BAEMLu9g.js → app-routes-CKkiX12g.js} +7 -2
- package/dist/lib/app-routes-CKkiX12g.js.map +1 -0
- package/dist/lib/components/index.js +26 -26
- package/dist/lib/components/settings/shadow-claw-accounts.js +1 -1
- package/dist/lib/components/settings/shadow-claw-channel-config.js +1 -1
- package/dist/lib/components/settings/shadow-claw-control-plane.js +1 -1
- package/dist/lib/components/settings/shadow-claw-git.js +1 -1
- package/dist/lib/components/settings/shadow-claw-integrations.js +1 -1
- package/dist/lib/components/settings/shadow-claw-llm.js +1 -1
- package/dist/lib/components/settings/shadow-claw-mcp-remote.js +1 -1
- package/dist/lib/components/settings/shadow-claw-networking.js +1 -1
- package/dist/lib/components/settings/shadow-claw-notifications.js +1 -1
- package/dist/lib/components/settings/shadow-claw-peerjs.js +1 -1
- package/dist/lib/components/settings/shadow-claw-storage.js +1 -1
- package/dist/lib/components/settings/shadow-claw-task-server.js +1 -1
- package/dist/lib/components/settings/shadow-claw-webvm.js +1 -1
- package/dist/lib/components/shadow-claw/utils/syncSlottedSidebarActiveLinks.d.ts +10 -0
- package/dist/lib/components/shadow-claw-a2ui.js +1 -1
- package/dist/lib/components/shadow-claw-accounts.js +1 -1
- package/dist/lib/components/shadow-claw-channel-config.js +1 -1
- package/dist/lib/components/shadow-claw-channels.js +1 -1
- package/dist/lib/components/shadow-claw-chat.js +1 -1
- package/dist/lib/components/shadow-claw-control-plane.js +1 -1
- package/dist/lib/components/shadow-claw-conversations.js +1 -1
- package/dist/lib/components/shadow-claw-file-viewer/shadow-claw-file-viewer.d.ts +1 -1
- package/dist/lib/components/shadow-claw-file-viewer.js +1 -1
- package/dist/lib/components/shadow-claw-files.js +1 -1
- package/dist/lib/components/shadow-claw-git.js +1 -1
- package/dist/lib/components/shadow-claw-integrations.js +1 -1
- package/dist/lib/components/shadow-claw-llm.js +1 -1
- package/dist/lib/components/shadow-claw-mcp-remote.js +1 -1
- package/dist/lib/components/shadow-claw-networking.js +1 -1
- package/dist/lib/components/shadow-claw-notifications.js +1 -1
- package/dist/lib/components/shadow-claw-page-header.js +1 -1
- package/dist/lib/components/shadow-claw-pages.js +1 -1
- package/dist/lib/components/shadow-claw-peerjs.js +1 -1
- package/dist/lib/components/shadow-claw-settings.js +1 -1
- package/dist/lib/components/shadow-claw-storage.js +1 -1
- package/dist/lib/components/shadow-claw-task-server.js +1 -1
- package/dist/lib/components/shadow-claw-tasks.js +1 -1
- package/dist/lib/components/shadow-claw-terminal.js +1 -1
- package/dist/lib/components/shadow-claw-tools.js +1 -1
- package/dist/lib/components/shadow-claw-webvm.js +1 -1
- package/dist/lib/components/shadow-claw.js +1 -1
- package/dist/lib/{config-CPHDmyTx.js → config-DZkF9LiO.js} +2 -2
- package/dist/lib/{config-CPHDmyTx.js.map → config-DZkF9LiO.js.map} +1 -1
- package/dist/lib/{configurePeerJs-BsJoycQd.js → configurePeerJs-B3IE9BY2.js} +3 -3
- package/dist/lib/{configurePeerJs-BsJoycQd.js.map → configurePeerJs-B3IE9BY2.js.map} +1 -1
- package/dist/lib/{connections-BdIru7bF.js → connections-CalJGWvZ.js} +2 -2
- package/dist/lib/{connections-BdIru7bF.js.map → connections-CalJGWvZ.js.map} +1 -1
- package/dist/lib/core/orchestrator/orchestrator-state.d.ts +2 -1
- package/dist/lib/core/orchestrator/orchestrator.d.ts +2 -1
- package/dist/lib/core/orchestrator/utils/operations/task.d.ts +1 -0
- package/dist/lib/{downloadGroupFile-Dn0KsMlV.js → downloadGroupFile-DDE1fIhJ.js} +2 -2
- package/dist/lib/{downloadGroupFile-Dn0KsMlV.js.map → downloadGroupFile-DDE1fIhJ.js.map} +1 -1
- package/dist/lib/{file-viewer-BYrXXu-X.js → file-viewer-Bll2EoGc.js} +5 -5
- package/dist/lib/{file-viewer-BYrXXu-X.js.map → file-viewer-Bll2EoGc.js.map} +1 -1
- package/dist/lib/{getGroupDir-DF-RZO8X.js → getGroupDir-MHv7Lvmp.js} +4 -4
- package/dist/lib/{getGroupDir-DF-RZO8X.js.map → getGroupDir-MHv7Lvmp.js.map} +1 -1
- package/dist/lib/{git-s_0cgKm1.js → git-Bv_M3dgw.js} +3 -3
- package/dist/lib/{git-s_0cgKm1.js.map → git-Bv_M3dgw.js.map} +1 -1
- package/dist/lib/{iframe-sanitizer-DFdda1jJ.js → iframe-sanitizer-C7ZGDjEI.js} +2 -2
- package/dist/lib/{iframe-sanitizer-DFdda1jJ.js.map → iframe-sanitizer-C7ZGDjEI.js.map} +1 -1
- package/dist/lib/{iframe-storage-proxy-qrhZmQyO.js → iframe-storage-proxy-CR8ZYHPd.js} +2 -2
- package/dist/lib/{iframe-storage-proxy-qrhZmQyO.js.map → iframe-storage-proxy-CR8ZYHPd.js.map} +1 -1
- package/dist/lib/index.js +27 -27
- package/dist/lib/{initChatSplitResize-DuNlwCuI.js → initChatSplitResize-DiKTI-wk.js} +2 -2
- package/dist/lib/{initChatSplitResize-DuNlwCuI.js.map → initChatSplitResize-DiKTI-wk.js.map} +1 -1
- package/dist/lib/{initControlPlane-D4UZ4EhV.js → initControlPlane-CzjtQ4aM.js} +15 -15
- package/dist/lib/{initControlPlane-D4UZ4EhV.js.map → initControlPlane-CzjtQ4aM.js.map} +1 -1
- package/dist/lib/{markdown-CRRwbN9h.js → markdown-k8wA9LKy.js} +4 -4
- package/dist/lib/{markdown-CRRwbN9h.js.map → markdown-k8wA9LKy.js.map} +1 -1
- package/dist/lib/{mcp-reconnect-COdZ-cea.js → mcp-reconnect-CGIdfZnS.js} +2 -2
- package/dist/lib/{mcp-reconnect-COdZ-cea.js.map → mcp-reconnect-CGIdfZnS.js.map} +1 -1
- package/dist/lib/{memoryStorage-BsMe2FOQ.js → memoryStorage-DL-Bo3dh.js} +2 -2
- package/dist/lib/{memoryStorage-BsMe2FOQ.js.map → memoryStorage-DL-Bo3dh.js.map} +1 -1
- package/dist/lib/{orchestrator-D9f5fDCb.js → orchestrator-DKHCoikY.js} +11 -11
- package/dist/lib/{orchestrator-D9f5fDCb.js.map → orchestrator-DKHCoikY.js.map} +1 -1
- package/dist/lib/{orchestrator-Bq9ft3uG.js → orchestrator-Dn1ZOz9B.js} +20 -24
- package/dist/lib/orchestrator-Dn1ZOz9B.js.map +1 -0
- package/dist/lib/{peerjs-6u8KtenE.js → peerjs-BK41iBvP.js} +7 -7
- package/dist/lib/{peerjs-6u8KtenE.js.map → peerjs-BK41iBvP.js.map} +1 -1
- package/dist/lib/{push-client-DCnB2-OU.js → push-client-DKgVFD2Z.js} +3 -3
- package/dist/lib/{push-client-DCnB2-OU.js.map → push-client-DKgVFD2Z.js.map} +1 -1
- package/dist/lib/{readGroupFileBytes-nKNJ6sbl.js → readGroupFileBytes-CgU_UfGv.js} +2 -2
- package/dist/lib/{readGroupFileBytes-nKNJ6sbl.js.map → readGroupFileBytes-CgU_UfGv.js.map} +1 -1
- package/dist/lib/{shadow-claw-MumteAJy.js → shadow-claw-CtCj5Rn_.js} +121 -16
- package/dist/lib/shadow-claw-CtCj5Rn_.js.map +1 -0
- package/dist/lib/{shadow-claw-a2ui-Dipe8nY2.js → shadow-claw-a2ui-CvK5w940.js} +2 -2
- package/dist/lib/{shadow-claw-a2ui-Dipe8nY2.js.map → shadow-claw-a2ui-CvK5w940.js.map} +1 -1
- package/dist/lib/{shadow-claw-accounts-BgCkz3Zv.js → shadow-claw-accounts-Br3XdHro.js} +3 -3
- package/dist/lib/{shadow-claw-accounts-BgCkz3Zv.js.map → shadow-claw-accounts-Br3XdHro.js.map} +1 -1
- package/dist/lib/{shadow-claw-channel-config-CIm_Bxd2.js → shadow-claw-channel-config-Da2dN19M.js} +3 -3
- package/dist/lib/{shadow-claw-channel-config-CIm_Bxd2.js.map → shadow-claw-channel-config-Da2dN19M.js.map} +1 -1
- package/dist/lib/{shadow-claw-channels-CaceK52s.js → shadow-claw-channels-BofYHgz8.js} +3 -3
- package/dist/lib/{shadow-claw-channels-CaceK52s.js.map → shadow-claw-channels-BofYHgz8.js.map} +1 -1
- package/dist/lib/{shadow-claw-chat-BD18-mAR.js → shadow-claw-chat-Dw32DPV2.js} +12 -12
- package/dist/lib/{shadow-claw-chat-BD18-mAR.js.map → shadow-claw-chat-Dw32DPV2.js.map} +1 -1
- package/dist/lib/{shadow-claw-control-plane-U6LsfRPm.js → shadow-claw-control-plane-CwFotFDh.js} +7 -7
- package/dist/lib/{shadow-claw-control-plane-U6LsfRPm.js.map → shadow-claw-control-plane-CwFotFDh.js.map} +1 -1
- package/dist/lib/{shadow-claw-conversations-CDsza_oB.js → shadow-claw-conversations-0UXge23k.js} +5 -5
- package/dist/lib/{shadow-claw-conversations-CDsza_oB.js.map → shadow-claw-conversations-0UXge23k.js.map} +1 -1
- package/dist/lib/{shadow-claw-file-viewer-CMOnFmcP.js → shadow-claw-file-viewer-CAsn9NxH.js} +30 -30
- package/dist/lib/{shadow-claw-file-viewer-CMOnFmcP.js.map → shadow-claw-file-viewer-CAsn9NxH.js.map} +1 -1
- package/dist/lib/{shadow-claw-files-BI0P3m8a.js → shadow-claw-files-xGGhsHNH.js} +9 -9
- package/dist/lib/{shadow-claw-files-BI0P3m8a.js.map → shadow-claw-files-xGGhsHNH.js.map} +1 -1
- package/dist/lib/{shadow-claw-git-xRApLEMN.js → shadow-claw-git-B606hcMU.js} +6 -6
- package/dist/lib/{shadow-claw-git-xRApLEMN.js.map → shadow-claw-git-B606hcMU.js.map} +1 -1
- package/dist/lib/{shadow-claw-integrations-B2e1Nfg1.js → shadow-claw-integrations-Bwq5cba1.js} +4 -4
- package/dist/lib/{shadow-claw-integrations-B2e1Nfg1.js.map → shadow-claw-integrations-Bwq5cba1.js.map} +1 -1
- package/dist/lib/{shadow-claw-llm-Bc2mWuGb.js → shadow-claw-llm-BgpcMBIy.js} +6 -6
- package/dist/lib/{shadow-claw-llm-Bc2mWuGb.js.map → shadow-claw-llm-BgpcMBIy.js.map} +1 -1
- package/dist/lib/{shadow-claw-mcp-remote-D_Bh3aeC.js → shadow-claw-mcp-remote-DvQCA-Bk.js} +4 -4
- package/dist/lib/{shadow-claw-mcp-remote-D_Bh3aeC.js.map → shadow-claw-mcp-remote-DvQCA-Bk.js.map} +1 -1
- package/dist/lib/{shadow-claw-networking-F5W3n5ci.js → shadow-claw-networking-Cxvf9c7E.js} +2 -2
- package/dist/lib/{shadow-claw-networking-F5W3n5ci.js.map → shadow-claw-networking-Cxvf9c7E.js.map} +1 -1
- package/dist/lib/{shadow-claw-notifications-lvMt9WJ1.js → shadow-claw-notifications-CGVcFYBy.js} +3 -3
- package/dist/lib/{shadow-claw-notifications-lvMt9WJ1.js.map → shadow-claw-notifications-CGVcFYBy.js.map} +1 -1
- package/dist/lib/{shadow-claw-page-header-6gq6EMqX.js → shadow-claw-page-header-DAYz3I_o.js} +2 -2
- package/dist/lib/{shadow-claw-page-header-6gq6EMqX.js.map → shadow-claw-page-header-DAYz3I_o.js.map} +1 -1
- package/dist/lib/{shadow-claw-pages-Bo8_z2S-.js → shadow-claw-pages-BLeEZb9k.js} +24 -12
- package/dist/lib/shadow-claw-pages-BLeEZb9k.js.map +1 -0
- package/dist/lib/{shadow-claw-peerjs-DRTLCVDQ.js → shadow-claw-peerjs-BcFnbK74.js} +3 -3
- package/dist/lib/{shadow-claw-peerjs-DRTLCVDQ.js.map → shadow-claw-peerjs-BcFnbK74.js.map} +1 -1
- package/dist/lib/{shadow-claw-settings-D00B4p4L.js → shadow-claw-settings-B7o0Z4hu.js} +9 -9
- package/dist/lib/{shadow-claw-settings-D00B4p4L.js.map → shadow-claw-settings-B7o0Z4hu.js.map} +1 -1
- package/dist/lib/{shadow-claw-storage-DgMe7-Zo.js → shadow-claw-storage-afMVqB7E.js} +5 -5
- package/dist/lib/{shadow-claw-storage-DgMe7-Zo.js.map → shadow-claw-storage-afMVqB7E.js.map} +1 -1
- package/dist/lib/{shadow-claw-task-server-D103YOuI.js → shadow-claw-task-server-B9-MQjl6.js} +2 -2
- package/dist/lib/{shadow-claw-task-server-D103YOuI.js.map → shadow-claw-task-server-B9-MQjl6.js.map} +1 -1
- package/dist/lib/{shadow-claw-tasks-6OhALkq1.js → shadow-claw-tasks-Dc4BC-t-.js} +8 -8
- package/dist/lib/{shadow-claw-tasks-6OhALkq1.js.map → shadow-claw-tasks-Dc4BC-t-.js.map} +1 -1
- package/dist/lib/{shadow-claw-terminal-BGtxA1qD.js → shadow-claw-terminal-BINcTdsk.js} +2 -2
- package/dist/lib/{shadow-claw-terminal-BGtxA1qD.js.map → shadow-claw-terminal-BINcTdsk.js.map} +1 -1
- package/dist/lib/{shadow-claw-tools-OeIwAnnd.js → shadow-claw-tools-BjFgXNLR.js} +7 -7
- package/dist/lib/{shadow-claw-tools-OeIwAnnd.js.map → shadow-claw-tools-BjFgXNLR.js.map} +1 -1
- package/dist/lib/{shadow-claw-webvm-gVFZ197u.js → shadow-claw-webvm-Xe3ByMDw.js} +3 -3
- package/dist/lib/{shadow-claw-webvm-gVFZ197u.js.map → shadow-claw-webvm-Xe3ByMDw.js.map} +1 -1
- package/dist/lib/subsystems/mcp/webmcp.d.ts +64 -0
- package/dist/lib/{syncWebMcpRegistration-Bbph0XZl.js → syncWebMcpRegistration-D7alChz0.js} +21 -6
- package/dist/lib/syncWebMcpRegistration-D7alChz0.js.map +1 -0
- package/dist/lib/{tools-D0OlSzMD.js → tools-Cmhpk3X8.js} +4 -4
- package/dist/lib/{tools-D0OlSzMD.js.map → tools-Cmhpk3X8.js.map} +1 -1
- package/dist/lib/utils/index.js +1 -1
- package/dist/lib/utils/namespacedStorage.js +1 -1
- package/dist/lib/utils/utils.js +1 -1
- package/dist/lib/{utils-DYdrO2KI.js → utils-CzgKe_XZ.js} +4 -4
- package/dist/lib/{utils-DYdrO2KI.js.map → utils-CzgKe_XZ.js.map} +1 -1
- package/dist/lib/{webmcp-D2bocsgh.js → webmcp-oEP9YpR2.js} +119 -3
- package/dist/lib/{webmcp-D2bocsgh.js.map → webmcp-oEP9YpR2.js.map} +1 -1
- package/dist/public/.well-known/mcp/server-card.json +2 -2
- package/dist/public/.well-known/mcp/servers.json +1 -1
- package/dist/public/.well-known/mcp.json +2 -2
- package/dist/public/AGENTS.md +2 -1
- package/dist/public/README.md +1 -0
- package/dist/public/agent.worker.js +1 -1
- package/dist/public/app-routes-C6-H2zPH.js +1 -0
- 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-pages/shadow-claw-pages.css +1 -1
- package/dist/public/{config-D4lVqMs8.js → config-Dewnqegf.js} +1 -1
- package/dist/public/{configurePeerJs-DDOAVSaH.js → configurePeerJs-CaPU2sN5.js} +1 -1
- package/dist/public/{connections-CiukjGiH.js → connections-CwE7jE9l.js} +1 -1
- package/dist/public/{custom-element-security-piU2U-Ec.js → custom-element-security-DLgHMf5R.js} +1 -1
- package/dist/public/docs/decisions/native-web-components-and-signals.md +1 -1
- package/dist/public/docs/example/article/index.html +5 -5
- package/dist/public/docs/guides/publishing-to-github-pages.md +49 -6
- package/dist/public/docs/publishing/index.html +5 -5
- package/dist/public/docs/skill-creator/index.html +5 -5
- package/dist/public/docs/subsystems/pages.md +10 -3
- package/dist/public/docs/subsystems/webmcp.md +89 -1
- package/dist/public/{downloadGroupFile-BiZQYY-O.js → downloadGroupFile-ChWHuap_.js} +1 -1
- package/dist/public/e2e/README.md +2 -2
- package/dist/public/{e2e-bridge-CybB810Q.js → e2e-bridge-BkaldjV2.js} +1 -1
- package/dist/public/{file-viewer-DLUBvOVD.js → file-viewer-Df4qUJCn.js} +1 -1
- package/dist/public/{getGroupDir-CLz5c8cg.js → getGroupDir-CeSr4fzS.js} +1 -1
- package/dist/public/{git-Ba8AeviI.js → git-Bscc1tK-.js} +2 -2
- package/dist/public/{iframe-sanitizer-CKOO7cxp.js → iframe-sanitizer-BVdkQsor.js} +1 -1
- package/dist/public/{iframe-storage-proxy-BvRiccH0.js → iframe-storage-proxy-Cg8aFw7o.js} +1 -1
- package/dist/public/index.css +1 -1
- package/dist/public/index.html +5 -5
- package/dist/public/index.js +1 -1
- package/dist/public/{initChatSplitResize-osJXM2gu.js → initChatSplitResize-C3Rp1LeZ.js} +1 -1
- package/dist/public/{initControlPlane-CNggzsRw.js → initControlPlane-C1pnzG16.js} +1 -1
- package/dist/public/llms.txt +1 -1
- package/dist/public/main/index.html +5 -5
- package/dist/public/main/memory/index.html +5 -5
- package/dist/public/{markdown-CZA-Ye2Q.js → markdown-D3A902nT.js} +1 -1
- package/dist/public/{mcp-reconnect-BK1bYBdC.js → mcp-reconnect-BJWxQBm_.js} +1 -1
- package/dist/public/{memoryStorage-Bew1X8Uy.js → memoryStorage-ykv-Ri-y.js} +1 -1
- package/dist/public/{orchestrator-D6tel2Zp.js → orchestrator-BVnC4Vtt.js} +2 -2
- package/dist/public/{orchestrator-BLkS_jpm.js → orchestrator-CQcc7OFA.js} +2 -2
- package/dist/public/{peerjs-CYs1F7sq.js → peerjs-CYC2cI1Y.js} +1 -1
- package/dist/public/{push-client-_HUyJlFJ.js → push-client-BJrnOULM.js} +1 -1
- package/dist/public/service-worker/fetch-proxy.js +1 -1
- package/dist/public/service-worker.js +1 -1
- package/dist/public/{shadow-claw-DmrxnX3Q.js → shadow-claw-WwfOu-tu.js} +33 -3
- package/dist/public/{shadow-claw-accounts-BqGrm47Z.js → shadow-claw-accounts-BFZxrPsH.js} +1 -1
- package/dist/public/{shadow-claw-channels-Ci2UPaaA.js → shadow-claw-channels-C0w0c1EF.js} +1 -1
- package/dist/public/{shadow-claw-chat-BxR6cBYQ.js → shadow-claw-chat-DIJ0A-QN.js} +1 -1
- package/dist/public/{shadow-claw-control-plane-C1A-CZ9H.js → shadow-claw-control-plane-DZoxUd-1.js} +2 -2
- package/dist/public/{shadow-claw-conversations-DcwG05-H.js → shadow-claw-conversations-DMyG_5zj.js} +1 -1
- package/dist/public/{shadow-claw-file-viewer-a_uRA30F.js → shadow-claw-file-viewer-DYgZjZb9.js} +2 -2
- package/dist/public/{shadow-claw-files-B774Xz1d.js → shadow-claw-files-DIOUdKJr.js} +1 -1
- package/dist/public/{shadow-claw-git-CTIPP0vs.js → shadow-claw-git-if5S0QJr.js} +2 -2
- package/dist/public/{shadow-claw-integrations-CjtkA6l0.js → shadow-claw-integrations-BQt4hcWe.js} +1 -1
- package/dist/public/{shadow-claw-llm-DfmITHde.js → shadow-claw-llm-9uf1KFA0.js} +2 -2
- package/dist/public/{shadow-claw-mcp-remote-BPuV22So.js → shadow-claw-mcp-remote-COpNIzJd.js} +1 -1
- package/dist/public/{shadow-claw-networking-DEMMygy0.js → shadow-claw-networking-AOVRUn6B.js} +1 -1
- package/dist/public/{shadow-claw-notifications-B9Xhcj1P.js → shadow-claw-notifications-CKB-W1TA.js} +1 -1
- package/dist/public/{shadow-claw-page-header-CAXokjQy.js → shadow-claw-page-header-D4LmUigA.js} +1 -1
- package/dist/public/{shadow-claw-pages-BRQw8bTm.js → shadow-claw-pages-BpHRY4vH.js} +12 -3
- package/dist/public/{shadow-claw-settings-BGrDNyqh.js → shadow-claw-settings-CE-aUo_J.js} +3 -3
- package/dist/public/{shadow-claw-storage-DK3pf11w.js → shadow-claw-storage-CFKC-Y3V.js} +1 -1
- package/dist/public/{shadow-claw-task-server-CMp5Vjza.js → shadow-claw-task-server-B_ZjqK4B.js} +1 -1
- package/dist/public/{shadow-claw-tasks-BO8aXM2B.js → shadow-claw-tasks-CGsEv48K.js} +1 -1
- package/dist/public/{shadow-claw-terminal-BSeTuyDa.js → shadow-claw-terminal-DcaS7cPH.js} +1 -1
- package/dist/public/{shadow-claw-tools-Bj6DLZ-2.js → shadow-claw-tools-Cnu9hKy0.js} +1 -1
- package/dist/public/{shadow-claw-webvm-M7d5RH8H.js → shadow-claw-webvm-BB8SFvJ8.js} +1 -1
- package/dist/public/syncWebMcpRegistration-D2Zx4oA1.js +1 -0
- package/dist/public/theme-init.js +1 -1
- package/dist/public/{tools-nysPKnGT.js → tools-sOLCHTj8.js} +1 -1
- package/dist/public/{webmcp-Bo3KTgRb.js → webmcp-YFt6vM1_.js} +1 -1
- package/dist/server.js +189 -189
- package/package.json +1 -1
- package/src/cli/cli.ts +2 -2
- package/src/cli/prerender/dsd-shell/prerender-dsd-shell.test.ts +4 -1
- package/src/cli/prerender/dsd-shell/prerender-dsd-shell.ts +7 -1
- package/src/cli/prerender/utils/insert-before-closing-head.test.ts +12 -0
- package/src/cli/prerender/utils/insert-before-closing-head.ts +4 -6
- package/src/cli/site-config/apply.test.ts +90 -0
- package/src/cli/site-config/apply.ts +181 -13
- package/src/components/shadow-claw/shadow-claw.css +26 -0
- package/src/components/shadow-claw/shadow-claw.html +4 -0
- package/src/components/shadow-claw/utils/applyRoute.ts +3 -0
- package/src/components/shadow-claw/utils/bindEventListeners.test.ts +6 -0
- package/src/components/shadow-claw/utils/bindEventListeners.ts +30 -1
- package/src/components/shadow-claw/utils/getRoute.test.ts +52 -0
- package/src/components/shadow-claw/utils/getRoute.ts +18 -0
- package/src/components/shadow-claw/utils/navigateToRoute.test.ts +21 -0
- package/src/components/shadow-claw/utils/navigateToRoute.ts +10 -0
- package/src/components/shadow-claw/utils/sidebarVisibility.ts +12 -4
- package/src/components/shadow-claw/utils/syncSlottedSidebarActiveLinks.test.ts +93 -0
- package/src/components/shadow-claw/utils/syncSlottedSidebarActiveLinks.ts +100 -0
- package/src/components/shadow-claw-file-viewer/shadow-claw-file-viewer.ts +31 -31
- package/src/components/shadow-claw-pages/shadow-claw-pages.css +10 -1
- package/src/components/shadow-claw-pages/utils/removePreviewIframe.ts +3 -0
- package/src/core/effect.test.ts +19 -0
- package/src/core/orchestrator/orchestrator-state.ts +2 -1
- package/src/core/orchestrator/orchestrator.test.ts +686 -5
- package/src/core/orchestrator/orchestrator.ts +3 -10
- package/src/core/orchestrator/utils/compactContext.test.ts +423 -121
- package/src/core/orchestrator/utils/configurePeerJs.test.ts +27 -0
- package/src/core/orchestrator/utils/deliverResponse.test.ts +127 -0
- package/src/core/orchestrator/utils/dispatchSubagentInvoke.test.ts +23 -0
- package/src/core/orchestrator/utils/enqueue.test.ts +520 -86
- package/src/core/orchestrator/utils/handleWorkerMessage.test.ts +664 -144
- package/src/core/orchestrator/utils/initTasks.node.test.ts +147 -0
- package/src/core/orchestrator/utils/initTasks.test.ts +926 -191
- package/src/core/orchestrator/utils/initTasks.ts +5 -4
- package/src/core/orchestrator/utils/invokeAgent.test.ts +563 -110
- package/src/core/orchestrator/utils/invokeAgent.ts +8 -10
- package/src/core/orchestrator/utils/loadChannelConfigurations.test.ts +50 -0
- package/src/core/orchestrator/utils/operations/channel.test.ts +377 -170
- package/src/core/orchestrator/utils/operations/provider.test.ts +663 -85
- package/src/core/orchestrator/utils/operations/room.test.ts +74 -11
- package/src/core/orchestrator/utils/operations/task.test.ts +452 -56
- package/src/core/orchestrator/utils/operations/task.ts +1 -1
- package/src/core/orchestrator/utils/operations/vm.test.ts +66 -7
- package/src/core/orchestrator/utils/parseDirectToolCommand.test.ts +6 -0
- package/src/core/orchestrator/utils/settings.test.ts +248 -81
- package/src/core/orchestrator/utils/setupPushTaskListener.test.ts +58 -0
- package/src/core/orchestrator/utils/syncWebMcpRegistration.test.ts +392 -64
- package/src/core/orchestrator/utils/syncWebMcpRegistration.ts +32 -3
- package/src/server/middleware/static-files.test.ts +36 -0
- package/src/server/middleware/static-files.ts +14 -6
- package/src/server/routes/mcp.ts +2 -2
- package/src/storage/staticRouting.test.ts +36 -0
- package/src/storage/staticRouting.ts +31 -3
- package/src/stores/file-viewer.test.ts +11 -0
- package/src/stores/theme.test.ts +41 -2
- package/src/stores/toast.test.ts +25 -0
- package/src/subsystems/mcp/webmcp.test.ts +255 -0
- package/src/subsystems/mcp/webmcp.ts +253 -0
- package/src/worker/tools/bash/native-bash-executor.test.ts +31 -1
- package/src/worker/tools/git/utils/extractConflictPaths.test.ts +24 -0
- package/src/worker/tools/git/utils/parseConflictRegions.test.ts +46 -0
- package/src/worker/tools/git/utils/resolveCorsProxy.test.ts +26 -5
- package/src/worker/tools/git/utils/truncateSnippet.test.ts +16 -0
- package/src/worker/tools/node-transformers-executor.test.ts +105 -6
- package/src/worker/tools/remote-mcp/remote-mcp.test.ts +172 -47
- package/src/worker/tools/remote-mcp/utils/formatListToolsOutput.test.ts +19 -0
- package/src/worker/tools/remote-mcp/utils/isMcpReauthError.test.ts +45 -0
- package/src/worker/tools/remote-mcp/utils/resolveMcpReauth.test.ts +48 -0
- package/src/worker/tools/rooms/list-room-members.test.ts +24 -10
- package/src/worker/tools/tasks/list-tasks.test.ts +39 -8
- package/src/worker/tools/tasks/update-task.test.ts +78 -14
- package/src/worker/tools/ui/javascript.test.ts +70 -17
- package/src/worker/tools/ui/list-tool-profiles.test.ts +31 -9
- package/dist/cli/chunk-00GAzVPl2.js +0 -1
- package/dist/cli/chunk-2hnFoNNC.js +0 -1
- package/dist/cli/chunk-BKQL4nzF2.js +0 -1
- package/dist/cli/chunk-BQ4K3fqj2.js +0 -1
- package/dist/cli/chunk-BVCGo6uf2.js +0 -1
- package/dist/cli/chunk-BcTH_-FL.js +0 -1
- package/dist/cli/chunk-BmD_sPRt.js +0 -1
- package/dist/cli/chunk-BsxNqqer.js +0 -1
- package/dist/cli/chunk-CCcF5T-c.js +0 -1
- package/dist/cli/chunk-CFhvwUeL.js +0 -91
- package/dist/cli/chunk-CwWtvULn.js +0 -1
- package/dist/cli/chunk-Drf-hXIR2.js +0 -1
- package/dist/cli/chunk-Dt5HNYVi.js +0 -1
- package/dist/cli/chunk-DwZQi9Ax.js +0 -1
- package/dist/cli/chunk-m9ZX7TyF2.js +0 -1
- package/dist/lib/app-routes-BAEMLu9g.js.map +0 -1
- package/dist/lib/orchestrator-Bq9ft3uG.js.map +0 -1
- package/dist/lib/shadow-claw-MumteAJy.js.map +0 -1
- package/dist/lib/shadow-claw-pages-Bo8_z2S-.js.map +0 -1
- package/dist/lib/syncWebMcpRegistration-Bbph0XZl.js.map +0 -1
- package/dist/public/app-routes-BMQ4HFaM.js +0 -1
- package/dist/public/syncWebMcpRegistration-4bT0YUyZ.js +0 -1
|
@@ -71,6 +71,8 @@ The `shadow-claw-pages` web component handles rendering the UI and displaying fi
|
|
|
71
71
|
### Navigation & URL State Synchronization
|
|
72
72
|
|
|
73
73
|
- **URL Sync & App Route Validation**: Selecting or reordering pages dispatches navigation events (`shadow-claw-navigate`) and updates browser URL history via `history.pushState()`, preserving active page state across refreshes. Same-origin link navigation uses `isPossibleAppRoute(pathname)` to validate internal routes against top-level valid pages (`VALID_PAGES`) and static route manifests; same-origin links pointing to non-app paths (such as external demo applications or static deployments) bypass SPA router interception and fall back to native browser navigation (`window.open`).
|
|
74
|
+
- **Root Pretty Path Resolution**: `src/storage/staticRouting.ts` supports mapping root paths (`/` and `/index.html`) directly to page definitions (e.g. `/pages/main/index.html`) via `"prettyPath": "/"`, and reverse-resolves root page routes back to `"/"`.
|
|
75
|
+
- **In-Feed Scroll & Navigation Guarding**: `replaceState` navigations with state flags (`inFeedScroll: true`, `scrollSpy: true`, or `suppressRouter: true` in history or Navigation API destination state) are bypassed by the router in `getRoute` and `popstateListener`, preventing unnecessary page resets and view thrashing during scroll-driven URL synchronization.
|
|
74
76
|
- **Ebook-Style Pagination**: Includes Previous (`[data-pages-prev]`) and Next (`[data-pages-next]`) page controls. Navigation buttons are dynamically enabled/disabled and set to `hidden` (`display: none !important`) based on current page index to avoid layout shifts.
|
|
75
77
|
- **Keyboard & Gesture Navigation**: Supports `ArrowLeft` and `ArrowRight` keyboard navigation for page turning, with strict focus guards to prevent interference when typing in inputs or content-editable regions. Swipe gestures are fully supported via touch and mouse drag interactions, including swipe passthrough from sandboxed iframe previews via `postMessage`.
|
|
76
78
|
- **Accessibility Announcements**: Uses an `aria-live` announcer to provide immediate screen reader feedback (`Navigated to page: [Title]`) when the active page changes.
|
|
@@ -130,24 +132,29 @@ Applications pre-rendered with Declarative Shadow DOM (DSD) shell via `src/cli/p
|
|
|
130
132
|
- When navigating to pages not embedded in the initial HTML or stored in local storage, `shadow-claw-pages` and `getStaticPageContent()` dynamically fetch individual markdown files from `static-main/` or fallback to `static-main-manifest.json`.
|
|
131
133
|
- **Pretty Paths & Sub-Routes**:
|
|
132
134
|
- Configured via `routes.json` (normally `pages/routes.json`) to map markdown page sources to clean URL paths (e.g. `/2026/06/30/on-developing-loops/`). Candidate locations include `pages/resources/`, `pages/deps/`, `resources/`, `deps/`, `pages/`, and the project root.
|
|
133
|
-
- Supports recursive nested `subRoutes` entries matching child URL hierarchies.
|
|
135
|
+
- Supports recursive nested `subRoutes` entries matching child URL hierarchies, as well as root pretty path mapping (`"prettyPath": "/"`).
|
|
134
136
|
- The pre-render pipeline generates dedicated physical `index.html` files with page-specific DSD templates.
|
|
135
137
|
- If no `routes.json` exists, pretty-path generation is skipped without failing the build.
|
|
136
138
|
- **Static Routing Manifest**:
|
|
137
139
|
- Embedded via `#shadow-claw-static-routing` JSON script tags or fetched via `static-routing.json` (`src/storage/staticRouting.ts`), allowing client-side router (`app-routes.ts`) and pages component to resolve routes asynchronously (`resolvePrettyPathToRouteAsync`, `parseRouteFromUrlAsync`) across Node.js, Electron, and GitHub Pages.
|
|
138
140
|
- **Server Middleware Fallbacks**:
|
|
139
|
-
- Express server includes static file middleware serving fallback content from `pages/main` for `/files/main/`, `/static-main/`, and `/pages/`, alongside SPA redirect fallback middleware for clean URL reloads.
|
|
141
|
+
- Express server includes static file middleware serving fallback content from `pages/main` for `/files/main/`, `/static-main/`, and `/pages/`, alongside SPA redirect fallback middleware for clean URL reloads, serving `index.html` for app routes even when matching directories exist on disk.
|
|
140
142
|
- **DSD Shell Override**:
|
|
141
143
|
- Enabled via the "Override pre-rendered content" toggle in Settings (`CONFIG_KEYS.OVERRIDE_PRERENDER_SKELETON`). Hides the initial DSD shell on boot, showing the skeleton loader until hydration finishes.
|
|
142
144
|
- **Declarative Configuration (`shadow-claw.config.json`)**:
|
|
143
145
|
- Template repositories and content publishers can declaratively brand and customize the site shell without editing ShadowClaw source files. The canonical location is `shadow-claw.config.json` in the project root (legacy `site-config.json` is also supported for backward compatibility):
|
|
144
146
|
- **`site`**: `title`, `description`, `themeColor`, `lang`.
|
|
145
147
|
- **`branding`**: `titleText`, `siteUrl`, `repoUrl`, `repoLabel`, `faviconPath`, `appleTouchIconPath`, `logoSlotHtml`.
|
|
146
|
-
- **`sidebar`**: `pagesHidden`, `chatHidden`, `tasksHidden`, `filesHidden`, `defaultPage` (`"pages"` | `"chat"` | `"tasks"` | `"files"`).
|
|
148
|
+
- **`sidebar`**: `pagesHidden`, `chatHidden`, `tasksHidden`, `filesHidden`, `defaultPage` (`"pages"` | `"chat"` | `"tasks"` | `"files"`), `slotHtml` (raw HTML string), `slotPath` (path to a custom sidebar HTML file), `sections` (array of declarative sidebar sections with `title`, `headerHref`, `items: [{ title, label, href, target, rel, active }]`, or `html`).
|
|
147
149
|
- **`pages`**: `sortOrder` (`"asc"` | `"desc"`), `defaultPinnedPage`.
|
|
148
150
|
- **`theme`**: `stylesheet` (custom theme CSS stylesheet injected into head).
|
|
149
151
|
- **`settings`**: `assistantName` (pre-seeds the default assistant name), `defaultToolsProfile` (pre-seeds the default tool profile e.g. `"__builtin_default"` or `"none"`), `enabledTools` (pre-seeds default enabled built-in tool array).
|
|
150
152
|
- **`cacheDir`** / **`server.cacheDir`**: Custom directory for storing cache, control tokens, and SQLite databases.
|
|
153
|
+
- **Slotted Sidebar & Custom Sections**:
|
|
154
|
+
- The root `<shadow-claw>` web component exposes named slots for custom navigation: `slot="sidebar-nav"`, `slot="sidebar"`, `slot="sidebar-content"`, and `slot="sidebar-footer"`.
|
|
155
|
+
- `applySiteConfig` discovers sidebar markup from `sidebar.slotHtml`, `sidebar.sections`, or auto-discovered candidate files (`pages/main/sidebar.html`, `pages/sidebar.html`, `sidebar.html`, `resources/sidebar.html`), patching the markup directly into `<shadow-claw>` light DOM.
|
|
156
|
+
- Slotted links (`.sidebar-link`, `[slot^="sidebar"] a`) automatically synchronize active classes (`.active`) and `aria-current="page"` via `syncSlottedSidebarActiveLinks` on route changes, `popstate`, and Navigation API `navigate`.
|
|
157
|
+
- On mobile viewports (<896px), clicking any slotted sidebar link automatically closes the navigation drawer.
|
|
151
158
|
- **Build-Time Application**: `src/cli/site-config/apply.ts` patches `index.html`, `manifest.json`, `sitemap.xml` / `sitemap.txt`, and copies custom theme stylesheets into the build distribution. Stylesheets under `pages/resources/`, `pages/deps/`, `resources/`, `deps/`, `pages/assets/`, or `pages/main/assets/` are flattened to the distribution root and have that prefix removed from the generated `href`; other paths, such as `pages/main/theme.css`, retain their path.
|
|
152
159
|
- **Branding Asset Precedence**: For `faviconPath` and `appleTouchIconPath`, content-specific locations under `pages/` and its supported resource/dependency paths are checked before bare repository-root defaults, so a published site's branding assets are not shadowed by ShadowClaw's built-in assets.
|
|
153
160
|
- **DSD Shell Navigation Visibility**: `src/cli/prerender/dsd-shell/prerender-dsd-shell.ts` applies `hidden` and `aria-hidden` attributes to sidebar navigation items at build time, preventing layout shift on first paint.
|
|
@@ -143,7 +143,32 @@ Executes a tool on a WebMCP `ModelContext` instance with backwards compatibility
|
|
|
143
143
|
1. Accepts an optional JavaScript object directly or a JSON string.
|
|
144
144
|
2. Calls `modelContext.executeTool(tool, inputObject, options)` first.
|
|
145
145
|
3. If the host environment rejects with an error starting with `"Failed to parse input"` (Chrome < 155 / `@mcp-b/webmcp-polyfill`) or a WebIDL `TypeError`, it retries with `JSON.stringify(inputObject)`.
|
|
146
|
-
|
|
146
|
+
|
|
147
|
+
### `getWebMcpEventTarget(type?): WebMcpEventTarget | null`
|
|
148
|
+
|
|
149
|
+
Resolves the appropriate `EventTarget` for WebMCP lifecycle events (`toolactivated` and `toolcancel`) with backwards compatibility across Chrome versions:
|
|
150
|
+
|
|
151
|
+
- **Chrome 156.0.8076.0+ (PR #245):** Returns `document.modelContext` when `ontoolactivated` or `ontoolcancel` exists on `document.modelContext`.
|
|
152
|
+
- **Chrome < 156:** Falls back to `window` where legacy event handlers resided.
|
|
153
|
+
- **Older Canary (< 152):** Checks `navigator.modelContext` if `document.modelContext` is not defined.
|
|
154
|
+
- **Node.js / Headless / Workers:** Safely returns `null` without throwing `ReferenceError`.
|
|
155
|
+
|
|
156
|
+
### `addWebMcpEventListener(type, listener, options?): () => void`
|
|
157
|
+
|
|
158
|
+
Safely registers a listener for WebMCP lifecycle events (`toolactivated`, `toolcancel`) with graceful degradation, event payload normalization, and automatic unsubscription:
|
|
159
|
+
|
|
160
|
+
- Automatically extracts and normalizes `toolName` whether passed on `event.toolName` (`ToolActivatedEvent` / `ToolCancelEvent`) or legacy `event.detail.toolName`.
|
|
161
|
+
- Returns an idempotent unsubscribe cleanup function `() => void`.
|
|
162
|
+
- Supports standard `AddEventListenerOptions` including `{ signal }` for `AbortSignal`-driven unsubscription.
|
|
163
|
+
- Supports `{ listenBoth: true }` to listen across both `document.modelContext` and `window` with tick-level deduplication during migration periods.
|
|
164
|
+
|
|
165
|
+
### `onWebMcpToolActivated(listener, options?): () => void`
|
|
166
|
+
|
|
167
|
+
Convenience helper to subscribe to tool execution start events (`toolactivated`). Returns an unsubscribe cleanup function.
|
|
168
|
+
|
|
169
|
+
### `onWebMcpToolCancel(listener, options?): () => void`
|
|
170
|
+
|
|
171
|
+
Convenience helper to subscribe to tool execution cancel events (`toolcancel`). Returns an unsubscribe cleanup function.
|
|
147
172
|
|
|
148
173
|
### `unregisterWebMcpTools(): void`
|
|
149
174
|
|
|
@@ -367,6 +392,69 @@ Internally, `executeWebMcpTool()`:
|
|
|
367
392
|
2. If `executeTool` rejects with an error starting with `"Failed to parse input"` or a `TypeError`, it transparently retries with `JSON.stringify(inputObject)`.
|
|
368
393
|
3. Propagates all other application or execution errors without retrying.
|
|
369
394
|
|
|
395
|
+
### Tool Lifecycle Events & Backward Compatibility (PR #245 / Chrome 156+)
|
|
396
|
+
|
|
397
|
+
Starting in Chrome 156.0.8076.0 (PR #245, superseding PR #146), the `ontoolactivated` and `ontoolcancel` event handler properties and lifecycle events moved from `window` to `document.modelContext`.
|
|
398
|
+
|
|
399
|
+
The WebMCP specification introduces dedicated event interfaces:
|
|
400
|
+
|
|
401
|
+
- `ToolActivatedEvent`: Dispatched when tool execution starts, exposing `readonly attribute DOMString toolName`.
|
|
402
|
+
- `ToolCancelEvent`: Dispatched when tool execution is cancelled, exposing `readonly attribute DOMString toolName`.
|
|
403
|
+
|
|
404
|
+
#### Backward Compatibility & Degradation Strategy
|
|
405
|
+
|
|
406
|
+
Because Chrome updates unevenly across user environments, enterprise installs, channels (Stable vs Dev vs Canary), and runtime shells (Electron, PWA, headless agents), ShadowClaw implements a robust target detection and subscription layer:
|
|
407
|
+
|
|
408
|
+
```ts
|
|
409
|
+
import {
|
|
410
|
+
getWebMcpEventTarget,
|
|
411
|
+
addWebMcpEventListener,
|
|
412
|
+
onWebMcpToolActivated,
|
|
413
|
+
onWebMcpToolCancel,
|
|
414
|
+
} from "./webmcp.js";
|
|
415
|
+
|
|
416
|
+
// 1. Subscribe to tool execution start
|
|
417
|
+
const unsubscribeActivated = onWebMcpToolActivated(({ toolName }) => {
|
|
418
|
+
console.log(`Tool "${toolName}" started execution.`);
|
|
419
|
+
});
|
|
420
|
+
|
|
421
|
+
// 2. Subscribe to tool execution cancellation
|
|
422
|
+
const unsubscribeCancel = onWebMcpToolCancel(({ toolName }) => {
|
|
423
|
+
console.log(`Tool "${toolName}" execution is cancelled.`);
|
|
424
|
+
});
|
|
425
|
+
|
|
426
|
+
// Clean up listeners when needed
|
|
427
|
+
unsubscribeActivated();
|
|
428
|
+
unsubscribeCancel();
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
#### Why ShadowClaw's Implementation is More Robust
|
|
432
|
+
|
|
433
|
+
While the canonical Chrome preview compat snippet checks:
|
|
434
|
+
|
|
435
|
+
```js
|
|
436
|
+
const targetFor = (type, listener, options) =>
|
|
437
|
+
(`on${type}` in (document.modelContext ?? {})
|
|
438
|
+
? document.modelContext
|
|
439
|
+
: window
|
|
440
|
+
).addEventListener(type, listener, options);
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
ShadowClaw's `getWebMcpEventTarget()` and `addWebMcpEventListener()` add essential production safeguards:
|
|
444
|
+
|
|
445
|
+
1. **Environment Safety:** Safely guards against `ReferenceError` when `document` or `window` are undefined (such as in Node.js headless CLI agents, background tasks, or Web Workers).
|
|
446
|
+
2. **Capability Verification:** Verifies that the resolved target actually implements `addEventListener` (guarding against partial mocks, older polyfills, or non-EventTarget objects).
|
|
447
|
+
3. **Multi-tier Fallback Chain:**
|
|
448
|
+
- Checks `document.modelContext` (Chrome 156+).
|
|
449
|
+
- Falls back to `navigator.modelContext` (retained for older Canary builds < 152).
|
|
450
|
+
- Falls back to `window` (Chrome < 156 legacy event location).
|
|
451
|
+
- Returns `null` cleanly in non-browser environments without throwing.
|
|
452
|
+
4. **Idempotent Cleanup:** Returns an unsubscription callback `() => void` to prevent memory leaks and dangling listeners.
|
|
453
|
+
5. **AbortSignal Support:** Accepts standard `AddEventListenerOptions` including `{ signal }` to automatically unsubscribe when an `AbortController` triggers.
|
|
454
|
+
6. **Payload Normalization:** Safely resolves `toolName` whether delivered directly via `ToolActivatedEvent` / `ToolCancelEvent` (`event.toolName`) or through legacy/custom event payloads (`event.detail.toolName`).
|
|
455
|
+
7. **Optional Dual-Coverage with Deduplication:** Allows `{ listenBoth: true }` to listen across both `modelContext` and `window` during migration/testing phases while deduplicating duplicate firings within the same tick.
|
|
456
|
+
8. **Orchestrator Event Bus Integration:** `syncWebMcpRegistration()` automatically binds WebMCP lifecycle events to `orchestrator.events`, emitting `"webmcp-tool-activated"` and `"webmcp-tool-cancel"` and cleaning up listeners during unregistration.
|
|
457
|
+
|
|
370
458
|
### Tool Querying & Graceful Degradation (`getWebMcpTools`)
|
|
371
459
|
|
|
372
460
|
ShadowClaw provides `getWebMcpTools()` to safely query registered WebMCP tools across different browser environments:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./getGroupDir-
|
|
1
|
+
import{t as e}from"./getGroupDir-CeSr4fzS.js";import{p as t}from"./tools-sOLCHTj8.js";async function n(n,r,i){let a=await e(n,r),{dirs:o,filename:s}=t(i),c=a;for(let e of o)c=await c.getDirectoryHandle(e);let l=await(await c.getFileHandle(s)).getFile(),u=URL.createObjectURL(l),d=document.createElement(`a`);d.href=u,d.download=s,document.body.appendChild(d),d.click(),document.body.removeChild(d),URL.revokeObjectURL(u)}export{n as t};
|
|
@@ -429,8 +429,8 @@ export const TIME_MINUTES_ONE = 60000;
|
|
|
429
429
|
- For Provider Help dialogs, mock provider errors to trigger the dialogs and verify the contextual instructions and links.
|
|
430
430
|
- **Remote MCP Testing**: Verify tool discovery, execution, and automatic OAuth reconnection flows by mocking streamable HTTP responses and OAuth failure modes.
|
|
431
431
|
- **Proxy Security Testing**: Verify that the `/proxy` endpoint rejects non-HTTP/S schemes (`file:`, `ftp:`, etc.) with `400` and blocks private/loopback IP targets (`localhost`, `127.*`, `10.*`, `192.168.*`, `169.254.*`) with `403`. Use the unit tests in `src/server/utils/proxy-helpers.test.ts` for scheme and SSRF guard coverage; E2E tests should verify that the authenticated service-worker format (body-based JSON with `Content-Type: application/json`) is still allowed to reach local tool servers.
|
|
432
|
-
- **Page Navigation Testing**: When testing pages or file viewer navigation, ensure keyboard events (`ArrowLeft`/`ArrowRight`) are properly guarded and do not trigger when the active element is an input or content-editable. Swipe gestures can be simulated using mouse events (`mousedown`, `mousemove`, `mouseup`) or touch events; ensure drag/text-selection does not trigger a false swipe. Assert that same-origin links are validated via `isPossibleAppRoute` so non-app routes (e.g. standalone demo subpaths) bypass SPA navigation and trigger native browser navigation (`window.open`).
|
|
433
|
-
- **Sidebar Visibility & Fallback Testing**: When verifying sidebar toggle controls, assert that hiding the currently active view triggers automatic navigation to the next available visible view (`getDefaultSidebarPage`).
|
|
432
|
+
- **Page Navigation Testing**: When testing pages or file viewer navigation, ensure keyboard events (`ArrowLeft`/`ArrowRight`) are properly guarded and do not trigger when the active element is an input or content-editable. Swipe gestures can be simulated using mouse events (`mousedown`, `mousemove`, `mouseup`) or touch events; ensure drag/text-selection does not trigger a false swipe. Assert that same-origin links are validated via `isPossibleAppRoute` so non-app routes (e.g. standalone demo subpaths) bypass SPA navigation and trigger native browser navigation (`window.open`). Verify root pretty path resolution (mapping `/` and `/index.html` to `{ page: "pages", groupId: "br:main", path: "index.html" }` and resolving `{ page: "pages" }` back to `/`), and assert that in-feed scroll / scroll-spy `replaceState` navigations with `inFeedScroll: true`, `scrollSpy: true`, or `suppressRouter: true` do not trigger router route changes or re-renders.
|
|
433
|
+
- **Sidebar Visibility & Fallback Testing**: When verifying sidebar toggle controls, assert that hiding the currently active view triggers automatic navigation to the next available visible view (`getDefaultSidebarPage`). For custom slotted sidebar links (`[slot="sidebar"]`, `[slot="sidebar-nav"]`, etc.), assert that link elements accurately reflect `.active` classes and `aria-current="page"` across route navigations, and clicking slotted links on mobile viewports (<896px) auto-closes the sidebar drawer.
|
|
434
434
|
- **Custom Element Guard Testing**: When testing custom elements in E2E or unit suites, verify that registering unapproved custom element tags throws a security error and DOM injection of unapproved custom element tags results in immediate removal by the DOM mutation guard. For custom element script descriptors (`customElements.scripts`), verify that object entries (`{ src, hasInit }`) are correctly parsed alongside legacy URLs, and `init()` is executed exclusively when `hasInit: true`.
|
|
435
435
|
- **Sandboxed Iframe & Storage Proxy Testing**: Verify preview iframe navigation and storage bridges in `file-viewer-preview-bridge.js` and `iframe-storage-bridge.js`. Assert that link clicks and programmatic navigation (`location.href`, `location.assign()`, `location.replace()`) relay navigation messages to the parent frame via `postMessage`, rebuilding the iframe `srcdoc` with injected `location.search` parameters before custom element scripts execute. Assert that `IndexedDB` and `localStorage` CRUD operations are proxied via `shadow-claw-storage-proxy` to parent storage, `showOpenFilePicker` and `showSaveFilePicker` degrade gracefully to input/download triggers, ServiceWorker/caches getters are trapped without `SecurityError` rejections, and `IframeBroadcastProxy` relays BroadcastChannel messages while suppressing command echo feedback loops via `isRelayingCommandFromParent`.
|
|
436
436
|
- **Peer & Room File Sharing Testing**: When verifying file actions in `<shadow-claw-files>` and `<shadow-claw-file-viewer>`, ensure tests assert that peer transfer options (`.files__send-peer`, `.modal-share-dropdown`) appear strictly when the conversation is a peer (`peer:...`) or room (`room:...`), and remain hidden in non-peer conversations. Verify that clicking peer transfer options correctly calls the underlying channel/store methods, shows typing indicators during transfer, and renders the sent attachment in the local chat stream.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{W as e,it as t,tt as n,v as r}from"./orchestrator-
|
|
1
|
+
import{W as e,it as t,tt as n,v as r}from"./orchestrator-BVnC4Vtt.js";function i(i,a){globalThis.__SHADOWCLAW_E2E__={isReady(){return i.ready},getDb(){return a.db},getActiveGroupId(){return i.activeGroupId},async createConversation(e){let t=a.db;if(!t)throw Error(`[E2E Bridge] DB not ready`);return i.createConversation(t,e)},async switchConversation(e){let t=a.db;if(!t)throw Error(`[E2E Bridge] DB not ready`);await i.switchConversation(t,e)},async loadTasks(){let e=a.db;if(!e)throw Error(`[E2E Bridge] DB not ready`);await i.loadTasks(e)},async configureProvider(o,s,c,l){let u=i.orchestrator,d=a.db;if(!u||!d)throw Error(`[E2E Bridge] Orchestrator or DB not ready`);await t(u,d,o,{loadApiKeyForProvider:u.loadApiKeyForProvider.bind(u),getApiKeyForHeaders:()=>e(u)}),await u.setApiKey(d,s),await n(u,d,c),await r(u,d,l)}}}function a(){return globalThis.__SHADOWCLAW_E2E_ENABLE__===!0}export{a as n,i as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./config-
|
|
1
|
+
import{o as e}from"./config-Dewnqegf.js";import{t}from"./dist-B9m1QM9v.js";import{pn as n}from"./orchestrator-BVnC4Vtt.js";import{t as r}from"./getGroupDir-CeSr4fzS.js";import{f as i,p as a}from"./tools-sOLCHTj8.js";async function o(e,t,n){let i=await r(e,t),{dirs:o,filename:s}=a(n),c=i;for(let e of o)c=await c.getDirectoryHandle(e);return await(await c.getFileHandle(s)).getFile()}const s=new class{_file;constructor(){this._file=new t.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(t,r,a=e){try{let e=r.split(`/`).pop()||r,s=/\.pdf$/i.test(e),c=this.getPreviewBinaryMimeType(e);if(s){let i=await n(t,a,r);this._file.set({name:e,path:r,groupId:a,content:``,kind:`pdf`,binaryContent:i,mimeType:`application/pdf`});return}if(c){let n=await o(t,a,r);this._file.set({name:e,path:r,groupId:a,content:``,kind:`binary`,binaryContent:null,nativeFile:n,mimeType:c});return}let l=await i(t,a,r);this._file.set({name:e,path:r,groupId:a,content:l,kind:`text`,binaryContent:null,mimeType:`text/plain`})}catch(e){throw console.error(`Failed to open file:`,r,e),e}}};export{s as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import{r as t,x as n}from"./config-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import{r as t,x as n}from"./config-Dewnqegf.js";import{a as r}from"./app-routes-C6-H2zPH.js";import{t as i}from"./txPromise-C2iYogHX.js";import{t as a}from"./getConfig-4saf0Tkq.js";import{r as o}from"./headless-BbtDA5cs.js";import{t as s}from"./memoryStorage-ykv-Ri-y.js";async function c(e,...t){let n=e;for(let e of t){let t=await n.getDirectoryHandle(e,{create:!0});if(typeof n.isSameEntry==`function`&&await n.isSameEntry(t))throw Error(`Directory navigation failed: "${e}" resolved to the same directory as its parent. The stored directory handle may be stale — try re-selecting the storage folder.`);n=t}return n}function l(e,t){return i(e,`config`,`readwrite`,e=>e.delete(t)).then(()=>void 0)}let u=null;async function d(e,t){try{return await e.entries().next(),`granted`}catch{return t}}function f(){let e=r();return e?`${n}-${e}`:n}async function p(){try{if(typeof navigator<`u`&&navigator.storage&&typeof navigator.storage.getDirectory==`function`){let e=await navigator.storage.getDirectory(),t=f();return await e.getDirectoryHandle(t,{create:!0})}}catch(e){console.warn(`OPFS is unavailable (e.g. Firefox Private Browsing). Using in-memory storage fallback:`,e)}return s()}function m(e){if(!e||typeof e!=`object`)return!1;let t=globalThis.FileSystemDirectoryHandle;return t!==void 0&&e instanceof t||typeof e.getDirectoryHandle==`function`&&typeof e.getFileHandle==`function`}async function h(e){if(u)return u;try{let n=await a(e,t.STORAGE_HANDLE);if(m(n)){let e=n;if(typeof e.queryPermission==`function`&&await e.queryPermission({mode:`readwrite`})!==`granted`&&typeof e.requestPermission==`function`)try{await e.requestPermission({mode:`readwrite`})}catch{}return e}}catch(e){console.warn(`Failed to retrieve local storage handle from DB:`,e)}return p()}function g(e){u=e}function _(){u=null}function v(e){return e instanceof DOMException&&e.name===`InvalidStateError`}async function y(e){await l(e,t.STORAGE_HANDLE),u=null}async function b(e){if(u)try{let e=await u.queryPermission({mode:`readwrite`});return{type:`local`,permission:e===`granted`?`granted`:await d(u,e),name:u.name}}catch{console.warn(`Getting storage status failed for explicit storage root.`)}try{let n=await a(e,t.STORAGE_HANDLE);if(m(n)){let e=n,t=await e.queryPermission({mode:`readwrite`});return{type:`local`,permission:t===`granted`?`granted`:await d(e,t),name:e.name}}}catch(e){console.warn(`Failed to check storage status:`,e)}return{type:`opfs`,permission:`granted`,name:`OPFS`}}var x=e({getGroupDir:()=>S});async function S(e,t){let n=await h(e);return o()?n:c(n,`groups`,t.replace(/:/g,`-`))}export{b as a,y as c,h as i,g as l,x as n,_ as o,f as r,v as s,S as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{i as e,t}from"./rolldown-runtime-aKtaBQYM.js";import{a as n,i as r}from"./config-
|
|
1
|
+
import{i as e,t}from"./rolldown-runtime-aKtaBQYM.js";import{a as n,i as r}from"./config-Dewnqegf.js";import{t as i}from"./browser-nBz_r6l4.js";import{r as a}from"./headless-BbtDA5cs.js";import{t as o}from"./buffer-9oRIc-5Z.js";import{a as s,i as c,n as l,o as u,r as d,t as f}from"./constants-BR3kgTKA.js";import{n as p,t as m}from"./crypto-browserify-U1v0eryt.js";var h=t(((t,n)=>{var r=e(i()),a=function(e){if(e||={},this.Promise=e.Promise||Promise,this.queues=Object.create(null),this.domainReentrant=e.domainReentrant||!1,this.domainReentrant){if(r.default===void 0||r.default.domain===void 0)throw Error("Domain-reentrant locks require `process.domain` to exist. Please flip `opts.domainReentrant = false`, use a NodeJS version that still implements Domain, or install a browser polyfill.");this.domains=Object.create(null)}this.timeout=e.timeout||a.DEFAULT_TIMEOUT,this.maxOccupationTime=e.maxOccupationTime||a.DEFAULT_MAX_OCCUPATION_TIME,this.maxExecutionTime=e.maxExecutionTime||a.DEFAULT_MAX_EXECUTION_TIME,e.maxPending===1/0||Number.isInteger(e.maxPending)&&e.maxPending>=0?this.maxPending=e.maxPending:this.maxPending=a.DEFAULT_MAX_PENDING};a.DEFAULT_TIMEOUT=0,a.DEFAULT_MAX_OCCUPATION_TIME=0,a.DEFAULT_MAX_EXECUTION_TIME=0,a.DEFAULT_MAX_PENDING=1e3,a.prototype.acquire=function(e,t,n,i){if(Array.isArray(e))return this._acquireBatch(e,t,n,i);if(typeof t!=`function`)throw Error(`You must pass a function to execute`);var a=null,o=null,s=null;typeof n!=`function`&&(i=n,n=null,s=new this.Promise(function(e,t){a=e,o=t})),i||={};var c=!1,l=null,u=null,d=null,f=this,p=function(t,r,i){u&&=(clearTimeout(u),null),d&&=(clearTimeout(d),null),t&&(f.queues[e]&&f.queues[e].length===0&&delete f.queues[e],f.domainReentrant&&delete f.domains[e]),c||=(s?r?o(r):a(i):typeof n==`function`&&n(r,i),!0),t&&f.queues[e]&&f.queues[e].length>0&&f.queues[e].shift()()},m=function(n){if(c)return p(n);l&&=(clearTimeout(l),null),f.domainReentrant&&n&&(f.domains[e]=r.default.domain);var a=i.maxExecutionTime||f.maxExecutionTime;if(a&&(d=setTimeout(function(){f.queues[e]&&p(n,Error(`Maximum execution time is exceeded `+e))},a)),t.length===1){var o=!1;try{t(function(e,t){o||(o=!0,p(n,e,t))})}catch(e){o||(o=!0,p(n,e))}}else f._promiseTry(function(){return t()}).then(function(e){p(n,void 0,e)},function(e){p(n,e)})};f.domainReentrant&&r.default.domain&&(m=r.default.domain.bind(m));var h=i.maxPending||f.maxPending;if(!f.queues[e])f.queues[e]=[],m(!0);else if(f.domainReentrant&&r.default.domain&&r.default.domain===f.domains[e])m(!1);else if(f.queues[e].length>=h)p(!1,Error(`Too many pending tasks in queue `+e));else{var g=function(){m(!0)};i.skipQueue?f.queues[e].unshift(g):f.queues[e].push(g);var _=i.timeout||f.timeout;_&&(l=setTimeout(function(){l=null,p(!1,Error(`async-lock timed out in queue `+e))},_))}var v=i.maxOccupationTime||f.maxOccupationTime;if(v&&(u=setTimeout(function(){f.queues[e]&&p(!1,Error(`Maximum occupation time is exceeded in queue `+e))},v)),s)return s},a.prototype._acquireBatch=function(e,t,n,r){typeof n!=`function`&&(r=n,n=null);var i=this,a=function(e,t){return function(n){i.acquire(e,t,n,r)}},o=e.reduceRight(function(e,t){return a(t,e)},t);if(typeof n==`function`)o(n);else return new this.Promise(function(e,t){o.length===1?o(function(n,r){n?t(n):e(r)}):e(o())})},a.prototype.isBusy=function(e){return e?!!this.queues[e]:Object.keys(this.queues).length>0},a.prototype._promiseTry=function(e){try{return this.Promise.resolve(e())}catch(e){return this.Promise.reject(e)}},n.exports=a})),g=t(((e,t)=>{t.exports=h()})),_=t((e=>{
|
|
2
2
|
/*! crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */
|
|
3
3
|
(function(t){typeof DO_NOT_EXPORT_CRC>`u`?typeof e==`object`?t(e):typeof define==`function`&&define.amd?define(function(){var e={};return t(e),e}):t({}):t({})})(function(e){e.version=`1.2.2`;function t(){for(var e=0,t=Array(256),n=0;n!=256;++n)e=n,e=e&1?-306674912^e>>>1:e>>>1,e=e&1?-306674912^e>>>1:e>>>1,e=e&1?-306674912^e>>>1:e>>>1,e=e&1?-306674912^e>>>1:e>>>1,e=e&1?-306674912^e>>>1:e>>>1,e=e&1?-306674912^e>>>1:e>>>1,e=e&1?-306674912^e>>>1:e>>>1,e=e&1?-306674912^e>>>1:e>>>1,t[n]=e;return typeof Int32Array<`u`?new Int32Array(t):t}var n=t();function r(e){var t=0,n=0,r=0,i=typeof Int32Array<`u`?new Int32Array(4096):Array(4096);for(r=0;r!=256;++r)i[r]=e[r];for(r=0;r!=256;++r)for(n=e[r],t=256+r;t<4096;t+=256)n=i[t]=n>>>8^e[n&255];var a=[];for(r=1;r!=16;++r)a[r-1]=typeof Int32Array<`u`?i.subarray(r*256,r*256+256):i.slice(r*256,r*256+256);return a}var i=r(n),a=i[0],o=i[1],s=i[2],c=i[3],l=i[4],u=i[5],d=i[6],f=i[7],p=i[8],m=i[9],h=i[10],g=i[11],_=i[12],v=i[13],y=i[14];function b(e,t){for(var r=t^-1,i=0,a=e.length;i<a;)r=r>>>8^n[(r^e.charCodeAt(i++))&255];return~r}function x(e,t){for(var r=t^-1,i=e.length-15,b=0;b<i;)r=y[e[b++]^r&255]^v[e[b++]^r>>8&255]^_[e[b++]^r>>16&255]^g[e[b++]^r>>>24]^h[e[b++]]^m[e[b++]]^p[e[b++]]^f[e[b++]]^d[e[b++]]^u[e[b++]]^l[e[b++]]^c[e[b++]]^s[e[b++]]^o[e[b++]]^a[e[b++]]^n[e[b++]];for(i+=15;b<i;)r=r>>>8^n[(r^e[b++])&255];return~r}function S(e,t){for(var r=t^-1,i=0,a=e.length,o=0,s=0;i<a;)o=e.charCodeAt(i++),o<128?r=r>>>8^n[(r^o)&255]:o<2048?(r=r>>>8^n[(r^(192|o>>6&31))&255],r=r>>>8^n[(r^(128|o&63))&255]):o>=55296&&o<57344?(o=(o&1023)+64,s=e.charCodeAt(i++)&1023,r=r>>>8^n[(r^(240|o>>8&7))&255],r=r>>>8^n[(r^(128|o>>2&63))&255],r=r>>>8^n[(r^(128|s>>6&15|(o&3)<<4))&255],r=r>>>8^n[(r^(128|s&63))&255]):(r=r>>>8^n[(r^(224|o>>12&15))&255],r=r>>>8^n[(r^(128|o>>6&63))&255],r=r>>>8^n[(r^(128|o&63))&255]);return~r}e.table=n,e.bstr=b,e.buf=x,e.str=S})})),v=t((e=>{var t=s(),n=!0,r=!0;try{String.fromCharCode.apply(null,[0])}catch{n=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{r=!1}for(var i=new t.Buf8(256),a=0;a<256;a++)i[a]=a>=252?6:a>=248?5:a>=240?4:a>=224?3:a>=192?2:1;i[254]=i[254]=1,e.string2buf=function(e){var n,r,i,a,o,s=e.length,c=0;for(a=0;a<s;a++)r=e.charCodeAt(a),(r&64512)==55296&&a+1<s&&(i=e.charCodeAt(a+1),(i&64512)==56320&&(r=65536+(r-55296<<10)+(i-56320),a++)),c+=r<128?1:r<2048?2:r<65536?3:4;for(n=new t.Buf8(c),o=0,a=0;o<c;a++)r=e.charCodeAt(a),(r&64512)==55296&&a+1<s&&(i=e.charCodeAt(a+1),(i&64512)==56320&&(r=65536+(r-55296<<10)+(i-56320),a++)),r<128?n[o++]=r:r<2048?(n[o++]=192|r>>>6,n[o++]=128|r&63):r<65536?(n[o++]=224|r>>>12,n[o++]=128|r>>>6&63,n[o++]=128|r&63):(n[o++]=240|r>>>18,n[o++]=128|r>>>12&63,n[o++]=128|r>>>6&63,n[o++]=128|r&63);return n};function o(e,i){if(i<65534&&(e.subarray&&r||!e.subarray&&n))return String.fromCharCode.apply(null,t.shrinkBuf(e,i));for(var a=``,o=0;o<i;o++)a+=String.fromCharCode(e[o]);return a}e.buf2binstring=function(e){return o(e,e.length)},e.binstring2buf=function(e){for(var n=new t.Buf8(e.length),r=0,i=n.length;r<i;r++)n[r]=e.charCodeAt(r);return n},e.buf2string=function(e,t){var n,r,a,s,c=t||e.length,l=Array(c*2);for(r=0,n=0;n<c;){if(a=e[n++],a<128){l[r++]=a;continue}if(s=i[a],s>4){l[r++]=65533,n+=s-1;continue}for(a&=s===2?31:s===3?15:7;s>1&&n<c;)a=a<<6|e[n++]&63,s--;if(s>1){l[r++]=65533;continue}a<65536?l[r++]=a:(a-=65536,l[r++]=55296|a>>10&1023,l[r++]=56320|a&1023)}return o(l,r)},e.utf8border=function(e,t){var n;for(t||=e.length,t>e.length&&(t=e.length),n=t-1;n>=0&&(e[n]&192)==128;)n--;return n<0||n===0?t:n+i[e[n]]>t?n:t}})),y=t((e=>{var t=d(),n=s(),r=v(),i=c(),a=u(),o=Object.prototype.toString,l=0,f=4,p=0,m=1,h=2,g=-1,_=0,y=8;function b(e){if(!(this instanceof b))return new b(e);this.options=n.assign({level:g,method:y,chunkSize:16384,windowBits:15,memLevel:8,strategy:_,to:``},e||{});var s=this.options;s.raw&&s.windowBits>0?s.windowBits=-s.windowBits:s.gzip&&s.windowBits>0&&s.windowBits<16&&(s.windowBits+=16),this.err=0,this.msg=``,this.ended=!1,this.chunks=[],this.strm=new a,this.strm.avail_out=0;var c=t.deflateInit2(this.strm,s.level,s.method,s.windowBits,s.memLevel,s.strategy);if(c!==p)throw Error(i[c]);if(s.header&&t.deflateSetHeader(this.strm,s.header),s.dictionary){var l=typeof s.dictionary==`string`?r.string2buf(s.dictionary):o.call(s.dictionary)===`[object ArrayBuffer]`?new Uint8Array(s.dictionary):s.dictionary;if(c=t.deflateSetDictionary(this.strm,l),c!==p)throw Error(i[c]);this._dict_set=!0}}b.prototype.push=function(e,i){var a=this.strm,s=this.options.chunkSize,c,u;if(this.ended)return!1;u=i===~~i?i:i===!0?f:l,typeof e==`string`?a.input=r.string2buf(e):o.call(e)===`[object ArrayBuffer]`?a.input=new Uint8Array(e):a.input=e,a.next_in=0,a.avail_in=a.input.length;do{if(a.avail_out===0&&(a.output=new n.Buf8(s),a.next_out=0,a.avail_out=s),c=t.deflate(a,u),c!==m&&c!==p)return this.onEnd(c),this.ended=!0,!1;(a.avail_out===0||a.avail_in===0&&(u===f||u===h))&&(this.options.to===`string`?this.onData(r.buf2binstring(n.shrinkBuf(a.output,a.next_out))):this.onData(n.shrinkBuf(a.output,a.next_out)))}while((a.avail_in>0||a.avail_out===0)&&c!==m);return u===f?(c=t.deflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===p):u===h?(this.onEnd(p),a.avail_out=0,!0):!0},b.prototype.onData=function(e){this.chunks.push(e)},b.prototype.onEnd=function(e){e===p&&(this.options.to===`string`?this.result=this.chunks.join(``):this.result=n.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function x(e,t){var n=new b(t);if(n.push(e,!0),n.err)throw n.msg||i[n.err];return n.result}function S(e,t){return t||={},t.raw=!0,x(e,t)}function C(e,t){return t||={},t.gzip=!0,x(e,t)}e.Deflate=b,e.deflate=x,e.deflateRaw=S,e.gzip=C})),b=t(((e,t)=>{function n(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=``,this.comment=``,this.hcrc=0,this.done=!1}t.exports=n})),x=t((e=>{var t=l(),n=s(),r=v(),i=f(),a=c(),o=u(),d=b(),p=Object.prototype.toString;function m(e){if(!(this instanceof m))return new m(e);this.options=n.assign({chunkSize:16384,windowBits:0,to:``},e||{});var s=this.options;s.raw&&s.windowBits>=0&&s.windowBits<16&&(s.windowBits=-s.windowBits,s.windowBits===0&&(s.windowBits=-15)),s.windowBits>=0&&s.windowBits<16&&!(e&&e.windowBits)&&(s.windowBits+=32),s.windowBits>15&&s.windowBits<48&&(s.windowBits&15||(s.windowBits|=15)),this.err=0,this.msg=``,this.ended=!1,this.chunks=[],this.strm=new o,this.strm.avail_out=0;var c=t.inflateInit2(this.strm,s.windowBits);if(c!==i.Z_OK||(this.header=new d,t.inflateGetHeader(this.strm,this.header),s.dictionary&&(typeof s.dictionary==`string`?s.dictionary=r.string2buf(s.dictionary):p.call(s.dictionary)===`[object ArrayBuffer]`&&(s.dictionary=new Uint8Array(s.dictionary)),s.raw&&(c=t.inflateSetDictionary(this.strm,s.dictionary),c!==i.Z_OK))))throw Error(a[c])}m.prototype.push=function(e,a){var o=this.strm,s=this.options.chunkSize,c=this.options.dictionary,l,u,d,f,m,h=!1;if(this.ended)return!1;u=a===~~a?a:a===!0?i.Z_FINISH:i.Z_NO_FLUSH,typeof e==`string`?o.input=r.binstring2buf(e):p.call(e)===`[object ArrayBuffer]`?o.input=new Uint8Array(e):o.input=e,o.next_in=0,o.avail_in=o.input.length;do{if(o.avail_out===0&&(o.output=new n.Buf8(s),o.next_out=0,o.avail_out=s),l=t.inflate(o,i.Z_NO_FLUSH),l===i.Z_NEED_DICT&&c&&(l=t.inflateSetDictionary(this.strm,c)),l===i.Z_BUF_ERROR&&h===!0&&(l=i.Z_OK,h=!1),l!==i.Z_STREAM_END&&l!==i.Z_OK)return this.onEnd(l),this.ended=!0,!1;o.next_out&&(o.avail_out===0||l===i.Z_STREAM_END||o.avail_in===0&&(u===i.Z_FINISH||u===i.Z_SYNC_FLUSH))&&(this.options.to===`string`?(d=r.utf8border(o.output,o.next_out),f=o.next_out-d,m=r.buf2string(o.output,d),o.next_out=f,o.avail_out=s-f,f&&n.arraySet(o.output,o.output,d,f,0),this.onData(m)):this.onData(n.shrinkBuf(o.output,o.next_out))),o.avail_in===0&&o.avail_out===0&&(h=!0)}while((o.avail_in>0||o.avail_out===0)&&l!==i.Z_STREAM_END);return l===i.Z_STREAM_END&&(u=i.Z_FINISH),u===i.Z_FINISH?(l=t.inflateEnd(this.strm),this.onEnd(l),this.ended=!0,l===i.Z_OK):u===i.Z_SYNC_FLUSH?(this.onEnd(i.Z_OK),o.avail_out=0,!0):!0},m.prototype.onData=function(e){this.chunks.push(e)},m.prototype.onEnd=function(e){e===i.Z_OK&&(this.options.to===`string`?this.result=this.chunks.join(``):this.result=n.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function h(e,t){var n=new m(t);if(n.push(e,!0),n.err)throw n.msg||a[n.err];return n.result}function g(e,t){return t||={},t.raw=!0,h(e,t)}e.Inflate=m,e.inflate=h,e.inflateRaw=g,e.ungzip=h})),S=t(((e,t)=>{var n=s().assign,r=y(),i=x(),a=f(),o={};n(o,r,i,a),t.exports=o})),C=t(((e,t)=>{let n=(e,t)=>function(...n){let r=t.promiseModule;return new r((r,i)=>{t.multiArgs?n.push((...e)=>{t.errorFirst?e[0]?i(e):(e.shift(),r(e)):r(e)}):t.errorFirst?n.push((e,t)=>{e?i(e):r(t)}):n.push(r),e.apply(this,n)})};t.exports=(e,t)=>{t=Object.assign({exclude:[/.+(Sync|Stream)$/],errorFirst:!0,promiseModule:Promise},t);let r=typeof e;if(!(e!==null&&(r===`object`||r===`function`)))throw TypeError(`Expected \`input\` to be a \`Function\` or \`Object\`, got \`${e===null?`null`:r}\``);let i=e=>{let n=t=>typeof t==`string`?e===t:t.test(e);return t.include?t.include.some(n):!t.exclude.some(n)},a;a=r===`function`?function(...r){return t.excludeMain?e(...r):n(e,t).apply(this,r)}:Object.create(Object.getPrototypeOf(e));for(let r in e){let o=e[r];a[r]=typeof o==`function`&&i(r)?n(o,t):o}return a}})),w=t(((t,n)=>{var r=e(i());function a(e){return Array.isArray(e)?e:[e]}let o=/^\s+$/,s=/(?:[^\\]|^)\\$/,c=/^\\!/,l=/^\\#/,u=/\r?\n/g,d=/^\.*\/|^\.+$/,f=`node-ignore`;typeof Symbol<`u`&&(f=Symbol.for(`node-ignore`));let p=f,m=(e,t,n)=>Object.defineProperty(e,t,{value:n}),h=/([0-z])-([0-z])/g,g=()=>!1,_=e=>e.replace(h,(e,t,n)=>t.charCodeAt(0)<=n.charCodeAt(0)?e:``),v=e=>{let{length:t}=e;return e.slice(0,t-t%2)},y=[[/^\uFEFF/,()=>``],[/((?:\\\\)*?)(\\?\s+)$/,(e,t,n)=>t+(n.indexOf(`\\`)===0?` `:``)],[/(\\+?)\s/g,(e,t)=>{let{length:n}=t;return t.slice(0,n-n%2)+` `}],[/[\\$.|*+(){^]/g,e=>`\\${e}`],[/(?!\\)\?/g,()=>`[^/]`],[/^\//,()=>`^`],[/\//g,()=>`\\/`],[/^\^*\\\*\\\*\\\//,()=>`^(?:.*\\/)?`],[/^(?=[^^])/,function(){return/\/(?!$)/.test(this)?`^`:`(?:^|\\/)`}],[/\\\/\\\*\\\*(?=\\\/|$)/g,(e,t,n)=>t+6<n.length?`(?:\\/[^\\/]+)*`:`\\/.+`],[/(^|[^\\]+)(\\\*)+(?=.+)/g,(e,t,n)=>t+n.replace(/\\\*/g,`[^\\/]*`)],[/\\\\\\(?=[$.|*+(){^])/g,()=>`\\`],[/\\\\/g,()=>`\\`],[/(\\)?\[([^\]/]*?)(\\*)($|\])/g,(e,t,n,r,i)=>t===`\\`?`\\[${n}${v(r)}${i}`:i===`]`&&r.length%2==0?`[${_(n)}${r}]`:`[]`],[/(?:[^*])$/,e=>/\/$/.test(e)?`${e}$`:`${e}(?=$|\\/$)`],[/(\^|\\\/)?\\\*$/,(e,t)=>`${t?`${t}[^/]+`:`[^/]*`}(?=$|\\/$)`]],b=Object.create(null),x=(e,t)=>{let n=b[e];return n||(n=y.reduce((t,[n,r])=>t.replace(n,r.bind(e)),e),b[e]=n),t?new RegExp(n,`i`):new RegExp(n)},S=e=>typeof e==`string`,C=e=>e&&S(e)&&!o.test(e)&&!s.test(e)&&e.indexOf(`#`)!==0,w=e=>e.split(u);var T=class{constructor(e,t,n,r){this.origin=e,this.pattern=t,this.negative=n,this.regex=r}};let E=(e,t)=>{let n=e,r=!1;e.indexOf(`!`)===0&&(r=!0,e=e.substr(1)),e=e.replace(c,`!`).replace(l,`#`);let i=x(e,t);return new T(n,e,r,i)},D=(e,t)=>{throw new t(e)},O=(e,t,n)=>S(e)?e?!O.isNotRelative(e)||n(`path should be a \`path.relative()\`d string, but got "${t}"`,RangeError):n(`path must not be empty`,TypeError):n(`path must be a string, but got \`${t}\``,TypeError),k=e=>d.test(e);O.isNotRelative=k,O.convert=e=>e;var A=class{constructor({ignorecase:e=!0,ignoreCase:t=e,allowRelativePaths:n=!1}={}){m(this,p,!0),this._rules=[],this._ignoreCase=t,this._allowRelativePaths=n,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}_addPattern(e){if(e&&e[p]){this._rules=this._rules.concat(e._rules),this._added=!0;return}if(C(e)){let t=E(e,this._ignoreCase);this._added=!0,this._rules.push(t)}}add(e){return this._added=!1,a(S(e)?w(e):e).forEach(this._addPattern,this),this._added&&this._initCache(),this}addPattern(e){return this.add(e)}_testOne(e,t){let n=!1,r=!1;return this._rules.forEach(i=>{let{negative:a}=i;r===a&&n!==r||a&&!n&&!r&&!t||i.regex.test(e)&&(n=!a,r=a)}),{ignored:n,unignored:r}}_test(e,t,n,r){let i=e&&O.convert(e);return O(i,e,this._allowRelativePaths?g:D),this._t(i,t,n,r)}_t(e,t,n,r){if(e in t)return t[e];if(r||=e.split(`/`),r.pop(),!r.length)return t[e]=this._testOne(e,n);let i=this._t(r.join(`/`)+`/`,t,n,r);return t[e]=i.ignored?i:this._testOne(e,n)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return a(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}};let ee=e=>new A(e);if(ee.isPathValid=e=>O(e&&O.convert(e),e,g),ee.default=ee,n.exports=ee,r.default!==void 0&&(r.default.env&&r.default.env.IGNORE_TEST_WIN32||r.default.platform===`win32`)){O.convert=e=>/^\\\\\?\\/.test(e)||/["<>|\u0000-\u001F]+/u.test(e)?e:e.replace(/\\/g,`/`);let e=/^[a-z]:\//i;O.isNotRelative=t=>e.test(t)||k(t)}})),T=t(((e,t)=>{function n(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function r(e,t,r){return t=t instanceof RegExp?t:new RegExp(n(t),`g`),e.replace(t,r)}t.exports={clean:function(e){if(typeof e!=`string`)throw Error(`Expected a string, received: `+e);return e=r(e,`./`,`/`),e=r(e,`..`,`.`),e=r(e,` `,`-`),e=r(e,/^[~^:?*\\\-]/g,``),e=r(e,/[~^:?*\\]/g,`-`),e=r(e,/[~^:?*\\\-]$/g,``),e=r(e,`@{`,`-`),e=r(e,/\.$/g,``),e=r(e,/\/$/g,``),e=r(e,/\.lock$/g,``),e}}})),E=t(((e,t)=>{t.exports=function(e,t){var n=e,r=t,i=n.length,a=r.length,o=!1,s=null,c=i+1,l=[],u=[],d=[],f=``,p=-1,m=0,h=1,g,_,v=function(){i>=a&&(g=n,_=i,n=r,r=g,i=a,a=_,o=!0,c=i+1)},y=function(e,t,n){return{x:e,y:t,k:n}},b=function(e,t){return{elem:e,t}},x=function(e,t,o){var s=t>o?l[e-1+c]:l[e+1+c],d,f=Math.max(t,o);for(d=f-e;d<i&&f<a&&n[d]===r[f];)++d,++f;return l[e+c]=u.length,u[u.length]=new y(d,f,s),f},S=function(e){var t=i=1,i,a=s=0,s,c;for(c=e.length-1;c>=0;--c)for(;a<e[c].x||s<e[c].y;)e[c].y-e[c].x>s-a?(o?d[d.length]=new b(r[s],p):d[d.length]=new b(r[s],h),++i,++s):e[c].y-e[c].x<s-a?(o?d[d.length]=new b(n[a],h):d[d.length]=new b(n[a],p),++t,++a):(d[d.length]=new b(n[a],m),f+=n[a],++t,++i,++a,++s)};return v(),{SES_DELETE:-1,SES_COMMON:0,SES_ADD:1,editdistance:function(){return s},getlcs:function(){return f},getses:function(){return d},compose:function(){var e=a-i,t=i+a+3,n={},r,o,d,f,p;for(f=0;f<t;++f)n[f]=-1,l[f]=-1;r=-1;do{for(++r,p=-r;p<=e-1;++p)n[p+c]=x(p,n[p-1+c]+1,n[p+1+c]);for(p=e+r;p>=e+1;--p)n[p+c]=x(p,n[p-1+c]+1,n[p+1+c]);n[e+c]=x(e,n[e-1+c]+1,n[e+1+c])}while(n[e+c]!==a);for(s=e+2*r,o=l[e+c],d=[];o!==-1;)d[d.length]=new y(u[o].x,u[o].y,null),o=u[o].k;S(d)}}}})),D=t(((e,t)=>{var n=E();function r(e,t){var r=new n(e,t);r.compose();for(var i=r.getses(),a,o,s=e.length-1,c=t.length-1,l=i.length-1;l>=0;--l)i[l].t===r.SES_COMMON?(o?(o.chain={file1index:s,file2index:c,chain:null},o=o.chain):(a={file1index:s,file2index:c,chain:null},o=a),s--,c--):i[l].t===r.SES_DELETE?s--:i[l].t===r.SES_ADD&&c--;var u={file1index:-1,file2index:-1,chain:null};return o?(o.chain=u,a):u}function i(e,t){for(var n=[],i=e.length,a=t.length,o=r(e,t);o!==null;o=o.chain){var s=i-o.file1index-1,c=a-o.file2index-1;i=o.file1index,a=o.file2index,(s||c)&&n.push({file1:[i+1,s],file2:[a+1,c]})}return n.reverse(),n}function a(e,t,n){var r,a=i(t,e),o=i(t,n),s=[];function c(e,t){s.push([e.file1[0],t,e.file1[1],e.file2[0],e.file2[1]])}for(r=0;r<a.length;r++)c(a[r],0);for(r=0;r<o.length;r++)c(o[r],2);s.sort(function(e,t){return e[0]-t[0]});var l=[],u=0;function d(e){e>u&&(l.push([1,u,e-u]),u=e)}for(var f=0;f<s.length;f++){for(var p=f,m=s[f],h=m[0],g=h+m[2];f<s.length-1;){var _=s[f+1],v=_[0];if(v>g)break;g=Math.max(g,v+_[2]),f++}if(d(h),p==f)m[4]>0&&l.push([m[1],m[3],m[4]]);else{var y={0:[e.length,-1,t.length,-1],2:[n.length,-1,t.length,-1]};for(r=p;r<=f;r++){m=s[r];var b=y[m[1]],x=m[0],S=x+m[2],C=m[3],w=C+m[4];b[0]=Math.min(C,b[0]),b[1]=Math.max(w,b[1]),b[2]=Math.min(x,b[2]),b[3]=Math.max(S,b[3])}var T=y[0][0]+(h-y[0][2]),E=y[0][1]+(g-y[0][3]),D=y[2][0]+(h-y[2][2]),O=y[2][1]+(g-y[2][3]);l.push([-1,T,E-T,h,g-h,D,O-D])}u=g}return d(t.length),l}function o(e,t,n){var r=[],i=[e,t,n],o=a(e,t,n),s=[];function c(){s.length&&r.push({ok:s}),s=[]}function l(e){for(var t=0;t<e.length;t++)s.push(e[t])}function u(t){if(t[2]!=t[6])return!0;for(var r=t[1],i=t[5],a=0;a<t[2];a++)if(e[a+r]!=n[a+i])return!0;return!1}for(var d=0;d<o.length;d++){var f=o[d],p=f[0];p==-1?u(f)?(c(),r.push({conflict:{a:e.slice(f[1],f[1]+f[2]),aIndex:f[1],o:t.slice(f[3],f[3]+f[4]),oIndex:f[3],b:n.slice(f[5],f[5]+f[6]),bIndex:f[5]}})):l(i[0].slice(f[1],f[1]+f[2])):l(i[p].slice(f[1],f[1]+f[2]))}return c(),r}t.exports=o})),O=e(t((t=>{var n=e(i()),r=o();Object.defineProperty(t,"__esModule",{value:!0});function a(e){return e&&typeof e==`object`&&`default`in e?e.default:e}var s=a(g()),c=a(p()),l=a(_()),u=a(S()),d=m(),f=a(C()),h=a(w()),v=a(T()),y=a(D()),b=class e extends Error{constructor(e){super(e),this.caller=``}toJSON(){return{code:this.code,data:this.data,caller:this.caller,message:this.message,stack:this.stack}}fromJSON(t){let n=new e(t.message);return n.code=t.code,n.data=t.data,n.caller=t.caller,n.stack=t.stack,n}get isIsomorphicGitError(){return!0}},x=class e extends b{constructor(t){super(`Modifying the index is not possible because you have unmerged files: ${t.toString}. Fix them up in the work tree, and then use 'git add/rm as appropriate to mark resolution and make a commit.`),this.code=this.name=e.code,this.data={filepaths:t}}};x.code=`UnmergedPathsError`;var E=class e extends b{constructor(t){super(`An internal error caused this command to fail.\n\nIf you're not a developer, report the bug to the developers of the application you're using. If this is a bug in isomorphic-git then you should create a proper bug yourselves. The bug should include a minimal reproduction and details about the version and environment.\n\nPlease file a bug report at https://github.com/isomorphic-git/isomorphic-git/issues with this error message: ${t}`),this.code=this.name=e.code,this.data={message:t}}};E.code=`InternalError`;var O=class e extends b{constructor(t){super(`The filepath "${t}" contains unsafe character sequences`),this.code=this.name=e.code,this.data={filepath:t}}};O.code=`UnsafeFilepathError`;var k=class{constructor(e){this.buffer=e,this._start=0}eof(){return this._start>=this.buffer.length}tell(){return this._start}seek(e){this._start=e}slice(e){let t=this.buffer.slice(this._start,this._start+e);return this._start+=e,t}toString(e,t){let n=this.buffer.toString(e,this._start,this._start+t);return this._start+=t,n}write(e,t,n){let r=this.buffer.write(e,this._start,t,n);return this._start+=t,r}copy(e,t,n){let r=e.copy(this.buffer,this._start,t,n);return this._start+=r,r}readUInt8(){let e=this.buffer.readUInt8(this._start);return this._start+=1,e}writeUInt8(e){let t=this.buffer.writeUInt8(e,this._start);return this._start+=1,t}readUInt16BE(){let e=this.buffer.readUInt16BE(this._start);return this._start+=2,e}writeUInt16BE(e){let t=this.buffer.writeUInt16BE(e,this._start);return this._start+=2,t}readUInt32BE(){let e=this.buffer.readUInt32BE(this._start);return this._start+=4,e}writeUInt32BE(e){let t=this.buffer.writeUInt32BE(e,this._start);return this._start+=4,t}};function A(e,t){return-(e<t)||+(e>t)}function ee(e,t){return A(e.path,t.path)}function j(e){let t=e>0?e>>12:0;t!==4&&t!==8&&t!==10&&t!==14&&(t=8);let n=e&511;return n=n&73?493:420,t!==8&&(n=0),(t<<12)+n}let M=2**32;function te(e,t,n,r){if(e!==void 0&&t!==void 0)return[e,t];n===void 0&&(n=r.valueOf());let i=Math.floor(n/1e3);return[i,(n-i*1e3)*1e6]}function ne(e){let[t,n]=te(e.ctimeSeconds,e.ctimeNanoseconds,e.ctimeMs,e.ctime),[r,i]=te(e.mtimeSeconds,e.mtimeNanoseconds,e.mtimeMs,e.mtime);return{ctimeSeconds:t%M,ctimeNanoseconds:n%M,mtimeSeconds:r%M,mtimeNanoseconds:i%M,dev:e.dev%M,ino:e.ino%M,mode:j(e.mode%M),uid:e.uid%M,gid:e.gid%M,size:e.size>-1?e.size%M:0}}function N(e){let t=``;for(let n of new Uint8Array(e))n<16&&(t+=`0`),t+=n.toString(16);return t}let re=null;async function P(e){return re===null&&(re=await ae()),re?ie(e):F(e)}function F(e){return new c().update(e).digest(`hex`)}async function ie(e){return N(await crypto.subtle.digest(`SHA-1`,e))}async function ae(){try{return await ie(new Uint8Array([]))===`da39a3ee5e6b4b0d3255bfef95601890afd80709`}catch{}return!1}function oe(e){return{assumeValid:!!(e&32768),extended:!!(e&16384),stage:(e&12288)>>12,nameLength:e&4095}}function se(e){let t=e.flags;return t.extended=!1,t.nameLength=Math.min(r.Buffer.from(e.path).length,4095),(t.assumeValid?32768:0)+(t.extended?16384:0)+((t.stage&3)<<12)+(t.nameLength&4095)}var I=class e{constructor(e,t){this._dirty=!1,this._unmergedPaths=t||new Set,this._entries=e||new Map}_addEntry(e){if(e.flags.stage===0)e.stages=[e],this._entries.set(e.path,e),this._unmergedPaths.delete(e.path);else{let t=this._entries.get(e.path);t||=(this._entries.set(e.path,e),e),t.stages[e.flags.stage]=e,this._unmergedPaths.add(e.path)}}static async from(t){if(r.Buffer.isBuffer(t))return e.fromBuffer(t);if(t===null)return new e(null);throw new E(`invalid type passed to GitIndex.from`)}static async fromBuffer(t){if(t.length===0)throw new E(`Index file is empty (.git/index)`);let n=new e,r=new k(t),i=r.toString(`utf8`,4);if(i!==`DIRC`)throw new E(`Invalid dircache magic file number: ${i}`);let a=await P(t.slice(0,-20)),o=t.slice(-20).toString(`hex`);if(o!==a)throw new E(`Invalid checksum in GitIndex buffer: expected ${o} but saw ${a}`);let s=r.readUInt32BE();if(s!==2)throw new E(`Unsupported dircache version: ${s}`);let c=r.readUInt32BE(),l=0;for(;!r.eof()&&l<c;){let e={};e.ctimeSeconds=r.readUInt32BE(),e.ctimeNanoseconds=r.readUInt32BE(),e.mtimeSeconds=r.readUInt32BE(),e.mtimeNanoseconds=r.readUInt32BE(),e.dev=r.readUInt32BE(),e.ino=r.readUInt32BE(),e.mode=r.readUInt32BE(),e.uid=r.readUInt32BE(),e.gid=r.readUInt32BE(),e.size=r.readUInt32BE(),e.oid=r.slice(20).toString(`hex`),e.flags=oe(r.readUInt16BE());let i=t.indexOf(0,r.tell()+1)-r.tell();if(i<1)throw new E(`Got a path length of: ${i}`);if(e.path=r.toString(`utf8`,i),e.path.includes(`..\\`)||e.path.includes(`../`))throw new O(e.path);let a=8-(r.tell()-12)%8;for(a===0&&(a=8);a--;){let t=r.readUInt8();if(t!==0)throw new E(`Expected 1-8 null characters but got '${t}' after ${e.path}`);if(r.eof())throw new E(`Unexpected end of file`)}e.stages=[],n._addEntry(e),l++}return n}get unmergedPaths(){return[...this._unmergedPaths]}get entries(){return[...this._entries.values()].sort(ee)}get entriesMap(){return this._entries}get entriesFlat(){return[...this.entries].flatMap(e=>e.stages.length>1?e.stages.filter(e=>e):e)}*[Symbol.iterator](){for(let e of this.entries)yield e}insert({filepath:e,stats:t,oid:n,stage:i=0}){t||={ctimeSeconds:0,ctimeNanoseconds:0,mtimeSeconds:0,mtimeNanoseconds:0,dev:0,ino:0,mode:0,uid:0,gid:0,size:0},t=ne(t);let a=r.Buffer.from(e),o={ctimeSeconds:t.ctimeSeconds,ctimeNanoseconds:t.ctimeNanoseconds,mtimeSeconds:t.mtimeSeconds,mtimeNanoseconds:t.mtimeNanoseconds,dev:t.dev,ino:t.ino,mode:t.mode||33188,uid:t.uid,gid:t.gid,size:t.size,path:e,oid:n,flags:{assumeValid:!1,extended:!1,stage:i,nameLength:a.length<4095?a.length:4095},stages:[]};this._addEntry(o),this._dirty=!0}delete({filepath:e}){if(this._entries.has(e))this._entries.delete(e);else for(let t of this._entries.keys())t.startsWith(e+`/`)&&this._entries.delete(t);this._unmergedPaths.has(e)&&this._unmergedPaths.delete(e),this._dirty=!0}clear(){this._entries.clear(),this._dirty=!0}has({filepath:e}){return this._entries.has(e)}render(){return this.entries.map(e=>`${e.mode.toString(8)} ${e.oid} ${e.path}`).join(`
|
|
4
4
|
`)}static async _entryToBuffer(e){let t=r.Buffer.from(e.path),n=Math.ceil((62+t.length+1)/8)*8,i=r.Buffer.alloc(n),a=new k(i),o=ne(e);return a.writeUInt32BE(o.ctimeSeconds),a.writeUInt32BE(o.ctimeNanoseconds),a.writeUInt32BE(o.mtimeSeconds),a.writeUInt32BE(o.mtimeNanoseconds),a.writeUInt32BE(o.dev),a.writeUInt32BE(o.ino),a.writeUInt32BE(o.mode),a.writeUInt32BE(o.uid),a.writeUInt32BE(o.gid),a.writeUInt32BE(o.size),a.write(e.oid,20,`hex`),a.writeUInt16BE(se(e)),a.write(e.path,t.length,`utf8`),i}async toObject(){let t=r.Buffer.alloc(12),n=new k(t);n.write(`DIRC`,4,`utf8`),n.writeUInt32BE(2),n.writeUInt32BE(this.entriesFlat.length);let i=[];for(let t of this.entries)if(i.push(e._entryToBuffer(t)),t.stages.length>1)for(let n of t.stages)n&&n!==t&&i.push(e._entryToBuffer(n));i=await Promise.all(i);let a=r.Buffer.concat(i),o=r.Buffer.concat([t,a]),s=await P(o);return r.Buffer.concat([o,r.Buffer.from(s,`hex`)])}};function ce(e,t,n=!0,r=!0){let i=ne(e),a=ne(t);return n&&i.mode!==a.mode||i.mtimeSeconds!==a.mtimeSeconds||i.ctimeSeconds!==a.ctimeSeconds||i.uid!==a.uid||i.gid!==a.gid||r&&i.ino!==a.ino||i.size!==a.size}let le=null,ue=Symbol(`IndexCache`);function de(){return{map:new Map,stats:new Map}}async function fe(e,t,n){let[r,i]=await Promise.all([e.lstat(t),e.read(t)]),a=await I.from(i);n.map.set(t,a),n.stats.set(t,r)}async function pe(e,t,n){let r=n.stats.get(t);if(r===void 0)return!0;if(r===null)return!1;let i=await e.lstat(t);return i!==null&&ce(r,i)}var L=class{static async acquire({fs:e,gitdir:t,cache:n,allowUnmerged:r=!0},i){n[ue]||(n[ue]=de());let a=`${t}/index`;le===null&&(le=new s({maxPending:1/0}));let o,c=[];return await le.acquire(a,async()=>{let t=n[ue];await pe(e,a,t)&&await fe(e,a,t);let s=t.map.get(a);if(c=s.unmergedPaths,c.length&&!r)throw new x(c);if(o=await i(s),s._dirty){let n=await s.toObject();await e.write(a,n),t.stats.set(a,await e.lstat(a)),s._dirty=!1}}),o}};function R(e){let t=Math.max(e.lastIndexOf(`/`),e.lastIndexOf(`\\`));return t>-1&&(e=e.slice(t+1)),e}function me(e){let t=Math.max(e.lastIndexOf(`/`),e.lastIndexOf(`\\`));return t===-1?`.`:t===0?`/`:e.slice(0,t)}function he(e){let t=new Map,n=function(e){if(!t.has(e)){let r={type:`tree`,fullpath:e,basename:R(e),metadata:{},children:[]};t.set(e,r),r.parent=n(me(e)),r.parent&&r.parent!==r&&r.parent.children.push(r)}return t.get(e)},r=function(e,r){if(!t.has(e)){let i={type:`blob`,fullpath:e,basename:R(e),metadata:r,parent:n(me(e)),children:[]};i.parent&&i.parent.children.push(i),t.set(e,i)}return t.get(e)};n(`.`);for(let t of e)r(t.path,t);return t}function ge(e){switch(e){case 16384:return`tree`;case 33188:return`blob`;case 33261:return`blob`;case 40960:return`blob`;case 57344:return`commit`}throw new E(`Unexpected GitTree entry mode: ${e.toString(8)}`)}var _e=class{constructor({fs:e,gitdir:t,cache:n}){this.treePromise=L.acquire({fs:e,gitdir:t,cache:n},async function(e){return he(e.entries)});let r=this;this.ConstructEntry=class{constructor(e){this._fullpath=e,this._type=!1,this._mode=!1,this._stat=!1,this._oid=!1}async type(){return r.type(this)}async mode(){return r.mode(this)}async stat(){return r.stat(this)}async content(){return r.content(this)}async oid(){return r.oid(this)}}}async readdir(e){let t=e._fullpath,n=(await this.treePromise).get(t);if(!n||n.type===`blob`)return null;if(n.type!==`tree`)throw Error(`ENOTDIR: not a directory, scandir '${t}'`);let r=n.children.map(e=>e.fullpath);return r.sort(A),r}async type(e){return e._type===!1&&await e.stat(),e._type}async mode(e){return e._mode===!1&&await e.stat(),e._mode}async stat(e){if(e._stat===!1){let t=(await this.treePromise).get(e._fullpath);if(!t)throw Error(`ENOENT: no such file or directory, lstat '${e._fullpath}'`);let n=t.type===`tree`?{}:ne(t.metadata);e._type=t.type===`tree`?`tree`:ge(n.mode),e._mode=n.mode,t.type===`tree`?e._stat=void 0:e._stat=n}return e._stat}async content(e){}async oid(e){return e._oid===!1&&(e._oid=(await this.treePromise).get(e._fullpath).metadata.oid),e._oid}};let ve=Symbol(`GitWalkSymbol`);function ye(){let e=Object.create(null);return Object.defineProperty(e,ve,{value:function({fs:e,gitdir:t,cache:n}){return new _e({fs:e,gitdir:t,cache:n})}}),Object.freeze(e),e}var z=class e extends b{constructor(t){super(`Could not find ${t}.`),this.code=this.name=e.code,this.data={what:t}}};z.code=`NotFoundError`;var B=class e extends b{constructor(t,n,r,i){super(`Object ${t} ${i?`at ${i}`:``}was anticipated to be a ${r} but it is a ${n}.`),this.code=this.name=e.code,this.data={oid:t,actual:n,expected:r,filepath:i}}};B.code=`ObjectTypeError`;var be=class e extends b{constructor(t){super(`Expected a 40-char hex object id but saw "${t}".`),this.code=this.name=e.code,this.data={value:t}}};be.code=`InvalidOidError`;var xe=class e extends b{constructor(t){super(`Could not find a fetch refspec for remote "${t}". Make sure the config file has an entry like the following:
|
|
@@ -74,7 +74,7 @@ gpgsig`+un(o)+`
|
|
|
74
74
|
`,author:o,committer:s,signingKey:c})}async function Pa({fs:e,onSign:t,dir:n,gitdir:r=V(n,`.git`),ref:i=`refs/notes/commits`,oid:a,author:o,committer:s,signingKey:c,cache:l={}}){try{X(`fs`,e),X(`gitdir`,r),X(`oid`,a);let n=new Y(e),u=await Z({fsp:n,dotgit:r}),d=await Hn({fs:n,gitdir:u,author:o});if(!d)throw new K(`author`);let f=await Un({fs:n,gitdir:u,author:d,committer:s});if(!f)throw new K(`committer`);return await Na({fs:n,cache:l,onSign:t,gitdir:u,ref:i,oid:a,author:d,committer:f,signingKey:c})}catch(e){throw e.caller=`git.removeNote`,e}}async function Fa({fs:e,gitdir:t,oldref:n,ref:r,checkout:i=!1}){if(!tr(r,!0))throw new Rt(r,v.clean(r));if(!tr(n,!0))throw new Rt(n,v.clean(n));let a=`refs/heads/${n}`,o=`refs/heads/${r}`;if(await U.exists({fs:e,gitdir:t,ref:o}))throw new Dt(`branch`,r,!1);let s=await U.resolve({fs:e,gitdir:t,ref:a,depth:1});await U.writeRef({fs:e,gitdir:t,ref:o,value:s}),await U.deleteRef({fs:e,gitdir:t,ref:a});let c=await Ar({fs:e,gitdir:t,fullname:!0})===a;(i||c)&&await U.writeSymbolicRef({fs:e,gitdir:t,ref:`HEAD`,value:o})}async function Ia({fs:e,dir:t,gitdir:n=V(t,`.git`),ref:r,oldref:i,checkout:a=!1}){try{X(`fs`,e),X(`gitdir`,n),X(`ref`,r),X(`oldref`,i);let t=new Y(e);return await Fa({fs:t,gitdir:await Z({fsp:t,dotgit:n}),ref:r,oldref:i,checkout:a})}catch(e){throw e.caller=`git.renameBranch`,e}}async function La({gitdir:e,type:t,object:n}){return P(nt.wrap({type:t,object:n}))}async function Ra({fs:e,dir:t,gitdir:n=V(t,`.git`),filepath:r,ref:i,cache:a={}}){try{X(`fs`,e),X(`gitdir`,n),X(`filepath`,r);let o=new Y(e),s=await Z({fsp:o,dotgit:n}),c,l;try{c=await U.resolve({fs:o,gitdir:s,ref:i||`HEAD`})}catch(e){if(i)throw e}if(c)try{c=await Jn({fs:o,cache:a,gitdir:s,oid:c,filepath:r})}catch{c=null}let u={ctime:new Date(0),mtime:new Date(0),dev:0,ino:0,mode:0,uid:0,gid:0,size:0},d=t&&await o.read(V(t,r));d&&(l=await La({gitdir:s,type:`blob`,object:d}),c===l&&(u=await o.lstat(V(t,r)))),await L.acquire({fs:o,gitdir:s,cache:a},async function(e){e.delete({filepath:r}),c&&e.insert({filepath:r,stats:u,oid:c})})}catch(e){throw e.caller=`git.reset`,e}}async function za({fs:e,dir:t,gitdir:n=V(t,`.git`),ref:r,depth:i}){try{X(`fs`,e),X(`gitdir`,n),X(`ref`,r);let t=new Y(e),a=await Z({fsp:t,dotgit:n});return await U.resolve({fs:t,gitdir:a,ref:r,depth:i})}catch(e){throw e.caller=`git.resolveRef`,e}}async function Ba({fs:e,dir:t,gitdir:n=V(t,`.git`),path:r,value:i,append:a=!1}){try{X(`fs`,e),X(`gitdir`,n),X(`path`,r);let t=new Y(e),o=await Z({fsp:t,dotgit:n}),s=await H.get({fs:t,gitdir:o});a?await s.append(r,i):await s.set(r,i),await H.save({fs:t,gitdir:o,config:s})}catch(e){throw e.caller=`git.setConfig`,e}}async function Va({fs:e,gitdir:t,commit:n}){return await Q({fs:e,gitdir:t,type:`commit`,object:q.from(n).toObject(),format:`content`})}var Ha=class e{static get timezoneOffsetForRefLogEntry(){let e=new Date().getTimezoneOffset(),t=Math.abs(Math.floor(e/60)),n=Math.abs(e%60).toString().padStart(2,`0`);return`${e>0?`-`:`+`}${t.toString().padStart(2,`0`)}${n}`}static createStashReflogEntry(t,n,r){let i=t.name.replace(/\s/g,``),a=Math.floor(Date.now()/1e3),o=e.timezoneOffsetForRefLogEntry;return`0000000000000000000000000000000000000000 ${n} ${i} ${t.email} ${a} ${o}\t${r}\n`}static getStashReflogEntry(e,t=!1){return e.split(`
|
|
75
75
|
`).filter(e=>e).reverse().map((e,n)=>t?`stash@{${n}}: ${e.split(` `)[1]}`:e)}},Ua=class e{constructor({fs:e,dir:t,gitdir:n=V(t,`.git`)}){Object.assign(this,{fs:e,dir:t,gitdir:n,_author:null})}static get refStash(){return`refs/stash`}static get refLogsStash(){return`logs/refs/stash`}get refStashPath(){return V(this.gitdir,e.refStash)}get refLogsStashPath(){return V(this.gitdir,e.refLogsStash)}async getAuthor(){if(!this._author&&(this._author=await Hn({fs:this.fs,gitdir:this.gitdir,author:{}}),!this._author))throw new K(`author`);return this._author}async getStashSHA(e,t){return await this.fs.exists(this.refStashPath)?(t||await this.readStashReflogs({parsed:!1}))[e].split(` `)[1]:null}async writeStashCommit({message:e,tree:t,parent:n}){return Va({fs:this.fs,gitdir:this.gitdir,commit:{message:e,tree:t,parent:n,author:await this.getAuthor(),committer:await this.getAuthor()}})}async readStashCommit(e){let t=await this.readStashReflogs({parsed:!1});if(e!==0&&(e<0||e>t.length-1))throw new Rt(`stash@${e}`,`number that is in range of [0, num of stash pushed]`);let n=await this.getStashSHA(e,t);return n?Gn({fs:this.fs,cache:{},gitdir:this.gitdir,oid:n}):{}}async writeStashRef(t){return U.writeRef({fs:this.fs,gitdir:this.gitdir,ref:e.refStash,value:t})}async writeStashReflogEntry({stashCommit:e,message:t}){let n=await this.getAuthor(),r=Ha.createStashReflogEntry(n,e,t),i=this.refLogsStashPath;await xr({filepath:i,entry:r},async()=>{let e=await this.fs.exists(i)?await this.fs.read(i,`utf8`):``;await this.fs.write(i,e+r,`utf8`)})}async readStashReflogs({parsed:e=!1}){if(!await this.fs.exists(this.refLogsStashPath))return[];let t=await this.fs.read(this.refLogsStashPath,`utf8`);return Ha.getStashReflogEntry(t,e)}};async function Wa({fs:e,dir:t,gitdir:n,message:r=``}){let i=new Ua({fs:e,dir:t,gitdir:n});await i.getAuthor();let a=await Ar({fs:e,gitdir:n,fullname:!1}),o=await U.resolve({fs:e,gitdir:n,ref:`HEAD`}),s=(await Ta({fs:e,dir:t,gitdir:n,oid:o})).commit.message,c=[o],l=null,u=J({ref:`HEAD`}),d=await wr({fs:e,dir:t,gitdir:n,treePair:[J({ref:`HEAD`}),`stage`]});if(d){let e=await i.writeStashCommit({message:`stash-Index: WIP on ${a} - ${new Date().toISOString()}`,tree:d,parent:c});c.push(e),l=d,u=ye()}let f=await wr({fs:e,dir:t,gitdir:n,treePair:[u,`workdir`]});if(f){let e=await i.writeStashCommit({message:`stash-WorkDir: WIP on ${a} - ${new Date().toISOString()}`,tree:f,parent:[c[c.length-1]]});c.push(e),l=f}if(!l||!d&&!f)throw new z(`changes, nothing to stash`);let p=(r.trim()||`WIP on ${a}`)+`: ${o.substring(0,7)} ${s}`;return{stashCommit:await i.writeStashCommit({message:p,tree:l,parent:c}),stashMsg:p,branch:a,stashMgr:i}}async function Ga({fs:e,dir:t,gitdir:n,message:r=``}){let{stashCommit:i,stashMsg:a,branch:o,stashMgr:s}=await Wa({fs:e,dir:t,gitdir:n,message:r});return await s.writeStashRef(i),await s.writeStashReflogEntry({stashCommit:i,message:a}),await mr({fs:e,dir:t,gitdir:n,ref:o,track:!1,force:!0}),i}async function Ka({fs:e,dir:t,gitdir:n,message:r=``}){let{stashCommit:i}=await Wa({fs:e,dir:t,gitdir:n,message:r});return i}async function qa({fs:e,dir:t,gitdir:n,refIdx:r=0}){let i=await new Ua({fs:e,dir:t,gitdir:n}).readStashCommit(r),{parent:a=null}=i.commit?i.commit:{};if(!(!a||!Array.isArray(a)))for(let r=0;r<a.length-1;r++){let i=(await Gn({fs:e,cache:{},gitdir:n,oid:a[r+1]})).commit.message.startsWith(`stash-Index`);await Tr({fs:e,dir:t,gitdir:n,stashCommit:a[r+1],parentCommit:a[r],wasStaged:i})}}async function Ja({fs:e,dir:t,gitdir:n,refIdx:r=0}){let i=new Ua({fs:e,dir:t,gitdir:n});if(!(await i.readStashCommit(r)).commit)return;let a=i.refStashPath;await xr(a,async()=>{await e.exists(a)&&await e.rm(a)});let o=await i.readStashReflogs({parsed:!1});if(!o.length)return;o.splice(r,1);let s=i.refLogsStashPath;await xr({reflogEntries:o,stashReflogPath:s,stashMgr:i},async()=>{if(o.length){await e.write(s,o.reverse().join(`
|
|
76
76
|
`)+`
|
|
77
|
-
`,`utf8`);let t=o[o.length-1].split(` `)[1];await i.writeStashRef(t)}else await e.rm(s)})}async function Ya({fs:e,dir:t,gitdir:n}){return new Ua({fs:e,dir:t,gitdir:n}).readStashReflogs({parsed:!0})}async function Xa({fs:e,dir:t,gitdir:n}){let r=new Ua({fs:e,dir:t,gitdir:n}),i=[r.refStashPath,r.refLogsStashPath];await xr(i,async()=>{await Promise.all(i.map(async t=>{if(await e.exists(t))return e.rm(t)}))})}async function Za({fs:e,dir:t,gitdir:n,refIdx:r=0}){await qa({fs:e,dir:t,gitdir:n,refIdx:r}),await Ja({fs:e,dir:t,gitdir:n,refIdx:r})}async function Qa({fs:e,dir:t,gitdir:n=V(t,`.git`),op:r=`push`,message:i=``,refIdx:a=0}){X(`fs`,e),X(`dir`,t),X(`gitdir`,n),X(`op`,r);let o={push:Ga,apply:qa,drop:Ja,list:Ya,clear:Xa,pop:Za,create:Ka},s=[`apply`,`drop`,`pop`];try{let c=new Y(e),l=await Z({fsp:c,dotgit:n});[`refs`,`logs`,`logs/refs`].map(e=>V(l,e)).forEach(async e=>{await c.exists(e)||await c.mkdir(e)});let u=o[r];if(u){if(s.includes(r)&&a<0)throw new Rt(`stash@${a}`,`number that is in range of [0, num of stash pushed]`);return await u({fs:c,dir:t,gitdir:l,message:i,refIdx:a})}throw Error(`To be implemented: ${r}`)}catch(e){throw e.caller=`git.stash`,e}}async function $a({fs:e,dir:t,gitdir:n=V(t,`.git`),filepath:r,cache:i={}}){try{X(`fs`,e),X(`gitdir`,n),X(`filepath`,r);let a=new Y(e),o=await Z({fsp:a,dotgit:n});if(await jn.isIgnored({fs:a,gitdir:o,dir:t,filepath:r}))return`ignored`;let s=await eo({fs:a,cache:i,gitdir:o,tree:await to({fs:a,cache:i,gitdir:o}),path:r}),c=await L.acquire({fs:a,gitdir:o,cache:i},async function(e){for(let t of e)if(t.path===r)return t;return null}),l=await a.lstat(V(t,r)),u=s!==null,d=c!==null,f=l!==null,p=async()=>{if(d&&!ce(c,l))return c.oid;{let e=await a.read(V(t,r)),n=await La({gitdir:o,type:`blob`,object:e});return d&&c.oid===n&&l.size!==-1&&L.acquire({fs:a,gitdir:o,cache:i},async function(e){e.insert({filepath:r,stats:l,oid:n})}),n}};if(!u&&!f&&!d)return`absent`;if(!u&&!f&&d)return`*absent`;if(!u&&f&&!d)return`*added`;if(!u&&f&&d)return await p()===c.oid?`added`:`*added`;if(u&&!f&&!d)return`deleted`;if(u&&!f&&d)return c.oid,`*deleted`;if(u&&f&&!d)return await p()===s?`*undeleted`:`*undeletemodified`;if(u&&f&&d){let e=await p();return e===s?e===c.oid?`unmodified`:`*unmodified`:e===c.oid?`modified`:`*modified`}}catch(e){throw e.caller=`git.status`,e}}async function eo({fs:e,cache:t,gitdir:n,tree:r,path:i}){typeof i==`string`&&(i=i.split(`/`));let a=i.shift();for(let o of r)if(o.path===a){if(i.length===0)return o.oid;let{type:r,object:a}=await G({fs:e,cache:t,gitdir:n,oid:o.oid});if(r===`tree`)return eo({fs:e,cache:t,gitdir:n,tree:W.from(a),path:i});if(r===`blob`)throw new B(o.oid,r,`blob`,i.join(`/`))}return null}async function to({fs:e,cache:t,gitdir:n}){let r;try{r=await U.resolve({fs:e,gitdir:n,ref:`HEAD`})}catch(e){if(e instanceof z)return[]}let{tree:i}=await Xn({fs:e,cache:t,gitdir:n,oid:r});return i}async function no({fs:e,dir:t,gitdir:n=V(t,`.git`),ref:r=`HEAD`,filepaths:i=[`.`],filter:a,cache:o={},ignored:s=!1}){try{X(`fs`,e),X(`gitdir`,n),X(`ref`,r);let c=new Y(e);return await bn({fs:c,cache:o,dir:t,gitdir:await Z({fsp:c,dotgit:n}),trees:[J({ref:r}),hn(),ye()],map:async function(e,[n,r,o]){if(!n&&!o&&r&&!s&&await jn.isIgnored({fs:c,dir:t,filepath:e})||!i.some(t=>cr(e,t)))return null;if(a&&!a(e))return;let[l,u,d]=await Promise.all([n&&n.type(),r&&r.type(),o&&o.type()]),f=[l,u,d].includes(`blob`);if((l===`tree`||l===`special`)&&!f)return;if(l===`commit`)return null;if((u===`tree`||u===`special`)&&!f)return;if(d===`commit`)return null;if((d===`tree`||d===`special`)&&!f)return;let p=l===`blob`?await n.oid():void 0,m=d===`blob`?await o.oid():void 0,h;l!==`blob`&&u===`blob`&&d!==`blob`?h=`42`:u===`blob`&&(h=await r.oid());let g=[void 0,p,h,m],_=g.map(e=>g.indexOf(e));return _.shift(),[e,..._]}})}catch(e){throw e.caller=`git.statusMatrix`,e}}async function ro({fs:e,dir:t,gitdir:n=V(t,`.git`),ref:r,object:i,force:a=!1}){try{X(`fs`,e),X(`gitdir`,n),X(`ref`,r);let t=new Y(e);if(r===void 0)throw new Ht(`ref`);r=r.startsWith(`refs/tags/`)?r:`refs/tags/${r}`;let o=await Z({fsp:t,dotgit:n}),s=await U.resolve({fs:t,gitdir:o,ref:i||`HEAD`});if(!a&&await U.exists({fs:t,gitdir:o,ref:r}))throw new Dt(`tag`,r);await U.writeRef({fs:t,gitdir:o,ref:r,value:s})}catch(e){throw e.caller=`git.tag`,e}}async function io({fs:e,dir:t,gitdir:n=V(t,`.git`),cache:r={},filepath:i,oid:a,mode:o,add:s,remove:c,force:l}){try{X(`fs`,e),X(`gitdir`,n),X(`filepath`,i);let u=new Y(e),d=await Z({fsp:u,dotgit:n});if(c)return await L.acquire({fs:u,gitdir:d,cache:r},async function(e){if(!l){let e=await u.lstat(V(t,i));if(e){if(e.isDirectory())throw new Lt(`directory`);return}}e.has({filepath:i})&&e.delete({filepath:i})});let f;if(!a){if(f=await u.lstat(V(t,i)),!f)throw new z(`file at "${i}" on disk and "remove" not set`);if(f.isDirectory())throw new Lt(`directory`)}return await L.acquire({fs:u,gitdir:d,cache:r},async function(e){if(!s&&!e.has({filepath:i}))throw new z(`file at "${i}" in index and "add" not set`);let n;if(a)n={ctime:new Date(0),mtime:new Date(0),dev:0,ino:0,mode:o,uid:0,gid:0,size:0};else{n=f;let e=n.isSymbolicLink()?await u.readlink(V(t,i)):await u.read(V(t,i));a=await Q({fs:u,gitdir:d,type:`blob`,format:`content`,object:e})}return e.insert({filepath:i,oid:a,stats:n}),a})}catch(e){throw e.caller=`git.updateIndex`,e}}function ao(){try{return $r.version}catch(e){throw e.caller=`git.version`,e}}async function oo({fs:e,dir:t,gitdir:n=V(t,`.git`),trees:r,map:i,reduce:a,iterate:o,cache:s={}}){try{X(`fs`,e),X(`gitdir`,n),X(`trees`,r);let c=new Y(e);return await bn({fs:c,cache:s,dir:t,gitdir:await Z({fsp:c,dotgit:n}),trees:r,map:i,reduce:a,iterate:o})}catch(e){throw e.caller=`git.walk`,e}}async function so({fs:e,dir:t,gitdir:n=V(t,`.git`),blob:r}){try{X(`fs`,e),X(`gitdir`,n),X(`blob`,r);let t=new Y(e);return await Q({fs:t,gitdir:await Z({fsp:t,dotgit:n}),type:`blob`,object:r,format:`content`})}catch(e){throw e.caller=`git.writeBlob`,e}}async function co({fs:e,dir:t,gitdir:n=V(t,`.git`),commit:r}){try{X(`fs`,e),X(`gitdir`,n),X(`commit`,r);let t=new Y(e);return await Va({fs:t,gitdir:await Z({fsp:t,dotgit:n}),commit:r})}catch(e){throw e.caller=`git.writeCommit`,e}}async function lo({fs:e,dir:t,gitdir:n=V(t,`.git`),type:i,object:a,format:o=`parsed`,oid:s,encoding:c=void 0}){try{let t=new Y(e),l=await Z({fsp:t,dotgit:n});if(o===`parsed`){switch(i){case`commit`:a=q.from(a).toObject();break;case`tree`:a=W.from(a).toObject();break;case`blob`:a=r.Buffer.from(a,c);break;case`tag`:a=ln.from(a).toObject();break;default:throw new B(s||``,i,`blob|commit|tag|tree`)}o=`content`}return s=await Q({fs:t,gitdir:l,type:i,object:a,oid:s,format:o}),s}catch(e){throw e.caller=`git.writeObject`,e}}async function uo({fs:e,dir:t,gitdir:n=V(t,`.git`),ref:r,value:i,force:a=!1,symbolic:o=!1}){try{X(`fs`,e),X(`gitdir`,n),X(`ref`,r),X(`value`,i);let t=new Y(e);if(!tr(r,!0))throw new Rt(r,v.clean(r));let s=await Z({fsp:t,dotgit:n});if(!a&&await U.exists({fs:t,gitdir:s,ref:r}))throw new Dt(`ref`,r);o?await U.writeSymbolicRef({fs:t,gitdir:s,ref:r,value:i}):(i=await U.resolve({fs:t,gitdir:s,ref:i}),await U.writeRef({fs:t,gitdir:s,ref:r,value:i}))}catch(e){throw e.caller=`git.writeRef`,e}}async function fo({fs:e,gitdir:t,tag:n}){return await Q({fs:e,gitdir:t,type:`tag`,object:ln.from(n).toObject(),format:`content`})}async function po({fs:e,dir:t,gitdir:n=V(t,`.git`),tag:r}){try{X(`fs`,e),X(`gitdir`,n),X(`tag`,r);let t=new Y(e);return await fo({fs:t,gitdir:await Z({fsp:t,dotgit:n}),tag:r})}catch(e){throw e.caller=`git.writeTag`,e}}async function mo({fs:e,dir:t,gitdir:n=V(t,`.git`),tree:r}){try{X(`fs`,e),X(`gitdir`,n),X(`tree`,r);let t=new Y(e);return await Zn({fs:t,gitdir:await Z({fsp:t,dotgit:n}),tree:r})}catch(e){throw e.caller=`git.writeTree`,e}}var ho={Errors:$t,STAGE:ye,TREE:J,WORKDIR:hn,add:Rn,abortMerge:An,addNote:$n,addRemote:rr,annotatedTag:ar,branch:sr,cherryPick:Dr,checkout:mr,clone:li,commit:ui,getConfig:Mi,getConfigAll:Pi,setConfig:Ba,currentBranch:di,deleteBranch:pi,deleteRef:mi,deleteRemote:gi,deleteTag:vi,expandOid:Si,expandRef:Ci,fastForward:Di,fetch:Oi,findMergeBase:ki,findRoot:ji,getRemoteInfo:Fi,getRemoteInfo2:Li,hashBlob:zi,indexPack:Vi,init:Hi,isDescendent:Wi,isIgnored:Gi,listBranches:Ki,listFiles:Yi,listNotes:Zi,listRefs:Qi,listRemotes:ea,listServerRefs:ra,listTags:ia,log:la,merge:ua,packObjects:ma,pull:ha,push:xa,readBlob:wa,readCommit:Ta,readNote:Da,readObject:Oa,readTag:Aa,readTree:ja,remove:Ma,removeNote:Pa,renameBranch:Ia,resetIndex:Ra,updateIndex:io,resolveRef:za,status:$a,statusMatrix:no,tag:ro,version:ao,walk:oo,writeBlob:so,writeCommit:co,writeObject:lo,writeRef:uo,writeTag:po,writeTree:mo,stash:Qa};t.Errors=$t,t.STAGE=ye,t.TREE=J,t.WORKDIR=hn,t.abortMerge=An,t.add=Rn,t.addNote=$n,t.addRemote=rr,t.annotatedTag=ar,t.branch=sr,t.checkout=mr,t.cherryPick=Dr,t.clone=li,t.commit=ui,t.currentBranch=di,t.default=ho,t.deleteBranch=pi,t.deleteRef=mi,t.deleteRemote=gi,t.deleteTag=vi,t.expandOid=Si,t.expandRef=Ci,t.fastForward=Di,t.fetch=Oi,t.findMergeBase=ki,t.findRoot=ji,t.getConfig=Mi,t.getConfigAll=Pi,t.getRemoteInfo=Fi,t.getRemoteInfo2=Li,t.hashBlob=zi,t.indexPack=Vi,t.init=Hi,t.isDescendent=Wi,t.isIgnored=Gi,t.listBranches=Ki,t.listFiles=Yi,t.listNotes=Zi,t.listRefs=Qi,t.listRemotes=ea,t.listServerRefs=ra,t.listTags=ia,t.log=la,t.merge=ua,t.packObjects=ma,t.pull=ha,t.push=xa,t.readBlob=wa,t.readCommit=Ta,t.readNote=Da,t.readObject=Oa,t.readTag=Aa,t.readTree=ja,t.remove=Ma,t.removeNote=Pa,t.renameBranch=Ia,t.resetIndex=Ra,t.resolveRef=za,t.setConfig=Ba,t.stash=Qa,t.status=$a,t.statusMatrix=no,t.tag=ro,t.updateIndex=io,t.version=ao,t.walk=oo,t.writeBlob=so,t.writeCommit=co,t.writeObject=lo,t.writeRef=uo,t.writeTag=po,t.writeTree=mo}))(),1),k=o();globalThis.Buffer||(globalThis.Buffer=k.Buffer);function A(e){try{let t=typeof location<`u`&&location.origin?location.origin:typeof globalThis<`u`&&globalThis.location?.origin?globalThis.location.origin:`http://127.0.0.1:8888`,n=new URL(e,t).hostname.toLowerCase();if(n===`localhost`||n===`127.0.0.1`||n===`::1`||n===`[::1]`)return`loopback`;if(/^(10\.|172\.(1[6-9]|2\d|3[01])\.|192\.168\.)/.test(n)||!n.includes(`.`)||n.endsWith(`.local`)||n.endsWith(`.lan`)||n.endsWith(`.home`)||n.endsWith(`.internal`))return`private`}catch{}}const ee={async request({url:e,method:t=`GET`,headers:n={},body:r}){r&&=await j(r);let i=A(e),a={method:t,headers:n,body:r,credentials:`omit`};i&&(a.targetAddressSpace=i);let o=await fetch(e,a),s=o.body&&typeof o.body.getReader==`function`?M(o.body):[new Uint8Array(await o.arrayBuffer())],c={};for(let[e,t]of o.headers.entries())c[e]=t;return{url:o.url,method:t,statusCode:o.status,statusMessage:o.statusText,body:s,headers:c}}};async function j(e){let t=[];if(e[Symbol.asyncIterator])for await(let n of e)t.push(n);else if(e[Symbol.iterator])for(let n of e)t.push(n);else if(e.next){let n=await e.nexT();for(;!n.done;)t.push(n.value),n=await e.nexT()}else return e;let n=t.reduce((e,t)=>e+t.length,0),r=new Uint8Array(n),i=0;for(let e of t)r.set(e,i),i+=e.length;return r}function M(e){let t=e.getReader();return{next(){return t.read()},return(){return t.releaseLock(),{}},[Symbol.asyncIterator](){return this}}}let te=null,ne=null,N=null,re=null,P=null;function F(e){return e.trim().replace(/^[\\/]+/,``).replace(/[\\/]+$/,``).split(/[\\/]+/).filter(e=>e!==`.`&&e!==``).join(`/`)}const ie=new class{_map=new Map;_maxSize;constructor(e=2048){this._maxSize=e}clear(){this._map.clear()}get(e){let t=this._map.get(e);return t!==void 0&&(this._map.delete(e),this._map.set(e,t)),t}invalidate(e){let t=e.endsWith(`/`)?e:e+`/`;for(let n of this._map.keys())(n===e||n.startsWith(t))&&this._map.delete(n)}set(e,t){if(this._map.size>=this._maxSize){let e=this._map.keys().next().value;e!==void 0&&this._map.delete(e)}this._map.set(e,t)}};async function ae(e,t,n={},r=``){let i=e,a=r;for(let e of t){a=a?`${a}/${e}`:e;let t=ie.get(a);t&&!n.create?i=t:(i=await i.getDirectoryHandle(e,{create:n.create??!1}),ie.set(a,i))}return i}async function oe(e,t,n={}){let r=F(t),i=r.split(`/`).filter(Boolean);if(i.length===0)return e;let a=await ae(e,i.slice(0,-1),n),o=i[i.length-1];if(n.forceFile||o.includes(`.`))try{return await a.getFileHandle(o,{create:n.create??!1})}catch{}try{let e=await a.getDirectoryHandle(o,{create:n.create??!1}),t=r;return ie.set(t,e),e}catch{return await a.getFileHandle(o,{create:n.create??!1})}}async function se(e,t,n={}){let r=F(t).split(`/`).filter(Boolean);return r.length===0?e:ae(e,r,n)}async function I(e,t,n={}){let r=F(t).split(`/`).filter(Boolean);if(r.length===0)throw Error(`Cannot resolve '.' as file`);return(await ae(e,r.slice(0,-1),n)).getFileHandle(r[r.length-1],{create:n.create??!1})}async function ce(e,t){let n=F(t).split(`/`).filter(Boolean);if(n.length===0)throw Error(`Cannot get parent of root`);let r=n[n.length-1];return[await ae(e,n.slice(0,-1)),r]}function le(e){return e.trim().replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^\.\//,``)}function ue(e){let t=new Map,n=`repos/.git-modes`;function r(e){return e.replace(/\\/g,`/`.replace(/^\/+/,``))}async function i(){try{let r=await(await(await I(e,n)).getFile()).text(),i=JSON.parse(r);for(let[e,n]of i)t.set(e,n)}catch{}}let a=null;function o(){a===null&&(a=setTimeout(async()=>{a=null;try{let r=await(await I(e,n,{create:!0})).createWritable(),i=JSON.stringify([...t.entries()]);await r.write(new TextEncoder().encode(i)),await r.close()}catch{}},500))}let s=i(),c={async readFile(t,n){let r=await(await(await I(e,t)).getFile()).arrayBuffer(),i=typeof n==`string`?n:n?.encoding;return i===`utf8`||i===`utf-8`?new TextDecoder().decode(r):new Uint8Array(r)},async writeFile(n,i,a){let s=await(await I(e,n,{create:!0})).createWritable();typeof i==`string`&&(i=new TextEncoder().encode(i)),await s.write(i),await s.close();let c=typeof a==`object`&&a?a.mode:void 0,l=r(n);if(c!=null){let e=(c&73)!=0;t.set(l,e?33261:33188),o()}else t.has(l)||t.set(l,33188)},async mkdir(t){await se(e,t,{create:!0})},async rmdir(n){let[i,a]=await ce(e,n);await i.removeEntry(a,{recursive:!0});let o=r(n)+`/`;for(let e of t.keys())(e===r(n)||e.startsWith(o))&&t.delete(e);ie.invalidate(F(n))},async readdir(t){let n=await se(e,t),r=[];for await(let[e]of n.entries())r.push(e);return r},async stat(n){await s;let i;try{i=await oe(e,n)}catch{let e=Error(`ENOENT: no such file or directory, stat '${n}'`);throw e.code=`ENOENT`,e}if(i.kind===`directory`){let e=new Date;return{isDirectory:()=>!0,isFile:()=>!1,isSymbolicLink:()=>!1,size:0,mtimeMs:Date.now(),mode:16877,ino:0,dev:0,nlink:1,uid:0,gid:0,ctime:e,mtime:e}}else{let e=await i.getFile(),a=new Date(e.lastModified),o=r(n),s=t.get(o)??33188;return{isDirectory:()=>!1,isFile:()=>!0,isSymbolicLink:()=>!1,size:e.size,mtimeMs:e.lastModified,mode:s,ino:0,dev:0,nlink:1,uid:0,gid:0,ctime:a,mtime:a}}},async lstat(e){return c.stat(e)},async unlink(n){let[i,a]=await ce(e,n);await i.removeEntry(a),t.delete(r(n))},async symlink(e,t){throw Error(`OPFS does not support symlinks`)},async readlink(e){return await c.readFile(e,`utf8`)}};return{promises:c}}const de=ue,fe=`repos`;function pe(e,t,i){if(e===`custom`&&t)return t;if(e===`public`)return`https://www.cors-anywhere.com`;let a=i||(typeof globalThis<`u`&&globalThis.location?globalThis.location:typeof self<`u`&&self.location?self.location:typeof window<`u`&&window.location?window.location:null),o=a?.protocol||``,s=o===`https:`||o===`https`||typeof a?.origin==`string`&&a.origin.startsWith(`https:`)||typeof a?.href==`string`&&a.href.startsWith(`https://`)?`https:`:`http:`,c=a?.host||``,l=a?.hostname||``,u=l===`localhost`||l===`127.0.0.1`||l===`::1`||l===`[::1]`||l===`0.0.0.0`||c.startsWith(`localhost:`)||c.startsWith(`127.0.0.1:`)||c.startsWith(`[::1]:`),d=a&&(a.protocol===`file:`||l&&(l.endsWith(`.github.io`)||l.endsWith(`.pages.dev`)));return c&&(u||!d)?`${s}//${c}/git-proxy`:`${s}//${r}:${n}/git-proxy`}async function L(){return P||=(async()=>{if(te=O.default,ne=ee,!N){let e=null;if(typeof navigator<`u`&&typeof navigator.storage?.getDirectory==`function`)try{e=await navigator.storage.getDirectory()}catch(e){console.warn(`OPFS is unavailable for git root, falling back to memory:`,e)}if(!e){let{getMemoryOpfsRoot:t}=await import(`./memoryStorage-Bew1X8Uy.js`).then(e=>e.n);e=t()}N=ue(e),re=N.promises}})(),await P,{git:te,http:ne,fs:N,pfs:re}}async function R(e){let t=await L();if(e){let n=ue(e);return{git:t.git,http:t.http,fs:n,pfs:n.promises,repoDirFn:e=>`repos/${e}`}}return{...t,repoDirFn:he}}function me(e){return(e.replace(/\/+$/,``).split(`/`).pop()||`repo`).replace(/\.git$/,``)}function he(e){return`${fe}/${e}`}async function ge(e,t,n){try{await e.getConfig({fs:t,dir:n,path:`core.filemode`})!==!1&&await e.setConfig({fs:t,dir:n,path:`core.filemode`,value:!1})}catch(e){console.error(`Failed to set core.filemode=false:`,e)}}async function _e(e,t){try{await e.mkdir(t)}catch{}}function ve({token:e,username:t,password:n}={}){if(!e&&!t)return{};let r;e?r={Authorization:`Basic ${btoa(`${e}:x-oauth-basic`)}`}:t&&(r={Authorization:`Basic ${btoa(`${t}:${n||``}`)}`});let i=()=>e?{username:e,password:`x-oauth-basic`}:t?{username:t,password:n||``}:{cancel:!0},a=()=>({cancel:!0});return{...r?{headers:r}:{},onAuth:i,onAuthFailure:a}}async function ye({url:e,branch:t,depth:n=20,corsProxy:r,name:i,token:o,username:s,password:c,groupRoot:l}){let{git:u,http:d,fs:f,pfs:p,repoDirFn:m}=await R(l),h=i||me(e),g=m(h);!r&&!a()&&(r=pe(`local`)),await _e(p,fe),await _e(p,g);let _=ve({token:o,username:s,password:c});try{let i={fs:f,http:d,dir:g,url:e,singleBranch:!0,depth:n,corsProxy:r,..._};t&&(i.ref=t),await u.clone(i)}catch{try{let i={fs:f,http:d,dir:g,url:e,singleBranch:!0,depth:n,corsProxy:r,..._};t&&(i.ref=t),await u.fetch(i)}catch{try{await Le(p,g),await _e(p,g);let i={fs:f,http:d,dir:g,url:e,singleBranch:!0,depth:n,corsProxy:r,..._};t&&(i.ref=t),await u.clone(i)}catch(t){throw Error(`Failed to clone/fetch ${e}: ${t instanceof Error?t.message:String(t)}`)}}}return await ge(u,f,g),h}async function z({repo:e,ref:t,groupRoot:n}){let{git:r,fs:i,repoDirFn:a}=await R(n),o=a(e);return await r.checkout({fs:i,dir:o,ref:t,force:!0}),`Checked out ${t} in ${e}`}async function B({repo:e,name:t,checkout:n=!1,startPoint:r,groupRoot:i}){let{git:a,fs:o,repoDirFn:s}=await R(i),c=s(e),l={fs:o,dir:c,ref:t};return r&&(l.object=r),await a.branch(l),n?(await a.checkout({fs:o,dir:c,ref:t}),`Created and switched to branch ${t} in ${e}`):`Created branch ${t} in ${e}`}async function be({repo:e,groupRoot:t}){let{git:n,fs:r,repoDirFn:i}=await R(t),a=i(e);await ge(n,r,a);let o=await n.statusMatrix({fs:r,dir:a});if(o.length===0)return`Empty repository.`;let s=[];for(let[e,t,n,r]of o){let i=``;if(t===0&&n===2&&r===2)i=`added`;else if(t===0&&n===2&&r===0)i=`new (unstaged)`;else if(t===1&&n===2&&r===2)i=`modified (staged)`;else if(t===1&&n===2&&r===1)i=`modified`;else if(t===1&&n===0&&r===0)i=`deleted`;else if(t===1&&n===1&&r===1)continue;else i=`[${t},${n},${r}]`;s.push(`${i}: ${e}`)}return s.length===0?`On branch ${await n.currentBranch({fs:r,dir:a})||`(detached HEAD)`}\nNothing to commit, working tree clean.`:`On branch ${await n.currentBranch({fs:r,dir:a})||`(detached HEAD)`}\n${s.join(`
|
|
77
|
+
`,`utf8`);let t=o[o.length-1].split(` `)[1];await i.writeStashRef(t)}else await e.rm(s)})}async function Ya({fs:e,dir:t,gitdir:n}){return new Ua({fs:e,dir:t,gitdir:n}).readStashReflogs({parsed:!0})}async function Xa({fs:e,dir:t,gitdir:n}){let r=new Ua({fs:e,dir:t,gitdir:n}),i=[r.refStashPath,r.refLogsStashPath];await xr(i,async()=>{await Promise.all(i.map(async t=>{if(await e.exists(t))return e.rm(t)}))})}async function Za({fs:e,dir:t,gitdir:n,refIdx:r=0}){await qa({fs:e,dir:t,gitdir:n,refIdx:r}),await Ja({fs:e,dir:t,gitdir:n,refIdx:r})}async function Qa({fs:e,dir:t,gitdir:n=V(t,`.git`),op:r=`push`,message:i=``,refIdx:a=0}){X(`fs`,e),X(`dir`,t),X(`gitdir`,n),X(`op`,r);let o={push:Ga,apply:qa,drop:Ja,list:Ya,clear:Xa,pop:Za,create:Ka},s=[`apply`,`drop`,`pop`];try{let c=new Y(e),l=await Z({fsp:c,dotgit:n});[`refs`,`logs`,`logs/refs`].map(e=>V(l,e)).forEach(async e=>{await c.exists(e)||await c.mkdir(e)});let u=o[r];if(u){if(s.includes(r)&&a<0)throw new Rt(`stash@${a}`,`number that is in range of [0, num of stash pushed]`);return await u({fs:c,dir:t,gitdir:l,message:i,refIdx:a})}throw Error(`To be implemented: ${r}`)}catch(e){throw e.caller=`git.stash`,e}}async function $a({fs:e,dir:t,gitdir:n=V(t,`.git`),filepath:r,cache:i={}}){try{X(`fs`,e),X(`gitdir`,n),X(`filepath`,r);let a=new Y(e),o=await Z({fsp:a,dotgit:n});if(await jn.isIgnored({fs:a,gitdir:o,dir:t,filepath:r}))return`ignored`;let s=await eo({fs:a,cache:i,gitdir:o,tree:await to({fs:a,cache:i,gitdir:o}),path:r}),c=await L.acquire({fs:a,gitdir:o,cache:i},async function(e){for(let t of e)if(t.path===r)return t;return null}),l=await a.lstat(V(t,r)),u=s!==null,d=c!==null,f=l!==null,p=async()=>{if(d&&!ce(c,l))return c.oid;{let e=await a.read(V(t,r)),n=await La({gitdir:o,type:`blob`,object:e});return d&&c.oid===n&&l.size!==-1&&L.acquire({fs:a,gitdir:o,cache:i},async function(e){e.insert({filepath:r,stats:l,oid:n})}),n}};if(!u&&!f&&!d)return`absent`;if(!u&&!f&&d)return`*absent`;if(!u&&f&&!d)return`*added`;if(!u&&f&&d)return await p()===c.oid?`added`:`*added`;if(u&&!f&&!d)return`deleted`;if(u&&!f&&d)return c.oid,`*deleted`;if(u&&f&&!d)return await p()===s?`*undeleted`:`*undeletemodified`;if(u&&f&&d){let e=await p();return e===s?e===c.oid?`unmodified`:`*unmodified`:e===c.oid?`modified`:`*modified`}}catch(e){throw e.caller=`git.status`,e}}async function eo({fs:e,cache:t,gitdir:n,tree:r,path:i}){typeof i==`string`&&(i=i.split(`/`));let a=i.shift();for(let o of r)if(o.path===a){if(i.length===0)return o.oid;let{type:r,object:a}=await G({fs:e,cache:t,gitdir:n,oid:o.oid});if(r===`tree`)return eo({fs:e,cache:t,gitdir:n,tree:W.from(a),path:i});if(r===`blob`)throw new B(o.oid,r,`blob`,i.join(`/`))}return null}async function to({fs:e,cache:t,gitdir:n}){let r;try{r=await U.resolve({fs:e,gitdir:n,ref:`HEAD`})}catch(e){if(e instanceof z)return[]}let{tree:i}=await Xn({fs:e,cache:t,gitdir:n,oid:r});return i}async function no({fs:e,dir:t,gitdir:n=V(t,`.git`),ref:r=`HEAD`,filepaths:i=[`.`],filter:a,cache:o={},ignored:s=!1}){try{X(`fs`,e),X(`gitdir`,n),X(`ref`,r);let c=new Y(e);return await bn({fs:c,cache:o,dir:t,gitdir:await Z({fsp:c,dotgit:n}),trees:[J({ref:r}),hn(),ye()],map:async function(e,[n,r,o]){if(!n&&!o&&r&&!s&&await jn.isIgnored({fs:c,dir:t,filepath:e})||!i.some(t=>cr(e,t)))return null;if(a&&!a(e))return;let[l,u,d]=await Promise.all([n&&n.type(),r&&r.type(),o&&o.type()]),f=[l,u,d].includes(`blob`);if((l===`tree`||l===`special`)&&!f)return;if(l===`commit`)return null;if((u===`tree`||u===`special`)&&!f)return;if(d===`commit`)return null;if((d===`tree`||d===`special`)&&!f)return;let p=l===`blob`?await n.oid():void 0,m=d===`blob`?await o.oid():void 0,h;l!==`blob`&&u===`blob`&&d!==`blob`?h=`42`:u===`blob`&&(h=await r.oid());let g=[void 0,p,h,m],_=g.map(e=>g.indexOf(e));return _.shift(),[e,..._]}})}catch(e){throw e.caller=`git.statusMatrix`,e}}async function ro({fs:e,dir:t,gitdir:n=V(t,`.git`),ref:r,object:i,force:a=!1}){try{X(`fs`,e),X(`gitdir`,n),X(`ref`,r);let t=new Y(e);if(r===void 0)throw new Ht(`ref`);r=r.startsWith(`refs/tags/`)?r:`refs/tags/${r}`;let o=await Z({fsp:t,dotgit:n}),s=await U.resolve({fs:t,gitdir:o,ref:i||`HEAD`});if(!a&&await U.exists({fs:t,gitdir:o,ref:r}))throw new Dt(`tag`,r);await U.writeRef({fs:t,gitdir:o,ref:r,value:s})}catch(e){throw e.caller=`git.tag`,e}}async function io({fs:e,dir:t,gitdir:n=V(t,`.git`),cache:r={},filepath:i,oid:a,mode:o,add:s,remove:c,force:l}){try{X(`fs`,e),X(`gitdir`,n),X(`filepath`,i);let u=new Y(e),d=await Z({fsp:u,dotgit:n});if(c)return await L.acquire({fs:u,gitdir:d,cache:r},async function(e){if(!l){let e=await u.lstat(V(t,i));if(e){if(e.isDirectory())throw new Lt(`directory`);return}}e.has({filepath:i})&&e.delete({filepath:i})});let f;if(!a){if(f=await u.lstat(V(t,i)),!f)throw new z(`file at "${i}" on disk and "remove" not set`);if(f.isDirectory())throw new Lt(`directory`)}return await L.acquire({fs:u,gitdir:d,cache:r},async function(e){if(!s&&!e.has({filepath:i}))throw new z(`file at "${i}" in index and "add" not set`);let n;if(a)n={ctime:new Date(0),mtime:new Date(0),dev:0,ino:0,mode:o,uid:0,gid:0,size:0};else{n=f;let e=n.isSymbolicLink()?await u.readlink(V(t,i)):await u.read(V(t,i));a=await Q({fs:u,gitdir:d,type:`blob`,format:`content`,object:e})}return e.insert({filepath:i,oid:a,stats:n}),a})}catch(e){throw e.caller=`git.updateIndex`,e}}function ao(){try{return $r.version}catch(e){throw e.caller=`git.version`,e}}async function oo({fs:e,dir:t,gitdir:n=V(t,`.git`),trees:r,map:i,reduce:a,iterate:o,cache:s={}}){try{X(`fs`,e),X(`gitdir`,n),X(`trees`,r);let c=new Y(e);return await bn({fs:c,cache:s,dir:t,gitdir:await Z({fsp:c,dotgit:n}),trees:r,map:i,reduce:a,iterate:o})}catch(e){throw e.caller=`git.walk`,e}}async function so({fs:e,dir:t,gitdir:n=V(t,`.git`),blob:r}){try{X(`fs`,e),X(`gitdir`,n),X(`blob`,r);let t=new Y(e);return await Q({fs:t,gitdir:await Z({fsp:t,dotgit:n}),type:`blob`,object:r,format:`content`})}catch(e){throw e.caller=`git.writeBlob`,e}}async function co({fs:e,dir:t,gitdir:n=V(t,`.git`),commit:r}){try{X(`fs`,e),X(`gitdir`,n),X(`commit`,r);let t=new Y(e);return await Va({fs:t,gitdir:await Z({fsp:t,dotgit:n}),commit:r})}catch(e){throw e.caller=`git.writeCommit`,e}}async function lo({fs:e,dir:t,gitdir:n=V(t,`.git`),type:i,object:a,format:o=`parsed`,oid:s,encoding:c=void 0}){try{let t=new Y(e),l=await Z({fsp:t,dotgit:n});if(o===`parsed`){switch(i){case`commit`:a=q.from(a).toObject();break;case`tree`:a=W.from(a).toObject();break;case`blob`:a=r.Buffer.from(a,c);break;case`tag`:a=ln.from(a).toObject();break;default:throw new B(s||``,i,`blob|commit|tag|tree`)}o=`content`}return s=await Q({fs:t,gitdir:l,type:i,object:a,oid:s,format:o}),s}catch(e){throw e.caller=`git.writeObject`,e}}async function uo({fs:e,dir:t,gitdir:n=V(t,`.git`),ref:r,value:i,force:a=!1,symbolic:o=!1}){try{X(`fs`,e),X(`gitdir`,n),X(`ref`,r),X(`value`,i);let t=new Y(e);if(!tr(r,!0))throw new Rt(r,v.clean(r));let s=await Z({fsp:t,dotgit:n});if(!a&&await U.exists({fs:t,gitdir:s,ref:r}))throw new Dt(`ref`,r);o?await U.writeSymbolicRef({fs:t,gitdir:s,ref:r,value:i}):(i=await U.resolve({fs:t,gitdir:s,ref:i}),await U.writeRef({fs:t,gitdir:s,ref:r,value:i}))}catch(e){throw e.caller=`git.writeRef`,e}}async function fo({fs:e,gitdir:t,tag:n}){return await Q({fs:e,gitdir:t,type:`tag`,object:ln.from(n).toObject(),format:`content`})}async function po({fs:e,dir:t,gitdir:n=V(t,`.git`),tag:r}){try{X(`fs`,e),X(`gitdir`,n),X(`tag`,r);let t=new Y(e);return await fo({fs:t,gitdir:await Z({fsp:t,dotgit:n}),tag:r})}catch(e){throw e.caller=`git.writeTag`,e}}async function mo({fs:e,dir:t,gitdir:n=V(t,`.git`),tree:r}){try{X(`fs`,e),X(`gitdir`,n),X(`tree`,r);let t=new Y(e);return await Zn({fs:t,gitdir:await Z({fsp:t,dotgit:n}),tree:r})}catch(e){throw e.caller=`git.writeTree`,e}}var ho={Errors:$t,STAGE:ye,TREE:J,WORKDIR:hn,add:Rn,abortMerge:An,addNote:$n,addRemote:rr,annotatedTag:ar,branch:sr,cherryPick:Dr,checkout:mr,clone:li,commit:ui,getConfig:Mi,getConfigAll:Pi,setConfig:Ba,currentBranch:di,deleteBranch:pi,deleteRef:mi,deleteRemote:gi,deleteTag:vi,expandOid:Si,expandRef:Ci,fastForward:Di,fetch:Oi,findMergeBase:ki,findRoot:ji,getRemoteInfo:Fi,getRemoteInfo2:Li,hashBlob:zi,indexPack:Vi,init:Hi,isDescendent:Wi,isIgnored:Gi,listBranches:Ki,listFiles:Yi,listNotes:Zi,listRefs:Qi,listRemotes:ea,listServerRefs:ra,listTags:ia,log:la,merge:ua,packObjects:ma,pull:ha,push:xa,readBlob:wa,readCommit:Ta,readNote:Da,readObject:Oa,readTag:Aa,readTree:ja,remove:Ma,removeNote:Pa,renameBranch:Ia,resetIndex:Ra,updateIndex:io,resolveRef:za,status:$a,statusMatrix:no,tag:ro,version:ao,walk:oo,writeBlob:so,writeCommit:co,writeObject:lo,writeRef:uo,writeTag:po,writeTree:mo,stash:Qa};t.Errors=$t,t.STAGE=ye,t.TREE=J,t.WORKDIR=hn,t.abortMerge=An,t.add=Rn,t.addNote=$n,t.addRemote=rr,t.annotatedTag=ar,t.branch=sr,t.checkout=mr,t.cherryPick=Dr,t.clone=li,t.commit=ui,t.currentBranch=di,t.default=ho,t.deleteBranch=pi,t.deleteRef=mi,t.deleteRemote=gi,t.deleteTag=vi,t.expandOid=Si,t.expandRef=Ci,t.fastForward=Di,t.fetch=Oi,t.findMergeBase=ki,t.findRoot=ji,t.getConfig=Mi,t.getConfigAll=Pi,t.getRemoteInfo=Fi,t.getRemoteInfo2=Li,t.hashBlob=zi,t.indexPack=Vi,t.init=Hi,t.isDescendent=Wi,t.isIgnored=Gi,t.listBranches=Ki,t.listFiles=Yi,t.listNotes=Zi,t.listRefs=Qi,t.listRemotes=ea,t.listServerRefs=ra,t.listTags=ia,t.log=la,t.merge=ua,t.packObjects=ma,t.pull=ha,t.push=xa,t.readBlob=wa,t.readCommit=Ta,t.readNote=Da,t.readObject=Oa,t.readTag=Aa,t.readTree=ja,t.remove=Ma,t.removeNote=Pa,t.renameBranch=Ia,t.resetIndex=Ra,t.resolveRef=za,t.setConfig=Ba,t.stash=Qa,t.status=$a,t.statusMatrix=no,t.tag=ro,t.updateIndex=io,t.version=ao,t.walk=oo,t.writeBlob=so,t.writeCommit=co,t.writeObject=lo,t.writeRef=uo,t.writeTag=po,t.writeTree=mo}))(),1),k=o();globalThis.Buffer||(globalThis.Buffer=k.Buffer);function A(e){try{let t=typeof location<`u`&&location.origin?location.origin:typeof globalThis<`u`&&globalThis.location?.origin?globalThis.location.origin:`http://127.0.0.1:8888`,n=new URL(e,t).hostname.toLowerCase();if(n===`localhost`||n===`127.0.0.1`||n===`::1`||n===`[::1]`)return`loopback`;if(/^(10\.|172\.(1[6-9]|2\d|3[01])\.|192\.168\.)/.test(n)||!n.includes(`.`)||n.endsWith(`.local`)||n.endsWith(`.lan`)||n.endsWith(`.home`)||n.endsWith(`.internal`))return`private`}catch{}}const ee={async request({url:e,method:t=`GET`,headers:n={},body:r}){r&&=await j(r);let i=A(e),a={method:t,headers:n,body:r,credentials:`omit`};i&&(a.targetAddressSpace=i);let o=await fetch(e,a),s=o.body&&typeof o.body.getReader==`function`?M(o.body):[new Uint8Array(await o.arrayBuffer())],c={};for(let[e,t]of o.headers.entries())c[e]=t;return{url:o.url,method:t,statusCode:o.status,statusMessage:o.statusText,body:s,headers:c}}};async function j(e){let t=[];if(e[Symbol.asyncIterator])for await(let n of e)t.push(n);else if(e[Symbol.iterator])for(let n of e)t.push(n);else if(e.next){let n=await e.nexT();for(;!n.done;)t.push(n.value),n=await e.nexT()}else return e;let n=t.reduce((e,t)=>e+t.length,0),r=new Uint8Array(n),i=0;for(let e of t)r.set(e,i),i+=e.length;return r}function M(e){let t=e.getReader();return{next(){return t.read()},return(){return t.releaseLock(),{}},[Symbol.asyncIterator](){return this}}}let te=null,ne=null,N=null,re=null,P=null;function F(e){return e.trim().replace(/^[\\/]+/,``).replace(/[\\/]+$/,``).split(/[\\/]+/).filter(e=>e!==`.`&&e!==``).join(`/`)}const ie=new class{_map=new Map;_maxSize;constructor(e=2048){this._maxSize=e}clear(){this._map.clear()}get(e){let t=this._map.get(e);return t!==void 0&&(this._map.delete(e),this._map.set(e,t)),t}invalidate(e){let t=e.endsWith(`/`)?e:e+`/`;for(let n of this._map.keys())(n===e||n.startsWith(t))&&this._map.delete(n)}set(e,t){if(this._map.size>=this._maxSize){let e=this._map.keys().next().value;e!==void 0&&this._map.delete(e)}this._map.set(e,t)}};async function ae(e,t,n={},r=``){let i=e,a=r;for(let e of t){a=a?`${a}/${e}`:e;let t=ie.get(a);t&&!n.create?i=t:(i=await i.getDirectoryHandle(e,{create:n.create??!1}),ie.set(a,i))}return i}async function oe(e,t,n={}){let r=F(t),i=r.split(`/`).filter(Boolean);if(i.length===0)return e;let a=await ae(e,i.slice(0,-1),n),o=i[i.length-1];if(n.forceFile||o.includes(`.`))try{return await a.getFileHandle(o,{create:n.create??!1})}catch{}try{let e=await a.getDirectoryHandle(o,{create:n.create??!1}),t=r;return ie.set(t,e),e}catch{return await a.getFileHandle(o,{create:n.create??!1})}}async function se(e,t,n={}){let r=F(t).split(`/`).filter(Boolean);return r.length===0?e:ae(e,r,n)}async function I(e,t,n={}){let r=F(t).split(`/`).filter(Boolean);if(r.length===0)throw Error(`Cannot resolve '.' as file`);return(await ae(e,r.slice(0,-1),n)).getFileHandle(r[r.length-1],{create:n.create??!1})}async function ce(e,t){let n=F(t).split(`/`).filter(Boolean);if(n.length===0)throw Error(`Cannot get parent of root`);let r=n[n.length-1];return[await ae(e,n.slice(0,-1)),r]}function le(e){return e.trim().replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^\.\//,``)}function ue(e){let t=new Map,n=`repos/.git-modes`;function r(e){return e.replace(/\\/g,`/`.replace(/^\/+/,``))}async function i(){try{let r=await(await(await I(e,n)).getFile()).text(),i=JSON.parse(r);for(let[e,n]of i)t.set(e,n)}catch{}}let a=null;function o(){a===null&&(a=setTimeout(async()=>{a=null;try{let r=await(await I(e,n,{create:!0})).createWritable(),i=JSON.stringify([...t.entries()]);await r.write(new TextEncoder().encode(i)),await r.close()}catch{}},500))}let s=i(),c={async readFile(t,n){let r=await(await(await I(e,t)).getFile()).arrayBuffer(),i=typeof n==`string`?n:n?.encoding;return i===`utf8`||i===`utf-8`?new TextDecoder().decode(r):new Uint8Array(r)},async writeFile(n,i,a){let s=await(await I(e,n,{create:!0})).createWritable();typeof i==`string`&&(i=new TextEncoder().encode(i)),await s.write(i),await s.close();let c=typeof a==`object`&&a?a.mode:void 0,l=r(n);if(c!=null){let e=(c&73)!=0;t.set(l,e?33261:33188),o()}else t.has(l)||t.set(l,33188)},async mkdir(t){await se(e,t,{create:!0})},async rmdir(n){let[i,a]=await ce(e,n);await i.removeEntry(a,{recursive:!0});let o=r(n)+`/`;for(let e of t.keys())(e===r(n)||e.startsWith(o))&&t.delete(e);ie.invalidate(F(n))},async readdir(t){let n=await se(e,t),r=[];for await(let[e]of n.entries())r.push(e);return r},async stat(n){await s;let i;try{i=await oe(e,n)}catch{let e=Error(`ENOENT: no such file or directory, stat '${n}'`);throw e.code=`ENOENT`,e}if(i.kind===`directory`){let e=new Date;return{isDirectory:()=>!0,isFile:()=>!1,isSymbolicLink:()=>!1,size:0,mtimeMs:Date.now(),mode:16877,ino:0,dev:0,nlink:1,uid:0,gid:0,ctime:e,mtime:e}}else{let e=await i.getFile(),a=new Date(e.lastModified),o=r(n),s=t.get(o)??33188;return{isDirectory:()=>!1,isFile:()=>!0,isSymbolicLink:()=>!1,size:e.size,mtimeMs:e.lastModified,mode:s,ino:0,dev:0,nlink:1,uid:0,gid:0,ctime:a,mtime:a}}},async lstat(e){return c.stat(e)},async unlink(n){let[i,a]=await ce(e,n);await i.removeEntry(a),t.delete(r(n))},async symlink(e,t){throw Error(`OPFS does not support symlinks`)},async readlink(e){return await c.readFile(e,`utf8`)}};return{promises:c}}const de=ue,fe=`repos`;function pe(e,t,i){if(e===`custom`&&t)return t;if(e===`public`)return`https://www.cors-anywhere.com`;let a=i||(typeof globalThis<`u`&&globalThis.location?globalThis.location:typeof self<`u`&&self.location?self.location:typeof window<`u`&&window.location?window.location:null),o=a?.protocol||``,s=o===`https:`||o===`https`||typeof a?.origin==`string`&&a.origin.startsWith(`https:`)||typeof a?.href==`string`&&a.href.startsWith(`https://`)?`https:`:`http:`,c=a?.host||``,l=a?.hostname||``,u=l===`localhost`||l===`127.0.0.1`||l===`::1`||l===`[::1]`||l===`0.0.0.0`||c.startsWith(`localhost:`)||c.startsWith(`127.0.0.1:`)||c.startsWith(`[::1]:`),d=a&&(a.protocol===`file:`||l&&(l.endsWith(`.github.io`)||l.endsWith(`.pages.dev`)));return c&&(u||!d)?`${s}//${c}/git-proxy`:`${s}//${r}:${n}/git-proxy`}async function L(){return P||=(async()=>{if(te=O.default,ne=ee,!N){let e=null;if(typeof navigator<`u`&&typeof navigator.storage?.getDirectory==`function`)try{e=await navigator.storage.getDirectory()}catch(e){console.warn(`OPFS is unavailable for git root, falling back to memory:`,e)}if(!e){let{getMemoryOpfsRoot:t}=await import(`./memoryStorage-ykv-Ri-y.js`).then(e=>e.n);e=t()}N=ue(e),re=N.promises}})(),await P,{git:te,http:ne,fs:N,pfs:re}}async function R(e){let t=await L();if(e){let n=ue(e);return{git:t.git,http:t.http,fs:n,pfs:n.promises,repoDirFn:e=>`repos/${e}`}}return{...t,repoDirFn:he}}function me(e){return(e.replace(/\/+$/,``).split(`/`).pop()||`repo`).replace(/\.git$/,``)}function he(e){return`${fe}/${e}`}async function ge(e,t,n){try{await e.getConfig({fs:t,dir:n,path:`core.filemode`})!==!1&&await e.setConfig({fs:t,dir:n,path:`core.filemode`,value:!1})}catch(e){console.error(`Failed to set core.filemode=false:`,e)}}async function _e(e,t){try{await e.mkdir(t)}catch{}}function ve({token:e,username:t,password:n}={}){if(!e&&!t)return{};let r;e?r={Authorization:`Basic ${btoa(`${e}:x-oauth-basic`)}`}:t&&(r={Authorization:`Basic ${btoa(`${t}:${n||``}`)}`});let i=()=>e?{username:e,password:`x-oauth-basic`}:t?{username:t,password:n||``}:{cancel:!0},a=()=>({cancel:!0});return{...r?{headers:r}:{},onAuth:i,onAuthFailure:a}}async function ye({url:e,branch:t,depth:n=20,corsProxy:r,name:i,token:o,username:s,password:c,groupRoot:l}){let{git:u,http:d,fs:f,pfs:p,repoDirFn:m}=await R(l),h=i||me(e),g=m(h);!r&&!a()&&(r=pe(`local`)),await _e(p,fe),await _e(p,g);let _=ve({token:o,username:s,password:c});try{let i={fs:f,http:d,dir:g,url:e,singleBranch:!0,depth:n,corsProxy:r,..._};t&&(i.ref=t),await u.clone(i)}catch{try{let i={fs:f,http:d,dir:g,url:e,singleBranch:!0,depth:n,corsProxy:r,..._};t&&(i.ref=t),await u.fetch(i)}catch{try{await Le(p,g),await _e(p,g);let i={fs:f,http:d,dir:g,url:e,singleBranch:!0,depth:n,corsProxy:r,..._};t&&(i.ref=t),await u.clone(i)}catch(t){throw Error(`Failed to clone/fetch ${e}: ${t instanceof Error?t.message:String(t)}`)}}}return await ge(u,f,g),h}async function z({repo:e,ref:t,groupRoot:n}){let{git:r,fs:i,repoDirFn:a}=await R(n),o=a(e);return await r.checkout({fs:i,dir:o,ref:t,force:!0}),`Checked out ${t} in ${e}`}async function B({repo:e,name:t,checkout:n=!1,startPoint:r,groupRoot:i}){let{git:a,fs:o,repoDirFn:s}=await R(i),c=s(e),l={fs:o,dir:c,ref:t};return r&&(l.object=r),await a.branch(l),n?(await a.checkout({fs:o,dir:c,ref:t}),`Created and switched to branch ${t} in ${e}`):`Created branch ${t} in ${e}`}async function be({repo:e,groupRoot:t}){let{git:n,fs:r,repoDirFn:i}=await R(t),a=i(e);await ge(n,r,a);let o=await n.statusMatrix({fs:r,dir:a});if(o.length===0)return`Empty repository.`;let s=[];for(let[e,t,n,r]of o){let i=``;if(t===0&&n===2&&r===2)i=`added`;else if(t===0&&n===2&&r===0)i=`new (unstaged)`;else if(t===1&&n===2&&r===2)i=`modified (staged)`;else if(t===1&&n===2&&r===1)i=`modified`;else if(t===1&&n===0&&r===0)i=`deleted`;else if(t===1&&n===1&&r===1)continue;else i=`[${t},${n},${r}]`;s.push(`${i}: ${e}`)}return s.length===0?`On branch ${await n.currentBranch({fs:r,dir:a})||`(detached HEAD)`}\nNothing to commit, working tree clean.`:`On branch ${await n.currentBranch({fs:r,dir:a})||`(detached HEAD)`}\n${s.join(`
|
|
78
78
|
`)}`}async function xe({repo:e,ref:t,depth:n=10,groupRoot:r}){let{git:i,fs:a,repoDirFn:o}=await R(r),s={fs:a,dir:o(e),depth:n};t&&(s.ref=t);let c=await i.log(s);return c.length===0?`No commits found.`:c.map(e=>{let t=e.commit,n=new Date(t.author.timestamp*1e3).toISOString();return`${e.oid} ${n} ${t.author.name} — ${t.message.trim().split(`
|
|
79
79
|
`)[0]}`}).join(`
|
|
80
80
|
`)}async function Se({repo:e,ref1:t,ref2:n,groupRoot:r}){let{git:i,fs:a,repoDirFn:o}=await R(r),s=o(e),c=a.promises;if(await ge(i,a,s),!t&&!n){let e=(await i.statusMatrix({fs:a,dir:s})).filter(([,e,t])=>!(e===1&&t===1));if(e.length===0)return`No differences.`;let t=[];for(let[n,r,o]of e)try{if(r===0&&o===2){let e=(await we(c,s,n)).split(`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import"./config-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import"./config-Dewnqegf.js";import"./txPromise-C2iYogHX.js";import"./getConfig-4saf0Tkq.js";
|
|
2
2
|
/*! @license DOMPurify 3.4.13 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.13/LICENSE */
|
|
3
3
|
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){if(Array.isArray(e))return e}function r(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,t!==0)for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return s}}function i(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
|
|
4
4
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function a(e,t){return n(e)||r(e,t)||o(e,t)||i()}function o(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}}const s=Object.entries,c=Object.setPrototypeOf,l=Object.isFrozen,u=Object.getPrototypeOf,d=Object.getOwnPropertyDescriptor;let f=Object.freeze,p=Object.seal,m=Object.create,h=typeof Reflect<`u`&&Reflect,ee=h.apply,te=h.construct;f||=function(e){return e},p||=function(e){return e},ee||=function(e,t){var n=[...arguments].slice(2);return e.apply(t,n)},te||=function(e){return new e(...[...arguments].slice(1))};const g=w(Array.prototype.forEach),ne=w(Array.prototype.lastIndexOf),re=w(Array.prototype.pop),ie=w(Array.prototype.push),ae=w(Array.prototype.splice),_=Array.isArray,oe=w(String.prototype.toLowerCase),se=w(String.prototype.toString),ce=w(String.prototype.match),le=w(String.prototype.replace),ue=w(String.prototype.indexOf),de=w(String.prototype.trim),fe=w(Number.prototype.toString),v=w(Boolean.prototype.toString),y=typeof BigInt>`u`?null:w(BigInt.prototype.toString),pe=typeof Symbol>`u`?null:w(Symbol.prototype.toString),b=w(Object.prototype.hasOwnProperty),x=w(Object.prototype.toString),S=w(RegExp.prototype.test),C=T(TypeError);function w(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);var n=[...arguments].slice(1);return ee(e,t,n)}}function T(e){return function(){return te(e,[...arguments])}}function E(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:oe;if(c&&c(e,null),!_(t))return e;let r=t.length;for(;r--;){let i=t[r];if(typeof i==`string`){let e=n(i);e!==i&&(l(t)||(t[r]=e),i=e)}e[i]=!0}return e}function me(e){for(let t=0;t<e.length;t++)b(e,t)||(e[t]=null);return e}function D(e){let t=m(null);for(let r of s(e)){var n=a(r,2);let i=n[0],o=n[1];b(e,i)&&(_(o)?t[i]=me(o):o&&typeof o==`object`&&o.constructor===Object?t[i]=D(o):t[i]=o)}return t}function he(e){switch(typeof e){case`string`:return e;case`number`:return fe(e);case`boolean`:return v(e);case`bigint`:return y?y(e):`0`;case`symbol`:return pe?pe(e):`Symbol()`;case`undefined`:return x(e);case`function`:case`object`:{if(e===null)return x(e);let t=e,n=O(t,`toString`);if(typeof n==`function`){let e=n(t);return typeof e==`string`?e:x(e)}return x(e)}default:return x(e)}}function O(e,t){for(;e!==null;){let n=d(e,t);if(n){if(n.get)return w(n.get);if(typeof n.value==`function`)return w(n.value)}e=u(e)}function n(){return null}return n}function ge(e){try{return S(e,``),!0}catch{return!1}}const _e=f(`a.abbr.acronym.address.area.article.aside.audio.b.bdi.bdo.big.blink.blockquote.body.br.button.canvas.caption.center.cite.code.col.colgroup.content.data.datalist.dd.decorator.del.details.dfn.dialog.dir.div.dl.dt.element.em.fieldset.figcaption.figure.font.footer.form.h1.h2.h3.h4.h5.h6.head.header.hgroup.hr.html.i.img.input.ins.kbd.label.legend.li.main.map.mark.marquee.menu.menuitem.meter.nav.nobr.ol.optgroup.option.output.p.picture.pre.progress.q.rp.rt.ruby.s.samp.search.section.select.shadow.slot.small.source.spacer.span.strike.strong.style.sub.summary.sup.table.tbody.td.template.textarea.tfoot.th.thead.time.tr.track.tt.u.ul.var.video.wbr`.split(`.`)),ve=f(`svg.a.altglyph.altglyphdef.altglyphitem.animatecolor.animatemotion.animatetransform.circle.clippath.defs.desc.ellipse.enterkeyhint.exportparts.filter.font.g.glyph.glyphref.hkern.image.inputmode.line.lineargradient.marker.mask.metadata.mpath.part.path.pattern.polygon.polyline.radialgradient.rect.stop.style.switch.symbol.text.textpath.title.tref.tspan.view.vkern`.split(`.`)),ye=f([`feBlend`,`feColorMatrix`,`feComponentTransfer`,`feComposite`,`feConvolveMatrix`,`feDiffuseLighting`,`feDisplacementMap`,`feDistantLight`,`feDropShadow`,`feFlood`,`feFuncA`,`feFuncB`,`feFuncG`,`feFuncR`,`feGaussianBlur`,`feImage`,`feMerge`,`feMergeNode`,`feMorphology`,`feOffset`,`fePointLight`,`feSpecularLighting`,`feSpotLight`,`feTile`,`feTurbulence`]),be=f([`animate`,`color-profile`,`cursor`,`discard`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`foreignobject`,`hatch`,`hatchpath`,`mesh`,`meshgradient`,`meshpatch`,`meshrow`,`missing-glyph`,`script`,`set`,`solidcolor`,`unknown`,`use`]),xe=f(`math.menclose.merror.mfenced.mfrac.mglyph.mi.mlabeledtr.mmultiscripts.mn.mo.mover.mpadded.mphantom.mroot.mrow.ms.mspace.msqrt.mstyle.msub.msup.msubsup.mtable.mtd.mtext.mtr.munder.munderover.mprescripts`.split(`.`)),Se=f([`maction`,`maligngroup`,`malignmark`,`mlongdiv`,`mscarries`,`mscarry`,`msgroup`,`mstack`,`msline`,`msrow`,`semantics`,`annotation`,`annotation-xml`,`mprescripts`,`none`]),Ce=f([`#text`]),we=f(`accept.action.align.alt.autocapitalize.autocomplete.autopictureinpicture.autoplay.background.bgcolor.border.capture.cellpadding.cellspacing.checked.cite.class.clear.color.cols.colspan.command.commandfor.controls.controlslist.coords.crossorigin.datetime.decoding.default.dir.disabled.disablepictureinpicture.disableremoteplayback.download.draggable.enctype.enterkeyhint.exportparts.face.for.headers.height.hidden.high.href.hreflang.id.inert.inputmode.integrity.ismap.kind.label.lang.list.loading.loop.low.max.maxlength.media.method.min.minlength.multiple.muted.name.nonce.noshade.novalidate.nowrap.open.optimum.part.pattern.placeholder.playsinline.popover.popovertarget.popovertargetaction.poster.preload.pubdate.radiogroup.readonly.rel.required.rev.reversed.role.rows.rowspan.spellcheck.scope.selected.shape.size.sizes.slot.span.srclang.start.src.srcset.step.style.summary.tabindex.title.translate.type.usemap.valign.value.width.wrap.xmlns`.split(`.`)),Te=f(`accent-height.accumulate.additive.alignment-baseline.amplitude.ascent.attributename.attributetype.azimuth.basefrequency.baseline-shift.begin.bias.by.class.clip.clippathunits.clip-path.clip-rule.color.color-interpolation.color-interpolation-filters.color-profile.color-rendering.cx.cy.d.dx.dy.diffuseconstant.direction.display.divisor.dominant-baseline.dur.edgemode.elevation.end.exponent.fill.fill-opacity.fill-rule.filter.filterunits.flood-color.flood-opacity.font-family.font-size.font-size-adjust.font-stretch.font-style.font-variant.font-weight.fx.fy.g1.g2.glyph-name.glyphref.gradientunits.gradienttransform.height.href.id.image-rendering.in.in2.intercept.k.k1.k2.k3.k4.kerning.keypoints.keysplines.keytimes.lang.lengthadjust.letter-spacing.kernelmatrix.kernelunitlength.lighting-color.local.marker-end.marker-mid.marker-start.markerheight.markerunits.markerwidth.maskcontentunits.maskunits.max.mask.mask-type.media.method.mode.min.name.numoctaves.offset.operator.opacity.order.orient.orientation.origin.overflow.paint-order.path.pathlength.patterncontentunits.patterntransform.patternunits.points.preservealpha.preserveaspectratio.primitiveunits.r.rx.ry.radius.refx.refy.repeatcount.repeatdur.restart.result.rotate.scale.seed.shape-rendering.slope.specularconstant.specularexponent.spreadmethod.startoffset.stddeviation.stitchtiles.stop-color.stop-opacity.stroke-dasharray.stroke-dashoffset.stroke-linecap.stroke-linejoin.stroke-miterlimit.stroke-opacity.stroke.stroke-width.style.surfacescale.systemlanguage.tabindex.tablevalues.targetx.targety.transform.transform-origin.text-anchor.text-decoration.text-orientation.text-rendering.textlength.type.u1.u2.unicode.values.viewbox.visibility.version.vert-adv-y.vert-origin-x.vert-origin-y.width.word-spacing.wrap.writing-mode.xchannelselector.ychannelselector.x.x1.x2.xmlns.y.y1.y2.z.zoomandpan`.split(`.`)),Ee=f(`accent.accentunder.align.bevelled.close.columnalign.columnlines.columnspacing.columnspan.denomalign.depth.dir.display.displaystyle.encoding.fence.frame.height.href.id.largeop.length.linethickness.lquote.lspace.mathbackground.mathcolor.mathsize.mathvariant.maxsize.minsize.movablelimits.notation.numalign.open.rowalign.rowlines.rowspacing.rowspan.rspace.rquote.scriptlevel.scriptminsize.scriptsizemultiplier.selection.separator.separators.stretchy.subscriptshift.supscriptshift.symmetric.voffset.width.xmlns`.split(`.`)),De=f([`xlink:href`,`xml:id`,`xlink:title`,`xml:space`,`xmlns:xlink`]),Oe=p(/{{[\w\W]*|^[\w\W]*}}/g),ke=p(/<%[\w\W]*|^[\w\W]*%>/g),Ae=p(/\${[\w\W]*/g),je=p(/^data-[\-\w.\u00B7-\uFFFF]+$/),Me=p(/^aria-[\-\w]+$/),Ne=p(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Pe=p(/^(?:\w+script|data):/i),Fe=p(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Ie=p(/^html$/i),Le=p(/^[a-z][.\w]*(-[.\w]+)+$/i),Re=p(/<[/\w!]/g),ze=p(/<[/\w]/g),Be=p(/<\/no(script|embed|frames)/i),Ve=p(/\/>/i),k={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,processingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},He=function(){return typeof window>`u`?null:window},Ue=function(e,t){if(typeof e!=`object`||typeof e.createPolicy!=`function`)return null;let n=null,r=`data-tt-policy-suffix`;t&&t.hasAttribute(r)&&(n=t.getAttribute(r));let i=`dompurify`+(n?`#`+n:``);try{return e.createPolicy(i,{createHTML(e){return e},createScriptURL(e){return e}})}catch{return console.warn(`TrustedTypes policy `+i+` could not be created.`),null}},We=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},A=function(e,t,n,r){return b(e,t)&&_(e[t])?E(r.base?D(r.base):{},e[t],r.transform):n};function Ge(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:He(),t=e=>Ge(e);if(t.version=`3.4.13`,t.removed=[],!e||!e.document||e.document.nodeType!==k.document||!e.Element)return t.isSupported=!1,t;let n=e.document,r=n,i=r.currentScript;e.DocumentFragment;let a=e.HTMLTemplateElement,o=e.Node,c=e.Element,l=e.NodeFilter;e.NamedNodeMap===void 0&&(e.NamedNodeMap||e.MozNamedAttrMap),e.HTMLFormElement;let u=e.DOMParser,d=e.trustedTypes,h=c.prototype,ee=O(h,`cloneNode`),te=O(h,`remove`),fe=O(h,`nextSibling`),v=O(h,`childNodes`),y=O(h,`parentNode`),pe=O(h,`shadowRoot`),x=O(h,`attributes`),w=o&&o.prototype?O(o.prototype,`nodeType`):null,T=o&&o.prototype?O(o.prototype,`nodeName`):null,me=o&&o.prototype?O(o.prototype,`ownerDocument`):null;if(typeof a==`function`){let e=n.createElement(`template`);e.content&&e.content.ownerDocument&&(n=e.content.ownerDocument)}let j,M=``,Ke,qe=!1,N=0,Je=function(){if(N>0)throw C(`A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.`)},P=function(e){Je(),N++;try{return j.createHTML(e)}finally{N--}},Ye=function(e){Je(),N++;try{return j.createScriptURL(e)}finally{N--}},Xe=function(){return qe||=(Ke=Ue(d,i),!0),Ke},F=n,I=F.implementation,Ze=F.createNodeIterator,Qe=F.createDocumentFragment,$e=F.getElementsByTagName,et=r.importNode,L=We();t.isSupported=typeof s==`function`&&typeof y==`function`&&I&&I.createHTMLDocument!==void 0;let tt=Oe,nt=ke,rt=Ae,it=je,at=Me,ot=Pe,st=Fe,ct=Le,lt=Ne,R=null,ut=E({},[..._e,...ve,...ye,...xe,...Ce]),z=null,dt=E({},[...we,...Te,...Ee,...De]),B=Object.seal(m(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ft=null,pt=null,V=Object.seal(m(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),mt=!0,ht=!0,gt=!1,_t=!0,H=!1,U=!0,W=!1,vt=!1,yt=null,bt=null,xt=!1,G=!1,St=!1,Ct=!1,wt=!0,Tt=!1,Et=`user-content-`,Dt=!0,Ot=!1,K={},q=null,kt=E({},`annotation-xml.audio.colgroup.desc.foreignobject.head.iframe.math.mi.mn.mo.ms.mtext.noembed.noframes.noscript.plaintext.script.selectedcontent.style.svg.template.thead.title.video.xmp`.split(`.`)),At=null,jt=E({},[`audio`,`video`,`img`,`source`,`image`,`track`]),Mt=null,Nt=E({},[`alt`,`class`,`for`,`id`,`label`,`name`,`pattern`,`placeholder`,`role`,`summary`,`title`,`value`,`style`,`xmlns`]),Pt=`http://www.w3.org/1998/Math/MathML`,Ft=`http://www.w3.org/2000/svg`,J=`http://www.w3.org/1999/xhtml`,It=J,Lt=!1,Rt=null,zt=E({},[Pt,Ft,J],se),Bt=f([`mi`,`mo`,`mn`,`ms`,`mtext`]),Vt=E({},Bt),Ht=f([`annotation-xml`]),Ut=E({},Ht),Wt=E({},[`title`,`style`,`font`,`a`,`script`]),Gt=null,Kt=[`application/xhtml+xml`,`text/html`],Y=null,X=null,qt=n.createElement(`form`),Jt=function(e){return e instanceof RegExp||e instanceof Function},Yt=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(X&&X===e)return;(!e||typeof e!=`object`)&&(e={}),e=D(e),Gt=Kt.indexOf(e.PARSER_MEDIA_TYPE)===-1?`text/html`:e.PARSER_MEDIA_TYPE,Y=Gt===`application/xhtml+xml`?se:oe,R=A(e,`ALLOWED_TAGS`,ut,{transform:Y}),z=A(e,`ALLOWED_ATTR`,dt,{transform:Y}),Rt=A(e,`ALLOWED_NAMESPACES`,zt,{transform:se}),Mt=A(e,`ADD_URI_SAFE_ATTR`,Nt,{transform:Y,base:Nt}),At=A(e,`ADD_DATA_URI_TAGS`,jt,{transform:Y,base:jt}),q=A(e,`FORBID_CONTENTS`,kt,{transform:Y}),ft=A(e,`FORBID_TAGS`,D({}),{transform:Y}),pt=A(e,`FORBID_ATTR`,D({}),{transform:Y}),K=b(e,`USE_PROFILES`)?e.USE_PROFILES&&typeof e.USE_PROFILES==`object`?D(e.USE_PROFILES):e.USE_PROFILES:!1,mt=e.ALLOW_ARIA_ATTR!==!1,ht=e.ALLOW_DATA_ATTR!==!1,gt=e.ALLOW_UNKNOWN_PROTOCOLS||!1,_t=e.ALLOW_SELF_CLOSE_IN_ATTR!==!1,H=e.SAFE_FOR_TEMPLATES||!1,U=e.SAFE_FOR_XML!==!1,W=e.WHOLE_DOCUMENT||!1,G=e.RETURN_DOM||!1,St=e.RETURN_DOM_FRAGMENT||!1,Ct=e.RETURN_TRUSTED_TYPE||!1,xt=e.FORCE_BODY||!1,wt=e.SANITIZE_DOM!==!1,Tt=e.SANITIZE_NAMED_PROPS||!1,Dt=e.KEEP_CONTENT!==!1,Ot=e.IN_PLACE||!1,lt=ge(e.ALLOWED_URI_REGEXP)?e.ALLOWED_URI_REGEXP:Ne,It=typeof e.NAMESPACE==`string`?e.NAMESPACE:J,Vt=b(e,`MATHML_TEXT_INTEGRATION_POINTS`)&&e.MATHML_TEXT_INTEGRATION_POINTS&&typeof e.MATHML_TEXT_INTEGRATION_POINTS==`object`?D(e.MATHML_TEXT_INTEGRATION_POINTS):E({},Bt),Ut=b(e,`HTML_INTEGRATION_POINTS`)&&e.HTML_INTEGRATION_POINTS&&typeof e.HTML_INTEGRATION_POINTS==`object`?D(e.HTML_INTEGRATION_POINTS):E({},Ht);let t=b(e,`CUSTOM_ELEMENT_HANDLING`)&&e.CUSTOM_ELEMENT_HANDLING&&typeof e.CUSTOM_ELEMENT_HANDLING==`object`?D(e.CUSTOM_ELEMENT_HANDLING):m(null);if(B=m(null),b(t,`tagNameCheck`)&&Jt(t.tagNameCheck)&&(B.tagNameCheck=t.tagNameCheck),b(t,`attributeNameCheck`)&&Jt(t.attributeNameCheck)&&(B.attributeNameCheck=t.attributeNameCheck),b(t,`allowCustomizedBuiltInElements`)&&typeof t.allowCustomizedBuiltInElements==`boolean`&&(B.allowCustomizedBuiltInElements=t.allowCustomizedBuiltInElements),p(B),H&&(ht=!1),St&&(G=!0),K&&(R=E({},Ce),z=m(null),K.html===!0&&(E(R,_e),E(z,we)),K.svg===!0&&(E(R,ve),E(z,Te),E(z,De)),K.svgFilters===!0&&(E(R,ye),E(z,Te),E(z,De)),K.mathMl===!0&&(E(R,xe),E(z,Ee),E(z,De))),V.tagCheck=null,V.attributeCheck=null,b(e,`ADD_TAGS`)&&(typeof e.ADD_TAGS==`function`?V.tagCheck=e.ADD_TAGS:_(e.ADD_TAGS)&&(R===ut&&(R=D(R)),E(R,e.ADD_TAGS,Y))),b(e,`ADD_ATTR`)&&(typeof e.ADD_ATTR==`function`?V.attributeCheck=e.ADD_ATTR:_(e.ADD_ATTR)&&(z===dt&&(z=D(z)),E(z,e.ADD_ATTR,Y))),b(e,`ADD_URI_SAFE_ATTR`)&&_(e.ADD_URI_SAFE_ATTR)&&E(Mt,e.ADD_URI_SAFE_ATTR,Y),b(e,`FORBID_CONTENTS`)&&_(e.FORBID_CONTENTS)&&(q===kt&&(q=D(q)),E(q,e.FORBID_CONTENTS,Y)),b(e,`ADD_FORBID_CONTENTS`)&&_(e.ADD_FORBID_CONTENTS)&&(q===kt&&(q=D(q)),E(q,e.ADD_FORBID_CONTENTS,Y)),Dt&&(R[`#text`]=!0),W&&E(R,[`html`,`head`,`body`]),R.table&&(E(R,[`tbody`]),delete ft.tbody),e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!=`function`)throw C(`TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.`);if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!=`function`)throw C(`TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.`);let t=j;j=e.TRUSTED_TYPES_POLICY;try{M=P(``)}catch(e){throw j=t,e}}else e.TRUSTED_TYPES_POLICY===null?(j=void 0,M=``):(j===void 0&&(j=Xe()),j&&typeof M==`string`&&(M=P(``)));f&&f(e),X=e},Xt=E({},[...ve,...ye,...be]),Zt=E({},[...xe,...Se]),Qt=function(e,t,n){return t.namespaceURI===J?e===`svg`:t.namespaceURI===Pt?e===`svg`&&(n===`annotation-xml`||Vt[n]):!!Xt[e]},$t=function(e,t,n){return t.namespaceURI===J?e===`math`:t.namespaceURI===Ft?e===`math`&&Ut[n]:!!Zt[e]},en=function(e,t,n){return t.namespaceURI===Ft&&!Ut[n]||t.namespaceURI===Pt&&!Vt[n]?!1:!Zt[e]&&(Wt[e]||!Xt[e])},tn=function(e){let t=y(e);(!t||!t.tagName)&&(t={namespaceURI:It,tagName:`template`});let n=oe(e.tagName),r=oe(t.tagName);return Rt[e.namespaceURI]?e.namespaceURI===Ft?Qt(n,t,r):e.namespaceURI===Pt?$t(n,t,r):e.namespaceURI===J?en(n,t,r):!!(Gt===`application/xhtml+xml`&&Rt[e.namespaceURI]):!1},Z=function(e){ie(t.removed,{element:e});try{y(e).removeChild(e)}catch{if(te(e),!y(e))throw C(`a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place`)}},nn=function(e){an(e);let t=v(e);if(t){let e=[];g(t,t=>{ie(e,t)}),g(e,e=>{try{te(e)}catch{}})}let n=x(e);if(n)for(let t=n.length-1;t>=0;--t){let r=n[t],i=r&&r.name;if(typeof i==`string`)try{e.removeAttribute(i)}catch{}}},Q=function(e,n){try{ie(t.removed,{attribute:n.getAttributeNode(e),from:n})}catch{ie(t.removed,{attribute:null,from:n})}if(n.removeAttribute(e),e===`is`)if(G||St)try{Z(n)}catch{}else try{n.setAttribute(e,``)}catch{}},rn=function(e){let t=x(e);if(t)for(let n=t.length-1;n>=0;--n){let r=t[n],i=r&&r.name;if(!(typeof i!=`string`||z[Y(i)]))try{e.removeAttribute(i)}catch{}}},an=function(e){let t=[e];for(;t.length>0;){let e=t.pop();(w?w(e):e.nodeType)===k.element&&rn(e);let n=v(e);if(n)for(let e=n.length-1;e>=0;--e)t.push(n[e])}},on=function(e){if(!U)return;let t=[e];for(;t.length>0;){let e=t.pop(),n=w?w(e):e.nodeType;if(n===k.processingInstruction||n===k.comment&&S(ze,e.data)){try{te(e)}catch{}continue}if(n===k.element){let t=e,n=Y(T?T(e):e.nodeName);try{t.hasAttribute&&t.hasAttribute(`patchsrc`)&&t.removeAttribute(`patchsrc`),t.hasAttribute&&t.hasAttribute(`for`)&&n!==`label`&&n!==`output`&&t.removeAttribute(`for`)}catch{}}let r=v(e);if(r)for(let e=r.length-1;e>=0;--e)t.push(r[e])}},sn=function(e){let t=null,r=null;if(xt)e=`<remove></remove>`+e;else{let t=ce(e,/^[\r\n\t ]+/);r=t&&t[0]}Gt===`application/xhtml+xml`&&It===J&&(e=`<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>`+e+`</body></html>`);let i=j?P(e):e;if(It===J)try{t=new u().parseFromString(i,Gt)}catch{}if(!t||!t.documentElement){t=I.createDocument(It,`template`,null);try{t.documentElement.innerHTML=Lt?M:i}catch{}}let a=t.body||t.documentElement;return e&&r&&a.insertBefore(n.createTextNode(r),a.childNodes[0]||null),It===J?$e.call(t,W?`html`:`body`)[0]:W?t.documentElement:a},cn=function(e){let t=me?me(e):e.ownerDocument;return Ze.call(t||e,e,l.SHOW_ELEMENT|l.SHOW_COMMENT|l.SHOW_TEXT|l.SHOW_PROCESSING_INSTRUCTION|l.SHOW_CDATA_SECTION,null)},ln=function(e){return e=le(e,tt,` `),e=le(e,nt,` `),e=le(e,rt,` `),e},un=function(e){e.normalize();let t=me?me(e):e.ownerDocument,n=Ze.call(t||e,e,l.SHOW_TEXT|l.SHOW_COMMENT|l.SHOW_CDATA_SECTION|l.SHOW_PROCESSING_INSTRUCTION,null),r=n.nextNode();for(;r;)r.data=ln(r.data),r=n.nextNode();let i=e.querySelectorAll?.call(e,`template`);i&&g(i,e=>{fn(e.content)&&un(e.content)})},dn=function(e){let t=T?T(e):null;return typeof t!=`string`||Y(t)!==`form`?!1:typeof e.nodeName!=`string`||typeof e.textContent!=`string`||typeof e.removeChild!=`function`||e.attributes!==x(e)||typeof e.removeAttribute!=`function`||typeof e.setAttribute!=`function`||typeof e.namespaceURI!=`string`||typeof e.insertBefore!=`function`||typeof e.hasChildNodes!=`function`||e.nodeType!==w(e)||e.childNodes!==v(e)},fn=function(e){if(!w||typeof e!=`object`||!e)return!1;try{return w(e)===k.documentFragment}catch{return!1}},pn=function(e){if(!w||typeof e!=`object`||!e)return!1;try{return typeof w(e)==`number`}catch{return!1}};function $(e,n,r){e.length!==0&&g(e,e=>{e.call(t,n,r,X)})}let mn=function(e,t){return!!(U&&e.hasChildNodes()&&!pn(e.firstElementChild)&&S(Re,e.textContent)&&S(Re,e.innerHTML)||U&&e.namespaceURI===J&&t===`style`&&pn(e.firstElementChild)||e.nodeType===k.processingInstruction||U&&e.nodeType===k.comment&&S(ze,e.data))},hn=function(e,t,n){if(!ft[t]&&bn(t)&&(B.tagNameCheck instanceof RegExp&&S(B.tagNameCheck,t)||B.tagNameCheck instanceof Function&&B.tagNameCheck(t)))return!1;if(Dt&&!q[t]){let t=y(e),r=v(e);if(r&&t){let i=r.length;for(let a=i-1;a>=0;--a){let i=e===n?ee(r[a],!0):r[a];t.insertBefore(i,fe(e))}}}return Z(e),!0},gn=function(e,t,n,r){return e.length===0?t:t===n||t===r?D(t):t},_n=function(e,n){if($(L.beforeSanitizeElements,e,null),e!==n&&y(e)===null)return Ot&&an(e),!0;if(dn(e))return Z(e),!0;let r=Y(T?T(e):e.nodeName);if(R=gn(L.uponSanitizeElement,R,ut,yt),$(L.uponSanitizeElement,e,{tagName:r,allowedTags:R}),e!==n&&y(e)===null)return Ot&&an(e),!0;if(mn(e,r))return Z(e),!0;if(ft[r]||!(V.tagCheck instanceof Function&&V.tagCheck(r))&&!R[r]){let t=hn(e,r,n);return t===!1&&$(L.afterSanitizeElements,e,null),t}if((w?w(e):e.nodeType)===k.element&&!tn(e)||(r===`noscript`||r===`noembed`||r===`noframes`)&&S(Be,e.innerHTML))return Z(e),!0;if(H&&e.nodeType===k.text){let n=ln(e.textContent);e.textContent!==n&&(ie(t.removed,{element:e.cloneNode()}),e.textContent=n)}return $(L.afterSanitizeElements,e,null),!1},vn=function(e,t,r){if(pt[t]||U&&t===`patchsrc`||U&&t===`for`&&e!==`label`&&e!==`output`||wt&&(t===`id`||t===`name`)&&(r in n||r in qt))return!1;let i=z[t]||V.attributeCheck instanceof Function&&V.attributeCheck(t,e);if(!(ht&&S(it,t))&&!(mt&&S(at,t))){if(!i){if(!(bn(e)&&(B.tagNameCheck instanceof RegExp&&S(B.tagNameCheck,e)||B.tagNameCheck instanceof Function&&B.tagNameCheck(e))&&(B.attributeNameCheck instanceof RegExp&&S(B.attributeNameCheck,t)||B.attributeNameCheck instanceof Function&&B.attributeNameCheck(t,e))||t===`is`&&B.allowCustomizedBuiltInElements&&(B.tagNameCheck instanceof RegExp&&S(B.tagNameCheck,r)||B.tagNameCheck instanceof Function&&B.tagNameCheck(r))))return!1}else if(!Mt[t]&&!S(lt,le(r,st,``))&&!((t===`src`||t===`xlink:href`||t===`href`)&&e!==`script`&&ue(r,`data:`)===0&&At[e])&&!(gt&&!S(ot,le(r,st,``)))&&r)return!1}return!0},yn=E({},[`annotation-xml`,`color-profile`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`missing-glyph`]),bn=function(e){return!yn[oe(e)]&&S(ct,e)},xn=function(e,t,n,r){if(j&&typeof d==`object`&&typeof d.getAttributeType==`function`&&!n)switch(d.getAttributeType(e,t)){case`TrustedHTML`:return P(r);case`TrustedScriptURL`:return Ye(r)}return r},Sn=function(e,n,r,i){try{r?e.setAttributeNS(r,n,i):e.setAttribute(n,i),dn(e)?Z(e):re(t.removed)}catch{Q(n,e)}},Cn=function(e){$(L.beforeSanitizeAttributes,e,null);let t=e.attributes;if(!t||dn(e))return;z=gn(L.uponSanitizeAttribute,z,dt,bt);let n={attrName:``,attrValue:``,keepAttr:!0,allowedAttributes:z,forceKeepAttr:void 0},r=t.length,i=Y(e.nodeName);for(;r--;){let a=t[r],o=a.name,s=a.namespaceURI,c=a.value,l=Y(o),u=c,d=o===`value`?u:de(u);if(n.attrName=l,n.attrValue=d,n.keepAttr=!0,n.forceKeepAttr=void 0,$(L.uponSanitizeAttribute,e,n),d=n.attrValue,Tt&&(l===`id`||l===`name`)&&ue(d,Et)!==0&&(Q(o,e),d=Et+d),U&&S(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,d)){Q(o,e);continue}if(l===`attributename`&&ce(d,`href`)){Q(o,e);continue}if(!n.forceKeepAttr){if(!n.keepAttr){Q(o,e);continue}if(!_t&&S(Ve,d)){Q(o,e);continue}if(H&&(d=ln(d)),!vn(i,l,d)){Q(o,e);continue}d=xn(i,l,s,d),d!==u&&Sn(e,o,s,d)}}$(L.afterSanitizeAttributes,e,null)},wn=function(e){let t=null,n=cn(e);for($(L.beforeSanitizeShadowDOM,e,null);t=n.nextNode();)if($(L.uponSanitizeShadowNode,t,null),_n(t,e),Cn(t),fn(t.content)&&wn(t.content),(w?w(t):t.nodeType)===k.element){let e=pe(t);fn(e)&&(Tn(e),wn(e))}$(L.afterSanitizeShadowDOM,e,null)},Tn=function(e){let t=[{node:e,shadow:null}];for(;t.length>0;){let e=t.pop();if(e.shadow){wn(e.shadow);continue}let n=e.node,r=(w?w(n):n.nodeType)===k.element,i=v(n);if(i)for(let e=i.length-1;e>=0;--e)t.push({node:i[e],shadow:null});if(r){let e=T?T(n):null;if(typeof e==`string`&&Y(e)===`template`){let e=n.content;fn(e)&&t.push({node:e,shadow:null})}}if(r){let e=pe(n);fn(e)&&t.push({node:null,shadow:e},{node:e,shadow:null})}}};return t.sanitize=function(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=null,a=null,o=null,s=null;if(Lt=!e,Lt&&(e=`<!-->`),typeof e!=`string`&&!pn(e)&&(e=he(e),typeof e!=`string`))throw C(`dirty is not a string, aborting`);if(!t.isSupported)return e;vt?(R=yt,z=bt):Yt(n),(L.uponSanitizeElement.length>0||L.uponSanitizeAttribute.length>0)&&(R=D(R)),L.uponSanitizeAttribute.length>0&&(z=D(z)),t.removed=[];let c=Ot&&typeof e!=`string`&&pn(e);if(c){on(e);let t=T?T(e):e.nodeName;if(typeof t==`string`){let n=Y(t);if(!R[n]||ft[n])throw nn(e),C(`root node is forbidden and cannot be sanitized in-place`)}if(dn(e))throw nn(e),C(`root node is clobbered and cannot be sanitized in-place`);try{Tn(e)}catch(t){throw nn(e),t}}else if(pn(e))i=sn(`<!---->`),a=i.ownerDocument.importNode(e,!0),a.nodeType===k.element&&a.nodeName===`BODY`||a.nodeName===`HTML`?i=a:i.appendChild(a),Tn(a);else{if(!G&&!H&&!W&&e.indexOf(`<`)===-1)return j&&Ct?P(e):e;if(i=sn(e),!i)return G?null:Ct?M:``}i&&xt&&Z(i.firstChild);let l=c?e:i;try{let e=cn(l);for(;o=e.nextNode();)_n(o,l),Cn(o),fn(o.content)&&wn(o.content)}catch(n){throw c&&(nn(e),g(t.removed,e=>{e.element&&an(e.element)})),n}if(c)return g(t.removed,e=>{e.element&&an(e.element)}),H&&un(e),e;if(G){if(H&&un(i),St)for(s=Qe.call(i.ownerDocument);i.firstChild;)s.appendChild(i.firstChild);else s=i;return(z.shadowroot||z.shadowrootmode)&&(s=et.call(r,s,!0)),s}let u=W?i.outerHTML:i.innerHTML;return W&&R[`!doctype`]&&i.ownerDocument&&i.ownerDocument.doctype&&i.ownerDocument.doctype.name&&S(Ie,i.ownerDocument.doctype.name)&&(u=`<!DOCTYPE `+i.ownerDocument.doctype.name+`>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{n as e}from"./app-routes-
|
|
1
|
+
import{n as e}from"./app-routes-C6-H2zPH.js";const t=[`pages/resources/`,`pages/deps/`,`resources/`,`deps/`,`pages/assets/`,`pages/main/assets/`];function n(e){for(let n of t)if(e.startsWith(n))return e.slice(n.length);return e}function r(t){let r;if(t&&typeof t==`object`){let e=t.theme;typeof e?.stylesheet==`string`&&e.stylesheet.trim()&&(r=e.stylesheet.trim())}else if(typeof document<`u`){let e=document.getElementById(`shadow-claw-site-config`);if(e?.textContent)try{let t=JSON.parse(e.textContent)?.theme;typeof t?.stylesheet==`string`&&t.stylesheet.trim()&&(r=t.stylesheet.trim())}catch{}}if(!r)return``;if(r.startsWith(`http://`)||r.startsWith(`https://`)||r.startsWith(`//`))return`<link rel="stylesheet" href="${r}">`;let i=n(r);return`<link rel="stylesheet" href="${e(i.startsWith(`/`)?i:`/${i}`)}">`}function i(){let e=typeof document<`u`&&document.documentElement.classList.contains(`dark-mode`),t=[];if(typeof document<`u`){let e=getComputedStyle(document.documentElement);for(let n=0;n<e.length;n++){let r=e[n];r.startsWith(`--`)&&t.push(`${r}: ${e.getPropertyValue(r)};`)}}return[`<style>`,` :root {`,` color-scheme: ${e?`dark`:`light`};`,` overflow: hidden;`,` line-height: 1.5;`,` ${t.join(`
|
|
2
2
|
`)}`,` }`,` * {`,` scrollbar-width: thin;`,` scrollbar-color: var(--shadow-claw-border-color) transparent;`,` }`,` ::-webkit-scrollbar {`,` height: 0.5rem;`,` width: 0.5rem;`,` }`,` ::-webkit-scrollbar-track {`,` background: transparent;`,` }`,` ::-webkit-scrollbar-thumb {`,` background: var(--shadow-claw-border-color);`,` border-radius: 0.25rem;`,` }`,` ::-webkit-scrollbar-thumb:hover {`,` background: var(--shadow-claw-text-tertiary);`,` }`,` body {`,` color: var(--shadow-claw-text-primary);`,` background-color: var(--shadow-claw-bg-primary);`,` font-family: var(--shadow-claw-font-sans);`,` margin: 0;`,` }`,` pre, code, kbd, samp {`,` font-family: var(--shadow-claw-font-mono);`,` }`,` a {`,` color: var(--shadow-claw-link);`,` text-decoration: underline;`,` text-underline-offset: 0.125rem;`,` }`,` a:hover {`,` color: var(--shadow-claw-link-hover);`,` }`,` img {`,` max-width: 100%;`,` height: auto;`,` }`,` ul {`,` line-height: 1.5;`,` }`,` article {`,` padding: 1rem 1.5rem 1rem 1rem;`,` }`,` article > h1, article > h2 {`,` margin-top: 0;`,` }`,`</style>`].join(`
|
|
3
3
|
`)}function a(){return typeof document<`u`&&document.documentElement.classList.contains(`dark-mode`)?`dark-mode`:`light-mode`}var o=class{getTargetWindow;commandChannels=new Map;originalBroadcastChannel=null;constructor(e){this.getTargetWindow=e,typeof BroadcastChannel<`u`&&this.patchParentBroadcastChannel()}patchParentBroadcastChannel(){if(globalThis._shadowClawParentBcPatched)return;globalThis._shadowClawParentBcPatched=!0;let e=this,t=globalThis.BroadcastChannel;this.originalBroadcastChannel=t;let n=function(n){let r=new t(n);return e.registerChannel(n),r};n.prototype=t.prototype,globalThis.BroadcastChannel=n}registerChannelsFromTools(e){if(!Array.isArray(e))return;let t=/new\s+BroadcastChannel\s*\(\s*['"`]([^'"`]+)['"`]\s*\)/g;for(let n of e){let e=n.execution?.code||n.code||``;if(!e)continue;let r;for(t.lastIndex=0;(r=t.exec(e))!==null;)r[1]&&this.registerChannel(r[1])}}registerChannel(e){typeof BroadcastChannel>`u`||!e||e.endsWith(`-results`)||this.commandChannels.has(e)||this.listenOnCommandChannel(e)}listenOnCommandChannel(e){try{let t=new(this.originalBroadcastChannel||globalThis.BroadcastChannel)(e);t.onmessage=t=>{let n=this.getTargetWindow();n&&n.postMessage({type:`shadow-claw-broadcast-command`,channel:e,payload:t.data},`*`)},this.commandChannels.set(e,t)}catch(t){console.warn(`[IframeBroadcastProxy] Failed to listen on channel ${e}:`,t)}}handleResultFromIframe(e,t,n){let r=this.getTargetWindow();if(r&&e!==r)return!1;if(t)try{let e=new(this.originalBroadcastChannel||globalThis.BroadcastChannel)(t);return e.postMessage(n),e.close(),!0}catch(e){console.warn(`[IframeBroadcastProxy] Failed to relay result for channel ${t}:`,e)}return!1}dispose(){for(let e of this.commandChannels.values())try{e.close()}catch{}this.commandChannels.clear()}};let s=null;function c(){return s||(s=new Promise((e,t)=>{let n=indexedDB.open(`shadow-claw-iframe-storage`,1);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(`kv`)||e.createObjectStore(`kv`)},n.onsuccess=()=>e(n.result),n.onerror=()=>{s=null,t(n.error)}}),s)}function l(e,t){return`${e}\0${t}`}async function u(e,t,n){let r=await c();return new Promise((i,a)=>{let o=r.transaction(`kv`,`readwrite`);o.objectStore(`kv`).put(n,l(e,t)),o.oncomplete=()=>i(),o.onerror=()=>a(o.error)})}async function d(e,t){let n=await c();return new Promise((r,i)=>{let a=n.transaction(`kv`,`readonly`).objectStore(`kv`).get(l(e,t));a.onsuccess=()=>r(a.result),a.onerror=()=>i(a.error)})}async function f(e){let t=await c();return new Promise((n,r)=>{let i=t.transaction(`kv`,`readonly`).objectStore(`kv`),a={},o=`${e}\0`,s=i.openCursor();s.onsuccess=()=>{let e=s.result;if(!e){n(a);return}let t=typeof e.key==`string`?e.key:String(e.key);t.startsWith(o)&&(a[t.slice(o.length)]=e.value),e.continue()},s.onerror=()=>r(s.error)})}async function p(e,t){let n=await c();return new Promise((r,i)=>{let a=n.transaction(`kv`,`readwrite`);a.objectStore(`kv`).delete(l(e,t)),a.oncomplete=()=>r(),a.onerror=()=>i(a.error)})}async function m(e){let t=await c();return new Promise((n,r)=>{let i=t.transaction(`kv`,`readwrite`).objectStore(`kv`),a=`${e}\0`,o=i.openCursor();o.onsuccess=()=>{let e=o.result;if(!e){n();return}(typeof e.key==`string`?e.key:String(e.key)).startsWith(a)&&e.delete(),e.continue()},o.onerror=()=>r(o.error)})}export{u as a,i as c,f as i,r as l,p as n,o,d as r,a as s,m as t};
|
package/dist/public/index.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--shadow-claw-font-mono:"Fira Code","Courier New",monospace;--shadow-claw-font-sans:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;--shadow-claw-accent-hover:#1e293b;--shadow-claw-accent-primary:#334155;--shadow-claw-bg-primary-reverse:#0f172a;--shadow-claw-bg-primary:#f8fafc;--shadow-claw-bg-secondary:#f1f5f9;--shadow-claw-bg-tertiary:#e2e8f0;--shadow-claw-border-color:#e2e8f0;--shadow-claw-error-color:#ba1a1a;--shadow-claw-important-color:#334155;--shadow-claw-link-hover:#334155;--shadow-claw-link:#1e40af;--shadow-claw-on-error:#fff;--shadow-claw-on-primary:#fff;--shadow-claw-success-color:#059669;--shadow-claw-surface-tint:#334155;--shadow-claw-text-primary:#0f172a;--shadow-claw-text-secondary:#475569;--shadow-claw-text-tertiary:#64748b;--shadow-claw-warning-color:#d97706;--shadow-claw-font-size-lg:1.5rem;--shadow-claw-font-size-md:1.125rem;--shadow-claw-font-size-sm:0.875rem;--shadow-claw-radius-s:0.5rem;--shadow-claw-radius-m:0.75rem;--shadow-claw-radius-l:1.25rem;--shadow-claw-radius-pill:62.5rem;--shadow-claw-shadow-sm:0 0.0625rem 0.1875rem rgba(0,0,0,.1),0 0.0625rem 0.125rem rgba(0,0,0,.06);--shadow-claw-shadow-md:0 0.25rem 0.375rem -0.0625rem rgba(0,0,0,.1),0 0.125rem 0.25rem -0.0625rem rgba(0,0,0,.06);--shadow-claw-shadow-lg:0 0.625rem 0.9375rem -0.1875rem rgba(0,0,0,.1),0 0.25rem 0.375rem -0.125rem rgba(0,0,0,.05);--shadow-claw-shadow-sm:0 0.625rem 0.75rem 0 rgba(0,0,0,.05);--shadow-claw-shadow-md:0 0.625rem 1.875rem 0 rgba(0,0,0,.08);--shadow-claw-shadow-lg:0 0.625rem 1.875rem 0 rgba(0,0,0,.1);--shadow-claw-ease-in:cubic-bezier(0.32,0,0.67,0);--shadow-claw-ease-out:cubic-bezier(0.33,1,0.68,1);--shadow-claw-ease-in-out:cubic-bezier(0.65,0,0.35,1);--shadow-claw-duration-min:150ms;--shadow-claw-duration-regular:300ms;--shadow-claw-logo-size:1.5rem;--shadow-claw-header-title-font-size:1.5rem;--shadow-claw-icon-accent-dark:#8e1d13;--shadow-claw-icon-bg:transparent;--shadow-claw-icon-body-segment:#c0392b;--shadow-claw-icon-body-shine:#e74c3c;--shadow-claw-icon-body:#922b21;--shadow-claw-icon-claw-inner:#922b21;--shadow-claw-icon-claw-main:#c0392b;--shadow-claw-icon-eye-shine:#fff;--shadow-claw-icon-eye:#171d1e;--shadow-claw-hljs-background-color:#282c34;display:contents}@media (prefers-color-scheme:dark){:root{--shadow-claw-accent-hover:#cbd5e1;--shadow-claw-accent-primary:#94a3b8;--shadow-claw-on-primary:#0f172a;--shadow-claw-surface-tint:#94a3b8;--shadow-claw-bg-primary:#0f172a;--shadow-claw-bg-primary-reverse:#f8fafc;--shadow-claw-bg-secondary:#1e293b;--shadow-claw-bg-tertiary:#334155;--shadow-claw-border-color:#334155;--shadow-claw-error-color:#ffb4ab;--shadow-claw-link:#94a3b8;--shadow-claw-link-hover:#94a3b8;--shadow-claw-on-error:#690005;--shadow-claw-success-color:#34d399;--shadow-claw-text-primary:#f1f5f9;--shadow-claw-text-secondary:#cbd5e1;--shadow-claw-text-tertiary:#94a3b8;--shadow-claw-shadow-sm:0 0.0625rem 0.1875rem rgba(0,0,0,.3);--shadow-claw-shadow-md:0 0.25rem 0.375rem -0.0625rem rgba(0,0,0,.4);--shadow-claw-shadow-lg:0 0.625rem 0.9375rem -0.1875rem rgba(0,0,0,.5);--shadow-claw-icon-accent-dark:#ff6b6b;--shadow-claw-icon-body-segment:#ff5252;--shadow-claw-icon-body-shine:hsla(0,0%,100%,.3);--shadow-claw-icon-body:#ff1744;--shadow-claw-icon-claw-inner:#ff1744;--shadow-claw-icon-claw-main:#ff5252;--shadow-claw-icon-eye-shine:#171d1e;--shadow-claw-icon-eye:#dee3e5}}.light-mode{--shadow-claw-accent-hover:#1e293b;--shadow-claw-accent-primary:#334155;--shadow-claw-on-primary:#fff;--shadow-claw-surface-tint:#334155;--shadow-claw-bg-primary:#f8fafc;--shadow-claw-bg-primary-reverse:#0f172a;--shadow-claw-bg-secondary:#f1f5f9;--shadow-claw-bg-tertiary:#e2e8f0;--shadow-claw-border-color:#e2e8f0;--shadow-claw-error-color:#ba1a1a;--shadow-claw-link:#334155;--shadow-claw-link-hover:#1e293b;--shadow-claw-on-error:#fff;--shadow-claw-success-color:#059669;--shadow-claw-warning-color:#d97706;--shadow-claw-text-primary:#0f172a;--shadow-claw-text-secondary:#475569;--shadow-claw-text-tertiary:#64748b}.dark-mode{--shadow-claw-accent-hover:#cbd5e1;--shadow-claw-accent-primary:#94a3b8;--shadow-claw-on-primary:#0f172a;--shadow-claw-surface-tint:#94a3b8;--shadow-claw-bg-primary:#0f172a;--shadow-claw-bg-primary-reverse:#f8fafc;--shadow-claw-bg-secondary:#1e293b;--shadow-claw-bg-tertiary:#334155;--shadow-claw-border-color:#334155;--shadow-claw-error-color:#ffb4ab;--shadow-claw-link:#94a3b8;--shadow-claw-link-hover:#cbd5e1;--shadow-claw-on-error:#690005;--shadow-claw-success-color:#34d399;--shadow-claw-text-primary:#f1f5f9;--shadow-claw-text-secondary:#cbd5e1;--shadow-claw-text-tertiary:#94a3b8;--shadow-claw-shadow-sm:0 0.0625rem 0.1875rem rgba(0,0,0,.3);--shadow-claw-shadow-md:0 0.25rem 0.375rem -0.0625rem rgba(0,0,0,.4);--shadow-claw-shadow-lg:0 0.625rem 0.9375rem -0.1875rem rgba(0,0,0,.5);--shadow-claw-icon-accent-dark:#ff6b6b;--shadow-claw-icon-bg:transparent;--shadow-claw-icon-body-segment:#ff5252;--shadow-claw-icon-body-shine:hsla(0,0%,100%,.3);--shadow-claw-icon-body:#ff1744;--shadow-claw-icon-claw-inner:#ff1744;--shadow-claw-icon-claw-main:#ff5252;--shadow-claw-icon-eye-shine:#171d1e;--shadow-claw-icon-eye:#dee3e5}*,:after,:before{font-family:var(--shadow-claw-font-sans)}*{box-sizing:border-box;margin:0;padding:0;scrollbar-color:var(--shadow-claw-border-color) transparent;scrollbar-width:thin}::-webkit-scrollbar{height:.5rem;width:.5rem}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--shadow-claw-border-color);border-radius:.25rem}::-webkit-scrollbar-thumb:hover{background:var(--shadow-claw-text-tertiary)}body,html{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--shadow-claw-bg-primary);color:var(--shadow-claw-text-primary);display:flex;flex-direction:column;width:100%}@media (max-width:48rem){input,select,textarea{font-size:16px}}html.sc-prerender-override shadow-claw{visibility:hidden}shadow-claw:not(:defined){background:radial-gradient(circle at 20% 15%,rgba(56,189,248,.08),transparent 40%),radial-gradient(circle at 85% 90%,rgba(51,65,85,.2),transparent 45%),var(--shadow-claw-bg-primary);color:var(--shadow-claw-text-primary);display:grid}.header-title-link,.header-title-link:hover{color:var(--shadow-claw-text-primary);display:flex;text-decoration:none}.header-title-logo{display:none;height:var(--shadow-claw-logo-size,1.5rem);width:var(--shadow-claw-logo-size,1.5rem)}.header-title{align-items:center;display:none;font-size:var(--shadow-claw-header-title-font-size,1.5rem);font-weight:700;line-height:1;margin:0 0 0 .5rem}@media (min-width:30rem){.header-title,.header-title-logo{display:flex}}.header-actions-logo-link{align-items:center;color:inherit;display:flex;flex-direction:row;height:2.5rem;justify-content:center;width:2.5rem}.header-actions-logo-link svg{height:1.5rem;width:1.5rem}.app-dialog,dialog{background-color:var(--shadow-claw-bg-secondary);border:.0625rem solid var(--shadow-claw-border-color);border-radius:var(--shadow-claw-radius-l,1.25rem);box-shadow:var(--shadow-claw-shadow-lg);color:var(--shadow-claw-text-primary);padding:0}.app-dialog::backdrop,dialog::backdrop{backdrop-filter:blur(2px);background:color-mix(in srgb,#000 65%,transparent)}
|
|
1
|
+
:root{--shadow-claw-font-mono:"Fira Code","Courier New",monospace;--shadow-claw-font-sans:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;--shadow-claw-accent-hover:#1e293b;--shadow-claw-accent-primary:#334155;--shadow-claw-bg-primary-reverse:#0f172a;--shadow-claw-bg-primary:#f8fafc;--shadow-claw-bg-secondary:#f1f5f9;--shadow-claw-bg-tertiary:#e2e8f0;--shadow-claw-border-color:#e2e8f0;--shadow-claw-error-color:#ba1a1a;--shadow-claw-important-color:#334155;--shadow-claw-link-hover:#334155;--shadow-claw-link:#1e40af;--shadow-claw-on-error:#fff;--shadow-claw-on-primary:#fff;--shadow-claw-success-color:#059669;--shadow-claw-surface-tint:#334155;--shadow-claw-text-primary:#0f172a;--shadow-claw-text-secondary:#475569;--shadow-claw-text-tertiary:#64748b;--shadow-claw-warning-color:#d97706;--shadow-claw-font-size-lg:1.5rem;--shadow-claw-font-size-md:1.125rem;--shadow-claw-font-size-sm:0.875rem;--shadow-claw-radius-s:0.5rem;--shadow-claw-radius-m:0.75rem;--shadow-claw-radius-l:1.25rem;--shadow-claw-radius-pill:62.5rem;--shadow-claw-shadow-sm:0 0.0625rem 0.1875rem rgba(0,0,0,.1),0 0.0625rem 0.125rem rgba(0,0,0,.06);--shadow-claw-shadow-md:0 0.25rem 0.375rem -0.0625rem rgba(0,0,0,.1),0 0.125rem 0.25rem -0.0625rem rgba(0,0,0,.06);--shadow-claw-shadow-lg:0 0.625rem 0.9375rem -0.1875rem rgba(0,0,0,.1),0 0.25rem 0.375rem -0.125rem rgba(0,0,0,.05);--shadow-claw-shadow-sm:0 0.625rem 0.75rem 0 rgba(0,0,0,.05);--shadow-claw-shadow-md:0 0.625rem 1.875rem 0 rgba(0,0,0,.08);--shadow-claw-shadow-lg:0 0.625rem 1.875rem 0 rgba(0,0,0,.1);--shadow-claw-ease-in:cubic-bezier(0.32,0,0.67,0);--shadow-claw-ease-out:cubic-bezier(0.33,1,0.68,1);--shadow-claw-ease-in-out:cubic-bezier(0.65,0,0.35,1);--shadow-claw-duration-min:150ms;--shadow-claw-duration-regular:300ms;--shadow-claw-logo-size:1.5rem;--shadow-claw-header-title-font-size:1.5rem;--shadow-claw-icon-accent-dark:#8e1d13;--shadow-claw-icon-bg:transparent;--shadow-claw-icon-body-segment:#c0392b;--shadow-claw-icon-body-shine:#e74c3c;--shadow-claw-icon-body:#922b21;--shadow-claw-icon-claw-inner:#922b21;--shadow-claw-icon-claw-main:#c0392b;--shadow-claw-icon-eye-shine:#fff;--shadow-claw-icon-eye:#171d1e;--shadow-claw-hljs-background-color:#282c34;display:contents}@media (prefers-color-scheme:dark){:root{--shadow-claw-accent-hover:#cbd5e1;--shadow-claw-accent-primary:#94a3b8;--shadow-claw-on-primary:#0f172a;--shadow-claw-surface-tint:#94a3b8;--shadow-claw-bg-primary:#0f172a;--shadow-claw-bg-primary-reverse:#f8fafc;--shadow-claw-bg-secondary:#1e293b;--shadow-claw-bg-tertiary:#334155;--shadow-claw-border-color:#334155;--shadow-claw-error-color:#ffb4ab;--shadow-claw-link:#94a3b8;--shadow-claw-link-hover:#94a3b8;--shadow-claw-on-error:#690005;--shadow-claw-success-color:#34d399;--shadow-claw-text-primary:#f1f5f9;--shadow-claw-text-secondary:#cbd5e1;--shadow-claw-text-tertiary:#94a3b8;--shadow-claw-shadow-sm:0 0.0625rem 0.1875rem rgba(0,0,0,.3);--shadow-claw-shadow-md:0 0.25rem 0.375rem -0.0625rem rgba(0,0,0,.4);--shadow-claw-shadow-lg:0 0.625rem 0.9375rem -0.1875rem rgba(0,0,0,.5);--shadow-claw-icon-accent-dark:#ff6b6b;--shadow-claw-icon-body-segment:#ff5252;--shadow-claw-icon-body-shine:hsla(0,0%,100%,.3);--shadow-claw-icon-body:#ff1744;--shadow-claw-icon-claw-inner:#ff1744;--shadow-claw-icon-claw-main:#ff5252;--shadow-claw-icon-eye-shine:#171d1e;--shadow-claw-icon-eye:#dee3e5}}.light-mode{--shadow-claw-accent-hover:#1e293b;--shadow-claw-accent-primary:#334155;--shadow-claw-on-primary:#fff;--shadow-claw-surface-tint:#334155;--shadow-claw-bg-primary:#f8fafc;--shadow-claw-bg-primary-reverse:#0f172a;--shadow-claw-bg-secondary:#f1f5f9;--shadow-claw-bg-tertiary:#e2e8f0;--shadow-claw-border-color:#e2e8f0;--shadow-claw-error-color:#ba1a1a;--shadow-claw-link:#334155;--shadow-claw-link-hover:#1e293b;--shadow-claw-on-error:#fff;--shadow-claw-success-color:#059669;--shadow-claw-warning-color:#d97706;--shadow-claw-text-primary:#0f172a;--shadow-claw-text-secondary:#475569;--shadow-claw-text-tertiary:#64748b}.dark-mode{--shadow-claw-accent-hover:#cbd5e1;--shadow-claw-accent-primary:#94a3b8;--shadow-claw-on-primary:#0f172a;--shadow-claw-surface-tint:#94a3b8;--shadow-claw-bg-primary:#0f172a;--shadow-claw-bg-primary-reverse:#f8fafc;--shadow-claw-bg-secondary:#1e293b;--shadow-claw-bg-tertiary:#334155;--shadow-claw-border-color:#334155;--shadow-claw-error-color:#ffb4ab;--shadow-claw-link:#94a3b8;--shadow-claw-link-hover:#cbd5e1;--shadow-claw-on-error:#690005;--shadow-claw-success-color:#34d399;--shadow-claw-text-primary:#f1f5f9;--shadow-claw-text-secondary:#cbd5e1;--shadow-claw-text-tertiary:#94a3b8;--shadow-claw-shadow-sm:0 0.0625rem 0.1875rem rgba(0,0,0,.3);--shadow-claw-shadow-md:0 0.25rem 0.375rem -0.0625rem rgba(0,0,0,.4);--shadow-claw-shadow-lg:0 0.625rem 0.9375rem -0.1875rem rgba(0,0,0,.5);--shadow-claw-icon-accent-dark:#ff6b6b;--shadow-claw-icon-bg:transparent;--shadow-claw-icon-body-segment:#ff5252;--shadow-claw-icon-body-shine:hsla(0,0%,100%,.3);--shadow-claw-icon-body:#ff1744;--shadow-claw-icon-claw-inner:#ff1744;--shadow-claw-icon-claw-main:#ff5252;--shadow-claw-icon-eye-shine:#171d1e;--shadow-claw-icon-eye:#dee3e5}*,:after,:before{font-family:var(--shadow-claw-font-sans)}*{box-sizing:border-box;margin:0;padding:0;scrollbar-color:var(--shadow-claw-border-color) transparent;scrollbar-width:thin}::-webkit-scrollbar{height:.5rem;width:.5rem}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--shadow-claw-border-color);border-radius:.25rem}::-webkit-scrollbar-thumb:hover{background:var(--shadow-claw-text-tertiary)}body,html{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--shadow-claw-bg-primary);color:var(--shadow-claw-text-primary);display:flex;flex-direction:column;width:100%}@media (max-width:48rem){input,select,textarea{font-size:16px}}html.sc-prerender-override shadow-claw{visibility:hidden}shadow-claw:not(:defined){background:radial-gradient(circle at 20% 15%,rgba(56,189,248,.08),transparent 40%),radial-gradient(circle at 85% 90%,rgba(51,65,85,.2),transparent 45%),var(--shadow-claw-bg-primary);color:var(--shadow-claw-text-primary);display:grid}.header-title-link,.header-title-link:hover{color:var(--shadow-claw-text-primary);display:flex;text-decoration:none}.header-title-logo{display:none;height:var(--shadow-claw-logo-size,1.5rem);width:var(--shadow-claw-logo-size,1.5rem)}.header-title{align-items:center;display:none;font-size:var(--shadow-claw-header-title-font-size,1.5rem);font-weight:700;line-height:1;margin:0 0 0 .5rem}@media (min-width:30rem){.header-title,.header-title-logo{display:flex}}.header-actions-logo-link{align-items:center;color:inherit;display:flex;flex-direction:row;height:2.5rem;justify-content:center;width:2.5rem}.header-actions-logo-link svg{height:1.5rem;width:1.5rem}.app-dialog,dialog{background-color:var(--shadow-claw-bg-secondary);border:.0625rem solid var(--shadow-claw-border-color);border-radius:var(--shadow-claw-radius-l,1.25rem);box-shadow:var(--shadow-claw-shadow-lg);color:var(--shadow-claw-text-primary);padding:0}.app-dialog::backdrop,dialog::backdrop{backdrop-filter:blur(2px);background:color-mix(in srgb,#000 65%,transparent)}.sidebar-custom-sections{display:flex;flex-direction:column;gap:.5rem;padding:.5rem}.sidebar-section{display:flex;flex-direction:column;gap:.125rem}.sidebar-section-header{color:var(--shadow-claw-text-tertiary);font-size:.75rem;font-weight:700;letter-spacing:.05em;padding:.5rem .75rem .25rem;text-transform:uppercase}.sidebar-section-header a.sidebar-link{color:inherit;font-weight:700;padding:0;text-transform:uppercase}.sidebar-item{display:flex}.sidebar-link{align-items:center;border-radius:var(--shadow-claw-radius-m);color:var(--shadow-claw-text-secondary);display:flex;font-size:var(--shadow-claw-font-size-sm);font-weight:500;padding:.5rem .75rem;text-decoration:none;transition:background-color .15s,color .15s;width:100%}.sidebar-link:hover{background-color:var(--shadow-claw-text-secondary);color:var(--shadow-claw-on-primary)}.sidebar-link.active,.sidebar-link[aria-current=page]{background-color:var(--shadow-claw-accent-primary);color:var(--shadow-claw-on-primary)}
|