iac-code 0.2.1__tar.gz → 0.2.2__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.
Files changed (270) hide show
  1. {iac_code-0.2.1 → iac_code-0.2.2}/PKG-INFO +1 -1
  2. iac_code-0.2.2/src/iac_code/__init__.py +2 -0
  3. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/commands/__init__.py +9 -0
  4. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/commands/registry.py +7 -1
  5. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/config.py +1 -1
  6. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/i18n/locales/de/LC_MESSAGES/messages.mo +0 -0
  7. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/i18n/locales/de/LC_MESSAGES/messages.po +87 -87
  8. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/i18n/locales/es/LC_MESSAGES/messages.mo +0 -0
  9. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/i18n/locales/es/LC_MESSAGES/messages.po +87 -87
  10. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/i18n/locales/fr/LC_MESSAGES/messages.mo +0 -0
  11. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/i18n/locales/fr/LC_MESSAGES/messages.po +87 -87
  12. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/i18n/locales/ja/LC_MESSAGES/messages.mo +0 -0
  13. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/i18n/locales/ja/LC_MESSAGES/messages.po +87 -87
  14. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/i18n/locales/pt/LC_MESSAGES/messages.mo +0 -0
  15. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/i18n/locales/pt/LC_MESSAGES/messages.po +87 -87
  16. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/i18n/locales/zh/LC_MESSAGES/messages.mo +0 -0
  17. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/i18n/locales/zh/LC_MESSAGES/messages.po +88 -88
  18. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/providers/registry.py +5 -2
  19. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/providers/thinking.py +4 -0
  20. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/telemetry/client.py +4 -4
  21. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/telemetry/names.py +1 -1
  22. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/cloud/aliyun/aliyun_api.py +20 -1
  23. iac_code-0.2.2/src/iac_code/tools/cloud/aliyun/api_hooks.py +49 -0
  24. iac_code-0.2.2/src/iac_code/tools/cloud/aliyun/hooks/ros_validate.py +57 -0
  25. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/core/input_history.py +31 -7
  26. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/core/prompt_input.py +12 -7
  27. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/renderer.py +10 -4
  28. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/repl.py +47 -7
  29. iac_code-0.2.2/src/iac_code/utils/image/__init__.py +0 -0
  30. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/utils/image/clipboard.py +31 -0
  31. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code.egg-info/PKG-INFO +1 -1
  32. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code.egg-info/SOURCES.txt +3 -0
  33. iac_code-0.2.1/src/iac_code/__init__.py +0 -2
  34. {iac_code-0.2.1 → iac_code-0.2.2}/LICENSE +0 -0
  35. {iac_code-0.2.1 → iac_code-0.2.2}/MANIFEST.in +0 -0
  36. {iac_code-0.2.1 → iac_code-0.2.2}/README.md +0 -0
  37. {iac_code-0.2.1 → iac_code-0.2.2}/pyproject.toml +0 -0
  38. {iac_code-0.2.1 → iac_code-0.2.2}/setup.cfg +0 -0
  39. {iac_code-0.2.1 → iac_code-0.2.2}/setup.py +0 -0
  40. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/__init__.py +0 -0
  41. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/agent_card.py +0 -0
  42. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/app.py +0 -0
  43. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/artifacts.py +0 -0
  44. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/client.py +0 -0
  45. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/events.py +0 -0
  46. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/executor.py +0 -0
  47. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/metrics.py +0 -0
  48. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/parts.py +0 -0
  49. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/persistence.py +0 -0
  50. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/push.py +0 -0
  51. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/push_queue.py +0 -0
  52. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/push_secrets.py +0 -0
  53. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/push_worker.py +0 -0
  54. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/router.py +0 -0
  55. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/signing.py +0 -0
  56. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/task_store.py +0 -0
  57. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/transport.py +0 -0
  58. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/transports/__init__.py +0 -0
  59. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/transports/base.py +0 -0
  60. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/transports/dispatcher.py +0 -0
  61. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/transports/grpc.py +0 -0
  62. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/transports/grpc_jsonrpc.py +0 -0
  63. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/transports/http.py +0 -0
  64. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/transports/redis_streams.py +0 -0
  65. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/transports/stdio.py +0 -0
  66. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/transports/unix.py +0 -0
  67. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/transports/websocket.py +0 -0
  68. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/a2a/types.py +0 -0
  69. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/acp/__init__.py +0 -0
  70. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/acp/convert.py +0 -0
  71. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/acp/http_sse.py +0 -0
  72. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/acp/mcp.py +0 -0
  73. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/acp/metrics.py +0 -0
  74. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/acp/server.py +0 -0
  75. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/acp/session.py +0 -0
  76. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/acp/slash_registry.py +0 -0
  77. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/acp/state.py +0 -0
  78. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/acp/tools.py +0 -0
  79. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/acp/types.py +0 -0
  80. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/acp/version.py +0 -0
  81. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/agent/__init__.py +0 -0
  82. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/agent/agent_loop.py +0 -0
  83. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/agent/agent_tool.py +0 -0
  84. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/agent/agent_types.py +0 -0
  85. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/agent/message.py +0 -0
  86. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/agent/system_prompt.py +0 -0
  87. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/cli/__init__.py +0 -0
  88. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/cli/headless.py +0 -0
  89. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/cli/main.py +0 -0
  90. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/cli/output_formats.py +0 -0
  91. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/commands/auth.py +0 -0
  92. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/commands/clear.py +0 -0
  93. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/commands/compact.py +0 -0
  94. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/commands/debug.py +0 -0
  95. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/commands/effort.py +0 -0
  96. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/commands/exit.py +0 -0
  97. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/commands/help.py +0 -0
  98. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/commands/model.py +0 -0
  99. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/commands/resume.py +0 -0
  100. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/commands/tasks.py +0 -0
  101. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/i18n/__init__.py +0 -0
  102. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/memory/__init__.py +0 -0
  103. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/memory/memory_manager.py +0 -0
  104. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/memory/memory_tools.py +0 -0
  105. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/providers/__init__.py +0 -0
  106. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/providers/anthropic_provider.py +0 -0
  107. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/providers/azure_openai_provider.py +0 -0
  108. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/providers/base.py +0 -0
  109. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/providers/dashscope_provider.py +0 -0
  110. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/providers/deepseek_provider.py +0 -0
  111. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/providers/gemini_provider.py +0 -0
  112. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/providers/kimi_provider.py +0 -0
  113. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/providers/lmstudio_provider.py +0 -0
  114. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/providers/manager.py +0 -0
  115. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/providers/minimax_provider.py +0 -0
  116. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/providers/modelscope_provider.py +0 -0
  117. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/providers/ollama_provider.py +0 -0
  118. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/providers/openai_provider.py +0 -0
  119. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/providers/openrouter_provider.py +0 -0
  120. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/providers/retry.py +0 -0
  121. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/providers/siliconflow_provider.py +0 -0
  122. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/providers/stream_watchdog.py +0 -0
  123. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/providers/volcengine_provider.py +0 -0
  124. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/providers/zhipu_provider.py +0 -0
  125. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/__init__.py +0 -0
  126. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/agent_factory.py +0 -0
  127. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/capabilities/__init__.py +0 -0
  128. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/capabilities/auto_detect.py +0 -0
  129. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/capabilities/multimodal.py +0 -0
  130. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/cloud_credentials.py +0 -0
  131. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/context_manager.py +0 -0
  132. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/permissions/__init__.py +0 -0
  133. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/permissions/loader.py +0 -0
  134. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/permissions/pipeline.py +0 -0
  135. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/permissions/storage.py +0 -0
  136. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/providers/__init__.py +0 -0
  137. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/providers/aliyun.py +0 -0
  138. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/qwenpaw_source.py +0 -0
  139. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/session_index.py +0 -0
  140. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/session_storage.py +0 -0
  141. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/telemetry/__init__.py +0 -0
  142. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/telemetry/attributes.py +0 -0
  143. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/telemetry/config.py +0 -0
  144. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/telemetry/constants.py +0 -0
  145. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/telemetry/content_serializer.py +0 -0
  146. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/telemetry/events.py +0 -0
  147. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/telemetry/fallback.py +0 -0
  148. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/telemetry/identity.py +0 -0
  149. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/telemetry/metrics.py +0 -0
  150. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/telemetry/sanitize.py +0 -0
  151. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/telemetry/sink.py +0 -0
  152. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/telemetry/tracing.py +0 -0
  153. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/telemetry/types.py +0 -0
  154. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/token_budget.py +0 -0
  155. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/services/token_counter.py +0 -0
  156. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/skills/__init__.py +0 -0
  157. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/skills/bundled/__init__.py +0 -0
  158. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/skills/bundled/iac_aliyun/SKILL.md +0 -0
  159. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/skills/bundled/iac_aliyun/__init__.py +0 -0
  160. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/ecs.md +0 -0
  161. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/oss.md +0 -0
  162. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/rds.md +0 -0
  163. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/redis.md +0 -0
  164. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/slb.md +0 -0
  165. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/vpc.md +0 -0
  166. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/skills/bundled/iac_aliyun/references/ros-template.md +0 -0
  167. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/skills/bundled/iac_aliyun/references/template-parameters.md +0 -0
  168. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/skills/bundled/iac_aliyun/references/terraform-template.md +0 -0
  169. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/skills/bundled/iac_aliyun/scripts/tf2ros.py +0 -0
  170. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/skills/bundled/simplify.py +0 -0
  171. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/skills/discovery.py +0 -0
  172. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/skills/frontmatter.py +0 -0
  173. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/skills/listing.py +0 -0
  174. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/skills/loader.py +0 -0
  175. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/skills/processor.py +0 -0
  176. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/skills/renderer.py +0 -0
  177. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/skills/skill_definition.py +0 -0
  178. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/skills/skill_tool.py +0 -0
  179. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/state/__init__.py +0 -0
  180. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/state/app_state.py +0 -0
  181. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tasks/__init__.py +0 -0
  182. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tasks/notification_queue.py +0 -0
  183. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tasks/task_state.py +0 -0
  184. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tasks/task_tools.py +0 -0
  185. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/__init__.py +0 -0
  186. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/base.py +0 -0
  187. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/bash/__init__.py +0 -0
  188. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/bash/bash_tool.py +0 -0
  189. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/bash/command_parser.py +0 -0
  190. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/bash/mode_validation.py +0 -0
  191. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/bash/path_validation.py +0 -0
  192. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/bash/permissions.py +0 -0
  193. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/bash/readonly_commands.py +0 -0
  194. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/bash/rule_matching.py +0 -0
  195. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/bash/safety_checks.py +0 -0
  196. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/cloud/__init__.py +0 -0
  197. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/cloud/aliyun/__init__.py +0 -0
  198. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/cloud/aliyun/aliyun_doc_search.py +0 -0
  199. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/cloud/aliyun/endpoints.yml +0 -0
  200. {iac_code-0.2.1/src/iac_code/ui/components → iac_code-0.2.2/src/iac_code/tools/cloud/aliyun/hooks}/__init__.py +0 -0
  201. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/cloud/aliyun/ros_client.py +0 -0
  202. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/cloud/aliyun/ros_stack.py +0 -0
  203. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/cloud/aliyun/ros_stack_instances.py +0 -0
  204. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/cloud/base_api.py +0 -0
  205. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/cloud/base_stack.py +0 -0
  206. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/cloud/registry.py +0 -0
  207. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/cloud/types.py +0 -0
  208. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/edit_file.py +0 -0
  209. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/glob.py +0 -0
  210. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/grep.py +0 -0
  211. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/list_files.py +0 -0
  212. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/read_file.py +0 -0
  213. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/result_storage.py +0 -0
  214. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/tool_executor.py +0 -0
  215. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/web_fetch.py +0 -0
  216. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/tools/write_file.py +0 -0
  217. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/types/__init__.py +0 -0
  218. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/types/permissions.py +0 -0
  219. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/types/skill_source.py +0 -0
  220. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/types/stream_events.py +0 -0
  221. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/__init__.py +0 -0
  222. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/banner.py +0 -0
  223. {iac_code-0.2.1/src/iac_code/ui/core → iac_code-0.2.2/src/iac_code/ui/components}/__init__.py +0 -0
  224. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/components/dialog.py +0 -0
  225. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/components/divider.py +0 -0
  226. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/components/fuzzy_picker.py +0 -0
  227. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/components/progress_bar.py +0 -0
  228. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/components/search_box.py +0 -0
  229. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/components/select.py +0 -0
  230. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/components/status_icon.py +0 -0
  231. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/components/tabs.py +0 -0
  232. {iac_code-0.2.1/src/iac_code/ui/dialogs → iac_code-0.2.2/src/iac_code/ui/core}/__init__.py +0 -0
  233. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/core/in_place_render.py +0 -0
  234. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/core/key_event.py +0 -0
  235. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/core/raw_input.py +0 -0
  236. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/core/screen.py +0 -0
  237. {iac_code-0.2.1/src/iac_code/ui/keybindings → iac_code-0.2.2/src/iac_code/ui/dialogs}/__init__.py +0 -0
  238. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/dialogs/global_search.py +0 -0
  239. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/dialogs/history_search.py +0 -0
  240. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/dialogs/model_picker.py +0 -0
  241. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/dialogs/quick_open.py +0 -0
  242. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/dialogs/resume_picker.py +0 -0
  243. {iac_code-0.2.1/src/iac_code/ui/suggestions → iac_code-0.2.2/src/iac_code/ui/keybindings}/__init__.py +0 -0
  244. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/keybindings/manager.py +0 -0
  245. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/spinner.py +0 -0
  246. {iac_code-0.2.1/src/iac_code/utils → iac_code-0.2.2/src/iac_code/ui/suggestions}/__init__.py +0 -0
  247. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/suggestions/aggregator.py +0 -0
  248. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/suggestions/command_provider.py +0 -0
  249. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/suggestions/directory_provider.py +0 -0
  250. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/suggestions/file_provider.py +0 -0
  251. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/suggestions/shell_history_provider.py +0 -0
  252. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/suggestions/token_extractor.py +0 -0
  253. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/suggestions/types.py +0 -0
  254. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/ui/transcript_view.py +0 -0
  255. {iac_code-0.2.1/src/iac_code/utils/image → iac_code-0.2.2/src/iac_code/utils}/__init__.py +0 -0
  256. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/utils/background_housekeeping.py +0 -0
  257. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/utils/cleanup.py +0 -0
  258. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/utils/image/format_detect.py +0 -0
  259. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/utils/image/pasted_content.py +0 -0
  260. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/utils/image/processor.py +0 -0
  261. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/utils/image/resizer.py +0 -0
  262. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/utils/image/store.py +0 -0
  263. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/utils/json_utils.py +0 -0
  264. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/utils/log.py +0 -0
  265. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/utils/project_paths.py +0 -0
  266. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code/utils/tool_input_parser.py +0 -0
  267. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code.egg-info/dependency_links.txt +0 -0
  268. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code.egg-info/entry_points.txt +0 -0
  269. {iac_code-0.2.1 → iac_code-0.2.2}/src/iac_code.egg-info/requires.txt +0 -0
  270. {iac_code-0.2.1 → iac_code-0.2.2}/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.2.1
