[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "ratatoskr" version = "0.18.4" description = "Worldtree Conversation API debug TUI — multi-pane observability dashboard" readme = "README.md" requires-python = ">=3.12" license = { file = "LICENSE" } authors = [{ name = "Vuong Hoang" }] keywords = ["worldtree", "tui", "debug", "sse", "textual"] # Network + SSE consumer + TUI framework. # See docs/design-brief.md §1 (Textual), §3 (httpx-sse). dependencies = [ "httpx>=0.27", "httpx-sse>=0.4", "textual>=0.85", ] [project.optional-dependencies] web = [ "starlette>=0.40", "uvicorn[standard]>=0.30", ] # Tier-3 Bifrost consumer: the durable memory.* + affect.* persistence # provider Worldtree writes into. Opt-in extra — distinct deployment surface # from the debug TUI. Recipe: bifrost/docs/implementing-a-consumer.md. provider = [ "ratatoskr[web]", # reuse the starlette + uvicorn ASGI stack "bifrost==1.0.0", # consumer engines + library. 1.0.0 = first STABLE release, wire v0.6 FROZEN (non-breaking repin from >=0.10.0; build_combined_app #18 + mandatory affect.fetch; 0.8.0/v0.6 scope_all/scope_any #11; 0.7.0/v0.5 agent_self) "jsonschema>=4", # bifrost runtime dep — envelope validation "sqlite-vec>=0.1.6", # vector index for the memory plane (vec0 virtual table) ] dev = [ "pytest>=8", "pytest-asyncio>=0.24", "respx>=0.21", # httpx mocking for SSE-recorded snapshot tests "ruff>=0.6", "mypy>=1.11", "textual-dev>=1.5", # textual console + live reload during dev "pyyaml>=6", # used by docs/contracts/contract_parser.py and scripts/contract_drift_check.py "ratatoskr[web]", # web extras included in dev so test_web_* can import starlette ] [project.scripts] ratatoskr = "ratatoskr.cli:main" ratatoskr-web = "ratatoskr.web.entrypoint:main" ratatoskr-provider = "ratatoskr.provider.serve:main" ratatoskr-memory-provider = "ratatoskr.provider.serve_memory:main" ratatoskr-combined-provider = "ratatoskr.provider.serve_combined:main" [project.urls] Repository = "https://gitea.phasefinal.com/vh/ratatoskr" "Design Brief" = "https://gitea.phasefinal.com/vh/brokkr-smithy/src/branch/main/docs/ratatoskr-design-brief.md" # Worldtree spec pin — see docs/SPEC-PIN.md for the full bump procedure. # Ratatoskr is built against Worldtree at this commit; the vendored # spec snapshot in docs/ reflects that SHA. [tool.ratatoskr.spec-pin] worldtree-spec-rev = "5810a26b38a5ea6630892f9a39756f57c5b7b41e" worldtree-version = "v1.0.0b2" pinned-on = "2026-06-30" # Bifrost lives on the auth-gated gitea PyPI index (not public PyPI). # uv reads the credential from UV_INDEX_GITEA_USERNAME / _PASSWORD or ~/.netrc. [[tool.uv.index]] name = "gitea" url = "https://gitea.phasefinal.com/api/packages/vh/pypi/simple/" [tool.uv.sources] bifrost = { index = "gitea" } [tool.hatch.build.targets.wheel] packages = ["src/ratatoskr"] # Issue #16: ship the web companion's static HTML in the wheel so # importlib.resources can locate it post-install. [tool.hatch.build.targets.wheel.force-include] "src/ratatoskr/web/static" = "ratatoskr/web/static" [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] [tool.ruff] line-length = 100 target-version = "py312" [tool.ruff.lint] select = ["E", "F", "I", "B", "UP", "RUF"] [tool.mypy] python_version = "3.12" strict = true