diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..86e25293 --- /dev/null +++ b/.editorconfig @@ -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 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 00000000..7f2eabcb --- /dev/null +++ b/.github/workflows/lint.yml @@ -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}" diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..bbc42d48 --- /dev/null +++ b/.pre-commit-config.yaml @@ -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)$ diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..7a28e2a7 --- /dev/null +++ b/.prettierignore @@ -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 \ No newline at end of file diff --git a/.prettierrc.yaml b/.prettierrc.yaml new file mode 100644 index 00000000..1815ee00 --- /dev/null +++ b/.prettierrc.yaml @@ -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 diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 00000000..a28f3b28 --- /dev/null +++ b/.vscode/extensions.json @@ -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" + ] +} \ No newline at end of file diff --git a/.vscode/libs-ts.code-workspace b/.vscode/libs-ts.code-workspace index 732316f2..ccff6b06 100644 --- a/.vscode/libs-ts.code-workspace +++ b/.vscode/libs-ts.code-workspace @@ -7,7 +7,7 @@ ], "extensions": { "recommendations": [ - "biomejs.biome", + "esbenp.prettier-vscode" ] } } \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 8281130c..ab4deb49 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -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}" + ] } \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 75980e2a..69819ef6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -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. \ No newline at end of file +Feel free to join our [Discord community](https://discord.com/invite/mVnXXpdE85) to discuss ideas or get help with your contributions. diff --git a/Development.md b/Development.md index 2b061aea..cfe21f6b 100644 --- a/Development.md +++ b/Development.md @@ -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: diff --git a/docs/.prettierrc b/docs/.prettierrc deleted file mode 100644 index 03af2a8b..00000000 --- a/docs/.prettierrc +++ /dev/null @@ -1,8 +0,0 @@ -{ - "useTabs": false, - "semi": true, - "singleQuote": true, - "trailingComma": "es5", - "bracketSpacing": true, - "jsxBracketSameLine": true -} \ No newline at end of file diff --git a/examples/computer-example-ts/.prettierrc b/examples/computer-example-ts/.prettierrc deleted file mode 100644 index 23eaef29..00000000 --- a/examples/computer-example-ts/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "useTabs": false, - "semi": true, - "singleQuote": true, - "trailingComma": "es5", - "bracketSpacing": true -} \ No newline at end of file diff --git a/examples/computer-example-ts/package.json b/examples/computer-example-ts/package.json index 65210e18..afa90c2f 100644 --- a/examples/computer-example-ts/package.json +++ b/examples/computer-example-ts/package.json @@ -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" } -} \ No newline at end of file +} diff --git a/libs/python/agent/pyproject.toml b/libs/python/agent/pyproject.toml index 94bde419..0d690240 100644 --- a/libs/python/agent/pyproject.toml +++ b/libs/python/agent/pyproject.toml @@ -108,4 +108,4 @@ constraint-dependencies = ["fastrtc>0.43.0", "mlx-audio>0.2.3"] distribution = true [tool.pdm.build] -includes = ["agent/"] +includes = ["agent/"] \ No newline at end of file diff --git a/libs/python/computer-server/pyproject.toml b/libs/python/computer-server/pyproject.toml index 6468a48d..01b40af0 100644 --- a/libs/python/computer-server/pyproject.toml +++ b/libs/python/computer-server/pyproject.toml @@ -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" \ No newline at end of file diff --git a/libs/python/computer/pyproject.toml b/libs/python/computer/pyproject.toml index 22ebccd5..b659c0a1 100644 --- a/libs/python/computer/pyproject.toml +++ b/libs/python/computer/pyproject.toml @@ -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"] diff --git a/libs/python/core/pyproject.toml b/libs/python/core/pyproject.toml index c4bcd459..d505b225 100644 --- a/libs/python/core/pyproject.toml +++ b/libs/python/core/pyproject.toml @@ -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", -] +] \ No newline at end of file diff --git a/libs/python/mcp-server/pyproject.toml b/libs/python/mcp-server/pyproject.toml index b844fe36..6e05da7f 100644 --- a/libs/python/mcp-server/pyproject.toml +++ b/libs/python/mcp-server/pyproject.toml @@ -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 +] \ No newline at end of file diff --git a/libs/python/pylume/pyproject.toml b/libs/python/pylume/pyproject.toml index f21f2bb2..b86d5575 100644 --- a/libs/python/pylume/pyproject.toml +++ b/libs/python/pylume/pyproject.toml @@ -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/"] \ No newline at end of file diff --git a/libs/python/som/pyproject.toml b/libs/python/som/pyproject.toml index f871eb18..95941538 100644 --- a/libs/python/som/pyproject.toml +++ b/libs/python/som/pyproject.toml @@ -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" \ No newline at end of file diff --git a/libs/typescript/agent/package.json b/libs/typescript/agent/package.json index f77206df..0ef50e37 100644 --- a/libs/typescript/agent/package.json +++ b/libs/typescript/agent/package.json @@ -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", diff --git a/libs/typescript/biome.json b/libs/typescript/biome.json deleted file mode 100644 index a0394eff..00000000 --- a/libs/typescript/biome.json +++ /dev/null @@ -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 - } - } -} diff --git a/libs/typescript/computer/package.json b/libs/typescript/computer/package.json index 1f777ac2..7df2a167 100644 --- a/libs/typescript/computer/package.json +++ b/libs/typescript/computer/package.json @@ -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" } -} \ No newline at end of file +} diff --git a/libs/typescript/core/package.json b/libs/typescript/core/package.json index 5c76d5d0..c3b1878a 100644 --- a/libs/typescript/core/package.json +++ b/libs/typescript/core/package.json @@ -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" } -} \ No newline at end of file +} diff --git a/libs/typescript/package.json b/libs/typescript/package.json index 4e9df492..abe5ba0f 100644 --- a/libs/typescript/package.json +++ b/libs/typescript/package.json @@ -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" ] } -} \ No newline at end of file +} diff --git a/libs/typescript/pnpm-lock.yaml b/libs/typescript/pnpm-lock.yaml index 24368ff4..ee1d6fb9 100644 --- a/libs/typescript/pnpm-lock.yaml +++ b/libs/typescript/pnpm-lock.yaml @@ -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 diff --git a/package.json b/package.json new file mode 100644 index 00000000..2d0118af --- /dev/null +++ b/package.json @@ -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" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 00000000..595fc04b --- /dev/null +++ b/pnpm-lock.yaml @@ -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: {} diff --git a/pyproject.toml b/pyproject.toml index 6dcfc8ac..fb7b1d09 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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"] \ No newline at end of file diff --git a/scripts/typescript-typecheck.js b/scripts/typescript-typecheck.js new file mode 100644 index 00000000..29e12345 --- /dev/null +++ b/scripts/typescript-typecheck.js @@ -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); +} diff --git a/uv.lock b/uv.lock index 602be39c..d33f2821 100644 --- a/uv.lock +++ b/uv.lock @@ -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"