3
+ Version: 0.2.2
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
@@ -0,0 +1,2 @@
1
+ __version__ = "0.2.2"
2
+ __release_date__ = "2026-05-22"
@@ -22,6 +22,7 @@ def create_default_registry() -> CommandRegistry:
22
22
  description=_("Show available commands"),
23
23
  handler=help_command,
24
24
  aliases=["?"],
25
+ history_mode="session",
25
26
  )
26
27
  )
27
28
  registry.register(
@@ -29,6 +30,7 @@ def create_default_registry() -> CommandRegistry:
29
30
  name="clear",
30
31
  description=_("Clear conversation history"),
31
32
  handler=clear_command,
33
+ history_mode="session",
32
34
  )
33
35
  )
34
36
  registry.register(
@@ -37,6 +39,7 @@ def create_default_registry() -> CommandRegistry:
37
39
  description=_("Show or switch model"),
38
40
  handler=model_command,
39
41
  arg_names=["model_name"],
42
+ history_mode="session",
40
43
  )
41
44
  )
42
45
  registry.register(
@@ -45,6 +48,7 @@ def create_default_registry() -> CommandRegistry:
45
48
  description=_("Show or switch thinking effort"),
46
49
  handler=effort_command,
47
50
  arg_names=["level"],
51
+ history_mode="session",
48
52
  )
