diagram-to-iac 1.3.0__py3-none-any.whl → 1.5.0__py3-none-any.whl

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.
@@ -0,0 +1,102 @@
1
+ # Git Tools specific configuration
2
+ # Inherits common settings from src/diagram_to_iac/config.yaml
3
+ # Only tool-specific settings and overrides are defined here
4
+
5
+ git_executor:
6
+ # Default clone settings
7
+ default_clone_depth: 1
8
+
9
+ # Authentication failure detection patterns
10
+ auth_failure_patterns:
11
+ - "Authentication failed"
12
+ - "Permission denied"
13
+ - "Could not read from remote repository"
14
+ - "fatal: unable to access"
15
+ - "403 Forbidden"
16
+ - "401 Unauthorized"
17
+ - "Please make sure you have the correct access rights"
18
+
19
+ # Repository path generation
20
+ repo_path_template: "{workspace}/{repo_name}"
21
+ sanitize_repo_names: true
22
+
23
+ # Workspace cleanup configuration
24
+ auto_cleanup_existing_repos: true # Automatically remove existing repos before cloning
25
+ cleanup_safety_check: true # Verify path is within workspace before removal
26
+ backup_existing_repos: false # Create backup before removal (future feature)
27
+
28
+ # Git-specific logging configuration
29
+ enable_detailed_logging: true
30
+ log_git_commands: true
31
+ log_auth_failures: true
32
+
33
+ # Memory integration
34
+ store_operations_in_memory: true
35
+ store_command_output: true
36
+
37
+ # GitHub CLI configuration
38
+ github_cli:
39
+ default_timeout: 60 # GitHub CLI operations timeout
40
+ require_auth_check: true
41
+ auth_failure_patterns:
42
+ - "authentication failed"
43
+ - "bad credentials"
44
+ - "token does not have permission"
45
+ - "Must have admin rights to Repository"
46
+ - "HTTP 401"
47
+ - "HTTP 403"
48
+ issue_creation_patterns:
49
+ - "title is required"
50
+ - "body is required"
51
+ - "repository not found"
52
+ success_patterns:
53
+ - "https://github.com/"
54
+ - "/issues/"
55
+
56
+ # Error messages following our pattern
57
+ error_messages:
58
+ invalid_repo_url: "Git executor: Invalid repository URL '{repo_url}'"
59
+ workspace_not_accessible: "Git executor: Workspace directory '{workspace}' is not accessible"
60
+ clone_failed: "Git executor: Failed to clone repository '{repo_url}'"
61
+ auth_failed: "Git executor: Authentication failed for repository '{repo_url}'"
62
+ timeout_exceeded: "Git executor: Git operation timed out after {timeout} seconds"
63
+ shell_executor_error: "Git executor: Shell executor error: {error}"
64
+ repo_already_exists: "Git executor: Repository '{repo_name}' already exists in workspace"
65
+ repo_cleanup_started: "Git executor: Cleaning up existing repository '{repo_name}' at '{repo_path}'"
66
+ repo_cleanup_completed: "Git executor: Successfully cleaned up existing repository '{repo_name}'"
67
+ repo_cleanup_failed: "Git executor: Failed to clean up existing repository '{repo_name}': {error}"
68
+ cleanup_safety_violation: "Git executor: Repository path '{repo_path}' is outside workspace - cleanup denied for security"
69
+
70
+ # GitHub CLI error messages
71
+ gh_auth_failed: "GitHub CLI: Authentication failed - please check GITHUB_TOKEN"
72
+ gh_repo_not_found: "GitHub CLI: Repository '{repo_url}' not found or access denied"
73
+ gh_issue_creation_failed: "GitHub CLI: Failed to create issue in '{repo_url}'"
74
+ gh_invalid_repo_format: "GitHub CLI: Invalid repository format '{repo_url}' - expected owner/repo"
75
+ gh_command_failed: "GitHub CLI: Command failed with exit code {exit_code}"
76
+
77
+ # Success messages following our pattern
78
+ success_messages:
79
+ clone_started: "Git executor: Starting clone of '{repo_url}'"
80
+ clone_completed: "Git executor: Successfully cloned '{repo_url}' to '{repo_path}' in {duration:.2f}s"
81
+ repo_path_resolved: "Git executor: Repository path resolved to '{repo_path}'"
82
+ repo_cleanup_success: "Git executor: Successfully cleaned up existing repository before cloning"
83
+
84
+ # GitHub CLI success messages
85
+ gh_issue_created: "GitHub CLI: Successfully created issue '{title}' in '{repo_url}'"
86
+ gh_auth_verified: "GitHub CLI: Authentication verified for GitHub operations"
87
+ gh_repo_accessible: "GitHub CLI: Repository '{repo_url}' is accessible"
88
+
89
+ # Status codes for structured responses
90
+ status_codes:
91
+ success: "SUCCESS"
92
+ auth_failed: "AUTH_FAILED"
93
+ error: "ERROR"
94
+ timeout: "TIMEOUT"
95
+ already_exists: "ALREADY_EXISTS"
96
+
97
+ # GitHub CLI status codes
98
+ gh_success: "GH_SUCCESS"
99
+ gh_auth_failed: "GH_AUTH_FAILED"
100
+ gh_repo_not_found: "GH_REPO_NOT_FOUND"
101
+ gh_permission_denied: "GH_PERMISSION_DENIED"
102
+ gh_error: "GH_ERROR"
@@ -46,9 +46,20 @@ class LLMRouter:
46
46
  def _load_model_policy(self, config_path: Optional[str] = None) -> Dict[str, Any]:
47
47
  """Load model policy from YAML configuration."""
48
48
  if config_path is None:
49
- # Default to project's model_policy.yaml
50
- base_dir = Path(__file__).parent.parent.parent.parent.parent
51
- config_path = base_dir / "config" / "model_policy.yaml"
49
+ # Try multiple locations for model policy config
50
+ possible_paths = [
51
+ Path.cwd() / "config" / "model_policy.yaml", # Development
52
+ Path("/workspace/config/model_policy.yaml"), # Container workspace
53
+ Path(__file__).parent.parent.parent.parent.parent / "config" / "model_policy.yaml", # Package fallback
54
+ ]
55
+ config_path = None
56
+ for path in possible_paths:
57
+ if path.exists():
58
+ config_path = path
59
+ break
60
+ # Default to workspace location if none found
61
+ if not config_path:
62
+ config_path = Path.cwd() / "config" / "model_policy.yaml"
52
63
 
53
64
  try:
54
65
  with open(config_path, 'r') as f:
@@ -37,44 +37,77 @@ except ImportError:
37
37
  # Path inside container where the encoded YAML is mounted (dev only)
38
38
  _YAML_PATH = pathlib.Path("/run/secrets.yaml")
39
39
 
40
- # Expected secrets based on secrets_example.yaml
41
- EXPECTED_SECRETS = [
42
- "DOCKERHUB_API_KEY",
43
- "DOCKERHUB_USERNAME",
44
- "TF_API_KEY",
45
- "PYPI_API_KEY",
46
- "OPENAI_API_KEY",
47
- "GOOGLE_API_KEY",
48
- "ANTHROPIC_API_KEY",
49
- "GROK_API_KEY",
50
- "REPO_API_KEY"
51
- ]
52
-
53
- # Required secrets that must be present (others are optional)
54
- REQUIRED_SECRETS = [
55
- "REPO_API_KEY" # GITHUB_TOKEN is required for repo operations
56
- ]
57
-
58
- # Optional AI API secrets (at least one should be present for AI functionality)
59
- AI_API_SECRETS = [
60
- "OPENAI_API_KEY",
61
- "GOOGLE_API_KEY",
62
- "ANTHROPIC_API_KEY",
63
- "GROK_API_KEY"
64
- ]
40
+ def _load_config_secrets():
41
+ """Load secret configuration from config.yaml."""
42
+ try:
43
+ # Try to load from config.yaml
44
+ config_path = pathlib.Path(__file__).parent.parent / "config.yaml"
45
+ if config_path.exists() and yaml:
46
+ config_data = yaml.safe_load(config_path.read_text())
47
+ security_config = config_data.get("security", {})
48
+
49
+ required_secrets = security_config.get("required_secrets", ["REPO_API_KEY"])
50
+ optional_secrets = security_config.get("optional_secrets", [])
51
+ secret_mappings = security_config.get("secret_mappings", {})
52
+
53
+ # Combine required and optional secrets
54
+ expected_secrets = required_secrets + optional_secrets
55
+
56
+ # Create full mapping (defaults to same name if not mapped)
57
+ full_mapping = {}
58
+ for secret in expected_secrets:
59
+ full_mapping[secret] = secret_mappings.get(secret, secret)
60
+
61
+ # AI API secrets (hardcoded as they're specific to AI functionality)
62
+ ai_secrets = [
63
+ "OPENAI_API_KEY",
64
+ "GOOGLE_API_KEY",
65
+ "ANTHROPIC_API_KEY",
66
+ "GROK_API_KEY"
67
+ ]
68
+
69
+ return expected_secrets, required_secrets, ai_secrets, full_mapping
70
+ except Exception as e:
71
+ print(f"⚠️ Warning: Could not load secret config from config.yaml: {e}")
72
+
73
+ # Fallback to hardcoded values
74
+ expected_secrets = [
75
+ "DOCKERHUB_API_KEY",
76
+ "DOCKERHUB_USERNAME",
77
+ "TF_API_KEY",
78
+ "PYPI_API_KEY",
79
+ "OPENAI_API_KEY",
80
+ "GOOGLE_API_KEY",
81
+ "ANTHROPIC_API_KEY",
82
+ "GROK_API_KEY",
83
+ "REPO_API_KEY"
84
+ ]
85
+
86
+ required_secrets = ["REPO_API_KEY"]
87
+
88
+ ai_secrets = [
89
+ "OPENAI_API_KEY",
90
+ "GOOGLE_API_KEY",
91
+ "ANTHROPIC_API_KEY",
92
+ "GROK_API_KEY"
93
+ ]
94
+
95
+ secret_mapping = {
96
+ "REPO_API_KEY": "GITHUB_TOKEN",
97
+ "TF_API_KEY": "TFE_TOKEN",
98
+ "DOCKERHUB_API_KEY": "DOCKERHUB_API_KEY",
99
+ "DOCKERHUB_USERNAME": "DOCKERHUB_USERNAME",
100
+ "PYPI_API_KEY": "PYPI_API_KEY",
101
+ "OPENAI_API_KEY": "OPENAI_API_KEY",
102
+ "GOOGLE_API_KEY": "GOOGLE_API_KEY",
103
+ "ANTHROPIC_API_KEY": "ANTHROPIC_API_KEY",
104
+ "GROK_API_KEY": "GROK_API_KEY"
105
+ }
106
+
107
+ return expected_secrets, required_secrets, ai_secrets, secret_mapping
65
108
 
66
- # Map internal secret names to environment variable names
67
- SECRET_ENV_MAPPING = {
68
- "REPO_API_KEY": "GITHUB_TOKEN",
69
- "TF_API_KEY": "TFE_TOKEN",
70
- "DOCKERHUB_API_KEY": "DOCKERHUB_API_KEY",
71
- "DOCKERHUB_USERNAME": "DOCKERHUB_USERNAME",
72
- "PYPI_API_KEY": "PYPI_API_KEY",
73
- "OPENAI_API_KEY": "OPENAI_API_KEY",
74
- "GOOGLE_API_KEY": "GOOGLE_API_KEY",
75
- "ANTHROPIC_API_KEY": "ANTHROPIC_API_KEY",
76
- "GROK_API_KEY": "GROK_API_KEY"
77
- }
109
+ # Load configuration at module level
110
+ EXPECTED_SECRETS, REQUIRED_SECRETS, AI_API_SECRETS, SECRET_ENV_MAPPING = _load_config_secrets()
78
111
 
79
112
 
80
113
  def _decode_b64(enc: str) -> str:
@@ -107,12 +140,35 @@ def _is_dev_environment() -> bool:
107
140
  )
108
141
 
109
142
 
143
+ def _is_ci_environment() -> bool:
144
+ """Check if running in CI environment."""
145
+ return os.environ.get("CI") == "true" or os.environ.get("GITHUB_ACTIONS") == "true"
146
+
147
+
110
148
  def _get_env_secrets() -> Dict[str, Optional[str]]:
111
149
  """Get secrets from environment variables."""
112
150
  env_secrets = {}
151
+ is_ci = _is_ci_environment()
152
+
113
153
  for secret_key in EXPECTED_SECRETS:
114
154
  env_name = SECRET_ENV_MAPPING.get(secret_key, secret_key)
