iac-code 0.12.1__tar.gz → 0.13.1__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 (653) hide show
  1. {iac_code-0.12.1 → iac_code-0.13.1}/PKG-INFO +34 -19
  2. iac_code-0.12.1/src/iac_code.egg-info/PKG-INFO → iac_code-0.13.1/README.md +32 -34
  3. {iac_code-0.12.1 → iac_code-0.13.1}/pyproject.toml +1 -2
  4. {iac_code-0.12.1 → iac_code-0.13.1}/setup.py +14 -1
  5. iac_code-0.13.1/src/iac_code/__init__.py +2 -0
  6. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/app.py +122 -14
  7. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/events.py +60 -1
  8. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/executor.py +219 -8
  9. iac_code-0.13.1/src/iac_code/a2a/input_required.py +665 -0
  10. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/parts.py +15 -0
  11. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/persistence.py +3 -0
  12. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/pipeline_events.py +15 -72
  13. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/pipeline_executor.py +194 -40
  14. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/pipeline_snapshot.py +1 -1
  15. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/pipeline_stream.py +486 -64
  16. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/runtime_overrides.py +18 -1
  17. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/task_store.py +123 -10
  18. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/transports/dispatcher.py +48 -9
  19. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/transports/websocket.py +4 -3
  20. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/types.py +1 -0
  21. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/agent/agent_loop.py +8 -4
  22. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/cli/main.py +2 -0
  23. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/config.py +7 -0
  24. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/i18n/__init__.py +29 -0
  25. iac_code-0.13.1/src/iac_code/i18n/locales/de/LC_MESSAGES/messages.mo +0 -0
  26. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/i18n/locales/de/LC_MESSAGES/messages.po +183 -5
  27. iac_code-0.13.1/src/iac_code/i18n/locales/es/LC_MESSAGES/messages.mo +0 -0
  28. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/i18n/locales/es/LC_MESSAGES/messages.po +181 -5
  29. iac_code-0.13.1/src/iac_code/i18n/locales/fr/LC_MESSAGES/messages.mo +0 -0
  30. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/i18n/locales/fr/LC_MESSAGES/messages.po +177 -5
  31. iac_code-0.13.1/src/iac_code/i18n/locales/ja/LC_MESSAGES/messages.mo +0 -0
  32. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/i18n/locales/ja/LC_MESSAGES/messages.po +173 -5
  33. iac_code-0.13.1/src/iac_code/i18n/locales/pt/LC_MESSAGES/messages.mo +0 -0
  34. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/i18n/locales/pt/LC_MESSAGES/messages.po +181 -5
  35. iac_code-0.13.1/src/iac_code/i18n/locales/zh/LC_MESSAGES/messages.mo +0 -0
  36. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/i18n/locales/zh/LC_MESSAGES/messages.po +173 -5
  37. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/loader.py +9 -2
  38. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/pipeline_runner.py +12 -2
  39. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/step_executor.py +102 -1
  40. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/step_spec.py +7 -0
  41. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/pipeline.yaml +60 -0
  42. iac_code-0.13.1/src/iac_code/pipeline/selling/prompts/confirm_and_select.a2a.rich.md +74 -0
  43. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/tools/ros_deploy_tool.py +78 -4
  44. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/providers/manager.py +85 -3
  45. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/providers/registry.py +9 -4
  46. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/providers/thinking.py +39 -0
  47. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/providers/zhipu_provider.py +10 -2
  48. iac_code-0.13.1/src/iac_code/services/configuration_readiness.py +131 -0
  49. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/context_manager.py +4 -0
  50. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/providers/aliyun.py +150 -48
  51. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/session_backup.py +10 -1
  52. iac_code-0.13.1/src/iac_code/services/session_backup_staging.py +674 -0
  53. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/telemetry/__init__.py +2 -0
  54. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/telemetry/attributes.py +29 -2
  55. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/telemetry/constants.py +4 -0
  56. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/base_stack.py +17 -0
  57. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/write_file.py +12 -1
  58. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/types/stream_events.py +1 -0
  59. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/session_manager.py +3 -1
  60. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/session_titler.py +18 -3
  61. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/static/index.html +1 -1
  62. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/static/js/app.js +355 -57
  63. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/static/js/components/composer.js +6 -0
  64. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/static/js/components/tool_cards.js +6 -1
  65. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/static/js/components/workspace.js +4 -0
  66. iac_code-0.13.1/src/iac_code.egg-info/PKG-INFO +134 -0
  67. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code.egg-info/SOURCES.txt +4 -0
  68. iac_code-0.12.1/README.md +0 -99
  69. iac_code-0.12.1/src/iac_code/__init__.py +0 -2
  70. iac_code-0.12.1/src/iac_code/i18n/locales/de/LC_MESSAGES/messages.mo +0 -0
  71. iac_code-0.12.1/src/iac_code/i18n/locales/es/LC_MESSAGES/messages.mo +0 -0
  72. iac_code-0.12.1/src/iac_code/i18n/locales/fr/LC_MESSAGES/messages.mo +0 -0
  73. iac_code-0.12.1/src/iac_code/i18n/locales/ja/LC_MESSAGES/messages.mo +0 -0
  74. iac_code-0.12.1/src/iac_code/i18n/locales/pt/LC_MESSAGES/messages.mo +0 -0
  75. iac_code-0.12.1/src/iac_code/i18n/locales/zh/LC_MESSAGES/messages.mo +0 -0
  76. {iac_code-0.12.1 → iac_code-0.13.1}/LICENSE +0 -0
  77. {iac_code-0.12.1 → iac_code-0.13.1}/MANIFEST.in +0 -0
  78. {iac_code-0.12.1 → iac_code-0.13.1}/setup.cfg +0 -0
  79. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/__init__.py +0 -0
  80. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/agent_card.py +0 -0
  81. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/artifacts.py +0 -0
  82. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/backup.py +0 -0
  83. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/client.py +0 -0
  84. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/exposure.py +0 -0
  85. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/jsonrpc_passthrough.py +0 -0
  86. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/metadata_redaction.py +0 -0
  87. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/metrics.py +0 -0
  88. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/pipeline_delta_coalescing.py +0 -0
  89. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/pipeline_flow_monitor.py +0 -0
  90. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/pipeline_journal.py +0 -0
  91. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/pipeline_outbound.py +0 -0
  92. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/pipeline_paths.py +0 -0
  93. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/pipeline_performance.py +0 -0
  94. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/pipeline_recovery.py +0 -0
  95. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/pipeline_transport_delivery.py +0 -0
  96. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/projection.py +0 -0
  97. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/push.py +0 -0
  98. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/push_queue.py +0 -0
  99. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/push_secrets.py +0 -0
  100. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/push_worker.py +0 -0
  101. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/router.py +0 -0
  102. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/runtime_registry.py +0 -0
  103. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/signing.py +0 -0
  104. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/thinking_metadata.py +0 -0
  105. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/transport.py +0 -0
  106. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/transports/__init__.py +0 -0
  107. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/transports/base.py +0 -0
  108. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/transports/grpc.py +0 -0
  109. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/transports/grpc_jsonrpc.py +0 -0
  110. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/transports/http.py +0 -0
  111. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/transports/redis_streams.py +0 -0
  112. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/transports/stdio.py +0 -0
  113. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/a2a/transports/unix.py +0 -0
  114. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/acp/__init__.py +0 -0
  115. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/acp/convert.py +0 -0
  116. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/acp/http_sse.py +0 -0
  117. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/acp/mcp.py +0 -0
  118. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/acp/metrics.py +0 -0
  119. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/acp/runner.py +0 -0
  120. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/acp/server.py +0 -0
  121. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/acp/session.py +0 -0
  122. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/acp/slash_registry.py +0 -0
  123. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/acp/state.py +0 -0
  124. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/acp/tools.py +0 -0
  125. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/acp/types.py +0 -0
  126. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/acp/version.py +0 -0
  127. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/agent/__init__.py +0 -0
  128. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/agent/agent_tool.py +0 -0
  129. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/agent/agent_types.py +0 -0
  130. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/agent/message.py +0 -0
  131. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/agent/system_prompt.py +0 -0
  132. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/cli/__init__.py +0 -0
  133. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/cli/headless.py +0 -0
  134. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/cli/install_git_bash.py +0 -0
  135. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/cli/output_formats.py +0 -0
  136. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/cli/process_events.py +0 -0
  137. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/cli/process_mode.py +0 -0
  138. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/cli/process_protocol.py +0 -0
  139. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/cli/update.py +0 -0
  140. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/commands/__init__.py +0 -0
  141. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/commands/auth.py +0 -0
  142. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/commands/clear.py +0 -0
  143. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/commands/compact.py +0 -0
  144. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/commands/debug.py +0 -0
  145. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/commands/effort.py +0 -0
  146. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/commands/exit.py +0 -0
  147. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/commands/help.py +0 -0
  148. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/commands/mcp.py +0 -0
  149. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/commands/memory.py +0 -0
  150. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/commands/model.py +0 -0
  151. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/commands/prompt.py +0 -0
  152. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/commands/registry.py +0 -0
  153. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/commands/rename.py +0 -0
  154. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/commands/resume.py +0 -0
  155. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/commands/skills.py +0 -0
  156. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/commands/status.py +0 -0
  157. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/commands/tasks.py +0 -0
  158. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/commands/thinking_enabled.py +0 -0
  159. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/desktop/__init__.py +0 -0
  160. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/desktop/__main__.py +0 -0
  161. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/desktop/control.py +0 -0
  162. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/desktop/controller.py +0 -0
  163. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/desktop/diagnostics.py +0 -0
  164. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/desktop/download_journal.py +0 -0
  165. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/desktop/external_env.py +0 -0
  166. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/desktop/git_bash.py +0 -0
  167. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/desktop/install_lock.py +0 -0
  168. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/desktop/loop_runner.py +0 -0
  169. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/desktop/native_preload_manifest.json +0 -0
  170. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/desktop/ports.py +0 -0
  171. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/desktop/probe_worker.py +0 -0
  172. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/desktop/runtime.py +0 -0
  173. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/desktop/tool_paths.py +0 -0
  174. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/i18n/html_extractor.py +0 -0
  175. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/i18n/locales/de/LC_MESSAGES/webui.mo +0 -0
  176. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/i18n/locales/de/LC_MESSAGES/webui.po +0 -0
  177. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/i18n/locales/es/LC_MESSAGES/webui.mo +0 -0
  178. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/i18n/locales/es/LC_MESSAGES/webui.po +0 -0
  179. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/i18n/locales/fr/LC_MESSAGES/webui.mo +0 -0
  180. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/i18n/locales/fr/LC_MESSAGES/webui.po +0 -0
  181. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/i18n/locales/ja/LC_MESSAGES/webui.mo +0 -0
  182. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/i18n/locales/ja/LC_MESSAGES/webui.po +0 -0
  183. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/i18n/locales/pt/LC_MESSAGES/webui.mo +0 -0
  184. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/i18n/locales/pt/LC_MESSAGES/webui.po +0 -0
  185. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/i18n/locales/zh/LC_MESSAGES/webui.mo +0 -0
  186. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/i18n/locales/zh/LC_MESSAGES/webui.po +0 -0
  187. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/mcp/__init__.py +0 -0
  188. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/mcp/cli.py +0 -0
  189. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/mcp/client.py +0 -0
  190. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/mcp/config.py +0 -0
  191. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/mcp/env_expansion.py +0 -0
  192. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/mcp/errors.py +0 -0
  193. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/mcp/manager.py +0 -0
  194. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/mcp/oauth.py +0 -0
  195. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/mcp/output.py +0 -0
  196. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/mcp/progress.py +0 -0
  197. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/mcp/prompt_dispatch.py +0 -0
  198. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/mcp/prompts.py +0 -0
  199. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/mcp/redaction.py +0 -0
  200. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/mcp/skills.py +0 -0
  201. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/mcp/storage.py +0 -0
  202. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/mcp/tools.py +0 -0
  203. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/mcp/types.py +0 -0
  204. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/memory/__init__.py +0 -0
  205. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/memory/memory_manager.py +0 -0
  206. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/memory/memory_tools.py +0 -0
  207. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/memory/project_memory.py +0 -0
  208. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/memory/recall.py +0 -0
  209. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/__init__.py +0 -0
  210. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/config.py +0 -0
  211. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/constants.py +0 -0
  212. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/display_names.py +0 -0
  213. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/__init__.py +0 -0
  214. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/architecture_graph.py +0 -0
  215. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/architecture_meta.py +0 -0
  216. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/architecture_metas/Categories.json +0 -0
  217. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/architecture_metas/config.json +0 -0
  218. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/architecture_metas/products.json +0 -0
  219. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/architecture_resource_inventory.py +0 -0
  220. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/architecture_rule_candidates.py +0 -0
  221. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/architecture_rule_drafts.py +0 -0
  222. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/architecture_rule_facts.py +0 -0
  223. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/architecture_rules.json +0 -0
  224. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/architecture_rules.py +0 -0
  225. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/architecture_semantic_planning.py +0 -0
  226. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/ask_user_question_tool.py +0 -0
  227. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/cleanup.py +0 -0
  228. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/complete_step_tool.py +0 -0
  229. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/completion_guard_state.py +0 -0
  230. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/context.py +0 -0
  231. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/display_replay.py +0 -0
  232. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/events.py +0 -0
  233. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/handoff.py +0 -0
  234. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/hard_constraints.py +0 -0
  235. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/interrupt.py +0 -0
  236. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/observability.py +0 -0
  237. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/prerequisites.py +0 -0
  238. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/prompts/interrupt_judge.md +0 -0
  239. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/public_errors.py +0 -0
  240. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/recovery.py +0 -0
  241. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/resume_recovery.py +0 -0
  242. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/session.py +0 -0
  243. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/show_diagram_tool.py +0 -0
  244. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/state_machine.py +0 -0
  245. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/sub_pipeline_executor.py +0 -0
  246. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/transcript_storage.py +0 -0
  247. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/types.py +0 -0
  248. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/ui_contract.py +0 -0
  249. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/engine/user_input.py +0 -0
  250. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/hooks/deploying.py +0 -0
  251. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/prompts/architecture_planning.md +0 -0
  252. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/prompts/confirm_and_select.a2a.md +0 -0
  253. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/prompts/confirm_and_select.md +0 -0
  254. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/prompts/cost_estimating.md +0 -0
  255. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/prompts/deploying.md +0 -0
  256. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/prompts/evaluate_candidates.md +0 -0
  257. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/prompts/intent_parsing.md +0 -0
  258. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/prompts/reviewing.md +0 -0
  259. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/prompts/template_generating.md +0 -0
  260. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/references/cloud-products/ecs.md +0 -0
  261. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/references/cloud-products/ga.md +0 -0
  262. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/references/cloud-products/oss.md +0 -0
  263. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/references/cloud-products/rds.md +0 -0
  264. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/references/cloud-products/redis.md +0 -0
  265. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/references/cloud-products/slb.md +0 -0
  266. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/references/cloud-products/vpc.md +0 -0
  267. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/references/ros-template.md +0 -0
  268. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/references/solutions/iac-code-web.md +0 -0
  269. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/references/solutions/iac-code-web.ros.yml +0 -0
  270. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/references/template-parameter-recommendation.md +0 -0
  271. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/references/template-parameters.md +0 -0
  272. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/references/terraform-template.md +0 -0
  273. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-architecture/SKILL.md +0 -0
  274. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-architecture/evals.json +0 -0
  275. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/SKILL.md +0 -0
  276. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/evals.json +0 -0
  277. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/cloud-products/ecs.md +0 -0
  278. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/cloud-products/ga.md +0 -0
  279. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/cloud-products/oss.md +0 -0
  280. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/cloud-products/rds.md +0 -0
  281. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/cloud-products/redis.md +0 -0
  282. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/cloud-products/slb.md +0 -0
  283. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/cloud-products/vpc.md +0 -0
  284. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/ros-template.md +0 -0
  285. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/solutions/iac-code-web.md +0 -0
  286. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/solutions/iac-code-web.ros.yml +0 -0
  287. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/template-parameter-recommendation.md +0 -0
  288. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/template-parameters.md +0 -0
  289. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/references/terraform-template.md +0 -0
  290. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/SKILL.md +0 -0
  291. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/evals.json +0 -0
  292. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/cloud-products/ecs.md +0 -0
  293. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/cloud-products/ga.md +0 -0
  294. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/cloud-products/oss.md +0 -0
  295. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/cloud-products/rds.md +0 -0
  296. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/cloud-products/redis.md +0 -0
  297. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/cloud-products/slb.md +0 -0
  298. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/cloud-products/vpc.md +0 -0
  299. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/ros-template.md +0 -0
  300. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/solutions/iac-code-web.md +0 -0
  301. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/solutions/iac-code-web.ros.yml +0 -0
  302. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/template-parameter-recommendation.md +0 -0
  303. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/template-parameters.md +0 -0
  304. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/terraform-template.md +0 -0
  305. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-intent/SKILL.md +0 -0
  306. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-intent/evals.json +0 -0
  307. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-review/SKILL.md +0 -0
  308. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-review/evals.json +0 -0
  309. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/SKILL.md +0 -0
  310. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/evals.json +0 -0
  311. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/cloud-products/ecs.md +0 -0
  312. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/cloud-products/ga.md +0 -0
  313. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/cloud-products/oss.md +0 -0
  314. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/cloud-products/rds.md +0 -0
  315. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/cloud-products/redis.md +0 -0
  316. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/cloud-products/slb.md +0 -0
  317. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/cloud-products/vpc.md +0 -0
  318. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/ros-template.md +0 -0
  319. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/solutions/iac-code-web.md +0 -0
  320. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/solutions/iac-code-web.ros.yml +0 -0
  321. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/template-parameter-recommendation.md +0 -0
  322. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/template-parameters.md +0 -0
  323. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/terraform-template.md +0 -0
  324. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/tools/__init__.py +0 -0
  325. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/tools/infraguard_scan_tool.py +0 -0
  326. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/tools/ros_template_tools.py +0 -0
  327. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/pipeline/selling/tools/show_candidate_detail_tool.py +0 -0
  328. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/providers/__init__.py +0 -0
  329. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/providers/anthropic_provider.py +0 -0
  330. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/providers/azure_openai_provider.py +0 -0
  331. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/providers/base.py +0 -0
  332. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/providers/dashscope_provider.py +0 -0
  333. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/providers/deepseek_provider.py +0 -0
  334. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/providers/gemini_provider.py +0 -0
  335. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/providers/kimi_provider.py +0 -0
  336. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/providers/lmstudio_provider.py +0 -0
  337. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/providers/minimax_provider.py +0 -0
  338. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/providers/modelscope_provider.py +0 -0
  339. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/providers/ollama_provider.py +0 -0
  340. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/providers/openai_provider.py +0 -0
  341. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/providers/openrouter_provider.py +0 -0
  342. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/providers/request_logging.py +0 -0
  343. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/providers/request_policy.py +0 -0
  344. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/providers/retry.py +0 -0
  345. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/providers/siliconflow_provider.py +0 -0
  346. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/providers/stream_watchdog.py +0 -0
  347. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/providers/volcengine_provider.py +0 -0
  348. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/__init__.py +0 -0
  349. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/agent_factory.py +0 -0
  350. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/capabilities/__init__.py +0 -0
  351. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/capabilities/auto_detect.py +0 -0
  352. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/capabilities/multimodal.py +0 -0
  353. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/cloud_credentials.py +0 -0
  354. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/git_bash.py +0 -0
  355. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/permissions/__init__.py +0 -0
  356. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/permissions/audit.py +0 -0
  357. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/permissions/loader.py +0 -0
  358. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/permissions/pipeline.py +0 -0
  359. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/permissions/rule_scope.py +0 -0
  360. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/permissions/storage.py +0 -0
  361. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/permissions/trusted_roots.py +0 -0
  362. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/providers/__init__.py +0 -0
  363. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/providers/aliyun_credentials_runtime.py +0 -0
  364. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/providers/aliyun_oauth.py +0 -0
  365. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/qwenpaw_source.py +0 -0
  366. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/session_backup_state.py +0 -0
  367. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/session_index.py +0 -0
  368. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/session_layout.py +0 -0
  369. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/session_logging.py +0 -0
  370. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/session_metadata.py +0 -0
  371. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/session_resolver.py +0 -0
  372. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/session_storage.py +0 -0
  373. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/session_usage.py +0 -0
  374. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/telemetry/client.py +0 -0
  375. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/telemetry/config.py +0 -0
  376. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/telemetry/content_serializer.py +0 -0
  377. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/telemetry/events.py +0 -0
  378. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/telemetry/fallback.py +0 -0
  379. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/telemetry/identity.py +0 -0
  380. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/telemetry/metrics.py +0 -0
  381. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/telemetry/names.py +0 -0
  382. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/telemetry/sanitize.py +0 -0
  383. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/telemetry/scope.py +0 -0
  384. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/telemetry/sink.py +0 -0
  385. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/telemetry/tracing.py +0 -0
  386. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/telemetry/types.py +0 -0
  387. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/token_budget.py +0 -0
  388. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/token_counter.py +0 -0
  389. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/services/update_checker.py +0 -0
  390. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/__init__.py +0 -0
  391. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/auto_trigger.py +0 -0
  392. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/bundled/__init__.py +0 -0
  393. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/bundled/iac_aliyun/SKILL.md +0 -0
  394. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/bundled/iac_aliyun/__init__.py +0 -0
  395. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/bundled/iac_aliyun/auto_trigger.py +0 -0
  396. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/ecs.md +0 -0
  397. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/ga.md +0 -0
  398. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/oss.md +0 -0
  399. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/rds.md +0 -0
  400. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/redis.md +0 -0
  401. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/slb.md +0 -0
  402. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/vpc.md +0 -0
  403. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/bundled/iac_aliyun/references/ros-template.md +0 -0
  404. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/bundled/iac_aliyun/references/solutions/iac-code-web.md +0 -0
  405. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/bundled/iac_aliyun/references/solutions/iac-code-web.ros.yml +0 -0
  406. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/bundled/iac_aliyun/references/template-parameter-recommendation.md +0 -0
  407. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/bundled/iac_aliyun/references/template-parameters.md +0 -0
  408. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/bundled/iac_aliyun/references/terraform-template.md +0 -0
  409. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/bundled/iac_aliyun/scripts/tf2ros.py +0 -0
  410. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/bundled/pac_aliyun/SKILL.md +0 -0
  411. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/bundled/pac_aliyun/__init__.py +0 -0
  412. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/bundled/pac_aliyun/auto_trigger.py +0 -0
  413. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/bundled/pac_aliyun/references/infraguard-policy-generation.md +0 -0
  414. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/bundled/simplify.py +0 -0
  415. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/discovery.py +0 -0
  416. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/frontmatter.py +0 -0
  417. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/listing.py +0 -0
  418. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/loader.py +0 -0
  419. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/management.py +0 -0
  420. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/processor.py +0 -0
  421. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/renderer.py +0 -0
  422. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/settings.py +0 -0
  423. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/skill_definition.py +0 -0
  424. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/skills/skill_tool.py +0 -0
  425. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/state/__init__.py +0 -0
  426. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/state/app_state.py +0 -0
  427. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tasks/__init__.py +0 -0
  428. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tasks/notification_queue.py +0 -0
  429. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tasks/task_state.py +0 -0
  430. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tasks/task_tools.py +0 -0
  431. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/__init__.py +0 -0
  432. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/base.py +0 -0
  433. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/bash/__init__.py +0 -0
  434. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/bash/argv_safety.py +0 -0
  435. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/bash/bash_tool.py +0 -0
  436. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/bash/command_parser.py +0 -0
  437. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/bash/mode_validation.py +0 -0
  438. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/bash/path_validation.py +0 -0
  439. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/bash/permissions.py +0 -0
  440. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/bash/readonly_commands.py +0 -0
  441. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/bash/rule_matching.py +0 -0
  442. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/bash/safety_checks.py +0 -0
  443. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/__init__.py +0 -0
  444. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/__init__.py +0 -0
  445. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/acs3_transport.py +0 -0
  446. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/aliyun_api.py +0 -0
  447. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/aliyun_api_doc.py +0 -0
  448. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/aliyun_doc_search.py +0 -0
  449. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/api_contract.py +0 -0
  450. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/api_hooks.py +0 -0
  451. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/api_identifiers.py +0 -0
  452. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/contract_store.py +0 -0
  453. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/data/README.md +0 -0
  454. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/data/endpoints/catalog.json +0 -0
  455. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/data/endpoints/generation_report.json +0 -0
  456. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/data/endpoints/legacy.yml +0 -0
  457. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/data/endpoints/overrides.yml +0 -0
  458. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/data/endpoints/unavailable.json +0 -0
  459. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/data/openmeta/api_overrides.yml +0 -0
  460. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/data/openmeta/exclusions.yml +0 -0
  461. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/data/openmeta/product_aliases.yml +0 -0
  462. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/data/openmeta/product_catalog.json +0 -0
  463. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/data/oss/operation_catalog.json +0 -0
  464. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/data/validation/judgments.yml +0 -0
  465. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/data/validation/overrides.yml +0 -0
  466. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ecs_credential_errors.py +0 -0
  467. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/endpoint_resolver.py +0 -0
  468. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/hooks/__init__.py +0 -0
  469. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/hooks/ros_parameters.py +0 -0
  470. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/hooks/ros_validate.py +0 -0
  471. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/openmeta.py +0 -0
  472. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/oss_v4_adapter.py +0 -0
  473. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/product_resolver.py +0 -0
  474. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/public_errors.py +0 -0
  475. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/result_contract.py +0 -0
  476. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/retry_policy.py +0 -0
  477. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_client.py +0 -0
  478. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_lifecycle.py +0 -0
  479. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_stack.py +0 -0
  480. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_stack_instances.py +0 -0
  481. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_template_tools.py +0 -0
  482. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_validation/__init__.py +0 -0
  483. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_validation/action_policy.py +0 -0
  484. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_validation/analyzer.py +0 -0
  485. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_validation/association_property_specs.py +0 -0
  486. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_validation/count.py +0 -0
  487. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_validation/data/ros_association_property_specs.json +0 -0
  488. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_validation/data/ros_official_resource_index.json +0 -0
  489. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_validation/data/ros_resource_value_specs.json +0 -0
  490. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_validation/data/ros_template_body_action_policies.json +0 -0
  491. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_validation/facts.py +0 -0
  492. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_validation/function_specs.py +0 -0
  493. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_validation/model.py +0 -0
  494. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_validation/outcome.py +0 -0
  495. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_validation/parser.py +0 -0
  496. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_validation/renderer.py +0 -0
  497. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_validation/resource_value_specs.py +0 -0
  498. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_validation/rules/__init__.py +0 -0
  499. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_validation/rules/association_property.py +0 -0
  500. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_validation/rules/base.py +0 -0
  501. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_validation/rules/registry.py +0 -0
  502. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_validation/symbols.py +0 -0
  503. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_validation/template_kind.py +0 -0
  504. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_validation/types.py +0 -0
  505. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_validation/validator.py +0 -0
  506. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/ros_yaml.py +0 -0
  507. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/runtime.py +0 -0
  508. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/template_source.py +0 -0
  509. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/user_agent.py +0 -0
  510. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/aliyun/validation_policy.py +0 -0
  511. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/base_api.py +0 -0
  512. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/registry.py +0 -0
  513. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/cloud/types.py +0 -0
  514. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/edit_file.py +0 -0
  515. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/glob.py +0 -0
  516. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/grep.py +0 -0
  517. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/list_files.py +0 -0
  518. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/path_safety.py +0 -0
  519. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/read_file.py +0 -0
  520. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/result_storage.py +0 -0
  521. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/tool_executor.py +0 -0
  522. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/tools/web_fetch.py +0 -0
  523. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/types/__init__.py +0 -0
  524. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/types/permissions.py +0 -0
  525. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/types/skill_source.py +0 -0
  526. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/__init__.py +0 -0
  527. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/assets/iac-code-terminal-logo.png +0 -0
  528. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/banner.py +0 -0
  529. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/components/__init__.py +0 -0
  530. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/components/candidate_selection.py +0 -0
  531. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/components/dialog.py +0 -0
  532. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/components/divider.py +0 -0
  533. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/components/fuzzy_picker.py +0 -0
  534. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/components/parallel_tabs.py +0 -0
  535. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/components/progress_bar.py +0 -0
  536. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/components/search_box.py +0 -0
  537. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/components/select.py +0 -0
  538. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/components/status_icon.py +0 -0
  539. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/components/tabs.py +0 -0
  540. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/core/__init__.py +0 -0
  541. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/core/in_place_render.py +0 -0
  542. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/core/input_history.py +0 -0
  543. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/core/key_event.py +0 -0
  544. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/core/prompt_input.py +0 -0
  545. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/core/raw_input.py +0 -0
  546. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/core/raw_input_win.py +0 -0
  547. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/core/screen.py +0 -0
  548. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/diagram_rendering.py +0 -0
  549. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/dialogs/__init__.py +0 -0
  550. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/dialogs/global_search.py +0 -0
  551. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/dialogs/history_search.py +0 -0
  552. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/dialogs/mcp_manager.py +0 -0
  553. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/dialogs/memory.py +0 -0
  554. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/dialogs/memory_editor.py +0 -0
  555. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/dialogs/model_picker.py +0 -0
  556. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/dialogs/quick_open.py +0 -0
  557. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/dialogs/resume_picker.py +0 -0
  558. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/dialogs/skills_picker.py +0 -0
  559. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/keybindings/__init__.py +0 -0
  560. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/keybindings/manager.py +0 -0
  561. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/pipeline_display_replay.py +0 -0
  562. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/pipeline_styles.py +0 -0
  563. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/renderer.py +0 -0
  564. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/repl.py +0 -0
  565. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/spinner.py +0 -0
  566. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/stream_accumulator.py +0 -0
  567. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/suggestions/__init__.py +0 -0
  568. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/suggestions/aggregator.py +0 -0
  569. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/suggestions/command_provider.py +0 -0
  570. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/suggestions/directory_provider.py +0 -0
  571. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/suggestions/file_provider.py +0 -0
  572. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/suggestions/shell_history_provider.py +0 -0
  573. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/suggestions/skill_provider.py +0 -0
  574. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/suggestions/token_extractor.py +0 -0
  575. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/suggestions/types.py +0 -0
  576. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/terminal_image.py +0 -0
  577. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/ui/transcript_view.py +0 -0
  578. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/utils/__init__.py +0 -0
  579. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/utils/async_lifecycle.py +0 -0
  580. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/utils/background_housekeeping.py +0 -0
  581. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/utils/cleanup.py +0 -0
  582. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/utils/console.py +0 -0
  583. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/utils/file_security.py +0 -0
  584. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/utils/image/__init__.py +0 -0
  585. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/utils/image/clipboard.py +0 -0
  586. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/utils/image/format_detect.py +0 -0
  587. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/utils/image/pasted_content.py +0 -0
  588. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/utils/image/processor.py +0 -0
  589. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/utils/image/resizer.py +0 -0
  590. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/utils/image/store.py +0 -0
  591. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/utils/json_utils.py +0 -0
  592. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/utils/log.py +0 -0
  593. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/utils/path_components.py +0 -0
  594. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/utils/path_locks.py +0 -0
  595. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/utils/platform.py +0 -0
  596. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/utils/project_paths.py +0 -0
  597. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/utils/public_errors.py +0 -0
  598. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/utils/public_paths.py +0 -0
  599. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/utils/signals.py +0 -0
  600. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/utils/state_io.py +0 -0
  601. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/utils/tool_input_parser.py +0 -0
  602. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/utils/tool_result_redaction.py +0 -0
  603. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/utils/windows_paths.py +0 -0
  604. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/__init__.py +0 -0
  605. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/app.py +0 -0
  606. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/cleanup.py +0 -0
  607. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/commands.py +0 -0
  608. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/diagram_cache.py +0 -0
  609. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/diagram_optimizer.py +0 -0
  610. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/diagrams.py +0 -0
  611. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/events.py +0 -0
  612. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/files.py +0 -0
  613. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/images.py +0 -0
  614. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/mcp_settings.py +0 -0
  615. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/memory.py +0 -0
  616. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/outputs.py +0 -0
  617. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/permissions.py +0 -0
  618. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/pipeline.py +0 -0
  619. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/pipeline_actions.py +0 -0
  620. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/pipeline_prerequisites.py +0 -0
  621. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/pipeline_transcript.py +0 -0
  622. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/runtime.py +0 -0
  623. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/security.py +0 -0
  624. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/server.py +0 -0
  625. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/settings.py +0 -0
  626. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/shell.py +0 -0
  627. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/skills.py +0 -0
  628. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/static/icons/iac-code-logo.svg +0 -0
  629. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/static/icons/sidebar-new-thread.svg +0 -0
  630. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/static/icons/sidebar-project-open.svg +0 -0
  631. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/static/icons/sidebar-search.svg +0 -0
  632. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/static/icons/sidebar-settings.svg +0 -0
  633. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/static/icons/sidebar-skills.svg +0 -0
  634. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/static/js/api.js +0 -0
  635. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/static/js/components/blocking.js +0 -0
  636. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/static/js/components/image_lightbox.js +0 -0
  637. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/static/js/components/output_panel.js +0 -0
  638. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/static/js/components/pipeline.js +0 -0
  639. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/static/js/events.js +0 -0
  640. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/static/js/i18n.js +0 -0
  641. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/static/js/mermaid_render.js +0 -0
  642. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/static/js/token_transport.js +0 -0
  643. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/static/js/vendor/markdown-it.LICENSE +0 -0
  644. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/static/js/vendor/markdown-it.min.js +0 -0
  645. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/static/js/vendor/mermaid.LICENSE +0 -0
  646. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/static/js/vendor/mermaid.min.js +0 -0
  647. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/static/js/vendor/token-crypto.js +0 -0
  648. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/static/styles.css +0 -0
  649. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code/web/token_transport.py +0 -0
  650. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code.egg-info/dependency_links.txt +0 -0
  651. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code.egg-info/entry_points.txt +0 -0
  652. {iac_code-0.12.1 → iac_code-0.13.1}/src/iac_code.egg-info/requires.txt +0 -0
  653. {iac_code-0.12.1 → iac_code-0.13.1}/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.12.1
3
+ Version: 0.13.1
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
@@ -19,7 +19,7 @@ Provides-Extra: http
19
19
  License-File: LICENSE
20
20
 
21
21
  <p align="center">
22
- <img src="website/static/img/logo-with-front.png" alt="iac-code" width="200">
22
+ <img src="https://raw.githubusercontent.com/aliyun/iac-code/main/website/static/img/logo-with-front.png" alt="iac-code" width="200">
23
23
  </p>
24
24
  <p align="center">
25
25
  <em>AI-powered Infrastructure as Code assistant for cloud infrastructure through natural language interaction. Currently supports Alibaba Cloud ROS and Terraform workflows.</em>
@@ -29,21 +29,40 @@ License-File: LICENSE
29
29
  <a href="https://pypi.org/project/iac-code"><img src="https://img.shields.io/pypi/v/iac-code?color=%2334D058&label=pypi%20package" alt="PyPI Package"></a>
30
30
  <a href="https://pypi.org/project/iac-code"><img src="https://img.shields.io/pypi/pyversions/iac-code?color=%2334D058&label=python" alt="Python"></a>
31
31
  </p>
32
+
33
+ > **Documentation**: [https://aliyun.github.io/iac-code/](https://aliyun.github.io/iac-code/)
34
+
32
35
  <p align="center">
33
- <strong>Language</strong>: English | <a href="readme/README.zh.md">中文</a> | <a href="readme/README.es.md">Español</a> | <a href="readme/README.fr.md">Français</a> | <a href="readme/README.de.md">Deutsch</a> | <a href="readme/README.ja.md">日本語</a> | <a href="readme/README.pt.md">Português</a>
36
+ <a href="https://github.com/aliyun/iac-code/releases/latest"><img src="https://img.shields.io/badge/Download-IaC%20Code%20Desktop-5268f2?style=for-the-badge" alt="Download IaC Code Desktop"></a>
37
+ <br>
38
+ <a href="https://ros-public-tools.oss-cn-beijing.aliyuncs.com/github-releases/aliyun/iac-code/desktop/stable/iac-code-macos-arm64.dmg">macOS Apple Silicon</a> ·
39
+ <a href="https://ros-public-tools.oss-cn-beijing.aliyuncs.com/github-releases/aliyun/iac-code/desktop/stable/iac-code-windows-x64.exe">Windows x64</a> ·
40
+ <a href="https://ros-public-tools.oss-cn-beijing.aliyuncs.com/github-releases/aliyun/iac-code/desktop/stable/iac-code-linux-x64.AppImage">Linux AppImage</a> ·
41
+ <a href="https://ros-public-tools.oss-cn-beijing.aliyuncs.com/github-releases/aliyun/iac-code/desktop/stable/iac-code-linux-x64.deb">Linux deb</a> ·
42
+ <a href="https://github.com/aliyun/iac-code/releases/latest">All release files</a>
34
43
  </p>
35
44
 
36
- > **Documentation**: [https://aliyun.github.io/iac-code/](https://aliyun.github.io/iac-code/)
45
+ ## Desktop App
46
+
47
+ No Python, pip, or terminal setup required — download the native app and start building cloud infrastructure right away. Get the package for your platform from the [latest GitHub Release](https://github.com/aliyun/iac-code/releases/latest):
48
+
49
+ - macOS Apple Silicon: `.dmg`
50
+ - Windows x64: setup `.exe`
51
+ - Linux x64: `.AppImage` or `.deb`
52
+
53
+ The Desktop app runs the same IaC Code engine and uses the same providers, cloud credentials, settings, projects, and sessions as the CLI and Web app. On first launch, select the project directory you want IaC Code to work in. Windows also checks for Git Bash and guides you through installation if it is missing.
37
54
 
38
55
  <p align="center">
39
- <img src="website/static/img/demo_en.gif" alt="iac-code demo" width="100%">
56
+ <img src="https://raw.githubusercontent.com/aliyun/iac-code/main/website/static/img/screenshots/iac-code-desktop-en.jpg" alt="IaC Code Desktop app" width="100%">
40
57
  </p>
41
58
 
59
+ macOS, Windows, and AppImage builds can check for and apply cryptographically signed updates in the app. The deb package is updated by installing a newer package. Stable macOS packages are signed with Apple Developer ID and notarized by Apple; stable Windows packages carry an Authenticode publisher signature. Always download from the official release page and verify the accompanying `SHA256SUMS`. See the [Desktop App guide](https://aliyun.github.io/iac-code/docs/desktop-app) for installation and troubleshooting details.
60
+
42
61
  ## Installation
43
62
 
44
- IaC Code requires Python 3.10 or later. It supports macOS, Linux, and Windows.
63
+ The CLI and Web app below run on Python 3.10 or later, on macOS, Linux, and Windows. If you only use the Desktop app, you can skip this section.
45
64
 
46
- > **Windows note**: On Windows, [Git for Windows](https://gitforwindows.org/) must be installed to provide the bash shell used by the tool execution environment. If Git Bash is installed but not on PATH, set the `IAC_CODE_GIT_BASH_PATH` environment variable.
65
+ > **Windows note**: On Windows, [Git for Windows](https://gitforwindows.org/) must be installed to provide the bash shell used by the tool execution environment. If Git Bash is installed but not on PATH, set the `IAC_CODE_GIT_BASH_PATH` environment variable. If it is not installed yet, run `iac-code install-git-bash` to install Git for Windows automatically (downloaded via the npmmirror mirror).
47
66
 
48
67
  ```bash
49
68
  pip install iac-code
@@ -61,6 +80,10 @@ Run directly to enter the interactive REPL:
61
80
  iac-code
62
81
  ```
63
82
 
83
+ <p align="center">
84
+ <img src="https://raw.githubusercontent.com/aliyun/iac-code/main/website/static/img/demo_en.gif" alt="iac-code demo" width="100%">
85
+ </p>
86
+
64
87
  ### Non-Interactive Mode
65
88
 
66
89
  Pass a one-shot prompt via `--prompt`:
@@ -86,17 +109,9 @@ iac-code web
86
109
 
87
110
  By default it opens `http://127.0.0.1:8766` in your browser (loopback only). See the [Web App guide](https://aliyun.github.io/iac-code/web-app) for details.
88
111
 
89
- ### Desktop App
90
-
91
- For an installed native experience, download the package for your platform from [GitHub Releases](https://github.com/aliyun/iac-code/releases):
92
-
93
- - macOS Apple Silicon: `.dmg`
94
- - Windows x64: setup `.exe`
95
- - Linux x64: `.AppImage` or `.deb`
96
-
97
- The Desktop app runs the same IaC Code engine and uses the same providers, cloud credentials, settings, projects, and sessions as the CLI and Web app. On first launch, select the project directory you want IaC Code to work in. Windows also checks for Git Bash and guides you through installation if it is missing.
98
-
99
- macOS, Windows, and AppImage builds can check for and apply cryptographically signed updates in the app. The deb package is updated by installing a newer package. Release installers do not yet carry commercial publisher signatures, so macOS or Windows may display an unknown-developer warning; verify the accompanying `SHA256SUMS` before installation. See the [Desktop App guide](https://aliyun.github.io/iac-code/docs/desktop-app) for installation and troubleshooting details.
112
+ <p align="center">
113
+ <img src="https://raw.githubusercontent.com/aliyun/iac-code/main/website/static/img/screenshots/iac-code-web-en.jpg" alt="IaC Code Web app" width="100%">
114
+ </p>
100
115
 
101
116
  ## Contributing
102
117
 
@@ -116,4 +131,4 @@ See the [Contributing Guide](https://aliyun.github.io/iac-code/getting-started/c
116
131
 
117
132
  | [DingTalk](https://qr.dingtalk.com/action/joingroup?code=v1,k1,ubm/77U7qRh/STFZUNBP26X4PNg2z6+uhiPcLGtDNfU=&_dt_no_comment=1&origin=11) | [Discord](https://discord.gg/qECFuFBwF) |
118
133
  | :----------------------------------------------------------: | :----------------------------------------------------------: |
119
- | [<img src="website/static/img/qrcode-dingtalk.jpg" width="120" height="120" alt="DingTalk">](https://qr.dingtalk.com/action/joingroup?code=v1,k1,ubm/77U7qRh/STFZUNBP26X4PNg2z6+uhiPcLGtDNfU=&_dt_no_comment=1&origin=11) | [<img src="website/static/img/qrcode-discord.jpg" width="120" height="120" alt="Discord">](https://discord.gg/qECFuFBwF) |
134
+ | [<img src="https://raw.githubusercontent.com/aliyun/iac-code/main/website/static/img/qrcode-dingtalk.jpg" width="120" height="120" alt="DingTalk">](https://qr.dingtalk.com/action/joingroup?code=v1,k1,ubm/77U7qRh/STFZUNBP26X4PNg2z6+uhiPcLGtDNfU=&_dt_no_comment=1&origin=11) | [<img src="https://raw.githubusercontent.com/aliyun/iac-code/main/website/static/img/qrcode-discord.jpg" width="120" height="120" alt="Discord">](https://discord.gg/qECFuFBwF) |
@@ -1,23 +1,3 @@
1
- Metadata-Version: 2.1
2
- Name: iac-code
3
- Version: 0.12.1
4
- Summary: Your AI-powered Infrastructure as Code assistant
5
- Classifier: Programming Language :: Python :: 3
6
- Classifier: Programming Language :: Python :: 3.10
7
- Classifier: Programming Language :: Python :: 3.11
8
- Classifier: Programming Language :: Python :: 3.12
9
- Classifier: Programming Language :: Python :: 3.13
10
- Classifier: Programming Language :: Python :: 3.14
11
- Requires-Python: >=3.10
12
- Description-Content-Type: text/markdown
13
- Provides-Extra: a2a
14
- Provides-Extra: a2a-grpc
15
- Provides-Extra: a2a-redis
16
- Provides-Extra: a2a-signing
17
- Provides-Extra: diagram
18
- Provides-Extra: http
19
- License-File: LICENSE
20
-
21
1
  <p align="center">
22
2
  <img src="website/static/img/logo-with-front.png" alt="iac-code" width="200">
23
3
  </p>
@@ -36,14 +16,36 @@ License-File: LICENSE
36
16
  > **Documentation**: [https://aliyun.github.io/iac-code/](https://aliyun.github.io/iac-code/)
37
17
 
38
18
  <p align="center">
39
- <img src="website/static/img/demo_en.gif" alt="iac-code demo" width="100%">
19
+ <a href="https://github.com/aliyun/iac-code/releases/latest"><img src="https://img.shields.io/badge/Download-IaC%20Code%20Desktop-5268f2?style=for-the-badge" alt="Download IaC Code Desktop"></a>
20
+ <br>
21
+ <a href="https://ros-public-tools.oss-cn-beijing.aliyuncs.com/github-releases/aliyun/iac-code/desktop/stable/iac-code-macos-arm64.dmg">macOS Apple Silicon</a> ·
22
+ <a href="https://ros-public-tools.oss-cn-beijing.aliyuncs.com/github-releases/aliyun/iac-code/desktop/stable/iac-code-windows-x64.exe">Windows x64</a> ·
23
+ <a href="https://ros-public-tools.oss-cn-beijing.aliyuncs.com/github-releases/aliyun/iac-code/desktop/stable/iac-code-linux-x64.AppImage">Linux AppImage</a> ·
24
+ <a href="https://ros-public-tools.oss-cn-beijing.aliyuncs.com/github-releases/aliyun/iac-code/desktop/stable/iac-code-linux-x64.deb">Linux deb</a> ·
25
+ <a href="https://github.com/aliyun/iac-code/releases/latest">All release files</a>
26
+ </p>
27
+
28
+ ## Desktop App
29
+
30
+ No Python, pip, or terminal setup required — download the native app and start building cloud infrastructure right away. Get the package for your platform from the [latest GitHub Release](https://github.com/aliyun/iac-code/releases/latest):
31
+
32
+ - macOS Apple Silicon: `.dmg`
33
+ - Windows x64: setup `.exe`
34
+ - Linux x64: `.AppImage` or `.deb`
35
+
36
+ The Desktop app runs the same IaC Code engine and uses the same providers, cloud credentials, settings, projects, and sessions as the CLI and Web app. On first launch, select the project directory you want IaC Code to work in. Windows also checks for Git Bash and guides you through installation if it is missing.
37
+
38
+ <p align="center">
39
+ <img src="website/static/img/screenshots/iac-code-desktop-en.jpg" alt="IaC Code Desktop app" width="100%">
40
40
  </p>
41
41
 
42
+ macOS, Windows, and AppImage builds can check for and apply cryptographically signed updates in the app. The deb package is updated by installing a newer package. Stable macOS packages are signed with Apple Developer ID and notarized by Apple; stable Windows packages carry an Authenticode publisher signature. Always download from the official release page and verify the accompanying `SHA256SUMS`. See the [Desktop App guide](https://aliyun.github.io/iac-code/docs/desktop-app) for installation and troubleshooting details.
43
+
42
44
  ## Installation
43
45
 
44
- IaC Code requires Python 3.10 or later. It supports macOS, Linux, and Windows.
46
+ The CLI and Web app below run on Python 3.10 or later, on macOS, Linux, and Windows. If you only use the Desktop app, you can skip this section.
45
47
 
46
- > **Windows note**: On Windows, [Git for Windows](https://gitforwindows.org/) must be installed to provide the bash shell used by the tool execution environment. If Git Bash is installed but not on PATH, set the `IAC_CODE_GIT_BASH_PATH` environment variable.
48
+ > **Windows note**: On Windows, [Git for Windows](https://gitforwindows.org/) must be installed to provide the bash shell used by the tool execution environment. If Git Bash is installed but not on PATH, set the `IAC_CODE_GIT_BASH_PATH` environment variable. If it is not installed yet, run `iac-code install-git-bash` to install Git for Windows automatically (downloaded via the npmmirror mirror).
47
49
 
48
50
  ```bash
49
51
  pip install iac-code
@@ -61,6 +63,10 @@ Run directly to enter the interactive REPL:
61
63
  iac-code
62
64
  ```
63
65
 
66
+ <p align="center">
67
+ <img src="website/static/img/demo_en.gif" alt="iac-code demo" width="100%">
68
+ </p>
69
+
64
70
  ### Non-Interactive Mode
65
71
 
66
72
  Pass a one-shot prompt via `--prompt`:
@@ -86,17 +92,9 @@ iac-code web
86
92
 
87
93
  By default it opens `http://127.0.0.1:8766` in your browser (loopback only). See the [Web App guide](https://aliyun.github.io/iac-code/web-app) for details.
88
94
 
89
- ### Desktop App
90
-
91
- For an installed native experience, download the package for your platform from [GitHub Releases](https://github.com/aliyun/iac-code/releases):
92
-
93
- - macOS Apple Silicon: `.dmg`
94
- - Windows x64: setup `.exe`
95
- - Linux x64: `.AppImage` or `.deb`
96
-
97
- The Desktop app runs the same IaC Code engine and uses the same providers, cloud credentials, settings, projects, and sessions as the CLI and Web app. On first launch, select the project directory you want IaC Code to work in. Windows also checks for Git Bash and guides you through installation if it is missing.
98
-
99
- macOS, Windows, and AppImage builds can check for and apply cryptographically signed updates in the app. The deb package is updated by installing a newer package. Release installers do not yet carry commercial publisher signatures, so macOS or Windows may display an unknown-developer warning; verify the accompanying `SHA256SUMS` before installation. See the [Desktop App guide](https://aliyun.github.io/iac-code/docs/desktop-app) for installation and troubleshooting details.
95
+ <p align="center">
96
+ <img src="website/static/img/screenshots/iac-code-web-en.jpg" alt="IaC Code Web app" width="100%">
97
+ </p>
100
98
 
101
99
  ## Contributing
102
100
 
@@ -1,8 +1,7 @@
1
1
  [project]
2
2
  name = "iac_code"
3
- dynamic = ["version"]
3
+ dynamic = ["version", "readme"]
4
4
  description = "Your AI-powered Infrastructure as Code assistant"
5
- readme = "README.md"
6
5
  requires-python = ">=3.10"
7
6
  classifiers = [
8
7
  "Programming Language :: Python :: 3",
@@ -1,5 +1,6 @@
1
1
  """Custom build hook to inject __release_date__ at build time."""
2
2
 
3
+ import os
3
4
  import platform
4
5
  import re
5
6
  import shutil
@@ -99,7 +100,19 @@ def _read_version():
99
100
 
100
101
  def _read_long_description():
101
102
  readme = Path("README.md")
102
- return readme.read_text(encoding="utf-8") if readme.is_file() else ""
103
+ if not readme.is_file():
104
+ return ""
105
+ text = readme.read_text(encoding="utf-8")
106
+ # PyPI renders the package description standalone, where the README's
107
+ # relative image paths have no repository base and show up broken.
108
+ # Rewrite them to absolute raw URLs at build time so the checked-in
109
+ # README keeps GitHub-friendly relative paths.
110
+ # The language switcher links point at in-repo translated READMEs, which
111
+ # cannot resolve on PyPI's standalone rendering; drop the line there.
112
+ text = re.sub(r'<p align="center">\s*<strong>Language</strong>.*?</p>\n?', "", text, flags=re.S)
113
+ ref = os.environ.get("IAC_CODE_README_IMG_REF", "main")
114
+ base = "https://raw.githubusercontent.com/aliyun/iac-code/{}/website/static/img/".format(ref)
115
+ return text.replace('src="website/static/img/', 'src="{}'.format(base))
103
116
 
104
117
 
105
118
  def _try_import_babel():
@@ -0,0 +1,2 @@
1
+ __version__ = "0.13.1"
2
+ __release_date__ = "2026-08-21"
@@ -7,7 +7,9 @@ import hashlib
7
7
  import hmac
8
8
  import json
9
9
  import logging
10
+ import math
10
11
  import os
12
+ import signal
11
13
  from contextlib import asynccontextmanager, suppress
12
14
  from email.utils import formatdate
13
15
  from pathlib import Path
@@ -25,6 +27,7 @@ from starlette.requests import Request
25
27
  from starlette.responses import JSONResponse, Response
26
28
  from starlette.routing import BaseRoute, Route
27
29
 
30
+ from iac_code import __version__
28
31
  from iac_code.a2a.agent_card import agent_card_to_client_dict
29
32
  from iac_code.a2a.jsonrpc_passthrough import (
30
33
  install_jsonrpc_error_data_passthrough,
@@ -37,6 +40,8 @@ from iac_code.a2a.projection import (
37
40
  resolve_a2a_public_path_roots_for_data,
38
41
  )
39
42
  from iac_code.i18n import _
43
+ from iac_code.pipeline.config import get_run_mode
44
+ from iac_code.services.configuration_readiness import configuration_readiness
40
45
 
41
46
  logger = logging.getLogger(__name__)
42
47
  _V03_JSONRPC_METHODS = frozenset(
@@ -69,6 +74,58 @@ class _PrincipalUser(User):
69
74
  return self._principal
70
75
 
71
76
 
77
+ class _A2AIdleShutdownController:
78
+ def __init__(self, timeout_seconds: float, callback: Callable[[], None]) -> None:
79
+ self._timeout_seconds = timeout_seconds
80
+ self._callback = callback
81
+ self._inflight_requests = 0
82
+ self._last_activity = 0.0
83
+
84
+ def touch(self) -> None:
85
+ self._last_activity = asyncio.get_running_loop().time()
86
+
87
+ def request_started(self) -> None:
88
+ self._inflight_requests += 1
89
+ self.touch()
90
+
91
+ def request_finished(self) -> None:
92
+ self._inflight_requests = max(0, self._inflight_requests - 1)
93
+ self.touch()
94
+
95
+ async def monitor(self, task_store: Any) -> None:
96
+ interval = min(1.0, max(0.05, self._timeout_seconds / 10))
97
+ while True:
98
+ await asyncio.sleep(interval)
99
+ if self._inflight_requests:
100
+ continue
101
+ now = asyncio.get_running_loop().time()
102
+ if now - self._last_activity < self._timeout_seconds:
103
+ continue
104
+ if await task_store.has_active_work():
105
+ self._last_activity = asyncio.get_running_loop().time()
106
+ continue
107
+ if self._inflight_requests:
108
+ continue
109
+ self._callback()
110
+ return
111
+
112
+
113
+ class _A2AIdleActivityMiddleware:
114
+ def __init__(self, app: Any, *, controller: _A2AIdleShutdownController) -> None:
115
+ self._app = app
116
+ self._controller = controller
117
+
118
+ async def __call__(self, scope: dict[str, Any], receive: Any, send: Any) -> None:
119
+ if scope["type"] != "http":
120
+ await self._app(scope, receive, send)
121
+ return
122
+ self._controller.request_started()
123
+ try:
124
+ await self._app(scope, receive, send)
125
+ finally:
126
+ self._controller.request_finished()
127
+
128
+
72
129
  def resolve_token(cli_token: str | None) -> str | None:
73
130
  return cli_token or os.environ.get("IACCODE_A2A_HTTP_TOKEN")
74
131
 
@@ -161,7 +218,7 @@ class A2AProjectionMiddleware(BaseHTTPMiddleware):
161
218
  request_data = await _a2a_request_data(request)
162
219
  response = await call_next(request)
163
220
  request_data = _with_a2a_path_parameters(request, request_data)
164
- if request.url.path in {"/health", AGENT_CARD_WELL_KNOWN_PATH}:
221
+ if request.url.path in {"/health", "/iac-code/readiness", AGENT_CARD_WELL_KNOWN_PATH}:
165
222
  return response
166
223
 
167
224
  content_type = response.headers.get("content-type", "").lower()
@@ -291,7 +348,7 @@ def _take_sse_frame(data: bytes) -> tuple[bytes, bytes | None, bytes]:
291
348
 
292
349
 
293
350
  async def health(request: Request) -> JSONResponse:
294
- return JSONResponse({"status": "healthy"})
351
+ return JSONResponse({"status": "healthy", "version": __version__, "mode": get_run_mode().value})
295
352
 
296
353
 
297
354
  async def normalize_v03_jsonrpc_version(request: Request) -> None:
@@ -336,6 +393,8 @@ def create_app(
336
393
  agent_extensions: object | None = None,
337
394
  auto_approve_permissions: bool = False,
338
395
  thinking_exposure: object | None = None,
396
+ idle_shutdown_seconds: float = 0,
397
+ idle_shutdown_callback: Callable[[], None] | None = None,
339
398
  ) -> Starlette:
340
399
  from iac_code.a2a.transports.dispatcher import create_runtime_components
341
400
 
@@ -368,15 +427,31 @@ def create_app(
368
427
  )
369
428
  from iac_code.a2a.pipeline_recovery import A2APipelineRecoveryService
370
429
 
430
+ idle_controller: _A2AIdleShutdownController | None = None
431
+ if idle_shutdown_seconds > 0:
432
+ idle_controller = _A2AIdleShutdownController(
433
+ idle_shutdown_seconds,
434
+ idle_shutdown_callback or (lambda: os.kill(os.getpid(), signal.SIGTERM)),
435
+ )
436
+
371
437
  @asynccontextmanager
372
438
  async def lifespan(app: Starlette):
373
- await components.task_store.start_cleanup_loop()
374
439
  push_worker_task: asyncio.Task[None] | None = None
375
- if components.push_worker is not None:
376
- push_worker_task = asyncio.create_task(components.push_worker.serve_forever())
440
+ idle_shutdown_task: asyncio.Task[None] | None = None
441
+ components.start_background_services()
377
442
  try:
443
+ await components.task_store.start_cleanup_loop()
444
+ if components.push_worker is not None:
445
+ push_worker_task = asyncio.create_task(components.push_worker.serve_forever())
446
+ if idle_controller is not None:
447
+ idle_controller.touch()
448
+ idle_shutdown_task = asyncio.create_task(idle_controller.monitor(components.task_store))
378
449
  yield
379
450
  finally:
451
+ if idle_shutdown_task is not None:
452
+ idle_shutdown_task.cancel()
453
+ with suppress(asyncio.CancelledError):
454
+ await idle_shutdown_task
380
455
  if push_worker_task is not None:
381
456
  push_worker_task.cancel()
382
457
  with suppress(asyncio.CancelledError):
@@ -397,6 +472,9 @@ def create_app(
397
472
  return Response(status_code=304, headers=card_cache_headers)
398
473
  return JSONResponse(card_data, headers=card_cache_headers)
399
474
 
475
+ async def get_readiness(request: Request) -> JSONResponse:
476
+ return JSONResponse(configuration_readiness(model=model))
477
+
400
478
  recovery_service = A2APipelineRecoveryService(task_store=components.task_store)
401
479
 
402
480
  async def recovery_path_roots(*, context_id: str | None, task_id: str | None) -> list[dict[str, str]]:
@@ -442,6 +520,7 @@ def create_app(
442
520
  routes: list[BaseRoute] = [
443
521
  Route("/health", health, methods=["GET"]),
444
522
  Route(AGENT_CARD_WELL_KNOWN_PATH, get_agent_card, methods=["GET"]),
523
+ Route("/iac-code/readiness", get_readiness, methods=["GET"]),
445
524
  Route("/iac-code/pipeline/state", get_pipeline_state, methods=["GET"]),
446
525
  ]
447
526
  install_jsonrpc_error_data_passthrough()
@@ -464,6 +543,8 @@ def create_app(
464
543
  api_key=api_key,
465
544
  api_key_header=api_key_header,
466
545
  )
546
+ if idle_controller is not None:
547
+ app.add_middleware(_A2AIdleActivityMiddleware, controller=idle_controller)
467
548
  return app
468
549
 
469
550
 
@@ -527,10 +608,20 @@ def run_server(
527
608
  push_lease_timeout_ms: int = 300_000,
528
609
  auto_approve_permissions: bool = False,
529
610
  thinking_exposure: object | None = None,
611
+ idle_shutdown_seconds: float = 0,
530
612
  ) -> None:
531
613
  from iac_code.a2a.transports.base import normalize_transport_name, validate_transport_for_platform
532
614
 
533
615
  normalized_transport = normalize_transport_name(transport)
616
+ if isinstance(idle_shutdown_seconds, bool) or not isinstance(idle_shutdown_seconds, (int, float)):
617
+ raise ValueError("idle_shutdown_seconds must be a non-negative number.")
618
+ idle_shutdown_seconds = float(idle_shutdown_seconds)
619
+ if not math.isfinite(idle_shutdown_seconds):
620
+ raise ValueError("idle_shutdown_seconds must be a non-negative number.")
621
+ if idle_shutdown_seconds < 0:
622
+ raise ValueError("idle_shutdown_seconds must be a non-negative number.")
623
+ if idle_shutdown_seconds > 0 and normalized_transport != "http":
624
+ raise RuntimeError("idle_shutdown_seconds is only supported with the HTTP transport.")
534
625
  if persistence_dir is None:
535
626
  from iac_code.config import get_config_dir
536
627
 
@@ -655,6 +746,13 @@ def run_server(
655
746
  )
656
747
  return
657
748
 
749
+ idle_server_holder: dict[str, Any] = {}
750
+
751
+ def request_idle_shutdown() -> None:
752
+ server = idle_server_holder.get("server")
753
+ if server is not None:
754
+ server.should_exit = True
755
+
658
756
  if normalized_transport == "websocket":
659
757
  from iac_code.a2a.transports.websocket import WebSocketA2AServerApp
660
758
 
@@ -686,6 +784,8 @@ def run_server(
686
784
  supported_interfaces=supported_interfaces,
687
785
  auto_approve_permissions=auto_approve_permissions,
688
786
  thinking_exposure=thinking_exposure,
787
+ idle_shutdown_seconds=idle_shutdown_seconds,
788
+ idle_shutdown_callback=request_idle_shutdown,
689
789
  )
690
790
 
691
791
  try:
@@ -693,20 +793,28 @@ def run_server(
693
793
  except ImportError as exc:
694
794
  raise RuntimeError("A2A server dependencies are missing. Install with: pip install 'iac-code[a2a]'") from exc
695
795
 
696
- uvicorn.run(
697
- app,
698
- host=host,
699
- port=port,
700
- )
796
+ if idle_shutdown_seconds > 0:
797
+ server = uvicorn.Server(uvicorn.Config(app, host=host, port=port))
798
+ idle_server_holder["server"] = server
799
+ server.run()
800
+ else:
801
+ uvicorn.run(
802
+ app,
803
+ host=host,
804
+ port=port,
805
+ )
701
806
 
702
807
 
703
808
  async def _serve_async_transport(server, *, components) -> None:
704
- await components.task_store.start_cleanup_loop()
705
809
  push_worker_task: asyncio.Task[None] | None = None
706
- if components.push_worker is not None:
707
- push_worker_task = asyncio.create_task(components.push_worker.serve_forever())
708
- await asyncio.sleep(0)
810
+ start_background_services = getattr(components, "start_background_services", None)
811
+ if start_background_services is not None:
812
+ start_background_services()
709
813
  try:
814
+ await components.task_store.start_cleanup_loop()
815
+ if components.push_worker is not None:
816
+ push_worker_task = asyncio.create_task(components.push_worker.serve_forever())
817
+ await asyncio.sleep(0)
710
818
  await server.serve()
711
819
  finally:
712
820
  if push_worker_task is not None:
@@ -1,5 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import asyncio
3
4
  import copy
4
5
  import inspect
5
6
  import logging
@@ -162,7 +163,7 @@ def _extract_artifact_metadata(result: Any, artifact_store: Any | None) -> dict[
162
163
  if not path.is_file():
163
164
  return None
164
165
  metadata = artifact_store.save_bytes(filename=filename, content=path.read_bytes(), media_type=str(media_type))
165
- return metadata.to_dict()
166
+ return {**metadata.to_dict(), "sourcePath": str(path.resolve())}
166
167
  raw_bytes = raw.get("raw")
167
168
  if isinstance(raw_bytes, bytes):
168
169
  metadata = artifact_store.save_bytes(filename=filename, content=raw_bytes, media_type=str(media_type))
@@ -219,6 +220,9 @@ def _artifact_update_event(*, task_id: str, context_id: str, metadata: dict[str,
219
220
  "byteSize": metadata["byteSize"],
220
221
  "sha256": metadata["sha256"],
221
222
  }
223
+ source_path = metadata.get("sourcePath")
224
+ if isinstance(source_path, str) and source_path:
225
+ artifact_metadata["sourcePath"] = source_path
222
226
  artifact = Artifact(
223
227
  artifact_id=str(metadata["artifactId"]),
224
228
  name=str(metadata["filename"]),
@@ -280,6 +284,7 @@ async def publish_stream_event(
280
284
  event: Any,
281
285
  artifact_store: Any | None = None,
282
286
  permission_resolver: A2APermissionResolver | None = None,
287
+ permission_input_registry: Any | None = None,
283
288
  auto_approve_permissions: bool = False,
284
289
  exposure_types: Any = None,
285
290
  iac_code_session_id: str | None = None,
@@ -372,6 +377,8 @@ async def publish_stream_event(
372
377
 
373
378
  if isinstance(event, ToolResultEvent):
374
379
  artifact_metadata = _extract_artifact_metadata(event.result, artifact_store)
380
+ if artifact_metadata is None:
381
+ artifact_metadata = _extract_artifact_metadata(event.metadata, artifact_store)
375
382
  if A2AExposureType.TOOL_TRACE not in enabled_exposure_types:
376
383
  if artifact_metadata is not None:
377
384
  await event_queue.enqueue_event(
@@ -429,6 +436,58 @@ async def publish_stream_event(
429
436
 
430
437
  permission_event = _permission_request_event(event)
431
438
  if permission_event is not None:
439
+ if permission_input_registry is not None and permission_resolver is None and not auto_approve_permissions:
440
+ pending = await permission_input_registry.register(
441
+ permission_event,
442
+ task_id=task_id,
443
+ context_id=context_id,
444
+ )
445
+ try:
446
+ await _enqueue_status(
447
+ event_queue,
448
+ task_id=task_id,
449
+ context_id=context_id,
450
+ state=TaskState.TASK_STATE_INPUT_REQUIRED,
451
+ metadata={
452
+ "iac_code": {
453
+ "input": pending.envelope(),
454
+ "permission": {
455
+ "autoApproved": False,
456
+ "pending": True,
457
+ "toolName": permission_event.tool_name,
458
+ "toolUseId": permission_event.tool_use_id,
459
+ },
460
+ }
461
+ },
462
+ iac_code_session_id=iac_code_session_id,
463
+ )
464
+ future = permission_event.response_future
465
+ if future is None:
466
+ await permission_input_registry.fail(pending)
467
+ return None
468
+ await asyncio.shield(future)
469
+ await _enqueue_status(
470
+ event_queue,
471
+ task_id=task_id,
472
+ context_id=context_id,
473
+ state=TaskState.TASK_STATE_WORKING,
474
+ metadata={
475
+ "iac_code": {
476
+ "inputReceived": {
477
+ "kind": "permission",
478
+ "inputId": pending.input_id,
479
+ "toolUseId": permission_event.tool_use_id,
480
+ }
481
+ }
482
+ },
483
+ iac_code_session_id=iac_code_session_id,
484
+ )
485
+ except BaseException:
486
+ await permission_input_registry.fail(pending)
487
+ raise
488
+ finally:
489
+ await permission_input_registry.complete(pending)
490
+ return None
432
491
  approved = auto_approve_permissions
433
492
  if permission_resolver is not None:
434
493
  decision = permission_resolver(permission_event)