49
53
  )
50
54
  registry.register(
@@ -53,6 +57,7 @@ def create_default_registry() -> CommandRegistry:
53
57
  description=_("Compact conversation context"),
54
58
  handler=compact_command,
55
59
  progress_label=_("Compacting conversation"),
60
+ history_mode="session",
56
61
  )
57
62
  )
58
63
  registry.register(
@@ -61,6 +66,7 @@ def create_default_registry() -> CommandRegistry:
61
66
  description=_("Exit the application"),
62
67
  handler=exit_command,
63
68
  aliases=["quit", "q"],
69
+ history_mode="none",
64
70
  )
65
71
  )
66
72
  registry.register(
@@ -69,6 +75,7 @@ def create_default_registry() -> CommandRegistry:
69
75
  description=_("Authenticate with LLM provider"),
70
76
  handler=auth_command,
71
77
  aliases=["login"],
78
+ history_mode="session",
72
79
  )
73
80
  )
74
81
  registry.register(
@@ -77,6 +84,7 @@ def create_default_registry() -> CommandRegistry:
77
84
  description=_("Toggle debug logging"),
78
85
  handler=debug_command,
79
86
  arg_hint="[on|off]",
87
+ history_mode="session",
80
88
  )
81
89
  )
82
90
  registry.register(
@@ -85,6 +93,7 @@ def create_default_registry() -> CommandRegistry:
85
93
  description=_("Resume a previous session"),
86
94
  handler=resume_command,
87
95
  arg_hint=_("[conversation id or search term]"),
96
+ history_mode="session",
88
97
  )
89
98
  )
90
99
  return registry
@@ -3,7 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from dataclasses import dataclass, field
6
- from typing import TYPE_CHECKING, Any, Awaitable, Callable
6
+ from typing import TYPE_CHECKING, Any, Awaitable, Callable, Literal
7
7
 
8
8
  from iac_code.types.skill_source import SkillSource
9
9
 
@@ -42,6 +42,12 @@ class LocalCommand(Command):
42
42
  progress_label: str | None = None
43
43
  """When set, the REPL shows a spinner with this label while the handler runs.
44
44
  Use for commands that perform slow async work (e.g. an LLM call)."""
45
+ history_mode: Literal["persist", "session", "none"] = "persist"
46
+ """Controls how the command is recorded in input history.
47
+ - "persist": saved to disk (default, for normal commands).
48
+ - "session": kept in memory for the current session only.
49
+ - "none": never recorded in history.
50
+ """
45
51
 
46
52
 
47
53
  @dataclass
@@ -16,7 +16,7 @@ from typing import Any
16
16
  import yaml
17
17
 
18
18
  # Default LLM model used when no model is saved in settings
19
- DEFAULT_MODEL = "qwen3.6-plus"
19
+ DEFAULT_MODEL = "qwen3.7-max"
20
20
 
21
21
  # Configuration directory
22
22
  _CONFIG_DIR_NAME = ".iac-code"
@@ -4,9 +4,9 @@
4
4
  #
5
5
  msgid ""
6
6
  msgstr ""
7
- "Project-Id-Version: iac-code 0.2.0\n"
7
+ "Project-Id-Version: iac-code 0.2.2\n"
8
8
  "Report-Msgid-Bugs-To: \n"
9
- "POT-Creation-Date: 2026-05-20 15:23+0800\n"
9
+ "POT-Creation-Date: 2026-05-22 14:28+0800\n"
10
10
  "PO-Revision-Date: 2026-05-13 00:00+0000\n"
11
11
  "Last-Translator: \n"
12
12
  "Language: de\n"
@@ -503,55 +503,55 @@ msgstr "Speichert die angegebenen Routen als Routen-Snapshot"
503
503
  msgid "Show available commands"
504
504
  msgstr "Verfügbare Befehle anzeigen"
505
505
 
506
- #: src/iac_code/commands/__init__.py:30
506
+ #: src/iac_code/commands/__init__.py:31
507
507
  msgid "Clear conversation history"
508
508
  msgstr "Konversationsverlauf löschen"
509
509
 
510
- #: src/iac_code/commands/__init__.py:37
510
+ #: src/iac_code/commands/__init__.py:39
511
511
  msgid "Show or switch model"
512
512
  msgstr "Modell anzeigen oder wechseln"
513
513
 
514
- #: src/iac_code/commands/__init__.py:45
514
+ #: src/iac_code/commands/__init__.py:48
515
515
  msgid "Show or switch thinking effort"
516
516
  msgstr "Thinking-Effort anzeigen oder wechseln"
517
517
 
518
- #: src/iac_code/commands/__init__.py:53
518
+ #: src/iac_code/commands/__init__.py:57
519
519
  msgid "Compact conversation context"
520
520
  msgstr "Konversationskontext komprimieren"
521
521
 
522
- #: src/iac_code/commands/__init__.py:55
522
+ #: src/iac_code/commands/__init__.py:59
523
523
  msgid "Compacting conversation"
524
524
  msgstr "Konversation wird komprimiert"
525
525
 
526
- #: src/iac_code/commands/__init__.py:61
526
+ #: src/iac_code/commands/__init__.py:66
527
527
  msgid "Exit the application"
528
528
  msgstr "Anwendung beenden"
529
529
 
530
- #: src/iac_code/commands/__init__.py:69
530
+ #: src/iac_code/commands/__init__.py:75
531
531
  msgid "Authenticate with LLM provider"
532
532
  msgstr "Beim LLM-Anbieter authentifizieren"
533
533
 
534
- #: src/iac_code/commands/__init__.py:77
534
+ #: src/iac_code/commands/__init__.py:84
535
535
  msgid "Toggle debug logging"
536
536
  msgstr "Debug-Protokollierung umschalten"
537
537
 
538
- #: src/iac_code/commands/__init__.py:85
538
+ #: src/iac_code/commands/__init__.py:93
539
539
  msgid "Resume a previous session"
540
540
  msgstr "Eine frühere Sitzung fortsetzen"
541
541
 
542
- #: src/iac_code/commands/__init__.py:87
542
+ #: src/iac_code/commands/__init__.py:95
543
543
  msgid "[conversation id or search term]"
544
544
  msgstr "[Konversations-ID oder Suchbegriff]"
545
545
 
546
546
  #: src/iac_code/commands/auth.py:249 src/iac_code/commands/auth.py:883
547
- #: src/iac_code/ui/core/prompt_input.py:505
547
+ #: src/iac_code/ui/core/prompt_input.py:510
548
548
  msgid "Navigate"
549
549
  msgstr "Navigieren"
550
550
 
551
551
  #: src/iac_code/commands/auth.py:249 src/iac_code/commands/auth.py:371
552
552
  #: src/iac_code/commands/auth.py:405 src/iac_code/commands/auth.py:412
553
553
  #: src/iac_code/commands/auth.py:436 src/iac_code/commands/auth.py:883
554
- #: src/iac_code/commands/auth.py:1073 src/iac_code/ui/core/prompt_input.py:505
554
+ #: src/iac_code/commands/auth.py:1073 src/iac_code/ui/core/prompt_input.py:510
555
555
  msgid "Confirm"
556
556
  msgstr "Bestätigen"
557
557
 
@@ -659,7 +659,7 @@ msgstr "{status}: {provider} / {model}"
659
659
  msgid "Alibaba Cloud"
660
660
  msgstr "Alibaba Cloud"
661
661
 
662
- #: src/iac_code/commands/auth.py:798 src/iac_code/providers/registry.py:423
662
+ #: src/iac_code/commands/auth.py:798 src/iac_code/providers/registry.py:426
663
663
  msgid "ZhiPu AI"
664
664
  msgstr "ZhiPu AI"
665
665
 
@@ -671,7 +671,7 @@ msgstr "Kimi"
671
671
  msgid "MiniMax"
672
672
  msgstr "MiniMax"
673
673
 
674
- #: src/iac_code/commands/auth.py:801 src/iac_code/providers/registry.py:425
674
+ #: src/iac_code/commands/auth.py:801 src/iac_code/providers/registry.py:428
675
675
  msgid "Volcengine"
676
676
  msgstr "Volcengine"
677
677
 
@@ -679,27 +679,27 @@ msgstr "Volcengine"
679
679
  msgid "SiliconFlow"
680
680
  msgstr "SiliconFlow"
681
681
 
682
- #: src/iac_code/commands/auth.py:803 src/iac_code/providers/registry.py:416
682
+ #: src/iac_code/commands/auth.py:803 src/iac_code/providers/registry.py:419
683
683
  msgid "DeepSeek"
684
684
  msgstr "DeepSeek"
685
685
 
686
- #: src/iac_code/commands/auth.py:804 src/iac_code/providers/registry.py:414
686
+ #: src/iac_code/commands/auth.py:804 src/iac_code/providers/registry.py:417
687
687
  msgid "OpenAI"
688
688
  msgstr "OpenAI"
689
689
 
690
- #: src/iac_code/commands/auth.py:805 src/iac_code/providers/registry.py:415
690
+ #: src/iac_code/commands/auth.py:805 src/iac_code/providers/registry.py:418
691
691
  msgid "Anthropic"
692
692
  msgstr "Anthropic"
693
693
 
694
- #: src/iac_code/commands/auth.py:806 src/iac_code/providers/registry.py:418
694
+ #: src/iac_code/commands/auth.py:806 src/iac_code/providers/registry.py:421
695
695
  msgid "Google Gemini"
696
696
  msgstr "Google Gemini"
697
697
 
698
- #: src/iac_code/commands/auth.py:807 src/iac_code/providers/registry.py:431
698
+ #: src/iac_code/commands/auth.py:807 src/iac_code/providers/registry.py:434
699
699
  msgid "Azure OpenAI"
700
700
  msgstr "Azure OpenAI"
701
701
 
702
- #: src/iac_code/commands/auth.py:808 src/iac_code/providers/registry.py:430
702
+ #: src/iac_code/commands/auth.py:808 src/iac_code/providers/registry.py:433
703
703
  msgid "OpenRouter"
704
704
  msgstr "OpenRouter"
705
705
 
@@ -720,7 +720,7 @@ msgid "Credential"
720
720
  msgstr "Anmeldedaten"
721
721
 
722
722
  #: src/iac_code/commands/auth.py:844 src/iac_code/commands/auth.py:941
723
- #: src/iac_code/commands/auth.py:1046 src/iac_code/ui/renderer.py:418
723
+ #: src/iac_code/commands/auth.py:1046 src/iac_code/ui/renderer.py:419
724
724
  msgid "Region"
725
725
  msgstr "Region"
726
726
 
@@ -983,79 +983,79 @@ msgstr ""
983
983
  " Base URL korrekt ist (aktuell: {base_url}). Viele OpenAI-kompatible "
984
984
  "Endpunkte erfordern ein /v1-Suffix (z. B. {base_url}/v1)."
985
985
 
986
- #: src/iac_code/providers/registry.py:412
986
+ #: src/iac_code/providers/registry.py:415
987
987
  msgid "Alibaba Cloud Bailian"
988
988
  msgstr "Alibaba Cloud Bailian"
989
989
 
990
- #: src/iac_code/providers/registry.py:413
990
+ #: src/iac_code/providers/registry.py:416
991
991
  msgid "Alibaba Cloud Bailian Token Plan"
992
992
  msgstr "Alibaba Cloud Bailian Token Plan"
993
993
 
994
- #: src/iac_code/providers/registry.py:417
994
+ #: src/iac_code/providers/registry.py:420
995
995
  msgid "OpenAPI Compatible"
996
996
  msgstr "OpenAPI-kompatibel"
997
997
 
998
- #: src/iac_code/providers/registry.py:419
998
+ #: src/iac_code/providers/registry.py:422
999
999
  msgid "Kimi (China)"
1000
1000
  msgstr "Kimi (China)"
1001
1001
 
1002
- #: src/iac_code/providers/registry.py:420
1002
+ #: src/iac_code/providers/registry.py:423
1003
1003
  msgid "Kimi (International)"
1004
1004
  msgstr "Kimi (International)"
1005
1005
 
1006
- #: src/iac_code/providers/registry.py:421
1006
+ #: src/iac_code/providers/registry.py:424
1007
1007
  msgid "MiniMax (China)"
1008
1008
  msgstr "MiniMax (China)"
1009
1009
 
1010
- #: src/iac_code/providers/registry.py:422
1010
+ #: src/iac_code/providers/registry.py:425
1011
1011
  msgid "MiniMax (International)"
1012
1012
  msgstr "MiniMax (International)"
1013
1013
 
