feat: switch to opencode

This commit is contained in:
2026-07-21 00:00:24 +02:00
parent 60cb143402
commit 6f24df8cd3
45 changed files with 1288 additions and 757 deletions
+13 -14
View File
@@ -28,15 +28,14 @@ def serious_report() -> ReviewReport:
)
class FakeCodex:
class FakeOpenCode:
def __init__(self, reports: list[ReviewReport]) -> None:
self.reports = iter(reports)
self.reviews = 0
self.revisions = 0
async def start(self, **_kwargs):
self.reviews += 1
return "reviewer", next(self.reports)
async def create_session(self, *_args):
return "reviewer"
async def resume(self, **kwargs):
if kwargs["result_type"] is ReviewReport:
@@ -60,15 +59,15 @@ class FakePrompts:
def objects(rounds: int, reports: list[ReviewReport]):
codex = FakeCodex(reports)
opencode = FakeOpenCode(reports)
settings = SimpleNamespace(
implement_review_rounds=rounds,
implement_model="model",
implement_reasoning="high",
implement_variant="high",
)
deps = SimpleNamespace(
settings=settings,
codex=codex,
opencode=opencode,
storage=FakeStorage(),
prompts=FakePrompts(),
development=SimpleNamespace(description="python"),
@@ -95,12 +94,12 @@ def objects(rounds: int, reports: list[ReviewReport]):
message="",
comment_id=1,
)
return CodeReviewLoop(deps), codex, workflow, job # type: ignore[arg-type]
return CodeReviewLoop(deps), opencode, workflow, job # type: ignore[arg-type]
async def test_stops_after_clean_second_review() -> None:
clean = ReviewReport(summary="Ready", findings=[])
loop, codex, workflow, job = objects(4, [serious_report(), clean])
loop, opencode, workflow, job = objects(4, [serious_report(), clean])
_, report = await loop.run(
job,
workflow,
@@ -109,12 +108,12 @@ async def test_stops_after_clean_second_review() -> None:
AgentResult(summary_markdown="initial", tests=[]),
)
assert not report.has_serious_findings
assert codex.reviews == 2
assert codex.revisions == 1
assert opencode.reviews == 2
assert opencode.revisions == 1
async def test_does_not_make_unreviewed_final_revision() -> None:
loop, codex, workflow, job = objects(
loop, opencode, workflow, job = objects(
3, [serious_report(), serious_report(), serious_report()]
)
_, report = await loop.run(
@@ -125,5 +124,5 @@ async def test_does_not_make_unreviewed_final_revision() -> None:
AgentResult(summary_markdown="initial", tests=[]),
)
assert report.has_serious_findings
assert codex.reviews == 3
assert codex.revisions == 2
assert opencode.reviews == 3
assert opencode.revisions == 2