Refresh reviewer runtime visibility
All checks were successful
build / build (push) Successful in 33s

This commit is contained in:
robert
2026-06-08 09:25:53 -03:00
parent d039ee225b
commit 9758c5588d
5 changed files with 16 additions and 5 deletions

View File

@@ -1,6 +1,6 @@
name: agent-reviewer name: agent-reviewer
version: 0.1.0 version: 0.1.1
entrypoint: agent:AgentReviewer entrypoint: agent:AgentReviewer
description: Pre-deploy audit of an A2A agent's source — security, scope, ergonomics. description: Pre-deploy audit of an A2A agent's source — security, scope, ergonomics.
expose: expose:
public: false public: true

View File

@@ -30,7 +30,7 @@ class AgentReviewer(A2AAgent[ReviewerConfig, NoAuth]):
"repo from Gitea, applies security / best-practice / grant-scope " "repo from Gitea, applies security / best-practice / grant-scope "
"skill bundles, and returns a structured ReviewReport." "skill bundles, and returns a structured ReviewReport."
) )
version = "0.1.0" version = "0.1.1"
config_model = ReviewerConfig config_model = ReviewerConfig
auth_model = NoAuth auth_model = NoAuth
@@ -115,6 +115,7 @@ class AgentReviewer(A2AAgent[ReviewerConfig, NoAuth]):
llm_temperature_mode=creds.temperature_mode, llm_temperature_mode=creds.temperature_mode,
llm_temperature=creds.temperature, llm_temperature=creds.temperature,
llm_extra_body=creds.extra_body, llm_extra_body=creds.extra_body,
llm_metadata=getattr(creds, "metadata", None),
), ),
completion_box=completion_box, completion_box=completion_box,
) )
@@ -134,6 +135,7 @@ class AgentReviewer(A2AAgent[ReviewerConfig, NoAuth]):
heartbeat_task = asyncio.create_task(_heartbeat()) heartbeat_task = asyncio.create_task(_heartbeat())
last_reply = "" last_reply = ""
try: try:
await ctx.emit_progress(f"review graph starting for {gitea_owner}/{agent_name}@{ref}")
async for event in graph.astream_events( async for event in graph.astream_events(
{"messages": [{"role": "user", "content": user_msg}]}, {"messages": [{"role": "user", "content": user_msg}]},
version="v2", version="v2",
@@ -168,6 +170,7 @@ class AgentReviewer(A2AAgent[ReviewerConfig, NoAuth]):
report = completion_box.get("report") report = completion_box.get("report")
if report is None: if report is None:
await ctx.emit_progress(f"review finished without structured report for {agent_name}@{ref}")
return { return {
"ok": False, "ok": False,
"agent_name": agent_name, "agent_name": agent_name,
@@ -175,6 +178,10 @@ class AgentReviewer(A2AAgent[ReviewerConfig, NoAuth]):
"warning": "reviewer finished without submitting a structured report", "warning": "reviewer finished without submitting a structured report",
"reply": last_reply[:2000], "reply": last_reply[:2000],
} }
await ctx.emit_progress(
"review submitted "
f"ok={report.ok} findings={len(report.findings)} agent={agent_name}@{ref}"
)
return report.model_dump() return report.model_dump()

View File

@@ -33,6 +33,7 @@ class ReviewerContext:
llm_temperature_mode: str | None = None llm_temperature_mode: str | None = None
llm_temperature: float | None = None llm_temperature: float | None = None
llm_extra_body: dict[str, Any] | None = None llm_extra_body: dict[str, Any] | None = None
llm_metadata: dict[str, Any] | None = None
SYSTEM_PROMPT = """\ SYSTEM_PROMPT = """\
@@ -139,6 +140,7 @@ def build_reviewer_graph(
temperature_mode=ctx.llm_temperature_mode or "default", temperature_mode=ctx.llm_temperature_mode or "default",
temperature=ctx.llm_temperature, temperature=ctx.llm_temperature,
extra_body=dict(ctx.llm_extra_body or {}), extra_body=dict(ctx.llm_extra_body or {}),
metadata=dict(ctx.llm_metadata or {}),
) )
return create_a2a_deep_agent( return create_a2a_deep_agent(

View File

@@ -1,4 +1,4 @@
a2a-pack>=0.1.75 a2a-pack>=0.1.82
httpx>=0.27 httpx>=0.27
deepagents>=0.5.0 deepagents>=0.5.0
langchain>=0.3 langchain>=0.3

View File

@@ -21,7 +21,7 @@ from agent_reviewer.config import load_settings # noqa: E402
def test_class_metadata() -> None: def test_class_metadata() -> None:
assert AgentReviewer.name == "agent-reviewer" assert AgentReviewer.name == "agent-reviewer"
assert AgentReviewer.version assert AgentReviewer.version == "0.1.1"
assert AgentReviewer.wants_cp_jwt is True assert AgentReviewer.wants_cp_jwt is True
@@ -102,6 +102,7 @@ def test_reviewer_graph_uses_forwarded_llm_credentials(
llm_model="platform-model", llm_model="platform-model",
llm_temperature_mode="omit", llm_temperature_mode="omit",
llm_extra_body={"extra_body": {"thinking": {"type": "disabled"}}}, llm_extra_body={"extra_body": {"thinking": {"type": "disabled"}}},
llm_metadata={"a2a_grant_id": "grant-1"},
), ),
completion_box={}, completion_box={},
) )
@@ -113,6 +114,7 @@ def test_reviewer_graph_uses_forwarded_llm_credentials(
assert getattr(creds, "api_key") == "scoped-grant-token" assert getattr(creds, "api_key") == "scoped-grant-token"
assert getattr(creds, "temperature_mode") == "omit" assert getattr(creds, "temperature_mode") == "omit"
assert getattr(creds, "extra_body") == {"extra_body": {"thinking": {"type": "disabled"}}} assert getattr(creds, "extra_body") == {"extra_body": {"thinking": {"type": "disabled"}}}
assert getattr(creds, "metadata") == {"a2a_grant_id": "grant-1"}
def test_reviewer_graph_rejects_missing_forwarded_llm_credentials( def test_reviewer_graph_rejects_missing_forwarded_llm_credentials(