NERDDISCO commited on
Commit
946780b
·
1 Parent(s): 70b131f

docs(cyberpunk): added node / cli

Browse files
examples/cyberpunk-standalone/README.md CHANGED
@@ -1,11 +1,100 @@
1
- # React + TypeScript + Vite
2
 
3
- This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
4
 
5
- Currently, two official plugins are available:
6
 
7
- - [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) for Fast Refresh
8
- - [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
 
10
  ## Expanding the ESLint configuration
11
 
@@ -13,9 +102,9 @@ If you are developing a production application, we recommend updating the config
13
 
14
  ```js
15
  export default tseslint.config([
16
- globalIgnores(['dist']),
17
  {
18
- files: ['**/*.{ts,tsx}'],
19
  extends: [
20
  // Other configs...
21
 
@@ -30,40 +119,40 @@ export default tseslint.config([
30
  ],
31
  languageOptions: {
32
  parserOptions: {
33
- project: ['./tsconfig.node.json', './tsconfig.app.json'],
34
  tsconfigRootDir: import.meta.dirname,
35
  },
36
  // other options...
37
  },
38
  },
39
- ])
40
  ```
41
 
42
  You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:
43
 
44
  ```js
45
  // eslint.config.js
46
- import reactX from 'eslint-plugin-react-x'
47
- import reactDom from 'eslint-plugin-react-dom'
48
 
49
  export default tseslint.config([
50
- globalIgnores(['dist']),
51
  {
52
- files: ['**/*.{ts,tsx}'],
53
  extends: [
54
  // Other configs...
55
  // Enable lint rules for React
56
- reactX.configs['recommended-typescript'],
57
  // Enable lint rules for React DOM
58
  reactDom.configs.recommended,
59
  ],
60
  languageOptions: {
61
  parserOptions: {
62
- project: ['./tsconfig.node.json', './tsconfig.app.json'],
63
  tsconfigRootDir: import.meta.dirname,
64
  },
65
  // other options...
66
  },
67
  },
68
- ])
69
  ```
 
1
+ # lerobot.js - Cyberpunk Demo
2
 
3
+ **Real-world robotics control in the browser** - A comprehensive demonstration of lerobot.js capabilities with cyberpunk aesthetics.
4
 
5
+ 🚀 **[Try the live demo →](https://huggingface.co/spaces/NERDDISCO/LeRobot.js)**
6
 
7
+ ## What is lerobot.js?
8
+
9
+ **lerobot.js** is a TypeScript/JavaScript implementation of [Hugging Face lerobot](https://github.com/huggingface/lerobot) - bringing state-of-the-art AI for real-world robotics directly to the JavaScript ecosystem.
10
+
11
+ ### Available Packages
12
+
13
+ - **[@lerobot/web](https://www.npmjs.com/package/@lerobot/web)** - Browser robotics with Web Serial API
14
+ - **[@lerobot/node](https://www.npmjs.com/package/@lerobot/node)** - Node.js robotics library with serialport
15
+ - **[lerobot](https://www.npmjs.com/package/lerobot)** - CLI tool (Python lerobot compatible)
16
+
17
+ ## Quick Start
18
+
19
+ ### Browser (This Demo)
20
+
21
+ ```bash
22
+ # Clone and run this cyberpunk demo
23
+ git clone https://github.com/timpietrusky/lerobot.js
24
+ cd lerobot.js/examples/cyberpunk-standalone
25
+ pnpm install
26
+ pnpm dev
27
+ ```
28
+
29
+ Visit `http://localhost:5173` with Chrome/Edge 89+ and connect your robot hardware.
30
+
31
+ ### Node.js Library
32
+
33
+ ```bash
34
+ # Install the Node.js library
35
+ pnpm add @lerobot/node
36
+
37
+ # Use in your TypeScript/JavaScript project
38
+ import { findPort, calibrate, teleoperate } from "@lerobot/node";
39
+ ```
40
+
41
+ ### CLI (Python lerobot compatible)
42
+
43
+ ```bash
44
+ # Install globally
45
+ npm install -g lerobot
46
+
47
+ # Use identical commands to Python lerobot
48
+ lerobot find-port
49
+ lerobot calibrate --robot.type=so100_follower --robot.port=/dev/ttyUSB0 --robot.id=my_arm
50
+ lerobot teleoperate --robot.type=so100_follower --robot.port=/dev/ttyUSB0 --robot.id=my_arm
51
+ ```
52
+
53
+ ## This Demo
54
+
55
+ This cyberpunk-themed demo showcases the complete lerobot.js web capabilities:
56
+
57
+ - **Real-time robot control** in the browser
58
+ - **Interactive calibration** with live position feedback
59
+ - **Teleoperation** with keyboard and visual controls
60
+ - **Device management** with automatic reconnection
61
+ - **Data visualization** including motor positions and ranges
62
+ - **Modern UI** with cyberpunk aesthetics and responsive design
63
+
64
+ ## Hardware Requirements
65
+
66
+ - **Chromium 89+** browser (Chrome, Edge, Brave)
67
+ - **HTTPS or localhost** (Web Serial API requirement)
68
+ - **SO-100 robot arms** or compatible hardware
69
+ - **USB connection** to robot
70
+
71
+ ## Development
72
+
73
+ ### Running the Demo
74
+
75
+ ```bash
76
+ # Install dependencies
77
+ pnpm install
78
+
79
+ # Start development server
80
+ pnpm dev
81
+
82
+ # Build for production
83
+ pnpm build
84
+ ```
85
+
86
+ ### Project Structure
87
+
88
+ ```
89
+ src/
90
+ ├── components/ # React components
91
+ │ ├── calibration-view.tsx # Interactive calibration
92
+ │ ├── teleoperation-view.tsx # Robot control interface
93
+ │ ├── device-dashboard.tsx # Hardware management
94
+ │ └── docs-section.tsx # API documentation
95
+ ├── lib/ # Utilities
96
+ └── types/ # TypeScript definitions
97
+ ```
98
 
99
  ## Expanding the ESLint configuration
100
 
 
102
 
103
  ```js
104
  export default tseslint.config([
105
+ globalIgnores(["dist"]),
106
  {
107
+ files: ["**/*.{ts,tsx}"],
108
  extends: [
109
  // Other configs...
110
 
 
119
  ],
120
  languageOptions: {
121
  parserOptions: {
122
+ project: ["./tsconfig.node.json", "./tsconfig.app.json"],
123
  tsconfigRootDir: import.meta.dirname,
124
  },
125
  // other options...
126
  },
127
  },
128
+ ]);
129
  ```
130
 
131
  You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:
132
 
133
  ```js
134
  // eslint.config.js
135
+ import reactX from "eslint-plugin-react-x";
136
+ import reactDom from "eslint-plugin-react-dom";
137
 
138
  export default tseslint.config([
139
+ globalIgnores(["dist"]),
140
  {
141
+ files: ["**/*.{ts,tsx}"],
142
  extends: [
143
  // Other configs...
144
  // Enable lint rules for React
145
+ reactX.configs["recommended-typescript"],
146
  // Enable lint rules for React DOM
147
  reactDom.configs.recommended,
148
  ],
149
  languageOptions: {
150
  parserOptions: {
151
+ project: ["./tsconfig.node.json", "./tsconfig.app.json"],
152
  tsconfigRootDir: import.meta.dirname,
153
  },
154
  // other options...
155
  },
156
  },
157
+ ]);
158
  ```
examples/cyberpunk-standalone/package.json CHANGED
@@ -86,6 +86,6 @@
86
  "tailwindcss": "^3.4.17",
87
  "typescript": "^5",
88
  "typescript-eslint": "^8.34.1",
89
- "vite": "^7.0.0"
90
  }
91
  }
 
86
  "tailwindcss": "^3.4.17",
87
  "typescript": "^5",
88
  "typescript-eslint": "^8.34.1",
89
+ "vite": "^5.4.10"
90
  }
91
  }
examples/cyberpunk-standalone/pnpm-lock.yaml CHANGED
@@ -206,7 +206,7 @@ importers:
206
  version: 19.1.6(@types/react@19.1.8)
207
  '@vitejs/plugin-react':
208
  specifier: ^4.5.2
209
- version: 4.7.0(vite@7.0.6(@types/node@22.16.5)(jiti@1.21.7)(yaml@2.8.0))
210
  eslint:
211
  specifier: ^9.29.0
212
  version: 9.31.0(jiti@1.21.7)
@@ -232,8 +232,8 @@ importers:
232
  specifier: ^8.34.1
233
  version: 8.38.0(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3)
234
  vite:
235
- specifier: ^7.0.0
236
- version: 7.0.6(@types/node@22.16.5)(jiti@1.21.7)(yaml@2.8.0)
237
 
238
  packages:
239
 
@@ -272,116 +272,230 @@ packages:
272
  resolution: {integrity: sha512-tX5bUfqiLOh6jtAlaiAuOUKFYh8KDG9k9zFLUdgGplC5TP47AYTreUEg+deCTHo4DD3YCvrLuyZ8tIDgKu7neQ==}
273
  engines: {node: '>=18.0.0'}
274
 
 
 
 
 
275
  '@aws-sdk/client-sso@3.848.0':
276
  resolution: {integrity: sha512-mD+gOwoeZQvbecVLGoCmY6pS7kg02BHesbtIxUj+PeBqYoZV5uLvjUOmuGfw1SfoSobKvS11urxC9S7zxU/Maw==}
277
  engines: {node: '>=18.0.0'}
278
 
 
 
 
 
279
  '@aws-sdk/core@3.846.0':
280
  resolution: {integrity: sha512-7CX0pM906r4WSS68fCTNMTtBCSkTtf3Wggssmx13gD40gcWEZXsU00KzPp1bYheNRyPlAq3rE22xt4wLPXbuxA==}
281
  engines: {node: '>=18.0.0'}
282
 
 
 
 
 
283
  '@aws-sdk/credential-provider-env@3.846.0':
284
  resolution: {integrity: sha512-QuCQZET9enja7AWVISY+mpFrEIeHzvkx/JEEbHYzHhUkxcnC2Kq2c0bB7hDihGD0AZd3Xsm653hk1O97qu69zg==}
285
  engines: {node: '>=18.0.0'}
286
 
 
 
 
 
287
  '@aws-sdk/credential-provider-http@3.846.0':
288
  resolution: {integrity: sha512-Jh1iKUuepdmtreMYozV2ePsPcOF5W9p3U4tWhi3v6nDvz0GsBjzjAROW+BW8XMz9vAD3I9R+8VC3/aq63p5nlw==}
289
  engines: {node: '>=18.0.0'}
290
 
 
 
 
 
291
  '@aws-sdk/credential-provider-ini@3.848.0':
292
  resolution: {integrity: sha512-r6KWOG+En2xujuMhgZu7dzOZV3/M5U/5+PXrG8dLQ3rdPRB3vgp5tc56KMqLwm/EXKRzAOSuw/UE4HfNOAB8Hw==}
293
  engines: {node: '>=18.0.0'}
294
 
 
 
 
 
295
  '@aws-sdk/credential-provider-node@3.848.0':
296
  resolution: {integrity: sha512-AblNesOqdzrfyASBCo1xW3uweiSro4Kft9/htdxLeCVU1KVOnFWA5P937MNahViRmIQm2sPBCqL8ZG0u9lnh5g==}
297
  engines: {node: '>=18.0.0'}
298
 
 
 
 
 
299
  '@aws-sdk/credential-provider-process@3.846.0':
300
  resolution: {integrity: sha512-mEpwDYarJSH+CIXnnHN0QOe0MXI+HuPStD6gsv3z/7Q6ESl8KRWon3weFZCDnqpiJMUVavlDR0PPlAFg2MQoPg==}
301
  engines: {node: '>=18.0.0'}
302
 
 
 
 
 
303
  '@aws-sdk/credential-provider-sso@3.848.0':
304
  resolution: {integrity: sha512-pozlDXOwJZL0e7w+dqXLgzVDB7oCx4WvtY0sk6l4i07uFliWF/exupb6pIehFWvTUcOvn5aFTTqcQaEzAD5Wsg==}
305
  engines: {node: '>=18.0.0'}
306
 
 
 
 
 
307
  '@aws-sdk/credential-provider-web-identity@3.848.0':
308
  resolution: {integrity: sha512-D1fRpwPxtVDhcSc/D71exa2gYweV+ocp4D3brF0PgFd//JR3XahZ9W24rVnTQwYEcK9auiBZB89Ltv+WbWN8qw==}
309
  engines: {node: '>=18.0.0'}
310
 
 
 
 
 
311
  '@aws-sdk/lib-storage@3.850.0':
312
  resolution: {integrity: sha512-DKG8mKeUMLRboyqwhKiV9QOiKXN00OYLnGsT21mhlaF1Uc7OZ6Vm+Olw4YrbYSBuDup0rMWtVaWudJ49I+ZCHA==}
313
  engines: {node: '>=18.0.0'}
314
  peerDependencies:
315
  '@aws-sdk/client-s3': ^3.850.0
316
 
 
 
 
 
 
 
317
  '@aws-sdk/middleware-bucket-endpoint@3.840.0':
318
  resolution: {integrity: sha512-+gkQNtPwcSMmlwBHFd4saVVS11In6ID1HczNzpM3MXKXRBfSlbZJbCt6wN//AZ8HMklZEik4tcEOG0qa9UY8SQ==}
319
  engines: {node: '>=18.0.0'}
320
 
 
 
 
 
321
  '@aws-sdk/middleware-expect-continue@3.840.0':
322
  resolution: {integrity: sha512-iJg2r6FKsKKvdiU4oCOuCf7Ro/YE0Q2BT/QyEZN3/Rt8Nr4SAZiQOlcBXOCpGvuIKOEAhvDOUnW3aDHL01PdVw==}
323
  engines: {node: '>=18.0.0'}
324
 
 
 
 
 
325
  '@aws-sdk/middleware-flexible-checksums@3.846.0':
326
  resolution: {integrity: sha512-CdkeVfkwt3+bDLhmOwBxvkUf6oY9iUhvosaUnqkoPsOqIiUEN54yTGOnO8A0wLz6mMsZ6aBlfFrQhFnxt3c+yw==}
327
  engines: {node: '>=18.0.0'}
328
 
 
 
 
 
329
  '@aws-sdk/middleware-host-header@3.840.0':
330
  resolution: {integrity: sha512-ub+hXJAbAje94+Ya6c6eL7sYujoE8D4Bumu1NUI8TXjUhVVn0HzVWQjpRLshdLsUp1AW7XyeJaxyajRaJQ8+Xg==}
331
  engines: {node: '>=18.0.0'}
332
 
 
 
 
 
333
  '@aws-sdk/middleware-location-constraint@3.840.0':
334
  resolution: {integrity: sha512-KVLD0u0YMF3aQkVF8bdyHAGWSUY6N1Du89htTLgqCcIhSxxAJ9qifrosVZ9jkAzqRW99hcufyt2LylcVU2yoKQ==}
335
  engines: {node: '>=18.0.0'}
336
 
 
 
 
 
337
  '@aws-sdk/middleware-logger@3.840.0':
338
  resolution: {integrity: sha512-lSV8FvjpdllpGaRspywss4CtXV8M7NNNH+2/j86vMH+YCOZ6fu2T/TyFd/tHwZ92vDfHctWkRbQxg0bagqwovA==}
339
  engines: {node: '>=18.0.0'}
340
 
 
 
 
 
341
  '@aws-sdk/middleware-recursion-detection@3.840.0':
342
  resolution: {integrity: sha512-Gu7lGDyfddyhIkj1Z1JtrY5NHb5+x/CRiB87GjaSrKxkDaydtX2CU977JIABtt69l9wLbcGDIQ+W0uJ5xPof7g==}
343
  engines: {node: '>=18.0.0'}
344
 
 
 
 
 
345
  '@aws-sdk/middleware-sdk-s3@3.846.0':
346
  resolution: {integrity: sha512-jP9x+2Q87J5l8FOP+jlAd7vGLn0cC6G9QGmf386e5OslBPqxXKcl3RjqGLIOKKos2mVItY3ApP5xdXQx7jGTVA==}
347
  engines: {node: '>=18.0.0'}
348
 
 
 
 
 
349
  '@aws-sdk/middleware-ssec@3.840.0':
350
  resolution: {integrity: sha512-CBZP9t1QbjDFGOrtnUEHL1oAvmnCUUm7p0aPNbIdSzNtH42TNKjPRN3TuEIJDGjkrqpL3MXyDSmNayDcw/XW7Q==}
351
  engines: {node: '>=18.0.0'}
352
 
 
 
 
 
353
  '@aws-sdk/middleware-user-agent@3.848.0':
354
  resolution: {integrity: sha512-rjMuqSWJEf169/ByxvBqfdei1iaduAnfolTshsZxwcmLIUtbYrFUmts0HrLQqsAG8feGPpDLHA272oPl+NTCCA==}
355
  engines: {node: '>=18.0.0'}
356
 
 
 
 
 
357
  '@aws-sdk/nested-clients@3.848.0':
358
  resolution: {integrity: sha512-joLsyyo9u61jnZuyYzo1z7kmS7VgWRAkzSGESVzQHfOA1H2PYeUFek6vLT4+c9xMGrX/Z6B0tkRdzfdOPiatLg==}
359
  engines: {node: '>=18.0.0'}
360
 
 
 
 
 
361
  '@aws-sdk/region-config-resolver@3.840.0':
362
  resolution: {integrity: sha512-Qjnxd/yDv9KpIMWr90ZDPtRj0v75AqGC92Lm9+oHXZ8p1MjG5JE2CW0HL8JRgK9iKzgKBL7pPQRXI8FkvEVfrA==}
363
  engines: {node: '>=18.0.0'}
364
 
 
 
 
 
365
  '@aws-sdk/signature-v4-multi-region@3.846.0':
366
  resolution: {integrity: sha512-ZMfIMxUljqZzPJGOcraC6erwq/z1puNMU35cO1a/WdhB+LdYknMn1lr7SJuH754QwNzzIlZbEgg4hoHw50+DpQ==}
367
  engines: {node: '>=18.0.0'}
368
 
 
 
 
 
369
  '@aws-sdk/token-providers@3.848.0':
370
  resolution: {integrity: sha512-oNPyM4+Di2Umu0JJRFSxDcKQ35+Chl/rAwD47/bS0cDPI8yrao83mLXLeDqpRPHyQW4sXlP763FZcuAibC0+mg==}
371
  engines: {node: '>=18.0.0'}
372
 
 
 
 
 
373
  '@aws-sdk/types@3.840.0':
374
  resolution: {integrity: sha512-xliuHaUFZxEx1NSXeLLZ9Dyu6+EJVQKEoD+yM+zqUo3YDZ7medKJWY6fIOKiPX/N7XbLdBYwajb15Q7IL8KkeA==}
375
  engines: {node: '>=18.0.0'}
376
 
 
 
 
 
377
  '@aws-sdk/util-arn-parser@3.804.0':
378
  resolution: {integrity: sha512-wmBJqn1DRXnZu3b4EkE6CWnoWMo1ZMvlfkqU5zPz67xx1GMaXlDCchFvKAXMjk4jn/L1O3tKnoFDNsoLV1kgNQ==}
379
  engines: {node: '>=18.0.0'}
380
 
 
 
 
 
381
  '@aws-sdk/util-endpoints@3.848.0':
382
  resolution: {integrity: sha512-fY/NuFFCq/78liHvRyFKr+aqq1aA/uuVSANjzr5Ym8c+9Z3HRPE9OrExAHoMrZ6zC8tHerQwlsXYYH5XZ7H+ww==}
383
  engines: {node: '>=18.0.0'}
384
 
 
 
 
 
385
  '@aws-sdk/util-locate-window@3.804.0':
386
  resolution: {integrity: sha512-zVoRfpmBVPodYlnMjgVjfGoEZagyRF5IPn3Uo6ZvOZp24chnW/FRstH7ESDHDDRga4z3V+ElUQHKpFDXWyBW5A==}
387
  engines: {node: '>=18.0.0'}
@@ -389,6 +503,9 @@ packages:
389
  '@aws-sdk/util-user-agent-browser@3.840.0':
390
  resolution: {integrity: sha512-JdyZM3EhhL4PqwFpttZu1afDpPJCCc3eyZOLi+srpX11LsGj6sThf47TYQN75HT1CarZ7cCdQHGzP2uy3/xHfQ==}
391
 
 
 
 
392
  '@aws-sdk/util-user-agent-node@3.848.0':
393
  resolution: {integrity: sha512-Zz1ft9NiLqbzNj/M0jVNxaoxI2F4tGXN0ZbZIj+KJ+PbJo+w5+Jo6d0UDAtbj3AEd79pjcCaP4OA9NTVzItUdw==}
394
  engines: {node: '>=18.0.0'}
@@ -398,10 +515,23 @@ packages:
398
  aws-crt:
399
  optional: true
400
 
 
 
 
 
 
 
 
 
 
401
  '@aws-sdk/xml-builder@3.821.0':
402
  resolution: {integrity: sha512-DIIotRnefVL6DiaHtO6/21DhJ4JZnnIwdNbpwiAhdt/AVbttcE4yw925gsjur0OGv5BTYXQXU3YnANBYnZjuQA==}
403
  engines: {node: '>=18.0.0'}
404
 
 
 
 
 
405
  '@babel/code-frame@7.27.1':
406
  resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
407
  engines: {node: '>=6.9.0'}
@@ -492,159 +622,141 @@ packages:
492
  '@dimforge/rapier3d-compat@0.12.0':
493
  resolution: {integrity: sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow==}
494
 
495
- '@esbuild/aix-ppc64@0.25.8':
496
- resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==}
497
- engines: {node: '>=18'}
498
  cpu: [ppc64]
499
  os: [aix]
500
 
501
- '@esbuild/android-arm64@0.25.8':
502
- resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==}
503
- engines: {node: '>=18'}
504
  cpu: [arm64]
505
  os: [android]
506
 
507
- '@esbuild/android-arm@0.25.8':
508
- resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==}
509
- engines: {node: '>=18'}
510
  cpu: [arm]
511
  os: [android]
512
 
513
- '@esbuild/android-x64@0.25.8':
514
- resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==}
515
- engines: {node: '>=18'}
516
  cpu: [x64]
517
  os: [android]
518
 
519
- '@esbuild/darwin-arm64@0.25.8':
520
- resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==}
521
- engines: {node: '>=18'}
522
  cpu: [arm64]
523
  os: [darwin]
524
 
525
- '@esbuild/darwin-x64@0.25.8':
526
- resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==}
527
- engines: {node: '>=18'}
528
  cpu: [x64]
529
  os: [darwin]
530
 
531
- '@esbuild/freebsd-arm64@0.25.8':
532
- resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==}
533
- engines: {node: '>=18'}
534
  cpu: [arm64]
535
  os: [freebsd]
536
 
537
- '@esbuild/freebsd-x64@0.25.8':
538
- resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==}
539
- engines: {node: '>=18'}
540
  cpu: [x64]
541
  os: [freebsd]
542
 
543
- '@esbuild/linux-arm64@0.25.8':
544
- resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==}
545
- engines: {node: '>=18'}
546
  cpu: [arm64]
547
  os: [linux]
548
 
549
- '@esbuild/linux-arm@0.25.8':
550
- resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==}
551
- engines: {node: '>=18'}
552
  cpu: [arm]
553
  os: [linux]
554
 
555
- '@esbuild/linux-ia32@0.25.8':
556
- resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==}
557
- engines: {node: '>=18'}
558
  cpu: [ia32]
559
  os: [linux]
560
 
561
- '@esbuild/linux-loong64@0.25.8':
562
- resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==}
563
- engines: {node: '>=18'}
564
  cpu: [loong64]
565
  os: [linux]
566
 
567
- '@esbuild/linux-mips64el@0.25.8':
568
- resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==}
569
- engines: {node: '>=18'}
570
  cpu: [mips64el]
571
  os: [linux]
572
 
573
- '@esbuild/linux-ppc64@0.25.8':
574
- resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==}
575
- engines: {node: '>=18'}
576
  cpu: [ppc64]
577
  os: [linux]
578
 
579
- '@esbuild/linux-riscv64@0.25.8':
580
- resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==}
581
- engines: {node: '>=18'}
582
  cpu: [riscv64]
583
  os: [linux]
584
 
585
- '@esbuild/linux-s390x@0.25.8':
586
- resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==}
587
- engines: {node: '>=18'}
588
  cpu: [s390x]
589
  os: [linux]
590
 
591
- '@esbuild/linux-x64@0.25.8':
592
- resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==}
593
- engines: {node: '>=18'}
594
  cpu: [x64]
595
  os: [linux]
596
 
597
- '@esbuild/netbsd-arm64@0.25.8':
598
- resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==}
599
- engines: {node: '>=18'}
600
- cpu: [arm64]
601
- os: [netbsd]
602
-
603
- '@esbuild/netbsd-x64@0.25.8':
604
- resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==}
605
- engines: {node: '>=18'}
606
  cpu: [x64]
607
  os: [netbsd]
608
 
609
- '@esbuild/openbsd-arm64@0.25.8':
610
- resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==}
611
- engines: {node: '>=18'}
612
- cpu: [arm64]
613
- os: [openbsd]
614
-
615
- '@esbuild/openbsd-x64@0.25.8':
616
- resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==}
617
- engines: {node: '>=18'}
618
  cpu: [x64]
619
  os: [openbsd]
620
 
621
- '@esbuild/openharmony-arm64@0.25.8':
622
- resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==}
623
- engines: {node: '>=18'}
624
- cpu: [arm64]
625
- os: [openharmony]
626
-
627
- '@esbuild/sunos-x64@0.25.8':
628
- resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==}
629
- engines: {node: '>=18'}
630
  cpu: [x64]
631
  os: [sunos]
632
 
633
- '@esbuild/win32-arm64@0.25.8':
634
- resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==}
635
- engines: {node: '>=18'}
636
  cpu: [arm64]
637
  os: [win32]
638
 
639
- '@esbuild/win32-ia32@0.25.8':
640
- resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==}
641
- engines: {node: '>=18'}
642
  cpu: [ia32]
643
  os: [win32]
644
 
645
- '@esbuild/win32-x64@0.25.8':
646
- resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==}
647
- engines: {node: '>=18'}
648
  cpu: [x64]
649
  os: [win32]
650
 
@@ -1664,6 +1776,10 @@ packages:
1664
  resolution: {integrity: sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==}
1665
  engines: {node: '>=18.0.0'}
1666
 
 
 
 
 
1667
  '@smithy/chunked-blob-reader-native@4.0.0':
1668
  resolution: {integrity: sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig==}
1669
  engines: {node: '>=18.0.0'}
@@ -1676,54 +1792,106 @@ packages:
1676
  resolution: {integrity: sha512-prmU+rDddxHOH0oNcwemL+SwnzcG65sBF2yXRO7aeXIn/xTlq2pX7JLVbkBnVLowHLg4/OL4+jBmv9hVrVGS+w==}
1677
  engines: {node: '>=18.0.0'}
1678
 
 
 
 
 
1679
  '@smithy/core@3.7.2':
1680
  resolution: {integrity: sha512-JoLw59sT5Bm8SAjFCYZyuCGxK8y3vovmoVbZWLDPTH5XpPEIwpFd9m90jjVMwoypDuB/SdVgje5Y4T7w50lJaw==}
1681
  engines: {node: '>=18.0.0'}
1682
 
 
 
 
 
1683
  '@smithy/credential-provider-imds@4.0.6':
1684
  resolution: {integrity: sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw==}
1685
  engines: {node: '>=18.0.0'}
1686
 
 
 
 
 
1687
  '@smithy/eventstream-codec@4.0.4':
1688
  resolution: {integrity: sha512-7XoWfZqWb/QoR/rAU4VSi0mWnO2vu9/ltS6JZ5ZSZv0eovLVfDfu0/AX4ub33RsJTOth3TiFWSHS5YdztvFnig==}
1689
  engines: {node: '>=18.0.0'}
1690
 
 
 
 
 
1691
  '@smithy/eventstream-serde-browser@4.0.4':
1692
  resolution: {integrity: sha512-3fb/9SYaYqbpy/z/H3yIi0bYKyAa89y6xPmIqwr2vQiUT2St+avRt8UKwsWt9fEdEasc5d/V+QjrviRaX1JRFA==}
1693
  engines: {node: '>=18.0.0'}
1694
 
 
 
 
 
1695
  '@smithy/eventstream-serde-config-resolver@4.1.2':
1696
  resolution: {integrity: sha512-JGtambizrWP50xHgbzZI04IWU7LdI0nh/wGbqH3sJesYToMi2j/DcoElqyOcqEIG/D4tNyxgRuaqBXWE3zOFhQ==}
1697
  engines: {node: '>=18.0.0'}
1698
 
 
 
 
 
1699
  '@smithy/eventstream-serde-node@4.0.4':
1700
  resolution: {integrity: sha512-RD6UwNZ5zISpOWPuhVgRz60GkSIp0dy1fuZmj4RYmqLVRtejFqQ16WmfYDdoSoAjlp1LX+FnZo+/hkdmyyGZ1w==}
1701
  engines: {node: '>=18.0.0'}
1702
 
 
 
 
 
1703
  '@smithy/eventstream-serde-universal@4.0.4':
1704
  resolution: {integrity: sha512-UeJpOmLGhq1SLox79QWw/0n2PFX+oPRE1ZyRMxPIaFEfCqWaqpB7BU9C8kpPOGEhLF7AwEqfFbtwNxGy4ReENA==}
1705
  engines: {node: '>=18.0.0'}
1706
 
 
 
 
 
1707
  '@smithy/fetch-http-handler@5.1.0':
1708
  resolution: {integrity: sha512-mADw7MS0bYe2OGKkHYMaqarOXuDwRbO6ArD91XhHcl2ynjGCFF+hvqf0LyQcYxkA1zaWjefSkU7Ne9mqgApSgQ==}
1709
  engines: {node: '>=18.0.0'}
1710
 
 
 
 
 
1711
  '@smithy/hash-blob-browser@4.0.4':
1712
  resolution: {integrity: sha512-WszRiACJiQV3QG6XMV44i5YWlkrlsM5Yxgz4jvsksuu7LDXA6wAtypfPajtNTadzpJy3KyJPoWehYpmZGKUFIQ==}
1713
  engines: {node: '>=18.0.0'}
1714
 
 
 
 
 
1715
  '@smithy/hash-node@4.0.4':
1716
  resolution: {integrity: sha512-qnbTPUhCVnCgBp4z4BUJUhOEkVwxiEi1cyFM+Zj6o+aY8OFGxUQleKWq8ltgp3dujuhXojIvJWdoqpm6dVO3lQ==}
1717
  engines: {node: '>=18.0.0'}
1718
 
 
 
 
 
1719
  '@smithy/hash-stream-node@4.0.4':
1720
  resolution: {integrity: sha512-wHo0d8GXyVmpmMh/qOR0R7Y46/G1y6OR8U+bSTB4ppEzRxd1xVAQ9xOE9hOc0bSjhz0ujCPAbfNLkLrpa6cevg==}