115
- raw_value = os.environ.get(env_name)
155
+ raw_value = None
156
+
157
+ if is_ci:
158
+ # In CI, check for _ENCODED variant first (since that's how they're provided)
159
+ encoded_env_name = f"{secret_key}_ENCODED" # Use secret_key directly for CI
160
+ raw_value = os.environ.get(encoded_env_name)
161
+
162
+ # If not found with secret_key, try with env_name
163
+ if raw_value is None:
164
+ encoded_env_name = f"{env_name}_ENCODED"
165
+ raw_value = os.environ.get(encoded_env_name)
166
+
167
+ # If still not found, try the direct environment variable name
168
+ if raw_value is None:
169
+ raw_value = os.environ.get(env_name)
170
+
171
+ # If we found a value, process it
116
172
  if raw_value:
117
173
  # Check if value is already decoded, use as-is; otherwise decode it
118
174
  if (secret_key == "TF_API_KEY" and ".atlasv1." in raw_value) or \
@@ -126,6 +182,7 @@ def _get_env_secrets() -> Dict[str, Optional[str]]:
126
182
  env_secrets[secret_key] = _decode_b64(raw_value)
127
183
  else:
128
184
  env_secrets[secret_key] = None
185
+
129
186
  return env_secrets
130
187
 
131
188
 
@@ -0,0 +1,41 @@
1
+ # Shell Tools specific configuration
2
+ # Inherits common settings from src/diagram_to_iac/config.yaml
3
+ # Only tool-specific settings and overrides are defined here
4
+
5
+ shell_executor:
6
+ # Allowed binaries for shell execution (security whitelist)
7
+ allowed_binaries: ["git", "bash", "sh", "gh", "terraform", "tfsec", "ls", "find", "wc"]
8
+
9
+ # Maximum output size before truncation (bytes)
10
+ max_output_size: 8192
11
+
12
+ # Security and path validation settings
13
+ allow_relative_paths: true
14
+ restrict_to_workspace: true
15
+
16
+ # Logging configuration (specific to shell tools)
17
+ enable_detailed_logging: true
18
+ log_command_execution: true
19
+ log_output_truncation: true
20
+
21
+ # Error messages for consistent user feedback
22
+ error_messages:
23
+ binary_not_allowed: "Shell executor: Binary '{binary}' is not in the allowed list."
24
+ invalid_workspace_path: "Shell executor: Path '{path}' is outside the allowed workspace."
25
+ command_timeout: "Shell executor: Command timed out after {timeout} seconds."
26
+ execution_failed: "Shell executor: Command failed with exit code {exit_code}."
27
+ output_truncated: "Shell executor: Output truncated to {size} bytes."
28
+
29
+ # Success messages for operation feedback
30
+ success_messages:
31
+ command_executed: "Shell executor: Command completed successfully in {duration:.2f}s."
32
+ output_captured: "Shell executor: Captured {size} bytes of output."
33
+
34
+ # Development and testing overrides
35
+ development:
36
+ # For local development, allow broader workspace access
37
+ local_workspace_base: "/home/vindpro/Documents/projects/diagram-to-iac"
38
+ # Extended timeout for development operations
39
+ extended_timeout: 120
40
+ # Additional dev binaries (can be enabled for local testing)
41
+ dev_binaries: ["ls", "pwd", "echo", "cat", "grep"]
@@ -0,0 +1,21 @@
1
+ # Terraform Tools specific configuration
2
+ # Inherits common settings from src/diagram_to_iac/config.yaml
3
+ # Only tool-specific settings and overrides are defined here
4
+
5
+ terraform_executor:
6
+ # Allowed binaries for terraform execution (security whitelist)
7
+ allowed_binaries: ["terraform", "git", "bash", "sh"]
8
+
9
+ # Terraform-specific settings
10
+ default_plan_file: "plan.tfplan"
11
+ default_auto_approve: true
12
+
13
+ # Path validation settings
14
+ restrict_to_workspace: true
15
+
16
+ # Terraform-specific logging configuration
17
+ enable_detailed_logging: true
18
+
19
+ # Memory integration
20
+ store_operations_in_memory: true
21
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diagram-to-iac
3
- Version: 1.3.0
3
+ Version: 1.5.0
4
4
  Summary: Convert architecture diagrams into IaC modules
5
5
  Author-email: vindpro <admin@vindpro.com>
6
6
  Description-Content-Type: text/markdown
@@ -9,15 +9,21 @@ Requires-Dist: google_api_python_client==2.174.0
9
9
  Requires-Dist: langchain_anthropic==0.3.16
10
10
  Requires-Dist: langchain-core<1.0.0,>=0.3.62
