feat: plugins and public api (#71)

This commit is contained in:
banteg
2026-01-09 03:23:57 +04:00
committed by GitHub
parent 16c0069aa0
commit f856338b94
32 changed files with 3135 additions and 622 deletions
+45
View File
@@ -0,0 +1,45 @@
from pathlib import Path
from takopi.config import ProjectConfig, ProjectsConfig
from takopi.context import RunContext
from takopi.router import AutoRouter, RunnerEntry
from takopi.runners.mock import Return, ScriptRunner
from takopi.transport_runtime import TransportRuntime
def _make_runtime(*, project_default_engine: str | None = None) -> TransportRuntime:
codex = ScriptRunner([Return(answer="ok")], engine="codex")
pi = ScriptRunner([Return(answer="ok")], engine="pi")
router = AutoRouter(
entries=[
RunnerEntry(engine=codex.engine, runner=codex),
RunnerEntry(engine=pi.engine, runner=pi),
],
default_engine=codex.engine,
)
project = ProjectConfig(
alias="proj",
path=Path("."),
worktrees_dir=Path(".worktrees"),
default_engine=project_default_engine,
)
projects = ProjectsConfig(projects={"proj": project}, default_project=None)
return TransportRuntime(router=router, projects=projects)
def test_resolve_engine_uses_project_default() -> None:
runtime = _make_runtime(project_default_engine="pi")
engine = runtime.resolve_engine(
engine_override=None,
context=RunContext(project="proj"),
)
assert engine == "pi"
def test_resolve_engine_prefers_override() -> None:
runtime = _make_runtime(project_default_engine="pi")
engine = runtime.resolve_engine(
engine_override="codex",
context=RunContext(project="proj"),
)
assert engine == "codex"