1721
  engines: {node: '>=18.0.0'}
1722
 
 
 
 
 
1723
  '@smithy/invalid-dependency@4.0.4':
1724
  resolution: {integrity: sha512-bNYMi7WKTJHu0gn26wg8OscncTt1t2b8KcsZxvOv56XA6cyXtOAAAaNP7+m45xfppXfOatXF3Sb1MNsLUgVLTw==}
1725
  engines: {node: '>=18.0.0'}
1726
 
 
 
 
 
1727
  '@smithy/is-array-buffer@2.2.0':
1728
  resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==}
1729
  engines: {node: '>=14.0.0'}
@@ -1736,74 +1904,146 @@ packages:
1736
  resolution: {integrity: sha512-uGLBVqcOwrLvGh/v/jw423yWHq/ofUGK1W31M2TNspLQbUV1Va0F5kTxtirkoHawODAZcjXTSGi7JwbnPcDPJg==}
1737
  engines: {node: '>=18.0.0'}
1738
 
 
 
 
 
1739
  '@smithy/middleware-content-length@4.0.4':
1740
  resolution: {integrity: sha512-F7gDyfI2BB1Kc+4M6rpuOLne5LOcEknH1n6UQB69qv+HucXBR1rkzXBnQTB2q46sFy1PM/zuSJOB532yc8bg3w==}
1741
  engines: {node: '>=18.0.0'}
1742
 
 
 
 
 
1743
  '@smithy/middleware-endpoint@4.1.17':
1744
  resolution: {integrity: sha512-S3hSGLKmHG1m35p/MObQCBCdRsrpbPU8B129BVzRqRfDvQqPMQ14iO4LyRw+7LNizYc605COYAcjqgawqi+6jA==}
1745
  engines: {node: '>=18.0.0'}
1746
 
 
 
 
 
1747
  '@smithy/middleware-retry@4.1.18':
1748
  resolution: {integrity: sha512-bYLZ4DkoxSsPxpdmeapvAKy7rM5+25gR7PGxq2iMiecmbrRGBHj9s75N74Ylg+aBiw9i5jIowC/cLU2NR0qH8w==}
1749
  engines: {node: '>=18.0.0'}
1750
 
 
 
 
 
1751
  '@smithy/middleware-serde@4.0.8':
1752
  resolution: {integrity: sha512-iSSl7HJoJaGyMIoNn2B7czghOVwJ9nD7TMvLhMWeSB5vt0TnEYyRRqPJu/TqW76WScaNvYYB8nRoiBHR9S1Ddw==}
1753
  engines: {node: '>=18.0.0'}
1754
 
 
 
 
 
1755
  '@smithy/middleware-stack@4.0.4':
1756
  resolution: {integrity: sha512-kagK5ggDrBUCCzI93ft6DjteNSfY8Ulr83UtySog/h09lTIOAJ/xUSObutanlPT0nhoHAkpmW9V5K8oPyLh+QA==}
1757
  engines: {node: '>=18.0.0'}
1758
 
 
 
 
 
1759
  '@smithy/node-config-provider@4.1.3':
1760
  resolution: {integrity: sha512-HGHQr2s59qaU1lrVH6MbLlmOBxadtzTsoO4c+bF5asdgVik3I8o7JIOzoeqWc5MjVa+vD36/LWE0iXKpNqooRw==}
1761
  engines: {node: '>=18.0.0'}
1762
 
 
 
 
 
1763
  '@smithy/node-http-handler@4.1.0':
1764
  resolution: {integrity: sha512-vqfSiHz2v8b3TTTrdXi03vNz1KLYYS3bhHCDv36FYDqxT7jvTll1mMnCrkD+gOvgwybuunh/2VmvOMqwBegxEg==}
1765
  engines: {node: '>=18.0.0'}
1766
 
 
 
 
 
1767
  '@smithy/property-provider@4.0.4':
1768
  resolution: {integrity: sha512-qHJ2sSgu4FqF4U/5UUp4DhXNmdTrgmoAai6oQiM+c5RZ/sbDwJ12qxB1M6FnP+Tn/ggkPZf9ccn4jqKSINaquw==}
1769
  engines: {node: '>=18.0.0'}
1770
 
 
 
 
 
1771
  '@smithy/protocol-http@5.1.2':
1772
  resolution: {integrity: sha512-rOG5cNLBXovxIrICSBm95dLqzfvxjEmuZx4KK3hWwPFHGdW3lxY0fZNXfv2zebfRO7sJZ5pKJYHScsqopeIWtQ==}
1773
  engines: {node: '>=18.0.0'}
1774
 
 
 
 
 
1775
  '@smithy/querystring-builder@4.0.4':
1776
  resolution: {integrity: sha512-SwREZcDnEYoh9tLNgMbpop+UTGq44Hl9tdj3rf+yeLcfH7+J8OXEBaMc2kDxtyRHu8BhSg9ADEx0gFHvpJgU8w==}
1777
  engines: {node: '>=18.0.0'}
1778
 
 
 
 
 
1779
  '@smithy/querystring-parser@4.0.4':
1780
  resolution: {integrity: sha512-6yZf53i/qB8gRHH/l2ZwUG5xgkPgQF15/KxH0DdXMDHjesA9MeZje/853ifkSY0x4m5S+dfDZ+c4x439PF0M2w==}
1781
  engines: {node: '>=18.0.0'}
1782
 
 
 
 
 
1783
  '@smithy/service-error-classification@4.0.6':
1784
  resolution: {integrity: sha512-RRoTDL//7xi4tn5FrN2NzH17jbgmnKidUqd4KvquT0954/i6CXXkh1884jBiunq24g9cGtPBEXlU40W6EpNOOg==}
1785
  engines: {node: '>=18.0.0'}
1786
 
 
 
 
 
1787
  '@smithy/shared-ini-file-loader@4.0.4':
1788
  resolution: {integrity: sha512-63X0260LoFBjrHifPDs+nM9tV0VMkOTl4JRMYNuKh/f5PauSjowTfvF3LogfkWdcPoxsA9UjqEOgjeYIbhb7Nw==}
1789
  engines: {node: '>=18.0.0'}
1790
 
 
 
 
 
1791
  '@smithy/signature-v4@5.1.2':
1792
  resolution: {integrity: sha512-d3+U/VpX7a60seHziWnVZOHuEgJlclufjkS6zhXvxcJgkJq4UWdH5eOBLzHRMx6gXjsdT9h6lfpmLzbrdupHgQ==}
1793
  engines: {node: '>=18.0.0'}
1794
 
 
 
 
 
1795
  '@smithy/smithy-client@4.4.9':
1796
  resolution: {integrity: sha512-mbMg8mIUAWwMmb74LoYiArP04zWElPzDoA1jVOp3or0cjlDMgoS6WTC3QXK0Vxoc9I4zdrX0tq6qsOmaIoTWEQ==}
1797
  engines: {node: '>=18.0.0'}
1798
 
 
 
 
 
1799
  '@smithy/types@4.3.1':
1800
  resolution: {integrity: sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==}
1801
  engines: {node: '>=18.0.0'}
1802
 
 
 
 
 
1803
  '@smithy/url-parser@4.0.4':
1804
  resolution: {integrity: sha512-eMkc144MuN7B0TDA4U2fKs+BqczVbk3W+qIvcoCY6D1JY3hnAdCuhCZODC+GAeaxj0p6Jroz4+XMUn3PCxQQeQ==}
1805
  engines: {node: '>=18.0.0'}
1806
 
 
 
 
 
1807
  '@smithy/util-base64@4.0.0':
1808
  resolution: {integrity: sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==}
1809
  engines: {node: '>=18.0.0'}
@@ -1832,14 +2072,26 @@ packages:
1832
  resolution: {integrity: sha512-pxEWsxIsOPLfKNXvpgFHBGFC3pKYKUFhrud1kyooO9CJai6aaKDHfT10Mi5iiipPXN/JhKAu3qX9o75+X85OdQ==}
1833
  engines: {node: '>=18.0.0'}
1834
 
 
 
 
 
1835
  '@smithy/util-defaults-mode-node@4.0.25':
1836
  resolution: {integrity: sha512-+w4n4hKFayeCyELZLfsSQG5mCC3TwSkmRHv4+el5CzFU8ToQpYGhpV7mrRzqlwKkntlPilT1HJy1TVeEvEjWOQ==}
1837
  engines: {node: '>=18.0.0'}
1838
 
 
 
 
 
1839
  '@smithy/util-endpoints@3.0.6':
1840
  resolution: {integrity: sha512-YARl3tFL3WgPuLzljRUnrS2ngLiUtkwhQtj8PAL13XZSyUiNLQxwG3fBBq3QXFqGFUXepIN73pINp3y8c2nBmA==}
1841
  engines: {node: '>=18.0.0'}
1842
 
 
 
 
 
1843
  '@smithy/util-hex-encoding@4.0.0':
1844
  resolution: {integrity: sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==}
1845
  engines: {node: '>=18.0.0'}
@@ -1848,14 +2100,26 @@ packages:
1848
  resolution: {integrity: sha512-9MLKmkBmf4PRb0ONJikCbCwORACcil6gUWojwARCClT7RmLzF04hUR4WdRprIXal7XVyrddadYNfp2eF3nrvtQ==}
1849
  engines: {node: '>=18.0.0'}
1850
 
 
 
 
 
1851
  '@smithy/util-retry@4.0.6':
1852
  resolution: {integrity: sha512-+YekoF2CaSMv6zKrA6iI/N9yva3Gzn4L6n35Luydweu5MMPYpiGZlWqehPHDHyNbnyaYlz/WJyYAZnC+loBDZg==}
1853
  engines: {node: '>=18.0.0'}
1854
 
 
 
 
 
1855
  '@smithy/util-stream@4.2.3':
1856
  resolution: {integrity: sha512-cQn412DWHHFNKrQfbHY8vSFI3nTROY1aIKji9N0tpp8gUABRilr7wdf8fqBbSlXresobM+tQFNk6I+0LXK/YZg==}
1857
  engines: {node: '>=18.0.0'}
1858
 
 
 
 
 
1859
  '@smithy/util-uri-escape@4.0.0':
1860
  resolution: {integrity: sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==}
1861
  engines: {node: '>=18.0.0'}
@@ -1872,6 +2136,10 @@ packages:
1872
  resolution: {integrity: sha512-slcr1wdRbX7NFphXZOxtxRNA7hXAAtJAXJDE/wdoMAos27SIquVCKiSqfB6/28YzQ8FCsB5NKkhdM5gMADbqxg==}
1873
  engines: {node: '>=18.0.0'}
1874
 
 
 
 
 
1875
  '@swc/helpers@0.5.17':
1876
  resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
1877
 
@@ -2375,9 +2643,9 @@ packages:
2375
  emoji-regex@9.2.2:
2376
  resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
2377
 
2378
- esbuild@0.25.8:
2379
- resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==}
2380
- engines: {node: '>=18'}
2381
  hasBin: true
2382
 
2383
  escalade@3.2.0:
@@ -2475,14 +2743,6 @@ packages:
2475
  fault@1.0.4:
2476
  resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==}
2477
 
2478
- fdir@6.4.6:
2479
- resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==}
2480
- peerDependencies:
2481
- picomatch: ^3 || ^4
2482
- peerDependenciesMeta:
2483
- picomatch:
2484
- optional: true
2485
-
2486
  fflate@0.6.10:
2487
  resolution: {integrity: sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==}
2488
 
@@ -2891,10 +3151,6 @@ packages:
2891
  resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
2892
  engines: {node: '>=8.6'}
2893
 
2894
- picomatch@4.0.3:
2895
- resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
2896
- engines: {node: '>=12'}
2897
-
2898
  pify@2.3.0:
2899
  resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
2900
  engines: {node: '>=0.10.0'}
@@ -3297,10 +3553,6 @@ packages:
3297
  tiny-invariant@1.3.3:
3298
  resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
3299
 
3300
- tinyglobby@0.2.14:
3301
- resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
3302
- engines: {node: '>=12.0.0'}
3303
-
3304
  to-regex-range@5.0.1:
3305
  resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
3306
  engines: {node: '>=8.0'}
@@ -3413,27 +3665,22 @@ packages:
3413
  victory-vendor@36.9.2:
3414
  resolution: {integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==}
3415
 
3416
- vite@7.0.6:
3417
- resolution: {integrity: sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==}
3418
- engines: {node: ^20.19.0 || >=22.12.0}
3419
  hasBin: true
3420
  peerDependencies:
3421
- '@types/node': ^20.19.0 || >=22.12.0
3422
- jiti: '>=1.21.0'
3423
- less: ^4.0.0
3424
  lightningcss: ^1.21.0
3425
- sass: ^1.70.0
3426
- sass-embedded: ^1.70.0
3427
- stylus: '>=0.54.8'
3428
- sugarss: ^5.0.0
3429
- terser: ^5.16.0
3430
- tsx: ^4.8.1
3431
- yaml: ^2.4.2
3432
  peerDependenciesMeta:
3433
  '@types/node':
3434
  optional: true
3435
- jiti:
3436
- optional: true
3437
  less:
3438
  optional: true
3439
  lightningcss:
@@ -3448,10 +3695,6 @@ packages:
3448
  optional: true
3449
  terser:
3450
  optional: true
3451
- tsx:
3452
- optional: true
3453
- yaml:
3454
- optional: true
3455
 
3456
  webgl-constants@1.1.1:
3457
  resolution: {integrity: sha512-LkBXKjU5r9vAW7Gcu3T5u+5cvSvh5WwINdr0C+9jpzVB41cjQAP5ePArDtk/WHYdVj0GefCgM73BA7FlIiNtdg==}
@@ -3651,6 +3894,69 @@ snapshots:
3651
  transitivePeerDependencies:
3652
  - aws-crt
3653
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3654
  '@aws-sdk/client-sso@3.848.0':
3655
  dependencies:
3656
  '@aws-crypto/sha256-browser': 5.2.0
@@ -3694,6 +4000,49 @@ snapshots:
3694
  transitivePeerDependencies:
3695
  - aws-crt
3696
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3697
  '@aws-sdk/core@3.846.0':
3698
  dependencies:
3699
  '@aws-sdk/types': 3.840.0
@@ -3712,6 +4061,24 @@ snapshots:
3712
  fast-xml-parser: 5.2.5
3713
  tslib: 2.8.1
3714
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3715
  '@aws-sdk/credential-provider-env@3.846.0':
3716
  dependencies:
3717
  '@aws-sdk/core': 3.846.0
@@ -3720,6 +4087,14 @@ snapshots:
3720
  '@smithy/types': 4.3.1
3721
  tslib: 2.8.1
3722
 
 
 
 
 
 
 
 
 
3723
  '@aws-sdk/credential-provider-http@3.846.0':
3724
  dependencies:
3725
  '@aws-sdk/core': 3.846.0
@@ -3733,6 +4108,19 @@ snapshots:
3733
  '@smithy/util-stream': 4.2.3
3734
  tslib: 2.8.1
3735
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3736
  '@aws-sdk/credential-provider-ini@3.848.0':
3737
  dependencies:
3738
  '@aws-sdk/core': 3.846.0
@@ -3751,6 +4139,24 @@ snapshots:
3751
  transitivePeerDependencies:
3752
  - aws-crt
3753
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3754
  '@aws-sdk/credential-provider-node@3.848.0':
3755
  dependencies:
3756
  '@aws-sdk/credential-provider-env': 3.846.0
@@ -3768,7 +4174,24 @@ snapshots:
3768
  transitivePeerDependencies:
3769
  - aws-crt
3770
 
3771
- '@aws-sdk/credential-provider-process@3.846.0':
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3772
  dependencies:
3773
  '@aws-sdk/core': 3.846.0
3774
  '@aws-sdk/types': 3.840.0
@@ -3777,6 +4200,15 @@ snapshots:
3777
  '@smithy/types': 4.3.1
3778
  tslib: 2.8.1
3779
 
 
 
 
 
 
 
 
 
 
3780
  '@aws-sdk/credential-provider-sso@3.848.0':
3781
  dependencies:
3782
  '@aws-sdk/client-sso': 3.848.0
@@ -3790,6 +4222,19 @@ snapshots:
3790
  transitivePeerDependencies:
3791
  - aws-crt
3792
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3793
  '@aws-sdk/credential-provider-web-identity@3.848.0':
3794
  dependencies:
3795
  '@aws-sdk/core': 3.846.0
@@ -3801,6 +4246,17 @@ snapshots:
3801
  transitivePeerDependencies:
3802
  - aws-crt
3803
 
 
 
 
 
 
 
 
 
 
 
 
3804
  '@aws-sdk/lib-storage@3.850.0(@aws-sdk/client-s3@3.850.0)':
3805
  dependencies:
3806
  '@aws-sdk/client-s3': 3.850.0
@@ -3812,6 +4268,17 @@ snapshots:
3812
  stream-browserify: 3.0.0
3813
  tslib: 2.8.1
3814
 
 
 
 
 
 
 
 
 
 
 
 
3815
  '@aws-sdk/middleware-bucket-endpoint@3.840.0':
3816
  dependencies:
3817
  '@aws-sdk/types': 3.840.0
@@ -3822,6 +4289,16 @@ snapshots:
3822
  '@smithy/util-config-provider': 4.0.0
3823
  tslib: 2.8.1
3824
 
 
 
 
 
 
 
 
 
 
 
3825
  '@aws-sdk/middleware-expect-continue@3.840.0':
3826
  dependencies:
3827
  '@aws-sdk/types': 3.840.0
@@ -3829,6 +4306,13 @@ snapshots:
3829
  '@smithy/types': 4.3.1
3830
  tslib: 2.8.1
3831
 
 
 
 
 
 
 
 
3832
  '@aws-sdk/middleware-flexible-checksums@3.846.0':
3833
  dependencies:
3834
  '@aws-crypto/crc32': 5.2.0
@@ -3845,6 +4329,22 @@ snapshots:
3845
  '@smithy/util-utf8': 4.0.0
3846
  tslib: 2.8.1
3847
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3848
  '@aws-sdk/middleware-host-header@3.840.0':
3849
  dependencies:
3850
  '@aws-sdk/types': 3.840.0
@@ -3852,18 +4352,37 @@ snapshots:
3852
  '@smithy/types': 4.3.1
3853
  tslib: 2.8.1
3854
 
 
 
 
 
 
 
 
3855
  '@aws-sdk/middleware-location-constraint@3.840.0':
3856
  dependencies:
3857
  '@aws-sdk/types': 3.840.0
3858
  '@smithy/types': 4.3.1
3859
  tslib: 2.8.1
3860
 
 
 
 
 
 
 
3861
  '@aws-sdk/middleware-logger@3.840.0':
3862
  dependencies:
3863
  '@aws-sdk/types': 3.840.0
3864
  '@smithy/types': 4.3.1
3865
  tslib: 2.8.1
3866
 
 
 
 
 
 
 
3867
  '@aws-sdk/middleware-recursion-detection@3.840.0':
3868
  dependencies:
3869
  '@aws-sdk/types': 3.840.0
@@ -3871,6 +4390,13 @@ snapshots:
3871
  '@smithy/types': 4.3.1
3872
  tslib: 2.8.1
3873
 
 
 
 
 
 
 
 
3874
  '@aws-sdk/middleware-sdk-s3@3.846.0':
3875
  dependencies:
3876
  '@aws-sdk/core': 3.846.0
@@ -3888,12 +4414,35 @@ snapshots:
3888
  '@smithy/util-utf8': 4.0.0
3889
  tslib: 2.8.1
3890
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3891
  '@aws-sdk/middleware-ssec@3.840.0':
3892
  dependencies:
3893
  '@aws-sdk/types': 3.840.0
3894
  '@smithy/types': 4.3.1
3895
  tslib: 2.8.1
3896
 
 
 
 
 
 
 
3897
  '@aws-sdk/middleware-user-agent@3.848.0':
3898
  dependencies:
3899
  '@aws-sdk/core': 3.846.0
@@ -3904,6 +4453,16 @@ snapshots:
3904
  '@smithy/types': 4.3.1
3905
  tslib: 2.8.1
3906
 
 
 
 
 
 
 
 
 
 
 
3907
  '@aws-sdk/nested-clients@3.848.0':
3908
  dependencies:
3909
  '@aws-crypto/sha256-browser': 5.2.0
@@ -3947,6 +4506,49 @@ snapshots:
3947
  transitivePeerDependencies:
3948
  - aws-crt
3949
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3950
  '@aws-sdk/region-config-resolver@3.840.0':
3951
  dependencies:
3952
  '@aws-sdk/types': 3.840.0
@@ -3956,6 +4558,15 @@ snapshots:
3956
  '@smithy/util-middleware': 4.0.4
3957
  tslib: 2.8.1
3958
 
 
 
 
 
 
 
 
 
 
3959
  '@aws-sdk/signature-v4-multi-region@3.846.0':
3960
  dependencies:
3961
  '@aws-sdk/middleware-sdk-s3': 3.846.0
@@ -3965,6 +4576,15 @@ snapshots:
3965
  '@smithy/types': 4.3.1
3966
  tslib: 2.8.1
3967
 
 
 
 
 
 
 
 
 
 
3968
  '@aws-sdk/token-providers@3.848.0':
3969
  dependencies:
3970
  '@aws-sdk/core': 3.846.0
@@ -3977,15 +4597,36 @@ snapshots:
3977
  transitivePeerDependencies:
3978
  - aws-crt
3979
 
 
 
 
 
 
 
 
 
 
 
 
 
3980
  '@aws-sdk/types@3.840.0':
3981
  dependencies:
3982
  '@smithy/types': 4.3.1
3983
  tslib: 2.8.1
3984
 
 
 
 
 
 
3985
  '@aws-sdk/util-arn-parser@3.804.0':
3986
  dependencies:
3987
  tslib: 2.8.1
3988
 
 
 
 
 
3989
  '@aws-sdk/util-endpoints@3.848.0':
3990
  dependencies:
3991
  '@aws-sdk/types': 3.840.0
@@ -3994,6 +4635,14 @@ snapshots:
3994
  '@smithy/util-endpoints': 3.0.6
3995
  tslib: 2.8.1
3996
 
 
 
 
 
 
 
 
 
3997
  '@aws-sdk/util-locate-window@3.804.0':
3998
  dependencies:
3999
  tslib: 2.8.1
@@ -4005,6 +4654,13 @@ snapshots:
4005
  bowser: 2.11.0
4006
  tslib: 2.8.1
4007
 
 
 
 
 
 
 
 
4008
  '@aws-sdk/util-user-agent-node@3.848.0':
4009
  dependencies:
4010
  '@aws-sdk/middleware-user-agent': 3.848.0
@@ -4013,11 +4669,24 @@ snapshots:
4013
  '@smithy/types': 4.3.1
4014
  tslib: 2.8.1
4015
 
 
 
 
 
 
 
 
 
4016
  '@aws-sdk/xml-builder@3.821.0':
4017
  dependencies:
4018
  '@smithy/types': 4.3.1
4019
  tslib: 2.8.1
4020
 
 
 
 
 
 
4021
  '@babel/code-frame@7.27.1':
4022
  dependencies:
4023
  '@babel/helper-validator-identifier': 7.27.1
@@ -4134,82 +4803,73 @@ snapshots:
4134
 
4135
  '@dimforge/rapier3d-compat@0.12.0': {}
4136
 
4137
- '@esbuild/aix-ppc64@0.25.8':
4138
- optional: true
4139
-
4140
- '@esbuild/android-arm64@0.25.8':
4141
- optional: true
4142
-
4143
- '@esbuild/android-arm@0.25.8':
4144
- optional: true
4145
-
4146
- '@esbuild/android-x64@0.25.8':
4147
  optional: true
4148
 
4149
- '@esbuild/darwin-arm64@0.25.8':
4150
  optional: true
4151
 
4152
- '@esbuild/darwin-x64@0.25.8':
4153
  optional: true
4154
 
4155
- '@esbuild/freebsd-arm64@0.25.8':
4156
  optional: true
4157
 
4158
- '@esbuild/freebsd-x64@0.25.8':
4159
  optional: true
4160
 
4161
- '@esbuild/linux-arm64@0.25.8':
4162
  optional: true
4163
 
4164
- '@esbuild/linux-arm@0.25.8':
4165
  optional: true
4166
 
4167
- '@esbuild/linux-ia32@0.25.8':
4168
  optional: true
4169
 
4170
- '@esbuild/linux-loong64@0.25.8':
4171
  optional: true
4172
 
4173
- '@esbuild/linux-mips64el@0.25.8':
4174
  optional: true
4175
 
4176
- '@esbuild/linux-ppc64@0.25.8':
4177
  optional: true
4178
 
4179
- '@esbuild/linux-riscv64@0.25.8':
4180
  optional: true
4181
 
4182
- '@esbuild/linux-s390x@0.25.8':
4183
  optional: true
4184
 
4185
- '@esbuild/linux-x64@0.25.8':
4186
  optional: true
4187
 
4188
- '@esbuild/netbsd-arm64@0.25.8':
4189
  optional: true
4190
 
4191
- '@esbuild/netbsd-x64@0.25.8':
4192
  optional: true
4193
 
4194
- '@esbuild/openbsd-arm64@0.25.8':
4195
  optional: true
4196
 
4197
- '@esbuild/openbsd-x64@0.25.8':
4198
  optional: true
4199
 
4200
- '@esbuild/openharmony-arm64@0.25.8':
4201
  optional: true
4202
 
4203
- '@esbuild/sunos-x64@0.25.8':
4204
  optional: true
4205
 
4206
- '@esbuild/win32-arm64@0.25.8':
4207
  optional: true
4208
 
4209
- '@esbuild/win32-ia32@0.25.8':
4210
  optional: true
4211
 
4212
- '@esbuild/win32-x64@0.25.8':
4213
  optional: true
4214
 
4215
  '@eslint-community/eslint-utils@4.7.0(eslint@9.31.0(jiti@1.21.7))':
@@ -4321,8 +4981,8 @@ snapshots:
4321
 
4322
  '@lerobot/web@file:../../packages/web(typescript@5.8.3)':
4323
  dependencies:
4324
- '@aws-sdk/client-s3': 3.850.0
4325
- '@aws-sdk/lib-storage': 3.850.0(@aws-sdk/client-s3@3.850.0)
4326
  '@huggingface/hub': 2.4.0
4327
  apache-arrow: 21.0.0
4328
  jszip: 3.10.1
@@ -5239,6 +5899,11 @@ snapshots:
5239
  '@smithy/types': 4.3.1
5240
  tslib: 2.8.1
5241
 
 
 
 
 
 
5242
  '@smithy/chunked-blob-reader-native@4.0.0':
5243
  dependencies:
5244
  '@smithy/util-base64': 4.0.0
@@ -5256,6 +5921,14 @@ snapshots:
5256
  '@smithy/util-middleware': 4.0.4
5257
  tslib: 2.8.1
5258
 
 
 
 
 
 
 
 
 
5259
  '@smithy/core@3.7.2':
5260
  dependencies:
5261
  '@smithy/middleware-serde': 4.0.8
@@ -5268,6 +5941,20 @@ snapshots:
5268
  '@smithy/util-utf8': 4.0.0
5269
  tslib: 2.8.1
5270
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5271
  '@smithy/credential-provider-imds@4.0.6':
5272
  dependencies:
5273
  '@smithy/node-config-provider': 4.1.3
@@ -5276,6 +5963,14 @@ snapshots:
5276
  '@smithy/url-parser': 4.0.4
5277
  tslib: 2.8.1
5278
 
 
 
 
 
 
 
 
 
5279
  '@smithy/eventstream-codec@4.0.4':
5280
  dependencies:
5281
  '@aws-crypto/crc32': 5.2.0
@@ -5283,29 +5978,59 @@ snapshots:
5283
  '@smithy/util-hex-encoding': 4.0.0
5284
  tslib: 2.8.1
5285
 
 
 
 
 
 
 
 
5286
  '@smithy/eventstream-serde-browser@4.0.4':
5287
  dependencies:
5288
  '@smithy/eventstream-serde-universal': 4.0.4
5289
  '@smithy/types': 4.3.1
5290
  tslib: 2.8.1
5291
 
 
 
 
 
 
 
5292
  '@smithy/eventstream-serde-config-resolver@4.1.2':
5293
  dependencies:
5294
  '@smithy/types': 4.3.1
5295
  tslib: 2.8.1
5296
 
 
 
 
 
 
5297
  '@smithy/eventstream-serde-node@4.0.4':
5298
  dependencies:
5299
  '@smithy/eventstream-serde-universal': 4.0.4
5300
  '@smithy/types': 4.3.1
5301
  tslib: 2.8.1
5302
 
 
 
 
 
 
 
5303
  '@smithy/eventstream-serde-universal@4.0.4':
5304
  dependencies:
5305
  '@smithy/eventstream-codec': 4.0.4
5306
  '@smithy/types': 4.3.1
5307
  tslib: 2.8.1
5308
 
 
 
 
 
 
 
5309
  '@smithy/fetch-http-handler@5.1.0':
5310
  dependencies:
5311
  '@smithy/protocol-http': 5.1.2
@@ -5314,6 +6039,14 @@ snapshots:
5314
  '@smithy/util-base64': 4.0.0
5315
  tslib: 2.8.1
5316
 
 
 
 
 
 
 
 
 
5317
  '@smithy/hash-blob-browser@4.0.4':
5318
  dependencies:
5319
  '@smithy/chunked-blob-reader': 5.0.0
@@ -5321,6 +6054,13 @@ snapshots:
5321
  '@smithy/types': 4.3.1
5322
  tslib: 2.8.1
5323
 
 
 
 
 
 
 
 
5324
  '@smithy/hash-node@4.0.4':
5325
  dependencies:
5326
  '@smithy/types': 4.3.1
@@ -5328,17 +6068,35 @@ snapshots:
5328
  '@smithy/util-utf8': 4.0.0
5329
  tslib: 2.8.1
5330
 
 
 
 
 
 
 
 
5331
  '@smithy/hash-stream-node@4.0.4':
5332
  dependencies:
5333
  '@smithy/types': 4.3.1
5334
  '@smithy/util-utf8': 4.0.0
5335
  tslib: 2.8.1
5336
 
 
 
 
 
 
 
5337
  '@smithy/invalid-dependency@4.0.4':
5338
  dependencies:
5339
  '@smithy/types': 4.3.1
5340
  tslib: 2.8.1
5341
 
 
 
 
 
 
5342
  '@smithy/is-array-buffer@2.2.0':
5343
  dependencies:
5344
  tslib: 2.8.1
@@ -5353,12 +6111,24 @@ snapshots:
5353
  '@smithy/util-utf8': 4.0.0
5354
  tslib: 2.8.1
5355
 
 
 
 
 
 
 
5356
  '@smithy/middleware-content-length@4.0.4':
5357
  dependencies:
5358
  '@smithy/protocol-http': 5.1.2
5359
  '@smithy/types': 4.3.1
