Replace the Mosquitto/paho mesh transport with NATS JetStream KV: - mesh_wire.py: transport-agnostic registry (de)serialization (secret-stripped) - nats_client.py: async CastleNATSClient — registry in the castle-registry KV bucket, heartbeat liveness, delete-on-stop offline, watch-driven mesh state - rewire main/config/models/nodes; MeshStatus -> connected/nats_url - frontend MeshStatus + MeshPanel to the new fields - drop paho-mqtt/mqtt_client + _mqtt._tcp mDNS browse; add nats-py - keep the secret-stripping invariant; mDNS peer discovery retained Single-node verified; two-node parity pending the second node.
39 lines
727 B
TOML
39 lines
727 B
TOML
[project]
|
|
name = "castle-api"
|
|
version = "0.1.0"
|
|
description = "Castle API"
|
|
requires-python = ">=3.13"
|
|
dependencies = [
|
|
"fastapi>=0.115.0",
|
|
"uvicorn[standard]>=0.34.0",
|
|
"pydantic-settings>=2.0.0",
|
|
"httpx>=0.27.0",
|
|
"castle-core",
|
|
"nats-py>=2.9.0",
|
|
"zeroconf>=0.131.0",
|
|
]
|
|
|
|
[tool.uv.sources]
|
|
castle-core = { workspace = true }
|
|
|
|
[project.scripts]
|
|
castle-api = "castle_api.main:run"
|
|
|
|
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["src/castle_api"]
|
|
|
|
[dependency-groups]
|
|
dev = [
|
|
"pytest>=7.0.0",
|
|
"pytest-asyncio>=0.23.0",
|
|
"httpx>=0.27.0",
|
|
"pyyaml>=6.0.0",
|
|
]
|
|
|
|
[tool.ruff.lint.isort]
|
|
known-first-party = ["castle_api"]
|