fix(agent): bind pre-decision evidence to runtime
All checks were successful
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 2m37s
CD Pipeline / build-and-deploy (push) Successful in 5m1s
CD Pipeline / post-deploy-checks (push) Successful in 3m35s
All checks were successful
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 2m37s
CD Pipeline / build-and-deploy (push) Successful in 5m1s
CD Pipeline / post-deploy-checks (push) Successful in 3m35s
This commit is contained in:
@@ -44,6 +44,10 @@ class AuditedMCPToolProvider(MCPToolProvider):
|
||||
from src.services.mcp_audit_service import monotonic_ms, record_mcp_call
|
||||
|
||||
audit_context = parameters.get("_mcp_audit") if isinstance(parameters, dict) else None
|
||||
first_class_gateway_audit = (
|
||||
isinstance(audit_context, dict)
|
||||
and audit_context.get("gateway_path") == "awooop_mcp_gateway"
|
||||
)
|
||||
provider_parameters = {
|
||||
key: value for key, value in parameters.items()
|
||||
if key != "_mcp_audit"
|
||||
@@ -54,20 +58,24 @@ class AuditedMCPToolProvider(MCPToolProvider):
|
||||
result = await self.__provider.execute(tool_name, provider_parameters)
|
||||
return result
|
||||
finally:
|
||||
duration_ms = monotonic_ms() - started
|
||||
await record_mcp_call(
|
||||
mcp_server=self.name,
|
||||
tool_name=tool_name,
|
||||
input_params=parameters,
|
||||
output_result=result.output if result else None,
|
||||
duration_ms=duration_ms,
|
||||
success=bool(result.success) if result else False,
|
||||
error_message=result.error if result else "provider_exception",
|
||||
session_id=audit_context.get("session_id") if isinstance(audit_context, dict) else None,
|
||||
flywheel_node=audit_context.get("flywheel_node") if isinstance(audit_context, dict) else None,
|
||||
incident_id=audit_context.get("incident_id") if isinstance(audit_context, dict) else None,
|
||||
agent_role=audit_context.get("agent_role") if isinstance(audit_context, dict) else None,
|
||||
)
|
||||
# McpGateway writes the canonical audit with its existing DB session.
|
||||
# Opening a second audit session here can exhaust the pool when the
|
||||
# investigator fans out several sensors concurrently.
|
||||
if not first_class_gateway_audit:
|
||||
duration_ms = monotonic_ms() - started
|
||||
await record_mcp_call(
|
||||
mcp_server=self.name,
|
||||
tool_name=tool_name,
|
||||
input_params=parameters,
|
||||
output_result=result.output if result else None,
|
||||
duration_ms=duration_ms,
|
||||
success=bool(result.success) if result else False,
|
||||
error_message=result.error if result else "provider_exception",
|
||||
session_id=audit_context.get("session_id") if isinstance(audit_context, dict) else None,
|
||||
flywheel_node=audit_context.get("flywheel_node") if isinstance(audit_context, dict) else None,
|
||||
incident_id=audit_context.get("incident_id") if isinstance(audit_context, dict) else None,
|
||||
agent_role=audit_context.get("agent_role") if isinstance(audit_context, dict) else None,
|
||||
)
|
||||
|
||||
async def health_check(self) -> bool:
|
||||
return await self.__provider.health_check()
|
||||
|
||||
Reference in New Issue
Block a user