5360
  tslib: 2.8.1
5361
 
 
 
 
 
 
 
5362
  '@smithy/middleware-endpoint@4.1.17':
5363
  dependencies:
5364
  '@smithy/core': 3.7.2
@@ -5370,6 +6140,17 @@ snapshots:
5370
  '@smithy/util-middleware': 4.0.4
5371
  tslib: 2.8.1
5372
 
 
 
 
 
 
 
 
 
 
 
 
5373
  '@smithy/middleware-retry@4.1.18':
5374
  dependencies:
5375
  '@smithy/node-config-provider': 4.1.3
@@ -5382,17 +6163,41 @@ snapshots:
5382
  tslib: 2.8.1
5383
  uuid: 9.0.1
5384
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5385
  '@smithy/middleware-serde@4.0.8':
5386
  dependencies:
5387
  '@smithy/protocol-http': 5.1.2
5388
  '@smithy/types': 4.3.1
5389
  tslib: 2.8.1
5390
 
 
 
 
 
 
 
5391
  '@smithy/middleware-stack@4.0.4':
5392
  dependencies:
5393
  '@smithy/types': 4.3.1
5394
  tslib: 2.8.1
5395
 
 
 
 
 
 
5396
  '@smithy/node-config-provider@4.1.3':
5397
  dependencies:
5398
  '@smithy/property-provider': 4.0.4
@@ -5400,6 +6205,13 @@ snapshots:
5400
  '@smithy/types': 4.3.1
5401
  tslib: 2.8.1
5402
 
 
 
 
 
 
 
 
5403
  '@smithy/node-http-handler@4.1.0':
5404
  dependencies:
5405
  '@smithy/abort-controller': 4.0.4
@@ -5408,36 +6220,74 @@ snapshots:
5408
  '@smithy/types': 4.3.1
5409
  tslib: 2.8.1
5410
 
 
 
 
 
 
 
 
 
5411
  '@smithy/property-provider@4.0.4':
5412
  dependencies:
5413
  '@smithy/types': 4.3.1
5414
  tslib: 2.8.1
5415
 
 
 
 
 
 
5416
  '@smithy/protocol-http@5.1.2':
5417
  dependencies:
5418
  '@smithy/types': 4.3.1
5419
  tslib: 2.8.1
5420
 
 
 
 
 
 
5421
  '@smithy/querystring-builder@4.0.4':
5422
  dependencies:
5423
  '@smithy/types': 4.3.1
5424
  '@smithy/util-uri-escape': 4.0.0
5425
  tslib: 2.8.1
5426
 
 
 
 
 
 
 
5427
  '@smithy/querystring-parser@4.0.4':
5428
  dependencies:
5429
  '@smithy/types': 4.3.1
5430
  tslib: 2.8.1
5431
 
 
 
 
 
 
5432
  '@smithy/service-error-classification@4.0.6':
5433
  dependencies:
5434
  '@smithy/types': 4.3.1
5435
 
 
 
 
 
5436
  '@smithy/shared-ini-file-loader@4.0.4':
5437
  dependencies:
5438
  '@smithy/types': 4.3.1
5439
  tslib: 2.8.1
5440
 
 
 
 
 
 
5441
  '@smithy/signature-v4@5.1.2':
5442
  dependencies:
5443
  '@smithy/is-array-buffer': 4.0.0
@@ -5449,6 +6299,17 @@ snapshots:
5449
  '@smithy/util-utf8': 4.0.0
5450
  tslib: 2.8.1
5451
 
 
 
 
 
 
 
 
 
 
 
 
5452
  '@smithy/smithy-client@4.4.9':
5453
  dependencies:
5454
  '@smithy/core': 3.7.2
@@ -5459,16 +6320,36 @@ snapshots:
5459
  '@smithy/util-stream': 4.2.3
5460
  tslib: 2.8.1
5461
 
 
 
 
 
 
 
 
 
 
 
5462
  '@smithy/types@4.3.1':
5463
  dependencies:
5464
  tslib: 2.8.1
5465
 
 
 
 
 
5466
  '@smithy/url-parser@4.0.4':
5467
  dependencies:
5468
  '@smithy/querystring-parser': 4.0.4
5469
  '@smithy/types': 4.3.1
5470
  tslib: 2.8.1
5471
 
 
 
 
 
 
 
5472
  '@smithy/util-base64@4.0.0':
5473
  dependencies:
5474
  '@smithy/util-buffer-from': 4.0.0
@@ -5505,6 +6386,14 @@ snapshots:
5505
  bowser: 2.11.0
5506
  tslib: 2.8.1
5507
 
 
 
 
 
 
 
 
 
5508
  '@smithy/util-defaults-mode-node@4.0.25':
5509
  dependencies:
5510
  '@smithy/config-resolver': 4.1.4
@@ -5515,12 +6404,28 @@ snapshots:
5515
  '@smithy/types': 4.3.1
5516
  tslib: 2.8.1
5517
 
 
 
 
 
 
 
 
 
 
 
5518
  '@smithy/util-endpoints@3.0.6':
5519
  dependencies:
5520
  '@smithy/node-config-provider': 4.1.3
5521
  '@smithy/types': 4.3.1
5522
  tslib: 2.8.1
5523
 
 
 
 
 
 
 
5524
  '@smithy/util-hex-encoding@4.0.0':
5525
  dependencies:
5526
  tslib: 2.8.1
@@ -5530,12 +6435,23 @@ snapshots:
5530
  '@smithy/types': 4.3.1
5531
  tslib: 2.8.1
5532
 
 
 
 
 
 
5533
  '@smithy/util-retry@4.0.6':
5534
  dependencies:
5535
  '@smithy/service-error-classification': 4.0.6
5536
  '@smithy/types': 4.3.1
5537
  tslib: 2.8.1
5538
 
 
 
 
 
 
 
5539
  '@smithy/util-stream@4.2.3':
5540
  dependencies:
5541
  '@smithy/fetch-http-handler': 5.1.0
@@ -5547,6 +6463,17 @@ snapshots:
5547
  '@smithy/util-utf8': 4.0.0
5548
  tslib: 2.8.1
5549
 
 
 
 
 
 
 
 
 
 
 
 
5550
  '@smithy/util-uri-escape@4.0.0':
5551
  dependencies:
5552
  tslib: 2.8.1
@@ -5567,6 +6494,12 @@ snapshots:
5567
  '@smithy/types': 4.3.1
5568
  tslib: 2.8.1
5569
 
 
 
 
 
 
 
5570
  '@swc/helpers@0.5.17':
5571
  dependencies:
5572
  tslib: 2.8.1
@@ -5776,7 +6709,7 @@ snapshots:
5776
  '@use-gesture/core': 10.3.1
5777
  react: 19.1.0
5778
 
5779
- '@vitejs/plugin-react@4.7.0(vite@7.0.6(@types/node@22.16.5)(jiti@1.21.7)(yaml@2.8.0))':
5780
  dependencies:
5781
  '@babel/core': 7.28.0
5782
  '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.0)
@@ -5784,7 +6717,7 @@ snapshots:
5784
  '@rolldown/pluginutils': 1.0.0-beta.27
5785
  '@types/babel__core': 7.20.5
5786
  react-refresh: 0.17.0
5787
- vite: 7.0.6(@types/node@22.16.5)(jiti@1.21.7)(yaml@2.8.0)
5788
  transitivePeerDependencies:
5789
  - supports-color
5790
 
@@ -6091,34 +7024,31 @@ snapshots:
6091
 
6092
  emoji-regex@9.2.2: {}
6093
 
6094
- esbuild@0.25.8:
6095
  optionalDependencies:
6096
- '@esbuild/aix-ppc64': 0.25.8
6097
- '@esbuild/android-arm': 0.25.8
6098
- '@esbuild/android-arm64': 0.25.8
6099
- '@esbuild/android-x64': 0.25.8
6100
- '@esbuild/darwin-arm64': 0.25.8
6101
- '@esbuild/darwin-x64': 0.25.8
6102
- '@esbuild/freebsd-arm64': 0.25.8
6103
- '@esbuild/freebsd-x64': 0.25.8
6104
- '@esbuild/linux-arm': 0.25.8
6105
- '@esbuild/linux-arm64': 0.25.8
6106
- '@esbuild/linux-ia32': 0.25.8
6107
- '@esbuild/linux-loong64': 0.25.8
6108
- '@esbuild/linux-mips64el': 0.25.8
6109
- '@esbuild/linux-ppc64': 0.25.8
6110
- '@esbuild/linux-riscv64': 0.25.8
6111
- '@esbuild/linux-s390x': 0.25.8
6112
- '@esbuild/linux-x64': 0.25.8
6113
- '@esbuild/netbsd-arm64': 0.25.8
6114
- '@esbuild/netbsd-x64': 0.25.8
6115
- '@esbuild/openbsd-arm64': 0.25.8
6116
- '@esbuild/openbsd-x64': 0.25.8
6117
- '@esbuild/openharmony-arm64': 0.25.8
6118
- '@esbuild/sunos-x64': 0.25.8
6119
- '@esbuild/win32-arm64': 0.25.8
6120
- '@esbuild/win32-ia32': 0.25.8
6121
- '@esbuild/win32-x64': 0.25.8
6122
 
6123
  escalade@3.2.0: {}
6124
 
@@ -6233,10 +7163,6 @@ snapshots:
6233
  dependencies:
6234
  format: 0.2.2
6235
 
6236
- fdir@6.4.6(picomatch@4.0.3):
6237
- optionalDependencies:
6238
- picomatch: 4.0.3
6239
-
6240
  fflate@0.6.10: {}
6241
 
6242
  fflate@0.8.2: {}
@@ -6581,8 +7507,6 @@ snapshots:
6581
 
6582
  picomatch@2.3.1: {}
6583
 
6584
- picomatch@4.0.3: {}
6585
-
6586
  pify@2.3.0: {}
6587
 
6588
  pirates@4.0.7: {}
@@ -7009,11 +7933,6 @@ snapshots:
7009
 
7010
  tiny-invariant@1.3.3: {}
7011
 
7012
- tinyglobby@0.2.14:
7013
- dependencies:
7014
- fdir: 6.4.6(picomatch@4.0.3)
7015
- picomatch: 4.0.3
7016
-
7017
  to-regex-range@5.0.1:
7018
  dependencies:
7019
  is-number: 7.0.0
@@ -7132,19 +8051,14 @@ snapshots:
7132
  d3-time: 3.1.0
7133
  d3-timer: 3.0.1
7134
 
7135
- vite@7.0.6(@types/node@22.16.5)(jiti@1.21.7)(yaml@2.8.0):
7136
  dependencies:
7137
- esbuild: 0.25.8
7138
- fdir: 6.4.6(picomatch@4.0.3)
7139
- picomatch: 4.0.3
7140
  postcss: 8.5.6
7141
  rollup: 4.45.1
7142
- tinyglobby: 0.2.14
7143
  optionalDependencies:
7144
  '@types/node': 22.16.5
7145
  fsevents: 2.3.3
7146
- jiti: 1.21.7
7147
- yaml: 2.8.0
7148
 
7149
  webgl-constants@1.1.1: {}
7150
 
 
206
  version: 19.1.6(@types/react@19.1.8)
207
  '@vitejs/plugin-react':
208
  specifier: ^4.5.2
209
+ version: 4.7.0(vite@5.4.19(@types/node@22.16.5))
210
  eslint:
211
  specifier: ^9.29.0
212
  version: 9.31.0(jiti@1.21.7)
 
232
  specifier: ^8.34.1
233
  version: 8.38.0(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3)
234
  vite:
235
+ specifier: ^5.4.10
236
+ version: 5.4.19(@types/node@22.16.5)
237
 
238
  packages:
239
 
 
272
  resolution: {integrity: sha512-tX5bUfqiLOh6jtAlaiAuOUKFYh8KDG9k9zFLUdgGplC5TP47AYTreUEg+deCTHo4DD3YCvrLuyZ8tIDgKu7neQ==}
273
  engines: {node: '>=18.0.0'}
274
 
275
+ '@aws-sdk/client-s3@3.879.0':
276
+ resolution: {integrity: sha512-1bD2Do/OdCIzl72ncHKYamDhPijUErLYpuLvciyYD4Ywt4cVLHjWtVIqb22XOOHYYHE3NqHMd4uRhvXMlsBRoQ==}
277
+ engines: {node: '>=18.0.0'}
278
+
279
  '@aws-sdk/client-sso@3.848.0':
280
  resolution: {integrity: sha512-mD+gOwoeZQvbecVLGoCmY6pS7kg02BHesbtIxUj+PeBqYoZV5uLvjUOmuGfw1SfoSobKvS11urxC9S7zxU/Maw==}
281
  engines: {node: '>=18.0.0'}
282
 
283
+ '@aws-sdk/client-sso@3.879.0':
284
+ resolution: {integrity: sha512-+Pc3OYFpRYpKLKRreovPM63FPPud1/SF9vemwIJfz6KwsBCJdvg7vYD1xLSIp5DVZLeetgf4reCyAA5ImBfZuw==}
285
+ engines: {node: '>=18.0.0'}
286
+
287
  '@aws-sdk/core@3.846.0':
288
  resolution: {integrity: sha512-7CX0pM906r4WSS68fCTNMTtBCSkTtf3Wggssmx13gD40gcWEZXsU00KzPp1bYheNRyPlAq3rE22xt4wLPXbuxA==}
289
  engines: {node: '>=18.0.0'}
290
 
291
+ '@aws-sdk/core@3.879.0':
292
+ resolution: {integrity: sha512-AhNmLCrx980LsK+SfPXGh7YqTyZxsK0Qmy18mWmkfY0TSq7WLaSDB5zdQbgbnQCACCHy8DUYXbi4KsjlIhv3PA==}
293
+ engines: {node: '>=18.0.0'}
294
+
295
  '@aws-sdk/credential-provider-env@3.846.0':
296
  resolution: {integrity: sha512-QuCQZET9enja7AWVISY+mpFrEIeHzvkx/JEEbHYzHhUkxcnC2Kq2c0bB7hDihGD0AZd3Xsm653hk1O97qu69zg==}
297
  engines: {node: '>=18.0.0'}
298
 
299
+ '@aws-sdk/credential-provider-env@3.879.0':
300
+ resolution: {integrity: sha512-JgG7A8SSbr5IiCYL8kk39Y9chdSB5GPwBorDW8V8mr19G9L+qd6ohED4fAocoNFaDnYJ5wGAHhCfSJjzcsPBVQ==}
301
+ engines: {node: '>=18.0.0'}
302
+
303
  '@aws-sdk/credential-provider-http@3.846.0':
304
  resolution: {integrity: sha512-Jh1iKUuepdmtreMYozV2ePsPcOF5W9p3U4tWhi3v6nDvz0GsBjzjAROW+BW8XMz9vAD3I9R+8VC3/aq63p5nlw==}
305
  engines: {node: '>=18.0.0'}
306
 
307
+ '@aws-sdk/credential-provider-http@3.879.0':
308
+ resolution: {integrity: sha512-2hM5ByLpyK+qORUexjtYyDZsgxVCCUiJQZRMGkNXFEGz6zTpbjfTIWoh3zRgWHEBiqyPIyfEy50eIF69WshcuA==}
309
+ engines: {node: '>=18.0.0'}
310
+
311
  '@aws-sdk/credential-provider-ini@3.848.0':
312
  resolution: {integrity: sha512-r6KWOG+En2xujuMhgZu7dzOZV3/M5U/5+PXrG8dLQ3rdPRB3vgp5tc56KMqLwm/EXKRzAOSuw/UE4HfNOAB8Hw==}
313
  engines: {node: '>=18.0.0'}
314
 
315
+ '@aws-sdk/credential-provider-ini@3.879.0':
316
+ resolution: {integrity: sha512-07M8zfb73KmMBqVO5/V3Ea9kqDspMX0fO0kaI1bsjWI6ngnMye8jCE0/sIhmkVAI0aU709VA0g+Bzlopnw9EoQ==}
317
+ engines: {node: '>=18.0.0'}
318
+
319
  '@aws-sdk/credential-provider-node@3.848.0':
320
  resolution: {integrity: sha512-AblNesOqdzrfyASBCo1xW3uweiSro4Kft9/htdxLeCVU1KVOnFWA5P937MNahViRmIQm2sPBCqL8ZG0u9lnh5g==}
321
  engines: {node: '>=18.0.0'}
322
 
323
+ '@aws-sdk/credential-provider-node@3.879.0':
324
+ resolution: {integrity: sha512-FYaAqJbnSTrVL2iZkNDj2hj5087yMv2RN2GA8DJhe7iOJjzhzRojrtlfpWeJg6IhK0sBKDH+YXbdeexCzUJvtA==}
325
+ engines: {node: '>=18.0.0'}
326
+
327
  '@aws-sdk/credential-provider-process@3.846.0':
328
  resolution: {integrity: sha512-mEpwDYarJSH+CIXnnHN0QOe0MXI+HuPStD6gsv3z/7Q6ESl8KRWon3weFZCDnqpiJMUVavlDR0PPlAFg2MQoPg==}
329
  engines: {node: '>=18.0.0'}
330
 
331
+ '@aws-sdk/credential-provider-process@3.879.0':
332
+ resolution: {integrity: sha512-7r360x1VyEt35Sm1JFOzww2WpnfJNBbvvnzoyLt7WRfK0S/AfsuWhu5ltJ80QvJ0R3AiSNbG+q/btG2IHhDYPQ==}
333
+ engines: {node: '>=18.0.0'}
334
+
335
  '@aws-sdk/credential-provider-sso@3.848.0':
336
  resolution: {integrity: sha512-pozlDXOwJZL0e7w+dqXLgzVDB7oCx4WvtY0sk6l4i07uFliWF/exupb6pIehFWvTUcOvn5aFTTqcQaEzAD5Wsg==}
337
  engines: {node: '>=18.0.0'}
338
 
339
+ '@aws-sdk/credential-provider-sso@3.879.0':
340
+ resolution: {integrity: sha512-gd27B0NsgtKlaPNARj4IX7F7US5NuU691rGm0EUSkDsM7TctvJULighKoHzPxDQlrDbVI11PW4WtKS/Zg5zPlQ==}
341
+ engines: {node: '>=18.0.0'}
342
+
343
  '@aws-sdk/credential-provider-web-identity@3.848.0':
