@intentsolutionsio/jeremy-vertex-engine 2.1.0 → 2.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -7,12 +7,14 @@ Expert inspector and orchestrator for **Vertex AI Agent Engine** - Google Cloud'
7
7
  ## ⚠️ Important: What This Plugin Is For
8
8
 
9
9
  **✅ THIS PLUGIN IS FOR:**
10
+
10
11
  - **Vertex AI Agent Engine** deployments (fully-managed runtime)
11
12
  - **ADK (Agent Development Kit)** agents deployed to Agent Engine
12
13
  - **Reasoning Engine API** resources (`google_vertex_ai_reasoning_engine`)
13
14
  - Agent Engine features: Memory Bank, Code Execution Sandbox, Sessions, A2A Protocol
14
15
 
15
16
  **❌ THIS PLUGIN IS NOT FOR:**
17
+
16
18
  - Cloud Run deployments (use `jeremy-genkit-terraform` or `jeremy-adk-terraform` with `--cloud-run` flag)
17
19
  - LangChain/LlamaIndex on other platforms
18
20
  - Self-hosted agent infrastructure
@@ -33,6 +35,7 @@ This plugin provides comprehensive inspection and validation capabilities for ag
33
35
  ### Required Google Cloud Setup
34
36
 
35
37
  **1. Google Cloud Project with APIs Enabled:**
38
+
36
39
  ```bash
37
40
  # Enable required APIs
38
41
  gcloud services enable aiplatform.googleapis.com \
@@ -44,6 +47,7 @@ gcloud services enable aiplatform.googleapis.com \
44
47
  ```
45
48
 
46
49
  **2. Authentication:**
50
+
47
51
  ```bash
48
52
  # Application Default Credentials
49
53
  gcloud auth application-default login
@@ -53,6 +57,7 @@ export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service-account-key.json"
53
57
  ```
54
58
 
55
59
  **3. Required IAM Permissions:**
60
+
56
61
  ```yaml
57
62
  # Minimum required roles for inspection:
58
63
  - roles/aiplatform.user # Query Agent Engine resources
@@ -65,6 +70,7 @@ export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service-account-key.json"
65
70
  ### Required Python Packages
66
71
 
67
72
  **Install via pip:**
73
+
68
74
  ```bash
69
75
  # Core Vertex AI SDK (with Agent Engine support)
70
76
  pip install google-cloud-aiplatform[agent_engines]>=1.120.0
@@ -82,6 +88,7 @@ pip install a2a-sdk>=0.3.4
82
88
  ```
83
89
 
84
90
  **All dependencies at once:**
91
+
85
92
  ```bash
86
93
  pip install --upgrade \
87
94
  'google-cloud-aiplatform[agent_engines]>=1.120.0' \
@@ -97,6 +104,7 @@ pip install --upgrade \
97
104
  The `gcloud` CLI is used for IAM policy queries, Cloud Monitoring, and Cloud Logging -- **not** for Agent Engine CRUD operations. There is no `gcloud ai agents`, `gcloud ai reasoning-engines`, or `gcloud alpha ai agent-engines` CLI surface. All Agent Engine operations use the Python SDK.
98
105
 
99
106
  **Install gcloud CLI:**
107
+
100
108
  ```bash
101
109
  # Install gcloud (if not already installed)
102
110
  curl https://sdk.cloud.google.com | bash
@@ -107,6 +115,7 @@ gcloud components update
107
115
  ```
108
116
 
109
117
  **Verify Installation:**
118
+
110
119
  ```bash
111
120
  gcloud --version
112
121
  # Should show: Google Cloud SDK 450.0.0+ (or higher)
@@ -125,6 +134,7 @@ for engine in client.agent_engines.list():
125
134
  **This plugin works with agents deployed via:**
126
135
 
127
136
  1. **ADK Deployment to Agent Engine:**
137
+
128
138
  ```python
129
139
  import vertexai
130
140
  from google.adk.agents import Agent
@@ -141,7 +151,8 @@ agent_engine = client.agent_engines.create(
141
151
  )
142
152
  ```
143
153
 
144
- 2. **Terraform Deployment:**
154
+ 1. **Terraform Deployment:**
155
+
145
156
  ```hcl
