diff --git a/.cursorignore b/.cursorignore new file mode 100644 index 0000000..09ead00 --- /dev/null +++ b/.cursorignore @@ -0,0 +1 @@ +!.env.schema diff --git a/.env.schema b/.env.schema new file mode 100644 index 0000000..c7186e1 --- /dev/null +++ b/.env.schema @@ -0,0 +1,90 @@ +# This env file uses @env-spec - see https://varlock.dev/env-spec for more info +# +# @defaultRequired=false @defaultSensitive=false +# @generateTypes(lang=ts, path=env.d.ts) +# @currentEnv=$GRADIENT_ENV +# ---------- + +# Custom env flag +# @type=enum(development, test, production) +GRADIENT_ENV=development + +# API Keys +# --- +# Deepgram +# @docs(https://developers.deepgram.com/docs/api-reference) +# @sensitive @required +DEEPGRAM_API_KEY= +# @docs(https://cartesia.ai/docs/api-reference) +# @sensitive @required +CARTESIA_API_KEY= +# @docs(https://cloud.google.com/gemini-api/docs/quickstart) +# @sensitive @required +GOOGLE_API_KEY= +# @docs(https://docs.daily.co/reference/api-reference) +# @sensitive +DAILY_API_KEY= + + +# World +# --- +# data directory +WORLD_DATA_DIR=world-data +# sector count +# @type=number +WORLD_SECTOR_COUNT=5000 +# seed +# @type=number +WORLD_SEED=1234 + +# Krisp +# @type=boolean +# @docs(https://sdk-docs.krisp.ai/) +BOT_USE_KRISP=false + +# Server URL +# @type=url +GAME_SERVER_URL=http://localhost:8000 + +# development mode +# +GAME_SERVER_DEV_MODE=1 # make this a proper bool? + + +# Supabase +# --- + +# built in supabase env variables +# SB_REGION= +# SB_EXECUTION_ID= +# DENO_DEPLOYMENT_ID= + +# supbase flag +# @type=boolean +SUPABASE=false + +# @sensitive @required=if($SUPABASE) +SUPABASE_URL= +# @sensitive @required=if($SUPABASE) +SUPABASE_SERVICE_ROLE_KEY= +# @sensitive @required=if($SUPABASE) +SUPABASE_ANON_KEY= +# @sensitive @required=if($SUPABASE) +SUPABASE_DB_URL= +# @sensitive @required=if($SUPABASE) +EDGE_API_TOKEN= +# @sensitive @required=if($SUPABASE) +EDGE_FUNCTIONS_URL= +# @sensitive @required=if($SUPABASE) +EDGE_JWT_SECRET= + + +# For production: +# @type=url @required=forEnv("production") +GAME_SERVER_AGENT_START_URL=http://localhost:7860/start + +# @required=forEnv("production") +GAME_SERVER_AGENT_PUBLIC_KEY= + +# @required=forEnv("production") +GAME_SERVER_CORS_ALLOWED_ORIGINS= diff --git a/.gitignore b/.gitignore index f4d1274..fb0b492 100644 --- a/.gitignore +++ b/.gitignore @@ -47,4 +47,6 @@ venv.bak/ .DS_Store # Deployment -deployment/pcc-deploy.toml \ No newline at end of file +deployment/pcc-deploy.toml +!.env.schema +env.d.ts \ No newline at end of file diff --git a/client/app/.env.schema b/client/app/.env.schema new file mode 100644 index 0000000..547e019 --- /dev/null +++ b/client/app/.env.schema @@ -0,0 +1,13 @@ +# This env file uses @env-spec - see https://varlock.dev/env-spec for more info +# +# @defaultRequired @defaultSensitive=false +# @generateTypes(lang=ts, path=env.d.ts) +# @import(../../.env.schema, GAME_SERVER_URL, GAME_SERVER_AGENT_START_URL, GRADIENT_ENV) +# ---------- + +VITE_SERVER_URL=$GAME_SERVER_URL +VITE_BOT_START_URL=$GAME_SERVER_AGENT_START_URL + +# @type=enum(smallwebrtc, daily) +VITE_PIPECAT_TRANSPORT=smallwebrtc + diff --git a/client/app/package.json b/client/app/package.json index fcdc2e2..a4072ae 100644 --- a/client/app/package.json +++ b/client/app/package.json @@ -30,6 +30,7 @@ "@radix-ui/react-switch": "^1.2.6", "@radix-ui/react-toggle-group": "^1.1.11", "@uidotdev/usehooks": "^2.4.1", + "@varlock/vite-integration": "^0.1.0", "camera-controls": "^3.1.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", @@ -51,6 +52,7 @@ "tw-animate-css": "^1.4.0", "use-debounce": "^10.0.6", "use-stick-to-bottom": "^1.1.1", + "varlock": "^0.1.2", "zustand": "^5.0.8" }, "devDependencies": { @@ -63,8 +65,8 @@ "@types/three": "^0.179.0", "@types/uuid": "^10.0.0", "@vitejs/plugin-react": "^4.6.0", - "leva": "^0.10.1", "globals": "^16.3.0", + "leva": "^0.10.1", "rollup-plugin-visualizer": "^6.0.5", "unplugin-preprocessor-directives": "^1.2.0", "vite": "^7.0.4", diff --git a/client/app/vite.config.ts b/client/app/vite.config.ts index 4b5b9f3..1ec96b1 100644 --- a/client/app/vite.config.ts +++ b/client/app/vite.config.ts @@ -2,6 +2,7 @@ import path from "path" import { visualizer } from "rollup-plugin-visualizer" import PreprocessorDirectives from "unplugin-preprocessor-directives/vite" import { defineConfig, type PluginOption } from "vite" +import { varlockVitePlugin } from '@varlock/vite-integration' import { VitePWA } from "vite-plugin-pwa" import tailwindcss from "@tailwindcss/vite" import react from "@vitejs/plugin-react" @@ -29,6 +30,7 @@ export default defineConfig(({ mode }) => ({ "import.meta.env.VITE_APP_VERSION": JSON.stringify(version), }, plugins: [ + varlockVitePlugin(), PreprocessorDirectives(), react(), tailwindcss(), diff --git a/client/pnpm-lock.yaml b/client/pnpm-lock.yaml index d6929d8..e90a891 100644 --- a/client/pnpm-lock.yaml +++ b/client/pnpm-lock.yaml @@ -105,6 +105,9 @@ importers: '@uidotdev/usehooks': specifier: ^2.4.1 version: 2.4.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@varlock/vite-integration': + specifier: ^0.1.0 + version: 0.1.0(varlock@0.1.2)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)) camera-controls: specifier: ^3.1.0 version: 3.1.1(three@0.180.0) @@ -168,6 +171,9 @@ importers: use-stick-to-bottom: specifier: ^1.1.1 version: 1.1.1(react@19.2.0) + varlock: + specifier: ^0.1.2 + version: 0.1.2 zustand: specifier: ^5.0.8 version: 5.0.8(@types/react@19.2.4)(immer@10.2.0)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)) @@ -817,6 +823,9 @@ packages: '@dimforge/rapier3d-compat@0.12.0': resolution: {integrity: sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow==} + '@env-spec/parser@0.0.7': + resolution: {integrity: sha512-PK4jVwAZA+5aa3PzVF/We48wA9r1S6GRoZH6oSf/zWvNLc9LErynLbnEmmfLBo67KVqRvaur2a7aBj3H1Mpj2w==} + '@esbuild/aix-ppc64@0.25.12': resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} engines: {node: '>=18'} @@ -2292,6 +2301,9 @@ packages: cpu: [x64] os: [win32] + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + '@sentry-internal/browser-utils@8.55.0': resolution: {integrity: sha512-ROgqtQfpH/82AQIpESPqPQe0UyWywKJsmVIqi3c5Fh+zkds5LUxnssTj3yNd1x+kxaPDVB023jAP+3ibNgeNDw==} engines: {node: '>=14.18'} @@ -2323,6 +2335,10 @@ packages: resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + '@sinonjs/commons@3.0.1': resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} @@ -2696,6 +2712,13 @@ packages: peerDependencies: react: '>= 16.8.0' + '@varlock/vite-integration@0.1.0': + resolution: {integrity: sha512-WXFXDpyV2aUtylxZnVxWRe7pvve1LQbS0BD73Gdio/7D24VK0EVpRXFt6RSeKyzxwLwzvumKVwV6VVIgnkKCjA==} + engines: {node: '>=22'} + peerDependencies: + varlock: ^0.1.0 + vite: '>=5' + '@vitejs/plugin-react-swc@3.11.0': resolution: {integrity: sha512-YTJCGFdNMHCMfjODYtxRNVAYmTWQ1Lb8PulP/2/f/oEEtglw8oKxKIZmmRkyXrVrHfsKOaVkAc3NT9/dMutO5w==} peerDependencies: @@ -3441,6 +3464,10 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} + execa@9.6.0: + resolution: {integrity: sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==} + engines: {node: ^18.19.0 || >=20.5.0} + exponential-backoff@3.1.3: resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==} @@ -3497,6 +3524,10 @@ packages: fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -3625,6 +3656,10 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} + get-symbol-description@1.1.0: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} @@ -3778,6 +3813,10 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} + human-signals@8.0.1: + resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} + engines: {node: '>=18.18.0'} + idb@7.1.1: resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} @@ -3966,6 +4005,10 @@ packages: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + is-string@1.1.1: resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} engines: {node: '>= 0.4'} @@ -3978,6 +4021,10 @@ packages: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + is-weakmap@2.0.2: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} @@ -4004,6 +4051,10 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isexe@3.1.1: + resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} + engines: {node: '>=16'} + isobject@3.0.1: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} @@ -4643,6 +4694,10 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} @@ -4733,6 +4788,10 @@ packages: parse-entities@4.0.2: resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} @@ -4752,6 +4811,10 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -4810,6 +4873,10 @@ packages: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + pretty-ms@9.3.0: + resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} + engines: {node: '>=18'} + prism-react-renderer@2.4.1: resolution: {integrity: sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==} peerDependencies: @@ -5393,6 +5460,10 @@ packages: resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} engines: {node: '>=10'} + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -5763,6 +5834,11 @@ packages: v8n@1.5.1: resolution: {integrity: sha512-LdabyT4OffkyXFCe9UT+uMkxNBs5rcTVuZClvxQr08D5TUgo1OFKkoT65qYRCsiKBl/usHjpXvP4hHMzzDRj3A==} + varlock@0.1.2: + resolution: {integrity: sha512-f3FuScvIIlcF0t6HZUxtSCwxuc96C2eDx/KYdIv648NdvNg+jCQc0l70782snSPT8Mc49J3GiCXh6aZcy/OIeg==} + engines: {node: '>=22'} + hasBin: true + vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -5918,6 +5994,11 @@ packages: engines: {node: '>= 8'} hasBin: true + which@5.0.0: + resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + widest-line@5.0.0: resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} engines: {node: '>=18'} @@ -6053,6 +6134,10 @@ packages: resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} engines: {node: '>=18'} + yoctocolors@2.1.2: + resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} + engines: {node: '>=18'} + zdog@1.1.3: resolution: {integrity: sha512-raRj6r0gPzopFm5XWBJZr/NuV4EEnT4iE+U3dp5FV5pCb588Gmm3zLIp/j9yqqcMiHH8VNQlerLTgOqL7krh6w==} @@ -6847,6 +6932,8 @@ snapshots: '@dimforge/rapier3d-compat@0.12.0': {} + '@env-spec/parser@0.0.7': {} + '@esbuild/aix-ppc64@0.25.12': optional: true @@ -8398,6 +8485,8 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.53.2': optional: true + '@sec-ant/readable-stream@0.4.1': {} + '@sentry-internal/browser-utils@8.55.0': dependencies: '@sentry/core': 8.55.0 @@ -8430,6 +8519,8 @@ snapshots: '@sindresorhus/merge-streams@2.3.0': {} + '@sindresorhus/merge-streams@4.0.0': {} + '@sinonjs/commons@3.0.1': dependencies: type-detect: 4.0.8 @@ -8797,6 +8888,14 @@ snapshots: '@use-gesture/core': 10.3.1 react: 19.2.0 + '@varlock/vite-integration@0.1.0(varlock@0.1.2)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))': + dependencies: + debug: 4.4.3 + varlock: 0.1.2 + vite: 7.2.2(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1) + transitivePeerDependencies: + - supports-color + '@vitejs/plugin-react-swc@3.11.0(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.27 @@ -9640,6 +9739,21 @@ snapshots: events@3.3.0: {} + execa@9.6.0: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.1 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.3.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.2 + exponential-backoff@3.1.3: {} extend-shallow@2.0.1: @@ -9687,6 +9801,10 @@ snapshots: fflate@0.8.2: {} + figures@6.1.0: + dependencies: + is-unicode-supported: 2.1.0 + file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -9812,6 +9930,11 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + get-symbol-description@1.1.0: dependencies: call-bound: 1.0.4 @@ -10058,6 +10181,8 @@ snapshots: transitivePeerDependencies: - supports-color + human-signals@8.0.1: {} + idb@7.1.1: {} ieee754@1.2.1: {} @@ -10223,6 +10348,8 @@ snapshots: is-stream@2.0.1: {} + is-stream@4.0.1: {} + is-string@1.1.1: dependencies: call-bound: 1.0.4 @@ -10238,6 +10365,8 @@ snapshots: dependencies: which-typed-array: 1.1.19 + is-unicode-supported@2.1.0: {} + is-weakmap@2.0.2: {} is-weakref@1.1.1: @@ -10261,6 +10390,8 @@ snapshots: isexe@2.0.0: {} + isexe@3.1.1: {} + isobject@3.0.1: {} istanbul-lib-coverage@3.2.2: {} @@ -11297,6 +11428,11 @@ snapshots: normalize-path@3.0.0: {} + npm-run-path@6.0.0: + dependencies: + path-key: 4.0.0 + unicorn-magic: 0.3.0 + nth-check@2.1.1: dependencies: boolbase: 1.0.0 @@ -11403,6 +11539,8 @@ snapshots: is-decimal: 2.0.1 is-hexadecimal: 2.0.1 + parse-ms@4.0.0: {} + parse5@7.3.0: dependencies: entities: 6.0.1 @@ -11415,6 +11553,8 @@ snapshots: path-key@3.1.1: {} + path-key@4.0.0: {} + path-parse@1.0.7: {} path-to-regexp@6.3.0: {} @@ -11455,6 +11595,10 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 + pretty-ms@9.3.0: + dependencies: + parse-ms: 4.0.0 + prism-react-renderer@2.4.1(react@19.2.0): dependencies: '@types/prismjs': 1.26.5 @@ -12255,6 +12399,8 @@ snapshots: strip-comments@2.0.1: {} + strip-final-newline@4.0.0: {} + strip-json-comments@3.1.1: {} style-to-js@1.1.19: @@ -12587,6 +12733,16 @@ snapshots: v8n@1.5.1: {} + varlock@0.1.2: + dependencies: + '@env-spec/parser': 0.0.7 + debug: 4.4.3 + execa: 9.6.0 + semver: 7.7.3 + which: 5.0.0 + transitivePeerDependencies: + - supports-color + vary@1.1.2: {} vfile-location@5.0.3: @@ -12723,6 +12879,10 @@ snapshots: dependencies: isexe: 2.0.0 + which@5.0.0: + dependencies: + isexe: 3.1.1 + widest-line@5.0.0: dependencies: string-width: 7.2.0 @@ -12901,6 +13061,8 @@ snapshots: yoctocolors-cjs@2.1.3: {} + yoctocolors@2.1.2: {} + zdog@1.1.3: {} zustand@3.7.2(react@19.2.0):