- MockHostAdapter (tests/mock_host): in-memory editing model with opaque entity ids, id invalidation, token-bucket rate limiting, snapshot/restore with cap, event subscription, and a stdlib-zlib PNG encoder producing time-varying non-black frames - HostToolExecutor: all 26 tool handlers mapped to HostAdapter calls, snapshot orchestration for mutating batches, concurrent scan_timeline frame pipeline with token bucket and RateLimited backoff, undo_session() restoring per-batch snapshots in reverse, get_params min/max/choices reflection - Web UI (core[webui] extra): FastAPI + single-page vanilla JS, chat log, pending-confirmation list with approve/reject endpoints (timeout defaults to reject), progress, undo-session, snapshot management; SSE push + POST, bound to 127.0.0.1 - Host error types (HostError/EntityNotFound/RateLimited) and shared TokenBucket - P2 acceptance chain: import -> place -> split -> ripple delete -> effect + param -> frame verification (non-black, pixel changes at cut and after effect) -> undo_session restores original state Tests: 129 passed via uv run pytest (no network)
29 lines
606 B
TOML
29 lines
606 B
TOML
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[project]
|
|
name = "quercus-core"
|
|
version = "0.1.0"
|
|
description = "Quercus AI 剪辑助手 — 宿主无关的 AI 核心(LLMProvider / Agent / 工具 schema / 会话)"
|
|
requires-python = ">=3.11"
|
|
dependencies = [
|
|
"httpx>=0.27,<1.0",
|
|
"anthropic>=0.40,<1.0",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
webui = [
|
|
"fastapi>=0.115,<1.0",
|
|
"uvicorn>=0.30,<1.0",
|
|
]
|
|
dev = [
|
|
"pytest>=8.0",
|
|
]
|
|
|
|
[project.scripts]
|
|
quercus-webui = "quercus_core.webui.__main__:main"
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["src/quercus_core"]
|