1014
- #: src/iac_code/providers/registry.py:424
1014
+ #: src/iac_code/providers/registry.py:427
1015
1015
  msgid "ZhiPu AI (International)"
1016
1016
  msgstr "ZhiPu AI (International)"
1017
1017
 
1018
- #: src/iac_code/providers/registry.py:426
1018
+ #: src/iac_code/providers/registry.py:429
1019
1019
  msgid "SiliconFlow (China)"
1020
1020
  msgstr "SiliconFlow (China)"
1021
1021
 
1022
- #: src/iac_code/providers/registry.py:427
1022
+ #: src/iac_code/providers/registry.py:430
1023
1023
  msgid "SiliconFlow (International)"
1024
1024
  msgstr "SiliconFlow (International)"
1025
1025
 
1026
- #: src/iac_code/providers/registry.py:428
1026
+ #: src/iac_code/providers/registry.py:431
1027
1027
  msgid "Ollama (Local)"
1028
1028
  msgstr "Ollama (Lokal)"
1029
1029
 
1030
- #: src/iac_code/providers/registry.py:429
1030
+ #: src/iac_code/providers/registry.py:432
1031
1031
  msgid "LM Studio (Local)"
1032
1032
  msgstr "LM Studio (Lokal)"
1033
1033
 
1034
- #: src/iac_code/providers/registry.py:432
1034
+ #: src/iac_code/providers/registry.py:435
1035
1035
  msgid "ModelScope"
1036
1036
  msgstr "ModelScope"
1037
1037
 
1038
- #: src/iac_code/providers/registry.py:433
1038
+ #: src/iac_code/providers/registry.py:436
1039
1039
  msgid "Alibaba Cloud CodingPlan"
1040
1040
  msgstr "Alibaba Cloud CodingPlan"
1041
1041
 
1042
- #: src/iac_code/providers/registry.py:434
1042
+ #: src/iac_code/providers/registry.py:437
1043
1043
  msgid "Alibaba Cloud CodingPlan (International)"
1044
1044
  msgstr "Alibaba Cloud CodingPlan (International)"
1045
1045
 
1046
- #: src/iac_code/providers/registry.py:435
1046
+ #: src/iac_code/providers/registry.py:438
1047
1047
  msgid "ZhiPu AI CodingPlan"
1048
1048
  msgstr "ZhiPu AI CodingPlan"
1049
1049
 
1050
- #: src/iac_code/providers/registry.py:436
1050
+ #: src/iac_code/providers/registry.py:439
1051
1051
  msgid "ZhiPu AI CodingPlan (International)"
1052
1052
  msgstr "ZhiPu AI CodingPlan (International)"
1053
1053
 
1054
- #: src/iac_code/providers/registry.py:437
1054
+ #: src/iac_code/providers/registry.py:440
1055
1055
  msgid "Volcengine CodingPlan"
1056
1056
  msgstr "Volcengine CodingPlan"
1057
1057
 
1058
- #: src/iac_code/providers/registry.py:438
1058
+ #: src/iac_code/providers/registry.py:441
1059
1059
  msgid "Anthropic Compatible"
1060
1060
  msgstr "Anthropic-kompatibel"
1061
1061
 
@@ -1359,7 +1359,7 @@ msgstr "CloudAPI"
1359
1359
  msgid "Calling {action}..."
1360
1360
  msgstr "{action} wird aufgerufen …"
1361
1361
 
1362
- #: src/iac_code/tools/cloud/aliyun/aliyun_api.py:373
1362
+ #: src/iac_code/tools/cloud/aliyun/aliyun_api.py:385
1363
1363
  #: src/iac_code/tools/cloud/base_api.py:123
1364
1364
  msgid "Call succeeded"
1365
1365
  msgstr "Aufruf erfolgreich"
@@ -1519,11 +1519,11 @@ msgstr "IMPORT ABGESCHLOSSEN"
1519
1519
  msgid "IMPORT_FAILED"
1520
1520
  msgstr "IMPORT FEHLGESCHLAGEN"
1521
1521
 
1522
- #: src/iac_code/tools/cloud/aliyun/aliyun_api.py:165
1522
+ #: src/iac_code/tools/cloud/aliyun/aliyun_api.py:170
1523
1523
  msgid "Aliyun API"
1524
1524
  msgstr "Aliyun API"
1525
1525
 
1526
- #: src/iac_code/tools/cloud/aliyun/aliyun_api.py:372
1526
+ #: src/iac_code/tools/cloud/aliyun/aliyun_api.py:384
1527
1527
  #, python-brace-format
1528
1528
  msgid "Call succeeded (RequestId: {request_id})"
1529
1529
  msgstr "Aufruf erfolgreich (RequestId: {request_id})"
@@ -1612,142 +1612,142 @@ msgstr "Debug-Modus"
1612
1612
  msgid "Log file"
1613
1613
  msgstr "Protokolldatei"
1614
1614
 
1615
- #: src/iac_code/ui/renderer.py:351 src/iac_code/ui/renderer.py:621
1616
- #: src/iac_code/ui/renderer.py:1402
1615
+ #: src/iac_code/ui/renderer.py:352 src/iac_code/ui/renderer.py:622
1616
+ #: src/iac_code/ui/renderer.py:1408
1617
1617
  #, python-brace-format
1618
1618
  msgid "Thought for {seconds:.1f}s"
1619
1619
  msgstr "Nachgedacht für {seconds:.1f}s"
1620
1620
 
1621
- #: src/iac_code/ui/renderer.py:367 src/iac_code/ui/renderer.py:653
1622
- #: src/iac_code/ui/renderer.py:1423
1621
+ #: src/iac_code/ui/renderer.py:368 src/iac_code/ui/renderer.py:654
1622
+ #: src/iac_code/ui/renderer.py:1429
1623
1623
  msgid "(ctrl+o to expand)"
1624
1624
  msgstr "(ctrl+o zum Aufklappen)"
1625
1625
 
