mirror of
https://github.com/Quad4-Software/MeshChatX.git
synced 2026-08-18 09:49:09 -04:00
feat(ci & deps): update rns and lxst.
add knip and type checking and improve ci
This commit is contained in:
parent
025b948f0b
commit
2b874b0982
18 changed files with 6883 additions and 4390 deletions
1638
.basedpyright/baseline.json
Normal file
1638
.basedpyright/baseline.json
Normal file
File diff suppressed because it is too large
Load diff
76
Makefile
76
Makefile
|
|
@ -1,72 +1,46 @@
|
|||
# Compatibility shim — Taskfile.yml owns install, lint, test, and build targets.
|
||||
TASK ?= task
|
||||
|
||||
.DEFAULT_GOAL := help
|
||||
|
||||
.PHONY: install install-offline run dev dev-fe build lint test test-be-perf clean help dist-linux dist-linux-x64
|
||||
|
||||
# Auto-detect offline bundle and configure caches
|
||||
OFFLINE_BUNDLE := $(shell find vendor/offline -maxdepth 1 -type d -name 'meshchatx-offline-bundle-*' 2>/dev/null | head -n 1)
|
||||
|
||||
ifeq ($(MESHCHATX_OFFLINE_BUILD),1)
|
||||
ifneq ($(OFFLINE_BUNDLE),)
|
||||
export UV_CACHE_DIR := $(abspath $(OFFLINE_BUNDLE)/uv-cache)
|
||||
export ELECTRON_BUILDER_CACHE := $(abspath $(OFFLINE_BUNDLE)/electron-builder-cache)
|
||||
endif
|
||||
endif
|
||||
|
||||
install:
|
||||
ifeq ($(MESHCHATX_OFFLINE_BUILD),1)
|
||||
@if [ ! -d "node_modules" ]; then \
|
||||
echo "Error: node_modules not found for offline build." >&2; \
|
||||
echo "Run: bash scripts/install-offline.sh" >&2; \
|
||||
exit 1; \
|
||||
fi
|
||||
@echo "Offline build: skipping pnpm install (node_modules present)"
|
||||
else
|
||||
pnpm install
|
||||
endif
|
||||
uv sync --group dev $(if $(filter 1,$(MESHCHATX_OFFLINE_BUILD)),--offline)
|
||||
uv run python scripts/patch_lxst_pyogg_ogg_ctypes.py
|
||||
@$(TASK) install
|
||||
|
||||
install-offline:
|
||||
bash scripts/install-offline.sh
|
||||
@$(TASK) install:offline
|
||||
|
||||
# Python backend only. For HMR, use: make dev OR make run in one terminal and pnpm run dev in another.
|
||||
run:
|
||||
uv run python -m meshchatx.meshchat
|
||||
@$(TASK) run
|
||||
|
||||
# Vite dev server (live reload) + backend. Open http://localhost:5173 — proxies /api and /ws to MESHCHAT_PORT (default 8000).
|
||||
dev:
|
||||
bash scripts/dev-local.sh
|
||||
@$(TASK) dev
|
||||
|
||||
# Vite only; expects backend already running (e.g. make run on port 8000).
|
||||
dev-fe:
|
||||
pnpm run dev -- --host 127.0.0.1 --port 5173
|
||||
@$(TASK) dev-fe
|
||||
|
||||
build:
|
||||
pnpm run build
|
||||
|
||||
# Linux AppImage + deb (see package.json dist:linux).
|
||||
dist-linux:
|
||||
pnpm run dist:linux
|
||||
|
||||
dist-linux-x64:
|
||||
pnpm run dist:linux-x64
|
||||
|
||||
help:
|
||||
@echo "make dev - Vite HMR + backend (http://localhost:5173)"
|
||||
@echo "make run - backend only"
|
||||
@echo "make dev-fe - Vite only (pair with make run)"
|
||||
@echo "make dist-linux - AppImage + deb (electron-builder)"
|
||||
@echo "Env: MESHCHAT_PORT, E2E_BACKEND_PORT (vite proxy; script sets both), VITE_DEV_HOST, VITE_DEV_PORT"
|
||||
@$(TASK) build
|
||||
|
||||
lint:
|
||||
pnpm run lint
|
||||
uv run ruff check .
|
||||
uv run ruff format --check .
|
||||
@$(TASK) lint:all
|
||||
|
||||
test:
|
||||
pnpm run test
|
||||
uv run pytest tests/backend -n auto --cov=meshchatx/src/backend
|
||||
@$(TASK) test:all
|
||||
|
||||
test-be-perf:
|
||||
uv run pytest tests/backend/test_performance_hotpaths.py tests/backend/test_performance_bottlenecks.py
|
||||
@$(TASK) test:be:perf
|
||||
|
||||
clean:
|
||||
rm -rf node_modules build dist python-dist meshchatx/public build-dir out
|
||||
@$(TASK) clean
|
||||
|
||||
dist-linux:
|
||||
@$(TASK) dist:linux
|
||||
|
||||
dist-linux-x64:
|
||||
@$(TASK) dist:linux-x64
|
||||
|
||||
help:
|
||||
@echo "Makefile targets delegate to Task (see: task --list)."
|
||||
@$(TASK) --list
|
||||
|
|
|
|||
18
README.md
18
README.md
|
|
@ -415,16 +415,16 @@ task test:all
|
|||
task build:all
|
||||
```
|
||||
|
||||
`Makefile` shortcuts are also available:
|
||||
`Makefile` targets are thin shims that delegate to `task` (same commands as above):
|
||||
|
||||
| Command | Description |
|
||||
| -------------- | --------------------------------------- |
|
||||
| `make install` | Install pnpm and UV dependencies |
|
||||
| `make run` | Run MeshChatX via UV |
|
||||
| `make build` | Build frontend |
|
||||
| `make lint` | Run eslint and ruff |
|
||||
| `make test` | Run frontend and backend tests |
|
||||
| `make clean` | Remove build artifacts and node_modules |
|
||||
| Command | Delegates to | Description |
|
||||
| -------------- | --------------- | --------------------------------------------- |
|
||||
| `make install` | `task install` | Install pnpm and UV dependencies |
|
||||
| `make run` | `task run` | Run MeshChatX via UV |
|
||||
| `make build` | `task build` | Build frontend and backend artifacts |
|
||||
| `make lint` | `task lint:all` | ESLint, vue-tsc, knip, Ruff, and basedpyright |
|
||||
| `make test` | `task test:all` | Run frontend and backend tests |
|
||||
| `make clean` | `task clean` | Remove build artifacts and node_modules |
|
||||
|
||||
## Versioning
|
||||
|
||||
|
|
|
|||
35
Taskfile.yml
35
Taskfile.yml
|
|
@ -108,10 +108,14 @@ tasks:
|
|||
- uv run python -m meshchatx.meshchat
|
||||
|
||||
dev:
|
||||
desc: Run in development mode (builds frontend first)
|
||||
deps: [build:fe]
|
||||
desc: Vite HMR + backend (http://localhost:5173)
|
||||
cmds:
|
||||
- task: run
|
||||
- bash scripts/dev-local.sh
|
||||
|
||||
dev-fe:
|
||||
desc: Vite dev server only (pair with task run)
|
||||
cmds:
|
||||
- "{{.NPM}} run dev -- --host 127.0.0.1 --port 5173"
|
||||
|
||||
start:
|
||||
desc: Run the application via Electron Forge
|
||||
|
|
@ -131,7 +135,7 @@ tasks:
|
|||
# --- Code Quality ---
|
||||
|
||||
lint:
|
||||
desc: Run all linters
|
||||
desc: Run all linters (ESLint, vue-tsc, knip, Ruff, basedpyright)
|
||||
deps: [lint:fe, lint:be]
|
||||
|
||||
lint:all:
|
||||
|
|
@ -139,15 +143,18 @@ tasks:
|
|||
deps: [lint:fe, lint:be]
|
||||
|
||||
lint:be:
|
||||
desc: Lint Python code (ruff)
|
||||
desc: Lint Python code (ruff + basedpyright)
|
||||
cmds:
|
||||
- uv run ruff check .
|
||||
- uv run ruff format --check .
|
||||
- uv run basedpyright -p pyrightconfig.json --level error
|
||||
|
||||
lint:fe:
|
||||
desc: Lint frontend code
|
||||
desc: Lint frontend code (ESLint, vue-tsc, knip)
|
||||
cmds:
|
||||
- "{{.NPM}} run lint"
|
||||
- "{{.NPM}} run typecheck"
|
||||
- "{{.NPM}} exec knip"
|
||||
|
||||
fmt:all:
|
||||
desc: Format all code
|
||||
|
|
@ -327,6 +334,11 @@ tasks:
|
|||
cmds:
|
||||
- "{{.NPM}} run build"
|
||||
|
||||
build:
|
||||
desc: Alias for build:all
|
||||
cmds:
|
||||
- task: build:all
|
||||
|
||||
build:fe:
|
||||
desc: Build frontend assets
|
||||
deps: [deps:fe]
|
||||
|
|
@ -390,6 +402,17 @@ tasks:
|
|||
cmds:
|
||||
- "{{.NPM}} run dist:linux"
|
||||
|
||||
dist:linux:
|
||||
desc: Alias for dist:fe:linux (AppImage + deb)
|
||||
cmds:
|
||||
- task: dist:fe:linux
|
||||
|
||||
dist:linux-x64:
|
||||
desc: Build Linux x64 AppImage + deb
|
||||
deps: [build:fe]
|
||||
cmds:
|
||||
- "{{.NPM}} run dist:linux-x64"
|
||||
|
||||
dist:fe:rpm:
|
||||
desc: Build RPM package
|
||||
deps: [build:fe]
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ def repositoryBundledWheelsDir = new File(meshchatSourceDir, "public/repository-
|
|||
def chaquopyBuildPython = System.getenv("CHAQUOPY_BUILD_PYTHON")
|
||||
def pythonTempDir = new File(buildDir, "python-tmp")
|
||||
def vendorWheelDir = new File(rootProject.projectDir, "vendor")
|
||||
def lxstPatchedWheel = new File(rootProject.projectDir, "vendor/lxst-0.4.7-py3-none-any.whl")
|
||||
def lxstPatchedWheel = new File(rootProject.projectDir, "vendor/lxst-0.4.8-py3-none-any.whl")
|
||||
def bleakPatchedWheel = new File(rootProject.projectDir, "vendor/bleak-3.0.2-py3-none-any.whl")
|
||||
def allAndroidAbis = ["arm64-v8a", "x86_64", "armeabi-v7a"]
|
||||
def selectedAndroidAbis = (
|
||||
|
|
@ -227,7 +227,7 @@ chaquopy {
|
|||
options "--find-links", vendorWheelDir.absolutePath
|
||||
install "packaging>=23"
|
||||
install "aiohttp==3.14.1"
|
||||
install "rns>=1.3.5"
|
||||
install "rns>=1.3.7"
|
||||
install "lxmf>=1.0.1"
|
||||
install "numpy==1.26.2"
|
||||
install "chaquopy-libcodec2==1.2.0"
|
||||
|
|
|
|||
35
knip.config.js
Normal file
35
knip.config.js
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
/** @type {import("knip").KnipConfig} */
|
||||
export default {
|
||||
entry: [
|
||||
"meshchatx/src/frontend/index.html",
|
||||
"electron/main.js",
|
||||
"electron/main-legacy.js",
|
||||
"electron/preload.js",
|
||||
"meshchatx/src/frontend/public/service-worker.js",
|
||||
"scripts/**/*.{js,mjs,cjs}",
|
||||
"tests/**/*.{js,cjs,mjs}",
|
||||
],
|
||||
project: [
|
||||
"meshchatx/src/frontend/**/*.{js,vue}",
|
||||
"electron/**/*.js",
|
||||
"scripts/**/*.{js,mjs,cjs}",
|
||||
"tests/**/*.{js,cjs,mjs}",
|
||||
],
|
||||
ignore: ["meshchatx/src/frontend/public/**", "electron/assets/**", "**/*.worklet.js"],
|
||||
ignoreDependencies: ["@electron/fuses", "@tailwindcss/forms", "electron-builder-squirrel-windows"],
|
||||
ignoreBinaries: ["python3"],
|
||||
ignoreIssues: {
|
||||
"meshchatx/src/frontend/js/reticulumPathfinding.js": ["unlisted"],
|
||||
},
|
||||
rules: {
|
||||
binaries: "off",
|
||||
dependencies: "error",
|
||||
devDependencies: "off",
|
||||
duplicates: "error",
|
||||
exports: "off",
|
||||
files: "off",
|
||||
types: "off",
|
||||
unlisted: "error",
|
||||
unresolved: "off",
|
||||
},
|
||||
};
|
||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -81,5 +81,3 @@ export function renderTerminalOutput(raw) {
|
|||
})
|
||||
.join("\n");
|
||||
}
|
||||
|
||||
export default renderTerminalOutput;
|
||||
|
|
|
|||
|
|
@ -23,6 +23,8 @@
|
|||
"bundle:offline": "bash scripts/create-offline-bundle.sh",
|
||||
"lint": "eslint .",
|
||||
"lint:fix": "eslint . --fix",
|
||||
"typecheck": "vue-tsc --noEmit -p tsconfig.json",
|
||||
"knip": "knip",
|
||||
"format": "prettier --write .",
|
||||
"test": "vitest run --exclude tests/frontend/LoadTimePerformance.test.js && vitest run --config vitest.electron.config.js",
|
||||
"test:coverage": "vitest run --coverage --exclude tests/frontend/LoadTimePerformance.test.js && vitest run --config vitest.electron.config.js --coverage",
|
||||
|
|
@ -83,14 +85,17 @@
|
|||
"fake-indexeddb": "^6.2.5",
|
||||
"globals": "^17.6.0",
|
||||
"jsdom": "^29.1.1",
|
||||
"knip": "^6.24.0",
|
||||
"micron-parser": "github:RFnexus/micron-parser-js",
|
||||
"prettier": "^3.9.3",
|
||||
"tailwindcss": "^4.3.0",
|
||||
"terser": "^5.48.0",
|
||||
"typescript": "^6.0.3",
|
||||
"vite": "^8.0.16",
|
||||
"vite-plugin-vuetify": "^2.1.3",
|
||||
"vitest": "^4.1.5",
|
||||
"vue-eslint-parser": "^10.4.1"
|
||||
"vue-eslint-parser": "^10.4.1",
|
||||
"vue-tsc": "^3.3.6"
|
||||
},
|
||||
"build": {
|
||||
"appId": "com.quad4.meshchatx",
|
||||
|
|
|
|||
811
pnpm-lock.yaml
generated
811
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load diff
|
|
@ -24,7 +24,7 @@ dependencies = [
|
|||
"lxmf>=1.0.1",
|
||||
"psutil>=7.2.2",
|
||||
"pyserial>=3.5",
|
||||
"rns>=1.3.5",
|
||||
"rns>=1.3.7",
|
||||
"websockets>=16.0",
|
||||
"bcrypt>=5.0.0,<6.0.0",
|
||||
"aiohttp-session>=2.12.1,<3.0.0",
|
||||
|
|
@ -32,7 +32,7 @@ dependencies = [
|
|||
"pycparser>=3.0",
|
||||
"audioop-lts>=0.2.2; python_version >= '3.13'",
|
||||
"ply>=3.11,<4.0",
|
||||
"lxst>=0.4.7",
|
||||
"lxst>=0.4.8",
|
||||
"miniaudio (>=1.70,<2.0)",
|
||||
"cbor2>=6.1.1",
|
||||
]
|
||||
|
|
@ -74,6 +74,7 @@ dev = [
|
|||
"pytest-xdist>=3.8.0",
|
||||
"ruff>=0.14.0",
|
||||
"mutmut>=3.5.0; python_version < '4.0'",
|
||||
"basedpyright>=1.39.9",
|
||||
]
|
||||
|
||||
[tool.ruff]
|
||||
|
|
|
|||
15
pyrightconfig.json
Normal file
15
pyrightconfig.json
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"include": ["meshchatx/src/backend", "meshchatx/src/env_utils.py"],
|
||||
"exclude": ["**/vendor/**", "**/build/**", "**/node_modules/**", "**/__pycache__/**"],
|
||||
"extraPaths": ["vendor/lxmfy"],
|
||||
"pythonVersion": "3.11",
|
||||
"typeCheckingMode": "basic",
|
||||
"baselineFile": ".basedpyright/baseline.json",
|
||||
"reportMissingTypeArgument": "none",
|
||||
"reportUnknownArgumentType": "none",
|
||||
"reportUnknownMemberType": "none",
|
||||
"reportUnknownVariableType": "none",
|
||||
"reportUnknownParameterType": "none",
|
||||
"reportMissingTypeStubs": "none",
|
||||
"reportPrivateImportUsage": "none"
|
||||
}
|
||||
|
|
@ -510,8 +510,8 @@ lxmf==1.0.1 \
|
|||
# via
|
||||
# lxst
|
||||
# reticulum-meshchatx
|
||||
lxst==0.4.7 \
|
||||
--hash=sha256:a582378b56a2762f530eb28308523cfa5d6b6b83227b03d3c0f8c4f9ba084ea6
|
||||
lxst==0.4.8 \
|
||||
--hash=sha256:4cdf9c0b5e7fed85805c9716491b0eb9b753c43d15e6c6d7c5c53ebe2a7489b7
|
||||
# via reticulum-meshchatx
|
||||
miniaudio==1.71 \
|
||||
--hash=sha256:06222d80b057ca4beccb6f97a134c2c2bf646ef7890e1759cfc09db7eecec44d \
|
||||
|
|
@ -897,9 +897,9 @@ pyserial==3.5 \
|
|||
# via
|
||||
# reticulum-meshchatx
|
||||
# rns
|
||||
rns==1.3.5 \
|
||||
--hash=sha256:1772888c65d03667222b4143d64897074371ea5246f40e1645824124532c340f \
|
||||
--hash=sha256:63145ea1c0fa526a7914c0a72c4a82279b59719875918b0558d049d29198cee3
|
||||
rns==1.3.7 \
|
||||
--hash=sha256:6757db65c0af212b386b7e44b95eda4e36d6b11cae834258bc6d2d11dac6e125 \
|
||||
--hash=sha256:95d3bab98513e7f4318ea2dc0b743a21ce9e3c94caee2eb587203ca4b61fd9ed
|
||||
# via
|
||||
# lxmf
|
||||
# lxst
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ Options:
|
|||
--api-level N Android API level for wheel tag (default: 24)
|
||||
--pycodec2-version V pycodec2 version to build (default: 4.1.1)
|
||||
--numpy-version V NumPy version used during pycodec2 build (default: 1.26.2)
|
||||
--lxst-version V LXST wheel version for metadata patch (default: 0.4.7)
|
||||
--lxst-version V LXST wheel version for metadata patch (default: 0.4.8)
|
||||
--bleak-version V bleak pure-python wheel version to vendor (default: 3.0.2)
|
||||
--no-lxst-patch Skip LXST metadata patch
|
||||
--only-recipes LIST Comma-separated recipe directory names under
|
||||
|
|
@ -54,7 +54,7 @@ API_LEVEL="24"
|
|||
PYCODEC2_VERSION="4.1.1"
|
||||
LIBCODEC2_VERSION="1.2.0"
|
||||
NUMPY_VERSION="1.26.2"
|
||||
LXST_VERSION="0.4.7"
|
||||
LXST_VERSION="0.4.8"
|
||||
BLEAK_VERSION="3.0.2"
|
||||
PATCH_LXST="1"
|
||||
ONLY_RECIPES=""
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import os
|
||||
import shutil
|
||||
import subprocess
|
||||
|
|
@ -66,6 +65,9 @@ def test_docker_image_serves_status():
|
|||
def test_docker_status_json_shape():
|
||||
"""Lightweight follow-up: status body matches minimal contract when smoke script left output."""
|
||||
sample = {"status": "ok", "listen_port": 8000, "https_enabled": True}
|
||||
from tests.backend.api_json_contract_schemas import API_V1_STATUS_SCHEMA, assert_matches_schema
|
||||
from tests.backend.api_json_contract_schemas import (
|
||||
API_V1_STATUS_SCHEMA,
|
||||
assert_matches_schema,
|
||||
)
|
||||
|
||||
assert_matches_schema(sample, API_V1_STATUS_SCHEMA)
|
||||
|
|
|
|||
39
tsconfig.json
Normal file
39
tsconfig.json
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2022",
|
||||
"module": "ESNext",
|
||||
"moduleResolution": "bundler",
|
||||
"lib": ["ES2022", "DOM", "DOM.Iterable"],
|
||||
"jsx": "preserve",
|
||||
"allowJs": true,
|
||||
"checkJs": false,
|
||||
"noEmit": true,
|
||||
"strict": false,
|
||||
"skipLibCheck": true,
|
||||
"isolatedModules": true,
|
||||
"resolveJsonModule": true,
|
||||
"paths": {
|
||||
"micron-parser": ["./node_modules/micron-parser/js/micron-parser.js"]
|
||||
}
|
||||
},
|
||||
"include": [
|
||||
"meshchatx/src/frontend/**/*.vue",
|
||||
"meshchatx/src/frontend/**/*.js",
|
||||
"electron/**/*.js",
|
||||
"vite.config.js"
|
||||
],
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
"meshchatx/public",
|
||||
"meshchatx/src/frontend/public",
|
||||
"build",
|
||||
"dist",
|
||||
"vendor",
|
||||
"android",
|
||||
"tests"
|
||||
],
|
||||
"vueCompilerOptions": {
|
||||
"target": 3,
|
||||
"strictTemplates": true
|
||||
}
|
||||
}
|
||||
44
uv.lock
generated
44
uv.lock
generated
|
|
@ -242,6 +242,18 @@ wheels = [
|
|||
{ url = "https://files.pythonhosted.org/packages/f6/22/91616fe707a5c5510de2cac9b046a30defe7007ba8a0c04f9c08f27df312/audioop_lts-0.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:b492c3b040153e68b9fdaff5913305aaaba5bb433d8a7f73d5cf6a64ed3cc1dd", size = 25206, upload-time = "2025-08-05T16:43:16.444Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "basedpyright"
|
||||
version = "1.39.9"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "nodejs-wheel-binaries" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/7a/4b/c1f4e211e50389304d6af32b9280e026a7133e3ad59bbdf8f7a3250f8bee/basedpyright-1.39.9.tar.gz", hash = "sha256:32cbea5fc8273e89df3db20daea56cb7286e419ccdfdc479c64759d2dc071901", size = 24412216, upload-time = "2026-06-27T02:19:49.834Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/2a/d4/e1fa108710d0498a18c77b1e13897f31eab47c69aa8cfe2d2a4df746541e/basedpyright-1.39.9-py3-none-any.whl", hash = "sha256:6b0837b9eba972c71895167ab9b127e6afdbc17abc92312e3f8d15ca82a5611c", size = 13374276, upload-time = "2026-06-27T02:19:54.431Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bcrypt"
|
||||
version = "5.0.0"
|
||||
|
|
@ -1017,7 +1029,7 @@ wheels = [
|
|||
|
||||
[[package]]
|
||||
name = "lxst"
|
||||
version = "0.4.7"
|
||||
version = "0.4.8"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "audioop-lts", marker = "python_full_version >= '3.13'" },
|
||||
|
|
@ -1028,7 +1040,7 @@ dependencies = [
|
|||
{ name = "rns" },
|
||||
]
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/94/6e/13d946563893273853afa5c2a7c035e87a8c9122365882d1877891fd370b/lxst-0.4.7-py3-none-any.whl", hash = "sha256:a582378b56a2762f530eb28308523cfa5d6b6b83227b03d3c0f8c4f9ba084ea6", size = 3676786, upload-time = "2026-06-07T13:03:23.649Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/01/43/73bf35870920ee00b0de32fd6c51f2f3f025b8f7ca6d7e68e272587c2fb4/lxst-0.4.8-py3-none-any.whl", hash = "sha256:4cdf9c0b5e7fed85805c9716491b0eb9b753c43d15e6c6d7c5c53ebe2a7489b7", size = 3687968, upload-time = "2026-06-23T22:52:56.649Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -1247,6 +1259,22 @@ wheels = [
|
|||
{ url = "https://files.pythonhosted.org/packages/4f/23/ac475f6db39643946feb09290a2178d603d2b623034d56d3f5059cddb769/mutmut-3.5.0-py3-none-any.whl", hash = "sha256:f19f2dd2e977eb9dc17255d8cb11e24fbfc3191620fba3108cac25779c9d78c9", size = 34242, upload-time = "2026-02-22T18:46:43.113Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nodejs-wheel-binaries"
|
||||
version = "24.16.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/a3/22/2a5beb4e21417c73233d9f65cf6f3e96e891b80d2f550a8f630ebc6b88c6/nodejs_wheel_binaries-24.16.0.tar.gz", hash = "sha256:c973cb69dc5fd16e6f6dc6e579e2c3d5534e2a1f57619dddf5ba070efa7dde37", size = 8056, upload-time = "2026-05-30T16:52:09.807Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/83/d1/68b43b53cd0fa83ae6fd406705023ca988d9e0ca41c724d82e66fbeb2ef6/nodejs_wheel_binaries-24.16.0-py2.py3-none-macosx_13_0_arm64.whl", hash = "sha256:d9f8f677dcf30e37ac244f07869726abe043f01eb0f45722b1df31cc2af7093c", size = 55666374, upload-time = "2026-05-30T16:51:39.588Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e9/b2/40a989159599080da485de966c4c2d207e852ac7aa7864702626d96c8bf5/nodejs_wheel_binaries-24.16.0-py2.py3-none-macosx_13_0_x86_64.whl", hash = "sha256:3d0370fe7120ce9697a4f60d40480d2bd8808d9f30131458d5afc0040d4e5a51", size = 55838487, upload-time = "2026-05-30T16:51:43.383Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d7/a7/cd42174fb5ff6faff7fa8d326a18914d8f232098ab5de055b57c16fa13ca/nodejs_wheel_binaries-24.16.0-py2.py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:85dc92bbb79c851569c5925dcc2a4c915a034efab375f99e4e7e6bbe9cca8342", size = 60179540, upload-time = "2026-05-30T16:51:47.036Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/95/c8a1f9ae140aa28df8744d984d01d4b3af7cdd6555af12127f40ceb45a7d/nodejs_wheel_binaries-24.16.0-py2.py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:2f3036292811514ba847b3708492644764f88a833ac425c5f55007014308ddfd", size = 60716262, upload-time = "2026-05-30T16:51:50.711Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/64/c9/7c35b3737f59e36d0249c265397b7bff570519b95301d6e16ea361e904ad/nodejs_wheel_binaries-24.16.0-py2.py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:db8a8a76ebd2b28ecbfc9ad464baa3707241b9e050a30e2efdf6f60c0f886502", size = 62230592, upload-time = "2026-05-30T16:51:55Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/04/96/d931255cf9d11a84d6b54d882dba7434646467d568ccf070ea3418638df3/nodejs_wheel_binaries-24.16.0-py2.py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:f1a3d8f7b4491cbbd023ba3fc4e901fcca2d9fb80d57f24ba3890de8b1dbac03", size = 62841759, upload-time = "2026-05-30T16:51:59.407Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a2/7b/8b7a3f41bc255411be30b6d7d288aab8ffd9ea2055db8555ced3548007b9/nodejs_wheel_binaries-24.16.0-py2.py3-none-win_amd64.whl", hash = "sha256:bb136be9944f0662dcf1120f45193a6b75b13fac378971a95cc42c9f879a81aa", size = 42027734, upload-time = "2026-05-30T16:52:03.348Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/17/66/1ed71f1f529b8ca727d42c7ceb9db0bef145ce4a13dfc86fb50aa44f3be6/nodejs_wheel_binaries-24.16.0-py2.py3-none-win_arm64.whl", hash = "sha256:8308940b5edd0a50dc5267ea36ba21c9f668e83fe0d9f293937174d3a7e31c36", size = 39714528, upload-time = "2026-05-30T16:52:06.421Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "numpy"
|
||||
version = "2.4.6"
|
||||
|
|
@ -1760,6 +1788,7 @@ dependencies = [
|
|||
|
||||
[package.dev-dependencies]
|
||||
dev = [
|
||||
{ name = "basedpyright" },
|
||||
{ name = "cx-freeze" },
|
||||
{ name = "hypothesis" },
|
||||
{ name = "jsonschema" },
|
||||
|
|
@ -1781,18 +1810,19 @@ requires-dist = [
|
|||
{ name = "cbor2", specifier = ">=6.1.1" },
|
||||
{ name = "cryptography", specifier = ">=49.0.0,<50.0.0" },
|
||||
{ name = "lxmf", specifier = ">=1.0.1" },
|
||||
{ name = "lxst", specifier = ">=0.4.7" },
|
||||
{ name = "lxst", specifier = ">=0.4.8" },
|
||||
{ name = "miniaudio", specifier = ">=1.70,<2.0" },
|
||||
{ name = "ply", specifier = ">=3.11,<4.0" },
|
||||
{ name = "psutil", specifier = ">=7.2.2" },
|
||||
{ name = "pycparser", specifier = ">=3.0" },
|
||||
{ name = "pyserial", specifier = ">=3.5" },
|
||||
{ name = "rns", specifier = ">=1.3.5" },
|
||||
{ name = "rns", specifier = ">=1.3.7" },
|
||||
{ name = "websockets", specifier = ">=16.0" },
|
||||
]
|
||||
|
||||
[package.metadata.requires-dev]
|
||||
dev = [
|
||||
{ name = "basedpyright", specifier = ">=1.39.9" },
|
||||
{ name = "cx-freeze", specifier = ">=7.0.0" },
|
||||
{ name = "hypothesis", specifier = ">=6.152.4" },
|
||||
{ name = "jsonschema", specifier = ">=4.26.0" },
|
||||
|
|
@ -1820,15 +1850,15 @@ wheels = [
|
|||
|
||||
[[package]]
|
||||
name = "rns"
|
||||
version = "1.3.5"
|
||||
version = "1.3.7"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "cryptography" },
|
||||
{ name = "pyserial" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/bc/20/8986288f920a20daee9daf691c79096ccc0d41391508b281d2f9f82999e7/rns-1.3.5.tar.gz", hash = "sha256:63145ea1c0fa526a7914c0a72c4a82279b59719875918b0558d049d29198cee3", size = 515435, upload-time = "2026-05-31T22:32:07.547Z" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/8c/ed/2ace4e81951487975f38a16d8b4ee0154dc47b9cb746657b555adc1d7117/rns-1.3.7.tar.gz", hash = "sha256:6757db65c0af212b386b7e44b95eda4e36d6b11cae834258bc6d2d11dac6e125", size = 516648, upload-time = "2026-07-03T16:53:10.722Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/fe/95/d9a639c4e7919703ad1a410c6c925297435ee9e919da00a8a34744d6a82d/rns-1.3.5-py3-none-any.whl", hash = "sha256:1772888c65d03667222b4143d64897074371ea5246f40e1645824124532c340f", size = 602140, upload-time = "2026-05-31T22:32:02.203Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/32/3a/d67f42fe877427f3c88a744c39ba32f67fdc48328d3a0d98d1938ed452f8/rns-1.3.7-py3-none-any.whl", hash = "sha256:95d3bab98513e7f4318ea2dc0b743a21ce9e3c94caee2eb587203ca4b61fd9ed", size = 603491, upload-time = "2026-07-03T16:53:06.123Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue