iac-code 0.5.0__tar.gz → 0.6.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (412) hide show
  1. {iac_code-0.5.0 → iac_code-0.6.0}/PKG-INFO +2 -1
  2. {iac_code-0.5.0 → iac_code-0.6.0}/pyproject.toml +1 -0
  3. iac_code-0.6.0/setup.py +285 -0
  4. iac_code-0.6.0/src/iac_code/__init__.py +2 -0
  5. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/agent_card.py +38 -3
  6. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/app.py +63 -0
  7. iac_code-0.6.0/src/iac_code/a2a/artifacts.py +375 -0
  8. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/events.py +16 -19
  9. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/executor.py +118 -13
  10. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/persistence.py +47 -4
  11. iac_code-0.6.0/src/iac_code/a2a/pipeline_events.py +1346 -0
  12. iac_code-0.6.0/src/iac_code/a2a/pipeline_executor.py +1999 -0
  13. iac_code-0.6.0/src/iac_code/a2a/pipeline_journal.py +224 -0
  14. iac_code-0.6.0/src/iac_code/a2a/pipeline_paths.py +29 -0
  15. iac_code-0.6.0/src/iac_code/a2a/pipeline_recovery.py +276 -0
  16. iac_code-0.6.0/src/iac_code/a2a/pipeline_snapshot.py +1215 -0
  17. iac_code-0.6.0/src/iac_code/a2a/pipeline_stream.py +491 -0
  18. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/push.py +118 -34
  19. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/push_worker.py +30 -4
  20. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/task_store.py +269 -21
  21. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/transports/dispatcher.py +215 -2
  22. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/transports/grpc_jsonrpc.py +28 -4
  23. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/transports/redis_streams.py +57 -16
  24. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/transports/stdio.py +26 -5
  25. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/transports/websocket.py +40 -8
  26. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/types.py +3 -0
  27. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/acp/convert.py +16 -5
  28. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/acp/server.py +59 -31
  29. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/acp/session.py +68 -28
  30. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/acp/slash_registry.py +4 -3
  31. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/acp/state.py +9 -2
  32. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/agent/agent_loop.py +144 -9
  33. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/agent/agent_tool.py +3 -0
  34. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/agent/system_prompt.py +61 -0
  35. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/cli/headless.py +17 -2
  36. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/cli/main.py +11 -2
  37. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/cli/output_formats.py +37 -3
  38. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/commands/memory.py +3 -2
  39. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/commands/prompt.py +151 -9
  40. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/i18n/__init__.py +18 -0
  41. iac_code-0.6.0/src/iac_code/i18n/locales/de/LC_MESSAGES/messages.mo +0 -0
  42. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/i18n/locales/de/LC_MESSAGES/messages.po +1054 -6
  43. iac_code-0.6.0/src/iac_code/i18n/locales/es/LC_MESSAGES/messages.mo +0 -0
  44. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/i18n/locales/es/LC_MESSAGES/messages.po +1048 -6
  45. iac_code-0.6.0/src/iac_code/i18n/locales/fr/LC_MESSAGES/messages.mo +0 -0
  46. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/i18n/locales/fr/LC_MESSAGES/messages.po +1051 -6
  47. iac_code-0.6.0/src/iac_code/i18n/locales/ja/LC_MESSAGES/messages.mo +0 -0
  48. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/i18n/locales/ja/LC_MESSAGES/messages.po +990 -6
  49. iac_code-0.6.0/src/iac_code/i18n/locales/pt/LC_MESSAGES/messages.mo +0 -0
  50. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/i18n/locales/pt/LC_MESSAGES/messages.po +1043 -6
  51. iac_code-0.6.0/src/iac_code/i18n/locales/zh/LC_MESSAGES/messages.mo +0 -0
  52. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/i18n/locales/zh/LC_MESSAGES/messages.po +980 -6
  53. iac_code-0.6.0/src/iac_code/pipeline/__init__.py +81 -0
  54. iac_code-0.6.0/src/iac_code/pipeline/config.py +30 -0
  55. iac_code-0.6.0/src/iac_code/pipeline/display_names.py +67 -0
  56. iac_code-0.6.0/src/iac_code/pipeline/engine/__init__.py +43 -0
  57. iac_code-0.6.0/src/iac_code/pipeline/engine/ask_user_question_tool.py +106 -0
  58. iac_code-0.6.0/src/iac_code/pipeline/engine/complete_step_tool.py +398 -0
  59. iac_code-0.6.0/src/iac_code/pipeline/engine/context.py +113 -0
  60. iac_code-0.6.0/src/iac_code/pipeline/engine/display_replay.py +617 -0
  61. iac_code-0.6.0/src/iac_code/pipeline/engine/events.py +43 -0
  62. iac_code-0.6.0/src/iac_code/pipeline/engine/handoff.py +47 -0
  63. iac_code-0.6.0/src/iac_code/pipeline/engine/interrupt.py +290 -0
  64. iac_code-0.6.0/src/iac_code/pipeline/engine/loader.py +435 -0
  65. iac_code-0.6.0/src/iac_code/pipeline/engine/observability.py +716 -0
  66. iac_code-0.6.0/src/iac_code/pipeline/engine/pipeline_runner.py +3296 -0
  67. iac_code-0.6.0/src/iac_code/pipeline/engine/prompts/interrupt_judge.md +100 -0
  68. iac_code-0.6.0/src/iac_code/pipeline/engine/public_errors.py +17 -0
  69. iac_code-0.6.0/src/iac_code/pipeline/engine/recovery.py +84 -0
  70. iac_code-0.6.0/src/iac_code/pipeline/engine/session.py +799 -0
  71. iac_code-0.6.0/src/iac_code/pipeline/engine/show_diagram_tool.py +354 -0
  72. iac_code-0.6.0/src/iac_code/pipeline/engine/state_machine.py +191 -0
  73. iac_code-0.6.0/src/iac_code/pipeline/engine/step_executor.py +678 -0
  74. iac_code-0.6.0/src/iac_code/pipeline/engine/step_spec.py +169 -0
  75. iac_code-0.6.0/src/iac_code/pipeline/engine/sub_pipeline_executor.py +968 -0
  76. iac_code-0.6.0/src/iac_code/pipeline/engine/transcript_storage.py +130 -0
  77. iac_code-0.6.0/src/iac_code/pipeline/engine/types.py +51 -0
  78. iac_code-0.6.0/src/iac_code/pipeline/engine/ui_contract.py +90 -0
  79. iac_code-0.6.0/src/iac_code/pipeline/selling/hooks/deploying.py +106 -0
  80. iac_code-0.6.0/src/iac_code/pipeline/selling/pipeline.yaml +258 -0
  81. iac_code-0.6.0/src/iac_code/pipeline/selling/prompts/architecture_planning.md +27 -0
  82. iac_code-0.6.0/src/iac_code/pipeline/selling/prompts/confirm_and_select.md +61 -0
  83. iac_code-0.6.0/src/iac_code/pipeline/selling/prompts/cost_estimating.md +23 -0
  84. iac_code-0.6.0/src/iac_code/pipeline/selling/prompts/deploying.md +36 -0
  85. iac_code-0.6.0/src/iac_code/pipeline/selling/prompts/evaluate_candidates.md +3 -0
  86. iac_code-0.6.0/src/iac_code/pipeline/selling/prompts/intent_parsing.md +31 -0
  87. iac_code-0.6.0/src/iac_code/pipeline/selling/prompts/reviewing.md +19 -0
  88. iac_code-0.6.0/src/iac_code/pipeline/selling/prompts/template_generating.md +29 -0
  89. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-architecture/SKILL.md +122 -0
  90. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-architecture/evals.json +177 -0
  91. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/SKILL.md +158 -0
  92. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-cost/evals.json +95 -0
  93. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/SKILL.md +112 -0
  94. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/evals.json +174 -0
  95. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/cloud-products/ecs.md +167 -0
  96. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/cloud-products/oss.md +69 -0
  97. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/cloud-products/rds.md +95 -0
  98. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/cloud-products/redis.md +100 -0
  99. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/cloud-products/slb.md +60 -0
  100. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/cloud-products/vpc.md +54 -0
  101. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/ros-template.md +155 -0
  102. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/template-parameter-recommendation.md +165 -0
  103. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/template-parameters.md +206 -0
  104. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-deploying/references/terraform-template.md +101 -0
  105. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-intent/SKILL.md +216 -0
  106. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-intent/evals.json +144 -0
  107. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-review/SKILL.md +76 -0
  108. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/SKILL.md +124 -0
  109. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/evals.json +77 -0
  110. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/cloud-products/ecs.md +167 -0
  111. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/cloud-products/oss.md +69 -0
  112. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/cloud-products/rds.md +95 -0
  113. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/cloud-products/redis.md +100 -0
  114. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/cloud-products/slb.md +60 -0
  115. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/cloud-products/vpc.md +54 -0
  116. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/ros-template.md +155 -0
  117. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/template-parameter-recommendation.md +165 -0
  118. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/template-parameters.md +206 -0
  119. iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-template-generating/references/terraform-template.md +101 -0
  120. iac_code-0.6.0/src/iac_code/pipeline/selling/tools/show_candidate_detail_tool.py +94 -0
  121. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/providers/kimi_provider.py +10 -0
  122. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/providers/manager.py +13 -3
  123. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/providers/minimax_provider.py +10 -0
  124. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/providers/registry.py +43 -14
  125. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/providers/thinking.py +55 -1
  126. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/providers/zhipu_provider.py +8 -0
  127. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/telemetry/client.py +58 -19
  128. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/telemetry/config.py +41 -1
  129. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/telemetry/metrics.py +16 -0
  130. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/telemetry/names.py +46 -0
  131. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/skills/bundled/__init__.py +3 -0
  132. iac_code-0.6.0/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/ecs.md +167 -0
  133. iac_code-0.6.0/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/oss.md +69 -0
  134. iac_code-0.6.0/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/rds.md +95 -0
  135. iac_code-0.6.0/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/redis.md +100 -0
  136. iac_code-0.6.0/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/slb.md +60 -0
  137. iac_code-0.6.0/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/vpc.md +54 -0
  138. iac_code-0.6.0/src/iac_code/skills/bundled/iac_aliyun/references/ros-template.md +155 -0
  139. iac_code-0.6.0/src/iac_code/skills/bundled/iac_aliyun/references/template-parameter-recommendation.md +165 -0
  140. iac_code-0.6.0/src/iac_code/skills/bundled/iac_aliyun/references/template-parameters.md +206 -0
  141. iac_code-0.6.0/src/iac_code/skills/bundled/iac_aliyun/references/terraform-template.md +101 -0
  142. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/base.py +60 -1
  143. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/cloud/aliyun/aliyun_doc_search.py +18 -1
  144. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/cloud/aliyun/ros_stack.py +62 -0
  145. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/cloud/aliyun/ros_stack_instances.py +3 -0
  146. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/cloud/base_stack.py +3 -0
  147. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/tool_executor.py +9 -3
  148. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/types/__init__.py +2 -0
  149. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/types/stream_events.py +69 -2
  150. iac_code-0.6.0/src/iac_code/ui/components/candidate_selection.py +394 -0
  151. iac_code-0.6.0/src/iac_code/ui/components/parallel_tabs.py +249 -0
  152. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/components/select.py +18 -1
  153. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/components/status_icon.py +19 -2
  154. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/core/prompt_input.py +56 -29
  155. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/core/raw_input.py +60 -9
  156. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/core/raw_input_win.py +98 -7
  157. iac_code-0.6.0/src/iac_code/ui/pipeline_display_replay.py +540 -0
  158. iac_code-0.6.0/src/iac_code/ui/pipeline_styles.py +24 -0
  159. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/renderer.py +234 -54
  160. iac_code-0.6.0/src/iac_code/ui/repl.py +4099 -0
  161. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/spinner.py +21 -3
  162. iac_code-0.6.0/src/iac_code/ui/stream_accumulator.py +183 -0
  163. iac_code-0.6.0/src/iac_code/utils/console.py +114 -0
  164. iac_code-0.6.0/src/iac_code/utils/image/__init__.py +0 -0
  165. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/utils/json_utils.py +61 -1
  166. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/utils/project_paths.py +10 -2
  167. iac_code-0.6.0/src/iac_code/utils/public_errors.py +298 -0
  168. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/utils/tool_input_parser.py +2 -2
  169. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code.egg-info/PKG-INFO +2 -1
  170. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code.egg-info/SOURCES.txt +92 -0
  171. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code.egg-info/requires.txt +5 -0
  172. iac_code-0.5.0/setup.py +0 -151
  173. iac_code-0.5.0/src/iac_code/__init__.py +0 -2
  174. iac_code-0.5.0/src/iac_code/a2a/artifacts.py +0 -74
  175. iac_code-0.5.0/src/iac_code/i18n/locales/de/LC_MESSAGES/messages.mo +0 -0
  176. iac_code-0.5.0/src/iac_code/i18n/locales/es/LC_MESSAGES/messages.mo +0 -0
  177. iac_code-0.5.0/src/iac_code/i18n/locales/fr/LC_MESSAGES/messages.mo +0 -0
  178. iac_code-0.5.0/src/iac_code/i18n/locales/ja/LC_MESSAGES/messages.mo +0 -0
  179. iac_code-0.5.0/src/iac_code/i18n/locales/pt/LC_MESSAGES/messages.mo +0 -0
  180. iac_code-0.5.0/src/iac_code/i18n/locales/zh/LC_MESSAGES/messages.mo +0 -0
  181. iac_code-0.5.0/src/iac_code/ui/repl.py +0 -1719
  182. iac_code-0.5.0/src/iac_code/utils/console.py +0 -37
  183. {iac_code-0.5.0 → iac_code-0.6.0}/LICENSE +0 -0
  184. {iac_code-0.5.0 → iac_code-0.6.0}/MANIFEST.in +0 -0
  185. {iac_code-0.5.0 → iac_code-0.6.0}/README.md +0 -0
  186. {iac_code-0.5.0 → iac_code-0.6.0}/setup.cfg +0 -0
  187. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/__init__.py +0 -0
  188. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/client.py +0 -0
  189. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/exposure.py +0 -0
  190. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/metrics.py +0 -0
  191. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/parts.py +0 -0
  192. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/push_queue.py +0 -0
  193. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/push_secrets.py +0 -0
  194. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/router.py +0 -0
  195. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/signing.py +0 -0
  196. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/transport.py +0 -0
  197. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/transports/__init__.py +0 -0
  198. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/transports/base.py +0 -0
  199. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/transports/grpc.py +0 -0
  200. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/transports/http.py +0 -0
  201. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/a2a/transports/unix.py +0 -0
  202. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/acp/__init__.py +0 -0
  203. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/acp/http_sse.py +0 -0
  204. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/acp/mcp.py +0 -0
  205. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/acp/metrics.py +0 -0
  206. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/acp/tools.py +0 -0
  207. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/acp/types.py +0 -0
  208. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/acp/version.py +0 -0
  209. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/agent/__init__.py +0 -0
  210. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/agent/agent_types.py +0 -0
  211. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/agent/message.py +0 -0
  212. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/cli/__init__.py +0 -0
  213. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/cli/install_git_bash.py +0 -0
  214. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/cli/update.py +0 -0
  215. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/commands/__init__.py +0 -0
  216. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/commands/auth.py +0 -0
  217. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/commands/clear.py +0 -0
  218. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/commands/compact.py +0 -0
  219. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/commands/debug.py +0 -0
  220. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/commands/effort.py +0 -0
  221. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/commands/exit.py +0 -0
  222. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/commands/help.py +0 -0
  223. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/commands/model.py +0 -0
  224. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/commands/registry.py +0 -0
  225. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/commands/rename.py +0 -0
  226. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/commands/resume.py +0 -0
  227. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/commands/skills.py +0 -0
  228. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/commands/status.py +0 -0
  229. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/commands/tasks.py +0 -0
  230. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/config.py +0 -0
  231. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/memory/__init__.py +0 -0
  232. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/memory/memory_manager.py +0 -0
  233. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/memory/memory_tools.py +0 -0
  234. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/memory/project_memory.py +0 -0
  235. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/memory/recall.py +0 -0
  236. {iac_code-0.5.0/src/iac_code/skills/bundled/iac_aliyun → iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-cost}/references/cloud-products/ecs.md +0 -0
  237. {iac_code-0.5.0/src/iac_code/skills/bundled/iac_aliyun → iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-cost}/references/cloud-products/oss.md +0 -0
  238. {iac_code-0.5.0/src/iac_code/skills/bundled/iac_aliyun → iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-cost}/references/cloud-products/rds.md +0 -0
  239. {iac_code-0.5.0/src/iac_code/skills/bundled/iac_aliyun → iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-cost}/references/cloud-products/redis.md +0 -0
  240. {iac_code-0.5.0/src/iac_code/skills/bundled/iac_aliyun → iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-cost}/references/cloud-products/slb.md +0 -0
  241. {iac_code-0.5.0/src/iac_code/skills/bundled/iac_aliyun → iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-cost}/references/cloud-products/vpc.md +0 -0
  242. {iac_code-0.5.0/src/iac_code/skills/bundled/iac_aliyun → iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-cost}/references/ros-template.md +0 -0
  243. {iac_code-0.5.0/src/iac_code/skills/bundled/iac_aliyun → iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-cost}/references/template-parameter-recommendation.md +0 -0
  244. {iac_code-0.5.0/src/iac_code/skills/bundled/iac_aliyun → iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-cost}/references/template-parameters.md +0 -0
  245. {iac_code-0.5.0/src/iac_code/skills/bundled/iac_aliyun → iac_code-0.6.0/src/iac_code/pipeline/selling/skills/iac-aliyun-cost}/references/terraform-template.md +0 -0
  246. {iac_code-0.5.0/src/iac_code/tools/cloud → iac_code-0.6.0/src/iac_code/pipeline/selling/tools}/__init__.py +0 -0
  247. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/providers/__init__.py +0 -0
  248. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/providers/anthropic_provider.py +0 -0
  249. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/providers/azure_openai_provider.py +0 -0
  250. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/providers/base.py +0 -0
  251. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/providers/dashscope_provider.py +0 -0
  252. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/providers/deepseek_provider.py +0 -0
  253. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/providers/gemini_provider.py +0 -0
  254. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/providers/lmstudio_provider.py +0 -0
  255. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/providers/modelscope_provider.py +0 -0
  256. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/providers/ollama_provider.py +0 -0
  257. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/providers/openai_provider.py +0 -0
  258. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/providers/openrouter_provider.py +0 -0
  259. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/providers/retry.py +0 -0
  260. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/providers/siliconflow_provider.py +0 -0
  261. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/providers/stream_watchdog.py +0 -0
  262. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/providers/volcengine_provider.py +0 -0
  263. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/__init__.py +0 -0
  264. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/agent_factory.py +0 -0
  265. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/capabilities/__init__.py +0 -0
  266. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/capabilities/auto_detect.py +0 -0
  267. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/capabilities/multimodal.py +0 -0
  268. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/cloud_credentials.py +0 -0
  269. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/context_manager.py +0 -0
  270. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/permissions/__init__.py +0 -0
  271. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/permissions/loader.py +0 -0
  272. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/permissions/pipeline.py +0 -0
  273. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/permissions/storage.py +0 -0
  274. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/permissions/trusted_roots.py +0 -0
  275. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/providers/__init__.py +0 -0
  276. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/providers/aliyun.py +0 -0
  277. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/providers/aliyun_oauth.py +0 -0
  278. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/qwenpaw_source.py +0 -0
  279. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/session_index.py +0 -0
  280. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/session_metadata.py +0 -0
  281. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/session_resolver.py +0 -0
  282. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/session_storage.py +0 -0
  283. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/session_usage.py +0 -0
  284. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/telemetry/__init__.py +0 -0
  285. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/telemetry/attributes.py +0 -0
  286. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/telemetry/constants.py +0 -0
  287. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/telemetry/content_serializer.py +0 -0
  288. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/telemetry/events.py +0 -0
  289. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/telemetry/fallback.py +0 -0
  290. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/telemetry/identity.py +0 -0
  291. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/telemetry/sanitize.py +0 -0
  292. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/telemetry/sink.py +0 -0
  293. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/telemetry/tracing.py +0 -0
  294. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/telemetry/types.py +0 -0
  295. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/token_budget.py +0 -0
  296. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/token_counter.py +0 -0
  297. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/services/update_checker.py +0 -0
  298. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/skills/__init__.py +0 -0
  299. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/skills/auto_trigger.py +0 -0
  300. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/skills/bundled/iac_aliyun/SKILL.md +0 -0
  301. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/skills/bundled/iac_aliyun/__init__.py +0 -0
  302. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/skills/bundled/iac_aliyun/auto_trigger.py +0 -0
  303. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/skills/bundled/iac_aliyun/scripts/tf2ros.py +0 -0
  304. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/skills/bundled/pac_aliyun/SKILL.md +0 -0
  305. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/skills/bundled/pac_aliyun/__init__.py +0 -0
  306. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/skills/bundled/pac_aliyun/auto_trigger.py +0 -0
  307. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/skills/bundled/pac_aliyun/references/infraguard-policy-generation.md +0 -0
  308. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/skills/bundled/simplify.py +0 -0
  309. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/skills/discovery.py +0 -0
  310. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/skills/frontmatter.py +0 -0
  311. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/skills/listing.py +0 -0
  312. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/skills/loader.py +0 -0
  313. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/skills/management.py +0 -0
  314. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/skills/processor.py +0 -0
  315. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/skills/renderer.py +0 -0
  316. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/skills/settings.py +0 -0
  317. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/skills/skill_definition.py +0 -0
  318. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/skills/skill_tool.py +0 -0
  319. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/state/__init__.py +0 -0
  320. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/state/app_state.py +0 -0
  321. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tasks/__init__.py +0 -0
  322. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tasks/notification_queue.py +0 -0
  323. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tasks/task_state.py +0 -0
  324. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tasks/task_tools.py +0 -0
  325. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/__init__.py +0 -0
  326. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/bash/__init__.py +0 -0
  327. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/bash/argv_safety.py +0 -0
  328. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/bash/bash_tool.py +0 -0
  329. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/bash/command_parser.py +0 -0
  330. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/bash/mode_validation.py +0 -0
  331. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/bash/path_validation.py +0 -0
  332. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/bash/permissions.py +0 -0
  333. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/bash/readonly_commands.py +0 -0
  334. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/bash/rule_matching.py +0 -0
  335. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/bash/safety_checks.py +0 -0
  336. {iac_code-0.5.0/src/iac_code/tools/cloud/aliyun → iac_code-0.6.0/src/iac_code/tools/cloud}/__init__.py +0 -0
  337. {iac_code-0.5.0/src/iac_code/tools/cloud/aliyun/hooks → iac_code-0.6.0/src/iac_code/tools/cloud/aliyun}/__init__.py +0 -0
  338. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/cloud/aliyun/aliyun_api.py +0 -0
  339. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/cloud/aliyun/api_hooks.py +0 -0
  340. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/cloud/aliyun/endpoints.yml +0 -0
  341. {iac_code-0.5.0/src/iac_code/ui/components → iac_code-0.6.0/src/iac_code/tools/cloud/aliyun/hooks}/__init__.py +0 -0
  342. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/cloud/aliyun/hooks/ros_parameters.py +0 -0
  343. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/cloud/aliyun/hooks/ros_validate.py +0 -0
  344. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/cloud/aliyun/ros_client.py +0 -0
  345. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/cloud/aliyun/ros_yaml.py +0 -0
  346. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/cloud/aliyun/user_agent.py +0 -0
  347. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/cloud/base_api.py +0 -0
  348. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/cloud/registry.py +0 -0
  349. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/cloud/types.py +0 -0
  350. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/edit_file.py +0 -0
  351. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/glob.py +0 -0
  352. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/grep.py +0 -0
  353. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/list_files.py +0 -0
  354. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/path_safety.py +0 -0
  355. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/read_file.py +0 -0
  356. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/result_storage.py +0 -0
  357. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/web_fetch.py +0 -0
  358. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/tools/write_file.py +0 -0
  359. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/types/permissions.py +0 -0
  360. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/types/skill_source.py +0 -0
  361. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/__init__.py +0 -0
  362. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/banner.py +0 -0
  363. {iac_code-0.5.0/src/iac_code/ui/core → iac_code-0.6.0/src/iac_code/ui/components}/__init__.py +0 -0
  364. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/components/dialog.py +0 -0
  365. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/components/divider.py +0 -0
  366. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/components/fuzzy_picker.py +0 -0
  367. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/components/progress_bar.py +0 -0
  368. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/components/search_box.py +0 -0
  369. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/components/tabs.py +0 -0
  370. {iac_code-0.5.0/src/iac_code/ui/dialogs → iac_code-0.6.0/src/iac_code/ui/core}/__init__.py +0 -0
  371. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/core/in_place_render.py +0 -0
  372. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/core/input_history.py +0 -0
  373. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/core/key_event.py +0 -0
  374. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/core/screen.py +0 -0
  375. {iac_code-0.5.0/src/iac_code/ui/keybindings → iac_code-0.6.0/src/iac_code/ui/dialogs}/__init__.py +0 -0
  376. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/dialogs/global_search.py +0 -0
  377. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/dialogs/history_search.py +0 -0
  378. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/dialogs/memory.py +0 -0
  379. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/dialogs/memory_editor.py +0 -0
  380. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/dialogs/model_picker.py +0 -0
  381. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/dialogs/quick_open.py +0 -0
  382. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/dialogs/resume_picker.py +0 -0
  383. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/dialogs/skills_picker.py +0 -0
  384. {iac_code-0.5.0/src/iac_code/ui/suggestions → iac_code-0.6.0/src/iac_code/ui/keybindings}/__init__.py +0 -0
  385. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/keybindings/manager.py +0 -0
  386. {iac_code-0.5.0/src/iac_code/utils → iac_code-0.6.0/src/iac_code/ui/suggestions}/__init__.py +0 -0
  387. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/suggestions/aggregator.py +0 -0
  388. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/suggestions/command_provider.py +0 -0
  389. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/suggestions/directory_provider.py +0 -0
  390. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/suggestions/file_provider.py +0 -0
  391. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/suggestions/shell_history_provider.py +0 -0
  392. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/suggestions/skill_provider.py +0 -0
  393. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/suggestions/token_extractor.py +0 -0
  394. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/suggestions/types.py +0 -0
  395. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/ui/transcript_view.py +0 -0
  396. {iac_code-0.5.0/src/iac_code/utils/image → iac_code-0.6.0/src/iac_code/utils}/__init__.py +0 -0
  397. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/utils/background_housekeeping.py +0 -0
  398. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/utils/cleanup.py +0 -0
  399. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/utils/file_security.py +0 -0
  400. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/utils/image/clipboard.py +0 -0
  401. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/utils/image/format_detect.py +0 -0
  402. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/utils/image/pasted_content.py +0 -0
  403. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/utils/image/processor.py +0 -0
  404. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/utils/image/resizer.py +0 -0
  405. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/utils/image/store.py +0 -0
  406. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/utils/log.py +0 -0
  407. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/utils/platform.py +0 -0
  408. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/utils/signals.py +0 -0
  409. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code/utils/windows_paths.py +0 -0
  410. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code.egg-info/dependency_links.txt +0 -0
  411. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code.egg-info/entry_points.txt +0 -0
  412. {iac_code-0.5.0 → iac_code-0.6.0}/src/iac_code.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: iac_code
3
- Version: 0.5.0
3
+ Version: 0.6.0
4
4
  Summary: Your AI-powered Infrastructure as Code assistant
5
5
  Classifier: Programming Language :: Python :: 3
6
6
  Classifier: Programming Language :: Python :: 3.10
@@ -14,6 +14,7 @@ Provides-Extra: a2a
14
14
  Provides-Extra: a2a-grpc
15
15
  Provides-Extra: a2a-redis
16
16
  Provides-Extra: a2a-signing
17
+ Provides-Extra: diagram
17
18
  Provides-Extra: http
18
19
  License-File: LICENSE
19
20
 
@@ -58,6 +58,7 @@ a2a-grpc = [
58
58
  a2a-redis = [
59
59
  "redis>=5.0.0",
60
60
  ]
61
+ diagram = ["termaid>=0.1; python_version >= '3.11'"]
61
62
 
62
63
  [dependency-groups]
63
64
  dev = [
@@ -0,0 +1,285 @@
1
+ """Custom build hook to inject __release_date__ at build time."""
2
+
3
+ import platform
4
+ import re
5
+ import shutil
6
+ import subprocess
7
+ import sys
8
+ from datetime import date
9
+ from pathlib import Path
10
+
11
+ from setuptools import find_namespace_packages, setup
12
+ from setuptools.command.build_py import build_py
13
+ from setuptools.command.sdist import sdist
14
+
15
+ INIT_PATH = Path("src/iac_code/__init__.py")
16
+ LOCALES_DIR = Path("src/iac_code/i18n/locales")
17
+ PROJECT_ROOT = Path(__file__).resolve().parent
18
+ IAC_ALIYUN_REFERENCES_DIR = PROJECT_ROOT / "src/iac_code/skills/bundled/iac_aliyun/references"
19
+ SELLING_IAC_ALIYUN_SKILLS = (
20
+ "iac-aliyun-template-generating",
21
+ "iac-aliyun-cost",
22
+ "iac-aliyun-deploying",
23
+ )
24
+ INSTALL_REQUIRES = [
25
+ "anthropic>=0.40",
26
+ "pydantic>=2.0",
27
+ "typer>=0.9.0",
28
+ "rich>=13.0",
29
+ "pyyaml>=6.0",
30
+ "pyperclip>=1.8.0",
31
+ "openai>=1.50",
32
+ "httpx>=0.27.0",
33
+ "packaging>=24.0",
34
+ "tiktoken>=0.7.0",
35
+ "jsonschema>=4.20",
36
+ "alibabacloud-ros20190910>=3.0.0",
37
+ "alibabacloud-credentials>=0.3.0",
38
+ "loguru>=0.7.0",
39
+ "opentelemetry-distro>=0.48b0",
40
+ "opentelemetry-exporter-otlp>=1.27.0",
41
+ "agent-client-protocol>=0.9.0",
42
+ "pillow==12.2.0",
43
+ "cryptography>=42.0",
44
+ "keyring>=25.0",
45
+ "tree-sitter>=0.25,<0.26",
46
+ "tree-sitter-bash>=0.25,<0.26",
47
+ ]
48
+ EXTRAS_REQUIRE = {
49
+ "http": [
50
+ "starlette>=0.39.0",
51
+ "uvicorn[standard]>=0.30.0",
52
+ ],
53
+ "a2a": [
54
+ "a2a-sdk[http-server,signing]>=1.0.2,<2",
55
+ "cryptography>=42.0",
56
+ "starlette>=0.39.0",
57
+ "uvicorn[standard]>=0.30.0",
58
+ ],
59
+ "a2a-signing": [
60
+ "a2a-sdk[signing]>=1.0.2,<2",
61
+ ],
62
+ "a2a-grpc": [
63
+ "grpcio>=1.60.0",
64
+ "grpcio-status>=1.60.0",
65
+ ],
66
+ "a2a-redis": [
67
+ "redis>=5.0.0",
68
+ ],
69
+ "diagram": [
70
+ "termaid>=0.1; python_version >= '3.11'",
71
+ ],
72
+ }
73
+ PACKAGE_DATA = {
74
+ "iac_code": [
75
+ "**/*.yml",
76
+ "**/*.yaml",
77
+ "**/*.json",
78
+ "**/*.md",
79
+ "**/*.rego",
80
+ "**/*.mo",
81
+ "**/*.po",
82
+ ],
83
+ }
84
+
85
+
86
+ def _read_version():
87
+ content = INIT_PATH.read_text(encoding="utf-8")
88
+ match = re.search(r'^__version__\s*=\s*"([^"]+)"', content, flags=re.MULTILINE)
89
+ if not match:
90
+ raise RuntimeError("unable to read package version from %s" % INIT_PATH)
91
+ return match.group(1)
92
+
93
+
94
+ def _read_long_description():
95
+ readme = Path("README.md")
96
+ return readme.read_text(encoding="utf-8") if readme.is_file() else ""
97
+
98
+
99
+ def _try_import_babel():
100
+ """Try importing babel, return (read_po, write_mo) or None."""
101
+ try:
102
+ from babel.messages.mofile import write_mo
103
+ from babel.messages.pofile import read_po
104
+
105
+ return read_po, write_mo
106
+ except ImportError:
107
+ return None
108
+
109
+
110
+ def _run(cmd):
111
+ subprocess.check_call(cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
112
+
113
+
114
+ def _ensure_babel():
115
+ """Import babel, trying every available install method. Raise on total failure."""
116
+ result = _try_import_babel()
117
+ if result:
118
+ return result
119
+
120
+ attempts = []
121
+
122
+ # 1) pip install babel
123
+ try:
124
+ _run([sys.executable, "-m", "pip", "install", "babel"])
125
+ result = _try_import_babel()
126
+ if result:
127
+ return result
128
+ except Exception as exc:
129
+ attempts.append("pip install babel -> %s" % exc)
130
+
131
+ # 2) ensurepip + pip install babel
132
+ try:
133
+ _run([sys.executable, "-m", "ensurepip", "--default-pip"])
134
+ _run([sys.executable, "-m", "pip", "install", "babel"])
135
+ result = _try_import_babel()
136
+ if result:
137
+ return result
138
+ except Exception as exc:
139
+ attempts.append("ensurepip + pip -> %s" % exc)
140
+
141
+ # 3) apt-get install python3-babel on Linux builders
142
+ if sys.platform == "linux":
143
+ try:
144
+ _run(["apt-get", "update", "-qq"])
145
+ _run(["apt-get", "install", "-y", "-qq", "python3-babel"])
146
+ result = _try_import_babel()
147
+ if result:
148
+ return result
149
+ except Exception as exc:
150
+ attempts.append("apt-get install python3-babel -> %s" % exc)
151
+
152
+ # 4) download get-pip.py, bootstrap pip, then pip install babel
153
+ try:
154
+ import os
155
+ import tempfile
156
+
157
+ try:
158
+ from urllib.request import urlretrieve
159
+ except ImportError:
160
+ from urllib import urlretrieve
161
+
162
+ fd, get_pip = tempfile.mkstemp(suffix=".py")
163
+ os.close(fd)
164
+ urlretrieve("https://bootstrap.pypa.io/get-pip.py", get_pip)
165
+ _run([sys.executable, get_pip, "--break-system-packages", "--quiet"])
166
+ os.remove(get_pip)
167
+ _run([sys.executable, "-m", "pip", "install", "babel"])
168
+ result = _try_import_babel()
169
+ if result:
170
+ return result
171
+ except Exception as exc:
172
+ attempts.append("get-pip.py + pip -> %s" % exc)
173
+
174
+ raise RuntimeError(
175
+ "babel is required to compile translations. All install methods failed:\n " + "\n ".join(attempts)
176
+ )
177
+
178
+
179
+ def _compile_translations():
180
+ """Compile .po -> .mo for all locales."""
181
+ if not LOCALES_DIR.exists():
182
+ raise RuntimeError("locales directory not found: %s" % LOCALES_DIR)
183
+ po_files = sorted(LOCALES_DIR.rglob("*.po"))
184
+ if not po_files:
185
+ raise RuntimeError("no .po files found under %s" % LOCALES_DIR)
186
+ read_po, write_mo = _ensure_babel()
187
+ for po_file in po_files:
188
+ mo_file = po_file.with_suffix(".mo")
189
+ with open(po_file, "rb") as f:
190
+ catalog = read_po(f)
191
+ with open(mo_file, "wb") as f:
192
+ write_mo(f, catalog)
193
+ print("compiled %s -> %s" % (po_file, mo_file))
194
+
195
+
196
+ def _replace_release_date():
197
+ if platform.system() == 'Darwin':
198
+ return
199
+ content = INIT_PATH.read_text(encoding="utf-8")
200
+ today = date.today().isoformat()
201
+ content = re.sub(
202
+ r'^__release_date__\s*=\s*".*"',
203
+ f'__release_date__ = "{today}"',
204
+ content,
205
+ flags=re.MULTILINE,
206
+ )
207
+ INIT_PATH.write_text(content, encoding="utf-8")
208
+
209
+
210
+ def _copy_selling_skill_references_to_package_root(package_root) -> None:
211
+ """Expand selling-skill reference symlinks into real dirs under an iac_code package root."""
212
+ if not IAC_ALIYUN_REFERENCES_DIR.is_dir():
213
+ raise RuntimeError("references directory not found: %s" % IAC_ALIYUN_REFERENCES_DIR)
214
+
215
+ package_root = Path(package_root)
216
+ for skill_name in SELLING_IAC_ALIYUN_SKILLS:
217
+ target = package_root / "pipeline" / "selling" / "skills" / skill_name / "references"
218
+ if target.is_symlink() or target.is_file():
219
+ target.unlink()
220
+ elif target.exists():
221
+ shutil.rmtree(target)
222
+ target.parent.mkdir(parents=True, exist_ok=True)
223
+ shutil.copytree(IAC_ALIYUN_REFERENCES_DIR, target)
224
+
225
+
226
+ def _copy_selling_skill_references(build_lib: str) -> None:
227
+ """Expand selling-skill reference symlinks into real dirs for installed artifacts."""
228
+ _copy_selling_skill_references_to_package_root(Path(build_lib) / "iac_code")
229
+
230
+
231
+ def _copy_selling_skill_references_to_sdist_release_tree(base_dir: str) -> None:
232
+ """Expand selling-skill references inside an sdist release tree."""
233
+ _copy_selling_skill_references_to_package_root(Path(base_dir) / "src" / "iac_code")
234
+
235
+
236
+ class InjectReleaseDateBuildPy(build_py):
237
+ """Override build_py to stamp __release_date__ before copying source files."""
238
+
239
+ def run(self):
240
+ _replace_release_date()
241
+ _compile_translations()
242
+ super().run()
243
+ _copy_selling_skill_references(self.build_lib)
244
+
245
+
246
+ class CompileTranslationsSdist(sdist):
247
+ """Override sdist to compile translations before packaging source."""
248
+
249
+ def run(self):
250
+ _replace_release_date()
251
+ _compile_translations()
252
+ super().run()
253
+
254
+ def make_release_tree(self, base_dir, files):
255
+ super().make_release_tree(base_dir, files)
256
+ _copy_selling_skill_references_to_sdist_release_tree(base_dir)
257
+
258
+
259
+ setup(
260
+ name="iac_code",
261
+ version=_read_version(),
262
+ description="Your AI-powered Infrastructure as Code assistant",
263
+ long_description=_read_long_description(),
264
+ long_description_content_type="text/markdown",
265
+ python_requires=">=3.10",
266
+ classifiers=[
267
+ "Programming Language :: Python :: 3",
268
+ "Programming Language :: Python :: 3.10",
269
+ "Programming Language :: Python :: 3.11",
270
+ "Programming Language :: Python :: 3.12",
271
+ "Programming Language :: Python :: 3.13",
272
+ "Programming Language :: Python :: 3.14",
273
+ ],
274
+ packages=find_namespace_packages(where="src"),
275
+ package_dir={"": "src"},
276
+ include_package_data=True,
277
+ package_data=PACKAGE_DATA,
278
+ install_requires=INSTALL_REQUIRES,
279
+ extras_require=EXTRAS_REQUIRE,
280
+ entry_points={"console_scripts": ["iac-code=iac_code.cli.main:app"]},
281
+ cmdclass={
282
+ "build_py": InjectReleaseDateBuildPy,
283
+ "sdist": CompileTranslationsSdist,
284
+ }
285
+ )
@@ -0,0 +1,2 @@
1
+ __version__ = "0.6.0"
2
+ __release_date__ = "2026-06-15"
@@ -20,10 +20,17 @@ from google.protobuf.json_format import ParseDict
20
20
  from iac_code import __version__
21
21
  from iac_code.a2a.exposure import format_a2a_exposure_types
22
22
  from iac_code.a2a.parts import supported_input_mime_types
23
+ from iac_code.a2a.pipeline_events import PIPELINE_EVENTS_EXTENSION_URI
23
24
  from iac_code.a2a.signing import sign_agent_card_dict
25
+ from iac_code.i18n import _
26
+ from iac_code.pipeline.config import RunMode, get_run_mode
24
27
 
25
28
  IAC_CODE_ARTIFACT_METADATA_EXTENSION_URI = "urn:iac-code:a2a:artifact-metadata:v1"
29
+ IAC_CODE_PIPELINE_EVENTS_EXTENSION_URI = PIPELINE_EVENTS_EXTENSION_URI
26
30
  IAC_CODE_THINKING_EXPOSURE_EXTENSION_URI = "urn:iac-code:a2a:thinking-exposure:v1"
31
+ CANONICAL_CALLER_EXTENSION_URIS = {
32
+ IAC_CODE_PIPELINE_EVENTS_EXTENSION_URI,
33
+ }
27
34
 
28
35
 
29
36
  def _base_url(host: str, port: int) -> str:
@@ -168,8 +175,31 @@ def build_agent_card(
168
175
  )
169
176
  ParseDict({"enabledTypes": enabled_types}, extension.params)
170
177
  card.capabilities.extensions.append(extension)
171
- for item in _iter_agent_extensions(agent_extensions):
178
+ for item in _iter_agent_extensions(agent_extensions, excluded_uris=CANONICAL_CALLER_EXTENSION_URIS):
172
179
  card.capabilities.extensions.append(_agent_extension_from_dict(item))
180
+ pipeline_events_extension = AgentExtension(
181
+ uri=IAC_CODE_PIPELINE_EVENTS_EXTENSION_URI,
182
+ description=_(
183
+ "Optional iac-code pipeline event extension for state snapshots, replay, interrupts, "
184
+ "and parallel candidate streams."
185
+ ),
186
+ required=False,
187
+ )
188
+ run_mode = get_run_mode()
189
+ ParseDict(
190
+ {
191
+ "schemaVersion": "1.0",
192
+ "enabled": run_mode == RunMode.PIPELINE,
193
+ "mode": run_mode.value,
194
+ "supportsSnapshot": True,
195
+ "supportsReplay": True,
196
+ "supportsInterrupts": True,
197
+ "supportsParallelCandidates": True,
198
+ "stateEndpoint": "/iac-code/pipeline/state",
199
+ },
200
+ pipeline_events_extension.params,
201
+ )
202
+ card.capabilities.extensions.append(pipeline_events_extension)
173
203
 
174
204
  if token_enabled:
175
205
  card.security_schemes["bearerAuth"].http_auth_security_scheme.CopyFrom(HTTPAuthSecurityScheme(scheme="bearer"))
@@ -231,7 +261,12 @@ def _agent_extension_from_dict(item: dict[str, Any]) -> AgentExtension:
231
261
  return extension
232
262
 
233
263
 
234
- def _iter_agent_extensions(value: Any) -> list[dict[str, Any]]:
264
+ def _iter_agent_extensions(value: Any, *, excluded_uris: set[str] | None = None) -> list[dict[str, Any]]:
235
265
  if not isinstance(value, list):
236
266
  return []
237
- return [item for item in value if isinstance(item, dict) and isinstance(item.get("uri"), str)]
267
+ blocked_uris = excluded_uris or set()
268
+ return [
269
+ item
270
+ for item in value
271
+ if isinstance(item, dict) and isinstance(item.get("uri"), str) and item["uri"] not in blocked_uris
272
+ ]
@@ -13,6 +13,8 @@ from pathlib import Path
13
13
  from time import time
14
14
  from typing import Awaitable, Callable
15
15
 
16
+ from a2a.auth.user import User
17
+ from a2a.server.context import ServerCallContext
16
18
  from a2a.server.routes import create_jsonrpc_routes, create_rest_routes
17
19
  from a2a.utils.constants import AGENT_CARD_WELL_KNOWN_PATH
18
20
  from starlette.applications import Starlette
@@ -23,6 +25,7 @@ from starlette.responses import JSONResponse, Response
23
25
  from starlette.routing import BaseRoute, Route
24
26
 
25
27
  from iac_code.a2a.agent_card import agent_card_to_client_dict
28
+ from iac_code.i18n import _
26
29
 
27
30
  _V03_JSONRPC_METHODS = frozenset(
28
31
  {
@@ -38,6 +41,20 @@ _V03_JSONRPC_METHODS = frozenset(
38
41
  "agent/getAuthenticatedExtendedCard",
39
42
  }
40
43
  )
44
+ _MAX_AFTER_SEQUENCE_DIGITS = 20
45
+
46
+
47
+ class _PrincipalUser(User):
48
+ def __init__(self, principal: str) -> None:
49
+ self._principal = principal
50
+
51
+ @property
52
+ def is_authenticated(self) -> bool:
53
+ return True
54
+
55
+ @property
56
+ def user_name(self) -> str:
57
+ return self._principal
41
58
 
42
59
 
43
60
  def resolve_token(cli_token: str | None) -> str | None:
@@ -197,6 +214,7 @@ def create_app(
197
214
  auto_approve_permissions=auto_approve_permissions,
198
215
  thinking_exposure=thinking_exposure,
199
216
  )
217
+ from iac_code.a2a.pipeline_recovery import A2APipelineRecoveryService
200
218
 
201
219
  @asynccontextmanager
202
220
  async def lifespan(app: Starlette):
@@ -227,9 +245,33 @@ def create_app(
227
245
  return Response(status_code=304, headers=card_cache_headers)
228
246
  return JSONResponse(card_data, headers=card_cache_headers)
229
247
 
248
+ recovery_service = A2APipelineRecoveryService(task_store=components.task_store)
249
+
250
+ async def get_pipeline_state(request: Request) -> JSONResponse:
251
+ context_id = request.query_params.get("contextId") or None
252
+ task_id = request.query_params.get("taskId") or None
253
+ if not context_id and not task_id:
254
+ return JSONResponse({"error": _("contextId or taskId is required")}, status_code=400)
255
+
256
+ after_sequence, parse_error = _parse_after_sequence(request.query_params.get("afterSequence"))
257
+ if parse_error is not None:
258
+ return JSONResponse({"error": parse_error}, status_code=400)
259
+
260
+ try:
261
+ state = await recovery_service.get_state(
262
+ context_id=context_id,
263
+ task_id=task_id,
264
+ after_sequence=after_sequence,
265
+ call_context=_call_context_from_request(request),
266
+ )
267
+ except ValueError as exc:
268
+ return JSONResponse({"error": str(exc)}, status_code=404)
269
+ return JSONResponse(state)
270
+
230
271
  routes: list[BaseRoute] = [
231
272
  Route("/health", health, methods=["GET"]),
232
273
  Route(AGENT_CARD_WELL_KNOWN_PATH, get_agent_card, methods=["GET"]),
274
+ Route("/iac-code/pipeline/state", get_pipeline_state, methods=["GET"]),
233
275
  ]
234
276
  jsonrpc_endpoint = create_jsonrpc_routes(components.handler, rpc_url="/", enable_v0_3_compat=True)[0].endpoint
235
277
 
@@ -251,11 +293,32 @@ def create_app(
251
293
  return app
252
294
 
253
295
 
296
+ def _call_context_from_request(request: Request) -> ServerCallContext | None:
297
+ user = request.scope.get("user")
298
+ principal = getattr(user, "username", None) or getattr(user, "display_name", None)
299
+ if not isinstance(principal, str) or not principal:
300
+ return None
301
+ return ServerCallContext(user=_PrincipalUser(principal))
302
+
303
+
254
304
  def _agent_card_etag(card: dict[str, object]) -> str:
255
305
  body = json.dumps(card, sort_keys=True, separators=(",", ":"), ensure_ascii=False).encode("utf-8")
256
306
  return f'"sha256-{hashlib.sha256(body).hexdigest()}"'
257
307
 
258
308
 
309
+ def _parse_after_sequence(value: str | None) -> tuple[int | None, str | None]:
310
+ if value is None or value == "":
311
+ return None, None
312
+ if len(value) > _MAX_AFTER_SEQUENCE_DIGITS:
313
+ return None, _("afterSequence must be a non-negative integer")
314
+ if value.isascii() and value.isdecimal():
315
+ try:
316
+ return int(value), None
317
+ except ValueError:
318
+ pass
319
+ return None, _("afterSequence must be a non-negative integer")
320
+
321
+
259
322
  def run_server(
260
323
  *,
261
324
  host: str,