iac-code 0.1.0__py3-none-any.whl

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 (184) hide show
  1. iac_code/__init__.py +2 -0
  2. iac_code/acp/__init__.py +97 -0
  3. iac_code/acp/convert.py +423 -0
  4. iac_code/acp/http_sse.py +448 -0
  5. iac_code/acp/mcp.py +54 -0
  6. iac_code/acp/metrics.py +71 -0
  7. iac_code/acp/server.py +662 -0
  8. iac_code/acp/session.py +446 -0
  9. iac_code/acp/slash_registry.py +125 -0
  10. iac_code/acp/state.py +99 -0
  11. iac_code/acp/tools.py +112 -0
  12. iac_code/acp/types.py +13 -0
  13. iac_code/acp/version.py +26 -0
  14. iac_code/agent/__init__.py +19 -0
  15. iac_code/agent/agent_loop.py +640 -0
  16. iac_code/agent/agent_tool.py +269 -0
  17. iac_code/agent/agent_types.py +87 -0
  18. iac_code/agent/message.py +153 -0
  19. iac_code/agent/system_prompt.py +313 -0
  20. iac_code/cli/__init__.py +3 -0
  21. iac_code/cli/headless.py +114 -0
  22. iac_code/cli/main.py +246 -0
  23. iac_code/cli/output_formats.py +125 -0
  24. iac_code/commands/__init__.py +93 -0
  25. iac_code/commands/auth.py +1055 -0
  26. iac_code/commands/clear.py +34 -0
  27. iac_code/commands/compact.py +43 -0
  28. iac_code/commands/debug.py +45 -0
  29. iac_code/commands/effort.py +116 -0
  30. iac_code/commands/exit.py +10 -0
  31. iac_code/commands/help.py +49 -0
  32. iac_code/commands/model.py +130 -0
  33. iac_code/commands/registry.py +245 -0
  34. iac_code/commands/resume.py +49 -0
  35. iac_code/commands/tasks.py +41 -0
  36. iac_code/config.py +304 -0
  37. iac_code/i18n/__init__.py +141 -0
  38. iac_code/i18n/locales/zh/LC_MESSAGES/messages.po +1355 -0
  39. iac_code/memory/__init__.py +1 -0
  40. iac_code/memory/memory_manager.py +92 -0
  41. iac_code/memory/memory_tools.py +88 -0
  42. iac_code/providers/__init__.py +1 -0
  43. iac_code/providers/anthropic_provider.py +284 -0
  44. iac_code/providers/base.py +128 -0
  45. iac_code/providers/dashscope_provider.py +47 -0
  46. iac_code/providers/deepseek_provider.py +36 -0
  47. iac_code/providers/manager.py +399 -0
  48. iac_code/providers/openai_provider.py +344 -0
  49. iac_code/providers/retry.py +58 -0
  50. iac_code/providers/stream_watchdog.py +47 -0
  51. iac_code/providers/thinking.py +164 -0
  52. iac_code/services/__init__.py +1 -0
  53. iac_code/services/agent_factory.py +127 -0
  54. iac_code/services/cloud_credentials.py +22 -0
  55. iac_code/services/context_manager.py +221 -0
  56. iac_code/services/providers/__init__.py +1 -0
  57. iac_code/services/providers/aliyun.py +232 -0
  58. iac_code/services/session_index.py +281 -0
  59. iac_code/services/session_storage.py +245 -0
  60. iac_code/services/telemetry/__init__.py +66 -0
  61. iac_code/services/telemetry/attributes.py +84 -0
  62. iac_code/services/telemetry/client.py +330 -0
  63. iac_code/services/telemetry/config.py +76 -0
  64. iac_code/services/telemetry/constants.py +75 -0
  65. iac_code/services/telemetry/content_serializer.py +124 -0
  66. iac_code/services/telemetry/events.py +42 -0
  67. iac_code/services/telemetry/fallback.py +59 -0
  68. iac_code/services/telemetry/identity.py +73 -0
  69. iac_code/services/telemetry/metrics.py +62 -0
  70. iac_code/services/telemetry/names.py +199 -0
  71. iac_code/services/telemetry/sanitize.py +88 -0
  72. iac_code/services/telemetry/sink.py +67 -0
  73. iac_code/services/telemetry/tracing.py +38 -0
  74. iac_code/services/telemetry/types.py +13 -0
  75. iac_code/services/token_budget.py +54 -0
  76. iac_code/services/token_counter.py +76 -0
  77. iac_code/skills/__init__.py +1 -0
  78. iac_code/skills/bundled/__init__.py +94 -0
  79. iac_code/skills/bundled/iac_aliyun/SKILL.md +192 -0
  80. iac_code/skills/bundled/iac_aliyun/__init__.py +16 -0
  81. iac_code/skills/bundled/iac_aliyun/references/cloud-products/ecs.md +167 -0
  82. iac_code/skills/bundled/iac_aliyun/references/cloud-products/oss.md +69 -0
  83. iac_code/skills/bundled/iac_aliyun/references/cloud-products/rds.md +95 -0
  84. iac_code/skills/bundled/iac_aliyun/references/cloud-products/redis.md +100 -0
  85. iac_code/skills/bundled/iac_aliyun/references/cloud-products/slb.md +60 -0
  86. iac_code/skills/bundled/iac_aliyun/references/cloud-products/vpc.md +54 -0
  87. iac_code/skills/bundled/iac_aliyun/references/ros-template.md +155 -0
  88. iac_code/skills/bundled/iac_aliyun/references/template-parameters.md +206 -0
  89. iac_code/skills/bundled/iac_aliyun/references/terraform-template.md +101 -0
  90. iac_code/skills/bundled/iac_aliyun/scripts/tf2ros.py +77 -0
  91. iac_code/skills/bundled/simplify.py +28 -0
  92. iac_code/skills/discovery.py +136 -0
  93. iac_code/skills/frontmatter.py +119 -0
  94. iac_code/skills/listing.py +92 -0
  95. iac_code/skills/loader.py +42 -0
  96. iac_code/skills/processor.py +81 -0
  97. iac_code/skills/renderer.py +157 -0
  98. iac_code/skills/skill_definition.py +82 -0
  99. iac_code/skills/skill_tool.py +261 -0
  100. iac_code/state/__init__.py +5 -0
  101. iac_code/state/app_state.py +122 -0
  102. iac_code/tasks/__init__.py +1 -0
  103. iac_code/tasks/notification_queue.py +28 -0
  104. iac_code/tasks/task_state.py +66 -0
  105. iac_code/tasks/task_tools.py +114 -0
  106. iac_code/tools/__init__.py +8 -0
  107. iac_code/tools/base.py +226 -0
  108. iac_code/tools/bash.py +133 -0
  109. iac_code/tools/cloud/__init__.py +0 -0
  110. iac_code/tools/cloud/aliyun/__init__.py +0 -0
  111. iac_code/tools/cloud/aliyun/aliyun_api.py +510 -0
  112. iac_code/tools/cloud/aliyun/aliyun_doc_search.py +145 -0
  113. iac_code/tools/cloud/aliyun/endpoints.yml +343 -0
  114. iac_code/tools/cloud/aliyun/ros_client.py +56 -0
  115. iac_code/tools/cloud/aliyun/ros_stack.py +633 -0
  116. iac_code/tools/cloud/aliyun/ros_stack_instances.py +247 -0
  117. iac_code/tools/cloud/base_api.py +162 -0
  118. iac_code/tools/cloud/base_stack.py +242 -0
  119. iac_code/tools/cloud/registry.py +20 -0
  120. iac_code/tools/cloud/types.py +105 -0
  121. iac_code/tools/edit_file.py +121 -0
  122. iac_code/tools/glob.py +103 -0
  123. iac_code/tools/grep.py +254 -0
  124. iac_code/tools/list_files.py +104 -0
  125. iac_code/tools/read_file.py +127 -0
  126. iac_code/tools/result_storage.py +39 -0
  127. iac_code/tools/tool_executor.py +165 -0
  128. iac_code/tools/web_fetch.py +177 -0
  129. iac_code/tools/write_file.py +88 -0
  130. iac_code/types/__init__.py +40 -0
  131. iac_code/types/permissions.py +26 -0
  132. iac_code/types/skill_source.py +11 -0
  133. iac_code/types/stream_events.py +227 -0
  134. iac_code/ui/__init__.py +5 -0
  135. iac_code/ui/banner.py +110 -0
  136. iac_code/ui/components/__init__.py +0 -0
  137. iac_code/ui/components/dialog.py +142 -0
  138. iac_code/ui/components/divider.py +20 -0
  139. iac_code/ui/components/fuzzy_picker.py +308 -0
  140. iac_code/ui/components/progress_bar.py +54 -0
  141. iac_code/ui/components/search_box.py +165 -0
  142. iac_code/ui/components/select.py +319 -0
  143. iac_code/ui/components/status_icon.py +42 -0
  144. iac_code/ui/components/tabs.py +128 -0
  145. iac_code/ui/core/__init__.py +0 -0
  146. iac_code/ui/core/in_place_render.py +129 -0
  147. iac_code/ui/core/input_history.py +118 -0
  148. iac_code/ui/core/key_event.py +41 -0
  149. iac_code/ui/core/prompt_input.py +507 -0
  150. iac_code/ui/core/raw_input.py +302 -0
  151. iac_code/ui/core/screen.py +80 -0
  152. iac_code/ui/dialogs/__init__.py +0 -0
  153. iac_code/ui/dialogs/global_search.py +178 -0
  154. iac_code/ui/dialogs/history_search.py +100 -0
  155. iac_code/ui/dialogs/model_picker.py +280 -0
  156. iac_code/ui/dialogs/quick_open.py +108 -0
  157. iac_code/ui/dialogs/resume_picker.py +749 -0
  158. iac_code/ui/keybindings/__init__.py +0 -0
  159. iac_code/ui/keybindings/manager.py +124 -0
  160. iac_code/ui/renderer.py +1535 -0
  161. iac_code/ui/repl.py +772 -0
  162. iac_code/ui/spinner.py +112 -0
  163. iac_code/ui/suggestions/__init__.py +0 -0
  164. iac_code/ui/suggestions/aggregator.py +171 -0
  165. iac_code/ui/suggestions/command_provider.py +43 -0
  166. iac_code/ui/suggestions/directory_provider.py +95 -0
  167. iac_code/ui/suggestions/file_provider.py +121 -0
  168. iac_code/ui/suggestions/shell_history_provider.py +108 -0
  169. iac_code/ui/suggestions/token_extractor.py +77 -0
  170. iac_code/ui/suggestions/types.py +45 -0
  171. iac_code/ui/transcript_view.py +199 -0
  172. iac_code/utils/__init__.py +0 -0
  173. iac_code/utils/background_housekeeping.py +53 -0
  174. iac_code/utils/cleanup.py +68 -0
  175. iac_code/utils/json_utils.py +60 -0
  176. iac_code/utils/log.py +150 -0
  177. iac_code/utils/project_paths.py +74 -0
  178. iac_code/utils/tool_input_parser.py +62 -0
  179. iac_code-0.1.0.dist-info/LICENSE +201 -0
  180. iac_code-0.1.0.dist-info/METADATA +64 -0
  181. iac_code-0.1.0.dist-info/RECORD +184 -0
  182. iac_code-0.1.0.dist-info/WHEEL +5 -0
  183. iac_code-0.1.0.dist-info/entry_points.txt +2 -0
  184. iac_code-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1355 @@
1
+ # Chinese translations for iac-code.
2
+ # Copyright (C) 2026
3
+ # This file is distributed under the same license as the iac-code package.
4
+ #
5
+ msgid ""
6
+ msgstr ""
7
+ "Project-Id-Version: iac-code 0.1.0\n"
8
+ "Report-Msgid-Bugs-To: \n"
9
+ "POT-Creation-Date: 2026-05-12 16:23+0800\n"
10
+ "PO-Revision-Date: 2026-04-02 00:00+0000\n"
11
+ "Last-Translator: \n"
12
+ "Language: zh\n"
13
+ "Language-Team: Chinese\n"
14
+ "Plural-Forms: nplurals=1; plural=0;\n"
15
+ "MIME-Version: 1.0\n"
16
+ "Content-Type: text/plain; charset=utf-8\n"
17
+ "Content-Transfer-Encoding: 8bit\n"
18
+ "Generated-By: Babel 2.18.0\n"
19
+
20
+ #: src/iac_code/acp/slash_registry.py:44
21
+ #, python-brace-format
22
+ msgid ""
23
+ "Command '/{cmd_name}' is not supported over ACP. Supported commands: "
24
+ "{supported}"
25
+ msgstr "命令 '/{cmd_name}' 不支持通过 ACP 使用。支持的命令:{supported}"
26
+
27
+ #: src/iac_code/acp/slash_registry.py:56
28
+ #, python-brace-format
29
+ msgid "Command '/{cmd_name}' handler not implemented."
30
+ msgstr "命令 '/{cmd_name}' 的处理器尚未实现。"
31
+
32
+ #: src/iac_code/acp/slash_registry.py:68
33
+ #, python-brace-format
34
+ msgid "Compaction failed: {error}"
35
+ msgstr "压缩失败:{error}"
36
+
37
+ #: src/iac_code/acp/slash_registry.py:71 src/iac_code/commands/compact.py:24
38
+ msgid "Nothing to compact: conversation is empty."
39
+ msgstr "无内容可压缩:对话为空。"
40
+
41
+ #: src/iac_code/acp/slash_registry.py:74 src/iac_code/commands/compact.py:27
42
+ #, python-brace-format
43
+ msgid ""
44
+ "Conversation too short to compact: all messages are within the recent "
45
+ "{turns}-turn preservation window."
46
+ msgstr "对话过短,无需压缩:所有消息都在最近 {turns} 轮保留窗口内。"
47
+
48
+ #: src/iac_code/acp/slash_registry.py:78 src/iac_code/commands/compact.py:30
49
+ msgid "Compaction failed. See logs for details."
50
+ msgstr "压缩失败,详情请查看日志。"
51
+
52
+ #: src/iac_code/acp/slash_registry.py:83
53
+ #, python-brace-format
54
+ msgid ""
55
+ "Context compacted: {original} → {compacted} tokens ({percent} reduction)."
56
+ " Context usage: {usage}"
57
+ msgstr "上下文已压缩:{original} → {compacted} tokens(减少 {percent})。上下文用量:{usage}"
58
+
59
+ #: src/iac_code/acp/slash_registry.py:97
60
+ #, python-brace-format
61
+ msgid "Clear failed: {error}"
62
+ msgstr "清除失败:{error}"
63
+
64
+ #: src/iac_code/acp/slash_registry.py:98
65
+ msgid "Conversation history cleared."
66
+ msgstr "对话历史已清除。"
67
+
68
+ #: src/iac_code/acp/slash_registry.py:114 src/iac_code/commands/debug.py:34
69
+ #, python-brace-format
70
+ msgid "Debug logging is on. Log file: {path}"
71
+ msgstr "调试日志已启用。日志文件:{path}"
72
+
73
+ #: src/iac_code/acp/slash_registry.py:115 src/iac_code/commands/debug.py:35
74
+ msgid "Debug logging is off."
75
+ msgstr "调试日志已关闭。"
76
+
77
+ #: src/iac_code/acp/slash_registry.py:119 src/iac_code/commands/debug.py:39
78
+ #, python-brace-format
79
+ msgid "Debug logging enabled. Log file: {path}"
80
+ msgstr "调试日志已启用。日志文件:{path}"
81
+
82
+ #: src/iac_code/acp/slash_registry.py:123 src/iac_code/commands/debug.py:43
83
+ msgid "Debug logging disabled."
84
+ msgstr "调试日志已关闭。"
85
+
86
+ #: src/iac_code/acp/slash_registry.py:125 src/iac_code/commands/debug.py:45
87
+ msgid "Usage: /debug [on|off]"
88
+ msgstr "用法:/debug [on|off]"
89
+
90
+ #: src/iac_code/agent/agent_tool.py:250
91
+ #, python-brace-format
92
+ msgid "Done ({tool_count} tool uses · {token_display} tokens)"
93
+ msgstr "完成({tool_count} 次工具调用 · {token_display} tokens)"
94
+
95
+ #: src/iac_code/agent/agent_tool.py:260
96
+ msgid "Explore"
97
+ msgstr "探索"
98
+
99
+ #: src/iac_code/agent/agent_tool.py:261
100
+ msgid "Plan"
101
+ msgstr "规划"
102
+
103
+ #: src/iac_code/agent/agent_tool.py:262 src/iac_code/agent/agent_tool.py:263
104
+ #: src/iac_code/agent/agent_tool.py:264
105
+ msgid "Agent"
106
+ msgstr "智能体"
107
+
108
+ #: src/iac_code/cli/main.py:22 src/iac_code/commands/help.py:26
109
+ msgid "AI-powered infrastructure orchestration tool"
110
+ msgstr "AI 驱动的基础设施编排工具"
111
+
112
+ #: src/iac_code/cli/main.py:33
113
+ msgid "LLM model to use"
114
+ msgstr "使用的 LLM 模型"
115
+
116
+ #: src/iac_code/cli/main.py:34
117
+ msgid "Non-interactive mode: run a single prompt and exit"
118
+ msgstr "非交互模式:运行单个提示并退出"
119
+
120
+ #: src/iac_code/cli/main.py:35
121
+ msgid "Output format: text, json, stream-json"
122
+ msgstr "输出格式:text、json、stream-json"
123
+
124
+ #: src/iac_code/cli/main.py:36
125
+ msgid "Maximum agent turns in headless mode"
126
+ msgstr "无头模式下最大智能体轮次"
127
+
128
+ #: src/iac_code/cli/main.py:37 src/iac_code/cli/main.py:232
129
+ msgid "Enable debug logging"
130
+ msgstr "启用调试日志"
131
+
132
+ #: src/iac_code/cli/main.py:38
133
+ msgid "Show version and exit"
134
+ msgstr "显示版本号并退出"
135
+
136
+ #: src/iac_code/cli/main.py:39
137
+ msgid "Resume a session by ID"
138
+ msgstr "通过 ID 恢复会话"
139
+
140
+ #: src/iac_code/cli/main.py:40
141
+ msgid "Resume the most recent session"
142
+ msgstr "恢复最近一次会话"
143
+
144
+ #: src/iac_code/cli/main.py:47 src/iac_code/i18n/__init__.py:54
145
+ msgid "Install completion for the current shell."
146
+ msgstr "为当前 shell 安装自动补全。"
147
+
148
+ #: src/iac_code/cli/main.py:55 src/iac_code/i18n/__init__.py:55
149
+ msgid ""
150
+ "Show completion for the current shell, to copy it or customize the "
151
+ "installation."
152
+ msgstr "显示当前 shell 的自动补全脚本,可复制或自定义安装。"
153
+
154
+ #: src/iac_code/cli/main.py:69
155
+ msgid "Error: --resume and --continue cannot be used together."
156
+ msgstr "错误:--resume 和 --continue 不能同时使用。"
157
+
158
+ #: src/iac_code/cli/main.py:227
159
+ msgid "Run iac-code as an ACP server."
160
+ msgstr "将 iac-code 作为 ACP 服务器运行。"
161
+
162
+ #: src/iac_code/cli/main.py:229
163
+ msgid "Transport type: stdio or http"
164
+ msgstr "传输类型:stdio 或 http"
165
+
166
+ #: src/iac_code/cli/main.py:230
167
+ msgid "HTTP server port"
168
+ msgstr "HTTP 服务器端口"
169
+
170
+ #: src/iac_code/cli/main.py:231
171
+ msgid "HTTP server host"
172
+ msgstr "HTTP 服务器主机"
173
+
174
+ #: src/iac_code/commands/__init__.py:22
175
+ msgid "Show available commands"
176
+ msgstr "显示可用命令"
177
+
178
+ #: src/iac_code/commands/__init__.py:30
179
+ msgid "Clear conversation history"
180
+ msgstr "清除对话历史"
181
+
182
+ #: src/iac_code/commands/__init__.py:37
183
+ msgid "Show or switch model"
184
+ msgstr "显示或切换模型"
185
+
186
+ #: src/iac_code/commands/__init__.py:45
187
+ msgid "Show or switch thinking effort"
188
+ msgstr "显示或切换思考强度"
189
+
190
+ #: src/iac_code/commands/__init__.py:53
191
+ msgid "Compact conversation context"
192
+ msgstr "压缩对话上下文"
193
+
194
+ #: src/iac_code/commands/__init__.py:55
195
+ msgid "Compacting conversation"
196
+ msgstr "正在压缩对话"
197
+
198
+ #: src/iac_code/commands/__init__.py:61
199
+ msgid "Exit the application"
200
+ msgstr "退出应用程序"
201
+
202
+ #: src/iac_code/commands/__init__.py:69
203
+ msgid "Authenticate with LLM provider"
204
+ msgstr "配置 LLM 提供商认证"
205
+
206
+ #: src/iac_code/commands/__init__.py:77
207
+ msgid "Toggle debug logging"
208
+ msgstr "切换调试日志开关"
209
+
210
+ #: src/iac_code/commands/__init__.py:85
211
+ msgid "Resume a previous session"
212
+ msgstr "恢复之前的会话"
213
+
214
+ #: src/iac_code/commands/__init__.py:87
215
+ msgid "[conversation id or search term]"
216
+ msgstr "[会话 ID 或搜索词]"
217
+
218
+ #: src/iac_code/commands/auth.py:304 src/iac_code/commands/auth.py:817
219
+ #: src/iac_code/ui/core/prompt_input.py:373
220
+ msgid "Navigate"
221
+ msgstr "导航"
222
+
223
+ #: src/iac_code/commands/auth.py:304 src/iac_code/commands/auth.py:426
224
+ #: src/iac_code/commands/auth.py:460 src/iac_code/commands/auth.py:467
225
+ #: src/iac_code/commands/auth.py:491 src/iac_code/commands/auth.py:817
226
+ #: src/iac_code/commands/auth.py:1007 src/iac_code/ui/core/prompt_input.py:373
227
+ msgid "Confirm"
228
+ msgstr "确认"
229
+
230
+ #: src/iac_code/commands/auth.py:304 src/iac_code/commands/auth.py:424
231
+ #: src/iac_code/commands/auth.py:426 src/iac_code/commands/auth.py:460
232
+ #: src/iac_code/commands/auth.py:467 src/iac_code/commands/auth.py:491
233
+ #: src/iac_code/commands/auth.py:817 src/iac_code/commands/auth.py:902
234
+ #: src/iac_code/commands/auth.py:1007
235
+ msgid "Back"
236
+ msgstr "返回"
237
+
238
+ #: src/iac_code/commands/auth.py:424
239
+ msgid "Keep"
240
+ msgstr "保留"
241
+
242
+ #: src/iac_code/commands/auth.py:424
243
+ msgid "Re-enter"
244
+ msgstr "重新输入"
245
+
246
+ #: src/iac_code/commands/auth.py:566 src/iac_code/commands/auth.py:667
247
+ msgid " (current)"
248
+ msgstr " (当前)"
249
+
250
+ #: src/iac_code/commands/auth.py:569
251
+ msgid "Custom model..."
252
+ msgstr "自定义模型..."
253
+
254
+ #: src/iac_code/commands/auth.py:572
255
+ #, python-brace-format
256
+ msgid "Select model for {provider}"
257
+ msgstr "为 {provider} 选择模型"
258
+
259
+ #: src/iac_code/commands/auth.py:574
260
+ msgid "Select model"
261
+ msgstr "选择模型"
262
+
263
+ #: src/iac_code/commands/auth.py:582
264
+ msgid "Enter custom model name: "
265
+ msgstr "输入自定义模型名称:"
266
+
267
+ #: src/iac_code/commands/auth.py:608
268
+ msgid "Error: console not available"
269
+ msgstr "错误:控制台不可用"
270
+
271
+ #: src/iac_code/commands/auth.py:635
272
+ msgid "Configure LLM Provider"
273
+ msgstr "配置 LLM 提供商"
274
+
275
+ #: src/iac_code/commands/auth.py:636
276
+ msgid "Configure IaC Cloud Service"
277
+ msgstr "配置 IaC 云服务"
278
+
279
+ #: src/iac_code/commands/auth.py:638
280
+ msgid "Select configuration type"
281
+ msgstr "选择配置类型"
282
+
283
+ #: src/iac_code/commands/auth.py:640 src/iac_code/commands/auth.py:694
284
+ #: src/iac_code/commands/auth.py:709 src/iac_code/commands/auth.py:770
285
+ #: src/iac_code/commands/auth.py:943 src/iac_code/commands/auth.py:984
286
+ msgid "Auth cancelled"
287
+ msgstr "认证已取消"
288
+
289
+ #: src/iac_code/commands/auth.py:676
290
+ msgid "Select provider"
291
+ msgstr "选择提供商"
292
+
293
+ #: src/iac_code/commands/auth.py:687
294
+ #, python-brace-format
295
+ msgid "Configure {provider}"
296
+ msgstr "配置 {provider}"
297
+
298
+ #: src/iac_code/commands/auth.py:702
299
+ #, python-brace-format
300
+ msgid "Enter API key for {provider}"
301
+ msgstr "为 {provider} 输入 API 密钥"
302
+
303
+ #: src/iac_code/commands/auth.py:742
304
+ #, python-brace-format
305
+ msgid "{status}: {provider} / {model}"
306
+ msgstr "{status}:{provider} / {model}"
307
+
308
+ #: src/iac_code/commands/auth.py:743
309
+ msgid "Configured"
310
+ msgstr "已配置"
311
+
312
+ #: src/iac_code/commands/auth.py:752
313
+ msgid "Alibaba Cloud"
314
+ msgstr "阿里云"
315
+
316
+ #: src/iac_code/commands/auth.py:761
317
+ msgid "Select Cloud Provider"
318
+ msgstr "选择云服务商"
319
+
320
+ #: src/iac_code/commands/auth.py:777
321
+ msgid "Credential"
322
+ msgstr "凭证"
323
+
324
+ #: src/iac_code/commands/auth.py:778 src/iac_code/commands/auth.py:875
325
+ #: src/iac_code/commands/auth.py:980 src/iac_code/ui/renderer.py:417
326
+ msgid "Region"
327
+ msgstr "地域"
328
+
329
+ #: src/iac_code/commands/auth.py:780
330
+ msgid "Configure Alibaba Cloud"
331
+ msgstr "配置阿里云"
332
+
333
+ #: src/iac_code/commands/auth.py:863
334
+ msgid "Current configuration"
335
+ msgstr "当前配置"
336
+
337
+ #: src/iac_code/commands/auth.py:865
338
+ msgid "Mode"
339
+ msgstr "模式"
340
+
341
+ #: src/iac_code/commands/auth.py:872
342
+ msgid "(not set)"
343
+ msgstr "(未设置)"
344
+
345
+ #: src/iac_code/commands/auth.py:889
346
+ msgid "Configure Alibaba Cloud credentials"
347
+ msgstr "配置阿里云凭证"
348
+
349
+ #: src/iac_code/commands/auth.py:902
350
+ msgid "Reconfigure credential"
351
+ msgstr "重新配置凭证"
352
+
353
+ #: src/iac_code/commands/auth.py:915
354
+ msgid "Select credential type"
355
+ msgstr "选择凭证类型"
356
+
357
+ #: src/iac_code/commands/auth.py:965
358
+ msgid "Configured: Alibaba Cloud credentials saved to ~/.iac-code"
359
+ msgstr "已配置:阿里云凭证已保存到 ~/.iac-code"
360
+
361
+ #: src/iac_code/commands/auth.py:972
362
+ msgid "Configure Alibaba Cloud region"
363
+ msgstr "配置阿里云地域"
364
+
365
+ #: src/iac_code/commands/auth.py:998
366
+ msgid "Configured: Alibaba Cloud region saved to ~/.iac-code"
367
+ msgstr "已配置:阿里云地域已保存到 ~/.iac-code"
368
+
369
+ #: src/iac_code/commands/compact.py:12
370
+ msgid "Compact command requires a context."
371
+ msgstr "压缩命令需要上下文。"
372
+
373
+ #: src/iac_code/commands/compact.py:16
374
+ msgid "No active REPL."
375
+ msgstr "没有活动的 REPL。"
376
+
377
+ #: src/iac_code/commands/compact.py:20
378
+ msgid "No active agent loop."
379
+ msgstr "没有活动的智能体循环。"
380
+
381
+ #: src/iac_code/commands/compact.py:35
382
+ #, python-brace-format
383
+ msgid ""
384
+ "Context compacted: {original} → {compacted} tokens ({percent_display} "
385
+ "reduction). Context usage: {usage_display}"
386
+ msgstr ""
387
+ "上下文已压缩:{original} → {compacted} tokens(减少 "
388
+ "{percent_display})。上下文用量:{usage_display}"
389
+
390
+ #: src/iac_code/commands/debug.py:21
391
+ msgid "Debug command requires a context."
392
+ msgstr "调试命令需要上下文。"
393
+
394
+ #: src/iac_code/commands/debug.py:26
395
+ msgid "No active session."
396
+ msgstr "没有活动的会话。"
397
+
398
+ #: src/iac_code/commands/effort.py:54 src/iac_code/commands/model.py:82
399
+ #: src/iac_code/commands/model.py:86
400
+ msgid "No configured providers. Run /auth first."
401
+ msgstr "没有已配置的提供商。请先运行 /auth。"
402
+
403
+ #: src/iac_code/commands/effort.py:58
404
+ msgid "No model selected. Run /model first."
405
+ msgstr "没有选择模型。请先运行 /model。"
406
+
407
+ #: src/iac_code/commands/effort.py:66
408
+ #, python-brace-format
409
+ msgid "Model {model} does not support effort."
410
+ msgstr "模型 {model} 不支持调整思考强度。"
411
+
412
+ #: src/iac_code/commands/effort.py:80
413
+ #, python-brace-format
414
+ msgid "Invalid effort. Allowed: {labels}"
415
+ msgstr "非法的思考强度。允许的值:{labels}"
416
+
417
+ #: src/iac_code/commands/effort.py:85
418
+ #, python-brace-format
419
+ msgid "Current effort: {effort}"
420
+ msgstr "当前思考强度:{effort}"
421
+
422
+ #: src/iac_code/commands/effort.py:94
423
+ #, python-brace-format
424
+ msgid "Select effort for {model}"
425
+ msgstr "为 {model} 选择思考强度"
426
+
427
+ #: src/iac_code/commands/effort.py:103 src/iac_code/commands/effort.py:107
428
+ #, python-brace-format
429
+ msgid "Kept effort as {effort}"
430
+ msgstr "已保持思考强度为 {effort}"
431
+
432
+ #: src/iac_code/commands/effort.py:116
433
+ #, python-brace-format
434
+ msgid "Effort switched to: {effort}"
435
+ msgstr "思考强度已切换为:{effort}"
436
+
437
+ #: src/iac_code/commands/help.py:29
438
+ msgid "Commands:"
439
+ msgstr "命令:"
440
+
441
+ #: src/iac_code/commands/help.py:36
442
+ msgid "Shortcuts:"
443
+ msgstr "快捷键:"
444
+
445
+ #: src/iac_code/commands/help.py:39
446
+ msgid "Send message"
447
+ msgstr "发送消息"
448
+
449
+ #: src/iac_code/commands/help.py:40
450
+ msgid "New line"
451
+ msgstr "换行"
452
+
453
+ #: src/iac_code/commands/help.py:41
454
+ msgid "Show command suggestions"
455
+ msgstr "显示命令建议"
456
+
457
+ #: src/iac_code/commands/help.py:42
458
+ msgid "Exit"
459
+ msgstr "退出"
460
+
461
+ #: src/iac_code/commands/model.py:75 src/iac_code/commands/model.py:130
462
+ #, python-brace-format
463
+ msgid "Model switched to: {model}"
464
+ msgstr "模型已切换为:{model}"
465
+
466
+ #: src/iac_code/commands/model.py:79
467
+ #, python-brace-format
468
+ msgid "Current model: {model}"
469
+ msgstr "当前模型:{model}"
470
+
471
+ #: src/iac_code/commands/model.py:105
472
+ #, python-brace-format
473
+ msgid "Kept model as {model}"
474
+ msgstr "保持模型为 {model}"
475
+
476
+ #: src/iac_code/commands/resume.py:21
477
+ msgid "Resume is only available in interactive mode."
478
+ msgstr "/resume 仅在交互模式下可用。"
479
+
480
+ #: src/iac_code/commands/resume.py:27
481
+ msgid "Resume is unavailable: session index not initialised."
482
+ msgstr "无法恢复:会话索引未初始化。"
483
+
484
+ #: src/iac_code/commands/resume.py:32
485
+ #, python-brace-format
486
+ msgid "Session not found: {arg}"
487
+ msgstr "未找到会话:{arg}"
488
+
489
+ #: src/iac_code/commands/resume.py:47
490
+ msgid "Resume cancelled"
491
+ msgstr "已取消恢复"
492
+
493
+ # Typer/Click built-in strings
494
+ #: src/iac_code/i18n/__init__.py:50
495
+ msgid "Options"
496
+ msgstr "选项"
497
+
498
+ #: src/iac_code/i18n/__init__.py:51
499
+ msgid "Commands"
500
+ msgstr "命令"
501
+
502
+ #: src/iac_code/i18n/__init__.py:52
503
+ msgid "Arguments"
504
+ msgstr "参数"
505
+
506
+ #: src/iac_code/i18n/__init__.py:53
507
+ msgid "Show this message and exit."
508
+ msgstr "显示此帮助信息并退出。"
509
+
510
+ #: src/iac_code/i18n/__init__.py:56
511
+ #, python-brace-format
512
+ msgid "default: {default}"
513
+ msgstr "默认值: {default}"
514
+
515
+ #: src/iac_code/i18n/__init__.py:57
516
+ msgid "required"
517
+ msgstr "必填"
518
+
519
+ #: src/iac_code/i18n/__init__.py:58
520
+ #, python-brace-format
521
+ msgid "env var: {var}"
522
+ msgstr "环境变量: {var}"
523
+
524
+ #: src/iac_code/i18n/__init__.py:59
525
+ msgid "(dynamic)"
526
+ msgstr "(动态)"
527
+
528
+ #: src/iac_code/i18n/__init__.py:60
529
+ msgid "Aborted!"
530
+ msgstr "已中止!"
531
+
532
+ #: src/iac_code/providers/openai_provider.py:263
533
+ #, python-brace-format
534
+ msgid ""
535
+ "API returned no data. Please check that your API Base URL is correct "
536
+ "(current: {base_url}). Many OpenAI-compatible endpoints require a /v1 "
537
+ "suffix (e.g. {base_url}/v1)."
538
+ msgstr ""
539
+ "API 未返回数据。请检查您的 API Base URL 是否正确(当前:{base_url})。许多 OpenAI 兼容端点需要 /v1 "
540
+ "后缀(如 {base_url}/v1)。"
541
+
542
+ #: src/iac_code/providers/openai_provider.py:307
543
+ #, python-brace-format
544
+ msgid ""
545
+ "API returned an invalid response. Please check that your API Base URL is "
546
+ "correct (current: {base_url}). Many OpenAI-compatible endpoints require a"
547
+ " /v1 suffix (e.g. {base_url}/v1)."
548
+ msgstr ""
549
+ "API 返回了无效响应。请检查您的 API Base URL 是否正确(当前:{base_url})。许多 OpenAI 兼容端点需要 /v1 "
550
+ "后缀(如 {base_url}/v1)。"
551
+
552
+ #: src/iac_code/skills/skill_tool.py:130
553
+ #, python-brace-format
554
+ msgid "Skill '{name}' loaded (inline)."
555
+ msgstr "技能 '{name}' 已加载(内联)。"
556
+
557
+ #: src/iac_code/skills/skill_tool.py:214
558
+ msgid "Skill"
559
+ msgstr "技能"
560
+
561
+ #: src/iac_code/skills/bundled/simplify.py:25
562
+ msgid ""
563
+ "Review changed code for reuse, quality, and efficiency, then fix issues "
564
+ "found."
565
+ msgstr "审查变更的代码的可复用性、质量和效率,然后修复发现的问题。"
566
+
567
+ #: src/iac_code/tools/bash.py:107
568
+ #, python-brace-format
569
+ msgid "{count} more lines"
570
+ msgstr "还有 {count} 行"
571
+
572
+ #: src/iac_code/tools/bash.py:115
573
+ msgid "Bash"
574
+ msgstr "Bash"
575
+
576
+ #: src/iac_code/tools/bash.py:121
577
+ #, python-brace-format
578
+ msgid "Running {cmd}"
579
+ msgstr "正在运行 {cmd}"
580
+
581
+ #: src/iac_code/tools/bash.py:122
582
+ msgid "Running command..."
583
+ msgstr "正在运行命令..."
584
+
585
+ #: src/iac_code/tools/edit_file.py:112
586
+ msgid "Create"
587
+ msgstr "创建"
588
+
589
+ #: src/iac_code/tools/edit_file.py:113
590
+ msgid "Update"
591
+ msgstr "更新"
592
+
593
+ #: src/iac_code/tools/edit_file.py:117
594
+ #, python-brace-format
595
+ msgid "Editing {path}"
596
+ msgstr "正在编辑 {path}"
597
+
598
+ #: src/iac_code/tools/edit_file.py:118
599
+ msgid "Editing file..."
600
+ msgstr "正在编辑文件..."
601
+
602
+ #: src/iac_code/tools/glob.py:85 src/iac_code/tools/grep.py:236
603
+ msgid "Found 0 files"
604
+ msgstr "找到 0 个文件"
605
+
606
+ #: src/iac_code/tools/glob.py:88 src/iac_code/tools/grep.py:239
607
+ #, python-brace-format
608
+ msgid "Found {count} files"
609
+ msgstr "找到 {count} 个文件"
610
+
611
+ #: src/iac_code/tools/glob.py:94 src/iac_code/tools/grep.py:245
612
+ msgid "Search"
613
+ msgstr "搜索"
614
+
615
+ #: src/iac_code/tools/glob.py:99
616
+ #, python-brace-format
617
+ msgid "Searching {pattern}"
618
+ msgstr "正在搜索 {pattern}"
619
+
620
+ #: src/iac_code/tools/glob.py:100
621
+ msgid "Searching files..."
622
+ msgstr "正在搜索文件..."
623
+
624
+ #: src/iac_code/tools/grep.py:250
625
+ #, python-brace-format
626
+ msgid "Searching for {pattern}"
627
+ msgstr "正在搜索 {pattern}"
628
+
629
+ #: src/iac_code/tools/grep.py:251
630
+ msgid "Searching content..."
631
+ msgstr "正在搜索内容..."
632
+
633
+ #: src/iac_code/tools/list_files.py:81
634
+ #, python-brace-format
635
+ msgid "Found {count} items"
636
+ msgstr "找到 {count} 个项目"
637
+
638
+ #: src/iac_code/tools/list_files.py:87
639
+ msgid "List"
640
+ msgstr "列表"
641
+
642
+ #: src/iac_code/tools/list_files.py:91
643
+ #, python-brace-format
644
+ msgid "Listing {path}"
645
+ msgstr "正在列出 {path}"
646
+
647
+ #: src/iac_code/tools/list_files.py:92
648
+ msgid "Listing files..."
649
+ msgstr "正在列出文件..."
650
+
651
+ #: src/iac_code/tools/read_file.py:116
652
+ #, python-brace-format
653
+ msgid "Read {total} lines"
654
+ msgstr "读取了 {total} 行"
655
+
656
+ #: src/iac_code/tools/read_file.py:119
657
+ msgid "Read"
658
+ msgstr "读取"
659
+
660
+ #: src/iac_code/tools/read_file.py:123
661
+ #, python-brace-format
662
+ msgid "Reading {path}"
663
+ msgstr "正在读取 {path}"
664
+
665
+ #: src/iac_code/tools/read_file.py:124
666
+ msgid "Reading file..."
667
+ msgstr "正在读取文件..."
668
+
669
+ #: src/iac_code/tools/web_fetch.py:94
670
+ msgid "URL cannot be empty."
671
+ msgstr "URL 不能为空。"
672
+
673
+ #: src/iac_code/tools/web_fetch.py:100
674
+ #, python-brace-format
675
+ msgid "Invalid URL: missing scheme (e.g. http:// or https://). Got: {url}"
676
+ msgstr "无效 URL:缺少协议(如 http:// 或 https://)。当前:{url}"
677
+
678
+ #: src/iac_code/tools/web_fetch.py:103
679
+ #, python-brace-format
680
+ msgid "Invalid URL: missing host/netloc. Got: {url}"
681
+ msgstr "无效 URL:缺少主机地址。当前:{url}"
682
+
683
+ #: src/iac_code/tools/web_fetch.py:129
684
+ #, python-brace-format
685
+ msgid "HTTP error {status}: {url}"
686
+ msgstr "HTTP 错误 {status}:{url}"
687
+
688
+ #: src/iac_code/tools/web_fetch.py:131
689
+ #, python-brace-format
690
+ msgid "Failed to fetch {url}: {error}"
691
+ msgstr "获取 {url} 失败:{error}"
692
+
693
+ #: src/iac_code/tools/web_fetch.py:133
694
+ #, python-brace-format
695
+ msgid "Unexpected error fetching {url}: {error}"
696
+ msgstr "获取 {url} 时发生意外错误:{error}"
697
+
698
+ #: src/iac_code/tools/web_fetch.py:147
699
+ #, python-brace-format
700
+ msgid "Fetched {chars} chars, {lines} lines"
701
+ msgstr "获取了 {chars} 个字符,{lines} 行"
702
+
703
+ #: src/iac_code/tools/web_fetch.py:159
704
+ msgid "Fetch"
705
+ msgstr "获取"
706
+
707
+ #: src/iac_code/tools/web_fetch.py:165
708
+ #, python-brace-format
709
+ msgid "Fetching {url}"
710
+ msgstr "正在获取 {url}"
711
+
712
+ #: src/iac_code/tools/web_fetch.py:166
713
+ msgid "Fetching web page..."
714
+ msgstr "正在获取网页..."
715
+
716
+ #: src/iac_code/tools/write_file.py:63
717
+ #, python-brace-format
718
+ msgid "Successfully wrote {lines} lines to {path}"
719
+ msgstr "成功写入 {lines} 行到 {path}"
720
+
721
+ #: src/iac_code/tools/write_file.py:77
722
+ msgid "Write"
723
+ msgstr "写入"
724
+
725
+ #: src/iac_code/tools/write_file.py:81
726
+ #, python-brace-format
727
+ msgid "Writing {path}"
728
+ msgstr "正在写入 {path}"
729
+
730
+ #: src/iac_code/tools/write_file.py:82
731
+ msgid "Writing file..."
732
+ msgstr "正在写入文件..."
733
+
734
+ #: src/iac_code/tools/cloud/base_api.py:92
735
+ msgid "CloudAPI"
736
+ msgstr "云API"
737
+
738
+ #: src/iac_code/tools/cloud/base_api.py:116
739
+ #, python-brace-format
740
+ msgid "Calling {action}..."
741
+ msgstr "正在调用 {action}..."
742
+
743
+ #: src/iac_code/tools/cloud/aliyun/aliyun_api.py:373
744
+ #: src/iac_code/tools/cloud/base_api.py:123
745
+ msgid "Call succeeded"
746
+ msgstr "调用成功"
747
+
748
+ #: src/iac_code/tools/cloud/base_api.py:144
749
+ #, python-brace-format
750
+ msgid "Received response ({count} lines)"
751
+ msgstr "收到响应({count} 行)"
752
+
753
+ #: src/iac_code/tools/cloud/base_stack.py:133
754
+ msgid "CloudStack"
755
+ msgstr "云资源栈"
756
+
757
+ #: src/iac_code/tools/cloud/aliyun/ros_stack_instances.py:117
758
+ #: src/iac_code/tools/cloud/base_stack.py:150
759
+ #, python-brace-format
760
+ msgid "Running {action}..."
761
+ msgstr "正在运行 {action}..."
762
+
763
+ #: src/iac_code/tools/cloud/types.py:8
764
+ msgid "CREATE_IN_PROGRESS"
765
+ msgstr "创建中"
766
+
767
+ #: src/iac_code/tools/cloud/types.py:9
768
+ msgid "CREATE_FAILED"
769
+ msgstr "创建失败"
770
+
771
+ #: src/iac_code/tools/cloud/types.py:10
772
+ msgid "CREATE_COMPLETE"
773
+ msgstr "创建完成"
774
+
775
+ #: src/iac_code/tools/cloud/types.py:11
776
+ msgid "UPDATE_IN_PROGRESS"
777
+ msgstr "更新中"
778
+
779
+ #: src/iac_code/tools/cloud/types.py:12
780
+ msgid "UPDATE_FAILED"
781
+ msgstr "更新失败"
782
+
783
+ #: src/iac_code/tools/cloud/types.py:13
784
+ msgid "UPDATE_COMPLETE"
785
+ msgstr "更新完成"
786
+
787
+ #: src/iac_code/tools/cloud/types.py:14
788
+ msgid "DELETE_IN_PROGRESS"
789
+ msgstr "删除中"
790
+
791
+ #: src/iac_code/tools/cloud/types.py:15
792
+ msgid "DELETE_FAILED"
793
+ msgstr "删除失败"
794
+
795
+ #: src/iac_code/tools/cloud/types.py:16
796
+ msgid "DELETE_COMPLETE"
797
+ msgstr "删除完成"
798
+
799
+ #: src/iac_code/tools/cloud/types.py:17
800
+ msgid "CREATE_ROLLBACK_IN_PROGRESS"
801
+ msgstr "创建回滚中"
802
+
803
+ #: src/iac_code/tools/cloud/types.py:18
804
+ msgid "CREATE_ROLLBACK_FAILED"
805
+ msgstr "创建回滚失败"
806
+
807
+ #: src/iac_code/tools/cloud/types.py:19
808
+ msgid "CREATE_ROLLBACK_COMPLETE"
809
+ msgstr "创建回滚完成"
810
+
811
+ #: src/iac_code/tools/cloud/types.py:20
812
+ msgid "ROLLBACK_IN_PROGRESS"
813
+ msgstr "回滚中"
814
+
815
+ #: src/iac_code/tools/cloud/types.py:21
816
+ msgid "ROLLBACK_FAILED"
817
+ msgstr "回滚失败"
818
+
819
+ #: src/iac_code/tools/cloud/types.py:22
820
+ msgid "ROLLBACK_COMPLETE"
821
+ msgstr "回滚完成"
822
+
823
+ #: src/iac_code/tools/cloud/types.py:23
824
+ msgid "CHECK_IN_PROGRESS"
825
+ msgstr "检查中"
826
+
827
+ #: src/iac_code/tools/cloud/types.py:24
828
+ msgid "CHECK_FAILED"
829
+ msgstr "检查失败"
830
+
831
+ #: src/iac_code/tools/cloud/types.py:25
832
+ msgid "CHECK_COMPLETE"
833
+ msgstr "检查完成"
834
+
835
+ #: src/iac_code/tools/cloud/types.py:26
836
+ msgid "REVIEW_IN_PROGRESS"
837
+ msgstr "审查中"
838
+
839
+ #: src/iac_code/tools/cloud/types.py:27
840
+ msgid "IMPORT_CREATE_IN_PROGRESS"
841
+ msgstr "导入创建中"
842
+
843
+ #: src/iac_code/tools/cloud/types.py:28
844
+ msgid "IMPORT_CREATE_FAILED"
845
+ msgstr "导入创建失败"
846
+
847
+ #: src/iac_code/tools/cloud/types.py:29
848
+ msgid "IMPORT_CREATE_COMPLETE"
849
+ msgstr "导入创建完成"
850
+
851
+ #: src/iac_code/tools/cloud/types.py:30
852
+ msgid "IMPORT_CREATE_ROLLBACK_IN_PROGRESS"
853
+ msgstr "导入创建回滚中"
854
+
855
+ #: src/iac_code/tools/cloud/types.py:31
856
+ msgid "IMPORT_CREATE_ROLLBACK_FAILED"
857
+ msgstr "导入创建回滚失败"
858
+
859
+ #: src/iac_code/tools/cloud/types.py:32
860
+ msgid "IMPORT_CREATE_ROLLBACK_COMPLETE"
861
+ msgstr "导入创建回滚完成"
862
+
863
+ #: src/iac_code/tools/cloud/types.py:33
864
+ msgid "IMPORT_UPDATE_IN_PROGRESS"
865
+ msgstr "导入更新中"
866
+
867
+ #: src/iac_code/tools/cloud/types.py:34
868
+ msgid "IMPORT_UPDATE_FAILED"
869
+ msgstr "导入更新失败"
870
+
871
+ #: src/iac_code/tools/cloud/types.py:35
872
+ msgid "IMPORT_UPDATE_COMPLETE"
873
+ msgstr "导入更新完成"
874
+
875
+ #: src/iac_code/tools/cloud/types.py:36
876
+ msgid "IMPORT_UPDATE_ROLLBACK_IN_PROGRESS"
877
+ msgstr "导入更新回滚中"
878
+
879
+ #: src/iac_code/tools/cloud/types.py:37
880
+ msgid "IMPORT_UPDATE_ROLLBACK_FAILED"
881
+ msgstr "导入更新回滚失败"
882
+
883
+ #: src/iac_code/tools/cloud/types.py:38
884
+ msgid "IMPORT_UPDATE_ROLLBACK_COMPLETE"
885
+ msgstr "导入更新回滚完成"
886
+
887
+ #: src/iac_code/tools/cloud/types.py:40
888
+ msgid "INIT_COMPLETE"
889
+ msgstr "初始化完成"
890
+
891
+ #: src/iac_code/tools/cloud/types.py:41
892
+ msgid "IMPORT_IN_PROGRESS"
893
+ msgstr "导入中"
894
+
895
+ #: src/iac_code/tools/cloud/types.py:42
896
+ msgid "IMPORT_COMPLETE"
897
+ msgstr "导入完成"
898
+
899
+ #: src/iac_code/tools/cloud/types.py:43
900
+ msgid "IMPORT_FAILED"
901
+ msgstr "导入失败"
902
+
903
+ #: src/iac_code/tools/cloud/aliyun/aliyun_api.py:165
904
+ msgid "Aliyun API"
905
+ msgstr "阿里云 API"
906
+
907
+ #: src/iac_code/tools/cloud/aliyun/aliyun_api.py:372
908
+ #, python-brace-format
909
+ msgid "Call succeeded (RequestId: {request_id})"
910
+ msgstr "调用成功(RequestId: {request_id})"
911
+
912
+ #: src/iac_code/tools/cloud/aliyun/aliyun_doc_search.py:57
913
+ msgid "DocSearch"
914
+ msgstr "文档搜索"
915
+
916
+ #: src/iac_code/tools/cloud/aliyun/aliyun_doc_search.py:70
917
+ #, python-brace-format
918
+ msgid "Searching docs for {keywords}..."
919
+ msgstr "正在搜索 {keywords} 的文档..."
920
+
921
+ #: src/iac_code/tools/cloud/aliyun/aliyun_doc_search.py:71
922
+ msgid "Searching docs..."
923
+ msgstr "正在搜索文档..."
924
+
925
+ #: src/iac_code/tools/cloud/aliyun/aliyun_doc_search.py:76
926
+ msgid "keywords cannot be empty."
927
+ msgstr "关键词不能为空。"
928
+
929
+ #: src/iac_code/tools/cloud/aliyun/aliyun_doc_search.py:96
930
+ #, python-brace-format
931
+ msgid "HTTP error {status} when searching docs."
932
+ msgstr "搜索文档时发生 HTTP 错误 {status}。"
933
+
934
+ #: src/iac_code/tools/cloud/aliyun/aliyun_doc_search.py:98
935
+ #, python-brace-format
936
+ msgid "Failed to search docs: {error}"
937
+ msgstr "搜索文档失败:{error}"
938
+
939
+ #: src/iac_code/tools/cloud/aliyun/aliyun_doc_search.py:103
940
+ msgid "Failed to parse search response as JSON."
941
+ msgstr "无法将搜索响应解析为 JSON。"
942
+
943
+ #: src/iac_code/tools/cloud/aliyun/aliyun_doc_search.py:106
944
+ msgid "Search API returned failure."
945
+ msgstr "搜索 API 返回失败。"
946
+
947
+ #: src/iac_code/tools/cloud/aliyun/aliyun_doc_search.py:125
948
+ msgid "No documents found"
949
+ msgstr "未找到文档"
950
+
951
+ #: src/iac_code/tools/cloud/aliyun/aliyun_doc_search.py:126
952
+ #, python-brace-format
953
+ msgid "No documents found for keywords: {keywords}"
954
+ msgstr "未找到关键词为 {keywords} 的文档"
955
+
956
+ #: src/iac_code/tools/cloud/aliyun/aliyun_doc_search.py:141
957
+ #, python-brace-format
958
+ msgid "Found {count} documents (total {total})"
959
+ msgstr "找到 {count} 篇文档(共 {total} 篇)"
960
+
961
+ #: src/iac_code/tools/cloud/aliyun/aliyun_doc_search.py:143
962
+ msgid "Use web_fetch tool to read full document content if needed."
963
+ msgstr "如需要,请使用 web_fetch 工具读取完整文档内容。"
964
+
965
+ #: src/iac_code/tools/cloud/aliyun/ros_stack.py:139
966
+ msgid "ROS Stack"
967
+ msgstr "ROS 资源栈"
968
+
969
+ #: src/iac_code/tools/cloud/aliyun/ros_stack_instances.py:100
970
+ msgid "CloudStackInstances"
971
+ msgstr "云资源栈实例"
972
+
973
+ #: src/iac_code/ui/banner.py:38
974
+ msgid "DashScope"
975
+ msgstr "阿里云百炼"
976
+
977
+ #: src/iac_code/ui/banner.py:39
978
+ msgid "DashScope Token Plan"
979
+ msgstr "阿里云百炼 Token Plan"
980
+
981
+ #: src/iac_code/ui/banner.py:40
982
+ msgid "OpenAI"
983
+ msgstr "OpenAI"
984
+
985
+ #: src/iac_code/ui/banner.py:41
986
+ msgid "Anthropic"
987
+ msgstr "Anthropic"
988
+
989
+ #: src/iac_code/ui/banner.py:42
990
+ msgid "DeepSeek"
991
+ msgstr "DeepSeek"
992
+
993
+ #: src/iac_code/ui/banner.py:43
994
+ msgid "OpenAPI Compatible"
995
+ msgstr "OpenAPI 兼容"
996
+
997
+ #: src/iac_code/ui/banner.py:67
998
+ msgid "Your AI-powered Infrastructure as Code assistant"
999
+ msgstr "您的 AI 驱动的基础设施即代码助手"
1000
+
1001
+ #: src/iac_code/ui/banner.py:91
1002
+ msgid "Welcome back"
1003
+ msgstr "欢迎回来"
1004
+
1005
+ #: src/iac_code/ui/banner.py:97
1006
+ msgid "Session"
1007
+ msgstr "会话"
1008
+
1009
+ #: src/iac_code/ui/banner.py:107
1010
+ msgid "Debug mode"
1011
+ msgstr "调试模式"
1012
+
1013
+ #: src/iac_code/ui/banner.py:108
1014
+ msgid "Log file"
1015
+ msgstr "日志文件"
1016
+
1017
+ #: src/iac_code/ui/renderer.py:350 src/iac_code/ui/renderer.py:620
1018
+ #: src/iac_code/ui/renderer.py:1335
1019
+ #, python-brace-format
1020
+ msgid "Thought for {seconds:.1f}s"
1021
+ msgstr "思考完成(耗时 {seconds:.1f}s)"
1022
+
1023
+ #: src/iac_code/ui/renderer.py:366 src/iac_code/ui/renderer.py:652
1024
+ #: src/iac_code/ui/renderer.py:1356
1025
+ msgid "(ctrl+o to expand)"
1026
+ msgstr "(ctrl+o 展开)"
1027
+
1028
+ #: src/iac_code/ui/renderer.py:393
1029
+ msgid "Resource"
1030
+ msgstr "资源"
1031
+
1032
+ #: src/iac_code/ui/renderer.py:394
1033
+ msgid "Type"
1034
+ msgstr "类型"
1035
+
1036
+ #: src/iac_code/ui/renderer.py:395 src/iac_code/ui/renderer.py:418
1037
+ msgid "Status"
1038
+ msgstr "状态"
1039
+
1040
+ #: src/iac_code/ui/renderer.py:416
1041
+ msgid "Account ID"
1042
+ msgstr "账号 ID"
1043
+
1044
+ #: src/iac_code/ui/renderer.py:494
1045
+ #, python-brace-format
1046
+ msgid "Done ({child_count} tool uses{token_info}{elapsed})"
1047
+ msgstr "完成({child_count} 次工具调用{token_info}{elapsed})"
1048
+
1049
+ #: src/iac_code/ui/renderer.py:524
1050
+ #, python-brace-format
1051
+ msgid "+ {count} more tool uses (ctrl+o to expand)"
1052
+ msgstr "+ {count} 个工具调用 (ctrl+o 展开)"
1053
+
1054
+ #: src/iac_code/ui/renderer.py:1122
1055
+ #, python-brace-format
1056
+ msgid "Context auto-compacted: {original} → {compacted} tokens"
1057
+ msgstr "上下文自动压缩:{original} → {compacted} tokens"
1058
+
1059
+ #: src/iac_code/ui/renderer.py:1199
1060
+ msgid "Operation cancelled."
1061
+ msgstr "操作已取消。"
1062
+
1063
+ #: src/iac_code/ui/renderer.py:1204
1064
+ msgid "No API key configured."
1065
+ msgstr "尚未配置 API 密钥。"
1066
+
1067
+ #: src/iac_code/ui/renderer.py:1204
1068
+ msgid "Please run /auth to set up your LLM provider and API key."
1069
+ msgstr "请运行 /auth 设置您的 LLM 提供商和 API 密钥。"
1070
+
1071
+ #: src/iac_code/ui/renderer.py:1208
1072
+ #, python-brace-format
1073
+ msgid "Error: {error}"
1074
+ msgstr "错误:{error}"
1075
+
1076
+ #: src/iac_code/ui/renderer.py:1276
1077
+ msgid "Allow this action?"
1078
+ msgstr "是否允许执行此操作?"
1079
+
1080
+ #: src/iac_code/ui/renderer.py:1279
1081
+ msgid "Yes, allow once"
1082
+ msgstr "是,仅本次允许"
1083
+
1084
+ #: src/iac_code/ui/renderer.py:1280
1085
+ msgid "Yes, allow always for this tool"
1086
+ msgstr "是,始终允许此工具"
1087
+
1088
+ #: src/iac_code/ui/renderer.py:1281
1089
+ msgid "No, reject once"
1090
+ msgstr "否,仅本次拒绝"
1091
+
1092
+ #: src/iac_code/ui/renderer.py:1281
1093
+ msgid "default"
1094
+ msgstr "默认"
1095
+
1096
+ #: src/iac_code/ui/renderer.py:1282
1097
+ msgid "No, always reject this tool"
1098
+ msgstr "否,始终拒绝此工具"
1099
+
1100
+ #: src/iac_code/ui/repl.py:311
1101
+ msgid "Press Ctrl+C again to exit."
1102
+ msgstr "再次按 Ctrl+C 退出。"
1103
+
1104
+ #: src/iac_code/ui/repl.py:327
1105
+ msgid "Interrupted."
1106
+ msgstr "已中断。"
1107
+
1108
+ #: src/iac_code/ui/repl.py:364
1109
+ msgid "Goodbye!"
1110
+ msgstr "再见!"
1111
+
1112
+ #: src/iac_code/ui/repl.py:365
1113
+ msgid "Resume this session with:"
1114
+ msgstr "恢复此会话请运行:"
1115
+
1116
+ #: src/iac_code/ui/repl.py:447
1117
+ #, python-brace-format
1118
+ msgid "Unknown command: /{name}. Type /help for available commands."
1119
+ msgstr "未知命令:/{name}。输入 /help 查看可用命令。"
1120
+
1121
+ #: src/iac_code/ui/repl.py:471 src/iac_code/ui/repl.py:503
1122
+ #, python-brace-format
1123
+ msgid "Command error: {error}"
1124
+ msgstr "命令错误:{error}"
1125
+
1126
+ #: src/iac_code/ui/repl.py:478
1127
+ #, python-brace-format
1128
+ msgid "Command has no handler: {name}"
1129
+ msgstr "命令没有处理器:{name}"
1130
+
1131
+ #: src/iac_code/ui/repl.py:628
1132
+ #, python-brace-format
1133
+ msgid "Session not found: {session_id}"
1134
+ msgstr "会话不存在:{session_id}"
1135
+
1136
+ #: src/iac_code/ui/repl.py:647
1137
+ #, python-brace-format
1138
+ msgid ""
1139
+ "This session belongs to a different directory.\n"
1140
+ "To resume, run:\n"
1141
+ " {cmd}"
1142
+ msgstr ""
1143
+ "该会话属于另一个目录。\n"
1144
+ "请运行以下命令恢复:\n"
1145
+ " {cmd}"
1146
+
1147
+ #: src/iac_code/ui/repl.py:686
1148
+ msgid "This conversation is from a different directory."
1149
+ msgstr "该会话来自另一个目录。"
1150
+
1151
+ #: src/iac_code/ui/repl.py:688
1152
+ msgid "To resume, run:"
1153
+ msgstr "请运行以下命令恢复:"
1154
+
1155
+ #: src/iac_code/ui/repl.py:693
1156
+ msgid "(Command copied to clipboard)"
1157
+ msgstr "(命令已复制到剪贴板)"
1158
+
1159
+ #: src/iac_code/ui/spinner.py:53
1160
+ msgid "Thinking"
1161
+ msgstr "思考中"
1162
+
1163
+ #: src/iac_code/ui/spinner.py:54
1164
+ msgid "Processing"
1165
+ msgstr "处理中"
1166
+
1167
+ #: src/iac_code/ui/spinner.py:55
1168
+ msgid "Working"
1169
+ msgstr "工作中"
1170
+
1171
+ #: src/iac_code/ui/spinner.py:64
1172
+ msgid "Thought"
1173
+ msgstr "已思考"
1174
+
1175
+ #: src/iac_code/ui/spinner.py:65
1176
+ msgid "Processed"
1177
+ msgstr "已处理"
1178
+
1179
+ #: src/iac_code/ui/spinner.py:66
1180
+ msgid "Worked"
1181
+ msgstr "已完成"
1182
+
1183
+ #: src/iac_code/ui/transcript_view.py:158
1184
+ msgid "Prompt:"
1185
+ msgstr "提示词:"
1186
+
1187
+ #: src/iac_code/ui/transcript_view.py:186
1188
+ msgid "Showing transcript · ctrl+o to toggle"
1189
+ msgstr "显示完整记录 · 按 ctrl+o 切换"
1190
+
1191
+ #: src/iac_code/ui/components/fuzzy_picker.py:120
1192
+ msgid "No matches found"
1193
+ msgstr "未找到匹配项"
1194
+
1195
+ #: src/iac_code/ui/core/prompt_input.py:373
1196
+ msgid "Fill"
1197
+ msgstr "填充"
1198
+
1199
+ #: src/iac_code/ui/core/prompt_input.py:373
1200
+ msgid "Dismiss"
1201
+ msgstr "关闭"
1202
+
1203
+ #: src/iac_code/ui/dialogs/global_search.py:54
1204
+ msgid "No matching content"
1205
+ msgstr "没有匹配的内容"
1206
+
1207
+ #: src/iac_code/ui/dialogs/global_search.py:60
1208
+ msgid "Search in Files"
1209
+ msgstr "在文件中搜索"
1210
+
1211
+ #: src/iac_code/ui/dialogs/global_search.py:61
1212
+ msgid "Type to search content..."
1213
+ msgstr "输入以搜索内容..."
1214
+
1215
+ #: src/iac_code/ui/dialogs/global_search.py:62
1216
+ msgid "Enter search query"
1217
+ msgstr "输入搜索查询"
1218
+
1219
+ #: src/iac_code/ui/dialogs/history_search.py:55
1220
+ msgid "Search Conversation History"
1221
+ msgstr "搜索对话历史"
1222
+
1223
+ #: src/iac_code/ui/dialogs/history_search.py:56
1224
+ msgid "Type to search..."
1225
+ msgstr "输入以搜索..."
1226
+
1227
+ #: src/iac_code/ui/dialogs/history_search.py:57
1228
+ msgid "No conversation history"
1229
+ msgstr "没有对话历史"
1230
+
1231
+ #: src/iac_code/ui/dialogs/history_search.py:98
1232
+ msgid "Message Preview"
1233
+ msgstr "消息预览"
1234
+
1235
+ #: src/iac_code/ui/dialogs/quick_open.py:58
1236
+ msgid "Open File"
1237
+ msgstr "打开文件"
1238
+
1239
+ #: src/iac_code/ui/dialogs/quick_open.py:59
1240
+ msgid "Type to search files..."
1241
+ msgstr "输入以搜索文件..."
1242
+
1243
+ #: src/iac_code/ui/dialogs/quick_open.py:60
1244
+ msgid "No matching files"
1245
+ msgstr "没有匹配的文件"
1246
+
1247
+ #: src/iac_code/ui/dialogs/resume_picker.py:114
1248
+ msgid "Search..."
1249
+ msgstr "搜索…"
1250
+
1251
+ #: src/iac_code/ui/dialogs/resume_picker.py:359
1252
+ msgid "Resume Session"
1253
+ msgstr "恢复会话"
1254
+
1255
+ #: src/iac_code/ui/dialogs/resume_picker.py:369
1256
+ msgid "No sessions found"
1257
+ msgstr "未找到会话"
1258
+
1259
+ #: src/iac_code/ui/dialogs/resume_picker.py:427
1260
+ msgid "show current dir"
1261
+ msgstr "显示当前目录"
1262
+
1263
+ #: src/iac_code/ui/dialogs/resume_picker.py:429
1264
+ msgid "show all projects"
1265
+ msgstr "显示所有项目"
1266
+
1267
+ #: src/iac_code/ui/dialogs/resume_picker.py:432
1268
+ msgid "show all branches"
1269
+ msgstr "显示所有分支"
1270
+
1271
+ #: src/iac_code/ui/dialogs/resume_picker.py:434
1272
+ msgid "only show current branch"
1273
+ msgstr "仅显示当前分支"
1274
+
1275
+ #: src/iac_code/ui/dialogs/resume_picker.py:435
1276
+ msgid "preview"
1277
+ msgstr "预览"
1278
+
1279
+ #: src/iac_code/ui/dialogs/resume_picker.py:436
1280
+ msgid "Type to search"
1281
+ msgstr "输入以搜索"
1282
+
1283
+ #: src/iac_code/ui/dialogs/resume_picker.py:437
1284
+ msgid "cancel"
1285
+ msgstr "取消"
1286
+
1287
+ #: src/iac_code/ui/dialogs/resume_picker.py:552
1288
+ #, python-brace-format
1289
+ msgid "{n} more line{s}"
1290
+ msgstr "还有 {n} 行"
1291
+
1292
+ #: src/iac_code/ui/dialogs/resume_picker.py:566
1293
+ #, python-brace-format
1294
+ msgid "{n} message{s}"
1295
+ msgstr "{n} 条消息"
1296
+
1297
+ #: src/iac_code/ui/dialogs/resume_picker.py:580
1298
+ msgid "resume"
1299
+ msgstr "恢复"
1300
+
1301
+ #: src/iac_code/ui/dialogs/resume_picker.py:584
1302
+ msgid "back"
1303
+ msgstr "返回"
1304
+
1305
+ #: src/iac_code/ui/dialogs/resume_picker.py:589
1306
+ msgid "scroll"
1307
+ msgstr "滚动"
1308
+
1309
+ #: src/iac_code/ui/dialogs/resume_picker.py:608
1310
+ msgid "(empty session)"
1311
+ msgstr "(空会话)"
1312
+
1313
+ #: src/iac_code/ui/dialogs/resume_picker.py:728
1314
+ msgid "just now"
1315
+ msgstr "刚刚"
1316
+
1317
+ #: src/iac_code/ui/dialogs/resume_picker.py:731
1318
+ #, python-brace-format
1319
+ msgid "{n} minute{s} ago"
1320
+ msgstr "{n} 分钟前"
1321
+
1322
+ #: src/iac_code/ui/dialogs/resume_picker.py:734
1323
+ #, python-brace-format
1324
+ msgid "{n} hour{s} ago"
1325
+ msgstr "{n} 小时前"
1326
+
1327
+ #: src/iac_code/ui/dialogs/resume_picker.py:736
1328
+ #, python-brace-format
1329
+ msgid "{n} day{s} ago"
1330
+ msgstr "{n} 天前"
1331
+
1332
+ #~ msgid "toggle preview"
1333
+ #~ msgstr "切换预览"
1334
+
1335
+ #~ msgid "Preview"
1336
+ #~ msgstr "预览"
1337
+
1338
+ #~ msgid "{n} more line{s}"
1339
+ #~ msgstr "还有 {n} 行"
1340
+
1341
+ #~ msgid "back"
1342
+ #~ msgstr "返回"
1343
+
1344
+ #~ msgid "scroll"
1345
+ #~ msgstr "滚动"
1346
+
1347
+ #~ msgid "(empty)"
1348
+ #~ msgstr "(空)"
1349
+
1350
+ #~ msgid "back to list"
1351
+ #~ msgstr "返回列表"
1352
+
1353
+ #~ msgid "Choose [1-4]: "
1354
+ #~ msgstr "请选择 [1-4]: "
1355
+