diff --git a/.gitignore b/.gitignore index 3d4f9095ab0..cd0e4b44f79 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,12 @@ Session.vim opencode.json a.out target +/tests +/references + +# Extension build output +packages/extension/.output/ + +# Session files (AI agent artifacts) +session-*.md +*-session-*.md \ No newline at end of file diff --git a/bun.lock b/bun.lock index cd4de7a0311..f19db95d8e7 100644 --- a/bun.lock +++ b/bun.lock @@ -1,6 +1,6 @@ { "lockfileVersion": 1, - "configVersion": 1, + "configVersion": 0, "workspaces": { "": { "name": "opencode", @@ -195,6 +195,24 @@ "vite": "catalog:", }, }, + "packages/extension": { + "name": "@eidorail/extension", + "version": "0.1.0", + "dependencies": { + "@mozilla/readability": "0.6.0", + "@solidjs/router": "catalog:", + "@types/turndown": "5.0.6", + "solid-js": "catalog:", + "turndown": "7.2.2", + "vite-plugin-solid": "catalog:", + }, + "devDependencies": { + "@types/chrome": "^0.0.287", + "@wxt-dev/module-solid": "1.1.4", + "typescript": "catalog:", + "wxt": "^0.20.5", + }, + }, "packages/function": { "name": "@opencode-ai/function", "version": "1.0.149", @@ -492,6 +510,8 @@ "zod": "4.1.8", }, "packages": { + "@1natsu/wait-element": ["@1natsu/wait-element@4.1.2", "", { "dependencies": { "defu": "^6.1.4", "many-keys-map": "^2.0.1" } }, "sha512-qWxSJD+Q5b8bKOvESFifvfZ92DuMsY+03SBNjTO34ipJLP6mZ9yK4bQz/vlh48aEQXoJfaZBqUwKL5BdI5iiWw=="], + "@actions/artifact": ["@actions/artifact@4.0.0", "", { "dependencies": { "@actions/core": "^1.10.0", "@actions/github": "^6.0.1", "@actions/http-client": "^2.1.0", "@azure/core-http": "^3.0.5", "@azure/storage-blob": "^12.15.0", "@octokit/core": "^5.2.1", "@octokit/plugin-request-log": "^1.0.4", "@octokit/plugin-retry": "^3.0.9", "@octokit/request": "^8.4.1", "@octokit/request-error": "^5.1.1", "@protobuf-ts/plugin": "^2.2.3-alpha.1", "archiver": "^7.0.1", "jwt-decode": "^3.1.2", "unzip-stream": "^0.3.1" } }, "sha512-HCc2jMJRAfviGFAh0FsOR/jNfWhirxl7W6z8zDtttt0GltwxBLdEIjLiweOPFl9WbyJRW1VWnPUSAixJqcWUMQ=="], "@actions/core": ["@actions/core@1.11.1", "", { "dependencies": { "@actions/exec": "^1.1.1", "@actions/http-client": "^2.0.1" } }, "sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A=="], @@ -530,6 +550,8 @@ "@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.18", "", { "dependencies": { "@ai-sdk/provider": "2.0.0", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-ypv1xXMsgGcNKUP+hglKqtdDuMg68nWHucPPAhIENrbFAI+xCHiqPVN8Zllxyv1TNZwGWUghPxJXU+Mqps0YRQ=="], + "@aklinker1/rollup-plugin-visualizer": ["@aklinker1/rollup-plugin-visualizer@5.12.0", "", { "dependencies": { "open": "^8.4.0", "picomatch": "^2.3.1", "source-map": "^0.7.4", "yargs": "^17.5.1" }, "peerDependencies": { "rollup": "2.x || 3.x || 4.x" }, "optionalPeers": ["rollup"], "bin": { "rollup-plugin-visualizer": "dist/bin/cli.js" } }, "sha512-X24LvEGw6UFmy0lpGJDmXsMyBD58XmX1bbwsaMLhNoM+UMQfQ3b2RtC+nz4b/NoRK5r6QJSKJHBNVeUdwqybaQ=="], + "@alloc/quick-lru": ["@alloc/quick-lru@5.2.0", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="], "@ampproject/remapping": ["@ampproject/remapping@2.3.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="], @@ -718,7 +740,7 @@ "@babel/preset-typescript": ["@babel/preset-typescript@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.27.1", "@babel/plugin-transform-typescript": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ=="], - "@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + "@babel/runtime": ["@babel/runtime@7.28.2", "", {}, "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA=="], "@babel/template": ["@babel/template@7.27.2", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", "@babel/types": "^7.27.1" } }, "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw=="], @@ -760,12 +782,20 @@ "@ctrl/tinycolor": ["@ctrl/tinycolor@4.2.0", "", {}, "sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A=="], + "@devicefarmer/adbkit": ["@devicefarmer/adbkit@3.3.8", "", { "dependencies": { "@devicefarmer/adbkit-logcat": "^2.1.2", "@devicefarmer/adbkit-monkey": "~1.2.1", "bluebird": "~3.7", "commander": "^9.1.0", "debug": "~4.3.1", "node-forge": "^1.3.1", "split": "~1.0.1" }, "bin": { "adbkit": "bin/adbkit" } }, "sha512-7rBLLzWQnBwutH2WZ0EWUkQdihqrnLYCUMaB44hSol9e0/cdIhuNFcqZO0xNheAU6qqHVA8sMiLofkYTgb+lmw=="], + + "@devicefarmer/adbkit-logcat": ["@devicefarmer/adbkit-logcat@2.1.3", "", {}, "sha512-yeaGFjNBc/6+svbDeul1tNHtNChw6h8pSHAt5D+JsedUrMTN7tla7B15WLDyekxsuS2XlZHRxpuC6m92wiwCNw=="], + + "@devicefarmer/adbkit-monkey": ["@devicefarmer/adbkit-monkey@1.2.1", "", {}, "sha512-ZzZY/b66W2Jd6NHbAhLyDWOEIBWC11VizGFk7Wx7M61JZRz7HR9Cq5P+65RKWUU7u6wgsE8Lmh9nE4Mz+U2eTg=="], + "@dimforge/rapier2d-simd-compat": ["@dimforge/rapier2d-simd-compat@0.17.3", "", {}, "sha512-bijvwWz6NHsNj5e5i1vtd3dU2pDhthSaTUZSh14DUGGKJfw8eMnlWZsxwHBxB/a3AXVNDjL9abuHw1k9FGR+jg=="], "@dot/log": ["@dot/log@0.1.5", "", { "dependencies": { "chalk": "^4.1.2", "loglevelnext": "^6.0.0", "p-defer": "^3.0.0" } }, "sha512-ECraEVJWv2f2mWK93lYiefUkphStVlKD6yKDzisuoEmxuLKrxO9iGetHK2DoEAkj7sxjE886n0OUVVCUx0YPNg=="], "@drizzle-team/brocli": ["@drizzle-team/brocli@0.10.2", "", {}, "sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w=="], + "@eidorail/extension": ["@eidorail/extension@workspace:packages/extension"], + "@emnapi/core": ["@emnapi/core@1.7.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" } }, "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg=="], "@emnapi/runtime": ["@emnapi/runtime@1.7.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA=="], @@ -780,57 +810,57 @@ "@esbuild-kit/esm-loader": ["@esbuild-kit/esm-loader@2.6.5", "", { "dependencies": { "@esbuild-kit/core-utils": "^3.3.2", "get-tsconfig": "^4.7.0" } }, "sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA=="], - "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.4", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q=="], + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="], - "@esbuild/android-arm": ["@esbuild/android-arm@0.25.4", "", { "os": "android", "cpu": "arm" }, "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ=="], + "@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="], - "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.4", "", { "os": "android", "cpu": "arm64" }, "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A=="], + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.12", "", { "os": "android", "cpu": "arm64" }, "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg=="], - "@esbuild/android-x64": ["@esbuild/android-x64@0.25.4", "", { "os": "android", "cpu": "x64" }, "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ=="], + "@esbuild/android-x64": ["@esbuild/android-x64@0.25.12", "", { "os": "android", "cpu": "x64" }, "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg=="], - "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g=="], + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg=="], - "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A=="], + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA=="], - "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.4", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ=="], + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg=="], - "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ=="], + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ=="], - "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.4", "", { "os": "linux", "cpu": "arm" }, "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ=="], + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.12", "", { "os": "linux", "cpu": "arm" }, "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw=="], - "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ=="], + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ=="], - "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.4", "", { "os": "linux", "cpu": "ia32" }, "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ=="], + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA=="], - "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA=="], + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng=="], - "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg=="], + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw=="], - "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag=="], + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA=="], - "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA=="], + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w=="], - "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g=="], + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg=="], - "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.4", "", { "os": "linux", "cpu": "x64" }, "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA=="], + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.12", "", { "os": "linux", "cpu": "x64" }, "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw=="], - "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.4", "", { "os": "none", "cpu": "arm64" }, "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ=="], + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg=="], - "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.4", "", { "os": "none", "cpu": "x64" }, "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw=="], + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.12", "", { "os": "none", "cpu": "x64" }, "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ=="], - "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.4", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A=="], + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.12", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A=="], - "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.4", "", { "os": "openbsd", "cpu": "x64" }, "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw=="], + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw=="], "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg=="], - "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.4", "", { "os": "sunos", "cpu": "x64" }, "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q=="], + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w=="], - "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ=="], + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg=="], - "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg=="], + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ=="], - "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.4", "", { "os": "win32", "cpu": "x64" }, "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ=="], + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], "@expressive-code/core": ["@expressive-code/core@0.41.3", "", { "dependencies": { "@ctrl/tinycolor": "^4.0.4", "hast-util-select": "^6.0.2", "hast-util-to-html": "^9.0.1", "hast-util-to-text": "^4.0.1", "hastscript": "^9.0.0", "postcss": "^8.4.38", "postcss-nested": "^6.0.1", "unist-util-visit": "^5.0.0", "unist-util-visit-parents": "^6.0.1" } }, "sha512-9qzohqU7O0+JwMEEgQhnBPOw5DtsQRBXhW++5fvEywsuX44vCGGof1SL5OvPElvNgaWZ4pFZAFSlkNOkGyLwSQ=="], @@ -1058,6 +1088,8 @@ "@motionone/utils": ["@motionone/utils@10.18.0", "", { "dependencies": { "@motionone/types": "^10.17.1", "hey-listen": "^1.0.8", "tslib": "^2.3.1" } }, "sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw=="], + "@mozilla/readability": ["@mozilla/readability@0.6.0", "", {}, "sha512-juG5VWh4qAivzTAeMzvY9xs9HY5rAcr2E4I7tiSSCokRFi7XIZCAu92ZkSTsIj1OPceCifL3cpfteP3pDT9/QQ=="], + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.0.7", "", { "dependencies": { "@emnapi/core": "^1.5.0", "@emnapi/runtime": "^1.5.0", "@tybys/wasm-util": "^0.10.1" } }, "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw=="], "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], @@ -1284,6 +1316,12 @@ "@planetscale/database": ["@planetscale/database@1.19.0", "", {}, "sha512-Tv4jcFUFAFjOWrGSio49H6R2ijALv0ZzVBfJKIdm+kl9X046Fh4LLawrF9OMsglVbK6ukqMJsUCeucGAFTBcMA=="], + "@pnpm/config.env-replace": ["@pnpm/config.env-replace@1.1.0", "", {}, "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w=="], + + "@pnpm/network.ca-file": ["@pnpm/network.ca-file@1.0.2", "", { "dependencies": { "graceful-fs": "4.2.10" } }, "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA=="], + + "@pnpm/npm-conf": ["@pnpm/npm-conf@2.3.1", "", { "dependencies": { "@pnpm/config.env-replace": "^1.1.0", "@pnpm/network.ca-file": "^1.0.1", "config-chain": "^1.1.11" } }, "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw=="], + "@poppinss/colors": ["@poppinss/colors@4.1.5", "", { "dependencies": { "kleur": "^4.1.5" } }, "sha512-FvdDqtcRCtz6hThExcFOgW0cWX+xwSMWcRuQe5ZEb2m7cVQOAVZOIMt+/v9RxGiD9/OY16qJBXK4CVKWAPalBw=="], "@poppinss/dumper": ["@poppinss/dumper@0.6.5", "", { "dependencies": { "@poppinss/colors": "^4.1.5", "@sindresorhus/is": "^7.0.2", "supports-color": "^10.0.0" } }, "sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw=="], @@ -1690,6 +1728,8 @@ "@types/chai": ["@types/chai@5.2.3", "", { "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" } }, "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA=="], + "@types/chrome": ["@types/chrome@0.0.287", "", { "dependencies": { "@types/filesystem": "*", "@types/har-format": "*" } }, "sha512-wWhBNPNXZHwycHKNYnexUcpSbrihVZu++0rdp6GEk5ZgAglenLx+RwdEouh6FrHS0XQiOxSd62yaujM1OoQlZQ=="], + "@types/connect": ["@types/connect@3.4.38", "", { "dependencies": { "@types/node": "*" } }, "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug=="], "@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "*" } }, "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="], @@ -1704,8 +1744,14 @@ "@types/express-serve-static-core": ["@types/express-serve-static-core@4.19.7", "", { "dependencies": { "@types/node": "*", "@types/qs": "*", "@types/range-parser": "*", "@types/send": "*" } }, "sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg=="], + "@types/filesystem": ["@types/filesystem@0.0.36", "", { "dependencies": { "@types/filewriter": "*" } }, "sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA=="], + + "@types/filewriter": ["@types/filewriter@0.0.33", "", {}, "sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g=="], + "@types/fontkit": ["@types/fontkit@2.0.8", "", { "dependencies": { "@types/node": "*" } }, "sha512-wN+8bYxIpJf+5oZdrdtaX04qUuWHcKxcDEgRS9Qm9ZClSHjzEn13SxUC+5eRM+4yXIeTYk8mTzLAWGF64847ew=="], + "@types/har-format": ["@types/har-format@1.2.16", "", {}, "sha512-fluxdy7ryD3MV6h8pTfTYpy/xQzCFC7m89nOH9y94cNqJ1mDIDPut7MnRHI3F6qRmh/cT2fUjG1MLdCNb4hE9A=="], + "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], "@types/http-errors": ["@types/http-errors@2.0.5", "", {}, "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg=="], @@ -1728,6 +1774,8 @@ "@types/mime": ["@types/mime@1.3.5", "", {}, "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w=="], + "@types/minimatch": ["@types/minimatch@3.0.5", "", {}, "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ=="], + "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], "@types/nlcst": ["@types/nlcst@2.0.3", "", { "dependencies": { "@types/unist": "*" } }, "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA=="], @@ -1760,7 +1808,7 @@ "@types/tunnel": ["@types/tunnel@0.0.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA=="], - "@types/turndown": ["@types/turndown@5.0.5", "", {}, "sha512-TL2IgGgc7B5j78rIccBtlYAnkuv8nUQqhQc+DSYV5j9Be9XOcm/SKOVRuA47xAVI3680Tk9B1d8flK2GWT2+4w=="], + "@types/turndown": ["@types/turndown@5.0.6", "", {}, "sha512-ru00MoyeeouE5BX4gRL+6m/BsDfbRayOskWqUvh7CLGW+UXxHQItqALa38kKnOiZPqJrtzJUgAC2+F0rL1S4Pg=="], "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], @@ -1812,8 +1860,20 @@ "@vitest/utils": ["@vitest/utils@4.0.13", "", { "dependencies": { "@vitest/pretty-format": "4.0.13", "tinyrainbow": "^3.0.3" } }, "sha512-ydozWyQ4LZuu8rLp47xFUWis5VOKMdHjXCWhs1LuJsTNKww+pTHQNK4e0assIB9K80TxFyskENL6vCu3j34EYA=="], + "@webext-core/fake-browser": ["@webext-core/fake-browser@1.3.2", "", { "dependencies": { "lodash.merge": "^4.6.2" } }, "sha512-jFyPWWz+VkHAC9DRIiIPOyu6X/KlC8dYqSKweHz6tsDb86QawtVgZSpYcM+GOQBlZc5DHFo92jJ7cIq4uBnU0A=="], + + "@webext-core/isolated-element": ["@webext-core/isolated-element@1.1.2", "", { "dependencies": { "is-potential-custom-element-name": "^1.0.1" } }, "sha512-CNHYhsIR8TPkPb+4yqTIuzaGnVn/Fshev5fyoPW+/8Cyc93tJbCjP9PC1XSK6fDWu+xASdPHLZaoa2nWAYoxeQ=="], + + "@webext-core/match-patterns": ["@webext-core/match-patterns@1.0.3", "", {}, "sha512-NY39ACqCxdKBmHgw361M9pfJma8e4AZo20w9AY+5ZjIj1W2dvXC8J31G5fjfOGbulW9w4WKpT8fPooi0mLkn9A=="], + "@webgpu/types": ["@webgpu/types@0.1.66", "", {}, "sha512-YA2hLrwLpDsRueNDXIMqN9NTzD6bCDkuXbOSe0heS+f8YE8usA6Gbv1prj81pzVHrbaAma7zObnIC+I6/sXJgA=="], + "@wxt-dev/browser": ["@wxt-dev/browser@0.1.4", "", { "dependencies": { "@types/filesystem": "*", "@types/har-format": "*" } }, "sha512-9x03I15i79XU8qYwjv4le0K2HdMl/Yga2wUBSoUbcrCnamv8P3nvuYxREQ9C5QY/qPAfeEVdAtaTrS3KWak71g=="], + + "@wxt-dev/module-solid": ["@wxt-dev/module-solid@1.1.4", "", { "dependencies": { "vite-plugin-solid": "^2.11.6" }, "peerDependencies": { "wxt": ">=0.19.16" } }, "sha512-lnE7AyJeLkG8XMM58NzbtM1GdzzHH7mqt559WT54RwE+4HxBgnGzQVhe7bdWjTWGOdXlTbCi0HyXZqVtzJ3htA=="], + + "@wxt-dev/storage": ["@wxt-dev/storage@1.2.6", "", { "dependencies": { "@wxt-dev/browser": "^0.1.4", "async-mutex": "^0.5.0", "dequal": "^2.0.3" } }, "sha512-f6AknnpJvhNHW4s0WqwSGCuZAj0fjP3EVNPBO5kB30pY+3Zt/nqZGqJN6FgBLCSkYjPJ8VL1hNX5LMVmvxQoDw=="], + "@zip.js/zip.js": ["@zip.js/zip.js@2.7.62", "", {}, "sha512-OaLvZ8j4gCkLn048ypkZu29KX30r8/OfFF2w4Jo5WXFr+J04J+lzJ5TKZBVgFXhlvSkqNFQdfnY1Q8TMTCyBVA=="], "abbrev": ["abbrev@2.0.0", "", {}, "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ=="], @@ -1828,6 +1888,8 @@ "acorn-walk": ["acorn-walk@8.3.2", "", {}, "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A=="], + "adm-zip": ["adm-zip@0.5.16", "", {}, "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ=="], + "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], "agentkeepalive": ["agentkeepalive@4.6.0", "", { "dependencies": { "humanize-ms": "^1.2.1" } }, "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ=="], @@ -1840,6 +1902,8 @@ "ansi-colors": ["ansi-colors@4.1.3", "", {}, "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw=="], + "ansi-escapes": ["ansi-escapes@7.2.0", "", { "dependencies": { "environment": "^1.0.0" } }, "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw=="], + "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], @@ -1868,6 +1932,8 @@ "array-buffer-byte-length": ["array-buffer-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" } }, "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw=="], + "array-differ": ["array-differ@4.0.0", "", {}, "sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw=="], + "array-flatten": ["array-flatten@1.1.1", "", {}, "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="], "array-iterate": ["array-iterate@2.0.1", "", {}, "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg=="], @@ -1890,8 +1956,14 @@ "async-function": ["async-function@1.0.0", "", {}, "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA=="], + "async-mutex": ["async-mutex@0.5.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA=="], + "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], + "atomic-sleep": ["atomic-sleep@1.0.0", "", {}, "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ=="], + + "atomically": ["atomically@2.1.0", "", { "dependencies": { "stubborn-fs": "^2.0.0", "when-exit": "^2.1.4" } }, "sha512-+gDffFXRW6sl/HCwbta7zK4uNqbPjv4YJEAdz7Vu+FLQHe77eZ4bvbJGi4hE0QPeJlMYMA3piXEr1UL3dAwx7Q=="], + "autoprefixer": ["autoprefixer@10.4.22", "", { "dependencies": { "browserslist": "^4.27.0", "caniuse-lite": "^1.0.30001754", "fraction.js": "^5.3.4", "normalize-range": "^0.1.2", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg=="], "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], @@ -1958,6 +2030,8 @@ "blob-to-buffer": ["blob-to-buffer@1.2.9", "", {}, "sha512-BF033y5fN6OCofD3vgHmNtwZWRcq9NLyyxyILx9hfMy1sXYy4ojFl765hJ2lP0YaN2fuxPaLO2Vzzoxy0FLFFA=="], + "bluebird": ["bluebird@3.7.2", "", {}, "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="], + "bmp-ts": ["bmp-ts@1.0.9", "", {}, "sha512-cTEHk2jLrPyi+12M3dhpEbnnPOsaZuq7C45ylbbQIiWgDFZq4UVYPEY5mlqjvsj/6gJv9qX5sa+ebDzLXT28Vw=="], "body-parser": ["body-parser@1.20.3", "", { "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" } }, "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g=="], @@ -1970,7 +2044,7 @@ "boxen": ["boxen@8.0.1", "", { "dependencies": { "ansi-align": "^3.0.1", "camelcase": "^8.0.0", "chalk": "^5.3.0", "cli-boxes": "^3.0.0", "string-width": "^7.2.0", "type-fest": "^4.21.0", "widest-line": "^5.0.0", "wrap-ansi": "^9.0.0" } }, "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw=="], - "brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], @@ -2010,6 +2084,8 @@ "c12": ["c12@3.3.2", "", { "dependencies": { "chokidar": "^4.0.3", "confbox": "^0.2.2", "defu": "^6.1.4", "dotenv": "^17.2.3", "exsolve": "^1.0.8", "giget": "^2.0.0", "jiti": "^2.6.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^2.0.0", "pkg-types": "^2.3.0", "rc9": "^2.1.2" }, "peerDependencies": { "magicast": "*" }, "optionalPeers": ["magicast"] }, "sha512-QkikB2X5voO1okL3QsES0N690Sn/K9WokXqUsDQsWy5SnYb+psYQFGA10iy1bZHj3fjISKsI67Q90gruvWWM3A=="], + "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], + "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], @@ -2050,6 +2126,8 @@ "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], + "chrome-launcher": ["chrome-launcher@1.2.0", "", { "dependencies": { "@types/node": "*", "escape-string-regexp": "^4.0.0", "is-wsl": "^2.2.0", "lighthouse-logger": "^2.0.1" }, "bin": { "print-chrome-path": "bin/print-chrome-path.cjs" } }, "sha512-JbuGuBNss258bvGil7FT4HKdC3SC2K7UAEUqiPy3ACS3Yxo3hAW6bvFpCu2HsIJLgTqxgEX6BkujvzZfLpUD0Q=="], + "ci-info": ["ci-info@4.3.1", "", {}, "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA=="], "citty": ["citty@0.1.6", "", { "dependencies": { "consola": "^3.2.3" } }, "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ=="], @@ -2060,8 +2138,12 @@ "cli-boxes": ["cli-boxes@3.0.0", "", {}, "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g=="], + "cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="], + "cli-spinners": ["cli-spinners@3.3.0", "", {}, "sha512-/+40ljC3ONVnYIttjMWrlL51nItDAbBrq2upN8BPyvGU/2n5Oxw3tbNwORCaNuNqLJnxGqOfjUuhsv7l5Q4IsQ=="], + "cli-truncate": ["cli-truncate@4.0.0", "", { "dependencies": { "slice-ansi": "^5.0.0", "string-width": "^7.0.0" } }, "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA=="], + "clipboardy": ["clipboardy@4.0.0", "", { "dependencies": { "execa": "^8.0.1", "is-wsl": "^3.1.0", "is64bit": "^2.0.0" } }, "sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w=="], "cliui": ["cliui@9.0.1", "", { "dependencies": { "string-width": "^7.2.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" } }, "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w=="], @@ -2086,6 +2168,8 @@ "color-support": ["color-support@1.1.3", "", { "bin": { "color-support": "bin.js" } }, "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg=="], + "colorette": ["colorette@2.0.20", "", {}, "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="], + "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], @@ -2096,12 +2180,18 @@ "compress-commons": ["compress-commons@6.0.2", "", { "dependencies": { "crc-32": "^1.2.0", "crc32-stream": "^6.0.0", "is-stream": "^2.0.1", "normalize-path": "^3.0.0", "readable-stream": "^4.0.0" } }, "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg=="], + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + + "concat-stream": ["concat-stream@1.6.2", "", { "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" } }, "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw=="], + "condense-newlines": ["condense-newlines@0.2.1", "", { "dependencies": { "extend-shallow": "^2.0.1", "is-whitespace": "^0.3.0", "kind-of": "^3.0.2" } }, "sha512-P7X+QL9Hb9B/c8HI5BFFKmjgBu2XpQuF98WZ9XkO+dBGgk5XgwiQz7o1SmpglNWId3581UcS0SFAWfoIhMHPfg=="], "confbox": ["confbox@0.2.2", "", {}, "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="], "config-chain": ["config-chain@1.1.13", "", { "dependencies": { "ini": "^1.3.4", "proto-list": "~1.2.1" } }, "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ=="], + "configstore": ["configstore@7.1.0", "", { "dependencies": { "atomically": "^2.0.3", "dot-prop": "^9.0.0", "graceful-fs": "^4.2.11", "xdg-basedir": "^5.1.0" } }, "sha512-N4oog6YJWbR9kGyXvS7jEykLDXIE2C0ILYqNBZBp9iwiJpoCBWYsuAdW6PPFn6w06jjnC+3JstVvWHO4cZqvRg=="], + "consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], "content-disposition": ["content-disposition@0.5.4", "", { "dependencies": { "safe-buffer": "5.2.1" } }, "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ=="], @@ -2140,6 +2230,8 @@ "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], + "cssom": ["cssom@0.5.0", "", {}, "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw=="], + "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], "data-view-buffer": ["data-view-buffer@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ=="], @@ -2150,6 +2242,8 @@ "db0": ["db0@0.3.4", "", { "peerDependencies": { "@electric-sql/pglite": "*", "@libsql/client": "*", "better-sqlite3": "*", "drizzle-orm": "*", "mysql2": "*", "sqlite3": "*" }, "optionalPeers": ["@electric-sql/pglite", "@libsql/client", "better-sqlite3", "drizzle-orm", "mysql2", "sqlite3"] }, "sha512-RiXXi4WaNzPTHEOu8UPQKMooIbqOEyqA1t7Z6MsdxSCeb8iUC9ko3LcmsLmeUt2SM5bctfArZKkRQggKZz7JNw=="], + "debounce": ["debounce@1.2.1", "", {}, "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug=="], + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], "decimal.js": ["decimal.js@10.5.0", "", {}, "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw=="], @@ -2224,6 +2318,8 @@ "dotenv": ["dotenv@17.2.3", "", {}, "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w=="], + "dotenv-expand": ["dotenv-expand@12.0.3", "", { "dependencies": { "dotenv": "^16.4.5" } }, "sha512-uc47g4b+4k/M/SeaW1y4OApx+mtLWl92l5LMPP0GNXctZqELk+YGgOPIIC5elYmUH4OuoK3JLhuRUYegeySiFA=="], + "drizzle-kit": ["drizzle-kit@0.30.5", "", { "dependencies": { "@drizzle-team/brocli": "^0.10.2", "@esbuild-kit/esm-loader": "^2.5.5", "esbuild": "^0.19.7", "esbuild-register": "^3.5.0", "gel": "^2.0.0" }, "bin": { "drizzle-kit": "bin.cjs" } }, "sha512-l6dMSE100u7sDaTbLczibrQZjA35jLsHNqIV+jmhNVO3O8jzM6kywMOmV9uOz9ZVSCMPQhAZEFjL/qDPVrqpUA=="], "drizzle-orm": ["drizzle-orm@0.41.0", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/sql.js": "*", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "gel": ">=2", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/sql.js", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "gel", "knex", "kysely", "mysql2", "pg", "postgres", "sql.js", "sqlite3"] }, "sha512-7A4ZxhHk9gdlXmTdPj/lREtP+3u8KvZ4yEN6MYVxBzZGex5Wtdc+CWSbu7btgF6TB0N+MNPrvW7RKBbxJchs/Q=="], @@ -2256,6 +2352,10 @@ "env-paths": ["env-paths@3.0.0", "", {}, "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A=="], + "environment": ["environment@1.1.0", "", {}, "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q=="], + + "error-ex": ["error-ex@1.3.4", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="], + "error-stack-parser": ["error-stack-parser@2.1.4", "", { "dependencies": { "stackframe": "^1.3.4" } }, "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ=="], "error-stack-parser-es": ["error-stack-parser-es@1.0.5", "", {}, "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA=="], @@ -2278,11 +2378,13 @@ "es-to-primitive": ["es-to-primitive@1.3.0", "", { "dependencies": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", "is-symbol": "^1.0.4" } }, "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g=="], + "es6-error": ["es6-error@4.1.1", "", {}, "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg=="], + "esast-util-from-estree": ["esast-util-from-estree@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", "estree-util-visit": "^2.0.0", "unist-util-position-from-estree": "^2.0.0" } }, "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ=="], "esast-util-from-js": ["esast-util-from-js@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "acorn": "^8.0.0", "esast-util-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw=="], - "esbuild": ["esbuild@0.25.4", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.4", "@esbuild/android-arm": "0.25.4", "@esbuild/android-arm64": "0.25.4", "@esbuild/android-x64": "0.25.4", "@esbuild/darwin-arm64": "0.25.4", "@esbuild/darwin-x64": "0.25.4", "@esbuild/freebsd-arm64": "0.25.4", "@esbuild/freebsd-x64": "0.25.4", "@esbuild/linux-arm": "0.25.4", "@esbuild/linux-arm64": "0.25.4", "@esbuild/linux-ia32": "0.25.4", "@esbuild/linux-loong64": "0.25.4", "@esbuild/linux-mips64el": "0.25.4", "@esbuild/linux-ppc64": "0.25.4", "@esbuild/linux-riscv64": "0.25.4", "@esbuild/linux-s390x": "0.25.4", "@esbuild/linux-x64": "0.25.4", "@esbuild/netbsd-arm64": "0.25.4", "@esbuild/netbsd-x64": "0.25.4", "@esbuild/openbsd-arm64": "0.25.4", "@esbuild/openbsd-x64": "0.25.4", "@esbuild/sunos-x64": "0.25.4", "@esbuild/win32-arm64": "0.25.4", "@esbuild/win32-ia32": "0.25.4", "@esbuild/win32-x64": "0.25.4" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q=="], + "esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], "esbuild-plugin-copy": ["esbuild-plugin-copy@2.1.1", "", { "dependencies": { "chalk": "^4.1.2", "chokidar": "^3.5.3", "fs-extra": "^10.0.1", "globby": "^11.0.3" }, "peerDependencies": { "esbuild": ">= 0.14.0" } }, "sha512-Bk66jpevTcV8KMFzZI1P7MZKZ+uDcrZm2G2egZ2jNIvVnivDpodZI+/KnpL3Jnap0PBdIHU7HwFGB8r+vV5CVw=="], @@ -2290,9 +2392,11 @@ "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + "escape-goat": ["escape-goat@4.0.0", "", {}, "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg=="], + "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], - "escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], + "escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], @@ -2356,6 +2460,8 @@ "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], + "fast-redact": ["fast-redact@3.5.0", "", {}, "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A=="], + "fast-xml-parser": ["fast-xml-parser@4.4.1", "", { "dependencies": { "strnum": "^1.0.5" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw=="], "fastq": ["fastq@1.19.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ=="], @@ -2364,6 +2470,8 @@ "file-type": ["file-type@16.5.4", "", { "dependencies": { "readable-web-to-node-stream": "^3.0.0", "strtok3": "^6.2.4", "token-types": "^4.1.1" } }, "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw=="], + "filesize": ["filesize@11.0.13", "", {}, "sha512-mYJ/qXKvREuO0uH8LTQJ6v7GsUvVOguqxg2VTwQUkyTPXXRRWPdjuUPVqdBrJQhvci48OHlNGRnux+Slr2Rnvw=="], + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], "finalhandler": ["finalhandler@1.3.1", "", { "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", "statuses": "2.0.1", "unpipe": "~1.0.0" } }, "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ=="], @@ -2374,6 +2482,8 @@ "finity": ["finity@0.5.4", "", {}, "sha512-3l+5/1tuw616Lgb0QBimxfdd2TqaDGpfCBpfX6EqtFmqUV3FtQnVEX4Aa62DagYEqnsTIjZcTfbq9msDbXYgyA=="], + "firefox-profile": ["firefox-profile@4.7.0", "", { "dependencies": { "adm-zip": "~0.5.x", "fs-extra": "^11.2.0", "ini": "^4.1.3", "minimist": "^1.2.8", "xml2js": "^0.6.2" }, "bin": { "firefox-profile": "lib/cli.js" } }, "sha512-aGApEu5bfCNbA4PGUZiRJAIU6jKmghV2UVdklXAofnNtiDjqYw0czLS46W7IfFqVKgKhFB8Ao2YoNGHY4BoIMQ=="], + "flattie": ["flattie@1.1.1", "", {}, "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ=="], "follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="], @@ -2402,7 +2512,7 @@ "fs-constants": ["fs-constants@1.0.0", "", {}, "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="], - "fs-extra": ["fs-extra@10.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ=="], + "fs-extra": ["fs-extra@11.3.2", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A=="], "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], @@ -2416,6 +2526,8 @@ "fuzzysort": ["fuzzysort@3.1.0", "", {}, "sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ=="], + "fx-runner": ["fx-runner@1.4.0", "", { "dependencies": { "commander": "2.9.0", "shell-quote": "1.7.3", "spawn-sync": "1.0.15", "when": "3.7.7", "which": "1.2.4", "winreg": "0.0.12" }, "bin": { "fx-runner": "bin/fx-runner" } }, "sha512-rci1g6U0rdTg6bAaBboP7XdRu01dzTAaKXxFf+PUqGuCv6Xu7o8NZdY1D5MvKGIjb6EdS1g3VlXOgksir1uGkg=="], + "gaxios": ["gaxios@6.7.1", "", { "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", "is-stream": "^2.0.0", "node-fetch": "^2.6.9", "uuid": "^9.0.1" } }, "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ=="], "gcp-metadata": ["gcp-metadata@6.1.1", "", { "dependencies": { "gaxios": "^6.1.1", "google-logging-utils": "^0.0.2", "json-bigint": "^1.0.0" } }, "sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A=="], @@ -2438,6 +2550,8 @@ "get-port": ["get-port@7.1.0", "", {}, "sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw=="], + "get-port-please": ["get-port-please@3.2.0", "", {}, "sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A=="], + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], "get-stream": ["get-stream@8.0.1", "", {}, "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA=="], @@ -2462,6 +2576,8 @@ "glob-to-regexp": ["glob-to-regexp@0.4.1", "", {}, "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="], + "global-directory": ["global-directory@4.0.1", "", { "dependencies": { "ini": "4.1.1" } }, "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q=="], + "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], "globby": ["globby@11.0.4", "", { "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.1.1", "ignore": "^5.1.4", "merge2": "^1.3.0", "slash": "^3.0.0" } }, "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg=="], @@ -2474,8 +2590,12 @@ "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + "graceful-readlink": ["graceful-readlink@1.0.1", "", {}, "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w=="], + "gray-matter": ["gray-matter@4.0.3", "", { "dependencies": { "js-yaml": "^3.13.1", "kind-of": "^6.0.2", "section-matter": "^1.0.0", "strip-bom-string": "^1.0.0" } }, "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q=="], + "growly": ["growly@1.3.0", "", {}, "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw=="], + "gtoken": ["gtoken@7.1.0", "", { "dependencies": { "gaxios": "^6.0.0", "jws": "^4.0.0" } }, "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw=="], "h3": ["h3@2.0.1-rc.4", "", { "dependencies": { "rou3": "^0.7.8", "srvx": "^0.9.1" }, "peerDependencies": { "crossws": "^0.4.1" }, "optionalPeers": ["crossws"] }, "sha512-vZq8pEUp6THsXKXrUXX44eOqfChic2wVQ1GlSzQCBr7DeFBkfIZAo2WyNND4GSv54TAa0E4LYIK73WSPdgKUgw=="], @@ -2546,6 +2666,8 @@ "hono-openapi": ["hono-openapi@1.1.2", "", { "peerDependencies": { "@hono/standard-validator": "^0.2.0", "@standard-community/standard-json": "^0.3.5", "@standard-community/standard-openapi": "^0.2.9", "@types/json-schema": "^7.0.15", "hono": "^4.8.3", "openapi-types": "^12.1.3" }, "optionalPeers": ["@hono/standard-validator", "hono"] }, "sha512-toUcO60MftRBxqcVyxsHNYs2m4vf4xkQaiARAucQx3TiBPDtMNNkoh+C4I1vAretQZiGyaLOZNWn1YxfSyUA5g=="], + "hookable": ["hookable@5.5.3", "", {}, "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="], + "html-entities": ["html-entities@2.3.3", "", {}, "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA=="], "html-escaper": ["html-escaper@3.0.3", "", {}, "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ=="], @@ -2560,7 +2682,7 @@ "html-whitespace-sensitive-tag-names": ["html-whitespace-sensitive-tag-names@3.0.1", "", {}, "sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA=="], - "htmlparser2": ["htmlparser2@8.0.2", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1", "entities": "^4.4.0" } }, "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA=="], + "htmlparser2": ["htmlparser2@10.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.2.1", "entities": "^6.0.0" } }, "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g=="], "http-cache-semantics": ["http-cache-semantics@4.2.0", "", {}, "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="], @@ -2586,13 +2708,15 @@ "image-q": ["image-q@4.0.0", "", { "dependencies": { "@types/node": "16.9.1" } }, "sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw=="], + "immediate": ["immediate@3.0.6", "", {}, "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="], + "import-local": ["import-local@3.2.0", "", { "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" }, "bin": { "import-local-fixture": "fixtures/cli.js" } }, "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA=="], "import-meta-resolve": ["import-meta-resolve@4.2.0", "", {}, "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg=="], "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], - "ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], + "ini": ["ini@4.1.3", "", {}, "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg=="], "inline-style-parser": ["inline-style-parser@0.2.7", "", {}, "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA=="], @@ -2604,6 +2728,8 @@ "iron-webcrypto": ["iron-webcrypto@1.2.1", "", {}, "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg=="], + "is-absolute": ["is-absolute@0.1.7", "", { "dependencies": { "is-relative": "^0.1.0" } }, "sha512-Xi9/ZSn4NFapG8RP98iNPMOeaV3mXPisxKxzKtHVqr3g56j/fBn+yZmnxSVAA8lmZbl2J9b/a4kJvfU3hqQYgA=="], + "is-alphabetical": ["is-alphabetical@2.0.1", "", {}, "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ=="], "is-alphanumerical": ["is-alphanumerical@2.0.1", "", { "dependencies": { "is-alphabetical": "^2.0.0", "is-decimal": "^2.0.0" } }, "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw=="], @@ -2612,7 +2738,7 @@ "is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="], - "is-arrayish": ["is-arrayish@0.3.4", "", {}, "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA=="], + "is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="], "is-async-function": ["is-async-function@2.1.1", "", { "dependencies": { "async-function": "^1.0.0", "call-bound": "^1.0.3", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ=="], @@ -2652,26 +2778,44 @@ "is-hexadecimal": ["is-hexadecimal@2.0.1", "", {}, "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg=="], + "is-in-ci": ["is-in-ci@1.0.0", "", { "bin": { "is-in-ci": "cli.js" } }, "sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg=="], + "is-in-ssh": ["is-in-ssh@1.0.0", "", {}, "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw=="], "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="], + "is-installed-globally": ["is-installed-globally@1.0.0", "", { "dependencies": { "global-directory": "^4.0.1", "is-path-inside": "^4.0.0" } }, "sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ=="], + + "is-interactive": ["is-interactive@2.0.0", "", {}, "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ=="], + "is-map": ["is-map@2.0.3", "", {}, "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw=="], "is-negative-zero": ["is-negative-zero@2.0.3", "", {}, "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw=="], + "is-npm": ["is-npm@6.1.0", "", {}, "sha512-O2z4/kNgyjhQwVR1Wpkbfc19JIhggF97NZNCpWTnjH7kVcZMUrnut9XSN7txI7VdyIYk5ZatOq3zvSuWpU8hoA=="], + "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], "is-number-object": ["is-number-object@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw=="], + "is-path-inside": ["is-path-inside@4.0.0", "", {}, "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA=="], + "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], + "is-plain-object": ["is-plain-object@2.0.4", "", { "dependencies": { "isobject": "^3.0.1" } }, "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og=="], + + "is-potential-custom-element-name": ["is-potential-custom-element-name@1.0.1", "", {}, "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="], + + "is-primitive": ["is-primitive@3.0.1", "", {}, "sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w=="], + "is-promise": ["is-promise@4.0.0", "", {}, "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="], "is-property": ["is-property@1.0.2", "", {}, "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="], "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], + "is-relative": ["is-relative@0.1.3", "", {}, "sha512-wBOr+rNM4gkAZqoLRJI4myw5WzzIdQosFAAbnvfXP5z1LyzgAI3ivOKehC5KfqlQJZoihVhirgtCBj378Eg8GA=="], + "is-set": ["is-set@2.0.3", "", {}, "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg=="], "is-shared-array-buffer": ["is-shared-array-buffer@1.0.4", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A=="], @@ -2684,6 +2828,8 @@ "is-typed-array": ["is-typed-array@1.1.15", "", { "dependencies": { "which-typed-array": "^1.1.16" } }, "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ=="], + "is-unicode-supported": ["is-unicode-supported@2.1.0", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="], + "is-weakmap": ["is-weakmap@2.0.2", "", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="], "is-weakref": ["is-weakref@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew=="], @@ -2702,6 +2848,8 @@ "isexe": ["isexe@3.1.1", "", {}, "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ=="], + "isobject": ["isobject@3.0.1", "", {}, "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg=="], + "iterate-iterator": ["iterate-iterator@1.0.2", "", {}, "sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw=="], "iterate-value": ["iterate-value@1.0.2", "", { "dependencies": { "es-get-iterator": "^1.0.2", "iterate-iterator": "^1.0.1" } }, "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ=="], @@ -2732,6 +2880,8 @@ "json-bigint": ["json-bigint@1.0.0", "", { "dependencies": { "bignumber.js": "^9.0.0" } }, "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ=="], + "json-parse-even-better-errors": ["json-parse-even-better-errors@3.0.2", "", {}, "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ=="], + "json-schema": ["json-schema@0.4.0", "", {}, "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="], "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], @@ -2744,6 +2894,8 @@ "jsonwebtoken": ["jsonwebtoken@9.0.2", "", { "dependencies": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", "lodash.isinteger": "^4.0.4", "lodash.isnumber": "^3.0.3", "lodash.isplainobject": "^4.0.6", "lodash.isstring": "^4.0.1", "lodash.once": "^4.0.0", "ms": "^2.1.1", "semver": "^7.5.4" } }, "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ=="], + "jszip": ["jszip@3.10.1", "", { "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", "readable-stream": "~2.3.6", "setimmediate": "^1.0.5" } }, "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g=="], + "jwa": ["jwa@2.0.1", "", { "dependencies": { "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg=="], "jws": ["jws@4.0.0", "", { "dependencies": { "jwa": "^2.0.0", "safe-buffer": "^5.0.1" } }, "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg=="], @@ -2756,14 +2908,22 @@ "klona": ["klona@2.0.6", "", {}, "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA=="], + "ky": ["ky@1.14.1", "", {}, "sha512-hYje4L9JCmpEQBtudo+v52X5X8tgWXUYyPcxKSuxQNboqufecl9VMWjGiucAFH060AwPXHZuH+WB2rrqfkmafw=="], + "lang-map": ["lang-map@0.4.0", "", { "dependencies": { "language-map": "^1.1.0" } }, "sha512-oiSqZIEUnWdFeDNsp4HId4tAxdFbx5iMBOwA3666Fn2L8Khj8NiD9xRvMsGmKXopPVkaDFtSv3CJOmXFUB0Hcg=="], "language-map": ["language-map@1.5.0", "", {}, "sha512-n7gFZpe+DwEAX9cXVTw43i3wiudWDDtSn28RmdnS/HCPr284dQI/SztsamWanRr75oSlKSaGbV2nmWCTzGCoVg=="], + "latest-version": ["latest-version@9.0.0", "", { "dependencies": { "package-json": "^10.0.0" } }, "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA=="], + "lazystream": ["lazystream@1.0.1", "", { "dependencies": { "readable-stream": "^2.0.5" } }, "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw=="], "leac": ["leac@0.6.0", "", {}, "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg=="], + "lie": ["lie@3.3.0", "", { "dependencies": { "immediate": "~3.0.5" } }, "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ=="], + + "lighthouse-logger": ["lighthouse-logger@2.0.2", "", { "dependencies": { "debug": "^4.4.1", "marky": "^1.2.2" } }, "sha512-vWl2+u5jgOQuZR55Z1WM0XDdrJT6mzMP8zHUct7xTlWhuQs+eV0g+QL0RQdFjT54zVmbhLCP8vIVpy1wGn/gCg=="], + "lightningcss": ["lightningcss@1.30.1", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-darwin-arm64": "1.30.1", "lightningcss-darwin-x64": "1.30.1", "lightningcss-freebsd-x64": "1.30.1", "lightningcss-linux-arm-gnueabihf": "1.30.1", "lightningcss-linux-arm64-gnu": "1.30.1", "lightningcss-linux-arm64-musl": "1.30.1", "lightningcss-linux-x64-gnu": "1.30.1", "lightningcss-linux-x64-musl": "1.30.1", "lightningcss-win32-arm64-msvc": "1.30.1", "lightningcss-win32-x64-msvc": "1.30.1" } }, "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg=="], "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.30.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ=="], @@ -2788,7 +2948,13 @@ "lilconfig": ["lilconfig@2.1.0", "", {}, "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="], - "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], + "lines-and-columns": ["lines-and-columns@2.0.4", "", {}, "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A=="], + + "linkedom": ["linkedom@0.18.12", "", { "dependencies": { "css-select": "^5.1.0", "cssom": "^0.5.0", "html-escaper": "^3.0.3", "htmlparser2": "^10.0.0", "uhyphen": "^0.2.0" }, "peerDependencies": { "canvas": ">= 2" }, "optionalPeers": ["canvas"] }, "sha512-jalJsOwIKuQJSeTvsgzPe9iJzyfVaEJiEXl+25EkKevsULHvMJzpNqwvj1jOESWdmgKDiXObyjOYwlUqG7wo1Q=="], + + "listr2": ["listr2@8.3.3", "", { "dependencies": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", "log-update": "^6.1.0", "rfdc": "^1.4.1", "wrap-ansi": "^9.0.0" } }, "sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ=="], + + "local-pkg": ["local-pkg@1.1.2", "", { "dependencies": { "mlly": "^1.7.4", "pkg-types": "^2.3.0", "quansync": "^0.2.11" } }, "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A=="], "locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], @@ -2810,8 +2976,14 @@ "lodash.isstring": ["lodash.isstring@4.0.1", "", {}, "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="], + "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], + "lodash.once": ["lodash.once@4.1.1", "", {}, "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg=="], + "log-symbols": ["log-symbols@6.0.0", "", { "dependencies": { "chalk": "^5.3.0", "is-unicode-supported": "^1.3.0" } }, "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw=="], + + "log-update": ["log-update@6.1.0", "", { "dependencies": { "ansi-escapes": "^7.0.0", "cli-cursor": "^5.0.0", "slice-ansi": "^7.1.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" } }, "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w=="], + "loglevelnext": ["loglevelnext@6.0.0", "", {}, "sha512-FDl1AI2sJGjHHG3XKJd6sG3/6ncgiGCQ0YkW46nxe7SfqQq6hujd9CvFXIXtkGBUN83KPZ2KSOJK8q5P0bSSRQ=="], "long": ["long@5.3.2", "", {}, "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA=="], @@ -2834,6 +3006,10 @@ "magicast": ["magicast@0.3.5", "", { "dependencies": { "@babel/parser": "^7.25.4", "@babel/types": "^7.25.4", "source-map-js": "^1.2.0" } }, "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ=="], + "make-error": ["make-error@1.3.6", "", {}, "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="], + + "many-keys-map": ["many-keys-map@2.0.1", "", {}, "sha512-DHnZAD4phTbZ+qnJdjoNEVU1NecYoSdbOOoVmTDH46AuxDkEVh3MxTVpXq10GtcTC6mndN9dkv1rNfpjRcLnOw=="], + "markdown-extensions": ["markdown-extensions@2.0.0", "", {}, "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q=="], "markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="], @@ -2842,6 +3018,8 @@ "marked-shiki": ["marked-shiki@1.2.1", "", { "peerDependencies": { "marked": ">=7.0.0", "shiki": ">=1.0.0" } }, "sha512-yHxYQhPY5oYaIRnROn98foKhuClark7M373/VpLxiy5TrDu9Jd/LsMwo8w+U91Up4oDb9IXFrP0N1MFRz8W/DQ=="], + "marky": ["marky@1.3.0", "", {}, "sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ=="], + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], "md-to-react-email": ["md-to-react-email@5.0.0", "", { "dependencies": { "marked": "7.0.4" }, "peerDependencies": { "react": "18.x" } }, "sha512-GdBrBUbAAJHypnuyofYGfVos8oUslxHx69hs3CW9P0L8mS1sT6GnJuMBTlz/Fw+2widiwdavcu9UwyLF/BzZ4w=="], @@ -2978,6 +3156,8 @@ "mimic-fn": ["mimic-fn@4.0.0", "", {}, "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw=="], + "mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="], + "mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="], "miniflare": ["miniflare@4.20251118.1", "", { "dependencies": { "@cspotcode/source-map-support": "0.8.1", "acorn": "8.14.0", "acorn-walk": "8.3.2", "exit-hook": "2.2.1", "glob-to-regexp": "0.4.1", "sharp": "^0.33.5", "stoppable": "1.1.0", "undici": "7.14.0", "workerd": "1.20251118.0", "ws": "8.18.0", "youch": "4.1.0-beta.10", "zod": "3.22.3" }, "bin": { "miniflare": "bootstrap.js" } }, "sha512-uLSAE/DvOm392fiaig4LOaatxLjM7xzIniFRG5Y3yF9IduOYLLK/pkCPQNCgKQH3ou0YJRHnTN+09LPfqYNTQQ=="], @@ -2994,10 +3174,14 @@ "mkdirp-classic": ["mkdirp-classic@0.5.3", "", {}, "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="], + "mlly": ["mlly@1.8.0", "", { "dependencies": { "acorn": "^8.15.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "ufo": "^1.6.1" } }, "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g=="], + "mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="], "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + "multimatch": ["multimatch@6.0.0", "", { "dependencies": { "@types/minimatch": "^3.0.5", "array-differ": "^4.0.0", "array-union": "^3.0.1", "minimatch": "^3.0.4" } }, "sha512-I7tSVxHGPlmPN/enE3mS1aOSo6bWBfls+3HmuEeCUBCE7gWnm3cBXCBkpurzFjVRwC6Kld8lLaZ1Iv5vOcjvcQ=="], + "mustache": ["mustache@4.2.0", "", { "bin": { "mustache": "bin/mustache" } }, "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ=="], "mysql2": ["mysql2@3.14.4", "", { "dependencies": { "aws-ssl-profiles": "^1.1.1", "denque": "^2.1.0", "generate-function": "^2.3.1", "iconv-lite": "^0.7.0", "long": "^5.2.1", "lru.min": "^1.0.0", "named-placeholders": "^1.1.3", "seq-queue": "^0.0.5", "sqlstring": "^2.3.2" } }, "sha512-Cs/jx3WZPNrYHVz+Iunp9ziahaG5uFMvD2R8Zlmc194AqXNxt9HBNu7ZsPYrUtmJsF0egETCWIdMIYAwOGjL1w=="], @@ -3006,6 +3190,8 @@ "named-placeholders": ["named-placeholders@1.1.3", "", { "dependencies": { "lru-cache": "^7.14.1" } }, "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w=="], + "nano-spawn": ["nano-spawn@1.0.3", "", {}, "sha512-jtpsQDetTnvS2Ts1fiRdci5rx0VYws5jGyC+4IYOTnIQ/wwdf6JdomlHBwqC3bJYOvaKu0C2GSZ1A60anrYpaA=="], + "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], "napi-build-utils": ["napi-build-utils@2.0.0", "", {}, "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA=="], @@ -3032,12 +3218,16 @@ "node-fetch-native": ["node-fetch-native@1.6.7", "", {}, "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="], + "node-forge": ["node-forge@1.3.3", "", {}, "sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg=="], + "node-gyp-build": ["node-gyp-build@4.8.4", "", { "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ=="], "node-html-parser": ["node-html-parser@7.0.1", "", { "dependencies": { "css-select": "^5.1.0", "he": "1.2.0" } }, "sha512-KGtmPY2kS0thCWGK0VuPyOS+pBKhhe8gXztzA2ilAOhbUbxa9homF1bOyKvhGzMLXUoRds9IOmr/v5lr/lqNmA=="], "node-mock-http": ["node-mock-http@1.0.3", "", {}, "sha512-jN8dK25fsfnMrVsEhluUTPkBFY+6ybu7jSB1n+ri/vOGjJxU8J9CZhpSGkHXSkFjtUhbmoncG/YG9ta5Ludqog=="], + "node-notifier": ["node-notifier@10.0.1", "", { "dependencies": { "growly": "^1.3.0", "is-wsl": "^2.2.0", "semver": "^7.3.5", "shellwords": "^0.1.1", "uuid": "^8.3.2", "which": "^2.0.2" } }, "sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ=="], + "node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="], "nopt": ["nopt@7.2.1", "", { "dependencies": { "abbrev": "^2.0.0" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w=="], @@ -3070,6 +3260,8 @@ "omggif": ["omggif@1.0.10", "", {}, "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw=="], + "on-exit-leak-free": ["on-exit-leak-free@2.1.2", "", {}, "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA=="], + "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], @@ -3094,6 +3286,10 @@ "opentui-spinner": ["opentui-spinner@0.0.6", "", { "dependencies": { "cli-spinners": "^3.3.0" }, "peerDependencies": { "@opentui/core": "^0.1.49", "@opentui/react": "^0.1.49", "@opentui/solid": "^0.1.49", "typescript": "^5" }, "optionalPeers": ["@opentui/react", "@opentui/solid"] }, "sha512-xupLOeVQEAXEvVJCvHkfX6fChDWmJIPHe5jyUrVb8+n4XVTX8mBNhitFfB9v2ZbkC1H2UwPab/ElePHoW37NcA=="], + "ora": ["ora@8.2.0", "", { "dependencies": { "chalk": "^5.3.0", "cli-cursor": "^5.0.0", "cli-spinners": "^2.9.2", "is-interactive": "^2.0.0", "is-unicode-supported": "^2.0.0", "log-symbols": "^6.0.0", "stdin-discarder": "^0.2.2", "string-width": "^7.2.0", "strip-ansi": "^7.1.0" } }, "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw=="], + + "os-shim": ["os-shim@0.1.3", "", {}, "sha512-jd0cvB8qQ5uVt0lvCIexBaROw1KyKm5sbulg2fWOHjETisuCzWyt+eTZKEMs8v6HwzoGs8xik26jg7eCM6pS+A=="], + "own-keys": ["own-keys@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" } }, "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg=="], "oxc-minify": ["oxc-minify@0.96.0", "", { "optionalDependencies": { "@oxc-minify/binding-android-arm64": "0.96.0", "@oxc-minify/binding-darwin-arm64": "0.96.0", "@oxc-minify/binding-darwin-x64": "0.96.0", "@oxc-minify/binding-freebsd-x64": "0.96.0", "@oxc-minify/binding-linux-arm-gnueabihf": "0.96.0", "@oxc-minify/binding-linux-arm-musleabihf": "0.96.0", "@oxc-minify/binding-linux-arm64-gnu": "0.96.0", "@oxc-minify/binding-linux-arm64-musl": "0.96.0", "@oxc-minify/binding-linux-riscv64-gnu": "0.96.0", "@oxc-minify/binding-linux-s390x-gnu": "0.96.0", "@oxc-minify/binding-linux-x64-gnu": "0.96.0", "@oxc-minify/binding-linux-x64-musl": "0.96.0", "@oxc-minify/binding-wasm32-wasi": "0.96.0", "@oxc-minify/binding-win32-arm64-msvc": "0.96.0", "@oxc-minify/binding-win32-x64-msvc": "0.96.0" } }, "sha512-dXeeGrfPJJ4rMdw+NrqiCRtbzVX2ogq//R0Xns08zql2HjV3Zi2SBJ65saqfDaJzd2bcHqvGWH+M44EQCHPAcA=="], @@ -3116,13 +3312,15 @@ "p-try": ["p-try@2.2.0", "", {}, "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="], + "package-json": ["package-json@10.0.1", "", { "dependencies": { "ky": "^1.2.0", "registry-auth-token": "^5.0.2", "registry-url": "^6.0.1", "semver": "^7.6.0" } }, "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg=="], + "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], "package-manager-detector": ["package-manager-detector@1.5.0", "", {}, "sha512-uBj69dVlYe/+wxj8JOpr97XfsxH/eumMt6HqjNTmJDf/6NO9s+0uxeOneIz3AsPt2m6y9PqzDzd3ATcU17MNfw=="], "pagefind": ["pagefind@1.4.0", "", { "optionalDependencies": { "@pagefind/darwin-arm64": "1.4.0", "@pagefind/darwin-x64": "1.4.0", "@pagefind/freebsd-x64": "1.4.0", "@pagefind/linux-arm64": "1.4.0", "@pagefind/linux-x64": "1.4.0", "@pagefind/windows-x64": "1.4.0" }, "bin": { "pagefind": "lib/runner/bin.cjs" } }, "sha512-z2kY1mQlL4J8q5EIsQkLzQjilovKzfNVhX8De6oyE6uHpfFtyBaqUpcl/XzJC/4fjD8vBDyh1zolimIcVrCn9g=="], - "pako": ["pako@0.2.9", "", {}, "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA=="], + "pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="], "param-case": ["param-case@3.0.4", "", { "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A=="], @@ -3134,6 +3332,8 @@ "parse-entities": ["parse-entities@4.0.2", "", { "dependencies": { "@types/unist": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0", "is-hexadecimal": "^2.0.0" } }, "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw=="], + "parse-json": ["parse-json@7.1.1", "", { "dependencies": { "@babel/code-frame": "^7.21.4", "error-ex": "^1.3.2", "json-parse-even-better-errors": "^3.0.0", "lines-and-columns": "^2.0.3", "type-fest": "^3.8.0" } }, "sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw=="], + "parse-latin": ["parse-latin@7.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "@types/unist": "^3.0.0", "nlcst-to-string": "^4.0.0", "unist-util-modify-children": "^4.0.0", "unist-util-visit-children": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ=="], "parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], @@ -3176,6 +3376,12 @@ "pify": ["pify@2.3.0", "", {}, "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="], + "pino": ["pino@9.7.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^2.0.0", "pino-std-serializers": "^7.0.0", "process-warning": "^5.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", "sonic-boom": "^4.0.1", "thread-stream": "^3.0.0" }, "bin": { "pino": "bin.js" } }, "sha512-vnMCM6xZTb1WDmLvtG2lE/2p+t9hDEIvTWJsu6FejkE62vB7gDhvzrpFR4Cw2to+9JNQxVnkAKVPA1KPB98vWg=="], + + "pino-abstract-transport": ["pino-abstract-transport@2.0.0", "", { "dependencies": { "split2": "^4.0.0" } }, "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw=="], + + "pino-std-serializers": ["pino-std-serializers@7.0.0", "", {}, "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA=="], + "pirates": ["pirates@4.0.7", "", {}, "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA=="], "pixelmatch": ["pixelmatch@5.3.0", "", { "dependencies": { "pngjs": "^6.0.0" }, "bin": { "pixelmatch": "bin/pixelmatch" } }, "sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q=="], @@ -3226,6 +3432,10 @@ "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], + "process-warning": ["process-warning@5.0.0", "", {}, "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA=="], + + "promise-toolbox": ["promise-toolbox@0.21.0", "", { "dependencies": { "make-error": "^1.3.2" } }, "sha512-NV8aTmpwrZv+Iys54sSFOBx3tuVaOBvvrft5PNppnxy9xpU/akHbaWIril22AB22zaPgrgwKdD0KsrM0ptUtpg=="], + "promise.allsettled": ["promise.allsettled@1.0.7", "", { "dependencies": { "array.prototype.map": "^1.0.5", "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1", "iterate-value": "^1.0.2" } }, "sha512-hezvKvQQmsFkOdrZfYxUxkyxl8mgFQeT259Ajj9PXdbg9VzBCWrItOev72JyWxkCD5VSSqAeHmlN3tWx4DlmsA=="], "prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="], @@ -3238,10 +3448,14 @@ "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], + "publish-browser-extension": ["publish-browser-extension@3.0.3", "", { "dependencies": { "cac": "^6.7.14", "consola": "^3.4.2", "dotenv": "^17.2.3", "form-data-encoder": "^4.1.0", "formdata-node": "^6.0.3", "listr2": "^8.3.3", "ofetch": "^1.4.1", "zod": "^3.25.76 || ^4.0.0" }, "bin": { "publish-extension": "bin/publish-extension.cjs" } }, "sha512-cBINZCkLo7YQaGoUvEHthZ0sDzgJQht28IS+SFMT2omSNhGsPiVNRkWir3qLiTrhGhW9Ci2KVHpA1QAMoBdL2g=="], + "pump": ["pump@3.0.3", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA=="], "punycode": ["punycode@1.3.2", "", {}, "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw=="], + "pupa": ["pupa@3.3.0", "", { "dependencies": { "escape-goat": "^4.0.0" } }, "sha512-LjgDO2zPtoXP2wJpDjZrGdojii1uqO0cnwKoIoUzkfS98HDmbeiGmYiXo3lXeFlq2xvne1QFQhwYXSUCLKtEuA=="], + "qs": ["qs@6.14.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w=="], "quansync": ["quansync@0.2.11", "", {}, "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA=="], @@ -3250,6 +3464,8 @@ "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + "quick-format-unescaped": ["quick-format-unescaped@4.0.4", "", {}, "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="], + "radix3": ["radix3@1.1.2", "", {}, "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA=="], "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], @@ -3278,7 +3494,7 @@ "read-cache": ["read-cache@1.0.0", "", { "dependencies": { "pify": "^2.3.0" } }, "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA=="], - "readable-stream": ["readable-stream@4.7.0", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="], + "readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], "readable-web-to-node-stream": ["readable-web-to-node-stream@3.0.4", "", { "dependencies": { "readable-stream": "^4.7.0" } }, "sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw=="], @@ -3286,6 +3502,8 @@ "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], + "real-require": ["real-require@0.2.0", "", {}, "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg=="], + "recma-build-jsx": ["recma-build-jsx@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-util-build-jsx": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew=="], "recma-jsx": ["recma-jsx@1.0.1", "", { "dependencies": { "acorn-jsx": "^5.0.0", "estree-util-to-js": "^2.0.0", "recma-parse": "^1.0.0", "recma-stringify": "^1.0.0", "unified": "^11.0.0" }, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w=="], @@ -3308,6 +3526,10 @@ "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], + "registry-auth-token": ["registry-auth-token@5.1.0", "", { "dependencies": { "@pnpm/npm-conf": "^2.1.0" } }, "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw=="], + + "registry-url": ["registry-url@6.0.1", "", { "dependencies": { "rc": "1.2.8" } }, "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q=="], + "rehype": ["rehype@13.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "rehype-parse": "^9.0.0", "rehype-stringify": "^10.0.0", "unified": "^11.0.0" } }, "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A=="], "rehype-autolink-headings": ["rehype-autolink-headings@7.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@ungap/structured-clone": "^1.0.0", "hast-util-heading-rank": "^3.0.0", "hast-util-is-element": "^3.0.0", "unified": "^11.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw=="], @@ -3342,6 +3564,8 @@ "remeda": ["remeda@2.26.0", "", { "dependencies": { "type-fest": "^4.41.0" } }, "sha512-lmNNwtaC6Co4m0WTTNoZ/JlpjEqAjPZO0+czC9YVRQUpkbS4x8Hmh+Mn9HPfJfiXqUQ5IXXgSXSOB2pBKAytdA=="], + "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], + "reselect": ["reselect@4.1.8", "", {}, "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ=="], "resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], @@ -3352,6 +3576,8 @@ "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], + "restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="], + "restructure": ["restructure@3.0.2", "", {}, "sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw=="], "retext": ["retext@9.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "retext-latin": "^4.0.0", "retext-stringify": "^4.0.0", "unified": "^11.0.0" } }, "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA=="], @@ -3366,6 +3592,8 @@ "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], + "rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="], + "rollup": ["rollup@4.53.3", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.53.3", "@rollup/rollup-android-arm64": "4.53.3", "@rollup/rollup-darwin-arm64": "4.53.3", "@rollup/rollup-darwin-x64": "4.53.3", "@rollup/rollup-freebsd-arm64": "4.53.3", "@rollup/rollup-freebsd-x64": "4.53.3", "@rollup/rollup-linux-arm-gnueabihf": "4.53.3", "@rollup/rollup-linux-arm-musleabihf": "4.53.3", "@rollup/rollup-linux-arm64-gnu": "4.53.3", "@rollup/rollup-linux-arm64-musl": "4.53.3", "@rollup/rollup-linux-loong64-gnu": "4.53.3", "@rollup/rollup-linux-ppc64-gnu": "4.53.3", "@rollup/rollup-linux-riscv64-gnu": "4.53.3", "@rollup/rollup-linux-riscv64-musl": "4.53.3", "@rollup/rollup-linux-s390x-gnu": "4.53.3", "@rollup/rollup-linux-x64-gnu": "4.53.3", "@rollup/rollup-linux-x64-musl": "4.53.3", "@rollup/rollup-openharmony-arm64": "4.53.3", "@rollup/rollup-win32-arm64-msvc": "4.53.3", "@rollup/rollup-win32-ia32-msvc": "4.53.3", "@rollup/rollup-win32-x64-gnu": "4.53.3", "@rollup/rollup-win32-x64-msvc": "4.53.3", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA=="], "rou3": ["rou3@0.7.10", "", {}, "sha512-aoFj6f7MJZ5muJ+Of79nrhs9N3oLGqi2VEMe94Zbkjb6Wupha46EuoYgpWSOZlXww3bbd8ojgXTAA2mzimX5Ww=="], @@ -3386,12 +3614,16 @@ "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], + "safe-stable-stringify": ["safe-stable-stringify@2.5.0", "", {}, "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA=="], + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], "sax": ["sax@1.2.1", "", {}, "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA=="], "scheduler": ["scheduler@0.23.2", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ=="], + "scule": ["scule@1.3.0", "", {}, "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g=="], + "section-matter": ["section-matter@1.0.0", "", { "dependencies": { "extend-shallow": "^2.0.1", "kind-of": "^6.0.0" } }, "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA=="], "selderee": ["selderee@0.11.0", "", { "dependencies": { "parseley": "^0.12.0" } }, "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA=="], @@ -3414,6 +3646,10 @@ "set-proto": ["set-proto@1.0.0", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0" } }, "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw=="], + "set-value": ["set-value@4.1.0", "", { "dependencies": { "is-plain-object": "^2.0.4", "is-primitive": "^3.0.1" } }, "sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw=="], + + "setimmediate": ["setimmediate@1.0.5", "", {}, "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="], + "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], "sharp": ["sharp@0.32.5", "", { "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.2", "node-addon-api": "^6.1.0", "prebuild-install": "^7.1.1", "semver": "^7.5.4", "simple-get": "^4.0.1", "tar-fs": "^3.0.4", "tunnel-agent": "^0.6.0" } }, "sha512-0dap3iysgDkNaPOaOL4X/0akdu0ma62GcdC2NBQ+93eqpePdDdr2/LM0sFdDSMmN7yS+odyZtPsb7tx/cYBKnQ=="], @@ -3424,6 +3660,8 @@ "shell-quote": ["shell-quote@1.8.3", "", {}, "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw=="], + "shellwords": ["shellwords@0.1.1", "", {}, "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww=="], + "shiki": ["shiki@3.9.2", "", { "dependencies": { "@shikijs/core": "3.9.2", "@shikijs/engine-javascript": "3.9.2", "@shikijs/engine-oniguruma": "3.9.2", "@shikijs/langs": "3.9.2", "@shikijs/themes": "3.9.2", "@shikijs/types": "3.9.2", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-t6NKl5e/zGTvw/IyftLcumolgOczhuroqwXngDeMqJ3h3EQiTY/7wmfgPlsmloD8oYfqkEDqxiaH37Pjm1zUhQ=="], "shikiji": ["shikiji@0.6.13", "", { "dependencies": { "hast-util-to-html": "^9.0.0" } }, "sha512-4T7X39csvhT0p7GDnq9vysWddf2b6BeioiN3Ymhnt3xcy9tXmDcnsEFVxX18Z4YcQgEE/w48dLJ4pPPUcG9KkA=="], @@ -3454,6 +3692,8 @@ "slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], + "slice-ansi": ["slice-ansi@5.0.0", "", { "dependencies": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" } }, "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ=="], + "smol-toml": ["smol-toml@1.5.2", "", {}, "sha512-QlaZEqcAH3/RtNyet1IPIYPsEWAaYyXXv1Krsi+1L/QHppjX4Ifm8MQsBISz9vE8cHicIq3clogsheili5vhaQ=="], "solid-js": ["solid-js@1.9.10", "", { "dependencies": { "csstype": "^3.1.0", "seroval": "~1.3.0", "seroval-plugins": "~1.3.0" } }, "sha512-Coz956cos/EPDlhs6+jsdTxKuJDPT7B5SVIWgABwROyxjY7Xbr8wkzD68Et+NxnV7DLJ3nJdAC2r9InuV/4Jew=="], @@ -3468,6 +3708,8 @@ "solid-use": ["solid-use@0.9.1", "", { "peerDependencies": { "solid-js": "^1.7" } }, "sha512-UwvXDVPlrrbj/9ewG9ys5uL2IO4jSiwys2KPzK4zsnAcmEl7iDafZWW1Mo4BSEWOmQCGK6IvpmGHo1aou8iOFw=="], + "sonic-boom": ["sonic-boom@4.2.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww=="], + "source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], @@ -3476,6 +3718,12 @@ "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="], + "spawn-sync": ["spawn-sync@1.0.15", "", { "dependencies": { "concat-stream": "^1.4.7", "os-shim": "^0.1.2" } }, "sha512-9DWBgrgYZzNghseho0JOuh+5fg9u6QWhAWa51QC7+U5rCheZ/j1DrEZnyE0RBBRqZ9uEXGPgSSM0nky6burpVw=="], + + "split": ["split@1.0.1", "", { "dependencies": { "through": "2" } }, "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg=="], + + "split2": ["split2@4.2.0", "", {}, "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="], + "sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="], "sqlstring": ["sqlstring@2.3.3", "", {}, "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg=="], @@ -3512,6 +3760,8 @@ "std-env": ["std-env@3.10.0", "", {}, "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg=="], + "stdin-discarder": ["stdin-discarder@0.2.2", "", {}, "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ=="], + "stop-iteration-iterator": ["stop-iteration-iterator@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" } }, "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ=="], "stoppable": ["stoppable@1.1.0", "", {}, "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw=="], @@ -3530,7 +3780,7 @@ "string.prototype.trimstart": ["string.prototype.trimstart@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg=="], - "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + "string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], @@ -3538,11 +3788,15 @@ "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "strip-bom": ["strip-bom@5.0.0", "", {}, "sha512-p+byADHF7SzEcVnLvc/r3uognM1hUhObuHXxJcgLCfD194XAkaLbjq3Wzb0N5G2tgIjH0dgT708Z51QxMeu60A=="], + "strip-bom-string": ["strip-bom-string@1.0.0", "", {}, "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g=="], "strip-final-newline": ["strip-final-newline@3.0.0", "", {}, "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw=="], - "strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], + "strip-json-comments": ["strip-json-comments@5.0.2", "", {}, "sha512-4X2FR3UwhNUE9G49aIsJW5hRRR3GXGTBTZRMfv568O60ojM8HcWjV/VxAxCDW3SUND33O6ZY66ZuRcdkj73q2g=="], + + "strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], "stripe": ["stripe@18.0.0", "", { "dependencies": { "@types/node": ">=8.1.0", "qs": "^6.11.0" } }, "sha512-3Fs33IzKUby//9kCkCa1uRpinAoTvj6rJgQ2jrBEysoxEvfsclvXdna1amyEYbA2EKkjynuB4+L/kleCCaWTpA=="], @@ -3550,6 +3804,10 @@ "strtok3": ["strtok3@6.3.0", "", { "dependencies": { "@tokenizer/token": "^0.3.0", "peek-readable": "^4.1.0" } }, "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw=="], + "stubborn-fs": ["stubborn-fs@2.0.0", "", { "dependencies": { "stubborn-utils": "^1.0.1" } }, "sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA=="], + + "stubborn-utils": ["stubborn-utils@1.0.2", "", {}, "sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg=="], + "style-to-js": ["style-to-js@1.1.21", "", { "dependencies": { "style-to-object": "1.0.14" } }, "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ=="], "style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="], @@ -3584,8 +3842,12 @@ "thenify-all": ["thenify-all@1.6.0", "", { "dependencies": { "thenify": ">= 3.1.0 < 4" } }, "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA=="], + "thread-stream": ["thread-stream@3.1.0", "", { "dependencies": { "real-require": "^0.2.0" } }, "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A=="], + "three": ["three@0.177.0", "", {}, "sha512-EiXv5/qWAaGI+Vz2A+JfavwYCMdGjxVsrn3oBwllUoqYeaBO75J63ZfyaQKoiLrqNHoTlUc6PFgMXnS0kI45zg=="], + "through": ["through@2.3.8", "", {}, "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="], + "tiny-inflate": ["tiny-inflate@1.0.3", "", {}, "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="], "tiny-invariant": ["tiny-invariant@1.3.3", "", {}, "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="], @@ -3602,6 +3864,8 @@ "titleize": ["titleize@4.0.0", "", {}, "sha512-ZgUJ1K83rhdu7uh7EHAC2BgY5DzoX8V5rTvoWI4vFysggi6YjLe5gUXABPWAU7VkvGP7P/0YiWq+dcPeYDsf1g=="], + "tmp": ["tmp@0.2.5", "", {}, "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow=="], + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], "toad-cache": ["toad-cache@3.7.0", "", {}, "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw=="], @@ -3648,7 +3912,7 @@ "turbo-windows-arm64": ["turbo-windows-arm64@2.5.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-j/tWu8cMeQ7HPpKri6jvKtyXg9K1gRyhdK4tKrrchH8GNHscPX/F71zax58yYtLRWTiK04zNzPcUJuoS0+v/+Q=="], - "turndown": ["turndown@7.2.0", "", { "dependencies": { "@mixmark-io/domino": "^2.2.0" } }, "sha512-eCZGBN4nNNqM9Owkv9HAtWRYfLA4h909E/WGAWWBpmB275ehNhZyk87/Tpvjbp0jjNl9XwCsbe6bm6CqFsgD+A=="], + "turndown": ["turndown@7.2.2", "", { "dependencies": { "@mixmark-io/domino": "^2.2.0" } }, "sha512-1F7db8BiExOKxjSMU2b7if62D/XOyQyZbPKq/nUwopfgnHlqXHqQ0lvfUTeUIr1lZJzOPFn43dODyMSIfvWRKQ=="], "tw-to-css": ["tw-to-css@0.0.12", "", { "dependencies": { "postcss": "8.4.31", "postcss-css-variables": "0.18.0", "tailwindcss": "3.3.2" } }, "sha512-rQAsQvOtV1lBkyCw+iypMygNHrShYAItES5r8fMsrhhaj5qrV2LkZyXc8ccEH+u5bFjHjQ9iuxe90I7Kykf6pw=="], @@ -3664,10 +3928,14 @@ "typed-array-length": ["typed-array-length@1.0.7", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0", "reflect.getprototypeof": "^1.0.6" } }, "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg=="], + "typedarray": ["typedarray@0.0.6", "", {}, "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="], + "typescript": ["typescript@5.8.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ=="], "ufo": ["ufo@1.6.1", "", {}, "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA=="], + "uhyphen": ["uhyphen@0.2.0", "", {}, "sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA=="], + "ulid": ["ulid@3.0.1", "", { "bin": { "ulid": "dist/cli.js" } }, "sha512-dPJyqPzx8preQhqq24bBG1YNkvigm87K8kVEHCD+ruZg24t6IFEFv00xMWfxcC4djmFtiTLdFuADn4+DOz6R7Q=="], "ultrahtml": ["ultrahtml@1.6.0", "", {}, "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw=="], @@ -3690,6 +3958,8 @@ "unifont": ["unifont@0.5.2", "", { "dependencies": { "css-tree": "^3.0.0", "ofetch": "^1.4.1", "ohash": "^2.0.0" } }, "sha512-LzR4WUqzH9ILFvjLAUU7dK3Lnou/qd5kD+IakBtBK4S15/+x2y9VX+DcWQv6s551R6W+vzwgVS6tFg3XggGBgg=="], + "unimport": ["unimport@5.5.0", "", { "dependencies": { "acorn": "^8.15.0", "escape-string-regexp": "^5.0.0", "estree-walker": "^3.0.3", "local-pkg": "^1.1.2", "magic-string": "^0.30.19", "mlly": "^1.8.0", "pathe": "^2.0.3", "picomatch": "^4.0.3", "pkg-types": "^2.3.0", "scule": "^1.3.0", "strip-literal": "^3.1.0", "tinyglobby": "^0.2.15", "unplugin": "^2.3.10", "unplugin-utils": "^0.3.0" } }, "sha512-/JpWMG9s1nBSlXJAQ8EREFTFy3oy6USFd8T6AoBaw1q2GGcF4R9yp3ofg32UODZlYEO5VD0EWE1RpI9XDWyPYg=="], + "unist-util-find-after": ["unist-util-find-after@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ=="], "unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], @@ -3718,12 +3988,18 @@ "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], + "unplugin": ["unplugin@2.3.11", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "acorn": "^8.15.0", "picomatch": "^4.0.3", "webpack-virtual-modules": "^0.6.2" } }, "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww=="], + + "unplugin-utils": ["unplugin-utils@0.3.1", "", { "dependencies": { "pathe": "^2.0.3", "picomatch": "^4.0.3" } }, "sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog=="], + "unstorage": ["unstorage@2.0.0-alpha.4", "", { "peerDependencies": { "@azure/app-configuration": "^1.8.0", "@azure/cosmos": "^4.2.0", "@azure/data-tables": "^13.3.0", "@azure/identity": "^4.6.0", "@azure/keyvault-secrets": "^4.9.0", "@azure/storage-blob": "^12.26.0", "@capacitor/preferences": "^6.0.3 || ^7.0.0", "@deno/kv": ">=0.9.0", "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", "@planetscale/database": "^1.19.0", "@upstash/redis": "^1.34.3", "@vercel/blob": ">=0.27.1", "@vercel/functions": "^2.2.12 || ^3.0.0", "@vercel/kv": "^1.0.1", "aws4fetch": "^1.0.20", "chokidar": "^4.0.3", "db0": ">=0.2.1", "idb-keyval": "^6.2.1", "ioredis": "^5.4.2", "lru-cache": "^11.2.2", "mongodb": "^6.20.0", "ofetch": "*", "uploadthing": "^7.4.4" }, "optionalPeers": ["@azure/app-configuration", "@azure/cosmos", "@azure/data-tables", "@azure/identity", "@azure/keyvault-secrets", "@azure/storage-blob", "@capacitor/preferences", "@deno/kv", "@netlify/blobs", "@planetscale/database", "@upstash/redis", "@vercel/blob", "@vercel/functions", "@vercel/kv", "aws4fetch", "chokidar", "db0", "idb-keyval", "ioredis", "lru-cache", "mongodb", "ofetch", "uploadthing"] }, "sha512-ywXZMZRfrvmO1giJeMTCw6VUn0ALYxVl8pFqJPStiyQUvgJImejtAHrKvXPj4QGJAoS/iLGcVGF6ljN/lkh1bw=="], "unzip-stream": ["unzip-stream@0.3.4", "", { "dependencies": { "binary": "^0.3.0", "mkdirp": "^0.5.1" } }, "sha512-PyofABPVv+d7fL7GOpusx7eRT9YETY2X04PhwbSipdj6bMxVCFJrr+nm0Mxqbf9hUiTin/UsnuFWBXlDZFy0Cw=="], "update-browserslist-db": ["update-browserslist-db@1.1.4", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A=="], + "update-notifier": ["update-notifier@7.3.1", "", { "dependencies": { "boxen": "^8.0.1", "chalk": "^5.3.0", "configstore": "^7.0.0", "is-in-ci": "^1.0.0", "is-installed-globally": "^1.0.0", "is-npm": "^6.0.0", "latest-version": "^9.0.0", "pupa": "^3.1.0", "semver": "^7.6.3", "xdg-basedir": "^5.1.0" } }, "sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA=="], + "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], "url": ["url@0.10.3", "", { "dependencies": { "punycode": "1.3.2", "querystring": "0.2.0" } }, "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ=="], @@ -3754,6 +4030,8 @@ "vite": ["vite@7.1.4", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.14" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-X5QFK4SGynAeeIt+A7ZWnApdUyHYm+pzv/8/A57LqSGcI88U6R6ipOs3uCesdc6yl7nl+zNO0t8LmqAdXcQihw=="], + "vite-node": ["vite-node@3.2.4", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.4.1", "es-module-lexer": "^1.7.0", "pathe": "^2.0.3", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg=="], + "vite-plugin-dynamic-import": ["vite-plugin-dynamic-import@1.6.0", "", { "dependencies": { "acorn": "^8.12.1", "es-module-lexer": "^1.5.4", "fast-glob": "^3.3.2", "magic-string": "^0.30.11" } }, "sha512-TM0sz70wfzTIo9YCxVFwS8OA9lNREsh+0vMHGSkWDTZ7bgd1Yjs5RV8EgB634l/91IsXJReg0xtmuQqP0mf+rg=="], "vite-plugin-icons-spritesheet": ["vite-plugin-icons-spritesheet@3.0.1", "", { "dependencies": { "chalk": "^5.4.1", "glob": "^11.0.1", "node-html-parser": "^7.0.1", "tinyexec": "^0.3.2" }, "peerDependencies": { "vite": ">=5.2.0" } }, "sha512-Cr0+Z6wRMwSwKisWW9PHeTjqmQFv0jwRQQMc3YgAhAgZEe03j21el0P/CA31KN/L5eiL1LhR14VTXl96LetonA=="], @@ -3768,6 +4046,10 @@ "vscode-languageserver-types": ["vscode-languageserver-types@3.17.5", "", {}, "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="], + "watchpack": ["watchpack@2.4.4", "", { "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" } }, "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA=="], + + "web-ext-run": ["web-ext-run@0.2.4", "", { "dependencies": { "@babel/runtime": "7.28.2", "@devicefarmer/adbkit": "3.3.8", "chrome-launcher": "1.2.0", "debounce": "1.2.1", "es6-error": "4.1.1", "firefox-profile": "4.7.0", "fx-runner": "1.4.0", "multimatch": "6.0.0", "node-notifier": "10.0.1", "parse-json": "7.1.1", "pino": "9.7.0", "promise-toolbox": "0.21.0", "set-value": "4.1.0", "source-map-support": "0.5.21", "strip-bom": "5.0.0", "strip-json-comments": "5.0.2", "tmp": "0.2.5", "update-notifier": "7.3.1", "watchpack": "2.4.4", "zip-dir": "2.0.0" } }, "sha512-rQicL7OwuqWdQWI33JkSXKcp7cuv1mJG8u3jRQwx/8aDsmhbTHs9ZRmNYOL+LX0wX8edIEQX8jj4bB60GoXtKA=="], + "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], "web-streams-polyfill": ["web-streams-polyfill@4.0.0-beta.3", "", {}, "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug=="], @@ -3776,10 +4058,16 @@ "webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], + "webpack-virtual-modules": ["webpack-virtual-modules@0.6.2", "", {}, "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="], + "whatwg-mimetype": ["whatwg-mimetype@3.0.0", "", {}, "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q=="], "whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], + "when": ["when@3.7.7", "", {}, "sha512-9lFZp/KHoqH6bPKjbWqa+3Dg/K/r2v0X/3/G2x4DBGchVS2QX2VXL3cZV994WQVnTM1/PD71Az25nAzryEUugw=="], + + "when-exit": ["when-exit@2.1.5", "", {}, "sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg=="], + "which": ["which@4.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg=="], "which-boxed-primitive": ["which-boxed-primitive@1.1.1", "", { "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" } }, "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA=="], @@ -3796,6 +4084,8 @@ "widest-line": ["widest-line@5.0.0", "", { "dependencies": { "string-width": "^7.0.0" } }, "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA=="], + "winreg": ["winreg@0.0.12", "", {}, "sha512-typ/+JRmi7RqP1NanzFULK36vczznSNN8kWVA9vIqXyv8GhghUlwhGp1Xj3Nms1FsPcNnsQrJOR10N58/nQ9hQ=="], + "workerd": ["workerd@1.20251118.0", "", { "optionalDependencies": { "@cloudflare/workerd-darwin-64": "1.20251118.0", "@cloudflare/workerd-darwin-arm64": "1.20251118.0", "@cloudflare/workerd-linux-64": "1.20251118.0", "@cloudflare/workerd-linux-arm64": "1.20251118.0", "@cloudflare/workerd-windows-64": "1.20251118.0" }, "bin": { "workerd": "bin/workerd" } }, "sha512-Om5ns0Lyx/LKtYI04IV0bjIrkBgoFNg0p6urzr2asekJlfP18RqFzyqMFZKf0i9Gnjtz/JfAS/Ol6tjCe5JJsQ=="], "wrangler": ["wrangler@4.50.0", "", { "dependencies": { "@cloudflare/kv-asset-handler": "0.4.0", "@cloudflare/unenv-preset": "2.7.11", "blake3-wasm": "2.1.5", "esbuild": "0.25.4", "miniflare": "4.20251118.1", "path-to-regexp": "6.3.0", "unenv": "2.0.0-rc.24", "workerd": "1.20251118.0" }, "optionalDependencies": { "fsevents": "~2.3.2" }, "peerDependencies": { "@cloudflare/workers-types": "^4.20251118.0" }, "optionalPeers": ["@cloudflare/workers-types"], "bin": { "wrangler": "bin/wrangler.js", "wrangler2": "bin/wrangler.js" } }, "sha512-+nuZuHZxDdKmAyXOSrHlciGshCoAPiy5dM+t6mEohWm7HpXvTHmWQGUf/na9jjWlWJHCJYOWzkA1P5HBJqrIEA=="], @@ -3808,7 +4098,9 @@ "ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], - "wsl-utils": ["wsl-utils@0.3.0", "", { "dependencies": { "is-wsl": "^3.1.0", "powershell-utils": "^0.1.0" } }, "sha512-3sFIGLiaDP7rTO4xh3g+b3AzhYDIUGGywE/WsmqzJWDxus5aJXVnPTNC/6L+r2WzrwXqVOdD262OaO+cEyPMSQ=="], + "wsl-utils": ["wsl-utils@0.1.0", "", { "dependencies": { "is-wsl": "^3.1.0" } }, "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw=="], + + "wxt": ["wxt@0.20.11", "", { "dependencies": { "@1natsu/wait-element": "^4.1.2", "@aklinker1/rollup-plugin-visualizer": "5.12.0", "@webext-core/fake-browser": "^1.3.2", "@webext-core/isolated-element": "^1.1.2", "@webext-core/match-patterns": "^1.0.3", "@wxt-dev/browser": "^0.1.4", "@wxt-dev/storage": "^1.0.0", "async-mutex": "^0.5.0", "c12": "^3.2.0", "cac": "^6.7.14", "chokidar": "^4.0.3", "ci-info": "^4.3.0", "consola": "^3.4.2", "defu": "^6.1.4", "dotenv": "^17.2.2", "dotenv-expand": "^12.0.3", "esbuild": "^0.25.0", "fast-glob": "^3.3.3", "filesize": "^11.0.2", "fs-extra": "^11.3.1", "get-port-please": "^3.2.0", "giget": "^1.2.3 || ^2.0.0", "hookable": "^5.5.3", "import-meta-resolve": "^4.2.0", "is-wsl": "^3.1.0", "json5": "^2.2.3", "jszip": "^3.10.1", "linkedom": "^0.18.12", "magicast": "^0.3.5", "minimatch": "^10.0.3", "nano-spawn": "^1.0.2", "normalize-path": "^3.0.0", "nypm": "^0.6.1", "ohash": "^2.0.11", "open": "^10.2.0", "ora": "^8.2.0", "perfect-debounce": "^2.0.0", "picocolors": "^1.1.1", "prompts": "^2.4.2", "publish-browser-extension": "^2.3.0 || ^3.0.2", "scule": "^1.3.0", "unimport": "^3.13.1 || ^4.0.0 || ^5.0.0", "vite": "^5.4.19 || ^6.3.4 || ^7.0.0", "vite-node": "^2.1.4 || ^3.1.2", "web-ext-run": "^0.2.4" }, "bin": { "wxt": "bin/wxt.mjs", "wxt-publish-extension": "bin/wxt-publish-extension.cjs" } }, "sha512-DqqHc/5COs8GR21ii99bANXf/mu6zuDpiXFV1YKNsqO5/PvkrCx5arY0aVPL5IATsuacAnNzdj4eMc1qbzS53Q=="], "xdg-basedir": ["xdg-basedir@5.1.0", "", {}, "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ=="], @@ -3842,6 +4134,8 @@ "youch-core": ["youch-core@0.3.3", "", { "dependencies": { "@poppinss/exception": "^1.2.2", "error-stack-parser-es": "^1.0.5" } }, "sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA=="], + "zip-dir": ["zip-dir@2.0.0", "", { "dependencies": { "async": "^3.2.0", "jszip": "^3.2.2" } }, "sha512-uhlsJZWz26FLYXOD6WVuq+fIcZ3aBPGo/cFdiLlv3KNwpa52IF3ISV8fLhQLiqVu5No3VhlqlgthN6gehil1Dg=="], + "zip-stream": ["zip-stream@6.0.1", "", { "dependencies": { "archiver-utils": "^5.0.0", "compress-commons": "^6.0.2", "readable-stream": "^4.0.0" } }, "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA=="], "zod": ["zod@4.1.8", "", {}, "sha512-5R1P+WwQqmmMIEACyzSvo4JXHY5WiAFHRMg+zBZKgKS+Q1viRa0C1hmUKtHltoIFKtIdki3pRxkmpP74jnNYHQ=="], @@ -3896,6 +4190,12 @@ "@ai-sdk/openai-compatible/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.0", "", { "dependencies": { "@ai-sdk/provider": "2.0.0", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.3", "zod-to-json-schema": "^3.24.1" }, "peerDependencies": { "zod": "^3.25.76 || ^4" } }, "sha512-BoQZtGcBxkeSH1zK+SRYNDtJPIPpacTeiMZqnG4Rv6xXjEwM0FH4MGs9c+PlhyEWmQCzjRM2HAotEydFhD4dYw=="], + "@aklinker1/rollup-plugin-visualizer/open": ["open@8.4.2", "", { "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", "is-wsl": "^2.2.0" } }, "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ=="], + + "@aklinker1/rollup-plugin-visualizer/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "@aklinker1/rollup-plugin-visualizer/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + "@astrojs/cloudflare/vite": ["vite@6.4.1", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g=="], "@astrojs/markdown-remark/@astrojs/internal-helpers": ["@astrojs/internal-helpers@0.6.1", "", {}, "sha512-l5Pqf6uZu31aG+3Lv8nl/3s4DbUzdlxTWDof4pEpto6GUJNhhCbelVi9dEyurOVyqaelwmS9oSyOWOENSfgo9A=="], @@ -3986,6 +4286,10 @@ "@cspotcode/source-map-support/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.9", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ=="], + "@devicefarmer/adbkit/commander": ["commander@9.5.0", "", {}, "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ=="], + + "@devicefarmer/adbkit/debug": ["debug@4.3.7", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ=="], + "@esbuild-kit/core-utils/esbuild": ["esbuild@0.18.20", "", { "optionalDependencies": { "@esbuild/android-arm": "0.18.20", "@esbuild/android-arm64": "0.18.20", "@esbuild/android-x64": "0.18.20", "@esbuild/darwin-arm64": "0.18.20", "@esbuild/darwin-x64": "0.18.20", "@esbuild/freebsd-arm64": "0.18.20", "@esbuild/freebsd-x64": "0.18.20", "@esbuild/linux-arm": "0.18.20", "@esbuild/linux-arm64": "0.18.20", "@esbuild/linux-ia32": "0.18.20", "@esbuild/linux-loong64": "0.18.20", "@esbuild/linux-mips64el": "0.18.20", "@esbuild/linux-ppc64": "0.18.20", "@esbuild/linux-riscv64": "0.18.20", "@esbuild/linux-s390x": "0.18.20", "@esbuild/linux-x64": "0.18.20", "@esbuild/netbsd-x64": "0.18.20", "@esbuild/openbsd-x64": "0.18.20", "@esbuild/sunos-x64": "0.18.20", "@esbuild/win32-arm64": "0.18.20", "@esbuild/win32-ia32": "0.18.20", "@esbuild/win32-x64": "0.18.20" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA=="], "@expressive-code/plugin-shiki/shiki": ["shiki@3.15.0", "", { "dependencies": { "@shikijs/core": "3.15.0", "@shikijs/engine-javascript": "3.15.0", "@shikijs/engine-oniguruma": "3.15.0", "@shikijs/langs": "3.15.0", "@shikijs/themes": "3.15.0", "@shikijs/types": "3.15.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-kLdkY6iV3dYbtPwS9KXU7mjfmDm25f5m0IPNFnaXO7TBPcvbUOY72PYXSuSqDzwp+vlH/d7MXpHlKO/x+QoLXw=="], @@ -4100,10 +4404,70 @@ "@pierre/precision-diffs/shiki": ["shiki@3.15.0", "", { "dependencies": { "@shikijs/core": "3.15.0", "@shikijs/engine-javascript": "3.15.0", "@shikijs/engine-oniguruma": "3.15.0", "@shikijs/langs": "3.15.0", "@shikijs/themes": "3.15.0", "@shikijs/types": "3.15.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-kLdkY6iV3dYbtPwS9KXU7mjfmDm25f5m0IPNFnaXO7TBPcvbUOY72PYXSuSqDzwp+vlH/d7MXpHlKO/x+QoLXw=="], + "@pnpm/network.ca-file/graceful-fs": ["graceful-fs@4.2.10", "", {}, "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="], + "@poppinss/dumper/supports-color": ["supports-color@10.2.2", "", {}, "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g=="], "@protobuf-ts/plugin/typescript": ["typescript@3.9.10", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q=="], + "@radix-ui/primitive/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-arrow/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-collapsible/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-collection/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-compose-refs/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-context/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-direction/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-dismissable-layer/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-focus-guards/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-focus-scope/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-id/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-popover/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-popper/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-portal/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-presence/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-primitive/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-roving-focus/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-slot/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-toggle/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-toggle-group/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-tooltip/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-use-callback-ref/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-use-controllable-state/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-use-escape-keydown/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-use-layout-effect/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-use-rect/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-use-size/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/react-visually-hidden/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@radix-ui/rect/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + "@rollup/pluginutils/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], "@slack/bolt/path-to-regexp": ["path-to-regexp@8.3.0", "", {}, "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA=="], @@ -4122,8 +4486,6 @@ "@slack/web-api/p-queue": ["p-queue@6.6.2", "", { "dependencies": { "eventemitter3": "^4.0.4", "p-timeout": "^3.2.0" } }, "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ=="], - "@solidjs/start/esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], - "@solidjs/start/path-to-regexp": ["path-to-regexp@8.3.0", "", {}, "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA=="], "@solidjs/start/shiki": ["shiki@1.29.2", "", { "dependencies": { "@shikijs/core": "1.29.2", "@shikijs/engine-javascript": "1.29.2", "@shikijs/engine-oniguruma": "1.29.2", "@shikijs/langs": "1.29.2", "@shikijs/themes": "1.29.2", "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4" } }, "sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg=="], @@ -4150,14 +4512,20 @@ "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "archiver/readable-stream": ["readable-stream@4.7.0", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="], + "archiver-utils/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], "archiver-utils/is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], + "archiver-utils/readable-stream": ["readable-stream@4.7.0", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="], + "astro/@astrojs/internal-helpers": ["@astrojs/internal-helpers@0.6.1", "", {}, "sha512-l5Pqf6uZu31aG+3Lv8nl/3s4DbUzdlxTWDof4pEpto6GUJNhhCbelVi9dEyurOVyqaelwmS9oSyOWOENSfgo9A=="], "astro/diff": ["diff@5.2.0", "", {}, "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A=="], + "astro/esbuild": ["esbuild@0.25.4", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.4", "@esbuild/android-arm": "0.25.4", "@esbuild/android-arm64": "0.25.4", "@esbuild/android-x64": "0.25.4", "@esbuild/darwin-arm64": "0.25.4", "@esbuild/darwin-x64": "0.25.4", "@esbuild/freebsd-arm64": "0.25.4", "@esbuild/freebsd-x64": "0.25.4", "@esbuild/linux-arm": "0.25.4", "@esbuild/linux-arm64": "0.25.4", "@esbuild/linux-ia32": "0.25.4", "@esbuild/linux-loong64": "0.25.4", "@esbuild/linux-mips64el": "0.25.4", "@esbuild/linux-ppc64": "0.25.4", "@esbuild/linux-riscv64": "0.25.4", "@esbuild/linux-s390x": "0.25.4", "@esbuild/linux-x64": "0.25.4", "@esbuild/netbsd-arm64": "0.25.4", "@esbuild/netbsd-x64": "0.25.4", "@esbuild/openbsd-arm64": "0.25.4", "@esbuild/openbsd-x64": "0.25.4", "@esbuild/sunos-x64": "0.25.4", "@esbuild/win32-arm64": "0.25.4", "@esbuild/win32-ia32": "0.25.4", "@esbuild/win32-x64": "0.25.4" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q=="], + "astro/sharp": ["sharp@0.33.5", "", { "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.3", "semver": "^7.6.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.33.5", "@img/sharp-darwin-x64": "0.33.5", "@img/sharp-libvips-darwin-arm64": "1.0.4", "@img/sharp-libvips-darwin-x64": "1.0.4", "@img/sharp-libvips-linux-arm": "1.0.5", "@img/sharp-libvips-linux-arm64": "1.0.4", "@img/sharp-libvips-linux-s390x": "1.0.4", "@img/sharp-libvips-linux-x64": "1.0.4", "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", "@img/sharp-libvips-linuxmusl-x64": "1.0.4", "@img/sharp-linux-arm": "0.33.5", "@img/sharp-linux-arm64": "0.33.5", "@img/sharp-linux-s390x": "0.33.5", "@img/sharp-linux-x64": "0.33.5", "@img/sharp-linuxmusl-arm64": "0.33.5", "@img/sharp-linuxmusl-x64": "0.33.5", "@img/sharp-wasm32": "0.33.5", "@img/sharp-win32-ia32": "0.33.5", "@img/sharp-win32-x64": "0.33.5" } }, "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw=="], "astro/shiki": ["shiki@3.15.0", "", { "dependencies": { "@shikijs/core": "3.15.0", "@shikijs/engine-javascript": "3.15.0", "@shikijs/engine-oniguruma": "3.15.0", "@shikijs/langs": "3.15.0", "@shikijs/themes": "3.15.0", "@shikijs/types": "3.15.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-kLdkY6iV3dYbtPwS9KXU7mjfmDm25f5m0IPNFnaXO7TBPcvbUOY72PYXSuSqDzwp+vlH/d7MXpHlKO/x+QoLXw=="], @@ -4184,16 +4552,32 @@ "boxen/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + "cheerio/htmlparser2": ["htmlparser2@8.0.2", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1", "entities": "^4.4.0" } }, "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA=="], + + "chrome-launcher/escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], + + "chrome-launcher/is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], + "clean-css/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], "compress-commons/is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], + "compress-commons/readable-stream": ["readable-stream@4.7.0", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="], + "condense-newlines/kind-of": ["kind-of@3.2.2", "", { "dependencies": { "is-buffer": "^1.1.5" } }, "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ=="], + "config-chain/ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], + + "configstore/dot-prop": ["dot-prop@9.0.0", "", { "dependencies": { "type-fest": "^4.18.2" } }, "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ=="], + + "crc32-stream/readable-stream": ["readable-stream@4.7.0", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="], + "cross-spawn/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], "dot-prop/type-fest": ["type-fest@3.13.1", "", {}, "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g=="], + "dotenv-expand/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], + "drizzle-kit/esbuild": ["esbuild@0.19.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.19.12", "@esbuild/android-arm": "0.19.12", "@esbuild/android-arm64": "0.19.12", "@esbuild/android-x64": "0.19.12", "@esbuild/darwin-arm64": "0.19.12", "@esbuild/darwin-x64": "0.19.12", "@esbuild/freebsd-arm64": "0.19.12", "@esbuild/freebsd-x64": "0.19.12", "@esbuild/linux-arm": "0.19.12", "@esbuild/linux-arm64": "0.19.12", "@esbuild/linux-ia32": "0.19.12", "@esbuild/linux-loong64": "0.19.12", "@esbuild/linux-mips64el": "0.19.12", "@esbuild/linux-ppc64": "0.19.12", "@esbuild/linux-riscv64": "0.19.12", "@esbuild/linux-s390x": "0.19.12", "@esbuild/linux-x64": "0.19.12", "@esbuild/netbsd-x64": "0.19.12", "@esbuild/openbsd-x64": "0.19.12", "@esbuild/sunos-x64": "0.19.12", "@esbuild/win32-arm64": "0.19.12", "@esbuild/win32-ia32": "0.19.12", "@esbuild/win32-x64": "0.19.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg=="], "editorconfig/commander": ["commander@10.0.1", "", {}, "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug=="], @@ -4204,6 +4588,8 @@ "esbuild-plugin-copy/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + "esbuild-plugin-copy/fs-extra": ["fs-extra@10.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ=="], + "execa/is-stream": ["is-stream@3.0.0", "", {}, "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA=="], "express/cookie": ["cookie@0.7.1", "", {}, "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w=="], @@ -4218,12 +4604,20 @@ "form-data/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + "fx-runner/commander": ["commander@2.9.0", "", { "dependencies": { "graceful-readlink": ">= 1.0.0" } }, "sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A=="], + + "fx-runner/shell-quote": ["shell-quote@1.7.3", "", {}, "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw=="], + + "fx-runner/which": ["which@1.2.4", "", { "dependencies": { "is-absolute": "^0.1.7", "isexe": "^1.1.1" }, "bin": { "which": "./bin/which" } }, "sha512-zDRAqDSBudazdfM9zpiI30Fu9ve47htYXcGi3ln0wfKu2a7SmrT6F3VDoYONu//48V8Vz4TdCRNPjtvyRO3yBA=="], + "gaxios/is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], "gaxios/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], "glob/minimatch": ["minimatch@10.1.1", "", { "dependencies": { "@isaacs/brace-expansion": "^5.0.0" } }, "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ=="], + "global-directory/ini": ["ini@4.1.1", "", {}, "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g=="], + "globby/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], "gray-matter/js-yaml": ["js-yaml@3.14.2", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg=="], @@ -4232,15 +4626,23 @@ "html-minifier-terser/commander": ["commander@10.0.1", "", {}, "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug=="], + "html-to-text/htmlparser2": ["htmlparser2@8.0.2", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1", "entities": "^4.4.0" } }, "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA=="], + + "htmlparser2/entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], + + "i18next/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + "js-beautify/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], "jsonwebtoken/jws": ["jws@3.2.2", "", { "dependencies": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" } }, "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA=="], - "lazystream/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + "log-symbols/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - "md-to-react-email/marked": ["marked@7.0.4", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-t8eP0dXRJMtMvBojtkcsA7n48BkauktUKzfkPSCq85ZMTJ0v76Rke4DYz01omYpPTUh4p/f7HePgRo3ebG8+QQ=="], + "log-symbols/is-unicode-supported": ["is-unicode-supported@1.3.0", "", {}, "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ=="], + + "log-update/slice-ansi": ["slice-ansi@7.1.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^5.0.0" } }, "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w=="], - "mdast-util-find-and-replace/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], + "md-to-react-email/marked": ["marked@7.0.4", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-t8eP0dXRJMtMvBojtkcsA7n48BkauktUKzfkPSCq85ZMTJ0v76Rke4DYz01omYpPTUh4p/f7HePgRo3ebG8+QQ=="], "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], @@ -4252,10 +4654,22 @@ "miniflare/zod": ["zod@3.22.3", "", {}, "sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug=="], + "mlly/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], + + "multimatch/array-union": ["array-union@3.0.1", "", {}, "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw=="], + + "multimatch/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + "named-placeholders/lru-cache": ["lru-cache@7.18.3", "", {}, "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="], "nitro/h3": ["h3@2.0.1-rc.5", "", { "dependencies": { "rou3": "^0.7.9", "srvx": "^0.9.1" }, "peerDependencies": { "crossws": "^0.4.1" }, "optionalPeers": ["crossws"] }, "sha512-qkohAzCab0nLzXNm78tBjZDvtKMTmtygS8BJLT3VPczAQofdqlFXDPkXdLMJN4r05+xqneG8snZJ0HgkERCZTg=="], + "node-notifier/is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], + + "node-notifier/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], + + "node-notifier/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + "npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], "nypm/tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], @@ -4266,6 +4680,10 @@ "opencode/@ai-sdk/openai-compatible": ["@ai-sdk/openai-compatible@1.0.27", "", { "dependencies": { "@ai-sdk/provider": "2.0.0", "@ai-sdk/provider-utils": "3.0.17" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-bpYruxVLhrTbVH6CCq48zMJNeHu6FmHtEedl9FXckEgcIEAi036idFhJlcRwC1jNCwlacbzb8dPD7OAH1EKJaQ=="], + "opencode/@types/turndown": ["@types/turndown@5.0.5", "", {}, "sha512-TL2IgGgc7B5j78rIccBtlYAnkuv8nUQqhQc+DSYV5j9Be9XOcm/SKOVRuA47xAVI3680Tk9B1d8flK2GWT2+4w=="], + + "opencode/turndown": ["turndown@7.2.0", "", { "dependencies": { "@mixmark-io/domino": "^2.2.0" } }, "sha512-eCZGBN4nNNqM9Owkv9HAtWRYfLA4h909E/WGAWWBpmB275ehNhZyk87/Tpvjbp0jjNl9XwCsbe6bm6CqFsgD+A=="], + "opencontrol/@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.6.1", "", { "dependencies": { "content-type": "^1.0.5", "cors": "^2.8.5", "eventsource": "^3.0.2", "express": "^5.0.1", "express-rate-limit": "^7.5.0", "pkce-challenge": "^4.1.0", "raw-body": "^3.0.0", "zod": "^3.23.8", "zod-to-json-schema": "^3.24.1" } }, "sha512-oxzMzYCkZHMntzuyerehK3fV6A2Kwh5BD6CGEJSVDU2QNEhfLOptf2X7esQgaHZXHZY0oHmMsOtIDLP71UJXgA=="], "opencontrol/@tsconfig/bun": ["@tsconfig/bun@1.0.7", "", {}, "sha512-udGrGJBNQdXGVulehc1aWT73wkR9wdaGBtB6yL70RJsqwW/yJhIg6ZbRlPOfIUiFNrnBuYLBi9CSmMKfDC7dvA=="], @@ -4282,12 +4700,18 @@ "opentui-spinner/@opentui/solid": ["@opentui/solid@0.1.60", "", { "dependencies": { "@babel/core": "7.28.0", "@babel/preset-typescript": "7.27.1", "@opentui/core": "0.1.60", "babel-plugin-module-resolver": "5.0.2", "babel-preset-solid": "1.9.9", "s-js": "^0.4.9" }, "peerDependencies": { "solid-js": "1.9.9" } }, "sha512-pn91stzAHNGWaNL6h39q55bq3G1/DLqxKtT3wVsRAV68dHfPpwmqikX1nEJZK8OU84ZTPS9Ly9fz8po2Mot2uQ=="], + "ora/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "ora/cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], + "p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], "parse-bmfont-xml/xml2js": ["xml2js@0.5.0", "", { "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" } }, "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA=="], "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], + "parse-json/type-fest": ["type-fest@3.13.1", "", {}, "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g=="], + "parse5/entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], "path-scurry/lru-cache": ["lru-cache@11.2.2", "", {}, "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg=="], @@ -4296,20 +4720,34 @@ "pkg-up/find-up": ["find-up@3.0.0", "", { "dependencies": { "locate-path": "^3.0.0" } }, "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg=="], + "postcss-css-variables/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], + "postcss-load-config/lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="], "prebuild-install/tar-fs": ["tar-fs@2.1.4", "", { "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.1.4" } }, "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ=="], "prompts/kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], + "publish-browser-extension/form-data-encoder": ["form-data-encoder@4.1.0", "", {}, "sha512-G6NsmEW15s0Uw9XnCg+33H3ViYRyiM0hMrMhhqQOR8NFc5GhYrI+6I3u7OTw7b91J2g8rtvMBZJDbcGb2YUniw=="], + + "publish-browser-extension/formdata-node": ["formdata-node@6.0.3", "", {}, "sha512-8e1++BCiTzUno9v5IZ2J6bv4RU+3UKDmqWUQD0MIMVCd9AdhWkO1gw57oo1mNEX1dMq2EGI+FbWz4B92pscSQg=="], + + "publish-browser-extension/ofetch": ["ofetch@1.5.1", "", { "dependencies": { "destr": "^2.0.5", "node-fetch-native": "^1.6.7", "ufo": "^1.6.1" } }, "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA=="], + "raw-body/iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], - "readable-stream/buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], + "rc/ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], + + "rc/strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], + + "readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], - "readable-stream/events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], + "readable-web-to-node-stream/readable-stream": ["readable-stream@4.7.0", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="], "readdir-glob/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], + "restore-cursor/onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], + "router/path-to-regexp": ["path-to-regexp@8.3.0", "", {}, "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA=="], "safe-array-concat/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], @@ -4322,8 +4760,14 @@ "send/mime": ["mime@1.6.0", "", { "bin": { "mime": "cli.js" } }, "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="], + "simple-swizzle/is-arrayish": ["is-arrayish@0.3.4", "", {}, "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA=="], + "sitemap/sax": ["sax@1.4.3", "", {}, "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ=="], + "slice-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + + "slice-ansi/is-fullwidth-code-point": ["is-fullwidth-code-point@4.0.0", "", {}, "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ=="], + "source-map-support/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], "sst/aws4fetch": ["aws4fetch@1.0.18", "", {}, "sha512-3Cf+YaUl07p24MoQ46rFwulAmiyCwH2+1zw1ZyPAX5OtJ34Hh185DwB8y/qRLb6cYYYtSFJ9pthyLc0MD4e8sQ=="], @@ -4334,10 +4778,16 @@ "string-width-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "string_decoder/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + "strip-ansi-cjs/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], + "sucrase/commander": ["commander@4.1.1", "", {}, "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="], + "sucrase/lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], + "tar/yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], "terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], @@ -4352,11 +4802,17 @@ "type-is/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + "unicode-trie/pako": ["pako@0.2.9", "", {}, "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA=="], + "unifont/ofetch": ["ofetch@1.5.1", "", { "dependencies": { "destr": "^2.0.5", "node-fetch-native": "^1.6.7", "ufo": "^1.6.1" } }, "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA=="], + "update-notifier/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + "uri-js/punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], - "utif2/pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="], + "vite/esbuild": ["esbuild@0.25.4", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.4", "@esbuild/android-arm": "0.25.4", "@esbuild/android-arm64": "0.25.4", "@esbuild/android-x64": "0.25.4", "@esbuild/darwin-arm64": "0.25.4", "@esbuild/darwin-x64": "0.25.4", "@esbuild/freebsd-arm64": "0.25.4", "@esbuild/freebsd-x64": "0.25.4", "@esbuild/linux-arm": "0.25.4", "@esbuild/linux-arm64": "0.25.4", "@esbuild/linux-ia32": "0.25.4", "@esbuild/linux-loong64": "0.25.4", "@esbuild/linux-mips64el": "0.25.4", "@esbuild/linux-ppc64": "0.25.4", "@esbuild/linux-riscv64": "0.25.4", "@esbuild/linux-s390x": "0.25.4", "@esbuild/linux-x64": "0.25.4", "@esbuild/netbsd-arm64": "0.25.4", "@esbuild/netbsd-x64": "0.25.4", "@esbuild/openbsd-arm64": "0.25.4", "@esbuild/openbsd-x64": "0.25.4", "@esbuild/sunos-x64": "0.25.4", "@esbuild/win32-arm64": "0.25.4", "@esbuild/win32-ia32": "0.25.4", "@esbuild/win32-x64": "0.25.4" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q=="], + + "vite-node/vite": ["vite@7.1.10", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-CmuvUBzVJ/e3HGxhg6cYk88NGgTnBoOo7ogtfJJ0fefUWAxN/WDSUa50o+oVBxuIhO8FoEZW0j2eW7sfjs5EtA=="], "vite-plugin-icons-spritesheet/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], @@ -4366,16 +4822,26 @@ "which-builtin-type/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + "wrangler/esbuild": ["esbuild@0.25.4", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.4", "@esbuild/android-arm": "0.25.4", "@esbuild/android-arm64": "0.25.4", "@esbuild/android-x64": "0.25.4", "@esbuild/darwin-arm64": "0.25.4", "@esbuild/darwin-x64": "0.25.4", "@esbuild/freebsd-arm64": "0.25.4", "@esbuild/freebsd-x64": "0.25.4", "@esbuild/linux-arm": "0.25.4", "@esbuild/linux-arm64": "0.25.4", "@esbuild/linux-ia32": "0.25.4", "@esbuild/linux-loong64": "0.25.4", "@esbuild/linux-mips64el": "0.25.4", "@esbuild/linux-ppc64": "0.25.4", "@esbuild/linux-riscv64": "0.25.4", "@esbuild/linux-s390x": "0.25.4", "@esbuild/linux-x64": "0.25.4", "@esbuild/netbsd-arm64": "0.25.4", "@esbuild/netbsd-x64": "0.25.4", "@esbuild/openbsd-arm64": "0.25.4", "@esbuild/openbsd-x64": "0.25.4", "@esbuild/sunos-x64": "0.25.4", "@esbuild/win32-arm64": "0.25.4", "@esbuild/win32-ia32": "0.25.4", "@esbuild/win32-x64": "0.25.4" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q=="], + "wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], "wrap-ansi-cjs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], "wrap-ansi-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "wxt/minimatch": ["minimatch@10.1.1", "", { "dependencies": { "@isaacs/brace-expansion": "^5.0.0" } }, "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ=="], + + "wxt/open": ["open@10.2.0", "", { "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", "wsl-utils": "^0.1.0" } }, "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA=="], + + "wxt/vite": ["vite@7.1.10", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-CmuvUBzVJ/e3HGxhg6cYk88NGgTnBoOo7ogtfJJ0fefUWAxN/WDSUa50o+oVBxuIhO8FoEZW0j2eW7sfjs5EtA=="], + "xml2js/sax": ["sax@1.4.3", "", {}, "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ=="], "yargs/yargs-parser": ["yargs-parser@22.0.0", "", {}, "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw=="], + "zip-stream/readable-stream": ["readable-stream@4.7.0", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="], + "zod-to-json-schema/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], "zod-to-ts/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], @@ -4420,6 +4886,18 @@ "@actions/github/@octokit/request-error/@octokit/types": ["@octokit/types@13.10.0", "", { "dependencies": { "@octokit/openapi-types": "^24.2.0" } }, "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA=="], + "@aklinker1/rollup-plugin-visualizer/open/define-lazy-prop": ["define-lazy-prop@2.0.0", "", {}, "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="], + + "@aklinker1/rollup-plugin-visualizer/open/is-docker": ["is-docker@2.2.1", "", { "bin": { "is-docker": "cli.js" } }, "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="], + + "@aklinker1/rollup-plugin-visualizer/open/is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], + + "@aklinker1/rollup-plugin-visualizer/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + + "@aklinker1/rollup-plugin-visualizer/yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "@astrojs/cloudflare/vite/esbuild": ["esbuild@0.25.4", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.4", "@esbuild/android-arm": "0.25.4", "@esbuild/android-arm64": "0.25.4", "@esbuild/android-x64": "0.25.4", "@esbuild/darwin-arm64": "0.25.4", "@esbuild/darwin-x64": "0.25.4", "@esbuild/freebsd-arm64": "0.25.4", "@esbuild/freebsd-x64": "0.25.4", "@esbuild/linux-arm": "0.25.4", "@esbuild/linux-arm64": "0.25.4", "@esbuild/linux-ia32": "0.25.4", "@esbuild/linux-loong64": "0.25.4", "@esbuild/linux-mips64el": "0.25.4", "@esbuild/linux-ppc64": "0.25.4", "@esbuild/linux-riscv64": "0.25.4", "@esbuild/linux-s390x": "0.25.4", "@esbuild/linux-x64": "0.25.4", "@esbuild/netbsd-arm64": "0.25.4", "@esbuild/netbsd-x64": "0.25.4", "@esbuild/openbsd-arm64": "0.25.4", "@esbuild/openbsd-x64": "0.25.4", "@esbuild/sunos-x64": "0.25.4", "@esbuild/win32-arm64": "0.25.4", "@esbuild/win32-ia32": "0.25.4", "@esbuild/win32-x64": "0.25.4" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q=="], + "@astrojs/markdown-remark/shiki/@shikijs/core": ["@shikijs/core@3.15.0", "", { "dependencies": { "@shikijs/types": "3.15.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-8TOG6yG557q+fMsSVa8nkEDOZNTSxjbbR8l6lF2gyr6Np+jrPlslqDxQkN6rMXCECQ3isNPZAGszAfYoJOPGlg=="], "@astrojs/markdown-remark/shiki/@shikijs/engine-javascript": ["@shikijs/engine-javascript@3.15.0", "", { "dependencies": { "@shikijs/types": "3.15.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.3" } }, "sha512-ZedbOFpopibdLmvTz2sJPJgns8Xvyabe2QbmqMTz07kt1pTzfEvKZc5IqPVO/XFiEbbNyaOpjPBkkr1vlwS+qg=="], @@ -4438,6 +4916,8 @@ "@astrojs/mdx/@astrojs/markdown-remark/shiki": ["shiki@3.15.0", "", { "dependencies": { "@shikijs/core": "3.15.0", "@shikijs/engine-javascript": "3.15.0", "@shikijs/engine-oniguruma": "3.15.0", "@shikijs/langs": "3.15.0", "@shikijs/themes": "3.15.0", "@shikijs/types": "3.15.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-kLdkY6iV3dYbtPwS9KXU7mjfmDm25f5m0IPNFnaXO7TBPcvbUOY72PYXSuSqDzwp+vlH/d7MXpHlKO/x+QoLXw=="], + "@astrojs/solid-js/vite/esbuild": ["esbuild@0.25.4", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.4", "@esbuild/android-arm": "0.25.4", "@esbuild/android-arm64": "0.25.4", "@esbuild/android-x64": "0.25.4", "@esbuild/darwin-arm64": "0.25.4", "@esbuild/darwin-x64": "0.25.4", "@esbuild/freebsd-arm64": "0.25.4", "@esbuild/freebsd-x64": "0.25.4", "@esbuild/linux-arm": "0.25.4", "@esbuild/linux-arm64": "0.25.4", "@esbuild/linux-ia32": "0.25.4", "@esbuild/linux-loong64": "0.25.4", "@esbuild/linux-mips64el": "0.25.4", "@esbuild/linux-ppc64": "0.25.4", "@esbuild/linux-riscv64": "0.25.4", "@esbuild/linux-s390x": "0.25.4", "@esbuild/linux-x64": "0.25.4", "@esbuild/netbsd-arm64": "0.25.4", "@esbuild/netbsd-x64": "0.25.4", "@esbuild/openbsd-arm64": "0.25.4", "@esbuild/openbsd-x64": "0.25.4", "@esbuild/sunos-x64": "0.25.4", "@esbuild/win32-arm64": "0.25.4", "@esbuild/win32-ia32": "0.25.4", "@esbuild/win32-x64": "0.25.4" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q=="], + "@aws-crypto/sha1-browser/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="], "@aws-crypto/sha256-browser/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="], @@ -4520,6 +5000,8 @@ "@expressive-code/plugin-shiki/shiki/@shikijs/types": ["@shikijs/types@3.15.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-BnP+y/EQnhihgHy4oIAN+6FFtmfTekwOLsQbRw9hOKwqgNy8Bdsjq8B05oAt/ZgvIWWFrshV71ytOrlPfYjIJw=="], + "@hey-api/openapi-ts/open/wsl-utils": ["wsl-utils@0.3.0", "", { "dependencies": { "is-wsl": "^3.1.0", "powershell-utils": "^0.1.0" } }, "sha512-3sFIGLiaDP7rTO4xh3g+b3AzhYDIUGGywE/WsmqzJWDxus5aJXVnPTNC/6L+r2WzrwXqVOdD262OaO+cEyPMSQ=="], + "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], @@ -4672,81 +5154,93 @@ "@slack/web-api/p-queue/p-timeout": ["p-timeout@3.2.0", "", { "dependencies": { "p-finally": "^1.0.0" } }, "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg=="], - "@solidjs/start/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="], + "@solidjs/start/shiki/@shikijs/core": ["@shikijs/core@1.29.2", "", { "dependencies": { "@shikijs/engine-javascript": "1.29.2", "@shikijs/engine-oniguruma": "1.29.2", "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.4" } }, "sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ=="], - "@solidjs/start/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="], + "@solidjs/start/shiki/@shikijs/engine-javascript": ["@shikijs/engine-javascript@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "oniguruma-to-es": "^2.2.0" } }, "sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A=="], - "@solidjs/start/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.12", "", { "os": "android", "cpu": "arm64" }, "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg=="], + "@solidjs/start/shiki/@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1" } }, "sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA=="], - "@solidjs/start/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.25.12", "", { "os": "android", "cpu": "x64" }, "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg=="], + "@solidjs/start/shiki/@shikijs/langs": ["@shikijs/langs@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2" } }, "sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ=="], - "@solidjs/start/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg=="], + "@solidjs/start/shiki/@shikijs/themes": ["@shikijs/themes@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2" } }, "sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g=="], - "@solidjs/start/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA=="], + "@solidjs/start/shiki/@shikijs/types": ["@shikijs/types@1.29.2", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4" } }, "sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw=="], - "@solidjs/start/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg=="], + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime/@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], - "@solidjs/start/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ=="], + "accepts/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], - "@solidjs/start/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.12", "", { "os": "linux", "cpu": "arm" }, "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw=="], + "ansi-align/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - "@solidjs/start/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ=="], + "ansi-align/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "@solidjs/start/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA=="], + "archiver-utils/glob/jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], - "@solidjs/start/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng=="], + "archiver-utils/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], - "@solidjs/start/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw=="], + "archiver-utils/glob/path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], - "@solidjs/start/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA=="], + "archiver-utils/readable-stream/buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], - "@solidjs/start/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w=="], + "archiver-utils/readable-stream/events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], - "@solidjs/start/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg=="], + "archiver-utils/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], - "@solidjs/start/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.12", "", { "os": "linux", "cpu": "x64" }, "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw=="], + "archiver/readable-stream/buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], - "@solidjs/start/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg=="], + "archiver/readable-stream/events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], - "@solidjs/start/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.12", "", { "os": "none", "cpu": "x64" }, "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ=="], + "archiver/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], - "@solidjs/start/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.12", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A=="], + "astro/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.4", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q=="], - "@solidjs/start/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw=="], + "astro/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.4", "", { "os": "android", "cpu": "arm" }, "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ=="], - "@solidjs/start/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w=="], + "astro/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.4", "", { "os": "android", "cpu": "arm64" }, "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A=="], - "@solidjs/start/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg=="], + "astro/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.25.4", "", { "os": "android", "cpu": "x64" }, "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ=="], - "@solidjs/start/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ=="], + "astro/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g=="], - "@solidjs/start/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], + "astro/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A=="], - "@solidjs/start/shiki/@shikijs/core": ["@shikijs/core@1.29.2", "", { "dependencies": { "@shikijs/engine-javascript": "1.29.2", "@shikijs/engine-oniguruma": "1.29.2", "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.4" } }, "sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ=="], + "astro/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.4", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ=="], - "@solidjs/start/shiki/@shikijs/engine-javascript": ["@shikijs/engine-javascript@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "oniguruma-to-es": "^2.2.0" } }, "sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A=="], + "astro/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ=="], - "@solidjs/start/shiki/@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1" } }, "sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA=="], + "astro/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.4", "", { "os": "linux", "cpu": "arm" }, "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ=="], - "@solidjs/start/shiki/@shikijs/langs": ["@shikijs/langs@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2" } }, "sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ=="], + "astro/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ=="], - "@solidjs/start/shiki/@shikijs/themes": ["@shikijs/themes@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2" } }, "sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g=="], + "astro/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.4", "", { "os": "linux", "cpu": "ia32" }, "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ=="], - "@solidjs/start/shiki/@shikijs/types": ["@shikijs/types@1.29.2", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4" } }, "sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw=="], + "astro/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA=="], - "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime/@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], + "astro/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg=="], - "accepts/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + "astro/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag=="], - "ansi-align/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "astro/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA=="], - "ansi-align/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "astro/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g=="], - "archiver-utils/glob/jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], + "astro/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.4", "", { "os": "linux", "cpu": "x64" }, "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA=="], - "archiver-utils/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "astro/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.4", "", { "os": "none", "cpu": "arm64" }, "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ=="], - "archiver-utils/glob/path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], + "astro/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.4", "", { "os": "none", "cpu": "x64" }, "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw=="], + + "astro/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.4", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A=="], + + "astro/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.4", "", { "os": "openbsd", "cpu": "x64" }, "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw=="], + + "astro/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.4", "", { "os": "sunos", "cpu": "x64" }, "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q=="], + + "astro/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ=="], + + "astro/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg=="], + + "astro/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.4", "", { "os": "win32", "cpu": "x64" }, "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ=="], "astro/shiki/@shikijs/core": ["@shikijs/core@3.15.0", "", { "dependencies": { "@shikijs/types": "3.15.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-8TOG6yG557q+fMsSVa8nkEDOZNTSxjbbR8l6lF2gyr6Np+jrPlslqDxQkN6rMXCECQ3isNPZAGszAfYoJOPGlg=="], @@ -4772,8 +5266,24 @@ "babel-plugin-module-resolver/glob/path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], + "bl/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + "body-parser/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + "chrome-launcher/is-wsl/is-docker": ["is-docker@2.2.1", "", { "bin": { "is-docker": "cli.js" } }, "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="], + + "compress-commons/readable-stream/buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], + + "compress-commons/readable-stream/events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], + + "compress-commons/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + + "crc32-stream/readable-stream/buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], + + "crc32-stream/readable-stream/events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], + + "crc32-stream/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + "cross-spawn/which/isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], "drizzle-kit/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.19.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA=="], @@ -4822,6 +5332,8 @@ "drizzle-kit/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.19.12", "", { "os": "win32", "cpu": "x64" }, "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA=="], + "editorconfig/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "esbuild-plugin-copy/chokidar/readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], "express/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], @@ -4830,6 +5342,8 @@ "form-data/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + "fx-runner/which/isexe": ["isexe@1.1.2", "", {}, "sha512-d2eJzK691yZwPHcv1LbeAOa91yMJ9QmfTgSO1oXB65ezVhXQsxBac2vEB4bMVms9cGzaA99n6V2viHMq82VLDw=="], + "gray-matter/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], "js-beautify/glob/jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], @@ -4840,9 +5354,15 @@ "jsonwebtoken/jws/jwa": ["jwa@1.4.2", "", { "dependencies": { "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw=="], - "lazystream/readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + "log-update/slice-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + + "log-update/slice-ansi/is-fullwidth-code-point": ["is-fullwidth-code-point@5.1.0", "", { "dependencies": { "get-east-asian-width": "^1.3.1" } }, "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ=="], + + "mlly/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], + + "node-notifier/is-wsl/is-docker": ["is-docker@2.2.1", "", { "bin": { "is-docker": "cli.js" } }, "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="], - "lazystream/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + "node-notifier/which/isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], "opencode/@ai-sdk/openai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.17", "", { "dependencies": { "@ai-sdk/provider": "2.0.0", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-TR3Gs4I3Tym4Ll+EPdzRdvo/rc8Js6c4nVhFLuvGLX/Y4V9ZcQMa/HTiYsHEgmYrf1zVi6Q145UEZUfleOwOjw=="], @@ -4882,7 +5402,13 @@ "prebuild-install/tar-fs/tar-stream": ["tar-stream@2.2.0", "", { "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" } }, "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ=="], - "readable-stream/buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + "readable-web-to-node-stream/readable-stream/buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], + + "readable-web-to-node-stream/readable-stream/events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], + + "readable-web-to-node-stream/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + + "readdir-glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], "send/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], @@ -4900,12 +5426,116 @@ "type-is/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], - "vitest/vite/esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], + "vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.4", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q=="], + + "vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.4", "", { "os": "android", "cpu": "arm" }, "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ=="], + + "vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.4", "", { "os": "android", "cpu": "arm64" }, "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A=="], + + "vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.25.4", "", { "os": "android", "cpu": "x64" }, "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ=="], + + "vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g=="], + + "vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A=="], + + "vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.4", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ=="], + + "vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ=="], + + "vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.4", "", { "os": "linux", "cpu": "arm" }, "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ=="], + + "vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ=="], + + "vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.4", "", { "os": "linux", "cpu": "ia32" }, "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ=="], + + "vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA=="], + + "vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg=="], + + "vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag=="], + + "vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA=="], + + "vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g=="], + + "vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.4", "", { "os": "linux", "cpu": "x64" }, "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA=="], + + "vite/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.4", "", { "os": "none", "cpu": "arm64" }, "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ=="], + + "vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.4", "", { "os": "none", "cpu": "x64" }, "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw=="], + + "vite/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.4", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A=="], + + "vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.4", "", { "os": "openbsd", "cpu": "x64" }, "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw=="], + + "vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.4", "", { "os": "sunos", "cpu": "x64" }, "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q=="], + + "vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ=="], + + "vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg=="], + + "vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.4", "", { "os": "win32", "cpu": "x64" }, "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ=="], + + "wrangler/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.4", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q=="], + + "wrangler/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.4", "", { "os": "android", "cpu": "arm" }, "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ=="], + + "wrangler/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.4", "", { "os": "android", "cpu": "arm64" }, "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A=="], + + "wrangler/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.25.4", "", { "os": "android", "cpu": "x64" }, "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ=="], + + "wrangler/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g=="], + + "wrangler/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A=="], + + "wrangler/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.4", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ=="], + + "wrangler/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ=="], + + "wrangler/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.4", "", { "os": "linux", "cpu": "arm" }, "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ=="], + + "wrangler/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ=="], + + "wrangler/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.4", "", { "os": "linux", "cpu": "ia32" }, "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ=="], + + "wrangler/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA=="], + + "wrangler/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg=="], + + "wrangler/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag=="], + + "wrangler/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA=="], + + "wrangler/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g=="], + + "wrangler/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.4", "", { "os": "linux", "cpu": "x64" }, "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA=="], + + "wrangler/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.4", "", { "os": "none", "cpu": "arm64" }, "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ=="], + + "wrangler/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.4", "", { "os": "none", "cpu": "x64" }, "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw=="], + + "wrangler/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.4", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A=="], + + "wrangler/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.4", "", { "os": "openbsd", "cpu": "x64" }, "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw=="], + + "wrangler/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.4", "", { "os": "sunos", "cpu": "x64" }, "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q=="], + + "wrangler/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ=="], + + "wrangler/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg=="], + + "wrangler/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.4", "", { "os": "win32", "cpu": "x64" }, "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ=="], "wrap-ansi-cjs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], "wrap-ansi-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "zip-stream/readable-stream/buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], + + "zip-stream/readable-stream/events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], + + "zip-stream/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + "@actions/artifact/@octokit/core/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@24.2.0", "", {}, "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="], "@actions/artifact/@octokit/request-error/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@24.2.0", "", {}, "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="], @@ -4922,6 +5552,64 @@ "@actions/github/@octokit/request/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@24.2.0", "", {}, "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="], + "@aklinker1/rollup-plugin-visualizer/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "@aklinker1/rollup-plugin-visualizer/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "@aklinker1/rollup-plugin-visualizer/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "@aklinker1/rollup-plugin-visualizer/yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "@astrojs/cloudflare/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.4", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q=="], + + "@astrojs/cloudflare/vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.4", "", { "os": "android", "cpu": "arm" }, "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ=="], + + "@astrojs/cloudflare/vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.4", "", { "os": "android", "cpu": "arm64" }, "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A=="], + + "@astrojs/cloudflare/vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.25.4", "", { "os": "android", "cpu": "x64" }, "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ=="], + + "@astrojs/cloudflare/vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g=="], + + "@astrojs/cloudflare/vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A=="], + + "@astrojs/cloudflare/vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.4", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ=="], + + "@astrojs/cloudflare/vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ=="], + + "@astrojs/cloudflare/vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.4", "", { "os": "linux", "cpu": "arm" }, "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ=="], + + "@astrojs/cloudflare/vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ=="], + + "@astrojs/cloudflare/vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.4", "", { "os": "linux", "cpu": "ia32" }, "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ=="], + + "@astrojs/cloudflare/vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA=="], + + "@astrojs/cloudflare/vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg=="], + + "@astrojs/cloudflare/vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag=="], + + "@astrojs/cloudflare/vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA=="], + + "@astrojs/cloudflare/vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g=="], + + "@astrojs/cloudflare/vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.4", "", { "os": "linux", "cpu": "x64" }, "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA=="], + + "@astrojs/cloudflare/vite/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.4", "", { "os": "none", "cpu": "arm64" }, "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ=="], + + "@astrojs/cloudflare/vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.4", "", { "os": "none", "cpu": "x64" }, "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw=="], + + "@astrojs/cloudflare/vite/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.4", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A=="], + + "@astrojs/cloudflare/vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.4", "", { "os": "openbsd", "cpu": "x64" }, "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw=="], + + "@astrojs/cloudflare/vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.4", "", { "os": "sunos", "cpu": "x64" }, "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q=="], + + "@astrojs/cloudflare/vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ=="], + + "@astrojs/cloudflare/vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg=="], + + "@astrojs/cloudflare/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.4", "", { "os": "win32", "cpu": "x64" }, "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ=="], + "@astrojs/mdx/@astrojs/markdown-remark/shiki/@shikijs/core": ["@shikijs/core@3.15.0", "", { "dependencies": { "@shikijs/types": "3.15.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-8TOG6yG557q+fMsSVa8nkEDOZNTSxjbbR8l6lF2gyr6Np+jrPlslqDxQkN6rMXCECQ3isNPZAGszAfYoJOPGlg=="], "@astrojs/mdx/@astrojs/markdown-remark/shiki/@shikijs/engine-javascript": ["@shikijs/engine-javascript@3.15.0", "", { "dependencies": { "@shikijs/types": "3.15.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.3" } }, "sha512-ZedbOFpopibdLmvTz2sJPJgns8Xvyabe2QbmqMTz07kt1pTzfEvKZc5IqPVO/XFiEbbNyaOpjPBkkr1vlwS+qg=="], @@ -4934,6 +5622,56 @@ "@astrojs/mdx/@astrojs/markdown-remark/shiki/@shikijs/types": ["@shikijs/types@3.15.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-BnP+y/EQnhihgHy4oIAN+6FFtmfTekwOLsQbRw9hOKwqgNy8Bdsjq8B05oAt/ZgvIWWFrshV71ytOrlPfYjIJw=="], + "@astrojs/solid-js/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.4", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q=="], + + "@astrojs/solid-js/vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.4", "", { "os": "android", "cpu": "arm" }, "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ=="], + + "@astrojs/solid-js/vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.4", "", { "os": "android", "cpu": "arm64" }, "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A=="], + + "@astrojs/solid-js/vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.25.4", "", { "os": "android", "cpu": "x64" }, "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ=="], + + "@astrojs/solid-js/vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g=="], + + "@astrojs/solid-js/vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A=="], + + "@astrojs/solid-js/vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.4", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ=="], + + "@astrojs/solid-js/vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ=="], + + "@astrojs/solid-js/vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.4", "", { "os": "linux", "cpu": "arm" }, "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ=="], + + "@astrojs/solid-js/vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ=="], + + "@astrojs/solid-js/vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.4", "", { "os": "linux", "cpu": "ia32" }, "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ=="], + + "@astrojs/solid-js/vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA=="], + + "@astrojs/solid-js/vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg=="], + + "@astrojs/solid-js/vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag=="], + + "@astrojs/solid-js/vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA=="], + + "@astrojs/solid-js/vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g=="], + + "@astrojs/solid-js/vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.4", "", { "os": "linux", "cpu": "x64" }, "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA=="], + + "@astrojs/solid-js/vite/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.4", "", { "os": "none", "cpu": "arm64" }, "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ=="], + + "@astrojs/solid-js/vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.4", "", { "os": "none", "cpu": "x64" }, "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw=="], + + "@astrojs/solid-js/vite/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.4", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A=="], + + "@astrojs/solid-js/vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.4", "", { "os": "openbsd", "cpu": "x64" }, "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw=="], + + "@astrojs/solid-js/vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.4", "", { "os": "sunos", "cpu": "x64" }, "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q=="], + + "@astrojs/solid-js/vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ=="], + + "@astrojs/solid-js/vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg=="], + + "@astrojs/solid-js/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.4", "", { "os": "win32", "cpu": "x64" }, "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ=="], + "@aws-crypto/sha1-browser/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], "@aws-crypto/sha256-browser/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], @@ -5010,18 +5748,32 @@ "ansi-align/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "archiver-utils/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "archiver-utils/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + "archiver-utils/readable-stream/buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + + "archiver/readable-stream/buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + "astro/unstorage/h3/cookie-es": ["cookie-es@1.2.2", "", {}, "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg=="], "astro/unstorage/h3/crossws": ["crossws@0.3.5", "", { "dependencies": { "uncrypto": "^0.1.3" } }, "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA=="], + "babel-plugin-module-resolver/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "babel-plugin-module-resolver/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], "babel-plugin-module-resolver/glob/path-scurry/minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], + "compress-commons/readable-stream/buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + + "crc32-stream/readable-stream/buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + "esbuild-plugin-copy/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "js-beautify/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "js-beautify/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], "opencontrol/@modelcontextprotocol/sdk/express/accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="], @@ -5060,59 +5812,17 @@ "prebuild-install/tar-fs/tar-stream/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + "readable-web-to-node-stream/readable-stream/buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + "tw-to-css/tailwindcss/chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "tw-to-css/tailwindcss/chokidar/readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], - "vitest/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="], - - "vitest/vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="], - - "vitest/vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.12", "", { "os": "android", "cpu": "arm64" }, "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg=="], - - "vitest/vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.25.12", "", { "os": "android", "cpu": "x64" }, "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg=="], - - "vitest/vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg=="], - - "vitest/vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA=="], - - "vitest/vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg=="], - - "vitest/vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ=="], - - "vitest/vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.12", "", { "os": "linux", "cpu": "arm" }, "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw=="], - - "vitest/vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ=="], - - "vitest/vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA=="], + "zip-stream/readable-stream/buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], - "vitest/vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng=="], + "@aklinker1/rollup-plugin-visualizer/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "vitest/vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw=="], - - "vitest/vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA=="], - - "vitest/vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w=="], - - "vitest/vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg=="], - - "vitest/vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.12", "", { "os": "linux", "cpu": "x64" }, "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw=="], - - "vitest/vite/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg=="], - - "vitest/vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.12", "", { "os": "none", "cpu": "x64" }, "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ=="], - - "vitest/vite/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.12", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A=="], - - "vitest/vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw=="], - - "vitest/vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w=="], - - "vitest/vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg=="], - - "vitest/vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ=="], - - "vitest/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], + "@aklinker1/rollup-plugin-visualizer/yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], "@aws-sdk/client-sts/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso/@aws-sdk/token-providers/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.782.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.775.0", "@aws-sdk/middleware-host-header": "3.775.0", "@aws-sdk/middleware-logger": "3.775.0", "@aws-sdk/middleware-recursion-detection": "3.775.0", "@aws-sdk/middleware-user-agent": "3.782.0", "@aws-sdk/region-config-resolver": "3.775.0", "@aws-sdk/types": "3.775.0", "@aws-sdk/util-endpoints": "3.782.0", "@aws-sdk/util-user-agent-browser": "3.775.0", "@aws-sdk/util-user-agent-node": "3.782.0", "@smithy/config-resolver": "^4.1.0", "@smithy/core": "^3.2.0", "@smithy/fetch-http-handler": "^5.0.2", "@smithy/hash-node": "^4.0.2", "@smithy/invalid-dependency": "^4.0.2", "@smithy/middleware-content-length": "^4.0.2", "@smithy/middleware-endpoint": "^4.1.0", "@smithy/middleware-retry": "^4.1.0", "@smithy/middleware-serde": "^4.0.3", "@smithy/middleware-stack": "^4.0.2", "@smithy/node-config-provider": "^4.0.2", "@smithy/node-http-handler": "^4.0.4", "@smithy/protocol-http": "^5.1.0", "@smithy/smithy-client": "^4.2.0", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.8", "@smithy/util-defaults-mode-node": "^4.0.8", "@smithy/util-endpoints": "^3.0.2", "@smithy/util-middleware": "^4.0.2", "@smithy/util-retry": "^4.0.2", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-QOYC8q7luzHFXrP0xYAqBctoPkynjfV0r9dqntFu4/IWMTyC1vlo1UTxFAjIPyclYw92XJyEkVCVg9v/nQnsUA=="], @@ -5132,6 +5842,8 @@ "pkg-up/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + "prebuild-install/tar-fs/tar-stream/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + "tw-to-css/tailwindcss/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], } } diff --git a/packages/desktop/vite.config.ts b/packages/desktop/vite.config.ts index a388884cd54..b3ca83cf4b3 100644 --- a/packages/desktop/vite.config.ts +++ b/packages/desktop/vite.config.ts @@ -7,6 +7,17 @@ export default defineConfig({ host: "0.0.0.0", allowedHosts: true, port: 3000, + proxy: { + // Proxy API calls to the opencode server during development + "/session": "http://localhost:4096", + "/project": "http://localhost:4096", + "/event": "http://localhost:4096", + "/health": "http://localhost:4096", + "/config": "http://localhost:4096", + "/provider": "http://localhost:4096", + "/installation": "http://localhost:4096", + "/file": "http://localhost:4096", + }, }, build: { target: "esnext", diff --git a/packages/extension/.output/chrome-mv3/background.js b/packages/extension/.output/chrome-mv3/background.js new file mode 100644 index 00000000000..f8a0665493a --- /dev/null +++ b/packages/extension/.output/chrome-mv3/background.js @@ -0,0 +1,11 @@ +var background=(function(){"use strict";function S(t){return t==null||typeof t=="function"?{main:t}:t}const x={grey:"#5f6368",blue:"#1a73e8",red:"#d93025",yellow:"#f9ab00",green:"#1e8e3e",pink:"#d01884",purple:"#9334e6",cyan:"#007b83",orange:"#fa903e"};async function v(){const t=await chrome.tabs.query({currentWindow:!0}),e=await C(),r=new Map,o=[];for(const n of e)r.set(n.id,{id:n.id,title:n.title||"",color:x[n.color]||n.color,tabs:[]});for(const n of t){const c={id:n.id,title:n.title||"Untitled",url:n.url||"",favIconUrl:n.favIconUrl,active:n.active,groupId:n.groupId!==-1?n.groupId:void 0};if(n.groupId!==void 0&&n.groupId!==-1){const a=r.get(n.groupId);a?(c.groupColor=a.color,c.groupTitle=a.title,a.tabs.push(c)):o.push(c)}else o.push(c)}return{groups:Array.from(r.values()).filter(n=>n.tabs.length>0),ungrouped:o}}async function C(){if(!chrome.tabGroups)return[];const[t]=await chrome.windows.getAll({windowTypes:["normal"]});return t?.id?chrome.tabGroups.query({windowId:t.id}):[]}async function k(t){try{if(t){const r=await chrome.tabs.get(t);return r.active||(await chrome.tabs.update(t,{active:!0}),await new Promise(n=>setTimeout(n,100))),{screenshot:await chrome.tabs.captureVisibleTab(r.windowId,{format:"png"})}}return{screenshot:await chrome.tabs.captureVisibleTab({format:"png"})}}catch(e){const r=e instanceof Error?e.message:String(e);return r.includes("Cannot access")||r.includes("chrome://")||r.includes("edge://")?{error:"Cannot capture browser pages (chrome://, edge://, etc.)"}:r.includes("No window with id")||r.includes("No tab with id")?{error:"Tab not found. Try refreshing the page."}:{error:r}}}async function P(t){try{const e=await chrome.tabs.sendMessage(t,{type:"EXTRACT_PAGE_CONTENT"});if(e?.success&&e.markdown)return{markdown:e.markdown}}catch{console.log("[Eidorail] Content script not available, using fallback extraction")}try{const r=(await chrome.scripting.executeScript({target:{tabId:t},func:M}))[0]?.result;return r?.success?{markdown:r.markdown}:{error:r?.error||"Failed to extract page content"}}catch(e){return{error:`Extraction failed: ${e instanceof Error?e.message:String(e)}`}}}async function I(t){try{const e=await chrome.tabs.sendMessage(t,{type:"EXTRACT_SELECTION"});if(e?.success&&e.markdown)return{markdown:e.markdown};if(e?.error)return{error:e.error}}catch{console.log("[Eidorail] Content script not available, using fallback extraction")}try{const r=(await chrome.scripting.executeScript({target:{tabId:t},func:O}))[0]?.result;return r?.success?{markdown:r.markdown}:{error:r?.error||"No text selected"}}catch(e){return{error:`Extraction failed: ${e instanceof Error?e.message:String(e)}`}}}function U(){return{scrollWidth:Math.max(document.documentElement.scrollWidth,document.body.scrollWidth,document.documentElement.offsetWidth),scrollHeight:Math.max(document.documentElement.scrollHeight,document.body.scrollHeight,document.documentElement.offsetHeight),viewportWidth:window.innerWidth,viewportHeight:window.innerHeight,devicePixelRatio:window.devicePixelRatio||1,originalScrollX:window.scrollX,originalScrollY:window.scrollY}}function N(t,e){window.scrollTo(t,e)}function _(t,e){window.scrollTo(t,e)}async function A(t){try{const e=await chrome.tabs.get(t);e.active||(await chrome.tabs.update(t,{active:!0}),await new Promise(l=>setTimeout(l,150)));const o=(await chrome.scripting.executeScript({target:{tabId:t},func:U}))[0]?.result;if(!o)return{error:"Could not get page dimensions"};const{scrollWidth:n,scrollHeight:c,viewportWidth:a,viewportHeight:s,devicePixelRatio:u,originalScrollX:i,originalScrollY:f}=o;if(c<=s&&n<=a)return{screenshot:await chrome.tabs.captureVisibleTab(e.windowId,{format:"png"})};const m=[],g=Math.ceil(c/s),d=Math.ceil(n/a);for(let l=0;lsetTimeout(L,100));const H=await chrome.tabs.captureVisibleTab(e.windowId,{format:"png"});m.push({dataUrl:H,x:T,y:E})}await chrome.scripting.executeScript({target:{tabId:t},func:_,args:[i,f]});const w=(await chrome.scripting.executeScript({target:{tabId:t},func:W,args:[m,n,c,a,s,u]}))[0]?.result;return w?{screenshot:w}:{error:"Failed to stitch screenshots"}}catch(e){return{error:`Full page capture failed: ${e instanceof Error?e.message:String(e)}`}}}function W(t,e,r,o,n,c){return new Promise((a,s)=>{const u=document.createElement("canvas");u.width=e*c,u.height=r*c;const i=u.getContext("2d");if(!i){s("Could not get canvas context");return}let f=0;const m=[];for(const g of t){const d=new Image;d.onload=()=>{if(m.push({img:d,x:g.x*c,y:g.y*c}),f++,f===t.length){for(const{img:y,x:w,y:l}of m)i.drawImage(y,w,l);a(u.toDataURL("image/png"))}},d.onerror=()=>s("Failed to load tile image"),d.src=g.dataUrl}})}function M(){const t=document.title||"Untitled",e=window.location.href,n=(document.querySelector("main, article, [role='main'], .main-content, #main-content")||document.body).cloneNode(!0);n.querySelectorAll("script, style, nav, header, footer, aside, iframe, noscript").forEach(i=>i.remove()),n.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(i=>{i.textContent=`${"#".repeat(parseInt(i.tagName[1]))} ${i.textContent?.trim()}`});const a=(n.innerText||n.textContent||"").split(` +`).map(i=>i.trim()).filter(i=>i.length>0).join(` + +`),s=new Date().toLocaleString();return{success:!0,markdown:`# ${t} + +> **Source**: ${e} +> **Captured**: ${s} + +${a}`}}function O(){const t=window.getSelection();if(!t||t.isCollapsed)return{success:!1,error:"No text selected"};const e=t.toString().trim();if(!e)return{success:!1,error:"Selection is empty"};const r=document.title||"Untitled",o=window.location.href;return{success:!0,markdown:`> Selected from [${r}](${o}) + +${e}`}}const G=S(()=>{console.log("[Eidorail] Background service worker started"),chrome.action.onClicked.addListener(async t=>{t.id&&await chrome.sidePanel.open({tabId:t.id})}),chrome.commands.onCommand.addListener(async t=>{if(t==="toggle-side-panel"){const[e]=await chrome.tabs.query({active:!0,currentWindow:!0});e?.id&&await chrome.sidePanel.open({tabId:e.id})}}),chrome.sidePanel.setPanelBehavior({openPanelOnActionClick:!0}),chrome.runtime.onMessage.addListener((t,e,r)=>{switch(console.log("[Eidorail] Received message:",t.type),t.type){case"GET_CURRENT_TAB":return chrome.tabs.query({active:!0,currentWindow:!0}).then(([o])=>{r({tab:o})}),!0;case"CAPTURE_SCREENSHOT":return k(t.tabId).then(o=>r(o)).catch(o=>r({error:o.message})),!0;case"CAPTURE_FULL_PAGE_SCREENSHOT":return t.tabId?(A(t.tabId).then(o=>r(o)).catch(o=>r({error:o.message})),!0):(r({error:"No tabId provided"}),!0);case"GET_PAGE_CONTENT":if(t.tabId)return chrome.scripting.executeScript({target:{tabId:t.tabId},func:()=>document.body.innerText}).then(o=>{r({content:o[0]?.result||""})}).catch(o=>{r({error:o.message})}),!0;break;case"GET_TABS_WITH_GROUPS":return v().then(o=>{r({tabs:o})}).catch(o=>{r({error:o.message})}),!0;case"CAPTURE_PAGE_MARKDOWN":return t.tabId?(P(t.tabId).then(o=>r(o)).catch(o=>r({error:o.message})),!0):(r({error:"No tabId provided"}),!0);case"CAPTURE_SELECTION_MARKDOWN":return t.tabId?(I(t.tabId).then(o=>r(o)).catch(o=>r({error:o.message})),!0):(r({error:"No tabId provided"}),!0);default:console.log("[Eidorail] Unknown message type:",t.type)}}),chrome.runtime.onMessageExternal.addListener((t,e,r)=>{switch(console.log("[Eidorail] External message from:",e.id,t.type),t.type){case"IMPORT_PROJECT":r({success:!0});break;case"PING":r({pong:!0,version:"0.1.0"});break;default:r({error:"Unknown message type"})}})});function R(){}globalThis.browser?.runtime?.id?globalThis.browser:globalThis.chrome;function h(t,...e){}const $={debug:(...t)=>h(console.debug,...t),log:(...t)=>h(console.log,...t),warn:(...t)=>h(console.warn,...t),error:(...t)=>h(console.error,...t)};let p;try{p=G.main(),p instanceof Promise&&console.warn("The background's main() function return a promise, but it must be synchronous")}catch(t){throw $.error("The background crashed on startup!"),t}return p})(); diff --git a/packages/extension/.output/chrome-mv3/content-scripts/claude-iframe-fix.js b/packages/extension/.output/chrome-mv3/content-scripts/claude-iframe-fix.js new file mode 100644 index 00000000000..f89c6aa9cb2 --- /dev/null +++ b/packages/extension/.output/chrome-mv3/content-scripts/claude-iframe-fix.js @@ -0,0 +1,17 @@ +var claudeIframeFix=(function(){"use strict";function i(e){return e}const o={matches:["https://claude.ai/*"],runAt:"document_start",world:"MAIN",main(){try{Object.defineProperty(window,"self",{get:()=>window.top,configurable:!0}),Object.defineProperty(window,"frameElement",{get:()=>null,configurable:!0}),Object.defineProperty(window,"parent",{get:()=>window,configurable:!0}),console.log("[Eidorail] Claude.ai iframe detection overridden")}catch(n){console.warn("[Eidorail] Could not override iframe detection:",n)}const e=document.createElement("style");e.textContent=` + /* Force sidebar toggle button to be visible */ + button[data-testid="sidebar-toggle"] svg, + button svg.opacity-0, + [aria-label*="sidebar" i] svg.opacity-0, + [aria-label*="menu" i] svg.opacity-0 { + opacity: 1 !important; + transform: scale(1) !important; + } + + /* Ensure the button container is visible too */ + button:has(svg.opacity-0) { + opacity: 1 !important; + visibility: visible !important; + } + `,document.head?document.head.appendChild(e):document.addEventListener("DOMContentLoaded",()=>{document.head.appendChild(e)})}};function a(){}function t(e,...n){}const r={debug:(...e)=>t(console.debug,...e),log:(...e)=>t(console.log,...e),warn:(...e)=>t(console.warn,...e),error:(...e)=>t(console.error,...e)};return(async()=>{try{return await o.main()}catch(e){throw r.error('The content script "claude-iframe-fix" crashed on startup!',e),e}})()})(); +claudeIframeFix; \ No newline at end of file diff --git a/packages/extension/.output/chrome-mv3/content-scripts/conversation-export.js b/packages/extension/.output/chrome-mv3/content-scripts/conversation-export.js new file mode 100644 index 00000000000..67df7fcf58f --- /dev/null +++ b/packages/extension/.output/chrome-mv3/content-scripts/conversation-export.js @@ -0,0 +1,287 @@ +var conversationExport=(function(){"use strict";function W(e){return e}function P(e){console.log("[Eidorail Export] Extracting Claude conversation...");let t="Untitled Conversation";const o=['[data-testid="conversation-title"]','button[data-testid="chat-menu-trigger"]',"h1",'[class*="ConversationTitle"]',"header h1"];for(const i of o){const a=document.querySelector(i)?.textContent?.trim();if(a&&a.length>0&&a.length<200){t=a;break}}const n=[];let s=0;const r=document.querySelectorAll('[data-testid^="chat-message"]');if(r.length>0)for(const i of r){const l=i.getAttribute("data-testid")||"",a=l.includes("human")||l.includes("user"),c=i.cloneNode(!0);c.querySelectorAll('[class*="thinking"], [class*="Thinking"], button, svg').forEach(d=>d.remove());const m=c.textContent?.trim()||"";m&&n.push({id:`msg-claude-${s++}`,role:a?"user":"assistant",content:m,timestamp:new Date().toISOString()})}if(n.length===0){const i=document.querySelectorAll(".font-user-message, .font-claude-message, [class*='human-turn'], [class*='assistant-turn']"),l=new Set;for(const a of i){if(l.has(a)||Array.from(l).some(p=>p.contains(a)||a.contains(p)))continue;l.add(a);const c=a.className||"",m=c.includes("font-user")||c.includes("human")||a.closest('[class*="human"]')!==null,d=a.cloneNode(!0);d.querySelectorAll('[class*="thinking"], button, svg').forEach(p=>p.remove());const u=d.textContent?.trim()||"";u&&n.push({id:`msg-claude-${s++}`,role:m?"user":"assistant",content:u,timestamp:new Date().toISOString()})}}return console.log("[Eidorail Export] Extracted",n.length,"Claude messages"),{id:e,title:t,messages:n,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),source:"claude.ai"}}async function L(e){try{const t=await fetch(`https://chatgpt.com/backend-api/conversation/${e}`,{credentials:"include"});if(!t.ok)return null;const o=await t.json(),n=[],s=o.mapping||{},r=Object.keys(s),i=new Map;for(const u of r){const p=s[u];p.parent&&i.set(u,p.parent)}const l=[],a=new Set;let c=o.current_node;const m=[];for(;c&&!a.has(c);)a.add(c),m.unshift(c),c=i.get(c);let d=0;for(const u of m){const p=s[u];if(!p?.message)continue;const x=p.message,y=x.author?.role;if(y!=="user"&&y!=="assistant")continue;const U=(x.content?.parts||[]).filter(J=>typeof J=="string").join(` +`).trim();U&&n.push({id:`msg-chatgpt-${d++}`,role:y,content:U,timestamp:x.create_time?new Date(x.create_time*1e3).toISOString():new Date().toISOString()})}return{id:e,title:o.title||"Untitled Conversation",messages:n,created_at:o.create_time?new Date(o.create_time*1e3).toISOString():new Date().toISOString(),updated_at:o.update_time?new Date(o.update_time*1e3).toISOString():new Date().toISOString(),source:"chatgpt.com"}}catch(t){return console.error("[Eidorail Export] API fetch failed:",t),null}}function A(e){console.log("[Eidorail Export] Extracting ChatGPT from DOM...");let t=document.title.replace(" - ChatGPT","").replace("ChatGPT","").trim()||"Untitled Conversation";const o=document.querySelector('h1, [data-testid*="title"]');o?.textContent?.trim()&&(t=o.textContent.trim());const n=[],s=document.querySelectorAll("article[data-testid]");let r=0;for(const i of s){const l=i.getAttribute("data-testid")||"",a=i.querySelector("h5, h6")?.textContent?.toLowerCase()||"",c=l.includes("user")||a.includes("you said")||a.includes("you"),m=i.querySelector('[data-message-content="true"], .markdown, .prose, [class*="markdown"], [class*="prose"]');let d="";if(m){const u=m.cloneNode(!0);u.querySelectorAll("button, svg, [role='button']").forEach(p=>p.remove()),d=u.textContent?.trim()||""}else{const u=i.cloneNode(!0);u.querySelectorAll("h5, h6, button, svg").forEach(p=>p.remove()),d=u.textContent?.trim()||""}d&&n.push({id:`msg-chatgpt-${r++}`,role:c?"user":"assistant",content:d,timestamp:new Date().toISOString()})}if(n.length===0){const i=document.querySelectorAll("article");for(const l of i){const c=(l.querySelector("h5, h6")?.textContent?.toLowerCase()||"").includes("you"),m=l.cloneNode(!0);m.querySelectorAll("h5, h6, button, svg").forEach(u=>u.remove());const d=m.textContent?.trim()||"";d&&n.push({id:`msg-chatgpt-${r++}`,role:c?"user":"assistant",content:d,timestamp:new Date().toISOString()})}}return console.log("[Eidorail Export] Extracted",n.length,"ChatGPT messages from DOM"),{id:e,title:t,messages:n,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),source:"chatgpt.com"}}async function M(e){console.log("[Eidorail Export] Extracting ChatGPT conversation...");const t=await L(e);return t&&t.messages.length>0?(console.log("[Eidorail Export] Got",t.messages.length,"messages from API"),t):A(e)}function O(e){console.log("[Eidorail Export] Extracting Gemini conversation...");let t="Untitled Conversation";const o=['div[data-test-id="conversation"].selected .conversation-title',"h1",'[class*="conversation-title"]'];for(const i of o){const l=document.querySelector(i);if(l?.textContent?.trim()){t=l.textContent.trim();break}}t=t.replace(/^Gemini\s*-\s*/i,"").trim()||"Untitled Conversation";const n=[],s=document.querySelectorAll("user-query, model-response");let r=0;for(const i of s){const a=i.tagName.toLowerCase()==="user-query",c=a?"div.query-content":"message-content",d=i.querySelector(c)?.textContent?.trim()||"";d&&n.push({id:`msg-gemini-${r++}`,role:a?"user":"assistant",content:d,timestamp:new Date().toISOString()})}return console.log("[Eidorail Export] Extracted",n.length,"Gemini messages"),{id:e,title:t,messages:n,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),source:"gemini.google.com"}}async function S(e,t){switch(e){case"claude":return P(t);case"chatgpt":return await M(t);case"gemini":return O(t);default:throw new Error(`Unsupported platform for export: ${e}`)}}function D(e){return new Promise(t=>{const o=[];switch(e){case"claude":o.push('[data-testid^="chat-message"]',".font-user-message",".font-claude-message",'[class*="human-turn"]','[class*="assistant-turn"]');break;case"chatgpt":o.push("article[data-testid]","article","[data-message-author-role]",'[class*="markdown"]');break;case"gemini":o.push("user-query","model-response","message-content");break;default:t();return}const n=()=>{for(const r of o)if(document.querySelector(r))return!0;return!1};if(n()){setTimeout(t,500);return}const s=new MutationObserver(()=>{n()&&(s.disconnect(),setTimeout(t,500))});s.observe(document.body,{childList:!0,subtree:!0}),setTimeout(()=>{s.disconnect(),t()},15e3)})}function C(e){return e.replace(/[^a-z0-9\s-]/gi,"_").replace(/\s+/g,"_").substring(0,100)}function I(e){const t=e.getFullYear(),o=String(e.getMonth()+1).padStart(2,"0"),n=String(e.getDate()).padStart(2,"0"),s=String(e.getHours()).padStart(2,"0"),r=String(e.getMinutes()).padStart(2,"0"),i=String(e.getSeconds()).padStart(2,"0");return`${t}-${o}-${n}_${s}-${r}-${i}`}function _(e,t){const o=t&&t.size>0?e.messages.filter(c=>t.has(c.id)):e.messages,n=`--- +title: ${e.title} +date: ${e.created_at} +updated: ${e.updated_at} +source: ${e.source||"unknown"} +exporter: eidorail-v1.0 +message_count: ${o.length} +conversation_id: ${e.id} +${e.project_uuid?`project_id: ${e.project_uuid}`:""} +--- + +`;let s=`# ${e.title} + +`,r=0;for(const c of o)c.role==="user"?(r++,s+=`## ${r}. User + +${c.content} + +`):(s+=`### Assistant + +${c.content} + +`,s+=`--- + +`);const i=n+s,l=I(new Date),a=`${C(e.title)}_${l}.md`;return{content:i,filename:a,mimeType:"text/markdown"}}function N(e,t){const o=t&&t.size>0?e.messages.filter(l=>t.has(l.id)):e.messages,n={...e,messages:o,exporter:"eidorail-v1.0",exported_at:new Date().toISOString()},s=JSON.stringify(n,null,2),r=I(new Date),i=`${C(e.title)}_${r}.json`;return{content:s,filename:i,mimeType:"application/json"}}function F(e,t,o){const n=new Blob([t],{type:o}),s=URL.createObjectURL(n),r=document.createElement("a");r.href=s,r.download=e,r.style.display="none",document.body.appendChild(r),r.click(),setTimeout(()=>{document.body.removeChild(r),URL.revokeObjectURL(s)},100)}async function q(e){try{return await navigator.clipboard.writeText(e),!0}catch{const t=document.createElement("textarea");t.value=e,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();const o=document.execCommand("copy");return document.body.removeChild(t),o}}const w={opencode:{name:"OpenCode",hostnames:["localhost:4096"],conversationUrlPattern:null,exportEnabled:!1},claude:{name:"Claude",hostnames:["claude.ai"],conversationUrlPattern:/\/chat\/([^/?]+)/,exportEnabled:!0},chatgpt:{name:"ChatGPT",hostnames:["chat.openai.com","chatgpt.com"],conversationUrlPattern:/\/c\/([^/?]+)/,exportEnabled:!0},gemini:{name:"Gemini",hostnames:["gemini.google.com"],conversationUrlPattern:/\/app\/([^/?]+)/,exportEnabled:!0},perplexity:{name:"Perplexity",hostnames:["perplexity.ai"],conversationUrlPattern:/\/search\/([^/?]+)/,exportEnabled:!0},poe:{name:"Poe",hostnames:["poe.com"],conversationUrlPattern:/\/chat\/([^/?]+)/,exportEnabled:!0},you:{name:"You.com",hostnames:["you.com"],conversationUrlPattern:null,exportEnabled:!1},huggingface:{name:"HuggingFace",hostnames:["huggingface.co"],conversationUrlPattern:null,exportEnabled:!1},copilot:{name:"Copilot",hostnames:["copilot.microsoft.com"],conversationUrlPattern:null,exportEnabled:!1},deepseek:{name:"DeepSeek",hostnames:["chat.deepseek.com"],conversationUrlPattern:/\/chat\/([^/?]+)/,exportEnabled:!0},openrouter:{name:"OpenRouter",hostnames:["openrouter.ai"],conversationUrlPattern:null,exportEnabled:!1}};function B(e){const t=typeof window<"u"?window.location.hostname:null;if(!t)return null;for(const[o,n]of Object.entries(w))if(n.hostnames.some(s=>t.includes(s)))return o;return null}function k(e,t){const o=typeof window<"u"?window.location.pathname:null;if(!o)return null;const n=w[e];if(!n.conversationUrlPattern)return null;const s=o.match(n.conversationUrlPattern);return s?s[1]:null}function j(e){return w[e]?.exportEnabled??!1}const G={matches:["https://claude.ai/*","https://chat.openai.com/*","https://chatgpt.com/*","https://gemini.google.com/*"],async main(){console.log("[Eidorail Export] Content script loaded");const e=B();if(!e){console.log("[Eidorail Export] Unknown platform, skipping");return}if(console.log("[Eidorail Export] Detected platform:",e),!j(e)){console.log("[Eidorail Export] Export not supported for platform:",e);return}v(e);let t=location.href;new MutationObserver(()=>{location.href!==t&&(t=location.href,console.log("[Eidorail Export] URL changed:",t),T(),v(e))}).observe(document.body,{childList:!0,subtree:!0}),window.addEventListener("popstate",()=>{console.log("[Eidorail Export] Popstate event"),T(),v(e)})}};function v(e){const t=k(e);if(!t){console.log("[Eidorail Export] Not a conversation page, skipping");return}console.log("[Eidorail Export] Conversation ID:",t),D(e).then(()=>{console.log("[Eidorail Export] Conversation loaded, injecting UI"),R(e,t)})}function T(){const e=document.getElementById("eidorail-export-root");e&&e.remove()}function R(e,t){if(document.getElementById("eidorail-export-root"))return;const o=document.createElement("div");o.id="eidorail-export-root",document.body.appendChild(o);const n=o.attachShadow({mode:"open"});new z(n,e,t).render()}class z{shadow;platform;conversationId;conversation=null;selectedMessageIds=new Set;constructor(t,o,n){this.shadow=t,this.platform=o,this.conversationId=n}render(){const t=this.getStyles(),o=this.getHTML();this.shadow.innerHTML=` + + ${o} + `,this.attachEventListeners(),this.loadConversation()}getStyles(){return` + :host { + all: initial; + } + + .export-container { + position: fixed; + top: 80px; + right: 20px; + z-index: 9999; + font-family: system-ui, -apple-system, 'Segoe UI', sans-serif; + font-size: 14px; + } + + .export-icon-button { + width: 44px; + height: 44px; + border-radius: 50%; + background: #ffffff; + border: 1px solid #e5e7eb; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.2s ease; + box-shadow: 0 2px 8px rgba(0,0,0,0.1); + color: #374151; + } + + .export-icon-button:hover { + background: #f9fafb; + transform: scale(1.05); + box-shadow: 0 4px 12px rgba(0,0,0,0.15); + } + + .export-icon-button.menu-open { + background: #f3f4f6; + } + + .dropdown-menu { + position: absolute; + top: 52px; + right: 0; + background: #ffffff; + border: 1px solid #e5e7eb; + border-radius: 10px; + box-shadow: 0 4px 16px rgba(0,0,0,0.12); + min-width: 200px; + opacity: 0; + visibility: hidden; + transform: translateY(-8px) scale(0.95); + transform-origin: top right; + transition: all 0.15s ease; + overflow: hidden; + } + + .dropdown-menu.open { + opacity: 1; + visibility: visible; + transform: translateY(0) scale(1); + } + + .menu-section { + padding: 6px 0; + } + + .menu-section:not(:last-child) { + border-bottom: 1px solid #e5e7eb; + } + + .menu-section-label { + padding: 6px 14px; + font-size: 11px; + font-weight: 600; + color: #9ca3af; + text-transform: uppercase; + letter-spacing: 0.5px; + } + + .menu-item { + display: flex; + align-items: center; + gap: 10px; + padding: 10px 14px; + cursor: pointer; + transition: background 0.15s ease; + color: #374151; + border: none; + background: none; + width: 100%; + text-align: left; + font-size: 14px; + font-family: inherit; + } + + .menu-item:hover { + background: #f3f4f6; + } + + .menu-item:active { + background: #e5e7eb; + } + + .menu-item svg { + flex-shrink: 0; + color: #6b7280; + } + + .menu-item span { + flex: 1; + } + + .menu-item.success { + color: #059669; + } + + .menu-item.success svg { + color: #059669; + } + + .toast { + position: fixed; + bottom: 24px; + right: 24px; + background: #1f2937; + color: #ffffff; + padding: 12px 20px; + border-radius: 8px; + box-shadow: 0 4px 12px rgba(0,0,0,0.2); + display: flex; + align-items: center; + gap: 8px; + font-size: 14px; + opacity: 0; + visibility: hidden; + transform: translateY(8px); + transition: all 0.2s ease; + z-index: 10000; + } + + .toast.show { + opacity: 1; + visibility: visible; + transform: translateY(0); + } + + .toast.success { + background: #059669; + } + + .toast.error { + background: #dc2626; + } + + @media (prefers-color-scheme: dark) { + .export-icon-button { + background: #374151; + border-color: #4b5563; + color: #e5e7eb; + } + + .export-icon-button:hover { + background: #4b5563; + } + + .export-icon-button.menu-open { + background: #4b5563; + } + + .dropdown-menu { + background: #1f2937; + border-color: #374151; + box-shadow: 0 4px 16px rgba(0,0,0,0.3); + } + + .menu-section:not(:last-child) { + border-color: #374151; + } + + .menu-section-label { + color: #6b7280; + } + + .menu-item { + color: #e5e7eb; + } + + .menu-item:hover { + background: #374151; + } + + .menu-item:active { + background: #4b5563; + } + + .menu-item svg { + color: #9ca3af; + } + + .menu-item.success { + color: #34d399; + } + + .menu-item.success svg { + color: #34d399; + } + + .toast { + background: #374151; + } + } + `}getHTML(){return` +
+ + + + +
+
+ `}attachEventListeners(){const t=this.shadow.getElementById("icon-btn"),o=this.shadow.getElementById("dropdown");t?.addEventListener("click",n=>{n.stopPropagation(),o?.classList.contains("open")?this.closeMenu():this.openMenu()}),document.addEventListener("click",()=>{this.closeMenu()}),this.shadow.getElementById("copy-md")?.addEventListener("click",()=>{this.handleAction("copy","markdown")}),this.shadow.getElementById("copy-json")?.addEventListener("click",()=>{this.handleAction("copy","json")}),this.shadow.getElementById("download-md")?.addEventListener("click",()=>{this.handleAction("download","markdown")}),this.shadow.getElementById("download-json")?.addEventListener("click",()=>{this.handleAction("download","json")})}openMenu(){const t=this.shadow.getElementById("icon-btn"),o=this.shadow.getElementById("dropdown");t?.classList.add("menu-open"),o?.classList.add("open")}closeMenu(){const t=this.shadow.getElementById("icon-btn"),o=this.shadow.getElementById("dropdown");t?.classList.remove("menu-open"),o?.classList.remove("open")}showToast(t,o="success"){const n=this.shadow.getElementById("toast");n&&(n.textContent=t,n.className=`toast show ${o}`,setTimeout(()=>{n.classList.remove("show")},2e3))}async handleAction(t,o){this.closeMenu();try{const n=await this.extractFreshConversation();if(!n||n.messages.length===0){this.showToast("No messages found","error");return}const s=new Set(n.messages.map(i=>i.id)),r=o==="markdown"?_(n,s):N(n,s);t==="copy"?await q(r.content)?this.showToast(`Copied ${n.messages.length} messages as ${o==="markdown"?"Markdown":"JSON"}`):this.showToast("Failed to copy","error"):(F(r.filename,r.content,r.mimeType),this.showToast(`Downloaded ${r.filename}`))}catch(n){console.error("[Eidorail Export] Action failed:",n),this.showToast(`Failed to ${t}`,"error")}}async extractFreshConversation(){try{const t=k(this.platform)||this.conversationId,o=await S(this.platform,t);return console.log("[Eidorail Export] Fresh extraction:",o.messages.length,"messages"),o}catch(t){return console.error("[Eidorail Export] Extraction failed:",t),null}}async loadConversation(){try{if(this.conversation=await S(this.platform,this.conversationId),console.log("[Eidorail Export] Initial load:",this.conversation?.messages.length,"messages"),this.conversation)for(const t of this.conversation.messages)this.selectedMessageIds.add(t.id)}catch(t){console.error("[Eidorail Export] Failed to load conversation:",t)}}}const $=globalThis.browser?.runtime?.id?globalThis.browser:globalThis.chrome;function h(e,...t){}const H={debug:(...e)=>h(console.debug,...e),log:(...e)=>h(console.log,...e),warn:(...e)=>h(console.warn,...e),error:(...e)=>h(console.error,...e)};class b extends Event{constructor(t,o){super(b.EVENT_NAME,{}),this.newUrl=t,this.oldUrl=o}static EVENT_NAME=E("wxt:locationchange")}function E(e){return`${$?.runtime?.id}:conversation-export:${e}`}function V(e){let t,o;return{run(){t==null&&(o=new URL(location.href),t=e.setInterval(()=>{let n=new URL(location.href);n.href!==o.href&&(window.dispatchEvent(new b(n,o)),o=n)},1e3))}}}class g{constructor(t,o){this.contentScriptName=t,this.options=o,this.abortController=new AbortController,this.isTopFrame?(this.listenForNewerScripts({ignoreFirstEvent:!0}),this.stopOldScripts()):this.listenForNewerScripts()}static SCRIPT_STARTED_MESSAGE_TYPE=E("wxt:content-script-started");isTopFrame=window.self===window.top;abortController;locationWatcher=V(this);receivedMessageIds=new Set;get signal(){return this.abortController.signal}abort(t){return this.abortController.abort(t)}get isInvalid(){return $.runtime.id==null&&this.notifyInvalidated(),this.signal.aborted}get isValid(){return!this.isInvalid}onInvalidated(t){return this.signal.addEventListener("abort",t),()=>this.signal.removeEventListener("abort",t)}block(){return new Promise(()=>{})}setInterval(t,o){const n=setInterval(()=>{this.isValid&&t()},o);return this.onInvalidated(()=>clearInterval(n)),n}setTimeout(t,o){const n=setTimeout(()=>{this.isValid&&t()},o);return this.onInvalidated(()=>clearTimeout(n)),n}requestAnimationFrame(t){const o=requestAnimationFrame((...n)=>{this.isValid&&t(...n)});return this.onInvalidated(()=>cancelAnimationFrame(o)),o}requestIdleCallback(t,o){const n=requestIdleCallback((...s)=>{this.signal.aborted||t(...s)},o);return this.onInvalidated(()=>cancelIdleCallback(n)),n}addEventListener(t,o,n,s){o==="wxt:locationchange"&&this.isValid&&this.locationWatcher.run(),t.addEventListener?.(o.startsWith("wxt:")?E(o):o,n,{...s,signal:this.signal})}notifyInvalidated(){this.abort("Content script context invalidated"),H.debug(`Content script "${this.contentScriptName}" context invalidated`)}stopOldScripts(){window.postMessage({type:g.SCRIPT_STARTED_MESSAGE_TYPE,contentScriptName:this.contentScriptName,messageId:Math.random().toString(36).slice(2)},"*")}verifyScriptStartedEvent(t){const o=t.data?.type===g.SCRIPT_STARTED_MESSAGE_TYPE,n=t.data?.contentScriptName===this.contentScriptName,s=!this.receivedMessageIds.has(t.data?.messageId);return o&&n&&s}listenForNewerScripts(t){let o=!0;const n=s=>{if(this.verifyScriptStartedEvent(s)){this.receivedMessageIds.add(s.data.messageId);const r=o;if(o=!1,r&&t?.ignoreFirstEvent)return;this.notifyInvalidated()}};addEventListener("message",n),this.onInvalidated(()=>removeEventListener("message",n))}}function Q(){}function f(e,...t){}const Y={debug:(...e)=>f(console.debug,...e),log:(...e)=>f(console.log,...e),warn:(...e)=>f(console.warn,...e),error:(...e)=>f(console.error,...e)};return(async()=>{try{const{main:e,...t}=G,o=new g("conversation-export",t);return await e(o)}catch(e){throw Y.error('The content script "conversation-export" crashed on startup!',e),e}})()})(); +conversationExport; \ No newline at end of file diff --git a/packages/extension/.output/chrome-mv3/content-scripts/opencode-compact.js b/packages/extension/.output/chrome-mv3/content-scripts/opencode-compact.js new file mode 100644 index 00000000000..d1de5003474 --- /dev/null +++ b/packages/extension/.output/chrome-mv3/content-scripts/opencode-compact.js @@ -0,0 +1,441 @@ +var opencodeCompact=(function(){"use strict";function C(t){return t}const f={matches:["http://localhost:4096/*","http://127.0.0.1:4096/*"],runAt:"document_start",allFrames:!0,main(){new URLSearchParams(window.location.search).get("eidorail")==="compact"&&(console.log("[Eidorail] OpenCode compact mode activated"),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{u(),h()}):(u(),h()))}};function u(){const t=document.createElement("style");t.id="eidorail-compact-styles",t.textContent=` + /* =========================================== + Eidorail Compact Mode for OpenCode Desktop + Applied when embedded in browser extension + =========================================== */ + + /* ---- CORE: Left sidebar as toggleable overlay ---- */ + /* Sidebar hidden by default, shown as overlay when toggled */ + body.eidorail-compact > div > div > aside, + body.eidorail-compact [data-sidebar], + body.eidorail-compact .w-12.border-r, + body.eidorail-compact > div > div > div:first-child[class*="border-r"] { + display: none !important; + } + + /* Mobile sidebar (w-72) - position as overlay when open */ + body.eidorail-compact .fixed.inset-y-0.left-0.z-50 { + transform: translateX(-100%); + transition: transform 0.2s ease; + } + + body.eidorail-compact.sidebar-open .fixed.inset-y-0.left-0.z-50 { + transform: translateX(0) !important; + display: flex !important; + } + + /* Backdrop when sidebar is open */ + body.eidorail-compact.sidebar-open::after { + content: ""; + position: fixed; + inset: 0; + background: rgba(0, 0, 0, 0.5); + z-index: 49; + pointer-events: auto; + } + + /* ---- HEADER: Optimize for narrow width ---- */ + body.eidorail-compact header { + padding-left: 12px !important; + padding-right: 12px !important; + gap: 8px !important; + } + + /* De-emphasize the orange Home/Mark link - make it subtle */ + body.eidorail-compact header a[href="/"] svg, + body.eidorail-compact header a:first-child svg { + width: 20px !important; + height: 20px !important; + opacity: 0.7; + } + + body.eidorail-compact header a[href="/"]:hover svg, + body.eidorail-compact header a:first-child:hover svg { + opacity: 1; + } + + /* Project/session selectors - compact them */ + body.eidorail-compact header button[class*="text-14"] { + padding: 4px 8px !important; + font-size: 13px !important; + } + + /* Hide unnecessary header elements on very narrow widths */ + @media (max-width: 350px) { + body.eidorail-compact header > a:first-child { + display: none !important; + } + } + + /* ---- MAIN CONTENT: Full width ---- */ + body.eidorail-compact main { + width: 100% !important; + max-width: 100% !important; + margin-left: 0 !important; + } + + /* ---- HOME PAGE: Improve empty state ---- */ + /* Recent projects list - better hover states */ + body.eidorail-compact [class*="group/item"] { + border-radius: 8px !important; + transition: background-color 0.15s ease !important; + } + + body.eidorail-compact [class*="group/item"]:hover { + background-color: var(--color-background-surface, rgba(255,255,255,0.05)) !important; + } + + /* Project items - add visual affordance */ + body.eidorail-compact [class*="group/item"]::before { + content: ""; + position: absolute; + left: 0; + top: 50%; + transform: translateY(-50%); + width: 3px; + height: 0; + background: var(--color-text-brand, #f97316); + border-radius: 0 2px 2px 0; + transition: height 0.15s ease; + } + + body.eidorail-compact [class*="group/item"]:hover::before { + height: 60%; + } + + /* ---- CHAT/SESSION: Optimize message display ---- */ + body.eidorail-compact [class*="message"], + body.eidorail-compact [class*="Message"] { + padding-left: 12px !important; + padding-right: 12px !important; + } + + /* Input area - ensure it's prominent */ + body.eidorail-compact textarea { + font-size: 14px !important; + min-height: 60px !important; + } + + /* ---- ACCESSIBILITY: Larger touch targets ---- */ + body.eidorail-compact button { + min-height: 36px !important; + min-width: 36px !important; + } + + body.eidorail-compact a[href] { + min-height: 32px !important; + } + + /* ---- EMPTY STATE OVERLAY ---- */ + /* Shows helpful guidance when no session is active */ + .eidorail-welcome-overlay { + position: fixed; + inset: 0; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 24px; + text-align: center; + background: var(--color-background-base, #0a0a0a); + z-index: 100; + opacity: 1; + transition: opacity 0.3s ease; + pointer-events: auto; + } + + .eidorail-welcome-overlay.hidden { + opacity: 0; + pointer-events: none; + } + + .eidorail-welcome-overlay h2 { + font-size: 18px; + font-weight: 600; + color: var(--color-text-strong, #fff); + margin: 0 0 8px 0; + } + + .eidorail-welcome-overlay p { + font-size: 14px; + color: var(--color-text-dimmed, #888); + margin: 0 0 20px 0; + max-width: 280px; + line-height: 1.5; + } + + .eidorail-welcome-overlay .quick-actions { + display: flex; + flex-direction: column; + gap: 8px; + width: 100%; + max-width: 240px; + } + + .eidorail-welcome-overlay button { + width: 100%; + padding: 12px 16px; + border-radius: 8px; + border: 1px solid var(--color-border-base, #333); + background: var(--color-background-surface, #1a1a1a); + color: var(--color-text-base, #fff); + font-size: 14px; + cursor: pointer; + transition: all 0.15s ease; + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + } + + .eidorail-welcome-overlay button:hover { + background: var(--color-background-hover, #252525); + border-color: var(--color-border-strong, #444); + } + + .eidorail-welcome-overlay button.primary { + background: var(--color-text-brand, #f97316); + border-color: transparent; + color: #fff; + } + + .eidorail-welcome-overlay button.primary:hover { + background: #ea580c; + } + + .eidorail-welcome-overlay .keyboard-hint { + margin-top: 16px; + font-size: 12px; + color: var(--color-text-dimmed, #666); + } + + .eidorail-welcome-overlay kbd { + display: inline-block; + padding: 2px 6px; + border-radius: 4px; + background: var(--color-background-surface, #1a1a1a); + border: 1px solid var(--color-border-base, #333); + font-family: inherit; + font-size: 11px; + } + + /* ---- FLOATING MENU BUTTON ---- */ + /* Quick access to sidebar functions without the rail */ + .eidorail-menu-button { + position: fixed; + bottom: 12px; + left: 12px; + z-index: 1001; + width: 40px; + height: 40px; + border-radius: 10px; + background: var(--color-background-surface, #1a1a1a); + border: 1px solid var(--color-border-base, #333); + color: var(--color-text-base, #fff); + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.2s ease; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); + } + + .eidorail-menu-button:hover { + background: var(--color-background-hover, #252525); + transform: scale(1.05); + } + + .eidorail-menu-button svg { + width: 18px; + height: 18px; + } + + + + /* ---- RESPONSIVE ADJUSTMENTS ---- */ + @media (max-width: 400px) { + body.eidorail-compact header { + padding-left: 8px !important; + padding-right: 8px !important; + height: 44px !important; + } + + body.eidorail-compact header button span:not(:first-child) { + display: none !important; + } + + .eidorail-welcome-overlay { + padding: 16px; + } + + .eidorail-welcome-overlay h2 { + font-size: 16px; + } + } + + /* ---- INPUT AREA: Dock to bottom ---- */ + body.eidorail-compact .absolute.inset-x-0.bottom-4 { + bottom: 0 !important; + padding-left: 8px !important; + padding-right: 8px !important; + padding-bottom: 8px !important; + background: var(--color-background-base, #0a0a0a) !important; + border-top: 1px solid var(--color-border-weak-base, #333); + } + + body.eidorail-compact [contenteditable="true"] { + padding-left: 12px !important; + } + + /* ---- HEADER: Compact padding ---- */ + body.eidorail-compact header > div { + padding-left: 48px !important; + padding-right: 12px !important; + } + + /* ---- MENU BUTTON: Top-left position ---- */ + .eidorail-menu-button { + bottom: auto !important; + right: auto !important; + top: 5px !important; + left: 6px !important; + width: 34px !important; + height: 34px !important; + background: transparent !important; + border: none !important; + box-shadow: none !important; + } + + .eidorail-menu-button:hover { + background: var(--color-background-surface, #1a1a1a) !important; + border: 1px solid var(--color-border-base, #333) !important; + } + + + + /* ---- SIDEBAR: Overlay mode ---- */ + body.eidorail-compact .fixed.inset-y-0.left-0.w-72, + body.eidorail-compact .xl\\:hidden > .fixed.inset-y-0.left-0, + body.eidorail-compact [class*="fixed"][class*="inset-y-0"][class*="left-0"][class*="w-"] { + transform: translateX(-100%); + transition: transform 0.2s ease; + z-index: 50 !important; + } + + body.eidorail-compact .eidorail-sidebar-visible, + body.eidorail-compact.sidebar-open .fixed.inset-y-0.left-0.w-72, + body.eidorail-compact.sidebar-open .xl\\:hidden > .fixed.inset-y-0.left-0 { + transform: translateX(0) !important; + display: flex !important; + } + + /* ---- MOBILE LAYOUT: No bottom gap ---- */ + body.eidorail-compact .md\\:hidden.flex-1 { + padding-bottom: 0 !important; + } + + /* ---- SCROLLBAR: Subtle styling ---- */ + body.eidorail-compact ::-webkit-scrollbar { + width: 6px; + } + + body.eidorail-compact ::-webkit-scrollbar-track { + background: transparent; + } + + body.eidorail-compact ::-webkit-scrollbar-thumb { + background: var(--color-border-base, #333); + border-radius: 3px; + } + + body.eidorail-compact ::-webkit-scrollbar-thumb:hover { + background: var(--color-border-strong, #444); + } + + /* ---- HOME PAGE: Reduce vertical spacing ---- */ + body.eidorail-compact main > div.mt-55, + body.eidorail-compact main > div[class*="mt-55"] { + margin-top: 24px !important; + width: 100% !important; + max-width: 100% !important; + margin-left: 0 !important; + margin-right: 0 !important; + } + + body.eidorail-compact main > div.mt-55 > svg, + body.eidorail-compact main > div[class*="mt-55"] > svg { + max-width: 180px !important; + height: auto !important; + } + + body.eidorail-compact main div.mt-20 { + margin-top: 16px !important; + } + + body.eidorail-compact main div.mt-30 { + margin-top: 24px !important; + } + + body.eidorail-compact main [class~="mt-20"][class~="w-full"][class~="flex"][class~="flex-col"][class~="gap-4"] + > [class~="flex"][class~="gap-2"][class~="items-center"][class~="justify-between"][class~="pl-3"] { + flex-wrap: wrap !important; + gap: 8px !important; + align-items: flex-start; + } + + body.eidorail-compact main [class~="mt-20"][class~="w-full"][class~="flex"][class~="flex-col"][class~="gap-4"] + > [class~="flex"][class~="gap-2"][class~="items-center"][class~="justify-between"][class~="pl-3"] + > button[class~="pl-2"][class~="pr-3"] { + width: 100% !important; + } + + /* Ensure home page content fits without scrolling at narrow widths */ + @media (max-height: 600px) { + body.eidorail-compact main > div.mt-55, + body.eidorail-compact main > div[class*="mt-55"] { + margin-top: 12px !important; + } + + body.eidorail-compact main > div.mt-55 > svg, + body.eidorail-compact main > div[class*="mt-55"] > svg { + max-width: 120px !important; + } + + body.eidorail-compact main div.mt-20, + body.eidorail-compact main div.mt-30 { + margin-top: 12px !important; + } + } + + /* Extra compact for very narrow viewports */ + @media (max-width: 350px) { + body.eidorail-compact main > div.mt-55, + body.eidorail-compact main > div[class*="mt-55"] { + margin-top: 16px !important; + } + + body.eidorail-compact main > div.mt-55 > svg, + body.eidorail-compact main > div[class*="mt-55"] > svg { + max-width: 140px !important; + } + } + `,document.head?document.head.appendChild(t):document.documentElement.appendChild(t)}function h(){document.body.classList.add("eidorail-compact"),v(),y(),w(),S(),k()}function v(){try{const t="default-layout.v7",e=localStorage.getItem(t);if(e){const o=JSON.parse(e);o.sidebar&&o.sidebar.opened&&(o.sidebar.opened=!1,localStorage.setItem(t,JSON.stringify(o)),console.log("[Eidorail] Ensured sidebar is closed"))}}catch(t){console.warn("[Eidorail] Could not modify sidebar state:",t)}}function y(){if(document.querySelector(".eidorail-menu-button"))return;const t=document.createElement("button");t.className="eidorail-menu-button",t.title="Toggle sidebar",t.innerHTML=` + + + + `,t.addEventListener("click",e=>{e.stopPropagation(),x()}),document.body.appendChild(t)}function l(){const t=[".fixed.inset-y-0.left-0.w-72",".fixed.inset-y-0.left-0.z-50",'[class*="fixed"][class*="inset-y-0"][class*="left-0"][class*="w-"]',"aside.fixed",'[data-sidebar="true"]'];for(const e of t){const o=document.querySelector(e);if(o&&o.offsetWidth>50)return o}return null}function x(){const t=l();if(!t){console.warn("[Eidorail] Sidebar element not found");return}const e=document.body.classList.toggle("sidebar-open");t.classList.toggle("eidorail-sidebar-visible",e),p(e)}function p(t){try{const e="default-layout.v7",o=localStorage.getItem(e),a=o?JSON.parse(o):{};a.sidebar=a.sidebar||{},a.sidebar.opened=t,localStorage.setItem(e,JSON.stringify(a)),window.dispatchEvent(new StorageEvent("storage",{key:e}))}catch(e){console.warn("[Eidorail] Could not update sidebar state:",e)}}function w(){document.addEventListener("click",t=>{if(!document.body.classList.contains("sidebar-open"))return;const e=t.target,o=l(),a=document.querySelector(".eidorail-menu-button");o?.contains(e)||a?.contains(e)||(o?.classList.remove("eidorail-sidebar-visible"),document.body.classList.remove("sidebar-open"),p(!1))})}function S(){const t=window.location.pathname==="/"||window.location.pathname==="",e=window.location.pathname.includes("/session/");t&&!e&&(document.querySelector('[class*="group/item"]')||E())}function E(){if(document.querySelector(".eidorail-welcome-overlay"))return;const t=document.createElement("div");t.className="eidorail-welcome-overlay",t.innerHTML=` +

Welcome to OpenCode

+

Your AI coding assistant, right in your browser sidebar.

+
+ + +
+
+ Press + K to open command palette +
+ `,t.addEventListener("click",o=>{const i=o.target.closest("button[data-action]");if(!i)return;const c=i.dataset.action;if(t.classList.add("hidden"),setTimeout(()=>t.remove(),300),c==="start-chat"){const r=document.querySelector("textarea");r&&r.focus()}else if(c==="open-project"){const r=document.querySelector('button:has(svg[class*="folder"])');r&&r.click()}}),document.body.appendChild(t);const e=()=>{t.classList.add("hidden"),setTimeout(()=>t.remove(),300),document.removeEventListener("keydown",e)};document.addEventListener("keydown",e)}function k(){let t=window.location.pathname;const e=()=>{if(window.location.pathname!==t){t=window.location.pathname;const a=document.querySelector(".eidorail-welcome-overlay");a&&window.location.pathname.includes("/session/")&&a.classList.add("hidden")}};new MutationObserver(e).observe(document.body,{childList:!0,subtree:!0}),setInterval(e,500),document.addEventListener("keydown",a=>{a.key==="Escape"&&document.body.classList.contains("sidebar-open")&&(l()?.classList.remove("eidorail-sidebar-visible"),document.body.classList.remove("sidebar-open"),p(!1))})}const g=globalThis.browser?.runtime?.id?globalThis.browser:globalThis.chrome;function n(t,...e){}const I={debug:(...t)=>n(console.debug,...t),log:(...t)=>n(console.log,...t),warn:(...t)=>n(console.warn,...t),error:(...t)=>n(console.error,...t)};class m extends Event{constructor(e,o){super(m.EVENT_NAME,{}),this.newUrl=e,this.oldUrl=o}static EVENT_NAME=b("wxt:locationchange")}function b(t){return`${g?.runtime?.id}:opencode-compact:${t}`}function T(t){let e,o;return{run(){e==null&&(o=new URL(location.href),e=t.setInterval(()=>{let a=new URL(location.href);a.href!==o.href&&(window.dispatchEvent(new m(a,o)),o=a)},1e3))}}}class s{constructor(e,o){this.contentScriptName=e,this.options=o,this.abortController=new AbortController,this.isTopFrame?(this.listenForNewerScripts({ignoreFirstEvent:!0}),this.stopOldScripts()):this.listenForNewerScripts()}static SCRIPT_STARTED_MESSAGE_TYPE=b("wxt:content-script-started");isTopFrame=window.self===window.top;abortController;locationWatcher=T(this);receivedMessageIds=new Set;get signal(){return this.abortController.signal}abort(e){return this.abortController.abort(e)}get isInvalid(){return g.runtime.id==null&&this.notifyInvalidated(),this.signal.aborted}get isValid(){return!this.isInvalid}onInvalidated(e){return this.signal.addEventListener("abort",e),()=>this.signal.removeEventListener("abort",e)}block(){return new Promise(()=>{})}setInterval(e,o){const a=setInterval(()=>{this.isValid&&e()},o);return this.onInvalidated(()=>clearInterval(a)),a}setTimeout(e,o){const a=setTimeout(()=>{this.isValid&&e()},o);return this.onInvalidated(()=>clearTimeout(a)),a}requestAnimationFrame(e){const o=requestAnimationFrame((...a)=>{this.isValid&&e(...a)});return this.onInvalidated(()=>cancelAnimationFrame(o)),o}requestIdleCallback(e,o){const a=requestIdleCallback((...i)=>{this.signal.aborted||e(...i)},o);return this.onInvalidated(()=>cancelIdleCallback(a)),a}addEventListener(e,o,a,i){o==="wxt:locationchange"&&this.isValid&&this.locationWatcher.run(),e.addEventListener?.(o.startsWith("wxt:")?b(o):o,a,{...i,signal:this.signal})}notifyInvalidated(){this.abort("Content script context invalidated"),I.debug(`Content script "${this.contentScriptName}" context invalidated`)}stopOldScripts(){window.postMessage({type:s.SCRIPT_STARTED_MESSAGE_TYPE,contentScriptName:this.contentScriptName,messageId:Math.random().toString(36).slice(2)},"*")}verifyScriptStartedEvent(e){const o=e.data?.type===s.SCRIPT_STARTED_MESSAGE_TYPE,a=e.data?.contentScriptName===this.contentScriptName,i=!this.receivedMessageIds.has(e.data?.messageId);return o&&a&&i}listenForNewerScripts(e){let o=!0;const a=i=>{if(this.verifyScriptStartedEvent(i)){this.receivedMessageIds.add(i.data.messageId);const c=o;if(o=!1,c&&e?.ignoreFirstEvent)return;this.notifyInvalidated()}};addEventListener("message",a),this.onInvalidated(()=>removeEventListener("message",a))}}function M(){}function d(t,...e){}const L={debug:(...t)=>d(console.debug,...t),log:(...t)=>d(console.log,...t),warn:(...t)=>d(console.warn,...t),error:(...t)=>d(console.error,...t)};return(async()=>{try{const{main:t,...e}=f,o=new s("opencode-compact",e);return await t(o)}catch(t){throw L.error('The content script "opencode-compact" crashed on startup!',t),t}})()})(); +opencodeCompact; \ No newline at end of file diff --git a/packages/extension/.output/chrome-mv3/content-scripts/page-context.js b/packages/extension/.output/chrome-mv3/content-scripts/page-context.js new file mode 100644 index 00000000000..47ff0ac189d --- /dev/null +++ b/packages/extension/.output/chrome-mv3/content-scripts/page-context.js @@ -0,0 +1,78 @@ +var pageContext=(function(){"use strict";function yt(r){return r}var Y={exports:{}},me;function $e(){return me||(me=1,(function(r){function a(e,t){if(t&&t.documentElement)e=t,t=arguments[2];else if(!e||!e.documentElement)throw new Error("First argument to Readability constructor should be a document object.");if(t=t||{},this._doc=e,this._docJSDOMParser=this._doc.firstChild.__JSDOMParser__,this._articleTitle=null,this._articleByline=null,this._articleDir=null,this._articleSiteName=null,this._attempts=[],this._metadata={},this._debug=!!t.debug,this._maxElemsToParse=t.maxElemsToParse||this.DEFAULT_MAX_ELEMS_TO_PARSE,this._nbTopCandidates=t.nbTopCandidates||this.DEFAULT_N_TOP_CANDIDATES,this._charThreshold=t.charThreshold||this.DEFAULT_CHAR_THRESHOLD,this._classesToPreserve=this.CLASSES_TO_PRESERVE.concat(t.classesToPreserve||[]),this._keepClasses=!!t.keepClasses,this._serializer=t.serializer||function(i){return i.innerHTML},this._disableJSONLD=!!t.disableJSONLD,this._allowedVideoRegex=t.allowedVideoRegex||this.REGEXPS.videos,this._linkDensityModifier=t.linkDensityModifier||0,this._flags=this.FLAG_STRIP_UNLIKELYS|this.FLAG_WEIGHT_CLASSES|this.FLAG_CLEAN_CONDITIONALLY,this._debug){let i=function(n){if(n.nodeType==n.TEXT_NODE)return`${n.nodeName} ("${n.textContent}")`;let o=Array.from(n.attributes||[],function(s){return`${s.name}="${s.value}"`}).join(" ");return`<${n.localName} ${o}>`};this.log=function(){if(typeof console<"u"){let o=Array.from(arguments,s=>s&&s.nodeType==this.ELEMENT_NODE?i(s):s);o.unshift("Reader: (Readability)"),console.log(...o)}else if(typeof dump<"u"){var n=Array.prototype.map.call(arguments,function(o){return o&&o.nodeName?i(o):o}).join(" ");dump("Reader: (Readability) "+n+` +`)}}}else this.log=function(){}}a.prototype={FLAG_STRIP_UNLIKELYS:1,FLAG_WEIGHT_CLASSES:2,FLAG_CLEAN_CONDITIONALLY:4,ELEMENT_NODE:1,TEXT_NODE:3,DEFAULT_MAX_ELEMS_TO_PARSE:0,DEFAULT_N_TOP_CANDIDATES:5,DEFAULT_TAGS_TO_SCORE:"section,h2,h3,h4,h5,h6,p,td,pre".toUpperCase().split(","),DEFAULT_CHAR_THRESHOLD:500,REGEXPS:{unlikelyCandidates:/-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|footer|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote/i,okMaybeItsACandidate:/and|article|body|column|content|main|shadow/i,positive:/article|body|content|entry|hentry|h-entry|main|page|pagination|post|text|blog|story/i,negative:/-ad-|hidden|^hid$| hid$| hid |^hid |banner|combx|comment|com-|contact|footer|gdpr|masthead|media|meta|outbrain|promo|related|scroll|share|shoutbox|sidebar|skyscraper|sponsor|shopping|tags|widget/i,extraneous:/print|archive|comment|discuss|e[\-]?mail|share|reply|all|login|sign|single|utility/i,byline:/byline|author|dateline|writtenby|p-author/i,replaceFonts:/<(\/?)font[^>]*>/gi,normalize:/\s{2,}/g,videos:/\/\/(www\.)?((dailymotion|youtube|youtube-nocookie|player\.vimeo|v\.qq)\.com|(archive|upload\.wikimedia)\.org|player\.twitch\.tv)/i,shareElements:/(\b|_)(share|sharedaddy)(\b|_)/i,nextLink:/(next|weiter|continue|>([^\|]|$)|»([^\|]|$))/i,prevLink:/(prev|earl|old|new|<|«)/i,tokenize:/\W+/g,whitespace:/^\s*$/,hasContent:/\S$/,hashUrl:/^#.+/,srcsetUrl:/(\S+)(\s+[\d.]+[xw])?(\s*(?:,|$))/g,b64DataUrl:/^data:\s*([^\s;,]+)\s*;\s*base64\s*,/i,commas:/\u002C|\u060C|\uFE50|\uFE10|\uFE11|\u2E41|\u2E34|\u2E32|\uFF0C/g,jsonLdArticleTypes:/^Article|AdvertiserContentArticle|NewsArticle|AnalysisNewsArticle|AskPublicNewsArticle|BackgroundNewsArticle|OpinionNewsArticle|ReportageNewsArticle|ReviewNewsArticle|Report|SatiricalArticle|ScholarlyArticle|MedicalScholarlyArticle|SocialMediaPosting|BlogPosting|LiveBlogPosting|DiscussionForumPosting|TechArticle|APIReference$/,adWords:/^(ad(vertising|vertisement)?|pub(licité)?|werb(ung)?|广告|Реклама|Anuncio)$/iu,loadingWords:/^((loading|正在加载|Загрузка|chargement|cargando)(…|\.\.\.)?)$/iu},UNLIKELY_ROLES:["menu","menubar","complementary","navigation","alert","alertdialog","dialog"],DIV_TO_P_ELEMS:new Set(["BLOCKQUOTE","DL","DIV","IMG","OL","P","PRE","TABLE","UL"]),ALTER_TO_DIV_EXCEPTIONS:["DIV","ARTICLE","SECTION","P","OL","UL"],PRESENTATIONAL_ATTRIBUTES:["align","background","bgcolor","border","cellpadding","cellspacing","frame","hspace","rules","style","valign","vspace"],DEPRECATED_SIZE_ATTRIBUTE_ELEMS:["TABLE","TH","TD","HR","PRE"],PHRASING_ELEMS:["ABBR","AUDIO","B","BDO","BR","BUTTON","CITE","CODE","DATA","DATALIST","DFN","EM","EMBED","I","IMG","INPUT","KBD","LABEL","MARK","MATH","METER","NOSCRIPT","OBJECT","OUTPUT","PROGRESS","Q","RUBY","SAMP","SCRIPT","SELECT","SMALL","SPAN","STRONG","SUB","SUP","TEXTAREA","TIME","VAR","WBR"],CLASSES_TO_PRESERVE:["page"],HTML_ESCAPE_MAP:{lt:"<",gt:">",amp:"&",quot:'"',apos:"'"},_postProcessContent(e){this._fixRelativeUris(e),this._simplifyNestedElements(e),this._keepClasses||this._cleanClasses(e)},_removeNodes(e,t){if(this._docJSDOMParser&&e._isLiveNodeList)throw new Error("Do not pass live node lists to _removeNodes");for(var i=e.length-1;i>=0;i--){var n=e[i],o=n.parentNode;o&&(!t||t.call(this,n,i,e))&&o.removeChild(n)}},_replaceNodeTags(e,t){if(this._docJSDOMParser&&e._isLiveNodeList)throw new Error("Do not pass live node lists to _replaceNodeTags");for(const i of e)this._setNodeTag(i,t)},_forEachNode(e,t){Array.prototype.forEach.call(e,t,this)},_findNode(e,t){return Array.prototype.find.call(e,t,this)},_someNode(e,t){return Array.prototype.some.call(e,t,this)},_everyNode(e,t){return Array.prototype.every.call(e,t,this)},_getAllNodesWithTag(e,t){return e.querySelectorAll?e.querySelectorAll(t.join(",")):[].concat.apply([],t.map(function(i){var n=e.getElementsByTagName(i);return Array.isArray(n)?n:Array.from(n)}))},_cleanClasses(e){var t=this._classesToPreserve,i=(e.getAttribute("class")||"").split(/\s+/).filter(n=>t.includes(n)).join(" ");for(i?e.setAttribute("class",i):e.removeAttribute("class"),e=e.firstElementChild;e;e=e.nextElementSibling)this._cleanClasses(e)},_isUrl(e){try{return new URL(e),!0}catch{return!1}},_fixRelativeUris(e){var t=this._doc.baseURI,i=this._doc.documentURI;function n(l){if(t==i&&l.charAt(0)=="#")return l;try{return new URL(l,t).href}catch{}return l}var o=this._getAllNodesWithTag(e,["a"]);this._forEachNode(o,function(l){var h=l.getAttribute("href");if(h)if(h.indexOf("javascript:")===0)if(l.childNodes.length===1&&l.childNodes[0].nodeType===this.TEXT_NODE){var f=this._doc.createTextNode(l.textContent);l.parentNode.replaceChild(f,l)}else{for(var c=this._doc.createElement("span");l.firstChild;)c.appendChild(l.firstChild);l.parentNode.replaceChild(c,l)}else l.setAttribute("href",n(h))});var s=this._getAllNodesWithTag(e,["img","picture","figure","video","audio","source"]);this._forEachNode(s,function(l){var h=l.getAttribute("src"),f=l.getAttribute("poster"),c=l.getAttribute("srcset");if(h&&l.setAttribute("src",n(h)),f&&l.setAttribute("poster",n(f)),c){var u=c.replace(this.REGEXPS.srcsetUrl,function(d,v,p,R){return n(v)+(p||"")+R});l.setAttribute("srcset",u)}})},_simplifyNestedElements(e){for(var t=e;t;){if(t.parentNode&&["DIV","SECTION"].includes(t.tagName)&&!(t.id&&t.id.startsWith("readability"))){if(this._isElementWithoutContent(t)){t=this._removeAndGetNext(t);continue}else if(this._hasSingleTagInsideElement(t,"DIV")||this._hasSingleTagInsideElement(t,"SECTION")){for(var i=t.children[0],n=0;n»] /.test(t)){n=/ [\\\/>»] /.test(t);let u=Array.from(i.matchAll(/ [\|\-\\\/>»] /gi));t=i.substring(0,u.pop().index),o(t)<3&&(t=i.replace(/^[^\|\-\\\/>»]*[\|\-\\\/>»]/gi,""))}else if(t.includes(": ")){var s=this._getAllNodesWithTag(e,["h1","h2"]),l=t.trim(),h=this._someNode(s,function(u){return u.textContent.trim()===l});h||(t=i.substring(i.lastIndexOf(":")+1),o(t)<3?t=i.substring(i.indexOf(":")+1):o(i.substr(0,i.indexOf(":")))>5&&(t=i))}else if(t.length>150||t.length<15){var f=e.getElementsByTagName("h1");f.length===1&&(t=this._getInnerText(f[0]))}t=t.trim().replace(this.REGEXPS.normalize," ");var c=o(t);return c<=4&&(!n||c!=o(i.replace(/[\|\-\\\/>»]+/g,""))-1)&&(t=i),t},_prepDocument(){var e=this._doc;this._removeNodes(this._getAllNodesWithTag(e,["style"])),e.body&&this._replaceBrs(e.body),this._replaceNodeTags(this._getAllNodesWithTag(e,["font"]),"SPAN")},_nextNode(e){for(var t=e;t&&t.nodeType!=this.ELEMENT_NODE&&this.REGEXPS.whitespace.test(t.textContent);)t=t.nextSibling;return t},_replaceBrs(e){this._forEachNode(this._getAllNodesWithTag(e,["br"]),function(t){for(var i=t.nextSibling,n=!1;(i=this._nextNode(i))&&i.tagName=="BR";){n=!0;var o=i.nextSibling;i.remove(),i=o}if(n){var s=this._doc.createElement("p");for(t.parentNode.replaceChild(s,t),i=s.nextSibling;i;){if(i.tagName=="BR"){var l=this._nextNode(i.nextSibling);if(l&&l.tagName=="BR")break}if(!this._isPhrasingContent(i))break;var h=i.nextSibling;s.appendChild(i),i=h}for(;s.lastChild&&this._isWhitespace(s.lastChild);)s.lastChild.remove();s.parentNode.tagName==="P"&&this._setNodeTag(s.parentNode,"DIV")}})},_setNodeTag(e,t){if(this.log("_setNodeTag",e,t),this._docJSDOMParser)return e.localName=t.toLowerCase(),e.tagName=t.toUpperCase(),e;for(var i=e.ownerDocument.createElement(t);e.firstChild;)i.appendChild(e.firstChild);e.parentNode.replaceChild(i,e),e.readability&&(i.readability=e.readability);for(var n=0;n!i.includes(l)),s=o.join(" ").length/n.join(" ").length;return 1-s},_isValidByline(e,t){var i=e.getAttribute("rel"),n=e.getAttribute("itemprop"),o=e.textContent.trim().length;return(i==="author"||n&&n.includes("author")||this.REGEXPS.byline.test(t))&&!!o&&o<100},_getNodeAncestors(e,t){t=t||0;for(var i=0,n=[];e.parentNode&&(n.push(e.parentNode),!(t&&++i===t));)e=e.parentNode;return n},_grabArticle(e){this.log("**** grabArticle ****");var t=this._doc,i=e!==null;if(e=e||this._doc.body,!e)return this.log("No body found in document. Abort."),null;for(var n=e.innerHTML;;){this.log("Starting grabArticle loop");var o=this._flagIsActive(this.FLAG_STRIP_UNLIKELYS),s=[],l=this._doc.documentElement;let He=!0;for(;l;){l.tagName==="HTML"&&(this._articleLang=l.getAttribute("lang"));var h=l.className+" "+l.id;if(!this._isProbablyVisible(l)){this.log("Removing hidden node - "+h),l=this._removeAndGetNext(l);continue}if(l.getAttribute("aria-modal")=="true"&&l.getAttribute("role")=="dialog"){l=this._removeAndGetNext(l);continue}if(!this._articleByline&&!this._metadata.byline&&this._isValidByline(l,h)){for(var f=this._getNextNode(l,!0),c=this._getNextNode(l),u=null;c&&c!=f;){var d=c.getAttribute("itemprop");if(d&&d.includes("name")){u=c;break}else c=this._getNextNode(c)}this._articleByline=(u??l).textContent.trim(),l=this._removeAndGetNext(l);continue}if(He&&this._headerDuplicatesTitle(l)){this.log("Removing header: ",l.textContent.trim(),this._articleTitle.trim()),He=!1,l=this._removeAndGetNext(l);continue}if(o){if(this.REGEXPS.unlikelyCandidates.test(h)&&!this.REGEXPS.okMaybeItsACandidate.test(h)&&!this._hasAncestorTag(l,"table")&&!this._hasAncestorTag(l,"code")&&l.tagName!=="BODY"&&l.tagName!=="A"){this.log("Removing unlikely candidate - "+h),l=this._removeAndGetNext(l);continue}if(this.UNLIKELY_ROLES.includes(l.getAttribute("role"))){this.log("Removing content with role "+l.getAttribute("role")+" - "+h),l=this._removeAndGetNext(l);continue}}if((l.tagName==="DIV"||l.tagName==="SECTION"||l.tagName==="HEADER"||l.tagName==="H1"||l.tagName==="H2"||l.tagName==="H3"||l.tagName==="H4"||l.tagName==="H5"||l.tagName==="H6")&&this._isElementWithoutContent(l)){l=this._removeAndGetNext(l);continue}if(this.DEFAULT_TAGS_TO_SCORE.includes(l.tagName)&&s.push(l),l.tagName==="DIV"){for(var v=null,p=l.firstChild;p;){var R=p.nextSibling;if(this._isPhrasingContent(p))v!==null?v.appendChild(p):this._isWhitespace(p)||(v=t.createElement("p"),l.replaceChild(v,p),v.appendChild(p));else if(v!==null){for(;v.lastChild&&this._isWhitespace(v.lastChild);)v.lastChild.remove();v=null}p=R}if(this._hasSingleTagInsideElement(l,"P")&&this._getLinkDensity(l)<.25){var L=l.children[0];l.parentNode.replaceChild(L,l),l=L,s.push(l)}else this._hasChildBlockElement(l)||(l=this._setNodeTag(l,"P"),s.push(l))}l=this._getNextNode(l)}var T=[];this._forEachNode(s,function(S){if(!(!S.parentNode||typeof S.parentNode.tagName>"u")){var w=this._getInnerText(S);if(!(w.length<25)){var Ge=this._getNodeAncestors(S,5);if(Ge.length!==0){var j=0;j+=1,j+=w.split(this.REGEXPS.commas).length,j+=Math.min(Math.floor(w.length/100),3),this._forEachNode(Ge,function(D,fe){if(!(!D.tagName||!D.parentNode||typeof D.parentNode.tagName>"u")){if(typeof D.readability>"u"&&(this._initializeNode(D),T.push(D)),fe===0)var ge=1;else fe===1?ge=2:ge=fe*3;D.readability.contentScore+=j/ge}})}}}});for(var y=[],x=0,k=T.length;xM.readability.contentScore){y.splice(I,0,A),y.length>this._nbTopCandidates&&y.pop();break}}}var g=y[0]||null,P=!1,m;if(g===null||g.tagName==="BODY"){for(g=t.createElement("DIV"),P=!0;e.firstChild;)this.log("Moving child out:",e.firstChild),g.appendChild(e.firstChild);e.appendChild(g),this._initializeNode(g)}else if(g){for(var N=[],O=1;O=.75&&N.push(this._getNodeAncestors(y[O]));var ne=3;if(N.length>=ne)for(m=g.parentNode;m.tagName!=="BODY";){for(var se=0,le=0;le=ne){g=m;break}m=m.parentNode}g.readability||this._initializeNode(g),m=g.parentNode;for(var oe=g.readability.contentScore,Et=oe/3;m.tagName!=="BODY";){if(!m.readability){m=m.parentNode;continue}var Ce=m.readability.contentScore;if(Ceoe){g=m;break}oe=m.readability.contentScore,m=m.parentNode}for(m=g.parentNode;m.tagName!="BODY"&&m.children.length==1;)g=m,m=g.parentNode;g.readability||this._initializeNode(g)}var b=t.createElement("DIV");i&&(b.id="readability-content");var pt=Math.max(10,g.readability.contentScore*.2);m=g.parentNode;for(var ce=m.children,V=0,Pe=ce.length;V=pt)H=!0;else if(_.nodeName==="P"){var Be=this._getLinkDensity(_),Me=this._getInnerText(_),he=Me.length;(he>80&&Be<.25||he<80&&he>0&&Be===0&&Me.search(/\.( |$)/)!==-1)&&(H=!0)}}H&&(this.log("Appending node:",_),this.ALTER_TO_DIV_EXCEPTIONS.includes(_.nodeName)||(this.log("Altering sibling:",_,"to div."),_=this._setNodeTag(_,"DIV")),b.appendChild(_),ce=m.children,V-=1,Pe-=1)}if(this._debug&&this.log("Article content pre-prep: "+b.innerHTML),this._prepArticle(b),this._debug&&this.log("Article content post-prep: "+b.innerHTML),P)g.id="readability-page-1",g.className="page";else{var X=t.createElement("DIV");for(X.id="readability-page-1",X.className="page";b.firstChild;)X.appendChild(b.firstChild);b.appendChild(X)}this._debug&&this.log("Article content after paging: "+b.innerHTML);var ue=!0,Oe=this._getInnerText(b,!0).length;if(Oe1114111||s>=55296&&s<=57343)&&(s=65533),String.fromCodePoint(s)})},_getJSONLD(e){var t=this._getAllNodesWithTag(e,["script"]),i;return this._forEachNode(t,function(n){if(!i&&n.getAttribute("type")==="application/ld+json")try{var o=n.textContent.replace(/^\s*\s*$/g,""),s=JSON.parse(o);if(Array.isArray(s)&&(s=s.find(d=>d["@type"]&&d["@type"].match(this.REGEXPS.jsonLdArticleTypes)),!s))return;var l=/^https?\:\/\/schema\.org\/?$/,h=typeof s["@context"]=="string"&&s["@context"].match(l)||typeof s["@context"]=="object"&&typeof s["@context"]["@vocab"]=="string"&&s["@context"]["@vocab"].match(l);if(!h||(!s["@type"]&&Array.isArray(s["@graph"])&&(s=s["@graph"].find(d=>(d["@type"]||"").match(this.REGEXPS.jsonLdArticleTypes))),!s||!s["@type"]||!s["@type"].match(this.REGEXPS.jsonLdArticleTypes)))return;if(i={},typeof s.name=="string"&&typeof s.headline=="string"&&s.name!==s.headline){var f=this._getArticleTitle(),c=this._textSimilarity(s.name,f)>.75,u=this._textSimilarity(s.headline,f)>.75;u&&!c?i.title=s.headline:i.title=s.name}else typeof s.name=="string"?i.title=s.name.trim():typeof s.headline=="string"&&(i.title=s.headline.trim());s.author&&(typeof s.author.name=="string"?i.byline=s.author.name.trim():Array.isArray(s.author)&&s.author[0]&&typeof s.author[0].name=="string"&&(i.byline=s.author.filter(function(d){return d&&typeof d.name=="string"}).map(function(d){return d.name.trim()}).join(", "))),typeof s.description=="string"&&(i.excerpt=s.description.trim()),s.publisher&&typeof s.publisher.name=="string"&&(i.siteName=s.publisher.name.trim()),typeof s.datePublished=="string"&&(i.datePublished=s.datePublished.trim())}catch(d){this.log(d.message)}}),i||{}},_getArticleMetadata(e){var t={},i={},n=this._doc.getElementsByTagName("meta"),o=/\s*(article|dc|dcterm|og|twitter)\s*:\s*(author|creator|description|published_time|title|site_name)\s*/gi,s=/^\s*(?:(dc|dcterm|og|twitter|parsely|weibo:(article|webpage))\s*[-\.:]\s*)?(author|creator|pub-date|description|title|site_name)\s*$/i;this._forEachNode(n,function(h){var f=h.getAttribute("name"),c=h.getAttribute("property"),u=h.getAttribute("content");if(u){var d=null,v=null;c&&(d=c.match(o),d&&(v=d[0].toLowerCase().replace(/\s/g,""),i[v]=u.trim())),!d&&f&&s.test(f)&&(v=f,u&&(v=v.toLowerCase().replace(/\s/g,"").replace(/\./g,":"),i[v]=u.trim()))}}),t.title=e.title||i["dc:title"]||i["dcterm:title"]||i["og:title"]||i["weibo:article:title"]||i["weibo:webpage:title"]||i.title||i["twitter:title"]||i["parsely-title"],t.title||(t.title=this._getArticleTitle());const l=typeof i["article:author"]=="string"&&!this._isUrl(i["article:author"])?i["article:author"]:void 0;return t.byline=e.byline||i["dc:creator"]||i["dcterm:creator"]||i.author||i["parsely-author"]||l,t.excerpt=e.excerpt||i["dc:description"]||i["dcterm:description"]||i["og:description"]||i["weibo:article:description"]||i["weibo:webpage:description"]||i.description||i["twitter:description"],t.siteName=e.siteName||i["og:site_name"],t.publishedTime=e.datePublished||i["article:published_time"]||i["parsely-pub-date"]||null,t.title=this._unescapeHtmlEntities(t.title),t.byline=this._unescapeHtmlEntities(t.byline),t.excerpt=this._unescapeHtmlEntities(t.excerpt),t.siteName=this._unescapeHtmlEntities(t.siteName),t.publishedTime=this._unescapeHtmlEntities(t.publishedTime),t},_isSingleImage(e){for(;e;){if(e.tagName==="IMG")return!0;if(e.children.length!==1||e.textContent.trim()!=="")return!1;e=e.children[0]}return!1},_unwrapNoscriptImages(e){var t=Array.from(e.getElementsByTagName("img"));this._forEachNode(t,function(n){for(var o=0;o"u"?!0:t;var i=e.textContent.trim();return t?i.replace(this.REGEXPS.normalize," "):i},_getCharCount(e,t){return t=t||",",this._getInnerText(e).split(t).length-1},_cleanStyles(e){if(!(!e||e.tagName.toLowerCase()==="svg")){for(var t=0;t0&&o>i)return!1;if(e.parentNode.tagName===t&&(!n||n(e.parentNode)))return!0;e=e.parentNode,o++}return!1},_getRowAndColumnCount(e){for(var t=0,i=0,n=e.getElementsByTagName("tr"),o=0;o=10||u.columns>4){n._readabilityDataTable=!0;continue}n._readabilityDataTable=u.rows*u.columns>10}},_fixLazyImages(e){this._forEachNode(this._getAllNodesWithTag(e,["img","picture","figure"]),function(t){if(t.src&&this.REGEXPS.b64DataUrl.test(t.src)){var i=this.REGEXPS.b64DataUrl.exec(t.src);if(i[1]==="image/svg+xml")return;for(var n=!1,o=0;on+=this._getInnerText(s,!0).length),n/i},_cleanConditionally(e,t){this._flagIsActive(this.FLAG_CLEAN_CONDITIONALLY)&&this._removeNodes(this._getAllNodesWithTag(e,[t]),function(i){var n=function(m){return m._readabilityDataTable},o=t==="ul"||t==="ol";if(!o){var s=0,l=this._getAllNodesWithTag(i,["ul","ol"]);this._forEachNode(l,m=>s+=this._getInnerText(m).length),o=s/this._getInnerText(i).length>.9}if(t==="table"&&n(i)||this._hasAncestorTag(i,"table",-1,n)||this._hasAncestorTag(i,"code")||[...i.getElementsByTagName("table")].some(m=>m._readabilityDataTable))return!1;var h=this._getClassWeight(i);this.log("Cleaning Conditionally",i);var f=0;if(h+f<0)return!0;if(this._getCharCount(i,",")<10){for(var c=i.getElementsByTagName("p").length,u=i.getElementsByTagName("img").length,d=i.getElementsByTagName("li").length-100,v=i.getElementsByTagName("input").length,p=this._getTextDensity(i,["h1","h2","h3","h4","h5","h6"]),R=0,L=this._getAllNodesWithTag(i,["object","embed","iframe"]),T=0;T{const N=[];return!M&&u>1&&c/u<.5&&N.push(`Bad p to img ratio (img=${u}, p=${c})`),!o&&d>c&&N.push(`Too many li's outside of a list. (li=${d} > p=${c})`),v>Math.floor(c/3)&&N.push(`Too many inputs per p. (input=${v}, p=${c})`),!o&&!M&&p<.9&&k<25&&(u===0||u>2)&&A>0&&N.push(`Suspiciously short. (headingDensity=${p}, img=${u}, linkDensity=${A})`),!o&&h<25&&A>.2+this._linkDensityModifier&&N.push(`Low weight and a little linky. (linkDensity=${A})`),h>=25&&A>.5+this._linkDensityModifier&&N.push(`High weight and mostly links. (linkDensity=${A})`),(R===1&&k<75||R>1)&&N.push(`Suspicious embed. (embedCount=${R}, contentLength=${k})`),u===0&&I===0&&N.push(`No useful content. (img=${u}, textDensity=${I})`),N.length?(this.log("Checks failed",N),!0):!1})();if(o&&g){for(var P=0;P1)return g;let N=i.getElementsByTagName("li").length;if(u==N)return!1}return g}return!1})},_cleanMatchedNodes(e,t){for(var i=this._getNextNode(e,!0),n=this._getNextNode(e);n&&n!=i;)t.call(this,n,n.className+" "+n.id)?n=this._removeAndGetNext(n):n=this._getNextNode(n)},_cleanHeaders(e){let t=this._getAllNodesWithTag(e,["h1","h2"]);this._removeNodes(t,function(i){let n=this._getClassWeight(i)<0;return n&&this.log("Removing header with low class weight:",i),n})},_headerDuplicatesTitle(e){if(e.tagName!="H1"&&e.tagName!="H2")return!1;var t=this._getInnerText(e,!1);return this.log("Evaluating similarity of header:",t,this._articleTitle),this._textSimilarity(this._articleTitle,t)>.75},_flagIsActive(e){return(this._flags&e)>0},_removeFlag(e){this._flags=this._flags&~e},_isProbablyVisible(e){return(!e.style||e.style.display!="none")&&(!e.style||e.style.visibility!="hidden")&&!e.hasAttribute("hidden")&&(!e.hasAttribute("aria-hidden")||e.getAttribute("aria-hidden")!="true"||e.className&&e.className.includes&&e.className.includes("fallback-image"))},parse(){if(this._maxElemsToParse>0){var e=this._doc.getElementsByTagName("*").length;if(e>this._maxElemsToParse)throw new Error("Aborting parsing document; "+e+" elements found")}this._unwrapNoscriptImages(this._doc);var t=this._disableJSONLD?{}:this._getJSONLD(this._doc);this._removeScripts(this._doc),this._prepDocument();var i=this._getArticleMetadata(t);this._metadata=i,this._articleTitle=i.title;var n=this._grabArticle();if(!n)return null;if(this.log("Grabbed: "+n.innerHTML),this._postProcessContent(n),!i.excerpt){var o=n.getElementsByTagName("p");o.length&&(i.excerpt=o[0].textContent.trim())}var s=n.textContent;return{title:this._articleTitle,byline:i.byline||this._articleByline,dir:this._articleDir,lang:this._articleLang,content:this._serializer(n),textContent:s,length:s.length,excerpt:i.excerpt,siteName:i.siteName||this._articleSiteName,publishedTime:i.publishedTime}}},r.exports=a})(Y)),Y.exports}var q={exports:{}},de;function Ue(){return de||(de=1,(function(r){var a={unlikelyCandidates:/-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|footer|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote/i,okMaybeItsACandidate:/and|article|body|column|content|main|shadow/i};function e(i){return(!i.style||i.style.display!="none")&&!i.hasAttribute("hidden")&&(!i.hasAttribute("aria-hidden")||i.getAttribute("aria-hidden")!="true"||i.className&&i.className.includes&&i.className.includes("fallback-image"))}function t(i,n={}){typeof n=="function"&&(n={visibilityChecker:n});var o={minScore:20,minContentLength:140,visibilityChecker:e};n=Object.assign(o,n);var s=i.querySelectorAll("p, pre, article"),l=i.querySelectorAll("div > br");if(l.length){var h=new Set(s);[].forEach.call(l,function(c){h.add(c.parentNode)}),s=Array.from(h)}var f=0;return[].some.call(s,function(c){if(!n.visibilityChecker(c))return!1;var u=c.className+" "+c.id;if(a.unlikelyCandidates.test(u)&&!a.okMaybeItsACandidate.test(u)||c.matches("li p"))return!1;var d=c.textContent.trim().length;return dn.minScore)})}r.exports=t})(q)),q.exports}var K,ve;function Fe(){if(ve)return K;ve=1;var r=$e(),a=Ue();return K={Readability:r,isProbablyReaderable:a},K}var We=Fe();function Ve(r){for(var a=1;a0&&r[a-1]===` +`;)a--;return r.substring(0,a)}function Ee(r){return Ne(_e(r))}var Xe=["ADDRESS","ARTICLE","ASIDE","AUDIO","BLOCKQUOTE","BODY","CANVAS","CENTER","DD","DIR","DIV","DL","DT","FIELDSET","FIGCAPTION","FIGURE","FOOTER","FORM","FRAMESET","H1","H2","H3","H4","H5","H6","HEADER","HGROUP","HR","HTML","ISINDEX","LI","MAIN","MENU","NAV","NOFRAMES","NOSCRIPT","OL","OUTPUT","P","PRE","SECTION","TABLE","TBODY","TD","TFOOT","TH","THEAD","TR","UL"];function z(r){return Q(r,Xe)}var pe=["AREA","BASE","BR","COL","COMMAND","EMBED","HR","IMG","INPUT","KEYGEN","LINK","META","PARAM","SOURCE","TRACK","WBR"];function be(r){return Q(r,pe)}function je(r){return Ae(r,pe)}var ye=["A","TABLE","THEAD","TBODY","TFOOT","TH","TD","IFRAME","SCRIPT","AUDIO","VIDEO"];function Ye(r){return Q(r,ye)}function qe(r){return Ae(r,ye)}function Q(r,a){return a.indexOf(r.nodeName)>=0}function Ae(r,a){return r.getElementsByTagName&&a.some(function(e){return r.getElementsByTagName(e).length})}var E={};E.paragraph={filter:"p",replacement:function(r){return` + +`+r+` + +`}},E.lineBreak={filter:"br",replacement:function(r,a,e){return e.br+` +`}},E.heading={filter:["h1","h2","h3","h4","h5","h6"],replacement:function(r,a,e){var t=Number(a.nodeName.charAt(1));if(e.headingStyle==="setext"&&t<3){var i=J(t===1?"=":"-",r.length);return` + +`+r+` +`+i+` + +`}else return` + +`+J("#",t)+" "+r+` + +`}},E.blockquote={filter:"blockquote",replacement:function(r){return r=Ee(r).replace(/^/gm,"> "),` + +`+r+` + +`}},E.list={filter:["ul","ol"],replacement:function(r,a){var e=a.parentNode;return e.nodeName==="LI"&&e.lastElementChild===a?` +`+r:` + +`+r+` + +`}},E.listItem={filter:"li",replacement:function(r,a,e){var t=e.bulletListMarker+" ",i=a.parentNode;if(i.nodeName==="OL"){var n=i.getAttribute("start"),o=Array.prototype.indexOf.call(i.children,a);t=(n?Number(n)+o:o+1)+". "}var s=/\n$/.test(r);return r=Ee(r)+(s?` +`:""),r=r.replace(/\n/gm,` +`+" ".repeat(t.length)),t+r+(a.nextSibling?` +`:"")}},E.indentedCodeBlock={filter:function(r,a){return a.codeBlockStyle==="indented"&&r.nodeName==="PRE"&&r.firstChild&&r.firstChild.nodeName==="CODE"},replacement:function(r,a,e){return` + + `+a.firstChild.textContent.replace(/\n/g,` + `)+` + +`}},E.fencedCodeBlock={filter:function(r,a){return a.codeBlockStyle==="fenced"&&r.nodeName==="PRE"&&r.firstChild&&r.firstChild.nodeName==="CODE"},replacement:function(r,a,e){for(var t=a.firstChild.getAttribute("class")||"",i=(t.match(/language-(\S+)/)||[null,""])[1],n=a.firstChild.textContent,o=e.fence.charAt(0),s=3,l=new RegExp("^"+o+"{3,}","gm"),h;h=l.exec(n);)h[0].length>=s&&(s=h[0].length+1);var f=J(o,s);return` + +`+f+i+` +`+n.replace(/\n$/,"")+` +`+f+` + +`}},E.horizontalRule={filter:"hr",replacement:function(r,a,e){return` + +`+e.hr+` + +`}},E.inlineLink={filter:function(r,a){return a.linkStyle==="inlined"&&r.nodeName==="A"&&r.getAttribute("href")},replacement:function(r,a){var e=a.getAttribute("href");e&&(e=e.replace(/([()])/g,"\\$1"));var t=G(a.getAttribute("title"));return t&&(t=' "'+t.replace(/"/g,'\\"')+'"'),"["+r+"]("+e+t+")"}},E.referenceLink={filter:function(r,a){return a.linkStyle==="referenced"&&r.nodeName==="A"&&r.getAttribute("href")},replacement:function(r,a,e){var t=a.getAttribute("href"),i=G(a.getAttribute("title"));i&&(i=' "'+i+'"');var n,o;switch(e.linkReferenceStyle){case"collapsed":n="["+r+"][]",o="["+r+"]: "+t+i;break;case"shortcut":n="["+r+"]",o="["+r+"]: "+t+i;break;default:var s=this.references.length+1;n="["+r+"]["+s+"]",o="["+s+"]: "+t+i}return this.references.push(o),n},references:[],append:function(r){var a="";return this.references.length&&(a=` + +`+this.references.join(` +`)+` + +`,this.references=[]),a}},E.emphasis={filter:["em","i"],replacement:function(r,a,e){return r.trim()?e.emDelimiter+r+e.emDelimiter:""}},E.strong={filter:["strong","b"],replacement:function(r,a,e){return r.trim()?e.strongDelimiter+r+e.strongDelimiter:""}},E.code={filter:function(r){var a=r.previousSibling||r.nextSibling,e=r.parentNode.nodeName==="PRE"&&!a;return r.nodeName==="CODE"&&!e},replacement:function(r){if(!r)return"";r=r.replace(/\r?\n|\r/g," ");for(var a=/^`|^ .*?[^ ].* $|`$/.test(r)?" ":"",e="`",t=r.match(/`+/gm)||[];t.indexOf(e)!==-1;)e=e+"`";return e+a+r+a+e}},E.image={filter:"img",replacement:function(r,a){var e=G(a.getAttribute("alt")),t=a.getAttribute("src")||"",i=G(a.getAttribute("title")),n=i?' "'+i+'"':"";return t?"!["+e+"]("+t+n+")":""}};function G(r){return r?r.replace(/(\n+\s*)+/g,` +`):""}function Te(r){this.options=r,this._keep=[],this._remove=[],this.blankRule={replacement:r.blankReplacement},this.keepReplacement=r.keepReplacement,this.defaultRule={replacement:r.defaultReplacement},this.array=[];for(var a in r.rules)this.array.push(r.rules[a])}Te.prototype={add:function(r,a){this.array.unshift(a)},keep:function(r){this._keep.unshift({filter:r,replacement:this.keepReplacement})},remove:function(r){this._remove.unshift({filter:r,replacement:function(){return""}})},forNode:function(r){if(r.isBlank)return this.blankRule;var a;return(a=Z(this.array,r,this.options))||(a=Z(this._keep,r,this.options))||(a=Z(this._remove,r,this.options))?a:this.defaultRule},forEach:function(r){for(var a=0;a-1)return!0}else if(typeof t=="function"){if(t.call(r,a,e))return!0}else throw new TypeError("`filter` needs to be a string, array, or function")}function Je(r){var a=r.element,e=r.isBlock,t=r.isVoid,i=r.isPre||function(c){return c.nodeName==="PRE"};if(!(!a.firstChild||i(a))){for(var n=null,o=!1,s=null,l=Se(s,a,i);l!==a;){if(l.nodeType===3||l.nodeType===4){var h=l.data.replace(/[ \r\n\t]+/g," ");if((!n||/ $/.test(n.data))&&!o&&h[0]===" "&&(h=h.substr(1)),!h){l=ee(l);continue}l.data=h,n=l}else if(l.nodeType===1)e(l)||l.nodeName==="BR"?(n&&(n.data=n.data.replace(/ $/,"")),n=null,o=!1):t(l)||i(l)?(n=null,o=!0):n&&(o=!1);else{l=ee(l);continue}var f=Se(s,l,i);s=l,l=f}n&&(n.data=n.data.replace(/ $/,""),n.data||ee(n))}}function ee(r){var a=r.nextSibling||r.parentNode;return r.parentNode.removeChild(r),a}function Se(r,a,e){return r&&r.parentNode===a||e(a)?a.nextSibling||a.parentNode:a.firstChild||a.nextSibling||a.parentNode}var te=typeof window<"u"?window:{};function ze(){var r=te.DOMParser,a=!1;try{new r().parseFromString("","text/html")&&(a=!0)}catch{}return a}function Qe(){var r=function(){};return Ze()?r.prototype.parseFromString=function(a){var e=new window.ActiveXObject("htmlfile");return e.designMode="on",e.open(),e.write(a),e.close(),e}:r.prototype.parseFromString=function(a){var e=document.implementation.createHTMLDocument("");return e.open(),e.write(a),e.close(),e},r}function Ze(){var r=!1;try{document.implementation.createHTMLDocument("").open()}catch{te.ActiveXObject&&(r=!0)}return r}var et=ze()?te.DOMParser:Qe();function tt(r,a){var e;if(typeof r=="string"){var t=rt().parseFromString(''+r+"","text/html");e=t.getElementById("turndown-root")}else e=r.cloneNode(!0);return Je({element:e,isBlock:z,isVoid:be,isPre:a.preformattedCode?it:null}),e}var re;function rt(){return re=re||new et,re}function it(r){return r.nodeName==="PRE"||r.nodeName==="CODE"}function at(r,a){return r.isBlock=z(r),r.isCode=r.nodeName==="CODE"||r.parentNode.isCode,r.isBlank=nt(r),r.flankingWhitespace=st(r,a),r}function nt(r){return!be(r)&&!Ye(r)&&/^\s*$/i.test(r.textContent)&&!je(r)&&!qe(r)}function st(r,a){if(r.isBlock||a.preformattedCode&&r.isCode)return{leading:"",trailing:""};var e=lt(r.textContent);return e.leadingAscii&&Re("left",r,a)&&(e.leading=e.leadingNonAscii),e.trailingAscii&&Re("right",r,a)&&(e.trailing=e.trailingNonAscii),{leading:e.leading,trailing:e.trailing}}function lt(r){var a=r.match(/^(([ \t\r\n]*)(\s*))(?:(?=\S)[\s\S]*\S)?((\s*?)([ \t\r\n]*))$/);return{leading:a[1],leadingAscii:a[2],leadingNonAscii:a[3],trailing:a[4],trailingNonAscii:a[5],trailingAscii:a[6]}}function Re(r,a,e){var t,i,n;return r==="left"?(t=a.previousSibling,i=/ $/):(t=a.nextSibling,i=/^ /),t&&(t.nodeType===3?n=i.test(t.nodeValue):e.preformattedCode&&t.nodeName==="CODE"?n=!1:t.nodeType===1&&!z(t)&&(n=i.test(t.textContent))),n}var ot=Array.prototype.reduce,ct=[[/\\/g,"\\\\"],[/\*/g,"\\*"],[/^-/g,"\\-"],[/^\+ /g,"\\+ "],[/^(=+)/g,"\\$1"],[/^(#{1,6}) /g,"\\$1 "],[/`/g,"\\`"],[/^~~~/g,"\\~~~"],[/\[/g,"\\["],[/\]/g,"\\]"],[/^>/g,"\\>"],[/_/g,"\\_"],[/^(\d+)\. /g,"$1\\. "]];function $(r){if(!(this instanceof $))return new $(r);var a={rules:E,headingStyle:"setext",hr:"* * *",bulletListMarker:"*",codeBlockStyle:"indented",fence:"```",emDelimiter:"_",strongDelimiter:"**",linkStyle:"inlined",linkReferenceStyle:"full",br:" ",preformattedCode:!1,blankReplacement:function(e,t){return t.isBlock?` + +`:""},keepReplacement:function(e,t){return t.isBlock?` + +`+t.outerHTML+` + +`:t.outerHTML},defaultReplacement:function(e,t){return t.isBlock?` + +`+e+` + +`:e}};this.options=Ve({},a,r),this.rules=new Te(this.options)}$.prototype={turndown:function(r){if(!ft(r))throw new TypeError(r+" is not a string, or an element/document/fragment node.");if(r==="")return"";var a=Le.call(this,new tt(r,this.options));return ht.call(this,a)},use:function(r){if(Array.isArray(r))for(var a=0;aa.codeBlockStyle==="fenced"&&r.nodeName==="PRE"&&r.firstChild!==null&&r.firstChild.nodeName==="CODE",replacement:(r,a,e)=>{const t=a.firstChild,n=(t.getAttribute("class")||"").match(/language-(\w+)/),o=n?n[1]:"",s=t.textContent||"",l=e.fence||"```";return` + +${l}${o} +${s} +${l} + +`}}),C.addRule("images",{filter:"img",replacement:(r,a)=>{const e=a,t=e.alt||"",i=e.src||"",n=e.title?` "${e.title}"`:"";return i?`![${t}](${i}${n})`:""}}),C.remove(["script","style","noscript","iframe","canvas"]),C.addRule("tableCell",{filter:["th","td"],replacement:r=>` ${r.trim().replace(/\n/g," ")} |`}),C.addRule("tableRow",{filter:"tr",replacement:(r,a)=>{const e=r.trim();if(!e)return"";const i=a.parentNode?.nodeName==="THEAD";let n=`|${e} +`;if(i){const o=a.cells.length,s="|"+" --- |".repeat(o)+` +`;n+=s}return n}});function xe(r){return C.turndown(r)}function Ie(r){const a=new Date().toLocaleString();return r.type==="selection"?`> Selected from [${r.title}](${r.url}) + +${r.content}`:`# ${r.title} + +> **Source**: ${r.url} +> **Captured**: ${a} + +${r.content}`}const gt={matches:[""],runAt:"document_idle",main(){chrome.runtime.onMessage.addListener((r,a,e)=>{if(r.type==="EXTRACT_PAGE_CONTENT"){const t=mt();return e(t),!0}if(r.type==="EXTRACT_SELECTION"){const t=dt();return e(t),!0}})}};function mt(){const r=document.cloneNode(!0),e=new We.Readability(r).parse();if(!e||!e.content)return{success:!1,error:"Could not parse page content"};const t=xe(e.content),i=e.title||document.title||"Untitled";return{success:!0,markdown:Ie({title:i,url:window.location.href,content:t,type:"page"})}}function dt(){const r=window.getSelection();if(!r||r.isCollapsed)return{success:!1,error:"No text selected"};const a=r.getRangeAt(0),e=document.createElement("div");e.appendChild(a.cloneContents());const t=e.innerHTML;if(!t.trim())return{success:!1,error:"Selection is empty"};const i=xe(t);return{success:!0,markdown:Ie({title:document.title,url:window.location.href,content:i,type:"selection"})}}const De=globalThis.browser?.runtime?.id?globalThis.browser:globalThis.chrome;function U(r,...a){}const vt={debug:(...r)=>U(console.debug,...r),log:(...r)=>U(console.log,...r),warn:(...r)=>U(console.warn,...r),error:(...r)=>U(console.error,...r)};class ie extends Event{constructor(a,e){super(ie.EVENT_NAME,{}),this.newUrl=a,this.oldUrl=e}static EVENT_NAME=ae("wxt:locationchange")}function ae(r){return`${De?.runtime?.id}:page-context:${r}`}function _t(r){let a,e;return{run(){a==null&&(e=new URL(location.href),a=r.setInterval(()=>{let t=new URL(location.href);t.href!==e.href&&(window.dispatchEvent(new ie(t,e)),e=t)},1e3))}}}class F{constructor(a,e){this.contentScriptName=a,this.options=e,this.abortController=new AbortController,this.isTopFrame?(this.listenForNewerScripts({ignoreFirstEvent:!0}),this.stopOldScripts()):this.listenForNewerScripts()}static SCRIPT_STARTED_MESSAGE_TYPE=ae("wxt:content-script-started");isTopFrame=window.self===window.top;abortController;locationWatcher=_t(this);receivedMessageIds=new Set;get signal(){return this.abortController.signal}abort(a){return this.abortController.abort(a)}get isInvalid(){return De.runtime.id==null&&this.notifyInvalidated(),this.signal.aborted}get isValid(){return!this.isInvalid}onInvalidated(a){return this.signal.addEventListener("abort",a),()=>this.signal.removeEventListener("abort",a)}block(){return new Promise(()=>{})}setInterval(a,e){const t=setInterval(()=>{this.isValid&&a()},e);return this.onInvalidated(()=>clearInterval(t)),t}setTimeout(a,e){const t=setTimeout(()=>{this.isValid&&a()},e);return this.onInvalidated(()=>clearTimeout(t)),t}requestAnimationFrame(a){const e=requestAnimationFrame((...t)=>{this.isValid&&a(...t)});return this.onInvalidated(()=>cancelAnimationFrame(e)),e}requestIdleCallback(a,e){const t=requestIdleCallback((...i)=>{this.signal.aborted||a(...i)},e);return this.onInvalidated(()=>cancelIdleCallback(t)),t}addEventListener(a,e,t,i){e==="wxt:locationchange"&&this.isValid&&this.locationWatcher.run(),a.addEventListener?.(e.startsWith("wxt:")?ae(e):e,t,{...i,signal:this.signal})}notifyInvalidated(){this.abort("Content script context invalidated"),vt.debug(`Content script "${this.contentScriptName}" context invalidated`)}stopOldScripts(){window.postMessage({type:F.SCRIPT_STARTED_MESSAGE_TYPE,contentScriptName:this.contentScriptName,messageId:Math.random().toString(36).slice(2)},"*")}verifyScriptStartedEvent(a){const e=a.data?.type===F.SCRIPT_STARTED_MESSAGE_TYPE,t=a.data?.contentScriptName===this.contentScriptName,i=!this.receivedMessageIds.has(a.data?.messageId);return e&&t&&i}listenForNewerScripts(a){let e=!0;const t=i=>{if(this.verifyScriptStartedEvent(i)){this.receivedMessageIds.add(i.data.messageId);const n=e;if(e=!1,n&&a?.ignoreFirstEvent)return;this.notifyInvalidated()}};addEventListener("message",t),this.onInvalidated(()=>removeEventListener("message",t))}}function Tt(){}function W(r,...a){}const Nt={debug:(...r)=>W(console.debug,...r),log:(...r)=>W(console.log,...r),warn:(...r)=>W(console.warn,...r),error:(...r)=>W(console.error,...r)};return(async()=>{try{const{main:r,...a}=gt,e=new F("page-context",a);return await r(e)}catch(r){throw Nt.error('The content script "page-context" crashed on startup!',r),r}})()})(); +pageContext; \ No newline at end of file diff --git a/packages/extension/.output/chrome-mv3/icon-128.png b/packages/extension/.output/chrome-mv3/icon-128.png new file mode 100644 index 00000000000..42926267e2f Binary files /dev/null and b/packages/extension/.output/chrome-mv3/icon-128.png differ diff --git a/packages/extension/.output/chrome-mv3/icon-16.png b/packages/extension/.output/chrome-mv3/icon-16.png new file mode 100644 index 00000000000..36807b0c0b1 Binary files /dev/null and b/packages/extension/.output/chrome-mv3/icon-16.png differ diff --git a/packages/extension/.output/chrome-mv3/icon-32.png b/packages/extension/.output/chrome-mv3/icon-32.png new file mode 100644 index 00000000000..e91a41d7fdb Binary files /dev/null and b/packages/extension/.output/chrome-mv3/icon-32.png differ diff --git a/packages/extension/.output/chrome-mv3/icon-48.png b/packages/extension/.output/chrome-mv3/icon-48.png new file mode 100644 index 00000000000..a46435058a0 Binary files /dev/null and b/packages/extension/.output/chrome-mv3/icon-48.png differ diff --git a/packages/extension/.output/chrome-mv3/iframe-rules.json b/packages/extension/.output/chrome-mv3/iframe-rules.json new file mode 100644 index 00000000000..54ad3c43657 --- /dev/null +++ b/packages/extension/.output/chrome-mv3/iframe-rules.json @@ -0,0 +1,182 @@ +[ + { + "id": 1, + "priority": 1, + "action": { + "type": "modifyHeaders", + "responseHeaders": [ + { "header": "x-frame-options", "operation": "remove" }, + { "header": "content-security-policy", "operation": "remove" } + ] + }, + "condition": { + "urlFilter": "||claude.ai/*", + "resourceTypes": ["main_frame", "sub_frame", "xmlhttprequest", "websocket"] + } + }, + { + "id": 2, + "priority": 1, + "action": { + "type": "modifyHeaders", + "responseHeaders": [ + { "header": "x-frame-options", "operation": "remove" }, + { "header": "content-security-policy", "operation": "remove" } + ] + }, + "condition": { + "urlFilter": "||chatgpt.com/*", + "resourceTypes": ["main_frame", "sub_frame", "xmlhttprequest", "websocket"] + } + }, + { + "id": 3, + "priority": 1, + "action": { + "type": "modifyHeaders", + "responseHeaders": [ + { "header": "x-frame-options", "operation": "remove" }, + { "header": "content-security-policy", "operation": "remove" } + ] + }, + "condition": { + "urlFilter": "||gemini.google.com/*", + "resourceTypes": ["main_frame", "sub_frame", "xmlhttprequest", "websocket"] + } + }, + { + "id": 4, + "priority": 1, + "action": { + "type": "modifyHeaders", + "responseHeaders": [ + { "header": "x-frame-options", "operation": "remove" }, + { "header": "content-security-policy", "operation": "remove" } + ] + }, + "condition": { + "urlFilter": "||perplexity.ai/*", + "resourceTypes": ["main_frame", "sub_frame", "xmlhttprequest", "websocket"] + } + }, + { + "id": 5, + "priority": 1, + "action": { + "type": "modifyHeaders", + "responseHeaders": [ + { "header": "x-frame-options", "operation": "remove" }, + { "header": "content-security-policy", "operation": "remove" } + ] + }, + "condition": { + "urlFilter": "||chat.openai.com/*", + "resourceTypes": ["main_frame", "sub_frame", "xmlhttprequest", "websocket"] + } + }, + { + "id": 6, + "priority": 1, + "action": { + "type": "modifyHeaders", + "responseHeaders": [ + { "header": "x-frame-options", "operation": "remove" }, + { "header": "content-security-policy", "operation": "remove" } + ] + }, + "condition": { + "urlFilter": "||poe.com/*", + "resourceTypes": ["main_frame", "sub_frame", "xmlhttprequest", "websocket"] + } + }, + { + "id": 7, + "priority": 1, + "action": { + "type": "modifyHeaders", + "responseHeaders": [ + { "header": "x-frame-options", "operation": "remove" }, + { "header": "content-security-policy", "operation": "remove" } + ] + }, + "condition": { + "urlFilter": "||you.com/*", + "resourceTypes": ["main_frame", "sub_frame", "xmlhttprequest", "websocket"] + } + }, + { + "id": 8, + "priority": 1, + "action": { + "type": "modifyHeaders", + "responseHeaders": [ + { "header": "x-frame-options", "operation": "remove" }, + { "header": "content-security-policy", "operation": "remove" } + ] + }, + "condition": { + "urlFilter": "||huggingface.co/*", + "resourceTypes": ["main_frame", "sub_frame", "xmlhttprequest", "websocket"] + } + }, + { + "id": 9, + "priority": 1, + "action": { + "type": "modifyHeaders", + "responseHeaders": [ + { "header": "x-frame-options", "operation": "remove" }, + { "header": "content-security-policy", "operation": "remove" } + ] + }, + "condition": { + "urlFilter": "||copilot.microsoft.com/*", + "resourceTypes": ["main_frame", "sub_frame", "xmlhttprequest", "websocket"] + } + }, + { + "id": 10, + "priority": 1, + "action": { + "type": "modifyHeaders", + "responseHeaders": [ + { "header": "x-frame-options", "operation": "remove" }, + { "header": "content-security-policy", "operation": "remove" } + ] + }, + "condition": { + "urlFilter": "||chat.deepseek.com/*", + "resourceTypes": ["main_frame", "sub_frame", "xmlhttprequest", "websocket"] + } + }, + { + "id": 11, + "priority": 1, + "action": { + "type": "modifyHeaders", + "responseHeaders": [ + { "header": "x-frame-options", "operation": "remove" }, + { "header": "content-security-policy", "operation": "remove" } + ] + }, + "condition": { + "urlFilter": "||openrouter.ai/*", + "resourceTypes": ["main_frame", "sub_frame", "xmlhttprequest", "websocket"] + } + }, + { + "id": 12, + "priority": 1, + "action": { + "type": "modifyHeaders", + "responseHeaders": [ + { "header": "x-frame-options", "operation": "remove" }, + { "header": "content-security-policy", "operation": "remove" } + ] + }, + "condition": { + "urlFilter": "||localhost:4096/*", + "resourceTypes": ["main_frame", "sub_frame", "xmlhttprequest", "websocket"] + } + } +] diff --git a/packages/extension/.output/chrome-mv3/manifest.json b/packages/extension/.output/chrome-mv3/manifest.json new file mode 100644 index 00000000000..8c56b46b752 --- /dev/null +++ b/packages/extension/.output/chrome-mv3/manifest.json @@ -0,0 +1 @@ +{"manifest_version":3,"name":"Eidorail - AI Chat Sidebar","description":"AI-powered chat sidebar with OpenCode integration and multi-platform support","version":"0.1.0","icons":{"16":"icon-16.png","32":"icon-32.png","48":"icon-48.png","128":"icon-128.png"},"permissions":["sidePanel","storage","tabs","activeTab","scripting","declarativeNetRequest","tabGroups"],"host_permissions":["http://localhost:4096/*","http://127.0.0.1:4096/*","http://localhost:4097/*","http://127.0.0.1:4097/*","https://claude.ai/*","https://chat.openai.com/*","https://chatgpt.com/*","https://gemini.google.com/*",""],"side_panel":{"default_path":"sidepanel.html"},"action":{"default_title":"Eidorail","default_icon":{"16":"icon-16.png","32":"icon-32.png","48":"icon-48.png","128":"icon-128.png"}},"commands":{"_execute_action":{"suggested_key":{"default":"Ctrl+Shift+E","mac":"Command+Shift+E"},"description":"Open Eidorail side panel"},"toggle-side-panel":{"suggested_key":{"default":"Ctrl+E","mac":"Command+E"},"description":"Toggle Eidorail side panel"}},"options_ui":{"page":"options.html"},"declarative_net_request":{"rule_resources":[{"id":"iframe_rules","enabled":true,"path":"iframe-rules.json"}]},"background":{"service_worker":"background.js"},"content_scripts":[{"matches":["https://claude.ai/*"],"run_at":"document_start","js":["content-scripts/claude-iframe-fix.js"],"world":"MAIN"},{"matches":["https://chat.openai.com/*","https://chatgpt.com/*","https://claude.ai/*","https://gemini.google.com/*"],"js":["content-scripts/conversation-export.js"]},{"matches":["http://127.0.0.1:4096/*","http://localhost:4096/*"],"all_frames":true,"run_at":"document_start","js":["content-scripts/opencode-compact.js"]},{"matches":[""],"run_at":"document_idle","js":["content-scripts/page-context.js"]}]} \ No newline at end of file diff --git a/packages/extension/.output/chrome-mv3/options.html b/packages/extension/.output/chrome-mv3/options.html new file mode 100644 index 00000000000..012fdb189ce --- /dev/null +++ b/packages/extension/.output/chrome-mv3/options.html @@ -0,0 +1,14 @@ + + + + + + Eidorail Options + + + + + +
+ + diff --git a/packages/extension/.output/chrome-mv3/sidepanel.html b/packages/extension/.output/chrome-mv3/sidepanel.html new file mode 100644 index 00000000000..854b6c50072 --- /dev/null +++ b/packages/extension/.output/chrome-mv3/sidepanel.html @@ -0,0 +1,14 @@ + + + + + + Eidorail + + + + + +
+ + diff --git a/packages/extension/.wxt/tsconfig.json b/packages/extension/.wxt/tsconfig.json new file mode 100644 index 00000000000..899f31c6ac6 --- /dev/null +++ b/packages/extension/.wxt/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "Bundler", + "noEmit": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "strict": true, + "skipLibCheck": true, + "paths": { + "@": [".."], + "@/*": ["../*"], + "~": [".."], + "~/*": ["../*"], + "@@": [".."], + "@@/*": ["../*"], + "~~": [".."], + "~~/*": ["../*"] + } + }, + "include": [ + "../**/*", + "./wxt.d.ts" + ], + "exclude": ["../.output"] +} \ No newline at end of file diff --git a/packages/extension/.wxt/types/globals.d.ts b/packages/extension/.wxt/types/globals.d.ts new file mode 100644 index 00000000000..b8aa6c7230f --- /dev/null +++ b/packages/extension/.wxt/types/globals.d.ts @@ -0,0 +1,15 @@ +// Generated by wxt +interface ImportMetaEnv { + readonly MANIFEST_VERSION: 2 | 3; + readonly BROWSER: string; + readonly CHROME: boolean; + readonly FIREFOX: boolean; + readonly SAFARI: boolean; + readonly EDGE: boolean; + readonly OPERA: boolean; + readonly COMMAND: "build" | "serve"; + readonly ENTRYPOINT: string; +} +interface ImportMeta { + readonly env: ImportMetaEnv +} diff --git a/packages/extension/.wxt/types/i18n.d.ts b/packages/extension/.wxt/types/i18n.d.ts new file mode 100644 index 00000000000..0a0577a4350 --- /dev/null +++ b/packages/extension/.wxt/types/i18n.d.ts @@ -0,0 +1,81 @@ +// Generated by wxt +import "wxt/browser"; + +declare module "wxt/browser" { + /** + * See https://developer.chrome.com/docs/extensions/reference/i18n/#method-getMessage + */ + interface GetMessageOptions { + /** + * See https://developer.chrome.com/docs/extensions/reference/i18n/#method-getMessage + */ + escapeLt?: boolean + } + + export interface WxtI18n extends I18n.Static { + /** + * The extension or app ID; you might use this string to construct URLs for resources inside the extension. Even unlocalized extensions can use this message. + * Note: You can't use this message in a manifest file. + * + * "" + */ + getMessage( + messageName: "@@extension_id", + substitutions?: string | string[], + options?: GetMessageOptions, + ): string; + /** + * "" + */ + getMessage( + messageName: "@@ui_locale", + substitutions?: string | string[], + options?: GetMessageOptions, + ): string; + /** + * The text direction for the current locale, either "ltr" for left-to-right languages such as English or "rtl" for right-to-left languages such as Japanese. + * + * "" + */ + getMessage( + messageName: "@@bidi_dir", + substitutions?: string | string[], + options?: GetMessageOptions, + ): string; + /** + * If the @@bidi_dir is "ltr", then this is "rtl"; otherwise, it's "ltr". + * + * "" + */ + getMessage( + messageName: "@@bidi_reversed_dir", + substitutions?: string | string[], + options?: GetMessageOptions, + ): string; + /** + * If the @@bidi_dir is "ltr", then this is "left"; otherwise, it's "right". + * + * "" + */ + getMessage( + messageName: "@@bidi_start_edge", + substitutions?: string | string[], + options?: GetMessageOptions, + ): string; + /** + * If the @@bidi_dir is "ltr", then this is "right"; otherwise, it's "left". + * + * "" + */ + getMessage( + messageName: "@@bidi_end_edge", + substitutions?: string | string[], + options?: GetMessageOptions, + ): string; + getMessage( + messageName: "@@extension_id" | "@@ui_locale" | "@@bidi_dir" | "@@bidi_reversed_dir" | "@@bidi_start_edge" | "@@bidi_end_edge", + substitutions?: string | string[], + options?: GetMessageOptions, + ): string; + } +} diff --git a/packages/extension/.wxt/types/imports-module.d.ts b/packages/extension/.wxt/types/imports-module.d.ts new file mode 100644 index 00000000000..5f2ce80a43f --- /dev/null +++ b/packages/extension/.wxt/types/imports-module.d.ts @@ -0,0 +1,32 @@ +// Generated by wxt +// Types for the #import virtual module +declare module '#imports' { + export { browser, Browser } from 'wxt/browser'; + export { storage, StorageArea, WxtStorage, WxtStorageItem, StorageItemKey, StorageAreaChanges, MigrationError } from 'wxt/utils/storage'; + export { useAppConfig } from 'wxt/utils/app-config'; + export { ContentScriptContext, WxtWindowEventMap } from 'wxt/utils/content-script-context'; + export { createIframeUi, IframeContentScriptUi, IframeContentScriptUiOptions } from 'wxt/utils/content-script-ui/iframe'; + export { createIntegratedUi, IntegratedContentScriptUi, IntegratedContentScriptUiOptions } from 'wxt/utils/content-script-ui/integrated'; + export { createShadowRootUi, ShadowRootContentScriptUi, ShadowRootContentScriptUiOptions } from 'wxt/utils/content-script-ui/shadow-root'; + export { ContentScriptUi, ContentScriptUiOptions, ContentScriptOverlayAlignment, ContentScriptAppendMode, ContentScriptInlinePositioningOptions, ContentScriptOverlayPositioningOptions, ContentScriptModalPositioningOptions, ContentScriptPositioningOptions, ContentScriptAnchoredOptions, AutoMountOptions, StopAutoMount, AutoMount } from 'wxt/utils/content-script-ui/types'; + export { defineAppConfig, WxtAppConfig } from 'wxt/utils/define-app-config'; + export { defineBackground } from 'wxt/utils/define-background'; + export { defineContentScript } from 'wxt/utils/define-content-script'; + export { defineUnlistedScript } from 'wxt/utils/define-unlisted-script'; + export { defineWxtPlugin } from 'wxt/utils/define-wxt-plugin'; + export { injectScript, ScriptPublicPath, InjectScriptOptions } from 'wxt/utils/inject-script'; + export { InvalidMatchPattern, MatchPattern } from 'wxt/utils/match-patterns'; + export { createSignal, createEffect, createMemo, createResource, onMount, onCleanup, onError, untrack, batch, on, createRoot, mergeProps, splitProps, useTransition, observable, mapArray, indexArray, createContext, useContext, children, lazy, createDeferred, createRenderEffect, createSelector, For, Show, Switch, Match, Index, ErrorBoundary, Suspense, SuspenseList } from 'solid-js'; + export { createStore, produce, reconcile, createMutable } from 'solid-js/store'; + export { Dynamic, hydrate, render, renderToString, renderToStringAsync, renderToStream, isServer, Portal } from 'solid-js/web'; + export { fakeBrowser } from 'wxt/testing'; + export { SettingsPanel } from '../components/SettingsPanel'; + export { getCurrentWindowTabs, getActiveTab, captureScreenshot, canCaptureUrl, getAllWindowsTabs, formatTabTree, TabInfo, TabGroup, GroupedTabs, WindowInfo, BrowserTree, CaptureMessageType, CaptureMessage, CaptureResponse } from '../utils/browser-context'; + export { getPageDimensions, scrollTo, getCurrentScroll, stitchImages, FullPageCaptureResult, PageDimensions, CaptureProgress, ProgressCallback } from '../utils/full-page-screenshot'; + export { htmlToMarkdown, elementToMarkdown, formatCapturedContent, formatScreenshot, turndownService } from '../utils/markdown-converter'; + export { getOpenChamberTryCfTunnel, setOpenChamberTryCfTunnel, getOpenChamberExtraArgs, setOpenChamberExtraArgs, getOpenChamberConnectionMode, setOpenChamberConnectionMode, getOpenChamberPort, saveOpenChamberPort, getOpenChamberRemoteUrl, setOpenChamberRemoteUrl, getOpenChamberUrl, checkOpenChamberStatus, retryOpenChamberConnection, OpenChamberConnectionMode } from '../utils/openchamber-status'; + export { getConnectionMode, setConnectionMode, getOpenCodePort, saveOpenCodePort, getRemoteUrl, setRemoteUrl, getWorkspaceDirectory, setWorkspaceDirectory, isWorkspaceEnabled, setWorkspaceEnabled, getOpenCodeUrl, checkUrl, checkOpenCodeStatus, manualPortScan, retryConnection, ConnectionStatus, ConnectionMode } from '../utils/opencode-status'; + export { PLATFORMS, getConversationId, isConversationPage, isExportSupported, getPlatformConfig, getExportablePlatforms, PlatformConfig } from '../utils/platforms'; + export { DEFAULT_PLATFORMS, PRESET_PLATFORMS, PLATFORM_ICONS, getIcon, loadPlatforms, savePlatformsToStorage, OpenCodeStatus } from '../utils/shared'; + export { detectPlatform, getStartCommand, getBackgroundStartCommand, launchWindowsTerminal, launchOpenCodeInTerminal, copyToClipboard, Platform } from '../utils/terminal-launcher'; +} diff --git a/packages/extension/.wxt/types/imports.d.ts b/packages/extension/.wxt/types/imports.d.ts new file mode 100644 index 00000000000..70669146813 --- /dev/null +++ b/packages/extension/.wxt/types/imports.d.ts @@ -0,0 +1,177 @@ +// Generated by wxt +export {} +declare global { + const ContentScriptContext: typeof import('wxt/utils/content-script-context').ContentScriptContext + const DEFAULT_PLATFORMS: typeof import('/home/jordan/github/eidorail/packages/extension/utils/shared').DEFAULT_PLATFORMS + const Dynamic: typeof import('solid-js/web').Dynamic + const ErrorBoundary: typeof import('solid-js').ErrorBoundary + const For: typeof import('solid-js').For + const Index: typeof import('solid-js').Index + const InvalidMatchPattern: typeof import('wxt/utils/match-patterns').InvalidMatchPattern + const Match: typeof import('solid-js').Match + const MatchPattern: typeof import('wxt/utils/match-patterns').MatchPattern + const PLATFORMS: typeof import('/home/jordan/github/eidorail/packages/extension/utils/platforms').PLATFORMS + const PLATFORM_ICONS: typeof import('/home/jordan/github/eidorail/packages/extension/utils/shared').PLATFORM_ICONS + const PRESET_PLATFORMS: typeof import('/home/jordan/github/eidorail/packages/extension/utils/shared').PRESET_PLATFORMS + const Portal: typeof import('solid-js/web').Portal + const SettingsPanel: typeof import('/home/jordan/github/eidorail/packages/extension/components/SettingsPanel').SettingsPanel + const Show: typeof import('solid-js').Show + const Suspense: typeof import('solid-js').Suspense + const SuspenseList: typeof import('solid-js').SuspenseList + const Switch: typeof import('solid-js').Switch + const batch: typeof import('solid-js').batch + const browser: typeof import('wxt/browser').browser + const canCaptureUrl: typeof import('/home/jordan/github/eidorail/packages/extension/utils/browser-context').canCaptureUrl + const captureScreenshot: typeof import('/home/jordan/github/eidorail/packages/extension/utils/browser-context').captureScreenshot + const checkOpenChamberStatus: typeof import('/home/jordan/github/eidorail/packages/extension/utils/openchamber-status').checkOpenChamberStatus + const checkOpenCodeStatus: typeof import('/home/jordan/github/eidorail/packages/extension/utils/opencode-status').checkOpenCodeStatus + const checkUrl: typeof import('/home/jordan/github/eidorail/packages/extension/utils/opencode-status').checkUrl + const children: typeof import('solid-js').children + const copyToClipboard: typeof import('/home/jordan/github/eidorail/packages/extension/utils/terminal-launcher').copyToClipboard + const createContext: typeof import('solid-js').createContext + const createDeferred: typeof import('solid-js').createDeferred + const createEffect: typeof import('solid-js').createEffect + const createIframeUi: typeof import('wxt/utils/content-script-ui/iframe').createIframeUi + const createIntegratedUi: typeof import('wxt/utils/content-script-ui/integrated').createIntegratedUi + const createMemo: typeof import('solid-js').createMemo + const createMutable: typeof import('solid-js/store').createMutable + const createRenderEffect: typeof import('solid-js').createRenderEffect + const createResource: typeof import('solid-js').createResource + const createRoot: typeof import('solid-js').createRoot + const createSelector: typeof import('solid-js').createSelector + const createShadowRootUi: typeof import('wxt/utils/content-script-ui/shadow-root').createShadowRootUi + const createSignal: typeof import('solid-js').createSignal + const createStore: typeof import('solid-js/store').createStore + const defineAppConfig: typeof import('wxt/utils/define-app-config').defineAppConfig + const defineBackground: typeof import('wxt/utils/define-background').defineBackground + const defineContentScript: typeof import('wxt/utils/define-content-script').defineContentScript + const defineUnlistedScript: typeof import('wxt/utils/define-unlisted-script').defineUnlistedScript + const defineWxtPlugin: typeof import('wxt/utils/define-wxt-plugin').defineWxtPlugin + const detectPlatform: typeof import('/home/jordan/github/eidorail/packages/extension/utils/terminal-launcher').detectPlatform + const elementToMarkdown: typeof import('/home/jordan/github/eidorail/packages/extension/utils/markdown-converter').elementToMarkdown + const fakeBrowser: typeof import('wxt/testing').fakeBrowser + const formatCapturedContent: typeof import('/home/jordan/github/eidorail/packages/extension/utils/markdown-converter').formatCapturedContent + const formatScreenshot: typeof import('/home/jordan/github/eidorail/packages/extension/utils/markdown-converter').formatScreenshot + const formatTabTree: typeof import('/home/jordan/github/eidorail/packages/extension/utils/browser-context').formatTabTree + const getActiveTab: typeof import('/home/jordan/github/eidorail/packages/extension/utils/browser-context').getActiveTab + const getAllWindowsTabs: typeof import('/home/jordan/github/eidorail/packages/extension/utils/browser-context').getAllWindowsTabs + const getBackgroundStartCommand: typeof import('/home/jordan/github/eidorail/packages/extension/utils/terminal-launcher').getBackgroundStartCommand + const getConnectionMode: typeof import('/home/jordan/github/eidorail/packages/extension/utils/opencode-status').getConnectionMode + const getConversationId: typeof import('/home/jordan/github/eidorail/packages/extension/utils/platforms').getConversationId + const getCurrentScroll: typeof import('/home/jordan/github/eidorail/packages/extension/utils/full-page-screenshot').getCurrentScroll + const getCurrentWindowTabs: typeof import('/home/jordan/github/eidorail/packages/extension/utils/browser-context').getCurrentWindowTabs + const getExportablePlatforms: typeof import('/home/jordan/github/eidorail/packages/extension/utils/platforms').getExportablePlatforms + const getIcon: typeof import('/home/jordan/github/eidorail/packages/extension/utils/shared').getIcon + const getOpenChamberConnectionMode: typeof import('/home/jordan/github/eidorail/packages/extension/utils/openchamber-status').getOpenChamberConnectionMode + const getOpenChamberExtraArgs: typeof import('/home/jordan/github/eidorail/packages/extension/utils/openchamber-status').getOpenChamberExtraArgs + const getOpenChamberPort: typeof import('/home/jordan/github/eidorail/packages/extension/utils/openchamber-status').getOpenChamberPort + const getOpenChamberRemoteUrl: typeof import('/home/jordan/github/eidorail/packages/extension/utils/openchamber-status').getOpenChamberRemoteUrl + const getOpenChamberTryCfTunnel: typeof import('/home/jordan/github/eidorail/packages/extension/utils/openchamber-status').getOpenChamberTryCfTunnel + const getOpenChamberUrl: typeof import('/home/jordan/github/eidorail/packages/extension/utils/openchamber-status').getOpenChamberUrl + const getOpenCodePort: typeof import('/home/jordan/github/eidorail/packages/extension/utils/opencode-status').getOpenCodePort + const getOpenCodeUrl: typeof import('/home/jordan/github/eidorail/packages/extension/utils/opencode-status').getOpenCodeUrl + const getPageDimensions: typeof import('/home/jordan/github/eidorail/packages/extension/utils/full-page-screenshot').getPageDimensions + const getPlatformConfig: typeof import('/home/jordan/github/eidorail/packages/extension/utils/platforms').getPlatformConfig + const getRemoteUrl: typeof import('/home/jordan/github/eidorail/packages/extension/utils/opencode-status').getRemoteUrl + const getStartCommand: typeof import('/home/jordan/github/eidorail/packages/extension/utils/terminal-launcher').getStartCommand + const getWorkspaceDirectory: typeof import('/home/jordan/github/eidorail/packages/extension/utils/opencode-status').getWorkspaceDirectory + const htmlToMarkdown: typeof import('/home/jordan/github/eidorail/packages/extension/utils/markdown-converter').htmlToMarkdown + const hydrate: typeof import('solid-js/web').hydrate + const indexArray: typeof import('solid-js').indexArray + const injectScript: typeof import('wxt/utils/inject-script').injectScript + const isConversationPage: typeof import('/home/jordan/github/eidorail/packages/extension/utils/platforms').isConversationPage + const isExportSupported: typeof import('/home/jordan/github/eidorail/packages/extension/utils/platforms').isExportSupported + const isServer: typeof import('solid-js/web').isServer + const isWorkspaceEnabled: typeof import('/home/jordan/github/eidorail/packages/extension/utils/opencode-status').isWorkspaceEnabled + const launchOpenCodeInTerminal: typeof import('/home/jordan/github/eidorail/packages/extension/utils/terminal-launcher').launchOpenCodeInTerminal + const launchWindowsTerminal: typeof import('/home/jordan/github/eidorail/packages/extension/utils/terminal-launcher').launchWindowsTerminal + const lazy: typeof import('solid-js').lazy + const loadPlatforms: typeof import('/home/jordan/github/eidorail/packages/extension/utils/shared').loadPlatforms + const manualPortScan: typeof import('/home/jordan/github/eidorail/packages/extension/utils/opencode-status').manualPortScan + const mapArray: typeof import('solid-js').mapArray + const mergeProps: typeof import('solid-js').mergeProps + const observable: typeof import('solid-js').observable + const on: typeof import('solid-js').on + const onCleanup: typeof import('solid-js').onCleanup + const onError: typeof import('solid-js').onError + const onMount: typeof import('solid-js').onMount + const produce: typeof import('solid-js/store').produce + const reconcile: typeof import('solid-js/store').reconcile + const render: typeof import('solid-js/web').render + const renderToStream: typeof import('solid-js/web').renderToStream + const renderToString: typeof import('solid-js/web').renderToString + const renderToStringAsync: typeof import('solid-js/web').renderToStringAsync + const retryConnection: typeof import('/home/jordan/github/eidorail/packages/extension/utils/opencode-status').retryConnection + const retryOpenChamberConnection: typeof import('/home/jordan/github/eidorail/packages/extension/utils/openchamber-status').retryOpenChamberConnection + const saveOpenChamberPort: typeof import('/home/jordan/github/eidorail/packages/extension/utils/openchamber-status').saveOpenChamberPort + const saveOpenCodePort: typeof import('/home/jordan/github/eidorail/packages/extension/utils/opencode-status').saveOpenCodePort + const savePlatformsToStorage: typeof import('/home/jordan/github/eidorail/packages/extension/utils/shared').savePlatformsToStorage + const scrollTo: typeof import('/home/jordan/github/eidorail/packages/extension/utils/full-page-screenshot').scrollTo + const setConnectionMode: typeof import('/home/jordan/github/eidorail/packages/extension/utils/opencode-status').setConnectionMode + const setOpenChamberConnectionMode: typeof import('/home/jordan/github/eidorail/packages/extension/utils/openchamber-status').setOpenChamberConnectionMode + const setOpenChamberExtraArgs: typeof import('/home/jordan/github/eidorail/packages/extension/utils/openchamber-status').setOpenChamberExtraArgs + const setOpenChamberRemoteUrl: typeof import('/home/jordan/github/eidorail/packages/extension/utils/openchamber-status').setOpenChamberRemoteUrl + const setOpenChamberTryCfTunnel: typeof import('/home/jordan/github/eidorail/packages/extension/utils/openchamber-status').setOpenChamberTryCfTunnel + const setRemoteUrl: typeof import('/home/jordan/github/eidorail/packages/extension/utils/opencode-status').setRemoteUrl + const setWorkspaceDirectory: typeof import('/home/jordan/github/eidorail/packages/extension/utils/opencode-status').setWorkspaceDirectory + const setWorkspaceEnabled: typeof import('/home/jordan/github/eidorail/packages/extension/utils/opencode-status').setWorkspaceEnabled + const splitProps: typeof import('solid-js').splitProps + const stitchImages: typeof import('/home/jordan/github/eidorail/packages/extension/utils/full-page-screenshot').stitchImages + const storage: typeof import('wxt/utils/storage').storage + const turndownService: typeof import('/home/jordan/github/eidorail/packages/extension/utils/markdown-converter').turndownService + const untrack: typeof import('solid-js').untrack + const useAppConfig: typeof import('wxt/utils/app-config').useAppConfig + const useContext: typeof import('solid-js').useContext + const useTransition: typeof import('solid-js').useTransition +} +// for type re-export +declare global { + // @ts-ignore + export type { Browser } from 'wxt/browser' + import('wxt/browser') + // @ts-ignore + export type { StorageArea, WxtStorage, WxtStorageItem, StorageItemKey, StorageAreaChanges, MigrationError } from 'wxt/utils/storage' + import('wxt/utils/storage') + // @ts-ignore + export type { WxtWindowEventMap } from 'wxt/utils/content-script-context' + import('wxt/utils/content-script-context') + // @ts-ignore + export type { IframeContentScriptUi, IframeContentScriptUiOptions } from 'wxt/utils/content-script-ui/iframe' + import('wxt/utils/content-script-ui/iframe') + // @ts-ignore + export type { IntegratedContentScriptUi, IntegratedContentScriptUiOptions } from 'wxt/utils/content-script-ui/integrated' + import('wxt/utils/content-script-ui/integrated') + // @ts-ignore + export type { ShadowRootContentScriptUi, ShadowRootContentScriptUiOptions } from 'wxt/utils/content-script-ui/shadow-root' + import('wxt/utils/content-script-ui/shadow-root') + // @ts-ignore + export type { ContentScriptUi, ContentScriptUiOptions, ContentScriptOverlayAlignment, ContentScriptAppendMode, ContentScriptInlinePositioningOptions, ContentScriptOverlayPositioningOptions, ContentScriptModalPositioningOptions, ContentScriptPositioningOptions, ContentScriptAnchoredOptions, AutoMountOptions, StopAutoMount, AutoMount } from 'wxt/utils/content-script-ui/types' + import('wxt/utils/content-script-ui/types') + // @ts-ignore + export type { WxtAppConfig } from 'wxt/utils/define-app-config' + import('wxt/utils/define-app-config') + // @ts-ignore + export type { ScriptPublicPath, InjectScriptOptions } from 'wxt/utils/inject-script' + import('wxt/utils/inject-script') + // @ts-ignore + export type { TabInfo, TabGroup, GroupedTabs, WindowInfo, BrowserTree, CaptureMessageType, CaptureMessage, CaptureResponse } from '/home/jordan/github/eidorail/packages/extension/utils/browser-context' + import('/home/jordan/github/eidorail/packages/extension/utils/browser-context') + // @ts-ignore + export type { FullPageCaptureResult, PageDimensions, CaptureProgress, ProgressCallback } from '/home/jordan/github/eidorail/packages/extension/utils/full-page-screenshot' + import('/home/jordan/github/eidorail/packages/extension/utils/full-page-screenshot') + // @ts-ignore + export type { OpenChamberConnectionMode } from '/home/jordan/github/eidorail/packages/extension/utils/openchamber-status' + import('/home/jordan/github/eidorail/packages/extension/utils/openchamber-status') + // @ts-ignore + export type { ConnectionStatus, ConnectionMode } from '/home/jordan/github/eidorail/packages/extension/utils/opencode-status' + import('/home/jordan/github/eidorail/packages/extension/utils/opencode-status') + // @ts-ignore + export type { PlatformConfig } from '/home/jordan/github/eidorail/packages/extension/utils/platforms' + import('/home/jordan/github/eidorail/packages/extension/utils/platforms') + // @ts-ignore + export type { OpenCodeStatus } from '/home/jordan/github/eidorail/packages/extension/utils/shared' + import('/home/jordan/github/eidorail/packages/extension/utils/shared') + // @ts-ignore + export type { Platform } from '/home/jordan/github/eidorail/packages/extension/utils/terminal-launcher' + import('/home/jordan/github/eidorail/packages/extension/utils/terminal-launcher') +} diff --git a/packages/extension/.wxt/types/paths.d.ts b/packages/extension/.wxt/types/paths.d.ts new file mode 100644 index 00000000000..47cde68fb49 --- /dev/null +++ b/packages/extension/.wxt/types/paths.d.ts @@ -0,0 +1,25 @@ +// Generated by wxt +import "wxt/browser"; + +declare module "wxt/browser" { + export type PublicPath = + | "" + | "/" + | "/background.js" + | "/content-scripts/claude-iframe-fix.js" + | "/content-scripts/conversation-export.js" + | "/content-scripts/opencode-compact.js" + | "/content-scripts/page-context.js" + | "/icon-128.png" + | "/icon-16.png" + | "/icon-32.png" + | "/icon-48.png" + | "/iframe-rules.json" + | "/options.html" + | "/sidepanel.html" + type HtmlPublicPath = Extract + export interface WxtRuntime { + getURL(path: PublicPath): string; + getURL(path: `${HtmlPublicPath}${string}`): string; + } +} diff --git a/packages/extension/.wxt/wxt.d.ts b/packages/extension/.wxt/wxt.d.ts new file mode 100644 index 00000000000..f6ee9136767 --- /dev/null +++ b/packages/extension/.wxt/wxt.d.ts @@ -0,0 +1,8 @@ +// Generated by wxt +/// +/// +/// +/// +/// +/// +/// diff --git a/packages/extension/AGENTS.md b/packages/extension/AGENTS.md new file mode 100644 index 00000000000..310957c4363 --- /dev/null +++ b/packages/extension/AGENTS.md @@ -0,0 +1,215 @@ +# AGENTS.md - Eidorail Extension Development Guidelines + +## Project Overview + +**Eidorail** is a browser extension that provides a multi-platform AI chat sidebar with OpenCode integration. It's built with: + +- **WXT** (Web Extension Tools) for the extension framework +- **SolidJS** for reactive UI +- **TypeScript** for type safety +- **Vite** for bundling + +This extension is part of the larger Eidorail project (forked from OpenCode/sst) and lives in `packages/extension/`. + +## Commands + +```bash +# Development (hot reload) +bun run dev # Chrome +bun run dev:firefox # Firefox + +# Production build +bun run build # Chrome → .output/chrome-mv3/ +bun run build:firefox # Firefox + +# Package for distribution +bun run zip +bun run zip:firefox + +# Type checking +bun run typecheck +``` + +## Loading the Extension + +### Chrome/Edge + +1. Go to `chrome://extensions` or `edge://extensions` +2. Enable "Developer mode" +3. Click "Load unpacked" +4. Select: `packages/extension/.output/chrome-mv3/` + +### From WSL (Windows path) + +``` +\\wsl.localhost\Ubuntu\home\jordan\github\eidorail\packages\extension\.output\chrome-mv3 +``` + +## Architecture + +``` +packages/extension/ +├── entrypoints/ +│ ├── background.ts # Service worker - sidepanel management, message handling +│ └── sidepanel/ +│ ├── index.html # Sidepanel entry HTML +│ ├── main.tsx # SolidJS app - platform tabs, settings modal +│ └── style.css # Dark theme styles +├── public/ +│ ├── icon-*.png # Extension icons +│ └── iframe-rules.json # Declarative net request rules for iframe embedding +├── wxt.config.ts # WXT configuration + manifest settings +├── package.json +└── tsconfig.json +``` + +## Key Features + +### Platform Tab Bar + +- Shows platform icons at the top (Eidorail/OpenCode, Claude Code, ChatGPT, Gemini) +- Click to switch between platforms (lazy-loads iframes) +- "+" button opens settings to add more platforms + +### Settings Modal + +- Manage active platforms (reorder, hide/show, remove) +- Add preset platforms (Perplexity, DeepSeek, OpenRouter, Poe, etc.) +- Add custom platforms with any URL +- Restore defaults + +### OpenCode Integration + +- First tab embeds OpenCode web UI (`http://localhost:4096/`) +- Shows connection prompt if OpenCode isn't running +- User runs `opencode web` to start the server + +## Code Style + +- **Framework**: SolidJS with JSX (`.tsx` files) +- **State**: Use `createSignal()` for reactive state +- **Effects**: Use `onMount()` for initialization, `createEffect()` for reactive side effects +- **Conditionals**: Use `` for conditional rendering +- **Lists**: Use `` for list rendering +- **Icons**: SVG strings in `PLATFORM_ICONS` record, rendered via `innerHTML` + +### Example Pattern + +```tsx +const [platforms, setPlatforms] = createSignal(loadPlatforms()) + +function savePlatforms(p: Platform[]) { + localStorage.setItem("eidorail-platforms", JSON.stringify(p)) + setPlatforms(p) +} + +// In JSX: +; p.isVisible)}> + {(platform) => ( + + )} + +``` + +## Current State & Next Steps + +### Completed + +- Basic extension structure with WXT + SolidJS +- Platform tab bar with 5 default platforms (OpenCode, ChatGPT, Claude, Gemini, Claude Code) +- Settings modal with full platform management +- Preset platforms list (8 additional AI platforms) +- Custom platform support +- Improved icon visibility +- "Open in new tab" functionality +- Responsive CSS for narrow sidebar widths (400px and 300px breakpoints) +- Default workspace root setting in settings modal +- Compact mode support: OpenCode loaded with `?compact=true` for narrow sidebar +- Multi-platform conversation export (Claude, ChatGPT, Gemini) to Markdown/JSON +- Platform detection utilities for 11 AI platforms +- Improved iframe rules for 12 platforms with better header handling + +### Compact Mode Implementation + +The extension uses a **content script approach** that works with vanilla `sst/opencode` - no modifications to opencode itself are required. + +1. **Extension**: `packages/extension/entrypoints/opencode-compact.content.ts` - Content script that: + - Detects iframe context (`window.self !== window.top`) + - Injects CSS to hide sidebar and optimize for narrow widths + - Adds floating toggle button to show/hide sidebar as overlay + - Modifies localStorage to ensure sidebar starts closed + +2. **Extension**: `packages/extension/entrypoints/sidepanel/main.tsx` - OpenCode URL points to `http://localhost:4096/` + +This approach: + +- Works with vanilla `sst/opencode` installed via `npx opencode` +- No upstream conflicts or maintenance burden +- Content script only activates when in iframe (extension context) +- Normal OpenCode experience when accessed directly in browser + +### Known Limitations + +1. **Claude.ai Sidebar** - Claude.ai hides their sidebar toggle (opacity: 0) at narrow widths. This is their responsive behavior that we cannot control from an iframe. Users can use "Open in new tab" for full functionality. + +### Pending Improvements + +1. **OpenCode Project Selection** + - Review and improve project selection UX in native OpenCode web experience + - Consider adding project picker in the extension UI + - Use workspace root setting when launching OpenCode + +## Important Files + +| File | Purpose | +| --------------------------------- | -------------------------------------- | +| `entrypoints/sidepanel/main.tsx` | Main app component, all UI logic | +| `entrypoints/sidepanel/style.css` | All styles (CSS variables, dark theme) | +| `entrypoints/background.ts` | Service worker, sidepanel behavior | +| `wxt.config.ts` | Manifest permissions, icons, commands | +| `public/iframe-rules.json` | Rules to strip X-Frame-Options headers | + +## CSS Variables + +```css +--bg-primary: #131010; /* Main background */ +--bg-secondary: #1a1717; /* Tab bar, modal background */ +--bg-tertiary: #242121; /* Hover states, inputs */ +--text-primary: #f8f7f7; /* Main text */ +--text-secondary: #c8c5c5; /* Secondary text */ +--text-muted: #8b8888; /* Muted/disabled text */ +--accent: #e08a30; /* Orange accent (active tabs, buttons) */ +--border: #3d3a3a; /* Border color */ +``` + +## Manifest Permissions + +The extension requests: + +- `sidePanel` - Side panel API +- `storage` - localStorage for settings +- `tabs` - Tab management, open in new tab +- `activeTab` - Current tab info +- `scripting` - Execute scripts in tabs +- `declarativeNetRequest` - Modify headers for iframe embedding + +Host permissions include localhost:4096 (OpenCode) and all major AI chat platforms. + +## Known Issues + +- **Type error in wxt.config.ts**: Version mismatch between vite and wxt's internal vite. Does NOT affect builds - ignore the TypeScript error. +- **Iframe embedding**: Some sites may still block embedding despite header stripping. Claude.ai and ChatGPT generally work. + +## Testing Checklist + +After changes, verify: + +- [ ] Extension builds without errors (`bun run build`) +- [ ] Sidepanel opens when clicking extension icon +- [ ] Platform switching works (tabs change, iframes load) +- [ ] Settings modal opens/closes properly +- [ ] Can add/remove/reorder platforms +- [ ] "Open in new tab" opens correct URL +- [ ] OpenCode connection detection works diff --git a/packages/extension/README.md b/packages/extension/README.md new file mode 100644 index 00000000000..607ea78f225 --- /dev/null +++ b/packages/extension/README.md @@ -0,0 +1,110 @@ +# Eidorail Browser Extension + +A multi-platform AI chat sidebar with OpenCode integration for Chrome and Firefox. + +## Features + +- **Multi-Platform Support**: Switch between OpenCode, Claude, ChatGPT, Gemini, and more +- **OpenCode Integration**: Seamless connection to local or remote OpenCode servers +- **Customizable**: Add, remove, and reorder AI platforms +- **Compact Mode**: Optimized UI for narrow sidebar widths + +## Installation + +### From Source + +```bash +# Development (hot reload) +bun run dev # Chrome +bun run dev:firefox # Firefox + +# Production build +bun run build # Chrome +bun run build:firefox # Firefox +``` + +### Loading in Browser + +1. Go to `chrome://extensions` (or `edge://extensions`) +2. Enable "Developer mode" +3. Click "Load unpacked" +4. Select: `packages/extension/.output/chrome-mv3/` + +## OpenCode Integration + +When OpenCode isn't running, the extension shows installation instructions using the **official OpenCode install methods**: + +### Why Official Install Scripts? + +We intentionally use OpenCode's official installation commands rather than custom protocol handlers or bundled installers because: + +1. **Consistency**: Users get the same installation experience documented in OpenCode's official docs +2. **Maintainability**: No custom code to maintain as OpenCode's installation methods evolve +3. **Trust**: Users can verify the commands match official documentation +4. **Cross-platform**: Official scripts handle all platform-specific requirements + +### Supported Installation Methods + +| Platform | Command | +| ----------- | ------------------------------------------------ | +| Windows | `winget install sst.opencode` | +| macOS/Linux | `curl -fsSL https://opencode.ai/install \| bash` | + +Alternative methods (documented in [OpenCode README](https://github.com/sst/opencode)): + +- **Homebrew**: `brew install opencode` +- **Chocolatey**: `choco install opencode` +- **Scoop**: `scoop install extras/opencode` +- **npm**: `npm i -g opencode-ai@latest` + +### Starting the Server + +After installation, users run: + +```bash +opencode serve --port 4096 +``` + +The extension detects when OpenCode is running and automatically connects. + +## Architecture + +``` +packages/extension/ +├── entrypoints/ +│ ├── background.ts # Service worker +│ ├── opencode-compact.content.ts # Compact mode injection +│ └── sidepanel/ +│ ├── main.tsx # SolidJS app +│ └── style.css # Dark theme +├── utils/ +│ ├── opencode-status.ts # Connection detection +│ └── terminal-launcher.ts # Platform utilities +├── public/ +│ └── iframe-rules.json # Header modification rules +└── wxt.config.ts # Extension config +``` + +## Configuration + +### Connection Settings + +- **Local Mode**: Connect to `localhost:{port}` (default: 4096) +- **Remote Mode**: Connect to a remote URL (Tailscale, Cloudflare Tunnel, etc.) +- **Port Scanning**: Auto-detect OpenCode port in 44000-47000 range + +### Platform Management + +- Add/remove AI platforms from the sidebar +- Reorder platforms via settings +- Hide platforms without removing them + +## Development + +Built with: + +- [WXT](https://wxt.dev) - Extension framework +- [SolidJS](https://solidjs.com) - Reactive UI +- [TypeScript](https://typescriptlang.org) - Type safety + +See [AGENTS.md](./AGENTS.md) for detailed development guidelines. diff --git a/packages/extension/components/SettingsPanel.tsx b/packages/extension/components/SettingsPanel.tsx new file mode 100644 index 00000000000..90a3f79ed6b --- /dev/null +++ b/packages/extension/components/SettingsPanel.tsx @@ -0,0 +1,624 @@ +import { createSignal, For, Show, onMount } from "solid-js" +import { + type Platform, + type OpenCodeStatus, + DEFAULT_PLATFORMS, + PRESET_PLATFORMS, + getIcon, + loadPlatforms, + savePlatformsToStorage, +} from "../utils/shared" +import { + checkOpenCodeStatus, + retryConnection, + getOpenCodeUrl, + getConnectionMode, + setConnectionMode, + getOpenCodePort, + saveOpenCodePort, + getRemoteUrl, + setRemoteUrl, + manualPortScan, + isWorkspaceEnabled, + setWorkspaceEnabled, + getWorkspaceDirectory, + setWorkspaceDirectory, + type ConnectionMode, +} from "../utils/opencode-status" +import { + getOpenChamberPort, + saveOpenChamberPort, + getOpenChamberConnectionMode, + setOpenChamberConnectionMode, + getOpenChamberRemoteUrl, + setOpenChamberRemoteUrl, + getOpenChamberTryCfTunnel, + setOpenChamberTryCfTunnel, + getOpenChamberExtraArgs, + setOpenChamberExtraArgs, + type OpenChamberConnectionMode, +} from "../utils/openchamber-status" + +interface SettingsPanelProps { + isModal?: boolean + onClose?: () => void + onPlatformsChange?: (platforms: Platform[]) => void +} + +export function SettingsPanel(props: SettingsPanelProps) { + const [platforms, setPlatforms] = createSignal(loadPlatforms()) + const [settingsTab, setSettingsTab] = createSignal("platforms") + const [showToast, setShowToast] = createSignal(false) + const [toastMessage, setToastMessage] = createSignal("Settings saved") + const [customPlatformName, setCustomPlatformName] = createSignal("") + const [customPlatformUrl, setCustomPlatformUrl] = createSignal("") + const [workspaceEnabled, setWorkspaceEnabledState] = createSignal(isWorkspaceEnabled()) + const [workspaceRoot, setWorkspaceRoot] = createSignal(getWorkspaceDirectory()) + + const [openCodeStatus, setOpenCodeStatus] = createSignal("checking") + const [connectionMode, setConnectionModeState] = createSignal(getConnectionMode()) + const [localPort, setLocalPort] = createSignal(String(getOpenCodePort())) + const [remoteUrl, setRemoteUrlState] = createSignal(getRemoteUrl()) + const [isScanning, setIsScanning] = createSignal(false) + const [scanResult, setScanResult] = createSignal(null) + + const [openChamberMode, setOpenChamberMode] = createSignal(getOpenChamberConnectionMode()) + const [openChamberPort, setOpenChamberPortState] = createSignal(String(getOpenChamberPort())) + const [openChamberUrl, setOpenChamberUrlState] = createSignal(getOpenChamberRemoteUrl()) + const [openChamberTryCfTunnel, setOpenChamberTryCfTunnelState] = createSignal(getOpenChamberTryCfTunnel()) + const [openChamberExtraArgs, setOpenChamberExtraArgsState] = createSignal(getOpenChamberExtraArgs()) + + onMount(async () => { + const connected = await checkOpenCodeStatus() + setOpenCodeStatus(connected ? "connected" : "disconnected") + }) + + function triggerToast(message: string) { + setToastMessage(message) + setShowToast(true) + setTimeout(() => setShowToast(false), 2000) + } + + function savePlatforms(p: Platform[]) { + savePlatformsToStorage(p) + setPlatforms(p) + props.onPlatformsChange?.(p) + } + + function previewOpenChamberCommand() { + const base = `openchamber --port ${openChamberPort().trim() || String(getOpenChamberPort())}` + const maybeTunnel = openChamberTryCfTunnel() ? "--try-cf-tunnel" : "" + const extra = openChamberExtraArgs().trim() + return [base, maybeTunnel, extra].filter(Boolean).join(" ") + } + + async function saveConnectionSettings() { + setConnectionMode(connectionMode()) + if (connectionMode() === "local") { + const port = parseInt(localPort(), 10) + if (!isNaN(port) && port > 0 && port < 65536) { + saveOpenCodePort(port) + } + } else { + setRemoteUrl(remoteUrl()) + } + + setOpenChamberConnectionMode(openChamberMode()) + if (openChamberMode() === "local") { + const port = parseInt(openChamberPort(), 10) + if (!isNaN(port) && port > 0 && port < 65536) { + saveOpenChamberPort(port) + } + } else { + setOpenChamberRemoteUrl(openChamberUrl()) + } + + setOpenChamberTryCfTunnel(openChamberTryCfTunnel()) + setOpenChamberExtraArgs(openChamberExtraArgs()) + + updateOpenCodeUrl() + await handleRetry() + triggerToast("Connection settings saved") + } + + function updateOpenCodeUrl() { + const url = getOpenCodeUrl() + const updated = platforms().map((p) => (p.id === "opencode" ? { ...p, url } : p)) + savePlatforms(updated) + } + + async function handlePortScan() { + setIsScanning(true) + setScanResult(null) + const foundPort = await manualPortScan() + setIsScanning(false) + if (foundPort) { + setLocalPort(String(foundPort)) + setScanResult(`Found OpenCode on port ${foundPort}`) + } else { + setScanResult("No OpenCode server found") + } + } + + async function handleRetry() { + const connected = await retryConnection(3, () => {}) + if (connected) { + setOpenCodeStatus("connected") + } + } + + function togglePlatformVisibility(platformId: string) { + const updated = platforms().map((p) => (p.id === platformId ? { ...p, isVisible: !p.isVisible } : p)) + savePlatforms(updated) + } + + function removePlatform(platformId: string) { + const platform = platforms().find((p) => p.id === platformId) + if (platform?.isBuiltIn) return + const updated = platforms().filter((p) => p.id !== platformId) + savePlatforms(updated) + } + + function movePlatform(platformId: string, direction: number) { + const sorted = [...platforms()].sort((a, b) => a.order - b.order) + const currentIndex = sorted.findIndex((p) => p.id === platformId) + const newIndex = currentIndex + direction + if (newIndex < 0 || newIndex >= sorted.length) return + const temp = sorted[currentIndex].order + sorted[currentIndex].order = sorted[newIndex].order + sorted[newIndex].order = temp + savePlatforms(sorted) + } + + function addPresetPlatform(presetId: string) { + const preset = PRESET_PLATFORMS.find((p) => p.id === presetId) + if (!preset) return + if (platforms().some((p) => p.id === presetId)) return + const maxOrder = Math.max(...platforms().map((p) => p.order), 0) + const newPlatform: Platform = { + ...preset, + isVisible: true, + order: maxOrder + 1, + } + savePlatforms([...platforms(), newPlatform]) + } + + function addCustomPlatform() { + const name = customPlatformName().trim() + let url = customPlatformUrl().trim() + if (!name || !url) return + if (!url.startsWith("http://") && !url.startsWith("https://")) { + url = "https://" + url + } + try { + new URL(url) + } catch { + alert("Please enter a valid URL") + return + } + const id = "custom-" + Date.now() + const maxOrder = Math.max(...platforms().map((p) => p.order), 0) + const newPlatform: Platform = { + id, + name, + url, + icon: id, + isBuiltIn: false, + isVisible: true, + order: maxOrder + 1, + } + savePlatforms([...platforms(), newPlatform]) + setCustomPlatformName("") + setCustomPlatformUrl("") + } + + function restoreDefaults() { + if (confirm("Restore default platforms? Custom platforms will be removed.")) { + savePlatforms([...DEFAULT_PLATFORMS]) + } + } + + const availablePresets = () => { + const existingIds = new Set(platforms().map((p) => p.id)) + return PRESET_PLATFORMS.filter((p) => !existingIds.has(p.id)) + } + + const content = ( + <> +
+ + + + +
+ + + + +
+
+ + {toastMessage()} +
+
+
+ + ) + + if (props.isModal) { + return ( + + ) + } + + return
{content}
+} diff --git a/packages/extension/docs/plans/2025-01-01-browser-context-bar-design.md b/packages/extension/docs/plans/2025-01-01-browser-context-bar-design.md new file mode 100644 index 00000000000..39b63c09c75 --- /dev/null +++ b/packages/extension/docs/plans/2025-01-01-browser-context-bar-design.md @@ -0,0 +1,245 @@ +# Browser Context Bar Design + +**Date**: 2025-01-01 +**Status**: Approved +**Author**: AI + Jordan + +## Overview + +Add a minimal bottom action bar to the Eidorail extension sidepanel that enables users to capture browser context (screenshots, page content, selections) and inject it into AI chat platforms. + +## Goals + +1. **Seamless integration** - Feel like a natural part of the chat experience, not a bolt-on +2. **Markdown-first** - Page content captured with formatting preserved (links, headings, code) +3. **Minimal footprint** - 36px bar, always visible, non-intrusive +4. **Cross-platform** - Works with all embedded AI platforms (OpenCode, Claude, ChatGPT, etc.) + +## Non-Goals + +- Full web clipping/archiving (use markdownload for that) +- File uploads (defer to later iteration) +- Cross-window tab access (current window only for v1) + +## Design + +### UI Layout + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ │ +│ [Platform iframe] │ +│ │ +├─────────────────────────────────────────────────────────────────┤ +│ 🌐 README.md - sst/opencode [▾] [📷] [📄] [📋] │ +└─────────────────────────────────────────────────────────────────┘ + │ │ │ │ │ + └─ current tab title │ │ │ └─ selection → markdown + │ │ └─ page → markdown + │ └─ screenshot + └─ tab picker dropdown +``` + +**Dimensions**: 36px height, full width, dark theme matching sidepanel + +### Components + +#### 1. Current Tab Display + +- Shows favicon + truncated title of the "target" tab +- Defaults to the active browser tab +- Clicking opens tab picker dropdown + +#### 2. Tab Picker Dropdown + +``` +┌──────────────────────────────────────┐ +│ 🔍 Search tabs... │ +├──────────────────────────────────────┤ +│ ▼ Work (blue) ← tab group │ +│ 📄 GitHub - sst/opencode │ +│ 💬 Slack - #engineering │ +├──────────────────────────────────────┤ +│ ▼ Research (green) │ +│ 📚 Stack Overflow... │ +│ 📖 MDN Web Docs... │ +├──────────────────────────────────────┤ +│ 🤖 Claude.ai ← ungrouped │ +│ 🤖 ChatGPT │ +└──────────────────────────────────────┘ +``` + +Features: + +- Grouped by Chrome tab groups (with color indicator) +- Search/filter input +- Favicons for recognition +- Current selection highlighted + +#### 3. Action Buttons + +| Button | Icon | Action | Output | +| ---------- | ---- | --------------------------------- | --------------- | +| Screenshot | 📷 | `chrome.tabs.captureVisibleTab()` | PNG data URL | +| Page | 📄 | Readability + Turndown | Markdown string | +| Selection | 📋 | Get selection HTML → Turndown | Markdown string | + +### Interaction Flow + +1. **User clicks action button** +2. **Capture phase** (200ms max) + - Button shows spinner + - Content script extracts content from target tab +3. **Success** + - Button shows checkmark ✓ briefly + - Content copied to clipboard + - Attempt auto-insert into active platform's input field +4. **Error** + - Button flashes red + - Toast notification with error message + +### Auto-Insert Strategy + +Try to paste content into the chat input: + +1. **postMessage to iframe** with captured content +2. **Platform-specific handlers** in content scripts detect message +3. **Insert into input** field (textarea, contenteditable, etc.) +4. **Fallback**: If auto-insert fails, content is still on clipboard + +### Markdown Output Format + +#### Page Capture + +````markdown +# Page Title + +> **Source**: https://github.com/sst/opencode +> **Captured**: 2025-01-01 10:30 AM + +[Article content with preserved formatting...] + +## Headings preserved + +- Lists preserved +- [Links preserved](https://example.com) +- `code` preserved + +`code blocks preserved` +```` + +#### Selection Capture + +```markdown +> Selected from [Page Title](https://example.com/page) + +[Selected content as markdown...] +``` + +#### Screenshot + +```markdown +![Screenshot of Page Title](data:image/png;base64,...) +``` + +## Technical Implementation + +### Libraries + +| Library | Version | Purpose | License | +| -------------- | ------- | ----------------------- | ---------- | +| Readability.js | 0.5.0 | Extract article content | Apache 2.0 | +| Turndown | 7.1.3 | HTML → Markdown | MIT | + +### Files to Create + +``` +packages/extension/ +├── utils/ +│ ├── markdown-converter.ts # Turndown wrapper with custom rules +│ ├── page-capture.ts # Readability integration +│ └── browser-context.ts # Tab list, screenshots, selection +├── entrypoints/ +│ ├── page-context.content.ts # Content script for page extraction +│ └── sidepanel/ +│ ├── ContextBar.tsx # Main bar component +│ └── TabPicker.tsx # Dropdown component +└── libs/ + ├── readability.min.js # Vendored (or npm) + └── turndown.min.js # Vendored (or npm) +``` + +### Content Script Communication + +```typescript +// Background script receives capture request +chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => { + if (msg.action === "capture-page") { + // Execute content script in target tab + chrome.scripting + .executeScript({ + target: { tabId: msg.tabId }, + func: extractPageContent, + }) + .then((results) => { + sendResponse({ success: true, content: results[0].result }) + }) + return true // async response + } +}) +``` + +### Permissions Required + +Already have in manifest: + +- `tabs` - Tab list access +- `activeTab` - Current tab info +- `scripting` - Execute content scripts + +May need to add: + +- `clipboardWrite` - Copy to clipboard (if not using `navigator.clipboard`) + +## CSS Variables + +```css +/* Context bar - matches existing sidepanel theme */ +--context-bar-bg: #1a1717; +--context-bar-border: #3d3a3a; +--context-bar-text: #c8c5c5; +--context-bar-icon: #8b8888; +--context-bar-icon-hover: #e08a30; +--context-bar-height: 36px; +``` + +## States & Edge Cases + +| State | Handling | +| -------------------------------- | --------------------------------------- | +| No active tab | Show "No tab selected" | +| Tab is loading | Disable capture buttons | +| Protected page (chrome://, etc.) | Show tooltip "Cannot capture this page" | +| Selection is empty | Disable selection button | +| Capture timeout | Show error, suggest retry | +| Large page content | Truncate with "... [truncated]" marker | + +## Future Enhancements (v2+) + +- [ ] File upload via drag & drop +- [ ] Cross-window tab access +- [ ] Capture history/recents +- [ ] Custom markdown templates +- [ ] Image compression options +- [ ] Keyboard shortcuts (Cmd+Shift+S for screenshot, etc.) + +## Testing Checklist + +- [ ] Screenshot captures correctly +- [ ] Page markdown preserves links and formatting +- [ ] Selection capture works with various HTML +- [ ] Tab picker shows correct groups and colors +- [ ] Auto-insert works with OpenCode +- [ ] Clipboard fallback works when auto-insert fails +- [ ] Error states display correctly +- [ ] Works at narrow sidebar widths (300px) diff --git a/packages/extension/entrypoints/background.ts b/packages/extension/entrypoints/background.ts new file mode 100644 index 00000000000..3bb1fd3da45 --- /dev/null +++ b/packages/extension/entrypoints/background.ts @@ -0,0 +1,408 @@ +import { getCurrentWindowTabs } from "../utils/browser-context" + +type ExtractionResult = { success: boolean; markdown?: string; error?: string } + +interface PageDimensions { + scrollWidth: number + scrollHeight: number + viewportWidth: number + viewportHeight: number + devicePixelRatio: number + originalScrollX: number + originalScrollY: number +} + +async function captureScreenshot(tabId?: number): Promise<{ screenshot?: string; error?: string }> { + try { + if (tabId) { + const tab = await chrome.tabs.get(tabId) + + if (!tab.active) { + await chrome.tabs.update(tabId, { active: true }) + await new Promise((r) => setTimeout(r, 100)) + } + + const dataUrl = await chrome.tabs.captureVisibleTab(tab.windowId, { format: "png" }) + return { screenshot: dataUrl } + } + + const dataUrl = await chrome.tabs.captureVisibleTab({ format: "png" }) + return { screenshot: dataUrl } + } catch (error) { + const msg = error instanceof Error ? error.message : String(error) + if (msg.includes("Cannot access") || msg.includes("chrome://") || msg.includes("edge://")) { + return { error: "Cannot capture browser pages (chrome://, edge://, etc.)" } + } + if (msg.includes("No window with id") || msg.includes("No tab with id")) { + return { error: "Tab not found. Try refreshing the page." } + } + return { error: msg } + } +} + +async function capturePageMarkdown(tabId: number): Promise<{ markdown?: string; error?: string }> { + try { + const result = await chrome.tabs.sendMessage(tabId, { type: "EXTRACT_PAGE_CONTENT" }) + if (result?.success && result.markdown) { + return { markdown: result.markdown } + } + } catch { + console.log("[Eidorail] Content script not available, using fallback extraction") + } + + try { + const results = await chrome.scripting.executeScript({ + target: { tabId }, + func: extractPageContentFallback, + }) + const result = results[0]?.result + if (result?.success) { + return { markdown: result.markdown } + } + return { error: result?.error || "Failed to extract page content" } + } catch (error) { + return { error: `Extraction failed: ${error instanceof Error ? error.message : String(error)}` } + } +} + +async function captureSelectionMarkdown(tabId: number): Promise<{ markdown?: string; error?: string }> { + try { + const result = await chrome.tabs.sendMessage(tabId, { type: "EXTRACT_SELECTION" }) + if (result?.success && result.markdown) { + return { markdown: result.markdown } + } + if (result?.error) { + return { error: result.error } + } + } catch { + console.log("[Eidorail] Content script not available, using fallback extraction") + } + + try { + const results = await chrome.scripting.executeScript({ + target: { tabId }, + func: extractSelectionFallback, + }) + const result = results[0]?.result + if (result?.success) { + return { markdown: result.markdown } + } + return { error: result?.error || "No text selected" } + } catch (error) { + return { error: `Extraction failed: ${error instanceof Error ? error.message : String(error)}` } + } +} + +function getPageDimensionsScript(): PageDimensions { + return { + scrollWidth: Math.max( + document.documentElement.scrollWidth, + document.body.scrollWidth, + document.documentElement.offsetWidth, + ), + scrollHeight: Math.max( + document.documentElement.scrollHeight, + document.body.scrollHeight, + document.documentElement.offsetHeight, + ), + viewportWidth: window.innerWidth, + viewportHeight: window.innerHeight, + devicePixelRatio: window.devicePixelRatio || 1, + originalScrollX: window.scrollX, + originalScrollY: window.scrollY, + } +} + +function scrollToScript(x: number, y: number): void { + window.scrollTo(x, y) +} + +function restoreScrollScript(x: number, y: number): void { + window.scrollTo(x, y) +} + +async function captureFullPageScreenshot(tabId: number): Promise<{ screenshot?: string; error?: string }> { + try { + const tab = await chrome.tabs.get(tabId) + if (!tab.active) { + await chrome.tabs.update(tabId, { active: true }) + await new Promise((r) => setTimeout(r, 150)) + } + + const dimResults = await chrome.scripting.executeScript({ + target: { tabId }, + func: getPageDimensionsScript, + }) + const dimensions = dimResults[0]?.result as PageDimensions + if (!dimensions) { + return { error: "Could not get page dimensions" } + } + + const { + scrollWidth, + scrollHeight, + viewportWidth, + viewportHeight, + devicePixelRatio, + originalScrollX, + originalScrollY, + } = dimensions + + if (scrollHeight <= viewportHeight && scrollWidth <= viewportWidth) { + const dataUrl = await chrome.tabs.captureVisibleTab(tab.windowId!, { format: "png" }) + return { screenshot: dataUrl } + } + + const tiles: { dataUrl: string; x: number; y: number }[] = [] + const ySteps = Math.ceil(scrollHeight / viewportHeight) + const xSteps = Math.ceil(scrollWidth / viewportWidth) + + for (let yi = 0; yi < ySteps; yi++) { + for (let xi = 0; xi < xSteps; xi++) { + const scrollX = xi * viewportWidth + const scrollY = yi * viewportHeight + + await chrome.scripting.executeScript({ + target: { tabId }, + func: scrollToScript, + args: [scrollX, scrollY], + }) + + await new Promise((r) => setTimeout(r, 100)) + + const dataUrl = await chrome.tabs.captureVisibleTab(tab.windowId!, { format: "png" }) + tiles.push({ dataUrl, x: scrollX, y: scrollY }) + } + } + + await chrome.scripting.executeScript({ + target: { tabId }, + func: restoreScrollScript, + args: [originalScrollX, originalScrollY], + }) + + const stitchResults = await chrome.scripting.executeScript({ + target: { tabId }, + func: stitchTilesInPage, + args: [tiles, scrollWidth, scrollHeight, viewportWidth, viewportHeight, devicePixelRatio], + }) + + const finalDataUrl = stitchResults[0]?.result as string + if (!finalDataUrl) { + return { error: "Failed to stitch screenshots" } + } + + return { screenshot: finalDataUrl } + } catch (error) { + const msg = error instanceof Error ? error.message : String(error) + return { error: `Full page capture failed: ${msg}` } + } +} + +function stitchTilesInPage( + tiles: { dataUrl: string; x: number; y: number }[], + totalWidth: number, + totalHeight: number, + viewportWidth: number, + viewportHeight: number, + dpr: number, +): Promise { + return new Promise((resolve, reject) => { + const canvas = document.createElement("canvas") + canvas.width = totalWidth * dpr + canvas.height = totalHeight * dpr + + const ctx = canvas.getContext("2d") + if (!ctx) { + reject("Could not get canvas context") + return + } + + let loaded = 0 + const images: { img: HTMLImageElement; x: number; y: number }[] = [] + + for (const tile of tiles) { + const img = new Image() + img.onload = () => { + images.push({ img, x: tile.x * dpr, y: tile.y * dpr }) + loaded++ + if (loaded === tiles.length) { + for (const { img, x, y } of images) { + ctx.drawImage(img, x, y) + } + resolve(canvas.toDataURL("image/png")) + } + } + img.onerror = () => reject("Failed to load tile image") + img.src = tile.dataUrl + } + }) +} + +function extractPageContentFallback(): ExtractionResult { + const title = document.title || "Untitled" + const url = window.location.href + + const mainContent = document.querySelector("main, article, [role='main'], .main-content, #main-content") + const content = mainContent || document.body + + const clone = content.cloneNode(true) as HTMLElement + clone.querySelectorAll("script, style, nav, header, footer, aside, iframe, noscript").forEach((el) => el.remove()) + + clone.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach((h) => { + h.textContent = `${"#".repeat(parseInt(h.tagName[1]))} ${h.textContent?.trim()}` + }) + + const text = clone.innerText || clone.textContent || "" + const cleanedText = text + .split("\n") + .map((line) => line.trim()) + .filter((line) => line.length > 0) + .join("\n\n") + + const timestamp = new Date().toLocaleString() + const formatted = `# ${title}\n\n> **Source**: ${url}\n> **Captured**: ${timestamp}\n\n${cleanedText}` + + return { success: true, markdown: formatted } +} + +function extractSelectionFallback(): ExtractionResult { + const selection = window.getSelection() + if (!selection || selection.isCollapsed) { + return { success: false, error: "No text selected" } + } + + const text = selection.toString().trim() + if (!text) { + return { success: false, error: "Selection is empty" } + } + + const title = document.title || "Untitled" + const url = window.location.href + const formatted = `> Selected from [${title}](${url})\n\n${text}` + + return { success: true, markdown: formatted } +} + +export default defineBackground(() => { + console.log("[Eidorail] Background service worker started") + + // Open sidepanel when extension icon is clicked + chrome.action.onClicked.addListener(async (tab) => { + if (tab.id) { + await chrome.sidePanel.open({ tabId: tab.id }) + } + }) + + // Handle keyboard commands + chrome.commands.onCommand.addListener(async (command) => { + if (command === "toggle-side-panel") { + const [tab] = await chrome.tabs.query({ active: true, currentWindow: true }) + if (tab?.id) { + await chrome.sidePanel.open({ tabId: tab.id }) + } + } + }) + + // Set sidepanel behavior to open on action click + chrome.sidePanel.setPanelBehavior({ openPanelOnActionClick: true }) + + // Listen for messages from sidepanel or content scripts + chrome.runtime.onMessage.addListener((message, sender, sendResponse) => { + console.log("[Eidorail] Received message:", message.type) + + switch (message.type) { + case "GET_CURRENT_TAB": + chrome.tabs.query({ active: true, currentWindow: true }).then(([tab]) => { + sendResponse({ tab }) + }) + return true // Will respond asynchronously + + case "CAPTURE_SCREENSHOT": + captureScreenshot(message.tabId) + .then((result) => sendResponse(result)) + .catch((error) => sendResponse({ error: error.message })) + return true + + case "CAPTURE_FULL_PAGE_SCREENSHOT": + if (message.tabId) { + captureFullPageScreenshot(message.tabId) + .then((result) => sendResponse(result)) + .catch((error) => sendResponse({ error: error.message })) + return true + } + sendResponse({ error: "No tabId provided" }) + return true + + case "GET_PAGE_CONTENT": + if (message.tabId) { + chrome.scripting + .executeScript({ + target: { tabId: message.tabId }, + func: () => document.body.innerText, + }) + .then((results) => { + sendResponse({ content: results[0]?.result || "" }) + }) + .catch((error) => { + sendResponse({ error: error.message }) + }) + return true + } + break + + case "GET_TABS_WITH_GROUPS": + getCurrentWindowTabs() + .then((tabs) => { + sendResponse({ tabs }) + }) + .catch((error) => { + sendResponse({ error: error.message }) + }) + return true + + case "CAPTURE_PAGE_MARKDOWN": + if (message.tabId) { + capturePageMarkdown(message.tabId) + .then((result) => sendResponse(result)) + .catch((error) => sendResponse({ error: error.message })) + return true + } + sendResponse({ error: "No tabId provided" }) + return true + + case "CAPTURE_SELECTION_MARKDOWN": + if (message.tabId) { + captureSelectionMarkdown(message.tabId) + .then((result) => sendResponse(result)) + .catch((error) => sendResponse({ error: error.message })) + return true + } + sendResponse({ error: "No tabId provided" }) + return true + + default: + console.log("[Eidorail] Unknown message type:", message.type) + } + }) + + // Listen for external messages from Eidolon Sync extension + chrome.runtime.onMessageExternal.addListener((message, sender, sendResponse) => { + console.log("[Eidorail] External message from:", sender.id, message.type) + + switch (message.type) { + case "IMPORT_PROJECT": + // Handle project import from Eidolon Sync + // This will open the project in OpenCode + sendResponse({ success: true }) + break + + case "PING": + sendResponse({ pong: true, version: "0.1.0" }) + break + + default: + sendResponse({ error: "Unknown message type" }) + } + }) +}) diff --git a/packages/extension/entrypoints/claude-iframe-fix.content.ts b/packages/extension/entrypoints/claude-iframe-fix.content.ts new file mode 100644 index 00000000000..0d90972a231 --- /dev/null +++ b/packages/extension/entrypoints/claude-iframe-fix.content.ts @@ -0,0 +1,66 @@ +/** + * Content script that runs on Claude.ai to fix iframe detection + * + * Claude.ai detects when it's running in an iframe and hides certain UI elements + * like the sidebar toggle. This script overrides that detection and forces + * the sidebar toggle to remain visible. + */ + +export default defineContentScript({ + matches: ["https://claude.ai/*"], + runAt: "document_start", + world: "MAIN", // Run in page context to override window properties + main() { + // Override iframe detection by making window.self === window.top + try { + Object.defineProperty(window, "self", { + get: () => window.top, + configurable: true, + }) + + Object.defineProperty(window, "frameElement", { + get: () => null, + configurable: true, + }) + + // Also try to override parent + Object.defineProperty(window, "parent", { + get: () => window, + configurable: true, + }) + + console.log("[Eidorail] Claude.ai iframe detection overridden") + } catch (e) { + console.warn("[Eidorail] Could not override iframe detection:", e) + } + + // Inject CSS to force sidebar toggle visibility + // This counteracts Claude.ai's opacity-0 class on the toggle button + const style = document.createElement("style") + style.textContent = ` + /* Force sidebar toggle button to be visible */ + button[data-testid="sidebar-toggle"] svg, + button svg.opacity-0, + [aria-label*="sidebar" i] svg.opacity-0, + [aria-label*="menu" i] svg.opacity-0 { + opacity: 1 !important; + transform: scale(1) !important; + } + + /* Ensure the button container is visible too */ + button:has(svg.opacity-0) { + opacity: 1 !important; + visibility: visible !important; + } + ` + + // Insert style as early as possible + if (document.head) { + document.head.appendChild(style) + } else { + document.addEventListener("DOMContentLoaded", () => { + document.head.appendChild(style) + }) + } + }, +}) diff --git a/packages/extension/entrypoints/conversation-export.content.ts b/packages/extension/entrypoints/conversation-export.content.ts new file mode 100644 index 00000000000..c5ec93fbc65 --- /dev/null +++ b/packages/extension/entrypoints/conversation-export.content.ts @@ -0,0 +1,512 @@ +/** + * Multi-platform conversation export content script + * Injects export UI into Claude, ChatGPT, and Gemini conversation pages + */ + +import { extractByPlatform, waitForPlatformLoad } from "../utils/export/extractors" +import { exportAsMarkdown, exportAsJSON, downloadFile, copyToClipboard } from "../utils/export/formatters" +import { detectPlatform, getConversationId, isExportSupported, PLATFORMS } from "../utils/platforms" +import type { Conversation } from "../utils/export/types" +import type { Platform } from "../utils/platforms" + +export default defineContentScript({ + matches: ["https://claude.ai/*", "https://chat.openai.com/*", "https://chatgpt.com/*", "https://gemini.google.com/*"], + + async main() { + console.log("[Eidorail Export] Content script loaded") + + const platform = detectPlatform() + if (!platform) { + console.log("[Eidorail Export] Unknown platform, skipping") + return + } + + console.log("[Eidorail Export] Detected platform:", platform) + + if (!isExportSupported(platform)) { + console.log("[Eidorail Export] Export not supported for platform:", platform) + return + } + + // Initial check and injection + tryInjectUI(platform) + + // Handle SPA navigation - these sites use client-side routing + let lastUrl = location.href + const observer = new MutationObserver(() => { + if (location.href !== lastUrl) { + lastUrl = location.href + console.log("[Eidorail Export] URL changed:", lastUrl) + // Remove old UI and re-inject for new conversation + removeExportUI() + tryInjectUI(platform) + } + }) + + observer.observe(document.body, { childList: true, subtree: true }) + + // Also listen to popstate for browser back/forward + window.addEventListener("popstate", () => { + console.log("[Eidorail Export] Popstate event") + removeExportUI() + tryInjectUI(platform) + }) + }, +}) + +function tryInjectUI(platform: Platform) { + const conversationId = getConversationId(platform) + if (!conversationId) { + console.log("[Eidorail Export] Not a conversation page, skipping") + return + } + + console.log("[Eidorail Export] Conversation ID:", conversationId) + + waitForPlatformLoad(platform).then(() => { + console.log("[Eidorail Export] Conversation loaded, injecting UI") + injectExportUI(platform, conversationId) + }) +} + +function removeExportUI() { + const existing = document.getElementById("eidorail-export-root") + if (existing) { + existing.remove() + } +} + +function injectExportUI(platform: Platform, conversationId: string) { + if (document.getElementById("eidorail-export-root")) { + return + } + + const container = document.createElement("div") + container.id = "eidorail-export-root" + document.body.appendChild(container) + + const shadow = container.attachShadow({ mode: "open" }) + const ui = new ExportUIManager(shadow, platform, conversationId) + ui.render() +} + +class ExportUIManager { + private shadow: ShadowRoot + private platform: Platform + private conversationId: string + private conversation: Conversation | null = null + private selectedMessageIds: Set = new Set() + + constructor(shadow: ShadowRoot, platform: Platform, conversationId: string) { + this.shadow = shadow + this.platform = platform + this.conversationId = conversationId + } + + render() { + const styles = this.getStyles() + const html = this.getHTML() + + this.shadow.innerHTML = ` + + ${html} + ` + + this.attachEventListeners() + this.loadConversation() + } + + private getStyles(): string { + return ` + :host { + all: initial; + } + + .export-container { + position: fixed; + top: 80px; + right: 20px; + z-index: 9999; + font-family: system-ui, -apple-system, 'Segoe UI', sans-serif; + font-size: 14px; + } + + .export-icon-button { + width: 44px; + height: 44px; + border-radius: 50%; + background: #ffffff; + border: 1px solid #e5e7eb; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.2s ease; + box-shadow: 0 2px 8px rgba(0,0,0,0.1); + color: #374151; + } + + .export-icon-button:hover { + background: #f9fafb; + transform: scale(1.05); + box-shadow: 0 4px 12px rgba(0,0,0,0.15); + } + + .export-icon-button.menu-open { + background: #f3f4f6; + } + + .dropdown-menu { + position: absolute; + top: 52px; + right: 0; + background: #ffffff; + border: 1px solid #e5e7eb; + border-radius: 10px; + box-shadow: 0 4px 16px rgba(0,0,0,0.12); + min-width: 200px; + opacity: 0; + visibility: hidden; + transform: translateY(-8px) scale(0.95); + transform-origin: top right; + transition: all 0.15s ease; + overflow: hidden; + } + + .dropdown-menu.open { + opacity: 1; + visibility: visible; + transform: translateY(0) scale(1); + } + + .menu-section { + padding: 6px 0; + } + + .menu-section:not(:last-child) { + border-bottom: 1px solid #e5e7eb; + } + + .menu-section-label { + padding: 6px 14px; + font-size: 11px; + font-weight: 600; + color: #9ca3af; + text-transform: uppercase; + letter-spacing: 0.5px; + } + + .menu-item { + display: flex; + align-items: center; + gap: 10px; + padding: 10px 14px; + cursor: pointer; + transition: background 0.15s ease; + color: #374151; + border: none; + background: none; + width: 100%; + text-align: left; + font-size: 14px; + font-family: inherit; + } + + .menu-item:hover { + background: #f3f4f6; + } + + .menu-item:active { + background: #e5e7eb; + } + + .menu-item svg { + flex-shrink: 0; + color: #6b7280; + } + + .menu-item span { + flex: 1; + } + + .menu-item.success { + color: #059669; + } + + .menu-item.success svg { + color: #059669; + } + + .toast { + position: fixed; + bottom: 24px; + right: 24px; + background: #1f2937; + color: #ffffff; + padding: 12px 20px; + border-radius: 8px; + box-shadow: 0 4px 12px rgba(0,0,0,0.2); + display: flex; + align-items: center; + gap: 8px; + font-size: 14px; + opacity: 0; + visibility: hidden; + transform: translateY(8px); + transition: all 0.2s ease; + z-index: 10000; + } + + .toast.show { + opacity: 1; + visibility: visible; + transform: translateY(0); + } + + .toast.success { + background: #059669; + } + + .toast.error { + background: #dc2626; + } + + @media (prefers-color-scheme: dark) { + .export-icon-button { + background: #374151; + border-color: #4b5563; + color: #e5e7eb; + } + + .export-icon-button:hover { + background: #4b5563; + } + + .export-icon-button.menu-open { + background: #4b5563; + } + + .dropdown-menu { + background: #1f2937; + border-color: #374151; + box-shadow: 0 4px 16px rgba(0,0,0,0.3); + } + + .menu-section:not(:last-child) { + border-color: #374151; + } + + .menu-section-label { + color: #6b7280; + } + + .menu-item { + color: #e5e7eb; + } + + .menu-item:hover { + background: #374151; + } + + .menu-item:active { + background: #4b5563; + } + + .menu-item svg { + color: #9ca3af; + } + + .menu-item.success { + color: #34d399; + } + + .menu-item.success svg { + color: #34d399; + } + + .toast { + background: #374151; + } + } + ` + } + + private getHTML(): string { + return ` +
+ + + + +
+
+ ` + } + + private attachEventListeners() { + const iconBtn = this.shadow.getElementById("icon-btn") + const dropdown = this.shadow.getElementById("dropdown") + + iconBtn?.addEventListener("click", (e) => { + e.stopPropagation() + const isOpen = dropdown?.classList.contains("open") + if (isOpen) { + this.closeMenu() + } else { + this.openMenu() + } + }) + + document.addEventListener("click", () => { + this.closeMenu() + }) + + this.shadow.getElementById("copy-md")?.addEventListener("click", () => { + this.handleAction("copy", "markdown") + }) + + this.shadow.getElementById("copy-json")?.addEventListener("click", () => { + this.handleAction("copy", "json") + }) + + this.shadow.getElementById("download-md")?.addEventListener("click", () => { + this.handleAction("download", "markdown") + }) + + this.shadow.getElementById("download-json")?.addEventListener("click", () => { + this.handleAction("download", "json") + }) + } + + private openMenu() { + const iconBtn = this.shadow.getElementById("icon-btn") + const dropdown = this.shadow.getElementById("dropdown") + iconBtn?.classList.add("menu-open") + dropdown?.classList.add("open") + } + + private closeMenu() { + const iconBtn = this.shadow.getElementById("icon-btn") + const dropdown = this.shadow.getElementById("dropdown") + iconBtn?.classList.remove("menu-open") + dropdown?.classList.remove("open") + } + + private showToast(message: string, type: "success" | "error" = "success") { + const toast = this.shadow.getElementById("toast") + if (!toast) return + + toast.textContent = message + toast.className = `toast show ${type}` + + setTimeout(() => { + toast.classList.remove("show") + }, 2000) + } + + private async handleAction(action: "copy" | "download", format: "markdown" | "json") { + this.closeMenu() + + try { + // Always re-extract fresh data to avoid stale conversation issues + const conversation = await this.extractFreshConversation() + + if (!conversation || conversation.messages.length === 0) { + this.showToast("No messages found", "error") + return + } + + // Select all messages for export + const allMessageIds = new Set(conversation.messages.map((m) => m.id)) + + const result = + format === "markdown" + ? exportAsMarkdown(conversation, allMessageIds) + : exportAsJSON(conversation, allMessageIds) + + if (action === "copy") { + const success = await copyToClipboard(result.content) + if (success) { + this.showToast( + `Copied ${conversation.messages.length} messages as ${format === "markdown" ? "Markdown" : "JSON"}`, + ) + } else { + this.showToast("Failed to copy", "error") + } + } else { + downloadFile(result.filename, result.content, result.mimeType) + this.showToast(`Downloaded ${result.filename}`) + } + } catch (error) { + console.error("[Eidorail Export] Action failed:", error) + this.showToast(`Failed to ${action}`, "error") + } + } + + private async extractFreshConversation(): Promise { + try { + // Get fresh conversation ID from current URL + const freshConversationId = getConversationId(this.platform) || this.conversationId + const conversation = await extractByPlatform(this.platform, freshConversationId) + console.log("[Eidorail Export] Fresh extraction:", conversation.messages.length, "messages") + return conversation + } catch (error) { + console.error("[Eidorail Export] Extraction failed:", error) + return null + } + } + + private async loadConversation() { + try { + this.conversation = await extractByPlatform(this.platform, this.conversationId) + console.log("[Eidorail Export] Initial load:", this.conversation?.messages.length, "messages") + + if (this.conversation) { + for (const msg of this.conversation.messages) { + this.selectedMessageIds.add(msg.id) + } + } + } catch (error) { + console.error("[Eidorail Export] Failed to load conversation:", error) + } + } +} diff --git a/packages/extension/entrypoints/opencode-compact.content.ts b/packages/extension/entrypoints/opencode-compact.content.ts new file mode 100644 index 00000000000..2dbd1b931ba --- /dev/null +++ b/packages/extension/entrypoints/opencode-compact.content.ts @@ -0,0 +1,674 @@ +/** + * Content script for OpenCode compact mode + * + * Injects CSS and behavior modifications when OpenCode is embedded + * in the Eidorail extension sidebar (iframe context). + * + * This works with vanilla sst/opencode - no modifications needed to opencode itself. + * + * Addresses UI/UX feedback: + * - Hides redundant left rail (icon soup) to maximize chat space + * - De-emphasizes orange Home link, improves visual hierarchy + * - Adds welcoming empty state overlay with guidance + * - Improves spacing and alignment for narrow sidebar width + * - Better hover states and accessibility + */ + +export default defineContentScript({ + matches: ["http://localhost:4096/*", "http://127.0.0.1:4096/*"], + runAt: "document_start", + allFrames: true, + + main() { + const params = new URLSearchParams(window.location.search) + const compactMode = params.get("eidorail") === "compact" + + if (!compactMode) { + return + } + + console.log("[Eidorail] OpenCode compact mode activated") + + if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", () => { + injectCompactStyles() + onDOMReady() + }) + } else { + injectCompactStyles() + onDOMReady() + } + }, +}) + +function injectCompactStyles() { + const style = document.createElement("style") + style.id = "eidorail-compact-styles" + style.textContent = ` + /* =========================================== + Eidorail Compact Mode for OpenCode Desktop + Applied when embedded in browser extension + =========================================== */ + + /* ---- CORE: Left sidebar as toggleable overlay ---- */ + /* Sidebar hidden by default, shown as overlay when toggled */ + body.eidorail-compact > div > div > aside, + body.eidorail-compact [data-sidebar], + body.eidorail-compact .w-12.border-r, + body.eidorail-compact > div > div > div:first-child[class*="border-r"] { + display: none !important; + } + + /* Mobile sidebar (w-72) - position as overlay when open */ + body.eidorail-compact .fixed.inset-y-0.left-0.z-50 { + transform: translateX(-100%); + transition: transform 0.2s ease; + } + + body.eidorail-compact.sidebar-open .fixed.inset-y-0.left-0.z-50 { + transform: translateX(0) !important; + display: flex !important; + } + + /* Backdrop when sidebar is open */ + body.eidorail-compact.sidebar-open::after { + content: ""; + position: fixed; + inset: 0; + background: rgba(0, 0, 0, 0.5); + z-index: 49; + pointer-events: auto; + } + + /* ---- HEADER: Optimize for narrow width ---- */ + body.eidorail-compact header { + padding-left: 12px !important; + padding-right: 12px !important; + gap: 8px !important; + } + + /* De-emphasize the orange Home/Mark link - make it subtle */ + body.eidorail-compact header a[href="/"] svg, + body.eidorail-compact header a:first-child svg { + width: 20px !important; + height: 20px !important; + opacity: 0.7; + } + + body.eidorail-compact header a[href="/"]:hover svg, + body.eidorail-compact header a:first-child:hover svg { + opacity: 1; + } + + /* Project/session selectors - compact them */ + body.eidorail-compact header button[class*="text-14"] { + padding: 4px 8px !important; + font-size: 13px !important; + } + + /* Hide unnecessary header elements on very narrow widths */ + @media (max-width: 350px) { + body.eidorail-compact header > a:first-child { + display: none !important; + } + } + + /* ---- MAIN CONTENT: Full width ---- */ + body.eidorail-compact main { + width: 100% !important; + max-width: 100% !important; + margin-left: 0 !important; + } + + /* ---- HOME PAGE: Improve empty state ---- */ + /* Recent projects list - better hover states */ + body.eidorail-compact [class*="group/item"] { + border-radius: 8px !important; + transition: background-color 0.15s ease !important; + } + + body.eidorail-compact [class*="group/item"]:hover { + background-color: var(--color-background-surface, rgba(255,255,255,0.05)) !important; + } + + /* Project items - add visual affordance */ + body.eidorail-compact [class*="group/item"]::before { + content: ""; + position: absolute; + left: 0; + top: 50%; + transform: translateY(-50%); + width: 3px; + height: 0; + background: var(--color-text-brand, #f97316); + border-radius: 0 2px 2px 0; + transition: height 0.15s ease; + } + + body.eidorail-compact [class*="group/item"]:hover::before { + height: 60%; + } + + /* ---- CHAT/SESSION: Optimize message display ---- */ + body.eidorail-compact [class*="message"], + body.eidorail-compact [class*="Message"] { + padding-left: 12px !important; + padding-right: 12px !important; + } + + /* Input area - ensure it's prominent */ + body.eidorail-compact textarea { + font-size: 14px !important; + min-height: 60px !important; + } + + /* ---- ACCESSIBILITY: Larger touch targets ---- */ + body.eidorail-compact button { + min-height: 36px !important; + min-width: 36px !important; + } + + body.eidorail-compact a[href] { + min-height: 32px !important; + } + + /* ---- EMPTY STATE OVERLAY ---- */ + /* Shows helpful guidance when no session is active */ + .eidorail-welcome-overlay { + position: fixed; + inset: 0; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 24px; + text-align: center; + background: var(--color-background-base, #0a0a0a); + z-index: 100; + opacity: 1; + transition: opacity 0.3s ease; + pointer-events: auto; + } + + .eidorail-welcome-overlay.hidden { + opacity: 0; + pointer-events: none; + } + + .eidorail-welcome-overlay h2 { + font-size: 18px; + font-weight: 600; + color: var(--color-text-strong, #fff); + margin: 0 0 8px 0; + } + + .eidorail-welcome-overlay p { + font-size: 14px; + color: var(--color-text-dimmed, #888); + margin: 0 0 20px 0; + max-width: 280px; + line-height: 1.5; + } + + .eidorail-welcome-overlay .quick-actions { + display: flex; + flex-direction: column; + gap: 8px; + width: 100%; + max-width: 240px; + } + + .eidorail-welcome-overlay button { + width: 100%; + padding: 12px 16px; + border-radius: 8px; + border: 1px solid var(--color-border-base, #333); + background: var(--color-background-surface, #1a1a1a); + color: var(--color-text-base, #fff); + font-size: 14px; + cursor: pointer; + transition: all 0.15s ease; + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + } + + .eidorail-welcome-overlay button:hover { + background: var(--color-background-hover, #252525); + border-color: var(--color-border-strong, #444); + } + + .eidorail-welcome-overlay button.primary { + background: var(--color-text-brand, #f97316); + border-color: transparent; + color: #fff; + } + + .eidorail-welcome-overlay button.primary:hover { + background: #ea580c; + } + + .eidorail-welcome-overlay .keyboard-hint { + margin-top: 16px; + font-size: 12px; + color: var(--color-text-dimmed, #666); + } + + .eidorail-welcome-overlay kbd { + display: inline-block; + padding: 2px 6px; + border-radius: 4px; + background: var(--color-background-surface, #1a1a1a); + border: 1px solid var(--color-border-base, #333); + font-family: inherit; + font-size: 11px; + } + + /* ---- FLOATING MENU BUTTON ---- */ + /* Quick access to sidebar functions without the rail */ + .eidorail-menu-button { + position: fixed; + bottom: 12px; + left: 12px; + z-index: 1001; + width: 40px; + height: 40px; + border-radius: 10px; + background: var(--color-background-surface, #1a1a1a); + border: 1px solid var(--color-border-base, #333); + color: var(--color-text-base, #fff); + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.2s ease; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); + } + + .eidorail-menu-button:hover { + background: var(--color-background-hover, #252525); + transform: scale(1.05); + } + + .eidorail-menu-button svg { + width: 18px; + height: 18px; + } + + + + /* ---- RESPONSIVE ADJUSTMENTS ---- */ + @media (max-width: 400px) { + body.eidorail-compact header { + padding-left: 8px !important; + padding-right: 8px !important; + height: 44px !important; + } + + body.eidorail-compact header button span:not(:first-child) { + display: none !important; + } + + .eidorail-welcome-overlay { + padding: 16px; + } + + .eidorail-welcome-overlay h2 { + font-size: 16px; + } + } + + /* ---- INPUT AREA: Dock to bottom ---- */ + body.eidorail-compact .absolute.inset-x-0.bottom-4 { + bottom: 0 !important; + padding-left: 8px !important; + padding-right: 8px !important; + padding-bottom: 8px !important; + background: var(--color-background-base, #0a0a0a) !important; + border-top: 1px solid var(--color-border-weak-base, #333); + } + + body.eidorail-compact [contenteditable="true"] { + padding-left: 12px !important; + } + + /* ---- HEADER: Compact padding ---- */ + body.eidorail-compact header > div { + padding-left: 48px !important; + padding-right: 12px !important; + } + + /* ---- MENU BUTTON: Top-left position ---- */ + .eidorail-menu-button { + bottom: auto !important; + right: auto !important; + top: 5px !important; + left: 6px !important; + width: 34px !important; + height: 34px !important; + background: transparent !important; + border: none !important; + box-shadow: none !important; + } + + .eidorail-menu-button:hover { + background: var(--color-background-surface, #1a1a1a) !important; + border: 1px solid var(--color-border-base, #333) !important; + } + + + + /* ---- SIDEBAR: Overlay mode ---- */ + body.eidorail-compact .fixed.inset-y-0.left-0.w-72, + body.eidorail-compact .xl\\:hidden > .fixed.inset-y-0.left-0, + body.eidorail-compact [class*="fixed"][class*="inset-y-0"][class*="left-0"][class*="w-"] { + transform: translateX(-100%); + transition: transform 0.2s ease; + z-index: 50 !important; + } + + body.eidorail-compact .eidorail-sidebar-visible, + body.eidorail-compact.sidebar-open .fixed.inset-y-0.left-0.w-72, + body.eidorail-compact.sidebar-open .xl\\:hidden > .fixed.inset-y-0.left-0 { + transform: translateX(0) !important; + display: flex !important; + } + + /* ---- MOBILE LAYOUT: No bottom gap ---- */ + body.eidorail-compact .md\\:hidden.flex-1 { + padding-bottom: 0 !important; + } + + /* ---- SCROLLBAR: Subtle styling ---- */ + body.eidorail-compact ::-webkit-scrollbar { + width: 6px; + } + + body.eidorail-compact ::-webkit-scrollbar-track { + background: transparent; + } + + body.eidorail-compact ::-webkit-scrollbar-thumb { + background: var(--color-border-base, #333); + border-radius: 3px; + } + + body.eidorail-compact ::-webkit-scrollbar-thumb:hover { + background: var(--color-border-strong, #444); + } + + /* ---- HOME PAGE: Reduce vertical spacing ---- */ + body.eidorail-compact main > div.mt-55, + body.eidorail-compact main > div[class*="mt-55"] { + margin-top: 24px !important; + width: 100% !important; + max-width: 100% !important; + margin-left: 0 !important; + margin-right: 0 !important; + } + + body.eidorail-compact main > div.mt-55 > svg, + body.eidorail-compact main > div[class*="mt-55"] > svg { + max-width: 180px !important; + height: auto !important; + } + + body.eidorail-compact main div.mt-20 { + margin-top: 16px !important; + } + + body.eidorail-compact main div.mt-30 { + margin-top: 24px !important; + } + + body.eidorail-compact main [class~="mt-20"][class~="w-full"][class~="flex"][class~="flex-col"][class~="gap-4"] + > [class~="flex"][class~="gap-2"][class~="items-center"][class~="justify-between"][class~="pl-3"] { + flex-wrap: wrap !important; + gap: 8px !important; + align-items: flex-start; + } + + body.eidorail-compact main [class~="mt-20"][class~="w-full"][class~="flex"][class~="flex-col"][class~="gap-4"] + > [class~="flex"][class~="gap-2"][class~="items-center"][class~="justify-between"][class~="pl-3"] + > button[class~="pl-2"][class~="pr-3"] { + width: 100% !important; + } + + /* Ensure home page content fits without scrolling at narrow widths */ + @media (max-height: 600px) { + body.eidorail-compact main > div.mt-55, + body.eidorail-compact main > div[class*="mt-55"] { + margin-top: 12px !important; + } + + body.eidorail-compact main > div.mt-55 > svg, + body.eidorail-compact main > div[class*="mt-55"] > svg { + max-width: 120px !important; + } + + body.eidorail-compact main div.mt-20, + body.eidorail-compact main div.mt-30 { + margin-top: 12px !important; + } + } + + /* Extra compact for very narrow viewports */ + @media (max-width: 350px) { + body.eidorail-compact main > div.mt-55, + body.eidorail-compact main > div[class*="mt-55"] { + margin-top: 16px !important; + } + + body.eidorail-compact main > div.mt-55 > svg, + body.eidorail-compact main > div[class*="mt-55"] > svg { + max-width: 140px !important; + } + } + ` + + // Insert as early as possible + if (document.head) { + document.head.appendChild(style) + } else { + document.documentElement.appendChild(style) + } +} + +function onDOMReady() { + document.body.classList.add("eidorail-compact") + ensureSidebarClosed() + addMenuButton() + closeSidebarOnBackdropClick() + checkAndShowWelcome() + observeStateChanges() +} + +function ensureSidebarClosed() { + try { + const layoutKey = "default-layout.v7" + const stored = localStorage.getItem(layoutKey) + if (stored) { + const layout = JSON.parse(stored) + if (layout.sidebar && layout.sidebar.opened) { + layout.sidebar.opened = false + localStorage.setItem(layoutKey, JSON.stringify(layout)) + console.log("[Eidorail] Ensured sidebar is closed") + } + } + } catch (e) { + console.warn("[Eidorail] Could not modify sidebar state:", e) + } +} + +function addMenuButton() { + if (document.querySelector(".eidorail-menu-button")) return + + const button = document.createElement("button") + button.className = "eidorail-menu-button" + button.title = "Toggle sidebar" + button.innerHTML = ` + + + + ` + + button.addEventListener("click", (e) => { + e.stopPropagation() + toggleSidebar() + }) + + document.body.appendChild(button) +} + +function findSidebar(): HTMLElement | null { + const selectors = [ + ".fixed.inset-y-0.left-0.w-72", + ".fixed.inset-y-0.left-0.z-50", + '[class*="fixed"][class*="inset-y-0"][class*="left-0"][class*="w-"]', + "aside.fixed", + '[data-sidebar="true"]', + ] + for (const selector of selectors) { + const el = document.querySelector(selector) as HTMLElement + if (el && el.offsetWidth > 50) return el + } + return null +} + +function toggleSidebar() { + const sidebar = findSidebar() + if (!sidebar) { + console.warn("[Eidorail] Sidebar element not found") + return + } + + const isOpen = document.body.classList.toggle("sidebar-open") + sidebar.classList.toggle("eidorail-sidebar-visible", isOpen) + updateSidebarState(isOpen) +} + +function updateSidebarState(opened: boolean) { + try { + const layoutKey = "default-layout.v7" + const stored = localStorage.getItem(layoutKey) + const layout = stored ? JSON.parse(stored) : {} + layout.sidebar = layout.sidebar || {} + layout.sidebar.opened = opened + localStorage.setItem(layoutKey, JSON.stringify(layout)) + window.dispatchEvent(new StorageEvent("storage", { key: layoutKey })) + } catch (e) { + console.warn("[Eidorail] Could not update sidebar state:", e) + } +} + +function closeSidebarOnBackdropClick() { + document.addEventListener("click", (e) => { + if (!document.body.classList.contains("sidebar-open")) return + const target = e.target as HTMLElement + const sidebar = findSidebar() + const menuButton = document.querySelector(".eidorail-menu-button") + if (sidebar?.contains(target) || menuButton?.contains(target)) return + sidebar?.classList.remove("eidorail-sidebar-visible") + document.body.classList.remove("sidebar-open") + updateSidebarState(false) + }) +} + +function checkAndShowWelcome() { + // Show welcome overlay when on home page with no active session + const isHomePage = window.location.pathname === "/" || window.location.pathname === "" + const hasSession = window.location.pathname.includes("/session/") + + if (isHomePage && !hasSession) { + // Check if there are recent projects - if so, don't show welcome + const hasProjects = document.querySelector('[class*="group/item"]') + if (!hasProjects) { + showWelcomeOverlay() + } + } +} + +function showWelcomeOverlay() { + if (document.querySelector(".eidorail-welcome-overlay")) return + + const overlay = document.createElement("div") + overlay.className = "eidorail-welcome-overlay" + overlay.innerHTML = ` +

Welcome to OpenCode

+

Your AI coding assistant, right in your browser sidebar.

+
+ + +
+
+ Press + K to open command palette +
+ ` + + overlay.addEventListener("click", (e) => { + const target = e.target as HTMLElement + const actionButton = target.closest("button[data-action]") as HTMLElement + if (!actionButton) return + + const action = actionButton.dataset.action + overlay.classList.add("hidden") + + setTimeout(() => overlay.remove(), 300) + + if (action === "start-chat") { + // Focus the input or trigger new session + const input = document.querySelector("textarea") as HTMLTextAreaElement + if (input) input.focus() + } else if (action === "open-project") { + // Trigger open project dialog + const openBtn = document.querySelector('button:has(svg[class*="folder"])') as HTMLButtonElement + if (openBtn) openBtn.click() + } + }) + + document.body.appendChild(overlay) + + // Hide overlay when user starts interacting + const hideOnInteraction = () => { + overlay.classList.add("hidden") + setTimeout(() => overlay.remove(), 300) + document.removeEventListener("keydown", hideOnInteraction) + } + + document.addEventListener("keydown", hideOnInteraction) +} + +function observeStateChanges() { + // Watch for URL changes to hide/show welcome + let lastPath = window.location.pathname + const checkPath = () => { + if (window.location.pathname !== lastPath) { + lastPath = window.location.pathname + const overlay = document.querySelector(".eidorail-welcome-overlay") + if (overlay && window.location.pathname.includes("/session/")) { + overlay.classList.add("hidden") + } + } + } + + // Use MutationObserver to detect navigation + const observer = new MutationObserver(checkPath) + observer.observe(document.body, { childList: true, subtree: true }) + + // Also check periodically (for SPA navigation) + setInterval(checkPath, 500) + + document.addEventListener("keydown", (e) => { + if (e.key === "Escape" && document.body.classList.contains("sidebar-open")) { + const sidebar = findSidebar() + sidebar?.classList.remove("eidorail-sidebar-visible") + document.body.classList.remove("sidebar-open") + updateSidebarState(false) + } + }) +} diff --git a/packages/extension/entrypoints/options/index.html b/packages/extension/entrypoints/options/index.html new file mode 100644 index 00000000000..56c683b26b9 --- /dev/null +++ b/packages/extension/entrypoints/options/index.html @@ -0,0 +1,13 @@ + + + + + + Eidorail Options + + + +
+ + + diff --git a/packages/extension/entrypoints/options/main.tsx b/packages/extension/entrypoints/options/main.tsx new file mode 100644 index 00000000000..f270a61f8e7 --- /dev/null +++ b/packages/extension/entrypoints/options/main.tsx @@ -0,0 +1,15 @@ +import { render } from "solid-js/web" +import { SettingsPanel } from "../../components/SettingsPanel" + +function OptionsPage() { + return ( +
+ +
+ ) +} + +const root = document.getElementById("root") +if (root) { + render(() => , root) +} diff --git a/packages/extension/entrypoints/page-context.content.ts b/packages/extension/entrypoints/page-context.content.ts new file mode 100644 index 00000000000..d63d3d85491 --- /dev/null +++ b/packages/extension/entrypoints/page-context.content.ts @@ -0,0 +1,70 @@ +import { Readability } from "@mozilla/readability" +import { htmlToMarkdown, formatCapturedContent } from "../utils/markdown-converter" + +export default defineContentScript({ + matches: [""], + runAt: "document_idle", + + main() { + chrome.runtime.onMessage.addListener((message, sender, sendResponse) => { + if (message.type === "EXTRACT_PAGE_CONTENT") { + const result = extractPageContent() + sendResponse(result) + return true + } + + if (message.type === "EXTRACT_SELECTION") { + const result = extractSelection() + sendResponse(result) + return true + } + }) + }, +}) + +function extractPageContent(): { success: boolean; markdown?: string; error?: string } { + const clone = document.cloneNode(true) as Document + const reader = new Readability(clone) + const article = reader.parse() + + if (!article || !article.content) { + return { success: false, error: "Could not parse page content" } + } + + const markdown = htmlToMarkdown(article.content) + const title = article.title || document.title || "Untitled" + const formatted = formatCapturedContent({ + title, + url: window.location.href, + content: markdown, + type: "page", + }) + + return { success: true, markdown: formatted } +} + +function extractSelection(): { success: boolean; markdown?: string; error?: string } { + const selection = window.getSelection() + if (!selection || selection.isCollapsed) { + return { success: false, error: "No text selected" } + } + + const range = selection.getRangeAt(0) + const container = document.createElement("div") + container.appendChild(range.cloneContents()) + + const html = container.innerHTML + if (!html.trim()) { + return { success: false, error: "Selection is empty" } + } + + const markdown = htmlToMarkdown(html) + const formatted = formatCapturedContent({ + title: document.title, + url: window.location.href, + content: markdown, + type: "selection", + }) + + return { success: true, markdown: formatted } +} diff --git a/packages/extension/entrypoints/sidepanel/ContextBar.tsx b/packages/extension/entrypoints/sidepanel/ContextBar.tsx new file mode 100644 index 00000000000..0b41f3a532d --- /dev/null +++ b/packages/extension/entrypoints/sidepanel/ContextBar.tsx @@ -0,0 +1,248 @@ +import { createSignal, Show, onMount } from "solid-js" +import type { TabInfo } from "../../utils/browser-context" +import { canCaptureUrl, getAllWindowsTabs, formatTabTree } from "../../utils/browser-context" +import { formatScreenshot } from "../../utils/markdown-converter" +import { TabPicker } from "./TabPicker" + +type CaptureState = "idle" | "loading" | "success" | "error" + +export function ContextBar() { + const [targetTab, setTargetTab] = createSignal(null) + const [showPicker, setShowPicker] = createSignal(false) + const [screenshotState, setScreenshotState] = createSignal("idle") + const [pageState, setPageState] = createSignal("idle") + const [selectionState, setSelectionState] = createSignal("idle") + const [tabTreeState, setTabTreeState] = createSignal("idle") + const [errorMessage, setErrorMessage] = createSignal(null) + const [showCopiedToast, setShowCopiedToast] = createSignal(false) + + onMount(async () => { + const response = await chrome.runtime.sendMessage({ type: "GET_CURRENT_TAB" }) + if (response?.tab) { + setTargetTab({ + id: response.tab.id, + title: response.tab.title || "Untitled", + url: response.tab.url || "", + favIconUrl: response.tab.favIconUrl, + active: true, + }) + } + }) + + function resetState(setter: (s: CaptureState) => void) { + setTimeout(() => setter("idle"), 1500) + } + + async function handleScreenshot() { + const tab = targetTab() + if (!tab || !canCaptureUrl(tab.url)) { + setErrorMessage("Cannot capture this page") + return + } + + setScreenshotState("loading") + const response = await chrome.runtime.sendMessage({ + type: "CAPTURE_FULL_PAGE_SCREENSHOT", + tabId: tab.id, + }) + + if (response?.error) { + setScreenshotState("error") + setErrorMessage(response.error) + resetState(setScreenshotState) + return + } + + if (response?.screenshot) { + const markdown = formatScreenshot({ title: tab.title, dataUrl: response.screenshot }) + await copyToClipboard(markdown) + setScreenshotState("success") + resetState(setScreenshotState) + } + } + + async function handlePageCapture() { + const tab = targetTab() + if (!tab || !canCaptureUrl(tab.url)) { + setErrorMessage("Cannot capture this page") + return + } + + setPageState("loading") + const response = await chrome.runtime.sendMessage({ + type: "CAPTURE_PAGE_MARKDOWN", + tabId: tab.id, + }) + + if (response?.error) { + setPageState("error") + setErrorMessage(response.error) + resetState(setPageState) + return + } + + if (response?.markdown) { + await copyToClipboard(response.markdown) + setPageState("success") + resetState(setPageState) + } + } + + async function handleSelectionCapture() { + const tab = targetTab() + if (!tab || !canCaptureUrl(tab.url)) { + setErrorMessage("Cannot capture from this page") + return + } + + setSelectionState("loading") + const response = await chrome.runtime.sendMessage({ + type: "CAPTURE_SELECTION_MARKDOWN", + tabId: tab.id, + }) + + if (response?.error) { + setSelectionState("error") + setErrorMessage(response.error) + resetState(setSelectionState) + return + } + + if (response?.markdown) { + await copyToClipboard(response.markdown) + setSelectionState("success") + resetState(setSelectionState) + } + } + + async function handleTabTree() { + setTabTreeState("loading") + try { + const tree = await getAllWindowsTabs() + const markdown = formatTabTree(tree) + await copyToClipboard(markdown) + setTabTreeState("success") + resetState(setTabTreeState) + } catch (err) { + setTabTreeState("error") + setErrorMessage("Failed to capture tab tree") + resetState(setTabTreeState) + } + } + + async function copyToClipboard(text: string) { + try { + await navigator.clipboard.writeText(text) + setShowCopiedToast(true) + setTimeout(() => setShowCopiedToast(false), 1500) + } catch (err) { + console.warn("[ContextBar] Clipboard write failed:", err) + setErrorMessage("Clipboard access denied") + resetState(setSelectionState) + resetState(setScreenshotState) + } + } + + function handleTabSelect(tab: TabInfo) { + setTargetTab(tab) + setShowPicker(false) + } + + function getButtonIcon(state: CaptureState, defaultIcon: string) { + if (state === "loading") return ICONS.spinner + if (state === "success") return ICONS.check + if (state === "error") return ICONS.error + return defaultIcon + } + + function getButtonClass(state: CaptureState) { + if (state === "success") return "context-action-btn success" + if (state === "error") return "context-action-btn error" + return "context-action-btn" + } + + const canCapture = () => { + const tab = targetTab() + return tab && canCaptureUrl(tab.url) + } + + return ( +
+ + +
+ + + + +
+ + + setShowPicker(false)} currentTabId={targetTab()?.id} /> + + + +
{errorMessage()}
+
+ + +
Copied!
+
+
+ ) +} + +function truncateTitle(title: string, maxLen = 30): string { + if (title.length <= maxLen) return title + return title.slice(0, maxLen - 1) + "…" +} + +const ICONS = { + globe: ``, + chevronDown: ``, + camera: ``, + page: ``, + selection: ``, + tree: ``, + spinner: ``, + check: ``, + error: ``, +} diff --git a/packages/extension/entrypoints/sidepanel/TabPicker.tsx b/packages/extension/entrypoints/sidepanel/TabPicker.tsx new file mode 100644 index 00000000000..a13ce90e4d9 --- /dev/null +++ b/packages/extension/entrypoints/sidepanel/TabPicker.tsx @@ -0,0 +1,125 @@ +import { createSignal, For, Show, onMount, onCleanup } from "solid-js" +import type { TabInfo, GroupedTabs } from "../../utils/browser-context" + +interface TabPickerProps { + onSelect: (tab: TabInfo) => void + onClose: () => void + currentTabId?: number +} + +export function TabPicker(props: TabPickerProps) { + const [search, setSearch] = createSignal("") + const [tabs, setTabs] = createSignal({ groups: [], ungrouped: [] }) + const [loading, setLoading] = createSignal(true) + + let containerRef: HTMLDivElement | undefined + + onMount(async () => { + const response = await chrome.runtime.sendMessage({ type: "GET_TABS_WITH_GROUPS" }) + if (response?.tabs) { + setTabs(response.tabs) + } + setLoading(false) + + document.addEventListener("click", handleClickOutside) + }) + + onCleanup(() => { + document.removeEventListener("click", handleClickOutside) + }) + + function handleClickOutside(e: MouseEvent) { + if (containerRef && !containerRef.contains(e.target as Node)) { + props.onClose() + } + } + + function filterTabs(tabList: TabInfo[]): TabInfo[] { + const query = search().toLowerCase() + if (!query) return tabList + return tabList.filter((t) => t.title.toLowerCase().includes(query) || t.url.toLowerCase().includes(query)) + } + + function getAllFilteredTabs(): { + groups: Array<{ title: string; color: string; tabs: TabInfo[] }> + ungrouped: TabInfo[] + } { + const data = tabs() + return { + groups: data.groups.map((g) => ({ ...g, tabs: filterTabs(g.tabs) })).filter((g) => g.tabs.length > 0), + ungrouped: filterTabs(data.ungrouped), + } + } + + return ( +
+ + +
+ +
Loading tabs...
+
+ + + + {(group) => ( +
+
+ + {group.title || "Group"} +
+ + {(tab) => ( + + )} + +
+ )} +
+ + 0}> +
+ + {(tab) => ( + + )} + +
+
+ + +
No matching tabs
+
+
+
+
+ ) +} + +const ICONS = { + globe: ``, +} diff --git a/packages/extension/entrypoints/sidepanel/index.html b/packages/extension/entrypoints/sidepanel/index.html new file mode 100644 index 00000000000..8582a099786 --- /dev/null +++ b/packages/extension/entrypoints/sidepanel/index.html @@ -0,0 +1,13 @@ + + + + + + Eidorail + + + +
+ + + diff --git a/packages/extension/entrypoints/sidepanel/main.tsx b/packages/extension/entrypoints/sidepanel/main.tsx new file mode 100644 index 00000000000..68762aea129 --- /dev/null +++ b/packages/extension/entrypoints/sidepanel/main.tsx @@ -0,0 +1,410 @@ +import { render } from "solid-js/web" +import { createSignal, For, Show, onMount } from "solid-js" +import "./style.css" +import { checkOpenCodeStatus, retryConnection as retryOpenCode, getOpenCodePort } from "../../utils/opencode-status" +import { + checkOpenChamberStatus, + retryOpenChamberConnection, + getOpenChamberUrl, + getOpenChamberPort, + getStartCommand, +} from "../../utils/openchamber-status" +import { detectPlatform, launchOpenCodeInTerminal, copyToClipboard } from "../../utils/terminal-launcher" +import { type Platform, getIcon, loadPlatforms } from "../../utils/shared" +import { SettingsPanel } from "../../components/SettingsPanel" +import { ContextBar } from "./ContextBar" + +type ConnectionState = "checking" | "opencode-missing" | "openchamber-missing" | "connected" + +function OpenCodeNotRunning(props: { onRetry: () => void; isRetrying: boolean; retryAttempt: number }) { + const platform = detectPlatform() + const [activeTab, setActiveTab] = createSignal(platform === "windows" ? "windows" : "unix") + const [copied, setCopied] = createSignal(null) + + const port = getOpenCodePort() + const serveCommand = `opencode serve --port ${port}` + const winInstallCmd = "winget install sst.opencode" + const unixInstallCmd = "curl -fsSL https://opencode.ai/install | bash" + + const copyCmd = async (cmd: string, id: string) => { + await copyToClipboard(cmd) + setCopied(id) + setTimeout(() => setCopied(null), 2000) + } + + return ( +
+
+
+ + + + +
+ +

OpenCode isn't running

+

Start the OpenCode server first

+ +
+
+

Install OpenCode

+
+ +
+ + +
+ +
+
+ {activeTab() === "windows" ? winInstallCmd : unixInstallCmd} + +
+
+
+ +
+

Already installed?

+

Start the server:

+
+ {serveCommand} + +
+ + +
+ + +
+
+ ) +} + +function OpenChamberNotRunning(props: { onRetry: () => void; isRetrying: boolean; retryAttempt: number }) { + const [activeTab, setActiveTab] = createSignal<"bun" | "npm" | "curl">("bun") + const [copied, setCopied] = createSignal(null) + const startCommand = () => getStartCommand() + + const installCommands = { + bun: "bun add -g @openchamber/web", + npm: "npm install -g @openchamber/web", + curl: "curl -fsSL https://raw.githubusercontent.com/btriapitsyn/openchamber/main/scripts/install.sh | bash", + } + + const copyCmd = async (cmd: string, id: string) => { + await copyToClipboard(cmd) + setCopied(id) + setTimeout(() => setCopied(null), 2000) + } + + return ( +
+
+
+ + + +
+ +

OpenCode is running!

+

Now start OpenChamber for the chat UI

+ +
+
+

Install OpenChamber

+
+ +
+ + + +
+ +
+
+ {installCommands[activeTab()]} + +
+
+
+ +
+

Already installed?

+

Start OpenChamber:

+
+ {startCommand()} + +
+ +

+ For remote access via Cloudflare Tunnel, install{" "} + + cloudflared + {" "} + and use --try-cf-tunnel +

+ + +
+ + +
+
+ ) +} + +function App() { + const [platforms, setPlatforms] = createSignal(loadPlatforms()) + const [currentView, setCurrentView] = createSignal("opencode") + const [loadedIframes, setLoadedIframes] = createSignal>(new Set(["opencode"])) + const [settingsOpen, setSettingsOpen] = createSignal(false) + + const [connectionState, setConnectionState] = createSignal("checking") + const [isRetrying, setIsRetrying] = createSignal(false) + const [retryAttempt, setRetryAttempt] = createSignal(0) + + async function checkConnections() { + setConnectionState("checking") + + const openCodeOk = await checkOpenCodeStatus() + if (!openCodeOk) { + setConnectionState("opencode-missing") + return + } + + const openChamberOk = await checkOpenChamberStatus() + if (!openChamberOk) { + setConnectionState("openchamber-missing") + return + } + + setConnectionState("connected") + } + + onMount(() => { + checkConnections() + }) + + async function handleRetryOpenCode() { + setIsRetrying(true) + setRetryAttempt(0) + + const connected = await retryOpenCode(3, (attempt) => { + setRetryAttempt(attempt) + }) + + setIsRetrying(false) + + if (connected) { + checkConnections() + } + } + + async function handleRetryOpenChamber() { + setIsRetrying(true) + setRetryAttempt(0) + + const connected = await retryOpenChamberConnection(3, (attempt) => { + setRetryAttempt(attempt) + }) + + setIsRetrying(false) + + if (connected) { + setConnectionState("connected") + } + } + + function switchView(platformId: string) { + setCurrentView(platformId) + if (!loadedIframes().has(platformId)) { + setLoadedIframes((prev) => new Set([...prev, platformId])) + } + } + + function openExternal() { + const platform = platforms().find((p) => p.id === currentView()) + const url = platform?.id === "opencode" ? getOpenChamberUrl() : platform?.url + if (url) { + if (typeof chrome !== "undefined" && chrome.tabs) { + chrome.tabs.create({ url, active: true }) + } else { + window.open(url, "_blank") + } + } + } + + function handlePlatformsChange(newPlatforms: Platform[]) { + setPlatforms(newPlatforms) + } + + return ( +
+
+
+ p.isVisible) + .sort((a, b) => a.order - b.order)} + > + {(platform) => ( + + )} + + +
+
+ + + +
+
+ +
+ p.isVisible)}> + {(platform) => ( +
+ + +
+

Connecting...

+
+ } + > + +
+ } + > + +
+ } + > +