146
157
  resource "google_vertex_ai_reasoning_engine" "agent" {
147
158
  display_name = "my-agent"
@@ -160,7 +171,8 @@ resource "google_vertex_ai_reasoning_engine" "agent" {
160
171
  }
161
172
  ```
162
173
 
163
- 3. **Direct SDK Deployment:**
174
+ 1. **Direct SDK Deployment:**
175
+
164
176
  ```python
165
177
  # Custom agent template (NOT LangChain)
166
178
  from vertexai.preview.reasoning_engines import ReasoningEngine
@@ -193,9 +205,11 @@ agent = ReasoningEngine.create(
193
205
  ## Components
194
206
 
195
207
  ### Agent
208
+
196
209
  - **vertex-engine-inspector**: Comprehensive agent inspector with validation logic
197
210
 
198
211
  ### Skills (Auto-Activating)
212
+
199
213
  - **vertex-engine-inspector**: Triggers on "inspect agent engine", "validate deployment"
200
214
  - **Tool Permissions**: Read, Grep, Glob, Bash (read-only)
201
215
  - **Version**: 2.1.0 (2026 schema compliant)
@@ -279,45 +293,58 @@ The plugin generates a production readiness score based on:
279
293
  ## Integration with Other Plugins
280
294
 
281
295
  ### jeremy-adk-orchestrator
296
+
282
297
  - Orchestrator deploys → Inspector validates
283
298
  - Continuous feedback loop
284
299
 
285
300
  ### jeremy-vertex-validator
301
+
286
302
  - Validator checks code → Inspector checks runtime
287
303
  - Pre/post deployment validation
288
304
 
289
305
  ### jeremy-adk-terraform
306
+
290
307
  - Terraform provisions → Inspector validates
291
308
  - Infrastructure verification
292
309
 
293
310
  ## Use Cases
294
311
 
295
312
  ### Pre-Production Validation
313
+
296
314
  Before deploying to production:
315
+
297
316
  ```
298
317
  "Run production readiness check on staging agent"
299
318
  ```
300
319
 
301
320
  ### Post-Deployment Verification
321
+
302
322
  After deployment:
323
+
303
324
  ```
304
325
  "Validate agent-xyz deployment was successful"
305
326
  ```
306
327
 
307
328
  ### Ongoing Health Monitoring
329
+
308
330
  Regular health checks:
331
+
309
332
  ```
310
333
  "Monitor agent health for the last 7 days"
311
334
  ```
312
335
 
313
336
  ### Security Audits
337
+
314
338
  Compliance validation:
339
+
315
340
  ```
316
341
  "Perform security audit on production agents"
317
342
  ```
318
343
 
319
344
  ### Troubleshooting
345
+
320
346
  When issues occur:
347
+
321
348
  ```
322
349
  "Why is my agent responding slowly?"
323
350
  "Investigate high error rate on agent-abc"
@@ -348,12 +375,14 @@ Status: 🟢 PRODUCTION READY (87%)
348
375
  **New in 2025**: Vertex AI Agent Engine provides a built-in observability dashboard for monitoring agent performance.
349
376
 
350
377
  **Access the Dashboard:**
378
+
351
379
  ```bash
352
380
  # Navigate to Cloud Console
353
381
  https://console.cloud.google.com/vertex-ai/agent-engines/[AGENT_ENGINE_ID]/observability?project=[PROJECT_ID]
354
382
  ```
355
383
 
356
384
  **Key Metrics Available:**
385
+
357
386
  - **Request Volume**: Total queries processed over time
358
387
  - **Latency Distribution**: p50, p90, p95, p99 response times
359
388
  - **Error Rates**: Failed requests, timeout errors, model errors
@@ -393,6 +422,7 @@ with tracer.start_as_current_span("agent_query") as span:
393
422
  ```
394
423
 
395
424
  **View traces in Cloud Console:**
425
+
396
426
  ```bash
397
427
  # Navigate to Trace Explorer
398
428
  https://console.cloud.google.com/traces/list?project=[PROJECT_ID]
@@ -510,6 +540,7 @@ policy = policy_client.create_alert_policy(
510
540
  ```
511
541
 
512
542
  **Common alert conditions:**
543
+
513
544
  - Error rate exceeds 5% for 5 minutes
514
545
  - p95 latency exceeds 10 seconds
515
546
  - Memory Bank cache hit rate drops below 60%
@@ -1,9 +1,36 @@
1
1
  ---
2
2
  name: vertex-engine-inspector
3
- description: >
4
- Expert inspector for Vertex AI Agent Engine deployments. Validates
5
- runtime...
3
+ description: Expert inspector for Vertex AI Agent Engine deployments. Validates runtime...
4
+ tools:
5
+ - Read
6
+ - Write
7
+ - Edit
8
+ - Bash
9
+ - Glob
10
+ - Grep
11
+ - WebFetch
12
+ - WebSearch
13
+ - Task
14
+ - TodoWrite
6
15
  model: sonnet
16
+ color: orange
17
+ version: 1.0.0
18
+ author: Jeremy Longshore <jeremy@intentsolutions.io>
19
+ tags:
20
+ - ai-ml
21
+ - vertex
22
+ - engine
23
+ - inspector
24
+ disallowedTools: []
25
+ skills: []
26
+ background: false
27
+ # ── upgrade levers — uncomment + set when tuning this agent ──
28
+ # effort: high # reasoning depth: low/medium/high/xhigh/max (omit = inherit session)
29
+ # maxTurns: 50 # cap the agentic loop (omit = engine default)
30
+ # memory: project # persistent scope: user/project/local (omit = ephemeral)
31
+ # isolation: worktree # run in an isolated git worktree
32
+ # initialPrompt: "…" # seed the agent's first turn
33
+ # hooks / mcpServers / permissionMode → set at the PLUGIN level, not on a plugin agent
7
34
  ---
8
35
  # Vertex AI Engine Inspector
9
36
 
@@ -411,6 +438,7 @@ def validate_production_readiness(agent):
411
438
  ## When to Use This Agent
412
439
 
413
440
  Activate this agent when you need to:
441
+
414
442
  - Inspect deployed Agent Engine agents
415
443
  - Validate Code Execution Sandbox configuration
416
444
  - Check Memory Bank settings
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intentsolutionsio/jeremy-vertex-engine",
3
- "version": "2.1.0",
3
+ "version": "2.1.6",
4
4
  "description": "Vertex AI Agent Engine deployment inspector and runtime validator",
5
5
  "keywords": [
6
6
  "vertex-ai",
@@ -1,15 +1,25 @@
1
1
  ---
2
2
  name: vertex-engine-inspector
3
- description: |
4
- Inspect and validate Vertex AI Agent Engine deployments including Code Execution Sandbox, Memory Bank, A2A protocol compliance, and security posture. Generates production readiness scores. Use when asked to inspect, validate, or audit an Agent Engine deployment. Trigger with "inspect agent engine", "validate agent engine deployment", "check agent engine config", "audit agent engine security", "agent engine readiness check", "vertex engine health", or "reasoning engine status".
3
+ description: 'Inspect and validate Vertex AI Agent Engine deployments including Code
4
+ Execution Sandbox, Memory Bank, A2A protocol compliance, and security posture. Generates
5
+ production readiness scores. Use when asked to inspect, validate, or audit an Agent
6
+ Engine deployment. Trigger with "inspect agent engine", "validate agent engine deployment",
7
+ "check agent engine config", "audit agent engine security", "agent engine readiness
8
+ check", "vertex engine health", or "reasoning engine status".
9
+
10
+ '
5
11
  allowed-tools: Read, Grep, Glob, Bash(cmd:*)
6
12
  version: 2.1.0
7
13
  author: Jeremy Longshore <jeremy@intentsolutions.io>
8
14
  license: MIT
9
- compatible-with: claude-code, codex, openclaw
10
- argument-hint: "<project-id> <agent-engine-id> [location]"
15
+ argument-hint: <project-id> <agent-engine-id> [location]
11
16
  effort: high
12
- tags: [ai, deployment, security, compliance]
17
+ tags:
18
+ - ai
19
+ - deployment
20
+ - security
21
+ - compliance
22
+ compatibility: Designed for Claude Code, also compatible with Codex and OpenClaw
13
23
  ---
14
24
  # Vertex Engine Inspector
15
25
 
@@ -77,8 +87,8 @@ See `${CLAUDE_SKILL_DIR}/references/errors.md` for additional error scenarios.
77
87
 
78
88
  ## Resources
79
89
 
80
- - [Vertex AI Agent Engine Documentation](https://cloud.google.com/vertex-ai/docs/agents) -- deployment and configuration
81
- - [A2A Protocol Specification](https://google.github.io/A2A/) -- AgentCard, Task API, protocol compliance
90
+ - Vertex AI Agent Engine Documentation -- deployment and configuration
91
+ - A2A Protocol Specification -- AgentCard, Task API, protocol compliance
82
92
  - [Cloud Monitoring API](https://cloud.google.com/monitoring/api/v3) -- metrics queries and dashboard configuration
83
93
  - [VPC Service Controls](https://cloud.google.com/vpc-service-controls/docs) -- perimeter setup and access policies
84
- - [Model Armor](https://cloud.google.com/vertex-ai/docs/generative-ai/model-armor) -- prompt injection protection configuration
94
+ - Model Armor -- prompt injection protection configuration
@@ -21,6 +21,7 @@
21
21
  ## Common gcloud CLI Misconceptions
22
22
 
23
23
  **There is no `gcloud` CLI for Agent Engine.** The following commands do NOT exist and will fail:
24
+
24
25
  - `gcloud ai agents describe` / `gcloud ai agents list`
25
26
  - `gcloud ai reasoning-engines list`
26
27
  - `gcloud alpha ai agent-engines list`
@@ -47,4 +47,4 @@ Recommendations:
47
47
  2. Configure automated backups (compliance +5%)
48
48
  3. Add circuit breaker pattern (reliability +5%)
49
49
  4. Optimize memory bank indexing (performance +3%)
50
- ```
50
+ ```
@@ -3,6 +3,7 @@
3
3
  ## Inspection Categories
4
4
 
5
5
  ### 1. Runtime Configuration ✅
6
+
6
7
  - Model selection (Gemini 2.5 Pro/Flash)
7
8
  - Tools enabled (Code Execution, Memory Bank, custom)
8
9
  - VPC configuration
@@ -10,6 +11,7 @@
10
11
  - Scaling policies
11
12
 
12
13
  ### 2. Code Execution Sandbox 🔒
14
+
13
15
  - **Security**: Isolated environment, no external network access
14
16
  - **State Persistence**: TTL validation (1-14 days)
15
17
  - **IAM**: Least privilege permissions
@@ -17,6 +19,7 @@
17
19
  - **Concurrent Executions**: Max concurrent code runs
18
20
 
19
21
  **Critical Checks**:
22
+
20
23
  ```
21
24
  ✅ State TTL between 7-14 days (optimal for production)
22
25
  ✅ Sandbox type is SECURE_ISOLATED
@@ -27,6 +30,7 @@
27
30
  ```
28
31
 
29
32
  ### 3. Memory Bank Configuration 🧠
33
+
30
34
  - **Enabled Status**: Persistent memory active
31
35
  - **Retention Policy**: Max memories, retention days
32
36
  - **Storage Backend**: Firestore encryption & region
@@ -34,6 +38,7 @@
34
38
  - **Auto-Cleanup**: Quota management
35
39
 
36
40
  **Critical Checks**:
41
+
37
42
  ```
38
43
  ✅ Max memories >= 100 (prevents conversation truncation)
39
44
  ✅ Indexing enabled (fast query performance)
@@ -43,6 +48,7 @@
43
48
  ```
44
49
 
45
50
  ### 4. A2A Protocol Compliance 🔗
51
+
46
52
  - **AgentCard**: Available at `/.well-known/agent-card`
47
53
  - **Task API**: `POST /v1/tasks:send` responds correctly
48
54
  - **Status API**: `GET /v1/tasks/{task_id}` accessible
@@ -50,6 +56,7 @@
50
56
  - **Required Fields**: name, description, tools, version
51
57
 
52
58
  **Compliance Report**:
59
+
53
60
  ```
54
61
  ✅ AgentCard accessible and valid
55
62
  ✅ Task submission API functional
@@ -60,6 +67,7 @@
60
67
  ```
61
68
 
62
69
  ### 5. Security Posture 🛡️
70
+
63
71
  - **IAM Roles**: Least privilege validation
64
72
  - **VPC Service Controls**: Perimeter protection
65
73
  - **Model Armor**: Prompt injection protection
@@ -68,6 +76,7 @@
68
76
  - **Secret Management**: No hardcoded credentials
69
77
 
70
78
  **Security Score**:
79
+
71
80
  ```
72
81
  🟢 SECURE (90-100%): Production ready
73
82
  🟡 NEEDS ATTENTION (70-89%): Address issues before prod
@@ -75,6 +84,7 @@
75
84
  ```
76
85
 
77
86
  ### 6. Performance Metrics 📊
87
+
78
88
  - **Auto-Scaling**: Min/max instances configured
79
89
  - **Resource Limits**: CPU, memory appropriate
80
90
  - **Latency**: P50, P95, P99 within SLOs
@@ -83,6 +93,7 @@
83
93
  - **Error Rate**: < 5% target
84
94
 
85
95
  **Health Status**:
96
+
86
97
  ```
87
98
  🟢 HEALTHY: Error rate < 5%, latency < 3s (p95)
88
99
  🟡 DEGRADED: Error rate 5-10% or latency 3-5s
@@ -90,6 +101,7 @@
90
101
  ```
91
102
 
92
103
  ### 7. Monitoring & Observability 📈
104
+
93
105
  - **Cloud Monitoring**: Dashboards configured
94
106
  - **Alerting**: Policies for errors, latency, costs
95
107
  - **Logging**: Structured logs aggregated
@@ -97,8 +109,9 @@
97
109
  - **Error Tracking**: Cloud Error Reporting
98
110
 
99
111
  **Observability Score**:
112
+
100
113
  ```
101
114
  ✅ All 5 pillars configured: Metrics, Logs, Traces, Alerts, Dashboards
102
115
  ⚠️ Missing alerts for critical scenarios
103
116
  ❌ No monitoring configured (production blocker)
104
- ```
117
+ ```
@@ -3,6 +3,7 @@
3
3
  ## Inspection Workflow
4
4
 
5
5
  ### Phase 1: Configuration Analysis
6
+
6
7
  ```
7
8
  1. Connect to Agent Engine
8
9
  2. Retrieve agent metadata
@@ -13,6 +14,7 @@
13
14
  ```
14
15
 
15
16
  ### Phase 2: Protocol Validation
17
+
16
18
  ```
17
19
  1. Test AgentCard endpoint
18
20
  2. Validate AgentCard structure
@@ -22,6 +24,7 @@
22
24
  ```
23
25
 
24
26
  ### Phase 3: Security Audit
27
+
25
28
  ```
26
29
  1. Review IAM roles and permissions
27
30
  2. Check VPC Service Controls
@@ -32,6 +35,7 @@
32
35
  ```
33
36
 
34
37
  ### Phase 4: Performance Analysis
38
+
35
39
  ```
36
40
  1. Query Cloud Monitoring metrics
37
41
  2. Calculate error rate (last 24h)
@@ -42,6 +46,7 @@
42
46
  ```
43
47
 
44
48
  ### Phase 5: Production Readiness
49
+
45
50
  ```
46
51
  1. Run all checklist items (28 checks)
47
52
  2. Calculate category scores
@@ -49,4 +54,4 @@
49
54
  4. Determine readiness status
50
55
  5. Generate recommendations
51
56
  6. Create action plan
52
- ```
57
+ ```
@@ -26,23 +26,19 @@ CHECKS = {
26
26
  "audit_logging": {"weight": 10, "category": "Compliance"},
27
27
  }
28
28
 
29
+
29
30
  class Colors:
30
- GREEN = '\033[0;32m'
31
- YELLOW = '\033[1;33m'
32
- RED = '\033[0;31m'
33
- BLUE = '\033[0;34m'
34
- NC = '\033[0m'
31
+ GREEN = "\033[0;32m"
32
+ YELLOW = "\033[1;33m"
33
+ RED = "\033[0;31m"
34
+ BLUE = "\033[0;34m"
35
+ NC = "\033[0m"
35
36
 
36
37
 
37
38
  def run_command(cmd: List[str]) -> Tuple[int, str]:
38
39
  """Run command and return exit code and output"""
39
40
  try:
40
- result = subprocess.run(
41
- cmd,
42
- capture_output=True,
43
- text=True,
44
- timeout=30
45
- )
41
+ result = subprocess.run(cmd, capture_output=True, text=True, timeout=30)
46
42
  return result.returncode, result.stdout
47
43
  except Exception as e:
48
44
  return 1, str(e)
@@ -54,10 +50,13 @@ def check_iam_permissions(project_id: str, service_account: str) -> Tuple[bool,
54
50
  return False, "No service account configured"
55
51
 
56
52
  cmd = [
57
- "gcloud", "projects", "get-iam-policy", project_id,
53
+ "gcloud",
54
+ "projects",
55
+ "get-iam-policy",
56
+ project_id,
58
57
  "--flatten=bindings[].members",
59
58
  f"--filter=bindings.members:serviceAccount:{service_account}",
60
- "--format=json"
59
+ "--format=json",
61
60
  ]
62
61
 
63
62
  returncode, output = run_command(cmd)
@@ -84,10 +83,9 @@ def check_vpc_configuration(project_id: str, region: str, agent_id: str) -> Tupl
84
83
  """
85
84
  try:
86
85
  import vertexai
86
+
87
87
  client = vertexai.Client(project=project_id, location=region)
88
- engine = client.agent_engines.get(
89
- name=f"projects/{project_id}/locations/{region}/reasoningEngines/{agent_id}"
90
- )
88
+ engine = client.agent_engines.get(name=f"projects/{project_id}/locations/{region}/reasoningEngines/{agent_id}")
91
89
  # Check for VPC/network config in the engine metadata
92
90
  vpc_config = getattr(engine, "network", None) or getattr(engine, "network_config", None)
93
91
 
@@ -105,11 +103,7 @@ def check_encryption(project_id: str) -> Tuple[bool, str]:
105
103
  """Check encryption settings"""
106
104
  # For Vertex AI, encryption at rest is enabled by default
107
105
  # Check if customer-managed encryption keys (CMEK) are used
108
- cmd = [
109
- "gcloud", "kms", "keyrings", "list",
110
- f"--project={project_id}",
111
- "--format=json"
112
- ]
106
+ cmd = ["gcloud", "kms", "keyrings", "list", f"--project={project_id}", "--format=json"]
113
107
 
114
108
  returncode, output = run_command(cmd)
115
109
  if returncode != 0:
@@ -127,11 +121,7 @@ def check_encryption(project_id: str) -> Tuple[bool, str]:
127
121
 
128
122
  def check_audit_logging(project_id: str) -> Tuple[bool, str]:
129
123
  """Check if audit logging is enabled"""
130
- cmd = [
131
- "gcloud", "logging", "sinks", "list",
132
- f"--project={project_id}",
133
- "--format=json"
134
- ]
124
+ cmd = ["gcloud", "logging", "sinks", "list", f"--project={project_id}", "--format=json"]
135
125
 
136
126
  returncode, output = run_command(cmd)
137
127
  if returncode != 0:
@@ -210,13 +200,14 @@ def main():
210
200
  service_account = ""
211
201
  try:
212
202
  import vertexai
203
+
213
204
  client = vertexai.Client(project=project_id, location=region)
214
- engine = client.agent_engines.get(
215
- name=f"projects/{project_id}/locations/{region}/reasoningEngines/{agent_id}"
216
- )
205
+ engine = client.agent_engines.get(name=f"projects/{project_id}/locations/{region}/reasoningEngines/{agent_id}")
217
206
  service_account = getattr(engine, "service_account", "") or ""
218
207
  except ImportError:
219
- print(f"{Colors.YELLOW}Warning: vertexai SDK not installed. Install with: pip install google-cloud-aiplatform[agent_engines]{Colors.NC}")
208
+ print(
209
+ f"{Colors.YELLOW}Warning: vertexai SDK not installed. Install with: pip install google-cloud-aiplatform[agent_engines]{Colors.NC}"
210
+ )
220
211
  except Exception as e:
221
212
  print(f"{Colors.YELLOW}Warning: Could not retrieve agent engine info: {e}{Colors.NC}")
222
213
 
@@ -227,7 +218,7 @@ def main():
227
218
 
228
219
  results["service_account_configured"] = (
229
220
  bool(service_account),
230
- f"Service account: {service_account}" if service_account else "No service account"
221
+ f"Service account: {service_account}" if service_account else "No service account",
231
222
  )
232
223
 
233
224
  results["iam_least_privilege"] = check_iam_permissions(project_id, service_account)