Merge pull request #489 from AdityaBavadekar/chore/formatter-setup

chore: Setup code formatting,  pre-commit hooks and Linting CI/CD
This commit is contained in:
James Murdza
2025-10-22 11:35:59 -07:00
committed by GitHub
31 changed files with 666 additions and 515 deletions

12
.editorconfig Normal file
View File

@@ -0,0 +1,12 @@
root = true
[*]
indent_style = space
indent_size = 4
charset = utf-8
end_of_line = lf
insert_final_newline = false
trim_trailing_whitespace = true
[*.{js,ts,jsx,tsx,json,css,scss,html,md}]
indent_size = 2

58
.github/workflows/lint.yml vendored Normal file
View File

@@ -0,0 +1,58 @@
name: Lint & Format Check
on:
pull_request:
branches:
- main
push:
branches:
- main
jobs:
lint:
name: Lint & Format
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: 20
- name: Set up pnpm
uses: pnpm/action-setup@v4
with:
version: 10
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.11
- name: Install Python dependencies
run: |
pip install uv
uv sync
- name: Install Node dependencies
run: pnpm install --frozen-lockfile
# Python checks (isort, black, ruff, mypy)
- name: Python lint & typecheck
run: |
uv run isort --check-only .
uv run black --check .
uv run ruff check .
# Temporarily disabled due to untyped codebase
# uv run mypy .
# TypeScript type check
- name: TypeScript typecheck
run: node ./scripts/typescript-typecheck.js
# JS/TS/Markdown/YAML checks
- name: Prettier check
run: uv run prettier --check "**/*.{ts,tsx,js,jsx,json,md,yaml,yml}"

47
.pre-commit-config.yaml Normal file
View File

@@ -0,0 +1,47 @@
repos:
- repo: https://github.com/pre-commit/mirrors-prettier
rev: v3.0.0
hooks:
- id: prettier
name: Prettier (TS/JS/JSON/Markdown/YAML)
entry: prettier --write
language: node
files: \.(ts|tsx|js|jsx|json|md|yaml|yml)$
- repo: local
hooks:
- id: tsc
name: TypeScript type check
entry: node ./scripts/typescript-typecheck.js
language: node
- repo: https://github.com/PyCQA/isort
rev: 7.0.0
hooks:
- id: isort
name: isort code formatter
args: ['--profile', 'black']
files: \.(py)$
- repo: https://github.com/psf/black
rev: 25.9.0
hooks:
- id: black
name: Black code formatter
files: \.(py)$
- repo: https://github.com/charliermarsh/ruff-pre-commit
rev: v0.14.1
hooks:
- id: ruff
name: ruff linter
args: ['--fix']
files: \.(py)$
# Temporarily disabled due to untyped codebase
# - repo: https://github.com/pre-commit/mirrors-mypy
# rev: v1.5.1
# hooks:
# - id: mypy
# name: mypy type checker
# files: \.(py)$

32
.prettierignore Normal file
View File

@@ -0,0 +1,32 @@
# Node / JS
node_modules/
dist/
build/
out/
.next/
*.min.js
# Python
__pycache__/
*.pyc
*.pyo
*.pyd
.venv/
venv/
.env
.env.local
# Logs
*.log
*.tmp
# VSCode / editor files
.vscode/
.idea/
# Other generated files
*.lock
*.db
*.sqlite
pnpm-lock.yaml
uv.lock

12
.prettierrc.yaml Normal file
View File

@@ -0,0 +1,12 @@
semi: true
singleQuote: true
trailingComma: es5
tabWidth: 2
printWidth: 100
arrowParens: always
bracketSpacing: true
overrides:
- files: "*.{yml,yaml}"
options:
singleQuote: false

10
.vscode/extensions.json vendored Normal file
View File

@@ -0,0 +1,10 @@
{
"recommendations": [
"esbenp.prettier-vscode",
"charliermarsh.ruff",
"ms-python.black-formatter",
"ms-python.mypy-type-checker",
"ms-python.vscode-pylance",
"ms-python.isort"
]
}

View File

@@ -7,7 +7,7 @@
],
"extensions": {
"recommendations": [
"biomejs.biome",
"esbenp.prettier-vscode"
]
}
}

25
.vscode/settings.json vendored
View File

@@ -1,4 +1,25 @@
{
"python-envs.pythonProjects": [],
"python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python"
"python-envs.pythonProjects": [],
"python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit",
"source.fixAll": "explicit"
},
"extensions.ignoreRecommendations": false,
"python.formatting.provider": "black",
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter",
},
"[javascript][typescript][typescriptreact][javascriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"ruff.configuration": "${workspaceFolder}/pyproject.toml",
"mypy-type-checker.args": [
"--config-file",
"${workspaceFolder}/pyproject.toml"
],
"mypy-type-checker.path": [
"${workspaceFolder}"
]
}

View File

