context.py file-level

at main · View file ↗ · Intel ↗

History
1 files
1 commits
0 hotspots
0 🧊 dead
0 💥 blast risk
sha256:6 fix(ISR): default require_independent_second_reviewer to require Opera… · aaronrene · Sep 2, 2026
1 """Shared CLI runtime context."""
2
3 from __future__ import annotations
4
5 from dataclasses import dataclass
6 from pathlib import Path
7 from typing import Callable
8
9 from adapters.runner import CommandRunner, SubprocessRunner
10 from cli.kit_root import kit_root
11 from cli.output import OutputContext
12 from tools.checkpoints.executor import ScriptExecutor
13 from tools.freeze_reviewer.providers.base import ReviewProvider
14
15
16 @dataclass
17 class CliContext:
18 """Injectable runtime dependencies for commands and tests."""
19
20 kit: Path
21 runner: CommandRunner
22 output: OutputContext
23 cwd: Path
24 review_provider_factory: Callable[[str], ReviewProvider] | None = None
25 script_executor: ScriptExecutor | None = None
26
27 @classmethod
28 def create(
29 cls,
30 *,
31 output: OutputContext | None = None,
32 runner: CommandRunner | None = None,
33 cwd: Path | None = None,
34 kit: Path | None = None,
35 review_provider_factory: Callable[[str], ReviewProvider] | None = None,
36 script_executor: ScriptExecutor | None = None,
37 ) -> CliContext:
38 return cls(
39 kit=kit or kit_root(),
40 runner=runner or SubprocessRunner(),
41 output=output or OutputContext(),
42 cwd=cwd or Path.cwd(),
43 review_provider_factory=review_provider_factory,
44 script_executor=script_executor,
45 )