@jaguilar87/gaia-ops 1.0.0
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/CHANGELOG.md +315 -0
- package/CLAUDE.md +154 -0
- package/LICENSE +21 -0
- package/README.md +221 -0
- package/agents/aws-troubleshooter.md +50 -0
- package/agents/claude-architect.md +821 -0
- package/agents/devops-developer.md +92 -0
- package/agents/gcp-troubleshooter.md +50 -0
- package/agents/gitops-operator.md +360 -0
- package/agents/terraform-architect.md +289 -0
- package/bin/gaia-init.js +620 -0
- package/commands/architect.md +97 -0
- package/commands/restore-session.md +87 -0
- package/commands/save-session.md +88 -0
- package/commands/session-status.md +61 -0
- package/commands/speckit.add-task.md +144 -0
- package/commands/speckit.analyze-task.md +65 -0
- package/commands/speckit.implement.md +96 -0
- package/commands/speckit.init.md +237 -0
- package/commands/speckit.plan.md +88 -0
- package/commands/speckit.specify.md +161 -0
- package/commands/speckit.tasks.md +188 -0
- package/config/AGENTS.md +162 -0
- package/config/agent-catalog.md +604 -0
- package/config/context-contracts.md +682 -0
- package/config/git-standards.md +674 -0
- package/config/git_standards.json +69 -0
- package/config/orchestration-workflow.md +735 -0
- package/hooks/__pycache__/post_tool_use.cpython-312.pyc +0 -0
- package/hooks/__pycache__/pre_kubectl_security.cpython-312.pyc +0 -0
- package/hooks/__pycache__/pre_tool_use.cpython-312.pyc +0 -0
- package/hooks/__pycache__/session_start.cpython-312.pyc +0 -0
- package/hooks/__pycache__/subagent_stop.cpython-312.pyc +0 -0
- package/hooks/post_tool_use.py +463 -0
- package/hooks/pre_kubectl_security.py +205 -0
- package/hooks/pre_tool_use.py +530 -0
- package/hooks/session_start.py +315 -0
- package/hooks/subagent_stop.py +549 -0
- package/index.js +92 -0
- package/package.json +59 -0
- package/speckit/README.en.md +648 -0
- package/speckit/README.md +353 -0
- package/speckit/governance.md +169 -0
- package/speckit/scripts/check-prerequisites.sh +194 -0
- package/speckit/scripts/common.sh +126 -0
- package/speckit/scripts/create-new-feature.sh +131 -0
- package/speckit/scripts/init.sh +42 -0
- package/speckit/scripts/setup-plan.sh +95 -0
- package/speckit/scripts/update-agent-context.sh +718 -0
- package/speckit/templates/adr-template.md +118 -0
- package/speckit/templates/agent-file-template.md +23 -0
- package/speckit/templates/plan-template.md +233 -0
- package/speckit/templates/spec-template.md +116 -0
- package/speckit/templates/tasks-template-bkp.md +136 -0
- package/speckit/templates/tasks-template.md +345 -0
- package/templates/CLAUDE.template.md +170 -0
- package/templates/code-examples/approval_gate_workflow.py +141 -0
- package/templates/code-examples/clarification_workflow.py +94 -0
- package/templates/code-examples/commit_validation.py +86 -0
- package/templates/project-context.template.json +126 -0
- package/templates/settings.template.json +307 -0
- package/tools/__pycache__/agent_router.cpython-312.pyc +0 -0
- package/tools/__pycache__/approval_gate.cpython-312.pyc +0 -0
- package/tools/__pycache__/clarify_engine.cpython-312.pyc +0 -0
- package/tools/__pycache__/clarify_patterns.cpython-312.pyc +0 -0
- package/tools/__pycache__/commit_validator.cpython-312.pyc +0 -0
- package/tools/__pycache__/context_section_reader.cpython-312.pyc +0 -0
- package/tools/__pycache__/routing_dashboard.cpython-312.pyc +0 -0
- package/tools/__pycache__/routing_feedback.cpython-312.pyc +0 -0
- package/tools/__pycache__/semantic_matcher.cpython-312.pyc +0 -0
- package/tools/__pycache__/task_manager.cpython-312.pyc +0 -0
- package/tools/agent_capabilities.json +231 -0
- package/tools/agent_invoker_helper.py +239 -0
- package/tools/agent_router.py +730 -0
- package/tools/approval_gate.py +318 -0
- package/tools/clarify_engine.py +511 -0
- package/tools/clarify_patterns.py +356 -0
- package/tools/commit_validator.py +338 -0
- package/tools/context_provider.py +181 -0
- package/tools/context_section_reader.py +301 -0
- package/tools/demo_clarify.py +104 -0
- package/tools/generate_embeddings.py +168 -0
- package/tools/quicktriage_aws_troubleshooter.sh +45 -0
- package/tools/quicktriage_devops_developer.sh +38 -0
- package/tools/quicktriage_gcp_troubleshooter.sh +51 -0
- package/tools/quicktriage_gitops_operator.sh +47 -0
- package/tools/quicktriage_terraform_architect.sh +40 -0
- package/tools/semantic_matcher.py +222 -0
- package/tools/task_manager.py +547 -0
- package/tools/task_manager_README.md +395 -0
- package/tools/task_manager_example.py +215 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Phase 0: Clarification Workflow Example
|
|
2
|
+
# Use when user request contains ambiguous terms or missing context
|
|
3
|
+
|
|
4
|
+
import sys
|
|
5
|
+
sys.path.insert(0, '/home/jaguilar/aaxis/rnd/repositories/.claude/tools')
|
|
6
|
+
from clarify_engine import request_clarification, process_clarification
|
|
7
|
+
|
|
8
|
+
# Example 1: Detect ambiguity
|
|
9
|
+
def detect_ambiguity(user_prompt: str, command_context: dict):
|
|
10
|
+
"""
|
|
11
|
+
Detect if user request needs clarification.
|
|
12
|
+
"""
|
|
13
|
+
clarification_data = request_clarification(
|
|
14
|
+
user_prompt=user_prompt,
|
|
15
|
+
command_context=command_context # {"command": "general_prompt"} or speckit command
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
# Check if clarification needed
|
|
19
|
+
if not clarification_data["needs_clarification"]:
|
|
20
|
+
# No ambiguity, proceed with original prompt
|
|
21
|
+
return {"skip_clarification": True, "prompt": user_prompt}
|
|
22
|
+
|
|
23
|
+
# Ambiguity detected, need to ask user
|
|
24
|
+
return {
|
|
25
|
+
"skip_clarification": False,
|
|
26
|
+
"clarification_data": clarification_data
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# Example 2: Present clarification questions
|
|
31
|
+
def present_clarification(clarification_data: dict):
|
|
32
|
+
"""
|
|
33
|
+
Present ambiguity summary and ask questions.
|
|
34
|
+
"""
|
|
35
|
+
# Show summary to user
|
|
36
|
+
summary = clarification_data["summary"]
|
|
37
|
+
print(f"Ambiguity detected: {summary}")
|
|
38
|
+
|
|
39
|
+
# Ask questions using AskUserQuestion tool
|
|
40
|
+
question_config = clarification_data["question_config"]
|
|
41
|
+
# response = AskUserQuestion(**question_config)
|
|
42
|
+
|
|
43
|
+
return question_config
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
# Example 3: Process user responses
|
|
47
|
+
def process_user_responses(clarification_data: dict, user_responses: dict, original_prompt: str):
|
|
48
|
+
"""
|
|
49
|
+
Generate enriched prompt from user responses.
|
|
50
|
+
"""
|
|
51
|
+
result = process_clarification(
|
|
52
|
+
engine_instance=clarification_data["engine_instance"],
|
|
53
|
+
original_prompt=original_prompt,
|
|
54
|
+
user_responses=user_responses,
|
|
55
|
+
clarification_context=clarification_data["clarification_context"]
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
enriched_prompt = result["enriched_prompt"]
|
|
59
|
+
|
|
60
|
+
# Example: "revisa el servicio" + {service: "tcm-api", namespace: "tcm-non-prod"}
|
|
61
|
+
# Becomes: "revisa el servicio tcm-api en el namespace tcm-non-prod"
|
|
62
|
+
|
|
63
|
+
return enriched_prompt
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
# Example 4: Full clarification workflow
|
|
67
|
+
def clarification_workflow(user_prompt: str):
|
|
68
|
+
"""
|
|
69
|
+
Complete Phase 0 workflow.
|
|
70
|
+
"""
|
|
71
|
+
# Step 1: Detect ambiguity
|
|
72
|
+
detection = detect_ambiguity(user_prompt, {"command": "general_prompt"})
|
|
73
|
+
|
|
74
|
+
if detection["skip_clarification"]:
|
|
75
|
+
# No clarification needed
|
|
76
|
+
return detection["prompt"]
|
|
77
|
+
|
|
78
|
+
# Step 2: Get clarification data
|
|
79
|
+
clarification_data = detection["clarification_data"]
|
|
80
|
+
|
|
81
|
+
# Step 3: Ask user (via AskUserQuestion tool)
|
|
82
|
+
question_config = present_clarification(clarification_data)
|
|
83
|
+
# user_responses = AskUserQuestion(**question_config) # Simulated
|
|
84
|
+
|
|
85
|
+
# Step 4: Process responses and enrich prompt
|
|
86
|
+
user_responses = {"service": "tcm-api", "namespace": "tcm-non-prod"} # Example
|
|
87
|
+
enriched_prompt = process_user_responses(
|
|
88
|
+
clarification_data,
|
|
89
|
+
user_responses,
|
|
90
|
+
user_prompt
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
# Step 5: Use enriched prompt for Phase 1 (Routing)
|
|
94
|
+
return enriched_prompt
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Git Commit Validation Example
|
|
2
|
+
# Use this pattern for ALL commit operations (orchestrator and agents)
|
|
3
|
+
|
|
4
|
+
import sys
|
|
5
|
+
sys.path.insert(0, '/home/jaguilar/aaxis/rnd/repositories/.claude/tools')
|
|
6
|
+
from commit_validator import safe_validate_before_commit
|
|
7
|
+
|
|
8
|
+
# Example 1: Orchestrator-level commit (ad-hoc)
|
|
9
|
+
def orchestrator_commit(commit_message: str):
|
|
10
|
+
"""
|
|
11
|
+
Orchestrator creates ad-hoc commit.
|
|
12
|
+
"""
|
|
13
|
+
# Validate
|
|
14
|
+
if not safe_validate_before_commit(commit_message):
|
|
15
|
+
return {
|
|
16
|
+
"status": "failed",
|
|
17
|
+
"reason": "commit_message_validation_failed"
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
# Only if validation passes: proceed with git operations
|
|
21
|
+
# Execute: git add . && git commit -m "$commit_message"
|
|
22
|
+
return {"status": "success"}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
# Example 2: Agent-level commit (realization phase)
|
|
26
|
+
def agent_commit_in_realization(realization_package: dict):
|
|
27
|
+
"""
|
|
28
|
+
Agent creates commit as part of workflow realization.
|
|
29
|
+
"""
|
|
30
|
+
commit_message = realization_package["git_operations"]["commit_message"]
|
|
31
|
+
|
|
32
|
+
# Validate (same validation as orchestrator)
|
|
33
|
+
if not safe_validate_before_commit(commit_message):
|
|
34
|
+
return {
|
|
35
|
+
"status": "failed",
|
|
36
|
+
"reason": "commit_message_validation_failed",
|
|
37
|
+
"message": "Orchestrator provided invalid commit message"
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
# Proceed with git operations
|
|
41
|
+
# Execute: git add . && git commit -m "$commit_message" && git push
|
|
42
|
+
return {"status": "success"}
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
# Example 3: Generating commit message
|
|
46
|
+
def generate_commit_message(changes: dict) -> str:
|
|
47
|
+
"""
|
|
48
|
+
Generate commit message following Conventional Commits.
|
|
49
|
+
"""
|
|
50
|
+
commit_type = changes.get("type", "chore") # feat, fix, refactor, etc.
|
|
51
|
+
scope = changes.get("scope", "") # helmrelease, terraform, etc.
|
|
52
|
+
description = changes.get("description", "") # imperative mood, <72 chars
|
|
53
|
+
|
|
54
|
+
if scope:
|
|
55
|
+
return f"{commit_type}({scope}): {description}"
|
|
56
|
+
else:
|
|
57
|
+
return f"{commit_type}: {description}"
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
# Example 4: Handling validation failure
|
|
61
|
+
def commit_with_retry(commit_message: str, max_retries: int = 2):
|
|
62
|
+
"""
|
|
63
|
+
Attempt commit with validation, regenerate if fails.
|
|
64
|
+
"""
|
|
65
|
+
for attempt in range(max_retries):
|
|
66
|
+
if safe_validate_before_commit(commit_message):
|
|
67
|
+
# Valid, proceed
|
|
68
|
+
return {"status": "success", "message": commit_message}
|
|
69
|
+
|
|
70
|
+
# Invalid, regenerate
|
|
71
|
+
commit_message = regenerate_commit_message(commit_message, attempt)
|
|
72
|
+
|
|
73
|
+
# All attempts failed
|
|
74
|
+
return {
|
|
75
|
+
"status": "failed",
|
|
76
|
+
"reason": "Cannot generate valid commit message after retries"
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def regenerate_commit_message(original: str, attempt: int) -> str:
|
|
81
|
+
"""
|
|
82
|
+
Regenerate commit message after validation failure.
|
|
83
|
+
"""
|
|
84
|
+
# Implement regeneration logic based on validation errors
|
|
85
|
+
# Example: shorten if too long, fix imperative mood, remove forbidden footers
|
|
86
|
+
return original # Placeholder
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
{
|
|
2
|
+
"project_name": "YOUR_PROJECT_NAME",
|
|
3
|
+
"project_id_gcp": "your-gcp-project-id",
|
|
4
|
+
"description": "Brief description of your project",
|
|
5
|
+
"cloud_provider": "GCP",
|
|
6
|
+
"primary_region": "us-central1",
|
|
7
|
+
|
|
8
|
+
"infrastructure": {
|
|
9
|
+
"clusters": {
|
|
10
|
+
"primary": {
|
|
11
|
+
"name": "your-cluster-name",
|
|
12
|
+
"provider": "GCP",
|
|
13
|
+
"type": "GKE",
|
|
14
|
+
"region": "us-central1",
|
|
15
|
+
"node_pools": [],
|
|
16
|
+
"networking": {
|
|
17
|
+
"vpc": "your-vpc-name",
|
|
18
|
+
"subnet": "your-subnet-name"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
|
|
23
|
+
"databases": {
|
|
24
|
+
"primary_sql": {
|
|
25
|
+
"name": "your-postgres-instance",
|
|
26
|
+
"type": "Cloud SQL PostgreSQL",
|
|
27
|
+
"version": "15",
|
|
28
|
+
"tier": "db-custom-2-7680",
|
|
29
|
+
"region": "us-central1"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
|
|
33
|
+
"artifact_repositories": {
|
|
34
|
+
"docker": {
|
|
35
|
+
"name": "your-artifact-registry",
|
|
36
|
+
"format": "Docker",
|
|
37
|
+
"location": "us-central1"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
"gitops": {
|
|
43
|
+
"flux_version": "v2.x",
|
|
44
|
+
"repositories": {
|
|
45
|
+
"gitops": {
|
|
46
|
+
"url": "https://github.com/your-org/your-gitops-repo",
|
|
47
|
+
"path": "clusters/your-cluster",
|
|
48
|
+
"branch": "main"
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"namespaces": [
|
|
52
|
+
"default",
|
|
53
|
+
"your-app-namespace"
|
|
54
|
+
]
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
"services": {
|
|
58
|
+
"your_service_name": {
|
|
59
|
+
"description": "Your service description",
|
|
60
|
+
"type": "backend|frontend|worker",
|
|
61
|
+
"repository": "https://github.com/your-org/your-service-repo",
|
|
62
|
+
"deployment": {
|
|
63
|
+
"namespace": "your-app-namespace",
|
|
64
|
+
"replicas": 2,
|
|
65
|
+
"resources": {
|
|
66
|
+
"requests": {
|
|
67
|
+
"cpu": "100m",
|
|
68
|
+
"memory": "256Mi"
|
|
69
|
+
},
|
|
70
|
+
"limits": {
|
|
71
|
+
"cpu": "500m",
|
|
72
|
+
"memory": "512Mi"
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"endpoints": {
|
|
77
|
+
"internal": "http://your-service.your-namespace.svc.cluster.local:8080",
|
|
78
|
+
"external": "https://your-service.yourdomain.com"
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
|
|
83
|
+
"terraform": {
|
|
84
|
+
"version": "1.5+",
|
|
85
|
+
"backend": {
|
|
86
|
+
"type": "gcs",
|
|
87
|
+
"bucket": "your-terraform-state-bucket",
|
|
88
|
+
"prefix": "your-project/terraform/state"
|
|
89
|
+
},
|
|
90
|
+
"modules": [
|
|
91
|
+
{
|
|
92
|
+
"name": "gke-cluster",
|
|
93
|
+
"path": "terraform/modules/gke"
|
|
94
|
+
}
|
|
95
|
+
]
|
|
96
|
+
},
|
|
97
|
+
|
|
98
|
+
"access_patterns": {
|
|
99
|
+
"kubectl_context": "gke_your-project-id_us-central1_your-cluster-name",
|
|
100
|
+
"gcloud_project": "your-gcp-project-id"
|
|
101
|
+
},
|
|
102
|
+
|
|
103
|
+
"recent_changes": [],
|
|
104
|
+
|
|
105
|
+
"_instructions": {
|
|
106
|
+
"description": "Template for creating new project contexts",
|
|
107
|
+
"usage": [
|
|
108
|
+
"1. Copy this file to your project: cp templates/project-context.template.json .claude/project-context.json",
|
|
109
|
+
"2. Replace ALL placeholder values (YOUR_*, your-*) with actual values",
|
|
110
|
+
"3. Remove this _instructions section",
|
|
111
|
+
"4. Validate JSON syntax: jq . .claude/project-context.json"
|
|
112
|
+
],
|
|
113
|
+
"required_fields": [
|
|
114
|
+
"project_name",
|
|
115
|
+
"project_id_gcp",
|
|
116
|
+
"cloud_provider",
|
|
117
|
+
"infrastructure.clusters.primary",
|
|
118
|
+
"access_patterns.kubectl_context"
|
|
119
|
+
],
|
|
120
|
+
"optional_sections": [
|
|
121
|
+
"databases (if no databases)",
|
|
122
|
+
"terraform (if not using terraform)",
|
|
123
|
+
"services (initially empty, add as you develop)"
|
|
124
|
+
]
|
|
125
|
+
}
|
|
126
|
+
}
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
{
|
|
2
|
+
"system_prompt": "You are part of an intelligent DevOps agent system. Use specialized agents via the Task tool for complex operations.",
|
|
3
|
+
|
|
4
|
+
"hooks": {
|
|
5
|
+
"pre_tool_use": ".claude/hooks/pre_tool_use.py",
|
|
6
|
+
"post_tool_use": ".claude/hooks/post_tool_use.py",
|
|
7
|
+
"subagent_stop": ".claude/hooks/subagent_stop.py"
|
|
8
|
+
},
|
|
9
|
+
|
|
10
|
+
"commands": {
|
|
11
|
+
"speckit.init": {
|
|
12
|
+
"file": ".claude/commands/speckit.init.md",
|
|
13
|
+
"description": "Bootstrap Spec-Kit and validate/create project-context.json"
|
|
14
|
+
},
|
|
15
|
+
"speckit.specify": {
|
|
16
|
+
"file": ".claude/commands/speckit.specify.md",
|
|
17
|
+
"description": "Create feature specification with auto-filled project context"
|
|
18
|
+
},
|
|
19
|
+
"speckit.plan": {
|
|
20
|
+
"file": ".claude/commands/speckit.plan.md",
|
|
21
|
+
"description": "Generate implementation plan with integrated clarification"
|
|
22
|
+
},
|
|
23
|
+
"speckit.tasks": {
|
|
24
|
+
"file": ".claude/commands/speckit.tasks.md",
|
|
25
|
+
"description": "Generate enriched task list with validation"
|
|
26
|
+
},
|
|
27
|
+
"speckit.implement": {
|
|
28
|
+
"file": ".claude/commands/speckit.implement.md",
|
|
29
|
+
"description": "Execute implementation tasks with agent orchestration"
|
|
30
|
+
},
|
|
31
|
+
"speckit.add-task": {
|
|
32
|
+
"file": ".claude/commands/speckit.add-task.md",
|
|
33
|
+
"description": "Add single task with inline metadata"
|
|
34
|
+
},
|
|
35
|
+
"speckit.analyze-task": {
|
|
36
|
+
"file": ".claude/commands/speckit.analyze-task.md",
|
|
37
|
+
"description": "Deep analysis of specific task (auto-triggered for T2/T3)"
|
|
38
|
+
},
|
|
39
|
+
"save-session": {
|
|
40
|
+
"file": ".claude/commands/save-session.md",
|
|
41
|
+
"description": "Export session bundle with active context"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
"agents": {
|
|
46
|
+
"terraform-architect": {
|
|
47
|
+
"prompt_file": ".claude/agents/terraform-architect.md",
|
|
48
|
+
"triggers": ["#terraform", "#infrastructure", "terraform", "terragrunt"],
|
|
49
|
+
"security_tier": ["T0", "T1", "T2"]
|
|
50
|
+
},
|
|
51
|
+
"gitops-operator": {
|
|
52
|
+
"prompt_file": ".claude/agents/gitops-operator.md",
|
|
53
|
+
"triggers": ["#kubernetes", "#gitops", "#helm", "kubectl", "flux", "helm"],
|
|
54
|
+
"security_tier": ["T0", "T1", "T2"]
|
|
55
|
+
},
|
|
56
|
+
"gcp-troubleshooter": {
|
|
57
|
+
"prompt_file": ".claude/agents/gcp-troubleshooter.md",
|
|
58
|
+
"triggers": ["#gcp", "#gke", "gcloud", "GKE", "Cloud SQL"],
|
|
59
|
+
"security_tier": ["T0"]
|
|
60
|
+
},
|
|
61
|
+
"aws-troubleshooter": {
|
|
62
|
+
"prompt_file": ".claude/agents/aws-troubleshooter.md",
|
|
63
|
+
"triggers": ["#aws", "#eks", "#ec2", "aws", "EKS", "RDS"],
|
|
64
|
+
"security_tier": ["T0"]
|
|
65
|
+
},
|
|
66
|
+
"devops-developer": {
|
|
67
|
+
"prompt_file": ".claude/agents/devops-developer.md",
|
|
68
|
+
"triggers": ["#dockerfile", "#ci", "#pipeline", "docker", "npm", "build"],
|
|
69
|
+
"security_tier": ["T0", "T1"]
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
|
|
73
|
+
"security": {
|
|
74
|
+
"default_tier": "T0",
|
|
75
|
+
"tier_definitions": {
|
|
76
|
+
"T0": {
|
|
77
|
+
"name": "Read Only",
|
|
78
|
+
"description": "describe, get, show, list operations only",
|
|
79
|
+
"allowed_patterns": [
|
|
80
|
+
"terraform (fmt|validate|plan|show|output|version)",
|
|
81
|
+
"kubectl (get|describe|logs|explain|version)",
|
|
82
|
+
"gcloud .* (describe|list|show|get)",
|
|
83
|
+
"helm (template|lint|list|status|version)"
|
|
84
|
+
]
|
|
85
|
+
},
|
|
86
|
+
"T1": {
|
|
87
|
+
"name": "Validation",
|
|
88
|
+
"description": "validate, plan, template, lint operations",
|
|
89
|
+
"allowed_patterns": [
|
|
90
|
+
"terraform (validate|plan|fmt -check)",
|
|
91
|
+
"helm (template|lint)",
|
|
92
|
+
"kubectl .* --dry-run=client"
|
|
93
|
+
]
|
|
94
|
+
},
|
|
95
|
+
"T2": {
|
|
96
|
+
"name": "Dry Run",
|
|
97
|
+
"description": "--dry-run and --plan-only operations",
|
|
98
|
+
"allowed_patterns": [
|
|
99
|
+
".* --dry-run.*",
|
|
100
|
+
".* --plan-only.*"
|
|
101
|
+
]
|
|
102
|
+
},
|
|
103
|
+
"T3": {
|
|
104
|
+
"name": "Blocked",
|
|
105
|
+
"description": "apply, reconcile, deploy operations - BLOCKED",
|
|
106
|
+
"blocked": true
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
"always_blocked": [
|
|
110
|
+
"terraform apply",
|
|
111
|
+
"terraform destroy",
|
|
112
|
+
"kubectl apply",
|
|
113
|
+
"kubectl delete",
|
|
114
|
+
"helm install",
|
|
115
|
+
"helm upgrade",
|
|
116
|
+
"gcloud .* (create|update|delete|patch)"
|
|
117
|
+
]
|
|
118
|
+
},
|
|
119
|
+
|
|
120
|
+
"permissions": {
|
|
121
|
+
"allow": [
|
|
122
|
+
"Bash(echo \"Generated password for tcm_app: $TCM_APP_PASSWORD\")",
|
|
123
|
+
"Read(*)",
|
|
124
|
+
"Glob(*)",
|
|
125
|
+
"Grep(*)",
|
|
126
|
+
"Bash(./tests/task-*-validation.sh:*)",
|
|
127
|
+
"Bash(/home/jaguilar/aaxis/rnd/repositories/tcm-deployment/tests/task-104-validation.sh:*)",
|
|
128
|
+
"Bash(./spec-kit-tcm-plan/.specify/scripts/bash/check-prerequisites.sh:*)",
|
|
129
|
+
"Bash(./scripts/dev/setup-local.sh:*)",
|
|
130
|
+
"Bash(./scripts/dev/test-local-container-stack.sh:*)",
|
|
131
|
+
"Bash(./scripts/headless/synthesize-bundle.sh:*)",
|
|
132
|
+
"Bash(./scripts/test-pubsub-flow.sh:*)",
|
|
133
|
+
"Bash(./scripts/validate-eslint.sh:*)",
|
|
134
|
+
"Bash(./test-session-intelligence.sh:*)",
|
|
135
|
+
"Bash(./test-session-intelligence-v2.sh:*)",
|
|
136
|
+
"Bash(./test-hooks.sh:*)",
|
|
137
|
+
"Bash(./ssl-validation-test.sh:*)",
|
|
138
|
+
"Bash(./e2e-test-complete.sh:*)",
|
|
139
|
+
"Bash(/home/jaguilar/aaxis/rnd/repositories/.claude/tools/quicktriage_gitops_operator.sh:*)",
|
|
140
|
+
"Bash(/home/jaguilar/aaxis/rnd/repositories/.claude/tools/test_context_reader.sh)",
|
|
141
|
+
"Bash(chmod:*)",
|
|
142
|
+
"Bash(tree:*)",
|
|
143
|
+
"Bash(find:*)",
|
|
144
|
+
"Bash(cat:*)",
|
|
145
|
+
"Bash(head:*)",
|
|
146
|
+
"Bash(tail:*)",
|
|
147
|
+
"Bash(ls:*)",
|
|
148
|
+
"Bash(pwd:*)",
|
|
149
|
+
"Bash(wc:*)",
|
|
150
|
+
"Bash(diff:*)",
|
|
151
|
+
"Bash(which:*)",
|
|
152
|
+
"Bash(whoami:*)",
|
|
153
|
+
"Bash(date:*)",
|
|
154
|
+
"Bash(env:*)",
|
|
155
|
+
"Bash(printenv:*)",
|
|
156
|
+
"Bash(basename:*)",
|
|
157
|
+
"Bash(dirname:*)",
|
|
158
|
+
"Bash(realpath:*)",
|
|
159
|
+
"Bash(touch:*)",
|
|
160
|
+
"Bash(mkdir:*)",
|
|
161
|
+
"Bash(cp:*)",
|
|
162
|
+
"Bash(tee:*)",
|
|
163
|
+
"Bash(echo:*)",
|
|
164
|
+
"Bash(awk:*)",
|
|
165
|
+
"Bash(sed:*)",
|
|
166
|
+
"Bash(grep:*)",
|
|
167
|
+
"Bash(egrep:*)",
|
|
168
|
+
"Bash(rg:*)",
|
|
169
|
+
"Bash(jq:*)",
|
|
170
|
+
"Bash(yq:*)",
|
|
171
|
+
"Bash(base64:*)",
|
|
172
|
+
"Bash(sha256sum:*)",
|
|
173
|
+
"Bash(md5sum:*)",
|
|
174
|
+
"Bash(nslookup:*)",
|
|
175
|
+
"Bash(dig:*)",
|
|
176
|
+
"Bash(openssl:*)",
|
|
177
|
+
"Bash(curl:*)",
|
|
178
|
+
"Bash(wget:*)",
|
|
179
|
+
"Bash(nc:*)",
|
|
180
|
+
"Bash(ping:*)",
|
|
181
|
+
"Bash(traceroute:*)",
|
|
182
|
+
"Bash(PROJECT_ID=\"aaxis-rnd-general-project\")",
|
|
183
|
+
"Bash(REGION=\"us-central1\")",
|
|
184
|
+
"Bash(POSTGRES_INSTANCE=\"tcm-postgres-non-prod\")",
|
|
185
|
+
"Bash(export PUBSUB_EMULATOR_HOST=localhost:8085)",
|
|
186
|
+
"Bash(terragrunt (output|plan|validate|fmt|init|show|state|graph-dependencies):*)",
|
|
187
|
+
"Bash(terragrunt run-all (plan|validate|output|init):*)",
|
|
188
|
+
"Bash(terraform (fmt|validate|plan|show|output|version):*)",
|
|
189
|
+
"Bash(helm (template|lint|list|status):*)",
|
|
190
|
+
"Bash(helm show values:*)",
|
|
191
|
+
"Bash(kubectl (get|describe|logs|top|version):*)",
|
|
192
|
+
"Bash(kubectl explain:*)",
|
|
193
|
+
"Bash(kubectl wait:*)",
|
|
194
|
+
"Bash(kubeseal:*)",
|
|
195
|
+
"Bash(flux (check|get):*)",
|
|
196
|
+
"Bash(flux reconcile helmrelease --dry-run:*)",
|
|
197
|
+
"Bash(flux reconcile kustomization --dry-run:*)",
|
|
198
|
+
"Bash(flux reconcile helmrelease * --timeout=*)",
|
|
199
|
+
"Bash(flux reconcile kustomization * --timeout=*)",
|
|
200
|
+
"Bash(git status:*)",
|
|
201
|
+
"Bash(git diff:*)",
|
|
202
|
+
"Bash(git diff --cached:*)",
|
|
203
|
+
"Bash(git log:*)",
|
|
204
|
+
"Bash(git show:*)",
|
|
205
|
+
"Bash(git rev-parse:*)",
|
|
206
|
+
"Bash(git branch:*)",
|
|
207
|
+
"Bash(gcloud auth:*)",
|
|
208
|
+
"Bash(gcloud config get-value:*)",
|
|
209
|
+
"Bash(gcloud config set:*)",
|
|
210
|
+
"Bash(gcloud .* (describe|list|get):*)",
|
|
211
|
+
"Bash(gcloud logging read:*)",
|
|
212
|
+
"Bash(gcloud asset search-all-resources:*)",
|
|
213
|
+
"Bash(gcloud container clusters describe:*)",
|
|
214
|
+
"Bash(gcloud container images list:*)",
|
|
215
|
+
"Bash(gcloud container images describe:*)",
|
|
216
|
+
"Bash(gcloud compute (describe|list|get)-*:*)",
|
|
217
|
+
"Bash(gcloud compute backend-services (describe|list|get-health):*)",
|
|
218
|
+
"Bash(gcloud compute health-checks describe:*)",
|
|
219
|
+
"Bash(gcloud compute forwarding-rules list:*)",
|
|
220
|
+
"Bash(gcloud compute url-maps describe:*)",
|
|
221
|
+
"Bash(gcloud compute ssl-certificates (list|describe):*)",
|
|
222
|
+
"Bash(gcloud compute ssl-policies list:*)",
|
|
223
|
+
"Bash(gcloud dns record-sets list:*)",
|
|
224
|
+
"Bash(gcloud artifacts docker (tags|images) (list|describe):*)",
|
|
225
|
+
"Bash(gcloud iam service-accounts (list|get-iam-policy|keys list):*)",
|
|
226
|
+
"Bash(gcloud projects get-iam-policy:*)",
|
|
227
|
+
"Bash(aws sts get-caller-identity:*)",
|
|
228
|
+
"Bash(aws eks (describe|list)-*:*)",
|
|
229
|
+
"Bash(aws elbv2 (describe|list)-*:*)",
|
|
230
|
+
"Bash(aws ec2 (describe|list)-*:*)",
|
|
231
|
+
"Bash(aws rds (describe|list)-*:*)",
|
|
232
|
+
"Bash(aws iam (get|list)-*:*)",
|
|
233
|
+
"Bash(aws cloudwatch (describe|list)-*:*)",
|
|
234
|
+
"Bash(aws logs (describe|list)-*:*)",
|
|
235
|
+
"Bash(aws s3 ls:*)",
|
|
236
|
+
"Bash(aws ecr (describe|list)-*:*)",
|
|
237
|
+
"Bash(aws cloudformation (describe|list)-*:*)",
|
|
238
|
+
"Bash(aws route53 (list|get)-*:*)",
|
|
239
|
+
"Bash(eksctl get:*)",
|
|
240
|
+
"Bash(npm run:*)",
|
|
241
|
+
"Bash(npm test:*)",
|
|
242
|
+
"Bash(npm run test:*)",
|
|
243
|
+
"Bash(pnpm run lint:*)",
|
|
244
|
+
"Bash(pnpm test:*)",
|
|
245
|
+
"Bash(python3:*)",
|
|
246
|
+
"Bash(python -m pytest:*)",
|
|
247
|
+
"Bash(pytest:*)",
|
|
248
|
+
"Bash(pip install:*)",
|
|
249
|
+
"Bash(docker (build|run|logs|stop|rm|rmi|exec|compose|ps|images):*)",
|
|
250
|
+
"Bash(docker-compose:*)",
|
|
251
|
+
"Bash(time docker build:*)",
|
|
252
|
+
"WebSearch",
|
|
253
|
+
"WebFetch(domain:github.com)",
|
|
254
|
+
"WebFetch(domain:raw.githubusercontent.com)",
|
|
255
|
+
"WebFetch(domain:dify.ai)",
|
|
256
|
+
"WebFetch(domain:docs.dify.ai)",
|
|
257
|
+
"WebFetch(domain:docs.aws.amazon.com)",
|
|
258
|
+
"WebFetch(domain:cloud.google.com)"
|
|
259
|
+
],
|
|
260
|
+
"deny": [],
|
|
261
|
+
"ask": [
|
|
262
|
+
"Edit(*)",
|
|
263
|
+
"Write(*)",
|
|
264
|
+
"NotebookEdit(*)",
|
|
265
|
+
"Bash(rm:*)",
|
|
266
|
+
"Bash(rmdir:*)",
|
|
267
|
+
"Bash(mv:*)",
|
|
268
|
+
"Bash(git add:*)",
|
|
269
|
+
"Bash(git commit:*)",
|
|
270
|
+
"Bash(git push:*)",
|
|
271
|
+
"Bash(terraform apply:*)",
|
|
272
|
+
"Bash(kubectl apply:*)",
|
|
273
|
+
"Bash(kubectl delete:*)",
|
|
274
|
+
"Bash(helm (install|upgrade):*)",
|
|
275
|
+
"Bash(gcloud .* (create|update|delete|patch):*)",
|
|
276
|
+
"Bash(aws .* (create|update|delete|modify|put):*)"
|
|
277
|
+
]
|
|
278
|
+
},
|
|
279
|
+
|
|
280
|
+
"routing": {
|
|
281
|
+
"auto_route_tasks": true,
|
|
282
|
+
"task_metadata_required": false,
|
|
283
|
+
"fallback_agent": "devops-developer",
|
|
284
|
+
"confidence_threshold": 0.7
|
|
285
|
+
},
|
|
286
|
+
|
|
287
|
+
"logging": {
|
|
288
|
+
"audit_enabled": true,
|
|
289
|
+
"metrics_enabled": true,
|
|
290
|
+
"log_directory": ".claude/logs",
|
|
291
|
+
"metrics_directory": ".claude/metrics",
|
|
292
|
+
"retention_days": 30
|
|
293
|
+
},
|
|
294
|
+
|
|
295
|
+
"context": {
|
|
296
|
+
"bundle_directory": "contexts/bundles",
|
|
297
|
+
"auto_bundle_on_completion": true,
|
|
298
|
+
"max_bundle_size_mb": 50
|
|
299
|
+
},
|
|
300
|
+
|
|
301
|
+
"environment": {
|
|
302
|
+
"project_id": "aaxis-rnd-general-project",
|
|
303
|
+
"region": "us-central1",
|
|
304
|
+
"cluster_name": "tcm-gke-non-prod",
|
|
305
|
+
"postgres_instance": "tcm-postgres-non-prod"
|
|
306
|
+
}
|
|
307
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|