11
11
  Requires-Dist: langchain_google_genai==2.1.5
12
- Requires-Dist: langchain_openai==0.3.26
13
- Requires-Dist: langgraph==0.4.10
14
- Requires-Dist: openai==1.92.2
12
+ Requires-Dist: langchain_openai==0.3.27
13
+ Requires-Dist: langgraph==0.5.0
14
+ Requires-Dist: openai==1.92.3
15
15
  Requires-Dist: protobuf>=5.27.0
16
16
  Requires-Dist: pydantic==2.11.7
17
17
  Requires-Dist: PyYAML==6.0.2
18
18
  Requires-Dist: Requests==2.32.4
19
19
  Requires-Dist: typing_extensions==4.14.0
20
20
  Requires-Dist: GitPython<4.0,>=3.1
21
+ Provides-Extra: test
22
+ Requires-Dist: pytest>=7.0; extra == "test"
23
+ Requires-Dist: pytest-cov>=4.0; extra == "test"
24
+ Requires-Dist: pytest-mock>=3.10; extra == "test"
25
+ Requires-Dist: pytest-asyncio>=0.21; extra == "test"
26
+ Requires-Dist: pexpect>=4.8; extra == "test"
21
27
 
22
28
  # diagram-to-iac
23
29
 
@@ -1,5 +1,6 @@
1
1
  diagram_to_iac/__init__.py,sha256=gQanRC5O_7AMB-NQFEEd-MU0GICa-dBsgvcJgquKBfs,1427
2
2
  diagram_to_iac/cli.py,sha256=uumG1frF42eCkdLIZxyxQB1x6lDwtG-qKL4vcHnLLXY,400
3
+ diagram_to_iac/config.yaml,sha256=0DMksgsQt32W3K1DkFXtweK1E11VxJwj1E9-IJCKUUw,7459
3
4
  diagram_to_iac/r2d.py,sha256=I7XSuUtu8TdvAhK4tCMLc3U_3ZtP7DJGfq168aeI3Mk,13208
4
5
  diagram_to_iac/actions/__init__.py,sha256=P1CjjY4FYUA0Tcx8FQNLYYSI9fhv8yKd_TmRGtmhW50,229
5
6
  diagram_to_iac/actions/git_entry.py,sha256=mhY6gYquUPVvyvnTC2S90z_uXEe1asqWLoi1989aB_Q,5403
@@ -8,13 +9,17 @@ diagram_to_iac/actions/terraform_agent_entry.py,sha256=gKkX4fIRdBDZpwPQO_v2t1SSO
8
9
  diagram_to_iac/agents/__init__.py,sha256=GHInKSPq56ZPYSKsyti6_wk82dhn2hOqfxNHkZZOj_0,735
9
10
  diagram_to_iac/agents/demonstrator_langgraph/__init__.py,sha256=nghMYMEEarfkR0V6AH1fDCV-mXBLnmFP2sO4OPxJ4cI,371
10
11
  diagram_to_iac/agents/demonstrator_langgraph/agent.py,sha256=9ZH2H5iAB2DfMhCr-OzImVZlwoeXIP8RKl6_VG47W2I,35349
12
+ diagram_to_iac/agents/demonstrator_langgraph/config.yaml,sha256=T1nMi9AQwZxdIWU6NWxttl9CcyEf_Pu6_F-_zCjdVUc,2050
11
13
  diagram_to_iac/agents/git_langgraph/__init__.py,sha256=x6nCnOu-Vcl-qVqW1swhdaE_sQqUSvEUUtWk4eePBUo,295
12
14
  diagram_to_iac/agents/git_langgraph/agent.py,sha256=_lGwyTTgTsS4ZtaQLCceGJa5zeLvux_Hqda1-fqAgXg,49288
15
+ diagram_to_iac/agents/git_langgraph/config.yaml,sha256=yjxIsD5b5TushF-Yc3iSVJl1fK4GuhErQ0tWRHdkQYc,3690
13
16
  diagram_to_iac/agents/git_langgraph/pr.py,sha256=qXopN5XAF1DIac5vbH-QasihkuAiWmC9JY8pLYlm-sQ,8601
14
17
  diagram_to_iac/agents/hello_langgraph/__init__.py,sha256=lviuDAPJezmpaXR-H7JxfIT9wvg1xO2t6JLyeKSSx0Y,266
