From 80c1d542806681e4d7fa42d6e47b0713ab0af35b Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Fri, 30 Jan 2026 00:41:08 +0000 Subject: [PATCH] fix(deps): Align Agent-Gateway and Core requirements with SDK 2026 - Updated `google-cloud-aiplatform` to 1.130.0 and `google-genai` to 1.60.0 in `apps/agent-gateway/requirements.txt` and `packages/vertice-core/pyproject.toml` to comply with Singularity Blueprint. - Updated `get_requirements` in `packages/vertice-core/src/vertice_core/adk/base.py` to ensure agents deploy with the correct runtime versions. - Added `tests/unit/test_dependency_compliance.py` to verify version alignment and import capabilities. Co-authored-by: JuanCS-Dev <227056558+JuanCS-Dev@users.noreply.github.com> --- apps/agent-gateway/api/__init__.py | 1 - apps/agent-gateway/api/stream.py | 24 ++++++++++---- apps/agent-gateway/app/api/legacy/router.py | 5 +-- apps/agent-gateway/app/api/legacy/schemas.py | 1 + .../app/nexus/alloydb/evolution.py | 6 ++-- .../app/observability/feedback.py | 8 +++-- .../app/observability/tracing.py | 6 ++-- apps/agent-gateway/app/privacy/erasure.py | 32 ++++++++++++------- apps/agent-gateway/app/store/base.py | 30 ++++++----------- apps/agent-gateway/requirements.txt | 4 +-- packages/vertice-core/pyproject.toml | 2 +- .../vertice-core/src/agents/coder/__init__.py | 1 + .../src/agents/orchestrator/orchestrator.py | 6 ++-- .../vertice_core/a2a/proto/agent_card_pb2.py | 4 +-- .../src/vertice_core/a2a/proto/common_pb2.py | 4 +-- .../src/vertice_core/a2a/proto/message_pb2.py | 4 +-- .../src/vertice_core/a2a/proto/service_pb2.py | 4 +-- .../src/vertice_core/a2a/proto/task_pb2.py | 6 ++-- .../vertice-core/src/vertice_core/adk/base.py | 4 +-- .../agents/orchestrator/orchestrator.py | 6 ++-- .../vertice_core/agents/router/__init__.py | 1 - .../vertice_core/clients/vertice_client.py | 9 ++---- .../vertice_core/memory/cortex/retrieval.py | 9 ++---- .../src/vertice_core/memory/cortex/vault.py | 2 +- .../src/vertice_core/metacognition/engine.py | 4 +-- .../plugins/builtin/git/__init__.py | 1 + .../plugins/examples/hello_world/__init__.py | 1 + .../vertice_core/plugins/plugin_manager.py | 6 ++-- .../prometheus/core/world_model.py | 2 +- .../prometheus/distributed/registry.py | 4 ++- .../prometheus/mcp_server/manager.py | 4 +-- .../prometheus/mcp_server/run_server.py | 2 +- .../prometheus/mcp_server/server.py | 2 +- .../mcp_server/tools/agent_tools_core.py | 14 +++----- .../mcp_server/tools/execution_tools.py | 2 +- .../mcp_server/tools/file_dir_tools.py | 2 +- .../mcp_server/tools/file_mgmt_tools.py | 4 +-- .../mcp_server/tools/file_rw_tools.py | 6 ++-- .../prometheus/mcp_server/tools/git_safety.py | 4 +-- .../mcp_server/tools/media_tools.py | 4 +-- .../prometheus/mcp_server/tools/web_tools.py | 4 +-- .../src/vertice_core/providers/vertex_ai.py | 2 +- .../vertice_core/providers/vertice_router.py | 17 ++++------ .../src/vertice_core/shell_main.py | 6 ++-- .../vertice-core/src/vertice_core/tui/app.py | 12 +++---- .../vertice_core/tui/components/dashboard.py | 4 +-- .../vertice_core/tui/core/autoaudit/export.py | 12 +++---- .../vertice_core/tui/core/autoaudit/logger.py | 2 +- .../tui/core/autoaudit/monitor.py | 2 +- .../tui/core/autoaudit/scenarios.py | 2 +- .../tui/core/autoaudit/service.py | 8 ++--- .../tui/core/autoaudit/vertex_diagnostic.py | 12 +++---- .../src/vertice_core/tui/core/bridge.py | 8 ++--- .../src/vertice_core/tui/core/caching.py | 2 +- .../vertice_core/tui/core/data_protection.py | 2 +- .../vertice_core/tui/core/error_tracking.py | 2 +- .../src/vertice_core/tui/core/http_pool.py | 2 +- .../tui/core/managers/auth_manager.py | 2 +- .../tui/core/managers/status_manager.py | 4 +-- .../tui/handlers/claude_parity_tasks.py | 8 ++--- .../tui/widgets/fuzzy_search_modal.py | 4 +-- .../tui/widgets/performance_hud.py | 2 +- .../vertice_core/tui/widgets/response_view.py | 6 ++-- .../vertice_core/tui/widgets/session_tabs.py | 4 +-- .../vertice_core/tui/widgets/status_bar.py | 2 +- .../src/vertice_core/utils/parsing.py | 6 ++-- tests/unit/test_dependency_compliance.py | 29 +++++++++++++++++ 67 files changed, 208 insertions(+), 199 deletions(-) create mode 100644 tests/unit/test_dependency_compliance.py diff --git a/apps/agent-gateway/api/__init__.py b/apps/agent-gateway/api/__init__.py index 6f90767a..7f7a05dc 100644 --- a/apps/agent-gateway/api/__init__.py +++ b/apps/agent-gateway/api/__init__.py @@ -3,4 +3,3 @@ Note: `apps/agent-gateway` is not a Python package (hyphenated path), so modules in this folder are imported by adding the gateway root to `sys.path` in `app/main.py`. """ - diff --git a/apps/agent-gateway/api/stream.py b/apps/agent-gateway/api/stream.py index e7345efc..4af17aa4 100644 --- a/apps/agent-gateway/api/stream.py +++ b/apps/agent-gateway/api/stream.py @@ -17,7 +17,9 @@ "X-Accel-Buffering": "no", } -FrameType = Literal["intent", "thought", "code_delta", "trajectory", "delta", "final", "tool", "error"] +FrameType = Literal[ + "intent", "thought", "code_delta", "trajectory", "delta", "final", "tool", "error" +] def _truthy_env(name: str, default: str = "0") -> bool: @@ -192,8 +194,12 @@ def _schedule_code_delta_persist(self, tool_event: Mapping[str, Any]) -> None: payload = { "name": str(tool_event.get("name") or ""), - "input": tool_event.get("input") if isinstance(tool_event.get("input"), Mapping) else {}, - "output": tool_event.get("output") if isinstance(tool_event.get("output"), Mapping) else None, + "input": ( + tool_event.get("input") if isinstance(tool_event.get("input"), Mapping) else {} + ), + "output": ( + tool_event.get("output") if isinstance(tool_event.get("output"), Mapping) else None + ), "status": str(tool_event.get("status") or "ok"), } @@ -223,7 +229,9 @@ def translate(self, event: Mapping[str, Any]) -> list[AGUIEvent]: for kind, chunk in pieces: if not chunk: continue - out.append(self._thought_delta(chunk) if kind == "thought" else self._text_delta(chunk)) + out.append( + self._thought_delta(chunk) if kind == "thought" else self._text_delta(chunk) + ) return out if event_type == "final": @@ -232,14 +240,18 @@ def translate(self, event: Mapping[str, Any]) -> list[AGUIEvent]: metadata = data.get("metadata") if isinstance(data.get("metadata"), Mapping) else {} else: text = event.get("text", "") - metadata = event.get("metadata") if isinstance(event.get("metadata"), Mapping) else {} + metadata = ( + event.get("metadata") if isinstance(event.get("metadata"), Mapping) else {} + ) flushed = self._splitter.flush() out: list[AGUIEvent] = [] for kind, chunk in flushed: if not chunk: continue - out.append(self._thought_delta(chunk) if kind == "thought" else self._text_delta(chunk)) + out.append( + self._thought_delta(chunk) if kind == "thought" else self._text_delta(chunk) + ) out.append( AGUIEvent.final( diff --git a/apps/agent-gateway/app/api/legacy/router.py b/apps/agent-gateway/app/api/legacy/router.py index eab74e4c..c2420b1b 100644 --- a/apps/agent-gateway/app/api/legacy/router.py +++ b/apps/agent-gateway/app/api/legacy/router.py @@ -65,8 +65,9 @@ def _vertex_enabled() -> bool: async def get_tenant_context( auth: AuthContext = Depends(get_auth_context), - x_vertice_org: str - | None = None, # Header dependency should be injected by caller or middleware + x_vertice_org: ( + str | None + ) = None, # Header dependency should be injected by caller or middleware ) -> TenantContext: # Note: Header dependency injection happens at router level usually return await resolve_tenant(_STORE, uid=auth.uid, org_id=x_vertice_org) diff --git a/apps/agent-gateway/app/api/legacy/schemas.py b/apps/agent-gateway/app/api/legacy/schemas.py index a4cc662e..a7b8675a 100644 --- a/apps/agent-gateway/app/api/legacy/schemas.py +++ b/apps/agent-gateway/app/api/legacy/schemas.py @@ -1,6 +1,7 @@ """ Schemas for Legacy API routes. """ + from typing import Optional from pydantic import BaseModel diff --git a/apps/agent-gateway/app/nexus/alloydb/evolution.py b/apps/agent-gateway/app/nexus/alloydb/evolution.py index f2fe59b1..bb9a7003 100644 --- a/apps/agent-gateway/app/nexus/alloydb/evolution.py +++ b/apps/agent-gateway/app/nexus/alloydb/evolution.py @@ -75,9 +75,9 @@ async def get_best_candidates(self, limit: int = 10) -> List[EvolutionaryCandida ancestry=row["ancestry"] or [], generation=row["generation"], island_id=row["island_id"], - fitness_scores=json.loads(row["fitness_scores"]) - if row["fitness_scores"] - else {}, + fitness_scores=( + json.loads(row["fitness_scores"]) if row["fitness_scores"] else {} + ), evaluation_count=row["evaluation_count"], ) for row in rows diff --git a/apps/agent-gateway/app/observability/feedback.py b/apps/agent-gateway/app/observability/feedback.py index e3f676ad..fb08a315 100644 --- a/apps/agent-gateway/app/observability/feedback.py +++ b/apps/agent-gateway/app/observability/feedback.py @@ -77,9 +77,11 @@ def from_dict(cls, data: Dict[str, Any]) -> "FeedbackRecord": feedback_type=FeedbackType(data.get("feedback_type", "neutral")), score=data.get("score", 0), comment=data.get("comment"), - timestamp=datetime.fromisoformat(data["timestamp"]) - if "timestamp" in data - else datetime.now(timezone.utc), + timestamp=( + datetime.fromisoformat(data["timestamp"]) + if "timestamp" in data + else datetime.now(timezone.utc) + ), metadata=data.get("metadata", {}), ) diff --git a/apps/agent-gateway/app/observability/tracing.py b/apps/agent-gateway/app/observability/tracing.py index 397d3afd..f6f3edec 100644 --- a/apps/agent-gateway/app/observability/tracing.py +++ b/apps/agent-gateway/app/observability/tracing.py @@ -131,9 +131,9 @@ def format(self, record: logging.LogRecord) -> str: # Add trace context if available if hasattr(record, "otelTraceID") and record.otelTraceID: project_id = os.getenv("GOOGLE_CLOUD_PROJECT", "vertice-ai") - log_obj[ - "logging.googleapis.com/trace" - ] = f"projects/{project_id}/traces/{record.otelTraceID}" + log_obj["logging.googleapis.com/trace"] = ( + f"projects/{project_id}/traces/{record.otelTraceID}" + ) if hasattr(record, "otelSpanID") and record.otelSpanID: log_obj["logging.googleapis.com/spanId"] = record.otelSpanID if hasattr(record, "otelTraceSampled"): diff --git a/apps/agent-gateway/app/privacy/erasure.py b/apps/agent-gateway/app/privacy/erasure.py index 1d7435d4..cfe9512e 100644 --- a/apps/agent-gateway/app/privacy/erasure.py +++ b/apps/agent-gateway/app/privacy/erasure.py @@ -81,18 +81,26 @@ def from_dict(cls, data: Dict[str, Any]) -> "ErasureRequest": user_id=data.get("user_id", ""), org_id=data.get("org_id", ""), status=ErasureStatus(data.get("status", "pending")), - requested_at=datetime.fromisoformat(data["requested_at"]) - if "requested_at" in data - else datetime.now(timezone.utc), - soft_deleted_at=datetime.fromisoformat(data["soft_deleted_at"]) - if data.get("soft_deleted_at") - else None, - hard_delete_scheduled=datetime.fromisoformat(data["hard_delete_scheduled"]) - if data.get("hard_delete_scheduled") - else None, - hard_deleted_at=datetime.fromisoformat(data["hard_deleted_at"]) - if data.get("hard_deleted_at") - else None, + requested_at=( + datetime.fromisoformat(data["requested_at"]) + if "requested_at" in data + else datetime.now(timezone.utc) + ), + soft_deleted_at=( + datetime.fromisoformat(data["soft_deleted_at"]) + if data.get("soft_deleted_at") + else None + ), + hard_delete_scheduled=( + datetime.fromisoformat(data["hard_delete_scheduled"]) + if data.get("hard_delete_scheduled") + else None + ), + hard_deleted_at=( + datetime.fromisoformat(data["hard_deleted_at"]) + if data.get("hard_deleted_at") + else None + ), collections_affected=data.get("collections_affected", []), documents_deleted=data.get("documents_deleted", 0), error_message=data.get("error_message"), diff --git a/apps/agent-gateway/app/store/base.py b/apps/agent-gateway/app/store/base.py index b418e84b..3a857036 100644 --- a/apps/agent-gateway/app/store/base.py +++ b/apps/agent-gateway/app/store/base.py @@ -11,23 +11,17 @@ class Store(Protocol): - async def ensure_default_org(self, *, uid: str) -> Org: - ... + async def ensure_default_org(self, *, uid: str) -> Org: ... - async def list_orgs(self, *, uid: str) -> list[Org]: - ... + async def list_orgs(self, *, uid: str) -> list[Org]: ... - async def create_org(self, *, uid: str, name: str) -> Org: - ... + async def create_org(self, *, uid: str, name: str) -> Org: ... - async def set_default_org(self, *, uid: str, org_id: str) -> None: - ... + async def set_default_org(self, *, uid: str, org_id: str) -> None: ... - async def get_default_org_id(self, *, uid: str) -> str | None: - ... + async def get_default_org_id(self, *, uid: str) -> str | None: ... - async def get_membership(self, *, uid: str, org_id: str) -> Membership | None: - ... + async def get_membership(self, *, uid: str, org_id: str) -> Membership | None: ... async def create_run( self, @@ -37,8 +31,7 @@ async def create_run( session_id: str, agent: str, prompt: str, - ) -> Run: - ... + ) -> Run: ... async def update_run( self, @@ -47,11 +40,8 @@ async def update_run( org_id: str, status: str, final_text: str | None = None, - ) -> None: - ... + ) -> None: ... - async def list_runs(self, *, uid: str, org_id: str, limit: int = 50) -> list[Run]: - ... + async def list_runs(self, *, uid: str, org_id: str, limit: int = 50) -> list[Run]: ... - async def get_run(self, *, uid: str, org_id: str, run_id: str) -> Run | None: - ... + async def get_run(self, *, uid: str, org_id: str, run_id: str) -> Run | None: ... diff --git a/apps/agent-gateway/requirements.txt b/apps/agent-gateway/requirements.txt index be71637b..55e87c37 100644 --- a/apps/agent-gateway/requirements.txt +++ b/apps/agent-gateway/requirements.txt @@ -1,7 +1,7 @@ fastapi>=0.109.0 uvicorn[standard]>=0.27.0 -google-cloud-aiplatform>=1.38.0 -google-genai>=0.3.0 +google-cloud-aiplatform==1.130.0 +google-genai==1.60.0 pydantic>=2.5.0 sse-starlette>=2.0.0 python-multipart>=0.0.9 diff --git a/packages/vertice-core/pyproject.toml b/packages/vertice-core/pyproject.toml index e0e2ed0f..a1599bb5 100644 --- a/packages/vertice-core/pyproject.toml +++ b/packages/vertice-core/pyproject.toml @@ -13,7 +13,7 @@ authors = [ { name = "Vertice-MAXIMUS", email = "gemini@vertice.ai" }, ] dependencies = [ - "google-cloud-aiplatform>=1.38.0", + "google-cloud-aiplatform>=1.130.0", "google-cloud-alloydb-connector>=1.0.0", "pgvector>=0.2.0", "pydantic>=2.5.0", diff --git a/packages/vertice-core/src/agents/coder/__init__.py b/packages/vertice-core/src/agents/coder/__init__.py index 4c26066a..8f997041 100644 --- a/packages/vertice-core/src/agents/coder/__init__.py +++ b/packages/vertice-core/src/agents/coder/__init__.py @@ -1,4 +1,5 @@ """Coder Agent - Fast code generation specialist.""" + from .agent import CoderAgent, coder __all__ = ["CoderAgent", "coder"] diff --git a/packages/vertice-core/src/agents/orchestrator/orchestrator.py b/packages/vertice-core/src/agents/orchestrator/orchestrator.py index ef8425c8..d8788473 100644 --- a/packages/vertice-core/src/agents/orchestrator/orchestrator.py +++ b/packages/vertice-core/src/agents/orchestrator/orchestrator.py @@ -68,9 +68,9 @@ def __init__( self._iteration_count = 0 self._start_time: Optional[float] = None - self._on_state_change: Optional[ - Callable[[OrchestratorState, OrchestratorState], None] - ] = None + self._on_state_change: Optional[Callable[[OrchestratorState, OrchestratorState], None]] = ( + None + ) self._on_step_complete: Optional[Callable[[ExecutionStep, ExecutionResult], None]] = None def _transition_to( diff --git a/packages/vertice-core/src/vertice_core/a2a/proto/agent_card_pb2.py b/packages/vertice-core/src/vertice_core/a2a/proto/agent_card_pb2.py index 04eea150..ca6076b9 100644 --- a/packages/vertice-core/src/vertice_core/a2a/proto/agent_card_pb2.py +++ b/packages/vertice-core/src/vertice_core/a2a/proto/agent_card_pb2.py @@ -22,9 +22,7 @@ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "agent_card_pb2", _globals) if not _descriptor._USE_C_DESCRIPTORS: _globals["DESCRIPTOR"]._options = None - _globals[ - "DESCRIPTOR" - ]._serialized_options = ( + _globals["DESCRIPTOR"]._serialized_options = ( b"\n\017com.vertice.a2aB\016AgentCardProtoZ\034github.com/vertice/a2a/proto" ) _globals["_OAUTH2CONFIG_SCOPESENTRY"]._options = None diff --git a/packages/vertice-core/src/vertice_core/a2a/proto/common_pb2.py b/packages/vertice-core/src/vertice_core/a2a/proto/common_pb2.py index 1127bdc5..39627e41 100644 --- a/packages/vertice-core/src/vertice_core/a2a/proto/common_pb2.py +++ b/packages/vertice-core/src/vertice_core/a2a/proto/common_pb2.py @@ -22,9 +22,7 @@ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "common_pb2", _globals) if not _descriptor._USE_C_DESCRIPTORS: _globals["DESCRIPTOR"]._options = None - _globals[ - "DESCRIPTOR" - ]._serialized_options = ( + _globals["DESCRIPTOR"]._serialized_options = ( b"\n\017com.vertice.a2aB\013CommonProtoZ\034github.com/vertice/a2a/proto" ) _globals["_PART_METADATAENTRY"]._options = None diff --git a/packages/vertice-core/src/vertice_core/a2a/proto/message_pb2.py b/packages/vertice-core/src/vertice_core/a2a/proto/message_pb2.py index 007df666..34e46c72 100644 --- a/packages/vertice-core/src/vertice_core/a2a/proto/message_pb2.py +++ b/packages/vertice-core/src/vertice_core/a2a/proto/message_pb2.py @@ -22,9 +22,7 @@ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "message_pb2", _globals) if not _descriptor._USE_C_DESCRIPTORS: _globals["DESCRIPTOR"]._options = None - _globals[ - "DESCRIPTOR" - ]._serialized_options = ( + _globals["DESCRIPTOR"]._serialized_options = ( b"\n\017com.vertice.a2aB\014MessageProtoZ\034github.com/vertice/a2a/proto" ) _globals["_MESSAGE_METADATAENTRY"]._options = None diff --git a/packages/vertice-core/src/vertice_core/a2a/proto/service_pb2.py b/packages/vertice-core/src/vertice_core/a2a/proto/service_pb2.py index 8cefd65b..c36df218 100644 --- a/packages/vertice-core/src/vertice_core/a2a/proto/service_pb2.py +++ b/packages/vertice-core/src/vertice_core/a2a/proto/service_pb2.py @@ -22,9 +22,7 @@ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "service_pb2", _globals) if not _descriptor._USE_C_DESCRIPTORS: _globals["DESCRIPTOR"]._options = None - _globals[ - "DESCRIPTOR" - ]._serialized_options = ( + _globals["DESCRIPTOR"]._serialized_options = ( b"\n\017com.vertice.a2aB\014ServiceProtoZ\034github.com/vertice/a2a/proto" ) _globals["_HEALTHCHECKRESPONSE_COMPONENTSENTRY"]._options = None diff --git a/packages/vertice-core/src/vertice_core/a2a/proto/task_pb2.py b/packages/vertice-core/src/vertice_core/a2a/proto/task_pb2.py index 5fe6d597..b68dd9e7 100644 --- a/packages/vertice-core/src/vertice_core/a2a/proto/task_pb2.py +++ b/packages/vertice-core/src/vertice_core/a2a/proto/task_pb2.py @@ -22,9 +22,9 @@ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "task_pb2", _globals) if not _descriptor._USE_C_DESCRIPTORS: _globals["DESCRIPTOR"]._options = None - _globals[ - "DESCRIPTOR" - ]._serialized_options = b"\n\017com.vertice.a2aB\tTaskProtoZ\034github.com/vertice/a2a/proto" + _globals["DESCRIPTOR"]._serialized_options = ( + b"\n\017com.vertice.a2aB\tTaskProtoZ\034github.com/vertice/a2a/proto" + ) _globals["_TASK_METADATAENTRY"]._options = None _globals["_TASK_METADATAENTRY"]._serialized_options = b"8\001" _globals["_SENDMESSAGEREQUEST_METADATAENTRY"]._options = None diff --git a/packages/vertice-core/src/vertice_core/adk/base.py b/packages/vertice-core/src/vertice_core/adk/base.py index aeb980ca..32d9df1d 100644 --- a/packages/vertice-core/src/vertice_core/adk/base.py +++ b/packages/vertice-core/src/vertice_core/adk/base.py @@ -106,8 +106,8 @@ def get_requirements(self) -> List[str]: """ return [ "vertice-core", - "google-cloud-aiplatform==1.115.0", - "google-genai==1.2.0", + "google-cloud-aiplatform==1.130.0", + "google-genai==1.60.0", "pydantic>=2.5.0", ] diff --git a/packages/vertice-core/src/vertice_core/agents/orchestrator/orchestrator.py b/packages/vertice-core/src/vertice_core/agents/orchestrator/orchestrator.py index ef8425c8..d8788473 100644 --- a/packages/vertice-core/src/vertice_core/agents/orchestrator/orchestrator.py +++ b/packages/vertice-core/src/vertice_core/agents/orchestrator/orchestrator.py @@ -68,9 +68,9 @@ def __init__( self._iteration_count = 0 self._start_time: Optional[float] = None - self._on_state_change: Optional[ - Callable[[OrchestratorState, OrchestratorState], None] - ] = None + self._on_state_change: Optional[Callable[[OrchestratorState, OrchestratorState], None]] = ( + None + ) self._on_step_complete: Optional[Callable[[ExecutionStep, ExecutionResult], None]] = None def _transition_to( diff --git a/packages/vertice-core/src/vertice_core/agents/router/__init__.py b/packages/vertice-core/src/vertice_core/agents/router/__init__.py index 2fb4a890..9ff862bb 100644 --- a/packages/vertice-core/src/vertice_core/agents/router/__init__.py +++ b/packages/vertice-core/src/vertice_core/agents/router/__init__.py @@ -2,7 +2,6 @@ Router Module - Semantic routing for agent selection. """ - from .cache import RouterCacheMixin from .router import SemanticRouter from .similarity import SimilarityEngine diff --git a/packages/vertice-core/src/vertice_core/clients/vertice_client.py b/packages/vertice-core/src/vertice_core/clients/vertice_client.py index 8769826b..f76ea87a 100644 --- a/packages/vertice-core/src/vertice_core/clients/vertice_client.py +++ b/packages/vertice-core/src/vertice_core/clients/vertice_client.py @@ -71,8 +71,7 @@ def __init__(self, provider: str, retry_after: Optional[int] = None) -> None: class ProviderProtocol(Protocol): """Protocol for LLM providers.""" - def is_available(self) -> bool: - ... + def is_available(self) -> bool: ... async def stream_chat( self, @@ -80,8 +79,7 @@ async def stream_chat( max_tokens: int = DEFAULT_MAX_TOKENS, temperature: float = DEFAULT_TEMPERATURE, **kwargs: Any, - ) -> AsyncIterator[str]: - ... + ) -> AsyncIterator[str]: ... async def generate( self, @@ -89,8 +87,7 @@ async def generate( max_tokens: int = DEFAULT_MAX_TOKENS, temperature: float = DEFAULT_TEMPERATURE, **kwargs: Any, - ) -> str: - ... + ) -> str: ... @dataclass diff --git a/packages/vertice-core/src/vertice_core/memory/cortex/retrieval.py b/packages/vertice-core/src/vertice_core/memory/cortex/retrieval.py index 5a8289e6..57b41432 100644 --- a/packages/vertice-core/src/vertice_core/memory/cortex/retrieval.py +++ b/packages/vertice-core/src/vertice_core/memory/cortex/retrieval.py @@ -14,18 +14,15 @@ class MemorySubsystem(Protocol): """Protocol for memory subsystems that support search.""" - def search(self, query: str, limit: int = 5) -> Coroutine[Any, Any, List[Any]]: - ... + def search(self, query: str, limit: int = 5) -> Coroutine[Any, Any, List[Any]]: ... class CoreMemoryProtocol(Protocol): """Protocol for core memory.""" - def get_persona(self) -> Dict[str, Any]: - ... + def get_persona(self) -> Dict[str, Any]: ... - def to_context_string(self) -> str: - ... + def to_context_string(self) -> str: ... class ActiveRetrieval: diff --git a/packages/vertice-core/src/vertice_core/memory/cortex/vault.py b/packages/vertice-core/src/vertice_core/memory/cortex/vault.py index 1d09d9ab..407cd0fa 100644 --- a/packages/vertice-core/src/vertice_core/memory/cortex/vault.py +++ b/packages/vertice-core/src/vertice_core/memory/cortex/vault.py @@ -201,7 +201,7 @@ def _deobfuscate_legacy(self, obfuscated: str) -> str: if ":" in decoded: return decoded.split(":", 1)[1] return decoded - except Exception as e: + except Exception: # If it fails, it's likely not base64. It might be an unencrypted value. return obfuscated diff --git a/packages/vertice-core/src/vertice_core/metacognition/engine.py b/packages/vertice-core/src/vertice_core/metacognition/engine.py index f33fc193..387db96b 100644 --- a/packages/vertice-core/src/vertice_core/metacognition/engine.py +++ b/packages/vertice-core/src/vertice_core/metacognition/engine.py @@ -179,9 +179,7 @@ def predict_outcome( recommendation = ( "proceed" if confidence > 0.6 - else "proceed_with_caution" - if confidence > 0.4 - else "reconsider" + else "proceed_with_caution" if confidence > 0.4 else "reconsider" ) return { diff --git a/packages/vertice-core/src/vertice_core/plugins/builtin/git/__init__.py b/packages/vertice-core/src/vertice_core/plugins/builtin/git/__init__.py index db0ac895..5419e169 100644 --- a/packages/vertice-core/src/vertice_core/plugins/builtin/git/__init__.py +++ b/packages/vertice-core/src/vertice_core/plugins/builtin/git/__init__.py @@ -1,4 +1,5 @@ """Git Integration Plugin.""" + from .plugin import GitPlugin __all__ = ["GitPlugin"] diff --git a/packages/vertice-core/src/vertice_core/plugins/examples/hello_world/__init__.py b/packages/vertice-core/src/vertice_core/plugins/examples/hello_world/__init__.py index 65632daa..2838cdd3 100644 --- a/packages/vertice-core/src/vertice_core/plugins/examples/hello_world/__init__.py +++ b/packages/vertice-core/src/vertice_core/plugins/examples/hello_world/__init__.py @@ -1,4 +1,5 @@ """Hello World example plugin.""" + from .plugin import HelloWorldPlugin __all__ = ["HelloWorldPlugin"] diff --git a/packages/vertice-core/src/vertice_core/plugins/plugin_manager.py b/packages/vertice-core/src/vertice_core/plugins/plugin_manager.py index a703af09..dbaa6077 100644 --- a/packages/vertice-core/src/vertice_core/plugins/plugin_manager.py +++ b/packages/vertice-core/src/vertice_core/plugins/plugin_manager.py @@ -8,11 +8,9 @@ class Plugin(Protocol): """Plugin interface.""" - async def initialize(self) -> None: - ... + async def initialize(self) -> None: ... - async def shutdown(self) -> None: - ... + async def shutdown(self) -> None: ... class PluginManager: diff --git a/packages/vertice-core/src/vertice_core/prometheus/core/world_model.py b/packages/vertice-core/src/vertice_core/prometheus/core/world_model.py index f878e487..a0c57670 100644 --- a/packages/vertice-core/src/vertice_core/prometheus/core/world_model.py +++ b/packages/vertice-core/src/vertice_core/prometheus/core/world_model.py @@ -353,7 +353,7 @@ async def find_best_plan( try: response = await self.llm.generate(planning_prompt) candidate_plans = self._parse_plans(response, available_actions) - except Exception as e: + except Exception: # Fallback: single simple plan candidate_plans = [[(ActionType.THINK, {"goal": goal})]] diff --git a/packages/vertice-core/src/vertice_core/prometheus/distributed/registry.py b/packages/vertice-core/src/vertice_core/prometheus/distributed/registry.py index 8fdaf0fe..d360f45a 100644 --- a/packages/vertice-core/src/vertice_core/prometheus/distributed/registry.py +++ b/packages/vertice-core/src/vertice_core/prometheus/distributed/registry.py @@ -263,7 +263,9 @@ async def share_top_skills(self, top_k: int = 10, min_quality: float = 0.8) -> i skill for skill in all_skills[: top_k * 2] # Get more to filter if skill.success_rate >= min_quality - ][:top_k] # Take top k + ][ + :top_k + ] # Take top k if not top_skills: logger.debug("No high-quality skills to share") diff --git a/packages/vertice-core/src/vertice_core/prometheus/mcp_server/manager.py b/packages/vertice-core/src/vertice_core/prometheus/mcp_server/manager.py index 2cc09493..a72d3eac 100644 --- a/packages/vertice-core/src/vertice_core/prometheus/mcp_server/manager.py +++ b/packages/vertice-core/src/vertice_core/prometheus/mcp_server/manager.py @@ -229,13 +229,13 @@ async def _cleanup_on_failure(self): if self.http_server: try: await self.http_server.stop() - except Exception as e: + except Exception: pass if self.mcp_server: try: await self.mcp_server.stop() - except Exception as e: + except Exception: pass def get_status(self) -> Dict[str, Any]: diff --git a/packages/vertice-core/src/vertice_core/prometheus/mcp_server/run_server.py b/packages/vertice-core/src/vertice_core/prometheus/mcp_server/run_server.py index a06c7900..e46ad77c 100644 --- a/packages/vertice-core/src/vertice_core/prometheus/mcp_server/run_server.py +++ b/packages/vertice-core/src/vertice_core/prometheus/mcp_server/run_server.py @@ -79,7 +79,7 @@ async def run_mcp_server(): try: await http_server.stop() await mcp_server.stop() - except Exception as e: + except Exception: pass logger.info("Server stopped") diff --git a/packages/vertice-core/src/vertice_core/prometheus/mcp_server/server.py b/packages/vertice-core/src/vertice_core/prometheus/mcp_server/server.py index 9cbeb849..2ae5980a 100644 --- a/packages/vertice-core/src/vertice_core/prometheus/mcp_server/server.py +++ b/packages/vertice-core/src/vertice_core/prometheus/mcp_server/server.py @@ -142,7 +142,7 @@ def _bootstrap_tools(self) -> None: for module in modules: try: importlib.import_module(module) - except Exception as e: + except Exception: self.logger.warning(f"Tool module failed to import: {module}", exc_info=True) tool_count = get_tool_registry().get_tool_count() diff --git a/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/agent_tools_core.py b/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/agent_tools_core.py index c7c73c35..e6752133 100644 --- a/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/agent_tools_core.py +++ b/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/agent_tools_core.py @@ -438,22 +438,16 @@ def _calculate_overall_score( grade = ( "A" if final_score >= 8.5 - else "B" - if final_score >= 7.0 - else "C" - if final_score >= 5.5 - else "D" + else "B" if final_score >= 7.0 else "C" if final_score >= 5.5 else "D" ) return { "score": round(final_score, 1), "grade": grade, "issues_count": len(issues), - "recommendation": "Excellent" - if grade == "A" - else "Good" - if grade == "B" - else "Needs improvement", + "recommendation": ( + "Excellent" if grade == "A" else "Good" if grade == "B" else "Needs improvement" + ), } diff --git a/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/execution_tools.py b/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/execution_tools.py index 96594709..436f2720 100644 --- a/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/execution_tools.py +++ b/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/execution_tools.py @@ -211,7 +211,7 @@ async def bash_command( try: proc.kill() await proc.wait() - except Exception as e: + except Exception: pass return {"success": False, "error": f"Command timeout after {timeout}s"} diff --git a/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/file_dir_tools.py b/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/file_dir_tools.py index 4e293231..e19c1732 100644 --- a/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/file_dir_tools.py +++ b/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/file_dir_tools.py @@ -44,7 +44,7 @@ def validate_safe_path(path: str, allow_root: bool = False) -> bool: return True - except Exception as e: + except Exception: return False diff --git a/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/file_mgmt_tools.py b/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/file_mgmt_tools.py index 43a82c0c..ac2d7af0 100644 --- a/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/file_mgmt_tools.py +++ b/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/file_mgmt_tools.py @@ -56,12 +56,12 @@ def validate_safe_path(path: str, allow_root: bool = False) -> bool: target = abs_path.readlink() if any(pattern in str(target) for pattern in dangerous_patterns): return False - except Exception as e: + except Exception: return False return True - except Exception as e: + except Exception: return False diff --git a/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/file_rw_tools.py b/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/file_rw_tools.py index 8435e9f2..0e58b6aa 100644 --- a/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/file_rw_tools.py +++ b/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/file_rw_tools.py @@ -50,12 +50,12 @@ def validate_safe_path(path: str, allow_root: bool = False) -> bool: target = abs_path.readlink() if any(pattern in str(target) for pattern in dangerous_patterns): return False - except Exception as e: + except Exception: return False return True - except Exception as e: + except Exception: return False @@ -296,7 +296,7 @@ async def edit_file( backup_content = backup_path.read_text(encoding=encoding) file_path.write_text(backup_content, encoding=encoding) backup_path.unlink() - except Exception as e: + except Exception: pass # Backup restoration failed raise e diff --git a/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/git_safety.py b/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/git_safety.py index f14d7e4e..52315c4e 100644 --- a/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/git_safety.py +++ b/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/git_safety.py @@ -84,7 +84,7 @@ def get_current_branch(path: str = ".") -> str: if result.returncode == 0: return result.stdout.strip() return "unknown" - except Exception as e: + except Exception: return "unknown" @@ -97,7 +97,7 @@ def is_repo_clean(path: str = ".") -> bool: ["git", "status", "--porcelain"], cwd=path, capture_output=True, text=True, timeout=10 ) return result.returncode == 0 and not result.stdout.strip() - except Exception as e: + except Exception: return False diff --git a/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/media_tools.py b/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/media_tools.py index 4669d9c4..cffee717 100644 --- a/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/media_tools.py +++ b/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/media_tools.py @@ -189,7 +189,7 @@ async def media_info(file_path: str) -> dict: width, height = _get_image_dimensions(path) result["width"] = width result["height"] = height - except Exception as e: + except Exception: pass elif path.suffix.lower() == ".pdf": @@ -206,7 +206,7 @@ async def media_info(file_path: str) -> dict: result["author"] = metadata.get("/Author", "") except ImportError: result["pages"] = "unknown (install pypdf)" - except Exception as e: + except Exception: result["pages"] = "unknown" elif mime_type and mime_type.startswith("video/"): diff --git a/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/web_tools.py b/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/web_tools.py index f7568153..e42c4856 100644 --- a/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/web_tools.py +++ b/packages/vertice-core/src/vertice_core/prometheus/mcp_server/tools/web_tools.py @@ -70,7 +70,7 @@ def is_ssrf_safe(url: str) -> tuple[bool, Optional[str]]: for blocked_range in BLOCKED_IP_RANGES: if ip in blocked_range: return False, f"SSRF blocked: {hostname} resolves to private IP {ip}" - except Exception as e: + except Exception: pass # DNS resolution failed, allow (might be a valid hostname) return True, None @@ -323,7 +323,7 @@ def _parse_ddg_results(html: str, max_results: int) -> List[Dict[str, str]]: if title and url: results.append({"title": title, "url": url, "snippet": snippet}) - except Exception as e: + except Exception: continue # Skip malformed results except ImportError: diff --git a/packages/vertice-core/src/vertice_core/providers/vertex_ai.py b/packages/vertice-core/src/vertice_core/providers/vertex_ai.py index 3a3a9b16..af342ff2 100644 --- a/packages/vertice-core/src/vertice_core/providers/vertex_ai.py +++ b/packages/vertice-core/src/vertice_core/providers/vertex_ai.py @@ -159,7 +159,7 @@ async def _stream_v3(self, messages, system_prompt, max_tokens, temperature, too if include_thoughts and hasattr(types, "ThinkingConfig"): try: config.thinking_config = types.ThinkingConfig(include_thoughts=True) # type: ignore[attr-defined] - except Exception as e: + except Exception: # Older SDKs may not accept thinking_config; keep streaming functional output only. include_thoughts = False diff --git a/packages/vertice-core/src/vertice_core/providers/vertice_router.py b/packages/vertice-core/src/vertice_core/providers/vertice_router.py index ef2e100b..5be84afb 100644 --- a/packages/vertice-core/src/vertice_core/providers/vertice_router.py +++ b/packages/vertice-core/src/vertice_core/providers/vertice_router.py @@ -99,20 +99,17 @@ class RoutingDecision: class LLMProvider(Protocol): """Protocol for LLM providers.""" - def is_available(self) -> bool: - ... + def is_available(self) -> bool: ... - async def generate(self, messages: List[Dict], **kwargs) -> str: - ... + async def generate(self, messages: List[Dict], **kwargs) -> str: ... - async def stream_generate(self, messages: List[Dict], **kwargs) -> AsyncGenerator[str, None]: - ... + async def stream_generate( + self, messages: List[Dict], **kwargs + ) -> AsyncGenerator[str, None]: ... - async def stream_chat(self, messages: List[Dict], **kwargs) -> AsyncGenerator[str, None]: - ... + async def stream_chat(self, messages: List[Dict], **kwargs) -> AsyncGenerator[str, None]: ... - def get_model_info(self) -> ModelInfo: - ... + def get_model_info(self) -> ModelInfo: ... class VerticeRouter: diff --git a/packages/vertice-core/src/vertice_core/shell_main.py b/packages/vertice-core/src/vertice_core/shell_main.py index ea64fa0b..92880cbd 100644 --- a/packages/vertice-core/src/vertice_core/shell_main.py +++ b/packages/vertice-core/src/vertice_core/shell_main.py @@ -538,9 +538,9 @@ async def _check_auto_activation(self, user_input: str) -> None: context = ModeContext( cwd=str(Path.cwd()), env=dict(os.environ), - session_id=self.session_state.session_id - if hasattr(self, "session_state") - else None, + session_id=( + self.session_state.session_id if hasattr(self, "session_state") else None + ), ) action_data = { diff --git a/packages/vertice-core/src/vertice_core/tui/app.py b/packages/vertice-core/src/vertice_core/tui/app.py index aa2e0669..9d7ecde1 100644 --- a/packages/vertice-core/src/vertice_core/tui/app.py +++ b/packages/vertice-core/src/vertice_core/tui/app.py @@ -443,7 +443,7 @@ async def _update_autocomplete_after_debounce(self, text: str) -> None: completer, "get_completions_threadsafe", completer.get_completions ) completions = await asyncio.to_thread(get_completions, text, 15) - except Exception as e: + except Exception: autocomplete.hide() return @@ -553,7 +553,7 @@ def _ms(start: float | None, end: float | None) -> float | None: async def _write() -> None: try: await asyncio.to_thread(_append_jsonl_sync, self._perf_log_path, record) - except Exception as e: + except Exception: pass try: @@ -721,20 +721,20 @@ def action_cancel(self) -> None: self.is_processing = False try: self.workers.cancel_group(self, "chat_dispatch") - except Exception as e: + except Exception: pass try: status = self.query_one(StatusBar) status.mode = "READY" - except Exception as e: + except Exception: pass try: response = self.query_one("#response", ResponseView) self.run_worker(response.end_thinking(), name="cancel_end_thinking", group="system") response.add_error("Operation cancelled") - except Exception as e: + except Exception: pass def action_toggle_theme(self) -> None: @@ -817,7 +817,7 @@ def action_search(self) -> None: try: # This would get current session ID current_session_id = getattr(self.session_manager, "current_session_id", None) - except Exception as e: + except Exception: pass # Create and mount fuzzy search modal diff --git a/packages/vertice-core/src/vertice_core/tui/components/dashboard.py b/packages/vertice-core/src/vertice_core/tui/components/dashboard.py index 9e22a6c2..af4be6ce 100644 --- a/packages/vertice-core/src/vertice_core/tui/components/dashboard.py +++ b/packages/vertice-core/src/vertice_core/tui/components/dashboard.py @@ -356,9 +356,7 @@ def _render_metrics(self) -> Panel: mem_color = ( "green" if metrics.memory_percent < 50 - else "yellow" - if metrics.memory_percent < 80 - else "red" + else "yellow" if metrics.memory_percent < 80 else "red" ) table.add_row( "Memory:", diff --git a/packages/vertice-core/src/vertice_core/tui/core/autoaudit/export.py b/packages/vertice-core/src/vertice_core/tui/core/autoaudit/export.py index e27c0f6f..b62e6d07 100644 --- a/packages/vertice-core/src/vertice_core/tui/core/autoaudit/export.py +++ b/packages/vertice-core/src/vertice_core/tui/core/autoaudit/export.py @@ -138,9 +138,9 @@ def export_html(report: AuditReport, output_path: Optional[Path] = None) -> str: ) if output_path is None: - output_path = Path( - "logs/autoaudit" - ) / f"report_{datetime.now().strftime('%Y%m%d_%H%M%S')}.html" + output_path = ( + Path("logs/autoaudit") / f"report_{datetime.now().strftime('%Y%m%d_%H%M%S')}.html" + ) output_path.parent.mkdir(parents=True, exist_ok=True) output_path.write_text(html, encoding="utf-8") @@ -158,9 +158,9 @@ def export_json(report: AuditReport, output_path: Optional[Path] = None) -> str: import json if output_path is None: - output_path = Path( - "logs/autoaudit" - ) / f"report_{datetime.now().strftime('%Y%m%d_%H%M%S')}.json" + output_path = ( + Path("logs/autoaudit") / f"report_{datetime.now().strftime('%Y%m%d_%H%M%S')}.json" + ) output_path.parent.mkdir(parents=True, exist_ok=True) diff --git a/packages/vertice-core/src/vertice_core/tui/core/autoaudit/logger.py b/packages/vertice-core/src/vertice_core/tui/core/autoaudit/logger.py index 2939a379..3e5e1f0b 100644 --- a/packages/vertice-core/src/vertice_core/tui/core/autoaudit/logger.py +++ b/packages/vertice-core/src/vertice_core/tui/core/autoaudit/logger.py @@ -33,7 +33,7 @@ def __init__(self, output_dir: Optional[Path] = None) -> None: self.output_dir = output_dir or (root_dir / "logs" / "autoaudit") try: self.output_dir.mkdir(parents=True, exist_ok=True) - except Exception as e: + except Exception: # Fallback to tmp if permissions fail self.output_dir = Path("/tmp/vertice_logs/autoaudit") self.output_dir.mkdir(parents=True, exist_ok=True) diff --git a/packages/vertice-core/src/vertice_core/tui/core/autoaudit/monitor.py b/packages/vertice-core/src/vertice_core/tui/core/autoaudit/monitor.py index ae327d3c..10846071 100644 --- a/packages/vertice-core/src/vertice_core/tui/core/autoaudit/monitor.py +++ b/packages/vertice-core/src/vertice_core/tui/core/autoaudit/monitor.py @@ -82,7 +82,7 @@ def record( for hook in self._hooks: try: hook(event_type, payload) - except Exception as e: + except Exception: pass # Hooks não devem quebrar o monitor def record_sse_event(self, event: Any) -> None: diff --git a/packages/vertice-core/src/vertice_core/tui/core/autoaudit/scenarios.py b/packages/vertice-core/src/vertice_core/tui/core/autoaudit/scenarios.py index 5e2babd5..88a81f28 100644 --- a/packages/vertice-core/src/vertice_core/tui/core/autoaudit/scenarios.py +++ b/packages/vertice-core/src/vertice_core/tui/core/autoaudit/scenarios.py @@ -293,7 +293,7 @@ def load_custom_scenarios(yaml_path: Path) -> List[AuditScenario]: ) ) return scenarios - except Exception as e: + except Exception: return [] diff --git a/packages/vertice-core/src/vertice_core/tui/core/autoaudit/service.py b/packages/vertice-core/src/vertice_core/tui/core/autoaudit/service.py index 156a1195..48684005 100644 --- a/packages/vertice-core/src/vertice_core/tui/core/autoaudit/service.py +++ b/packages/vertice-core/src/vertice_core/tui/core/autoaudit/service.py @@ -127,7 +127,7 @@ async def run( executor = get_safe_executor() executor.set_audit_mode(True) - except Exception as e: + except Exception: pass # Safe executor may not exist # Filtra por categoria @@ -205,7 +205,7 @@ async def run( executor = get_safe_executor() executor.set_audit_mode(False) - except Exception as e: + except Exception: pass # --- PROMETHEUS SELF-HEALING --- @@ -379,13 +379,13 @@ def _get_memory_snapshot(self) -> Dict[str, Any]: "tools": self.bridge.tools.get_tool_count(), "context_size": len(self.bridge.history.get_context()), } - except Exception as e: + except Exception: return {} def _get_context(self) -> List[Dict[str, Any]]: try: return self.bridge.history.get_context()[-5:] # type: ignore[no-any-return] - except Exception as e: + except Exception: return [] async def _run_vertex_diagnostic(self, scenario: AuditScenario) -> ScenarioResult: diff --git a/packages/vertice-core/src/vertice_core/tui/core/autoaudit/vertex_diagnostic.py b/packages/vertice-core/src/vertice_core/tui/core/autoaudit/vertex_diagnostic.py index d8750944..2ededf2d 100644 --- a/packages/vertice-core/src/vertice_core/tui/core/autoaudit/vertex_diagnostic.py +++ b/packages/vertice-core/src/vertice_core/tui/core/autoaudit/vertex_diagnostic.py @@ -143,9 +143,7 @@ async def run(self) -> VertexAIDiagnosticReport: overall = ( "OK" if all(s.status == "OK" for s in self.steps) - else "PARTIAL" - if any(s.status == "OK" for s in self.steps) - else "FAIL" + else "PARTIAL" if any(s.status == "OK" for s in self.steps) else "FAIL" ) recommendations = self._generate_recommendations() @@ -325,9 +323,11 @@ async def _run_inference_test(self) -> None: step.details = { "model_used": model_name, "response_preview": response.text[:50], - "tokens_used": getattr(response.usage_metadata, "total_token_count", "N/A") - if hasattr(response, "usage_metadata") - else "N/A", + "tokens_used": ( + getattr(response.usage_metadata, "total_token_count", "N/A") + if hasattr(response, "usage_metadata") + else "N/A" + ), } else: step.status = "FAIL" diff --git a/packages/vertice-core/src/vertice_core/tui/core/bridge.py b/packages/vertice-core/src/vertice_core/tui/core/bridge.py index 8055c0f7..392fe6ef 100644 --- a/packages/vertice-core/src/vertice_core/tui/core/bridge.py +++ b/packages/vertice-core/src/vertice_core/tui/core/bridge.py @@ -402,17 +402,17 @@ def _build_system_prompt_sync(self) -> str: try: tool_schemas = self.tools.get_schemas_for_llm() if self.tools else [] - except Exception as e: + except Exception: tool_schemas = [] try: context = get_dynamic_context() - except Exception as e: + except Exception: context = {"cwd": os.getcwd()} try: project_memory = load_project_memory() - except Exception as e: + except Exception: project_memory = None user_memory = None @@ -420,7 +420,7 @@ def _build_system_prompt_sync(self) -> str: memory_result = self.read_memory(scope="project") if memory_result.get("success"): user_memory = memory_result.get("content") - except Exception as e: + except Exception: user_memory = None return build_agentic_system_prompt( diff --git a/packages/vertice-core/src/vertice_core/tui/core/caching.py b/packages/vertice-core/src/vertice_core/tui/core/caching.py index 7e10dd33..4c4afddc 100644 --- a/packages/vertice-core/src/vertice_core/tui/core/caching.py +++ b/packages/vertice-core/src/vertice_core/tui/core/caching.py @@ -112,7 +112,7 @@ def _estimate_size(self, value: Any) -> int: return sum(len(str(k)) + self._estimate_size(v) for k, v in value.items()) else: return len(str(value).encode("utf-8")) - except Exception as e: + except Exception: return 1024 # Default estimate def _cleanup_expired(self): diff --git a/packages/vertice-core/src/vertice_core/tui/core/data_protection.py b/packages/vertice-core/src/vertice_core/tui/core/data_protection.py index eb144a95..2b763dcb 100644 --- a/packages/vertice-core/src/vertice_core/tui/core/data_protection.py +++ b/packages/vertice-core/src/vertice_core/tui/core/data_protection.py @@ -308,7 +308,7 @@ def _get_master_key() -> bytes: # Decode from base64 if provided try: return base64.b64decode(env_key) - except Exception as e: + except Exception: logger.warning("Invalid VERTICE_MASTER_KEY format, using generated key") # Generate and log warning about missing key diff --git a/packages/vertice-core/src/vertice_core/tui/core/error_tracking.py b/packages/vertice-core/src/vertice_core/tui/core/error_tracking.py index 0a7f260e..823ea983 100644 --- a/packages/vertice-core/src/vertice_core/tui/core/error_tracking.py +++ b/packages/vertice-core/src/vertice_core/tui/core/error_tracking.py @@ -371,7 +371,7 @@ def _get_stack_trace(self, error: Exception) -> Optional[str]: try: return "".join(traceback.format_exception(type(error), error, error.__traceback__)) - except Exception as e: + except Exception: return None diff --git a/packages/vertice-core/src/vertice_core/tui/core/http_pool.py b/packages/vertice-core/src/vertice_core/tui/core/http_pool.py index 72fe6824..5b734d0c 100644 --- a/packages/vertice-core/src/vertice_core/tui/core/http_pool.py +++ b/packages/vertice-core/src/vertice_core/tui/core/http_pool.py @@ -146,7 +146,7 @@ def _extract_host(self, url: str) -> str: parsed = urlparse(url) return parsed.netloc or parsed.path - except Exception as e: + except Exception: return url @backoff.on_exception( diff --git a/packages/vertice-core/src/vertice_core/tui/core/managers/auth_manager.py b/packages/vertice-core/src/vertice_core/tui/core/managers/auth_manager.py index 96f3dab6..dbc1c784 100644 --- a/packages/vertice-core/src/vertice_core/tui/core/managers/auth_manager.py +++ b/packages/vertice-core/src/vertice_core/tui/core/managers/auth_manager.py @@ -114,7 +114,7 @@ async def test_api_key(self, key: str, provider: str) -> bool: return True except AuthenticationError: return False - except Exception as e: + except Exception: # Catch other exceptions during client initialization or API call return False diff --git a/packages/vertice-core/src/vertice_core/tui/core/managers/status_manager.py b/packages/vertice-core/src/vertice_core/tui/core/managers/status_manager.py index aa4a5dd1..594d9bfa 100644 --- a/packages/vertice-core/src/vertice_core/tui/core/managers/status_manager.py +++ b/packages/vertice-core/src/vertice_core/tui/core/managers/status_manager.py @@ -109,9 +109,7 @@ def check_health(self) -> Dict[str, Dict[str, Any]]: "status": ( "healthy" if agent_count >= 3 - else "degraded" - if agent_count > 0 - else "unhealthy" + else "degraded" if agent_count > 0 else "unhealthy" ), "message": f"{agent_count} agents available", "count": agent_count, diff --git a/packages/vertice-core/src/vertice_core/tui/handlers/claude_parity_tasks.py b/packages/vertice-core/src/vertice_core/tui/handlers/claude_parity_tasks.py index 1cdee6bc..57ddf9e0 100644 --- a/packages/vertice-core/src/vertice_core/tui/handlers/claude_parity_tasks.py +++ b/packages/vertice-core/src/vertice_core/tui/handlers/claude_parity_tasks.py @@ -56,9 +56,7 @@ async def _handle_bashes(self, args: str, view: "ResponseView") -> None: status_icon = ( "🟢" if t["status"] == "running" - else "✅" - if t["status"] == "completed" - else "❌" + else "✅" if t["status"] == "completed" else "❌" ) lines.append(f"{status_icon} `{t['id']}` - {t['command']} ({t['status']})") view.add_system_message("\n".join(lines)) @@ -211,9 +209,7 @@ async def _handle_subagents(self, args: str, view: "ResponseView") -> None: status_icon = ( "🟢" if s["status"] == "running" - else "✅" - if s["status"] == "completed" - else "❌" + else "✅" if s["status"] == "completed" else "❌" ) lines.append( f"{status_icon} `{s['id']}` - **{s['type']}** ({s['status']})\n" diff --git a/packages/vertice-core/src/vertice_core/tui/widgets/fuzzy_search_modal.py b/packages/vertice-core/src/vertice_core/tui/widgets/fuzzy_search_modal.py index 5525febb..a06c706a 100644 --- a/packages/vertice-core/src/vertice_core/tui/widgets/fuzzy_search_modal.py +++ b/packages/vertice-core/src/vertice_core/tui/widgets/fuzzy_search_modal.py @@ -237,7 +237,7 @@ async def _load_session_messages(self, session_id: str) -> List[Dict[str, Any]]: try: # This would call session_manager.get_session_messages(session_id) return [] # Placeholder - except Exception as e: + except Exception: return [] async def _get_recent_sessions(self, limit: int) -> List[str]: @@ -246,7 +246,7 @@ async def _get_recent_sessions(self, limit: int) -> List[str]: try: # This would call session_manager.get_recent_sessions(limit) return [] # Placeholder - except Exception as e: + except Exception: return [] def _extract_context(self, content: str, query: str) -> str: diff --git a/packages/vertice-core/src/vertice_core/tui/widgets/performance_hud.py b/packages/vertice-core/src/vertice_core/tui/widgets/performance_hud.py index b4bb993f..0aaffd5b 100644 --- a/packages/vertice-core/src/vertice_core/tui/widgets/performance_hud.py +++ b/packages/vertice-core/src/vertice_core/tui/widgets/performance_hud.py @@ -143,7 +143,7 @@ def update_metrics( # Only update display if widget is mounted try: self._update_display() - except Exception as e: + except Exception: pass # Silently fail if not mounted yet def toggle_visibility(self) -> None: diff --git a/packages/vertice-core/src/vertice_core/tui/widgets/response_view.py b/packages/vertice-core/src/vertice_core/tui/widgets/response_view.py index e3c2001e..1a767b4f 100644 --- a/packages/vertice-core/src/vertice_core/tui/widgets/response_view.py +++ b/packages/vertice-core/src/vertice_core/tui/widgets/response_view.py @@ -301,7 +301,7 @@ def _compact_old_renderables(self, candidates: list[Widget]) -> None: language = aliases[0] elif lexer is not None and getattr(lexer, "name", None): language = str(getattr(lexer, "name")).lower() - except Exception as e: + except Exception: language = "text" preview_lines = min(max(self._get_max_code_lines(), 1), 50) @@ -334,7 +334,7 @@ def _get_static_renderable(widget: Widget) -> object | None: # Fallback: `render()` may wrap Rich renderables in a RichVisual. try: visual = widget.render() - except Exception as e: + except Exception: return None return getattr(visual, "_renderable", visual) @@ -417,7 +417,7 @@ async def end_thinking(self) -> None: if self._markdown_stream is not None: try: await self._markdown_stream.stop() - except Exception as e: + except Exception: pass finally: self._markdown_stream = None diff --git a/packages/vertice-core/src/vertice_core/tui/widgets/session_tabs.py b/packages/vertice-core/src/vertice_core/tui/widgets/session_tabs.py index 992a3a3a..3493748a 100644 --- a/packages/vertice-core/src/vertice_core/tui/widgets/session_tabs.py +++ b/packages/vertice-core/src/vertice_core/tui/widgets/session_tabs.py @@ -335,7 +335,7 @@ def _save_session_visual_state(self, session_id: str) -> None: # the actual rendered content snapshot session.viewport_content = f"Content snapshot at {datetime.now().isoformat()}" - except Exception as e: + except Exception: # Silently fail if visual state can't be saved pass @@ -355,7 +355,7 @@ def _restore_session_visual_state(self, session_id: str) -> None: # Restore scroll position content_widget.scroll_y = session.scroll_position - except Exception as e: + except Exception: # Silently fail if visual state can't be restored pass diff --git a/packages/vertice-core/src/vertice_core/tui/widgets/status_bar.py b/packages/vertice-core/src/vertice_core/tui/widgets/status_bar.py index a75c43ec..43b0534f 100644 --- a/packages/vertice-core/src/vertice_core/tui/widgets/status_bar.py +++ b/packages/vertice-core/src/vertice_core/tui/widgets/status_bar.py @@ -263,7 +263,7 @@ def _update_mini_meter(self) -> None: meter = self.query_one("#mini-meter", MiniTokenMeter) meter.used = self.token_used meter.limit = self.token_limit - except Exception as e: + except Exception: pass def update_tokens(self, used: int, limit: int) -> None: diff --git a/packages/vertice-core/src/vertice_core/utils/parsing.py b/packages/vertice-core/src/vertice_core/utils/parsing.py index a2a1087f..24bf1a40 100644 --- a/packages/vertice-core/src/vertice_core/utils/parsing.py +++ b/packages/vertice-core/src/vertice_core/utils/parsing.py @@ -101,12 +101,10 @@ def __init__( self.strategy = strategy @overload - def extract(self, text: str) -> dict[str, Any]: - ... + def extract(self, text: str) -> dict[str, Any]: ... @overload - def extract(self, text: str, default: T) -> dict[str, Any] | T: - ... + def extract(self, text: str, default: T) -> dict[str, Any] | T: ... def extract( self, diff --git a/tests/unit/test_dependency_compliance.py b/tests/unit/test_dependency_compliance.py new file mode 100644 index 00000000..e5f0e7b9 --- /dev/null +++ b/tests/unit/test_dependency_compliance.py @@ -0,0 +1,29 @@ +""" +Test to verify dependency compliance with Project Singularity SDK 2026. +""" +import pytest +import importlib.metadata + +def test_google_cloud_aiplatform_version(): + """Verify google-cloud-aiplatform is 1.130.0.""" + version = importlib.metadata.version("google-cloud-aiplatform") + assert version == "1.130.0", f"Expected google-cloud-aiplatform==1.130.0, but got {version}" + +def test_google_genai_version(): + """Verify google-genai is 1.60.0.""" + version = importlib.metadata.version("google-genai") + assert version == "1.60.0", f"Expected google-genai==1.60.0, but got {version}" + +def test_google_genai_import(): + """Verify google.genai can be imported.""" + try: + import google.genai + except ImportError as e: + pytest.fail(f"Failed to import google.genai: {e}") + +def test_aiplatform_reasoning_engine_import(): + """Verify vertexai.preview.reasoning_engines is importable (part of 1.130.0 feature set).""" + try: + from vertexai.preview import reasoning_engines + except ImportError as e: + pytest.fail(f"Failed to import vertexai.preview.reasoning_engines: {e}")