iac-code 0.7.0__tar.gz → 0.8.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.7.0 → iac_code-0.8.0}/PKG-INFO +1 -1
- {iac_code-0.7.0 → iac_code-0.8.0}/pyproject.toml +1 -0
- iac_code-0.8.0/src/iac_code/__init__.py +2 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/client.py +36 -1
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/events.py +189 -9
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/executor.py +210 -60
- iac_code-0.8.0/src/iac_code/a2a/metadata_redaction.py +62 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/parts.py +7 -7
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/pipeline_events.py +87 -23
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/pipeline_executor.py +131 -59
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/pipeline_stream.py +83 -37
- iac_code-0.8.0/src/iac_code/a2a/runtime_overrides.py +128 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/task_store.py +223 -30
- iac_code-0.8.0/src/iac_code/a2a/thinking_metadata.py +59 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/acp/convert.py +65 -5
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/acp/server.py +112 -9
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/acp/session.py +237 -34
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/agent/agent_loop.py +71 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/agent/agent_tool.py +7 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/cli/headless.py +63 -15
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/cli/main.py +44 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/cli/output_formats.py +59 -10
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/commands/effort.py +12 -6
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/commands/registry.py +9 -0
- iac_code-0.8.0/src/iac_code/i18n/locales/de/LC_MESSAGES/messages.mo +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/i18n/locales/de/LC_MESSAGES/messages.po +702 -16
- iac_code-0.8.0/src/iac_code/i18n/locales/es/LC_MESSAGES/messages.mo +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/i18n/locales/es/LC_MESSAGES/messages.po +700 -17
- iac_code-0.8.0/src/iac_code/i18n/locales/fr/LC_MESSAGES/messages.mo +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/i18n/locales/fr/LC_MESSAGES/messages.po +704 -18
- iac_code-0.8.0/src/iac_code/i18n/locales/ja/LC_MESSAGES/messages.mo +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/i18n/locales/ja/LC_MESSAGES/messages.po +665 -17
- iac_code-0.8.0/src/iac_code/i18n/locales/pt/LC_MESSAGES/messages.mo +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/i18n/locales/pt/LC_MESSAGES/messages.po +692 -14
- iac_code-0.8.0/src/iac_code/i18n/locales/zh/LC_MESSAGES/messages.mo +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/i18n/locales/zh/LC_MESSAGES/messages.po +656 -14
- iac_code-0.8.0/src/iac_code/mcp/__init__.py +1 -0
- iac_code-0.8.0/src/iac_code/mcp/cli.py +345 -0
- iac_code-0.8.0/src/iac_code/mcp/client.py +459 -0
- iac_code-0.8.0/src/iac_code/mcp/config.py +520 -0
- iac_code-0.8.0/src/iac_code/mcp/env_expansion.py +66 -0
- iac_code-0.8.0/src/iac_code/mcp/errors.py +17 -0
- iac_code-0.8.0/src/iac_code/mcp/manager.py +498 -0
- iac_code-0.8.0/src/iac_code/mcp/oauth.py +705 -0
- iac_code-0.8.0/src/iac_code/mcp/output.py +222 -0
- iac_code-0.8.0/src/iac_code/mcp/prompts.py +211 -0
- iac_code-0.8.0/src/iac_code/mcp/skills.py +132 -0
- iac_code-0.8.0/src/iac_code/mcp/storage.py +169 -0
- iac_code-0.8.0/src/iac_code/mcp/tools.py +241 -0
- iac_code-0.8.0/src/iac_code/mcp/types.py +403 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/providers/anthropic_provider.py +43 -10
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/providers/azure_openai_provider.py +7 -1
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/providers/dashscope_provider.py +26 -2
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/providers/deepseek_provider.py +6 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/providers/gemini_provider.py +11 -3
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/providers/kimi_provider.py +8 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/providers/lmstudio_provider.py +7 -1
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/providers/manager.py +147 -19
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/providers/minimax_provider.py +6 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/providers/modelscope_provider.py +7 -1
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/providers/ollama_provider.py +7 -1
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/providers/openai_provider.py +95 -4
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/providers/openrouter_provider.py +6 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/providers/registry.py +8 -2
- iac_code-0.8.0/src/iac_code/providers/request_logging.py +97 -0
- iac_code-0.8.0/src/iac_code/providers/request_policy.py +63 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/providers/siliconflow_provider.py +7 -1
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/providers/thinking.py +33 -1
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/providers/volcengine_provider.py +7 -1
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/providers/zhipu_provider.py +8 -0
- iac_code-0.8.0/src/iac_code/services/agent_factory.py +636 -0
- iac_code-0.8.0/src/iac_code/services/permissions/audit.py +1071 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/permissions/loader.py +86 -2
- iac_code-0.8.0/src/iac_code/services/permissions/pipeline.py +230 -0
- iac_code-0.8.0/src/iac_code/services/permissions/rule_scope.py +13 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/telemetry/names.py +3 -1
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/bash/mode_validation.py +20 -2
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/bash/permissions.py +71 -7
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/cloud/aliyun/aliyun_api.py +310 -16
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/cloud/base_api.py +2 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/types/__init__.py +2 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/types/permissions.py +27 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/types/stream_events.py +15 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/dialogs/model_picker.py +12 -8
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/renderer.py +88 -29
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/repl.py +264 -11
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/stream_accumulator.py +27 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/utils/state_io.py +69 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code.egg-info/PKG-INFO +1 -1
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code.egg-info/SOURCES.txt +21 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code.egg-info/requires.txt +1 -0
- iac_code-0.7.0/src/iac_code/__init__.py +0 -2
- iac_code-0.7.0/src/iac_code/i18n/locales/de/LC_MESSAGES/messages.mo +0 -0
- iac_code-0.7.0/src/iac_code/i18n/locales/es/LC_MESSAGES/messages.mo +0 -0
- iac_code-0.7.0/src/iac_code/i18n/locales/fr/LC_MESSAGES/messages.mo +0 -0
- iac_code-0.7.0/src/iac_code/i18n/locales/ja/LC_MESSAGES/messages.mo +0 -0
- iac_code-0.7.0/src/iac_code/i18n/locales/pt/LC_MESSAGES/messages.mo +0 -0
- iac_code-0.7.0/src/iac_code/i18n/locales/zh/LC_MESSAGES/messages.mo +0 -0
- iac_code-0.7.0/src/iac_code/services/agent_factory.py +0 -213
- iac_code-0.7.0/src/iac_code/services/permissions/pipeline.py +0 -91
- {iac_code-0.7.0 → iac_code-0.8.0}/LICENSE +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/MANIFEST.in +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/README.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/setup.cfg +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/setup.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/agent_card.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/app.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/artifacts.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/exposure.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/jsonrpc_passthrough.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/metrics.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/persistence.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/pipeline_journal.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/pipeline_paths.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/pipeline_recovery.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/pipeline_snapshot.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/push.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/push_queue.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/push_secrets.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/push_worker.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/router.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/signing.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/transport.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/transports/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/transports/base.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/transports/dispatcher.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/transports/grpc.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/transports/grpc_jsonrpc.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/transports/http.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/transports/redis_streams.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/transports/stdio.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/transports/unix.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/transports/websocket.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/a2a/types.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/acp/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/acp/http_sse.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/acp/mcp.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/acp/metrics.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/acp/slash_registry.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/acp/state.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/acp/tools.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/acp/types.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/acp/version.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/agent/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/agent/agent_types.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/agent/message.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/agent/system_prompt.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/cli/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/cli/install_git_bash.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/cli/update.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/commands/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/commands/auth.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/commands/clear.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/commands/compact.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/commands/debug.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/commands/exit.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/commands/help.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/commands/memory.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/commands/model.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/commands/prompt.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/commands/rename.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/commands/resume.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/commands/skills.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/commands/status.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/commands/tasks.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/config.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/i18n/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/memory/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/memory/memory_manager.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/memory/memory_tools.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/memory/project_memory.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/memory/recall.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/config.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/constants.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/display_names.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/ask_user_question_tool.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/cleanup.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/complete_step_tool.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/completion_guard_state.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/context.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/display_replay.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/events.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/handoff.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/interrupt.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/loader.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/observability.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/pipeline_runner.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/prompts/interrupt_judge.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/public_errors.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/recovery.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/resume_recovery.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/session.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/show_diagram_tool.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/state_machine.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/step_executor.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/step_spec.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/sub_pipeline_executor.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/transcript_storage.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/types.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/ui_contract.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/engine/user_input.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/hooks/deploying.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/pipeline.yaml +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/prompts/architecture_planning.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/prompts/confirm_and_select.a2a.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/prompts/confirm_and_select.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/prompts/cost_estimating.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/prompts/deploying.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/prompts/evaluate_candidates.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/prompts/intent_parsing.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/prompts/reviewing.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/prompts/template_generating.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-architecture/SKILL.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-architecture/evals.json +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/SKILL.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/evals.json +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/cloud-products/ecs.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/cloud-products/oss.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/cloud-products/rds.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/cloud-products/redis.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/cloud-products/slb.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/cloud-products/vpc.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/ros-template.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/template-parameter-recommendation.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/template-parameters.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/terraform-template.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/SKILL.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/evals.json +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/cloud-products/ecs.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/cloud-products/oss.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/cloud-products/rds.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/cloud-products/redis.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/cloud-products/slb.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/cloud-products/vpc.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/ros-template.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/template-parameter-recommendation.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/template-parameters.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/terraform-template.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-intent/SKILL.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-intent/evals.json +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-review/SKILL.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/SKILL.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/evals.json +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/cloud-products/ecs.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/cloud-products/oss.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/cloud-products/rds.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/cloud-products/redis.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/cloud-products/slb.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/cloud-products/vpc.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/ros-template.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/template-parameter-recommendation.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/template-parameters.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/terraform-template.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/tools/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/pipeline/selling/tools/show_candidate_detail_tool.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/providers/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/providers/base.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/providers/retry.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/providers/stream_watchdog.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/capabilities/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/capabilities/auto_detect.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/capabilities/multimodal.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/cloud_credentials.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/context_manager.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/permissions/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/permissions/storage.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/permissions/trusted_roots.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/providers/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/providers/aliyun.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/providers/aliyun_oauth.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/qwenpaw_source.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/session_index.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/session_metadata.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/session_resolver.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/session_storage.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/session_usage.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/telemetry/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/telemetry/attributes.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/telemetry/client.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/telemetry/config.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/telemetry/constants.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/telemetry/content_serializer.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/telemetry/events.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/telemetry/fallback.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/telemetry/identity.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/telemetry/metrics.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/telemetry/sanitize.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/telemetry/sink.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/telemetry/tracing.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/telemetry/types.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/token_budget.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/token_counter.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/services/update_checker.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/auto_trigger.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/bundled/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/bundled/iac_aliyun/SKILL.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/bundled/iac_aliyun/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/bundled/iac_aliyun/auto_trigger.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/ecs.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/oss.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/rds.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/redis.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/slb.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/vpc.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/bundled/iac_aliyun/references/ros-template.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/bundled/iac_aliyun/references/template-parameter-recommendation.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/bundled/iac_aliyun/references/template-parameters.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/bundled/iac_aliyun/references/terraform-template.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/bundled/iac_aliyun/scripts/tf2ros.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/bundled/pac_aliyun/SKILL.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/bundled/pac_aliyun/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/bundled/pac_aliyun/auto_trigger.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/bundled/pac_aliyun/references/infraguard-policy-generation.md +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/bundled/simplify.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/discovery.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/frontmatter.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/listing.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/loader.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/management.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/processor.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/renderer.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/settings.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/skill_definition.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/skills/skill_tool.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/state/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/state/app_state.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tasks/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tasks/notification_queue.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tasks/task_state.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tasks/task_tools.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/base.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/bash/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/bash/argv_safety.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/bash/bash_tool.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/bash/command_parser.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/bash/path_validation.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/bash/readonly_commands.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/bash/rule_matching.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/bash/safety_checks.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/cloud/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/cloud/aliyun/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/cloud/aliyun/aliyun_doc_search.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/cloud/aliyun/api_hooks.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/cloud/aliyun/endpoints.yml +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/cloud/aliyun/hooks/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/cloud/aliyun/hooks/ros_parameters.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/cloud/aliyun/hooks/ros_validate.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/cloud/aliyun/ros_client.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/cloud/aliyun/ros_stack.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/cloud/aliyun/ros_stack_instances.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/cloud/aliyun/ros_yaml.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/cloud/aliyun/template_source.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/cloud/aliyun/user_agent.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/cloud/base_stack.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/cloud/registry.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/cloud/types.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/edit_file.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/glob.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/grep.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/list_files.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/path_safety.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/read_file.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/result_storage.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/tool_executor.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/web_fetch.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/tools/write_file.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/types/skill_source.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/banner.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/components/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/components/candidate_selection.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/components/dialog.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/components/divider.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/components/fuzzy_picker.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/components/parallel_tabs.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/components/progress_bar.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/components/search_box.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/components/select.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/components/status_icon.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/components/tabs.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/core/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/core/in_place_render.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/core/input_history.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/core/key_event.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/core/prompt_input.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/core/raw_input.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/core/raw_input_win.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/core/screen.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/dialogs/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/dialogs/global_search.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/dialogs/history_search.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/dialogs/memory.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/dialogs/memory_editor.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/dialogs/quick_open.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/dialogs/resume_picker.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/dialogs/skills_picker.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/keybindings/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/keybindings/manager.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/pipeline_display_replay.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/pipeline_styles.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/spinner.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/suggestions/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/suggestions/aggregator.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/suggestions/command_provider.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/suggestions/directory_provider.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/suggestions/file_provider.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/suggestions/shell_history_provider.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/suggestions/skill_provider.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/suggestions/token_extractor.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/suggestions/types.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/ui/transcript_view.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/utils/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/utils/background_housekeeping.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/utils/cleanup.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/utils/console.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/utils/file_security.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/utils/image/__init__.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/utils/image/clipboard.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/utils/image/format_detect.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/utils/image/pasted_content.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/utils/image/processor.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/utils/image/resizer.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/utils/image/store.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/utils/json_utils.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/utils/log.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/utils/path_locks.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/utils/platform.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/utils/project_paths.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/utils/public_errors.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/utils/signals.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/utils/tool_input_parser.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code/utils/windows_paths.py +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code.egg-info/dependency_links.txt +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code.egg-info/entry_points.txt +0 -0
- {iac_code-0.7.0 → iac_code-0.8.0}/src/iac_code.egg-info/top_level.txt +0 -0
|
@@ -132,6 +132,10 @@ class A2AClient:
|
|
|
132
132
|
cwd: str,
|
|
133
133
|
context_id: str | None = None,
|
|
134
134
|
model: str | None = None,
|
|
135
|
+
iac_code_api_key: str | None = None,
|
|
136
|
+
thinking_enabled: bool | None = None,
|
|
137
|
+
thinking_effort: str | None = None,
|
|
138
|
+
thinking_budget: int | None = None,
|
|
135
139
|
) -> A2AClientResponse:
|
|
136
140
|
payload = self._message_payload(
|
|
137
141
|
method="SendMessage",
|
|
@@ -139,6 +143,10 @@ class A2AClient:
|
|
|
139
143
|
cwd=cwd,
|
|
140
144
|
context_id=context_id,
|
|
141
145
|
model=model,
|
|
146
|
+
iac_code_api_key=iac_code_api_key,
|
|
147
|
+
thinking_enabled=thinking_enabled,
|
|
148
|
+
thinking_effort=thinking_effort,
|
|
149
|
+
thinking_budget=thinking_budget,
|
|
142
150
|
)
|
|
143
151
|
transport = self._make_transport_client(url)
|
|
144
152
|
response = await transport.send(payload)
|
|
@@ -152,6 +160,10 @@ class A2AClient:
|
|
|
152
160
|
cwd: str,
|
|
153
161
|
context_id: str | None = None,
|
|
154
162
|
model: str | None = None,
|
|
163
|
+
iac_code_api_key: str | None = None,
|
|
164
|
+
thinking_enabled: bool | None = None,
|
|
165
|
+
thinking_effort: str | None = None,
|
|
166
|
+
thinking_budget: int | None = None,
|
|
155
167
|
) -> AsyncIterator[dict[str, Any]]:
|
|
156
168
|
payload = self._message_payload(
|
|
157
169
|
method="SendStreamingMessage",
|
|
@@ -159,6 +171,10 @@ class A2AClient:
|
|
|
159
171
|
cwd=cwd,
|
|
160
172
|
context_id=context_id,
|
|
161
173
|
model=model,
|
|
174
|
+
iac_code_api_key=iac_code_api_key,
|
|
175
|
+
thinking_enabled=thinking_enabled,
|
|
176
|
+
thinking_effort=thinking_effort,
|
|
177
|
+
thinking_budget=thinking_budget,
|
|
162
178
|
)
|
|
163
179
|
transport = self._make_transport_client(url)
|
|
164
180
|
async for event in transport.stream(payload):
|
|
@@ -354,12 +370,31 @@ class A2AClient:
|
|
|
354
370
|
cwd: str,
|
|
355
371
|
context_id: str | None,
|
|
356
372
|
model: str | None,
|
|
373
|
+
iac_code_api_key: str | None,
|
|
374
|
+
thinking_enabled: bool | None,
|
|
375
|
+
thinking_effort: str | None,
|
|
376
|
+
thinking_budget: int | None,
|
|
357
377
|
) -> dict[str, Any]:
|
|
358
|
-
iac_code_metadata = {"cwd": cwd}
|
|
378
|
+
iac_code_metadata: dict[str, Any] = {"cwd": cwd}
|
|
359
379
|
if model:
|
|
360
380
|
stripped_model = model.strip()
|
|
361
381
|
if stripped_model:
|
|
362
382
|
iac_code_metadata["iac_code_model"] = stripped_model
|
|
383
|
+
if iac_code_api_key:
|
|
384
|
+
stripped_api_key = iac_code_api_key.strip()
|
|
385
|
+
if stripped_api_key:
|
|
386
|
+
iac_code_metadata["iac_code_api_key"] = stripped_api_key
|
|
387
|
+
thinking: dict[str, Any] = {}
|
|
388
|
+
if thinking_enabled is not None:
|
|
389
|
+
thinking["enabled"] = thinking_enabled
|
|
390
|
+
if thinking_effort:
|
|
391
|
+
stripped_effort = thinking_effort.strip()
|
|
392
|
+
if stripped_effort:
|
|
393
|
+
thinking["effort"] = stripped_effort
|
|
394
|
+
if isinstance(thinking_budget, int) and not isinstance(thinking_budget, bool) and thinking_budget > 0:
|
|
395
|
+
thinking["budget"] = thinking_budget
|
|
396
|
+
if thinking:
|
|
397
|
+
iac_code_metadata["thinking"] = thinking
|
|
363
398
|
message: dict[str, Any] = {
|
|
364
399
|
"messageId": str(uuid.uuid4()),
|
|
365
400
|
"role": "ROLE_USER",
|
|
@@ -23,10 +23,21 @@ from iac_code.a2a.artifacts import (
|
|
|
23
23
|
sanitize_public_tool_output_data,
|
|
24
24
|
)
|
|
25
25
|
from iac_code.a2a.exposure import A2AExposureType, normalize_a2a_exposure_types
|
|
26
|
+
from iac_code.a2a.metadata_redaction import A2AMetadataEchoRedactor
|
|
27
|
+
from iac_code.i18n import _
|
|
28
|
+
from iac_code.services.permissions.audit import (
|
|
29
|
+
build_input_summary,
|
|
30
|
+
build_redacted_tool_input,
|
|
31
|
+
emit_auto_permission_audit,
|
|
32
|
+
emit_permission_boundary_audit,
|
|
33
|
+
is_aliyun_api_non_read_only_permission_event,
|
|
34
|
+
)
|
|
26
35
|
from iac_code.types.stream_events import (
|
|
27
36
|
ErrorEvent,
|
|
37
|
+
MCPProgressEvent,
|
|
28
38
|
MessageEndEvent,
|
|
29
39
|
PermissionRequestEvent,
|
|
40
|
+
SubPipelineStreamEvent,
|
|
30
41
|
TextDeltaEvent,
|
|
31
42
|
ThinkingDeltaEvent,
|
|
32
43
|
ToolInputDeltaEvent,
|
|
@@ -40,6 +51,22 @@ _ERROR_TEXT_MAX_CHARS = 1000
|
|
|
40
51
|
_METADATA_MAX_DEPTH = 32
|
|
41
52
|
logger = logging.getLogger(__name__)
|
|
42
53
|
A2APermissionResolver: TypeAlias = Callable[[PermissionRequestEvent], "bool | Awaitable[bool]"]
|
|
54
|
+
IAC_CODE_SESSION_ID_METADATA_KEY = "iacCodeSessionId"
|
|
55
|
+
_METADATA_REDACTOR = A2AMetadataEchoRedactor()
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def iac_code_session_metadata(session_id: str) -> dict[str, Any]:
|
|
59
|
+
return {"iac_code": {IAC_CODE_SESSION_ID_METADATA_KEY: session_id}}
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def with_iac_code_session_metadata(metadata: dict[str, Any] | None, session_id: str | None) -> dict[str, Any] | None:
|
|
63
|
+
if not session_id:
|
|
64
|
+
return metadata
|
|
65
|
+
merged = dict(metadata or {})
|
|
66
|
+
iac_code = dict(merged.get("iac_code") or {})
|
|
67
|
+
iac_code[IAC_CODE_SESSION_ID_METADATA_KEY] = session_id
|
|
68
|
+
merged["iac_code"] = iac_code
|
|
69
|
+
return merged
|
|
43
70
|
|
|
44
71
|
|
|
45
72
|
def _truncate(value: Any, *, _depth: int = 0) -> Any:
|
|
@@ -54,10 +81,69 @@ def _truncate(value: Any, *, _depth: int = 0) -> Any:
|
|
|
54
81
|
return value
|
|
55
82
|
|
|
56
83
|
|
|
84
|
+
def _sanitize_trace_input(value: Any) -> Any:
|
|
85
|
+
return _METADATA_REDACTOR.redact(_truncate(value))
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def _public_tool_input_metadata(tool_name: str, tool_input: dict[str, Any]) -> dict[str, Any]:
|
|
89
|
+
return {"inputSummary": build_input_summary(tool_name, tool_input)}
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def _public_permission_input_metadata(tool_name: str, tool_input: dict[str, Any]) -> dict[str, Any]:
|
|
93
|
+
if tool_name == "aliyun_api":
|
|
94
|
+
return {"inputSummary": build_input_summary(tool_name, tool_input)}
|
|
95
|
+
return {"toolInput": build_redacted_tool_input(tool_input)}
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def _permission_request_event(event: Any) -> PermissionRequestEvent | None:
|
|
99
|
+
while isinstance(event, SubPipelineStreamEvent):
|
|
100
|
+
event = event.inner
|
|
101
|
+
return event if isinstance(event, PermissionRequestEvent) else None
|
|
102
|
+
|
|
103
|
+
|
|
57
104
|
def make_text_part(text: str) -> Part:
|
|
58
105
|
return Part(text=text)
|
|
59
106
|
|
|
60
107
|
|
|
108
|
+
async def publish_mcp_warnings(
|
|
109
|
+
event_queue: Any,
|
|
110
|
+
*,
|
|
111
|
+
task_id: str,
|
|
112
|
+
context_id: str,
|
|
113
|
+
runtime: Any,
|
|
114
|
+
state: int = TaskState.TASK_STATE_WORKING,
|
|
115
|
+
iac_code_session_id: str | None = None,
|
|
116
|
+
) -> None:
|
|
117
|
+
warnings = list(getattr(runtime, "mcp_config_warnings", None) or [])
|
|
118
|
+
pushed_count = getattr(runtime, "_a2a_mcp_warnings_pushed_count", 0)
|
|
119
|
+
if pushed_count >= len(warnings):
|
|
120
|
+
return
|
|
121
|
+
for warning in warnings[pushed_count:]:
|
|
122
|
+
message = str(getattr(warning, "message", None) or warning)
|
|
123
|
+
await _enqueue_status(
|
|
124
|
+
event_queue,
|
|
125
|
+
task_id=task_id,
|
|
126
|
+
context_id=context_id,
|
|
127
|
+
state=state,
|
|
128
|
+
message=_agent_text_message(
|
|
129
|
+
task_id=task_id,
|
|
130
|
+
context_id=context_id,
|
|
131
|
+
text=_("MCP warning: {message}").format(message=message),
|
|
132
|
+
),
|
|
133
|
+
metadata={
|
|
134
|
+
"iac_code": {
|
|
135
|
+
"mcpWarning": {
|
|
136
|
+
"serverName": str(getattr(warning, "server_name", "")),
|
|
137
|
+
"code": str(getattr(warning, "code", "")),
|
|
138
|
+
"message": message,
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
iac_code_session_id=iac_code_session_id,
|
|
143
|
+
)
|
|
144
|
+
setattr(runtime, "_a2a_mcp_warnings_pushed_count", len(warnings))
|
|
145
|
+
|
|
146
|
+
|
|
61
147
|
def _extract_artifact_metadata(result: Any, artifact_store: Any | None) -> dict[str, Any] | None:
|
|
62
148
|
if artifact_store is None or not isinstance(result, dict):
|
|
63
149
|
return None
|
|
@@ -144,12 +230,14 @@ async def _enqueue_status(
|
|
|
144
230
|
state: int,
|
|
145
231
|
message: Message | None = None,
|
|
146
232
|
metadata: dict[str, Any] | None = None,
|
|
233
|
+
iac_code_session_id: str | None = None,
|
|
147
234
|
) -> None:
|
|
148
235
|
update = TaskStatusUpdateEvent(
|
|
149
236
|
task_id=task_id,
|
|
150
237
|
context_id=context_id,
|
|
151
238
|
status=TaskStatus(state=TaskState.Name(state), message=message),
|
|
152
239
|
)
|
|
240
|
+
metadata = with_iac_code_session_metadata(metadata, iac_code_session_id)
|
|
153
241
|
if metadata is not None:
|
|
154
242
|
ParseDict(metadata, update.metadata)
|
|
155
243
|
await event_queue.enqueue_event(update)
|
|
@@ -165,6 +253,7 @@ async def publish_stream_event(
|
|
|
165
253
|
permission_resolver: A2APermissionResolver | None = None,
|
|
166
254
|
auto_approve_permissions: bool = False,
|
|
167
255
|
exposure_types: Any = None,
|
|
256
|
+
iac_code_session_id: str | None = None,
|
|
168
257
|
) -> str | None:
|
|
169
258
|
enabled_exposure_types = normalize_a2a_exposure_types(exposure_types)
|
|
170
259
|
|
|
@@ -177,6 +266,7 @@ async def publish_stream_event(
|
|
|
177
266
|
context_id=context_id,
|
|
178
267
|
state=TaskState.TASK_STATE_WORKING,
|
|
179
268
|
message=_agent_text_message(task_id=task_id, context_id=context_id, text=event.text),
|
|
269
|
+
iac_code_session_id=iac_code_session_id,
|
|
180
270
|
)
|
|
181
271
|
return event.text
|
|
182
272
|
|
|
@@ -189,6 +279,7 @@ async def publish_stream_event(
|
|
|
189
279
|
context_id=context_id,
|
|
190
280
|
state=TaskState.TASK_STATE_WORKING,
|
|
191
281
|
metadata={"iac_code": {"thinking": {"type": "raw_thinking", "text": _truncate(event.text)}}},
|
|
282
|
+
iac_code_session_id=iac_code_session_id,
|
|
192
283
|
)
|
|
193
284
|
return None
|
|
194
285
|
|
|
@@ -201,6 +292,7 @@ async def publish_stream_event(
|
|
|
201
292
|
context_id=context_id,
|
|
202
293
|
state=TaskState.TASK_STATE_WORKING,
|
|
203
294
|
metadata={"iac_code": {"tool": {"status": "started", "toolUseId": event.tool_use_id, "name": event.name}}},
|
|
295
|
+
iac_code_session_id=iac_code_session_id,
|
|
204
296
|
)
|
|
205
297
|
return None
|
|
206
298
|
|
|
@@ -217,10 +309,11 @@ async def publish_stream_event(
|
|
|
217
309
|
"tool": {
|
|
218
310
|
"status": "input_delta",
|
|
219
311
|
"toolUseId": event.tool_use_id,
|
|
220
|
-
"
|
|
312
|
+
"partialJsonLength": len(event.partial_json),
|
|
221
313
|
}
|
|
222
314
|
}
|
|
223
315
|
},
|
|
316
|
+
iac_code_session_id=iac_code_session_id,
|
|
224
317
|
)
|
|
225
318
|
return None
|
|
226
319
|
|
|
@@ -238,10 +331,11 @@ async def publish_stream_event(
|
|
|
238
331
|
"status": "input_complete",
|
|
239
332
|
"toolUseId": event.tool_use_id,
|
|
240
333
|
"name": event.name,
|
|
241
|
-
|
|
334
|
+
**_public_tool_input_metadata(event.name, event.input),
|
|
242
335
|
}
|
|
243
336
|
}
|
|
244
337
|
},
|
|
338
|
+
iac_code_session_id=iac_code_session_id,
|
|
245
339
|
)
|
|
246
340
|
return None
|
|
247
341
|
|
|
@@ -270,16 +364,52 @@ async def publish_stream_event(
|
|
|
270
364
|
context_id=context_id,
|
|
271
365
|
state=TaskState.TASK_STATE_WORKING,
|
|
272
366
|
metadata={"iac_code": {"tool": tool_metadata}},
|
|
367
|
+
iac_code_session_id=iac_code_session_id,
|
|
368
|
+
)
|
|
369
|
+
return None
|
|
370
|
+
|
|
371
|
+
if isinstance(event, MCPProgressEvent):
|
|
372
|
+
if A2AExposureType.TOOL_TRACE not in enabled_exposure_types:
|
|
373
|
+
return None
|
|
374
|
+
progress_metadata = {
|
|
375
|
+
"status": "progress",
|
|
376
|
+
"toolUseId": event.tool_use_id or "",
|
|
377
|
+
"name": "mcp__{}__{}".format(event.server_name, event.tool_name),
|
|
378
|
+
"mcp": {
|
|
379
|
+
"serverName": event.server_name,
|
|
380
|
+
"toolName": event.tool_name,
|
|
381
|
+
"progress": event.progress,
|
|
382
|
+
"total": event.total,
|
|
383
|
+
"message": _truncate(event.message) if event.message else None,
|
|
384
|
+
},
|
|
385
|
+
}
|
|
386
|
+
await _enqueue_status(
|
|
387
|
+
event_queue,
|
|
388
|
+
task_id=task_id,
|
|
389
|
+
context_id=context_id,
|
|
390
|
+
state=TaskState.TASK_STATE_WORKING,
|
|
391
|
+
metadata={"iac_code": {"tool": progress_metadata}},
|
|
392
|
+
iac_code_session_id=iac_code_session_id,
|
|
273
393
|
)
|
|
274
394
|
return None
|
|
275
395
|
|
|
276
|
-
|
|
396
|
+
permission_event = _permission_request_event(event)
|
|
397
|
+
if permission_event is not None:
|
|
277
398
|
approved = auto_approve_permissions
|
|
278
399
|
if permission_resolver is not None:
|
|
279
|
-
decision = permission_resolver(
|
|
400
|
+
decision = permission_resolver(permission_event)
|
|
280
401
|
approved = bool(await decision) if inspect.isawaitable(decision) else bool(decision)
|
|
281
|
-
|
|
282
|
-
|
|
402
|
+
elif is_aliyun_api_non_read_only_permission_event(permission_event):
|
|
403
|
+
approved = False
|
|
404
|
+
if permission_event.response_future is not None and not permission_event.response_future.done():
|
|
405
|
+
audit_ok = True
|
|
406
|
+
if permission_resolver is not None:
|
|
407
|
+
audit_ok = _emit_resolver_permission_audit(permission_event, approved)
|
|
408
|
+
else:
|
|
409
|
+
audit_ok = _emit_auto_permission_audit(permission_event, approved)
|
|
410
|
+
if approved and not audit_ok:
|
|
411
|
+
approved = False
|
|
412
|
+
permission_event.response_future.set_result(approved)
|
|
283
413
|
if A2AExposureType.TOOL_TRACE not in enabled_exposure_types:
|
|
284
414
|
return None
|
|
285
415
|
await _enqueue_status(
|
|
@@ -291,12 +421,13 @@ async def publish_stream_event(
|
|
|
291
421
|
"iac_code": {
|
|
292
422
|
"permission": {
|
|
293
423
|
"autoApproved": approved,
|
|
294
|
-
"toolName":
|
|
295
|
-
"toolUseId":
|
|
296
|
-
|
|
424
|
+
"toolName": permission_event.tool_name,
|
|
425
|
+
"toolUseId": permission_event.tool_use_id,
|
|
426
|
+
**_public_permission_input_metadata(permission_event.tool_name, permission_event.tool_input),
|
|
297
427
|
}
|
|
298
428
|
}
|
|
299
429
|
},
|
|
430
|
+
iac_code_session_id=iac_code_session_id,
|
|
300
431
|
)
|
|
301
432
|
return None
|
|
302
433
|
|
|
@@ -315,6 +446,7 @@ async def publish_stream_event(
|
|
|
315
446
|
}
|
|
316
447
|
}
|
|
317
448
|
},
|
|
449
|
+
iac_code_session_id=iac_code_session_id,
|
|
318
450
|
)
|
|
319
451
|
return None
|
|
320
452
|
|
|
@@ -336,8 +468,56 @@ async def publish_stream_event(
|
|
|
336
468
|
state=state,
|
|
337
469
|
message=_agent_text_message(task_id=task_id, context_id=context_id, text=text),
|
|
338
470
|
metadata={"iac_code": {"error": error_metadata}},
|
|
471
|
+
iac_code_session_id=iac_code_session_id,
|
|
339
472
|
)
|
|
340
473
|
return None
|
|
341
474
|
|
|
342
475
|
logger.debug("Skipping unmapped A2A stream event: %s", type(event).__name__)
|
|
343
476
|
return None
|
|
477
|
+
|
|
478
|
+
|
|
479
|
+
def _emit_auto_permission_audit(
|
|
480
|
+
request: PermissionRequestEvent,
|
|
481
|
+
approved: bool,
|
|
482
|
+
*,
|
|
483
|
+
persistence_failure: bool = False,
|
|
484
|
+
) -> bool:
|
|
485
|
+
if persistence_failure:
|
|
486
|
+
return emit_permission_boundary_audit(
|
|
487
|
+
request,
|
|
488
|
+
decision="deny",
|
|
489
|
+
scope="auto_deny",
|
|
490
|
+
source="a2a_auto_persistence_failure",
|
|
491
|
+
reason_type="persistence_failure",
|
|
492
|
+
reason_detail="permission metadata persistence failed",
|
|
493
|
+
)
|
|
494
|
+
source = "a2a_auto_approve" if approved else "a2a_auto_deny"
|
|
495
|
+
return emit_auto_permission_audit(
|
|
496
|
+
request,
|
|
497
|
+
decision="allow" if approved else "deny",
|
|
498
|
+
scope="auto_approve" if approved else "auto_deny",
|
|
499
|
+
source=source,
|
|
500
|
+
)
|
|
501
|
+
|
|
502
|
+
|
|
503
|
+
def _emit_resolver_permission_audit(
|
|
504
|
+
request: PermissionRequestEvent,
|
|
505
|
+
approved: bool,
|
|
506
|
+
*,
|
|
507
|
+
persistence_failure: bool = False,
|
|
508
|
+
) -> bool:
|
|
509
|
+
source = "a2a_resolver"
|
|
510
|
+
reason_type = "a2a_resolver"
|
|
511
|
+
reason_detail = "allow" if approved else "deny"
|
|
512
|
+
if persistence_failure:
|
|
513
|
+
source = "a2a_resolver_persistence_failure"
|
|
514
|
+
reason_type = "persistence_failure"
|
|
515
|
+
reason_detail = "permission metadata persistence failed"
|
|
516
|
+
return emit_permission_boundary_audit(
|
|
517
|
+
request,
|
|
518
|
+
decision="allow" if approved else "deny",
|
|
519
|
+
scope="a2a_resolver",
|
|
520
|
+
source=source,
|
|
521
|
+
reason_type=reason_type,
|
|
522
|
+
reason_detail=reason_detail,
|
|
523
|
+
)
|