summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--bun.lock262
-rw-r--r--package.json1
-rw-r--r--packages/app/package.json2
-rw-r--r--packages/console/app/package.json1
-rw-r--r--packages/console/app/public/favicon-zen.svg23
-rw-r--r--packages/console/app/public/favicon.svg8
-rw-r--r--packages/console/app/public/social-share-zen.pngbin0 -> 21918 bytes
-rw-r--r--packages/console/app/public/social-share.pngbin17520 -> 8923 bytes
-rw-r--r--packages/console/app/src/asset/lander/avatar-adam.pngbin0 -> 8062 bytes
-rw-r--r--packages/console/app/src/asset/lander/avatar-david.pngbin0 -> 7019 bytes
-rw-r--r--packages/console/app/src/asset/lander/avatar-dax.pngbin0 -> 9390 bytes
-rw-r--r--packages/console/app/src/asset/lander/avatar-frank.pngbin0 -> 7535 bytes
-rw-r--r--packages/console/app/src/asset/lander/avatar-jay.pngbin0 -> 6337 bytes
-rw-r--r--packages/console/app/src/asset/lander/check.svg5
-rw-r--r--packages/console/app/src/asset/lander/copy.svg5
-rw-r--r--packages/console/app/src/asset/lander/dock.pngbin0 -> 7414 bytes
-rw-r--r--packages/console/app/src/asset/lander/opencode-comparison-min.mp4bin0 -> 16908501 bytes
-rw-r--r--packages/console/app/src/asset/lander/opencode-comparison-poster.pngbin0 -> 53916 bytes
-rw-r--r--packages/console/app/src/asset/lander/opencode-min.mp4bin0 -> 24455677 bytes
-rw-r--r--packages/console/app/src/asset/lander/opencode-poster.pngbin0 -> 53916 bytes
-rw-r--r--packages/console/app/src/asset/lander/screenshot-github.pngbin924094 -> 232073 bytes
-rw-r--r--packages/console/app/src/asset/lander/screenshot-splash.pngbin467281 -> 133399 bytes
-rw-r--r--packages/console/app/src/asset/lander/screenshot-vscode.pngbin1022418 -> 507258 bytes
-rw-r--r--packages/console/app/src/asset/lander/screenshot.pngbin606051 -> 139488 bytes
-rw-r--r--packages/console/app/src/asset/logo-ornate-dark.svg35
-rw-r--r--packages/console/app/src/asset/logo-ornate-light.svg34
-rw-r--r--packages/console/app/src/asset/logo.svg28
-rw-r--r--packages/console/app/src/asset/zen-ornate-dark.svg8
-rw-r--r--packages/console/app/src/asset/zen-ornate-light.svg8
-rw-r--r--packages/console/app/src/component/email-signup.tsx49
-rw-r--r--packages/console/app/src/component/faq.tsx33
-rw-r--r--packages/console/app/src/component/footer.tsx34
-rw-r--r--packages/console/app/src/component/header.tsx127
-rw-r--r--packages/console/app/src/component/icon.tsx33
-rw-r--r--packages/console/app/src/component/legal.tsx9
-rw-r--r--packages/console/app/src/lib/github.ts28
-rw-r--r--packages/console/app/src/routes/index.css1139
-rw-r--r--packages/console/app/src/routes/index.tsx1257
-rw-r--r--packages/console/app/src/routes/temp.tsx183
-rw-r--r--packages/console/app/src/routes/zen/index.css781
-rw-r--r--packages/console/app/src/routes/zen/index.tsx339
-rw-r--r--packages/console/app/src/style/base.css12
42 files changed, 3815 insertions, 629 deletions
diff --git a/bun.lock b/bun.lock
index 335e7b223..50596ebf2 100644
--- a/bun.lock
+++ b/bun.lock
@@ -14,7 +14,7 @@
"name": "@opencode/app",
"version": "0.13.7",
"dependencies": {
- "@kobalte/core": "0.13.11",
+ "@kobalte/core": "catalog:",
"@opencode-ai/sdk": "workspace:*",
"@shikijs/transformers": "3.9.2",
"@solid-primitives/event-bus": "1.1.2",
@@ -49,6 +49,7 @@
"dependencies": {
"@ibm/plex": "6.4.1",
"@jsx-email/render": "1.1.1",
+ "@kobalte/core": "catalog:",
"@openauthjs/openauth": "0.0.0-20250322224806",
"@opencode/console-core": "workspace:*",
"@opencode/console-mail": "workspace:*",
@@ -259,6 +260,7 @@
],
"catalog": {
"@hono/zod-validator": "0.4.2",
+ "@kobalte/core": "0.13.11",
"@tsconfig/node22": "22.0.2",
"@types/bun": "1.2.21",
"@types/node": "22.13.9",
@@ -438,17 +440,17 @@
"@cloudflare/kv-asset-handler": ["@cloudflare/[email protected]", "", { "dependencies": { "mime": "^3.0.0" } }, "sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA=="],
- "@cloudflare/unenv-preset": ["@cloudflare/[email protected]", "", { "peerDependencies": { "unenv": "2.0.0-rc.21", "workerd": "^1.20250912.0" }, "optionalPeers": ["workerd"] }, "sha512-KIjbu/Dt50zseJIoOOK5y4eYpSojD9+xxkePYVK1Rg9k/p/st4YyMtz1Clju/zrenJHrOH+AAcjNArOPMwH4Bw=="],
+ "@cloudflare/unenv-preset": ["@cloudflare/[email protected]", "", { "peerDependencies": { "unenv": "2.0.0-rc.21", "workerd": "^1.20250924.0" }, "optionalPeers": ["workerd"] }, "sha512-eB3UAIVhrvY+CMZrRXS/bAv5kWdNiH+dgwu+1M1S7keDeonxkfKIGVIrhcCLTkcqYlN30MPURPuVFUEzIWuuvg=="],
- "@cloudflare/workerd-darwin-64": ["@cloudflare/[email protected]", "", { "os": "darwin", "cpu": "x64" }, "sha512-/+nWoNDIzdQaQib7MrWYEfeDt1vA40Ah68nXlZGXHonkIqJvkjaTP8dzdKZLuwnQokiV/SpnAXNMH0WGH31XMw=="],
+ "@cloudflare/workerd-darwin-64": ["@cloudflare/[email protected]", "", { "os": "darwin", "cpu": "x64" }, "sha512-rFtXu/qhZziGOltjhHUCdlqP9wLUhf/CmnjJS0hXffGRAVxsCXhJw+7Vlr+hyRSHjHRhEV+gBFc4pHzT10Stzw=="],
- "@cloudflare/workerd-darwin-arm64": ["@cloudflare/[email protected]", "", { "os": "darwin", "cpu": "arm64" }, "sha512-UAjC5mra+WNWy6jMbIDe9orsFmYvvMlfvZdUyn5p3NlQhhU6cc4FkFuXJ/bV+6oVw5hIhlLlFCTnsGatki/uHg=="],
+ "@cloudflare/workerd-darwin-arm64": ["@cloudflare/[email protected]", "", { "os": "darwin", "cpu": "arm64" }, "sha512-BcNlLVfPyctLjFeIJENhK7OZFkfaysHVA6G6KT1lwum+BaVOutebweLo2zOrH7UQCMDYdpkQOeb5nLDctvs8YA=="],
- "@cloudflare/workerd-linux-64": ["@cloudflare/[email protected]", "", { "os": "linux", "cpu": "x64" }, "sha512-IcwaoZFXGHq+yOBEj91QZH4qU61ws5upE7T43wVcrUAk8VXgxL12IGUVkMCEqfFXTO40PjKZBmK16B2q1HoFow=="],
+ "@cloudflare/workerd-linux-64": ["@cloudflare/[email protected]", "", { "os": "linux", "cpu": "x64" }, "sha512-3c+RuyMj3CkaFS9mmVJyX6nNUdTn2kdWgPrpPoj7VbtU2BEGkrH1a4VAgIAiUh/tYRGUeY3owrUhqCv6L7HmJQ=="],
- "@cloudflare/workerd-linux-arm64": ["@cloudflare/[email protected]", "", { "os": "linux", "cpu": "arm64" }, "sha512-NgKG/cJiRNoJFa8QqweG0/bpkrUYKpR9mA9/qLJcGiwfvJrfK9b+ucw0lCru1BVMlyuS3kWDjagjMWqfujdBkA=="],
+ "@cloudflare/workerd-linux-arm64": ["@cloudflare/[email protected]", "", { "os": "linux", "cpu": "arm64" }, "sha512-/XtcZnIryAgLvums08r5xiSm5hYfRfUuj2iq/5Jl+Yysx1BmPjYLqjcIIXNATrzpKUrxf3AkvpSI75MBcePgpA=="],
- "@cloudflare/workerd-windows-64": ["@cloudflare/[email protected]", "", { "os": "win32", "cpu": "x64" }, "sha512-PntewemtjgLO2+8Gjw3G/NowDjpWZNKpKk/n4KmOQaWS9jIRq3IG1LkTqxj/BbMXqa4Oyrywk2kdqspj6QllOw=="],
+ "@cloudflare/workerd-windows-64": ["@cloudflare/[email protected]", "", { "os": "win32", "cpu": "x64" }, "sha512-+m124IiM149QvvzAOrO766uTdILqXJZqzZjqTaMTaWXegjjsJwGSL6v9d71TSFntEwxeXnpJPBkVWyKZFjqrvg=="],
"@cloudflare/workers-types": ["@cloudflare/[email protected]", "", {}, "sha512-9RIffHobc35JWeddzBguGgPa4wLDr5x5F94+0/qy7LiV6pTBQ/M5qGEN9VA16IDT3EUpYI0WKh6VpcmeVEtVtw=="],
@@ -700,35 +702,35 @@
"@octokit/auth-app": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/auth-oauth-app": "^9.0.1", "@octokit/auth-oauth-user": "^6.0.0", "@octokit/request": "^10.0.2", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", "toad-cache": "^3.7.0", "universal-github-app-jwt": "^2.2.0", "universal-user-agent": "^7.0.0" } }, "sha512-P2J5pB3pjiGwtJX4WqJVYCtNkcZ+j5T2Wm14aJAEIC3WJOrv12jvBley3G1U/XI8q9o1A7QMG54LiFED2BiFlg=="],
- "@octokit/auth-oauth-app": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/auth-oauth-device": "^8.0.1", "@octokit/auth-oauth-user": "^6.0.0", "@octokit/request": "^10.0.2", "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-TthWzYxuHKLAbmxdFZwFlmwVyvynpyPmjwc+2/cI3cvbT7mHtsAW9b1LvQaNnAuWL+pFnqtxdmrU8QpF633i1g=="],
+ "@octokit/auth-oauth-app": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/auth-oauth-device": "^8.0.2", "@octokit/auth-oauth-user": "^6.0.1", "@octokit/request": "^10.0.5", "@octokit/types": "^15.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-vmjSHeuHuM+OxZLzOuoYkcY3OPZ8erJ5lfswdTmm+4XiAKB5PmCk70bA1is4uwSl/APhRVAv4KHsgevWfEKIPQ=="],
- "@octokit/auth-oauth-device": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/oauth-methods": "^6.0.0", "@octokit/request": "^10.0.2", "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-TOqId/+am5yk9zor0RGibmlqn4V0h8vzjxlw/wYr3qzkQxl8aBPur384D1EyHtqvfz0syeXji4OUvKkHvxk/Gw=="],
+ "@octokit/auth-oauth-device": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/oauth-methods": "^6.0.1", "@octokit/request": "^10.0.5", "@octokit/types": "^15.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-KW7Ywrz7ei7JX+uClWD2DN1259fnkoKuVdhzfpQ3/GdETaCj4Tx0IjvuJrwhP/04OhcMu5yR6tjni0V6LBihdw=="],
- "@octokit/auth-oauth-user": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/auth-oauth-device": "^8.0.1", "@octokit/oauth-methods": "^6.0.0", "@octokit/request": "^10.0.2", "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-GV9IW134PHsLhtUad21WIeP9mlJ+QNpFd6V9vuPWmaiN25HEJeEQUcS4y5oRuqCm9iWDLtfIs+9K8uczBXKr6A=="],
+ "@octokit/auth-oauth-user": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/auth-oauth-device": "^8.0.2", "@octokit/oauth-methods": "^6.0.1", "@octokit/request": "^10.0.5", "@octokit/types": "^15.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-vlKsL1KUUPvwXpv574zvmRd+/4JiDFXABIZNM39+S+5j2kODzGgjk7w5WtiQ1x24kRKNaE7v9DShNbw43UA3Hw=="],
"@octokit/auth-token": ["@octokit/[email protected]", "", {}, "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w=="],
- "@octokit/core": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.1", "@octokit/request": "^10.0.2", "@octokit/request-error": "^7.0.0", "@octokit/types": "^15.0.0", "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-jOT8V1Ba5BdC79sKrRWDdMT5l1R+XNHTPR6CPWzUP2EcfAcvIHZWF0eAbmRcpOOP5gVIwnqNg0C4nvh6Abc3OA=="],
+ "@octokit/core": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.2", "@octokit/request": "^10.0.4", "@octokit/request-error": "^7.0.1", "@octokit/types": "^15.0.0", "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-t54CUOsFMappY1Jbzb7fetWeO0n6K0k/4+/ZpkS+3Joz8I4VcvY9OiEBFRYISqaI2fq5sCiPtAjRDOzVYG8m+Q=="],
- "@octokit/endpoint": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-hoYicJZaqISMAI3JfaDr1qMNi48OctWuOih1m80bkYow/ayPw6Jj52tqWJ6GEoFTk1gBqfanSoI1iY99Z5+ekQ=="],
+ "@octokit/endpoint": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/types": "^15.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-7P1dRAZxuWAOPI7kXfio88trNi/MegQ0IJD3vfgC3b+LZo1Qe6gRJc2v0mz2USWWJOKrB2h5spXCzGbw+fAdqA=="],
- "@octokit/graphql": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/request": "^10.0.2", "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-j1nQNU1ZxNFx2ZtKmL4sMrs4egy5h65OMDmSbVyuCzjOcwsHq6EaYjOTGXPQxgfiN8dJ4CriYHk6zF050WEULg=="],
+ "@octokit/graphql": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/request": "^10.0.4", "@octokit/types": "^15.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-iz6KzZ7u95Fzy9Nt2L8cG88lGRMr/qy1Q36ih/XVzMIlPDMYwaNLE/ENhqmIzgPrlNWiYJkwmveEetvxAgFBJw=="],
"@octokit/oauth-authorization-url": ["@octokit/[email protected]", "", {}, "sha512-7QoLPRh/ssEA/HuHBHdVdSgF8xNLz/Bc5m9fZkArJE5bb6NmVkDm3anKxXPmN1zh6b5WKZPRr3697xKT/yM3qQ=="],
- "@octokit/oauth-methods": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/oauth-authorization-url": "^8.0.0", "@octokit/request": "^10.0.2", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0" } }, "sha512-Q8nFIagNLIZgM2odAraelMcDssapc+lF+y3OlcIPxyAU+knefO8KmozGqfnma1xegRDP4z5M73ABsamn72bOcA=="],
+ "@octokit/oauth-methods": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/oauth-authorization-url": "^8.0.0", "@octokit/request": "^10.0.5", "@octokit/request-error": "^7.0.1", "@octokit/types": "^15.0.0" } }, "sha512-xi6Iut3izMCFzXBJtxxJehxJmAKjE8iwj6L5+raPRwlTNKAbOOBJX7/Z8AF5apD4aXvc2skwIdOnC+CQ4QuA8Q=="],
"@octokit/openapi-types": ["@octokit/[email protected]", "", {}, "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA=="],
- "@octokit/plugin-paginate-rest": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/types": "^14.1.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-q9iQGlZlxAVNRN2jDNskJW/Cafy7/XE52wjZ5TTvyhyOD904Cvx//DNyoO3J/MXJ0ve3rPoNWKEg5iZrisQSuw=="],
+ "@octokit/plugin-paginate-rest": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/types": "^15.0.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-YuAlyjR8o5QoRSOvMHxSJzPtogkNMgeMv2mpccrvdUGeC3MKyfi/hS+KiFwyH/iRKIKyx+eIMsDjbt3p9r2GYA=="],
"@octokit/plugin-request-log": ["@octokit/[email protected]", "", { "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-UkOzeEN3W91/eBq9sPZNQ7sUBvYCqYbrrD8gTbBuGtHEuycE4/awMXcYvx6sVYo7LypPhmQwwpUe4Yyu4QZN5Q=="],
"@octokit/plugin-rest-endpoint-methods": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/types": "^15.0.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-nCsyiKoGRnhH5LkH8hJEZb9swpqOcsW+VXv1QoyUNQXJeVODG4+xM6UICEqyqe9XFr6LkL8BIiFCPev8zMDXPw=="],
- "@octokit/request": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/endpoint": "^11.0.0", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", "fast-content-type-parse": "^3.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-V6jhKokg35vk098iBqp2FBKunk3kMTXlmq+PtbV9Gl3TfskWlebSofU9uunVKhUN7xl+0+i5vt0TGTG8/p/7HA=="],
+ "@octokit/request": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/endpoint": "^11.0.1", "@octokit/request-error": "^7.0.1", "@octokit/types": "^15.0.0", "fast-content-type-parse": "^3.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-TXnouHIYLtgDhKo+N6mXATnDBkV05VwbR0TtMWpgTHIoQdRQfCSzmy/LGqR1AbRMbijq/EckC/E3/ZNcU92NaQ=="],
- "@octokit/request-error": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/types": "^14.0.0" } }, "sha512-KRA7VTGdVyJlh0cP5Tf94hTiYVVqmt2f3I6mnimmaVz4UG3gQV/k4mDJlJv3X67iX6rmN7gSHCF8ssqeMnmhZg=="],
+ "@octokit/request-error": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/types": "^15.0.0" } }, "sha512-CZpFwV4+1uBrxu7Cw8E5NCXDWFNf18MSY23TdxCBgjw1tXXHvTrZVsXlW8hgFTOLw8RQR1BBrMvYRtuyaijHMA=="],
"@octokit/rest": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/core": "^7.0.2", "@octokit/plugin-paginate-rest": "^13.0.1", "@octokit/plugin-request-log": "^6.0.0", "@octokit/plugin-rest-endpoint-methods": "^16.0.0" } }, "sha512-z6tmTu9BTnw51jYGulxrlernpsQYXpui1RK21vmXn8yF5bp6iX16yfTtJYGK5Mh1qDkvDOmp2n8sRMcQmR8jiA=="],
@@ -910,49 +912,49 @@
"@rollup/pluginutils": ["@rollup/[email protected]", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q=="],
- "@rollup/rollup-android-arm-eabi": ["@rollup/[email protected]", "", { "os": "android", "cpu": "arm" }, "sha512-o3pcKzJgSGt4d74lSZ+OCnHwkKBeAbFDmbEm5gg70eA8VkyCuC/zV9TwBnmw6VjDlRdF4Pshfb+WE9E6XY1PoQ=="],
+ "@rollup/rollup-android-arm-eabi": ["@rollup/[email protected]", "", { "os": "android", "cpu": "arm" }, "sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw=="],
- "@rollup/rollup-android-arm64": ["@rollup/[email protected]", "", { "os": "android", "cpu": "arm64" }, "sha512-cqFSWO5tX2vhC9hJTK8WAiPIm4Q8q/cU8j2HQA0L3E1uXvBYbOZMhE2oFL8n2pKB5sOCHY6bBuHaRwG7TkfJyw=="],
+ "@rollup/rollup-android-arm64": ["@rollup/[email protected]", "", { "os": "android", "cpu": "arm64" }, "sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw=="],
- "@rollup/rollup-darwin-arm64": ["@rollup/[email protected]", "", { "os": "darwin", "cpu": "arm64" }, "sha512-vngduywkkv8Fkh3wIZf5nFPXzWsNsVu1kvtLETWxTFf/5opZmflgVSeLgdHR56RQh71xhPhWoOkEBvbehwTlVA=="],
+ "@rollup/rollup-darwin-arm64": ["@rollup/[email protected]", "", { "os": "darwin", "cpu": "arm64" }, "sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg=="],
- "@rollup/rollup-darwin-x64": ["@rollup/[email protected]", "", { "os": "darwin", "cpu": "x64" }, "sha512-h11KikYrUCYTrDj6h939hhMNlqU2fo/X4NB0OZcys3fya49o1hmFaczAiJWVAFgrM1NCP6RrO7lQKeVYSKBPSQ=="],
+ "@rollup/rollup-darwin-x64": ["@rollup/[email protected]", "", { "os": "darwin", "cpu": "x64" }, "sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A=="],
- "@rollup/rollup-freebsd-arm64": ["@rollup/[email protected]", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-/eg4CI61ZUkLXxMHyVlmlGrSQZ34xqWlZNW43IAU4RmdzWEx0mQJ2mN/Cx4IHLVZFL6UBGAh+/GXhgvGb+nVxw=="],
+ "@rollup/rollup-freebsd-arm64": ["@rollup/[email protected]", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ=="],
- "@rollup/rollup-freebsd-x64": ["@rollup/[email protected]", "", { "os": "freebsd", "cpu": "x64" }, "sha512-QOWgFH5X9+p+S1NAfOqc0z8qEpJIoUHf7OWjNUGOeW18Mx22lAUOiA9b6r2/vpzLdfxi/f+VWsYjUOMCcYh0Ng=="],
+ "@rollup/rollup-freebsd-x64": ["@rollup/[email protected]", "", { "os": "freebsd", "cpu": "x64" }, "sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A=="],
- "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/[email protected]", "", { "os": "linux", "cpu": "arm" }, "sha512-kDWSPafToDd8LcBYd1t5jw7bD5Ojcu12S3uT372e5HKPzQt532vW+rGFFOaiR0opxePyUkHrwz8iWYEyH1IIQA=="],
+ "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/[email protected]", "", { "os": "linux", "cpu": "arm" }, "sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA=="],
- "@rollup/rollup-linux-arm-musleabihf": ["@rollup/[email protected]", "", { "os": "linux", "cpu": "arm" }, "sha512-gKm7Mk9wCv6/rkzwCiUC4KnevYhlf8ztBrDRT9g/u//1fZLapSRc+eDZj2Eu2wpJ+0RzUKgtNijnVIB4ZxyL+w=="],
+ "@rollup/rollup-linux-arm-musleabihf": ["@rollup/[email protected]", "", { "os": "linux", "cpu": "arm" }, "sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA=="],
- "@rollup/rollup-linux-arm64-gnu": ["@rollup/[email protected]", "", { "os": "linux", "cpu": "arm64" }, "sha512-66lA8vnj5mB/rtDNwPgrrKUOtCLVQypkyDa2gMfOefXK6rcZAxKLO9Fy3GkW8VkPnENv9hBkNOFfGLf6rNKGUg=="],
+ "@rollup/rollup-linux-arm64-gnu": ["@rollup/[email protected]", "", { "os": "linux", "cpu": "arm64" }, "sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ=="],
- "@rollup/rollup-linux-arm64-musl": ["@rollup/[email protected]", "", { "os": "linux", "cpu": "arm64" }, "sha512-s+OPucLNdJHvuZHuIz2WwncJ+SfWHFEmlC5nKMUgAelUeBUnlB4wt7rXWiyG4Zn07uY2Dd+SGyVa9oyLkVGOjA=="],
+ "@rollup/rollup-linux-arm64-musl": ["@rollup/[email protected]", "", { "os": "linux", "cpu": "arm64" }, "sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw=="],
- "@rollup/rollup-linux-loong64-gnu": ["@rollup/[email protected]", "", { "os": "linux", "cpu": "none" }, "sha512-8wTRM3+gVMDLLDdaT6tKmOE3lJyRy9NpJUS/ZRWmLCmOPIJhVyXwjBo+XbrrwtV33Em1/eCTd5TuGJm4+DmYjw=="],
+ "@rollup/rollup-linux-loong64-gnu": ["@rollup/[email protected]", "", { "os": "linux", "cpu": "none" }, "sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg=="],
- "@rollup/rollup-linux-ppc64-gnu": ["@rollup/[email protected]", "", { "os": "linux", "cpu": "ppc64" }, "sha512-6yqEfgJ1anIeuP2P/zhtfBlDpXUb80t8DpbYwXQ3bQd95JMvUaqiX+fKqYqUwZXqdJDd8xdilNtsHM2N0cFm6A=="],
+ "@rollup/rollup-linux-ppc64-gnu": ["@rollup/[email protected]", "", { "os": "linux", "cpu": "ppc64" }, "sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw=="],
- "@rollup/rollup-linux-riscv64-gnu": ["@rollup/[email protected]", "", { "os": "linux", "cpu": "none" }, "sha512-sshYUiYVSEI2B6dp4jMncwxbrUqRdNApF2c3bhtLAU0qA8Lrri0p0NauOsTWh3yCCCDyBOjESHMExonp7Nzc0w=="],
+ "@rollup/rollup-linux-riscv64-gnu": ["@rollup/[email protected]", "", { "os": "linux", "cpu": "none" }, "sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg=="],
- "@rollup/rollup-linux-riscv64-musl": ["@rollup/[email protected]", "", { "os": "linux", "cpu": "none" }, "sha512-duBLgd+3pqC4MMwBrKkFxaZerUxZcYApQVC5SdbF5/e/589GwVvlRUnyqMFbM8iUSb1BaoX/3fRL7hB9m2Pj8Q=="],
+ "@rollup/rollup-linux-riscv64-musl": ["@rollup/[email protected]", "", { "os": "linux", "cpu": "none" }, "sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg=="],
- "@rollup/rollup-linux-s390x-gnu": ["@rollup/[email protected]", "", { "os": "linux", "cpu": "s390x" }, "sha512-tzhYJJidDUVGMgVyE+PmxENPHlvvqm1KILjjZhB8/xHYqAGeizh3GBGf9u6WdJpZrz1aCpIIHG0LgJgH9rVjHQ=="],
+ "@rollup/rollup-linux-s390x-gnu": ["@rollup/[email protected]", "", { "os": "linux", "cpu": "s390x" }, "sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg=="],
- "@rollup/rollup-linux-x64-gnu": ["@rollup/[email protected]", "", { "os": "linux", "cpu": "x64" }, "sha512-opH8GSUuVcCSSyHHcl5hELrmnk4waZoVpgn/4FDao9iyE4WpQhyWJ5ryl5M3ocp4qkRuHfyXnGqg8M9oKCEKRA=="],
+ "@rollup/rollup-linux-x64-gnu": ["@rollup/[email protected]", "", { "os": "linux", "cpu": "x64" }, "sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA=="],
- "@rollup/rollup-linux-x64-musl": ["@rollup/[email protected]", "", { "os": "linux", "cpu": "x64" }, "sha512-LSeBHnGli1pPKVJ79ZVJgeZWWZXkEe/5o8kcn23M8eMKCUANejchJbF/JqzM4RRjOJfNRhKJk8FuqL1GKjF5oQ=="],
+ "@rollup/rollup-linux-x64-musl": ["@rollup/[email protected]", "", { "os": "linux", "cpu": "x64" }, "sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw=="],
- "@rollup/rollup-openharmony-arm64": ["@rollup/[email protected]", "", { "os": "none", "cpu": "arm64" }, "sha512-uPj7MQ6/s+/GOpolavm6BPo+6CbhbKYyZHUDvZ/SmJM7pfDBgdGisFX3bY/CBDMg2ZO4utfhlApkSfZ92yXw7Q=="],
+ "@rollup/rollup-openharmony-arm64": ["@rollup/[email protected]", "", { "os": "none", "cpu": "arm64" }, "sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA=="],
- "@rollup/rollup-win32-arm64-msvc": ["@rollup/[email protected]", "", { "os": "win32", "cpu": "arm64" }, "sha512-Z9MUCrSgIaUeeHAiNkm3cQyst2UhzjPraR3gYYfOjAuZI7tcFRTOD+4cHLPoS/3qinchth+V56vtqz1Tv+6KPA=="],
+ "@rollup/rollup-win32-arm64-msvc": ["@rollup/[email protected]", "", { "os": "win32", "cpu": "arm64" }, "sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA=="],
- "@rollup/rollup-win32-ia32-msvc": ["@rollup/[email protected]", "", { "os": "win32", "cpu": "ia32" }, "sha512-+GnYBmpjldD3XQd+HMejo+0gJGwYIOfFeoBQv32xF/RUIvccUz20/V6Otdv+57NE70D5pa8W/jVGDoGq0oON4A=="],
+ "@rollup/rollup-win32-ia32-msvc": ["@rollup/[email protected]", "", { "os": "win32", "cpu": "ia32" }, "sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g=="],
- "@rollup/rollup-win32-x64-gnu": ["@rollup/[email protected]", "", { "os": "win32", "cpu": "x64" }, "sha512-ApXFKluSB6kDQkAqZOKXBjiaqdF1BlKi+/eqnYe9Ee7U2K3pUDKsIyr8EYm/QDHTJIM+4X+lI0gJc3TTRhd+dA=="],
+ "@rollup/rollup-win32-x64-gnu": ["@rollup/[email protected]", "", { "os": "win32", "cpu": "x64" }, "sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ=="],
- "@rollup/rollup-win32-x64-msvc": ["@rollup/[email protected]", "", { "os": "win32", "cpu": "x64" }, "sha512-ARz+Bs8kY6FtitYM96PqPEVvPXqEZmPZsSkXvyX19YzDqkCaIlhCieLLMI5hxO9SRZ2XtCtm8wxhy0iJ2jxNfw=="],
+ "@rollup/rollup-win32-x64-msvc": ["@rollup/[email protected]", "", { "os": "win32", "cpu": "x64" }, "sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA=="],
"@selderee/plugin-htmlparser2": ["@selderee/[email protected]", "", { "dependencies": { "domhandler": "^5.0.3", "selderee": "^0.11.0" } }, "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ=="],
@@ -976,87 +978,87 @@
"@sindresorhus/merge-streams": ["@sindresorhus/[email protected]", "", {}, "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg=="],
- "@smithy/abort-controller": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-vkzula+IwRvPR6oKQhMYioM3A/oX/lFCZiwuxkQbRhqJS2S4YRY2k7k/SyR2jMf3607HLtbEwlRxi0ndXHMjRg=="],
+ "@smithy/abort-controller": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/types": "^4.6.0", "tslib": "^2.6.2" } }, "sha512-PLUYa+SUKOEZtXFURBu/CNxlsxfaFGxSBPcStL13KpVeVWIfdezWyDqkz7iDLmwnxojXD0s5KzuB5HGHvt4Aeg=="],
- "@smithy/config-resolver": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/node-config-provider": "^4.2.2", "@smithy/types": "^4.5.0", "@smithy/util-config-provider": "^4.1.0", "@smithy/util-middleware": "^4.1.1", "tslib": "^2.6.2" } }, "sha512-IT6MatgBWagLybZl1xQcURXRICvqz1z3APSCAI9IqdvfCkrA7RaQIEfgC6G/KvfxnDfQUDqFV+ZlixcuFznGBQ=="],
+ "@smithy/config-resolver": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.0", "@smithy/types": "^4.6.0", "@smithy/util-config-provider": "^4.2.0", "@smithy/util-middleware": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-9oH+n8AVNiLPK/iK/agOsoWfrKZ3FGP3502tkksd6SRsKMYiu7AFX0YXo6YBADdsAj7C+G/aLKdsafIJHxuCkQ=="],
- "@smithy/core": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/middleware-serde": "^4.1.1", "@smithy/protocol-http": "^5.2.1", "@smithy/types": "^4.5.0", "@smithy/util-base64": "^4.1.0", "@smithy/util-body-length-browser": "^4.1.0", "@smithy/util-middleware": "^4.1.1", "@smithy/util-stream": "^4.3.2", "@smithy/util-utf8": "^4.1.0", "@smithy/uuid": "^1.0.0", "tslib": "^2.6.2" } }, "sha512-zJeAgogZfbwlPGL93y4Z/XNeIN37YCreRUd6YMIRvaq+6RnBK8PPYYIQ85Is/GglPh3kNImD5riDCXbVSDpCiQ=="],
+ "@smithy/core": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/middleware-serde": "^4.2.0", "@smithy/protocol-http": "^5.3.0", "@smithy/types": "^4.6.0", "@smithy/util-base64": "^4.2.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-middleware": "^4.2.0", "@smithy/util-stream": "^4.4.0", "@smithy/util-utf8": "^4.2.0", "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" } }, "sha512-XJ4z5FxvY/t0Dibms/+gLJrI5niRoY0BCmE02fwmPcRYFPI4KI876xaE79YGWIKnEslMbuQPsIEsoU/DXa0DoA=="],
- "@smithy/credential-provider-imds": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/node-config-provider": "^4.2.2", "@smithy/property-provider": "^4.1.1", "@smithy/types": "^4.5.0", "@smithy/url-parser": "^4.1.1", "tslib": "^2.6.2" } }, "sha512-JlYNq8TShnqCLg0h+afqe2wLAwZpuoSgOyzhYvTgbiKBWRov+uUve+vrZEQO6lkdLOWPh7gK5dtb9dS+KGendg=="],
+ "@smithy/credential-provider-imds": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.0", "@smithy/property-provider": "^4.2.0", "@smithy/types": "^4.6.0", "@smithy/url-parser": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-SOhFVvFH4D5HJZytb0bLKxCrSnwcqPiNlrw+S4ZXjMnsC+o9JcUQzbZOEQcA8yv9wJFNhfsUiIUKiEnYL68Big=="],
- "@smithy/eventstream-codec": ["@smithy/[email protected]", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.5.0", "@smithy/util-hex-encoding": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-PwkQw1hZwHTQB6X5hSUWz2OSeuj5Z6enWuAqke7DgWoP3t6vg3ktPpqPz3Erkn6w+tmsl8Oss6nrgyezoea2Iw=="],
+ "@smithy/eventstream-codec": ["@smithy/[email protected]", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.6.0", "@smithy/util-hex-encoding": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-XE7CtKfyxYiNZ5vz7OvyTf1osrdbJfmUy+rbh+NLQmZumMGvY0mT0Cq1qKSfhrvLtRYzMsOBuRpi10dyI0EBPg=="],
- "@smithy/fetch-http-handler": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/protocol-http": "^5.2.1", "@smithy/querystring-builder": "^4.1.1", "@smithy/types": "^4.5.0", "@smithy/util-base64": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-5/3wxKNtV3wO/hk1is+CZUhL8a1yy/U+9u9LKQ9kZTkMsHaQjJhc3stFfiujtMnkITjzWfndGA2f7g9Uh9vKng=="],
+ "@smithy/fetch-http-handler": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/protocol-http": "^5.3.0", "@smithy/querystring-builder": "^4.2.0", "@smithy/types": "^4.6.0", "@smithy/util-base64": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-BG3KSmsx9A//KyIfw+sqNmWFr1YBUr+TwpxFT7yPqAk0yyDh7oSNgzfNH7pS6OC099EGx2ltOULvumCFe8bcgw=="],
- "@smithy/hash-node": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/types": "^4.5.0", "@smithy/util-buffer-from": "^4.1.0", "@smithy/util-utf8": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-H9DIU9WBLhYrvPs9v4sYvnZ1PiAI0oc8CgNQUJ1rpN3pP7QADbTOUjchI2FB764Ub0DstH5xbTqcMJu1pnVqxA=="],
+ "@smithy/hash-node": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/types": "^4.6.0", "@smithy/util-buffer-from": "^4.2.0", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-ugv93gOhZGysTctZh9qdgng8B+xO0cj+zN0qAZ+Sgh7qTQGPOJbMdIuyP89KNfUyfAqFSNh5tMvC+h2uCpmTtA=="],
- "@smithy/invalid-dependency": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-1AqLyFlfrrDkyES8uhINRlJXmHA2FkG+3DY8X+rmLSqmFwk3DJnvhyGzyByPyewh2jbmV+TYQBEfngQax8IFGg=="],
+ "@smithy/invalid-dependency": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/types": "^4.6.0", "tslib": "^2.6.2" } }, "sha512-ZmK5X5fUPAbtvRcUPtk28aqIClVhbfcmfoS4M7UQBTnDdrNxhsrxYVv0ZEl5NaPSyExsPWqL4GsPlRvtlwg+2A=="],
- "@smithy/is-array-buffer": ["@smithy/[email protected]", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-ePTYUOV54wMogio+he4pBybe8fwg4sDvEVDBU8ZlHOZXbXK3/C0XfJgUCu6qAZcawv05ZhZzODGUerFBPsPUDQ=="],
+ "@smithy/is-array-buffer": ["@smithy/[email protected]", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ=="],
- "@smithy/middleware-content-length": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/protocol-http": "^5.2.1", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-9wlfBBgTsRvC2JxLJxv4xDGNBrZuio3AgSl0lSFX7fneW2cGskXTYpFxCdRYD2+5yzmsiTuaAJD1Wp7gWt9y9w=="],
+ "@smithy/middleware-content-length": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/protocol-http": "^5.3.0", "@smithy/types": "^4.6.0", "tslib": "^2.6.2" } }, "sha512-6ZAnwrXFecrA4kIDOcz6aLBhU5ih2is2NdcZtobBDSdSHtE9a+MThB5uqyK4XXesdOCvOcbCm2IGB95birTSOQ=="],
- "@smithy/middleware-endpoint": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/core": "^3.12.0", "@smithy/middleware-serde": "^4.1.1", "@smithy/node-config-provider": "^4.2.2", "@smithy/shared-ini-file-loader": "^4.2.0", "@smithy/types": "^4.5.0", "@smithy/url-parser": "^4.1.1", "@smithy/util-middleware": "^4.1.1", "tslib": "^2.6.2" } }, "sha512-FZ4hzupOmthm8Q8ujYrd0I+/MHwVMuSTdkDtIQE0xVuvJt9pLT6Q+b0p4/t+slDyrpcf+Wj7SN+ZqT5OryaaZg=="],
+ "@smithy/middleware-endpoint": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/core": "^3.14.0", "@smithy/middleware-serde": "^4.2.0", "@smithy/node-config-provider": "^4.3.0", "@smithy/shared-ini-file-loader": "^4.3.0", "@smithy/types": "^4.6.0", "@smithy/url-parser": "^4.2.0", "@smithy/util-middleware": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-jFVjuQeV8TkxaRlcCNg0GFVgg98tscsmIrIwRFeC74TIUyLE3jmY9xgc1WXrPQYRjQNK3aRoaIk6fhFRGOIoGw=="],
- "@smithy/middleware-retry": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/node-config-provider": "^4.2.2", "@smithy/protocol-http": "^5.2.1", "@smithy/service-error-classification": "^4.1.2", "@smithy/smithy-client": "^4.6.4", "@smithy/types": "^4.5.0", "@smithy/util-middleware": "^4.1.1", "@smithy/util-retry": "^4.1.2", "@smithy/uuid": "^1.0.0", "tslib": "^2.6.2" } }, "sha512-qhEX9745fAxZvtLM4bQJAVC98elWjiMO2OiHl1s6p7hUzS4QfZO1gXUYNwEK8m0J6NoCD5W52ggWxbIDHI0XSg=="],
+ "@smithy/middleware-retry": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.0", "@smithy/protocol-http": "^5.3.0", "@smithy/service-error-classification": "^4.2.0", "@smithy/smithy-client": "^4.7.0", "@smithy/types": "^4.6.0", "@smithy/util-middleware": "^4.2.0", "@smithy/util-retry": "^4.2.0", "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" } }, "sha512-yaVBR0vQnOnzex45zZ8ZrPzUnX73eUC8kVFaAAbn04+6V7lPtxn56vZEBBAhgS/eqD6Zm86o6sJs6FuQVoX5qg=="],
- "@smithy/middleware-serde": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/protocol-http": "^5.2.1", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-lh48uQdbCoj619kRouev5XbWhCwRKLmphAif16c4J6JgJ4uXjub1PI6RL38d3BLliUvSso6klyB/LTNpWSNIyg=="],
+ "@smithy/middleware-serde": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/protocol-http": "^5.3.0", "@smithy/types": "^4.6.0", "tslib": "^2.6.2" } }, "sha512-rpTQ7D65/EAbC6VydXlxjvbifTf4IH+sADKg6JmAvhkflJO2NvDeyU9qsWUNBelJiQFcXKejUHWRSdmpJmEmiw=="],
- "@smithy/middleware-stack": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-ygRnniqNcDhHzs6QAPIdia26M7e7z9gpkIMUe/pK0RsrQ7i5MblwxY8078/QCnGq6AmlUUWgljK2HlelsKIb/A=="],
+ "@smithy/middleware-stack": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/types": "^4.6.0", "tslib": "^2.6.2" } }, "sha512-G5CJ//eqRd9OARrQu9MK1H8fNm2sMtqFh6j8/rPozhEL+Dokpvi1Og+aCixTuwDAGZUkJPk6hJT5jchbk/WCyg=="],
- "@smithy/node-config-provider": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/property-provider": "^4.1.1", "@smithy/shared-ini-file-loader": "^4.2.0", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-SYGTKyPvyCfEzIN5rD8q/bYaOPZprYUPD2f5g9M7OjaYupWOoQFYJ5ho+0wvxIRf471i2SR4GoiZ2r94Jq9h6A=="],
+ "@smithy/node-config-provider": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/property-provider": "^4.2.0", "@smithy/shared-ini-file-loader": "^4.3.0", "@smithy/types": "^4.6.0", "tslib": "^2.6.2" } }, "sha512-5QgHNuWdT9j9GwMPPJCKxy2KDxZ3E5l4M3/5TatSZrqYVoEiqQrDfAq8I6KWZw7RZOHtVtCzEPdYz7rHZixwcA=="],
- "@smithy/node-http-handler": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/abort-controller": "^4.1.1", "@smithy/protocol-http": "^5.2.1", "@smithy/querystring-builder": "^4.1.1", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-REyybygHlxo3TJICPF89N2pMQSf+p+tBJqpVe1+77Cfi9HBPReNjTgtZ1Vg73exq24vkqJskKDpfF74reXjxfw=="],
+ "@smithy/node-http-handler": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/abort-controller": "^4.2.0", "@smithy/protocol-http": "^5.3.0", "@smithy/querystring-builder": "^4.2.0", "@smithy/types": "^4.6.0", "tslib": "^2.6.2" } }, "sha512-RHZ/uWCmSNZ8cneoWEVsVwMZBKy/8123hEpm57vgGXA3Irf/Ja4v9TVshHK2ML5/IqzAZn0WhINHOP9xl+Qy6Q=="],
- "@smithy/property-provider": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-gm3ZS7DHxUbzC2wr8MUCsAabyiXY0gaj3ROWnhSx/9sPMc6eYLMM4rX81w1zsMaObj2Lq3PZtNCC1J6lpEY7zg=="],
+ "@smithy/property-provider": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/types": "^4.6.0", "tslib": "^2.6.2" } }, "sha512-rV6wFre0BU6n/tx2Ztn5LdvEdNZ2FasQbPQmDOPfV9QQyDmsCkOAB0osQjotRCQg+nSKFmINhyda0D3AnjSBJw=="],
- "@smithy/protocol-http": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-T8SlkLYCwfT/6m33SIU/JOVGNwoelkrvGjFKDSDtVvAXj/9gOT78JVJEas5a+ETjOu4SVvpCstKgd0PxSu/aHw=="],
+ "@smithy/protocol-http": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/types": "^4.6.0", "tslib": "^2.6.2" } }, "sha512-6POSYlmDnsLKb7r1D3SVm7RaYW6H1vcNcTWGWrF7s9+2noNYvUsm7E4tz5ZQ9HXPmKn6Hb67pBDRIjrT4w/d7Q=="],
- "@smithy/querystring-builder": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/types": "^4.5.0", "@smithy/util-uri-escape": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-J9b55bfimP4z/Jg1gNo+AT84hr90p716/nvxDkPGCD4W70MPms0h8KF50RDRgBGZeL83/u59DWNqJv6tEP/DHA=="],
+ "@smithy/querystring-builder": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/types": "^4.6.0", "@smithy/util-uri-escape": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-Q4oFD0ZmI8yJkiPPeGUITZj++4HHYCW3pYBYfIobUCkYpI6mbkzmG1MAQQ3lJYYWj3iNqfzOenUZu+jqdPQ16A=="],
- "@smithy/querystring-parser": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-63TEp92YFz0oQ7Pj9IuI3IgnprP92LrZtRAkE3c6wLWJxfy/yOPRt39IOKerVr0JS770olzl0kGafXlAXZ1vng=="],
+ "@smithy/querystring-parser": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/types": "^4.6.0", "tslib": "^2.6.2" } }, "sha512-BjATSNNyvVbQxOOlKse0b0pSezTWGMvA87SvoFoFlkRsKXVsN3bEtjCxvsNXJXfnAzlWFPaT9DmhWy1vn0sNEA=="],
- "@smithy/service-error-classification": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/types": "^4.5.0" } }, "sha512-Kqd8wyfmBWHZNppZSMfrQFpc3M9Y/kjyN8n8P4DqJJtuwgK1H914R471HTw7+RL+T7+kI1f1gOnL7Vb5z9+NgQ=="],
+ "@smithy/service-error-classification": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/types": "^4.6.0" } }, "sha512-Ylv1ttUeKatpR0wEOMnHf1hXMktPUMObDClSWl2TpCVT4DwtJhCeighLzSLbgH3jr5pBNM0LDXT5yYxUvZ9WpA=="],
- "@smithy/shared-ini-file-loader": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-OQTfmIEp2LLuWdxa8nEEPhZmiOREO6bcB6pjs0AySf4yiZhl6kMOfqmcwcY8BaBPX+0Tb+tG7/Ia/6mwpoZ7Pw=="],
+ "@smithy/shared-ini-file-loader": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/types": "^4.6.0", "tslib": "^2.6.2" } }, "sha512-VCUPPtNs+rKWlqqntX0CbVvWyjhmX30JCtzO+s5dlzzxrvSfRh5SY0yxnkirvc1c80vdKQttahL71a9EsdolSQ=="],
- "@smithy/signature-v4": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/is-array-buffer": "^4.1.0", "@smithy/protocol-http": "^5.2.1", "@smithy/types": "^4.5.0", "@smithy/util-hex-encoding": "^4.1.0", "@smithy/util-middleware": "^4.1.1", "@smithy/util-uri-escape": "^4.1.0", "@smithy/util-utf8": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-M9rZhWQLjlQVCCR37cSjHfhriGRN+FQ8UfgrYNufv66TJgk+acaggShl3KS5U/ssxivvZLlnj7QH2CUOKlxPyA=="],
+ "@smithy/signature-v4": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.0", "@smithy/protocol-http": "^5.3.0", "@smithy/types": "^4.6.0", "@smithy/util-hex-encoding": "^4.2.0", "@smithy/util-middleware": "^4.2.0", "@smithy/util-uri-escape": "^4.2.0", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-MKNyhXEs99xAZaFhm88h+3/V+tCRDQ+PrDzRqL0xdDpq4gjxcMmf5rBA3YXgqZqMZ/XwemZEurCBQMfxZOWq/g=="],
- "@smithy/smithy-client": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/core": "^3.12.0", "@smithy/middleware-endpoint": "^4.2.4", "@smithy/middleware-stack": "^4.1.1", "@smithy/protocol-http": "^5.2.1", "@smithy/types": "^4.5.0", "@smithy/util-stream": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-qL7O3VDyfzCSN9r+sdbQXGhaHtrfSJL30En6Jboj0I3bobf2g1/T0eP2L4qxqrEW26gWhJ4THI4ElVVLjYyBHg=="],
+ "@smithy/smithy-client": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/core": "^3.14.0", "@smithy/middleware-endpoint": "^4.3.0", "@smithy/middleware-stack": "^4.2.0", "@smithy/protocol-http": "^5.3.0", "@smithy/types": "^4.6.0", "@smithy/util-stream": "^4.4.0", "tslib": "^2.6.2" } }, "sha512-3BDx/aCCPf+kkinYf5QQhdQ9UAGihgOVqI3QO5xQfSaIWvUE4KYLtiGRWsNe1SR7ijXC0QEPqofVp5Sb0zC8xQ=="],
- "@smithy/types": ["@smithy/[email protected]", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-RkUpIOsVlAwUIZXO1dsz8Zm+N72LClFfsNqf173catVlvRZiwPy0x2u0JLEA4byreOPKDZPGjmPDylMoP8ZJRg=="],
+ "@smithy/types": ["@smithy/[email protected]", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-4lI9C8NzRPOv66FaY1LL1O/0v0aLVrq/mXP/keUa9mJOApEeae43LsLd2kZRUJw91gxOQfLIrV3OvqPgWz1YsA=="],
- "@smithy/url-parser": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/querystring-parser": "^4.1.1", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-bx32FUpkhcaKlEoOMbScvc93isaSiRM75pQ5IgIBaMkT7qMlIibpPRONyx/0CvrXHzJLpOn/u6YiDX2hcvs7Dg=="],
+ "@smithy/url-parser": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/querystring-parser": "^4.2.0", "@smithy/types": "^4.6.0", "tslib": "^2.6.2" } }, "sha512-AlBmD6Idav2ugmoAL6UtR6ItS7jU5h5RNqLMZC7QrLCoITA9NzIN3nx9GWi8g4z1pfWh2r9r96SX/jHiNwPJ9A=="],
- "@smithy/util-base64": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/util-buffer-from": "^4.1.0", "@smithy/util-utf8": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-RUGd4wNb8GeW7xk+AY5ghGnIwM96V0l2uzvs/uVHf+tIuVX2WSvynk5CxNoBCsM2rQRSZElAo9rt3G5mJ/gktQ=="],
+ "@smithy/util-base64": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.0", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-+erInz8WDv5KPe7xCsJCp+1WCjSbah9gWcmUXc9NqmhyPx59tf7jqFz+za1tRG1Y5KM1Cy1rWCcGypylFp4mvA=="],
- "@smithy/util-body-length-browser": ["@smithy/[email protected]", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-V2E2Iez+bo6bUMOTENPr6eEmepdY8Hbs+Uc1vkDKgKNA/brTJqOW/ai3JO1BGj9GbCeLqw90pbbH7HFQyFotGQ=="],
+ "@smithy/util-body-length-browser": ["@smithy/[email protected]", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg=="],
- "@smithy/util-body-length-node": ["@smithy/[email protected]", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-BOI5dYjheZdgR9XiEM3HJcEMCXSoqbzu7CzIgYrx0UtmvtC3tC2iDGpJLsSRFffUpy8ymsg2ARMP5fR8mtuUQQ=="],
+ "@smithy/util-body-length-node": ["@smithy/[email protected]", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-U8q1WsSZFjXijlD7a4wsDQOvOwV+72iHSfq1q7VD+V75xP/pdtm0WIGuaFJ3gcADDOKj2MIBn4+zisi140HEnQ=="],
- "@smithy/util-buffer-from": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/is-array-buffer": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-N6yXcjfe/E+xKEccWEKzK6M+crMrlwaCepKja0pNnlSkm6SjAeLKKA++er5Ba0I17gvKfN/ThV+ZOx/CntKTVw=="],
+ "@smithy/util-buffer-from": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew=="],
- "@smithy/util-config-provider": ["@smithy/[email protected]", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-swXz2vMjrP1ZusZWVTB/ai5gK+J8U0BWvP10v9fpcFvg+Xi/87LHvHfst2IgCs1i0v4qFZfGwCmeD/KNCdJZbQ=="],
+ "@smithy/util-config-provider": ["@smithy/[email protected]", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q=="],
- "@smithy/util-defaults-mode-browser": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/property-provider": "^4.1.1", "@smithy/smithy-client": "^4.6.4", "@smithy/types": "^4.5.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-mLDJ1s4eA3vwOGaQOEPlg5LB4LdZUUMpB5UMOMofeGhWqiS7WR7dTpLiNi9zVn+YziKUd3Af5NLfxDs7NJqmIw=="],
+ "@smithy/util-defaults-mode-browser": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/property-provider": "^4.2.0", "@smithy/smithy-client": "^4.7.0", "@smithy/types": "^4.6.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-qzHp7ZDk1Ba4LDwQVCNp90xPGqSu7kmL7y5toBpccuhi3AH7dcVBIT/pUxYcInK4jOy6FikrcTGq5wxcka8UaQ=="],
- "@smithy/util-defaults-mode-node": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/config-resolver": "^4.2.2", "@smithy/credential-provider-imds": "^4.1.2", "@smithy/node-config-provider": "^4.2.2", "@smithy/property-provider": "^4.1.1", "@smithy/smithy-client": "^4.6.4", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-pjX2iMTcOASaSanAd7bu6i3fcMMezr3NTr8Rh64etB0uHRZi+Aw86DoCxPESjY4UTIuA06hhqtTtw95o//imYA=="],
+ "@smithy/util-defaults-mode-node": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/config-resolver": "^4.3.0", "@smithy/credential-provider-imds": "^4.2.0", "@smithy/node-config-provider": "^4.3.0", "@smithy/property-provider": "^4.2.0", "@smithy/smithy-client": "^4.7.0", "@smithy/types": "^4.6.0", "tslib": "^2.6.2" } }, "sha512-FxUHS3WXgx3bTWR6yQHNHHkQHZm/XKIi/CchTnKvBulN6obWpcbzJ6lDToXn+Wp0QlVKd7uYAz2/CTw1j7m+Kg=="],
- "@smithy/util-endpoints": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/node-config-provider": "^4.2.2", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-+AJsaaEGb5ySvf1SKMRrPZdYHRYSzMkCoK16jWnIMpREAnflVspMIDeCVSZJuj+5muZfgGpNpijE3mUNtjv01Q=="],
+ "@smithy/util-endpoints": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.0", "@smithy/types": "^4.6.0", "tslib": "^2.6.2" } }, "sha512-TXeCn22D56vvWr/5xPqALc9oO+LN+QpFjrSM7peG/ckqEPoI3zaKZFp+bFwfmiHhn5MGWPaLCqDOJPPIixk9Wg=="],
- "@smithy/util-hex-encoding": ["@smithy/[email protected]", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-1LcueNN5GYC4tr8mo14yVYbh/Ur8jHhWOxniZXii+1+ePiIbsLZ5fEI0QQGtbRRP5mOhmooos+rLmVASGGoq5w=="],
+ "@smithy/util-hex-encoding": ["@smithy/[email protected]", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw=="],
- "@smithy/util-middleware": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-CGmZ72mL29VMfESz7S6dekqzCh8ZISj3B+w0g1hZFXaOjGTVaSqfAEFAq8EGp8fUL+Q2l8aqNmt8U1tglTikeg=="],
+ "@smithy/util-middleware": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/types": "^4.6.0", "tslib": "^2.6.2" } }, "sha512-u9OOfDa43MjagtJZ8AapJcmimP+K2Z7szXn8xbty4aza+7P1wjFmy2ewjSbhEiYQoW1unTlOAIV165weYAaowA=="],
- "@smithy/util-retry": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/service-error-classification": "^4.1.2", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-NCgr1d0/EdeP6U5PSZ9Uv5SMR5XRRYoVr1kRVtKZxWL3tixEL3UatrPIMFZSKwHlCcp2zPLDvMubVDULRqeunA=="],
+ "@smithy/util-retry": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/service-error-classification": "^4.2.0", "@smithy/types": "^4.6.0", "tslib": "^2.6.2" } }, "sha512-BWSiuGbwRnEE2SFfaAZEX0TqaxtvtSYPM/J73PFVm+A29Fg1HTPiYFb8TmX1DXp4hgcdyJcNQmprfd5foeORsg=="],
- "@smithy/util-stream": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.2.1", "@smithy/node-http-handler": "^4.2.1", "@smithy/types": "^4.5.0", "@smithy/util-base64": "^4.1.0", "@smithy/util-buffer-from": "^4.1.0", "@smithy/util-hex-encoding": "^4.1.0", "@smithy/util-utf8": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-Ka+FA2UCC/Q1dEqUanCdpqwxOFdf5Dg2VXtPtB1qxLcSGh5C1HdzklIt18xL504Wiy9nNUKwDMRTVCbKGoK69g=="],
+ "@smithy/util-stream": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.3.0", "@smithy/node-http-handler": "^4.3.0", "@smithy/types": "^4.6.0", "@smithy/util-base64": "^4.2.0", "@smithy/util-buffer-from": "^4.2.0", "@smithy/util-hex-encoding": "^4.2.0", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-vtO7ktbixEcrVzMRmpQDnw/Ehr9UWjBvSJ9fyAbadKkC4w5Cm/4lMO8cHz8Ysb8uflvQUNRcuux/oNHKPXkffg=="],
- "@smithy/util-uri-escape": ["@smithy/[email protected]", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-b0EFQkq35K5NHUYxU72JuoheM6+pytEVUGlTwiFxWFpmddA+Bpz3LgsPRIpBk8lnPE47yT7AF2Egc3jVnKLuPg=="],
+ "@smithy/util-uri-escape": ["@smithy/[email protected]", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA=="],
- "@smithy/util-utf8": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/util-buffer-from": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-mEu1/UIXAdNYuBcyEPbjScKi/+MQVXNIuY/7Cm5XLIWe319kDrT5SizBE95jqtmEXoDbGoZxKLCMttdZdqTZKQ=="],
+ "@smithy/util-utf8": ["@smithy/[email protected]", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw=="],
- "@smithy/uuid": ["@smithy/[email protected]", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-OlA/yZHh0ekYFnbUkmYBDQPE6fGfdrvgz39ktp8Xf+FA6BfxLejPTMDOG0Nfk5/rDySAz1dRbFf24zaAFYVXlQ=="],
+ "@smithy/uuid": ["@smithy/[email protected]", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw=="],
"@solid-primitives/event-bus": ["@solid-primitives/[email protected]", "", { "dependencies": { "@solid-primitives/utils": "^6.3.2" }, "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-l+n10/51neGcMaP3ypYt21bXfoeWh8IaC8k7fYuY3ww2a8S1Zv2N2a7FF5Qn+waTu86l0V8/nRHjkyqVIZBYwA=="],
@@ -1092,9 +1094,9 @@
"@speed-highlight/core": ["@speed-highlight/[email protected]", "", {}, "sha512-0dxmVj4gxg3Jg879kvFS/msl4s9F3T9UXC1InxgOf7t5NvcPD97u/WTA5vL/IxWHMn7qSxBozqrnnE2wvl1m8g=="],
- "@standard-community/standard-json": ["@standard-community/[email protected]", "", { "peerDependencies": { "@standard-schema/spec": "^1.0.0", "@types/json-schema": "^7.0.15", "@valibot/to-json-schema": "^1.3.0", "arktype": "^2.1.20", "effect": "^3.16.8", "quansync": "^0.2.11", "valibot": "^1.1.0", "zod": "^3.25.0 || ^4.0.0", "zod-to-json-schema": "^3.24.5" }, "optionalPeers": ["@valibot/to-json-schema", "arktype", "effect", "valibot", "zod", "zod-to-json-schema"] }, "sha512-oIdzYrYFe5hUxcAgnNcDuaP59dn1LRPHVv16ZNIONPF2OF9r5O8zGGhBHfrNEmldLcljmDBTnGz1gwmaK0iczQ=="],
+ "@standard-community/standard-json": ["@standard-community/[email protected]", "", { "peerDependencies": { "@standard-schema/spec": "^1.0.0", "@types/json-schema": "^7.0.15", "@valibot/to-json-schema": "^1.3.0", "arktype": "^2.1.20", "effect": "^3.16.8", "quansync": "^0.2.11", "sury": "^10.0.0", "typebox": "^1.0.17", "valibot": "^1.1.0", "zod": "^3.25.0 || ^4.0.0", "zod-to-json-schema": "^3.24.5" }, "optionalPeers": ["@valibot/to-json-schema", "arktype", "effect", "sury", "typebox", "valibot", "zod", "zod-to-json-schema"] }, "sha512-4+ZPorwDRt47i+O7RjyuaxHRK/37QY/LmgxlGrRrSTLYoFatEOzvqIc85GTlM18SFZ5E91C+v0o/M37wZPpUHA=="],
- "@standard-community/standard-openapi": ["@standard-community/[email protected]", "", { "peerDependencies": { "@standard-community/standard-json": "^0.3.1", "@standard-schema/spec": "^1.0.0", "arktype": "^2.1.20", "openapi-types": "^12.1.3", "valibot": "^1.1.0", "zod": "^3.25.0 || ^4.0.0", "zod-openapi": "^4" }, "optionalPeers": ["arktype", "valibot", "zod", "zod-openapi"] }, "sha512-guPU+9Y+Y9JN0gpBQbZMlIYzRSaRyTe7f+g6JCV3d0rrMQ5JFngLQKRyg3MP07xIts8nGim167Y9ePfdlkJp0Q=="],
+ "@standard-community/standard-openapi": ["@standard-community/[email protected]", "", { "peerDependencies": { "@standard-community/standard-json": "^0.3.5", "@standard-schema/spec": "^1.0.0", "arktype": "^2.1.20", "effect": "^3.17.14", "openapi-types": "^12.1.3", "sury": "^10.0.0", "typebox": "^1.0.0", "valibot": "^1.1.0", "zod": "^3.25.0 || ^4.0.0", "zod-openapi": "^4" }, "optionalPeers": ["arktype", "effect", "sury", "typebox", "valibot", "zod", "zod-openapi"] }, "sha512-80ap74p5oy/SU4al5HkPwO5+NbN2wH/FBr6kwaE5ROq7AvcDFaxzUfTazewroNaCotbvdGcvzXb9oEoOIyfC/Q=="],
"@standard-schema/spec": ["@standard-schema/[email protected]", "", {}, "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA=="],
@@ -1132,7 +1134,7 @@
"@tanstack/directive-functions-plugin": ["@tanstack/[email protected]", "", { "dependencies": { "@babel/code-frame": "7.26.2", "@babel/core": "^7.26.8", "@babel/traverse": "^7.26.8", "@babel/types": "^7.26.8", "@tanstack/router-utils": "^1.121.21", "babel-dead-code-elimination": "^1.0.10", "tiny-invariant": "^1.3.3" }, "peerDependencies": { "vite": ">=6.0.0" } }, "sha512-B9z/HbF7gJBaRHieyX7f2uQ4LpLLAVAEutBZipH6w+CYD6RHRJvSVPzECGHF7icFhNWTiJQL2QR6K07s59yzEw=="],
- "@tanstack/router-utils": ["@tanstack/[email protected]", "", { "dependencies": { "@babel/core": "^7.27.4", "@babel/generator": "^7.27.5", "@babel/parser": "^7.27.5", "@babel/preset-typescript": "^7.27.1", "ansis": "^4.1.0", "diff": "^8.0.2", "fast-glob": "^3.3.3", "pathe": "^2.0.3" } }, "sha512-WDnvAi9kO20joLDzlsTvfgXNv+FgQ4G98xAD8r4jKWoTdTTG05DU2sRYimtbdq4Q7E3uVdvyvPdhRy45wan7bw=="],
+ "@tanstack/router-utils": ["@tanstack/[email protected]", "", { "dependencies": { "@babel/core": "^7.27.4", "@babel/generator": "^7.27.5", "@babel/parser": "^7.27.5", "@babel/preset-typescript": "^7.27.1", "ansis": "^4.1.0", "diff": "^8.0.2", "fast-glob": "^3.3.3", "pathe": "^2.0.3" } }, "sha512-uf8mQ3wV58K8TL5XXBoWhkYxmCV7LLWbbf6AvcxdhnCnBNmXBGlY+T8RdsRnXyI2Iyp2HfHaVZ+8H3CEQedXfw=="],
"@tanstack/server-functions-plugin": ["@tanstack/[email protected]", "", { "dependencies": { "@babel/code-frame": "7.26.2", "@babel/core": "^7.26.8", "@babel/plugin-syntax-jsx": "^7.25.9", "@babel/plugin-syntax-typescript": "^7.25.9", "@babel/template": "^7.26.8", "@babel/traverse": "^7.26.8", "@babel/types": "^7.26.8", "@tanstack/directive-functions-plugin": "1.121.21", "babel-dead-code-elimination": "^1.0.9", "tiny-invariant": "^1.3.3" } }, "sha512-a05fzK+jBGacsSAc1vE8an7lpBh4H0PyIEcivtEyHLomgSeElAJxm9E2It/0nYRZ5Lh23m0okbhzJNaYWZpAOg=="],
@@ -1202,7 +1204,7 @@
"@ungap/structured-clone": ["@ungap/[email protected]", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="],
- "@vercel/nft": ["@vercel/[email protected]", "", { "dependencies": { "@mapbox/node-pre-gyp": "^2.0.0", "@rollup/pluginutils": "^5.1.3", "acorn": "^8.6.0", "acorn-import-attributes": "^1.9.5", "async-sema": "^3.1.1", "bindings": "^1.4.0", "estree-walker": "2.0.2", "glob": "^10.4.5", "graceful-fs": "^4.2.9", "node-gyp-build": "^4.2.2", "picomatch": "^4.0.2", "resolve-from": "^5.0.0" }, "bin": { "nft": "out/cli.js" } }, "sha512-2mgJZv4AYBFkD/nJ4QmiX5Ymxi+AisPLPcS/KPXVqniyQNqKXX+wjieAbDXQP3HcogfEbpHoRMs49Cd4pfkk8g=="],
+ "@vercel/nft": ["@vercel/[email protected]", "", { "dependencies": { "@mapbox/node-pre-gyp": "^2.0.0", "@rollup/pluginutils": "^5.1.3", "acorn": "^8.6.0", "acorn-import-attributes": "^1.9.5", "async-sema": "^3.1.1", "bindings": "^1.4.0", "estree-walker": "2.0.2", "glob": "^10.4.5", "graceful-fs": "^4.2.9", "node-gyp-build": "^4.2.2", "picomatch": "^4.0.2", "resolve-from": "^5.0.0" }, "bin": { "nft": "out/cli.js" } }, "sha512-pquXF3XZFg/T3TBor08rUhIGgOhdSilbn7WQLVP/aVSSO+25Rs4H/m3nxNDQ2x3znX7Z3yYjryN8xaLwypcwQg=="],
"@vinxi/listhen": ["@vinxi/[email protected]", "", { "dependencies": { "@parcel/watcher": "^2.3.0", "@parcel/watcher-wasm": "2.3.0", "citty": "^0.1.5", "clipboardy": "^4.0.0", "consola": "^3.2.3", "defu": "^6.1.4", "get-port-please": "^3.1.2", "h3": "^1.10.0", "http-shutdown": "^1.2.2", "jiti": "^1.21.0", "mlly": "^1.5.0", "node-forge": "^1.3.1", "pathe": "^1.1.2", "std-env": "^3.7.0", "ufo": "^1.3.2", "untun": "^0.1.3", "uqr": "^0.1.2" }, "bin": { "listen": "bin/listhen.mjs", "listhen": "bin/listhen.mjs" } }, "sha512-WSN1z931BtasZJlgPp704zJFnQFRg7yzSjkm3MzAWQYe4uXFXlFr1hc5Ac2zae5/HDOz5x1/zDM5Cb54vTCnWw=="],
@@ -1246,7 +1248,7 @@
"ansi-styles": ["[email protected]", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="],
- "ansis": ["[email protected]", "", {}, "sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w=="],
+ "ansis": ["[email protected]", "", {}, "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig=="],
"any-promise": ["[email protected]", "", {}, "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="],
@@ -1294,7 +1296,7 @@
"axobject-query": ["[email protected]", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="],
- "b4a": ["[email protected]", "", { "peerDependencies": { "react-native-b4a": "*" }, "optionalPeers": ["react-native-b4a"] }, "sha512-DyUOdz+E8R6+sruDpQNOaV0y/dBbV6X/8ZkxrDcR0Ifc3BgKlpgG0VAtfOozA0eMtJO5GGe9FsZhueLs00pTww=="],
+ "b4a": ["[email protected]", "", { "peerDependencies": { "react-native-b4a": "*" }, "optionalPeers": ["react-native-b4a"] }, "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q=="],
"babel-dead-code-elimination": ["[email protected]", "", { "dependencies": { "@babel/core": "^7.23.7", "@babel/parser": "^7.23.6", "@babel/traverse": "^7.23.7", "@babel/types": "^7.23.6" } }, "sha512-DV5bdJZTzZ0zn0DC24v3jD7Mnidh6xhKa4GfKCbq3sfW8kaWhDdZjP3i81geA8T33tdYqWKw4D3fVv0CwEgKVA=="],
@@ -1308,7 +1310,7 @@
"bare-events": ["[email protected]", "", {}, "sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA=="],
- "bare-fs": ["[email protected]", "", { "dependencies": { "bare-events": "^2.5.4", "bare-path": "^3.0.0", "bare-stream": "^2.6.4", "bare-url": "^2.2.2", "fast-fifo": "^1.3.2" }, "peerDependencies": { "bare-buffer": "*" }, "optionalPeers": ["bare-buffer"] }, "sha512-Q8yxM1eLhJfuM7KXVP3zjhBvtMJCYRByoTT+wHXjpdMELv0xICFJX+1w4c7csa+WZEOsq4ItJ4RGwvzid6m/dw=="],
+ "bare-fs": ["[email protected]", "", { "dependencies": { "bare-events": "^2.5.4", "bare-path": "^3.0.0", "bare-stream": "^2.6.4", "bare-url": "^2.2.2", "fast-fifo": "^1.3.2" }, "peerDependencies": { "bare-buffer": "*" }, "optionalPeers": ["bare-buffer"] }, "sha512-TCtu93KGLu6/aiGWzMr12TmSRS6nKdfhAnzTQRbXoSWxkbb9eRd53jQ51jG7g1gYjjtto3hbBrrhzg6djcgiKg=="],
"bare-os": ["[email protected]", "", {}, "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A=="],
@@ -1322,7 +1324,7 @@
"base64-js": ["[email protected]", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="],
- "baseline-browser-mapping": ["[email protected]", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-bxxN2M3a4d1CRoQC//IqsR5XrLh0IJ8TCv2x6Y9N0nckNz/rTjZB3//GGscZziZOxmjP55rzxg/ze7usFI9FqQ=="],
+ "baseline-browser-mapping": ["[email protected]", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-uLfgBi+7IBNay8ECBO2mVMGZAc1VgZWEChxm4lv+TobGdG82LnXMjuNGo/BSSZZL4UmkWhxEHP2f5ziLNwGWMA=="],
"bcp-47": ["[email protected]", "", { "dependencies": { "is-alphabetical": "^2.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0" } }, "sha512-9IIS3UPrvIa1Ej+lVDdDwO7zLehjqsaByECw0bu2RRGP73jALm6FYbzI5gWbgHLvNdkvfXB5YrSbocZdOS0c0w=="],
@@ -1354,7 +1356,7 @@
"brotli": ["[email protected]", "", { "dependencies": { "base64-js": "^1.1.2" } }, "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg=="],
- "browserslist": ["[email protected]", "", { "dependencies": { "baseline-browser-mapping": "^2.8.3", "caniuse-lite": "^1.0.30001741", "electron-to-chromium": "^1.5.218", "node-releases": "^2.0.21", "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A=="],
+ "browserslist": ["[email protected]", "", { "dependencies": { "baseline-browser-mapping": "^2.8.9", "caniuse-lite": "^1.0.30001746", "electron-to-chromium": "^1.5.227", "node-releases": "^2.0.21", "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w=="],
"buffer": ["[email protected]", "", { "dependencies": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", "isarray": "^1.0.0" } }, "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg=="],
@@ -1382,7 +1384,7 @@
"camelcase-css": ["[email protected]", "", {}, "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="],
- "caniuse-lite": ["[email protected]", "", {}, "sha512-ywt6i8FzvdgrrrGbr1jZVObnVv6adj+0if2/omv9cmR2oiZs30zL4DIyaptKcbOrBdOIc74QTMoJvSE2QHh5UQ=="],
+ "caniuse-lite": ["[email protected]", "", {}, "sha512-eA7Ys/DGw+pnkWWSE/id29f2IcPHVoE8wxtvE5JdvD2V28VTDPy1yEeo11Guz0sJ4ZeGRcm3uaTcAqK1LXaphA=="],
"ccount": ["[email protected]", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="],
@@ -1498,7 +1500,7 @@
"dax-sh": ["[email protected]", "", { "dependencies": { "@deno/shim-deno": "~0.19.0", "undici-types": "^5.26" } }, "sha512-uULa1sSIHgXKGCqJ/pA0zsnzbHlVnuq7g8O2fkHokWFNwEGIhh5lAJlxZa1POG5En5ba7AU4KcBAvGQWMMf8rg=="],
- "db0": ["[email protected]", "", { "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-xzWNQ6jk/+NtdfLyXEipbX55dmDSeteLFt/ayF+wZUU5bzKgmrDOxmInUTbyVRp46YwnJdkDA1KhB7WIXFofJw=="],
+ "db0": ["[email protected]", "", { "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=="],
"debug": ["[email protected]", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
@@ -1584,7 +1586,7 @@
"ee-first": ["[email protected]", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="],
- "electron-to-chromium": ["[email protected]", "", {}, "sha512-kWAoUu/bwzvnhpdZSIc6KUyvkI1rbRXMT0Eq8pKReyOyaPZcctMli+EgvcN1PAvwVc7Tdo4Fxi2PsLNDU05mdg=="],
+ "electron-to-chromium": ["[email protected]", "", {}, "sha512-nxkiyuqAn4MJ1QbobwqJILiDtu/jk14hEAWaMiJmNPh1Z+jqoFlBFZjdXwLWGeVSeu9hGLg6+2G9yJaW8rBIFA=="],
"emoji-regex": ["[email protected]", "", {}, "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg=="],
@@ -1736,6 +1738,8 @@
"generate-function": ["[email protected]", "", { "dependencies": { "is-property": "^1.0.2" } }, "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ=="],
+ "generator-function": ["[email protected]", "", {}, "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g=="],
+
"gensync": ["[email protected]", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="],
"get-caller-file": ["[email protected]", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="],
@@ -1924,7 +1928,7 @@
"is-fullwidth-code-point": ["[email protected]", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="],
- "is-generator-function": ["[email protected]", "", { "dependencies": { "call-bound": "^1.0.3", "get-proto": "^1.0.0", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ=="],
+ "is-generator-function": ["[email protected]", "", { "dependencies": { "call-bound": "^1.0.4", "generator-function": "^2.0.0", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA=="],
"is-glob": ["[email protected]", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="],
@@ -1964,7 +1968,7 @@
"jackspeak": ["[email protected]", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" } }, "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ=="],
- "jiti": ["[email protected]", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-VXe6RjJkBPj0ohtqaO8vSWP3ZhAKo66fKrFNCll4BTcwljPLz03pCbaNKfzGP5MbrCYcbJ7v0nOYYwUzTEIdXQ=="],
+ "jiti": ["[email protected]", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="],
"jmespath": ["[email protected]", "", {}, "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw=="],
@@ -2210,7 +2214,7 @@
"mimic-response": ["[email protected]", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="],
- "miniflare": ["[email protected]", "", { "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.20250924.0", "ws": "8.18.0", "youch": "4.1.0-beta.10", "zod": "3.22.3" }, "bin": { "miniflare": "bootstrap.js" } }, "sha512-eQuWHklTeYYOil7sPPWo7Wrw86I4oac1kGAYfYcjg5dqMgMAiPUHvUWXMlTvW8ON6q33Ew23AsGDirm+Bea9ig=="],
+ "miniflare": ["[email protected]", "", { "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.20250927.0", "ws": "8.18.0", "youch": "4.1.0-beta.10", "zod": "3.22.3" }, "bin": { "miniflare": "bootstrap.js" } }, "sha512-CP0Q9Ytipid/Q6fJ2gAsVJ3yIMdx1+GoivA+EON68/ZLt66QwUFtpFeqdOUOKDmMbf/NFzjsKsce6h/8KjjYXg=="],
"minimatch": ["[email protected]", "", { "dependencies": { "@isaacs/brace-expansion": "^5.0.0" } }, "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw=="],
@@ -2554,7 +2558,7 @@
"reusify": ["[email protected]", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="],
- "rollup": ["[email protected]", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.52.2", "@rollup/rollup-android-arm64": "4.52.2", "@rollup/rollup-darwin-arm64": "4.52.2", "@rollup/rollup-darwin-x64": "4.52.2", "@rollup/rollup-freebsd-arm64": "4.52.2", "@rollup/rollup-freebsd-x64": "4.52.2", "@rollup/rollup-linux-arm-gnueabihf": "4.52.2", "@rollup/rollup-linux-arm-musleabihf": "4.52.2", "@rollup/rollup-linux-arm64-gnu": "4.52.2", "@rollup/rollup-linux-arm64-musl": "4.52.2", "@rollup/rollup-linux-loong64-gnu": "4.52.2", "@rollup/rollup-linux-ppc64-gnu": "4.52.2", "@rollup/rollup-linux-riscv64-gnu": "4.52.2", "@rollup/rollup-linux-riscv64-musl": "4.52.2", "@rollup/rollup-linux-s390x-gnu": "4.52.2", "@rollup/rollup-linux-x64-gnu": "4.52.2", "@rollup/rollup-linux-x64-musl": "4.52.2", "@rollup/rollup-openharmony-arm64": "4.52.2", "@rollup/rollup-win32-arm64-msvc": "4.52.2", "@rollup/rollup-win32-ia32-msvc": "4.52.2", "@rollup/rollup-win32-x64-gnu": "4.52.2", "@rollup/rollup-win32-x64-msvc": "4.52.2", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-I25/2QgoROE1vYV+NQ1En9T9UFB9Cmfm2CJ83zZOlaDpvz29wGQSZXWKw7MiNXau7wYgB/T9fVIdIuEQ+KbiiA=="],
+ "rollup": ["[email protected]", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.52.3", "@rollup/rollup-android-arm64": "4.52.3", "@rollup/rollup-darwin-arm64": "4.52.3", "@rollup/rollup-darwin-x64": "4.52.3", "@rollup/rollup-freebsd-arm64": "4.52.3", "@rollup/rollup-freebsd-x64": "4.52.3", "@rollup/rollup-linux-arm-gnueabihf": "4.52.3", "@rollup/rollup-linux-arm-musleabihf": "4.52.3", "@rollup/rollup-linux-arm64-gnu": "4.52.3", "@rollup/rollup-linux-arm64-musl": "4.52.3", "@rollup/rollup-linux-loong64-gnu": "4.52.3", "@rollup/rollup-linux-ppc64-gnu": "4.52.3", "@rollup/rollup-linux-riscv64-gnu": "4.52.3", "@rollup/rollup-linux-riscv64-musl": "4.52.3", "@rollup/rollup-linux-s390x-gnu": "4.52.3", "@rollup/rollup-linux-x64-gnu": "4.52.3", "@rollup/rollup-linux-x64-musl": "4.52.3", "@rollup/rollup-openharmony-arm64": "4.52.3", "@rollup/rollup-win32-arm64-msvc": "4.52.3", "@rollup/rollup-win32-ia32-msvc": "4.52.3", "@rollup/rollup-win32-x64-gnu": "4.52.3", "@rollup/rollup-win32-x64-msvc": "4.52.3", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A=="],
"rollup-plugin-visualizer": ["[email protected]", "", { "dependencies": { "open": "^8.0.0", "picomatch": "^4.0.2", "source-map": "^0.7.4", "yargs": "^17.5.1" }, "peerDependencies": { "rolldown": "1.x || ^1.0.0-beta", "rollup": "2.x || 3.x || 4.x" }, "optionalPeers": ["rolldown", "rollup"], "bin": { "rollup-plugin-visualizer": "dist/bin/cli.js" } }, "sha512-ZU41GwrkDcCpVoffviuM9Clwjy5fcUxlz0oMoTXTYsK+tcIFzbdacnrr2n8TXcHxbGKKXtOdjxM2HUS4HjkwIw=="],
@@ -2686,7 +2690,7 @@
"standard-as-callback": ["[email protected]", "", {}, "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A=="],
- "statuses": ["[email protected]", "", {}, "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="],
+ "statuses": ["[email protected]", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="],
"std-env": ["[email protected]", "", {}, "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw=="],
@@ -2714,7 +2718,7 @@
"strip-json-comments": ["[email protected]", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="],
- "strip-literal": ["[email protected]", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA=="],
+ "strip-literal": ["[email protected]", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="],
"stripe": ["[email protected]", "", { "dependencies": { "@types/node": ">=8.1.0", "qs": "^6.11.0" } }, "sha512-3Fs33IzKUby//9kCkCa1uRpinAoTvj6rJgQ2jrBEysoxEvfsclvXdna1amyEYbA2EKkjynuB4+L/kleCCaWTpA=="],
@@ -2844,7 +2848,7 @@
"unifont": ["[email protected]", "", { "dependencies": { "css-tree": "^3.0.0", "ofetch": "^1.4.1", "ohash": "^2.0.0" } }, "sha512-LzR4WUqzH9ILFvjLAUU7dK3Lnou/qd5kD+IakBtBK4S15/+x2y9VX+DcWQv6s551R6W+vzwgVS6tFg3XggGBgg=="],
- "unimport": ["[email protected]", "", { "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.0.0", "tinyglobby": "^0.2.15", "unplugin": "^2.3.10", "unplugin-utils": "^0.3.0" } }, "sha512-g/OLFZR2mEfqbC6NC9b2225eCJGvufxq34mj6kM3OmI5gdSL0qyqtnv+9qmsGpAmnzSl6x0IWZj4W+8j2hLkMA=="],
+ "unimport": ["[email protected]", "", { "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-wMZ2JKUCleCK2zfRHeWcbrUHKXOC3SVBYkyn/wTGzh0THX6sT4hSjuKXxKANN4/WMbT6ZPM4JzcDcnhD2x9Bpg=="],
"unist-util-find-after": ["[email protected]", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ=="],
@@ -2924,7 +2928,7 @@
"vite-plugin-icons-spritesheet": ["[email protected]", "", { "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=="],
- "vite-plugin-solid": ["[email protected]", "", { "dependencies": { "@babel/core": "^7.23.3", "@types/babel__core": "^7.20.4", "babel-preset-solid": "^1.8.4", "merge-anything": "^5.1.7", "solid-refresh": "^0.6.3", "vitefu": "^1.0.4" }, "peerDependencies": { "@testing-library/jest-dom": "^5.16.6 || ^5.17.0 || ^6.*", "solid-js": "^1.7.2", "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" }, "optionalPeers": ["@testing-library/jest-dom"] }, "sha512-hFrCxBfv3B1BmFqnJF4JOCYpjrmi/zwyeKjcomQ0khh8HFyQ8SbuBWQ7zGojfrz6HUOBFrJBNySDi/JgAHytWg=="],
+ "vite-plugin-solid": ["[email protected]", "", { "dependencies": { "@babel/core": "^7.23.3", "@types/babel__core": "^7.20.4", "babel-preset-solid": "^1.8.4", "merge-anything": "^5.1.7", "solid-refresh": "^0.6.3", "vitefu": "^1.0.4" }, "peerDependencies": { "@testing-library/jest-dom": "^5.16.6 || ^5.17.0 || ^6.*", "solid-js": "^1.7.2", "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" }, "optionalPeers": ["@testing-library/jest-dom"] }, "sha512-bTA6p+bspXZsuulSd2y6aTzegF8xGaJYcq1Uyh/mv+W4DQtzCgL9nN6n2fsTaxp/dMk+ZHHKgGndlNeooqHLKw=="],
"vitefu": ["[email protected]", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" }, "optionalPeers": ["vite"] }, "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ=="],
@@ -2952,9 +2956,9 @@
"wordwrap": ["[email protected]", "", {}, "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="],
- "workerd": ["[email protected]", "", { "optionalDependencies": { "@cloudflare/workerd-darwin-64": "1.20250924.0", "@cloudflare/workerd-darwin-arm64": "1.20250924.0", "@cloudflare/workerd-linux-64": "1.20250924.0", "@cloudflare/workerd-linux-arm64": "1.20250924.0", "@cloudflare/workerd-windows-64": "1.20250924.0" }, "bin": { "workerd": "bin/workerd" } }, "sha512-ovO2vwRCcMOlOm3bNwQQrVb8KDcewE/3rjfbZAYSF535BQQDUZ9dE1kyGBYlGx4W5udH3kqmOr+0YqTBLlycyA=="],
+ "workerd": ["[email protected]", "", { "optionalDependencies": { "@cloudflare/workerd-darwin-64": "1.20250927.0", "@cloudflare/workerd-darwin-arm64": "1.20250927.0", "@cloudflare/workerd-linux-64": "1.20250927.0", "@cloudflare/workerd-linux-arm64": "1.20250927.0", "@cloudflare/workerd-windows-64": "1.20250927.0" }, "bin": { "workerd": "bin/workerd" } }, "sha512-6kyAGPGYNvn5mbpCJJ48VebN7QGSrvU/WJXgd4EQz20PyqjJAxHcEGGAJ+0Da0u/ewrN1+6fuMKQ1ALLBPiTWg=="],
- "wrangler": ["[email protected]", "", { "dependencies": { "@cloudflare/kv-asset-handler": "0.4.0", "@cloudflare/unenv-preset": "2.7.4", "blake3-wasm": "2.1.5", "esbuild": "0.25.4", "miniflare": "4.20250924.0", "path-to-regexp": "6.3.0", "unenv": "2.0.0-rc.21", "workerd": "1.20250924.0" }, "optionalDependencies": { "fsevents": "~2.3.2" }, "peerDependencies": { "@cloudflare/workers-types": "^4.20250924.0" }, "optionalPeers": ["@cloudflare/workers-types"], "bin": { "wrangler": "bin/wrangler.js", "wrangler2": "bin/wrangler.js" } }, "sha512-XQEHOW6g1zW2xnBq1dmhDbEiVBbPGh7mX1tQAUMqKETa61XXvxHCJSzVI3is5xuo9HzZ8ITzg4VnhB/91cg9DQ=="],
+ "wrangler": ["[email protected]", "", { "dependencies": { "@cloudflare/kv-asset-handler": "0.4.0", "@cloudflare/unenv-preset": "2.7.5", "blake3-wasm": "2.1.5", "esbuild": "0.25.4", "miniflare": "4.20250927.0", "path-to-regexp": "6.3.0", "unenv": "2.0.0-rc.21", "workerd": "1.20250927.0" }, "optionalDependencies": { "fsevents": "~2.3.2" }, "peerDependencies": { "@cloudflare/workers-types": "^4.20250927.0" }, "optionalPeers": ["@cloudflare/workers-types"], "bin": { "wrangler": "bin/wrangler.js", "wrangler2": "bin/wrangler.js" } }, "sha512-Ltf/0EwyJ9yJeWuCCGHOZDrGGMfZhVECUsJRbeBt1JTV2g7Ebw6FYrXOJhFEEfj1Mr51Cbt3nYI07TMyfxhPwA=="],
"wrap-ansi": ["[email protected]", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="],
@@ -3010,7 +3014,7 @@
"@ai-sdk/gateway/@ai-sdk/provider-utils": ["@ai-sdk/[email protected]", "", { "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-/iP1sKc6UdJgGH98OCly7sWJKv+J9G47PnTjIj40IJMUQKwDrUMyf7zOOfRtPwSuNifYhSoJQ4s1WltI65gJ/g=="],
- "@astrojs/cloudflare/@cloudflare/workers-types": ["@cloudflare/[email protected]", "", {}, "sha512-DfnfgmV7glnvvSx/BzXHG7FlF08YvZTM7P6RcC3+mRmV4E53N2uLWE4HKBCA16yTf5HFqB18X5Cw3DjyyRTvKA=="],
+ "@astrojs/cloudflare/@cloudflare/workers-types": ["@cloudflare/[email protected]", "", {}, "sha512-MXseDjmqL1hIdQCqwHDMG8SE60W4FdwqLsofZjo/KtLH9zFcoQfZkCYyQrdfEJINiSoNJjrup7WR6KsqiFUSsg=="],
"@astrojs/markdown-remark/@astrojs/internal-helpers": ["@astrojs/[email protected]", "", {}, "sha512-l5Pqf6uZu31aG+3Lv8nl/3s4DbUzdlxTWDof4pEpto6GUJNhhCbelVi9dEyurOVyqaelwmS9oSyOWOENSfgo9A=="],
@@ -3068,17 +3072,35 @@
"@modelcontextprotocol/sdk/zod": ["[email protected]", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="],
+ "@octokit/auth-oauth-app/@octokit/types": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/openapi-types": "^26.0.0" } }, "sha512-8o6yDfmoGJUIeR9OfYU0/TUJTnMPG2r68+1yEdUeG2Fdqpj8Qetg0ziKIgcBm0RW/j29H41WP37CYCEhp6GoHQ=="],
+
+ "@octokit/auth-oauth-device/@octokit/types": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/openapi-types": "^26.0.0" } }, "sha512-8o6yDfmoGJUIeR9OfYU0/TUJTnMPG2r68+1yEdUeG2Fdqpj8Qetg0ziKIgcBm0RW/j29H41WP37CYCEhp6GoHQ=="],
+
+ "@octokit/auth-oauth-user/@octokit/types": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/openapi-types": "^26.0.0" } }, "sha512-8o6yDfmoGJUIeR9OfYU0/TUJTnMPG2r68+1yEdUeG2Fdqpj8Qetg0ziKIgcBm0RW/j29H41WP37CYCEhp6GoHQ=="],
+
"@octokit/core/@octokit/types": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/openapi-types": "^26.0.0" } }, "sha512-8o6yDfmoGJUIeR9OfYU0/TUJTnMPG2r68+1yEdUeG2Fdqpj8Qetg0ziKIgcBm0RW/j29H41WP37CYCEhp6GoHQ=="],
+ "@octokit/endpoint/@octokit/types": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/openapi-types": "^26.0.0" } }, "sha512-8o6yDfmoGJUIeR9OfYU0/TUJTnMPG2r68+1yEdUeG2Fdqpj8Qetg0ziKIgcBm0RW/j29H41WP37CYCEhp6GoHQ=="],
+
+ "@octokit/graphql/@octokit/types": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/openapi-types": "^26.0.0" } }, "sha512-8o6yDfmoGJUIeR9OfYU0/TUJTnMPG2r68+1yEdUeG2Fdqpj8Qetg0ziKIgcBm0RW/j29H41WP37CYCEhp6GoHQ=="],
+
+ "@octokit/oauth-methods/@octokit/types": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/openapi-types": "^26.0.0" } }, "sha512-8o6yDfmoGJUIeR9OfYU0/TUJTnMPG2r68+1yEdUeG2Fdqpj8Qetg0ziKIgcBm0RW/j29H41WP37CYCEhp6GoHQ=="],
+
+ "@octokit/plugin-paginate-rest/@octokit/types": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/openapi-types": "^26.0.0" } }, "sha512-8o6yDfmoGJUIeR9OfYU0/TUJTnMPG2r68+1yEdUeG2Fdqpj8Qetg0ziKIgcBm0RW/j29H41WP37CYCEhp6GoHQ=="],
+
"@octokit/plugin-rest-endpoint-methods/@octokit/types": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/openapi-types": "^26.0.0" } }, "sha512-8o6yDfmoGJUIeR9OfYU0/TUJTnMPG2r68+1yEdUeG2Fdqpj8Qetg0ziKIgcBm0RW/j29H41WP37CYCEhp6GoHQ=="],
+ "@octokit/request/@octokit/types": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/openapi-types": "^26.0.0" } }, "sha512-8o6yDfmoGJUIeR9OfYU0/TUJTnMPG2r68+1yEdUeG2Fdqpj8Qetg0ziKIgcBm0RW/j29H41WP37CYCEhp6GoHQ=="],
+
+ "@octokit/request-error/@octokit/types": ["@octokit/[email protected]", "", { "dependencies": { "@octokit/openapi-types": "^26.0.0" } }, "sha512-8o6yDfmoGJUIeR9OfYU0/TUJTnMPG2r68+1yEdUeG2Fdqpj8Qetg0ziKIgcBm0RW/j29H41WP37CYCEhp6GoHQ=="],
+
"@openauthjs/openauth/@standard-schema/spec": ["@standard-schema/[email protected]", "", {}, "sha512-0ifF3BjA1E8SY9C+nUew8RefNOIq0cDlYALPty4rhUm8Rrl6tCM8hBT4bhGhx7I7iXD0uAgt50lgo8dD73ACMw=="],
"@openauthjs/openauth/jose": ["[email protected]", "", {}, "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ=="],
"@opencode-ai/sdk/@hey-api/openapi-ts": ["@hey-api/[email protected]", "", { "dependencies": { "@hey-api/json-schema-ref-parser": "1.0.6", "ansi-colors": "4.1.3", "c12": "2.0.1", "color-support": "1.1.3", "commander": "13.0.0", "handlebars": "4.7.8", "js-yaml": "4.1.0", "open": "10.1.2", "semver": "7.7.2" }, "peerDependencies": { "typescript": "^5.5.3" }, "bin": { "openapi-ts": "bin/index.cjs" } }, "sha512-PoJukNBkUfHOoMDpN33bBETX49TUhy7Hu8Sa0jslOvFndvZ5VjQr4Nl/Dzjb9LG1Lp5HjybyTJMA6a1zYk/q6A=="],
- "@opencode/console-resource/@cloudflare/workers-types": ["@cloudflare/[email protected]", "", {}, "sha512-DfnfgmV7glnvvSx/BzXHG7FlF08YvZTM7P6RcC3+mRmV4E53N2uLWE4HKBCA16yTf5HFqB18X5Cw3DjyyRTvKA=="],
+ "@opencode/console-resource/@cloudflare/workers-types": ["@cloudflare/[email protected]", "", {}, "sha512-MXseDjmqL1hIdQCqwHDMG8SE60W4FdwqLsofZjo/KtLH9zFcoQfZkCYyQrdfEJINiSoNJjrup7WR6KsqiFUSsg=="],
"@opencode/web/@shikijs/transformers": ["@shikijs/[email protected]", "", { "dependencies": { "@shikijs/core": "3.4.2", "@shikijs/types": "3.4.2" } }, "sha512-I5baLVi/ynLEOZoWSAMlACHNnG+yw5HDmse0oe+GW6U1u+ULdEB3UHiVWaHoJSSONV7tlcVxuaMy74sREDkSvg=="],
@@ -3128,8 +3150,6 @@
"@vercel/nft/glob": ["[email protected]", "", { "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-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="],
- "@vinxi/listhen/h3": ["[email protected]", "", { "dependencies": { "cookie-es": "^1.2.2", "crossws": "^0.3.5", "defu": "^6.1.4", "destr": "^2.0.5", "iron-webcrypto": "^1.2.1", "node-mock-http": "^1.0.2", "radix3": "^1.1.2", "ufo": "^1.6.1", "uncrypto": "^0.1.3" } }, "sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ=="],
-
"@vinxi/listhen/jiti": ["[email protected]", "", { "bin": { "jiti": "bin/jiti.js" } }, "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A=="],
"@vinxi/plugin-directives/magicast": ["[email protected]", "", { "dependencies": { "@babel/parser": "^7.22.16", "@babel/types": "^7.22.17", "recast": "^0.23.4" } }, "sha512-6saXbRDA1HMkqbsvHOU6HBjCVgZT460qheRkLhJQHWAbhXoWESI3Kn/dGGXyKs15FFKR85jsUqFx2sMK0wy/5g=="],
@@ -3162,8 +3182,6 @@
"body-parser/iconv-lite": ["[email protected]", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="],
- "bun-types/@types/react": ["@types/[email protected]", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ=="],
-
"compress-commons/is-stream": ["[email protected]", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="],
"condense-newlines/kind-of": ["[email protected]", "", { "dependencies": { "is-buffer": "^1.1.5" } }, "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ=="],
@@ -3210,6 +3228,8 @@
"html-minifier-terser/commander": ["[email protected]", "", {}, "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug=="],
+ "http-errors/statuses": ["[email protected]", "", {}, "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="],
+
"js-beautify/glob": ["[email protected]", "", { "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-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="],
"lazystream/readable-stream": ["[email protected]", "", { "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=="],
@@ -3318,6 +3338,8 @@
"send/mime": ["[email protected]", "", { "bin": { "mime": "cli.js" } }, "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="],
+ "send/statuses": ["[email protected]", "", {}, "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="],
+
"sitemap/@types/node": ["@types/[email protected]", "", {}, "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="],
"sitemap/sax": ["[email protected]", "", {}, "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg=="],
@@ -3524,10 +3546,28 @@
"@mapbox/node-pre-gyp/nopt/abbrev": ["[email protected]", "", {}, "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg=="],
+ "@octokit/auth-oauth-app/@octokit/types/@octokit/openapi-types": ["@octokit/[email protected]", "", {}, "sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA=="],
+
+ "@octokit/auth-oauth-device/@octokit/types/@octokit/openapi-types": ["@octokit/[email protected]", "", {}, "sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA=="],
+
+ "@octokit/auth-oauth-user/@octokit/types/@octokit/openapi-types": ["@octokit/[email protected]", "", {}, "sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA=="],
+
"@octokit/core/@octokit/types/@octokit/openapi-types": ["@octokit/[email protected]", "", {}, "sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA=="],
+ "@octokit/endpoint/@octokit/types/@octokit/openapi-types": ["@octokit/[email protected]", "", {}, "sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA=="],
+
+ "@octokit/graphql/@octokit/types/@octokit/openapi-types": ["@octokit/[email protected]", "", {}, "sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA=="],
+
+ "@octokit/oauth-methods/@octokit/types/@octokit/openapi-types": ["@octokit/[email protected]", "", {}, "sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA=="],
+
+ "@octokit/plugin-paginate-rest/@octokit/types/@octokit/openapi-types": ["@octokit/[email protected]", "", {}, "sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA=="],
+
"@octokit/plugin-rest-endpoint-methods/@octokit/types/@octokit/openapi-types": ["@octokit/[email protected]", "", {}, "sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA=="],
+ "@octokit/request-error/@octokit/types/@octokit/openapi-types": ["@octokit/[email protected]", "", {}, "sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA=="],
+
+ "@octokit/request/@octokit/types/@octokit/openapi-types": ["@octokit/[email protected]", "", {}, "sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA=="],
+
"@opencode/web/@shikijs/transformers/@shikijs/core": ["@shikijs/[email protected]", "", { "dependencies": { "@shikijs/types": "3.4.2", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-AG8vnSi1W2pbgR2B911EfGqtLE9c4hQBYkv/x7Z+Kt0VxhgQKcW7UNDVYsu9YxwV6u+OJrvdJrMq6DNWoBjihQ=="],
"@opencode/web/@shikijs/transformers/@shikijs/types": ["@shikijs/[email protected]", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-zHC1l7L+eQlDXLnxvM9R91Efh2V4+rN3oMVS2swCBssbj2U/FBwybD1eeLaq8yl/iwT+zih8iUbTBCgGZOYlVg=="],
@@ -3564,8 +3604,6 @@
"@vercel/nft/glob/path-scurry": ["[email protected]", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="],
- "@vinxi/listhen/h3/cookie-es": ["[email protected]", "", {}, "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg=="],
-
"ansi-align/string-width/emoji-regex": ["[email protected]", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="],
"ansi-align/string-width/strip-ansi": ["[email protected]", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
@@ -3576,6 +3614,8 @@
"archiver-utils/glob/path-scurry": ["[email protected]", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="],
+ "bl/buffer/ieee754": ["[email protected]", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="],
+
"cross-spawn/which/isexe": ["[email protected]", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="],
"drizzle-kit/esbuild/@esbuild/aix-ppc64": ["@esbuild/[email protected]", "", { "os": "aix", "cpu": "ppc64" }, "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA=="],
@@ -3654,7 +3694,7 @@
"local-pkg/pkg-types/pathe": ["[email protected]", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="],
- "nitropack/c12/dotenv": ["[email protected]", "", {}, "sha512-Sf2LSQP+bOlhKWWyhFsn0UsfdK/kCWRv1iuA2gXAwt3dyNabr6QSj00I2V10pidqz69soatm9ZwZvpQMTIOd5Q=="],
+ "nitropack/c12/dotenv": ["[email protected]", "", {}, "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w=="],
"nitropack/c12/giget": ["[email protected]", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.0", "defu": "^6.1.4", "node-fetch-native": "^1.6.6", "nypm": "^0.6.0", "pathe": "^2.0.3" }, "bin": { "giget": "dist/cli.mjs" } }, "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA=="],
diff --git a/package.json b/package.json
index 5d6e32a3b..e1116503a 100644
--- a/package.json
+++ b/package.json
@@ -18,6 +18,7 @@
"catalog": {
"@types/bun": "1.2.21",
"@hono/zod-validator": "0.4.2",
+ "@kobalte/core": "0.13.11",
"@types/node": "22.13.9",
"@tsconfig/node22": "22.0.2",
"ai": "5.0.8",
diff --git a/packages/app/package.json b/packages/app/package.json
index 8a0fc8075..cea89b570 100644
--- a/packages/app/package.json
+++ b/packages/app/package.json
@@ -21,7 +21,7 @@
"vite-plugin-solid": "^2.11.6"
},
"dependencies": {
- "@kobalte/core": "0.13.11",
+ "@kobalte/core": "catalog:",
"@opencode-ai/sdk": "workspace:*",
"@shikijs/transformers": "3.9.2",
"@solid-primitives/event-bus": "1.1.2",
diff --git a/packages/console/app/package.json b/packages/console/app/package.json
index 18a2f5e23..6146a4f4a 100644
--- a/packages/console/app/package.json
+++ b/packages/console/app/package.json
@@ -11,6 +11,7 @@
},
"dependencies": {
"@ibm/plex": "6.4.1",
+ "@kobalte/core": "catalog:",
"@jsx-email/render": "1.1.1",
"@openauthjs/openauth": "0.0.0-20250322224806",
"@opencode/console-core": "workspace:*",
diff --git a/packages/console/app/public/favicon-zen.svg b/packages/console/app/public/favicon-zen.svg
new file mode 100644
index 000000000..84aeff32f
--- /dev/null
+++ b/packages/console/app/public/favicon-zen.svg
@@ -0,0 +1,23 @@
+<svg width="400" height="400" viewBox="0 0 400 400" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect width="400" height="400" fill="#FDFCFC"/>
+<path d="M96 122.001V70.001H148V122.001H96Z" fill="#17181C"/>
+<path d="M148.004 122.001V70.001H200.004V122.001H148.004Z" fill="#17181C"/>
+<path d="M200.008 122.001V70.001H252.008V122.001H200.008Z" fill="#17181C"/>
+<path d="M251.996 122.001V70.001H303.996V122.001H251.996Z" fill="#17181C"/>
+<path d="M251.996 173.988V121.988H303.996V173.988H251.996Z" fill="#17181C"/>
+<path d="M96 225.998V173.998H148V225.998H96Z" fill="#CFCECD"/>
+<rect width="52" height="52" transform="translate(148.004 173.998)" fill="#17181C"/>
+<path d="M148.004 225.998V173.998H200.004V225.998H148.004Z" fill="#17181C" fill-opacity="0.1"/>
+<path d="M200.008 225.998V173.998H252.008V225.998H200.008Z" fill="#17181C"/>
+<path d="M252.016 225.998V173.998H304.016V225.998H252.016Z" fill="#CFCECD"/>
+<rect width="52" height="52" transform="translate(96 226.002)" fill="#17181C"/>
+<path d="M96 278.002V226.002H148V278.002H96Z" fill="#17181C" fill-opacity="0.1"/>
+<rect width="52" height="52" transform="translate(148.004 226.002)" fill="white"/>
+<path d="M148.004 278.002V226.002H200.004V278.002H148.004Z" fill="#CFCECD"/>
+<path d="M200.008 278.002V226.002H252.008V278.002H200.008Z" fill="#CFCECD"/>
+<path d="M252.016 278.002V226.002H304.016V278.002H252.016Z" fill="#CFCECD"/>
+<path d="M96 330.012V278.012H148V330.012H96Z" fill="#17181C"/>
+<path d="M148.004 330.012V278.012H200.004V330.012H148.004Z" fill="#17181C"/>
+<path d="M200.008 329.99V277.99H252.008V329.99H200.008Z" fill="#17181C"/>
+<path d="M251.996 330.012V278.012H303.996V330.012H251.996Z" fill="#17181C"/>
+</svg>
diff --git a/packages/console/app/public/favicon.svg b/packages/console/app/public/favicon.svg
index 3c81bbdb4..d36e41f94 100644
--- a/packages/console/app/public/favicon.svg
+++ b/packages/console/app/public/favicon.svg
@@ -1,5 +1,5 @@
-<svg width="600" height="600" viewBox="0 0 600 600" fill="none" xmlns="http://www.w3.org/2000/svg">
-<rect width="600" height="600" fill="black"/>
-<path fill-rule="evenodd" clip-rule="evenodd" d="M115 180H300V420H115V180ZM253.75 229.044H161.25V370.405H253.75V229.044Z" fill="white"/>
-<path d="M346.25 180H485V229.044H392.5V370.405H485V419.449H346.25V180Z" fill="white"/>
+<svg width="400" height="400" viewBox="0 0 400 400" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect width="400" height="400" fill="#0E0E0E"/>
+<path d="M252 278H148V174H252V278Z" fill="#6A6565"/>
+<path d="M252 122H148V278H252V122ZM304 330H96V70H304V330Z" fill="white"/>
</svg>
diff --git a/packages/console/app/public/social-share-zen.png b/packages/console/app/public/social-share-zen.png
new file mode 100644
index 000000000..33e941441
--- /dev/null
+++ b/packages/console/app/public/social-share-zen.png
Binary files differ
diff --git a/packages/console/app/public/social-share.png b/packages/console/app/public/social-share.png
index 97f67994d..92224f54c 100644
--- a/packages/console/app/public/social-share.png
+++ b/packages/console/app/public/social-share.png
Binary files differ
diff --git a/packages/console/app/src/asset/lander/avatar-adam.png b/packages/console/app/src/asset/lander/avatar-adam.png
new file mode 100644
index 000000000..d94a0a9a4
--- /dev/null
+++ b/packages/console/app/src/asset/lander/avatar-adam.png
Binary files differ
diff --git a/packages/console/app/src/asset/lander/avatar-david.png b/packages/console/app/src/asset/lander/avatar-david.png
new file mode 100644
index 000000000..2e65272e3
--- /dev/null
+++ b/packages/console/app/src/asset/lander/avatar-david.png
Binary files differ
diff --git a/packages/console/app/src/asset/lander/avatar-dax.png b/packages/console/app/src/asset/lander/avatar-dax.png
new file mode 100644
index 000000000..0ee8feace
--- /dev/null
+++ b/packages/console/app/src/asset/lander/avatar-dax.png
Binary files differ
diff --git a/packages/console/app/src/asset/lander/avatar-frank.png b/packages/console/app/src/asset/lander/avatar-frank.png
new file mode 100644
index 000000000..5e8f7715f
--- /dev/null
+++ b/packages/console/app/src/asset/lander/avatar-frank.png
Binary files differ
diff --git a/packages/console/app/src/asset/lander/avatar-jay.png b/packages/console/app/src/asset/lander/avatar-jay.png
new file mode 100644
index 000000000..2f74ca8dc
--- /dev/null
+++ b/packages/console/app/src/asset/lander/avatar-jay.png
Binary files differ
diff --git a/packages/console/app/src/asset/lander/check.svg b/packages/console/app/src/asset/lander/check.svg
index 22de6f2a8..0ac7759ea 100644
--- a/packages/console/app/src/asset/lander/check.svg
+++ b/packages/console/app/src/asset/lander/check.svg
@@ -1,2 +1,3 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M9 16.17L5.53 12.7a.996.996 0 1 0-1.41 1.41l4.18 4.18c.39.39 1.02.39 1.41 0L20.29 7.71a.996.996 0 1 0-1.41-1.41z"/></svg>
-
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M6 14.3581L10.0541 17.7027L18 7" stroke="#8E8B8B" stroke-width="1.5" stroke-linecap="square"/>
+</svg>
diff --git a/packages/console/app/src/asset/lander/copy.svg b/packages/console/app/src/asset/lander/copy.svg
index f1baac30a..e2263279e 100644
--- a/packages/console/app/src/asset/lander/copy.svg
+++ b/packages/console/app/src/asset/lander/copy.svg
@@ -1,2 +1,3 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 512 512"><rect width="336" height="336" x="128" y="128" fill="none" stroke="currentColor" stroke-linejoin="round" stroke-width="32" rx="57" ry="57"/><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32" d="m383.5 128l.5-24a56.16 56.16 0 0 0-56-56H112a64.19 64.19 0 0 0-64 64v216a56.16 56.16 0 0 0 56 56h24"/></svg>
-
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M8.75 8.75V2.75H21.25V15.25H15.25M15.25 8.75H2.75V21.25H15.25V8.75Z" stroke="#8E8B8B" stroke-width="1.5" stroke-linecap="square"/>
+</svg>
diff --git a/packages/console/app/src/asset/lander/dock.png b/packages/console/app/src/asset/lander/dock.png
new file mode 100644
index 000000000..c9087d461
--- /dev/null
+++ b/packages/console/app/src/asset/lander/dock.png
Binary files differ
diff --git a/packages/console/app/src/asset/lander/opencode-comparison-min.mp4 b/packages/console/app/src/asset/lander/opencode-comparison-min.mp4
new file mode 100644
index 000000000..3cfa15b36
--- /dev/null
+++ b/packages/console/app/src/asset/lander/opencode-comparison-min.mp4
Binary files differ
diff --git a/packages/console/app/src/asset/lander/opencode-comparison-poster.png b/packages/console/app/src/asset/lander/opencode-comparison-poster.png
new file mode 100644
index 000000000..4542a1c86
--- /dev/null
+++ b/packages/console/app/src/asset/lander/opencode-comparison-poster.png
Binary files differ
diff --git a/packages/console/app/src/asset/lander/opencode-min.mp4 b/packages/console/app/src/asset/lander/opencode-min.mp4
new file mode 100644
index 000000000..47468bedf
--- /dev/null
+++ b/packages/console/app/src/asset/lander/opencode-min.mp4
Binary files differ
diff --git a/packages/console/app/src/asset/lander/opencode-poster.png b/packages/console/app/src/asset/lander/opencode-poster.png
new file mode 100644
index 000000000..4542a1c86
--- /dev/null
+++ b/packages/console/app/src/asset/lander/opencode-poster.png
Binary files differ
diff --git a/packages/console/app/src/asset/lander/screenshot-github.png b/packages/console/app/src/asset/lander/screenshot-github.png
index fda74e641..a421598ee 100644
--- a/packages/console/app/src/asset/lander/screenshot-github.png
+++ b/packages/console/app/src/asset/lander/screenshot-github.png
Binary files differ
diff --git a/packages/console/app/src/asset/lander/screenshot-splash.png b/packages/console/app/src/asset/lander/screenshot-splash.png
index e900673ef..98e9b477c 100644
--- a/packages/console/app/src/asset/lander/screenshot-splash.png
+++ b/packages/console/app/src/asset/lander/screenshot-splash.png
Binary files differ
diff --git a/packages/console/app/src/asset/lander/screenshot-vscode.png b/packages/console/app/src/asset/lander/screenshot-vscode.png
index b8966a6b8..4297948e5 100644
--- a/packages/console/app/src/asset/lander/screenshot-vscode.png
+++ b/packages/console/app/src/asset/lander/screenshot-vscode.png
Binary files differ
diff --git a/packages/console/app/src/asset/lander/screenshot.png b/packages/console/app/src/asset/lander/screenshot.png
index feb617585..26975bc89 100644
--- a/packages/console/app/src/asset/lander/screenshot.png
+++ b/packages/console/app/src/asset/lander/screenshot.png
Binary files differ
diff --git a/packages/console/app/src/asset/logo-ornate-dark.svg b/packages/console/app/src/asset/logo-ornate-dark.svg
index 2efda934d..a15827324 100644
--- a/packages/console/app/src/asset/logo-ornate-dark.svg
+++ b/packages/console/app/src/asset/logo-ornate-dark.svg
@@ -1,19 +1,18 @@
-<svg width="289" height="50" viewBox="0 0 289 50" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M8.5 16.5H24.5V33H8.5V16.5Z" fill="white" fill-opacity="0.2"/>
-<path d="M48.5 16.5H64.5V33H48.5V16.5Z" fill="white" fill-opacity="0.2"/>
-<path d="M120.5 16.5H136.5V33H120.5V16.5Z" fill="white" fill-opacity="0.2"/>
-<path d="M160.5 16.5H176.5V33H160.5V16.5Z" fill="white" fill-opacity="0.2"/>
-<path d="M192.5 16.5H208.5V33H192.5V16.5Z" fill="white" fill-opacity="0.2"/>
-<path d="M232.5 16.5H248.5V33H232.5V16.5Z" fill="white" fill-opacity="0.2"/>
-<path d="M264.5 0H288.5V8.5H272.5V16.5H288.5V25H272.5V33H288.5V41.5H264.5V0Z" fill="white" fill-opacity="0.95"/>
-<path d="M248.5 0H224.5V41.5H248.5V33H232.5V8.5H248.5V0Z" fill="white" fill-opacity="0.95"/>
-<path d="M256.5 8.5H248.5V33H256.5V8.5Z" fill="white" fill-opacity="0.95"/>
-<path fill-rule="evenodd" clip-rule="evenodd" d="M184.5 0H216.5V41.5H184.5V0ZM208.5 8.5H192.5V33H208.5V8.5Z" fill="white" fill-opacity="0.95"/>
-<path d="M144.5 8.5H136.5V41.5H144.5V8.5Z" fill="white" fill-opacity="0.5"/>
-<path d="M136.5 0H112.5V41.5H120.5V8.5H136.5V0Z" fill="white" fill-opacity="0.5"/>
-<path d="M80.5 0H104.5V8.5H88.5V16.5H104.5V25H88.5V33H104.5V41.5H80.5V0Z" fill="white" fill-opacity="0.5"/>
-<path fill-rule="evenodd" clip-rule="evenodd" d="M40.5 0H72.5V41.5H48.5V49.5H40.5V0ZM64.5 8.5H48.5V33H64.5V8.5Z" fill="white" fill-opacity="0.5"/>
-<path fill-rule="evenodd" clip-rule="evenodd" d="M0.5 0H32.5V41.5955H0.5V0ZM24.5 8.5H8.5V33H24.5V8.5Z" fill="white" fill-opacity="0.5"/>
-<path d="M152.5 0H176.5V8.5H160.5V33H176.5V41.5H152.5V0Z" fill="white" fill-opacity="0.95"/>
+<svg width="234" height="42" viewBox="0 0 234 42" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M18 30H6V18H18V30Z" fill="#4B4646"/>
+<path d="M18 12H6V30H18V12ZM24 36H0V6H24V36Z" fill="#B7B1B1"/>
+<path d="M48 30H36V18H48V30Z" fill="#4B4646"/>
+<path d="M36 30H48V12H36V30ZM54 36H36V42H30V6H54V36Z" fill="#B7B1B1"/>
+<path d="M84 24V30H66V24H84Z" fill="#4B4646"/>
+<path d="M84 24H66V30H84V36H60V6H84V24ZM66 18H78V12H66V18Z" fill="#B7B1B1"/>
+<path d="M108 36H96V18H108V36Z" fill="#4B4646"/>
+<path d="M108 12H96V36H90V6H108V12ZM114 36H108V12H114V36Z" fill="#B7B1B1"/>
+<path d="M144 30H126V18H144V30Z" fill="#4B4646"/>
+<path d="M144 12H126V30H144V36H120V6H144V12Z" fill="#F1ECEC"/>
+<path d="M168 30H156V18H168V30Z" fill="#4B4646"/>
+<path d="M168 12H156V30H168V12ZM174 36H150V6H174V36Z" fill="#F1ECEC"/>
+<path d="M198 30H186V18H198V30Z" fill="#4B4646"/>
+<path d="M198 12H186V30H198V12ZM204 36H180V6H198V0H204V36Z" fill="#F1ECEC"/>
+<path d="M234 24V30H216V24H234Z" fill="#4B4646"/>
+<path d="M216 12V18H228V12H216ZM234 24H216V30H234V36H210V6H234V24Z" fill="#F1ECEC"/>
</svg>
-
diff --git a/packages/console/app/src/asset/logo-ornate-light.svg b/packages/console/app/src/asset/logo-ornate-light.svg
index 789223bc4..2a856dcce 100644
--- a/packages/console/app/src/asset/logo-ornate-light.svg
+++ b/packages/console/app/src/asset/logo-ornate-light.svg
@@ -1,18 +1,18 @@
-<svg width="288" height="50" viewBox="0 0 288 50" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M8 16.5H24V33H8V16.5Z" fill="black" fill-opacity="0.15"/>
-<path d="M48 16.5H64V33H48V16.5Z" fill="black" fill-opacity="0.15"/>
-<path d="M120 16.5H136V33H120V16.5Z" fill="black" fill-opacity="0.15"/>
-<path d="M160 16.5H176V33H160V16.5Z" fill="black" fill-opacity="0.15"/>
-<path d="M192 16.5H208V33H192V16.5Z" fill="black" fill-opacity="0.15"/>
-<path d="M232 16.5H248V33H232V16.5Z" fill="black" fill-opacity="0.15"/>
-<path d="M264 0H288V8.5H272V16.5H288V25H272V33H288V41.5H264V0Z" fill="black" fill-opacity="0.95"/>
-<path d="M248 0H224V41.5H248V33H232V8.5H248V0Z" fill="black" fill-opacity="0.95"/>
-<path d="M256 8.5H248V33H256V8.5Z" fill="black" fill-opacity="0.95"/>
-<path fill-rule="evenodd" clip-rule="evenodd" d="M184 0H216V41.5H184V0ZM208 8.5H192V33H208V8.5Z" fill="black" fill-opacity="0.95"/>
-<path d="M144 8.5H136V41.5H144V8.5Z" fill="black" fill-opacity="0.55"/>
-<path d="M136 0H112V41.5H120V8.5H136V0Z" fill="black" fill-opacity="0.55"/>
-<path d="M80 0H104V8.5H88V16.5H104V25H88V33H104V41.5H80V0Z" fill="black" fill-opacity="0.55"/>
-<path fill-rule="evenodd" clip-rule="evenodd" d="M40 0H72V41.5H48V49.5H40V0ZM64 8.5H48V33H64V8.5Z" fill="black" fill-opacity="0.55"/>
-<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H32V41.5955H0V0ZM24 8.5H8V33H24V8.5Z" fill="black" fill-opacity="0.55"/>
-<path d="M152 0H176V8.5H160V33H176V41.5H152V0Z" fill="black" fill-opacity="0.95"/>
+<svg width="234" height="42" viewBox="0 0 234 42" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M18 30H6V18H18V30Z" fill="#CFCECD"/>
+<path d="M18 12H6V30H18V12ZM24 36H0V6H24V36Z" fill="#656363"/>
+<path d="M48 30H36V18H48V30Z" fill="#CFCECD"/>
+<path d="M36 30H48V12H36V30ZM54 36H36V42H30V6H54V36Z" fill="#656363"/>
+<path d="M84 24V30H66V24H84Z" fill="#CFCECD"/>
+<path d="M84 24H66V30H84V36H60V6H84V24ZM66 18H78V12H66V18Z" fill="#656363"/>
+<path d="M108 36H96V18H108V36Z" fill="#CFCECD"/>
+<path d="M108 12H96V36H90V6H108V12ZM114 36H108V12H114V36Z" fill="#656363"/>
+<path d="M144 30H126V18H144V30Z" fill="#CFCECD"/>
+<path d="M144 12H126V30H144V36H120V6H144V12Z" fill="#211E1E"/>
+<path d="M168 30H156V18H168V30Z" fill="#CFCECD"/>
+<path d="M168 12H156V30H168V12ZM174 36H150V6H174V36Z" fill="#211E1E"/>
+<path d="M198 30H186V18H198V30Z" fill="#CFCECD"/>
+<path d="M198 12H186V30H198V12ZM204 36H180V6H198V0H204V36Z" fill="#211E1E"/>
+<path d="M234 24V30H216V24H234Z" fill="#CFCECD"/>
+<path d="M216 12V18H228V12H216ZM234 24H216V30H234V36H210V6H234V24Z" fill="#211E1E"/>
</svg>
diff --git a/packages/console/app/src/asset/logo.svg b/packages/console/app/src/asset/logo.svg
index cbfcccf51..2a856dcce 100644
--- a/packages/console/app/src/asset/logo.svg
+++ b/packages/console/app/src/asset/logo.svg
@@ -1,12 +1,18 @@
-<svg width="289" height="50" viewBox="0 0 289 50" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M264.5 0H288.5V8.5H272.5V16.5H288.5V25H272.5V33H288.5V41.5H264.5V0Z" fill="black"/>
-<path d="M248.5 0H224.5V41.5H248.5V33H232.5V8.5H248.5V0Z" fill="black"/>
-<path d="M256.5 8.5H248.5V33H256.5V8.5Z" fill="black"/>
-<path fill-rule="evenodd" clip-rule="evenodd" d="M184.5 0H216.5V41.5H184.5V0ZM208.5 8.5H192.5V33H208.5V8.5Z" fill="black"/>
-<path d="M144.5 8.5H136.5V41.5H144.5V8.5Z" fill="black"/>
-<path d="M136.5 0H112.5V41.5H120.5V8.5H136.5V0Z" fill="black"/>
-<path d="M80.5 0H104.5V8.5H88.5V16.5H104.5V25H88.5V33H104.5V41.5H80.5V0Z" fill="black"/>
-<path fill-rule="evenodd" clip-rule="evenodd" d="M40.5 0H72.5V41.5H48.5V49.5H40.5V0ZM64.5 8.5H48.5V33H64.5V8.5Z" fill="black"/>
-<path fill-rule="evenodd" clip-rule="evenodd" d="M0.5 0H32.5V41.5955H0.5V0ZM24.5 8.5H8.5V33H24.5V8.5Z" fill="black"/>
-<path d="M152.5 0H176.5V8.5H160.5V33H176.5V41.5H152.5V0Z" fill="black"/>
+<svg width="234" height="42" viewBox="0 0 234 42" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M18 30H6V18H18V30Z" fill="#CFCECD"/>
+<path d="M18 12H6V30H18V12ZM24 36H0V6H24V36Z" fill="#656363"/>
+<path d="M48 30H36V18H48V30Z" fill="#CFCECD"/>
+<path d="M36 30H48V12H36V30ZM54 36H36V42H30V6H54V36Z" fill="#656363"/>
+<path d="M84 24V30H66V24H84Z" fill="#CFCECD"/>
+<path d="M84 24H66V30H84V36H60V6H84V24ZM66 18H78V12H66V18Z" fill="#656363"/>
+<path d="M108 36H96V18H108V36Z" fill="#CFCECD"/>
+<path d="M108 12H96V36H90V6H108V12ZM114 36H108V12H114V36Z" fill="#656363"/>
+<path d="M144 30H126V18H144V30Z" fill="#CFCECD"/>
+<path d="M144 12H126V30H144V36H120V6H144V12Z" fill="#211E1E"/>
+<path d="M168 30H156V18H168V30Z" fill="#CFCECD"/>
+<path d="M168 12H156V30H168V12ZM174 36H150V6H174V36Z" fill="#211E1E"/>
+<path d="M198 30H186V18H198V30Z" fill="#CFCECD"/>
+<path d="M198 12H186V30H198V12ZM204 36H180V6H198V0H204V36Z" fill="#211E1E"/>
+<path d="M234 24V30H216V24H234Z" fill="#CFCECD"/>
+<path d="M216 12V18H228V12H216ZM234 24H216V30H234V36H210V6H234V24Z" fill="#211E1E"/>
</svg>
diff --git a/packages/console/app/src/asset/zen-ornate-dark.svg b/packages/console/app/src/asset/zen-ornate-dark.svg
new file mode 100644
index 000000000..cdc4485fc
--- /dev/null
+++ b/packages/console/app/src/asset/zen-ornate-dark.svg
@@ -0,0 +1,8 @@
+<svg width="84" height="30" viewBox="0 0 84 30" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M24 24H6V18H18V12H24V24ZM6 18H0V12H6V18Z" fill="#4B4646"/>
+<path d="M6 24H24V30H0V18H6V24ZM18 18H6V12H18V18ZM24 12H18V6H0V0H24V12Z" fill="#F1ECEC"/>
+<path d="M54 18V24H36V18H54Z" fill="#4B4646"/>
+<path d="M54 18H36V24H54V30H30V0H54V18ZM36 12H48V6H36V12Z" fill="#F1ECEC"/>
+<path d="M78 30H66V12H78V30Z" fill="#4B4646"/>
+<path d="M78 6H66V30H60V0H78V6ZM84 30H78V6H84V30Z" fill="#F1ECEC"/>
+</svg>
diff --git a/packages/console/app/src/asset/zen-ornate-light.svg b/packages/console/app/src/asset/zen-ornate-light.svg
new file mode 100644
index 000000000..2a9ed1342
--- /dev/null
+++ b/packages/console/app/src/asset/zen-ornate-light.svg
@@ -0,0 +1,8 @@
+<svg width="84" height="30" viewBox="0 0 84 30" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M24 24H6V18H18V12H24V24ZM6 18H0V12H6V18Z" fill="#CFCECD"/>
+<path d="M6 24H24V30H0V18H6V24ZM18 18H6V12H18V18ZM24 12H18V6H0V0H24V12Z" fill="#211E1E"/>
+<path d="M54 18V24H36V18H54Z" fill="#CFCECD"/>
+<path d="M54 18H36V24H54V30H30V0H54V18ZM36 12H48V6H36V12Z" fill="#211E1E"/>
+<path d="M78 30H66V12H78V30Z" fill="#CFCECD"/>
+<path d="M78 6H66V30H60V0H78V6ZM84 30H78V6H84V30Z" fill="#211E1E"/>
+</svg>
diff --git a/packages/console/app/src/component/email-signup.tsx b/packages/console/app/src/component/email-signup.tsx
new file mode 100644
index 000000000..fec516a5f
--- /dev/null
+++ b/packages/console/app/src/component/email-signup.tsx
@@ -0,0 +1,49 @@
+import { action, useSubmission } from "@solidjs/router"
+import dock from "../asset/lander/dock.png"
+import { Resource } from "sst"
+import { Show } from "solid-js"
+
+const emailSignup = action(async (formData: FormData) => {
+ "use server"
+ const emailAddress = formData.get("email")!
+ const listId = "8b9bb82c-9d5f-11f0-975f-0df6fd1e4945"
+ const response = await fetch(`https://api.emailoctopus.com/lists/${listId}/contacts`, {
+ method: "PUT",
+ headers: {
+ Authorization: `Bearer ${Resource.EMAILOCTOPUS_API_KEY.value}`,
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ email_address: emailAddress,
+ }),
+ })
+ console.log(response)
+ return true
+})
+
+export function EmailSignup() {
+ const submission = useSubmission(emailSignup)
+ return (
+ <section data-component="email">
+ <div data-slot="dock">
+ <img src={dock} alt="" />
+ </div>
+ <div data-slot="section-title">
+ <h3>OpenCode will be available on desktop soon</h3>
+ <p>Join the waitlist for early access.</p>
+ </div>
+ <form data-slot="form" action={emailSignup} method="post">
+ <input type="email" name="email" placeholder="Email address" required />
+ <button type="submit" disabled={submission.pending}>
+ Subscribe
+ </button>
+ </form>
+ <Show when={submission.result}>
+ <div style="color: #03B000; margin-top: 24px;">Almost done, check your inbox and confirm your email address</div>
+ </Show>
+ <Show when={submission.error}>
+ <div style="color: #FF408F; margin-top: 24px;">{submission.error}</div>
+ </Show>
+ </section>
+ )
+}
diff --git a/packages/console/app/src/component/faq.tsx b/packages/console/app/src/component/faq.tsx
new file mode 100644
index 000000000..2b28fc0fe
--- /dev/null
+++ b/packages/console/app/src/component/faq.tsx
@@ -0,0 +1,33 @@
+import { Collapsible } from "@kobalte/core/collapsible"
+import { ParentProps } from "solid-js"
+
+export function Faq(props: ParentProps & { question: string }) {
+ return (
+ <Collapsible data-slot="faq-item">
+ <Collapsible.Trigger data-slot="faq-question">
+ <svg
+ data-slot="faq-icon-plus"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ fill="none"
+ xmlns="http://www.w3.org/2000/svg"
+ >
+ <path d="M12.5 11.5H19V12.5H12.5V19H11.5V12.5H5V11.5H11.5V5H12.5V11.5Z" fill="#6D717D" />
+ </svg>
+ <svg
+ data-slot="faq-icon-minus"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ fill="none"
+ xmlns="http://www.w3.org/2000/svg"
+ >
+ <path d="M5 11.5H19V12.5H5Z" fill="#6D717D" />
+ </svg>
+ <div data-slot="faq-question-text">{props.question}</div>
+ </Collapsible.Trigger>
+ <Collapsible.Content data-slot="faq-answer">{props.children}</Collapsible.Content>
+ </Collapsible>
+ )
+}
diff --git a/packages/console/app/src/component/footer.tsx b/packages/console/app/src/component/footer.tsx
new file mode 100644
index 000000000..f4ff846db
--- /dev/null
+++ b/packages/console/app/src/component/footer.tsx
@@ -0,0 +1,34 @@
+import { A, createAsync } from "@solidjs/router"
+import { createMemo } from "solid-js"
+import { github } from "~/lib/github"
+
+export function Footer() {
+ const githubData = createAsync(() => github())
+ const starCount = createMemo(() =>
+ githubData()?.stars
+ ? new Intl.NumberFormat("en-US", {
+ notation: "compact",
+ compactDisplay: "short",
+ }).format(githubData()!.stars!)
+ : "25K",
+ )
+
+ return (
+ <footer data-component="footer">
+ <div data-slot="cell">
+ <A href="https://github.com/sst/opencode" target="_blank">
+ GitHub <span>[{starCount()}]</span>
+ </A>
+ </div>
+ <div data-slot="cell">
+ <A href="/docs">Docs</A>
+ </div>
+ <div data-slot="cell">
+ <A href="https://opencode.ai/discord">Discord</A>
+ </div>
+ <div data-slot="cell">
+ <A href="https://x/opencode">X</A>
+ </div>
+ </footer>
+ )
+}
diff --git a/packages/console/app/src/component/header.tsx b/packages/console/app/src/component/header.tsx
new file mode 100644
index 000000000..c5447d1c1
--- /dev/null
+++ b/packages/console/app/src/component/header.tsx
@@ -0,0 +1,127 @@
+import logoLight from "../asset/logo-ornate-light.svg"
+import logoDark from "../asset/logo-ornate-dark.svg"
+import { A, createAsync } from "@solidjs/router"
+import { createMemo, Match, Show, Switch } from "solid-js"
+import { createStore } from "solid-js/store"
+import { github } from "~/lib/github"
+
+export function Header(props: { zen?: boolean }) {
+ const githubData = createAsync(() => github())
+ const starCount = createMemo(() =>
+ githubData()?.stars
+ ? new Intl.NumberFormat("en-US", {
+ notation: "compact",
+ compactDisplay: "short",
+ }).format(githubData()?.stars!)
+ : "25K",
+ )
+
+ const [store, setStore] = createStore({
+ mobileMenuOpen: false,
+ })
+
+ return (
+ <section data-component="top">
+ <A href="/">
+ <img data-slot="logo light" src={logoLight} alt="opencode logo light" />
+ <img data-slot="logo dark" src={logoDark} alt="opencode logo dark" />
+ </A>
+ <nav data-component="nav-desktop">
+ <ul>
+ <li>
+ <A href="https://github.com/sst/opencode" target="_blank">
+ GitHub <span>[{starCount()}]</span>
+ </A>
+ </li>
+ <li>
+ <A href="/docs">Docs</A>
+ </li>
+ <li>
+ <Switch>
+ <Match when={props.zen}>
+ <A href="/auth">Login</A>
+ </Match>
+ <Match when={!props.zen}>
+ <A href="/zen">Zen</A>
+ </Match>
+ </Switch>
+ </li>
+ </ul>
+ </nav>
+ <nav data-component="nav-mobile">
+ <button
+ type="button"
+ data-component="nav-mobile-toggle"
+ aria-expanded="false"
+ aria-controls="nav-mobile-menu"
+ class="nav-toggle"
+ onClick={() => setStore("mobileMenuOpen", !store.mobileMenuOpen)}
+ >
+ <span class="sr-only">Open menu</span>
+ <Switch>
+ <Match when={store.mobileMenuOpen}>
+ <svg
+ class="icon icon-close"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ fill="none"
+ aria-hidden="true"
+ xmlns="http://www.w3.org/2000/svg"
+ >
+ <path
+ d="M12.7071 11.9993L18.0104 17.3026L17.3033 18.0097L12 12.7064L6.6967 18.0097L5.98959 17.3026L11.2929 11.9993L5.98959 6.69595L6.6967 5.98885L12 11.2921L17.3033 5.98885L18.0104 6.69595L12.7071 11.9993Z"
+ fill="currentColor"
+ />
+ </svg>
+ </Match>
+ <Match when={!store.mobileMenuOpen}>
+ <svg
+ class="icon icon-hamburger"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ fill="none"
+ aria-hidden="true"
+ xmlns="http://www.w3.org/2000/svg"
+ >
+ <path d="M19 17H5V16H19V17Z" fill="currentColor" />
+ <path d="M19 8H5V7H19V8Z" fill="currentColor" />
+ </svg>
+ </Match>
+ </Switch>
+ </button>
+
+ <Show when={store.mobileMenuOpen}>
+ <div id="nav-mobile-menu" data-component="nav-mobile">
+ <nav data-component="nav-mobile-menu-list">
+ <ul>
+ <li>
+ <A href="/">Home</A>
+ </li>
+ <li>
+ <A href="https://github.com/sst/opencode" target="_blank">
+ GitHub <span>[{starCount()}]</span>
+ </A>
+ </li>
+ <li>
+ <A href="/docs">Docs</A>
+ </li>
+ <li>
+ <Switch>
+ <Match when={props.zen}>
+ <A href="/auth">Login</A>
+ </Match>
+ <Match when={!props.zen}>
+ <A href="/zen">Zen</A>
+ </Match>
+ </Switch>
+ </li>
+ </ul>
+ </nav>
+ </div>
+ </Show>
+ </nav>
+ </section>
+ )
+}
diff --git a/packages/console/app/src/component/icon.tsx b/packages/console/app/src/component/icon.tsx
index a82572e62..fa28316e8 100644
--- a/packages/console/app/src/component/icon.tsx
+++ b/packages/console/app/src/component/icon.tsx
@@ -34,38 +34,21 @@ export function IconLogo(props: JSX.SvgSVGAttributes<SVGSVGElement>) {
export function IconCopy(props: JSX.SvgSVGAttributes<SVGSVGElement>) {
return (
- <svg {...props} viewBox="0 0 512 512">
- <rect
- width="336"
- height="336"
- x="128"
- y="128"
- fill="none"
- stroke="currentColor"
- stroke-linejoin="round"
- stroke-width="32"
- rx="57"
- ry="57"
- ></rect>
+ <svg {...props} width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
- fill="none"
- stroke="currentColor"
- stroke-linecap="round"
- stroke-linejoin="round"
- stroke-width="32"
- d="m383.5 128l.5-24a56.16 56.16 0 0 0-56-56H112a64.19 64.19 0 0 0-64 64v216a56.16 56.16 0 0 0 56 56h24"
- ></path>
+ d="M8.75 8.75V2.75H21.25V15.25H15.25M15.25 8.75H2.75V21.25H15.25V8.75Z"
+ stroke="#8E8B8B"
+ stroke-width="1.5"
+ stroke-linecap="square"
+ />
</svg>
)
}
export function IconCheck(props: JSX.SvgSVGAttributes<SVGSVGElement>) {
return (
- <svg {...props} viewBox="0 0 24 24">
- <path
- fill="currentColor"
- d="M9 16.17L5.53 12.7a.996.996 0 1 0-1.41 1.41l4.18 4.18c.39.39 1.02.39 1.41 0L20.29 7.71a.996.996 0 1 0-1.41-1.41z"
- ></path>
+ <svg {...props} width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+ <path d="M2.75 15.0938L9 20.25L21.25 3.75" stroke="#03B000" stroke-width="2" stroke-linecap="square" />
</svg>
)
}
diff --git a/packages/console/app/src/component/legal.tsx b/packages/console/app/src/component/legal.tsx
new file mode 100644
index 000000000..d692e4622
--- /dev/null
+++ b/packages/console/app/src/component/legal.tsx
@@ -0,0 +1,9 @@
+export function Legal() {
+ return (
+ <div data-component="legal">
+ <span>
+ ©{new Date().getFullYear()} <a href="https://anoma.ly">Anomaly</a>
+ </span>
+ </div>
+ )
+}
diff --git a/packages/console/app/src/lib/github.ts b/packages/console/app/src/lib/github.ts
new file mode 100644
index 000000000..49b926463
--- /dev/null
+++ b/packages/console/app/src/lib/github.ts
@@ -0,0 +1,28 @@
+import { query } from "@solidjs/router"
+
+export const github = query(async () => {
+ "use server"
+ try {
+ const [meta, releases, contributors] = await Promise.all([
+ fetch("https://api.github.com/repos/sst/opencode").then((res) => res.json()),
+ fetch("https://api.github.com/repos/sst/opencode/releases").then((res) => res.json()),
+ fetch("https://api.github.com/repos/sst/opencode/contributors?per_page=1"),
+ ])
+ const [release] = releases
+ const contributorCount = Number.parseInt(
+ contributors.headers
+ .get("Link")!
+ .match(/&page=(\d+)>; rel="last"/)!
+ .at(1)!,
+ )
+ return {
+ stars: meta.stargazers_count,
+ release: {
+ name: release.name,
+ url: release.html_url,
+ },
+ contributors: contributorCount,
+ }
+ } catch {}
+ return undefined
+}, "github")
diff --git a/packages/console/app/src/routes/index.css b/packages/console/app/src/routes/index.css
index fe95bb7ea..9ded25460 100644
--- a/packages/console/app/src/routes/index.css
+++ b/packages/console/app/src/routes/index.css
@@ -1,32 +1,67 @@
-[data-page="home"] {
- --color-text: hsl(224, 10%, 10%);
- --color-text-secondary: hsl(224, 7%, 46%);
- --color-text-dimmed: hsl(224, 6%, 63%);
- --color-text-inverted: hsl(0, 0%, 100%);
+::selection {
+ background: var(--color-background-interactive);
+ color: var(--color-text-strong);
- --color-border: hsl(224, 6%, 77%);
+ @media (prefers-color-scheme: dark) {
+ background: var(--color-background-interactive);
+ color: var(--color-text-inverted);
+ }
}
-[data-page="home"] {
- @media (prefers-color-scheme: dark) {
- --color-text: hsl(0, 0%, 100%);
- --color-text-secondary: hsl(224, 6%, 66%);
- --color-text-dimmed: hsl(224, 7%, 46%);
- --color-text-inverted: hsl(224, 10%, 10%);
+[data-page="opencode"] {
+ --color-background: hsl(0, 20%, 99%);
+ --color-background-weak: hsl(0, 8%, 97%);
+ --color-background-weak-hover: hsl(0, 8%, 94%);
+ --color-background-strong: hsl(0, 5%, 12%);
+ --color-background-strong-hover: hsl(0, 5%, 18%);
+ --color-background-interactive: hsl(62, 84%, 88%);
+ --color-background-interactive-weaker: hsl(64, 74%, 95%);
+
+ --color-text: hsl(0, 1%, 39%);
+ --color-text-weak: hsl(0, 1%, 60%);
+ --color-text-weaker: hsl(30, 2%, 81%);
+ --color-text-strong: hsl(0, 5%, 12%);
+ --color-text-inverted: hsl(0, 20%, 99%);
+
+ --color-border: hsl(30, 2%, 81%);
+ --color-border-weak: hsl(0, 1%, 85%);
+
+ --color-icon: hsl(0, 1%, 55%);
+}
- --color-border: hsl(224, 6%, 36%);
+[data-page="opencode"] {
+ @media (prefers-color-scheme: dark) {
+ --color-background: hsl(0, 9%, 7%);
+ --color-background-weak: hsl(0, 6%, 10%);
+ --color-background-weak-hover: hsl(0, 6%, 15%);
+ --color-background-strong: hsl(0, 15%, 94%);
+ --color-background-strong-hover: hsl(0, 15%, 97%);
+ --color-background-interactive: hsl(62, 100%, 90%);
+ --color-background-interactive-weaker: hsl(60, 20%, 8%);
+
+ --color-text: hsl(0, 4%, 71%);
+ --color-text-weak: hsl(0, 2%, 49%);
+ --color-text-weaker: hsl(0, 3%, 28%);
+ --color-text-strong: hsl(0, 15%, 94%);
+ --color-text-inverted: hsl(0, 9%, 7%);
+
+ --color-border: hsl(0, 3%, 28%);
+ --color-border-weak: hsl(0, 4%, 23%);
+
+ --color-icon: hsl(10, 3%, 43%);
}
}
-[data-page="home"] {
- --padding: 3rem;
- --vertical-padding: 1.5rem;
+[data-page="opencode"] {
+ background: var(--color-background);
+ --padding: 5rem;
+ --vertical-padding: 4rem;
--heading-font-size: 1.375rem;
+ border-top: 1px solid var(--color-border-weak);
- @media (max-width: 30rem) {
- --padding: 1rem;
- --vertical-padding: 0.75rem;
- --heading-font-size: 1rem;
+ @media (max-width: 60rem) {
+ --padding: 1.5rem;
+ --vertical-padding: 3rem;
}
display: flex;
@@ -34,32 +69,215 @@
flex-direction: column;
font-family: var(--font-mono);
color: var(--color-text);
- padding: calc(var(--padding) + 1rem);
+ padding-bottom: 5rem;
a {
- color: var(--color-text);
+ color: var(--color-text-strong);
text-decoration: underline;
- text-underline-offset: var(--space-0-75);
+ text-underline-offset: var(--space-1);
text-decoration-thickness: 1px;
}
- [data-component="content"] {
+ p {
+ line-height: 200%;
+ }
+
+ @media (max-width: 60rem) {
+ font-size: 15px;
+ }
+
+ [data-component="growth-stats"] {
+ margin-top: 48px;
+ margin-left: 40px;
+ display: flex;
+ gap: 64px !important;
+
+ @media (max-width: 60rem) {
+ gap: 56px !important;
+ }
+
+ @media (max-width: 50rem) {
+ gap: 48px !important;
+ }
+
+ @media (max-width: 40rem) {
+ display: none !important;
+ }
+
+
+ [data-component="growth-stat"] {
+ display: flex;
+ flex-direction: column;
+ gap: 24px;
+ text-align: left;
+ width: 100%;
+
+ span {
+ display: flex;
+ align-items: center;
+ justify-content: left;
+ width: 100%;
+ gap: 10px;
+ font-size: 14px;
+
+ strong {
+ color: var(--color-text-strong);
+ font-weight: 500;
+ }
+
+ figure {
+ font-size: 14px;
+ color: var(--color-text-weak);
+ padding: 0;
+ margin: 0;
+
+ @media (max-width: 70rem) {
+ display: none;
+ }
+ }
+
+ }
+
+
+ [data-component="stat-illustration"] {
+ width: 100%;
+ height: 100%;
+ display: block;
+
+ svg {
+ margin: 0;
+ width: auto;
+ height: auto;
+ display: block;
+ }
+ }
+ }
+ }
+
+
+ input:-webkit-autofill,
+ input:-webkit-autofill:hover,
+ input:-webkit-autofill:focus,
+ input:-webkit-autofill:active {
+ transition: background-color 5000000s ease-in-out 0s;
+ }
+
+ [data-component="container"] {
max-width: 67.5rem;
margin: 0 auto;
- border: 1px solid var(--color-border);
+ border: 1px solid var(--color-border-weak);
+ border-top: none;
+
+ @media (max-width: 65rem) {
+ border: none;
+ }
+ }
+
+ [data-component="content"] {
}
[data-component="top"] {
- padding: calc(var(--padding) * 1.5) var(--padding) var(--padding);
- position: relative;
+ padding: 24px var(--padding);
+ height: 80px;
+ position: sticky;
+ top: 0;
display: flex;
- flex-direction: column;
+ justify-content: space-between;
align-items: center;
- gap: calc(var(--vertical-padding) / 2);
+ background: var(--color-background);
+ border-bottom: 1px solid var(--color-border-weak);
+
+ z-index: 10;
img {
- height: auto;
- width: clamp(200px, 85vw, 552px);
+ height: 34px;
+ width: auto;
+ }
+
+ [data-component="nav-desktop"] {
+ ul {
+ display: flex;
+ justify-content: space-between;
+ gap: 48px;
+ li {
+ display: inline-block;
+ a {
+ text-decoration: none;
+ span {
+ color: var(--color-text-weak);
+ }
+ }
+ a:hover {
+ text-decoration: underline;
+ text-underline-offset: var(--space-1);
+ text-decoration-thickness: 1px;
+ }
+ }
+ }
+
+ @media (max-width: 40rem) {
+ display: none;
+ }
+ }
+
+ [data-component="nav-mobile-toggle"] {
+ border: none;
+ background: none;
+ outline: none;
+ height: 40px;
+ width: 40px;
+ cursor: pointer;
+ }
+
+ [data-component="nav-mobile-toggle"]:hover {
+ background: var(--color-background-weak);
+ }
+
+ [data-component="nav-mobile"] {
+ display: none;
+
+ @media (max-width: 40rem) {
+ display: block;
+
+ [data-component="nav-mobile-icon"] {
+ cursor: pointer;
+ height: 40px;
+ width: 40px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+
+ [data-component="nav-mobile-menu-list"] {
+ position: fixed;
+ background: var(--color-background);
+ top: 80px;
+ left: 0;
+ right: 0;
+ height: 100vh;
+
+ ul {
+ list-style: none;
+ padding: 20px 0;
+
+ li {
+ a {
+ text-decoration: none;
+ padding: 20px;
+ display: block;
+
+ span {
+ color: var(--color-text-weak);
+ }
+ }
+
+ a:hover {
+ background: var(--color-background-weak);
+ }
+ }
+ }
+ }
+ }
}
[data-slot="logo dark"] {
@@ -74,374 +292,690 @@
display: block;
}
}
+ }
- [data-slot="title"] {
- line-height: 1.25;
- font-weight: 500;
- text-align: center;
- font-size: var(--heading-font-size);
- color: var(--color-text-secondary);
- text-transform: uppercase;
- }
+ [data-component="hero"] {
+ display: flex;
+ flex-direction: column;
+ max-width: 100%;
+ padding: calc(var(--vertical-padding)*2) var(--padding);
- [data-slot="login"] {
- position: absolute;
- top: 0;
- right: 0;
- border-width: 0 0 1px 1px;
- border-style: solid;
- border-color: var(--color-border);
- background-color: var(--color-bg);
+ @media (max-width: 30rem) {
+ padding: var(--vertical-padding) var(--padding)
+ }
- @media (max-width: 30rem) {
+ @media (prefers-color-scheme: dark) {
+ [data-slot="zen logo light"] {
display: none;
}
-
- a {
+ [data-slot="zen logo dark"] {
display: block;
- padding: 0.5rem 1rem calc(0.5rem + 4px);
}
}
}
- [data-component="cta"] {
- border-top: 1px solid var(--color-border);
- display: flex;
+ [data-slot="installation"] {
+ width: 100%;
+ max-width: 100%;
+ overflow: hidden;
- & > div + div {
- border-left: 1px solid var(--color-border);
+ @media (max-width: 550px) {
+ width: calc(100vw - 48px);
}
- [data-slot="left"] {
- flex: 0 0 auto;
- text-align: center;
- line-height: 1.4;
- padding: var(--vertical-padding) 2rem;
- text-transform: uppercase;
- font-size: 1.125rem;
-
- @media (max-width: 30rem) {
- font-size: 1rem;
- padding-bottom: calc(var(--vertical-padding) + 4px);
- }
+ }
- @media (max-width: 30rem) {
- padding-left: 0.5rem;
- padding-right: 0.5rem;
+ [data-component="tabs"] {
+ [data-slot="tablist"] {
+ display: flex;
+ gap: 40px;
+ align-items: center;
+ border: 1px solid var(--color-border-weak);
+ border-bottom: none;
+ border-top-left-radius: 6px;
+ border-top-right-radius: 6px;
+ background: var(--color-background-weak);
+ padding: 0 20px;
+
+ @media (max-width: 60rem) {
+ gap: 20px;
+ overflow-x: auto;
+ width: 100%;
}
}
- [data-slot="center"] {
- display: none;
-
- @media (max-width: 30rem) {
- display: block;
- flex: 1;
- text-align: center;
- padding: var(--vertical-padding) 0.5rem;
- border-top: 1px solid var(--color-border);
- border-left: none;
- }
+ [data-slot="tab"] {
+ appearance: none;
+ background: transparent;
+ border: 0;
+ padding: 16px 0;
+ margin: 0;
+ cursor: pointer;
+ color: var(--color-text-weak);
+ line-height: 1;
+ border-bottom: 2px solid transparent;
}
- [data-slot="right"] {
- flex: 1;
- padding: var(--vertical-padding) 1rem;
+ [data-slot="tab"][aria-selected="true"] {
+ color: var(--color-text-strong);
+ border-bottom-color: var(--color-background-strong);
}
- @media (max-width: 50rem) {
- flex-direction: column;
+ [data-slot="tab"]:focus-visible {
+ }
- [data-slot="right"] {
- border-left: none;
- border-top: 1px solid var(--color-border);
- }
+ [data-slot="panels"] {
+ background: var(--color-background-weak);
+ border: 1px solid var(--color-border-weak);
+ border-bottom-left-radius: 6px;
+ border-bottom-right-radius: 6px;
+ padding: 16px;
}
- [data-slot="command"] {
- all: unset;
- display: flex;
- align-items: center;
- justify-content: center;
- cursor: pointer;
- color: var(--color-text-secondary);
- font-size: 1.125rem;
+ [data-slot="panel"] {
+ display: block;
+ margin: 0;
+ overflow: auto;
+ white-space: pre-wrap;
+ transition: opacity 0.18s ease;
+ font-size: 16px;
font-family: var(--font-mono);
- gap: var(--space-2);
width: 100%;
- & > span {
- @media (max-width: 24rem) {
- font-size: 0.875rem;
- }
- @media (max-width: 56rem) {
- [data-slot="protocol"] {
- display: none;
+ button {
+ max-width: 100%;
+ }
+
+ [data-slot="command"] {
+ all: unset;
+ display: flex;
+ max-width: 100%;
+ cursor: pointer;
+ align-items: center;
+ color: var(--color-text);
+ gap: var(--space-1);
+ color: var(--color-text);
+ padding: 8px 16px 8px 8px;
+ border-radius: 4px;
+
+ [data-slot="command-script"] {
+ display: inline-block;
+ max-width: 100%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ vertical-align: middle;
+
+ @media (prefers-color-scheme: dark) {
+ color: var(--color-text-weak);
}
- }
- @media (max-width: 38rem) {
- text-align: center;
- span:first-child {
- display: block;
+
+ @media (max-width: 35rem) {
+ width: calc(100% - 40px) !important;
}
+
+ }
+
+ [data-slot="highlight"] {
+ font-weight: 500;
+ color: var(--color-text-strong);
+ }
+ }
+
+ [data-slot="command"]:hover {
+ background: var(--color-background-weak-hover);
+
+ @media (prefers-color-scheme: dark) {
+ color: var(--color-text-weak);
+ background: var(--color-background-weak-hover);
}
}
}
+ }
- [data-slot="highlight"] {
- color: var(--color-text);
+ [data-slot="hero-copy"] {
+ [data-slot="releases"] {
+ background: none;
+ color: var(--color-text-weak);
+ padding: 0;
+ border: none;
+ font-weight: 400;
+ cursor: pointer;
+ margin-bottom: 14px;
+ border-radius: 0;
+ display: flex;
+ width: fit-content;
+ gap: 12px;
+ text-decoration: none;
+ padding-bottom: 2px;
+ border-bottom: 1px solid transparent;
+ }
+
+ [data-slot="releases"]:hover {
+ background: none;
+ padding-bottom: 2px;
+ border-bottom: 1px solid var(--color-border-weak);
+ }
+
+ strong {
+ font-size: 28px;
+ color: var(--color-text-strong);
font-weight: 500;
+ margin-bottom: 16px;
+
+ @media (max-width: 60rem) {
+ font-size: 22px;
+ }
+
}
- }
- [data-component="features"] {
- border-top: 1px solid var(--color-border);
- padding: var(--padding);
+ p {
+ color: var(--color-text);
+ margin-bottom: 24px;
+ max-width: 82%;
- [data-slot="list"] {
- padding-left: var(--space-4);
- margin: 0;
- list-style: disc;
+ @media (max-width: 50rem) {
+ max-width: 100%;
+ }
+ }
- li {
- margin-bottom: var(--space-4);
- line-height: 1.6;
+ a {
+ background: var(--color-background-strong);
+ padding: 8px 12px 8px 20px;
+ color: var(--color-text-inverted);
+ border: none;
+ border-radius: 4px;
+ font-weight: 500;
+ cursor: pointer;
+ margin-bottom: 80px;
+ display: flex;
+ width: fit-content;
+ gap: 12px;
+ text-decoration: none;
+ }
- strong {
- text-transform: uppercase;
- font-weight: 600;
- }
+ a:hover {
+ background: var(--color-background-strong-hover);
+ }
+ }
+ [data-slot="model-logos"] {
+ display: flex;
+ gap: 24px;
+ margin-bottom: 56px;
- label {
- line-height: 1;
- text-transform: uppercase;
- font-size: 0.75rem;
- letter-spacing: 0.03125rem;
- background: var(--color-border);
- padding: 0.125rem 0.375rem;
- color: var(--color-text-inverted);
- }
+ svg {
+ color: var(--color-background-strong);
+ }
+
+ @media (prefers-color-scheme: dark) {
+ svg {
+ color: var(--color-background-strong);
}
+ }
+ }
- li:last-child {
- margin-bottom: 0;
+ [data-slot="pricing-copy"] {
+ strong {
+ color: var(--color-text-strong);
+ font-weight: 500;
+ }
+
+ p:first-child {
+ margin-bottom: 24px;
+ color: var(--color-text);
+ display: flex;
+ gap: 8px;
+
+ @media (max-width: 40rem) {
+ flex-direction: column;
+ gap: 4px;
}
}
}
- [data-component="install"] {
- border-top: 1px solid var(--color-border);
- display: grid;
- grid-template-columns: 1fr 1fr;
- grid-template-rows: 1fr 1fr;
+ [data-component="video"] {
+ border-top: 1px solid var(--color-border-weak);
- @media (max-width: 40rem) {
- grid-template-columns: 1fr;
- grid-template-rows: auto;
+ video {
+ width: 100%;
+ height: auto;
+ max-width: none;
+ max-height: none;
+ display: block;
}
}
- [data-component="method"] {
- display: flex;
- padding: calc(var(--vertical-padding) / 2) calc(var(--padding) / 2) calc(var(--vertical-padding) / 2 + 0.125rem);
- flex-direction: column;
- text-align: left;
- gap: var(--space-2-5);
+ [data-slot="section-title"] {
+ margin-bottom: 24px;
+ max-width: 100%;
- @media (max-width: 30rem) {
- gap: 0.3125rem;
+ @media (max-width: 30Rem) {
+ margin-bottom: 0;
}
- @media (max-width: 40rem) {
- text-align: left;
+ div {
+ display: flex;
+ gap: 12px;
}
- &:nth-child(2) {
- border-left: 1px solid var(--color-border);
+ span {
+ color: var(--color-icon);
+ line-height: 200%;
+ }
- @media (max-width: 40rem) {
- border-left: none;
- border-top: 1px solid var(--color-border);
- }
+ h3 {
+ font-size: 16px;
+ font-weight: 500;
+ color: var(--color-text-strong);
+ margin-bottom: 12px;
}
- &:nth-child(3) {
- border-top: 1px solid var(--color-border);
+ p {
+ margin-bottom: 12px;
+ color: var(--color-text);
}
- &:nth-child(4) {
- border-top: 1px solid var(--color-border);
- border-left: 1px solid var(--color-border);
+ div > p > strong {
+ font-weight: 500;
+ color: var(--color-text-strong);
+ }
+ }
- @media (max-width: 40rem) {
- border-left: none;
+ [data-component="what"] {
+ border-top: 1px solid var(--color-border-weak);
+ padding: var(--vertical-padding) var(--padding);
+ color: var(--color-text);
+
+ ul {
+ padding: 0;
+ li {
+ list-style: none;
+ margin-bottom: 16px;
+ display: flex;
+ gap: 12px;
+ line-height: 200%;
+
+ span {
+ color: var(--color-icon);
+ }
+ strong {
+ font-weight: 500;
+ color: var(--color-text-strong);
+ margin-right: 12px;
+ }
+ }
+ li:last-child {
+ margin-bottom: 0;
}
}
+ }
- [data-component="title"] {
- letter-spacing: -0.03125rem;
- text-transform: uppercase;
- font-weight: normal;
- font-size: 1rem;
- flex-shrink: 0;
- color: var(--color-text-dimmed);
+ [data-component="growth"] {
+ border-top: 1px solid var(--color-border-weak);
+ padding: var(--vertical-padding) var(--padding);
- @media (max-width: 30rem) {
- font-size: 0.75rem;
+ svg {
+ margin-top: 32px;
+ width: 100%;
+ height: 100%;
+ margin-left: 40px;
+
+ @media (max-width: 60rem) {
+ display: none;
}
}
- [data-slot="button"] {
- all: unset;
- cursor: pointer;
- display: flex;
- align-items: center;
- color: var(--color-text-secondary);
- gap: var(--space-2-5);
- font-size: 1rem;
+ figure {
+ margin-top: 16px;
+ font-size: 13px;
+ margin-left: 40px;
- @media (max-width: 24rem) {
- font-size: 0.875rem;
+ span {
+ color: var(--color-text-strong);
}
- strong {
- color: var(--color-text);
+ @media (max-width: 60rem) {
+ display: none;
+ }
+ }
+ }
+
+ [data-component="privacy"] {
+ border-top: 1px solid var(--color-border-weak);
+ padding: var(--vertical-padding) var(--padding);
+
+ [data-slot="privacy-title"] {
+ h3 {
+ font-size: 16px;
font-weight: 500;
+ color: var(--color-text-strong);
+ margin-bottom: 12px;
}
- @media (max-width: 40rem) {
- justify-content: flex-start;
+ div {
+ display: flex;
+ gap: 12px;
}
- @media (max-width: 30rem) {
- justify-content: center;
+ span {
+ color: var(--color-icon);
+ line-height: 200%;
}
}
}
- [data-component="screenshots"] {
- border-top: 1px solid var(--color-border);
+ [data-component="zen-cta"] {
+ border-top: 1px solid var(--color-border-weak);
+ display: flex;
+ padding: var(--vertical-padding) var(--padding);
+ }
- figure {
- flex: 1;
+ [data-slot="zen-cta-copy"] {
+ strong {
+ color: var(--color-text-strong);
+ font-weight: 500;
+ margin-bottom: 16px;
+ display: block;
+ }
+
+ p {
+ color: var(--color-text);
+ margin-bottom: 24px;
+ max-width: 90%;
+
+ @media (max-width: 50rem) {
+ max-width: 100%;
+ }
+ }
+
+ a {
+ background: var(--color-background);
+ padding: 8px 12px 8px 20px;
+ color: var(--color-text-strong);
+ border: none;
+ border-radius: 4px;
+ border: 1px solid var(--color-border-weak);
+ font-weight: 500;
+ cursor: pointer;
display: flex;
- flex-direction: column;
- gap: calc(var(--padding) / 4);
- padding: calc(var(--padding) / 2);
- border-width: 0;
- border-style: solid;
- border-color: var(--color-border);
- min-height: 0;
- overflow: hidden;
+ width: fit-content;
+ gap: 12px;
+ text-decoration: none;
+ }
- & > div,
- figcaption {
- display: flex;
- align-items: center;
+ a:hover {
+ background: var(--color-background-weak);
+ }
+ }
+ [data-slot="model-logos"] {
+ display: flex;
+ gap: 24px;
+ margin-bottom: 40px;
+
+ svg {
+ color: var(--color-background-strong);
+ }
+
+ @media (prefers-color-scheme: dark) {
+ svg {
+ color: var(--color-background-strong);
}
+ }
+ }
- & > div {
- flex: 1;
- min-height: 0;
- display: flex;
- align-items: center;
- justify-content: center;
+ [data-component="email"] {
+ border-top: 1px solid var(--color-border-weak);
+ padding: var(--vertical-padding) var(--padding);
+ color: var(--color-text);
+
+ [data-slot="dock"] {
+ border-radius: 14px;
+ border: 0.5px solid rgba(176, 176, 176, 0.6);
+ background: #f2f1f0;
+ margin-bottom: 32px;
+ overflow: hidden;
+ height: 64px;
+ width: 185px;
+ box-shadow:
+ 0 6px 80px 0 rgba(0, 0, 0, 0.05),
+ 0 2.507px 33.422px 0 rgba(0, 0, 0, 0.04),
+ 0 1.34px 17.869px 0 rgba(0, 0, 0, 0.03),
+ 0 0.751px 10.017px 0 rgba(0, 0, 0, 0.03),
+ 0 0.399px 5.32px 0 rgba(0, 0, 0, 0.02),
+ 0 0.166px 2.214px 0 rgba(0, 0, 0, 0.01);
+
+ img {
+ width: 100%;
+ height: auto;
}
- a {
+ @media (prefers-color-scheme: dark) {
+ background: #312d2d;
+ }
+ }
+
+ [data-slot="form"] {
+ position: relative;
+
+ input {
+ background: var(--color-background-weak);
+ border-radius: 6px;
+ border: 1px solid var(--color-border-weak);
+ padding: 20px;
display: flex;
- flex: 1;
- min-height: 0;
- align-items: center;
- justify-content: center;
+ flex-direction: column;
+ gap: 12px;
width: 100%;
- height: 100%;
+
+ @media (max-width: 30rem) {
+ padding-bottom: 80px;
+ }
+
}
- figcaption {
- letter-spacing: -0.03125rem;
- text-transform: uppercase;
- color: var(--color-text-dimmed);
- flex-shrink: 0;
+ input:focus {
+ background: var(--color-background-interactive-weaker);
+ outline: none;
+ border: none;
+ color: var(--color-text-strong);
+
+ border: 1px solid var(--color-background-strong); /* Tailwind blue-600 as example */
+
+ /* Tailwind-style ring */
+ box-shadow: 0 0 0 3px var(--color-background-interactive);
+ /* mimics "ring-2 ring-blue-600/50" */
+
+ @media (prefers-color-scheme: dark) {
+ box-shadow: none;
+ border: 1px solid var(--color-background-interactive)
+ }
+ }
+
+ button {
+ position: absolute;
+ height: 40px;
+ right: 12px;
+ background: var(--color-background-strong);
+ padding: 4px 20px;
+ color: var(--color-text-inverted);
+ border-radius: 4px;
+ border: none;
+ outline: none;
+ font-weight: 500;
+ cursor: pointer;
+ top: 50%;
+ margin-top: -20px;
@media (max-width: 30rem) {
- font-size: 0.75rem;
+ left: 20px;
+ right: 20px;
+ bottom: 20px;
+ top: auto;
}
}
}
+ }
+
+ [data-component="faq"] {
+ border-top: 1px solid var(--color-border-weak);
+ padding: var(--vertical-padding) var(--padding);
+
+ ul {
+ padding: 0;
- & > [data-slot="left"] figure {
- height: var(--images-height);
- box-sizing: border-box;
+ li {
+ list-style: none;
+ margin-bottom: 24px;
+ line-height: 200%;
+ }
}
- & > [data-slot="right"] figure {
- height: calc(var(--images-height) / 2);
- box-sizing: border-box;
+ [data-slot="faq-question"] {
+ display: flex;
+ gap: 16px;
+ margin-bottom: 8px;
+ color: var(--color-text-strong);
+ font-weight: 500;
+ cursor: pointer;
+ background: none;
+ border: none;
+ padding: 0;
+ align-items: start;
+ min-height: 24px;
+
+ svg {
+ margin-top: 2px;
+ }
+
+
+ [data-slot="faq-icon-plus"] {
+ flex-shrink: 0;
+ [data-closed] & {
+ display: block;
+ }
+ [data-expanded] & {
+ display: none;
+ }
+ }
+ [data-slot="faq-icon-minus"] {
+ flex-shrink: 0;
+ [data-closed] & {
+ display: none;
+ }
+ [data-expanded] & {
+ display: block;
+ }
+ }
+ [data-slot="faq-question-text"] {
+ flex-grow: 1;
+ text-align: left;
+ }
}
- & > [data-slot="left"] img {
- width: 100%;
- height: 100%;
- min-width: 0;
- object-fit: contain;
+ [data-slot="faq-answer"] {
+ margin-left: 40px;
+ margin-bottom: 32px;
+ line-height: 200%;
}
+ }
- & > [data-slot="right"] img {
- width: 100%;
- height: calc(100% - 2rem);
- object-fit: contain;
- display: block;
+ [data-component="testimonials"] {
+ border-top: 1px solid var(--color-border-weak);
+ padding: var(--vertical-padding) var(--padding);
+ display: flex;
+ flex-direction: column;
+ gap: 20px;
+
+ @media (max-width: 60rem) {
+ --padding: 1rem;
+ --vertical-padding: 1rem;
}
- @media (max-width: 30rem) {
- & {
- --images-height: auto;
- grid-template-columns: 1fr;
- grid-template-rows: auto auto;
+ a {
+ text-decoration: none;
+ }
+ [data-slot="testimonial"] {
+ background: var(--color-background-weak);
+ border-radius: 6px;
+ border: 1px solid var(--color-border-weak);
+ padding: 20px;
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+
+ @media (max-width: 60rem) {
+ flex-direction: column-reverse;
+ gap: 24px;
}
- & > [data-slot="left"] {
- grid-row: 1;
- grid-column: 1;
+ [data-slot="name"] {
+ display: flex;
+ gap: 16px;
+
+ @media (max-width: 60rem) {
+ flex-direction: column;
+ gap: 8px;
+ }
+
+ span {
+ display: inline-block;
+ }
+
+ img {
+ height: 24px;
+ width: 24px;
+ border-radius: 24px;
+ }
}
- & > [data-slot="right"] {
- grid-row: 2;
- grid-column: 1;
- border-left: none;
- border-top: 1px solid var(--color-border);
+ [data-slot="quote"] {
+ margin-left: 40px;
- & > [data-slot="row1"],
- & > [data-slot="row2"] {
- height: auto;
+ @media (max-width: 60rem) {
+ margin-left: 0;
+ }
+ span {
+ color: var(--color-text);
+ text-decoration: none;
}
}
+ }
- & > [data-slot="left"] figure,
- & > [data-slot="right"] figure {
- height: auto;
+ [data-slot="button"] {
+ all: unset;
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ color: var(--color-text);
+ gap: var(--space-2-5);
+ font-size: 1rem;
+
+ @media (max-width: 24rem) {
+ font-size: 0.875rem;
}
- & > [data-slot="left"] img,
- & > [data-slot="right"] img {
- width: 100%;
- height: auto;
- max-height: none;
+ strong {
+ color: var(--color-text-strong);
+ font-weight: 500;
+ }
+
+ @media (max-width: 40rem) {
+ justify-content: flex-start;
+ }
+
+ @media (max-width: 30rem) {
+ justify-content: center;
}
}
}
[data-component="copy-status"] {
- @media (max-width: 38rem) {
- display: none;
- }
[data-slot="copy"] {
display: block;
width: var(--space-4);
height: var(--space-4);
- color: var(--color-text-dimmed);
+ color: var(--color-text-weaker);
[data-copied] & {
display: none;
@@ -452,7 +986,7 @@
display: none;
width: var(--space-4);
height: var(--space-4);
- color: var(--color-text);
+ color: var(--color-text-strong);
[data-copied] & {
display: block;
@@ -461,44 +995,71 @@
}
[data-component="footer"] {
- border-top: 1px solid var(--color-border);
+ border-top: 1px solid var(--color-border-weak);
display: flex;
flex-direction: row;
+ @media (max-width: 65rem) {
+ border-bottom: 1px solid var(--color-border-weak);
+ }
+
+
[data-slot="cell"] {
flex: 1;
text-align: center;
- text-transform: uppercase;
- padding: var(--vertical-padding) 0.5rem;
+
+
+ a {
+ text-decoration: none;
+ padding: 2rem 0;
+ width: 100%;
+ display: block;
+
+ span {
+ color: var(--color-text-weak);
+
+ @media (max-width: 40rem) {
+ display: none;
+ }
+
+ }
+ }
+
+ a:hover {
+ background: var(--color-background-weak);
+ text-decoration: underline;
+ text-underline-offset: var(--space-1);
+ text-decoration-thickness: 1px;
+ }
}
[data-slot="cell"] + [data-slot="cell"] {
- border-left: 1px solid var(--color-border);
+ border-left: 1px solid var(--color-border-weak);
}
/* Mobile: third column on its own row */
- @media (max-width: 30rem) {
+ @media (max-width: 25rem) {
flex-wrap: wrap;
- [data-slot="cell"]:nth-child(1),
- [data-slot="cell"]:nth-child(2) {
- flex: 1;
- }
-
- [data-slot="cell"]:nth-child(3) {
+ [data-slot="cell"] {
flex: 1 0 100%;
border-left: none;
- border-top: 1px solid var(--color-border);
+ border-top: 1px solid var(--color-border-weak);
+ }
+
+ [data-slot="cell"]:nth-child(1) {
+ border-top: none;
}
}
}
[data-component="legal"] {
- color: var(--color-text-dimmed);
+ color: var(--color-text-weak);
text-align: center;
a {
- color: var(--color-text-dimmed);
+ color: var(--color-text-weak);
+ text-decoration: none;
}
}
}
diff --git a/packages/console/app/src/routes/index.tsx b/packages/console/app/src/routes/index.tsx
index 3d663c27e..6687cf87a 100644
--- a/packages/console/app/src/routes/index.tsx
+++ b/packages/console/app/src/routes/index.tsx
@@ -1,14 +1,21 @@
import "./index.css"
-import { Title } from "@solidjs/meta"
-import { onCleanup, onMount } from "solid-js"
-import logoLight from "../asset/logo-ornate-light.svg"
-import logoDark from "../asset/logo-ornate-dark.svg"
-import IMG_SPLASH from "../asset/lander/screenshot-splash.png"
+import { Title, Meta, Link } from "@solidjs/meta"
+import { HttpHeader } from "@solidjs/start"
+import video from "../asset/lander/opencode-min.mp4"
+import videoPoster from "../asset/lander/opencode-poster.png"
import { IconCopy, IconCheck } from "../component/icon"
-import { createAsync, query } from "@solidjs/router"
+import { A, createAsync, query } from "@solidjs/router"
import { getActor } from "~/context/auth"
import { withActor } from "~/context/auth.withActor"
import { Account } from "@opencode/console-core/account.js"
+import { EmailSignup } from "~/component/email-signup"
+import { Tabs } from "@kobalte/core/tabs"
+import { Faq } from "~/component/faq"
+import { Header } from "~/component/header"
+import { Footer } from "~/component/footer"
+import { Legal } from "~/component/legal"
+import { github } from "~/lib/github"
+import { createMemo } from "solid-js"
function CopyStatus() {
return (
@@ -19,6 +26,7 @@ function CopyStatus() {
)
}
+
const defaultWorkspace = query(async () => {
"use server"
const actor = await getActor()
@@ -29,155 +37,1106 @@ const defaultWorkspace = query(async () => {
}, "defaultWorkspace")
export default function Home() {
+ const githubData = createAsync(() => github())
const workspace = createAsync(() => defaultWorkspace())
- onMount(() => {
- const commands = document.querySelectorAll("[data-copy]")
- for (const button of commands) {
- const callback = () => {
- const text = button.textContent
- if (text) {
- navigator.clipboard.writeText(text)
- button.setAttribute("data-copied", "")
- setTimeout(() => {
- button.removeAttribute("data-copied")
- }, 1500)
- }
- }
- button.addEventListener("click", callback)
- onCleanup(() => {
- button.removeEventListener("click", callback)
- })
+ const release = createMemo(() => githubData()?.release)
+
+ const handleCopyClick = (event: Event) => {
+ const button = event.currentTarget as HTMLButtonElement
+ const text = button.textContent
+ if (text) {
+ navigator.clipboard.writeText(text)
+ button.setAttribute("data-copied", "")
+ setTimeout(() => {
+ button.removeAttribute("data-copied")
+ }, 1500)
}
- })
+ }
+
return (
- <main data-page="home">
- <Title>opencode | AI coding agent built for the terminal</Title>
-
- <div data-component="content">
- <section data-component="top">
- <img data-slot="logo light" src={logoLight} alt="opencode logo light" />
- <img data-slot="logo dark" src={logoDark} alt="opencode logo dark" />
- <h1 data-slot="title">The AI coding agent built for the terminal</h1>
- <div data-slot="login">
- <a href="/auth">opencode zen</a>
- </div>
- </section>
-
- <section data-component="cta">
- <div data-slot="left">
- <a href="/docs">Get Started</a>
- </div>
- <div data-slot="center">
- <a href="/auth">opencode zen</a>
- </div>
- <div data-slot="right">
- <button data-copy data-slot="command">
- <span>
- <span>curl -fsSL </span>
- <span data-slot="protocol">https://</span>
- <span data-slot="highlight">opencode.ai/install</span>
- <span> | bash</span>
- </span>
- <CopyStatus />
- </button>
- </div>
- </section>
-
- <section data-component="features">
- <ul data-slot="list">
- <li>
- <strong>Native TUI</strong> A responsive, native, themeable terminal UI
- </li>
- <li>
- <strong>LSP enabled</strong> Automatically loads the right LSPs for the LLM
- </li>
- <li>
- <strong>opencode zen</strong> A <a href="/docs/zen">curated list of models</a> provided by opencode{" "}
- <label>New</label>
- </li>
- <li>
- <strong>Multi-session</strong> Start multiple agents in parallel on the same project
- </li>
- <li>
- <strong>Shareable links</strong> Share a link to any sessions for reference or to debug
- </li>
- <li>
- <strong>Claude Pro</strong> Log in with Anthropic to use your Claude Pro or Max account
- </li>
- <li>
- <strong>Use any model</strong> Supports 75+ LLM providers through{" "}
- <a href="https://models.dev">Models.dev</a>, including local models
- </li>
- </ul>
- </section>
-
- <section data-component="install">
- <div data-component="method">
- <h3 data-component="title">npm</h3>
- <button data-copy data-slot="button">
- <span>
- npm install -g <strong>opencode-ai</strong>
- </span>
- <CopyStatus />
- </button>
- </div>
- <div data-component="method">
- <h3 data-component="title">bun</h3>
- <button data-copy data-slot="button">
- <span>
- bun install -g <strong>opencode-ai</strong>
- </span>
- <CopyStatus />
- </button>
- </div>
- <div data-component="method">
- <h3 data-component="title">homebrew</h3>
- <button data-copy data-slot="button">
- <span>
- brew install <strong>sst/tap/opencode</strong>
- </span>
- <CopyStatus />
- </button>
- </div>
- <div data-component="method">
- <h3 data-component="title">paru</h3>
- <button data-copy data-slot="button">
- <span>
- paru -S <strong>opencode-bin</strong>
- </span>
- <CopyStatus />
- </button>
- </div>
- </section>
-
- <section data-component="screenshots">
- <figure>
- <figcaption>opencode TUI with the tokyonight theme</figcaption>
- <a href="/docs/cli">
- <img src={IMG_SPLASH} alt="opencode TUI with tokyonight theme" />
- </a>
- </figure>
- </section>
-
- <footer data-component="footer">
- <div data-slot="cell">
- <a href="https://x.com/opencode">X.com</a>
- </div>
- <div data-slot="cell">
- <a href="https://github.com/sst/opencode">GitHub</a>
- </div>
- <div data-slot="cell">
- <a href="https://opencode.ai/discord">Discord</a>
- </div>
- </footer>
- </div>
+ <main data-page="opencode">
+ <HttpHeader name="Cache-Control" value="public, max-age=1, s-maxage=3600, stale-while-revalidate=86400" />
+ <Title>OpenCode | The AI coding agent built for the terminal</Title>
+ <Link rel="icon" type="image/svg+xml" href="/favicon.svg" />
+ <Meta property="og:image" content="/social-share.png" />
+ <Meta name="twitter:image" content="/social-share.png" />
+ <div data-component="container">
+ <Header />
+
+ <div data-component="content">
+ <section data-component="hero">
+ <div data-slot="hero-copy">
+ <a
+ data-slot="releases"
+ href={release()?.url ?? "https://github.com/sst/opencode/releases"}
+ target="_blank"
+ >
+ What’s new in {release()?.name ?? "the latest release"}
+ </a>
+ <strong>The AI coding agent built for the terminal</strong>
+ <p>
+ OpenCode is fully open source, giving you control and freedom to use any provider, any model, and any
+ editor.
+ </p>
+ <a href="/docs">
+ <span>Read docs </span>
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+ <path
+ d="M6.5 12L17 12M13 16.5L17.5 12L13 7.5"
+ stroke="currentColor"
+ stroke-width="1.5"
+ stroke-linecap="square"
+ />
+ </svg>
+ </a>
+ </div>
+ <div data-slot="installation">
+ <Tabs
+ as="section"
+ aria-label="Install options"
+ class="tabs"
+ data-component="tabs"
+ data-active="curl"
+ defaultValue="curl"
+ >
+ <Tabs.List data-slot="tablist">
+ <Tabs.Trigger value="curl" data-slot="tab">
+ curl
+ </Tabs.Trigger>
+ <Tabs.Trigger value="npm" data-slot="tab">
+ npm
+ </Tabs.Trigger>
+ <Tabs.Trigger value="bun" data-slot="tab">
+ bun
+ </Tabs.Trigger>
+ <Tabs.Trigger value="brew" data-slot="tab">
+ brew
+ </Tabs.Trigger>
+ <Tabs.Trigger value="paru" data-slot="tab">
+ paru
+ </Tabs.Trigger>
+ <Tabs.Indicator />
+ </Tabs.List>
+ <div data-slot="panels">
+ <Tabs.Content as="pre" data-slot="panel" value="curl">
+ <button data-copy data-slot="command" onClick={handleCopyClick}>
+ <span data-slot="command-script">
+ <span>curl -fsSL </span>
+ <span data-slot="protocol">https://</span>
+ <span data-slot="highlight">opencode.ai/install</span>
+ <span> | bash</span>
+ </span>
+ <CopyStatus />
+ </button>
+ </Tabs.Content>
+ <Tabs.Content as="pre" data-slot="panel" value="npm">
+ <button data-copy data-slot="command" onClick={handleCopyClick}>
+ <span>
+ <span data-slot="protocol">npm i -g </span>
+ <span data-slot="highlight">opencode</span>
+ </span>
+ <CopyStatus />
+ </button>
+ </Tabs.Content>
+ <Tabs.Content as="pre" data-slot="panel" value="bun">
+ <button data-copy data-slot="command" onClick={handleCopyClick}>
+ <span>
+ <span data-slot="protocol">bun add -g </span>
+ <span data-slot="highlight">opencode</span>
+ </span>
+ <CopyStatus />
+ </button>
+ </Tabs.Content>
+ <Tabs.Content as="pre" data-slot="panel" value="brew">
+ <button data-copy data-slot="command" onClick={handleCopyClick}>
+ <span>
+ <span data-slot="protocol">brew install </span>
+ <span data-slot="highlight">opencode</span>
+ </span>
+ <CopyStatus />
+ </button>
+ </Tabs.Content>
+ <Tabs.Content as="pre" data-slot="panel" value="paru">
+ <button data-copy data-slot="command" onClick={handleCopyClick}>
+ <span>
+ <span data-slot="protocol">paru -S </span>
+ <span data-slot="highlight">opencode</span>
+ </span>
+ <CopyStatus />
+ </button>
+ </Tabs.Content>
+ </div>
+ </Tabs>
+ </div>
+ </section>
+
+ <section data-component="video">
+ <video src={video} autoplay playsinline loop muted preload="auto" poster={videoPoster}>
+ Your browser does not support the video tag.
+ </video>
+ </section>
+
+ <section data-component="what">
+ <div data-slot="section-title">
+ <h3>What is OpenCode?</h3>
+ <p>OpenCode is an open source agent that helps you write and run code directly from the terminal.</p>
+ </div>
+ <ul>
+ <li>
+ <span>[*]</span>
+ <div>
+ <strong>Native TUI</strong> A responsive, native, themeable terminal UI
+ </div>
+ </li>
+ <li>
+ <span>[*]</span>
+ <div>
+ <strong>LSP enabled</strong> Automatically loads the right LSPs for the LLM
+ </div>
+ </li>
+ <li>
+ <span>[*]</span>
+ <div>
+ <strong>Multi-session</strong> Start multiple agents in parallel on the same project
+ </div>
+ </li>
+ <li>
+ <span>[*]</span>
+ <div>
+ <strong>Share links</strong> Share a link to any session for reference or to debug
+ </div>
+ </li>
+ <li>
+ <span>[*]</span>
+ <div>
+ <strong>Claude Pro</strong> Log in with Anthropic to use your Claude Pro or Max account
+ </div>
+ </li>
+ <li>
+ <span>[*]</span>
+ <div>
+ <strong>Any model</strong> 75+ LLM providers through Models.dev, including local models
+ </div>
+ </li>
+ <li>
+ <span>[*]</span>
+ <div>
+ <strong>Any editor</strong> OpenCode runs in your terminal, pair it with any IDE
+ </div>
+ </li>
+ </ul>
+ </section>
+
+ <section data-component="growth">
+ <div data-slot="section-title">
+ <h3>The open source AI coding agent</h3>
+ <div>
+ <span>[*]</span>
+ <p>
+ With over <strong>26,000</strong> GitHub
+ stars, <strong>188</strong> contributors, and almost{" "}
+ <strong>3,000</strong> commits, OpenCode is used and trusted
+ by over <strong>200,000</strong>{" "}
+ developers every month.
+ </p>
+ </div>
+
+ <div data-component="growth-stats">
+ <div data-component="growth-stat">
+ <div data-component="stat-illustration">
+ <svg width="205" height="264" viewBox="0 0 205 264"
+ fill="none" xmlns="http://www.w3.org/2000/svg">
+ <g opacity="0.5" clip-path="url(#clip0_236_15902)">
+ <mask id="mask0_236_15902" style="mask-type:alpha"
+ maskUnits="userSpaceOnUse" x="0" y="0" width="205"
+ height="264">
+ <path
+ d="M27.2119 253.122L0 264H205V0L192.109 17.8482L175.297 43.8089L152.877 59.95L137.902 77.6701L126.989 87.3251L118.603 106.449L103.114 123.643L93.359 141.714L84.2883 160.311L78.7262 177.329L67.773 193.997L62.8098 212.068L57.3332 231.191L42.5292 243.824L27.2119 253.122Z"
+ fill="url(#paint0_linear_236_15902)"/>
+ </mask>
+ <g mask="url(#mask0_236_15902)">
+ <path
+ d="M150.932 -135.014L-251.766 267.684M154.115 -131.832L-248.582 270.865M157.295 -128.65L-245.402 274.047M160.479 -125.469L-242.219 277.229M163.662 -122.287L-239.035 280.41M166.842 -119.105L-235.855 283.592M170.025 -115.924L-232.672 286.773M173.205 -112.742L-229.492 289.955M176.385 -109.561L-226.312 293.137M179.568 -106.377L-223.129 296.32M182.752 -103.193L-219.945 299.504M185.936 -100.012L-216.762 302.686M189.119 -96.8301L-213.578 305.867M192.295 -93.6484L-210.402 309.049M195.479 -90.4668L-207.219 312.23M198.662 -87.2852L-204.035 315.412M201.842 -84.1035L-200.855 318.594M205.025 -80.9219L-197.672 321.775M208.209 -77.7383L-194.488 324.959M211.389 -74.5586L-191.309 328.139M214.568 -71.375L-188.129 331.322M217.752 -68.1934L-184.945 334.504M220.936 -65.0117L-181.762 337.686M224.119 -61.8281L-178.578 340.869M227.303 -58.6465L-175.395 344.051M230.482 -55.4668L-172.215 347.23M233.662 -52.2832L-169.035 350.414M236.846 -49.0996L-165.852 353.598M240.025 -45.9199L-162.672 356.777M243.209 -42.7383L-159.488 359.959M246.393 -39.5547L-156.305 363.143M249.572 -36.375L-153.125 366.322M252.756 -33.1934L-149.941 369.504M255.936 -30.0098L-146.762 372.688M259.119 -26.8281L-143.578 375.869M262.303 -23.6465L-140.395 379.051M265.486 -20.4609L-137.211 382.236M268.666 -17.2812L-134.031 385.416M271.85 -14.0996L-130.848 388.598M275.029 -10.918L-127.668 391.779M278.209 -7.73633L-124.488 394.961M281.393 -4.55469L-121.305 398.143M284.576 -1.37305L-118.121 401.324M287.756 1.80859L-114.941 404.506M290.94 4.99023L-111.758 407.688M294.119 8.17383L-108.578 410.871M297.303 11.3574L-105.395 414.055M300.486 14.5391L-102.211 417.236M303.67 17.7207L-99.0273 420.418M306.85 20.9023L-95.8477 423.6M310.033 24.084L-92.6641 426.781M313.213 27.2656L-89.4844 429.963M316.393 30.4473L-86.3047 433.145M319.576 33.6289L-83.1211 436.326M322.76 36.8125L-79.9375 439.51M325.94 39.9941L-76.7578 442.691M329.123 43.1758L-73.5742 445.873M332.307 46.3574L-70.3906 449.055M335.486 49.541L-67.2109 452.238M338.67 52.7227L-64.0273 455.42M341.854 55.9043L-60.8438 458.602M345.033 59.0859L-57.6641 461.783M348.217 62.2676L-54.4805 464.965M351.397 65.4512L-51.3008 468.148M354.576 68.6328L-48.1211 471.33M357.76 71.8145L-44.9375 474.512M360.943 74.9961L-41.7539 477.693M364.123 78.1777L-38.5742 480.875M367.307 81.3594L-35.3906 484.057M370.49 84.541L-32.207 487.238M373.67 87.7246L-29.0273 490.422M376.854 90.9062L-25.8438 493.604M380.033 94.0859L-22.6641 496.783M383.217 97.2695L-19.4805 499.967M386.4 100.453L-16.2969 503.15M389.58 103.633L-13.1172 506.33M392.76 106.816L-9.9375 509.514"
+ stroke="#8E8B8B"/>
+ </g>
+ <path
+ d="M0 264L27.2119 253.122L42.5292 243.824L57.3332 231.191L62.8098 212.068L67.773 193.997L78.7262 177.329L84.2883 160.311L93.359 141.714L103.114 123.643L118.603 106.449L126.989 87.3251L137.902 77.6701L152.877 59.95L175.297 43.8089L192.109 17.8482L205 0"
+ stroke="#BCBBBB"/>
+ </g>
+ <defs>
+ <linearGradient id="paint0_linear_236_15902" x1="102.5"
+ y1="-34.8571" x2="102.5" y2="264"
+ gradientUnits="userSpaceOnUse">
+ <stop stop-color="#565656"/>
+ <stop offset="1" stop-color="#F1F0F0"
+ stop-opacity="0"/>
+ </linearGradient>
+ <clipPath id="clip0_236_15902">
+ <rect width="205" height="264" fill="white"/>
+ </clipPath>
+ </defs>
+ </svg>
+
+ </div>
+ <span><figure>Fig 1.</figure> <strong>26K</strong> GitHub Stars</span>
+ </div>
+
+ <div data-component="growth-stat">
+ <div data-component="stat-illustration">
+ <svg width="205" height="264" viewBox="0 0 205 264"
+ fill="none" xmlns="http://www.w3.org/2000/svg">
+ <g opacity="0.5" clip-path="url(#clip0_236_15557)">
+ <g clip-path="url(#clip1_236_15557)">
+ <rect opacity="0.81" width="6" height="6"
+ fill="#CFCECD"/>
+ <rect opacity="0.46" x="14" width="6" height="6"
+ fill="#CFCECD"/>
+ <rect opacity="0.86" x="28" width="6" height="6"
+ fill="#8E8B8B"/>
+ <rect opacity="0.08" x="42" width="6" height="6"
+ fill="#BCBBBB"/>
+ <rect opacity="0.23" x="56" width="6" height="6"
+ fill="#CFCECD"/>
+ <rect opacity="0.9" x="70" width="6" height="6"
+ fill="#8E8B8B"/>
+ <rect opacity="0.59" x="84" width="6" height="6"
+ fill="#BCBBBB"/>
+ <rect opacity="0.8" x="98" width="6" height="6"
+ fill="#CFCECD"/>
+ <rect opacity="0.21" x="112" width="6" height="6"
+ fill="#BCBBBB"/>
+ <rect opacity="0.22" x="126" width="6" height="6"
+ fill="#8E8B8B"/>
+ <rect opacity="0.62" x="140" width="6" height="6"
+ fill="#DAD9D9"/>
+ <rect opacity="0.41" x="154" width="6" height="6"
+ fill="#8E8B8B"/>
+ <rect opacity="0.22" x="168" width="6" height="6"
+ fill="#DAD9D9"/>
+ <rect opacity="0.25" x="182" width="6" height="6"
+ fill="#DAD9D9"/>
+ <rect opacity="0.34" x="196" width="6" height="6"
+ fill="#8E8B8B"/>
+ <rect opacity="0.84" y="14" width="6" height="6"
+ fill="#8E8B8B"/>
+ <rect opacity="0.79" x="14" y="14" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.49" x="28" y="14" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.49" x="42" y="14" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.05" x="56" y="14" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.59" x="70" y="14" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.44" x="84" y="14" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.21" x="98" y="14" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.53" x="112" y="14" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.81" x="126" y="14" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.24" x="140" y="14" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.61" x="154" y="14" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.14" x="168" y="14" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.26" x="182" y="14" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.8" x="196" y="14" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.02" y="28" width="6" height="6"
+ fill="#8E8B8B"/>
+ <rect opacity="0.69" x="14" y="28" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect x="28" y="28" width="6" height="6"
+ fill="#BCBBBB"/>
+ <rect opacity="0.4" x="42" y="28" width="6" height="6"
+ fill="#CFCECD"/>
+ <rect opacity="0.88" x="56" y="28" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.38" x="70" y="28" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.38" x="84" y="28" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.78" x="98" y="28" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.49" x="112" y="28" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.13" x="126" y="28" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.76" x="140" y="28" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.35" x="154" y="28" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.59" x="168" y="28" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.34" x="182" y="28" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.3" x="196" y="28" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.6" y="42" width="6" height="6"
+ fill="#8E8B8B"/>
+ <rect opacity="0.3" x="14" y="42" width="6" height="6"
+ fill="#CFCECD"/>
+ <rect opacity="0.65" x="28" y="42" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.41" x="42" y="42" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.84" x="56" y="42" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.33" x="70" y="42" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.81" x="84" y="42" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.78" x="98" y="42" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.72" x="112" y="42" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.71" x="126" y="42" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.46" x="140" y="42" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.06" x="154" y="42" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.05" x="168" y="42" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.44" x="182" y="42" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.09" x="196" y="42" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.03" y="56" width="6" height="6"
+ fill="#DAD9D9"/>
+ <rect opacity="0.58" x="14" y="56" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.24" x="28" y="56" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.1" x="42" y="56" width="6" height="6"
+ fill="#8E8B8B"/>
+ <rect opacity="0.09" x="56" y="56" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.3" x="70" y="56" width="6" height="6"
+ fill="#CFCECD"/>
+ <rect opacity="0.6" x="84" y="56" width="6" height="6"
+ fill="#8E8B8B"/>
+ <rect opacity="0.39" x="98" y="56" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.53" x="112" y="56" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.83" x="126" y="56" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.25" x="140" y="56" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.87" x="154" y="56" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.38" x="168" y="56" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.19" x="182" y="56" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.89" x="196" y="56" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.98" y="70" width="6" height="6"
+ fill="#DAD9D9"/>
+ <rect opacity="0.26" x="14" y="70" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.79" x="28" y="70" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.67" x="56" y="70" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.48" x="70" y="70" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.76" x="84" y="70" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.72" x="98" y="70" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.01" x="112" y="70" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.46" x="126" y="70" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.27" x="140" y="70" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.78" x="154" y="70" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.16" x="168" y="70" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect x="182" y="70" width="6" height="6"
+ fill="#8E8B8B"/>
+ <rect opacity="0.86" x="196" y="70" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.18" y="84" width="6" height="6"
+ fill="#CFCECD"/>
+ <rect opacity="0.04" x="14" y="84" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.61" x="28" y="84" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.47" x="42" y="84" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.81" x="56" y="84" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.98" x="70" y="84" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.3" x="84" y="84" width="6" height="6"
+ fill="#DAD9D9"/>
+ <rect opacity="0.1" x="98" y="84" width="6" height="6"
+ fill="#CFCECD"/>
+ <rect opacity="0.42" x="112" y="84" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.66" x="126" y="84" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.68" x="140" y="84" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.35" x="154" y="84" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.6" x="168" y="84" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.95" x="182" y="84" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.05" x="196" y="84" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.77" y="98" width="6" height="6"
+ fill="#8E8B8B"/>
+ <rect opacity="0.06" x="14" y="98" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.45" x="28" y="98" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.73" x="42" y="98" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.21" x="70" y="98" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.18" x="84" y="98" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.92" x="98" y="98" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.26" x="112" y="98" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.21" x="126" y="98" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.27" x="140" y="98" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.84" x="154" y="98" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.74" x="168" y="98" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.53" x="182" y="98" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.9" x="196" y="98" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.32" y="112" width="6" height="6"
+ fill="#CFCECD"/>
+ <rect opacity="0.75" x="14" y="112" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.69" x="28" y="112" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.66" x="42" y="112" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.93" x="56" y="112" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.32" x="70" y="112" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.52" x="84" y="112" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.02" x="98" y="112" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.88" x="126" y="112" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.12" x="140" y="112" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.93" x="154" y="112" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.79" x="168" y="112" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.24" x="182" y="112" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.64" x="196" y="112" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.57" y="126" width="6" height="6"
+ fill="#8E8B8B"/>
+ <rect opacity="0.6" x="14" y="126" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.05" x="28" y="126" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.28" x="42" y="126" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.21" x="56" y="126" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.93" x="70" y="126" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.63" x="84" y="126" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.58" x="98" y="126" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.64" x="112" y="126" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.74" x="126" y="126" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.74" x="140" y="126" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.1" x="154" y="126" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.93" x="168" y="126" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.43" x="182" y="126" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.45" x="196" y="126" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.77" y="140" width="6" height="6"
+ fill="#8E8B8B"/>
+ <rect opacity="0.78" x="14" y="140" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.18" x="28" y="140" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect x="42" y="140" width="6" height="6"
+ fill="#CFCECD"/>
+ <rect opacity="0.39" x="56" y="140" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.53" x="70" y="140" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.06" x="84" y="140" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.81" x="98" y="140" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.49" x="112" y="140" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.45" x="126" y="140" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.37" x="140" y="140" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.58" x="154" y="140" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.8" x="168" y="140" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.35" x="182" y="140" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.73" x="196" y="140" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.92" y="154" width="6" height="6"
+ fill="#BCBBBB"/>
+ <rect opacity="0.32" x="14" y="154" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.3" x="28" y="154" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.03" x="42" y="154" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.65" x="56" y="154" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.66" x="70" y="154" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.83" x="84" y="154" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.52" x="98" y="154" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.82" x="112" y="154" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.95" x="126" y="154" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.89" x="140" y="154" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.2" x="154" y="154" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.61" x="168" y="154" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.34" x="196" y="154" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.9" y="168" width="6" height="6"
+ fill="#BCBBBB"/>
+ <rect opacity="0.99" x="14" y="168" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.49" x="28" y="168" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.84" x="42" y="168" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.67" x="56" y="168" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.92" x="70" y="168" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.79" x="84" y="168" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.8" x="98" y="168" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.74" x="112" y="168" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.38" x="126" y="168" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.56" x="140" y="168" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.7" x="154" y="168" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.47" x="168" y="168" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.92" x="182" y="168" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.19" x="196" y="168" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.12" y="182" width="6" height="6"
+ fill="#BCBBBB"/>
+ <rect opacity="0.16" x="14" y="182" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.98" x="28" y="182" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.6" x="42" y="182" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.15" x="56" y="182" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.17" x="70" y="182" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.26" x="84" y="182" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.3" x="98" y="182" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.12" x="112" y="182" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.31" x="126" y="182" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.62" x="140" y="182" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.74" x="154" y="182" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.8" x="168" y="182" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.89" x="182" y="182" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.75" x="196" y="182" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.1" y="196" width="6" height="6"
+ fill="#CFCECD"/>
+ <rect opacity="0.11" x="14" y="196" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.79" x="28" y="196" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.69" x="42" y="196" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.39" x="56" y="196" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.31" x="70" y="196" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.33" x="84" y="196" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.2" x="98" y="196" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.21" x="112" y="196" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.02" x="126" y="196" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.82" x="140" y="196" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.28" x="154" y="196" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.19" x="168" y="196" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.97" x="182" y="196" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.45" x="196" y="196" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.88" y="210" width="6" height="6"
+ fill="#BCBBBB"/>
+ <rect opacity="0.58" x="14" y="210" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.53" x="28" y="210" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.89" x="42" y="210" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.38" x="56" y="210" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.73" x="70" y="210" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.87" x="84" y="210" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.35" x="98" y="210" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.61" x="112" y="210" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.8" x="126" y="210" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.87" x="140" y="210" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.77" x="154" y="210" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.94" x="168" y="210" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.59" x="182" y="210" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.37" x="196" y="210" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.7" y="224" width="6" height="6"
+ fill="#8E8B8B"/>
+ <rect opacity="0.72" x="14" y="224" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.95" x="28" y="224" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.26" x="42" y="224" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.68" x="56" y="224" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.55" x="70" y="224" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.2" x="84" y="224" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.63" x="98" y="224" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.5" x="112" y="224" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.79" x="126" y="224" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.02" x="140" y="224" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.17" x="154" y="224" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.99" x="168" y="224" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.82" x="182" y="224" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.28" x="196" y="224" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.76" y="238" width="6" height="6"
+ fill="#CFCECD"/>
+ <rect opacity="0.39" x="14" y="238" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.14" x="28" y="238" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.17" x="42" y="238" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.37" x="56" y="238" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.13" x="70" y="238" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.35" x="84" y="238" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.13" x="98" y="238" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.55" x="112" y="238" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.83" x="126" y="238" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.86" x="140" y="238" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.63" x="154" y="238" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.38" x="168" y="238" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.57" x="182" y="238" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.13" x="196" y="238" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.9" y="252" width="6" height="6"
+ fill="#8E8B8B"/>
+ <rect opacity="0.63" x="14" y="252" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.23" x="28" y="252" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.56" x="42" y="252" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.38" x="56" y="252" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.19" x="70" y="252" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.29" x="84" y="252" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.78" x="98" y="252" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.14" x="112" y="252" width="6"
+ height="6" fill="#BCBBBB"/>
+ <rect opacity="0.64" x="126" y="252" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.27" x="140" y="252" width="6"
+ height="6" fill="#CFCECD"/>
+ <rect opacity="0.85" x="154" y="252" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.02" x="168" y="252" width="6"
+ height="6" fill="#DAD9D9"/>
+ <rect opacity="0.29" x="182" y="252" width="6"
+ height="6" fill="#8E8B8B"/>
+ <rect opacity="0.4" x="196" y="252" width="6"
+ height="6" fill="#8E8B8B"/>
+ </g>
+ </g>
+ <defs>
+ <clipPath id="clip0_236_15557">
+ <rect width="205" height="264" fill="white"/>
+ </clipPath>
+ <clipPath id="clip1_236_15557">
+ <rect width="236" height="264" fill="white"
+ transform="translate(-0.164062)"/>
+ </clipPath>
+ </defs>
+ </svg>
+
+
+ </div>
+ <span><figure>Fig 2.</figure> <strong>188</strong> Contributors</span>
+ </div>
+
+ <div data-component="growth-stat">
+ <div data-component="stat-illustration">
+ <svg width="205" height="264" viewBox="0 0 205 264"
+ fill="none" xmlns="http://www.w3.org/2000/svg">
+ <g opacity="0.5">
+ <path d="M205 0H203.985V264H205V0Z" fill="#8E8B8B"/>
+ <path d="M197.896 34H196.881V264H197.896V34Z"
+ fill="#8E8B8B"/>
+ <path d="M189.777 26H188.762V264H189.777V26Z"
+ fill="#8E8B8B"/>
+ <path d="M183.688 52H182.673V264H183.688V52Z"
+ fill="#8E8B8B"/>
+ <path d="M176.584 0H175.569V264H176.584V0Z"
+ fill="#8E8B8B"/>
+ <path d="M169.48 29H168.465V264H169.48V29Z"
+ fill="#8E8B8B"/>
+ <path d="M162.376 44H161.361V264H162.376V44Z"
+ fill="#8E8B8B"/>
+ <path d="M155.272 65H154.257V264H155.272V65Z"
+ fill="#8E8B8B"/>
+ <path d="M149.183 29H148.168V264H149.183V29Z"
+ fill="#8E8B8B"/>
+ <path d="M142.079 36H141.064V264H142.079V36Z"
+ fill="#8E8B8B"/>
+ <path d="M134.975 48H133.96V264H134.975V48Z"
+ fill="#8E8B8B"/>
+ <path d="M127.871 7H126.856V264H127.871V7Z"
+ fill="#8E8B8B"/>
+ <path d="M120.767 0H119.752V264H120.767V0Z"
+ fill="#8E8B8B"/>
+ <path d="M113.663 14H112.649V264H113.663V14Z"
+ fill="#8E8B8B"/>
+ <path d="M106.559 27H105.545V264H106.559V27Z"
+ fill="#8E8B8B"/>
+ <path d="M99.4554 70H98.4406V264H99.4554V70Z"
+ fill="#8E8B8B"/>
+ <path d="M92.3515 32H91.3366V264H92.3515V32Z"
+ fill="#8E8B8B"/>
+ <path d="M85.2475 35H84.2327V264H85.2475V35Z"
+ fill="#8E8B8B"/>
+ <path d="M78.1436 36H77.1287V264H78.1436V36Z"
+ fill="#8E8B8B"/>
+ <path d="M71.0396 10H70.0248V264H71.0396V10Z"
+ fill="#8E8B8B"/>
+ <path d="M63.9356 42H62.9208V264H63.9356V42Z"
+ fill="#8E8B8B"/>
+ <path d="M56.8317 43H55.8168V264H56.8317V43Z"
+ fill="#8E8B8B"/>
+ <path d="M49.7277 38H48.7129V264H49.7277V38Z"
+ fill="#8E8B8B"/>
+ <path d="M42.6238 56H41.6089V264H42.6238V56Z"
+ fill="#8E8B8B"/>
+ <path d="M36.5347 36H35.5198V264H36.5347V36Z"
+ fill="#8E8B8B"/>
+ <path d="M29.4307 8H28.4158V264H29.4307V8Z"
+ fill="#8E8B8B"/>
+ <path d="M22.3267 20H21.3119V264H22.3267V20Z"
+ fill="#8E8B8B"/>
+ <path d="M15.2228 1H14.2079V264H15.2228V1Z"
+ fill="#8E8B8B"/>
+ <path d="M8.11881 9H7.10396V264H8.11881V9Z"
+ fill="#8E8B8B"/>
+ <path d="M1.01485 31H0V264H1.01485V31Z" fill="#8E8B8B"/>
+ </g>
+ </svg>
+
+
+ </div>
+ <span><figure>Fig 3.</figure> <strong>200K</strong> Monthly Devs</span>
+ </div>
+ </div>
+
+
+ </div>
+ </section>
+
+ <section data-component="privacy">
+ <div data-slot="privacy-title">
+ <h3>Built for privacy first</h3>
+ <div>
+ <span>[*]</span>
+
+ <p>
+ OpenCode does not store any of your code or context data, so
+ that it can operate in privacy sensitive
+ environments. Learn more about <a href="/docs/enterprise/ ">privacy
+ and enterprise</a>.
+ </p>
+ </div>
+ </div>
+ </section>
+
+ <section data-component="faq">
+ <div data-slot="section-title">
+ <h3>FAQ</h3>
+ </div>
+ <ul>
+ <li>
+ <Faq question="What is OpenCode?">
+ OpenCode is an open source agent that helps you write and run
+ code directly from the terminal. You can
+ pair OpenCode with any AI model, and because it’s
+ terminal-based you can pair it with your preferred
+ code editor.
+ </Faq>
+ </li>
+ <li>
+ <Faq question="How do I use OpenCode?">
+ The easiest way to get started is to read the <a
+ href="/docs">intro</a>.
+ </Faq>
+ </li>
+ <li>
+ <Faq
+ question="Do I need extra AI subscriptions to use OpenCode?">
+ Not necessarily, but probably. You’ll need an AI subscription
+ if you want to connect OpenCode to a
+ paid provider, although you can work with{" "}
+ <a href="/docs/providers/#lm-studio"
+ target="_blank">
+ local models
+ </a>{" "}
+ for free. While we encourage users to use <A
+ href="/zen">Zen</A>, OpenCode works with all popular
+ providers such as OpenAI, Anthropic, xAI etc.
+ </Faq>
+ </li>
+ <li>
+ <Faq question="Can I only use OpenCode in the terminal?">
+ Yes, for now. We are actively working on a desktop app. Join
+ the waitlist for early access.
+ </Faq>
+ </li>
+ <li>
+ <Faq question="How much does OpenCode cost?">
+ OpenCode is 100% free to use. Any additional costs will come
+ from your subscription to a model
+ provider. While OpenCode works with any model provider, we
+ recommend using <A href="/zen">Zen</A>.
+ </Faq>
+ </li>
+ <li>
+ <Faq question="What about data and privacy?">
+ Your data and information is only stored when you create
+ sharable links in OpenCode. Learn more about{" "}
+ <a href="/docs/share/#privacy">share pages</a>.
+ </Faq>
+ </li>
+ <li>
+ <Faq question="Is OpenCode open source?">
+ Yes, OpenCode is fully open source. The source code is public
+ on{" "}
+ <a href="https://github.com/sst/opencode" target="_blank">
+ GitHub
+ </a>{" "}
+ under the{" "}
+ <a
+ href="https://github.com/sst/opencode?tab=MIT-1-ov-file#readme"
+ target="_blank">
+ MIT License
+ </a>
+ , meaning anyone can use, modify, or contribute to its
+ development. Anyone from the community can file
+ issues, submit pull requests, and extend functionality.
+ </Faq>
+ </li>
+ </ul>
+ </section>
+
+ <section data-component="zen-cta">
+ <div data-slot="zen-cta-copy">
+ <strong>Access reliable optimized models for coding
+ agents</strong>
+ <p>
+ Zen gives you access to a handpicked set of AI models that
+ OpenCode has tested and benchmarked
+ specifically for coding agents. No need to worry about
+ inconsistent performance and quality across
+ providers, use validated models that work.
+ </p>
+ <div data-slot="model-logos">
+ <div>
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none"
+ xmlns="http://www.w3.org/2000/svg">
+ <mask
+ id="mask0_79_128586"
+ style="mask-type:luminance"
+ maskUnits="userSpaceOnUse"
+ x="1"
+ y="1"
+ width="22"
+ height="22"
+ >
+ <path d="M23 1.5H1V22.2952H23V1.5Z" fill="white"/>
+ </mask>
+ <g mask="url(#mask0_79_128586)">
+ <path
+ d="M9.43799 9.06943V7.09387C9.43799 6.92749 9.50347 6.80267 9.65601 6.71959L13.8206 4.43211C14.3875 4.1202 15.0635 3.9747 15.7611 3.9747C18.3775 3.9747 20.0347 5.9087 20.0347 7.96734C20.0347 8.11288 20.0347 8.27926 20.0128 8.44564L15.6956 6.03335C15.434 5.88785 15.1723 5.88785 14.9107 6.03335L9.43799 9.06943ZM19.1624 16.7637V12.0431C19.1624 11.7519 19.0315 11.544 18.7699 11.3984L13.2972 8.36234L15.0851 7.3849C15.2377 7.30182 15.3686 7.30182 15.5212 7.3849L19.6858 9.67238C20.8851 10.3379 21.6917 11.7519 21.6917 13.1243C21.6917 14.7047 20.7106 16.1604 19.1624 16.7636V16.7637ZM8.15158 12.6047L6.36369 11.6066C6.21114 11.5235 6.14566 11.3986 6.14566 11.2323V6.65735C6.14566 4.43233 7.93355 2.7478 10.3538 2.7478C11.2697 2.7478 12.1199 3.039 12.8396 3.55886L8.54424 5.92959C8.28268 6.07508 8.15181 6.28303 8.15181 6.57427V12.6049L8.15158 12.6047ZM12 14.7258L9.43799 13.3533V10.4421L12 9.06965L14.5618 10.4421V13.3533L12 14.7258ZM13.6461 21.0476C12.7303 21.0476 11.8801 20.7564 11.1604 20.2366L15.4557 17.8658C15.7173 17.7203 15.8482 17.5124 15.8482 17.2211V11.1905L17.658 12.1886C17.8105 12.2717 17.876 12.3965 17.876 12.563V17.1379C17.876 19.3629 16.0662 21.0474 13.6461 21.0474V21.0476ZM8.47863 16.4103L4.314 14.1229C3.11471 13.4573 2.30808 12.0433 2.30808 10.6709C2.30808 9.06965 3.31106 7.6348 4.85903 7.03168V11.773C4.85903 12.0642 4.98995 12.2721 5.25151 12.4177L10.7025 15.4328L8.91464 16.4103C8.76209 16.4934 8.63117 16.4934 8.47863 16.4103ZM8.23892 19.8207C5.77508 19.8207 3.96533 18.0531 3.96533 15.8696C3.96533 15.7032 3.98719 15.5368 4.00886 15.3704L8.30418 17.7412C8.56574 17.8867 8.82752 17.8867 9.08909 17.7412L14.5618 14.726V16.7015C14.5618 16.8679 14.4964 16.9927 14.3438 17.0758L10.1792 19.3633C9.61225 19.6752 8.93631 19.8207 8.23869 19.8207H8.23892ZM13.6461 22.2952C16.2844 22.2952 18.4865 20.5069 18.9882 18.1362C21.4301 17.5331 23 15.3495 23 13.1245C23 11.6688 22.346 10.2548 21.1685 9.23581C21.2775 8.79908 21.343 8.36234 21.343 7.92582C21.343 4.95215 18.8137 2.72691 15.892 2.72691C15.3034 2.72691 14.7365 2.80999 14.1695 2.99726C13.1882 2.08223 11.8364 1.5 10.3538 1.5C7.71557 1.5 5.51352 3.28829 5.01185 5.65902C2.56987 6.26214 1 8.44564 1 10.6707C1 12.1264 1.65404 13.5404 2.83147 14.5594C2.72246 14.9961 2.65702 15.4328 2.65702 15.8694C2.65702 18.8431 5.1863 21.0683 8.108 21.0683C8.69661 21.0683 9.26354 20.9852 9.83046 20.7979C10.8115 21.713 12.1634 22.2952 13.6461 22.2952Z"
+ fill="currentColor"
+ />
+ </g>
+ </svg>
+ </div>
+ <div>
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none"
+ xmlns="http://www.w3.org/2000/svg">
+ <path
+ d="M13.7891 3.93164L20.2223 20.0677H23.7502L17.317 3.93164H13.7891Z"
+ fill="currentColor"/>
+ <path
+ d="M6.32538 13.6824L8.52662 8.01177L10.7279 13.6824H6.32538ZM6.68225 3.93164L0.25 20.0677H3.84652L5.16202 16.6791H11.8914L13.2067 20.0677H16.8033L10.371 3.93164H6.68225Z"
+ fill="currentColor"
+ />
+ </svg>
+ </div>
+ <div>
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none"
+ xmlns="http://www.w3.org/2000/svg">
+ <path
+ d="M9.16861 16.0529L17.2018 9.85156C17.5957 9.54755 18.1586 9.66612 18.3463 10.1384C19.3339 12.6288 18.8926 15.6217 16.9276 17.6766C14.9626 19.7314 12.2285 20.1821 9.72948 19.1557L6.9995 20.4775C10.9151 23.2763 15.6699 22.5841 18.6411 19.4749C20.9979 17.0103 21.7278 13.6508 21.0453 10.6214L21.0515 10.6278C20.0617 6.17736 21.2948 4.39847 23.8207 0.760904C23.8804 0.674655 23.9402 0.588405 24 0.5L20.6762 3.97585V3.96506L9.16658 16.0551"
+ fill="currentColor"
+ />
+ <path
+ d="M7.37742 16.7017C4.67579 14.0395 5.14158 9.91963 7.44676 7.54383C9.15135 5.78544 11.9442 5.06779 14.3821 6.12281L17.0005 4.87559C16.5288 4.52392 15.9242 4.14566 15.2305 3.87986C12.0948 2.54882 8.34069 3.21127 5.79171 5.8386C3.33985 8.36779 2.56881 12.2567 3.89286 15.5751C4.88192 18.0552 3.26056 19.8094 1.62731 21.5801C1.04853 22.2078 0.467774 22.8355 0 23.5L7.3754 16.7037"
+ fill="currentColor"
+ />
+ </svg>
+ </div>
+ <div>
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none"
+ xmlns="http://www.w3.org/2000/svg">
+ <path
+ fill-rule="evenodd"
+ clip-rule="evenodd"
+ d="M12.6043 1.34016C12.9973 2.03016 13.3883 2.72215 13.7783 3.41514C13.7941 3.44286 13.8169 3.46589 13.8445 3.48187C13.8721 3.49786 13.9034 3.50624 13.9353 3.50614H19.4873C19.6612 3.50614 19.8092 3.61614 19.9332 3.83314L21.3872 6.40311C21.5772 6.74011 21.6272 6.88111 21.4112 7.24011C21.1512 7.6701 20.8982 8.1041 20.6512 8.54009L20.2842 9.19809C20.1782 9.39409 20.0612 9.47809 20.2442 9.71008L22.8962 14.347C23.0682 14.648 23.0072 14.841 22.8532 15.117C22.4162 15.902 21.9712 16.681 21.5182 17.457C21.3592 17.729 21.1662 17.832 20.8382 17.827C20.0612 17.811 19.2863 17.817 18.5113 17.843C18.4946 17.8439 18.4785 17.8489 18.4644 17.8576C18.4502 17.8664 18.4385 17.8785 18.4303 17.893C17.5361 19.4773 16.6344 21.0573 15.7253 22.633C15.5563 22.926 15.3453 22.996 15.0003 22.997C14.0033 23 12.9983 23.001 11.9833 22.999C11.8889 22.9987 11.7961 22.9735 11.7145 22.9259C11.6328 22.8783 11.5652 22.8101 11.5184 22.728L10.1834 20.405C10.1756 20.3898 10.1637 20.3771 10.149 20.3684C10.1343 20.3598 10.1174 20.3554 10.1004 20.356H4.98244C4.69744 20.386 4.42944 20.355 4.17745 20.264L2.57447 17.494C2.52706 17.412 2.50193 17.319 2.50158 17.2243C2.50123 17.1296 2.52567 17.0364 2.57247 16.954L3.77945 14.834C3.79665 14.8041 3.80569 14.7701 3.80569 14.7355C3.80569 14.701 3.79665 14.667 3.77945 14.637C3.15073 13.5485 2.52573 12.4579 1.90448 11.3651L1.11449 9.97008C0.954488 9.66008 0.941489 9.47409 1.20949 9.00509C1.67448 8.1921 2.13647 7.38011 2.59647 6.56911C2.72847 6.33512 2.90046 6.23512 3.18046 6.23412C4.04344 6.23048 4.90644 6.23015 5.76943 6.23312C5.79123 6.23295 5.81259 6.22704 5.83138 6.21597C5.85016 6.20491 5.8657 6.1891 5.87643 6.17012L8.68239 1.27516C8.72491 1.2007 8.78631 1.13875 8.86039 1.09556C8.93448 1.05238 9.01863 1.02948 9.10439 1.02917C9.62838 1.02817 10.1574 1.02917 10.6874 1.02317L11.7044 1.00017C12.0453 0.997165 12.4283 1.03217 12.6043 1.34016ZM9.17238 1.74316C9.16185 1.74315 9.15149 1.74592 9.14236 1.75119C9.13323 1.75645 9.12565 1.76403 9.12038 1.77316L6.25442 6.78811C6.24066 6.81174 6.22097 6.83137 6.19729 6.84505C6.17361 6.85873 6.14677 6.86599 6.11942 6.86611H3.25346C3.19746 6.86611 3.18346 6.89111 3.21246 6.94011L9.02239 17.096C9.04739 17.138 9.03539 17.158 8.98839 17.159L6.19342 17.174C6.15256 17.1727 6.11214 17.1828 6.07678 17.2033C6.04141 17.2238 6.01253 17.2539 5.99342 17.29L4.67344 19.6C4.62944 19.678 4.65244 19.718 4.74144 19.718L10.4574 19.726C10.5034 19.726 10.5374 19.746 10.5614 19.787L11.9643 22.241C12.0103 22.322 12.0563 22.323 12.1033 22.241L17.1093 13.481L17.8923 12.0991C17.897 12.0905 17.904 12.0834 17.9125 12.0785C17.9209 12.0735 17.9305 12.0709 17.9403 12.0709C17.9501 12.0709 17.9597 12.0735 17.9681 12.0785C17.9765 12.0834 17.9835 12.0905 17.9883 12.0991L19.4123 14.629C19.4229 14.648 19.4385 14.6637 19.4573 14.6746C19.4761 14.6855 19.4975 14.6912 19.5193 14.691L22.2822 14.671C22.2893 14.6711 22.2963 14.6693 22.3024 14.6658C22.3086 14.6623 22.3137 14.6572 22.3172 14.651C22.3206 14.6449 22.3224 14.638 22.3224 14.631C22.3224 14.624 22.3206 14.6172 22.3172 14.611L19.4173 9.52508C19.4068 9.50809 19.4013 9.48853 19.4013 9.46859C19.4013 9.44864 19.4068 9.42908 19.4173 9.41209L19.7102 8.90509L20.8302 6.92811C20.8542 6.88711 20.8422 6.86611 20.7952 6.86611H9.20038C9.14138 6.86611 9.12738 6.84011 9.15738 6.78911L10.5914 4.28413C10.6021 4.26706 10.6078 4.24731 10.6078 4.22714C10.6078 4.20697 10.6021 4.18721 10.5914 4.17014L9.22538 1.77416C9.22016 1.7647 9.21248 1.75682 9.20315 1.75137C9.19382 1.74591 9.18319 1.74307 9.17238 1.74316ZM15.4623 9.76308C15.5083 9.76308 15.5203 9.78308 15.4963 9.82308L14.6643 11.2881L12.0513 15.873C12.0464 15.8819 12.0392 15.8894 12.0304 15.8945C12.0216 15.8996 12.0115 15.9022 12.0013 15.902C11.9912 15.902 11.9813 15.8993 11.9725 15.8942C11.9637 15.8891 11.9564 15.8818 11.9513 15.873L8.49839 9.84108C8.47839 9.80708 8.48839 9.78908 8.52639 9.78708L8.74239 9.77508L15.4643 9.76308H15.4623Z"
+ fill="currentColor"
+ />
+ </svg>
+ </div>
+ <div>
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none"
+ xmlns="http://www.w3.org/2000/svg">
+ <path
+ d="M12.6241 11.346L20.3848 3.44816C20.5309 3.29931 20.4487 3 20.2601 3H16.0842C16.0388 3 15.9949 3.01897 15.9594 3.05541L7.59764 11.5629C7.46721 11.6944 7.27446 11.5771 7.27446 11.3666V3.25183C7.27446 3.11242 7.18515 3 7.07594 3H4.19843C4.08932 3 4 3.11242 4 3.25183V20.7482C4 20.8876 4.08932 21 4.19843 21H7.07594C7.18515 21 7.27446 20.8876 7.27446 20.7482V17.1834C7.27446 17.1073 7.30136 17.0344 7.34815 16.987L9.94075 14.3486C10.0031 14.2853 10.0895 14.2757 10.159 14.3232L17.0934 19.5573C18.2289 20.3412 19.4975 20.8226 20.786 20.9652C20.9008 20.9778 21 20.8606 21 20.7133V17.3559C21 17.2276 20.9249 17.1232 20.8243 17.1073C20.0659 16.9853 19.326 16.6845 18.6569 16.222L12.6538 11.764C12.5291 11.6785 12.5135 11.4584 12.6241 11.346Z"
+ fill="currentColor"
+ />
+ </svg>
+ </div>
+ </div>
+ <A href="/zen">
+ <span>Learn about Zen </span>
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none"
+ xmlns="http://www.w3.org/2000/svg">
+ <path
+ d="M6.5 12L17 12M13 16.5L17.5 12L13 7.5"
+ stroke="currentColor"
+ stroke-width="1.5"
+ stroke-linecap="square"
+ />
+ </svg>
+ </A>
+ </div>
+ </section>
- <div data-component="legal">
- <span>
- ©2025 <a href="https://anoma.ly">Anomaly</a>
- </span>
+ <EmailSignup/>
+ <Footer/>
+ </div>
</div>
+ <Legal/>
</main>
)
}
diff --git a/packages/console/app/src/routes/temp.tsx b/packages/console/app/src/routes/temp.tsx
new file mode 100644
index 000000000..3d663c27e
--- /dev/null
+++ b/packages/console/app/src/routes/temp.tsx
@@ -0,0 +1,183 @@
+import "./index.css"
+import { Title } from "@solidjs/meta"
+import { onCleanup, onMount } from "solid-js"
+import logoLight from "../asset/logo-ornate-light.svg"
+import logoDark from "../asset/logo-ornate-dark.svg"
+import IMG_SPLASH from "../asset/lander/screenshot-splash.png"
+import { IconCopy, IconCheck } from "../component/icon"
+import { createAsync, query } from "@solidjs/router"
+import { getActor } from "~/context/auth"
+import { withActor } from "~/context/auth.withActor"
+import { Account } from "@opencode/console-core/account.js"
+
+function CopyStatus() {
+ return (
+ <div data-component="copy-status">
+ <IconCopy data-slot="copy" />
+ <IconCheck data-slot="check" />
+ </div>
+ )
+}
+
+const defaultWorkspace = query(async () => {
+ "use server"
+ const actor = await getActor()
+ if (actor.type === "account") {
+ const workspaces = await withActor(() => Account.workspaces())
+ return workspaces[0].id
+ }
+}, "defaultWorkspace")
+
+export default function Home() {
+ const workspace = createAsync(() => defaultWorkspace())
+ onMount(() => {
+ const commands = document.querySelectorAll("[data-copy]")
+ for (const button of commands) {
+ const callback = () => {
+ const text = button.textContent
+ if (text) {
+ navigator.clipboard.writeText(text)
+ button.setAttribute("data-copied", "")
+ setTimeout(() => {
+ button.removeAttribute("data-copied")
+ }, 1500)
+ }
+ }
+ button.addEventListener("click", callback)
+ onCleanup(() => {
+ button.removeEventListener("click", callback)
+ })
+ }
+ })
+
+ return (
+ <main data-page="home">
+ <Title>opencode | AI coding agent built for the terminal</Title>
+
+ <div data-component="content">
+ <section data-component="top">
+ <img data-slot="logo light" src={logoLight} alt="opencode logo light" />
+ <img data-slot="logo dark" src={logoDark} alt="opencode logo dark" />
+ <h1 data-slot="title">The AI coding agent built for the terminal</h1>
+ <div data-slot="login">
+ <a href="/auth">opencode zen</a>
+ </div>
+ </section>
+
+ <section data-component="cta">
+ <div data-slot="left">
+ <a href="/docs">Get Started</a>
+ </div>
+ <div data-slot="center">
+ <a href="/auth">opencode zen</a>
+ </div>
+ <div data-slot="right">
+ <button data-copy data-slot="command">
+ <span>
+ <span>curl -fsSL </span>
+ <span data-slot="protocol">https://</span>
+ <span data-slot="highlight">opencode.ai/install</span>
+ <span> | bash</span>
+ </span>
+ <CopyStatus />
+ </button>
+ </div>
+ </section>
+
+ <section data-component="features">
+ <ul data-slot="list">
+ <li>
+ <strong>Native TUI</strong> A responsive, native, themeable terminal UI
+ </li>
+ <li>
+ <strong>LSP enabled</strong> Automatically loads the right LSPs for the LLM
+ </li>
+ <li>
+ <strong>opencode zen</strong> A <a href="/docs/zen">curated list of models</a> provided by opencode{" "}
+ <label>New</label>
+ </li>
+ <li>
+ <strong>Multi-session</strong> Start multiple agents in parallel on the same project
+ </li>
+ <li>
+ <strong>Shareable links</strong> Share a link to any sessions for reference or to debug
+ </li>
+ <li>
+ <strong>Claude Pro</strong> Log in with Anthropic to use your Claude Pro or Max account
+ </li>
+ <li>
+ <strong>Use any model</strong> Supports 75+ LLM providers through{" "}
+ <a href="https://models.dev">Models.dev</a>, including local models
+ </li>
+ </ul>
+ </section>
+
+ <section data-component="install">
+ <div data-component="method">
+ <h3 data-component="title">npm</h3>
+ <button data-copy data-slot="button">
+ <span>
+ npm install -g <strong>opencode-ai</strong>
+ </span>
+ <CopyStatus />
+ </button>
+ </div>
+ <div data-component="method">
+ <h3 data-component="title">bun</h3>
+ <button data-copy data-slot="button">
+ <span>
+ bun install -g <strong>opencode-ai</strong>
+ </span>
+ <CopyStatus />
+ </button>
+ </div>
+ <div data-component="method">
+ <h3 data-component="title">homebrew</h3>
+ <button data-copy data-slot="button">
+ <span>
+ brew install <strong>sst/tap/opencode</strong>
+ </span>
+ <CopyStatus />
+ </button>
+ </div>
+ <div data-component="method">
+ <h3 data-component="title">paru</h3>
+ <button data-copy data-slot="button">
+ <span>
+ paru -S <strong>opencode-bin</strong>
+ </span>
+ <CopyStatus />
+ </button>
+ </div>
+ </section>
+
+ <section data-component="screenshots">
+ <figure>
+ <figcaption>opencode TUI with the tokyonight theme</figcaption>
+ <a href="/docs/cli">
+ <img src={IMG_SPLASH} alt="opencode TUI with tokyonight theme" />
+ </a>
+ </figure>
+ </section>
+
+ <footer data-component="footer">
+ <div data-slot="cell">
+ <a href="https://x.com/opencode">X.com</a>
+ </div>
+ <div data-slot="cell">
+ <a href="https://github.com/sst/opencode">GitHub</a>
+ </div>
+ <div data-slot="cell">
+ <a href="https://opencode.ai/discord">Discord</a>
+ </div>
+ </footer>
+ </div>
+
+ <div data-component="legal">
+ <span>
+ ©2025 <a href="https://anoma.ly">Anomaly</a>
+ </span>
+ </div>
+ </main>
+ )
+}
diff --git a/packages/console/app/src/routes/zen/index.css b/packages/console/app/src/routes/zen/index.css
new file mode 100644
index 000000000..3856bd14b
--- /dev/null
+++ b/packages/console/app/src/routes/zen/index.css
@@ -0,0 +1,781 @@
+::selection {
+ background: var(--color-background-interactive);
+ color: var(--color-text-strong);
+
+ @media (prefers-color-scheme: dark) {
+ background: var(--color-background-interactive);
+ color: var(--color-text-inverted);
+ }
+}
+
+[data-page="zen"] {
+ --color-background: hsl(0, 20%, 99%);
+ --color-background-weak: hsl(0, 8%, 97%);
+ --color-background-strong: hsl(0, 5%, 12%);
+ --color-background-strong-hover: hsl(0, 5%, 18%);
+ --color-background-interactive: hsl(62, 84%, 88%);
+ --color-background-interactive-weaker: hsl(64, 74%, 95%);
+
+ --color-text: hsl(0, 1%, 39%);
+ --color-text-weak: hsl(0, 1%, 74%);
+ --color-text-weaker: hsl(30, 2%, 81%);
+ --color-text-strong: hsl(0, 5%, 12%);
+ --color-text-inverted: hsl(0, 20%, 99%);
+
+ --color-border: hsl(30, 2%, 81%);
+ --color-border-weak: hsl(0, 1%, 85%);
+
+ --color-icon: hsl(0, 1%, 55%);
+}
+
+[data-page="zen"] {
+ @media (prefers-color-scheme: dark) {
+ --color-background: hsl(0, 9%, 7%);
+ --color-background-weak: hsl(0, 6%, 10%);
+ --color-background-strong: hsl(0, 15%, 94%);
+ --color-background-strong-hover: hsl(0, 15%, 97%);
+ --color-background-interactive: hsl(62, 100%, 90%);
+ --color-background-interactive-weaker: hsl(60, 20%, 8%);
+
+ --color-text: hsl(0, 4%, 71%);
+ --color-text-weak: hsl(0, 2%, 49%);
+ --color-text-weaker: hsl(0, 3%, 28%);
+ --color-text-strong: hsl(0, 15%, 94%);
+ --color-text-inverted: hsl(0, 9%, 7%);
+
+ --color-border: hsl(0, 3%, 28%);
+ --color-border-weak: hsl(0, 4%, 23%);
+
+ --color-icon: hsl(10, 3%, 43%);
+ }
+}
+
+[data-page="zen"] {
+ background: var(--color-background);
+ --padding: 5rem;
+ --vertical-padding: 4rem;
+ border-top: 1px solid var(--color-border-weak);
+
+ @media (max-width: 60rem) {
+ --padding: 1.5rem;
+ --vertical-padding: 3rem;
+ }
+
+ display: flex;
+ gap: var(--vertical-padding);
+ flex-direction: column;
+ font-family: var(--font-mono);
+ color: var(--color-text);
+ padding-bottom: 5rem;
+
+ a {
+ color: var(--color-text-strong);
+ text-decoration: underline;
+ text-underline-offset: var(--space-1);
+ text-decoration-thickness: 1px;
+ }
+
+ p {
+ line-height: 200%;
+ }
+
+ @media (max-width: 60rem) {
+ font-size: 15px;
+ }
+
+ input:-webkit-autofill,
+ input:-webkit-autofill:hover,
+ input:-webkit-autofill:focus,
+ input:-webkit-autofill:active {
+ transition: background-color 5000000s ease-in-out 0s;
+ }
+
+
+ [data-component="container"] {
+ max-width: 67.5rem;
+ margin: 0 auto;
+ border: 1px solid var(--color-border-weak);
+ border-top: none;
+
+ @media (max-width: 65rem) {
+ border: none;
+ }
+ }
+
+ [data-component="content"] {
+ }
+
+ [data-component="top"] {
+ padding: 24px var(--padding);
+ height: 80px;
+ position: sticky;
+ top: 0;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ background: var(--color-background);
+ border-bottom: 1px solid var(--color-border-weak);
+
+ z-index: 10;
+
+ img {
+ height: 34px;
+ width: auto;
+ }
+
+ [data-component="nav-desktop"] {
+ ul {
+ display: flex;
+ justify-content: space-between;
+ gap: 48px;
+ li {
+ display: inline-block;
+ a {
+ text-decoration: none;
+ span {
+ color: var(--color-text-weak);
+ }
+ }
+ a:hover {
+ text-decoration: underline;
+ text-underline-offset: var(--space-1);
+ text-decoration-thickness: 1px;
+ }
+ }
+ }
+
+ @media (max-width: 40rem) {
+ display: none;
+ }
+ }
+
+ [data-component="nav-mobile-toggle"] {
+ border: none;
+ background: none;
+ outline: none;
+ height: 40px;
+ width: 40px;
+ cursor: pointer;
+ }
+
+ [data-component="nav-mobile-toggle"]:hover {
+ background: var(--color-background-weak);
+ }
+
+ [data-component="nav-mobile"] {
+ display: none;
+
+ @media (max-width: 40rem) {
+ display: block;
+
+ [data-component="nav-mobile-icon"] {
+ cursor: pointer;
+ height: 40px;
+ width: 40px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+
+ [data-component="nav-mobile-menu-list"] {
+ position: fixed;
+ background: var(--color-background);
+ top: 80px;
+ left: 0;
+ right: 0;
+ height: 100vh;
+
+ ul {
+ list-style: none;
+ padding: 20px 0;
+
+ li {
+ a {
+ text-decoration: none;
+ padding: 20px;
+ display: block;
+
+ span {
+ color: var(--color-text-weak);
+ }
+ }
+
+ a:hover {
+ background: var(--color-background-weak);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ [data-slot="logo dark"] {
+ display: none;
+ }
+
+ @media (prefers-color-scheme: dark) {
+ [data-slot="logo light"] {
+ display: none;
+ }
+ [data-slot="logo dark"] {
+ display: block;
+ }
+ }
+ }
+
+ [data-component="hero"] {
+ display: flex;
+ flex-direction: column;
+ padding: calc(var(--vertical-padding)*2) var(--padding);
+
+ [data-slot="zen logo dark"] {
+ display: none;
+ }
+
+ @media (max-width: 30rem) {
+ padding: var(--vertical-padding) var(--padding)
+ }
+
+ @media (prefers-color-scheme: dark) {
+ [data-slot="zen logo light"] {
+ display: none;
+ }
+ [data-slot="zen logo dark"] {
+ display: block;
+ }
+ }
+ }
+
+ [data-slot="hero-copy"] {
+ img {
+ margin-bottom: 24px;
+ }
+
+ strong {
+ font-size: 28px;
+ color: var(--color-text-strong);
+ font-weight: 500;
+ margin-bottom: 16px;
+ display: block;
+
+ @media (max-width: 60rem) {
+ font-size: 22px;
+ }
+ }
+
+
+
+ p {
+ color: var(--color-text);
+ margin-bottom: 24px;
+ max-width: 82%;
+
+ @media (max-width: 50rem) {
+ max-width: 100%;
+ }
+ }
+
+ a {
+ background: var(--color-background-strong);
+ padding: 8px 12px 8px 20px;
+ color: var(--color-text-inverted);
+ border: none;
+ border-radius: 4px;
+ font-weight: 500;
+ cursor: pointer;
+ margin-bottom: 56px;
+ display: flex;
+ width: fit-content;
+ gap: 12px;
+ text-decoration: none;
+ }
+
+ a:hover {
+ background: var(--color-background-strong-hover);
+ }
+ }
+ [data-slot="model-logos"] {
+ display: flex;
+ gap: 24px;
+ margin-bottom: 56px;
+
+ svg {
+ color: var(--color-background-strong);
+ }
+
+ @media (prefers-color-scheme: dark) {
+ svg {
+ color: var(--color-background-strong);
+ }
+ }
+ }
+
+ [data-slot="pricing-copy"] {
+ strong {
+ color: var(--color-text-strong);
+ font-weight: 500;
+ }
+
+ p:first-child {
+ margin-bottom: 24px;
+ color: var(--color-text);
+ display: flex;
+ gap: 8px;
+
+ @media (max-width: 40rem) {
+ flex-direction: column;
+ gap: 4px;
+ }
+ }
+ }
+
+ [data-component="comparison"] {
+ border-top: 1px solid var(--color-border-weak);
+ video {
+ width: 100%;
+ height: auto;
+ max-width: none;
+ max-height: none;
+ display: block;
+ }
+ }
+
+ [data-slot="section-title"] {
+ margin-bottom: 24px;
+
+ h3 {
+ font-size: 16px;
+ font-weight: 500;
+ color: var(--color-text-strong);
+ margin-bottom: 12px;
+ }
+
+ p {
+ margin-bottom: 12px;
+ color: var(--color-text);
+ }
+ }
+
+ [data-component="problem"] {
+ border-top: 1px solid var(--color-border-weak);
+ padding: var(--vertical-padding) var(--padding);
+ color: var(--color-text);
+
+ p {
+ margin-bottom: 24px;
+ }
+
+ ul {
+ padding: 0;
+ li {
+ list-style: none;
+ margin-bottom: 16px;
+ display: flex;
+ gap: 12px;
+
+ span {
+ color: var(--color-icon);
+ }
+ }
+ li:last-child {
+ margin-bottom: 0;
+ }
+ }
+ }
+
+ [data-component="how"] {
+ border-top: 1px solid var(--color-border-weak);
+ padding: var(--vertical-padding) var(--padding);
+ color: var(--color-text);
+
+ ul {
+ padding: 0;
+ li {
+ list-style: none;
+ margin-bottom: 16px;
+ display: flex;
+ gap: 12px;
+
+ span {
+ color: var(--color-icon);
+ }
+ strong {
+ font-weight: 500;
+ color: var(--color-text-strong);
+ }
+ }
+ li:last-child {
+ margin-bottom: 0;
+ }
+ }
+ }
+
+ [data-component="privacy"] {
+ border-top: 1px solid var(--color-border-weak);
+ padding: var(--vertical-padding) var(--padding);
+ color: var(--color-text);
+
+ [data-slot="privacy-title"] {
+ h3 {
+ font-size: 16px;
+ font-weight: 500;
+ color: var(--color-text);
+ margin-bottom: 12px;
+ }
+
+ div {
+ display: flex;
+ gap: 12px;
+ }
+
+ p {
+ }
+
+ span {
+ color: var(--color-icon);
+ line-height: 200%;
+ }
+
+ div {
+ display: flex;
+ gap: 12px;
+ }
+ }
+ }
+
+ [data-component="email"] {
+ border-top: 1px solid var(--color-border-weak);
+ padding: var(--vertical-padding) var(--padding);
+ color: var(--color-text);
+
+ [data-slot="dock"] {
+ border-radius: 14px;
+ border: 0.5px solid rgba(176, 176, 176, 0.6);
+ background: #f2f1f0;
+ margin-bottom: 32px;
+ overflow: hidden;
+ height: 64px;
+ width: 185px;
+ box-shadow:
+ 0 6px 80px 0 rgba(0, 0, 0, 0.05),
+ 0 2.507px 33.422px 0 rgba(0, 0, 0, 0.04),
+ 0 1.34px 17.869px 0 rgba(0, 0, 0, 0.03),
+ 0 0.751px 10.017px 0 rgba(0, 0, 0, 0.03),
+ 0 0.399px 5.32px 0 rgba(0, 0, 0, 0.02),
+ 0 0.166px 2.214px 0 rgba(0, 0, 0, 0.01);
+
+ img {
+ width: 100%;
+ height: auto;
+ }
+
+ @media (prefers-color-scheme: dark) {
+ background: #312d2d;
+ }
+ }
+
+ [data-slot="form"] {
+ position: relative;
+
+ input {
+ background: var(--color-background-weak);
+ border-radius: 6px;
+ border: 1px solid var(--color-border-weak);
+ padding: 20px;
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+ width: 100%;
+
+ @media (max-width: 30rem) {
+ padding-bottom: 80px;
+ }
+ }
+
+ input:focus {
+ background: var(--color-background-interactive-weaker);
+ outline: none;
+ border: none;
+ color: var(--color-text-strong);
+
+ border: 1px solid var(--color-background-strong); /* Tailwind blue-600 as example */
+
+ /* Tailwind-style ring */
+ box-shadow: 0 0 0 3px var(--color-background-interactive);
+ /* mimics "ring-2 ring-blue-600/50" */
+ }
+
+ button {
+ position: absolute;
+ height: 40px;
+ right: 12px;
+ background: var(--color-background-strong);
+ padding: 4px 20px;
+ color: var(--color-text-inverted);
+ border-radius: 4px;
+ font-weight: 500;
+ cursor: pointer;
+ top: 50%;
+ margin-top: -20px;
+
+ @media (max-width: 30rem) {
+ left: 20px;
+ right: 20px;
+ bottom: 20px;
+ top: auto;
+ }
+ }
+ }
+ }
+
+ [data-component="faq"] {
+ border-top: 1px solid var(--color-border-weak);
+ padding: var(--vertical-padding) var(--padding);
+
+ ul {
+ padding: 0;
+
+ li {
+ list-style: none;
+ margin-bottom: 24px;
+ line-height: 200%;
+ }
+ }
+
+ [data-slot="faq-question"] {
+ display: flex;
+ gap: 16px;
+ margin-bottom: 8px;
+ color: var(--color-text-strong);
+ font-weight: 500;
+ cursor: pointer;
+ background: none;
+ border: none;
+ padding: 0;
+
+ [data-slot="faq-icon-plus"] {
+ flex-shrink: 0;
+ [data-closed] & {
+ display: block;
+ }
+ [data-expanded] & {
+ display: none;
+ }
+ }
+ [data-slot="faq-icon-minus"] {
+ flex-shrink: 0;
+ [data-closed] & {
+ display: none;
+ }
+ [data-expanded] & {
+ display: block;
+ }
+ }
+ [data-slot="faq-question-text"] {
+ flex-grow: 1;
+ text-align: left;
+ }
+ }
+
+ [data-slot="faq-answer"] {
+ margin-left: 40px;
+ margin-bottom: 32px;
+ }
+ }
+
+ [data-component="testimonials"] {
+ border-top: 1px solid var(--color-border-weak);
+ padding: var(--vertical-padding) var(--padding);
+ display: flex;
+ flex-direction: column;
+ gap: 20px;
+
+ @media (max-width: 60rem) {
+ --padding: 1rem;
+ --vertical-padding: 1rem;
+ }
+
+ a {
+ text-decoration: none;
+ }
+ [data-slot="testimonial"] {
+ background: var(--color-background-weak);
+ border-radius: 6px;
+ border: 1px solid var(--color-border-weak);
+ padding: 20px;
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+
+ @media (max-width: 60rem) {
+ flex-direction: column-reverse;
+ gap: 24px;
+ padding: 24px 48px;
+ }
+
+ [data-slot="name"] {
+ display: flex;
+ gap: 16px;
+
+ strong {
+ font-weight: 500;
+ }
+
+ span {
+ color: var(--color-text);
+ }
+
+ @media (max-width: 60rem) {
+ flex-direction: column;
+ gap: 8px;
+ }
+
+ span {
+ display: inline-block;
+ }
+
+ img {
+ height: 24px;
+ width: 24px;
+ border-radius: 24px;
+ }
+ }
+
+ [data-slot="quote"] {
+ margin-left: 40px;
+
+ @media (max-width: 60rem) {
+ margin-left: 0;
+ }
+ span {
+ color: var(--color-text);
+ text-decoration: none;
+ }
+ }
+ }
+
+ [data-slot="button"] {
+ all: unset;
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ color: var(--color-text);
+ gap: var(--space-2-5);
+ font-size: 1rem;
+
+ @media (max-width: 24rem) {
+ font-size: 0.875rem;
+ }
+
+ strong {
+ color: var(--color-text-strong);
+ font-weight: 500;
+ }
+
+ @media (max-width: 40rem) {
+ justify-content: flex-start;
+ }
+
+ @media (max-width: 30rem) {
+ justify-content: center;
+ }
+ }
+ }
+
+ [data-component="copy-status"] {
+ @media (max-width: 38rem) {
+ display: none;
+ }
+
+ [data-slot="copy"] {
+ display: block;
+ width: var(--space-4);
+ height: var(--space-4);
+ color: var(--color-text-weaker);
+
+ [data-copied] & {
+ display: none;
+ }
+ }
+
+ [data-slot="check"] {
+ display: none;
+ width: var(--space-4);
+ height: var(--space-4);
+ color: var(--color-text-strong);
+
+ [data-copied] & {
+ display: block;
+ }
+ }
+ }
+
+ [data-component="footer"] {
+ border-top: 1px solid var(--color-border-weak);
+ display: flex;
+ flex-direction: row;
+
+ @media (max-width: 65rem) {
+ border-bottom: 1px solid var(--color-border-weak);
+ }
+
+
+ [data-slot="cell"] {
+ flex: 1;
+ text-align: center;
+
+
+ a {
+ text-decoration: none;
+ padding: 2rem 0;
+ width: 100%;
+ display: block;
+
+ span {
+ color: var(--color-text-weak);
+
+ @media (max-width: 40rem) {
+ display: none;
+ }
+
+ }
+ }
+
+ a:hover {
+ background: var(--color-background-weak);
+ text-decoration: underline;
+ text-underline-offset: var(--space-1);
+ text-decoration-thickness: 1px;
+ }
+ }
+
+ [data-slot="cell"] + [data-slot="cell"] {
+ border-left: 1px solid var(--color-border-weak);
+ }
+
+ /* Mobile: third column on its own row */
+ @media (max-width: 25rem) {
+ flex-wrap: wrap;
+
+ [data-slot="cell"] {
+ flex: 1 0 100%;
+ border-left: none;
+ border-top: 1px solid var(--color-border-weak);
+ }
+
+ [data-slot="cell"]:nth-child(1) {
+ border-top: none;
+ }
+ }
+ }
+
+ [data-component="legal"] {
+ color: var(--color-text-weak);
+ text-align: center;
+
+ a {
+ color: var(--color-text-weak);
+ text-decoration: none;
+ }
+ }
+}
diff --git a/packages/console/app/src/routes/zen/index.tsx b/packages/console/app/src/routes/zen/index.tsx
new file mode 100644
index 000000000..a676471d4
--- /dev/null
+++ b/packages/console/app/src/routes/zen/index.tsx
@@ -0,0 +1,339 @@
+import "./index.css"
+import { Title, Meta, Link } from "@solidjs/meta"
+import { HttpHeader } from "@solidjs/start"
+import zenLogoLight from "../../asset/zen-ornate-light.svg"
+import zenLogoDark from "../../asset/zen-ornate-dark.svg"
+import compareVideo from "../../asset/lander/opencode-comparison-min.mp4"
+import compareVideoPoster from "../../asset/lander/opencode-comparison-poster.png"
+import avatarDax from "../../asset/lander/avatar-dax.png"
+import avatarJay from "../../asset/lander/avatar-Jay.png"
+import avatarFrank from "../../asset/lander/avatar-Frank.png"
+import avatarAdam from "../../asset/lander/avatar-Adam.png"
+import avatarDavid from "../../asset/lander/avatar-David.png"
+import { A, createAsync, query } from "@solidjs/router"
+import { getActor } from "~/context/auth"
+import { withActor } from "~/context/auth.withActor"
+import { Account } from "@opencode/console-core/account.js"
+import { EmailSignup } from "~/component/email-signup"
+import { Faq } from "~/component/faq"
+import { Legal } from "~/component/legal"
+import { Footer } from "~/component/footer"
+import { Header } from "~/component/header"
+
+const defaultWorkspace = query(async () => {
+ "use server"
+ const actor = await getActor()
+ if (actor.type === "account") {
+ const workspaces = await withActor(() => Account.workspaces())
+ return workspaces[0].id
+ }
+}, "defaultWorkspace")
+
+export default function Home() {
+ const workspace = createAsync(() => defaultWorkspace())
+
+ return (
+ <main data-page="zen">
+ <HttpHeader name="Cache-Control" value="public, max-age=1, s-maxage=3600, stale-while-revalidate=86400" />
+ <Title>OpenCode Zen | A curated set of reliable optimized models for coding agents</Title>
+ <Link rel="icon" type="image/svg+xml" href="/favicon-zen.svg" />
+ <Meta property="og:image" content="/social-share-zen.png" />
+ <Meta name="twitter:image" content="/social-share-zen.png" />
+
+ <div data-component="container">
+ <Header zen />
+
+ <div data-component="content">
+ <section data-component="hero">
+ <div data-slot="hero-copy">
+ <img data-slot="zen logo light" src={zenLogoLight} alt="zen logo light" />
+ <img data-slot="zen logo dark" src={zenLogoDark} alt="zen logo dark" />
+ <strong>Reliable optimized models for coding agents</strong>
+ <p>
+ Zen gives you access to a curated set of AI models that OpenCode has tested and benchmarked specifically
+ for coding agents. No need to worry about inconsistent performance and quality, use validated models
+ that work.
+ </p>
+ <div data-slot="model-logos">
+ <div>
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+ <mask
+ id="mask0_79_128586"
+ style="mask-type:luminance"
+ maskUnits="userSpaceOnUse"
+ x="1"
+ y="1"
+ width="22"
+ height="22"
+ >
+ <path d="M23 1.5H1V22.2952H23V1.5Z" fill="white" />
+ </mask>
+ <g mask="url(#mask0_79_128586)">
+ <path
+ d="M9.43799 9.06943V7.09387C9.43799 6.92749 9.50347 6.80267 9.65601 6.71959L13.8206 4.43211C14.3875 4.1202 15.0635 3.9747 15.7611 3.9747C18.3775 3.9747 20.0347 5.9087 20.0347 7.96734C20.0347 8.11288 20.0347 8.27926 20.0128 8.44564L15.6956 6.03335C15.434 5.88785 15.1723 5.88785 14.9107 6.03335L9.43799 9.06943ZM19.1624 16.7637V12.0431C19.1624 11.7519 19.0315 11.544 18.7699 11.3984L13.2972 8.36234L15.0851 7.3849C15.2377 7.30182 15.3686 7.30182 15.5212 7.3849L19.6858 9.67238C20.8851 10.3379 21.6917 11.7519 21.6917 13.1243C21.6917 14.7047 20.7106 16.1604 19.1624 16.7636V16.7637ZM8.15158 12.6047L6.36369 11.6066C6.21114 11.5235 6.14566 11.3986 6.14566 11.2323V6.65735C6.14566 4.43233 7.93355 2.7478 10.3538 2.7478C11.2697 2.7478 12.1199 3.039 12.8396 3.55886L8.54424 5.92959C8.28268 6.07508 8.15181 6.28303 8.15181 6.57427V12.6049L8.15158 12.6047ZM12 14.7258L9.43799 13.3533V10.4421L12 9.06965L14.5618 10.4421V13.3533L12 14.7258ZM13.6461 21.0476C12.7303 21.0476 11.8801 20.7564 11.1604 20.2366L15.4557 17.8658C15.7173 17.7203 15.8482 17.5124 15.8482 17.2211V11.1905L17.658 12.1886C17.8105 12.2717 17.876 12.3965 17.876 12.563V17.1379C17.876 19.3629 16.0662 21.0474 13.6461 21.0474V21.0476ZM8.47863 16.4103L4.314 14.1229C3.11471 13.4573 2.30808 12.0433 2.30808 10.6709C2.30808 9.06965 3.31106 7.6348 4.85903 7.03168V11.773C4.85903 12.0642 4.98995 12.2721 5.25151 12.4177L10.7025 15.4328L8.91464 16.4103C8.76209 16.4934 8.63117 16.4934 8.47863 16.4103ZM8.23892 19.8207C5.77508 19.8207 3.96533 18.0531 3.96533 15.8696C3.96533 15.7032 3.98719 15.5368 4.00886 15.3704L8.30418 17.7412C8.56574 17.8867 8.82752 17.8867 9.08909 17.7412L14.5618 14.726V16.7015C14.5618 16.8679 14.4964 16.9927 14.3438 17.0758L10.1792 19.3633C9.61225 19.6752 8.93631 19.8207 8.23869 19.8207H8.23892ZM13.6461 22.2952C16.2844 22.2952 18.4865 20.5069 18.9882 18.1362C21.4301 17.5331 23 15.3495 23 13.1245C23 11.6688 22.346 10.2548 21.1685 9.23581C21.2775 8.79908 21.343 8.36234 21.343 7.92582C21.343 4.95215 18.8137 2.72691 15.892 2.72691C15.3034 2.72691 14.7365 2.80999 14.1695 2.99726C13.1882 2.08223 11.8364 1.5 10.3538 1.5C7.71557 1.5 5.51352 3.28829 5.01185 5.65902C2.56987 6.26214 1 8.44564 1 10.6707C1 12.1264 1.65404 13.5404 2.83147 14.5594C2.72246 14.9961 2.65702 15.4328 2.65702 15.8694C2.65702 18.8431 5.1863 21.0683 8.108 21.0683C8.69661 21.0683 9.26354 20.9852 9.83046 20.7979C10.8115 21.713 12.1634 22.2952 13.6461 22.2952Z"
+ fill="currentColor"
+ />
+ </g>
+ </svg>
+ </div>
+ <div>
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+ <path d="M13.7891 3.93164L20.2223 20.0677H23.7502L17.317 3.93164H13.7891Z" fill="currentColor" />
+ <path
+ d="M6.32538 13.6824L8.52662 8.01177L10.7279 13.6824H6.32538ZM6.68225 3.93164L0.25 20.0677H3.84652L5.16202 16.6791H11.8914L13.2067 20.0677H16.8033L10.371 3.93164H6.68225Z"
+ fill="currentColor"
+ />
+ </svg>
+ </div>
+ <div>
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+ <path
+ d="M9.16861 16.0529L17.2018 9.85156C17.5957 9.54755 18.1586 9.66612 18.3463 10.1384C19.3339 12.6288 18.8926 15.6217 16.9276 17.6766C14.9626 19.7314 12.2285 20.1821 9.72948 19.1557L6.9995 20.4775C10.9151 23.2763 15.6699 22.5841 18.6411 19.4749C20.9979 17.0103 21.7278 13.6508 21.0453 10.6214L21.0515 10.6278C20.0617 6.17736 21.2948 4.39847 23.8207 0.760904C23.8804 0.674655 23.9402 0.588405 24 0.5L20.6762 3.97585V3.96506L9.16658 16.0551"
+ fill="currentColor"
+ />
+ <path
+ d="M7.37742 16.7017C4.67579 14.0395 5.14158 9.91963 7.44676 7.54383C9.15135 5.78544 11.9442 5.06779 14.3821 6.12281L17.0005 4.87559C16.5288 4.52392 15.9242 4.14566 15.2305 3.87986C12.0948 2.54882 8.34069 3.21127 5.79171 5.8386C3.33985 8.36779 2.56881 12.2567 3.89286 15.5751C4.88192 18.0552 3.26056 19.8094 1.62731 21.5801C1.04853 22.2078 0.467774 22.8355 0 23.5L7.3754 16.7037"
+ fill="currentColor"
+ />
+ </svg>
+ </div>
+ <div>
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+ <path
+ fill-rule="evenodd"
+ clip-rule="evenodd"
+ d="M12.6043 1.34016C12.9973 2.03016 13.3883 2.72215 13.7783 3.41514C13.7941 3.44286 13.8169 3.46589 13.8445 3.48187C13.8721 3.49786 13.9034 3.50624 13.9353 3.50614H19.4873C19.6612 3.50614 19.8092 3.61614 19.9332 3.83314L21.3872 6.40311C21.5772 6.74011 21.6272 6.88111 21.4112 7.24011C21.1512 7.6701 20.8982 8.1041 20.6512 8.54009L20.2842 9.19809C20.1782 9.39409 20.0612 9.47809 20.2442 9.71008L22.8962 14.347C23.0682 14.648 23.0072 14.841 22.8532 15.117C22.4162 15.902 21.9712 16.681 21.5182 17.457C21.3592 17.729 21.1662 17.832 20.8382 17.827C20.0612 17.811 19.2863 17.817 18.5113 17.843C18.4946 17.8439 18.4785 17.8489 18.4644 17.8576C18.4502 17.8664 18.4385 17.8785 18.4303 17.893C17.5361 19.4773 16.6344 21.0573 15.7253 22.633C15.5563 22.926 15.3453 22.996 15.0003 22.997C14.0033 23 12.9983 23.001 11.9833 22.999C11.8889 22.9987 11.7961 22.9735 11.7145 22.9259C11.6328 22.8783 11.5652 22.8101 11.5184 22.728L10.1834 20.405C10.1756 20.3898 10.1637 20.3771 10.149 20.3684C10.1343 20.3598 10.1174 20.3554 10.1004 20.356H4.98244C4.69744 20.386 4.42944 20.355 4.17745 20.264L2.57447 17.494C2.52706 17.412 2.50193 17.319 2.50158 17.2243C2.50123 17.1296 2.52567 17.0364 2.57247 16.954L3.77945 14.834C3.79665 14.8041 3.80569 14.7701 3.80569 14.7355C3.80569 14.701 3.79665 14.667 3.77945 14.637C3.15073 13.5485 2.52573 12.4579 1.90448 11.3651L1.11449 9.97008C0.954488 9.66008 0.941489 9.47409 1.20949 9.00509C1.67448 8.1921 2.13647 7.38011 2.59647 6.56911C2.72847 6.33512 2.90046 6.23512 3.18046 6.23412C4.04344 6.23048 4.90644 6.23015 5.76943 6.23312C5.79123 6.23295 5.81259 6.22704 5.83138 6.21597C5.85016 6.20491 5.8657 6.1891 5.87643 6.17012L8.68239 1.27516C8.72491 1.2007 8.78631 1.13875 8.86039 1.09556C8.93448 1.05238 9.01863 1.02948 9.10439 1.02917C9.62838 1.02817 10.1574 1.02917 10.6874 1.02317L11.7044 1.00017C12.0453 0.997165 12.4283 1.03217 12.6043 1.34016ZM9.17238 1.74316C9.16185 1.74315 9.15149 1.74592 9.14236 1.75119C9.13323 1.75645 9.12565 1.76403 9.12038 1.77316L6.25442 6.78811C6.24066 6.81174 6.22097 6.83137 6.19729 6.84505C6.17361 6.85873 6.14677 6.86599 6.11942 6.86611H3.25346C3.19746 6.86611 3.18346 6.89111 3.21246 6.94011L9.02239 17.096C9.04739 17.138 9.03539 17.158 8.98839 17.159L6.19342 17.174C6.15256 17.1727 6.11214 17.1828 6.07678 17.2033C6.04141 17.2238 6.01253 17.2539 5.99342 17.29L4.67344 19.6C4.62944 19.678 4.65244 19.718 4.74144 19.718L10.4574 19.726C10.5034 19.726 10.5374 19.746 10.5614 19.787L11.9643 22.241C12.0103 22.322 12.0563 22.323 12.1033 22.241L17.1093 13.481L17.8923 12.0991C17.897 12.0905 17.904 12.0834 17.9125 12.0785C17.9209 12.0735 17.9305 12.0709 17.9403 12.0709C17.9501 12.0709 17.9597 12.0735 17.9681 12.0785C17.9765 12.0834 17.9835 12.0905 17.9883 12.0991L19.4123 14.629C19.4229 14.648 19.4385 14.6637 19.4573 14.6746C19.4761 14.6855 19.4975 14.6912 19.5193 14.691L22.2822 14.671C22.2893 14.6711 22.2963 14.6693 22.3024 14.6658C22.3086 14.6623 22.3137 14.6572 22.3172 14.651C22.3206 14.6449 22.3224 14.638 22.3224 14.631C22.3224 14.624 22.3206 14.6172 22.3172 14.611L19.4173 9.52508C19.4068 9.50809 19.4013 9.48853 19.4013 9.46859C19.4013 9.44864 19.4068 9.42908 19.4173 9.41209L19.7102 8.90509L20.8302 6.92811C20.8542 6.88711 20.8422 6.86611 20.7952 6.86611H9.20038C9.14138 6.86611 9.12738 6.84011 9.15738 6.78911L10.5914 4.28413C10.6021 4.26706 10.6078 4.24731 10.6078 4.22714C10.6078 4.20697 10.6021 4.18721 10.5914 4.17014L9.22538 1.77416C9.22016 1.7647 9.21248 1.75682 9.20315 1.75137C9.19382 1.74591 9.18319 1.74307 9.17238 1.74316ZM15.4623 9.76308C15.5083 9.76308 15.5203 9.78308 15.4963 9.82308L14.6643 11.2881L12.0513 15.873C12.0464 15.8819 12.0392 15.8894 12.0304 15.8945C12.0216 15.8996 12.0115 15.9022 12.0013 15.902C11.9912 15.902 11.9813 15.8993 11.9725 15.8942C11.9637 15.8891 11.9564 15.8818 11.9513 15.873L8.49839 9.84108C8.47839 9.80708 8.48839 9.78908 8.52639 9.78708L8.74239 9.77508L15.4643 9.76308H15.4623Z"
+ fill="currentColor"
+ />
+ </svg>
+ </div>
+ <div>
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+ <path
+ d="M12.6241 11.346L20.3848 3.44816C20.5309 3.29931 20.4487 3 20.2601 3H16.0842C16.0388 3 15.9949 3.01897 15.9594 3.05541L7.59764 11.5629C7.46721 11.6944 7.27446 11.5771 7.27446 11.3666V3.25183C7.27446 3.11242 7.18515 3 7.07594 3H4.19843C4.08932 3 4 3.11242 4 3.25183V20.7482C4 20.8876 4.08932 21 4.19843 21H7.07594C7.18515 21 7.27446 20.8876 7.27446 20.7482V17.1834C7.27446 17.1073 7.30136 17.0344 7.34815 16.987L9.94075 14.3486C10.0031 14.2853 10.0895 14.2757 10.159 14.3232L17.0934 19.5573C18.2289 20.3412 19.4975 20.8226 20.786 20.9652C20.9008 20.9778 21 20.8606 21 20.7133V17.3559C21 17.2276 20.9249 17.1232 20.8243 17.1073C20.0659 16.9853 19.326 16.6845 18.6569 16.222L12.6538 11.764C12.5291 11.6785 12.5135 11.4584 12.6241 11.346Z"
+ fill="currentColor"
+ />
+ </svg>
+ </div>
+ </div>
+ <A href="/auth">
+ <span>Get started with Zen </span>
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+ <path
+ d="M6.5 12L17 12M13 16.5L17.5 12L13 7.5"
+ stroke="currentColor"
+ stroke-width="1.5"
+ stroke-linecap="square"
+ />
+ </svg>
+ </A>
+ </div>
+ <div data-slot="pricing-copy">
+ <p>
+ <strong>Add $20 Pay as you go balance</strong> <span>(+$1.23 card processing fee)</span>
+ </p>
+ <p>Use with any agent. Set monthly spend limits. Cancel any time.</p>
+ </div>
+ </section>
+
+ <section data-component="comparison">
+ <video src={compareVideo} autoplay playsinline loop muted preload="auto" poster={compareVideoPoster}>
+ Your browser does not support the video tag.
+ </video>
+ </section>
+
+ <section data-component="problem">
+ <div data-slot="section-title">
+ <h3>What problem is Zen solving?</h3>
+ <p>
+ There are so many models available, but only a few work well with coding agents.
+ <br />
+ Most providers configure them differently with varying results.
+ </p>
+ </div>
+ <p>We're fixing this for everyone, not just OpenCode users.</p>
+ <ul>
+ <li>
+ <span>[*]</span> Testing select models and consulting their teams
+ </li>
+ <li>
+ <span>[*]</span> Working with providers to ensure they’re delivered properly
+ </li>
+ <li>
+ <span>[*]</span> Benchmarking all model-provider combinations we recommend
+ </li>
+ </ul>
+ </section>
+
+ <section data-component="how">
+ <div data-slot="section-title">
+ <h3>How Zen works</h3>
+ <p>While we suggest you use Zen with OpenCode, you can use Zen with any agent.</p>
+ </div>
+ <ul>
+ <li>
+ <span>[1]</span>
+ <div>
+ <strong>Sign up and add $20 balance</strong> - follow the{" "}
+ <a href="/docs/zen/#how-it-works" title="setup instructions">
+ setup instructions
+ </a>
+ </div>
+ </li>
+ <li>
+ <span>[2]</span>
+ <div>
+ <strong>Use Zen with transparent pricing</strong> - <a href="/docs/zen/#pricing">pay per request</a> with zero markups
+ </div>
+ </li>
+ <li>
+ <span>[3]</span>
+ <div>
+ <strong>Auto-top up</strong> - when your balance reaches $5 we’ll automatically add $20
+ </div>
+ </li>
+ </ul>
+ </section>
+
+ <section data-component="privacy">
+ <div data-slot="privacy-title">
+ <h3>Your privacy is important to us</h3>
+ <div>
+ <span>[*]</span>
+ <p>
+ All Zen models are hosted in the US. Providers follow a zero-retention policy and do not use your data
+ for model training, with the <a href="/docs/zen/#privacy">following exceptions</a>.
+ </p>
+ </div>
+ </div>
+ </section>
+
+ <section data-component="testimonials">
+ {/*Dax*/}
+ <a href="https://x.com/iamdavidhill/status/1971693263498141817">
+ <div data-slot="testimonial">
+ <div data-slot="name">
+ <img src={avatarDax} alt="" />
+ <strong>Dax Raad</strong>
+ <span>ex-CEO, Terminal Products</span>
+ </div>
+ <div data-slot="quote">
+ It's clear from using <span>@OpenCode</span> Zen that the team behind it are smart, funny, and
+ excellent lovers.
+ </div>
+ </div>
+ </a>
+ {/*Jay*/}
+ <a href="https://x.com/iamdavidhill/status/1971693263498141817">
+ <div data-slot="testimonial">
+ <div data-slot="name">
+ <img src={avatarJay} alt="" />
+ <strong>Jay V</strong>
+ <span>ex-Founder, SEED, PM, Melt, Pop, Dapt, Cadmus, and ViewPoint</span>
+ </div>
+ <div data-slot="quote">
+ 4 out 5 people on our team love using <span>@OpenCode</span> Zen.
+ </div>
+ </div>
+ </a>
+ {/*Adam*/}
+ <a href="https://x.com/iamdavidhill/status/1971693263498141817">
+ <div data-slot="testimonial">
+ <div data-slot="name">
+ <img src={avatarAdam} alt="" />
+ <strong>Adam Elmore</strong>
+ <span>ex-Hero, AWS</span>
+ </div>
+ <div data-slot="quote">
+ I can't recommend <span>@OpenCode</span> Zen enough. Seriously, it’s really good.
+ </div>
+ </div>
+ </a>
+ {/*David*/}
+ <a href="https://x.com/iamdavidhill/status/1971693263498141817">
+ <div data-slot="testimonial">
+ <div data-slot="name">
+ <img src={avatarDavid} alt="" />
+ <strong>David Hill</strong>
+ <span>ex-Head of Design, Laravel</span>
+ </div>
+ <div data-slot="quote">
+ With <span>@OpenCode</span> Zen I know all the models are tested and perfect for coding agents.
+ </div>
+ </div>
+ </a>
+ {/*Frank*/}
+ <a href="https://x.com/iamdavidhill/status/1971693263498141817">
+ <div data-slot="testimonial">
+ <div data-slot="name">
+ <img src={avatarFrank} alt="" />
+ <strong>Frank Wang</strong>
+ <span>ex-Intern, Nvidia (4 times)</span>
+ </div>
+ <div data-slot="quote">I wish I was still at Nvidia.</div>
+ </div>
+ </a>
+ </section>
+
+ <section data-component="faq">
+ <div data-slot="section-title">
+ <h3>FAQ</h3>
+ </div>
+ <ul>
+ <li>
+ <Faq question="What is OpenCode Zen?">
+ Zen is a curated set of AI models tested and benchmarked for coding agents created by the team behind
+ OpenCode.
+ </Faq>
+ </li>
+ <li>
+ <Faq question="What makes Zen more accurate?">
+ Zen only provides models that have been specifically tested and benchmarked for coding agents. You
+ wouldn’t use a butter knife to cut steak, don’t use poor models for coding.
+ </Faq>
+ </li>
+ <li>
+ <Faq question="Is Zen cheaper?">
+ Zen is not for profit. Zen passes through the costs from the model providers to you. The higher Zen’s
+ usage the more OpenCode can negotiate better rates and pass those to you.
+ </Faq>
+ </li>
+ <li>
+ <Faq question="How much does Zen cost?">
+ Zen <a href="/docs/zen/#pricing">charges per request</a> with zero markups, so you pay exactly what the model provider charges. Your
+ total cost depends on usage, and you can set monthly spend limits in your <A href="/auth">account</A>.
+ To cover costs, OpenCode adds only a small payment processing fee of $1.23 per $20 balance top-up.
+ </Faq>
+ </li>
+ <li>
+ <Faq question="What about data and privacy?">
+ All Zen models are hosted in the US. Providers follow a zero-retention policy and do not use your data
+ for model training, with the <a href="/docs/zen/#privacy">following exceptions</a>.
+ </Faq>
+ </li>
+ <li>
+ <Faq question="Can I set spend limits?">Yes, you can set monthly spending limits in your account.</Faq>
+ </li>
+ <li>
+ <Faq question="Can I cancel?">
+ Yes, you can disable billing at any time and use your remaining balance.
+ </Faq>
+ </li>
+ <li>
+ <Faq question="Can I use Zen with other coding agents?">
+ While Zen works great with OpenCode, you can use Zen with any agent. Follow the setup instructions in
+ your preferred coding agent.
+ </Faq>
+ </li>
+ </ul>
+ </section>
+
+ <EmailSignup />
+ <Footer />
+ </div>
+ </div>
+
+ <Legal />
+ </main>
+ )
+}
diff --git a/packages/console/app/src/style/base.css b/packages/console/app/src/style/base.css
index a4847ed43..1c3f1d55b 100644
--- a/packages/console/app/src/style/base.css
+++ b/packages/console/app/src/style/base.css
@@ -7,3 +7,15 @@ html {
body {
font-family: var(--font-sans);
}
+
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ white-space: nowrap;
+ border-width: 0;
+}