iac-code 0.11.4__tar.gz → 0.12.0__tar.gz
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.
- {iac_code-0.11.4 → iac_code-0.12.0}/PKG-INFO +13 -1
- {iac_code-0.11.4 → iac_code-0.12.0}/README.md +12 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/pyproject.toml +12 -1
- iac_code-0.12.0/src/iac_code/__init__.py +2 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/pipeline_executor.py +59 -18
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/agent/agent_loop.py +5 -1
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/cli/install_git_bash.py +28 -41
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/cli/main.py +17 -10
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/cli/process_mode.py +2 -2
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/commands/auth.py +45 -9
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/commands/clear.py +7 -8
- iac_code-0.12.0/src/iac_code/desktop/__init__.py +7 -0
- iac_code-0.12.0/src/iac_code/desktop/__main__.py +358 -0
- iac_code-0.12.0/src/iac_code/desktop/control.py +374 -0
- iac_code-0.12.0/src/iac_code/desktop/controller.py +107 -0
- iac_code-0.12.0/src/iac_code/desktop/diagnostics.py +133 -0
- iac_code-0.12.0/src/iac_code/desktop/download_journal.py +807 -0
- iac_code-0.12.0/src/iac_code/desktop/external_env.py +1156 -0
- iac_code-0.12.0/src/iac_code/desktop/git_bash.py +46 -0
- iac_code-0.12.0/src/iac_code/desktop/install_lock.py +121 -0
- iac_code-0.12.0/src/iac_code/desktop/loop_runner.py +36 -0
- iac_code-0.12.0/src/iac_code/desktop/native_preload_manifest.json +31 -0
- iac_code-0.12.0/src/iac_code/desktop/ports.py +81 -0
- iac_code-0.12.0/src/iac_code/desktop/probe_worker.py +511 -0
- iac_code-0.12.0/src/iac_code/desktop/runtime.py +87 -0
- iac_code-0.12.0/src/iac_code/desktop/tool_paths.py +80 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/i18n/locales/de/LC_MESSAGES/messages.mo +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/i18n/locales/de/LC_MESSAGES/messages.po +120 -2
- iac_code-0.12.0/src/iac_code/i18n/locales/de/LC_MESSAGES/webui.mo +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/i18n/locales/de/LC_MESSAGES/webui.po +136 -21
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/i18n/locales/es/LC_MESSAGES/messages.mo +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/i18n/locales/es/LC_MESSAGES/messages.po +121 -2
- iac_code-0.12.0/src/iac_code/i18n/locales/es/LC_MESSAGES/webui.mo +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/i18n/locales/es/LC_MESSAGES/webui.po +139 -21
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/i18n/locales/fr/LC_MESSAGES/messages.mo +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/i18n/locales/fr/LC_MESSAGES/messages.po +118 -2
- iac_code-0.12.0/src/iac_code/i18n/locales/fr/LC_MESSAGES/webui.mo +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/i18n/locales/fr/LC_MESSAGES/webui.po +135 -21
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/i18n/locales/ja/LC_MESSAGES/messages.mo +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/i18n/locales/ja/LC_MESSAGES/messages.po +109 -2
- iac_code-0.12.0/src/iac_code/i18n/locales/ja/LC_MESSAGES/webui.mo +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/i18n/locales/ja/LC_MESSAGES/webui.po +119 -21
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/i18n/locales/pt/LC_MESSAGES/messages.mo +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/i18n/locales/pt/LC_MESSAGES/messages.po +118 -2
- iac_code-0.12.0/src/iac_code/i18n/locales/pt/LC_MESSAGES/webui.mo +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/i18n/locales/pt/LC_MESSAGES/webui.po +133 -21
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/i18n/locales/zh/LC_MESSAGES/messages.mo +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/i18n/locales/zh/LC_MESSAGES/messages.po +101 -6
- iac_code-0.12.0/src/iac_code/i18n/locales/zh/LC_MESSAGES/webui.mo +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/i18n/locales/zh/LC_MESSAGES/webui.po +117 -21
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/mcp/client.py +37 -11
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/mcp/oauth.py +12 -1
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/complete_step_tool.py +77 -5
- iac_code-0.12.0/src/iac_code/pipeline/engine/hard_constraints.py +326 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/loader.py +38 -1
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/prerequisites.py +165 -27
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/step_executor.py +2 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/step_spec.py +1 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/types.py +1 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/pipeline.yaml +11 -1
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/prompts/cost_estimating.md +13 -1
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/prompts/deploying.md +3 -8
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/prompts/intent_parsing.md +0 -1
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/prompts/template_generating.md +1 -3
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/references/cloud-products/ecs.md +23 -8
- {iac_code-0.11.4/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating → iac_code-0.12.0/src/iac_code/pipeline/selling}/references/solutions/iac-code-web.md +9 -5
- {iac_code-0.11.4/src/iac_code/pipeline/selling/skills/iac-aliyun-cost → iac_code-0.12.0/src/iac_code/pipeline/selling}/references/solutions/iac-code-web.ros.yml +68 -16
- {iac_code-0.11.4/src/iac_code/pipeline/selling/skills/iac-aliyun-cost → iac_code-0.12.0/src/iac_code/pipeline/selling}/references/template-parameter-recommendation.md +8 -4
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-architecture/SKILL.md +43 -2
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/SKILL.md +112 -6
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/evals.json +41 -3
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/cloud-products/ecs.md +23 -8
- {iac_code-0.11.4/src/iac_code/pipeline/selling → iac_code-0.12.0/src/iac_code/pipeline/selling/skills/iac-aliyun-cost}/references/solutions/iac-code-web.md +9 -5
- {iac_code-0.11.4/src/iac_code/pipeline/selling → iac_code-0.12.0/src/iac_code/pipeline/selling/skills/iac-aliyun-cost}/references/solutions/iac-code-web.ros.yml +68 -16
- {iac_code-0.11.4/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating → iac_code-0.12.0/src/iac_code/pipeline/selling/skills/iac-aliyun-cost}/references/template-parameter-recommendation.md +8 -4
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/SKILL.md +6 -4
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/cloud-products/ecs.md +23 -8
- {iac_code-0.11.4/src/iac_code/pipeline/selling/skills/iac-aliyun-cost → iac_code-0.12.0/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying}/references/solutions/iac-code-web.md +9 -5
- {iac_code-0.11.4/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating → iac_code-0.12.0/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying}/references/solutions/iac-code-web.ros.yml +68 -16
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/template-parameter-recommendation.md +8 -4
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-intent/SKILL.md +58 -3
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/SKILL.md +9 -2
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/cloud-products/ecs.md +23 -8
- {iac_code-0.11.4/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying → iac_code-0.12.0/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating}/references/solutions/iac-code-web.md +9 -5
- {iac_code-0.11.4/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying → iac_code-0.12.0/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating}/references/solutions/iac-code-web.ros.yml +68 -16
- {iac_code-0.11.4/src/iac_code/pipeline/selling → iac_code-0.12.0/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating}/references/template-parameter-recommendation.md +8 -4
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/tools/infraguard_scan_tool.py +112 -11
- iac_code-0.12.0/src/iac_code/services/git_bash.py +62 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/providers/aliyun.py +64 -1
- iac_code-0.12.0/src/iac_code/services/providers/aliyun_credentials_runtime.py +427 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/session_index.py +21 -12
- iac_code-0.12.0/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/ecs.md +182 -0
- iac_code-0.12.0/src/iac_code/skills/bundled/iac_aliyun/references/solutions/iac-code-web.md +35 -0
- iac_code-0.12.0/src/iac_code/skills/bundled/iac_aliyun/references/solutions/iac-code-web.ros.yml +366 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/renderer.py +30 -9
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/bash/bash_tool.py +28 -9
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/acs3_transport.py +25 -33
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/aliyun_api.py +30 -13
- iac_code-0.12.0/src/iac_code/tools/cloud/aliyun/ecs_credential_errors.py +39 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/endpoint_resolver.py +25 -51
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/public_errors.py +54 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_client.py +23 -12
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_stack.py +39 -17
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_stack_instances.py +28 -15
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/grep.py +4 -2
- iac_code-0.12.0/src/iac_code/ui/assets/iac-code-terminal-logo.png +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/banner.py +123 -13
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/repl.py +19 -12
- iac_code-0.12.0/src/iac_code/ui/terminal_image.py +257 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/utils/file_security.py +7 -2
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/utils/platform.py +86 -11
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/utils/project_paths.py +43 -6
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/app.py +426 -45
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/memory.py +7 -2
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/pipeline_prerequisites.py +111 -18
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/runtime.py +57 -10
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/server.py +7 -2
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/settings.py +42 -3
- iac_code-0.12.0/src/iac_code/web/static/icons/iac-code-logo.svg +28 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/static/index.html +7 -2
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/static/js/api.js +19 -3
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/static/js/app.js +263 -29
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/static/js/components/output_panel.js +9 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/static/js/components/workspace.js +89 -11
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/static/styles.css +129 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code.egg-info/PKG-INFO +13 -1
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code.egg-info/SOURCES.txt +22 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code.egg-info/requires.txt +2 -1
- iac_code-0.11.4/src/iac_code/__init__.py +0 -2
- iac_code-0.11.4/src/iac_code/i18n/locales/de/LC_MESSAGES/webui.mo +0 -0
- iac_code-0.11.4/src/iac_code/i18n/locales/es/LC_MESSAGES/webui.mo +0 -0
- iac_code-0.11.4/src/iac_code/i18n/locales/fr/LC_MESSAGES/webui.mo +0 -0
- iac_code-0.11.4/src/iac_code/i18n/locales/ja/LC_MESSAGES/webui.mo +0 -0
- iac_code-0.11.4/src/iac_code/i18n/locales/pt/LC_MESSAGES/webui.mo +0 -0
- iac_code-0.11.4/src/iac_code/i18n/locales/zh/LC_MESSAGES/webui.mo +0 -0
- iac_code-0.11.4/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/ecs.md +0 -167
- iac_code-0.11.4/src/iac_code/skills/bundled/iac_aliyun/references/solutions/iac-code-web.md +0 -31
- iac_code-0.11.4/src/iac_code/skills/bundled/iac_aliyun/references/solutions/iac-code-web.ros.yml +0 -314
- {iac_code-0.11.4 → iac_code-0.12.0}/LICENSE +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/MANIFEST.in +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/setup.cfg +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/setup.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/agent_card.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/app.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/artifacts.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/backup.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/client.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/events.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/executor.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/exposure.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/jsonrpc_passthrough.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/metadata_redaction.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/metrics.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/parts.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/persistence.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/pipeline_delta_coalescing.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/pipeline_events.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/pipeline_flow_monitor.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/pipeline_journal.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/pipeline_outbound.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/pipeline_paths.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/pipeline_performance.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/pipeline_recovery.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/pipeline_snapshot.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/pipeline_stream.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/pipeline_transport_delivery.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/projection.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/push.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/push_queue.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/push_secrets.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/push_worker.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/router.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/runtime_overrides.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/runtime_registry.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/signing.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/task_store.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/thinking_metadata.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/transport.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/transports/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/transports/base.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/transports/dispatcher.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/transports/grpc.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/transports/grpc_jsonrpc.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/transports/http.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/transports/redis_streams.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/transports/stdio.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/transports/unix.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/transports/websocket.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/a2a/types.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/acp/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/acp/convert.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/acp/http_sse.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/acp/mcp.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/acp/metrics.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/acp/runner.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/acp/server.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/acp/session.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/acp/slash_registry.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/acp/state.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/acp/tools.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/acp/types.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/acp/version.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/agent/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/agent/agent_tool.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/agent/agent_types.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/agent/message.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/agent/system_prompt.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/cli/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/cli/headless.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/cli/output_formats.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/cli/process_events.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/cli/process_protocol.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/cli/update.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/commands/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/commands/compact.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/commands/debug.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/commands/effort.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/commands/exit.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/commands/help.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/commands/mcp.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/commands/memory.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/commands/model.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/commands/prompt.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/commands/registry.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/commands/rename.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/commands/resume.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/commands/skills.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/commands/status.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/commands/tasks.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/commands/thinking_enabled.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/config.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/i18n/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/i18n/html_extractor.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/mcp/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/mcp/cli.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/mcp/config.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/mcp/env_expansion.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/mcp/errors.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/mcp/manager.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/mcp/output.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/mcp/progress.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/mcp/prompt_dispatch.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/mcp/prompts.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/mcp/redaction.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/mcp/skills.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/mcp/storage.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/mcp/tools.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/mcp/types.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/memory/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/memory/memory_manager.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/memory/memory_tools.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/memory/project_memory.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/memory/recall.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/config.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/constants.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/display_names.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/architecture_graph.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/architecture_meta.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/architecture_metas/Categories.json +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/architecture_metas/config.json +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/architecture_metas/products.json +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/architecture_resource_inventory.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/architecture_rule_candidates.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/architecture_rule_drafts.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/architecture_rule_facts.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/architecture_rules.json +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/architecture_rules.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/architecture_semantic_planning.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/ask_user_question_tool.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/cleanup.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/completion_guard_state.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/context.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/display_replay.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/events.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/handoff.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/interrupt.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/observability.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/pipeline_runner.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/prompts/interrupt_judge.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/public_errors.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/recovery.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/resume_recovery.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/session.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/show_diagram_tool.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/state_machine.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/sub_pipeline_executor.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/transcript_storage.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/ui_contract.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/engine/user_input.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/hooks/deploying.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/prompts/architecture_planning.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/prompts/confirm_and_select.a2a.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/prompts/confirm_and_select.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/prompts/evaluate_candidates.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/prompts/reviewing.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/references/cloud-products/oss.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/references/cloud-products/rds.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/references/cloud-products/redis.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/references/cloud-products/slb.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/references/cloud-products/vpc.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/references/ros-template.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/references/template-parameters.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/references/terraform-template.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-architecture/evals.json +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/cloud-products/oss.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/cloud-products/rds.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/cloud-products/redis.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/cloud-products/slb.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/cloud-products/vpc.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/ros-template.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/template-parameters.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/terraform-template.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/evals.json +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/cloud-products/oss.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/cloud-products/rds.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/cloud-products/redis.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/cloud-products/slb.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/cloud-products/vpc.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/ros-template.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/template-parameters.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/terraform-template.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-intent/evals.json +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-review/SKILL.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-review/evals.json +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/evals.json +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/cloud-products/oss.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/cloud-products/rds.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/cloud-products/redis.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/cloud-products/slb.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/cloud-products/vpc.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/ros-template.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/template-parameters.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/terraform-template.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/tools/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/tools/ros_deploy_tool.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/tools/ros_template_tools.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/pipeline/selling/tools/show_candidate_detail_tool.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/providers/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/providers/anthropic_provider.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/providers/azure_openai_provider.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/providers/base.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/providers/dashscope_provider.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/providers/deepseek_provider.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/providers/gemini_provider.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/providers/kimi_provider.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/providers/lmstudio_provider.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/providers/manager.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/providers/minimax_provider.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/providers/modelscope_provider.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/providers/ollama_provider.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/providers/openai_provider.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/providers/openrouter_provider.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/providers/registry.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/providers/request_logging.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/providers/request_policy.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/providers/retry.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/providers/siliconflow_provider.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/providers/stream_watchdog.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/providers/thinking.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/providers/volcengine_provider.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/providers/zhipu_provider.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/agent_factory.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/capabilities/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/capabilities/auto_detect.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/capabilities/multimodal.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/cloud_credentials.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/context_manager.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/permissions/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/permissions/audit.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/permissions/loader.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/permissions/pipeline.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/permissions/rule_scope.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/permissions/storage.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/permissions/trusted_roots.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/providers/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/providers/aliyun_oauth.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/qwenpaw_source.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/session_backup.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/session_backup_state.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/session_layout.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/session_logging.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/session_metadata.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/session_resolver.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/session_storage.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/session_usage.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/telemetry/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/telemetry/attributes.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/telemetry/client.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/telemetry/config.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/telemetry/constants.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/telemetry/content_serializer.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/telemetry/events.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/telemetry/fallback.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/telemetry/identity.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/telemetry/metrics.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/telemetry/names.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/telemetry/sanitize.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/telemetry/scope.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/telemetry/sink.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/telemetry/tracing.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/telemetry/types.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/token_budget.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/token_counter.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/services/update_checker.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/auto_trigger.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/bundled/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/bundled/iac_aliyun/SKILL.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/bundled/iac_aliyun/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/bundled/iac_aliyun/auto_trigger.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/oss.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/rds.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/redis.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/slb.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/vpc.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/bundled/iac_aliyun/references/ros-template.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/bundled/iac_aliyun/references/template-parameter-recommendation.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/bundled/iac_aliyun/references/template-parameters.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/bundled/iac_aliyun/references/terraform-template.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/bundled/iac_aliyun/scripts/tf2ros.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/bundled/pac_aliyun/SKILL.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/bundled/pac_aliyun/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/bundled/pac_aliyun/auto_trigger.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/bundled/pac_aliyun/references/infraguard-policy-generation.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/bundled/simplify.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/discovery.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/frontmatter.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/listing.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/loader.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/management.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/processor.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/settings.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/skill_definition.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/skills/skill_tool.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/state/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/state/app_state.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tasks/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tasks/notification_queue.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tasks/task_state.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tasks/task_tools.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/base.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/bash/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/bash/argv_safety.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/bash/command_parser.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/bash/mode_validation.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/bash/path_validation.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/bash/permissions.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/bash/readonly_commands.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/bash/rule_matching.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/bash/safety_checks.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/aliyun_api_doc.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/aliyun_doc_search.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/api_contract.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/api_hooks.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/api_identifiers.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/contract_store.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/data/README.md +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/data/endpoints/catalog.json +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/data/endpoints/generation_report.json +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/data/endpoints/legacy.yml +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/data/endpoints/overrides.yml +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/data/endpoints/unavailable.json +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/data/openmeta/api_overrides.yml +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/data/openmeta/exclusions.yml +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/data/openmeta/product_aliases.yml +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/data/openmeta/product_catalog.json +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/data/oss/operation_catalog.json +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/data/validation/judgments.yml +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/data/validation/overrides.yml +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/hooks/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/hooks/ros_parameters.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/hooks/ros_validate.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/openmeta.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/oss_v4_adapter.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/product_resolver.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/result_contract.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/retry_policy.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_template_tools.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/action_policy.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/analyzer.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/association_property_specs.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/count.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/data/ros_association_property_specs.json +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/data/ros_official_resource_index.json +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/data/ros_resource_value_specs.json +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/data/ros_template_body_action_policies.json +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/facts.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/function_specs.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/model.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/outcome.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/parser.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/renderer.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/resource_value_specs.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/rules/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/rules/association_property.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/rules/base.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/rules/registry.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/symbols.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/template_kind.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/types.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/validator.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_yaml.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/runtime.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/template_source.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/user_agent.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/validation_policy.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/base_api.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/base_stack.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/registry.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/cloud/types.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/edit_file.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/glob.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/list_files.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/path_safety.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/read_file.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/result_storage.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/tool_executor.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/web_fetch.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/tools/write_file.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/types/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/types/permissions.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/types/skill_source.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/types/stream_events.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/components/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/components/candidate_selection.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/components/dialog.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/components/divider.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/components/fuzzy_picker.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/components/parallel_tabs.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/components/progress_bar.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/components/search_box.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/components/select.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/components/status_icon.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/components/tabs.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/core/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/core/in_place_render.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/core/input_history.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/core/key_event.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/core/prompt_input.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/core/raw_input.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/core/raw_input_win.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/core/screen.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/diagram_rendering.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/dialogs/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/dialogs/global_search.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/dialogs/history_search.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/dialogs/mcp_manager.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/dialogs/memory.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/dialogs/memory_editor.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/dialogs/model_picker.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/dialogs/quick_open.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/dialogs/resume_picker.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/dialogs/skills_picker.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/keybindings/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/keybindings/manager.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/pipeline_display_replay.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/pipeline_styles.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/renderer.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/spinner.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/stream_accumulator.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/suggestions/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/suggestions/aggregator.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/suggestions/command_provider.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/suggestions/directory_provider.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/suggestions/file_provider.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/suggestions/shell_history_provider.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/suggestions/skill_provider.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/suggestions/token_extractor.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/suggestions/types.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/ui/transcript_view.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/utils/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/utils/async_lifecycle.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/utils/background_housekeeping.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/utils/cleanup.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/utils/console.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/utils/image/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/utils/image/clipboard.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/utils/image/format_detect.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/utils/image/pasted_content.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/utils/image/processor.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/utils/image/resizer.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/utils/image/store.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/utils/json_utils.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/utils/log.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/utils/path_components.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/utils/path_locks.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/utils/public_errors.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/utils/public_paths.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/utils/signals.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/utils/state_io.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/utils/tool_input_parser.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/utils/tool_result_redaction.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/utils/windows_paths.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/__init__.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/cleanup.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/commands.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/diagram_cache.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/diagram_optimizer.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/diagrams.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/events.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/files.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/images.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/mcp_settings.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/outputs.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/permissions.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/pipeline.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/pipeline_actions.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/pipeline_transcript.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/security.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/session_manager.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/session_titler.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/shell.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/skills.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/static/icons/sidebar-new-thread.svg +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/static/icons/sidebar-project-open.svg +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/static/icons/sidebar-search.svg +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/static/icons/sidebar-settings.svg +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/static/icons/sidebar-skills.svg +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/static/js/components/blocking.js +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/static/js/components/composer.js +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/static/js/components/image_lightbox.js +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/static/js/components/pipeline.js +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/static/js/components/tool_cards.js +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/static/js/events.js +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/static/js/i18n.js +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/static/js/mermaid_render.js +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/static/js/token_transport.js +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/static/js/vendor/markdown-it.LICENSE +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/static/js/vendor/markdown-it.min.js +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/static/js/vendor/mermaid.LICENSE +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/static/js/vendor/mermaid.min.js +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/static/js/vendor/token-crypto.js +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code/web/token_transport.py +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code.egg-info/dependency_links.txt +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code.egg-info/entry_points.txt +0 -0
- {iac_code-0.11.4 → iac_code-0.12.0}/src/iac_code.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: iac_code
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.12.0
|
|
4
4
|
Summary: Your AI-powered Infrastructure as Code assistant
|
|
5
5
|
Classifier: Programming Language :: Python :: 3
|
|
6
6
|
Classifier: Programming Language :: Python :: 3.10
|
|
@@ -86,6 +86,18 @@ iac-code web
|
|
|
86
86
|
|
|
87
87
|
By default it opens `http://127.0.0.1:8766` in your browser (loopback only). See the [Web App guide](https://aliyun.github.io/iac-code/web-app) for details.
|
|
88
88
|
|
|
89
|
+
### Desktop App
|
|
90
|
+
|
|
91
|
+
For an installed native experience, download the package for your platform from [GitHub Releases](https://github.com/aliyun/iac-code/releases):
|
|
92
|
+
|
|
93
|
+
- macOS Apple Silicon: `.dmg`
|
|
94
|
+
- Windows x64: setup `.exe`
|
|
95
|
+
- Linux x64: `.AppImage` or `.deb`
|
|
96
|
+
|
|
97
|
+
The Desktop app runs the same IaC Code engine and uses the same providers, cloud credentials, settings, projects, and sessions as the CLI and Web app. On first launch, select the project directory you want IaC Code to work in. Windows also checks for Git Bash and guides you through installation if it is missing.
|
|
98
|
+
|
|
99
|
+
macOS, Windows, and AppImage builds can check for and apply cryptographically signed updates in the app. The deb package is updated by installing a newer package. Release installers do not yet carry commercial publisher signatures, so macOS or Windows may display an unknown-developer warning; verify the accompanying `SHA256SUMS` before installation. See the [Desktop App guide](https://aliyun.github.io/iac-code/docs/desktop-app) for installation and troubleshooting details.
|
|
100
|
+
|
|
89
101
|
## Contributing
|
|
90
102
|
|
|
91
103
|
Install [uv](https://docs.astral.sh/uv/getting-started/installation/), then:
|
|
@@ -66,6 +66,18 @@ iac-code web
|
|
|
66
66
|
|
|
67
67
|
By default it opens `http://127.0.0.1:8766` in your browser (loopback only). See the [Web App guide](https://aliyun.github.io/iac-code/web-app) for details.
|
|
68
68
|
|
|
69
|
+
### Desktop App
|
|
70
|
+
|
|
71
|
+
For an installed native experience, download the package for your platform from [GitHub Releases](https://github.com/aliyun/iac-code/releases):
|
|
72
|
+
|
|
73
|
+
- macOS Apple Silicon: `.dmg`
|
|
74
|
+
- Windows x64: setup `.exe`
|
|
75
|
+
- Linux x64: `.AppImage` or `.deb`
|
|
76
|
+
|
|
77
|
+
The Desktop app runs the same IaC Code engine and uses the same providers, cloud credentials, settings, projects, and sessions as the CLI and Web app. On first launch, select the project directory you want IaC Code to work in. Windows also checks for Git Bash and guides you through installation if it is missing.
|
|
78
|
+
|
|
79
|
+
macOS, Windows, and AppImage builds can check for and apply cryptographically signed updates in the app. The deb package is updated by installing a newer package. Release installers do not yet carry commercial publisher signatures, so macOS or Windows may display an unknown-developer warning; verify the accompanying `SHA256SUMS` before installation. See the [Desktop App guide](https://aliyun.github.io/iac-code/docs/desktop-app) for installation and troubleshooting details.
|
|
80
|
+
|
|
69
81
|
## Contributing
|
|
70
82
|
|
|
71
83
|
Install [uv](https://docs.astral.sh/uv/getting-started/installation/), then:
|
|
@@ -30,7 +30,11 @@ dependencies = [
|
|
|
30
30
|
"alibabacloud-oss-v2>=1.2,<2",
|
|
31
31
|
"aiohttp>=3.10,<4",
|
|
32
32
|
"defusedxml>=0.7,<1",
|
|
33
|
-
|
|
33
|
+
# >=1.0.8 for EcsRamRoleCredentialsProvider(async_update_enabled=...) and
|
|
34
|
+
# refreshable Credentials.get_expiration(), both required by the ECS RAM Role runtime.
|
|
35
|
+
"alibabacloud-credentials>=1.0.8",
|
|
36
|
+
# ICredentialsProvider is implemented directly by EcsRamRoleProviderAdapter.
|
|
37
|
+
"alibabacloud-credentials-api>=1.0.0",
|
|
34
38
|
"loguru>=0.7.0",
|
|
35
39
|
"opentelemetry-distro>=0.48b0",
|
|
36
40
|
"opentelemetry-exporter-otlp>=1.27.0",
|
|
@@ -89,6 +93,12 @@ dev = [
|
|
|
89
93
|
"tomli>=2.0; python_version<\"3.11\"",
|
|
90
94
|
"pexpect>=4.9.0",
|
|
91
95
|
]
|
|
96
|
+
desktop = [
|
|
97
|
+
"a2a-sdk[http-server,signing]>=1.0.2,<2",
|
|
98
|
+
"pyinstaller==6.21.0",
|
|
99
|
+
"termaid>=0.1; python_version >= '3.11'",
|
|
100
|
+
"uvicorn[standard]>=0.30.0",
|
|
101
|
+
]
|
|
92
102
|
|
|
93
103
|
[build-system]
|
|
94
104
|
requires = ["setuptools>=68.0"]
|
|
@@ -109,6 +119,7 @@ version = {attr = "iac_code.__version__"}
|
|
|
109
119
|
"**/*.html",
|
|
110
120
|
"**/*.css",
|
|
111
121
|
"**/*.js",
|
|
122
|
+
"**/*.png",
|
|
112
123
|
"**/*.svg",
|
|
113
124
|
"**/*.LICENSE",
|
|
114
125
|
"**/*.rego",
|
|
@@ -87,6 +87,7 @@ _COMMITTED_BACKUP_VISIBILITY = "committed"
|
|
|
87
87
|
_WAITING_INPUT_CANCEL_LOCKS = PathLockRegistry()
|
|
88
88
|
_TERMINAL_PUBLICATION_UNAVAILABLE_KIND = "terminal_publication_unavailable"
|
|
89
89
|
_HANDOFF_PUBLICATION_UNAVAILABLE_ACTION = "switch_to_normal_unavailable"
|
|
90
|
+
_PREREQUISITE_METADATA_UNSET = object()
|
|
90
91
|
_TERMINAL_EVENT_BY_SIDECAR_STATUS = {
|
|
91
92
|
"completed": ("pipeline_completed", "completed"),
|
|
92
93
|
"failed": ("pipeline_failed", "failed"),
|
|
@@ -420,12 +421,29 @@ class IacCodeA2APipelineExecutor:
|
|
|
420
421
|
iac_code_session_id=ctx.session_id,
|
|
421
422
|
)
|
|
422
423
|
self._configure_agent_runtime_for_request(agent_runtime)
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
424
|
+
if os.environ.get("IAC_CODE_DESKTOP_RUNTIME") == "1":
|
|
425
|
+
prerequisite_metadata = await asyncio.to_thread(
|
|
426
|
+
self._inspect_pipeline_prerequisite_metadata,
|
|
427
|
+
pipeline_name=get_pipeline_name(),
|
|
428
|
+
cwd=cwd,
|
|
429
|
+
session_id=ctx.session_id,
|
|
430
|
+
session_storage=session_storage,
|
|
431
|
+
resume_from_sidecar=True,
|
|
432
|
+
)
|
|
433
|
+
pipeline = self._create_pipeline(
|
|
434
|
+
session_id=ctx.session_id,
|
|
435
|
+
cwd=cwd,
|
|
436
|
+
runtime=agent_runtime,
|
|
437
|
+
session_storage=session_storage,
|
|
438
|
+
prerequisite_metadata=prerequisite_metadata,
|
|
439
|
+
)
|
|
440
|
+
else:
|
|
441
|
+
pipeline = self._create_pipeline(
|
|
442
|
+
session_id=ctx.session_id,
|
|
443
|
+
cwd=cwd,
|
|
444
|
+
runtime=agent_runtime,
|
|
445
|
+
session_storage=session_storage,
|
|
446
|
+
)
|
|
429
447
|
self._set_pipeline_telemetry_correlation(pipeline, task_id=task_id, context_id=context_id)
|
|
430
448
|
publisher = self._publisher(
|
|
431
449
|
event_queue=event_queue,
|
|
@@ -451,13 +469,14 @@ class IacCodeA2APipelineExecutor:
|
|
|
451
469
|
ctx.runtime = pipeline_runtime
|
|
452
470
|
self._task_store.mirror_context(ctx)
|
|
453
471
|
|
|
454
|
-
def
|
|
472
|
+
def create_fresh_pipeline(prerequisite_metadata: object = _PREREQUISITE_METADATA_UNSET) -> Any:
|
|
455
473
|
fresh_pipeline = self._create_pipeline(
|
|
456
474
|
session_id=ctx.session_id,
|
|
457
475
|
cwd=cwd,
|
|
458
476
|
runtime=agent_runtime,
|
|
459
477
|
session_storage=session_storage,
|
|
460
478
|
resume_from_sidecar=False,
|
|
479
|
+
prerequisite_metadata=prerequisite_metadata,
|
|
461
480
|
)
|
|
462
481
|
self._set_pipeline_telemetry_correlation(
|
|
463
482
|
fresh_pipeline,
|
|
@@ -466,6 +485,22 @@ class IacCodeA2APipelineExecutor:
|
|
|
466
485
|
)
|
|
467
486
|
return fresh_pipeline
|
|
468
487
|
|
|
488
|
+
if os.environ.get("IAC_CODE_DESKTOP_RUNTIME") == "1":
|
|
489
|
+
|
|
490
|
+
async def fresh_pipeline_factory() -> Any:
|
|
491
|
+
prerequisite_metadata = await asyncio.to_thread(
|
|
492
|
+
self._inspect_pipeline_prerequisite_metadata,
|
|
493
|
+
pipeline_name=get_pipeline_name(),
|
|
494
|
+
cwd=cwd,
|
|
495
|
+
session_id=ctx.session_id,
|
|
496
|
+
session_storage=session_storage,
|
|
497
|
+
resume_from_sidecar=False,
|
|
498
|
+
)
|
|
499
|
+
return create_fresh_pipeline(prerequisite_metadata)
|
|
500
|
+
|
|
501
|
+
else:
|
|
502
|
+
fresh_pipeline_factory = create_fresh_pipeline
|
|
503
|
+
|
|
469
504
|
selected = await self._select_stream(
|
|
470
505
|
pipeline,
|
|
471
506
|
prompt,
|
|
@@ -1156,17 +1191,20 @@ class IacCodeA2APipelineExecutor:
|
|
|
1156
1191
|
runtime: Any,
|
|
1157
1192
|
session_storage: SessionStorage,
|
|
1158
1193
|
resume_from_sidecar: bool = True,
|
|
1194
|
+
prerequisite_metadata: object = _PREREQUISITE_METADATA_UNSET,
|
|
1159
1195
|
) -> Any:
|
|
1160
1196
|
pipeline_name = get_pipeline_name()
|
|
1161
|
-
prerequisite_resolution =
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1197
|
+
prerequisite_resolution = prerequisite_metadata
|
|
1198
|
+
if prerequisite_resolution is _PREREQUISITE_METADATA_UNSET:
|
|
1199
|
+
prerequisite_resolution = self._inspect_pipeline_prerequisite_metadata(
|
|
1200
|
+
pipeline_name=pipeline_name,
|
|
1201
|
+
cwd=cwd,
|
|
1202
|
+
session_id=session_id,
|
|
1203
|
+
session_storage=session_storage,
|
|
1204
|
+
resume_from_sidecar=resume_from_sidecar,
|
|
1205
|
+
)
|
|
1168
1206
|
create_kwargs: dict[str, Any] = {}
|
|
1169
|
-
if prerequisite_resolution
|
|
1207
|
+
if isinstance(prerequisite_resolution, dict):
|
|
1170
1208
|
create_kwargs["prerequisite_resolution"] = prerequisite_resolution
|
|
1171
1209
|
delegated_factory = self._aliyun_delegated_executor_factory
|
|
1172
1210
|
if delegated_factory is None:
|
|
@@ -2100,7 +2138,7 @@ class IacCodeA2APipelineExecutor:
|
|
|
2100
2138
|
if status in _TERMINAL_SIDECAR_STATUSES:
|
|
2101
2139
|
if _terminal_sidecar_matches_task(publisher, status, task_id=task_id, context_id=context_id):
|
|
2102
2140
|
return _SelectedPipelineStream(pipeline=pipeline, stream=_empty_stream())
|
|
2103
|
-
pipeline = self._fresh_pipeline_after_sidecar_mismatch(pipeline, fresh_pipeline_factory)
|
|
2141
|
+
pipeline = await self._fresh_pipeline_after_sidecar_mismatch(pipeline, fresh_pipeline_factory)
|
|
2104
2142
|
return _SelectedPipelineStream(
|
|
2105
2143
|
pipeline=pipeline,
|
|
2106
2144
|
stream=pipeline.run(_pipeline_runner_input(pipeline_input)),
|
|
@@ -2110,13 +2148,16 @@ class IacCodeA2APipelineExecutor:
|
|
|
2110
2148
|
stream=pipeline.run(_pipeline_runner_input(pipeline_input)),
|
|
2111
2149
|
)
|
|
2112
2150
|
|
|
2113
|
-
def _fresh_pipeline_after_sidecar_mismatch(
|
|
2151
|
+
async def _fresh_pipeline_after_sidecar_mismatch(
|
|
2114
2152
|
self,
|
|
2115
2153
|
pipeline: Any,
|
|
2116
2154
|
fresh_pipeline_factory: Callable[[], Any],
|
|
2117
2155
|
) -> Any:
|
|
2118
2156
|
self._clear_terminal_sidecar(pipeline)
|
|
2119
|
-
|
|
2157
|
+
fresh_pipeline = fresh_pipeline_factory()
|
|
2158
|
+
if inspect.isawaitable(fresh_pipeline):
|
|
2159
|
+
return await fresh_pipeline
|
|
2160
|
+
return fresh_pipeline
|
|
2120
2161
|
|
|
2121
2162
|
def _clear_terminal_sidecar(self, pipeline: Any) -> None:
|
|
2122
2163
|
clear_sidecar = getattr(pipeline, "clear_sidecar", None)
|
|
@@ -1602,7 +1602,11 @@ class AgentLoop:
|
|
|
1602
1602
|
for request, result in denied_results
|
|
1603
1603
|
]
|
|
1604
1604
|
for req, result in zip(requests, results):
|
|
1605
|
-
if
|
|
1605
|
+
if (
|
|
1606
|
+
result.metadata
|
|
1607
|
+
and result.metadata.get("step_result") is not None
|
|
1608
|
+
and result.metadata.get("complete_step_terminal", True)
|
|
1609
|
+
):
|
|
1606
1610
|
terminal_step_result = True
|
|
1607
1611
|
processed = self._result_storage.process(req.id, result.content)
|
|
1608
1612
|
self._mark_read_memory_tool_result(req, result)
|
|
@@ -12,12 +12,9 @@ import subprocess
|
|
|
12
12
|
import typer
|
|
13
13
|
|
|
14
14
|
from iac_code.i18n import _
|
|
15
|
-
from iac_code.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
_clear_cache,
|
|
19
|
-
_find_git_bash_path,
|
|
20
|
-
)
|
|
15
|
+
from iac_code.services.git_bash import GitBashInstallError
|
|
16
|
+
from iac_code.services.git_bash import install_git_bash as _install_git_bash
|
|
17
|
+
from iac_code.utils.platform import GitBashNotFoundError, _clear_cache, _find_git_bash_path
|
|
21
18
|
|
|
22
19
|
|
|
23
20
|
def install_git_bash() -> None:
|
|
@@ -43,42 +40,32 @@ def install_git_bash() -> None:
|
|
|
43
40
|
typer.echo(_("Installing Git for Windows via npmmirror..."))
|
|
44
41
|
|
|
45
42
|
try:
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
"Bypass",
|
|
52
|
-
"-Command",
|
|
53
|
-
_NPMMIRROR_CMD,
|
|
54
|
-
],
|
|
55
|
-
check=False,
|
|
56
|
-
)
|
|
57
|
-
except FileNotFoundError:
|
|
58
|
-
typer.echo(
|
|
59
|
-
_("powershell.exe was not found on PATH; cannot run installer."),
|
|
60
|
-
err=True,
|
|
61
|
-
)
|
|
62
|
-
raise typer.Exit(1)
|
|
63
|
-
|
|
64
|
-
if result.returncode != 0:
|
|
65
|
-
typer.echo(
|
|
66
|
-
_("Installation failed (PowerShell exited with code {})").format(result.returncode),
|
|
67
|
-
err=True,
|
|
68
|
-
)
|
|
69
|
-
raise typer.Exit(1)
|
|
70
|
-
|
|
71
|
-
_clear_cache()
|
|
72
|
-
try:
|
|
73
|
-
path = _find_git_bash_path()
|
|
74
|
-
except GitBashNotFoundError:
|
|
75
|
-
typer.echo(
|
|
76
|
-
_(
|
|
77
|
-
"Installer exited but bash.exe was not found in common locations; "
|
|
78
|
-
"UAC may have been cancelled or the installer used a non-standard path."
|
|
79
|
-
),
|
|
80
|
-
err=True,
|
|
43
|
+
path = _install_git_bash(
|
|
44
|
+
run=subprocess.run,
|
|
45
|
+
find=_find_git_bash_path,
|
|
46
|
+
clear_cache=_clear_cache,
|
|
47
|
+
check_existing=False,
|
|
81
48
|
)
|
|
49
|
+
except GitBashInstallError as exc:
|
|
50
|
+
reason = str(exc)
|
|
51
|
+
if reason == "powershell-not-found":
|
|
52
|
+
typer.echo(
|
|
53
|
+
_("powershell.exe was not found on PATH; cannot run installer."),
|
|
54
|
+
err=True,
|
|
55
|
+
)
|
|
56
|
+
elif reason.startswith("installer-exit:"):
|
|
57
|
+
typer.echo(
|
|
58
|
+
_("Installation failed (PowerShell exited with code {})").format(reason.partition(":")[2]),
|
|
59
|
+
err=True,
|
|
60
|
+
)
|
|
61
|
+
else:
|
|
62
|
+
typer.echo(
|
|
63
|
+
_(
|
|
64
|
+
"Installer exited but bash.exe was not found in common locations; "
|
|
65
|
+
"UAC may have been cancelled or the installer used a non-standard path."
|
|
66
|
+
),
|
|
67
|
+
err=True,
|
|
68
|
+
)
|
|
82
69
|
raise typer.Exit(1)
|
|
83
70
|
|
|
84
71
|
typer.echo("✓ " + _("Git for Windows installed at {}").format(path))
|
|
@@ -67,6 +67,21 @@ def _piped_repl_requires_tty_message(piped_input: str) -> str:
|
|
|
67
67
|
return _("Interactive REPL input requires a terminal. Use `iac-code --prompt -` for non-interactive stdin input.")
|
|
68
68
|
|
|
69
69
|
|
|
70
|
+
def _require_windows_git_bash() -> None:
|
|
71
|
+
"""Apply the same startup prerequisite check to interactive and Web modes."""
|
|
72
|
+
if sys.platform != "win32":
|
|
73
|
+
return
|
|
74
|
+
from iac_code.utils.platform import GitBashNotFoundError, PlatformInfo
|
|
75
|
+
|
|
76
|
+
try:
|
|
77
|
+
PlatformInfo.detect()
|
|
78
|
+
except GitBashNotFoundError as exc:
|
|
79
|
+
from rich.console import Console
|
|
80
|
+
|
|
81
|
+
Console(stderr=True).print("[red]✗[/red] {}".format(exc), soft_wrap=True)
|
|
82
|
+
raise SystemExit(1)
|
|
83
|
+
|
|
84
|
+
|
|
70
85
|
# `install-git-bash` is a Windows-only helper that installs Git for Windows
|
|
71
86
|
# via the npmmirror mirror. We register it conditionally so it does not
|
|
72
87
|
# show up in --help on non-Windows platforms (where it could not work).
|
|
@@ -101,6 +116,7 @@ def web(
|
|
|
101
116
|
),
|
|
102
117
|
) -> None:
|
|
103
118
|
"""Run iac-code as a local Web app."""
|
|
119
|
+
_require_windows_git_bash()
|
|
104
120
|
from iac_code.services.telemetry import bootstrap_telemetry, graceful_shutdown
|
|
105
121
|
from iac_code.web.server import run_web_server
|
|
106
122
|
from iac_code.web.settings import developer_settings
|
|
@@ -206,16 +222,7 @@ def main(
|
|
|
206
222
|
enable_virtual_terminal()
|
|
207
223
|
|
|
208
224
|
# On Windows, verify Git Bash is available before proceeding.
|
|
209
|
-
|
|
210
|
-
from iac_code.utils.platform import GitBashNotFoundError, PlatformInfo
|
|
211
|
-
|
|
212
|
-
try:
|
|
213
|
-
PlatformInfo.detect()
|
|
214
|
-
except GitBashNotFoundError as e:
|
|
215
|
-
from rich.console import Console
|
|
216
|
-
|
|
217
|
-
Console(stderr=True).print(f"[red]✗[/red] {e}", soft_wrap=True)
|
|
218
|
-
raise SystemExit(1)
|
|
225
|
+
_require_windows_git_bash()
|
|
219
226
|
|
|
220
227
|
if resume and continue_session:
|
|
221
228
|
typer.echo(_("Error: --resume and --continue cannot be used together."), err=True)
|
|
@@ -35,7 +35,7 @@ from iac_code.types.stream_events import (
|
|
|
35
35
|
TextDeltaEvent,
|
|
36
36
|
Usage,
|
|
37
37
|
)
|
|
38
|
-
from iac_code.utils.project_paths import
|
|
38
|
+
from iac_code.utils.project_paths import project_dir_candidates
|
|
39
39
|
|
|
40
40
|
EXIT_OK = 0
|
|
41
41
|
EXIT_ERROR = 1
|
|
@@ -75,7 +75,7 @@ class ProcessSessionLock:
|
|
|
75
75
|
"""Cross-process advisory lock for a single cwd/session_id pair."""
|
|
76
76
|
|
|
77
77
|
def __init__(self, *, cwd: str, session_id: str) -> None:
|
|
78
|
-
session_path =
|
|
78
|
+
session_path = project_dir_candidates(cwd)[0] / f"{session_id}.jsonl"
|
|
79
79
|
self._lock_path = session_path.with_name(f".{session_path.name}.process.lock")
|
|
80
80
|
self._lock_file: IO[bytes] | None = None
|
|
81
81
|
|
|
@@ -640,8 +640,12 @@ def _input_masked(title: str, prompt: str, existing: str | None = None) -> str |
|
|
|
640
640
|
return "".join(chars) if chars else None
|
|
641
641
|
|
|
642
642
|
|
|
643
|
-
def _input_text(title: str, prompt: str) -> str | None | _BackSentinel:
|
|
644
|
-
"""Full-screen text input. Returns str, None (Ctrl+C), or _BACK (Esc).
|
|
643
|
+
def _input_text(title: str, prompt: str, *, allow_empty: bool = False) -> str | None | _BackSentinel:
|
|
644
|
+
"""Full-screen text input. Returns str, None (Ctrl+C), or _BACK (Esc).
|
|
645
|
+
|
|
646
|
+
With `allow_empty=True`, confirming an empty buffer returns `""` instead of `None`,
|
|
647
|
+
which lets an optional field be left blank on purpose.
|
|
648
|
+
"""
|
|
645
649
|
chars: list[str] = []
|
|
646
650
|
hints = "Enter {} Esc {}".format(_("Confirm"), _("Back"))
|
|
647
651
|
|
|
@@ -725,6 +729,8 @@ def _input_text(title: str, prompt: str) -> str | None | _BackSentinel:
|
|
|
725
729
|
finally:
|
|
726
730
|
termios.tcsetattr(fd, termios.TCSADRAIN, old)
|
|
727
731
|
|
|
732
|
+
if not chars and allow_empty:
|
|
733
|
+
return ""
|
|
728
734
|
return "".join(chars) if chars else None
|
|
729
735
|
|
|
730
736
|
|
|
@@ -1197,6 +1203,8 @@ def _aliyun_credential_mode_label(mode: str) -> str:
|
|
|
1197
1203
|
return _("STS Token")
|
|
1198
1204
|
if mode == "RamRoleArn":
|
|
1199
1205
|
return _("RAM Role")
|
|
1206
|
+
if mode == "EcsRamRole":
|
|
1207
|
+
return _("ECS RAM Role")
|
|
1200
1208
|
if mode == "OAuth":
|
|
1201
1209
|
return _("OAuth Login (Browser)")
|
|
1202
1210
|
return mode
|
|
@@ -1209,6 +1217,7 @@ def _aliyun_credential_field_label(label: str) -> str:
|
|
|
1209
1217
|
"STS Token": _("STS Token"),
|
|
1210
1218
|
"RAM Role ARN": _("RAM Role ARN"),
|
|
1211
1219
|
"Session Name": _("Session Name"),
|
|
1220
|
+
"ECS RAM Role Name": _("ECS RAM Role Name"),
|
|
1212
1221
|
"OAuth Site Type": _("OAuth Site Type"),
|
|
1213
1222
|
"OAuth Access Token": _("OAuth Access Token"),
|
|
1214
1223
|
"OAuth Refresh Token": _("OAuth Refresh Token"),
|
|
@@ -1228,6 +1237,11 @@ def _format_aliyun_credential_field_value(
|
|
|
1228
1237
|
if field_name in _ALIYUN_EPOCH_FIELDS:
|
|
1229
1238
|
return _format_local_epoch(raw_value)
|
|
1230
1239
|
|
|
1240
|
+
if field_name == "ram_role_name" and raw_value in ("", None):
|
|
1241
|
+
# An empty role name is a valid configuration, not a missing value: the runtime
|
|
1242
|
+
# discovers the bound role from ECS metadata.
|
|
1243
|
+
return _("Auto-detect from ECS metadata")
|
|
1244
|
+
|
|
1231
1245
|
value = str(raw_value) if raw_value not in ("", None) else ""
|
|
1232
1246
|
if value and sensitive:
|
|
1233
1247
|
value = mask_sensitive(value)
|
|
@@ -1415,6 +1429,7 @@ def _aliyun_credential_flow() -> str | None | _BackSentinel:
|
|
|
1415
1429
|
from iac_code.services.providers.aliyun import (
|
|
1416
1430
|
CREDENTIAL_MODES,
|
|
1417
1431
|
MODE_FIELDS,
|
|
1432
|
+
MODE_REQUIRED_FIELDS,
|
|
1418
1433
|
AliyunCredential,
|
|
1419
1434
|
AliyunCredentials,
|
|
1420
1435
|
)
|
|
@@ -1468,13 +1483,23 @@ def _aliyun_credential_flow() -> str | None | _BackSentinel:
|
|
|
1468
1483
|
if existing_cred and existing_cred.mode == selected_mode:
|
|
1469
1484
|
existing_value = getattr(existing_cred, field_name, "") or None
|
|
1470
1485
|
|
|
1486
|
+
# The ECS role name is optional: blank means auto-detect from instance metadata,
|
|
1487
|
+
# so an empty buffer must be accepted both when configuring and when clearing.
|
|
1488
|
+
optional_field = field_name == "ram_role_name"
|
|
1489
|
+
field_label = label
|
|
1490
|
+
if optional_field:
|
|
1491
|
+
field_label = "{} ({})".format(
|
|
1492
|
+
_aliyun_credential_field_label(label),
|
|
1493
|
+
_("Leave blank to auto-detect from ECS metadata"),
|
|
1494
|
+
)
|
|
1495
|
+
|
|
1471
1496
|
if sensitive:
|
|
1472
|
-
value = _input_masked(title, f"{
|
|
1497
|
+
value = _input_masked(title, f"{field_label}: ", existing=existing_value)
|
|
1473
1498
|
else:
|
|
1474
1499
|
if existing_value:
|
|
1475
|
-
value = _input_text_with_default(title,
|
|
1500
|
+
value = _input_text_with_default(title, field_label, existing_value, allow_empty=optional_field)
|
|
1476
1501
|
else:
|
|
1477
|
-
value = _input_text(title, f"{
|
|
1502
|
+
value = _input_text(title, f"{field_label}: ", allow_empty=optional_field)
|
|
1478
1503
|
|
|
1479
1504
|
if value is _BACK:
|
|
1480
1505
|
break # Go back to mode selection
|
|
@@ -1486,8 +1511,10 @@ def _aliyun_credential_flow() -> str | None | _BackSentinel:
|
|
|
1486
1511
|
if len(field_values) != len(mode_fields):
|
|
1487
1512
|
continue # User pressed back during field input
|
|
1488
1513
|
|
|
1489
|
-
# Validate that required fields are not empty
|
|
1490
|
-
|
|
1514
|
+
# Validate that required fields are not empty; optional fields such as the ECS
|
|
1515
|
+
# role name may legitimately stay blank.
|
|
1516
|
+
required_fields = MODE_REQUIRED_FIELDS.get(selected_mode, set())
|
|
1517
|
+
if not all(field_values.get(field_name) for field_name in required_fields):
|
|
1491
1518
|
continue
|
|
1492
1519
|
|
|
1493
1520
|
# Build credential and save
|
|
@@ -1499,6 +1526,7 @@ def _aliyun_credential_flow() -> str | None | _BackSentinel:
|
|
|
1499
1526
|
sts_token=field_values.get("sts_token", ""),
|
|
1500
1527
|
ram_role_arn=field_values.get("ram_role_arn", ""),
|
|
1501
1528
|
ram_session_name=field_values.get("ram_session_name", ""),
|
|
1529
|
+
ram_role_name=field_values.get("ram_role_name", ""),
|
|
1502
1530
|
)
|
|
1503
1531
|
AliyunCredentials.save(cred)
|
|
1504
1532
|
return _("Configured: Alibaba Cloud credentials saved to ~/.iac-code")
|
|
@@ -1537,8 +1565,14 @@ def _aliyun_region_flow() -> str | None | _BackSentinel:
|
|
|
1537
1565
|
return _("Configured: Alibaba Cloud region saved to ~/.iac-code")
|
|
1538
1566
|
|
|
1539
1567
|
|
|
1540
|
-
def _input_text_with_default(
|
|
1541
|
-
|
|
1568
|
+
def _input_text_with_default(
|
|
1569
|
+
title: str, label: str, default: str, *, allow_empty: bool = False
|
|
1570
|
+
) -> str | None | _BackSentinel:
|
|
1571
|
+
"""Full-screen text input with a default value shown. Returns str, None (Ctrl+C), or _BACK (Esc).
|
|
1572
|
+
|
|
1573
|
+
With `allow_empty=True`, confirming an emptied buffer returns `""` instead of `None`,
|
|
1574
|
+
which lets a previously configured optional value be cleared.
|
|
1575
|
+
"""
|
|
1542
1576
|
chars: list[str] = list(default)
|
|
1543
1577
|
hints = "Enter {} Esc {}".format(_("Confirm"), _("Back"))
|
|
1544
1578
|
|
|
@@ -1622,4 +1656,6 @@ def _input_text_with_default(title: str, label: str, default: str) -> str | None
|
|
|
1622
1656
|
finally:
|
|
1623
1657
|
termios.tcsetattr(fd, termios.TCSADRAIN, old)
|
|
1624
1658
|
|
|
1659
|
+
if not chars and allow_empty:
|
|
1660
|
+
return ""
|
|
1625
1661
|
return "".join(chars) if chars else None
|
|
@@ -27,20 +27,19 @@ async def clear_command(context=None, **kwargs) -> str:
|
|
|
27
27
|
console.file.flush()
|
|
28
28
|
|
|
29
29
|
# Re-render the welcome banner
|
|
30
|
-
from iac_code.ui.banner import
|
|
30
|
+
from iac_code.ui.banner import print_welcome_banner
|
|
31
31
|
|
|
32
32
|
state = store.get_state() if store else None
|
|
33
33
|
if state:
|
|
34
34
|
repl = getattr(context, "repl", None)
|
|
35
35
|
session_id = getattr(repl, "_session_id", None)
|
|
36
36
|
session_name = getattr(repl, "_session_name", None)
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
)
|
|
37
|
+
print_welcome_banner(
|
|
38
|
+
console,
|
|
39
|
+
state.model,
|
|
40
|
+
state.cwd,
|
|
41
|
+
session_id=session_id if isinstance(session_id, str) else None,
|
|
42
|
+
session_name=session_name if isinstance(session_name, str) else None,
|
|
44
43
|
)
|
|
45
44
|
|
|
46
45
|
return ""
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"""Desktop-only runtime support for the Tauri sidecar distribution."""
|
|
2
|
+
|
|
3
|
+
from iac_code.desktop.runtime import DesktopInstallContext, DesktopRuntimeConfig
|
|
4
|
+
|
|
5
|
+
DESKTOP_PROTOCOL_VERSION = 1
|
|
6
|
+
|
|
7
|
+
__all__ = ["DESKTOP_PROTOCOL_VERSION", "DesktopInstallContext", "DesktopRuntimeConfig"]
|