Adds three new routes on the FastAPI web app:
- GET /dashboard — pipeline counts by status (per-status drill-down
via filtered /?status=… links), recent activity
(latest 10 sources), and a settings snapshot
card with an "edit →" shortcut.
- GET /settings — full editing form for pipeline_settings.
- POST /settings/save — HTMX endpoint that validates the partial form,
upserts the row, and returns the rerendered
card with a "Saved." or error flash. The card
is its own _settings_card.html partial so the
HTMX swap targets only the form region.
Form parsing lives in settings_store helpers (parse_time_or_none,
parse_int_or_none) — keeps the route thin and the empty-string-to-NULL
normalisation in one place. Validation rejects negative counts and
sub-1 GPU concurrency.
The base template grew a Dashboard + Settings nav so the new routes are
reachable without typing URLs. Added python-multipart to deps because
FastAPI's Form(...) raises at app import without it.
53 lines
1.4 KiB
TOML
53 lines
1.4 KiB
TOML
[project]
|
|
name = "second-brain"
|
|
version = "0.1.0"
|
|
description = "Personal knowledge system: video/article extraction pipeline + LLM-maintained wiki"
|
|
requires-python = ">=3.12"
|
|
dependencies = [
|
|
"alembic>=1.13.0",
|
|
"click>=8.1.0",
|
|
"embedding-chunking",
|
|
"fastapi>=0.115.0",
|
|
"httpx>=0.28.0",
|
|
"jinja2>=3.1.0",
|
|
"openai-whisper",
|
|
"psycopg[binary]>=3.2",
|
|
"psycopg-pool>=3.2",
|
|
"pydantic>=2.0.0",
|
|
"python-dotenv>=1.0.0",
|
|
"python-multipart>=0.0.20",
|
|
"sqlalchemy>=2.0.0",
|
|
"tomli>=2.0.0",
|
|
"trafilatura>=1.9.0",
|
|
"uvicorn[standard]>=0.30.0",
|
|
"yt-dlp>=2024.1.0",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
# Only required when extractor.backend = "api" in settings.toml.
|
|
# The default "cli" backend shells out to the Claude Code CLI under your
|
|
# Max OAuth subscription and has no Python-side Anthropic dependency.
|
|
api = ["anthropic>=0.40.0"]
|
|
|
|
[dependency-groups]
|
|
dev = [
|
|
"pytest>=8.0",
|
|
"pytest-cov>=5.0",
|
|
"ruff>=0.8",
|
|
]
|
|
|
|
[tool.uv.sources]
|
|
# Shared chunker that vault-mcp / ob1-enricher / ob1-reflector also pin.
|
|
# Same source so the 512/64 chunking stays in lockstep across services.
|
|
embedding-chunking = { git = "https://gitea.plantbasedsoutherner.com/petal-power/embedding-chunking.git", tag = "v0.1.0" }
|
|
|
|
[project.scripts]
|
|
second-brain = "second_brain.main:cli"
|
|
|
|
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["src/second_brain"]
|