@@ -36,16 +36,19 @@ We follow strict code formatting guidelines to ensure consistency across the cod
```bash
# For Python code
uv run black .
uv run isort .
uv run ruff check --fix .
```
4. **Validate Your Code**: Ensure your code passes all checks:
```bash
uv run mypy .
```
5. Every time you try to commit code, a pre-commit hook will automatically run the formatting and validation tools. If any issues are found, the commit will be blocked until they are resolved. Please make sure to address any issues reported by the pre-commit hook before attempting to commit again. Once all issues are resolved, you can proceed with your commit.
## Documentation
Documentation improvements are always welcome. You can:
- Fix typos or unclear explanations
- Add examples and use cases
- Improve API documentation
@@ -53,4 +56,4 @@ Documentation improvements are always welcome. You can:
For detailed instructions on setting up your development environment and submitting code contributions, please see our [Developer-Guide](Development.md).
Feel free to join our [Discord community](https://discord.com/invite/mVnXXpdE85) to discuss ideas or get help with your contributions.
Feel free to join our [Discord community](https://discord.com/invite/mVnXXpdE85) to discuss ideas or get help with your contributions.

View File

@@ -17,36 +17,64 @@ These packages are part of a uv workspace which manages a shared virtual environ
1. Install Lume CLI:
```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/trycua/cua/main/libs/lume/scripts/install.sh)"
```
```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/trycua/cua/main/libs/lume/scripts/install.sh)"
```
2. Clone the repository:
```bash
git clone https://github.com/trycua/cua.git
cd cua
```
```bash
git clone https://github.com/trycua/cua.git
cd cua
```
3. Create a `.env.local` file in the root directory with your API keys:
```bash
# Required for Anthropic provider
ANTHROPIC_API_KEY=your_anthropic_key_here
```bash
# Required for Anthropic provider
ANTHROPIC_API_KEY=your_anthropic_key_here
# Required for OpenAI provider
OPENAI_API_KEY=your_openai_key_here
```
# Required for OpenAI provider
OPENAI_API_KEY=your_openai_key_here
```
4. Open the workspace in VSCode or Cursor:
4. Install Node.js dependencies for Prettier and other scripts:
```bash
# For Cua Python development
code .vscode/py.code-workspace
```bash
# Install pnpm if you don't have it
npm install -g pnpm
# For Lume (Swift) development
code .vscode/lume.code-workspace
```
# Install all JS/TS dependencies
pnpm install
```
5. Install Python dependencies and workspace packages:
```bash
# First install uv if you don't have it
pip install uv
# Then install all Python dependencies
uv sync
```
6. Open the workspace in VSCode or Cursor:
```bash
# For Cua Python development
code .vscode/py.code-workspace
# For Lume (Swift) development
code .vscode/lume.code-workspace
```
7. Install Pre-commit hooks:
This ensures code formatting and validation run automatically on each commit.
```bash
uv run pre-commit install
```
Using the workspace file is strongly recommended as it:
@@ -118,10 +146,11 @@ The Cua project follows strict code formatting standards to ensure consistency a
The project uses the following tools for code formatting and linting:
- **[Black](https://black.readthedocs.io/)**: Code formatter
- **[isort](https://pycqa.github.io/isort/)**: Import sorter
- **[Ruff](https://beta.ruff.rs/docs/)**: Fast linter and formatter
- **[MyPy](https://mypy.readthedocs.io/)**: Static type checker
These tools are automatically installed when you set up the development environment using the `./scripts/build.sh` script.
These tools are automatically installed when you set up the development environment.
#### Configuration
@@ -133,23 +162,34 @@ line-length = 100
target-version = ["py311"]
[tool.ruff]
fix = true
line-length = 100
target-version = "py311"
[tool.ruff.lint]
select = ["E", "F", "B", "I"]
ignore = [
"E501", "E402", "I001", "I002", "B007", "B023", "B024", "B027", "B028",
"B904", "B905", "E711", "E712", "E722", "E731", "F401", "F403", "F405",
"F811", "F821", "F841"
]
fix = true
[tool.ruff.format]
docstring-code-format = true
[tool.mypy]
strict = true
python_version = "3.11"
ignore_missing_imports = true
disallow_untyped_defs = true
check_untyped_defs = true
warn_return_any = true
disallow_untyped_defs = true
ignore_missing_imports = true
python_version = "3.11"
show_error_codes = true
strict = true
warn_return_any = true
warn_unused_ignores = false
[tool.isort]
profile = "black"
```
#### Key Formatting Rules
@@ -163,23 +203,48 @@ warn_unused_ignores = false
The repository includes VSCode workspace configurations that enable automatic formatting. When you open the workspace files (as recommended in the setup instructions), the correct formatting settings are automatically applied.
Python-specific settings in the workspace files:
##### Python-specific settings
These are configured in `.vscode/settings.json`:
```json
"[python]": {
"editor.formatOnSave": true,
"editor.defaultFormatter": "ms-python.black-formatter",
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
{
"python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit",
"source.fixAll": "explicit"
},
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter"
},
"python.formatting.provider": "black",
"ruff.configuration": "${workspaceFolder}/pyproject.toml",
"mypy-type-checker.args": ["--config-file", "${workspaceFolder}/pyproject.toml"],
"mypy-type-checker.path": ["${workspaceFolder}"]
}
```
Recommended VS Code extensions:
##### **JS/TS-specific settings**
- Black Formatter (ms-python.black-formatter)
- Ruff (charliermarsh.ruff)
- Pylance (ms-python.vscode-pylance)
```json
"[javascript][typescript][typescriptreact][javascriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
```
- Ensures Prettier is used for all JS/TS files for consistent formatting.
Recommended VS Code Extensions
- **Black Formatter** `ms-python.black-formatter`
- **Ruff** `charliermarsh.ruff`
- **Pylance** `ms-python.vscode-pylance`
- **isort** `ms-python.isort`
- **Prettier** `esbenp.prettier-vscode`
- **Mypy Type Checker** `ms-python.mypy-type-checker`
> VSCode will automatically suggest installing the recommended extensions when you open the workspace.
#### Manual Formatting
@@ -189,8 +254,11 @@ To manually format code:
# Format all Python files using Black
uv run black .
# Sort imports using isort
uv run isort .
# Run Ruff linter with auto-fix
uv run ruff check --fix .
uv run ruff check .
# Run type checking with MyPy
uv run mypy .
@@ -200,13 +268,77 @@ uv run mypy .
Before submitting a pull request, ensure your code passes all formatting checks:
**Option 1: Run all hooks via pre-commit (all in a single command)**
```bash
# Run all checks
# Run hooks on staged files (recommended for quick checks)
uv run pre-commit run
```
- Automatically runs Black, Ruff, isort, Mypy, Prettier, and any other configured hooks.
**Option 2: Run individual tools manually**
```bash
# Python checks
uv run black --check .
uv run isort --check .
uv run ruff check .
uv run mypy .
# JavaScript/TypeScript checks
uv run prettier --check "**/*.{ts,tsx,js,jsx,json,md,yaml,yml}"
# TypeScript typecheck
node ./scripts/typescript-typecheck.js
```
### JavaScript / TypeScript Formatting (Prettier)
The project uses **Prettier** to ensure consistent formatting across all JS/TS/JSON/Markdown/YAML files.
#### Installation
All Node.js dependencies are managed via `pnpm`. Make sure you have run:
```bash
# Install pnpm if you don't have it
npm install -g pnpm
# Install project dependencies
pnpm install
```
This installs Prettier and other JS/TS dependencies defined in `package.json`.
#### Usage
- **Check formatting** (without making changes):
```bash
pnpm prettier:check
```
- **Automatically format files**:
```bash
pnpm prettier:format
```
#### Type Checking (TypeScript)
- Run the TypeScript type checker:
```bash
node ./scripts/typescript-typecheck.js
```
#### VSCode Integration
- The workspace config ensures Prettier is used automatically for JS/TS/JSON/Markdown/YAML files.
- Recommended extension: Prettier Code Formatter
- Ensure `editor.formatOnSave` is enabled in VSCode for automatic formatting.
### Swift Code (Lume)
For Swift code in the `libs/lume` directory:

View File

@@ -1,8 +0,0 @@
{
"useTabs": false,
"semi": true,
"singleQuote": true,
"trailingComma": "es5",
"bracketSpacing": true,
"jsxBracketSameLine": true
}

View File

@@ -1,7 +0,0 @@
{
"useTabs": false,
"semi": true,
"singleQuote": true,
"trailingComma": "es5",
"bracketSpacing": true
}

View File

@@ -6,7 +6,9 @@
"main": "index.js",
"scripts": {
"dev": "tsx watch src/index.ts",
"start": "tsx src/index.ts"
"start": "tsx src/index.ts",
"format": "prettier --write .",
"format:check": "prettier --check ."
},
"keywords": [],
"author": "",
@@ -22,4 +24,4 @@
"tsx": "^4.20.3",
"typescript": "^5.8.3"
}
}
}

View File

@@ -108,4 +108,4 @@ constraint-dependencies = ["fastrtc>0.43.0", "mlx-audio>0.2.3"]
distribution = true
[tool.pdm.build]
includes = ["agent/"]
includes = ["agent/"]

View File

@@ -67,23 +67,4 @@ dev = [
]
[tool.pdm.scripts]
api = "python -m computer_server"
[tool.ruff]
line-length = 100
target-version = "py310"
select = ["E", "F", "B", "I"]
fix = true
[tool.ruff.format]
docstring-code-format = true
[tool.mypy]
strict = true
python_version = "3.10"
ignore_missing_imports = true
disallow_untyped_defs = true
check_untyped_defs = true
warn_return_any = true
show_error_codes = true
warn_unused_ignores = false
api = "python -m computer_server"

View File

@@ -44,29 +44,6 @@ distribution = true
includes = ["computer/"]
source-includes = ["tests/", "README.md", "LICENSE"]
[tool.black]
line-length = 100
target-version = ["py311"]
[tool.ruff]
line-length = 100
target-version = "py311"
select = ["E", "F", "B", "I"]
fix = true
[tool.ruff.format]
docstring-code-format = true
[tool.mypy]
strict = true
python_version = "3.11"
ignore_missing_imports = true
disallow_untyped_defs = true
check_untyped_defs = true
warn_return_any = true
show_error_codes = true
warn_unused_ignores = false
[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]

View File

@@ -24,34 +24,11 @@ distribution = true
includes = ["core/"]
source-includes = ["tests/", "README.md", "LICENSE"]
[tool.black]
line-length = 100
target-version = ["py311"]
[tool.ruff]
line-length = 100
target-version = "py311"
select = ["E", "F", "B", "I"]
fix = true
[tool.ruff.format]
docstring-code-format = true
[tool.mypy]
strict = true
python_version = "3.11"
ignore_missing_imports = true
disallow_untyped_defs = true
check_untyped_defs = true
warn_return_any = true
show_error_codes = true
warn_unused_ignores = false
[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]
python_files = "test_*.py"
python_files = "test_*.py"
[dependency-groups]
dev = [
"pytest>=8.3.5",
]
]

View File

@@ -27,14 +27,4 @@ distribution = true
dev = [
"black>=23.9.1",
"ruff>=0.0.292",
]
[tool.black]
line-length = 100
target-version = ["py311"]
[tool.ruff]
line-length = 100
target-version = "py311"
select = ["E", "F", "B", "I"]
fix = true
]

View File

@@ -41,29 +41,6 @@ dev = [
"pytest>=7.0.0",
]
[tool.black]
line-length = 100
target-version = ["py311"]
[tool.ruff]
fix = true
line-length = 100
select = ["B", "E", "F", "I"]
target-version = "py311"
[tool.ruff.format]
docstring-code-format = true
[tool.mypy]
check_untyped_defs = true
disallow_untyped_defs = true
ignore_missing_imports = true
python_version = "3.11"
show_error_codes = true
strict = true
warn_return_any = true
warn_unused_ignores = false
[tool.pytest.ini_options]
asyncio_mode = "auto"
python_files = "test_*.py"
@@ -71,4 +48,4 @@ testpaths = ["tests"]
[tool.pdm.build]
includes = ["pylume/"]
source-includes = ["LICENSE", "README.md", "tests/"]
source-includes = ["LICENSE", "README.md", "tests/"]

View File

@@ -52,30 +52,7 @@ src-layout = false
includes = ["som/"]
source-includes = ["tests/", "README.md", "LICENSE"]
[tool.black]
line-length = 100
target-version = ["py311"]
[tool.ruff]
line-length = 100
target-version = "py311"
select = ["E", "F", "B", "I"]
fix = true
[tool.ruff.format]
docstring-code-format = true
[tool.mypy]
strict = true
python_version = "3.11"
ignore_missing_imports = true
disallow_untyped_defs = true
check_untyped_defs = true
warn_return_any = true
show_error_codes = true
warn_unused_ignores = false
[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]
python_files = "test_*.py"
python_files = "test_*.py"

View File

@@ -28,8 +28,8 @@
"access": "public"
},
"scripts": {
"lint": "biome lint .",
"lint:fix": "biome lint --fix .",
"lint": "prettier --check .",
"lint:fix": "prettier --write .",
"build": "tsdown",
"dev": "tsdown --watch",
"test": "vitest",
@@ -43,7 +43,6 @@
"pino": "^9.7.0"
},
"devDependencies": {
"@biomejs/biome": "^1.9.4",
"@types/node": "^22.15.17",
"bumpp": "^10.1.0",
"happy-dom": "^17.4.7",

View File

@@ -1,80 +0,0 @@
{
"$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
"vcs": {
"enabled": false,
"clientKind": "git",
"useIgnoreFile": false
},
"files": {
"ignoreUnknown": false,
"include": ["core/**/*.ts", "computer/**/*.ts"],
"ignore": ["dist", "node_modules"]
},
"formatter": {
"enabled": true,
"useEditorconfig": true,
"formatWithErrors": false,
"indentStyle": "space",
"indentWidth": 2,
"lineEnding": "lf",
"lineWidth": 80,
"attributePosition": "auto",
"bracketSpacing": true
},
"organizeImports": {
"enabled": true
},
"linter": {
"enabled": true,
"rules": {
"recommended": true,
"style": {
"useSelfClosingElements": "warn",
"noUnusedTemplateLiteral": "warn",
"noNonNullAssertion": "off"
},
"a11y": {
"useMediaCaption": "off",
"useKeyWithClickEvents": "warn",
"useKeyWithMouseEvents": "warn",
"noSvgWithoutTitle": "off",
"useButtonType": "warn",
"noAutofocus": "off"
},
"suspicious": {
"noArrayIndexKey": "off"
},
"correctness": {
"noUnusedVariables": "warn",
"noUnusedFunctionParameters": "warn",
"noUnusedImports": "warn"
},
"complexity": {
"useOptionalChain": "info"
},
"nursery": {
"useSortedClasses": {
"level": "warn",
"fix": "safe",
"options": {
"attributes": ["className"],
"functions": ["cn"]
}
}
}
}
},
"javascript": {
"formatter": {
"jsxQuoteStyle": "double",
"quoteProperties": "asNeeded",
"trailingCommas": "es5",
"semicolons": "always",
"arrowParentheses": "always",
"bracketSameLine": false,
"quoteStyle": "single",
"attributePosition": "auto",
"bracketSpacing": true
}
}
}

View File

@@ -28,8 +28,8 @@
"access": "public"
},
"scripts": {
"lint": "biome lint .",
"lint:fix": "biome lint --fix .",
"lint": "prettier --check .",
"lint:fix": "prettier --write .",
"build": "tsdown",
"dev": "tsdown --watch",
"test": "vitest",
@@ -43,7 +43,6 @@
"ws": "^8.18.0"
},
"devDependencies": {
"@biomejs/biome": "^1.9.4",
"@types/node": "^22.15.17",
"@types/ws": "^8.18.1",
"bumpp": "^10.1.0",
@@ -53,4 +52,4 @@
"typescript": "^5.8.3",
"vitest": "^3.1.3"
}
}
}

View File

@@ -28,8 +28,8 @@
"access": "public"
},
"scripts": {
"lint": "biome lint .",
"lint:fix": "biome lint --fix .",
"lint": "prettier --check .",
"lint:fix": "prettier --write .",
"build": "tsdown",
"dev": "tsdown --watch",
"test": "vitest",
@@ -44,7 +44,6 @@
"uuid": "^11.1.0"
},
"devDependencies": {
"@biomejs/biome": "^1.9.4",
"@types/node": "^22.15.17",
"@types/ws": "^8.18.1",
"bumpp": "^10.1.0",
@@ -54,4 +53,4 @@
"typescript": "^5.8.3",
"vitest": "^3.1.3"
}
}
}

View File

@@ -6,27 +6,28 @@
"author": "cua",
"license": "MIT",
"scripts": {
"lint": "biome check",
"lint:fix": "biome check --fix",
"lint": "prettier --check .",
"lint:fix": "prettier --write .",
"build:core": "pnpm --filter @trycua/core build",
"build:computer": "pnpm --filter @trycua/computer build",
"build": "pnpm build:core && pnpm build:computer",
"test:core": "pnpm --filter @trycua/core test",
"test:computer": "pnpm --filter @trycua/computer test",
"test": "pnpm -r test",
"typecheck": "pnpm -r typecheck"
"typecheck": "pnpm -r typecheck",
"format": "prettier --write .",
"format:check": "prettier --check ."
},
"packageManager": "pnpm@10.12.3",
"devDependencies": {
"@biomejs/biome": "^1.9.4"
"prettier": "^3.6.2"
},
"pnpm": {
"onlyBuiltDependencies": [
"@biomejs/biome",
"esbuild",
"protobufjs",
"sharp",
"unrs-resolver"
]
}
}
}

View File

@@ -8,9 +8,9 @@ importers:
.:
devDependencies:
'@biomejs/biome':
specifier: ^1.9.4
version: 1.9.4
prettier:
specifier: ^3.6.2
version: 3.6.2
agent:
dependencies:
@@ -24,9 +24,6 @@ importers:
specifier: ^9.7.0
version: 9.7.0
devDependencies:
'@biomejs/biome':
specifier: ^1.9.4
version: 1.9.4
'@types/node':
specifier: ^22.15.17
version: 22.15.34
@@ -58,9 +55,6 @@ importers:
specifier: ^8.18.0
version: 8.18.3
devDependencies:
'@biomejs/biome':
specifier: ^1.9.4
version: 1.9.4
'@types/node':
specifier: ^22.15.17
version: 22.15.34
@@ -101,9 +95,6 @@ importers:
specifier: ^11.1.0
version: 11.1.0
devDependencies:
'@biomejs/biome':
specifier: ^1.9.4
version: 1.9.4
'@types/node':
specifier: ^22.15.17
version: 22.15.34
@@ -165,76 +156,23 @@ packages:
resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==}
engines: {node: '>=6.9.0'}
'@biomejs/biome@1.9.4':
resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==}
engines: {node: '>=14.21.3'}
hasBin: true
'@biomejs/cli-darwin-arm64@1.9.4':
resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [darwin]
'@biomejs/cli-darwin-x64@1.9.4':
resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [darwin]
'@biomejs/cli-linux-arm64-musl@1.9.4':
resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [linux]
'@biomejs/cli-linux-arm64@1.9.4':
resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [linux]
'@biomejs/cli-linux-x64-musl@1.9.4':
resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [linux]
'@biomejs/cli-linux-x64@1.9.4':
resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [linux]
'@biomejs/cli-win32-arm64@1.9.4':
resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [win32]
'@biomejs/cli-win32-x64@1.9.4':
resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [win32]
'@emnapi/core@1.4.3':
resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==}
'@emnapi/core@1.4.5':
resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==}
'@emnapi/core@1.5.0':
resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==}
'@emnapi/runtime@1.4.3':
resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==}
'@emnapi/runtime@1.4.5':
resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==}
'@emnapi/runtime@1.5.0':
resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==}
'@emnapi/wasi-threads@1.0.2':
resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==}
'@emnapi/wasi-threads@1.0.4':
resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==}
'@emnapi/wasi-threads@1.1.0':
resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==}
'@esbuild/aix-ppc64@0.21.5':
resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
@@ -550,30 +488,28 @@ packages:
'@napi-rs/wasm-runtime@0.2.11':
resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==}
'@napi-rs/wasm-runtime@1.0.3':
resolution: {integrity: sha512-rZxtMsLwjdXkMUGC3WwsPwLNVqVqnTJT6MNIB6e+5fhMcSCPP0AOsNWuMQ5mdCq6HNjs/ZeWAEchpqeprqBD2Q==}
'@oxc-project/runtime@0.82.2':
resolution: {integrity: sha512-cYxcj5CPn/vo5QSpCZcYzBiLidU5+GlFSqIeNaMgBDtcVRBsBJHZg3pHw999W6nHamFQ1EHuPPByB26tjaJiJw==}
engines: {node: '>=6.9.0'}
'@napi-rs/wasm-runtime@1.0.7':
resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==}
'@oxc-project/types@0.70.0':
resolution: {integrity: sha512-ngyLUpUjO3dpqygSRQDx7nMx8+BmXbWOU4oIwTJFV2MVIDG7knIZwgdwXlQWLg3C3oxg1lS7ppMtPKqKFb7wzw==}
'@oxc-project/types@0.82.2':
resolution: {integrity: sha512-WMGSwd9FsNBs/WfqIOH0h3k1LBdjZJQGYjGnC+vla/fh6HUsu5HzGPerRljiq1hgMQ6gs031YJR12VyP57b/hQ==}
'@oxc-project/types@0.95.0':
resolution: {integrity: sha512-vACy7vhpMPhjEJhULNxrdR0D943TkA/MigMpJCHmBHvMXxRStRi/dPtTlfQ3uDwWSzRpT8z+7ImjZVf8JWBocQ==}
'@quansync/fs@0.1.3':
resolution: {integrity: sha512-G0OnZbMWEs5LhDyqy2UL17vGhSVHkQIfVojMtEWVenvj0V5S84VBgy86kJIuNsGDp2p7sTKlpSIpBUWdC35OKg==}
engines: {node: '>=20.0.0'}
'@rolldown/binding-android-arm64@1.0.0-beta.33':
resolution: {integrity: sha512-xhDQXKftRkEULIxCddrKMR8y0YO/Y+6BKk/XrQP2B29YjV2wr8DByoEz+AHX9BfLHb2srfpdN46UquBW2QXWpQ==}
'@rolldown/binding-android-arm64@1.0.0-beta.44':
resolution: {integrity: sha512-g9ejDOehJFhxC1DIXQuZQ9bKv4lRDioOTL42cJjFjqKPl1L7DVb9QQQE1FxokGEIMr6FezLipxwnzOXWe7DNPg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [android]
'@rolldown/binding-darwin-arm64@1.0.0-beta.33':
resolution: {integrity: sha512-7lhhY08v5ZtRq8JJQaJ49fnJombAPnqllKKCDLU/UvaqNAOEyTGC8J1WVOLC4EA4zbXO5U3CCRgVGyAFNH2VtQ==}
'@rolldown/binding-darwin-arm64@1.0.0-beta.44':
resolution: {integrity: sha512-PxAW1PXLPmCzfhfKIS53kwpjLGTUdIfX4Ht+l9mj05C3lYCGaGowcNsYi2rdxWH24vSTmeK+ajDNRmmmrK0M7g==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [darwin]
@@ -582,8 +518,9 @@ packages:
cpu: [arm64]
os: [darwin]
'@rolldown/binding-darwin-x64@1.0.0-beta.33':
resolution: {integrity: sha512-U2iGjcDV7NWyYyhap8YuY0nwrLX6TvX/9i7gBtdEMPm9z3wIUVGNMVdGlA43uqg7xDpRGpEqGnxbeDgiEwYdnA==}
'@rolldown/binding-darwin-x64@1.0.0-beta.44':
resolution: {integrity: sha512-/CtQqs1oO9uSb5Ju60rZvsdjE7Pzn8EK2ISAdl2jedjMzeD/4neNyCbwyJOAPzU+GIQTZVyrFZJX+t7HXR1R/g==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [darwin]
@@ -592,8 +529,9 @@ packages:
cpu: [x64]
os: [darwin]
'@rolldown/binding-freebsd-x64@1.0.0-beta.33':
resolution: {integrity: sha512-gd6ASromVHFLlzrjJWMG5CXHkS7/36DEZ8HhvGt2NN8eZALCIuyEx8HMMLqvKA7z4EAztVkdToVrdxpGMsKZxw==}
'@rolldown/binding-freebsd-x64@1.0.0-beta.44':
resolution: {integrity: sha512-V5Q5W9c4+2GJ4QabmjmVV6alY97zhC/MZBaLkDtHwGy3qwzbM4DYgXUbun/0a8AH5hGhuU27tUIlYz6ZBlvgOA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [freebsd]
@@ -602,8 +540,9 @@ packages:
cpu: [x64]
os: [freebsd]
'@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.33':
resolution: {integrity: sha512-xmeLfkfGthuynO1EpCdyTVr0r4G+wqvnKCuyR6rXOet+hLrq5HNAC2XtP/jU2TB4Bc6aiLYxl868B8CGtFDhcw==}
'@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.44':
resolution: {integrity: sha512-X6adjkHeFqKsTU0FXdNN9HY4LDozPqIfHcnXovE5RkYLWIjMWuc489mIZ6iyhrMbCqMUla9IOsh5dvXSGT9o9A==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
@@ -612,8 +551,9 @@ packages:
cpu: [arm]
os: [linux]
'@rolldown/binding-linux-arm64-gnu@1.0.0-beta.33':
resolution: {integrity: sha512-cHGp8yfHL4pes6uaLbO5L58ceFkUK4efd8iE86jClD1QPPDLKiqEXJCFYeuK3OfODuF5EBOmf0SlcUZNEYGdmw==}
'@rolldown/binding-linux-arm64-gnu@1.0.0-beta.44':
resolution: {integrity: sha512-kRRKGZI4DXWa6ANFr3dLA85aSVkwPdgXaRjfanwY84tfc3LncDiIjyWCb042e3ckPzYhHSZ3LmisO+cdOIYL6Q==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
@@ -622,8 +562,9 @@ packages:
cpu: [arm64]
os: [linux]
'@rolldown/binding-linux-arm64-musl@1.0.0-beta.33':
resolution: {integrity: sha512-wZ1t7JAvVeFgskH1L9y7c47ITitPytpL0s8FmAT8pVfXcaTmS58ZyoXT+y6cz8uCkQnETjrX3YezTGI18u3ecg==}
'@rolldown/binding-linux-arm64-musl@1.0.0-beta.44':
resolution: {integrity: sha512-hMtiN9xX1NhxXBa2U3Up4XkVcsVp2h73yYtMDY59z9CDLEZLrik9RVLhBL5QtoX4zZKJ8HZKJtWuGYvtmkCbIQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
@@ -632,8 +573,9 @@ packages:
cpu: [arm64]
os: [linux]
'@rolldown/binding-linux-x64-gnu@1.0.0-beta.33':
resolution: {integrity: sha512-cDndWo3VEYbm7yeujOV6Ie2XHz0K8YX/R/vbNmMo03m1QwtBKKvbYNSyJb3B9+8igltDjd8zNM9mpiNNrq/ekQ==}
'@rolldown/binding-linux-x64-gnu@1.0.0-beta.44':
resolution: {integrity: sha512-rd1LzbpXQuR8MTG43JB9VyXDjG7ogSJbIkBpZEHJ8oMKzL6j47kQT5BpIXrg3b5UVygW9QCI2fpFdMocT5Kudg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
@@ -642,8 +584,9 @@ packages:
cpu: [x64]
os: [linux]
'@rolldown/binding-linux-x64-musl@1.0.0-beta.33':
resolution: {integrity: sha512-bl7uzi6es/l6LT++NZcBpiX43ldLyKXCPwEZGY1rZJ99HQ7m1g3KxWwYCcGxtKjlb2ExVvDZicF6k+96vxOJKg==}
'@rolldown/binding-linux-x64-musl@1.0.0-beta.44':
resolution: {integrity: sha512-qI2IiPqmPRW25exXkuQr3TlweCDc05YvvbSDRPCuPsWkwb70dTiSoXn8iFxT4PWqTi71wWHg1Wyta9PlVhX5VA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
@@ -652,13 +595,14 @@ packages:
cpu: [x64]
os: [linux]
'@rolldown/binding-openharmony-arm64@1.0.0-beta.33':
resolution: {integrity: sha512-TrgzQanpLgcmmzolCbYA9BPZgF1gYxkIGZhU/HROnJPsq67gcyaYw/JBLioqQLjIwMipETkn25YY799D2OZzJA==}
'@rolldown/binding-openharmony-arm64@1.0.0-beta.44':
resolution: {integrity: sha512-+vHvEc1pL5iJRFlldLC8mjm6P4Qciyfh2bh5ZI6yxDQKbYhCHRKNURaKz1mFcwxhVL5YMYsLyaqM3qizVif9MQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [openharmony]
'@rolldown/binding-wasm32-wasi@1.0.0-beta.33':
resolution: {integrity: sha512-z0LltdUfvoKak9SuaLz/M9AVSg+RTOZjFksbZXzC6Svl1odyW4ai21VHhZy3m2Faeeb/rl/9efVLayj+qYEGxw==}
'@rolldown/binding-wasm32-wasi@1.0.0-beta.44':
resolution: {integrity: sha512-XSgLxRrtFj6RpTeMYmmQDAwHjKseYGKUn5LPiIdW4Cq+f5SBSStL2ToBDxkbdxKPEbCZptnLPQ/nfKcAxrC8Xg==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
@@ -667,8 +611,9 @@ packages:
engines: {node: '>=14.21.3'}
cpu: [wasm32]
'@rolldown/binding-win32-arm64-msvc@1.0.0-beta.33':
resolution: {integrity: sha512-CpvOHyqDNOYx9riD4giyXQDIu72bWRU2Dwt1xFSPlBudk6NumK0OJl6Ch+LPnkp5podQHcQg0mMauAXPVKct7g==}
'@rolldown/binding-win32-arm64-msvc@1.0.0-beta.44':
resolution: {integrity: sha512-cF1LJdDIX02cJrFrX3wwQ6IzFM7I74BYeKFkzdcIA4QZ0+2WA7/NsKIgjvrunupepWb1Y6PFWdRlHSaz5AW1Wg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [win32]
@@ -677,8 +622,9 @@ packages:
cpu: [arm64]
os: [win32]
'@rolldown/binding-win32-ia32-msvc@1.0.0-beta.33':
resolution: {integrity: sha512-/tNTvZTWHz6HiVuwpR3zR0kGIyCNb+/tFhnJmti+Aw2fAXs3l7Aj0DcXd0646eFKMX8L2w5hOW9H08FXTUkN0g==}
'@rolldown/binding-win32-ia32-msvc@1.0.0-beta.44':
resolution: {integrity: sha512-5uaJonDafhHiMn+iEh7qUp3QQ4Gihv3lEOxKfN8Vwadpy0e+5o28DWI42DpJ9YBYMrVy4JOWJ/3etB/sptpUwA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ia32]
os: [win32]
@@ -687,8 +633,9 @@ packages:
cpu: [ia32]
os: [win32]
'@rolldown/binding-win32-x64-msvc@1.0.0-beta.33':
resolution: {integrity: sha512-Bb2qK3z7g2mf4zaKRvkohHzweaP1lLbaoBmXZFkY6jJWMm0Z8Pfnh8cOoRlH1IVM1Ufbo8ZZ1WXp1LbOpRMtXw==}
'@rolldown/binding-win32-x64-msvc@1.0.0-beta.44':
resolution: {integrity: sha512-vsqhWAFJkkmgfBN/lkLCWTXF1PuPhMjfnAyru48KvF7mVh2+K7WkKYHezF3Fjz4X/mPScOcIv+g6cf6wnI6eWg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [win32]
@@ -697,8 +644,8 @@ packages:
cpu: [x64]
os: [win32]
'@rolldown/pluginutils@1.0.0-beta.33':
resolution: {integrity: sha512-she25NCG6NoEPC/SEB4pHs5STcnfI4VBFOzjeI63maSPrWME5J2XC8ogrBgp8NaE/xzj28/kbpSaebiMvFRj+w==}
'@rolldown/pluginutils@1.0.0-beta.44':
resolution: {integrity: sha512-g6eW7Zwnr2c5RADIoqziHoVs6b3W5QTQ4+qbpfjbkMJ9x+8Og211VW/oot2dj9dVwaK/UyC6Yo+02gV+wWQVNg==}
'@rolldown/pluginutils@1.0.0-beta.9':
resolution: {integrity: sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==}
@@ -806,8 +753,8 @@ packages:
'@trycua/core@0.1.2':
resolution: {integrity: sha512-pSQZaR46OG3MtUCBaneG6RpJD1xfX754VDZ101FM5tkUUiymIrxpQicQEUfhwEBxbI/EmBnmCnVY1AFKvykKzQ==}
'@tybys/wasm-util@0.10.0':
resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==}
'@tybys/wasm-util@0.10.1':
resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
'@tybys/wasm-util@0.9.0':
resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==}
@@ -1157,6 +1104,11 @@ packages:
resolution: {integrity: sha512-6VISkNdxO24ehXiDA4dugyCSIV7lpGVaEu5kn/dlAj+SJ1lgcDru9PQ8p/+GSXsXVxohd1t7kHL2JKc9NoGb0w==}
engines: {node: '>=20'}
prettier@3.6.2:
resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==}
engines: {node: '>=14'}
hasBin: true
process-warning@5.0.0:
resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==}
@@ -1212,8 +1164,9 @@ packages:
vue-tsc:
optional: true
rolldown@1.0.0-beta.33:
resolution: {integrity: sha512-mgu118ZuRguC8unhPCbdZbyRbjQfEMiWqlojBA5aRIncBelRaBomnHNpGKYkYWeK7twRz5Cql30xgqqrA3Xelw==}
rolldown@1.0.0-beta.44:
resolution: {integrity: sha512-gcqgyCi3g93Fhr49PKvymE8PoaGS0sf6ajQrsYaQ8o5de6aUEbD6rJZiJbhOfpcqOnycgsAsUNPYri1h25NgsQ==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
rolldown@1.0.0-beta.9:
@@ -1577,50 +1530,15 @@ snapshots:
'@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.27.1
'@biomejs/biome@1.9.4':
optionalDependencies:
'@biomejs/cli-darwin-arm64': 1.9.4
'@biomejs/cli-darwin-x64': 1.9.4
'@biomejs/cli-linux-arm64': 1.9.4
'@biomejs/cli-linux-arm64-musl': 1.9.4
'@biomejs/cli-linux-x64': 1.9.4
'@biomejs/cli-linux-x64-musl': 1.9.4
'@biomejs/cli-win32-arm64': 1.9.4
'@biomejs/cli-win32-x64': 1.9.4
'@biomejs/cli-darwin-arm64@1.9.4':
optional: true
'@biomejs/cli-darwin-x64@1.9.4':
optional: true
'@biomejs/cli-linux-arm64-musl@1.9.4':
optional: true
'@biomejs/cli-linux-arm64@1.9.4':
optional: true
'@biomejs/cli-linux-x64-musl@1.9.4':
optional: true
'@biomejs/cli-linux-x64@1.9.4':
optional: true
'@biomejs/cli-win32-arm64@1.9.4':
optional: true
'@biomejs/cli-win32-x64@1.9.4':
optional: true
'@emnapi/core@1.4.3':
dependencies:
'@emnapi/wasi-threads': 1.0.2
tslib: 2.8.1
optional: true
'@emnapi/core@1.4.5':
'@emnapi/core@1.5.0':
dependencies:
'@emnapi/wasi-threads': 1.0.4
'@emnapi/wasi-threads': 1.1.0
tslib: 2.8.1
optional: true
@@ -1629,7 +1547,7 @@ snapshots:
tslib: 2.8.1
optional: true
'@emnapi/runtime@1.4.5':
'@emnapi/runtime@1.5.0':
dependencies:
tslib: 2.8.1
optional: true
@@ -1639,7 +1557,7 @@ snapshots:
tslib: 2.8.1
optional: true
'@emnapi/wasi-threads@1.0.4':
'@emnapi/wasi-threads@1.1.0':
dependencies:
tslib: 2.8.1
optional: true
@@ -1821,80 +1739,78 @@ snapshots:
'@tybys/wasm-util': 0.9.0
optional: true
'@napi-rs/wasm-runtime@1.0.3':
'@napi-rs/wasm-runtime@1.0.7':
dependencies:
'@emnapi/core': 1.4.5
'@emnapi/runtime': 1.4.5
'@tybys/wasm-util': 0.10.0
'@emnapi/core': 1.5.0
'@emnapi/runtime': 1.5.0
'@tybys/wasm-util': 0.10.1
optional: true
'@oxc-project/runtime@0.82.2': {}
'@oxc-project/types@0.70.0': {}
'@oxc-project/types@0.82.2': {}
'@oxc-project/types@0.95.0': {}
'@quansync/fs@0.1.3':
dependencies:
quansync: 0.2.10
'@rolldown/binding-android-arm64@1.0.0-beta.33':
'@rolldown/binding-android-arm64@1.0.0-beta.44':
optional: true
'@rolldown/binding-darwin-arm64@1.0.0-beta.33':
'@rolldown/binding-darwin-arm64@1.0.0-beta.44':
optional: true
'@rolldown/binding-darwin-arm64@1.0.0-beta.9':
optional: true
'@rolldown/binding-darwin-x64@1.0.0-beta.33':
'@rolldown/binding-darwin-x64@1.0.0-beta.44':
optional: true
'@rolldown/binding-darwin-x64@1.0.0-beta.9':
optional: true
'@rolldown/binding-freebsd-x64@1.0.0-beta.33':
'@rolldown/binding-freebsd-x64@1.0.0-beta.44':
optional: true
'@rolldown/binding-freebsd-x64@1.0.0-beta.9':
optional: true
'@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.33':
'@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.44':
optional: true
'@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.9':
optional: true
'@rolldown/binding-linux-arm64-gnu@1.0.0-beta.33':
'@rolldown/binding-linux-arm64-gnu@1.0.0-beta.44':
optional: true
'@rolldown/binding-linux-arm64-gnu@1.0.0-beta.9':
optional: true
'@rolldown/binding-linux-arm64-musl@1.0.0-beta.33':
'@rolldown/binding-linux-arm64-musl@1.0.0-beta.44':
optional: true
'@rolldown/binding-linux-arm64-musl@1.0.0-beta.9':
optional: true
'@rolldown/binding-linux-x64-gnu@1.0.0-beta.33':
'@rolldown/binding-linux-x64-gnu@1.0.0-beta.44':
optional: true
'@rolldown/binding-linux-x64-gnu@1.0.0-beta.9':
optional: true
'@rolldown/binding-linux-x64-musl@1.0.0-beta.33':
'@rolldown/binding-linux-x64-musl@1.0.0-beta.44':
optional: true
'@rolldown/binding-linux-x64-musl@1.0.0-beta.9':
optional: true
'@rolldown/binding-openharmony-arm64@1.0.0-beta.33':
'@rolldown/binding-openharmony-arm64@1.0.0-beta.44':
optional: true
'@rolldown/binding-wasm32-wasi@1.0.0-beta.33':
'@rolldown/binding-wasm32-wasi@1.0.0-beta.44':
dependencies:
'@napi-rs/wasm-runtime': 1.0.3
'@napi-rs/wasm-runtime': 1.0.7
optional: true
'@rolldown/binding-wasm32-wasi@1.0.0-beta.9':
@@ -1902,25 +1818,25 @@ snapshots:
'@napi-rs/wasm-runtime': 0.2.11
optional: true
'@rolldown/binding-win32-arm64-msvc@1.0.0-beta.33':
'@rolldown/binding-win32-arm64-msvc@1.0.0-beta.44':
optional: true
'@rolldown/binding-win32-arm64-msvc@1.0.0-beta.9':
optional: true
'@rolldown/binding-win32-ia32-msvc@1.0.0-beta.33':
'@rolldown/binding-win32-ia32-msvc@1.0.0-beta.44':
optional: true
'@rolldown/binding-win32-ia32-msvc@1.0.0-beta.9':
optional: true
'@rolldown/binding-win32-x64-msvc@1.0.0-beta.33':
'@rolldown/binding-win32-x64-msvc@1.0.0-beta.44':
optional: true
'@rolldown/binding-win32-x64-msvc@1.0.0-beta.9':
optional: true
'@rolldown/pluginutils@1.0.0-beta.33': {}
'@rolldown/pluginutils@1.0.0-beta.44': {}
'@rolldown/pluginutils@1.0.0-beta.9': {}
@@ -1991,7 +1907,7 @@ snapshots:
posthog-node: 5.1.1
uuid: 11.1.0
'@tybys/wasm-util@0.10.0':
'@tybys/wasm-util@0.10.1':
dependencies:
tslib: 2.8.1
optional: true
@@ -2384,6 +2300,8 @@ snapshots:
posthog-node@5.1.1: {}
prettier@3.6.2: {}
process-warning@5.0.0: {}
quansync@0.2.10: {}
@@ -2418,7 +2336,7 @@ snapshots:
- oxc-resolver
- supports-color
rolldown-plugin-dts@0.15.7(rolldown@1.0.0-beta.33)(typescript@5.8.3):
rolldown-plugin-dts@0.15.7(rolldown@1.0.0-beta.44)(typescript@5.8.3):
dependencies:
'@babel/generator': 7.28.3
'@babel/parser': 7.28.3
@@ -2428,34 +2346,32 @@ snapshots:
debug: 4.4.1
dts-resolver: 2.1.1
get-tsconfig: 4.10.1
rolldown: 1.0.0-beta.33
rolldown: 1.0.0-beta.44
optionalDependencies:
typescript: 5.8.3
transitivePeerDependencies:
- oxc-resolver
- supports-color
rolldown@1.0.0-beta.33:
rolldown@1.0.0-beta.44:
dependencies:
'@oxc-project/runtime': 0.82.2
'@oxc-project/types': 0.82.2
'@rolldown/pluginutils': 1.0.0-beta.33
ansis: 4.1.0
'@oxc-project/types': 0.95.0
'@rolldown/pluginutils': 1.0.0-beta.44
optionalDependencies:
'@rolldown/binding-android-arm64': 1.0.0-beta.33
'@rolldown/binding-darwin-arm64': 1.0.0-beta.33
'@rolldown/binding-darwin-x64': 1.0.0-beta.33
'@rolldown/binding-freebsd-x64': 1.0.0-beta.33
'@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.33
'@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.33
'@rolldown/binding-linux-arm64-musl': 1.0.0-beta.33
'@rolldown/binding-linux-x64-gnu': 1.0.0-beta.33
'@rolldown/binding-linux-x64-musl': 1.0.0-beta.33
'@rolldown/binding-openharmony-arm64': 1.0.0-beta.33
'@rolldown/binding-wasm32-wasi': 1.0.0-beta.33
'@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.33
'@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.33
'@rolldown/binding-win32-x64-msvc': 1.0.0-beta.33
'@rolldown/binding-android-arm64': 1.0.0-beta.44
'@rolldown/binding-darwin-arm64': 1.0.0-beta.44
'@rolldown/binding-darwin-x64': 1.0.0-beta.44
'@rolldown/binding-freebsd-x64': 1.0.0-beta.44
'@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.44
'@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.44
'@rolldown/binding-linux-arm64-musl': 1.0.0-beta.44
'@rolldown/binding-linux-x64-gnu': 1.0.0-beta.44
'@rolldown/binding-linux-x64-musl': 1.0.0-beta.44
'@rolldown/binding-openharmony-arm64': 1.0.0-beta.44
'@rolldown/binding-wasm32-wasi': 1.0.0-beta.44
'@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.44
'@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.44
'@rolldown/binding-win32-x64-msvc': 1.0.0-beta.44
rolldown@1.0.0-beta.9:
dependencies:
@@ -2586,8 +2502,8 @@ snapshots:
diff: 8.0.2
empathic: 2.0.0
hookable: 5.5.3
rolldown: 1.0.0-beta.33
rolldown-plugin-dts: 0.15.7(rolldown@1.0.0-beta.33)(typescript@5.8.3)
rolldown: 1.0.0-beta.44
rolldown-plugin-dts: 0.15.7(rolldown@1.0.0-beta.44)(typescript@5.8.3)
semver: 7.7.2
tinyexec: 1.0.1
tinyglobby: 0.2.14

9
package.json Normal file
View File

@@ -0,0 +1,9 @@
{
"scripts": {
"prettier:check": "prettier --check '**/*.{ts,tsx,js,jsx,json,md,yaml,yml}'",
"prettier:format": "prettier --write '**/*.{ts,tsx,js,jsx,json,md,yaml,yml}'"
},
"devDependencies": {
"prettier": "^3.6.2"
}
}

24
pnpm-lock.yaml generated Normal file
View File

@@ -0,0 +1,24 @@
lockfileVersion: '9.0'
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
importers:
.:
devDependencies:
prettier:
specifier: ^3.6.2
version: 3.6.2
packages:
prettier@3.6.2:
resolution:
{
integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==
}
engines: { node: '>=14' }
hasBin: true
snapshots:
prettier@3.6.2: {}

View File

@@ -30,6 +30,8 @@ dev = [
"ruff>=0.9.2",
"types-requests>=2.31.0",
"hud-python[agent]==0.4.52",
"pre-commit>=4.3.0",
"isort>=7.0.0",
]
docs = [
"mkdocs-material>=9.2.0",
@@ -68,13 +70,20 @@ cua-mcp-server = { workspace = true }
[tool.black]
line-length = 100
target-version = ["py311"]
target-version = ["py312"]
[tool.ruff]
fix = true
line-length = 100
select = ["B", "E", "F", "I"]
target-version = "py311"
target-version = "py312"
[tool.ruff.lint]
select = ["E", "F", "B", "I"]
ignore = [
"E501", "E402", "I001", "I002", "B007", "B023", "B024", "B027", "B028",
"B904", "B905", "E711", "E712", "E722", "E731", "F401", "F403", "F405",
"F811", "F821", "F841"
]
[tool.ruff.format]
docstring-code-format = true
@@ -83,13 +92,17 @@ docstring-code-format = true
check_untyped_defs = true
disallow_untyped_defs = true
ignore_missing_imports = true
python_version = "3.11"
python_version = "3.12"
show_error_codes = true
strict = true
warn_return_any = true
warn_unused_ignores = false
[tool.isort]
profile = "black"
py_version = 312
[tool.pytest.ini_options]
asyncio_mode = "auto"
python_files = "test_*.py"
testpaths = ["libs/*/tests"]
testpaths = ["libs/*/tests"]

View File

@@ -0,0 +1,8 @@
#!/usr/bin/env node
const { execSync } = require('child_process');
try {
execSync('pnpm -C libs/typescript -r run typecheck', { stdio: 'inherit' });
} catch (err) {
process.exit(1);
}

122
uv.lock generated
View File

@@ -618,6 +618,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780, upload-time = "2025-09-08T23:23:16.761Z" },
]
[[package]]
name = "cfgv"
version = "3.4.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114, upload-time = "2023-08-12T20:38:17.776Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249, upload-time = "2023-08-12T20:38:16.269Z" },
]
[[package]]
name = "charset-normalizer"
version = "3.4.4"
@@ -1151,9 +1160,11 @@ dev = [
{ name = "cua-som" },
{ name = "hud-python", extra = ["agent"] },
{ name = "ipykernel" },
{ name = "isort" },
{ name = "jedi" },
{ name = "jupyter" },
{ name = "mypy" },
{ name = "pre-commit" },
{ name = "ruff" },
{ name = "types-requests" },
]
@@ -1187,9 +1198,11 @@ dev = [
{ name = "cua-som", editable = "libs/python/som" },
{ name = "hud-python", extras = ["agent"], specifier = "==0.4.52" },
{ name = "ipykernel", specifier = ">=6.29.5" },
{ name = "isort", specifier = ">=7.0.0" },
{ name = "jedi", specifier = ">=0.19.2" },
{ name = "jupyter", specifier = ">=1.0.0" },
{ name = "mypy", specifier = ">=1.10.0" },
{ name = "pre-commit", specifier = ">=4.3.0" },
{ name = "ruff", specifier = ">=0.9.2" },
{ name = "types-requests", specifier = ">=2.31.0" },
]
@@ -1300,6 +1313,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/50/3d/9373ad9c56321fdab5b41197068e1d8c25883b3fea29dd361f9b55116869/dill-0.4.0-py3-none-any.whl", hash = "sha256:44f54bf6412c2c8464c14e8243eb163690a9800dbe2c367330883b19c7561049", size = 119668, upload-time = "2025-04-16T00:41:47.671Z" },
]
[[package]]
name = "distlib"
version = "0.4.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/96/8e/709914eb2b5749865801041647dc7f4e6d00b549cfe88b65ca192995f07c/distlib-0.4.0.tar.gz", hash = "sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d", size = 614605, upload-time = "2025-07-17T16:52:00.465Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16", size = 469047, upload-time = "2025-07-17T16:51:58.613Z" },
]
[[package]]
name = "distro"
version = "1.9.0"
@@ -2013,6 +2035,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/31/a0/651f93d154cb72323358bf2bbae3e642bdb5d2f1bfc874d096f7cb159fa0/huggingface_hub-0.35.3-py3-none-any.whl", hash = "sha256:0e3a01829c19d86d03793e4577816fe3bdfc1602ac62c7fb220d593d351224ba", size = 564262, upload-time = "2025-09-29T14:29:55.813Z" },
]
[[package]]
name = "identify"
version = "2.6.15"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/ff/e7/685de97986c916a6d93b3876139e00eef26ad5bbbd61925d670ae8013449/identify-2.6.15.tar.gz", hash = "sha256:e4f4864b96c6557ef2a1e1c951771838f4edc9df3a72ec7118b338801b11c7bf", size = 99311, upload-time = "2025-10-02T17:43:40.631Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/0f/1c/e5fd8f973d4f375adb21565739498e2e9a1e54c858a97b9a8ccfdc81da9b/identify-2.6.15-py2.py3-none-any.whl", hash = "sha256:1181ef7608e00704db228516541eb83a88a9f94433a8c80bb9b5bd54b1d81757", size = 99183, upload-time = "2025-10-02T17:43:39.137Z" },
]
[[package]]
name = "idna"
version = "3.11"
@@ -2223,6 +2254,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042", size = 11321, upload-time = "2020-11-01T10:59:58.02Z" },
]
[[package]]
name = "isort"
version = "7.0.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/63/53/4f3c058e3bace40282876f9b553343376ee687f3c35a525dc79dbd450f88/isort-7.0.0.tar.gz", hash = "sha256:5513527951aadb3ac4292a41a16cbc50dd1642432f5e8c20057d414bdafb4187", size = 805049, upload-time = "2025-10-11T13:30:59.107Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/7f/ed/e3705d6d02b4f7aea715a353c8ce193efd0b5db13e204df895d38734c244/isort-7.0.0-py3-none-any.whl", hash = "sha256:1bcabac8bc3c36c7fb7b98a76c8abb18e0f841a3ba81decac7691008592499c1", size = 94672, upload-time = "2025-10-11T13:30:57.665Z" },
]
[[package]]
name = "jedi"
version = "0.19.2"
@@ -3178,12 +3218,12 @@ name = "mlx-lm"
version = "0.28.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "jinja2" },
{ name = "jinja2", marker = "(python_full_version < '3.13' and sys_platform != 'win32') or sys_platform == 'darwin'" },
{ name = "mlx", marker = "sys_platform == 'darwin'" },
{ name = "numpy" },
{ name = "protobuf" },
{ name = "pyyaml" },
{ name = "transformers" },
{ name = "numpy", marker = "(python_full_version < '3.13' and sys_platform != 'win32') or sys_platform == 'darwin'" },
{ name = "protobuf", marker = "(python_full_version < '3.13' and sys_platform != 'win32') or sys_platform == 'darwin'" },
{ name = "pyyaml", marker = "(python_full_version < '3.13' and sys_platform != 'win32') or sys_platform == 'darwin'" },
{ name = "transformers", marker = "(python_full_version < '3.13' and sys_platform != 'win32') or sys_platform == 'darwin'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/51/f6/15e002d52c28d8c544ec3aaf9053677468333e6ef0e76ea68579fd77b76d/mlx_lm-0.28.3.tar.gz", hash = "sha256:75df2b925d343ebaf50b63008dede4fe98cd3b02b1b24b7da71ebeb198d674f0", size = 214455, upload-time = "2025-10-17T21:44:33.921Z" }
wheels = [
@@ -3205,19 +3245,19 @@ name = "mlx-vlm"
version = "0.3.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "datasets" },
{ name = "fastapi" },
{ name = "mlx" },
{ name = "mlx-lm" },
{ name = "numpy" },
{ name = "opencv-python" },
{ name = "pillow" },
{ name = "requests" },
{ name = "scipy" },
{ name = "soundfile" },
{ name = "tqdm" },
{ name = "transformers" },
{ name = "uvicorn" },
{ name = "datasets", marker = "(python_full_version < '3.13' and sys_platform != 'win32') or sys_platform == 'darwin'" },
{ name = "fastapi", marker = "(python_full_version < '3.13' and sys_platform != 'win32') or sys_platform == 'darwin'" },
{ name = "mlx", marker = "(python_full_version < '3.13' and sys_platform != 'win32') or sys_platform == 'darwin'" },
{ name = "mlx-lm", marker = "(python_full_version < '3.13' and sys_platform != 'win32') or sys_platform == 'darwin'" },
{ name = "numpy", marker = "(python_full_version < '3.13' and sys_platform != 'win32') or sys_platform == 'darwin'" },
{ name = "opencv-python", marker = "(python_full_version < '3.13' and sys_platform != 'win32') or sys_platform == 'darwin'" },
{ name = "pillow", marker = "(python_full_version < '3.13' and sys_platform != 'win32') or sys_platform == 'darwin'" },
{ name = "requests", marker = "(python_full_version < '3.13' and sys_platform != 'win32') or sys_platform == 'darwin'" },
{ name = "scipy", marker = "(python_full_version < '3.13' and sys_platform != 'win32') or sys_platform == 'darwin'" },
{ name = "soundfile", marker = "(python_full_version < '3.13' and sys_platform != 'win32') or sys_platform == 'darwin'" },
{ name = "tqdm", marker = "(python_full_version < '3.13' and sys_platform != 'win32') or sys_platform == 'darwin'" },
{ name = "transformers", marker = "(python_full_version < '3.13' and sys_platform != 'win32') or sys_platform == 'darwin'" },
{ name = "uvicorn", marker = "(python_full_version < '3.13' and sys_platform != 'win32') or sys_platform == 'darwin'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/ff/9f/de419334820da334203de28eaf861b57ae0d06b0882770e5e5d0671dc5dd/mlx_vlm-0.3.3.tar.gz", hash = "sha256:5a08c802d1bf32cc47bd6aebe348d3554ce21bfce417a585bba83f9d213a6e66", size = 231935, upload-time = "2025-08-20T14:52:51.323Z" }
wheels = [
@@ -3623,7 +3663,7 @@ name = "nvidia-cudnn-cu12"
version = "9.10.2.21"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "nvidia-cublas-cu12" },
{ name = "nvidia-cublas-cu12", marker = "(python_full_version < '3.13' and sys_platform == 'darwin') or (python_full_version < '3.13' and sys_platform == 'linux') or (platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/ba/51/e123d997aa098c61d029f76663dedbfb9bc8dcf8c60cbd6adbe42f76d049/nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:949452be657fa16687d0930933f032835951ef0892b37d2d53824d1a84dc97a8", size = 706758467, upload-time = "2025-06-06T21:54:08.597Z" },
@@ -3634,7 +3674,7 @@ name = "nvidia-cufft-cu12"
version = "11.3.3.83"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "nvidia-nvjitlink-cu12" },
{ name = "nvidia-nvjitlink-cu12", marker = "(python_full_version < '3.13' and sys_platform == 'darwin') or (python_full_version < '3.13' and sys_platform == 'linux') or (platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/1f/13/ee4e00f30e676b66ae65b4f08cb5bcbb8392c03f54f2d5413ea99a5d1c80/nvidia_cufft_cu12-11.3.3.83-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d2dd21ec0b88cf61b62e6b43564355e5222e4a3fb394cac0db101f2dd0d4f74", size = 193118695, upload-time = "2025-03-07T01:45:27.821Z" },
@@ -3661,9 +3701,9 @@ name = "nvidia-cusolver-cu12"
version = "11.7.3.90"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "nvidia-cublas-cu12" },
{ name = "nvidia-cusparse-cu12" },
{ name = "nvidia-nvjitlink-cu12" },
{ name = "nvidia-cublas-cu12", marker = "(python_full_version < '3.13' and sys_platform == 'darwin') or (python_full_version < '3.13' and sys_platform == 'linux') or (platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')" },
{ name = "nvidia-cusparse-cu12", marker = "(python_full_version < '3.13' and sys_platform == 'darwin') or (python_full_version < '3.13' and sys_platform == 'linux') or (platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')" },
{ name = "nvidia-nvjitlink-cu12", marker = "(python_full_version < '3.13' and sys_platform == 'darwin') or (python_full_version < '3.13' and sys_platform == 'linux') or (platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/85/48/9a13d2975803e8cf2777d5ed57b87a0b6ca2cc795f9a4f59796a910bfb80/nvidia_cusolver_cu12-11.7.3.90-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:4376c11ad263152bd50ea295c05370360776f8c3427b30991df774f9fb26c450", size = 267506905, upload-time = "2025-03-07T01:47:16.273Z" },
@@ -3674,7 +3714,7 @@ name = "nvidia-cusparse-cu12"
version = "12.5.8.93"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "nvidia-nvjitlink-cu12" },
{ name = "nvidia-nvjitlink-cu12", marker = "(python_full_version < '3.13' and sys_platform == 'darwin') or (python_full_version < '3.13' and sys_platform == 'linux') or (platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/c2/f5/e1854cb2f2bcd4280c44736c93550cc300ff4b8c95ebe370d0aa7d2b473d/nvidia_cusparse_cu12-12.5.8.93-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1ec05d76bbbd8b61b06a80e1eaf8cf4959c3d4ce8e711b65ebd0443bb0ebb13b", size = 288216466, upload-time = "2025-03-07T01:48:13.779Z" },
@@ -4276,6 +4316,22 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/1e/ce/5e5ede2f0b24db113544f9f7ce08d395a4107cbc66d77b8d05d9eaeaeada/posthog-6.7.8-py3-none-any.whl", hash = "sha256:842ccb518f925425f714bae29e4ac36a059a8948c45f6ed155543ca7386d554b", size = 137299, upload-time = "2025-10-16T14:46:51.547Z" },
]
[[package]]
name = "pre-commit"
version = "4.3.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "cfgv" },
{ name = "identify" },
{ name = "nodeenv" },
{ name = "pyyaml" },
{ name = "virtualenv" },
]
sdist = { url = "https://files.pythonhosted.org/packages/ff/29/7cf5bbc236333876e4b41f56e06857a87937ce4bf91e117a6991a2dbb02a/pre_commit-4.3.0.tar.gz", hash = "sha256:499fe450cc9d42e9d58e606262795ecb64dd05438943c62b66f6a8673da30b16", size = 193792, upload-time = "2025-08-09T18:56:14.651Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/5b/a5/987a405322d78a73b66e39e4a90e4ef156fd7141bf71df987e50717c321b/pre_commit-4.3.0-py2.py3-none-any.whl", hash = "sha256:2b0747ad7e6e967169136edffee14c16e148a778a54e4f967921aa1ebf2308d8", size = 220965, upload-time = "2025-08-09T18:56:13.192Z" },
]
[[package]]
name = "prometheus-client"
version = "0.23.1"
@@ -5591,8 +5647,8 @@ name = "soundfile"
version = "0.13.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "cffi" },
{ name = "numpy" },
{ name = "cffi", marker = "(python_full_version < '3.13' and sys_platform != 'win32') or sys_platform == 'darwin'" },
{ name = "numpy", marker = "(python_full_version < '3.13' and sys_platform != 'win32') or sys_platform == 'darwin'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/e1/41/9b873a8c055582859b239be17902a85339bec6a30ad162f98c9b0288a2cc/soundfile-0.13.1.tar.gz", hash = "sha256:b2c68dab1e30297317080a5b43df57e302584c49e2942defdde0acccc53f0e5b", size = 46156, upload-time = "2025-01-25T09:17:04.831Z" }
wheels = [
@@ -6220,6 +6276,20 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/f8/ba/d69adbe699b768f6b29a5eec7b47dd610bd17a69de51b251126a801369ea/uvloop-0.22.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1f38ec5e3f18c8a10ded09742f7fb8de0108796eb673f30ce7762ce1b8550cad", size = 4239051, upload-time = "2025-10-16T22:16:43.224Z" },
]
[[package]]
name = "virtualenv"
version = "20.35.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "distlib" },
{ name = "filelock" },
{ name = "platformdirs" },
]
sdist = { url = "https://files.pythonhosted.org/packages/a4/d5/b0ccd381d55c8f45d46f77df6ae59fbc23d19e901e2d523395598e5f4c93/virtualenv-20.35.3.tar.gz", hash = "sha256:4f1a845d131133bdff10590489610c98c168ff99dc75d6c96853801f7f67af44", size = 6002907, upload-time = "2025-10-10T21:23:33.178Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/27/73/d9a94da0e9d470a543c1b9d3ccbceb0f59455983088e727b8a1824ed90fb/virtualenv-20.35.3-py3-none-any.whl", hash = "sha256:63d106565078d8c8d0b206d48080f938a8b25361e19432d2c9db40d2899c810a", size = 5981061, upload-time = "2025-10-10T21:23:30.433Z" },
]
[[package]]
name = "watchdog"
version = "6.0.0"