344
  resolution: {integrity: sha512-D1fRpwPxtVDhcSc/D71exa2gYweV+ocp4D3brF0PgFd//JR3XahZ9W24rVnTQwYEcK9auiBZB89Ltv+WbWN8qw==}
345
  engines: {node: '>=18.0.0'}
346
 
347
+ '@aws-sdk/credential-provider-web-identity@3.879.0':
348
+ resolution: {integrity: sha512-Jy4uPFfGzHk1Mxy+/Wr43vuw9yXsE2yiF4e4598vc3aJfO0YtA2nSfbKD3PNKRORwXbeKqWPfph9SCKQpWoxEg==}
349
+ engines: {node: '>=18.0.0'}
350
+
351
  '@aws-sdk/lib-storage@3.850.0':
352
  resolution: {integrity: sha512-DKG8mKeUMLRboyqwhKiV9QOiKXN00OYLnGsT21mhlaF1Uc7OZ6Vm+Olw4YrbYSBuDup0rMWtVaWudJ49I+ZCHA==}
353
  engines: {node: '>=18.0.0'}
354
  peerDependencies:
355
  '@aws-sdk/client-s3': ^3.850.0
356
 
357
+ '@aws-sdk/lib-storage@3.879.0':
358
+ resolution: {integrity: sha512-FAb3vOfLIrf8lPuDoxKRu18DxXfQLEFm7MoXi0jd8ooFjD09jpVCQGNrRuMCqc688wrx7zJSovWObtn4LRjvrg==}
359
+ engines: {node: '>=18.0.0'}
360
+ peerDependencies:
361
+ '@aws-sdk/client-s3': ^3.879.0
362
+
363
  '@aws-sdk/middleware-bucket-endpoint@3.840.0':
364
  resolution: {integrity: sha512-+gkQNtPwcSMmlwBHFd4saVVS11In6ID1HczNzpM3MXKXRBfSlbZJbCt6wN//AZ8HMklZEik4tcEOG0qa9UY8SQ==}
365
  engines: {node: '>=18.0.0'}
366
 
367
+ '@aws-sdk/middleware-bucket-endpoint@3.873.0':
368
+ resolution: {integrity: sha512-b4bvr0QdADeTUs+lPc9Z48kXzbKHXQKgTvxx/jXDgSW9tv4KmYPO1gIj6Z9dcrBkRWQuUtSW3Tu2S5n6pe+zeg==}
369
+ engines: {node: '>=18.0.0'}
370
+
371
  '@aws-sdk/middleware-expect-continue@3.840.0':
372
  resolution: {integrity: sha512-iJg2r6FKsKKvdiU4oCOuCf7Ro/YE0Q2BT/QyEZN3/Rt8Nr4SAZiQOlcBXOCpGvuIKOEAhvDOUnW3aDHL01PdVw==}
373
  engines: {node: '>=18.0.0'}
374
 
375
+ '@aws-sdk/middleware-expect-continue@3.873.0':
376
+ resolution: {integrity: sha512-GIqoc8WgRcf/opBOZXFLmplJQKwOMjiOMmDz9gQkaJ8FiVJoAp8EGVmK2TOWZMQUYsavvHYsHaor5R2xwPoGVg==}
377
+ engines: {node: '>=18.0.0'}
378
+
379
  '@aws-sdk/middleware-flexible-checksums@3.846.0':
380
  resolution: {integrity: sha512-CdkeVfkwt3+bDLhmOwBxvkUf6oY9iUhvosaUnqkoPsOqIiUEN54yTGOnO8A0wLz6mMsZ6aBlfFrQhFnxt3c+yw==}
381
  engines: {node: '>=18.0.0'}
382
 
383
+ '@aws-sdk/middleware-flexible-checksums@3.879.0':
384
+ resolution: {integrity: sha512-U1rcWToy2rlQPQLsx5h73uTC1XYo/JpnlJGCc3Iw7b1qrK8Mke4+rgMPKCfnXELD5TTazGrbT03frxH4Y1Ycvw==}
385
+ engines: {node: '>=18.0.0'}
386
+
387
  '@aws-sdk/middleware-host-header@3.840.0':
388
  resolution: {integrity: sha512-ub+hXJAbAje94+Ya6c6eL7sYujoE8D4Bumu1NUI8TXjUhVVn0HzVWQjpRLshdLsUp1AW7XyeJaxyajRaJQ8+Xg==}
389
  engines: {node: '>=18.0.0'}
390
 
391
+ '@aws-sdk/middleware-host-header@3.873.0':
392
+ resolution: {integrity: sha512-KZ/W1uruWtMOs7D5j3KquOxzCnV79KQW9MjJFZM/M0l6KI8J6V3718MXxFHsTjUE4fpdV6SeCNLV1lwGygsjJA==}
393
+ engines: {node: '>=18.0.0'}
394
+
395
  '@aws-sdk/middleware-location-constraint@3.840.0':
396
  resolution: {integrity: sha512-KVLD0u0YMF3aQkVF8bdyHAGWSUY6N1Du89htTLgqCcIhSxxAJ9qifrosVZ9jkAzqRW99hcufyt2LylcVU2yoKQ==}
397
  engines: {node: '>=18.0.0'}
398
 
399
+ '@aws-sdk/middleware-location-constraint@3.873.0':
400
+ resolution: {integrity: sha512-r+hIaORsW/8rq6wieDordXnA/eAu7xAPLue2InhoEX6ML7irP52BgiibHLpt9R0psiCzIHhju8qqKa4pJOrmiw==}
401
+ engines: {node: '>=18.0.0'}
402
+
403
  '@aws-sdk/middleware-logger@3.840.0':
404
  resolution: {integrity: sha512-lSV8FvjpdllpGaRspywss4CtXV8M7NNNH+2/j86vMH+YCOZ6fu2T/TyFd/tHwZ92vDfHctWkRbQxg0bagqwovA==}
405
  engines: {node: '>=18.0.0'}
406
 
407
+ '@aws-sdk/middleware-logger@3.876.0':
408
+ resolution: {integrity: sha512-cpWJhOuMSyz9oV25Z/CMHCBTgafDCbv7fHR80nlRrPdPZ8ETNsahwRgltXP1QJJ8r3X/c1kwpOR7tc+RabVzNA==}
409
+ engines: {node: '>=18.0.0'}
410
+
411
  '@aws-sdk/middleware-recursion-detection@3.840.0':
412
  resolution: {integrity: sha512-Gu7lGDyfddyhIkj1Z1JtrY5NHb5+x/CRiB87GjaSrKxkDaydtX2CU977JIABtt69l9wLbcGDIQ+W0uJ5xPof7g==}
413
  engines: {node: '>=18.0.0'}
414
 
415
+ '@aws-sdk/middleware-recursion-detection@3.873.0':
416
+ resolution: {integrity: sha512-OtgY8EXOzRdEWR//WfPkA/fXl0+WwE8hq0y9iw2caNyKPtca85dzrrZWnPqyBK/cpImosrpR1iKMYr41XshsCg==}
417
+ engines: {node: '>=18.0.0'}
418
+
419
  '@aws-sdk/middleware-sdk-s3@3.846.0':
420
  resolution: {integrity: sha512-jP9x+2Q87J5l8FOP+jlAd7vGLn0cC6G9QGmf386e5OslBPqxXKcl3RjqGLIOKKos2mVItY3ApP5xdXQx7jGTVA==}
421
  engines: {node: '>=18.0.0'}
422
 
423
+ '@aws-sdk/middleware-sdk-s3@3.879.0':
424
+ resolution: {integrity: sha512-ZTpLr2AbZcCsEzu18YCtB8Tp8tjAWHT0ccfwy3HiL6g9ncuSMW+7BVi1hDYmBidFwpPbnnIMtM0db3pDMR6/WA==}
425
+ engines: {node: '>=18.0.0'}
426
+
427
  '@aws-sdk/middleware-ssec@3.840.0':
428
  resolution: {integrity: sha512-CBZP9t1QbjDFGOrtnUEHL1oAvmnCUUm7p0aPNbIdSzNtH42TNKjPRN3TuEIJDGjkrqpL3MXyDSmNayDcw/XW7Q==}
429
  engines: {node: '>=18.0.0'}
430
 
431
+ '@aws-sdk/middleware-ssec@3.873.0':
432
+ resolution: {integrity: sha512-AF55J94BoiuzN7g3hahy0dXTVZahVi8XxRBLgzNp6yQf0KTng+hb/V9UQZVYY1GZaDczvvvnqC54RGe9OZZ9zQ==}
433
+ engines: {node: '>=18.0.0'}
434
+
435
  '@aws-sdk/middleware-user-agent@3.848.0':
436
  resolution: {integrity: sha512-rjMuqSWJEf169/ByxvBqfdei1iaduAnfolTshsZxwcmLIUtbYrFUmts0HrLQqsAG8feGPpDLHA272oPl+NTCCA==}
437
  engines: {node: '>=18.0.0'}
438
 
439
+ '@aws-sdk/middleware-user-agent@3.879.0':
440
+ resolution: {integrity: sha512-DDSV8228lQxeMAFKnigkd0fHzzn5aauZMYC3CSj6e5/qE7+9OwpkUcjHfb7HZ9KWG6L2/70aKZXHqiJ4xKhOZw==}
441
+ engines: {node: '>=18.0.0'}
442
+
443
  '@aws-sdk/nested-clients@3.848.0':
444
  resolution: {integrity: sha512-joLsyyo9u61jnZuyYzo1z7kmS7VgWRAkzSGESVzQHfOA1H2PYeUFek6vLT4+c9xMGrX/Z6B0tkRdzfdOPiatLg==}
445
  engines: {node: '>=18.0.0'}
446
 
447
+ '@aws-sdk/nested-clients@3.879.0':
448
+ resolution: {integrity: sha512-7+n9NpIz9QtKYnxmw1fHi9C8o0GrX8LbBR4D50c7bH6Iq5+XdSuL5AFOWWQ5cMD0JhqYYJhK/fJsVau3nUtC4g==}
449
+ engines: {node: '>=18.0.0'}
450
+
451
  '@aws-sdk/region-config-resolver@3.840.0':
452
  resolution: {integrity: sha512-Qjnxd/yDv9KpIMWr90ZDPtRj0v75AqGC92Lm9+oHXZ8p1MjG5JE2CW0HL8JRgK9iKzgKBL7pPQRXI8FkvEVfrA==}
453
  engines: {node: '>=18.0.0'}
454
 
455
+ '@aws-sdk/region-config-resolver@3.873.0':
456
+ resolution: {integrity: sha512-q9sPoef+BBG6PJnc4x60vK/bfVwvRWsPgcoQyIra057S/QGjq5VkjvNk6H8xedf6vnKlXNBwq9BaANBXnldUJg==}
457
+ engines: {node: '>=18.0.0'}
458
+
459
  '@aws-sdk/signature-v4-multi-region@3.846.0':
460
  resolution: {integrity: sha512-ZMfIMxUljqZzPJGOcraC6erwq/z1puNMU35cO1a/WdhB+LdYknMn1lr7SJuH754QwNzzIlZbEgg4hoHw50+DpQ==}
461
  engines: {node: '>=18.0.0'}
462
 
463
+ '@aws-sdk/signature-v4-multi-region@3.879.0':
464
+ resolution: {integrity: sha512-MDsw0EWOHyKac75X3gD8tLWtmPuRliS/s4IhWRhsdDCU13wewHIs5IlA5B65kT6ISf49yEIalEH3FHUSVqdmIQ==}
465
+ engines: {node: '>=18.0.0'}
466
+
467
  '@aws-sdk/token-providers@3.848.0':
468
  resolution: {integrity: sha512-oNPyM4+Di2Umu0JJRFSxDcKQ35+Chl/rAwD47/bS0cDPI8yrao83mLXLeDqpRPHyQW4sXlP763FZcuAibC0+mg==}
469
  engines: {node: '>=18.0.0'}
470
 
471
+ '@aws-sdk/token-providers@3.879.0':
472
+ resolution: {integrity: sha512-47J7sCwXdnw9plRZNAGVkNEOlSiLb/kR2slnDIHRK9NB/ECKsoqgz5OZQJ9E2f0yqOs8zSNJjn3T01KxpgW8Qw==}
473
+ engines: {node: '>=18.0.0'}
474
+
475
  '@aws-sdk/types@3.840.0':
476
  resolution: {integrity: sha512-xliuHaUFZxEx1NSXeLLZ9Dyu6+EJVQKEoD+yM+zqUo3YDZ7medKJWY6fIOKiPX/N7XbLdBYwajb15Q7IL8KkeA==}
477
  engines: {node: '>=18.0.0'}
478
 
479
+ '@aws-sdk/types@3.862.0':
480
+ resolution: {integrity: sha512-Bei+RL0cDxxV+lW2UezLbCYYNeJm6Nzee0TpW0FfyTRBhH9C1XQh4+x+IClriXvgBnRquTMMYsmJfvx8iyLKrg==}
481
+ engines: {node: '>=18.0.0'}
482
+
483
  '@aws-sdk/util-arn-parser@3.804.0':
484
  resolution: {integrity: sha512-wmBJqn1DRXnZu3b4EkE6CWnoWMo1ZMvlfkqU5zPz67xx1GMaXlDCchFvKAXMjk4jn/L1O3tKnoFDNsoLV1kgNQ==}
485
  engines: {node: '>=18.0.0'}
486
 
487
+ '@aws-sdk/util-arn-parser@3.873.0':
488
+ resolution: {integrity: sha512-qag+VTqnJWDn8zTAXX4wiVioa0hZDQMtbZcGRERVnLar4/3/VIKBhxX2XibNQXFu1ufgcRn4YntT/XEPecFWcg==}
489
+ engines: {node: '>=18.0.0'}
490
+
491
  '@aws-sdk/util-endpoints@3.848.0':
492
  resolution: {integrity: sha512-fY/NuFFCq/78liHvRyFKr+aqq1aA/uuVSANjzr5Ym8c+9Z3HRPE9OrExAHoMrZ6zC8tHerQwlsXYYH5XZ7H+ww==}
493
  engines: {node: '>=18.0.0'}
494
 
495
+ '@aws-sdk/util-endpoints@3.879.0':
496
+ resolution: {integrity: sha512-aVAJwGecYoEmbEFju3127TyJDF9qJsKDUUTRMDuS8tGn+QiWQFnfInmbt+el9GU1gEJupNTXV+E3e74y51fb7A==}
497
+ engines: {node: '>=18.0.0'}
498
+
499
  '@aws-sdk/util-locate-window@3.804.0':
500
  resolution: {integrity: sha512-zVoRfpmBVPodYlnMjgVjfGoEZagyRF5IPn3Uo6ZvOZp24chnW/FRstH7ESDHDDRga4z3V+ElUQHKpFDXWyBW5A==}
501
  engines: {node: '>=18.0.0'}
 
503
  '@aws-sdk/util-user-agent-browser@3.840.0':
504
  resolution: {integrity: sha512-JdyZM3EhhL4PqwFpttZu1afDpPJCCc3eyZOLi+srpX11LsGj6sThf47TYQN75HT1CarZ7cCdQHGzP2uy3/xHfQ==}
505
 
506
+ '@aws-sdk/util-user-agent-browser@3.873.0':
507
+ resolution: {integrity: sha512-AcRdbK6o19yehEcywI43blIBhOCSo6UgyWcuOJX5CFF8k39xm1ILCjQlRRjchLAxWrm0lU0Q7XV90RiMMFMZtA==}
508
+
509
  '@aws-sdk/util-user-agent-node@3.848.0':
510
  resolution: {integrity: sha512-Zz1ft9NiLqbzNj/M0jVNxaoxI2F4tGXN0ZbZIj+KJ+PbJo+w5+Jo6d0UDAtbj3AEd79pjcCaP4OA9NTVzItUdw==}
511
  engines: {node: '>=18.0.0'}
 
515
  aws-crt:
516
  optional: true
517
 
518
+ '@aws-sdk/util-user-agent-node@3.879.0':
519
+ resolution: {integrity: sha512-A5KGc1S+CJRzYnuxJQQmH1BtGsz46AgyHkqReKfGiNQA8ET/9y9LQ5t2ABqnSBHHIh3+MiCcQSkUZ0S3rTodrQ==}
520
+ engines: {node: '>=18.0.0'}
521
+ peerDependencies:
522
+ aws-crt: '>=1.0.0'
523
+ peerDependenciesMeta:
524
+ aws-crt:
525
+ optional: true
526
+
527
  '@aws-sdk/xml-builder@3.821.0':
528
  resolution: {integrity: sha512-DIIotRnefVL6DiaHtO6/21DhJ4JZnnIwdNbpwiAhdt/AVbttcE4yw925gsjur0OGv5BTYXQXU3YnANBYnZjuQA==}
529
  engines: {node: '>=18.0.0'}
530
 
531
+ '@aws-sdk/xml-builder@3.873.0':
532
+ resolution: {integrity: sha512-kLO7k7cGJ6KaHiExSJWojZurF7SnGMDHXRuQunFnEoD0n1yB6Lqy/S/zHiQ7oJnBhPr9q0TW9qFkrsZb1Uc54w==}
533
+ engines: {node: '>=18.0.0'}
534
+
535
  '@babel/code-frame@7.27.1':
536
  resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
537
  engines: {node: '>=6.9.0'}
 
622
  '@dimforge/rapier3d-compat@0.12.0':
623
  resolution: {integrity: sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow==}
624
 
625
+ '@esbuild/aix-ppc64@0.21.5':
626
+ resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
627
+ engines: {node: '>=12'}
628
  cpu: [ppc64]
629
  os: [aix]
630
 
631
+ '@esbuild/android-arm64@0.21.5':
632
+ resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
633
+ engines: {node: '>=12'}
634
  cpu: [arm64]
635
  os: [android]
636
 
637
+ '@esbuild/android-arm@0.21.5':
638
+ resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
639
+ engines: {node: '>=12'}
640
  cpu: [arm]
641
  os: [android]
642
 
643
+ '@esbuild/android-x64@0.21.5':
644
+ resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
645
+ engines: {node: '>=12'}
646
  cpu: [x64]
647
  os: [android]
648
 
649
+ '@esbuild/darwin-arm64@0.21.5':
650
+ resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
651
+ engines: {node: '>=12'}
652
  cpu: [arm64]
653
  os: [darwin]
654
 
655
+ '@esbuild/darwin-x64@0.21.5':
656
+ resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
657
+ engines: {node: '>=12'}
658
  cpu: [x64]
659
  os: [darwin]
660
 
661
+ '@esbuild/freebsd-arm64@0.21.5':
662
+ resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
663
+ engines: {node: '>=12'}
664
  cpu: [arm64]
665
  os: [freebsd]
666
 
667
+ '@esbuild/freebsd-x64@0.21.5':
668
+ resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
669
+ engines: {node: '>=12'}
670
  cpu: [x64]
671
  os: [freebsd]
672
 
673
+ '@esbuild/linux-arm64@0.21.5':
674
+ resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
675
+ engines: {node: '>=12'}
676
  cpu: [arm64]
677
  os: [linux]
678
 
679
+ '@esbuild/linux-arm@0.21.5':
680
+ resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
681
+ engines: {node: '>=12'}
682
  cpu: [arm]
683
  os: [linux]
684
 
685
+ '@esbuild/linux-ia32@0.21.5':
686
+ resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
687
+ engines: {node: '>=12'}
688
  cpu: [ia32]
689
  os: [linux]
690
 
691
+ '@esbuild/linux-loong64@0.21.5':
692
+ resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
693
+ engines: {node: '>=12'}
694
  cpu: [loong64]
695
  os: [linux]
696
 
697
+ '@esbuild/linux-mips64el@0.21.5':
698
+ resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
699
+ engines: {node: '>=12'}
700
  cpu: [mips64el]
701
  os: [linux]
702
 
703
+ '@esbuild/linux-ppc64@0.21.5':
704
+ resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
705
+ engines: {node: '>=12'}
706
  cpu: [ppc64]
707
  os: [linux]
708
 
709
+ '@esbuild/linux-riscv64@0.21.5':
710
+ resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
711
+ engines: {node: '>=12'}
712
  cpu: [riscv64]
713
  os: [linux]
714
 
715
+ '@esbuild/linux-s390x@0.21.5':
716
+ resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
717
+ engines: {node: '>=12'}
718
  cpu: [s390x]
719
  os: [linux]
720
 
721
+ '@esbuild/linux-x64@0.21.5':
722
+ resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
723
+ engines: {node: '>=12'}
724
  cpu: [x64]
725
  os: [linux]
726
 
727
+ '@esbuild/netbsd-x64@0.21.5':
728
+ resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
729
+ engines: {node: '>=12'}
 
 
 
 
 
 
730
  cpu: [x64]
731
  os: [netbsd]
732
 
733
+ '@esbuild/openbsd-x64@0.21.5':
734
+ resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
735
+ engines: {node: '>=12'}
 
 
 
 
 
 
736
  cpu: [x64]
737
  os: [openbsd]
738
 
739
+ '@esbuild/sunos-x64@0.21.5':
740
+ resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
741
+ engines: {node: '>=12'}
 
 
 
 
 
 
742
  cpu: [x64]
743
  os: [sunos]
744
 
745
+ '@esbuild/win32-arm64@0.21.5':
746
+ resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
747
+ engines: {node: '>=12'}
748
  cpu: [arm64]
749
  os: [win32]
750
 
751
+ '@esbuild/win32-ia32@0.21.5':
752
+ resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
753
+ engines: {node: '>=12'}
754
  cpu: [ia32]
755
  os: [win32]
756
 
757
+ '@esbuild/win32-x64@0.21.5':
758
+ resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
759
+ engines: {node: '>=12'}
760
  cpu: [x64]
761
  os: [win32]
762
 
 
1776
  resolution: {integrity: sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==}
1777
  engines: {node: '>=18.0.0'}
1778
 
1779
+ '@smithy/abort-controller@4.0.5':
1780
+ resolution: {integrity: sha512-jcrqdTQurIrBbUm4W2YdLVMQDoL0sA9DTxYd2s+R/y+2U9NLOP7Xf/YqfSg1FZhlZIYEnvk2mwbyvIfdLEPo8g==}
1781
+ engines: {node: '>=18.0.0'}
1782
+
1783
  '@smithy/chunked-blob-reader-native@4.0.0':
1784
  resolution: {integrity: sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig==}
1785
  engines: {node: '>=18.0.0'}
 
1792
  resolution: {integrity: sha512-prmU+rDddxHOH0oNcwemL+SwnzcG65sBF2yXRO7aeXIn/xTlq2pX7JLVbkBnVLowHLg4/OL4+jBmv9hVrVGS+w==}
1793
  engines: {node: '>=18.0.0'}
1794
 
1795
+ '@smithy/config-resolver@4.1.5':
1796
+ resolution: {integrity: sha512-viuHMxBAqydkB0AfWwHIdwf/PRH2z5KHGUzqyRtS/Wv+n3IHI993Sk76VCA7dD/+GzgGOmlJDITfPcJC1nIVIw==}
1797
+ engines: {node: '>=18.0.0'}
1798
+
1799
  '@smithy/core@3.7.2':
1800
  resolution: {integrity: sha512-JoLw59sT5Bm8SAjFCYZyuCGxK8y3vovmoVbZWLDPTH5XpPEIwpFd9m90jjVMwoypDuB/SdVgje5Y4T7w50lJaw==}
1801
  engines: {node: '>=18.0.0'}
1802
 
1803
+ '@smithy/core@3.9.0':
1804
+ resolution: {integrity: sha512-B/GknvCfS3llXd/b++hcrwIuqnEozQDnRL4sBmOac5/z/dr0/yG1PURNPOyU4Lsiy1IyTj8scPxVqRs5dYWf6A==}
1805
+ engines: {node: '>=18.0.0'}
1806
+
1807
  '@smithy/credential-provider-imds@4.0.6':
1808
  resolution: {integrity: sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw==}
1809
  engines: {node: '>=18.0.0'}
1810
 
1811
+ '@smithy/credential-provider-imds@4.0.7':
1812
+ resolution: {integrity: sha512-dDzrMXA8d8riFNiPvytxn0mNwR4B3h8lgrQ5UjAGu6T9z/kRg/Xncf4tEQHE/+t25sY8IH3CowcmWi+1U5B1Gw==}
1813
+ engines: {node: '>=18.0.0'}
1814
+
1815
  '@smithy/eventstream-codec@4.0.4':
1816
  resolution: {integrity: sha512-7XoWfZqWb/QoR/rAU4VSi0mWnO2vu9/ltS6JZ5ZSZv0eovLVfDfu0/AX4ub33RsJTOth3TiFWSHS5YdztvFnig==}
1817
  engines: {node: '>=18.0.0'}
1818
 
1819
+ '@smithy/eventstream-codec@4.0.5':
1820
+ resolution: {integrity: sha512-miEUN+nz2UTNoRYRhRqVTJCx7jMeILdAurStT2XoS+mhokkmz1xAPp95DFW9Gxt4iF2VBqpeF9HbTQ3kY1viOA==}
1821
+ engines: {node: '>=18.0.0'}
1822
+
1823
  '@smithy/eventstream-serde-browser@4.0.4':
1824
  resolution: {integrity: sha512-3fb/9SYaYqbpy/z/H3yIi0bYKyAa89y6xPmIqwr2vQiUT2St+avRt8UKwsWt9fEdEasc5d/V+QjrviRaX1JRFA==}
1825
  engines: {node: '>=18.0.0'}
1826
 
1827
+ '@smithy/eventstream-serde-browser@4.0.5':
1828
+ resolution: {integrity: sha512-LCUQUVTbM6HFKzImYlSB9w4xafZmpdmZsOh9rIl7riPC3osCgGFVP+wwvYVw6pXda9PPT9TcEZxaq3XE81EdJQ==}
1829
+ engines: {node: '>=18.0.0'}
1830
+
1831
  '@smithy/eventstream-serde-config-resolver@4.1.2':
1832
  resolution: {integrity: sha512-JGtambizrWP50xHgbzZI04IWU7LdI0nh/wGbqH3sJesYToMi2j/DcoElqyOcqEIG/D4tNyxgRuaqBXWE3zOFhQ==}
1833
  engines: {node: '>=18.0.0'}
1834
 
1835
+ '@smithy/eventstream-serde-config-resolver@4.1.3':
1836
+ resolution: {integrity: sha512-yTTzw2jZjn/MbHu1pURbHdpjGbCuMHWncNBpJnQAPxOVnFUAbSIUSwafiphVDjNV93TdBJWmeVAds7yl5QCkcA==}
1837
+ engines: {node: '>=18.0.0'}
1838
+
1839
  '@smithy/eventstream-serde-node@4.0.4':
1840
  resolution: {integrity: sha512-RD6UwNZ5zISpOWPuhVgRz60GkSIp0dy1fuZmj4RYmqLVRtejFqQ16WmfYDdoSoAjlp1LX+FnZo+/hkdmyyGZ1w==}
1841
  engines: {node: '>=18.0.0'}
1842
 
1843
+ '@smithy/eventstream-serde-node@4.0.5':
1844
+ resolution: {integrity: sha512-lGS10urI4CNzz6YlTe5EYG0YOpsSp3ra8MXyco4aqSkQDuyZPIw2hcaxDU82OUVtK7UY9hrSvgWtpsW5D4rb4g==}
1845
+ engines: {node: '>=18.0.0'}
1846
+
1847
  '@smithy/eventstream-serde-universal@4.0.4':
1848
  resolution: {integrity: sha512-UeJpOmLGhq1SLox79QWw/0n2PFX+oPRE1ZyRMxPIaFEfCqWaqpB7BU9C8kpPOGEhLF7AwEqfFbtwNxGy4ReENA==}
1849
  engines: {node: '>=18.0.0'}
1850
 
1851
+ '@smithy/eventstream-serde-universal@4.0.5':
1852
+ resolution: {integrity: sha512-JFnmu4SU36YYw3DIBVao3FsJh4Uw65vVDIqlWT4LzR6gXA0F3KP0IXFKKJrhaVzCBhAuMsrUUaT5I+/4ZhF7aw==}
1853
+ engines: {node: '>=18.0.0'}
1854
+
1855
  '@smithy/fetch-http-handler@5.1.0':
1856
  resolution: {integrity: sha512-mADw7MS0bYe2OGKkHYMaqarOXuDwRbO6ArD91XhHcl2ynjGCFF+hvqf0LyQcYxkA1zaWjefSkU7Ne9mqgApSgQ==}
1857
  engines: {node: '>=18.0.0'}
1858
 
1859
+ '@smithy/fetch-http-handler@5.1.1':
1860
+ resolution: {integrity: sha512-61WjM0PWmZJR+SnmzaKI7t7G0UkkNFboDpzIdzSoy7TByUzlxo18Qlh9s71qug4AY4hlH/CwXdubMtkcNEb/sQ==}
1861
+ engines: {node: '>=18.0.0'}
1862
+
1863
  '@smithy/hash-blob-browser@4.0.4':
1864
  resolution: {integrity: sha512-WszRiACJiQV3QG6XMV44i5YWlkrlsM5Yxgz4jvsksuu7LDXA6wAtypfPajtNTadzpJy3KyJPoWehYpmZGKUFIQ==}
1865
  engines: {node: '>=18.0.0'}
1866
 
1867
+ '@smithy/hash-blob-browser@4.0.5':
1868
+ resolution: {integrity: sha512-F7MmCd3FH/Q2edhcKd+qulWkwfChHbc9nhguBlVjSUE6hVHhec3q6uPQ+0u69S6ppvLtR3eStfCuEKMXBXhvvA==}
1869
+ engines: {node: '>=18.0.0'}
1870
+
1871
  '@smithy/hash-node@4.0.4':
1872
  resolution: {integrity: sha512-qnbTPUhCVnCgBp4z4BUJUhOEkVwxiEi1cyFM+Zj6o+aY8OFGxUQleKWq8ltgp3dujuhXojIvJWdoqpm6dVO3lQ==}
1873
  engines: {node: '>=18.0.0'}
1874
 
1875
+ '@smithy/hash-node@4.0.5':
1876
+ resolution: {integrity: sha512-cv1HHkKhpyRb6ahD8Vcfb2Hgz67vNIXEp2vnhzfxLFGRukLCNEA5QdsorbUEzXma1Rco0u3rx5VTqbM06GcZqQ==}
1877
+ engines: {node: '>=18.0.0'}
1878
+
1879
  '@smithy/hash-stream-node@4.0.4':
1880
  resolution: {integrity: sha512-wHo0d8GXyVmpmMh/qOR0R7Y46/G1y6OR8U+bSTB4ppEzRxd1xVAQ9xOE9hOc0bSjhz0ujCPAbfNLkLrpa6cevg==}
1881
  engines: {node: '>=18.0.0'}
1882
 
1883
+ '@smithy/hash-stream-node@4.0.5':
1884
+ resolution: {integrity: sha512-IJuDS3+VfWB67UC0GU0uYBG/TA30w+PlOaSo0GPm9UHS88A6rCP6uZxNjNYiyRtOcjv7TXn/60cW8ox1yuZsLg==}
1885
+ engines: {node: '>=18.0.0'}
1886
+
1887
  '@smithy/invalid-dependency@4.0.4':
1888
  resolution: {integrity: sha512-bNYMi7WKTJHu0gn26wg8OscncTt1t2b8KcsZxvOv56XA6cyXtOAAAaNP7+m45xfppXfOatXF3Sb1MNsLUgVLTw==}
1889
  engines: {node: '>=18.0.0'}
1890
 
1891
+ '@smithy/invalid-dependency@4.0.5':
1892
+ resolution: {integrity: sha512-IVnb78Qtf7EJpoEVo7qJ8BEXQwgC4n3igeJNNKEj/MLYtapnx8A67Zt/J3RXAj2xSO1910zk0LdFiygSemuLow==}
1893
+ engines: {node: '>=18.0.0'}
1894
+
1895
  '@smithy/is-array-buffer@2.2.0':
1896
  resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==}
1897
  engines: {node: '>=14.0.0'}
 
1904
  resolution: {integrity: sha512-uGLBVqcOwrLvGh/v/jw423yWHq/ofUGK1W31M2TNspLQbUV1Va0F5kTxtirkoHawODAZcjXTSGi7JwbnPcDPJg==}
1905
  engines: {node: '>=18.0.0'}
1906
 
1907
+ '@smithy/md5-js@4.0.5':
1908
+ resolution: {integrity: sha512-8n2XCwdUbGr8W/XhMTaxILkVlw2QebkVTn5tm3HOcbPbOpWg89zr6dPXsH8xbeTsbTXlJvlJNTQsKAIoqQGbdA==}
1909
+ engines: {node: '>=18.0.0'}
1910
+
1911
  '@smithy/middleware-content-length@4.0.4':
1912
  resolution: {integrity: sha512-F7gDyfI2BB1Kc+4M6rpuOLne5LOcEknH1n6UQB69qv+HucXBR1rkzXBnQTB2q46sFy1PM/zuSJOB532yc8bg3w==}
1913
  engines: {node: '>=18.0.0'}
1914
 
1915
+ '@smithy/middleware-content-length@4.0.5':
1916
+ resolution: {integrity: sha512-l1jlNZoYzoCC7p0zCtBDE5OBXZ95yMKlRlftooE5jPWQn4YBPLgsp+oeHp7iMHaTGoUdFqmHOPa8c9G3gBsRpQ==}
1917
+ engines: {node: '>=18.0.0'}
1918
+
1919
  '@smithy/middleware-endpoint@4.1.17':
1920
  resolution: {integrity: sha512-S3hSGLKmHG1m35p/MObQCBCdRsrpbPU8B129BVzRqRfDvQqPMQ14iO4LyRw+7LNizYc605COYAcjqgawqi+6jA==}
1921
  engines: {node: '>=18.0.0'}
1922
 
1923
+ '@smithy/middleware-endpoint@4.1.19':
1924
+ resolution: {integrity: sha512-EAlEPncqo03siNZJ9Tm6adKCQ+sw5fNU8ncxWwaH0zTCwMPsgmERTi6CEKaermZdgJb+4Yvh0NFm36HeO4PGgQ==}
1925
+ engines: {node: '>=18.0.0'}
1926
+
1927
  '@smithy/middleware-retry@4.1.18':
1928
  resolution: {integrity: sha512-bYLZ4DkoxSsPxpdmeapvAKy7rM5+25gR7PGxq2iMiecmbrRGBHj9s75N74Ylg+aBiw9i5jIowC/cLU2NR0qH8w==}
1929
  engines: {node: '>=18.0.0'}
1930
 
1931
+ '@smithy/middleware-retry@4.1.20':
1932
+ resolution: {integrity: sha512-T3maNEm3Masae99eFdx1Q7PIqBBEVOvRd5hralqKZNeIivnoGNx5OFtI3DiZ5gCjUkl0mNondlzSXeVxkinh7Q==}
1933
+ engines: {node: '>=18.0.0'}
1934
+
1935
  '@smithy/middleware-serde@4.0.8':
1936
  resolution: {integrity: sha512-iSSl7HJoJaGyMIoNn2B7czghOVwJ9nD7TMvLhMWeSB5vt0TnEYyRRqPJu/TqW76WScaNvYYB8nRoiBHR9S1Ddw==}
1937
  engines: {node: '>=18.0.0'}
1938
 
1939
+ '@smithy/middleware-serde@4.0.9':
1940
+ resolution: {integrity: sha512-uAFFR4dpeoJPGz8x9mhxp+RPjo5wW0QEEIPPPbLXiRRWeCATf/Km3gKIVR5vaP8bN1kgsPhcEeh+IZvUlBv6Xg==}
1941
+ engines: {node: '>=18.0.0'}
1942
+
1943
  '@smithy/middleware-stack@4.0.4':
1944
  resolution: {integrity: sha512-kagK5ggDrBUCCzI93ft6DjteNSfY8Ulr83UtySog/h09lTIOAJ/xUSObutanlPT0nhoHAkpmW9V5K8oPyLh+QA==}
1945
  engines: {node: '>=18.0.0'}
1946
 
1947
+ '@smithy/middleware-stack@4.0.5':
1948
+ resolution: {integrity: sha512-/yoHDXZPh3ocRVyeWQFvC44u8seu3eYzZRveCMfgMOBcNKnAmOvjbL9+Cp5XKSIi9iYA9PECUuW2teDAk8T+OQ==}
1949
+ engines: {node: '>=18.0.0'}
1950
+
1951
  '@smithy/node-config-provider@4.1.3':
1952
  resolution: {integrity: sha512-HGHQr2s59qaU1lrVH6MbLlmOBxadtzTsoO4c+bF5asdgVik3I8o7JIOzoeqWc5MjVa+vD36/LWE0iXKpNqooRw==}
1953
  engines: {node: '>=18.0.0'}
1954
 
1955
+ '@smithy/node-config-provider@4.1.4':
1956
+ resolution: {integrity: sha512-+UDQV/k42jLEPPHSn39l0Bmc4sB1xtdI9Gd47fzo/0PbXzJ7ylgaOByVjF5EeQIumkepnrJyfx86dPa9p47Y+w==}
1957
+ engines: {node: '>=18.0.0'}
1958
+
1959
  '@smithy/node-http-handler@4.1.0':
1960
  resolution: {integrity: sha512-vqfSiHz2v8b3TTTrdXi03vNz1KLYYS3bhHCDv36FYDqxT7jvTll1mMnCrkD+gOvgwybuunh/2VmvOMqwBegxEg==}
1961
  engines: {node: '>=18.0.0'}
1962
 
1963
+ '@smithy/node-http-handler@4.1.1':
1964
+ resolution: {integrity: sha512-RHnlHqFpoVdjSPPiYy/t40Zovf3BBHc2oemgD7VsVTFFZrU5erFFe0n52OANZZ/5sbshgD93sOh5r6I35Xmpaw==}
1965
+ engines: {node: '>=18.0.0'}
1966
+
1967
  '@smithy/property-provider@4.0.4':
1968
  resolution: {integrity: sha512-qHJ2sSgu4FqF4U/5UUp4DhXNmdTrgmoAai6oQiM+c5RZ/sbDwJ12qxB1M6FnP+Tn/ggkPZf9ccn4jqKSINaquw==}
1969
  engines: {node: '>=18.0.0'}
1970
 
1971
+ '@smithy/property-provider@4.0.5':
1972
+ resolution: {integrity: sha512-R/bswf59T/n9ZgfgUICAZoWYKBHcsVDurAGX88zsiUtOTA/xUAPyiT+qkNCPwFn43pZqN84M4MiUsbSGQmgFIQ==}
1973
+ engines: {node: '>=18.0.0'}
1974
+
1975
  '@smithy/protocol-http@5.1.2':
1976
  resolution: {integrity: sha512-rOG5cNLBXovxIrICSBm95dLqzfvxjEmuZx4KK3hWwPFHGdW3lxY0fZNXfv2zebfRO7sJZ5pKJYHScsqopeIWtQ==}
1977
  engines: {node: '>=18.0.0'}
1978
 
1979
+ '@smithy/protocol-http@5.1.3':
1980
+ resolution: {integrity: sha512-fCJd2ZR7D22XhDY0l+92pUag/7je2BztPRQ01gU5bMChcyI0rlly7QFibnYHzcxDvccMjlpM/Q1ev8ceRIb48w==}
1981
+ engines: {node: '>=18.0.0'}
1982
+
1983
  '@smithy/querystring-builder@4.0.4':
1984
  resolution: {integrity: sha512-SwREZcDnEYoh9tLNgMbpop+UTGq44Hl9tdj3rf+yeLcfH7+J8OXEBaMc2kDxtyRHu8BhSg9ADEx0gFHvpJgU8w==}
1985
  engines: {node: '>=18.0.0'}
1986
 
1987
+ '@smithy/querystring-builder@4.0.5':
1988
+ resolution: {integrity: sha512-NJeSCU57piZ56c+/wY+AbAw6rxCCAOZLCIniRE7wqvndqxcKKDOXzwWjrY7wGKEISfhL9gBbAaWWgHsUGedk+A==}
1989
+ engines: {node: '>=18.0.0'}
1990
+
1991
  '@smithy/querystring-parser@4.0.4':
1992
  resolution: {integrity: sha512-6yZf53i/qB8gRHH/l2ZwUG5xgkPgQF15/KxH0DdXMDHjesA9MeZje/853ifkSY0x4m5S+dfDZ+c4x439PF0M2w==}
1993
  engines: {node: '>=18.0.0'}
1994
 
1995
+ '@smithy/querystring-parser@4.0.5':
1996
+ resolution: {integrity: sha512-6SV7md2CzNG/WUeTjVe6Dj8noH32r4MnUeFKZrnVYsQxpGSIcphAanQMayi8jJLZAWm6pdM9ZXvKCpWOsIGg0w==}
1997
+ engines: {node: '>=18.0.0'}
1998
+
1999
  '@smithy/service-error-classification@4.0.6':
2000
  resolution: {integrity: sha512-RRoTDL//7xi4tn5FrN2NzH17jbgmnKidUqd4KvquT0954/i6CXXkh1884jBiunq24g9cGtPBEXlU40W6EpNOOg==}
2001
  engines: {node: '>=18.0.0'}
2002
 
2003
+ '@smithy/service-error-classification@4.0.7':
2004
+ resolution: {integrity: sha512-XvRHOipqpwNhEjDf2L5gJowZEm5nsxC16pAZOeEcsygdjv9A2jdOh3YoDQvOXBGTsaJk6mNWtzWalOB9976Wlg==}
2005
+ engines: {node: '>=18.0.0'}
2006
+
2007
  '@smithy/shared-ini-file-loader@4.0.4':
2008
  resolution: {integrity: sha512-63X0260LoFBjrHifPDs+nM9tV0VMkOTl4JRMYNuKh/f5PauSjowTfvF3LogfkWdcPoxsA9UjqEOgjeYIbhb7Nw==}
2009
  engines: {node: '>=18.0.0'}
2010
 
2011
+ '@smithy/shared-ini-file-loader@4.0.5':
2012
+ resolution: {integrity: sha512-YVVwehRDuehgoXdEL4r1tAAzdaDgaC9EQvhK0lEbfnbrd0bd5+CTQumbdPryX3J2shT7ZqQE+jPW4lmNBAB8JQ==}
2013
+ engines: {node: '>=18.0.0'}
2014
+
2015
  '@smithy/signature-v4@5.1.2':
2016
  resolution: {integrity: sha512-d3+U/VpX7a60seHziWnVZOHuEgJlclufjkS6zhXvxcJgkJq4UWdH5eOBLzHRMx6gXjsdT9h6lfpmLzbrdupHgQ==}
2017
  engines: {node: '>=18.0.0'}
2018
 
2019
+ '@smithy/signature-v4@5.1.3':
2020
+ resolution: {integrity: sha512-mARDSXSEgllNzMw6N+mC+r1AQlEBO3meEAkR/UlfAgnMzJUB3goRBWgip1EAMG99wh36MDqzo86SfIX5Y+VEaw==}
2021
+ engines: {node: '>=18.0.0'}
2022
+
2023
  '@smithy/smithy-client@4.4.9':
2024
  resolution: {integrity: sha512-mbMg8mIUAWwMmb74LoYiArP04zWElPzDoA1jVOp3or0cjlDMgoS6WTC3QXK0Vxoc9I4zdrX0tq6qsOmaIoTWEQ==}
2025
  engines: {node: '>=18.0.0'}
2026
 
2027
+ '@smithy/smithy-client@4.5.0':
2028
+ resolution: {integrity: sha512-ZSdE3vl0MuVbEwJBxSftm0J5nL/gw76xp5WF13zW9cN18MFuFXD5/LV0QD8P+sCU5bSWGyy6CTgUupE1HhOo1A==}
2029
+ engines: {node: '>=18.0.0'}
2030
+
2031
  '@smithy/types@4.3.1':
2032
  resolution: {integrity: sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==}
2033
  engines: {node: '>=18.0.0'}
2034
 
2035
+ '@smithy/types@4.3.2':
2036
+ resolution: {integrity: sha512-QO4zghLxiQ5W9UZmX2Lo0nta2PuE1sSrXUYDoaB6HMR762C0P7v/HEPHf6ZdglTVssJG1bsrSBxdc3quvDSihw==}
2037
+ engines: {node: '>=18.0.0'}
2038
+
2039
  '@smithy/url-parser@4.0.4':
2040
  resolution: {integrity: sha512-eMkc144MuN7B0TDA4U2fKs+BqczVbk3W+qIvcoCY6D1JY3hnAdCuhCZODC+GAeaxj0p6Jroz4+XMUn3PCxQQeQ==}
2041
  engines: {node: '>=18.0.0'}
2042
 
2043
+ '@smithy/url-parser@4.0.5':
2044
+ resolution: {integrity: sha512-j+733Um7f1/DXjYhCbvNXABV53NyCRRA54C7bNEIxNPs0YjfRxeMKjjgm2jvTYrciZyCjsicHwQ6Q0ylo+NAUw==}
2045
+ engines: {node: '>=18.0.0'}
2046
+
2047
  '@smithy/util-base64@4.0.0':
2048
  resolution: {integrity: sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==}
2049
  engines: {node: '>=18.0.0'}
 
2072
  resolution: {integrity: sha512-pxEWsxIsOPLfKNXvpgFHBGFC3pKYKUFhrud1kyooO9CJai6aaKDHfT10Mi5iiipPXN/JhKAu3qX9o75+X85OdQ==}
2073
  engines: {node: '>=18.0.0'}
2074
 
2075
+ '@smithy/util-defaults-mode-browser@4.0.27':
2076
+ resolution: {integrity: sha512-i/Fu6AFT5014VJNgWxKomBJP/GB5uuOsM4iHdcmplLm8B1eAqnRItw4lT2qpdO+mf+6TFmf6dGcggGLAVMZJsQ==}
2077
+ engines: {node: '>=18.0.0'}
2078
+
2079
  '@smithy/util-defaults-mode-node@4.0.25':
2080
  resolution: {integrity: sha512-+w4n4hKFayeCyELZLfsSQG5mCC3TwSkmRHv4+el5CzFU8ToQpYGhpV7mrRzqlwKkntlPilT1HJy1TVeEvEjWOQ==}
2081
  engines: {node: '>=18.0.0'}
2082
 
2083
+ '@smithy/util-defaults-mode-node@4.0.27':
2084
+ resolution: {integrity: sha512-3W0qClMyxl/ELqTA39aNw1N+pN0IjpXT7lPFvZ8zTxqVFP7XCpACB9QufmN4FQtd39xbgS7/Lekn7LmDa63I5w==}
2085
+ engines: {node: '>=18.0.0'}
2086
+
2087
  '@smithy/util-endpoints@3.0.6':
2088
  resolution: {integrity: sha512-YARl3tFL3WgPuLzljRUnrS2ngLiUtkwhQtj8PAL13XZSyUiNLQxwG3fBBq3QXFqGFUXepIN73pINp3y8c2nBmA==}
2089
  engines: {node: '>=18.0.0'}
2090
 
2091
+ '@smithy/util-endpoints@3.0.7':
2092
+ resolution: {integrity: sha512-klGBP+RpBp6V5JbrY2C/VKnHXn3d5V2YrifZbmMY8os7M6m8wdYFoO6w/fe5VkP+YVwrEktW3IWYaSQVNZJ8oQ==}
2093
+ engines: {node: '>=18.0.0'}
2094
+
2095
  '@smithy/util-hex-encoding@4.0.0':
2096
  resolution: {integrity: sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==}
2097
  engines: {node: '>=18.0.0'}
 
2100
  resolution: {integrity: sha512-9MLKmkBmf4PRb0ONJikCbCwORACcil6gUWojwARCClT7RmLzF04hUR4WdRprIXal7XVyrddadYNfp2eF3nrvtQ==}
2101
  engines: {node: '>=18.0.0'}
2102
 
2103
+ '@smithy/util-middleware@4.0.5':
2104
+ resolution: {integrity: sha512-N40PfqsZHRSsByGB81HhSo+uvMxEHT+9e255S53pfBw/wI6WKDI7Jw9oyu5tJTLwZzV5DsMha3ji8jk9dsHmQQ==}
2105
+ engines: {node: '>=18.0.0'}
2106
+
2107
  '@smithy/util-retry@4.0.6':
2108
  resolution: {integrity: sha512-+YekoF2CaSMv6zKrA6iI/N9yva3Gzn4L6n35Luydweu5MMPYpiGZlWqehPHDHyNbnyaYlz/WJyYAZnC+loBDZg==}
2109
  engines: {node: '>=18.0.0'}
2110
 
2111
+ '@smithy/util-retry@4.0.7':
2112
+ resolution: {integrity: sha512-TTO6rt0ppK70alZpkjwy+3nQlTiqNfoXja+qwuAchIEAIoSZW8Qyd76dvBv3I5bCpE38APafG23Y/u270NspiQ==}
2113
+ engines: {node: '>=18.0.0'}
2114
+
2115
  '@smithy/util-stream@4.2.3':
2116
  resolution: {integrity: sha512-cQn412DWHHFNKrQfbHY8vSFI3nTROY1aIKji9N0tpp8gUABRilr7wdf8fqBbSlXresobM+tQFNk6I+0LXK/YZg==}
2117
  engines: {node: '>=18.0.0'}
2118
 
2119
+ '@smithy/util-stream@4.2.4':
2120
+ resolution: {integrity: sha512-vSKnvNZX2BXzl0U2RgCLOwWaAP9x/ddd/XobPK02pCbzRm5s55M53uwb1rl/Ts7RXZvdJZerPkA+en2FDghLuQ==}
2121
+ engines: {node: '>=18.0.0'}
2122
+
2123
  '@smithy/util-uri-escape@4.0.0':
2124
  resolution: {integrity: sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==}
2125
  engines: {node: '>=18.0.0'}
 
2136
  resolution: {integrity: sha512-slcr1wdRbX7NFphXZOxtxRNA7hXAAtJAXJDE/wdoMAos27SIquVCKiSqfB6/28YzQ8FCsB5NKkhdM5gMADbqxg==}
2137
  engines: {node: '>=18.0.0'}
2138
 
2139
+ '@smithy/util-waiter@4.0.7':
2140
+ resolution: {integrity: sha512-mYqtQXPmrwvUljaHyGxYUIIRI3qjBTEb/f5QFi3A6VlxhpmZd5mWXn9W+qUkf2pVE1Hv3SqxefiZOPGdxmO64A==}
2141
+ engines: {node: '>=18.0.0'}
2142
+
2143
  '@swc/helpers@0.5.17':
2144
  resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
2145
 
 
2643
  emoji-regex@9.2.2:
2644
  resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
2645
 
2646
+ esbuild@0.21.5:
2647
+ resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
2648
+ engines: {node: '>=12'}
2649
  hasBin: true
2650
 
2651
  escalade@3.2.0:
 
2743
  fault@1.0.4:
2744
  resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==}
2745
 
 
 
 
 
 
 
 
 
2746
  fflate@0.6.10:
2747
  resolution: {integrity: sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==}
2748
 
 
3151
  resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
3152
  engines: {node: '>=8.6'}
3153
 
 
 
 
 
3154
  pify@2.3.0:
3155
  resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
3156
  engines: {node: '>=0.10.0'}
 
3553
  tiny-invariant@1.3.3:
3554
  resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
3555
 
 
 
 
 
3556
  to-regex-range@5.0.1:
3557
  resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
3558
  engines: {node: '>=8.0'}
 
3665
  victory-vendor@36.9.2:
3666
  resolution: {integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==}
3667
 
3668
+ vite@5.4.19:
3669
+ resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==}
3670
+ engines: {node: ^18.0.0 || >=20.0.0}
3671
  hasBin: true
3672
  peerDependencies:
3673
+ '@types/node': ^18.0.0 || >=20.0.0
3674
+ less: '*'
 
3675
  lightningcss: ^1.21.0
3676
+ sass: '*'
3677
+ sass-embedded: '*'
3678
+ stylus: '*'
3679
+ sugarss: '*'
3680
+ terser: ^5.4.0
 
 
3681
  peerDependenciesMeta:
3682
  '@types/node':
3683
  optional: true
 
 
3684
  less:
3685
  optional: true
3686
  lightningcss:
 
3695
  optional: true
3696
  terser:
3697
  optional: true
 
 
 
 
3698
 
3699
  webgl-constants@1.1.1:
3700
  resolution: {integrity: sha512-LkBXKjU5r9vAW7Gcu3T5u+5cvSvh5WwINdr0C+9jpzVB41cjQAP5ePArDtk/WHYdVj0GefCgM73BA7FlIiNtdg==}
 
3894
  transitivePeerDependencies:
3895
  - aws-crt
3896
 
3897
+ '@aws-sdk/client-s3@3.879.0':
3898
+ dependencies:
3899
+ '@aws-crypto/sha1-browser': 5.2.0
3900
+ '@aws-crypto/sha256-browser': 5.2.0
3901
+ '@aws-crypto/sha256-js': 5.2.0
3902
+ '@aws-sdk/core': 3.879.0
3903
+ '@aws-sdk/credential-provider-node': 3.879.0
3904
+ '@aws-sdk/middleware-bucket-endpoint': 3.873.0
3905
+ '@aws-sdk/middleware-expect-continue': 3.873.0
3906
+ '@aws-sdk/middleware-flexible-checksums': 3.879.0
3907
+ '@aws-sdk/middleware-host-header': 3.873.0
3908
+ '@aws-sdk/middleware-location-constraint': 3.873.0
3909
+ '@aws-sdk/middleware-logger': 3.876.0
3910
+ '@aws-sdk/middleware-recursion-detection': 3.873.0
3911
+ '@aws-sdk/middleware-sdk-s3': 3.879.0
3912
+ '@aws-sdk/middleware-ssec': 3.873.0
3913
+ '@aws-sdk/middleware-user-agent': 3.879.0
3914
+ '@aws-sdk/region-config-resolver': 3.873.0
3915
+ '@aws-sdk/signature-v4-multi-region': 3.879.0
3916
+ '@aws-sdk/types': 3.862.0
3917
+ '@aws-sdk/util-endpoints': 3.879.0
3918
+ '@aws-sdk/util-user-agent-browser': 3.873.0
3919
+ '@aws-sdk/util-user-agent-node': 3.879.0
3920
+ '@aws-sdk/xml-builder': 3.873.0
3921
+ '@smithy/config-resolver': 4.1.5
3922
+ '@smithy/core': 3.9.0
3923
+ '@smithy/eventstream-serde-browser': 4.0.5
3924
+ '@smithy/eventstream-serde-config-resolver': 4.1.3
3925
+ '@smithy/eventstream-serde-node': 4.0.5
3926
+ '@smithy/fetch-http-handler': 5.1.1
3927
+ '@smithy/hash-blob-browser': 4.0.5
3928
+ '@smithy/hash-node': 4.0.5
3929
+ '@smithy/hash-stream-node': 4.0.5
3930
+ '@smithy/invalid-dependency': 4.0.5
3931
+ '@smithy/md5-js': 4.0.5
3932
+ '@smithy/middleware-content-length': 4.0.5
3933
+ '@smithy/middleware-endpoint': 4.1.19
3934
+ '@smithy/middleware-retry': 4.1.20
3935
+ '@smithy/middleware-serde': 4.0.9
3936
+ '@smithy/middleware-stack': 4.0.5
3937
+ '@smithy/node-config-provider': 4.1.4
3938
+ '@smithy/node-http-handler': 4.1.1
3939
+ '@smithy/protocol-http': 5.1.3
3940
+ '@smithy/smithy-client': 4.5.0
3941
+ '@smithy/types': 4.3.2
3942
+ '@smithy/url-parser': 4.0.5
3943
+ '@smithy/util-base64': 4.0.0
3944
+ '@smithy/util-body-length-browser': 4.0.0
3945
+ '@smithy/util-body-length-node': 4.0.0
3946
+ '@smithy/util-defaults-mode-browser': 4.0.27
3947
+ '@smithy/util-defaults-mode-node': 4.0.27
3948
+ '@smithy/util-endpoints': 3.0.7
3949
+ '@smithy/util-middleware': 4.0.5
3950
+ '@smithy/util-retry': 4.0.7
3951
+ '@smithy/util-stream': 4.2.4
3952
+ '@smithy/util-utf8': 4.0.0
3953
+ '@smithy/util-waiter': 4.0.7
3954
+ '@types/uuid': 9.0.8
3955
+ tslib: 2.8.1
3956
+ uuid: 9.0.1
3957
+ transitivePeerDependencies:
3958
+ - aws-crt
3959
+
3960
  '@aws-sdk/client-sso@3.848.0':
3961
  dependencies:
3962
  '@aws-crypto/sha256-browser': 5.2.0
 
4000
  transitivePeerDependencies:
4001
  - aws-crt
4002
 
4003
+ '@aws-sdk/client-sso@3.879.0':
4004
+ dependencies:
4005
+ '@aws-crypto/sha256-browser': 5.2.0
4006
+ '@aws-crypto/sha256-js': 5.2.0
4007
+ '@aws-sdk/core': 3.879.0
4008
+ '@aws-sdk/middleware-host-header': 3.873.0
4009
+ '@aws-sdk/middleware-logger': 3.876.0
4010
+ '@aws-sdk/middleware-recursion-detection': 3.873.0
4011
+ '@aws-sdk/middleware-user-agent': 3.879.0
4012
+ '@aws-sdk/region-config-resolver': 3.873.0
4013
+ '@aws-sdk/types': 3.862.0
4014
+ '@aws-sdk/util-endpoints': 3.879.0
4015
+ '@aws-sdk/util-user-agent-browser': 3.873.0
4016
+ '@aws-sdk/util-user-agent-node': 3.879.0
4017
+ '@smithy/config-resolver': 4.1.5
4018
+ '@smithy/core': 3.9.0
4019
+ '@smithy/fetch-http-handler': 5.1.1
4020
+ '@smithy/hash-node': 4.0.5
4021
+ '@smithy/invalid-dependency': 4.0.5
4022
+ '@smithy/middleware-content-length': 4.0.5
4023
+ '@smithy/middleware-endpoint': 4.1.19
4024
+ '@smithy/middleware-retry': 4.1.20
4025
+ '@smithy/middleware-serde': 4.0.9
4026
+ '@smithy/middleware-stack': 4.0.5
4027
+ '@smithy/node-config-provider': 4.1.4
4028
+ '@smithy/node-http-handler': 4.1.1
4029
+ '@smithy/protocol-http': 5.1.3
4030
+ '@smithy/smithy-client': 4.5.0
4031
+ '@smithy/types': 4.3.2
4032
+ '@smithy/url-parser': 4.0.5
4033
+ '@smithy/util-base64': 4.0.0
4034
+ '@smithy/util-body-length-browser': 4.0.0
4035
+ '@smithy/util-body-length-node': 4.0.0
4036
+ '@smithy/util-defaults-mode-browser': 4.0.27
4037
+ '@smithy/util-defaults-mode-node': 4.0.27
4038
+ '@smithy/util-endpoints': 3.0.7
4039
+ '@smithy/util-middleware': 4.0.5
4040
+ '@smithy/util-retry': 4.0.7
4041
+ '@smithy/util-utf8': 4.0.0
4042
+ tslib: 2.8.1
4043
+ transitivePeerDependencies:
4044
+ - aws-crt
4045
+
4046
  '@aws-sdk/core@3.846.0':
4047
  dependencies:
4048
  '@aws-sdk/types': 3.840.0
 
4061
  fast-xml-parser: 5.2.5
4062
  tslib: 2.8.1
4063
 
4064
+ '@aws-sdk/core@3.879.0':
4065
+ dependencies:
4066
+ '@aws-sdk/types': 3.862.0
4067
+ '@aws-sdk/xml-builder': 3.873.0
4068
+ '@smithy/core': 3.9.0
4069
+ '@smithy/node-config-provider': 4.1.4
4070
+ '@smithy/property-provider': 4.0.5
4071
+ '@smithy/protocol-http': 5.1.3
4072
+ '@smithy/signature-v4': 5.1.3
4073
+ '@smithy/smithy-client': 4.5.0
4074
+ '@smithy/types': 4.3.2
4075
+ '@smithy/util-base64': 4.0.0
4076
+ '@smithy/util-body-length-browser': 4.0.0
4077
+ '@smithy/util-middleware': 4.0.5
4078
+ '@smithy/util-utf8': 4.0.0
4079
+ fast-xml-parser: 5.2.5
4080
+ tslib: 2.8.1
4081
+
4082
  '@aws-sdk/credential-provider-env@3.846.0':
4083
  dependencies:
4084
  '@aws-sdk/core': 3.846.0
 
4087
  '@smithy/types': 4.3.1
4088
  tslib: 2.8.1
4089
 
4090
+ '@aws-sdk/credential-provider-env@3.879.0':
4091
+ dependencies:
4092
+ '@aws-sdk/core': 3.879.0
4093
+ '@aws-sdk/types': 3.862.0
4094
+ '@smithy/property-provider': 4.0.5
4095
+ '@smithy/types': 4.3.2
4096
+ tslib: 2.8.1
4097
+
4098
  '@aws-sdk/credential-provider-http@3.846.0':
4099
  dependencies:
4100
  '@aws-sdk/core': 3.846.0
 
4108
  '@smithy/util-stream': 4.2.3
4109
  tslib: 2.8.1
4110
 
4111
+ '@aws-sdk/credential-provider-http@3.879.0':
4112
+ dependencies:
4113
+ '@aws-sdk/core': 3.879.0
4114
+ '@aws-sdk/types': 3.862.0
4115
+ '@smithy/fetch-http-handler': 5.1.1
4116
+ '@smithy/node-http-handler': 4.1.1
4117
+ '@smithy/property-provider': 4.0.5
4118
+ '@smithy/protocol-http': 5.1.3
4119
+ '@smithy/smithy-client': 4.5.0
4120
+ '@smithy/types': 4.3.2
4121
+ '@smithy/util-stream': 4.2.4
4122
+ tslib: 2.8.1
4123
+
4124
  '@aws-sdk/credential-provider-ini@3.848.0':
4125
  dependencies:
4126
  '@aws-sdk/core': 3.846.0
 
4139
  transitivePeerDependencies:
4140
  - aws-crt
4141
 
4142
+ '@aws-sdk/credential-provider-ini@3.879.0':
4143
+ dependencies:
4144
+ '@aws-sdk/core': 3.879.0
4145
+ '@aws-sdk/credential-provider-env': 3.879.0
4146
+ '@aws-sdk/credential-provider-http': 3.879.0
4147
+ '@aws-sdk/credential-provider-process': 3.879.0
4148
+ '@aws-sdk/credential-provider-sso': 3.879.0
4149
+ '@aws-sdk/credential-provider-web-identity': 3.879.0
4150
+ '@aws-sdk/nested-clients': 3.879.0
4151
+ '@aws-sdk/types': 3.862.0
4152
+ '@smithy/credential-provider-imds': 4.0.7
4153
+ '@smithy/property-provider': 4.0.5
4154
+ '@smithy/shared-ini-file-loader': 4.0.5
4155
+ '@smithy/types': 4.3.2
4156
+ tslib: 2.8.1
4157
+ transitivePeerDependencies:
4158
+ - aws-crt
4159
+
4160
  '@aws-sdk/credential-provider-node@3.848.0':
4161
  dependencies:
4162
  '@aws-sdk/credential-provider-env': 3.846.0
 
4174
  transitivePeerDependencies:
4175
  - aws-crt
4176
 
4177
+ '@aws-sdk/credential-provider-node@3.879.0':
4178
+ dependencies:
4179
+ '@aws-sdk/credential-provider-env': 3.879.0
4180
+ '@aws-sdk/credential-provider-http': 3.879.0
4181
+ '@aws-sdk/credential-provider-ini': 3.879.0
4182
+ '@aws-sdk/credential-provider-process': 3.879.0
4183
+ '@aws-sdk/credential-provider-sso': 3.879.0
4184
+ '@aws-sdk/credential-provider-web-identity': 3.879.0
4185
+ '@aws-sdk/types': 3.862.0
4186
+ '@smithy/credential-provider-imds': 4.0.7
4187
+ '@smithy/property-provider': 4.0.5
4188
+ '@smithy/shared-ini-file-loader': 4.0.5
4189
+ '@smithy/types': 4.3.2
4190
+ tslib: 2.8.1
4191
+ transitivePeerDependencies:
4192
+ - aws-crt
4193
+
4194
+ '@aws-sdk/credential-provider-process@3.846.0':
4195
  dependencies:
4196
  '@aws-sdk/core': 3.846.0
4197
  '@aws-sdk/types': 3.840.0
 
4200
  '@smithy/types': 4.3.1
4201
  tslib: 2.8.1
4202
 
4203
+ '@aws-sdk/credential-provider-process@3.879.0':
4204
+ dependencies:
4205
+ '@aws-sdk/core': 3.879.0
4206
+ '@aws-sdk/types': 3.862.0
4207
+ '@smithy/property-provider': 4.0.5
4208
+ '@smithy/shared-ini-file-loader': 4.0.5
4209
+ '@smithy/types': 4.3.2
4210
+ tslib: 2.8.1
4211
+
4212
  '@aws-sdk/credential-provider-sso@3.848.0':
4213
  dependencies:
4214
  '@aws-sdk/client-sso': 3.848.0
 
4222
  transitivePeerDependencies:
4223
  - aws-crt
4224
 
4225
+ '@aws-sdk/credential-provider-sso@3.879.0':
4226
+ dependencies:
4227
+ '@aws-sdk/client-sso': 3.879.0
4228
+ '@aws-sdk/core': 3.879.0
4229
+ '@aws-sdk/token-providers': 3.879.0
4230
+ '@aws-sdk/types': 3.862.0
4231
+ '@smithy/property-provider': 4.0.5
4232
+ '@smithy/shared-ini-file-loader': 4.0.5
4233
+ '@smithy/types': 4.3.2
4234
+ tslib: 2.8.1
4235
+ transitivePeerDependencies:
4236
+ - aws-crt
4237
+
4238
  '@aws-sdk/credential-provider-web-identity@3.848.0':
4239
  dependencies:
4240
  '@aws-sdk/core': 3.846.0
 
4246
  transitivePeerDependencies:
4247
  - aws-crt
4248
 
4249
+ '@aws-sdk/credential-provider-web-identity@3.879.0':
4250
+ dependencies:
4251
+ '@aws-sdk/core': 3.879.0
4252
+ '@aws-sdk/nested-clients': 3.879.0
4253
+ '@aws-sdk/types': 3.862.0
4254
+ '@smithy/property-provider': 4.0.5
4255
+ '@smithy/types': 4.3.2
4256
+ tslib: 2.8.1
4257
+ transitivePeerDependencies:
4258
+ - aws-crt
4259
+
4260
  '@aws-sdk/lib-storage@3.850.0(@aws-sdk/client-s3@3.850.0)':
4261
  dependencies:
4262
  '@aws-sdk/client-s3': 3.850.0
 
4268
  stream-browserify: 3.0.0
4269
  tslib: 2.8.1
4270
 
4271
+ '@aws-sdk/lib-storage@3.879.0(@aws-sdk/client-s3@3.879.0)':
4272
+ dependencies:
4273
+ '@aws-sdk/client-s3': 3.879.0
4274
+ '@smithy/abort-controller': 4.0.5
4275
+ '@smithy/middleware-endpoint': 4.1.19
4276
+ '@smithy/smithy-client': 4.5.0
4277
+ buffer: 5.6.0
4278
+ events: 3.3.0
4279
+ stream-browserify: 3.0.0
4280
+ tslib: 2.8.1
4281
+
4282
  '@aws-sdk/middleware-bucket-endpoint@3.840.0':
4283
  dependencies:
4284
  '@aws-sdk/types': 3.840.0
 
4289
  '@smithy/util-config-provider': 4.0.0
4290
  tslib: 2.8.1
4291
 
4292
+ '@aws-sdk/middleware-bucket-endpoint@3.873.0':
4293
+ dependencies:
4294
+ '@aws-sdk/types': 3.862.0
4295
+ '@aws-sdk/util-arn-parser': 3.873.0
4296
+ '@smithy/node-config-provider': 4.1.4
4297
+ '@smithy/protocol-http': 5.1.3
4298
+ '@smithy/types': 4.3.2
4299
+ '@smithy/util-config-provider': 4.0.0
4300
+ tslib: 2.8.1
4301
+
4302
  '@aws-sdk/middleware-expect-continue@3.840.0':
4303
  dependencies:
4304
  '@aws-sdk/types': 3.840.0
 
4306
  '@smithy/types': 4.3.1
4307
  tslib: 2.8.1
4308
 
4309
+ '@aws-sdk/middleware-expect-continue@3.873.0':
4310
+ dependencies:
4311
+ '@aws-sdk/types': 3.862.0
4312
+ '@smithy/protocol-http': 5.1.3
4313
+ '@smithy/types': 4.3.2
4314
+ tslib: 2.8.1
4315
+
4316
  '@aws-sdk/middleware-flexible-checksums@3.846.0':
4317
  dependencies:
4318
  '@aws-crypto/crc32': 5.2.0
 
4329
  '@smithy/util-utf8': 4.0.0
4330
  tslib: 2.8.1
4331
 
4332
+ '@aws-sdk/middleware-flexible-checksums@3.879.0':
4333
+ dependencies:
4334
+ '@aws-crypto/crc32': 5.2.0
4335
+ '@aws-crypto/crc32c': 5.2.0
4336
+ '@aws-crypto/util': 5.2.0
4337
+ '@aws-sdk/core': 3.879.0
4338
+ '@aws-sdk/types': 3.862.0
4339
+ '@smithy/is-array-buffer': 4.0.0
4340
+ '@smithy/node-config-provider': 4.1.4
4341
+ '@smithy/protocol-http': 5.1.3
4342
+ '@smithy/types': 4.3.2
4343
+ '@smithy/util-middleware': 4.0.5
4344
+ '@smithy/util-stream': 4.2.4
4345
+ '@smithy/util-utf8': 4.0.0
4346
+ tslib: 2.8.1
4347
+
4348
  '@aws-sdk/middleware-host-header@3.840.0':
4349
  dependencies:
4350
  '@aws-sdk/types': 3.840.0
 
4352
  '@smithy/types': 4.3.1
4353
  tslib: 2.8.1
4354
 
4355
+ '@aws-sdk/middleware-host-header@3.873.0':
4356
+ dependencies:
4357
+ '@aws-sdk/types': 3.862.0
4358
+ '@smithy/protocol-http': 5.1.3
4359
+ '@smithy/types': 4.3.2
4360
+ tslib: 2.8.1
4361
+
4362
  '@aws-sdk/middleware-location-constraint@3.840.0':
4363
  dependencies:
4364
  '@aws-sdk/types': 3.840.0
4365
  '@smithy/types': 4.3.1
4366
  tslib: 2.8.1
4367
 
4368
+ '@aws-sdk/middleware-location-constraint@3.873.0':
4369
+ dependencies:
4370
+ '@aws-sdk/types': 3.862.0
4371
+ '@smithy/types': 4.3.2
4372
+ tslib: 2.8.1
4373
+
4374
  '@aws-sdk/middleware-logger@3.840.0':
4375
  dependencies:
4376
  '@aws-sdk/types': 3.840.0
4377
  '@smithy/types': 4.3.1
4378
  tslib: 2.8.1
4379
 
4380
+ '@aws-sdk/middleware-logger@3.876.0':
4381
+ dependencies:
4382
+ '@aws-sdk/types': 3.862.0
4383
+ '@smithy/types': 4.3.2
4384
+ tslib: 2.8.1
4385
+
4386
  '@aws-sdk/middleware-recursion-detection@3.840.0':
4387
  dependencies:
4388
  '@aws-sdk/types': 3.840.0
 
4390
  '@smithy/types': 4.3.1
4391
  tslib: 2.8.1
4392
 
4393
+ '@aws-sdk/middleware-recursion-detection@3.873.0':
4394
+ dependencies:
4395
+ '@aws-sdk/types': 3.862.0
4396
+ '@smithy/protocol-http': 5.1.3
4397
+ '@smithy/types': 4.3.2
4398
+ tslib: 2.8.1
4399
+
4400
  '@aws-sdk/middleware-sdk-s3@3.846.0':
4401
  dependencies:
4402
  '@aws-sdk/core': 3.846.0
 
4414
  '@smithy/util-utf8': 4.0.0
4415
  tslib: 2.8.1
4416
 
4417
+ '@aws-sdk/middleware-sdk-s3@3.879.0':
4418
+ dependencies:
4419
+ '@aws-sdk/core': 3.879.0
4420
+ '@aws-sdk/types': 3.862.0
4421
+ '@aws-sdk/util-arn-parser': 3.873.0
4422
+ '@smithy/core': 3.9.0
4423
+ '@smithy/node-config-provider': 4.1.4
4424
+ '@smithy/protocol-http': 5.1.3
4425
+ '@smithy/signature-v4': 5.1.3
4426
+ '@smithy/smithy-client': 4.5.0
4427
+ '@smithy/types': 4.3.2
4428
+ '@smithy/util-config-provider': 4.0.0
4429
+ '@smithy/util-middleware': 4.0.5
4430
+ '@smithy/util-stream': 4.2.4
4431
+ '@smithy/util-utf8': 4.0.0
4432
+ tslib: 2.8.1
4433
+
4434
  '@aws-sdk/middleware-ssec@3.840.0':
4435
  dependencies:
4436
  '@aws-sdk/types': 3.840.0
4437
  '@smithy/types': 4.3.1
4438
  tslib: 2.8.1
4439
 
4440
+ '@aws-sdk/middleware-ssec@3.873.0':
4441
+ dependencies:
4442
+ '@aws-sdk/types': 3.862.0
4443
+ '@smithy/types': 4.3.2
4444
+ tslib: 2.8.1
4445
+
4446
  '@aws-sdk/middleware-user-agent@3.848.0':
4447
  dependencies:
4448
  '@aws-sdk/core': 3.846.0
 
4453
  '@smithy/types': 4.3.1
4454
  tslib: 2.8.1
4455
 
4456
+ '@aws-sdk/middleware-user-agent@3.879.0':
4457
+ dependencies:
4458
+ '@aws-sdk/core': 3.879.0
4459
+ '@aws-sdk/types': 3.862.0
4460
+ '@aws-sdk/util-endpoints': 3.879.0
4461
+ '@smithy/core': 3.9.0
4462
+ '@smithy/protocol-http': 5.1.3
4463
+ '@smithy/types': 4.3.2
4464
+ tslib: 2.8.1
4465
+
4466
  '@aws-sdk/nested-clients@3.848.0':
4467
  dependencies:
4468
  '@aws-crypto/sha256-browser': 5.2.0
 
4506
  transitivePeerDependencies:
4507
  - aws-crt
4508
 
4509
+ '@aws-sdk/nested-clients@3.879.0':
4510
+ dependencies:
4511
+ '@aws-crypto/sha256-browser': 5.2.0
4512
+ '@aws-crypto/sha256-js': 5.2.0
4513
+ '@aws-sdk/core': 3.879.0
4514
+ '@aws-sdk/middleware-host-header': 3.873.0
4515
+ '@aws-sdk/middleware-logger': 3.876.0
4516
+ '@aws-sdk/middleware-recursion-detection': 3.873.0
4517
+ '@aws-sdk/middleware-user-agent': 3.879.0
4518
+ '@aws-sdk/region-config-resolver': 3.873.0
4519
+ '@aws-sdk/types': 3.862.0
4520
+ '@aws-sdk/util-endpoints': 3.879.0
4521
+ '@aws-sdk/util-user-agent-browser': 3.873.0
4522
+ '@aws-sdk/util-user-agent-node': 3.879.0
4523
+ '@smithy/config-resolver': 4.1.5
4524
+ '@smithy/core': 3.9.0
4525
+ '@smithy/fetch-http-handler': 5.1.1
4526
+ '@smithy/hash-node': 4.0.5
4527
+ '@smithy/invalid-dependency': 4.0.5
4528
+ '@smithy/middleware-content-length': 4.0.5
4529
+ '@smithy/middleware-endpoint': 4.1.19
4530
+ '@smithy/middleware-retry': 4.1.20
4531
+ '@smithy/middleware-serde': 4.0.9
4532
+ '@smithy/middleware-stack': 4.0.5
4533
+ '@smithy/node-config-provider': 4.1.4
4534
+ '@smithy/node-http-handler': 4.1.1
4535
+ '@smithy/protocol-http': 5.1.3
4536
+ '@smithy/smithy-client': 4.5.0
4537
+ '@smithy/types': 4.3.2
4538
+ '@smithy/url-parser': 4.0.5
4539
+ '@smithy/util-base64': 4.0.0
4540
+ '@smithy/util-body-length-browser': 4.0.0
4541
+ '@smithy/util-body-length-node': 4.0.0
4542
+ '@smithy/util-defaults-mode-browser': 4.0.27
4543
+ '@smithy/util-defaults-mode-node': 4.0.27
4544
+ '@smithy/util-endpoints': 3.0.7
4545
+ '@smithy/util-middleware': 4.0.5
4546
+ '@smithy/util-retry': 4.0.7
4547
+ '@smithy/util-utf8': 4.0.0
4548
+ tslib: 2.8.1
4549
+ transitivePeerDependencies:
4550
+ - aws-crt
4551
+
4552
  '@aws-sdk/region-config-resolver@3.840.0':
4553
  dependencies:
4554
  '@aws-sdk/types': 3.840.0
 
4558
  '@smithy/util-middleware': 4.0.4
4559
  tslib: 2.8.1
4560
 
4561
+ '@aws-sdk/region-config-resolver@3.873.0':
4562
+ dependencies:
4563
+ '@aws-sdk/types': 3.862.0
4564
+ '@smithy/node-config-provider': 4.1.4
4565
+ '@smithy/types': 4.3.2
4566
+ '@smithy/util-config-provider': 4.0.0
4567
+ '@smithy/util-middleware': 4.0.5
4568
+ tslib: 2.8.1
4569
+
4570
  '@aws-sdk/signature-v4-multi-region@3.846.0':
4571
  dependencies:
4572
  '@aws-sdk/middleware-sdk-s3': 3.846.0
 
4576
  '@smithy/types': 4.3.1
4577
  tslib: 2.8.1
4578
 
4579
+ '@aws-sdk/signature-v4-multi-region@3.879.0':
4580
+ dependencies:
4581
+ '@aws-sdk/middleware-sdk-s3': 3.879.0
4582
+ '@aws-sdk/types': 3.862.0
4583
+ '@smithy/protocol-http': 5.1.3
4584
+ '@smithy/signature-v4': 5.1.3
4585
+ '@smithy/types': 4.3.2
4586
+ tslib: 2.8.1
4587
+
4588
  '@aws-sdk/token-providers@3.848.0':
4589
  dependencies:
4590
  '@aws-sdk/core': 3.846.0
 
4597
  transitivePeerDependencies:
4598
  - aws-crt
4599
 
4600
+ '@aws-sdk/token-providers@3.879.0':
4601
+ dependencies:
4602
+ '@aws-sdk/core': 3.879.0
4603
+ '@aws-sdk/nested-clients': 3.879.0
4604
+ '@aws-sdk/types': 3.862.0
4605
+ '@smithy/property-provider': 4.0.5
4606
+ '@smithy/shared-ini-file-loader': 4.0.5
4607
+ '@smithy/types': 4.3.2
4608
+ tslib: 2.8.1
4609
+ transitivePeerDependencies:
4610
+ - aws-crt
4611
+
4612
  '@aws-sdk/types@3.840.0':
4613
  dependencies:
4614
  '@smithy/types': 4.3.1
4615
  tslib: 2.8.1
4616
 
4617
+ '@aws-sdk/types@3.862.0':
4618
+ dependencies:
4619
+ '@smithy/types': 4.3.2
4620
+ tslib: 2.8.1
4621
+
4622
  '@aws-sdk/util-arn-parser@3.804.0':
4623
  dependencies:
4624
  tslib: 2.8.1
4625
 
4626
+ '@aws-sdk/util-arn-parser@3.873.0':
4627
+ dependencies:
4628
+ tslib: 2.8.1
4629
+
4630
  '@aws-sdk/util-endpoints@3.848.0':
4631
  dependencies:
4632
  '@aws-sdk/types': 3.840.0
 
4635
  '@smithy/util-endpoints': 3.0.6
4636
  tslib: 2.8.1
4637
 
4638
+ '@aws-sdk/util-endpoints@3.879.0':
4639
+ dependencies:
4640
+ '@aws-sdk/types': 3.862.0
4641
+ '@smithy/types': 4.3.2
4642
+ '@smithy/url-parser': 4.0.5
4643
+ '@smithy/util-endpoints': 3.0.7
4644
+ tslib: 2.8.1
4645
+
4646
  '@aws-sdk/util-locate-window@3.804.0':
4647
  dependencies:
4648
  tslib: 2.8.1
 
4654
  bowser: 2.11.0
4655
  tslib: 2.8.1
4656
 
4657
+ '@aws-sdk/util-user-agent-browser@3.873.0':
4658
+ dependencies:
4659
+ '@aws-sdk/types': 3.862.0
4660
+ '@smithy/types': 4.3.2
4661
+ bowser: 2.11.0
4662
+ tslib: 2.8.1
4663
+
4664
  '@aws-sdk/util-user-agent-node@3.848.0':
4665
  dependencies:
4666
  '@aws-sdk/middleware-user-agent': 3.848.0
 
4669
  '@smithy/types': 4.3.1
4670
  tslib: 2.8.1
4671
 
4672
+ '@aws-sdk/util-user-agent-node@3.879.0':
4673
+ dependencies:
4674
+ '@aws-sdk/middleware-user-agent': 3.879.0
4675
+ '@aws-sdk/types': 3.862.0
4676
+ '@smithy/node-config-provider': 4.1.4
4677
+ '@smithy/types': 4.3.2
4678
+ tslib: 2.8.1
4679
+
4680
  '@aws-sdk/xml-builder@3.821.0':
4681
  dependencies:
4682
  '@smithy/types': 4.3.1
4683
  tslib: 2.8.1
4684
 
4685
+ '@aws-sdk/xml-builder@3.873.0':
4686
+ dependencies:
4687
+ '@smithy/types': 4.3.2
4688
+ tslib: 2.8.1
4689
+
4690
  '@babel/code-frame@7.27.1':
4691
  dependencies:
4692
  '@babel/helper-validator-identifier': 7.27.1
 
4803
 
4804
  '@dimforge/rapier3d-compat@0.12.0': {}
4805
 
4806
+ '@esbuild/aix-ppc64@0.21.5':
 
 
 
 
 
 
 
 
 
4807
  optional: true
4808
 
4809
+ '@esbuild/android-arm64@0.21.5':
4810
  optional: true
4811
 
4812
+ '@esbuild/android-arm@0.21.5':
4813
  optional: true
4814
 
4815
+ '@esbuild/android-x64@0.21.5':
4816
  optional: true
4817
 
4818
+ '@esbuild/darwin-arm64@0.21.5':
4819
  optional: true
4820
 
4821
+ '@esbuild/darwin-x64@0.21.5':
4822
  optional: true
4823
 
4824
+ '@esbuild/freebsd-arm64@0.21.5':
4825
  optional: true
4826
 
4827
+ '@esbuild/freebsd-x64@0.21.5':
4828
  optional: true
4829
 
4830
+ '@esbuild/linux-arm64@0.21.5':
4831
  optional: true
4832
 
4833
+ '@esbuild/linux-arm@0.21.5':
4834
  optional: true
4835
 
4836
+ '@esbuild/linux-ia32@0.21.5':
4837
  optional: true
4838
 
4839
+ '@esbuild/linux-loong64@0.21.5':
4840
  optional: true
4841
 
4842
+ '@esbuild/linux-mips64el@0.21.5':
4843
  optional: true
4844
 
4845
+ '@esbuild/linux-ppc64@0.21.5':
4846
  optional: true
4847
 
4848
+ '@esbuild/linux-riscv64@0.21.5':
4849
  optional: true
4850
 
4851
+ '@esbuild/linux-s390x@0.21.5':
4852
  optional: true
4853
 
4854
+ '@esbuild/linux-x64@0.21.5':
4855
  optional: true
4856
 
4857
+ '@esbuild/netbsd-x64@0.21.5':
4858
  optional: true
4859
 
4860
+ '@esbuild/openbsd-x64@0.21.5':
4861
  optional: true
4862
 
4863
+ '@esbuild/sunos-x64@0.21.5':
4864
  optional: true
4865
 
4866
+ '@esbuild/win32-arm64@0.21.5':
4867
  optional: true
4868
 
4869
+ '@esbuild/win32-ia32@0.21.5':
4870
  optional: true
4871
 
4872
+ '@esbuild/win32-x64@0.21.5':
4873
  optional: true
4874
 
4875
  '@eslint-community/eslint-utils@4.7.0(eslint@9.31.0(jiti@1.21.7))':
 
4981
 
4982
  '@lerobot/web@file:../../packages/web(typescript@5.8.3)':
4983
  dependencies:
4984
+ '@aws-sdk/client-s3': 3.879.0
4985
+ '@aws-sdk/lib-storage': 3.879.0(@aws-sdk/client-s3@3.879.0)
4986
  '@huggingface/hub': 2.4.0
4987
  apache-arrow: 21.0.0
4988
  jszip: 3.10.1
 
5899
  '@smithy/types': 4.3.1
5900
  tslib: 2.8.1
5901
 
5902
+ '@smithy/abort-controller@4.0.5':
5903
+ dependencies:
5904
+ '@smithy/types': 4.3.2
5905
+ tslib: 2.8.1
5906
+
5907
  '@smithy/chunked-blob-reader-native@4.0.0':
5908
  dependencies:
5909
  '@smithy/util-base64': 4.0.0
 
5921
  '@smithy/util-middleware': 4.0.4
5922
  tslib: 2.8.1
5923
 
5924
+ '@smithy/config-resolver@4.1.5':
5925
+ dependencies:
5926
+ '@smithy/node-config-provider': 4.1.4
5927
+ '@smithy/types': 4.3.2
5928
+ '@smithy/util-config-provider': 4.0.0
5929
+ '@smithy/util-middleware': 4.0.5
5930
+ tslib: 2.8.1
5931
+
5932
  '@smithy/core@3.7.2':
5933
  dependencies:
5934
  '@smithy/middleware-serde': 4.0.8
 
5941
  '@smithy/util-utf8': 4.0.0
5942
  tslib: 2.8.1
5943
 
5944
+ '@smithy/core@3.9.0':
5945
+ dependencies:
5946
+ '@smithy/middleware-serde': 4.0.9
5947
+ '@smithy/protocol-http': 5.1.3
5948
+ '@smithy/types': 4.3.2
5949
+ '@smithy/util-base64': 4.0.0
5950
+ '@smithy/util-body-length-browser': 4.0.0
5951
+ '@smithy/util-middleware': 4.0.5
5952
+ '@smithy/util-stream': 4.2.4
5953
+ '@smithy/util-utf8': 4.0.0
5954
+ '@types/uuid': 9.0.8
5955
+ tslib: 2.8.1
5956
+ uuid: 9.0.1
5957
+
5958
  '@smithy/credential-provider-imds@4.0.6':
5959
  dependencies:
5960
  '@smithy/node-config-provider': 4.1.3
 
5963
  '@smithy/url-parser': 4.0.4
5964
  tslib: 2.8.1
5965
 
5966
+ '@smithy/credential-provider-imds@4.0.7':
5967
+ dependencies:
5968
+ '@smithy/node-config-provider': 4.1.4
5969
+ '@smithy/property-provider': 4.0.5
5970
+ '@smithy/types': 4.3.2
5971
+ '@smithy/url-parser': 4.0.5
5972
+ tslib: 2.8.1
5973
+
5974
  '@smithy/eventstream-codec@4.0.4':
5975
  dependencies:
5976
  '@aws-crypto/crc32': 5.2.0
 
5978
  '@smithy/util-hex-encoding': 4.0.0
5979
  tslib: 2.8.1
5980
 
5981
+ '@smithy/eventstream-codec@4.0.5':
5982
+ dependencies:
5983
+ '@aws-crypto/crc32': 5.2.0
5984
+ '@smithy/types': 4.3.2
5985
+ '@smithy/util-hex-encoding': 4.0.0
5986
+ tslib: 2.8.1
5987
+
5988
  '@smithy/eventstream-serde-browser@4.0.4':
5989
  dependencies:
5990
  '@smithy/eventstream-serde-universal': 4.0.4
5991
  '@smithy/types': 4.3.1
5992
  tslib: 2.8.1
5993
 
5994
+ '@smithy/eventstream-serde-browser@4.0.5':
5995
+ dependencies:
5996
+ '@smithy/eventstream-serde-universal': 4.0.5
5997
+ '@smithy/types': 4.3.2
5998
+ tslib: 2.8.1
5999
+
6000
  '@smithy/eventstream-serde-config-resolver@4.1.2':
6001
  dependencies:
6002
  '@smithy/types': 4.3.1
6003
  tslib: 2.8.1
6004
 
6005
+ '@smithy/eventstream-serde-config-resolver@4.1.3':
6006
+ dependencies:
6007
+ '@smithy/types': 4.3.2
6008
+ tslib: 2.8.1
6009
+
6010
  '@smithy/eventstream-serde-node@4.0.4':
6011
  dependencies:
6012
  '@smithy/eventstream-serde-universal': 4.0.4
6013
  '@smithy/types': 4.3.1
6014
  tslib: 2.8.1
6015
 
6016
+ '@smithy/eventstream-serde-node@4.0.5':
6017
+ dependencies:
6018
+ '@smithy/eventstream-serde-universal': 4.0.5
6019
+ '@smithy/types': 4.3.2
6020
+ tslib: 2.8.1
6021
+
6022
  '@smithy/eventstream-serde-universal@4.0.4':
6023
  dependencies:
6024
  '@smithy/eventstream-codec': 4.0.4
6025
  '@smithy/types': 4.3.1
6026
  tslib: 2.8.1
6027
 
6028
+ '@smithy/eventstream-serde-universal@4.0.5':
6029
+ dependencies:
6030
+ '@smithy/eventstream-codec': 4.0.5
6031
+ '@smithy/types': 4.3.2
6032
+ tslib: 2.8.1
6033
+
6034
  '@smithy/fetch-http-handler@5.1.0':
6035
  dependencies:
6036
  '@smithy/protocol-http': 5.1.2
 
6039
  '@smithy/util-base64': 4.0.0
6040
  tslib: 2.8.1
6041
 
6042
+ '@smithy/fetch-http-handler@5.1.1':
6043
+ dependencies:
6044
+ '@smithy/protocol-http': 5.1.3
6045
+ '@smithy/querystring-builder': 4.0.5
6046
+ '@smithy/types': 4.3.2
6047
+ '@smithy/util-base64': 4.0.0
6048
+ tslib: 2.8.1
6049
+
6050
  '@smithy/hash-blob-browser@4.0.4':
6051
  dependencies:
6052
  '@smithy/chunked-blob-reader': 5.0.0
 
6054
  '@smithy/types': 4.3.1
6055
  tslib: 2.8.1
6056
 
6057
+ '@smithy/hash-blob-browser@4.0.5':
6058
+ dependencies:
6059
+ '@smithy/chunked-blob-reader': 5.0.0
6060
+ '@smithy/chunked-blob-reader-native': 4.0.0
6061
+ '@smithy/types': 4.3.2
6062
+ tslib: 2.8.1
6063
+
6064
  '@smithy/hash-node@4.0.4':
6065
  dependencies:
6066
  '@smithy/types': 4.3.1
 
6068
  '@smithy/util-utf8': 4.0.0
6069
  tslib: 2.8.1
6070
 
6071
+ '@smithy/hash-node@4.0.5':
6072
+ dependencies:
6073
+ '@smithy/types': 4.3.2
6074
+ '@smithy/util-buffer-from': 4.0.0
6075
+ '@smithy/util-utf8': 4.0.0
6076
+ tslib: 2.8.1
6077
+
6078
  '@smithy/hash-stream-node@4.0.4':
6079
  dependencies:
6080
  '@smithy/types': 4.3.1
6081
  '@smithy/util-utf8': 4.0.0
6082
  tslib: 2.8.1
6083
 
6084
+ '@smithy/hash-stream-node@4.0.5':
6085
+ dependencies:
6086
+ '@smithy/types': 4.3.2
6087
+ '@smithy/util-utf8': 4.0.0
6088
+ tslib: 2.8.1
6089
+
6090
  '@smithy/invalid-dependency@4.0.4':
6091
  dependencies:
6092
  '@smithy/types': 4.3.1
6093
  tslib: 2.8.1
6094
 
6095
+ '@smithy/invalid-dependency@4.0.5':
6096
+ dependencies:
6097
+ '@smithy/types': 4.3.2
6098
+ tslib: 2.8.1
6099
+
6100
  '@smithy/is-array-buffer@2.2.0':
6101
  dependencies:
6102
  tslib: 2.8.1
 
6111
  '@smithy/util-utf8': 4.0.0
6112
  tslib: 2.8.1
6113
 
6114
+ '@smithy/md5-js@4.0.5':
6115
+ dependencies:
6116
+ '@smithy/types': 4.3.2
6117
+ '@smithy/util-utf8': 4.0.0
6118
+ tslib: 2.8.1
6119
+
6120
  '@smithy/middleware-content-length@4.0.4':
6121
  dependencies:
6122
  '@smithy/protocol-http': 5.1.2
6123
  '@smithy/types': 4.3.1
6124
  tslib: 2.8.1
6125
 
6126
+ '@smithy/middleware-content-length@4.0.5':
6127
+ dependencies:
6128
+ '@smithy/protocol-http': 5.1.3
6129
+ '@smithy/types': 4.3.2
6130
+ tslib: 2.8.1
6131
+
6132
  '@smithy/middleware-endpoint@4.1.17':
6133
  dependencies:
6134
  '@smithy/core': 3.7.2
 
6140
  '@smithy/util-middleware': 4.0.4
6141
  tslib: 2.8.1
6142
 
6143
+ '@smithy/middleware-endpoint@4.1.19':
6144
+ dependencies:
6145
+ '@smithy/core': 3.9.0
6146
+ '@smithy/middleware-serde': 4.0.9
6147
+ '@smithy/node-config-provider': 4.1.4
6148
+ '@smithy/shared-ini-file-loader': 4.0.5
6149
+ '@smithy/types': 4.3.2
6150
+ '@smithy/url-parser': 4.0.5
6151
+ '@smithy/util-middleware': 4.0.5
6152
+ tslib: 2.8.1
6153
+
6154
  '@smithy/middleware-retry@4.1.18':
6155
  dependencies:
6156
  '@smithy/node-config-provider': 4.1.3
 
6163
  tslib: 2.8.1
6164
  uuid: 9.0.1
6165
 
6166
+ '@smithy/middleware-retry@4.1.20':
6167
+ dependencies:
6168
+ '@smithy/node-config-provider': 4.1.4
6169
+ '@smithy/protocol-http': 5.1.3
6170
+ '@smithy/service-error-classification': 4.0.7
6171
+ '@smithy/smithy-client': 4.5.0
6172
+ '@smithy/types': 4.3.2
6173
+ '@smithy/util-middleware': 4.0.5
6174
+ '@smithy/util-retry': 4.0.7
6175
+ '@types/uuid': 9.0.8
6176
+ tslib: 2.8.1
6177
+ uuid: 9.0.1
6178
+
6179
  '@smithy/middleware-serde@4.0.8':
6180
  dependencies:
6181
  '@smithy/protocol-http': 5.1.2
6182
  '@smithy/types': 4.3.1
6183
  tslib: 2.8.1
6184
 
6185
+ '@smithy/middleware-serde@4.0.9':
6186
+ dependencies:
6187
+ '@smithy/protocol-http': 5.1.3
6188
+ '@smithy/types': 4.3.2
6189
+ tslib: 2.8.1
6190
+
6191
  '@smithy/middleware-stack@4.0.4':
6192
  dependencies:
6193
  '@smithy/types': 4.3.1
6194
  tslib: 2.8.1
6195
 
6196
+ '@smithy/middleware-stack@4.0.5':
6197
+ dependencies:
6198
+ '@smithy/types': 4.3.2
6199
+ tslib: 2.8.1
6200
+
6201
  '@smithy/node-config-provider@4.1.3':
6202
  dependencies:
6203
  '@smithy/property-provider': 4.0.4
 
6205
  '@smithy/types': 4.3.1
6206
  tslib: 2.8.1
6207
 
6208
+ '@smithy/node-config-provider@4.1.4':
6209
+ dependencies:
6210
+ '@smithy/property-provider': 4.0.5
6211
+ '@smithy/shared-ini-file-loader': 4.0.5
6212
+ '@smithy/types': 4.3.2
6213
+ tslib: 2.8.1
6214
+
6215
  '@smithy/node-http-handler@4.1.0':
6216
  dependencies:
6217
  '@smithy/abort-controller': 4.0.4
 
6220
  '@smithy/types': 4.3.1
6221
  tslib: 2.8.1
6222
 
6223
+ '@smithy/node-http-handler@4.1.1':
6224
+ dependencies:
6225
+ '@smithy/abort-controller': 4.0.5
6226
+ '@smithy/protocol-http': 5.1.3
6227
+ '@smithy/querystring-builder': 4.0.5
6228
+ '@smithy/types': 4.3.2
6229
+ tslib: 2.8.1
6230
+
6231
  '@smithy/property-provider@4.0.4':
6232
  dependencies:
6233
  '@smithy/types': 4.3.1
6234
  tslib: 2.8.1
6235
 
6236
+ '@smithy/property-provider@4.0.5':
6237
+ dependencies:
6238
+ '@smithy/types': 4.3.2
6239
+ tslib: 2.8.1
6240
+
6241
  '@smithy/protocol-http@5.1.2':
6242
  dependencies:
6243
  '@smithy/types': 4.3.1
6244
  tslib: 2.8.1
6245
 
6246
+ '@smithy/protocol-http@5.1.3':
6247
+ dependencies:
6248
+ '@smithy/types': 4.3.2
6249
+ tslib: 2.8.1
6250
+
6251
  '@smithy/querystring-builder@4.0.4':
6252
  dependencies:
6253
  '@smithy/types': 4.3.1
6254
  '@smithy/util-uri-escape': 4.0.0
6255
  tslib: 2.8.1
6256
 
6257
+ '@smithy/querystring-builder@4.0.5':
6258
+ dependencies:
6259
+ '@smithy/types': 4.3.2
6260
+ '@smithy/util-uri-escape': 4.0.0
6261
+ tslib: 2.8.1
6262
+
6263
  '@smithy/querystring-parser@4.0.4':
6264
  dependencies:
6265
  '@smithy/types': 4.3.1
6266
  tslib: 2.8.1
6267
 
6268
+ '@smithy/querystring-parser@4.0.5':
6269
+ dependencies:
6270
+ '@smithy/types': 4.3.2
6271
+ tslib: 2.8.1
6272
+
6273
  '@smithy/service-error-classification@4.0.6':
6274
  dependencies:
6275
  '@smithy/types': 4.3.1
6276
 
6277
+ '@smithy/service-error-classification@4.0.7':
6278
+ dependencies:
6279
+ '@smithy/types': 4.3.2
6280
+
6281
  '@smithy/shared-ini-file-loader@4.0.4':
6282
  dependencies:
6283
  '@smithy/types': 4.3.1
6284
  tslib: 2.8.1
6285
 
6286
+ '@smithy/shared-ini-file-loader@4.0.5':
6287
+ dependencies:
6288
+ '@smithy/types': 4.3.2
6289
+ tslib: 2.8.1
6290
+
6291
  '@smithy/signature-v4@5.1.2':
6292
  dependencies:
6293
  '@smithy/is-array-buffer': 4.0.0
 
6299
  '@smithy/util-utf8': 4.0.0
6300
  tslib: 2.8.1
6301
 
6302
+ '@smithy/signature-v4@5.1.3':
6303
+ dependencies:
6304
+ '@smithy/is-array-buffer': 4.0.0
6305
+ '@smithy/protocol-http': 5.1.3
6306
+ '@smithy/types': 4.3.2
6307
+ '@smithy/util-hex-encoding': 4.0.0
6308
+ '@smithy/util-middleware': 4.0.5
6309
+ '@smithy/util-uri-escape': 4.0.0
6310
+ '@smithy/util-utf8': 4.0.0
6311
+ tslib: 2.8.1
6312
+
6313
  '@smithy/smithy-client@4.4.9':
6314
  dependencies:
6315
  '@smithy/core': 3.7.2
 
6320
  '@smithy/util-stream': 4.2.3
6321
  tslib: 2.8.1
6322
 
6323
+ '@smithy/smithy-client@4.5.0':
6324
+ dependencies:
6325
+ '@smithy/core': 3.9.0
6326
+ '@smithy/middleware-endpoint': 4.1.19
6327
+ '@smithy/middleware-stack': 4.0.5
6328
+ '@smithy/protocol-http': 5.1.3
6329
+ '@smithy/types': 4.3.2
6330
+ '@smithy/util-stream': 4.2.4
6331
+ tslib: 2.8.1
6332
+
6333
  '@smithy/types@4.3.1':
6334
  dependencies:
6335
  tslib: 2.8.1
6336
 
6337
+ '@smithy/types@4.3.2':
6338
+ dependencies:
6339
+ tslib: 2.8.1
6340
+
6341
  '@smithy/url-parser@4.0.4':
6342
  dependencies:
6343
  '@smithy/querystring-parser': 4.0.4
6344
  '@smithy/types': 4.3.1
6345
  tslib: 2.8.1
6346
 
6347
+ '@smithy/url-parser@4.0.5':
6348
+ dependencies:
6349
+ '@smithy/querystring-parser': 4.0.5
6350
+ '@smithy/types': 4.3.2
6351
+ tslib: 2.8.1
6352
+
6353
  '@smithy/util-base64@4.0.0':
6354
  dependencies:
6355
  '@smithy/util-buffer-from': 4.0.0
 
6386
  bowser: 2.11.0
6387
  tslib: 2.8.1
6388
 
6389
+ '@smithy/util-defaults-mode-browser@4.0.27':
6390
+ dependencies:
6391
+ '@smithy/property-provider': 4.0.5
6392
+ '@smithy/smithy-client': 4.5.0
6393
+ '@smithy/types': 4.3.2
6394
+ bowser: 2.11.0
6395
+ tslib: 2.8.1
6396
+
6397
  '@smithy/util-defaults-mode-node@4.0.25':
6398
  dependencies:
6399
  '@smithy/config-resolver': 4.1.4
 
6404
  '@smithy/types': 4.3.1
6405
  tslib: 2.8.1
6406
 
6407
+ '@smithy/util-defaults-mode-node@4.0.27':
6408
+ dependencies:
6409
+ '@smithy/config-resolver': 4.1.5
6410
+ '@smithy/credential-provider-imds': 4.0.7
6411
+ '@smithy/node-config-provider': 4.1.4
6412
+ '@smithy/property-provider': 4.0.5
6413
+ '@smithy/smithy-client': 4.5.0
6414
+ '@smithy/types': 4.3.2
6415
+ tslib: 2.8.1
6416
+
6417
  '@smithy/util-endpoints@3.0.6':
6418
  dependencies:
6419
  '@smithy/node-config-provider': 4.1.3
6420
  '@smithy/types': 4.3.1
6421
  tslib: 2.8.1
6422
 
6423
+ '@smithy/util-endpoints@3.0.7':
6424
+ dependencies:
6425
+ '@smithy/node-config-provider': 4.1.4
6426
+ '@smithy/types': 4.3.2
6427
+ tslib: 2.8.1
6428
+
6429
  '@smithy/util-hex-encoding@4.0.0':
6430
  dependencies:
6431
  tslib: 2.8.1
 
6435
  '@smithy/types': 4.3.1
6436
  tslib: 2.8.1
6437
 
6438
+ '@smithy/util-middleware@4.0.5':
6439
+ dependencies:
6440
+ '@smithy/types': 4.3.2
6441
+ tslib: 2.8.1
6442
+
6443
  '@smithy/util-retry@4.0.6':
6444
  dependencies:
6445
  '@smithy/service-error-classification': 4.0.6
6446
  '@smithy/types': 4.3.1
6447
  tslib: 2.8.1
6448
 
6449
+ '@smithy/util-retry@4.0.7':
6450
+ dependencies:
6451
+ '@smithy/service-error-classification': 4.0.7
6452
+ '@smithy/types': 4.3.2
6453
+ tslib: 2.8.1
6454
+
6455
  '@smithy/util-stream@4.2.3':
6456
  dependencies:
6457
  '@smithy/fetch-http-handler': 5.1.0
 
6463
  '@smithy/util-utf8': 4.0.0
6464
  tslib: 2.8.1
6465
 
6466
+ '@smithy/util-stream@4.2.4':
6467
+ dependencies:
6468
+ '@smithy/fetch-http-handler': 5.1.1
6469
+ '@smithy/node-http-handler': 4.1.1
6470
+ '@smithy/types': 4.3.2
6471
+ '@smithy/util-base64': 4.0.0
6472
+ '@smithy/util-buffer-from': 4.0.0
6473
+ '@smithy/util-hex-encoding': 4.0.0
6474
+ '@smithy/util-utf8': 4.0.0
6475
+ tslib: 2.8.1
6476
+
6477
  '@smithy/util-uri-escape@4.0.0':
6478
  dependencies:
6479
  tslib: 2.8.1
 
6494
  '@smithy/types': 4.3.1
6495
  tslib: 2.8.1
6496
 
6497
+ '@smithy/util-waiter@4.0.7':
6498
+ dependencies:
6499
+ '@smithy/abort-controller': 4.0.5
6500
+ '@smithy/types': 4.3.2
6501
+ tslib: 2.8.1
6502
+
6503
  '@swc/helpers@0.5.17':
6504
  dependencies:
6505
  tslib: 2.8.1
 
6709
  '@use-gesture/core': 10.3.1
6710
  react: 19.1.0
6711
 
6712
+ '@vitejs/plugin-react@4.7.0(vite@5.4.19(@types/node@22.16.5))':
6713
  dependencies:
6714
  '@babel/core': 7.28.0
6715
  '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.0)
 
6717
  '@rolldown/pluginutils': 1.0.0-beta.27
6718
  '@types/babel__core': 7.20.5
6719
  react-refresh: 0.17.0
6720
+ vite: 5.4.19(@types/node@22.16.5)
6721
  transitivePeerDependencies:
6722
  - supports-color
6723
 
 
7024
 
7025
  emoji-regex@9.2.2: {}
7026
 
7027
+ esbuild@0.21.5:
7028
  optionalDependencies:
7029
+ '@esbuild/aix-ppc64': 0.21.5
7030
+ '@esbuild/android-arm': 0.21.5
7031
+ '@esbuild/android-arm64': 0.21.5
7032
+ '@esbuild/android-x64': 0.21.5
7033
+ '@esbuild/darwin-arm64': 0.21.5
7034
+ '@esbuild/darwin-x64': 0.21.5
7035
+ '@esbuild/freebsd-arm64': 0.21.5
7036
+ '@esbuild/freebsd-x64': 0.21.5
7037
+ '@esbuild/linux-arm': 0.21.5
7038
+ '@esbuild/linux-arm64': 0.21.5
7039
+ '@esbuild/linux-ia32': 0.21.5
7040
+ '@esbuild/linux-loong64': 0.21.5
7041
+ '@esbuild/linux-mips64el': 0.21.5
7042
+ '@esbuild/linux-ppc64': 0.21.5
7043
+ '@esbuild/linux-riscv64': 0.21.5
7044
+ '@esbuild/linux-s390x': 0.21.5
7045
+ '@esbuild/linux-x64': 0.21.5
7046
+ '@esbuild/netbsd-x64': 0.21.5
7047
+ '@esbuild/openbsd-x64': 0.21.5
7048
+ '@esbuild/sunos-x64': 0.21.5
7049
+ '@esbuild/win32-arm64': 0.21.5
7050
+ '@esbuild/win32-ia32': 0.21.5
7051
+ '@esbuild/win32-x64': 0.21.5
 
 
 
7052
 
7053
  escalade@3.2.0: {}
7054
 
 
7163
  dependencies:
7164
  format: 0.2.2
7165
 
 
 
 
 
7166
  fflate@0.6.10: {}
7167
 
7168
  fflate@0.8.2: {}
 
7507
 
7508
  picomatch@2.3.1: {}
7509
 
 
 
7510
  pify@2.3.0: {}
7511
 
7512
  pirates@4.0.7: {}
 
7933
 
7934
  tiny-invariant@1.3.3: {}
7935
 
 
 
 
 
 
7936
  to-regex-range@5.0.1:
7937
  dependencies:
7938
  is-number: 7.0.0
 
8051
  d3-time: 3.1.0
8052
  d3-timer: 3.0.1
8053
 
8054
+ vite@5.4.19(@types/node@22.16.5):
8055
  dependencies:
8056
+ esbuild: 0.21.5
 
 
8057
  postcss: 8.5.6
8058
  rollup: 4.45.1
 
8059
  optionalDependencies:
8060
  '@types/node': 22.16.5
8061
  fsevents: 2.3.3
 
 
8062
 
8063
  webgl-constants@1.1.1: {}
8064
 
examples/cyberpunk-standalone/src/components/docs-section.tsx CHANGED
@@ -1,12 +1,155 @@
1
  "use client";
2
 
3
  import type React from "react";
4
- import { Book, Code2, Terminal, Copy, Check } from "lucide-react";
 
 
 
 
 
 
 
 
 
 
5
  import { Button } from "@/components/ui/button";
6
- import { useState } from "react";
 
7
  import { Prism as SyntaxHighlighter } from "react-syntax-highlighter";
8
  import { oneDark } from "react-syntax-highlighter/dist/esm/styles/prism";
9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  const CodeBlock = ({
11
  children,
12
  language = "typescript",
@@ -75,42 +218,93 @@ export function DocsSection() {
75
  Docs
76
  </h2>
77
  <p className="text-sm text-muted-foreground">
78
- Complete API reference for @lerobot/web
79
  </p>
80
  </div>
81
 
82
- <div className="bg-muted/40 dark:bg-black/30 border border-border dark:border-white/10 p-6 md:p-8 rounded-lg space-y-14">
83
- {/* Browser Requirements */}
84
- <div>
85
- <h3 className="text-xl font-bold text-cyan-600 dark:text-accent-cyan tracking-wider uppercase">
86
- Browser Requirements
87
- </h3>
88
- <div className="mt-4 space-y-2 text-sm">
89
- <div>
90
- <strong>Chromium 89+</strong> with WebSerial and WebUSB API
91
- support
92
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93
  <div>
94
- <strong>HTTPS or localhost</strong>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95
  </div>
 
 
96
  <div>
97
- <strong>User gesture</strong> required for initial port
98
- selection
99
- </div>
100
- </div>
101
- </div>
102
-
103
- {/* Getting Started */}
104
- <div>
105
- <h3 className="text-xl font-bold text-cyan-600 dark:text-accent-cyan tracking-wider uppercase flex items-center gap-2">
106
- <Terminal className="w-5 h-5" />
107
- Getting Started
108
- </h3>
109
- <p className="text-muted-foreground text-sm mt-2 mb-4">
110
- Complete workflow from discovery to teleoperation.
111
- </p>
112
- <CodeBlock>
113
- {`import { findPort, releaseMotors, calibrate, teleoperate } from "@lerobot/web";
114
 
115
  // 1. find and connect to hardware like a robot arm
116
  const findProcess = await findPort();
@@ -141,24 +335,25 @@ teleop.start();
141
 
142
  // 5. stop control (run this when you're done)
143
  teleop.stop();`}
144
- </CodeBlock>
145
- </div>
146
-
147
- {/* API Reference */}
148
- <div>
149
- <h3 className="text-xl font-bold text-cyan-600 dark:text-accent-cyan tracking-wider uppercase flex items-center gap-2">
150
- <Code2 className="w-5 h-5" />
151
- API Reference
152
- </h3>
153
- <div className="space-y-12 mt-4">
154
- {/* findPort */}
155
  <div>
156
- <h4 className="font-bold text-primary">findPort(config?)</h4>
157
- <p className="text-muted-foreground text-sm mt-1">
158
- Discovers and connects to robotics hardware using WebSerial API.
159
- </p>
160
- <CodeBlock>
161
- {`// Interactive Mode (Default) - Shows port dialog
 
 
 
 
 
 
 
 
162
  const findProcess = await findPort();
163
  const robots = await findProcess.result; // RobotConnection[]
164
 
@@ -169,49 +364,49 @@ const findProcess = await findPort({
169
  ],
170
  onMessage: (msg) => console.log(msg),
171
  });`}
172
- </CodeBlock>
173
- <div className="mt-3">
174
- <h5 className="font-bold text-sm text-muted-foreground tracking-wider">
175
- Options
176
- </h5>
177
- <ul className="mt-1 ml-4 space-y-1 text-sm text-muted-foreground">
178
- <li>
179
- • <code>robotConfigs?: RobotConfig[]</code> - Auto-connect
180
- to these known robots
181
- </li>
182
- <li>
183
- • <code>onMessage?: (message: string) =&gt; void</code> -
184
- Progress messages callback
185
- </li>
186
- </ul>
187
- </div>
188
- <div className="mt-3">
189
- <h5 className="font-bold text-sm text-muted-foreground tracking-wider">
190
- Returns:{" "}
191
- <code className="bg-muted/50 px-1 rounded">
192
- FindPortProcess
193
- </code>
194
- </h5>
195
- <ul className="mt-1 ml-4 space-y-1 text-sm text-muted-foreground">
196
- <li>
197
- • <code>result: Promise&lt;RobotConnection[]&gt;</code> -
198
- Array of robot connections
199
- </li>
200
- <li>
201
- • <code>stop(): void</code> - Cancel discovery process
202
- </li>
203
- </ul>
204
- </div>
205
- </div>
206
 
207
- {/* calibrate */}
208
- <div>
209
- <h4 className="font-bold text-primary">calibrate(config)</h4>
210
- <p className="text-muted-foreground text-sm mt-1">
211
- Calibrates motor homing offsets and records range of motion.
212
- </p>
213
- <CodeBlock>
214
- {`const calibrationProcess = await calibrate({
215
  robot,
216
  onProgress: (message) => {
217
  console.log(message); // "⚙️ Setting motor homing offsets"
@@ -227,56 +422,59 @@ const findProcess = await findPort({
227
  // Move robot through full range of motion...
228
  calibrationProcess.stop(); // Stop range recording
229
  const calibrationData = await calibrationProcess.result;`}
230
- </CodeBlock>
231
- <div className="mt-3">
232
- <h5 className="font-bold text-sm text-muted-foreground tracking-wider">
233
- Options
234
- </h5>
235
- <ul className="mt-1 ml-4 space-y-1 text-sm text-muted-foreground">
236
- <li>
237
- • <code>robot: RobotConnection</code> - Connected robot from
238
- findPort()
239
- </li>
240
- <li>
241
- • <code>onProgress?: (message: string) =&gt; void</code> -
242
- Progress messages callback
243
- </li>
244
- <li>
245
- •{" "}
246
- <code>
247
- onLiveUpdate?: (data: LiveCalibrationData) =&gt; void
248
- </code>{" "}
249
- - Real-time position updates
250
- </li>
251
- </ul>
252
- </div>
253
- <div className="mt-3">
254
- <h5 className="font-bold text-sm text-muted-foreground tracking-wider">
255
- Returns:{" "}
256
- <code className="bg-muted/50 px-1 rounded">
257
- CalibrationProcess
258
- </code>
259
- </h5>
260
- <ul className="mt-1 ml-4 space-y-1 text-sm text-muted-foreground">
261
- <li>
262
- • <code>result: Promise&lt;CalibrationResults&gt;</code> -
263
- Python-compatible format
264
- </li>
265
- <li>
266
- • <code>stop(): void</code> - Stop calibration process
267
- </li>
268
- </ul>
269
- </div>
270
- </div>
271
 
272
- {/* teleoperate */}
273
- <div>
274
- <h4 className="font-bold text-primary">teleoperate(config)</h4>
275
- <p className="text-muted-foreground text-sm mt-1">
276
- Enables real-time robot control with extensible input devices.
277
- </p>
278
- <CodeBlock>
279
- {`// Keyboard Teleoperation
 
 
 
280
  const keyboardTeleop = await teleoperate({
281
  robot,
282
  calibrationData: savedCalibrationData,
@@ -293,109 +491,545 @@ const directTeleop = await teleoperate({
293
  calibrationData: savedCalibrationData,
294
  teleop: { type: "direct" },
295
  });`}
296
- </CodeBlock>
297
- <div className="mt-3">
298
- <h5 className="font-bold text-sm text-muted-foreground tracking-wider">
299
- Options
300
- </h5>
301
- <ul className="mt-1 ml-4 space-y-1 text-sm text-muted-foreground">
302
- <li>
303
- • <code>robot: RobotConnection</code> - Connected robot from
304
- findPort()
305
- </li>
306
- <li>
307
- • <code>teleop: TeleoperatorConfig</code> - Teleoperator
308
- configuration:
309
- <ul className="mt-1 ml-4 space-y-1">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
310
  <li>
311
- • <code>{`{ type: "keyboard" }`}</code> - Keyboard
312
- control
313
  </li>
314
  <li>
315
- • <code>{`{ type: "direct" }`}</code> - Direct
316
- programmatic control
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
317
  </li>
318
  </ul>
319
- </li>
320
- <li>
321
- •{" "}
322
- <code>
323
- calibrationData?: {`{ [motorName: string]: any }`}
324
- </code>{" "}
325
- - Calibration data from calibrate()
326
- </li>
327
- <li>
328
- •{" "}
329
- <code>
330
- onStateUpdate?: (state: TeleoperationState) =&gt; void
331
- </code>{" "}
332
- - State change callback
333
- </li>
334
- </ul>
335
  </div>
336
- <div className="mt-3">
337
- <h5 className="font-bold text-sm text-muted-foreground tracking-wider">
338
- Returns:{" "}
339
- <code className="bg-muted/50 px-1 rounded">
340
- TeleoperationProcess
341
- </code>
342
- </h5>
343
- <ul className="mt-1 ml-4 space-y-1 text-sm text-muted-foreground">
344
- <li>
345
- <code>start(): void</code> - Begin teleoperation
346
- </li>
347
- <li>
348
- • <code>stop(): void</code> - Stop teleoperation and clear
349
- states
350
- </li>
351
- <li>
352
- • <code>getState(): TeleoperationState</code> - Current
353
- state and motor positions
354
- </li>
355
- <li>
356
- • <code>teleoperator: BaseWebTeleoperator</code> - Access
357
- teleoperator-specific methods
358
- </li>
359
- <li>
360
- • <code>disconnect(): Promise&lt;void&gt;</code> - Stop and
361
- disconnect
362
- </li>
363
- </ul>
364
  </div>
365
  </div>
366
 
367
- {/* releaseMotors */}
368
  <div>
369
- <h4 className="font-bold text-primary">
370
- releaseMotors(robot, motorIds?)
371
- </h4>
372
- <p className="text-muted-foreground text-sm mt-1">
373
- Releases motor torque so robot can be moved freely by hand.
 
374
  </p>
375
  <CodeBlock>
376
- {`// Release all motors for calibration
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
377
  await releaseMotors(robot);
378
 
379
- // Release specific motors only
380
- await releaseMotors(robot, [1, 2, 3]);`}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
381
  </CodeBlock>
382
- <div className="mt-3">
383
- <h5 className="font-bold text-sm text-muted-foreground tracking-wider">
384
- Options
385
- </h5>
386
- <ul className="mt-1 ml-4 space-y-1 text-sm text-muted-foreground">
387
- <li>
388
- • <code>robot: RobotConnection</code> - Connected robot
389
- </li>
390
- <li>
391
- • <code>motorIds?: number[]</code> - Specific motor IDs
392
- (default: all motors for robot type)
393
- </li>
394
- </ul>
395
  </div>
396
  </div>
397
- </div>
398
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
399
  </div>
400
  </div>
401
  );
 
1
  "use client";
2
 
3
  import type React from "react";
4
+ import {
5
+ Book,
6
+ Code2,
7
+ Terminal,
8
+ Copy,
9
+ Check,
10
+ Monitor,
11
+ Server,
12
+ Command,
13
+ Package,
14
+ } from "lucide-react";
15
  import { Button } from "@/components/ui/button";
16
+ import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
17
+ import { useState, createContext, useContext } from "react";
18
  import { Prism as SyntaxHighlighter } from "react-syntax-highlighter";
19
  import { oneDark } from "react-syntax-highlighter/dist/esm/styles/prism";
20
 
21
+ type CLIMode = "npm" | "npx";
22
+
23
+ const CLIModeContext = createContext<{
24
+ mode: CLIMode;
25
+ setMode: (mode: CLIMode) => void;
26
+ }>({
27
+ mode: "npx",
28
+ setMode: () => {},
29
+ });
30
+
31
+ const CLIModeProvider = ({ children }: { children: React.ReactNode }) => {
32
+ const [mode, setMode] = useState<CLIMode>("npx");
33
+ return (
34
+ <CLIModeContext.Provider value={{ mode, setMode }}>
35
+ {children}
36
+ </CLIModeContext.Provider>
37
+ );
38
+ };
39
+
40
+ const CLIModeSwitch = ({ className = "" }: { className?: string }) => {
41
+ const { mode, setMode } = useContext(CLIModeContext);
42
+
43
+ return (
44
+ <div className={`flex gap-1 w-fit ${className}`}>
45
+ <Button
46
+ variant="ghost"
47
+ size="sm"
48
+ onClick={() => setMode("npx")}
49
+ className={`font-mono text-xs px-3 min-w-[60px] h-8 border transition-colors ${
50
+ mode === "npx"
51
+ ? "bg-foreground text-background border-foreground"
52
+ : "bg-transparent border-input hover:bg-accent hover:text-accent-foreground"
53
+ }`}
54
+ >
55
+ npx
56
+ </Button>
57
+ <Button
58
+ variant="ghost"
59
+ size="sm"
60
+ onClick={() => setMode("npm")}
61
+ className={`font-mono text-xs px-3 min-w-[60px] h-8 border transition-colors ${
62
+ mode === "npm"
63
+ ? "bg-foreground text-background border-foreground"
64
+ : "bg-transparent border-input hover:bg-accent hover:text-accent-foreground"
65
+ }`}
66
+ >
67
+ npm
68
+ </Button>
69
+ </div>
70
+ );
71
+ };
72
+
73
+ const CLICodeBlock = ({
74
+ children,
75
+ language = "bash",
76
+ }: {
77
+ children: React.ReactNode;
78
+ language?: string;
79
+ }) => {
80
+ const { mode } = useContext(CLIModeContext);
81
+ const [copied, setCopied] = useState(false);
82
+
83
+ const copyToClipboard = async (text: string) => {
84
+ try {
85
+ await navigator.clipboard.writeText(text);
86
+ setCopied(true);
87
+ setTimeout(() => setCopied(false), 2000);
88
+ } catch (err) {
89
+ console.error("Failed to copy:", err);
90
+ }
91
+ };
92
+
93
+ // Convert commands based on mode
94
+ const convertCommands = (text: string) => {
95
+ if (mode === "npx") {
96
+ return text
97
+ .replace(/^lerobot /gm, "npx lerobot@latest ")
98
+ .replace(/# lerobot /gm, "# npx lerobot@latest ");
99
+ }
100
+ return text;
101
+ };
102
+
103
+ const codeText =
104
+ typeof children === "string" ? children : children?.toString() || "";
105
+ const convertedCode = convertCommands(codeText);
106
+
107
+ return (
108
+ <div className="my-4">
109
+ <div className="flex items-center justify-between mb-2">
110
+ <CLIModeSwitch />
111
+ </div>
112
+ <div className="bg-slate-800 dark:bg-black/40 border border-border dark:border-white/10 rounded-md overflow-hidden relative">
113
+ <SyntaxHighlighter
114
+ language={language}
115
+ style={oneDark}
116
+ customStyle={{
117
+ margin: 0,
118
+ padding: "1rem",
119
+ fontSize: "0.875rem",
120
+ background: "transparent",
121
+ backgroundColor: "transparent",
122
+ fontFamily:
123
+ "Geist Mono, ui-monospace, SFMono-Regular, 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, 'Courier New', monospace",
124
+ }}
125
+ wrapLines={true}
126
+ wrapLongLines={true}
127
+ codeTagProps={{
128
+ style: {
129
+ background: "transparent",
130
+ backgroundColor: "transparent",
131
+ },
132
+ }}
133
+ >
134
+ {convertedCode}
135
+ </SyntaxHighlighter>
136
+ <Button
137
+ variant="outline"
138
+ size="sm"
139
+ onClick={() => copyToClipboard(convertedCode)}
140
+ className="absolute top-2 right-2 h-7 w-7 p-0 transition-all"
141
+ >
142
+ {copied ? (
143
+ <Check className="w-3 h-3" />
144
+ ) : (
145
+ <Copy className="w-3 h-3" />
146
+ )}
147
+ </Button>
148
+ </div>
149
+ </div>
150
+ );
151
+ };
152
+
153
  const CodeBlock = ({
154
  children,
155
  language = "typescript",
 
218
  Docs
219
  </h2>
220
  <p className="text-sm text-muted-foreground">
221
+ Complete API reference for all lerobot.js packages
222
  </p>
223
  </div>
224
 
225
+ <div className="bg-muted/40 dark:bg-black/30 border border-border dark:border-white/10 p-6 md:p-8 rounded-lg">
226
+ <Tabs defaultValue="web" className="w-full">
227
+ <TabsList className="grid w-full grid-cols-3 mb-8 h-auto p-2">
228
+ <TabsTrigger
229
+ value="web"
230
+ className="flex items-center gap-3 h-16 px-4 data-[state=active]:bg-background"
231
+ >
232
+ <div className="w-8 h-8 bg-primary/20 rounded-lg flex items-center justify-center">
233
+ <Package className="w-5 h-5 text-primary" />
234
+ </div>
235
+ <div className="text-left">
236
+ <div className="font-bold text-sm uppercase tracking-wider">
237
+ WEB
238
+ </div>
239
+ <div className="text-xs text-muted-foreground">
240
+ @lerobot/web
241
+ </div>
242
+ </div>
243
+ </TabsTrigger>
244
+ <TabsTrigger
245
+ value="node"
246
+ className="flex items-center gap-3 h-16 px-4 data-[state=active]:bg-background"
247
+ >
248
+ <div className="w-8 h-8 bg-primary/20 rounded-lg flex items-center justify-center">
249
+ <Server className="w-5 h-5 text-primary" />
250
+ </div>
251
+ <div className="text-left">
252
+ <div className="font-bold text-sm uppercase tracking-wider">
253
+ NODE
254
+ </div>
255
+ <div className="text-xs text-muted-foreground">
256
+ @lerobot/node
257
+ </div>
258
+ </div>
259
+ </TabsTrigger>
260
+ <TabsTrigger
261
+ value="cli"
262
+ className="flex items-center gap-3 h-16 px-4 data-[state=active]:bg-background"
263
+ >
264
+ <div className="w-8 h-8 bg-primary/20 rounded-lg flex items-center justify-center">
265
+ <Terminal className="w-5 h-5 text-primary" />
266
+ </div>
267
+ <div className="text-left">
268
+ <div className="font-bold text-sm uppercase tracking-wider">
269
+ CLI
270
+ </div>
271
+ <div className="text-xs text-muted-foreground">lerobot</div>
272
+ </div>
273
+ </TabsTrigger>
274
+ </TabsList>
275
+
276
+ <TabsContent value="web" className="space-y-14">
277
+ {/* Browser Requirements */}
278
  <div>
279
+ <h3 className="text-xl font-bold text-cyan-600 dark:text-accent-cyan tracking-wider uppercase">
280
+ Browser Requirements
281
+ </h3>
282
+ <div className="mt-4 space-y-2 text-sm">
283
+ <div>
284
+ • <strong>Chromium 89+</strong> with WebSerial and WebUSB API
285
+ support
286
+ </div>
287
+ <div>
288
+ • <strong>HTTPS or localhost</strong>
289
+ </div>
290
+ <div>
291
+ • <strong>User gesture</strong> required for initial port
292
+ selection
293
+ </div>
294
+ </div>
295
  </div>
296
+
297
+ {/* Quick Start */}
298
  <div>
299
+ <h3 className="text-xl font-bold text-cyan-600 dark:text-accent-cyan tracking-wider uppercase flex items-center gap-2">
300
+ <Terminal className="w-5 h-5" />
301
+ Quick Start
302
+ </h3>
303
+ <p className="text-sm mt-2 mb-4">
304
+ Complete workflow from discovery to teleoperation.
305
+ </p>
306
+ <CodeBlock>
307
+ {`import { findPort, releaseMotors, calibrate, teleoperate } from "@lerobot/web";
 
 
 
 
 
 
 
 
308
 
309
  // 1. find and connect to hardware like a robot arm
310
  const findProcess = await findPort();
 
335
 
336
  // 5. stop control (run this when you're done)
337
  teleop.stop();`}
338
+ </CodeBlock>
339
+ </div>
340
+
341
+ {/* API Reference */}
 
 
 
 
 
 
 
342
  <div>
343
+ <h3 className="text-xl font-bold text-cyan-600 dark:text-accent-cyan tracking-wider uppercase flex items-center gap-2">
344
+ <Code2 className="w-5 h-5" />
345
+ API Reference
346
+ </h3>
347
+ <div className="space-y-12 mt-4">
348
+ {/* findPort */}
349
+ <div>
350
+ <h4 className="font-bold text-primary">findPort(config?)</h4>
351
+ <p className="text-sm mt-1">
352
+ Discovers and connects to robotics hardware using WebSerial
353
+ API.
354
+ </p>
355
+ <CodeBlock>
356
+ {`// Interactive Mode (Default) - Shows port dialog
357
  const findProcess = await findPort();
358
  const robots = await findProcess.result; // RobotConnection[]
359
 
 
364
  ],
365
  onMessage: (msg) => console.log(msg),
366
  });`}
367
+ </CodeBlock>
368
+ <div className="mt-3">
369
+ <h5 className="font-bold text-sm tracking-wider">
370
+ Options
371
+ </h5>
372
+ <ul className="mt-1 ml-4 space-y-1 text-sm">
373
+ <li>
374
+ • <code>robotConfigs?: RobotConfig[]</code> -
375
+ Auto-connect to these known robots
376
+ </li>
377
+ <li>
378
+ • <code>onMessage?: (message: string) =&gt; void</code>{" "}
379
+ - Progress messages callback
380
+ </li>
381
+ </ul>
382
+ </div>
383
+ <div className="mt-3">
384
+ <h5 className="font-bold text-sm tracking-wider">
385
+ Returns:{" "}
386
+ <code className="bg-muted/50 px-1 rounded">
387
+ FindPortProcess
388
+ </code>
389
+ </h5>
390
+ <ul className="mt-1 ml-4 space-y-1 text-sm">
391
+ <li>
392
+ • <code>result: Promise&lt;RobotConnection[]&gt;</code>{" "}
393
+ - Array of robot connections
394
+ </li>
395
+ <li>
396
+ • <code>stop(): void</code> - Cancel discovery process
397
+ </li>
398
+ </ul>
399
+ </div>
400
+ </div>
401
 
402
+ {/* calibrate */}
403
+ <div>
404
+ <h4 className="font-bold text-primary">calibrate(config)</h4>
405
+ <p className="text-sm mt-1">
406
+ Calibrates motor homing offsets and records range of motion.
407
+ </p>
408
+ <CodeBlock>
409
+ {`const calibrationProcess = await calibrate({
410
  robot,
411
  onProgress: (message) => {
412
  console.log(message); // "⚙️ Setting motor homing offsets"
 
422
  // Move robot through full range of motion...
423
  calibrationProcess.stop(); // Stop range recording
424
  const calibrationData = await calibrationProcess.result;`}
425
+ </CodeBlock>
426
+ <div className="mt-3">
427
+ <h5 className="font-bold text-sm tracking-wider">
428
+ Options
429
+ </h5>
430
+ <ul className="mt-1 ml-4 space-y-1 text-sm">
431
+ <li>
432
+ • <code>robot: RobotConnection</code> - Connected robot
433
+ from findPort()
434
+ </li>
435
+ <li>
436
+ • <code>onProgress?: (message: string) =&gt; void</code>{" "}
437
+ - Progress messages callback
438
+ </li>
439
+ <li>
440
+ •{" "}
441
+ <code>
442
+ onLiveUpdate?: (data: LiveCalibrationData) =&gt; void
443
+ </code>{" "}
444
+ - Real-time position updates
445
+ </li>
446
+ </ul>
447
+ </div>
448
+ <div className="mt-3">
449
+ <h5 className="font-bold text-sm tracking-wider">
450
+ Returns:{" "}
451
+ <code className="bg-muted/50 px-1 rounded">
452
+ CalibrationProcess
453
+ </code>
454
+ </h5>
455
+ <ul className="mt-1 ml-4 space-y-1 text-sm">
456
+ <li>
457
+ • <code>result: Promise&lt;CalibrationResults&gt;</code>{" "}
458
+ - Python-compatible format
459
+ </li>
460
+ <li>
461
+ • <code>stop(): void</code> - Stop calibration process
462
+ </li>
463
+ </ul>
464
+ </div>
465
+ </div>
466
 
467
+ {/* teleoperate */}
468
+ <div>
469
+ <h4 className="font-bold text-primary">
470
+ teleoperate(config)
471
+ </h4>
472
+ <p className="text-sm mt-1">
473
+ Enables real-time robot control with extensible input
474
+ devices.
475
+ </p>
476
+ <CodeBlock>
477
+ {`// Keyboard Teleoperation
478
  const keyboardTeleop = await teleoperate({
479
  robot,
480
  calibrationData: savedCalibrationData,
 
491
  calibrationData: savedCalibrationData,
492
  teleop: { type: "direct" },
493
  });`}
494
+ </CodeBlock>
495
+ <div className="mt-3">
496
+ <h5 className="font-bold text-sm tracking-wider">
497
+ Options
498
+ </h5>
499
+ <ul className="mt-1 ml-4 space-y-1 text-sm">
500
+ <li>
501
+ • <code>robot: RobotConnection</code> - Connected robot
502
+ from findPort()
503
+ </li>
504
+ <li>
505
+ • <code>teleop: TeleoperatorConfig</code> - Teleoperator
506
+ configuration:
507
+ <ul className="mt-1 ml-4 space-y-1">
508
+ <li>
509
+ • <code>{`{ type: "keyboard" }`}</code> - Keyboard
510
+ control
511
+ </li>
512
+ <li>
513
+ • <code>{`{ type: "direct" }`}</code> - Direct
514
+ programmatic control
515
+ </li>
516
+ </ul>
517
+ </li>
518
+ <li>
519
+ •{" "}
520
+ <code>
521
+ calibrationData?: {`{ [motorName: string]: any }`}
522
+ </code>{" "}
523
+ - Calibration data from calibrate()
524
+ </li>
525
+ <li>
526
+ •{" "}
527
+ <code>
528
+ onStateUpdate?: (state: TeleoperationState) =&gt; void
529
+ </code>{" "}
530
+ - State change callback
531
+ </li>
532
+ </ul>
533
+ </div>
534
+ <div className="mt-3">
535
+ <h5 className="font-bold text-sm tracking-wider">
536
+ Returns:{" "}
537
+ <code className="bg-muted/50 px-1 rounded">
538
+ TeleoperationProcess
539
+ </code>
540
+ </h5>
541
+ <ul className="mt-1 ml-4 space-y-1 text-sm">
542
+ <li>
543
+ • <code>start(): void</code> - Begin teleoperation
544
+ </li>
545
+ <li>
546
+ • <code>stop(): void</code> - Stop teleoperation and
547
+ clear states
548
+ </li>
549
  <li>
550
+ • <code>getState(): TeleoperationState</code> - Current
551
+ state and motor positions
552
  </li>
553
  <li>
554
+ • <code>teleoperator: BaseWebTeleoperator</code> -
555
+ Access teleoperator-specific methods
556
+ </li>
557
+ <li>
558
+ • <code>disconnect(): Promise&lt;void&gt;</code> - Stop
559
+ and disconnect
560
+ </li>
561
+ </ul>
562
+ </div>
563
+ </div>
564
+
565
+ {/* releaseMotors */}
566
+ <div>
567
+ <h4 className="font-bold text-primary">
568
+ releaseMotors(robot, motorIds?)
569
+ </h4>
570
+ <p className="text-sm mt-1">
571
+ Releases motor torque so robot can be moved freely by hand.
572
+ </p>
573
+ <CodeBlock>
574
+ {`// Release all motors for calibration
575
+ await releaseMotors(robot);
576
+
577
+ // Release specific motors only
578
+ await releaseMotors(robot, [1, 2, 3]);`}
579
+ </CodeBlock>
580
+ <div className="mt-3">
581
+ <h5 className="font-bold text-sm tracking-wider">
582
+ Options
583
+ </h5>
584
+ <ul className="mt-1 ml-4 space-y-1 text-sm">
585
+ <li>
586
+ • <code>robot: RobotConnection</code> - Connected robot
587
+ </li>
588
+ <li>
589
+ • <code>motorIds?: number[]</code> - Specific motor IDs
590
+ (default: all motors for robot type)
591
  </li>
592
  </ul>
593
+ </div>
594
+ </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
595
  </div>
596
+ </div>
597
+ </TabsContent>
598
+
599
+ <TabsContent value="node" className="space-y-14">
600
+ {/* Node.js Requirements */}
601
+ <div>
602
+ <h3 className="text-xl font-bold text-cyan-600 dark:text-accent-cyan tracking-wider uppercase">
603
+ Node.js Requirements
604
+ </h3>
605
+ <div className="mt-4 space-y-2 text-sm">
606
+ <div>
607
+ <strong>Node.js 18+</strong> (Windows, macOS, Linux)
608
+ </div>
609
+ <div>
610
+ • <strong>Serial port access</strong> (may require
611
+ permissions)
612
+ </div>
613
+ <div>
614
+ • <strong>SO-100 robot hardware</strong> with USB connection
615
+ </div>
 
 
 
 
 
 
 
 
616
  </div>
617
  </div>
618
 
619
+ {/* Quick Start */}
620
  <div>
621
+ <h3 className="text-xl font-bold text-cyan-600 dark:text-accent-cyan tracking-wider uppercase flex items-center gap-2">
622
+ <Terminal className="w-5 h-5" />
623
+ Quick Start
624
+ </h3>
625
+ <p className="text-sm mt-2 mb-4">
626
+ Complete workflow from discovery to teleoperation in Node.js.
627
  </p>
628
  <CodeBlock>
629
+ {`import { findPort, connectPort, releaseMotors, calibrate, teleoperate } from "@lerobot/node";
630
+
631
+ // 1. find available robot ports
632
+ console.log("🔍 finding available robot ports...");
633
+ const findProcess = await findPort();
634
+ const robots = await findProcess.result;
635
+
636
+ if (robots.length === 0) {
637
+ console.log("❌ no robots found. check connections.");
638
+ process.exit(1);
639
+ }
640
+
641
+ // 2. connect to the first robot found
642
+ console.log(\`✅ found \${robots.length} robot(s). connecting to first one...\`);
643
+ const robot = await connectPort(robots[0].path, robots[0].robotType);
644
+
645
+ // 3. release motors for manual positioning
646
+ console.log("🔓 releasing motors for manual positioning...");
647
  await releaseMotors(robot);
648
 
649
+ // 4. calibrate motors by moving through full range
650
+ console.log("⚙️ starting calibration...");
651
+ const calibrationProcess = await calibrate({
652
+ robot,
653
+ onProgress: (message) => console.log(message),
654
+ onLiveUpdate: (data) => console.log("live positions:", data),
655
+ });
656
+
657
+ // move robot through its range, then stop calibration
658
+ console.log("👋 move robot through full range, press enter when done...");
659
+ process.stdin.once("data", () => {
660
+ calibrationProcess.stop();
661
+ });
662
+
663
+ const calibrationData = await calibrationProcess.result;
664
+ console.log("✅ calibration complete!");
665
+
666
+ // 5. control robot with keyboard
667
+ console.log("🎮 starting keyboard control...");
668
+ const teleop = await teleoperate({
669
+ robot,
670
+ calibrationData,
671
+ teleop: { type: "keyboard" },
672
+ });
673
+ teleop.start();`}
674
+ </CodeBlock>
675
+ </div>
676
+
677
+ {/* How It Works */}
678
+ <div>
679
+ <h3 className="text-xl font-bold text-cyan-600 dark:text-accent-cyan tracking-wider uppercase">
680
+ How It Works
681
+ </h3>
682
+ <div className="mt-4 space-y-6">
683
+ <div>
684
+ <h4 className="font-bold text-primary">
685
+ Beginner Flow: findPort() → connectPort() → Use Robot
686
+ </h4>
687
+ <p className="text-sm mt-1 mb-3">
688
+ Most users should start with findPort() for discovery, then
689
+ connectPort() for connection:
690
+ </p>
691
+ <CodeBlock>
692
+ {`// ✅ recommended: discover then connect
693
+ const findProcess = await findPort();
694
+ const robots = await findProcess.result;
695
+ const robot = await connectPort(robots[0].path, robots[0].robotType);`}
696
+ </CodeBlock>
697
+ </div>
698
+ <div>
699
+ <h4 className="font-bold text-primary">
700
+ Advanced: Direct Connection with connectPort()
701
+ </h4>
702
+ <p className="text-sm mt-1 mb-3">
703
+ Only use connectPort() when you already know the exact port:
704
+ </p>
705
+ <CodeBlock>
706
+ {`// ⚡ advanced: direct connection to known port
707
+ const robot = await connectPort("/dev/ttyUSB0", "so100_follower");`}
708
+ </CodeBlock>
709
+ </div>
710
+ </div>
711
+ </div>
712
+
713
+ {/* API Reference */}
714
+ <div>
715
+ <h3 className="text-xl font-bold text-cyan-600 dark:text-accent-cyan tracking-wider uppercase flex items-center gap-2">
716
+ <Code2 className="w-5 h-5" />
717
+ API Reference
718
+ </h3>
719
+ <div className="space-y-12 mt-4">
720
+ {/* findPort */}
721
+ <div>
722
+ <h4 className="font-bold text-primary">findPort(config?)</h4>
723
+ <p className="text-sm mt-1">
724
+ Discovers available robotics hardware on serial ports.
725
+ Unlike the web version, this only discovers ports -
726
+ connection happens separately with connectPort().
727
+ </p>
728
+ <CodeBlock>
729
+ {`// Discover all available robots
730
+ const findProcess = await findPort();
731
+ const robots = await findProcess.result;
732
+
733
+ console.log(\`Found \${robots.length} robot(s):\`);
734
+ robots.forEach((robot) => {
735
+ console.log(\`- \${robot.robotType} on \${robot.path}\`);
736
+ });
737
+
738
+ // Connect to specific robot
739
+ const robot = await connectPort(robots[0].path, robots[0].robotType);`}
740
+ </CodeBlock>
741
+ <div className="mt-3">
742
+ <h5 className="font-bold text-sm tracking-wider">
743
+ Returns: FindPortProcess
744
+ </h5>
745
+ <ul className="mt-1 ml-4 space-y-1 text-sm">
746
+ <li>
747
+ • <code>result: Promise&lt;DiscoveredRobot[]&gt;</code>{" "}
748
+ - Array of discovered robots with path, robotType, and
749
+ other metadata
750
+ </li>
751
+ <li>
752
+ • <code>stop(): void</code> - Cancel discovery process
753
+ </li>
754
+ </ul>
755
+ </div>
756
+ </div>
757
+
758
+ {/* connectPort */}
759
+ <div>
760
+ <h4 className="font-bold text-primary">
761
+ connectPort(port, robotType, robotId?)
762
+ </h4>
763
+ <p className="text-sm mt-1">
764
+ Creates a connection to a robot on the specified serial
765
+ port.
766
+ </p>
767
+ <CodeBlock>
768
+ {`// Connect to SO-100 follower arm
769
+ const robot = await connectPort(
770
+ "/dev/ttyUSB0", // Serial port path
771
+ "so100_follower", // Robot type
772
+ "my_robot_arm" // Custom robot ID
773
+ );
774
+
775
+ // Windows
776
+ const robot = await connectPort("COM4", "so100_follower", "my_robot");
777
+
778
+ // Connection is ready to use
779
+ console.log(\`Connected to \${robot.robotType} on \${robot.port.path}\`);`}
780
+ </CodeBlock>
781
+ <div className="mt-3">
782
+ <h5 className="font-bold text-sm tracking-wider">
783
+ Parameters
784
+ </h5>
785
+ <ul className="mt-1 ml-4 space-y-1 text-sm">
786
+ <li>
787
+ • <code>port: string</code> - Serial port path (e.g.,
788
+ /dev/ttyUSB0, COM4)
789
+ </li>
790
+ <li>
791
+ •{" "}
792
+ <code>
793
+ robotType: "so100_follower" | "so100_leader"
794
+ </code>{" "}
795
+ - Type of robot
796
+ </li>
797
+ <li>
798
+ • <code>robotId?: string</code> - Custom identifier for
799
+ your robot
800
+ </li>
801
+ </ul>
802
+ </div>
803
+ </div>
804
+
805
+ {/* calibrate */}
806
+ <div>
807
+ <h4 className="font-bold text-primary">calibrate(config)</h4>
808
+ <p className="text-sm mt-1">
809
+ Calibrates motor homing offsets and records range of motion.{" "}
810
+ <strong>Identical to Python lerobot behavior.</strong>
811
+ </p>
812
+ <CodeBlock>
813
+ {`const calibrationProcess = await calibrate({
814
+ robot,
815
+ onProgress: (message) => {
816
+ console.log(message); // "⚙️ Setting motor homing offsets"
817
+ },
818
+ onLiveUpdate: (data) => {
819
+ // Real-time motor positions during range recording
820
+ Object.entries(data).forEach(([motor, info]) => {
821
+ console.log(\`\${motor}: \${info.current} (range: \${info.range})\`);
822
+ });
823
+ },
824
+ });
825
+
826
+ // Move robot through full range of motion...
827
+ // When finished, stop calibration
828
+ calibrationProcess.stop();
829
+
830
+ const calibrationData = await calibrationProcess.result;
831
+
832
+ // Save to file (Python-compatible format)
833
+ import { writeFileSync } from "fs";
834
+ writeFileSync(
835
+ "./my_robot_calibration.json",
836
+ JSON.stringify(calibrationData, null, 2)
837
+ );`}
838
+ </CodeBlock>
839
+ <div className="mt-3">
840
+ <h5 className="font-bold text-sm tracking-wider">
841
+ Returns: CalibrationProcess
842
+ </h5>
843
+ <ul className="mt-1 ml-4 space-y-1 text-sm">
844
+ <li>
845
+ • <code>result: Promise&lt;CalibrationResults&gt;</code>{" "}
846
+ - <strong>Python-compatible</strong> calibration data
847
+ </li>
848
+ <li>
849
+ • <code>stop(): void</code> - Stop calibration process
850
+ </li>
851
+ </ul>
852
+ </div>
853
+ </div>
854
+
855
+ {/* teleoperate */}
856
+ <div>
857
+ <h4 className="font-bold text-primary">
858
+ teleoperate(config)
859
+ </h4>
860
+ <p className="text-sm mt-1">
861
+ Real-time robot control with keyboard input.{" "}
862
+ <strong>Smooth, responsive movement</strong> optimized for
863
+ Node.js.
864
+ </p>
865
+ <CodeBlock>
866
+ {`const teleop = await teleoperate({
867
+ robot,
868
+ teleop: { type: "keyboard" },
869
+ onStateUpdate: (state) => {
870
+ console.log(\`Active: \${state.isActive}\`);
871
+ state.motorConfigs.forEach((motor) => {
872
+ console.log(\`\${motor.name}: \${motor.currentPosition}\`);
873
+ });
874
+ },
875
+ });
876
+
877
+ // Start keyboard control
878
+ teleop.start();
879
+
880
+ // Control will be active until stopped
881
+ setTimeout(() => teleop.stop(), 60000);`}
882
+ </CodeBlock>
883
+ <div className="mt-3">
884
+ <h5 className="font-bold text-sm tracking-wider">
885
+ Keyboard Controls (SO-100)
886
+ </h5>
887
+ <div className="mt-1 ml-4 text-sm font-mono">
888
+ <div>Arrow Keys: Shoulder pan/lift</div>
889
+ <div>WASD: Elbow flex, wrist flex</div>
890
+ <div>Q/E: Wrist roll</div>
891
+ <div>O/C: Gripper open/close</div>
892
+ <div>ESC: Emergency stop</div>
893
+ <div>Ctrl+C: Exit</div>
894
+ </div>
895
+ </div>
896
+ </div>
897
+
898
+ {/* releaseMotors */}
899
+ <div>
900
+ <h4 className="font-bold text-primary">
901
+ releaseMotors(robot)
902
+ </h4>
903
+ <p className="text-sm mt-1">
904
+ Releases motor torque so robot can be moved freely by hand.
905
+ </p>
906
+ <CodeBlock>
907
+ {`// Release all motors for calibration
908
+ await releaseMotors(robot);
909
+ console.log("Motors released - you can now move the robot freely");`}
910
+ </CodeBlock>
911
+ </div>
912
+ </div>
913
+ </div>
914
+
915
+ {/* Serial Port Permissions */}
916
+ <div>
917
+ <h3 className="text-xl font-bold text-cyan-600 dark:text-accent-cyan tracking-wider uppercase">
918
+ Serial Port Permissions
919
+ </h3>
920
+ <div className="mt-4 space-y-4">
921
+ <div>
922
+ <h4 className="font-bold text-primary">Linux/macOS</h4>
923
+ <CodeBlock language="bash">
924
+ {`# Add user to dialout group (Linux)
925
+ sudo usermod -a -G dialout $USER
926
+
927
+ # Set permissions (macOS)
928
+ sudo chmod 666 /dev/tty.usbserial-*`}
929
+ </CodeBlock>
930
+ </div>
931
+ <div>
932
+ <h4 className="font-bold text-primary">Windows</h4>
933
+ <p className="text-sm">No additional setup required.</p>
934
+ </div>
935
+ </div>
936
+ </div>
937
+
938
+ {/* Python Migration */}
939
+ <div>
940
+ <h3 className="text-xl font-bold text-cyan-600 dark:text-accent-cyan tracking-wider uppercase">
941
+ Migration from Python lerobot
942
+ </h3>
943
+ <p className="text-sm mt-2 mb-4">
944
+ Commands are nearly identical - seamless migration from Python
945
+ lerobot.
946
+ </p>
947
+ <CodeBlock language="bash">
948
+ {`# Python lerobot
949
+ python -m lerobot.calibrate --robot.type so100_follower --robot.port /dev/ttyUSB0
950
+
951
+ # Node.js equivalent
952
+ npx lerobot calibrate --robot.type so100_follower --robot.port /dev/ttyUSB0`}
953
  </CodeBlock>
954
+ <div className="mt-4 space-y-2 text-sm">
955
+ <div>
956
+ • <strong>Same commands</strong> - just replace{" "}
957
+ <code>python -m lerobot.</code> with <code>npx lerobot</code>
958
+ </div>
959
+ <div>
960
+ • <strong>Same calibration files</strong> - Python and Node.js
961
+ calibrations are interchangeable
962
+ </div>
 
 
 
 
963
  </div>
964
  </div>
965
+ </TabsContent>
966
+
967
+ <TabsContent value="cli" className="space-y-14">
968
+ <CLIModeProvider>
969
+ {/* Commands */}
970
+ <div>
971
+ <h3 className="text-xl font-bold text-cyan-600 dark:text-accent-cyan tracking-wider uppercase flex items-center gap-2">
972
+ <Code2 className="w-5 h-5" />
973
+ Available Commands
974
+ </h3>
975
+ <div className="space-y-8 mt-4">
976
+ {/* find-port */}
977
+ <div>
978
+ <h4 className="font-bold text-primary">find-port</h4>
979
+ <p className="text-sm mt-1">
980
+ Interactive port discovery using cable detection.
981
+ </p>
982
+ <CLICodeBlock language="bash">
983
+ {`lerobot find-port
984
+
985
+ # Interactive process:
986
+ # 1. Lists current ports
987
+ # 2. Prompts to unplug USB cable
988
+ # 3. Detects which port disappeared
989
+ # 4. Prompts to reconnect cable`}
990
+ </CLICodeBlock>
991
+ </div>
992
+
993
+ {/* calibrate */}
994
+ <div>
995
+ <h4 className="font-bold text-primary">calibrate</h4>
996
+ <p className="text-sm mt-1">
997
+ Calibrate robot motors and save calibration data.
998
+ </p>
999
+ <CLICodeBlock language="bash">
1000
+ {`lerobot calibrate --robot.type=so100_follower --robot.port=/dev/ttyUSB0 --robot.id=my_arm
1001
+
1002
+ # Options:
1003
+ # --robot.type Robot type (so100_follower, so100_leader)
1004
+ # --robot.port Serial port (/dev/ttyUSB0, COM4)
1005
+ # --robot.id Robot identifier (default: "default")
1006
+ # --output Custom output path for calibration file`}
1007
+ </CLICodeBlock>
1008
+ </div>
1009
+
1010
+ {/* teleoperate */}
1011
+ <div>
1012
+ <h4 className="font-bold text-primary">teleoperate</h4>
1013
+ <p className="text-sm mt-1">
1014
+ Control robot through keyboard input.
1015
+ </p>
1016
+ <CLICodeBlock language="bash">
1017
+ {`lerobot teleoperate --robot.type=so100_follower --robot.port=/dev/ttyUSB0 --robot.id=my_arm
1018
+
1019
+ # Keyboard Controls:
1020
+ # w/s - Elbow flex/extend
1021
+ # a/d - Wrist down/up
1022
+ # q/e - Wrist roll left/right
1023
+ # o/c - Gripper open/close
1024
+ # Arrow keys - Shoulder lift/pan
1025
+ # Ctrl+C - Stop and exit`}
1026
+ </CLICodeBlock>
1027
+ </div>
1028
+ </div>
1029
+ </div>
1030
+ </CLIModeProvider>
1031
+ </TabsContent>
1032
+ </Tabs>
1033
  </div>
1034
  </div>
1035
  );
examples/cyberpunk-standalone/src/components/roadmap-section.tsx CHANGED
@@ -34,7 +34,7 @@ const roadmapItems: RoadmapItem[] = [
34
  {
35
  title: "node/cli",
36
  description: "Node.js CLI tools for robot control and automation scripts",
37
- status: "in_progress",
38
  },
39
  {
40
  title: "SO-100 leader arm",
@@ -44,7 +44,7 @@ const roadmapItems: RoadmapItem[] = [
44
  {
45
  title: "record",
46
  description: "Record robot trajectories and sensor data to create datasets",
47
- status: "planned",
48
  },
49
  {
50
  title: "replay",
 
34
  {
35
  title: "node/cli",
36
  description: "Node.js CLI tools for robot control and automation scripts",
37
+ status: "completed",
38
  },
39
  {
40
  title: "SO-100 leader arm",
 
44
  {
45
  title: "record",
46
  description: "Record robot trajectories and sensor data to create datasets",
47
+ status: "in_progress",
48
  },
49
  {
50
  title: "replay",
examples/cyberpunk-standalone/src/components/setup-cards.tsx CHANGED
@@ -1,6 +1,16 @@
1
  "use client";
2
  import { useState } from "react";
3
- import { Copy, Package, Clock, Check, Terminal } from "lucide-react";
 
 
 
 
 
 
 
 
 
 
4
  import { Button } from "@/components/ui/button";
5
  import { Card } from "@/components/ui/card";
6
  import { Badge } from "@/components/ui/badge";
@@ -8,6 +18,7 @@ import HudCorners from "@/components/hud-corners";
8
  import { cn } from "@/lib/utils";
9
 
10
  type PackageManager = "npm" | "yarn" | "pnpm" | "bun";
 
11
 
12
  interface PackageInstallerProps {
13
  packageName: string;
@@ -58,7 +69,7 @@ function PackageInstaller({
58
  className={cn(
59
  "font-mono text-xs px-3 min-w-[60px] h-8 border transition-colors",
60
  selectedPM === pm.value
61
- ? "bg-primary text-primary-foreground border-primary"
62
  : "bg-transparent border-input hover:bg-accent hover:text-accent-foreground"
63
  )}
64
  >
@@ -99,13 +110,94 @@ function PackageInstaller({
99
  );
100
  }
101
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
  export function SetupCards() {
103
  return (
104
- <div className="grid md:grid-cols-2 gap-6 mb-8">
105
  {/* Web Installation Card */}
106
  {/* HudCorners creates 4 absolutely positioned corner elements with primary color borders */}
107
  <HudCorners color="primary" size="sm" layer="front">
108
- <Card className="h-full border-dashed border border-muted/30">
 
 
 
 
 
 
 
 
 
 
 
109
  {/* This div contains the card content and sits above the corner elements due to relative positioning */}
110
  <div className="p-6">
111
  <div className="flex items-center gap-3 mb-4">
@@ -127,47 +219,70 @@ export function SetupCards() {
127
  </Card>
128
  </HudCorners>
129
 
130
- {/* Node.js Card - Coming Soon */}
131
- <HudCorners color="whiteMuted" size="sm" layer="front">
132
- <Card className="h-full opacity-60 relative overflow-hidden border-dashed border border-muted/30">
133
- {/* Disabled overlay effect */}
134
- <div className="absolute inset-0 bg-gradient-to-br from-transparent via-muted/20 to-muted/40 dark:via-black/20 dark:to-black/40 pointer-events-none" />
135
-
136
- <div className="p-6 relative h-full">
137
- <div className="flex items-center justify-between mb-4">
138
- <div className="flex items-center gap-3">
139
- <div className="w-12 h-12 bg-muted/20 rounded-lg flex items-center justify-center border border-dashed border-muted/30">
140
- <Terminal className="w-6 h-6 text-muted-foreground" />
141
- </div>
142
- <div>
143
- <h3 className="text-xl font-bold text-muted-foreground font-mono tracking-wider uppercase">
144
- node
145
- </h3>
146
- <p className="text-sm text-muted-foreground/70 font-mono">
147
- run LeRobot.js on the server
148
- </p>
149
- </div>
 
 
 
 
 
 
150
  </div>
151
- <Badge
152
- variant="outline"
153
- className="border-dashed border-muted/30 bg-muted/10 text-muted-foreground font-mono text-xs animate-pulse"
154
- >
155
- coming soon
156
- </Badge>
157
  </div>
158
 
159
- <PackageInstaller packageName="@lerobot/node" disabled />
160
-
161
- {/* Cyberpunk scan lines effect */}
162
- <div className="absolute inset-0 pointer-events-none">
163
- <div
164
- className="absolute inset-0 bg-gradient-to-b from-transparent via-primary/5 to-transparent"
165
- style={{
166
- backgroundImage:
167
- "repeating-linear-gradient(0deg, transparent, transparent 2px, rgba(255,255,255,0.03) 2px, rgba(255,255,255,0.03) 4px)",
168
- }}
169
- />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
170
  </div>
 
 
171
  </div>
172
  </Card>
173
  </HudCorners>
 
1
  "use client";
2
  import { useState } from "react";
3
+ import {
4
+ Copy,
5
+ Package,
6
+ Clock,
7
+ Check,
8
+ Terminal,
9
+ Command,
10
+ Server,
11
+ Github,
12
+ ExternalLink,
13
+ } from "lucide-react";
14
  import { Button } from "@/components/ui/button";
15
  import { Card } from "@/components/ui/card";
16
  import { Badge } from "@/components/ui/badge";
 
18
  import { cn } from "@/lib/utils";
19
 
20
  type PackageManager = "npm" | "yarn" | "pnpm" | "bun";
21
+ type CLIInstallMode = "npm" | "npx";
22
 
23
  interface PackageInstallerProps {
24
  packageName: string;
 
69
  className={cn(
70
  "font-mono text-xs px-3 min-w-[60px] h-8 border transition-colors",
71
  selectedPM === pm.value
72
+ ? "bg-foreground text-background border-foreground"
73
  : "bg-transparent border-input hover:bg-accent hover:text-accent-foreground"
74
  )}
75
  >
 
110
  );
111
  }
112
 
113
+ function CLIInstaller() {
114
+ const [selectedMode, setSelectedMode] = useState<CLIInstallMode>("npx");
115
+ const [copied, setCopied] = useState(false);
116
+
117
+ const installModes: {
118
+ value: CLIInstallMode;
119
+ label: string;
120
+ command: string;
121
+ }[] = [
122
+ { value: "npx", label: "npx", command: "npx lerobot@latest" },
123
+ { value: "npm", label: "npm", command: "npm install -g lerobot" },
124
+ ];
125
+
126
+ const copyToClipboard = async (text: string) => {
127
+ try {
128
+ await navigator.clipboard.writeText(text);
129
+ setCopied(true);
130
+ setTimeout(() => setCopied(false), 2000);
131
+ } catch (err) {
132
+ console.error("Failed to copy:", err);
133
+ }
134
+ };
135
+
136
+ const currentCommand =
137
+ installModes.find((mode) => mode.value === selectedMode)?.command || "";
138
+
139
+ return (
140
+ <div className="max-w-md">
141
+ <div className="space-y-3">
142
+ <div className="flex gap-1 w-fit">
143
+ {installModes.map((mode) => (
144
+ <Button
145
+ key={mode.value}
146
+ variant="ghost"
147
+ size="sm"
148
+ onClick={() => setSelectedMode(mode.value)}
149
+ className={cn(
150
+ "font-mono text-xs px-3 min-w-[60px] h-8 border transition-colors",
151
+ selectedMode === mode.value
152
+ ? "bg-foreground text-background border-foreground"
153
+ : "bg-transparent border-input hover:bg-accent hover:text-accent-foreground"
154
+ )}
155
+ >
156
+ {mode.label}
157
+ </Button>
158
+ ))}
159
+ </div>
160
+
161
+ <div className="relative">
162
+ <div className="border rounded-md p-3 font-mono text-sm bg-muted/60 dark:bg-black/40 border-border dark:border-white/10 text-foreground dark:text-primary">
163
+ {currentCommand}
164
+ </div>
165
+ <Button
166
+ variant="outline"
167
+ size="sm"
168
+ onClick={() => copyToClipboard(currentCommand)}
169
+ className="absolute right-2 top-2 h-7 w-7 p-0 transition-all"
170
+ >
171
+ {copied ? (
172
+ <Check className="w-3 h-3" />
173
+ ) : (
174
+ <Copy className="w-3 h-3" />
175
+ )}
176
+ </Button>
177
+ </div>
178
+ </div>
179
+ </div>
180
+ );
181
+ }
182
+
183
  export function SetupCards() {
184
  return (
185
+ <div className="grid md:grid-cols-2 lg:grid-cols-3 gap-6 mb-8">
186
  {/* Web Installation Card */}
187
  {/* HudCorners creates 4 absolutely positioned corner elements with primary color borders */}
188
  <HudCorners color="primary" size="sm" layer="front">
189
+ <Card className="h-full border-dashed border border-muted/30 relative">
190
+ {/* GitHub Link */}
191
+ <a
192
+ href="https://github.com/timpietrusky/lerobot.js/tree/main/packages/web"
193
+ target="_blank"
194
+ rel="noopener noreferrer"
195
+ className="absolute top-6 right-6 p-2 rounded-lg hover:bg-primary/10 transition-colors group"
196
+ title="View @lerobot/web on GitHub"
197
+ >
198
+ <Github className="w-4 h-4 text-muted-foreground group-hover:text-primary transition-colors" />
199
+ </a>
200
+
201
  {/* This div contains the card content and sits above the corner elements due to relative positioning */}
202
  <div className="p-6">
203
  <div className="flex items-center gap-3 mb-4">
 
219
  </Card>
220
  </HudCorners>
221
 
222
+ {/* Node.js Card - Active */}
223
+ <HudCorners color="primary" size="sm" layer="front">
224
+ <Card className="h-full border-dashed border border-muted/30 relative">
225
+ {/* GitHub Link */}
226
+ <a
227
+ href="https://github.com/timpietrusky/lerobot.js/tree/main/packages/node"
228
+ target="_blank"
229
+ rel="noopener noreferrer"
230
+ className="absolute top-6 right-6 p-2 rounded-lg hover:bg-primary/10 transition-colors group"
231
+ title="View @lerobot/node on GitHub"
232
+ >
233
+ <Github className="w-4 h-4 text-muted-foreground group-hover:text-primary transition-colors" />
234
+ </a>
235
+
236
+ <div className="p-6">
237
+ <div className="flex items-center gap-3 mb-4">
238
+ <div className="w-12 h-12 bg-primary/20 rounded-lg flex items-center justify-center">
239
+ <Server className="w-6 h-6 text-primary" />
240
+ </div>
241
+ <div>
242
+ <h3 className="text-xl font-bold text-primary font-mono tracking-wider uppercase">
243
+ node
244
+ </h3>
245
+ <p className="text-sm text-muted-foreground font-mono">
246
+ run LeRobot.js on the server
247
+ </p>
248
  </div>
 
 
 
 
 
 
249
  </div>
250
 
251
+ <PackageInstaller packageName="@lerobot/node" />
252
+ </div>
253
+ </Card>
254
+ </HudCorners>
255
+
256
+ {/* CLI Card - Active */}
257
+ <HudCorners color="primary" size="sm" layer="front">
258
+ <Card className="h-full border-dashed border border-muted/30 relative">
259
+ {/* GitHub Link */}
260
+ <a
261
+ href="https://github.com/timpietrusky/lerobot.js/tree/main/packages/cli"
262
+ target="_blank"
263
+ rel="noopener noreferrer"
264
+ className="absolute top-6 right-6 p-2 rounded-lg hover:bg-primary/10 transition-colors group"
265
+ title="View lerobot CLI on GitHub"
266
+ >
267
+ <Github className="w-4 h-4 text-muted-foreground group-hover:text-primary transition-colors" />
268
+ </a>
269
+
270
+ <div className="p-6">
271
+ <div className="flex items-center gap-3 mb-4">
272
+ <div className="w-12 h-12 bg-primary/20 rounded-lg flex items-center justify-center">
273
+ <Terminal className="w-6 h-6 text-primary" />
274
+ </div>
275
+ <div>
276
+ <h3 className="text-xl font-bold text-primary font-mono tracking-wider uppercase">
277
+ CLI
278
+ </h3>
279
+ <p className="text-sm text-muted-foreground font-mono">
280
+ run LeRobot.js in the CLI
281
+ </p>
282
+ </div>
283
  </div>
284
+
285
+ <CLIInstaller />
286
  </div>
287
  </Card>
288
  </HudCorners>