15
18
  diagram_to_iac/agents/hello_langgraph/agent.py,sha256=R49yfFGxqMPBBu36ztDH9lBE_-s7VFyRB33gnNSXxek,33777
19
+ diagram_to_iac/agents/hello_langgraph/config.yaml,sha256=PCOwG9FrbrZdtnc7zM3D43jP-TjudW656_qAz-G_lH0,227
16
20
  diagram_to_iac/agents/policy_agent/__init__.py,sha256=E6QEyIpSHh0PMRNnM0dXuYtz2HZdCJaY5W7UbEwPZBA,380
17
21
  diagram_to_iac/agents/policy_agent/agent.py,sha256=dJLX3q2sYmwUGjs_qQOAlAvTfkEEYUalNCnBz1eeaBw,22296
22
+ diagram_to_iac/agents/policy_agent/config.yaml,sha256=VmNucLT1JXBSh2FJIeJfAW740AvHAoH-sAGpbjUiYCM,1333
18
23
  diagram_to_iac/agents/policy_agent/integration_example.py,sha256=LtOGshT0VL6yuu5p8UtJ5xqKNweRsLqeyCZK18dnwBA,6703
19
24
  diagram_to_iac/agents/policy_agent/tools/__init__.py,sha256=C9ez49BmMiaAlYs_QrtC0ypMLm1S-Sf9RCRI40-KuCA,282
20
25
  diagram_to_iac/agents/policy_agent/tools/tfsec_tool.py,sha256=YYCRhwVLegeCzJrbah3BYhpKwYPh7PtDxB3kYW8qt10,10116
@@ -23,6 +28,7 @@ diagram_to_iac/agents/shell_langgraph/agent.py,sha256=dZWzjVQ9oX_BtNHQ1Zrzy2oQpu
23
28
  diagram_to_iac/agents/shell_langgraph/detector.py,sha256=wLw0uDP_V2m1z6SRk7QNCzoUMYCfXwu3DNg8EWue9yk,1493
24
29
  diagram_to_iac/agents/supervisor_langgraph/__init__.py,sha256=iLN60d20cqoXOLyuLvJkiwrzapE84em222Tnyndq2dc,385
25
30
  diagram_to_iac/agents/supervisor_langgraph/agent.py,sha256=1qfgYSQQx1JNgN9ORFCl35NrklRbN7ZcUdP5AbGBsGo,101342
31
+ diagram_to_iac/agents/supervisor_langgraph/config.yaml,sha256=tdItteHrgTWU3xeHiZ9DVblO5j0G_2Wo63nb-wG8eIo,2334
26
32
  diagram_to_iac/agents/supervisor_langgraph/demonstrator.py,sha256=OT-bElEyLZBedzcc5DtZnp1yhjYVjx4jRzt52f5SoSU,803
27
33
  diagram_to_iac/agents/supervisor_langgraph/github_listener.py,sha256=Ko9dOnS9CUqbjTogEyhEmVhkiaW8OiwLzX6k18lSrac,16377
28
34
  diagram_to_iac/agents/supervisor_langgraph/guards.py,sha256=XzBgjXnwbOgLkGm7AqXX4tQdGBerq_6pKvduKPqIwF0,720
@@ -30,25 +36,29 @@ diagram_to_iac/agents/supervisor_langgraph/pat_loop.py,sha256=feY8ZPGQxqkUuHOMSd
30
36
  diagram_to_iac/agents/supervisor_langgraph/router.py,sha256=7hZXXEmtvG__w7UAaOhoPaHdubUv-oMKbQdMTMXk-qY,276
31
37
  diagram_to_iac/agents/terraform_langgraph/__init__.py,sha256=N4_cTgk1wNZMS9WU5xZMEm6Dt5GiJ2b0iLx-QUhJd10,390
32
38
  diagram_to_iac/agents/terraform_langgraph/agent.py,sha256=lDaRCLcqShZiUGN25R-T94JTCLYaz4UgT_di3tDA0nE,50593
39
+ diagram_to_iac/agents/terraform_langgraph/config.yaml,sha256=_jZ0hEegZcXRkm3pDwkPzZkOEi4Gt8ONYwsoFPNc5FQ,643
33
40
  diagram_to_iac/agents/terraform_langgraph/parser.py,sha256=J56CPlpIEIPuDHeAOL3sz4TiIgqLi7raPlX7jwFrAms,2039
