iac-code 0.11.3__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.3 → iac_code-0.12.0}/PKG-INFO +13 -1
- {iac_code-0.11.3 → iac_code-0.12.0}/README.md +12 -0
- {iac_code-0.11.3 → 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.3 → iac_code-0.12.0}/src/iac_code/a2a/executor.py +1 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/pipeline_events.py +6 -2
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/pipeline_executor.py +125 -19
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/pipeline_stream.py +13 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/task_store.py +20 -5
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/transports/dispatcher.py +5 -1
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/acp/server.py +1 -1
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/agent/agent_loop.py +7 -1
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/cli/headless.py +1 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/cli/install_git_bash.py +28 -41
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/cli/main.py +22 -11
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/cli/process_mode.py +4 -2
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/commands/auth.py +45 -9
- {iac_code-0.11.3 → 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.3 → iac_code-0.12.0}/src/iac_code/i18n/locales/de/LC_MESSAGES/messages.mo +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/i18n/locales/de/LC_MESSAGES/messages.po +122 -3
- iac_code-0.12.0/src/iac_code/i18n/locales/de/LC_MESSAGES/webui.mo +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/i18n/locales/de/LC_MESSAGES/webui.po +191 -25
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/i18n/locales/es/LC_MESSAGES/messages.mo +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/i18n/locales/es/LC_MESSAGES/messages.po +123 -3
- iac_code-0.12.0/src/iac_code/i18n/locales/es/LC_MESSAGES/webui.mo +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/i18n/locales/es/LC_MESSAGES/webui.po +196 -26
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/i18n/locales/fr/LC_MESSAGES/messages.mo +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/i18n/locales/fr/LC_MESSAGES/messages.po +120 -3
- iac_code-0.12.0/src/iac_code/i18n/locales/fr/LC_MESSAGES/webui.mo +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/i18n/locales/fr/LC_MESSAGES/webui.po +191 -26
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/i18n/locales/ja/LC_MESSAGES/messages.mo +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/i18n/locales/ja/LC_MESSAGES/messages.po +111 -3
- iac_code-0.12.0/src/iac_code/i18n/locales/ja/LC_MESSAGES/webui.mo +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/i18n/locales/ja/LC_MESSAGES/webui.po +163 -25
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/i18n/locales/pt/LC_MESSAGES/messages.mo +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/i18n/locales/pt/LC_MESSAGES/messages.po +120 -3
- iac_code-0.12.0/src/iac_code/i18n/locales/pt/LC_MESSAGES/webui.mo +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/i18n/locales/pt/LC_MESSAGES/webui.po +189 -26
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/i18n/locales/zh/LC_MESSAGES/messages.mo +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/i18n/locales/zh/LC_MESSAGES/messages.po +103 -7
- iac_code-0.12.0/src/iac_code/i18n/locales/zh/LC_MESSAGES/webui.mo +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/i18n/locales/zh/LC_MESSAGES/webui.po +161 -25
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/mcp/client.py +37 -11
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/mcp/oauth.py +12 -1
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/complete_step_tool.py +77 -5
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/completion_guard_state.py +27 -1
- iac_code-0.12.0/src/iac_code/pipeline/engine/hard_constraints.py +326 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/loader.py +38 -1
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/pipeline_runner.py +17 -46
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/prerequisites.py +165 -27
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/recovery.py +1 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/step_executor.py +15 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/step_spec.py +1 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/types.py +1 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/pipeline.yaml +12 -2
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/prompts/cost_estimating.md +13 -1
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/prompts/deploying.md +3 -8
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/prompts/intent_parsing.md +0 -1
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/prompts/template_generating.md +1 -3
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/references/cloud-products/ecs.md +23 -8
- {iac_code-0.11.3/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 +13 -10
- {iac_code-0.11.3/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 +80 -32
- {iac_code-0.11.3/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.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-architecture/SKILL.md +44 -3
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/SKILL.md +112 -6
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/evals.json +41 -3
- {iac_code-0.11.3 → 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.3/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 +13 -10
- {iac_code-0.11.3/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 +80 -32
- {iac_code-0.11.3/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.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/SKILL.md +6 -4
- {iac_code-0.11.3 → 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.3/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 +13 -10
- {iac_code-0.11.3/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 +80 -32
- {iac_code-0.11.3 → 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.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-intent/SKILL.md +58 -3
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/SKILL.md +9 -2
- {iac_code-0.11.3 → 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.3/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 +13 -10
- {iac_code-0.11.3/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 +80 -32
- {iac_code-0.11.3/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.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/tools/infraguard_scan_tool.py +112 -11
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/tools/ros_deploy_tool.py +3 -4
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/providers/manager.py +74 -1
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/agent_factory.py +51 -0
- iac_code-0.12.0/src/iac_code/services/git_bash.py +62 -0
- {iac_code-0.11.3 → 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.3 → iac_code-0.12.0}/src/iac_code/services/session_backup.py +135 -29
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/session_index.py +21 -12
- iac_code-0.12.0/src/iac_code/services/session_logging.py +279 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/telemetry/config.py +53 -9
- 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.3 → iac_code-0.12.0}/src/iac_code/skills/renderer.py +30 -9
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/bash/bash_tool.py +28 -9
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/acs3_transport.py +25 -33
- {iac_code-0.11.3 → 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.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/endpoint_resolver.py +25 -51
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/public_errors.py +54 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_client.py +23 -12
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_stack.py +39 -17
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_stack_instances.py +28 -15
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/base_stack.py +64 -5
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/grep.py +4 -2
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/types/stream_events.py +26 -0
- iac_code-0.12.0/src/iac_code/ui/assets/iac-code-terminal-logo.png +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/banner.py +123 -13
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/renderer.py +15 -5
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/repl.py +106 -18
- iac_code-0.12.0/src/iac_code/ui/terminal_image.py +257 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/utils/file_security.py +7 -2
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/utils/log.py +19 -1
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/utils/platform.py +86 -11
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/utils/project_paths.py +43 -6
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/app.py +457 -44
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/events.py +20 -1
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/memory.py +7 -2
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/outputs.py +31 -8
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/pipeline_prerequisites.py +111 -18
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/runtime.py +58 -10
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/server.py +28 -1
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/session_manager.py +68 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/settings.py +84 -7
- iac_code-0.12.0/src/iac_code/web/static/icons/iac-code-logo.svg +28 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/static/index.html +7 -2
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/static/js/api.js +35 -5
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/static/js/app.js +364 -37
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/static/js/components/output_panel.js +123 -7
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/static/js/components/workspace.js +191 -23
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/static/js/events.js +14 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/static/styles.css +136 -3
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code.egg-info/PKG-INFO +13 -1
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code.egg-info/SOURCES.txt +23 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code.egg-info/requires.txt +2 -1
- iac_code-0.11.3/src/iac_code/__init__.py +0 -2
- iac_code-0.11.3/src/iac_code/i18n/locales/de/LC_MESSAGES/webui.mo +0 -0
- iac_code-0.11.3/src/iac_code/i18n/locales/es/LC_MESSAGES/webui.mo +0 -0
- iac_code-0.11.3/src/iac_code/i18n/locales/fr/LC_MESSAGES/webui.mo +0 -0
- iac_code-0.11.3/src/iac_code/i18n/locales/ja/LC_MESSAGES/webui.mo +0 -0
- iac_code-0.11.3/src/iac_code/i18n/locales/pt/LC_MESSAGES/webui.mo +0 -0
- iac_code-0.11.3/src/iac_code/i18n/locales/zh/LC_MESSAGES/webui.mo +0 -0
- iac_code-0.11.3/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/ecs.md +0 -167
- iac_code-0.11.3/src/iac_code/skills/bundled/iac_aliyun/references/solutions/iac-code-web.md +0 -32
- iac_code-0.11.3/src/iac_code/skills/bundled/iac_aliyun/references/solutions/iac-code-web.ros.yml +0 -318
- {iac_code-0.11.3 → iac_code-0.12.0}/LICENSE +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/MANIFEST.in +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/setup.cfg +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/setup.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/agent_card.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/app.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/artifacts.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/backup.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/client.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/events.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/exposure.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/jsonrpc_passthrough.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/metadata_redaction.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/metrics.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/parts.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/persistence.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/pipeline_delta_coalescing.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/pipeline_flow_monitor.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/pipeline_journal.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/pipeline_outbound.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/pipeline_paths.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/pipeline_performance.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/pipeline_recovery.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/pipeline_snapshot.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/pipeline_transport_delivery.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/projection.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/push.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/push_queue.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/push_secrets.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/push_worker.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/router.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/runtime_overrides.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/runtime_registry.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/signing.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/thinking_metadata.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/transport.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/transports/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/transports/base.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/transports/grpc.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/transports/grpc_jsonrpc.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/transports/http.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/transports/redis_streams.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/transports/stdio.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/transports/unix.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/transports/websocket.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/a2a/types.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/acp/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/acp/convert.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/acp/http_sse.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/acp/mcp.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/acp/metrics.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/acp/runner.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/acp/session.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/acp/slash_registry.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/acp/state.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/acp/tools.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/acp/types.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/acp/version.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/agent/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/agent/agent_tool.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/agent/agent_types.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/agent/message.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/agent/system_prompt.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/cli/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/cli/output_formats.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/cli/process_events.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/cli/process_protocol.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/cli/update.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/commands/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/commands/compact.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/commands/debug.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/commands/effort.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/commands/exit.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/commands/help.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/commands/mcp.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/commands/memory.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/commands/model.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/commands/prompt.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/commands/registry.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/commands/rename.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/commands/resume.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/commands/skills.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/commands/status.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/commands/tasks.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/commands/thinking_enabled.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/config.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/i18n/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/i18n/html_extractor.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/mcp/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/mcp/cli.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/mcp/config.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/mcp/env_expansion.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/mcp/errors.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/mcp/manager.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/mcp/output.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/mcp/progress.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/mcp/prompt_dispatch.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/mcp/prompts.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/mcp/redaction.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/mcp/skills.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/mcp/storage.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/mcp/tools.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/mcp/types.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/memory/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/memory/memory_manager.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/memory/memory_tools.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/memory/project_memory.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/memory/recall.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/config.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/constants.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/display_names.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/architecture_graph.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/architecture_meta.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/architecture_metas/Categories.json +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/architecture_metas/config.json +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/architecture_metas/products.json +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/architecture_resource_inventory.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/architecture_rule_candidates.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/architecture_rule_drafts.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/architecture_rule_facts.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/architecture_rules.json +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/architecture_rules.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/architecture_semantic_planning.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/ask_user_question_tool.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/cleanup.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/context.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/display_replay.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/events.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/handoff.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/interrupt.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/observability.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/prompts/interrupt_judge.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/public_errors.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/resume_recovery.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/session.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/show_diagram_tool.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/state_machine.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/sub_pipeline_executor.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/transcript_storage.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/ui_contract.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/engine/user_input.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/hooks/deploying.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/prompts/architecture_planning.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/prompts/confirm_and_select.a2a.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/prompts/confirm_and_select.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/prompts/evaluate_candidates.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/prompts/reviewing.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/references/cloud-products/oss.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/references/cloud-products/rds.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/references/cloud-products/redis.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/references/cloud-products/slb.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/references/cloud-products/vpc.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/references/ros-template.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/references/template-parameters.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/references/terraform-template.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-architecture/evals.json +0 -0
- {iac_code-0.11.3 → 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.3 → 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.3 → 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.3 → 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.3 → 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.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/ros-template.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/template-parameters.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/terraform-template.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/evals.json +0 -0
- {iac_code-0.11.3 → 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.3 → 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.3 → 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.3 → 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.3 → 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.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/ros-template.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/template-parameters.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/terraform-template.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-intent/evals.json +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-review/SKILL.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-review/evals.json +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/evals.json +0 -0
- {iac_code-0.11.3 → 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.3 → 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.3 → 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.3 → 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.3 → 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.3 → 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.3 → 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.3 → 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.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/tools/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/tools/ros_template_tools.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/pipeline/selling/tools/show_candidate_detail_tool.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/providers/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/providers/anthropic_provider.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/providers/azure_openai_provider.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/providers/base.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/providers/dashscope_provider.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/providers/deepseek_provider.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/providers/gemini_provider.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/providers/kimi_provider.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/providers/lmstudio_provider.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/providers/minimax_provider.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/providers/modelscope_provider.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/providers/ollama_provider.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/providers/openai_provider.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/providers/openrouter_provider.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/providers/registry.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/providers/request_logging.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/providers/request_policy.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/providers/retry.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/providers/siliconflow_provider.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/providers/stream_watchdog.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/providers/thinking.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/providers/volcengine_provider.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/providers/zhipu_provider.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/capabilities/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/capabilities/auto_detect.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/capabilities/multimodal.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/cloud_credentials.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/context_manager.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/permissions/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/permissions/audit.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/permissions/loader.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/permissions/pipeline.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/permissions/rule_scope.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/permissions/storage.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/permissions/trusted_roots.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/providers/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/providers/aliyun_oauth.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/qwenpaw_source.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/session_backup_state.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/session_layout.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/session_metadata.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/session_resolver.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/session_storage.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/session_usage.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/telemetry/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/telemetry/attributes.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/telemetry/client.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/telemetry/constants.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/telemetry/content_serializer.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/telemetry/events.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/telemetry/fallback.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/telemetry/identity.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/telemetry/metrics.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/telemetry/names.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/telemetry/sanitize.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/telemetry/scope.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/telemetry/sink.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/telemetry/tracing.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/telemetry/types.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/token_budget.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/token_counter.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/services/update_checker.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/auto_trigger.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/bundled/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/bundled/iac_aliyun/SKILL.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/bundled/iac_aliyun/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/bundled/iac_aliyun/auto_trigger.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/oss.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/rds.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/redis.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/slb.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/vpc.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/bundled/iac_aliyun/references/ros-template.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/bundled/iac_aliyun/references/template-parameter-recommendation.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/bundled/iac_aliyun/references/template-parameters.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/bundled/iac_aliyun/references/terraform-template.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/bundled/iac_aliyun/scripts/tf2ros.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/bundled/pac_aliyun/SKILL.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/bundled/pac_aliyun/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/bundled/pac_aliyun/auto_trigger.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/bundled/pac_aliyun/references/infraguard-policy-generation.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/bundled/simplify.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/discovery.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/frontmatter.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/listing.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/loader.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/management.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/processor.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/settings.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/skill_definition.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/skills/skill_tool.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/state/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/state/app_state.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tasks/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tasks/notification_queue.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tasks/task_state.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tasks/task_tools.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/base.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/bash/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/bash/argv_safety.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/bash/command_parser.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/bash/mode_validation.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/bash/path_validation.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/bash/permissions.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/bash/readonly_commands.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/bash/rule_matching.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/bash/safety_checks.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/aliyun_api_doc.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/aliyun_doc_search.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/api_contract.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/api_hooks.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/api_identifiers.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/contract_store.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/data/README.md +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/data/endpoints/catalog.json +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/data/endpoints/generation_report.json +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/data/endpoints/legacy.yml +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/data/endpoints/overrides.yml +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/data/endpoints/unavailable.json +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/data/openmeta/api_overrides.yml +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/data/openmeta/exclusions.yml +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/data/openmeta/product_aliases.yml +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/data/openmeta/product_catalog.json +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/data/oss/operation_catalog.json +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/data/validation/judgments.yml +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/data/validation/overrides.yml +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/hooks/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/hooks/ros_parameters.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/hooks/ros_validate.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/openmeta.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/oss_v4_adapter.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/product_resolver.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/result_contract.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/retry_policy.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_template_tools.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/action_policy.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/analyzer.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/association_property_specs.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/count.py +0 -0
- {iac_code-0.11.3 → 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.3 → 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.3 → 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.3 → 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.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/facts.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/function_specs.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/model.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/outcome.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/parser.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/renderer.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/resource_value_specs.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/rules/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/rules/association_property.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/rules/base.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/rules/registry.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/symbols.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/template_kind.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/types.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_validation/validator.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/ros_yaml.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/runtime.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/template_source.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/user_agent.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/aliyun/validation_policy.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/base_api.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/registry.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/cloud/types.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/edit_file.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/glob.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/list_files.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/path_safety.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/read_file.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/result_storage.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/tool_executor.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/web_fetch.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/tools/write_file.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/types/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/types/permissions.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/types/skill_source.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/components/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/components/candidate_selection.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/components/dialog.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/components/divider.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/components/fuzzy_picker.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/components/parallel_tabs.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/components/progress_bar.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/components/search_box.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/components/select.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/components/status_icon.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/components/tabs.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/core/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/core/in_place_render.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/core/input_history.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/core/key_event.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/core/prompt_input.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/core/raw_input.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/core/raw_input_win.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/core/screen.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/diagram_rendering.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/dialogs/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/dialogs/global_search.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/dialogs/history_search.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/dialogs/mcp_manager.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/dialogs/memory.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/dialogs/memory_editor.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/dialogs/model_picker.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/dialogs/quick_open.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/dialogs/resume_picker.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/dialogs/skills_picker.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/keybindings/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/keybindings/manager.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/pipeline_display_replay.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/pipeline_styles.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/spinner.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/stream_accumulator.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/suggestions/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/suggestions/aggregator.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/suggestions/command_provider.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/suggestions/directory_provider.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/suggestions/file_provider.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/suggestions/shell_history_provider.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/suggestions/skill_provider.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/suggestions/token_extractor.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/suggestions/types.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/ui/transcript_view.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/utils/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/utils/async_lifecycle.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/utils/background_housekeeping.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/utils/cleanup.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/utils/console.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/utils/image/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/utils/image/clipboard.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/utils/image/format_detect.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/utils/image/pasted_content.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/utils/image/processor.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/utils/image/resizer.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/utils/image/store.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/utils/json_utils.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/utils/path_components.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/utils/path_locks.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/utils/public_errors.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/utils/public_paths.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/utils/signals.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/utils/state_io.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/utils/tool_input_parser.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/utils/tool_result_redaction.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/utils/windows_paths.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/__init__.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/cleanup.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/commands.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/diagram_cache.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/diagram_optimizer.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/diagrams.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/files.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/images.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/mcp_settings.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/permissions.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/pipeline.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/pipeline_actions.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/pipeline_transcript.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/security.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/session_titler.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/shell.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/skills.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/static/icons/sidebar-new-thread.svg +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/static/icons/sidebar-project-open.svg +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/static/icons/sidebar-search.svg +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/static/icons/sidebar-settings.svg +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/static/icons/sidebar-skills.svg +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/static/js/components/blocking.js +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/static/js/components/composer.js +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/static/js/components/image_lightbox.js +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/static/js/components/pipeline.js +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/static/js/components/tool_cards.js +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/static/js/i18n.js +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/static/js/mermaid_render.js +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/static/js/token_transport.js +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/static/js/vendor/markdown-it.LICENSE +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/static/js/vendor/markdown-it.min.js +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/static/js/vendor/mermaid.LICENSE +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/static/js/vendor/mermaid.min.js +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/static/js/vendor/token-crypto.js +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code/web/token_transport.py +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code.egg-info/dependency_links.txt +0 -0
- {iac_code-0.11.3 → iac_code-0.12.0}/src/iac_code.egg-info/entry_points.txt +0 -0
- {iac_code-0.11.3 → 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",
|
|
@@ -14,6 +14,7 @@ from iac_code.a2a.pipeline_journal import to_json_safe
|
|
|
14
14
|
from iac_code.mcp.progress import mcp_progress_metadata
|
|
15
15
|
from iac_code.pipeline.engine.events import PipelineEvent, PipelineEventType
|
|
16
16
|
from iac_code.services.permissions.audit import build_input_summary, build_redacted_tool_input, fingerprint_text
|
|
17
|
+
from iac_code.tools.cloud.base_stack import stack_result_from_metadata
|
|
17
18
|
from iac_code.types.stream_events import (
|
|
18
19
|
AskUserQuestionEvent,
|
|
19
20
|
CandidateDetailEvent,
|
|
@@ -900,7 +901,7 @@ class PipelineEventTranslator:
|
|
|
900
901
|
action = operation["action"]
|
|
901
902
|
params = operation["params"]
|
|
902
903
|
|
|
903
|
-
result = _json_object_from_string(event.result)
|
|
904
|
+
result = stack_result_from_metadata(event.metadata) or _json_object_from_string(event.result)
|
|
904
905
|
if result is None:
|
|
905
906
|
return None
|
|
906
907
|
is_success = _bool_or_none(result.get("is_success"))
|
|
@@ -1480,12 +1481,15 @@ def _safe_permission_field_name(key: Any) -> str:
|
|
|
1480
1481
|
|
|
1481
1482
|
|
|
1482
1483
|
def _tool_result_data(event: ToolResultEvent) -> dict[str, Any]:
|
|
1483
|
-
|
|
1484
|
+
data = {
|
|
1484
1485
|
"toolName": event.tool_name,
|
|
1485
1486
|
"toolUseId": event.tool_use_id,
|
|
1486
1487
|
"isError": event.is_error,
|
|
1487
1488
|
"result": to_json_safe(event.result),
|
|
1488
1489
|
}
|
|
1490
|
+
if stack_result := stack_result_from_metadata(event.metadata):
|
|
1491
|
+
data["stackResult"] = to_json_safe(stack_result)
|
|
1492
|
+
return data
|
|
1489
1493
|
|
|
1490
1494
|
|
|
1491
1495
|
def _sanitize_tool_input(tool_input: dict[str, Any]) -> dict[str, Any]:
|
|
@@ -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"),
|
|
@@ -320,6 +321,7 @@ class IacCodeA2APipelineExecutor:
|
|
|
320
321
|
provider_config_frozen=self._provider_config_frozen,
|
|
321
322
|
provider_config_override=self._provider_config_override,
|
|
322
323
|
effort_override=self._effort_override,
|
|
324
|
+
source="a2a-pipeline",
|
|
323
325
|
)
|
|
324
326
|
)
|
|
325
327
|
|
|
@@ -419,12 +421,29 @@ class IacCodeA2APipelineExecutor:
|
|
|
419
421
|
iac_code_session_id=ctx.session_id,
|
|
420
422
|
)
|
|
421
423
|
self._configure_agent_runtime_for_request(agent_runtime)
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
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
|
+
)
|
|
428
447
|
self._set_pipeline_telemetry_correlation(pipeline, task_id=task_id, context_id=context_id)
|
|
429
448
|
publisher = self._publisher(
|
|
430
449
|
event_queue=event_queue,
|
|
@@ -450,13 +469,14 @@ class IacCodeA2APipelineExecutor:
|
|
|
450
469
|
ctx.runtime = pipeline_runtime
|
|
451
470
|
self._task_store.mirror_context(ctx)
|
|
452
471
|
|
|
453
|
-
def
|
|
472
|
+
def create_fresh_pipeline(prerequisite_metadata: object = _PREREQUISITE_METADATA_UNSET) -> Any:
|
|
454
473
|
fresh_pipeline = self._create_pipeline(
|
|
455
474
|
session_id=ctx.session_id,
|
|
456
475
|
cwd=cwd,
|
|
457
476
|
runtime=agent_runtime,
|
|
458
477
|
session_storage=session_storage,
|
|
459
478
|
resume_from_sidecar=False,
|
|
479
|
+
prerequisite_metadata=prerequisite_metadata,
|
|
460
480
|
)
|
|
461
481
|
self._set_pipeline_telemetry_correlation(
|
|
462
482
|
fresh_pipeline,
|
|
@@ -465,6 +485,22 @@ class IacCodeA2APipelineExecutor:
|
|
|
465
485
|
)
|
|
466
486
|
return fresh_pipeline
|
|
467
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
|
+
|
|
468
504
|
selected = await self._select_stream(
|
|
469
505
|
pipeline,
|
|
470
506
|
prompt,
|
|
@@ -722,6 +758,7 @@ class IacCodeA2APipelineExecutor:
|
|
|
722
758
|
provider_config_frozen=self._provider_config_frozen,
|
|
723
759
|
provider_config_override=self._provider_config_override,
|
|
724
760
|
effort_override=self._effort_override,
|
|
761
|
+
source="a2a-pipeline",
|
|
725
762
|
)
|
|
726
763
|
),
|
|
727
764
|
)
|
|
@@ -1154,17 +1191,20 @@ class IacCodeA2APipelineExecutor:
|
|
|
1154
1191
|
runtime: Any,
|
|
1155
1192
|
session_storage: SessionStorage,
|
|
1156
1193
|
resume_from_sidecar: bool = True,
|
|
1194
|
+
prerequisite_metadata: object = _PREREQUISITE_METADATA_UNSET,
|
|
1157
1195
|
) -> Any:
|
|
1158
1196
|
pipeline_name = get_pipeline_name()
|
|
1159
|
-
prerequisite_resolution =
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
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
|
+
)
|
|
1166
1206
|
create_kwargs: dict[str, Any] = {}
|
|
1167
|
-
if prerequisite_resolution
|
|
1207
|
+
if isinstance(prerequisite_resolution, dict):
|
|
1168
1208
|
create_kwargs["prerequisite_resolution"] = prerequisite_resolution
|
|
1169
1209
|
delegated_factory = self._aliyun_delegated_executor_factory
|
|
1170
1210
|
if delegated_factory is None:
|
|
@@ -1753,10 +1793,22 @@ class IacCodeA2APipelineExecutor:
|
|
|
1753
1793
|
ctx=ctx,
|
|
1754
1794
|
)
|
|
1755
1795
|
|
|
1796
|
+
async def after_enqueue(envelope: dict[str, Any]) -> None:
|
|
1797
|
+
await self._backup_after_pipeline_publication(
|
|
1798
|
+
envelope,
|
|
1799
|
+
publisher=publisher,
|
|
1800
|
+
pipeline=pipeline,
|
|
1801
|
+
cwd=cwd,
|
|
1802
|
+
session_id=session_id,
|
|
1803
|
+
task=task,
|
|
1804
|
+
ctx=ctx,
|
|
1805
|
+
)
|
|
1806
|
+
|
|
1756
1807
|
async def after_backup_commit(envelope: dict[str, Any]) -> None:
|
|
1757
1808
|
self._mirror_a2a_snapshots_for_pipeline_publication(envelope, task=task, ctx=ctx)
|
|
1758
1809
|
|
|
1759
1810
|
publisher.before_enqueue = before_enqueue
|
|
1811
|
+
publisher.after_enqueue = after_enqueue
|
|
1760
1812
|
publisher.after_backup_commit = after_backup_commit
|
|
1761
1813
|
|
|
1762
1814
|
async def _backup_before_pipeline_publication(
|
|
@@ -1773,11 +1825,63 @@ class IacCodeA2APipelineExecutor:
|
|
|
1773
1825
|
reason = _backup_reason_for_pipeline_envelope(envelope)
|
|
1774
1826
|
if reason is None:
|
|
1775
1827
|
return True
|
|
1828
|
+
if reason in {BackupReason.INPUT_REQUIRED, BackupReason.WAITING_INPUT}:
|
|
1829
|
+
return True
|
|
1776
1830
|
if reason in {BackupReason.TERMINAL, BackupReason.HANDOFF_READY}:
|
|
1777
1831
|
if _is_pending_backup_publication_event(envelope):
|
|
1778
1832
|
return True
|
|
1779
1833
|
else:
|
|
1780
1834
|
self._mirror_a2a_snapshots_for_pipeline_publication(envelope, task=task, ctx=ctx)
|
|
1835
|
+
await self._backup_pipeline_publication(
|
|
1836
|
+
envelope,
|
|
1837
|
+
publisher=publisher,
|
|
1838
|
+
pipeline=pipeline,
|
|
1839
|
+
cwd=cwd,
|
|
1840
|
+
session_id=session_id,
|
|
1841
|
+
task=task,
|
|
1842
|
+
ctx=ctx,
|
|
1843
|
+
reason=reason,
|
|
1844
|
+
)
|
|
1845
|
+
return True
|
|
1846
|
+
|
|
1847
|
+
async def _backup_after_pipeline_publication(
|
|
1848
|
+
self,
|
|
1849
|
+
envelope: dict[str, Any],
|
|
1850
|
+
*,
|
|
1851
|
+
publisher: PipelineA2AEventPublisher,
|
|
1852
|
+
pipeline: Any,
|
|
1853
|
+
cwd: str,
|
|
1854
|
+
session_id: str,
|
|
1855
|
+
task: Any,
|
|
1856
|
+
ctx: Any,
|
|
1857
|
+
) -> None:
|
|
1858
|
+
reason = _backup_reason_for_pipeline_envelope(envelope)
|
|
1859
|
+
if reason not in {BackupReason.INPUT_REQUIRED, BackupReason.WAITING_INPUT}:
|
|
1860
|
+
return
|
|
1861
|
+
self._mirror_a2a_snapshots_for_pipeline_publication(envelope, task=task, ctx=ctx)
|
|
1862
|
+
await self._backup_pipeline_publication(
|
|
1863
|
+
envelope,
|
|
1864
|
+
publisher=publisher,
|
|
1865
|
+
pipeline=pipeline,
|
|
1866
|
+
cwd=cwd,
|
|
1867
|
+
session_id=session_id,
|
|
1868
|
+
task=task,
|
|
1869
|
+
ctx=ctx,
|
|
1870
|
+
reason=reason,
|
|
1871
|
+
)
|
|
1872
|
+
|
|
1873
|
+
async def _backup_pipeline_publication(
|
|
1874
|
+
self,
|
|
1875
|
+
envelope: dict[str, Any],
|
|
1876
|
+
*,
|
|
1877
|
+
publisher: PipelineA2AEventPublisher,
|
|
1878
|
+
pipeline: Any,
|
|
1879
|
+
cwd: str,
|
|
1880
|
+
session_id: str,
|
|
1881
|
+
task: Any,
|
|
1882
|
+
ctx: Any,
|
|
1883
|
+
reason: BackupReason,
|
|
1884
|
+
) -> None:
|
|
1781
1885
|
publication_proofs = None
|
|
1782
1886
|
if reason == BackupReason.HANDOFF_READY and envelope.get("visibility") == "committed":
|
|
1783
1887
|
publication_proofs = {
|
|
@@ -1831,7 +1935,6 @@ class IacCodeA2APipelineExecutor:
|
|
|
1831
1935
|
self._task_store.mirror_task(task)
|
|
1832
1936
|
self._task_store.mirror_context(ctx)
|
|
1833
1937
|
raise _PipelineBackupBlockedTransitionError from exc
|
|
1834
|
-
return True
|
|
1835
1938
|
|
|
1836
1939
|
def _mirror_a2a_snapshots_for_pipeline_publication(
|
|
1837
1940
|
self,
|
|
@@ -2035,7 +2138,7 @@ class IacCodeA2APipelineExecutor:
|
|
|
2035
2138
|
if status in _TERMINAL_SIDECAR_STATUSES:
|
|
2036
2139
|
if _terminal_sidecar_matches_task(publisher, status, task_id=task_id, context_id=context_id):
|
|
2037
2140
|
return _SelectedPipelineStream(pipeline=pipeline, stream=_empty_stream())
|
|
2038
|
-
pipeline = self._fresh_pipeline_after_sidecar_mismatch(pipeline, fresh_pipeline_factory)
|
|
2141
|
+
pipeline = await self._fresh_pipeline_after_sidecar_mismatch(pipeline, fresh_pipeline_factory)
|
|
2039
2142
|
return _SelectedPipelineStream(
|
|
2040
2143
|
pipeline=pipeline,
|
|
2041
2144
|
stream=pipeline.run(_pipeline_runner_input(pipeline_input)),
|
|
@@ -2045,13 +2148,16 @@ class IacCodeA2APipelineExecutor:
|
|
|
2045
2148
|
stream=pipeline.run(_pipeline_runner_input(pipeline_input)),
|
|
2046
2149
|
)
|
|
2047
2150
|
|
|
2048
|
-
def _fresh_pipeline_after_sidecar_mismatch(
|
|
2151
|
+
async def _fresh_pipeline_after_sidecar_mismatch(
|
|
2049
2152
|
self,
|
|
2050
2153
|
pipeline: Any,
|
|
2051
2154
|
fresh_pipeline_factory: Callable[[], Any],
|
|
2052
2155
|
) -> Any:
|
|
2053
2156
|
self._clear_terminal_sidecar(pipeline)
|
|
2054
|
-
|
|
2157
|
+
fresh_pipeline = fresh_pipeline_factory()
|
|
2158
|
+
if inspect.isawaitable(fresh_pipeline):
|
|
2159
|
+
return await fresh_pipeline
|
|
2160
|
+
return fresh_pipeline
|
|
2055
2161
|
|
|
2056
2162
|
def _clear_terminal_sidecar(self, pipeline: Any) -> None:
|
|
2057
2163
|
clear_sidecar = getattr(pipeline, "clear_sidecar", None)
|
|
@@ -50,6 +50,7 @@ from iac_code.utils.public_errors import sanitize_strict_text
|
|
|
50
50
|
|
|
51
51
|
PipelinePermissionResolver = Callable[[PermissionRequestEvent], bool | Awaitable[bool]]
|
|
52
52
|
PipelineBeforeEnqueueHook = Callable[[dict[str, Any]], bool | Awaitable[bool]]
|
|
53
|
+
PipelineAfterEnqueueHook = Callable[[dict[str, Any]], None | Awaitable[None]]
|
|
53
54
|
PipelineAfterBackupCommitHook = Callable[[dict[str, Any]], None | Awaitable[None]]
|
|
54
55
|
PipelineBackupCommitGate = Callable[[dict[str, Any]], bool]
|
|
55
56
|
logger = logging.getLogger(__name__)
|
|
@@ -147,6 +148,7 @@ class PipelineA2AEventPublisher:
|
|
|
147
148
|
delivery_task_id: str | None = None,
|
|
148
149
|
delivery_context_id: str | None = None,
|
|
149
150
|
before_enqueue: PipelineBeforeEnqueueHook | None = None,
|
|
151
|
+
after_enqueue: PipelineAfterEnqueueHook | None = None,
|
|
150
152
|
after_backup_commit: PipelineAfterBackupCommitHook | None = None,
|
|
151
153
|
backup_commit_gate: PipelineBackupCommitGate | None = None,
|
|
152
154
|
extreme_performance: bool | None = None,
|
|
@@ -161,6 +163,7 @@ class PipelineA2AEventPublisher:
|
|
|
161
163
|
self.delivery_task_id = delivery_task_id
|
|
162
164
|
self.delivery_context_id = delivery_context_id
|
|
163
165
|
self.before_enqueue = before_enqueue
|
|
166
|
+
self.after_enqueue = after_enqueue
|
|
164
167
|
self.after_backup_commit = after_backup_commit
|
|
165
168
|
self.backup_commit_gate = backup_commit_gate
|
|
166
169
|
self.flow_monitor = flow_monitor
|
|
@@ -715,6 +718,7 @@ class PipelineA2AEventPublisher:
|
|
|
715
718
|
await self._forward_local_pipeline_envelope(local_envelope)
|
|
716
719
|
await self._enqueue_status(envelope, wait_for_transport=wait_for_transport)
|
|
717
720
|
self.last_envelope = envelope
|
|
721
|
+
await self._run_after_enqueue_hook(envelope)
|
|
718
722
|
return True
|
|
719
723
|
|
|
720
724
|
async def _forward_local_pipeline_envelope(self, local_envelope: dict[str, Any]) -> None:
|
|
@@ -761,6 +765,8 @@ class PipelineA2AEventPublisher:
|
|
|
761
765
|
pending,
|
|
762
766
|
wait_for_transport=wait_for_transport,
|
|
763
767
|
)
|
|
768
|
+
for envelope in deliverable:
|
|
769
|
+
await self._run_after_enqueue_hook(envelope)
|
|
764
770
|
return frame_count
|
|
765
771
|
|
|
766
772
|
async def _enqueue_persisted_batches(
|
|
@@ -899,6 +905,13 @@ class PipelineA2AEventPublisher:
|
|
|
899
905
|
should_enqueue = await should_enqueue
|
|
900
906
|
return should_enqueue is not False
|
|
901
907
|
|
|
908
|
+
async def _run_after_enqueue_hook(self, envelope: dict[str, Any]) -> None:
|
|
909
|
+
if self.after_enqueue is None:
|
|
910
|
+
return
|
|
911
|
+
result = self.after_enqueue(envelope)
|
|
912
|
+
if inspect.isawaitable(result):
|
|
913
|
+
await result
|
|
914
|
+
|
|
902
915
|
async def _run_after_backup_commit_hook(self, envelope: dict[str, Any]) -> None:
|
|
903
916
|
if self.after_backup_commit is None:
|
|
904
917
|
return
|
|
@@ -57,6 +57,7 @@ class A2ATaskStore(TaskStore):
|
|
|
57
57
|
self._sdk_tasks: dict[str, dict[str, Task]] = {}
|
|
58
58
|
self._sdk_tasks_by_context: dict[str, dict[str, set[str]]] = {}
|
|
59
59
|
self._tasks: dict[str, A2ATaskRecord] = {}
|
|
60
|
+
self._task_persistence_dirty: set[str] = set()
|
|
60
61
|
self._contexts: dict[str, A2AContextRecord] = {}
|
|
61
62
|
self._expired_task_tombstones: dict[str, float] = {}
|
|
62
63
|
self._metrics = metrics or NoOpA2AMetrics()
|
|
@@ -99,22 +100,32 @@ class A2ATaskStore(TaskStore):
|
|
|
99
100
|
owner_tasks[task_id] = _copy_task(task)
|
|
100
101
|
self._sdk_tasks_by_context.setdefault(owner, {}).setdefault(task.context_id, set()).add(task_id)
|
|
101
102
|
record = self._tasks.get(task_id)
|
|
103
|
+
next_state = _task_state_from_sdk_task(task)
|
|
104
|
+
# The SDK saves the full Task before yielding every streaming frame. Executors already
|
|
105
|
+
# mirror task records explicitly at output/state durability boundaries, so repeated SDK
|
|
106
|
+
# saves with the same projected state only need the session-local mirror below.
|
|
107
|
+
persist_shared_snapshot = (
|
|
108
|
+
record is None
|
|
109
|
+
or task_id in self._task_persistence_dirty
|
|
110
|
+
or record.state != next_state
|
|
111
|
+
or record.owner != owner
|
|
112
|
+
)
|
|
102
113
|
if record is None:
|
|
103
114
|
record = A2ATaskRecord(
|
|
104
115
|
task_id=task_id,
|
|
105
116
|
context_id=task.context_id,
|
|
106
|
-
state=
|
|
117
|
+
state=next_state,
|
|
107
118
|
owner=owner,
|
|
108
119
|
updated_at=_task_updated_at_from_sdk_task(task),
|
|
109
120
|
)
|
|
110
121
|
self._tasks[task_id] = record
|
|
111
122
|
self._metrics.record_task_created()
|
|
112
123
|
else:
|
|
113
|
-
record.state =
|
|
124
|
+
record.state = next_state
|
|
114
125
|
record.owner = owner
|
|
115
126
|
record.updated_at = _task_updated_at_from_sdk_task(task)
|
|
116
127
|
record.touch()
|
|
117
|
-
self._mirror_task(record)
|
|
128
|
+
self._mirror_task(record, persist_shared_snapshot=persist_shared_snapshot)
|
|
118
129
|
|
|
119
130
|
def _attach_context_metadata(self, task: Task) -> None:
|
|
120
131
|
context = self._contexts.get(task.context_id)
|
|
@@ -135,6 +146,7 @@ class A2ATaskStore(TaskStore):
|
|
|
135
146
|
self._remove_sdk_task_from_index(owner, task_id, existing.context_id)
|
|
136
147
|
owner_tasks.pop(task_id, None)
|
|
137
148
|
self._tasks.pop(task_id, None)
|
|
149
|
+
self._task_persistence_dirty.discard(task_id)
|
|
138
150
|
self._expired_task_tombstones.pop(task_id, None)
|
|
139
151
|
|
|
140
152
|
async def list(self, params: ListTasksRequest, context: ServerCallContext | None = None) -> ListTasksResponse:
|
|
@@ -798,6 +810,7 @@ class A2ATaskStore(TaskStore):
|
|
|
798
810
|
if now - expired_at > self._cleanup_interval_seconds:
|
|
799
811
|
self._expired_task_tombstones.pop(task_id, None)
|
|
800
812
|
self._tasks.pop(task_id, None)
|
|
813
|
+
self._task_persistence_dirty.discard(task_id)
|
|
801
814
|
for owner, owner_tasks in list(self._sdk_tasks.items()):
|
|
802
815
|
existing = owner_tasks.pop(task_id, None)
|
|
803
816
|
if existing is not None:
|
|
@@ -846,7 +859,7 @@ class A2ATaskStore(TaskStore):
|
|
|
846
859
|
except Exception:
|
|
847
860
|
logger.exception("A2A cleanup loop failed")
|
|
848
861
|
|
|
849
|
-
def _mirror_task(self, record: A2ATaskRecord) -> None:
|
|
862
|
+
def _mirror_task(self, record: A2ATaskRecord, *, persist_shared_snapshot: bool = True) -> None:
|
|
850
863
|
snapshot = A2ATaskSnapshot(
|
|
851
864
|
task_id=record.task_id,
|
|
852
865
|
context_id=record.context_id,
|
|
@@ -855,10 +868,12 @@ class A2ATaskStore(TaskStore):
|
|
|
855
868
|
output_text=list(record.output_text),
|
|
856
869
|
updated_at=record.updated_at,
|
|
857
870
|
)
|
|
858
|
-
if self._persistence is not None:
|
|
871
|
+
if self._persistence is not None and persist_shared_snapshot:
|
|
859
872
|
try:
|
|
860
873
|
self._persistence.save_task(snapshot)
|
|
874
|
+
self._task_persistence_dirty.discard(record.task_id)
|
|
861
875
|
except Exception:
|
|
876
|
+
self._task_persistence_dirty.add(record.task_id)
|
|
862
877
|
logger.exception("Failed to persist A2A task %s", record.task_id)
|
|
863
878
|
self._mirror_session_task(snapshot)
|
|
864
879
|
|
|
@@ -472,7 +472,11 @@ class IacCodeRequestHandler(DefaultRequestHandler):
|
|
|
472
472
|
if task_id and isinstance(self.task_store, A2ATaskStore) and await self.task_store.is_task_active(task_id):
|
|
473
473
|
task = await self.task_store.get(task_id, context)
|
|
474
474
|
active_task = await self._active_task_registry.get(task_id)
|
|
475
|
-
if
|
|
475
|
+
if (
|
|
476
|
+
task is not None
|
|
477
|
+
and active_task is not None
|
|
478
|
+
and task.status.state not in TERMINAL_TASK_STATES | INTERRUPTED_TASK_STATES
|
|
479
|
+
):
|
|
476
480
|
active_stream = self._on_active_message_send_stream(
|
|
477
481
|
params,
|
|
478
482
|
context,
|
|
@@ -803,7 +803,7 @@ class ACPServer:
|
|
|
803
803
|
"""Create an agent runtime, converting auth errors to ACP RequestError."""
|
|
804
804
|
try:
|
|
805
805
|
return create_agent_runtime(
|
|
806
|
-
AgentFactoryOptions(model=model, session_id=session_id, cwd=cwd, mcp_configs=mcp_configs)
|
|
806
|
+
AgentFactoryOptions(model=model, session_id=session_id, cwd=cwd, mcp_configs=mcp_configs, source="acp")
|
|
807
807
|
)
|
|
808
808
|
except Exception as exc:
|
|
809
809
|
if _is_auth_error(exc):
|
|
@@ -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)
|
|
@@ -1815,10 +1819,12 @@ class AgentLoop:
|
|
|
1815
1819
|
ALIYUN_HTTP_METADATA_KEY,
|
|
1816
1820
|
sanitize_aliyun_http_metadata,
|
|
1817
1821
|
)
|
|
1822
|
+
from iac_code.tools.cloud.base_stack import persisted_stack_metadata
|
|
1818
1823
|
|
|
1819
1824
|
aliyun_http = sanitize_aliyun_http_metadata(result_metadata.get(ALIYUN_HTTP_METADATA_KEY))
|
|
1820
1825
|
if aliyun_http is not None:
|
|
1821
1826
|
metadata[ALIYUN_HTTP_METADATA_KEY] = aliyun_http
|
|
1827
|
+
metadata.update(persisted_stack_metadata(result_metadata))
|
|
1822
1828
|
render_metadata = result_metadata.get(TOOL_RENDER_METADATA_KEY)
|
|
1823
1829
|
if isinstance(render_metadata, dict):
|
|
1824
1830
|
safe_render_metadata: dict[str, Any] = {}
|
|
@@ -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))
|