1626
- #: src/iac_code/ui/renderer.py:394
1626
+ #: src/iac_code/ui/renderer.py:395
1627
1627
  msgid "Resource"
1628
1628
  msgstr "Ressource"
1629
1629
 
1630
- #: src/iac_code/ui/renderer.py:395
1630
+ #: src/iac_code/ui/renderer.py:396
1631
1631
  msgid "Type"
1632
1632
  msgstr "Typ"
1633
1633
 
1634
- #: src/iac_code/ui/renderer.py:396 src/iac_code/ui/renderer.py:419
1634
+ #: src/iac_code/ui/renderer.py:397 src/iac_code/ui/renderer.py:420
1635
1635
  msgid "Status"
1636
1636
  msgstr "Status"
1637
1637
 
1638
- #: src/iac_code/ui/renderer.py:417
1638
+ #: src/iac_code/ui/renderer.py:418
1639
1639
  msgid "Account ID"
1640
1640
  msgstr "Konto-ID"
1641
1641
 
1642
- #: src/iac_code/ui/renderer.py:495
1642
+ #: src/iac_code/ui/renderer.py:496
1643
1643
  #, python-brace-format
1644
1644
  msgid "Done ({child_count} tool uses{token_info}{elapsed})"
1645
1645
  msgstr "Fertig ({child_count} Tool-Aufrufe{token_info}{elapsed})"
1646
1646
 
1647
- #: src/iac_code/ui/renderer.py:525
1647
+ #: src/iac_code/ui/renderer.py:526
1648
1648
  #, python-brace-format
1649
1649
  msgid "+ {count} more tool uses (ctrl+o to expand)"
1650
1650
  msgstr "+ {count} weitere Tool-Aufrufe (ctrl+o zum Aufklappen)"
1651
1651
 
1652
- #: src/iac_code/ui/renderer.py:1128
1652
+ #: src/iac_code/ui/renderer.py:1130
1653
1653
  #, python-brace-format
1654
1654
  msgid "Context auto-compacted: {original} → {compacted} tokens"
1655
1655
  msgstr "Kontext automatisch komprimiert: {original} → {compacted} Tokens"
1656
1656
 
1657
- #: src/iac_code/ui/renderer.py:1212
1657
+ #: src/iac_code/ui/renderer.py:1215
1658
1658
  msgid "Operation cancelled."
1659
1659
  msgstr "Vorgang abgebrochen."
1660
1660
 
1661
- #: src/iac_code/ui/renderer.py:1217
1661
+ #: src/iac_code/ui/renderer.py:1220
1662
1662
  msgid "No API key configured."
1663
1663
  msgstr "Kein API-Key konfiguriert."
1664
1664
 
1665
- #: src/iac_code/ui/renderer.py:1217
1665
+ #: src/iac_code/ui/renderer.py:1220
1666
1666
  msgid "Please run /auth to set up your LLM provider and API key."
1667
1667
  msgstr "Führen Sie /auth aus, um LLM-Anbieter und API-Key einzurichten."
1668
1668
 
1669
- #: src/iac_code/ui/renderer.py:1221
1669
+ #: src/iac_code/ui/renderer.py:1225
1670
1670
  #, python-brace-format
1671
1671
  msgid "Error: {error}"
1672
1672
  msgstr "Fehler: {error}"
1673
1673
 
1674
- #: src/iac_code/ui/renderer.py:1289
1674
+ #: src/iac_code/ui/renderer.py:1295
1675
1675
  msgid "Allow this action?"
1676
1676
  msgstr "Diese Aktion zulassen?"
1677
1677
 
1678
- #: src/iac_code/ui/renderer.py:1292
1678
+ #: src/iac_code/ui/renderer.py:1298
1679
1679
  msgid "Yes, allow once"
1680
1680
  msgstr "Ja, einmal zulassen"
1681
1681
 
1682
- #: src/iac_code/ui/renderer.py:1306
1682
+ #: src/iac_code/ui/renderer.py:1312
1683
1683
  #, python-brace-format
1684
1684
  msgid "Yes, always allow \"{rule}\" (this session)"
1685
1685
  msgstr "Ja, \"{rule}\" immer erlauben (diese Sitzung)"
1686
1686
 
1687
- #: src/iac_code/ui/renderer.py:1311
1687
+ #: src/iac_code/ui/renderer.py:1317
1688
1688
  msgid "Yes, allow always for this tool"
1689
1689
  msgstr "Ja, für dieses Tool immer zulassen"
1690
1690
 
1691
- #: src/iac_code/ui/renderer.py:1314
1691
+ #: src/iac_code/ui/renderer.py:1320
1692
1692
  msgid "No, reject once"
1693
1693
  msgstr "Nein, einmal ablehnen"
1694
1694
 
1695
- #: src/iac_code/ui/renderer.py:1314
1695
+ #: src/iac_code/ui/renderer.py:1320
1696
1696
  msgid "default"
1697
1697
  msgstr "Standard"
1698
1698
 
1699
- #: src/iac_code/ui/renderer.py:1321
1699
+ #: src/iac_code/ui/renderer.py:1327
1700
1700
  #, python-brace-format
1701
1701
  msgid "No, always deny \"{rule}\" (this session)"
1702
1702
  msgstr "Nein, immer \"{rule}\" ablehnen (diese Sitzung)"
1703
1703
 
1704
- #: src/iac_code/ui/renderer.py:1326
1704
+ #: src/iac_code/ui/renderer.py:1332
1705
1705
  msgid "No, always reject this tool"
1706
1706
  msgstr "Nein, dieses Tool immer ablehnen"
1707
1707
 
1708
- #: src/iac_code/ui/repl.py:354
1708
+ #: src/iac_code/ui/repl.py:355
1709
1709
  msgid "Press Ctrl+C again to exit."
1710
1710
  msgstr "Drücken Sie erneut Ctrl+C zum Beenden."
1711
1711
 