34
41
  diagram_to_iac/core/__init__.py,sha256=VjXPYLIS2SAPIDniBkeA2EDK0VHJvdaKIC8dzVneaTM,140
35
42
  diagram_to_iac/core/agent_base.py,sha256=DjZjcfzDpEhfIOki00XwQ-4lPli3OBcQ_7RNKsT7JSI,505
36
- diagram_to_iac/core/config_loader.py,sha256=5kkOJoOZVMJhlVQOUu_gWXd26lrblxXtcphKYLhx8WA,10131
37
- diagram_to_iac/core/enhanced_memory.py,sha256=Ga5wtI45zEcbwL_F1YqJaXBRpWK0iJPa69j4-V-ebvM,10951
43
+ diagram_to_iac/core/config_loader.py,sha256=6WWOp6G7_xYUhm1x62sVa-7kFlCthcthbppmeGz1YsM,9276
44
+ diagram_to_iac/core/enhanced_memory.py,sha256=fJ8r-MREZRnm6Rg01CDCicMEx-dDxDEjJgrk8rnVc5Y,11761
38
45
  diagram_to_iac/core/errors.py,sha256=gZwZocnIcBlS4YccIBdjG8XztRCtMe4Cu6KWxLzebDM,115
39
46
  diagram_to_iac/core/issue_tracker.py,sha256=0eo289hn94yCoFCkLaYiDOIJBjk33i2dk6eLeYe_9YE,1659
40
47
  diagram_to_iac/core/memory.py,sha256=P9URX8m2nab65ZPF36uf6Z9hEXQGXrjrXa8dPXG7pm8,4444
41
- diagram_to_iac/core/registry.py,sha256=AM2fv9lzrNvFfkyt7VMxQ5SWIOWhdBu4_3Aaspdokj8,25758
48
+ diagram_to_iac/core/registry.py,sha256=ibdMz68W7qkwF0dprt4ni5pekgJfAPuRgL85uRU7wHY,26632
49
+ diagram_to_iac/core/test_config.py,sha256=hktJ2NcRK2i24xinN4slHpH2-WV8w8PoMXgJnDYeCtQ,3467
42
50
  diagram_to_iac/services/__init__.py,sha256=I5R8g7vYX4tCldRf1Jf9vEhm5mylc-MfFicqLnY6a3E,238
43
51
  diagram_to_iac/services/commenter.py,sha256=iXvHXOeih64FbE34PuGPk6fhI4RmC62ZSVtFwmMqiOA,22146
44
52
  diagram_to_iac/services/observability.py,sha256=yxbnjMc4TO1SM8RZZMHf2E8uVOLpxFhiTjsTkymDi6Y,1856
45
53
  diagram_to_iac/services/step_summary.py,sha256=g3MuMZ51IDubI0oWcF7qMvseNgDS6D90AsKK_1s5xDQ,2808
54
+ diagram_to_iac/templates/issue_frontmatter.yml,sha256=qjyjUT8jszRIbiX6wmACfhzF-4yTvY1cRtY371o4Ung,7012
46
55
  diagram_to_iac/tools/__init__.py,sha256=F2pcKhoPP5KDeQIGcqKXD1J30KFKc9qxMw1jxzrs9qY,434
47
- diagram_to_iac/tools/api_utils.py,sha256=5Grroc0Sbu3UXQB5rv4in6LMkyU_NkOwLbu9F2tmB18,9364
48
- diagram_to_iac/tools/sec_utils.py,sha256=BeKM1k8e8BHw5BMyghDvwB8tlyV7g3rr-civIprmLDY,10032
56
+ diagram_to_iac/tools/api_utils.py,sha256=c3nOK3eZdUuik5IVvMyGIEG-3oILnyOVd-RubtPdpgE,9616
57
+ diagram_to_iac/tools/sec_utils.py,sha256=Zzb-I3_qZblv0nIEm4TO0xQCga3Phq44SOGx1ga_wOc,12463
49
58
  diagram_to_iac/tools/text_utils.py,sha256=cnwOXWndd1QAlZC4zOO9jtF3_j4xozDLUTfzfJE9wWQ,9959
50
59
  diagram_to_iac/tools/git/__init__.py,sha256=1V3_Kg_KzQ6er60N-1hqQeigkV8c4AvYq-R60_xmQ4o,1316
51
60
  diagram_to_iac/tools/git/git.py,sha256=0NYz9NqQWf-5YTX7R3nBPyLmzvih-jhd0gYY8KZDmTM,46501
