f2a12f9fed
v0.4 (Operator Tier — Cohort Dashboard + Auth + Postgres) milestone complete. Phases: ✓ P0 pre-execution (planning) → v0.1.6 ✓ P1 operator foundation (Postgres+auth+VC migration) → v0.1.7 ✓ P2 cohort dashboard + aggregation → v0.1.8 ✓ P3 final review + ship → v0.1.9 (= v0.4 milestone release) Requirements covered (8/8): REQ-MT-01 (Postgres store), REQ-MT-02 (aggregation pipeline), REQ-AUTH-01 (operator auth), REQ-DASH-01 (cohort dashboard), REQ-NFR-AUTH-01 (auth NFRs), REQ-NFR-MT-01 (Postgres-in-LXC), REQ-NFR-DASH-01 (k-anonymity ≥10), REQ-NFR-DASH-02 (freshness ≤24h) Grill MUSTs honored (6/6): G-008, G-011, G-027, G-031, G-038, G-041 Tests: 317 pytest pass, 36 skip (Postgres-requiring), 0 fail; 17/17 vitest pass Review: APPROVE_WITH_NOTES (6/6 personas, 0 P0, 8 P1+ carry-forward) Audit: HEALTHY (reconstruction PASS, 8/8 REQ, 6/6 grill) ---ci--- project: praxis phase: 3 milestone: v0.4 status: complete phase_role: final milestone_complete: true milestone_merged_to_main: true tag: v0.1.9 requirements: covered: [REQ-MT-01, REQ-MT-02, REQ-AUTH-01, REQ-DASH-01, REQ-NFR-AUTH-01, REQ-NFR-MT-01, REQ-NFR-DASH-01, REQ-NFR-DASH-02] partial: [] ---/ci---
72 lines
2.3 KiB
TOML
72 lines
2.3 KiB
TOML
[build-system]
|
|
requires = ["setuptools>=68", "wheel"]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[project]
|
|
name = "praxis-server"
|
|
version = "0.1.0"
|
|
description = "Praxis — voice-first AI apprenticeship platform (v0.1 foundation: minimal viable voice loop)"
|
|
readme = "README.md"
|
|
requires-python = ">=3.11"
|
|
license = { text = "Proprietary" }
|
|
authors = [{ name = "Praxis v0.1 (CIAgent)" }]
|
|
|
|
dependencies = [
|
|
# Web framework — FastAPI serves /health + /pipecat/webrtc + StaticFiles (D-023)
|
|
"fastapi>=0.110",
|
|
# ASGI server — uvicorn runs the FastAPI app (used by server.__main__.main)
|
|
"uvicorn>=0.30",
|
|
# Orchestration — Pipecat (D-017) with the three native service extras + WebRTC transport
|
|
"pipecat-ai[deepgram,cartesia,piper,webrtc]>=1.6.0",
|
|
# LLM access — Ollama Cloud direct API (D-020). Pipecat's OLLamaLLMService uses the
|
|
# OpenAI-compatible client; we point base_url at https://ollama.com/v1 + bearer key.
|
|
"openai>=1.40",
|
|
# Scenario format — YAML DSL → Pydantic (D-018)
|
|
"pydantic>=2.7",
|
|
"pyyaml>=6.0",
|
|
# Learner state — SQLite (D-007), async access
|
|
"aiosqlite>=0.20",
|
|
# Config
|
|
"python-dotenv>=1.0",
|
|
# Latency probes — HTTP client for the integrated e2e probe
|
|
"httpx>=0.27",
|
|
"websockets>=12.0",
|
|
# Audio probe fixture generation (synthesized PCM) for the ASR probe
|
|
"numpy>=1.26",
|
|
# VC issuer (SLICE-09) — Ed25519 sign/verify (libsodium), JCS canonicalization
|
|
# (RFC 8785), base58-btc for Multikey proofValue encoding.
|
|
"pynacl>=1.5",
|
|
"canonicaljson>=2.0",
|
|
"base58>=2.1",
|
|
# v0.4 operator tier — Postgres pool (D-050), argon2id passwords (D-041),
|
|
# slowapi rate limiting (D-041). RESEARCH-v0.4 §new-deps.
|
|
"asyncpg>=0.29",
|
|
"argon2-cffi>=23.1",
|
|
"slowapi>=0.1",
|
|
# SessionMiddleware uses itsdangerous for signed cookies (D-056).
|
|
"itsdangerous>=2.1",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
dev = [
|
|
"pytest>=8.0",
|
|
"pytest-asyncio>=0.23",
|
|
"pytest-cov>=5.0",
|
|
]
|
|
|
|
[project.scripts]
|
|
praxis-server = "server.__main__:main"
|
|
|
|
[tool.setuptools.packages.find]
|
|
where = ["."]
|
|
include = ["server*", "db*", "scenarios*"]
|
|
exclude = ["client*", "tests*", "scripts*"]
|
|
|
|
[tool.pytest.ini_options]
|
|
asyncio_mode = "auto"
|
|
testpaths = ["tests"]
|
|
python_files = ["test_*.py"]
|
|
addopts = "-ra -q"
|
|
|
|
[tool.coverage.run]
|
|
source = ["server", "db"] |