1712
- #: src/iac_code/ui/repl.py:374
1712
+ #: src/iac_code/ui/repl.py:376
1713
1713
  msgid "Interrupted."
1714
1714
  msgstr "Unterbrochen."
1715
1715
 
1716
- #: src/iac_code/ui/repl.py:411
1716
+ #: src/iac_code/ui/repl.py:413
1717
1717
  msgid "Goodbye!"
1718
1718
  msgstr "Auf Wiedersehen!"
1719
1719
 
1720
- #: src/iac_code/ui/repl.py:412
1720
+ #: src/iac_code/ui/repl.py:414
1721
1721
  msgid "Resume this session with:"
1722
1722
  msgstr "Diese Sitzung fortsetzen mit:"
1723
1723
 
1724
- #: src/iac_code/ui/repl.py:445
1724
+ #: src/iac_code/ui/repl.py:447
1725
1725
  msgid "No image in clipboard."
1726
1726
  msgstr "Kein Bild in der Zwischenablage."
1727
1727
 
1728
- #: src/iac_code/ui/repl.py:584
1728
+ #: src/iac_code/ui/repl.py:592
1729
1729
  #, python-brace-format
1730
1730
  msgid "Unknown command: /{name}. Type /help for available commands."
1731
1731
  msgstr ""
1732
1732
  "Unknown command: /{name}. Type /help for available commands.Unbekannter "
1733
1733
  "Befehl: /{name}. Geben Sie /help für verfügbare Befehle ein."
1734
1734
 
1735
- #: src/iac_code/ui/repl.py:609 src/iac_code/ui/repl.py:654
1735
+ #: src/iac_code/ui/repl.py:617 src/iac_code/ui/repl.py:662
1736
1736
  #, python-brace-format
1737
1737
  msgid "Command error: {error}"
1738
1738
  msgstr "Befehlsfehler: {error}"
1739
1739
 
1740
- #: src/iac_code/ui/repl.py:616
1740
+ #: src/iac_code/ui/repl.py:624
1741
1741
  #, python-brace-format
1742
1742
  msgid "Command has no handler: {name}"
1743
1743
  msgstr "Kein Handler für Befehl: {name}"
1744
1744
 
1745
- #: src/iac_code/ui/repl.py:889
1745
+ #: src/iac_code/ui/repl.py:929
1746
1746
  #, python-brace-format
1747
1747
  msgid "Session not found: {session_id}"
1748
1748
  msgstr "Sitzung nicht gefunden: {session_id}"
1749
1749
 
1750
- #: src/iac_code/ui/repl.py:908
1750
+ #: src/iac_code/ui/repl.py:948
1751
1751
  #, python-brace-format
1752
1752
  msgid ""
1753
1753
  "This session belongs to a different directory.\n"
@@ -1758,19 +1758,19 @@ msgstr ""
1758
1758
  "Zum Fortsetzen ausführen:\n"
1759
1759
  " {cmd}"
1760
1760
 
1761
- #: src/iac_code/ui/repl.py:947
1761
+ #: src/iac_code/ui/repl.py:987
1762
1762
  msgid "This conversation is from a different directory."
1763
1763
  msgstr "Diese Konversation stammt aus einem anderen Verzeichnis."
1764
1764
 
1765
- #: src/iac_code/ui/repl.py:949
1765
+ #: src/iac_code/ui/repl.py:989
1766
1766
  msgid "To resume, run:"
1767
1767
  msgstr "Zum Fortsetzen ausführen:"
1768
1768
 
1769
- #: src/iac_code/ui/repl.py:954
1769
+ #: src/iac_code/ui/repl.py:994
1770
1770
  msgid "(Command copied to clipboard)"
1771
1771
  msgstr "(Befehl in die Zwischenablage kopiert)"
1772
1772
 
1773
- #: src/iac_code/ui/repl.py:1111
1773
+ #: src/iac_code/ui/repl.py:1151
1774
1774
  #, python-brace-format
1775
1775
  msgid ""
1776
1776
  "Current model {model} does not support image input. Use /model to switch "
@@ -1779,12 +1779,12 @@ msgstr ""
1779
1779
  "Das aktuelle Modell {model} unterstützt keine Bildeingabe. Verwenden Sie "
1780
1780
  "/model, um zu einem Vision-fähigen Modell zu wechseln."
1781
1781
 
1782
- #: src/iac_code/ui/repl.py:1120
1782
+ #: src/iac_code/ui/repl.py:1160
1783
1783
  #, python-brace-format
1784
1784
  msgid "Image error: {err}"
1785
1785
  msgstr "Bildfehler: {err}"
1786
1786
 
1787
- #: src/iac_code/ui/repl.py:1137
1787
+ #: src/iac_code/ui/repl.py:1177
1788
1788
  msgid ""
1789
1789
  "Failed to persist image to cache; it will only exist in memory for this "
1790
1790
  "turn."
@@ -1828,15 +1828,15 @@ msgstr "Vollständiges Protokoll · ctrl+o zum Umschalten"
1828
1828
  msgid "No matches found"
1829
1829
  msgstr "Keine Treffer"
1830
1830
 
1831
- #: src/iac_code/ui/core/prompt_input.py:331
1831
+ #: src/iac_code/ui/core/prompt_input.py:336
1832
1832
  msgid "Image in clipboard · ctrl+v to paste"
1833
1833
  msgstr "Bild in der Zwischenablage · Strg+V zum Einfügen"
1834
1834
 
1835
- #: src/iac_code/ui/core/prompt_input.py:505
1835
+ #: src/iac_code/ui/core/prompt_input.py:510
1836
1836
  msgid "Fill"
1837
1837
  msgstr "Ausfüllen"
1838
1838
 
1839
- #: src/iac_code/ui/core/prompt_input.py:505
1839
+ #: src/iac_code/ui/core/prompt_input.py:510
1840
1840
  msgid "Dismiss"
1841
1841
  msgstr "Schließen"
1842
1842