61
+ diagram_to_iac/tools/git/git_config.yaml,sha256=ekww9EEZigEfZBv-HNSEYP__SDT61yOdBQ0u-Lhquv0,4272
52
62
  diagram_to_iac/tools/hello/__init__.py,sha256=f6GpkiQxvuGaRMm34yQilGACxUI4c5edJQTDjZtskjQ,891
53
63
  diagram_to_iac/tools/hello/cal_utils.py,sha256=B-0iOJHNL1IgYPlWUdrAwEf1r9LUKBAnGyx1xQz05ZE,1507
54
64
  diagram_to_iac/tools/hello/text_utils.py,sha256=ZaVQYw6GVqaq9EDTQfG3gTAudeN8CuFUUb7IETZhUCA,3952
@@ -58,12 +68,14 @@ diagram_to_iac/tools/llm_utils/base_driver.py,sha256=sDUxk6_iNn3WU_HyRz2hW3YGTn8
58
68
  diagram_to_iac/tools/llm_utils/gemini_driver.py,sha256=VO1mJ3o10oSFo5hTBs6h8TJsXyAuah4FRr6Ua-9aNYc,3794
59
69
  diagram_to_iac/tools/llm_utils/grok_driver.py,sha256=hcq4m6ZEgjVsLXaaGlW5SWHEqyjY4KUDy88xSZFUa6Y,2955
60
70
  diagram_to_iac/tools/llm_utils/openai_driver.py,sha256=ZqzXEYEutwqRw3qWx-GH85Mj2afxK4NlhCOMq_MabqQ,3962
61
- diagram_to_iac/tools/llm_utils/router.py,sha256=hl-y1CCvRoBWSpKpkDI_SSyi9YIT2ZA6y6awn7_ErkM,22117
71
+ diagram_to_iac/tools/llm_utils/router.py,sha256=ga8xfmPMl_SGINDwazeAAFYTAx9L_IQcVV5AdvqD0dQ,22643
62
72
  diagram_to_iac/tools/shell/__init__.py,sha256=6UZjBcnbPabA6Qy7t4j-dCi3S2sE6sB2bTE9PIL98bA,292
63
73
  diagram_to_iac/tools/shell/shell.py,sha256=ZOJ7Vo3l_R2Gm6Ml2FL0RX__-C_JOsUrLJVvBMwAy9E,21122
74
+ diagram_to_iac/tools/shell/shell_config.yaml,sha256=9mV1mpOD9mwOx50TXF-ACafeJmBSZaqPo4v-TQxB5U4,1722
64
75
  diagram_to_iac/tools/tf/terraform.py,sha256=j1boWRo6JKpNGf1OwnWoWboO0gMYTizCOHDSxozoFZw,37343
65
- diagram_to_iac-1.3.0.dist-info/METADATA,sha256=h5UhAUbrllCL4GeK7kxjXiv578CWLUstdgN0HQoa2mI,10429
66
- diagram_to_iac-1.3.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
67
- diagram_to_iac-1.3.0.dist-info/entry_points.txt,sha256=DfGCnmgWWGHtQpqU8VqcUWs5k_be-bfO67z1vOuTitA,277
68
- diagram_to_iac-1.3.0.dist-info/top_level.txt,sha256=k1cV0YODiCUU46qlmbQaquMcbMXhNm05NZLxsinDUBA,15
69
- diagram_to_iac-1.3.0.dist-info/RECORD,,
76
+ diagram_to_iac/tools/tf/terraform_config.yaml,sha256=Mj5rp5hwLLZ3VmKIqwnjoKvPlaA20OX5plH40DfGG7k,610
77
+ diagram_to_iac-1.5.0.dist-info/METADATA,sha256=pa4hTMPN6O46XRq028RNvRKZEiR9deqiFhawCUIPwws,10689
78
+ diagram_to_iac-1.5.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
79
+ diagram_to_iac-1.5.0.dist-info/entry_points.txt,sha256=DfGCnmgWWGHtQpqU8VqcUWs5k_be-bfO67z1vOuTitA,277
80
+ diagram_to_iac-1.5.0.dist-info/top_level.txt,sha256=k1cV0YODiCUU46qlmbQaquMcbMXhNm05NZLxsinDUBA,15
81
+ diagram_to_iac-1.5.0.dist-info/RECORD,,