@oneciel-ai/ciel-runtime 0.1.1 → 0.2.0

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 (287) hide show
  1. package/README.md +132 -0
  2. package/ciel-runtime-menu.py +56 -6
  3. package/ciel_runtime.py +9379 -35909
  4. package/ciel_runtime_support/advisor_client.py +193 -0
  5. package/ciel_runtime_support/advisor_policy.py +320 -0
  6. package/ciel_runtime_support/advisor_refinement.py +160 -0
  7. package/ciel_runtime_support/advisor_request_builder.py +261 -0
  8. package/ciel_runtime_support/agy_installer.py +169 -0
  9. package/ciel_runtime_support/agy_mcp_restore.py +182 -0
  10. package/ciel_runtime_support/anthropic_model_policy.py +186 -0
  11. package/ciel_runtime_support/anthropic_response_writer.py +255 -0
  12. package/ciel_runtime_support/anthropic_tool_turns.py +130 -0
  13. package/ciel_runtime_support/api_key_cooldown.py +159 -0
  14. package/ciel_runtime_support/architecture.py +488 -1
  15. package/ciel_runtime_support/architecture_budget.py +42 -0
  16. package/ciel_runtime_support/channel_backlog.py +90 -0
  17. package/ciel_runtime_support/channel_cli.py +119 -0
  18. package/ciel_runtime_support/channel_compact_injection.py +82 -0
  19. package/ciel_runtime_support/channel_compact_poll.py +67 -0
  20. package/ciel_runtime_support/channel_compact_request_repository.py +113 -0
  21. package/ciel_runtime_support/channel_config_service.py +281 -0
  22. package/ciel_runtime_support/channel_connection_lifecycle.py +180 -0
  23. package/ciel_runtime_support/channel_connection_registry.py +128 -0
  24. package/ciel_runtime_support/channel_connection_worker.py +284 -0
  25. package/ciel_runtime_support/channel_cursor_recovery.py +92 -0
  26. package/ciel_runtime_support/channel_cursor_repository.py +89 -0
  27. package/ciel_runtime_support/channel_cursor_service.py +178 -0
  28. package/ciel_runtime_support/channel_event_identity.py +212 -0
  29. package/ciel_runtime_support/channel_event_projection.py +315 -0
  30. package/ciel_runtime_support/channel_inflight.py +127 -0
  31. package/ciel_runtime_support/channel_injection.py +115 -0
  32. package/ciel_runtime_support/channel_launch_guard_repository.py +58 -0
  33. package/ciel_runtime_support/channel_launch_policy.py +180 -0
  34. package/ciel_runtime_support/channel_llm_context.py +156 -0
  35. package/ciel_runtime_support/channel_mcp_discovery.py +186 -0
  36. package/ciel_runtime_support/channel_mcp_http_controller.py +239 -0
  37. package/ciel_runtime_support/channel_mcp_ownership.py +148 -0
  38. package/ciel_runtime_support/channel_mcp_tools.py +240 -0
  39. package/ciel_runtime_support/channel_mcp_transport.py +394 -0
  40. package/ciel_runtime_support/channel_message_dedupe.py +65 -0
  41. package/ciel_runtime_support/channel_message_policy.py +256 -0
  42. package/ciel_runtime_support/channel_message_prompt.py +305 -0
  43. package/ciel_runtime_support/channel_message_repository.py +234 -0
  44. package/ciel_runtime_support/channel_notification_projection.py +217 -0
  45. package/ciel_runtime_support/channel_panel.py +162 -0
  46. package/ciel_runtime_support/channel_pending_injection.py +209 -0
  47. package/ciel_runtime_support/channel_pending_poll.py +109 -0
  48. package/ciel_runtime_support/channel_probe_cache.py +433 -0
  49. package/ciel_runtime_support/channel_probe_report.py +101 -0
  50. package/ciel_runtime_support/channel_runtime_environment.py +181 -0
  51. package/ciel_runtime_support/channel_session_lifecycle.py +114 -0
  52. package/ciel_runtime_support/channel_session_repository.py +90 -0
  53. package/ciel_runtime_support/channel_terminal_dispatch.py +115 -0
  54. package/ciel_runtime_support/channel_terminal_input.py +277 -0
  55. package/ciel_runtime_support/channel_terminal_proxy.py +447 -0
  56. package/ciel_runtime_support/channel_tool_context.py +166 -0
  57. package/ciel_runtime_support/channel_transcript.py +414 -0
  58. package/ciel_runtime_support/channel_transcript_repository.py +96 -0
  59. package/ciel_runtime_support/channel_wake_claim_repository.py +126 -0
  60. package/ciel_runtime_support/channel_wake_delivery_repository.py +88 -0
  61. package/ciel_runtime_support/chat_files.py +138 -0
  62. package/ciel_runtime_support/chat_http_controller.py +235 -0
  63. package/ciel_runtime_support/claude_environment.py +375 -0
  64. package/ciel_runtime_support/claude_router.py +247 -193
  65. package/ciel_runtime_support/cli_dispatch.py +792 -0
  66. package/ciel_runtime_support/cli_parser.py +165 -0
  67. package/ciel_runtime_support/cli_usage.py +100 -0
  68. package/ciel_runtime_support/codex_app_server.py +20 -5
  69. package/ciel_runtime_support/codex_channel_sse_launch.py +87 -0
  70. package/ciel_runtime_support/codex_cli.py +42 -6
  71. package/ciel_runtime_support/codex_config.py +323 -0
  72. package/ciel_runtime_support/codex_launch_configuration.py +240 -0
  73. package/ciel_runtime_support/codex_launch_policy.py +66 -0
  74. package/ciel_runtime_support/codex_mcp_integration.py +195 -0
  75. package/ciel_runtime_support/codex_mcp_restore.py +304 -0
  76. package/ciel_runtime_support/codex_model_catalog.py +133 -0
  77. package/ciel_runtime_support/codex_process_lifecycle.py +271 -0
  78. package/ciel_runtime_support/codex_router.py +147 -1
  79. package/ciel_runtime_support/codex_session_repository.py +115 -0
  80. package/ciel_runtime_support/codex_session_selection.py +114 -0
  81. package/ciel_runtime_support/command_asset_installer.py +103 -0
  82. package/ciel_runtime_support/compatibility_probe.py +295 -0
  83. package/ciel_runtime_support/compatibility_protocol.py +251 -0
  84. package/ciel_runtime_support/compatibility_runtime.py +166 -0
  85. package/ciel_runtime_support/compatibility_test.py +370 -0
  86. package/ciel_runtime_support/config_migrations.py +307 -0
  87. package/ciel_runtime_support/config_repository.py +175 -0
  88. package/ciel_runtime_support/config_value_codec.py +64 -0
  89. package/ciel_runtime_support/configuration_cli.py +374 -0
  90. package/ciel_runtime_support/context_compaction.py +280 -0
  91. package/ciel_runtime_support/context_setup.py +208 -0
  92. package/ciel_runtime_support/context_summary_policy.py +392 -0
  93. package/ciel_runtime_support/credential_cli.py +104 -0
  94. package/ciel_runtime_support/credential_management.py +261 -0
  95. package/ciel_runtime_support/credentials.py +269 -0
  96. package/ciel_runtime_support/executable_discovery.py +141 -0
  97. package/ciel_runtime_support/github_copilot_oauth.py +335 -0
  98. package/ciel_runtime_support/github_copilot_oauth_runtime.py +213 -0
  99. package/ciel_runtime_support/header_forwarding.py +73 -0
  100. package/ciel_runtime_support/headless_config.py +221 -0
  101. package/ciel_runtime_support/http_response.py +129 -0
  102. package/ciel_runtime_support/install_diagnostics.py +149 -0
  103. package/ciel_runtime_support/kimi_identity.py +123 -0
  104. package/ciel_runtime_support/launch_diagnostics.py +204 -0
  105. package/ciel_runtime_support/launch_state.py +127 -0
  106. package/ciel_runtime_support/live_api_key_controller.py +58 -0
  107. package/ciel_runtime_support/llm_config_http.py +148 -0
  108. package/ciel_runtime_support/llm_option_config.py +259 -0
  109. package/ciel_runtime_support/llm_presentation_data.py +447 -0
  110. package/ciel_runtime_support/llm_presets.py +773 -0
  111. package/ciel_runtime_support/lm_studio_runtime.py +401 -0
  112. package/ciel_runtime_support/managed_mcp_config.py +144 -0
  113. package/ciel_runtime_support/managed_mcp_discovery.py +151 -0
  114. package/ciel_runtime_support/managed_service_cleanup.py +89 -0
  115. package/ciel_runtime_support/mcp_config_reader.py +230 -0
  116. package/ciel_runtime_support/mcp_http_proxy.py +607 -0
  117. package/ciel_runtime_support/mcp_inventory.py +59 -0
  118. package/ciel_runtime_support/mcp_notification_wait_policy.py +159 -0
  119. package/ciel_runtime_support/mcp_probe_codec.py +136 -0
  120. package/ciel_runtime_support/mcp_probe_transport.py +328 -0
  121. package/ciel_runtime_support/mcp_proxy_codec.py +345 -0
  122. package/ciel_runtime_support/mcp_proxy_config.py +107 -0
  123. package/ciel_runtime_support/mcp_proxy_notifications.py +261 -0
  124. package/ciel_runtime_support/mcp_proxy_process.py +560 -0
  125. package/ciel_runtime_support/mcp_split_proxy_http.py +165 -0
  126. package/ciel_runtime_support/mcp_stdio_probe.py +240 -0
  127. package/ciel_runtime_support/mcp_transport.py +146 -0
  128. package/ciel_runtime_support/model_cache_lifecycle.py +78 -0
  129. package/ciel_runtime_support/model_catalog_projection.py +61 -0
  130. package/ciel_runtime_support/model_context_hints.py +109 -0
  131. package/ciel_runtime_support/model_panel.py +147 -0
  132. package/ciel_runtime_support/model_registry_repository.py +231 -0
  133. package/ciel_runtime_support/npm_runtime.py +191 -0
  134. package/ciel_runtime_support/ollama_catalog.py +462 -0
  135. package/ciel_runtime_support/ollama_catalog_cli.py +41 -0
  136. package/ciel_runtime_support/ollama_catalog_repository.py +75 -0
  137. package/ciel_runtime_support/ollama_context_sync.py +87 -0
  138. package/ciel_runtime_support/ollama_forwarding.py +449 -0
  139. package/ciel_runtime_support/openai_chat_passthrough.py +67 -0
  140. package/ciel_runtime_support/openai_chat_router.py +64 -0
  141. package/ciel_runtime_support/openai_forwarding.py +194 -0
  142. package/ciel_runtime_support/openai_responses_router.py +291 -0
  143. package/ciel_runtime_support/openai_responses_stream.py +135 -0
  144. package/ciel_runtime_support/output_budget.py +89 -0
  145. package/ciel_runtime_support/package_lifecycle.py +217 -0
  146. package/ciel_runtime_support/plan_artifact_controller.py +104 -0
  147. package/ciel_runtime_support/prelaunch.py +959 -0
  148. package/ciel_runtime_support/prelaunch_launch_preference.py +75 -0
  149. package/ciel_runtime_support/prelaunch_panel_projection.py +396 -0
  150. package/ciel_runtime_support/prelaunch_terminal.py +764 -0
  151. package/ciel_runtime_support/process_control.py +708 -0
  152. package/ciel_runtime_support/prompt_compaction.py +322 -0
  153. package/ciel_runtime_support/prompt_injection.py +176 -0
  154. package/ciel_runtime_support/protocols/__init__.py +24 -0
  155. package/ciel_runtime_support/protocols/anthropic_content.py +29 -0
  156. package/ciel_runtime_support/protocols/anthropic_thinking_policy.py +336 -0
  157. package/ciel_runtime_support/protocols/chat_projection.py +315 -0
  158. package/ciel_runtime_support/protocols/conversation_policy.py +217 -0
  159. package/ciel_runtime_support/protocols/conversation_turn_policy.py +972 -0
  160. package/ciel_runtime_support/protocols/ollama_chat.py +111 -0
  161. package/ciel_runtime_support/protocols/ollama_response.py +231 -0
  162. package/ciel_runtime_support/protocols/openai_reasoning.py +75 -0
  163. package/ciel_runtime_support/protocols/openai_responses.py +271 -0
  164. package/ciel_runtime_support/protocols/pseudo_tool_history.py +248 -0
  165. package/ciel_runtime_support/protocols/tool_result_projection.py +112 -0
  166. package/ciel_runtime_support/provider_adapters.py +160 -0
  167. package/ciel_runtime_support/provider_catalog_sources.py +316 -0
  168. package/ciel_runtime_support/provider_choice.py +201 -0
  169. package/ciel_runtime_support/provider_compatibility.py +165 -0
  170. package/ciel_runtime_support/provider_config_mutations.py +361 -0
  171. package/ciel_runtime_support/provider_configuration_service.py +162 -0
  172. package/ciel_runtime_support/provider_context.py +308 -0
  173. package/ciel_runtime_support/provider_contract_projection.py +73 -0
  174. package/ciel_runtime_support/provider_descriptor.py +82 -0
  175. package/ciel_runtime_support/provider_endpoint_policy.py +130 -0
  176. package/ciel_runtime_support/provider_endpoint_probe.py +165 -0
  177. package/ciel_runtime_support/provider_launch_endpoint.py +109 -0
  178. package/ciel_runtime_support/provider_limits.py +457 -0
  179. package/ciel_runtime_support/provider_model_identity.py +139 -0
  180. package/ciel_runtime_support/provider_model_selection.py +431 -0
  181. package/ciel_runtime_support/provider_model_specs.py +142 -0
  182. package/ciel_runtime_support/provider_models.py +263 -0
  183. package/ciel_runtime_support/provider_network.py +176 -0
  184. package/ciel_runtime_support/provider_option_cli.py +238 -0
  185. package/ciel_runtime_support/provider_option_panel.py +275 -0
  186. package/ciel_runtime_support/provider_option_status.py +192 -0
  187. package/ciel_runtime_support/provider_policy.py +101 -0
  188. package/ciel_runtime_support/provider_query_policy.py +67 -0
  189. package/ciel_runtime_support/provider_readiness.py +112 -0
  190. package/ciel_runtime_support/provider_request_access.py +131 -0
  191. package/ciel_runtime_support/provider_request_builder.py +250 -0
  192. package/ciel_runtime_support/provider_responses_passthrough.py +81 -0
  193. package/ciel_runtime_support/provider_runtime_info.py +113 -0
  194. package/ciel_runtime_support/provider_runtime_modes.py +150 -0
  195. package/ciel_runtime_support/provider_sampling_policy.py +46 -0
  196. package/ciel_runtime_support/provider_status.py +145 -0
  197. package/ciel_runtime_support/provider_timeout_policy.py +184 -0
  198. package/ciel_runtime_support/provider_tool_policy.py +145 -0
  199. package/ciel_runtime_support/providers/__init__.py +65 -0
  200. package/ciel_runtime_support/providers/anthropic.py +160 -0
  201. package/ciel_runtime_support/providers/anthropic_catalog.py +119 -0
  202. package/ciel_runtime_support/providers/base.py +232 -0
  203. package/ciel_runtime_support/providers/catalog.py +326 -0
  204. package/ciel_runtime_support/providers/cloud.py +194 -0
  205. package/ciel_runtime_support/providers/constants.py +54 -0
  206. package/ciel_runtime_support/providers/deepseek.py +115 -0
  207. package/ciel_runtime_support/providers/fireworks.py +158 -0
  208. package/ciel_runtime_support/providers/github_copilot_oauth.py +199 -0
  209. package/ciel_runtime_support/providers/kimi.py +297 -0
  210. package/ciel_runtime_support/providers/lm_studio.py +76 -0
  211. package/ciel_runtime_support/providers/meta.py +257 -0
  212. package/ciel_runtime_support/providers/native.py +194 -0
  213. package/ciel_runtime_support/providers/nim.py +69 -0
  214. package/ciel_runtime_support/providers/nvidia.py +158 -0
  215. package/ciel_runtime_support/providers/nvidia_runtime.py +285 -0
  216. package/ciel_runtime_support/providers/ollama.py +181 -0
  217. package/ciel_runtime_support/providers/ollama_context.py +195 -0
  218. package/ciel_runtime_support/providers/ollama_runtime.py +213 -0
  219. package/ciel_runtime_support/providers/opencode.py +220 -0
  220. package/ciel_runtime_support/providers/opencode_go.py +37 -0
  221. package/ciel_runtime_support/providers/openrouter.py +57 -0
  222. package/ciel_runtime_support/providers/vllm.py +65 -0
  223. package/ciel_runtime_support/providers/zai.py +119 -0
  224. package/ciel_runtime_support/pseudo_tool_parser.py +115 -0
  225. package/ciel_runtime_support/rate_limit_policy.py +117 -0
  226. package/ciel_runtime_support/rate_limit_repository.py +154 -0
  227. package/ciel_runtime_support/registry.py +46 -0
  228. package/ciel_runtime_support/request_shortcuts.py +253 -0
  229. package/ciel_runtime_support/request_trace.py +323 -0
  230. package/ciel_runtime_support/response_collection.py +209 -0
  231. package/ciel_runtime_support/router_access.py +238 -0
  232. package/ciel_runtime_support/router_client_lifecycle.py +366 -0
  233. package/ciel_runtime_support/router_health_policy.py +101 -0
  234. package/ciel_runtime_support/router_http.py +513 -0
  235. package/ciel_runtime_support/router_process_lifecycle.py +401 -0
  236. package/ciel_runtime_support/router_rate_limit_service.py +285 -0
  237. package/ciel_runtime_support/router_server_runtime.py +103 -0
  238. package/ciel_runtime_support/router_shortcuts.py +201 -0
  239. package/ciel_runtime_support/routing_fallback.py +73 -0
  240. package/ciel_runtime_support/runtime_activity_repository.py +143 -0
  241. package/ciel_runtime_support/runtime_adapters.py +104 -0
  242. package/ciel_runtime_support/runtime_command_factory.py +73 -0
  243. package/ciel_runtime_support/runtime_compatibility.py +50 -0
  244. package/ciel_runtime_support/runtime_constants.py +178 -0
  245. package/ciel_runtime_support/runtime_launch.py +1602 -0
  246. package/ciel_runtime_support/runtime_llm_options.py +312 -0
  247. package/ciel_runtime_support/runtime_logging.py +161 -0
  248. package/ciel_runtime_support/runtime_paths.py +157 -0
  249. package/ciel_runtime_support/runtime_restart.py +84 -0
  250. package/ciel_runtime_support/runtime_upgrade.py +149 -0
  251. package/ciel_runtime_support/secure_json_repository.py +55 -0
  252. package/ciel_runtime_support/session_import.py +356 -0
  253. package/ciel_runtime_support/settings_repository.py +8 -0
  254. package/ciel_runtime_support/slash_command_assets.py +211 -0
  255. package/ciel_runtime_support/sse_stream.py +57 -0
  256. package/ciel_runtime_support/sse_trace.py +225 -0
  257. package/ciel_runtime_support/statusline_script.py +593 -0
  258. package/ciel_runtime_support/statusline_settings.py +53 -0
  259. package/ciel_runtime_support/stream_chunk_policy.py +18 -0
  260. package/ciel_runtime_support/streaming_anthropic.py +1955 -0
  261. package/ciel_runtime_support/synthetic_tool_policy.py +105 -0
  262. package/ciel_runtime_support/terminal_platform_io.py +127 -0
  263. package/ciel_runtime_support/timeout_profile.py +196 -0
  264. package/ciel_runtime_support/tool_dialects.py +85 -0
  265. package/ciel_runtime_support/tool_exposure_policy.py +63 -0
  266. package/ciel_runtime_support/tool_guard_hooks.py +218 -0
  267. package/ciel_runtime_support/tool_request_projection.py +96 -0
  268. package/ciel_runtime_support/tool_schema.py +483 -0
  269. package/ciel_runtime_support/tool_side_effect_dedupe.py +95 -0
  270. package/ciel_runtime_support/ui_text.py +266 -0
  271. package/ciel_runtime_support/upstream_error_policy.py +104 -0
  272. package/ciel_runtime_support/upstream_retry.py +419 -0
  273. package/ciel_runtime_support/upstream_stream_io.py +106 -0
  274. package/ciel_runtime_support/usage_events.py +96 -0
  275. package/ciel_runtime_support/visible_stream_filters.py +130 -0
  276. package/ciel_runtime_support/web_endpoints.py +447 -0
  277. package/ciel_runtime_support/web_ui.py +915 -0
  278. package/ciel_runtime_support/web_ui_controller.py +189 -0
  279. package/ciel_runtime_support/windows_console_input.py +137 -0
  280. package/ciel_runtime_support/windows_console_mode.py +112 -0
  281. package/docs/Architecture.md +54 -0
  282. package/docs/Configuration.md +17 -0
  283. package/docs/Module-Map.md +1093 -26
  284. package/docs/Providers.md +46 -1
  285. package/docs/adr/0001-runtime-bounded-contexts.md +295 -0
  286. package/npm-bin/run-ciel-runtime.js +22 -2
  287. package/package.json +9 -2
@@ -0,0 +1,447 @@
1
+ """Immutable LLM preset and option presentation catalog."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from ciel_runtime_support.providers.constants import DEFAULT_REQUEST_TIMEOUT_MS
6
+
7
+ LLM_PRESETS: dict[str, tuple[str, str]] = {
8
+ "balanced": ("Balanced Claude Code", "4K output, stable coding/chat defaults"),
9
+ "coding": ("Coding deterministic", "lower randomness for edits, scripts, reviews"),
10
+ "fast": ("Fast short tasks", "shorter output and timeout for quick jobs"),
11
+ "long-context-65k": ("Long context 65K", "65K context target, 4K output reserve"),
12
+ "long-context-128k": ("Long context 128K", "64K-128K context target, 4K-8K output reserve"),
13
+ "long-context-256k": ("Long context 256K", "256K context target, 8K output reserve"),
14
+ "long-context-300k": ("Long context 300K", "300K context target, 8K output reserve"),
15
+ "long-context-512k": ("Long context 512K", "512K context target, 8K output reserve"),
16
+ "million-context-1m": ("Ultra context 1M", "1M context target for high-capacity models"),
17
+ "large-output": ("Large output/report", "larger 8K output for summaries/reports"),
18
+ "reasoning": ("Reasoning model", "reasoning-friendly sampling"),
19
+ "novelist": ("Novelist", "creative prose, voice, scenes, and narrative continuity"),
20
+ "humanities-researcher": ("Humanities researcher", "interpretive research, close reading, and long evidence chains"),
21
+ "mathematician": ("Mathematician", "careful derivations, proofs, and low-randomness reasoning"),
22
+ "product-architect": ("Product architect", "requirements, system structure, tradeoffs, and implementation plans"),
23
+ "teacher": ("Teacher / tutor", "clear explanations, examples, and step-by-step learning"),
24
+ }
25
+
26
+
27
+ LLM_SLIDER_LABELS: dict[str, str] = {
28
+ "balanced": "balanced",
29
+ "coding": "coding",
30
+ "fast": "fast",
31
+ "long-context-65k": "65K",
32
+ "long-context-128k": "128K",
33
+ "long-context-256k": "256K",
34
+ "long-context-300k": "300K",
35
+ "long-context-512k": "512K",
36
+ "million-context-1m": "1M",
37
+ "large-output": "output",
38
+ "reasoning": "reasoning",
39
+ "novelist": "novel",
40
+ "humanities-researcher": "research",
41
+ "mathematician": "math",
42
+ "product-architect": "architect",
43
+ "teacher": "teacher",
44
+ }
45
+
46
+
47
+ LLM_PRESET_I18N: dict[str, dict[str, tuple[str, str]]] = {
48
+ "ko": {
49
+ "balanced": ("균형형 Claude Code", "4K 출력, 안정적인 코딩/채팅 기본값"),
50
+ "coding": ("코딩 결정형", "편집, 스크립트, 코드 리뷰용 낮은 무작위성"),
51
+ "fast": ("빠른 짧은 작업", "짧은 출력과 짧은 타임아웃"),
52
+ "long-context-65k": ("긴 컨텍스트 65K", "65K 컨텍스트 목표, 4K 출력 여유"),
53
+ "long-context-128k": ("긴 컨텍스트 128K", "64K-128K 컨텍스트 목표, 4K-8K 출력 여유"),
54
+ "long-context-256k": ("긴 컨텍스트 256K", "256K 컨텍스트 목표, 8K 출력 여유"),
55
+ "long-context-300k": ("긴 컨텍스트 300K", "300K 컨텍스트 목표, 8K 출력 여유"),
56
+ "long-context-512k": ("긴 컨텍스트 512K", "512K 컨텍스트 목표, 8K 출력 여유"),
57
+ "million-context-1m": ("초장문 컨텍스트 1M", "고용량 모델용 1M 컨텍스트 목표"),
58
+ "large-output": ("긴 출력/리포트", "요약과 리포트용 8K 출력"),
59
+ "reasoning": ("추론 모델", "추론 친화 샘플링"),
60
+ "novelist": ("소설가", "문체, 서사, 장면 전개를 위한 창작 설정"),
61
+ "humanities-researcher": ("인문연구자", "해석, 근거 정리, 긴 문헌 맥락"),
62
+ "mathematician": ("수학자", "낮은 무작위성과 단계적 증명/유도"),
63
+ "product-architect": ("제품 설계자", "요구사항, 구조, 트레이드오프, 구현 계획"),
64
+ "teacher": ("교사/튜터", "쉬운 설명, 예제, 단계별 학습"),
65
+ },
66
+ "ja": {
67
+ "balanced": ("バランス型 Claude Code", "4K 出力、安定したコーディング/チャット既定値"),
68
+ "coding": ("コーディング決定型", "編集、スクリプト、コードレビュー向けの低いランダム性"),
69
+ "fast": ("高速な短い作業", "短い出力と短いタイムアウト"),
70
+ "long-context-65k": ("長いコンテキスト 65K", "65K コンテキスト目標、4K 出力予約"),
71
+ "long-context-128k": ("長いコンテキスト 128K", "64K-128K コンテキスト目標、4K-8K 出力予約"),
72
+ "long-context-256k": ("長いコンテキスト 256K", "256K コンテキスト目標、8K 出力予約"),
73
+ "long-context-300k": ("長いコンテキスト 300K", "300K コンテキスト目標、8K 出力予約"),
74
+ "long-context-512k": ("長いコンテキスト 512K", "512K コンテキスト目標、8K 出力予約"),
75
+ "million-context-1m": ("超長文コンテキスト 1M", "大容量モデル向けの 1M コンテキスト目標"),
76
+ "large-output": ("長い出力/レポート", "要約とレポート向けの 8K 出力"),
77
+ "reasoning": ("推論モデル", "推論向けサンプリング"),
78
+ "novelist": ("小説家", "文体、物語、場面展開向けの創作設定"),
79
+ "humanities-researcher": ("人文学研究者", "解釈、根拠整理、長い文献文脈"),
80
+ "mathematician": ("数学者", "低いランダム性と段階的な証明/導出"),
81
+ "product-architect": ("プロダクト設計者", "要件、構造、トレードオフ、実装計画"),
82
+ "teacher": ("教師/チューター", "分かりやすい説明、例、段階的学習"),
83
+ },
84
+ "zh": {
85
+ "balanced": ("均衡型 Claude Code", "4K 输出,稳定的编码/聊天默认值"),
86
+ "coding": ("编码确定型", "用于编辑、脚本和代码审查的低随机性"),
87
+ "fast": ("快速短任务", "较短输出和较短超时"),
88
+ "long-context-65k": ("长上下文 65K", "65K 上下文目标,4K 输出预留"),
89
+ "long-context-128k": ("长上下文 128K", "64K-128K 上下文目标,4K-8K 输出预留"),
90
+ "long-context-256k": ("长上下文 256K", "256K 上下文目标,8K 输出预留"),
91
+ "long-context-300k": ("长上下文 300K", "300K 上下文目标,8K 输出预留"),
92
+ "long-context-512k": ("长上下文 512K", "512K 上下文目标,8K 输出预留"),
93
+ "million-context-1m": ("超长上下文 1M", "面向高容量模型的 1M 上下文目标"),
94
+ "large-output": ("长输出/报告", "用于摘要和报告的 8K 输出"),
95
+ "reasoning": ("推理模型", "适合推理的采样"),
96
+ "novelist": ("小说家", "面向文风、叙事、场景推进的创作设置"),
97
+ "humanities-researcher": ("人文学研究者", "解释性研究、证据整理和长文献上下文"),
98
+ "mathematician": ("数学家", "低随机性、逐步证明和推导"),
99
+ "product-architect": ("产品架构师", "需求、系统结构、取舍和实现计划"),
100
+ "teacher": ("教师/导师", "清晰解释、示例和分步学习"),
101
+ },
102
+ }
103
+
104
+
105
+ TIMEOUT_PRESETS: dict[str, tuple[int, str, str]] = {
106
+ "timeout-fast": (120000, "Fast retry 2m", "short wait, quick retry on stalled providers"),
107
+ "timeout-standard": (300000, "Standard 5m", "balanced wait for normal cloud coding"),
108
+ "timeout-long": (600000, "Long stream 10m", "large edits or slow streamed responses"),
109
+ "timeout-deep": (1200000, "Deep work 20m", "long reasoning, reports, and big context"),
110
+ "timeout-marathon": (3600000, "Marathon 60m", "very long hosted/model-server jobs"),
111
+ }
112
+
113
+
114
+ TIMEOUT_PRESET_I18N: dict[str, dict[str, tuple[str, str]]] = {
115
+ "ko": {
116
+ "timeout-fast": ("빠른 재시도 2분", "멈춘 provider를 빨리 감지"),
117
+ "timeout-standard": ("표준 5분", "일반 클라우드 코딩용 균형값"),
118
+ "timeout-long": ("긴 스트림 10분", "큰 편집 또는 느린 스트리밍 응답"),
119
+ "timeout-deep": ("깊은 작업 20분", "긴 추론, 리포트, 큰 컨텍스트"),
120
+ "timeout-marathon": ("장시간 60분", "매우 긴 hosted/model-server 작업"),
121
+ },
122
+ "ja": {
123
+ "timeout-fast": ("高速 retry 2分", "停止した provider を早く検出"),
124
+ "timeout-standard": ("標準 5分", "通常のクラウド coding 向け"),
125
+ "timeout-long": ("長い stream 10分", "大きな編集や遅い streamed 応答"),
126
+ "timeout-deep": ("深い作業 20分", "長い推論、report、大きな context"),
127
+ "timeout-marathon": ("長時間 60分", "非常に長い hosted/model-server 作業"),
128
+ },
129
+ "zh": {
130
+ "timeout-fast": ("快速重试 2分钟", "快速发现卡住的 provider"),
131
+ "timeout-standard": ("标准 5分钟", "普通云端编码的均衡值"),
132
+ "timeout-long": ("长流式 10分钟", "大型编辑或较慢流式响应"),
133
+ "timeout-deep": ("深度工作 20分钟", "长推理、报告和大上下文"),
134
+ "timeout-marathon": ("超长 60分钟", "很长的 hosted/model-server 任务"),
135
+ },
136
+ }
137
+
138
+
139
+ LLM_PRESET_TIMEOUT_MS: dict[str, int] = {
140
+ "balanced": DEFAULT_REQUEST_TIMEOUT_MS,
141
+ "coding": DEFAULT_REQUEST_TIMEOUT_MS,
142
+ "fast": 120000,
143
+ "long-context-65k": DEFAULT_REQUEST_TIMEOUT_MS,
144
+ "long-context-128k": 600000,
145
+ "long-context-256k": 600000,
146
+ "long-context-300k": 600000,
147
+ "long-context-512k": 600000,
148
+ "million-context-1m": 600000,
149
+ "large-output": 600000,
150
+ "reasoning": 600000,
151
+ "novelist": 600000,
152
+ "humanities-researcher": 600000,
153
+ "mathematician": 600000,
154
+ "product-architect": 600000,
155
+ "teacher": 300000,
156
+ }
157
+
158
+
159
+ CONTEXT_HEAVY_PRESETS = {
160
+ "long-context-65k",
161
+ "long-context-128k",
162
+ "long-context-256k",
163
+ "long-context-300k",
164
+ "long-context-512k",
165
+ "million-context-1m",
166
+ "large-output",
167
+ "reasoning",
168
+ "novelist",
169
+ "humanities-researcher",
170
+ "mathematician",
171
+ "product-architect",
172
+ "teacher",
173
+ }
174
+
175
+
176
+ AUTO_TIMEOUT_MIN_MS = 120000
177
+
178
+
179
+ AUTO_TIMEOUT_MAX_MS = 600000
180
+
181
+
182
+ AUTO_TIMEOUT_ROUND_MS = 30000
183
+
184
+
185
+ MODEL_FAMILY_I18N: dict[str, dict[str, str]] = {
186
+ "ko": {
187
+ "coding": "코딩",
188
+ "reasoning": "추론",
189
+ "million-context": "1M 컨텍스트",
190
+ "large": "대형 모델",
191
+ "long-context": "긴 컨텍스트",
192
+ "general": "일반",
193
+ },
194
+ "ja": {
195
+ "coding": "コーディング",
196
+ "reasoning": "推論",
197
+ "million-context": "1M コンテキスト",
198
+ "large": "大型モデル",
199
+ "long-context": "長いコンテキスト",
200
+ "general": "汎用",
201
+ },
202
+ "zh": {
203
+ "coding": "编码",
204
+ "reasoning": "推理",
205
+ "million-context": "1M 上下文",
206
+ "large": "大型模型",
207
+ "long-context": "长上下文",
208
+ "general": "通用",
209
+ },
210
+ }
211
+
212
+
213
+ RUNTIME_LLM_ORIGINAL_KEY = "runtime_llm_original_options"
214
+
215
+
216
+ RUNTIME_LLM_OPTION_KEYS = {
217
+ "llm_preset",
218
+ "context_window",
219
+ "context_reserve_tokens",
220
+ "max_output_tokens",
221
+ "request_timeout_ms",
222
+ "stream_idle_timeout_ms",
223
+ "temperature",
224
+ "top_p",
225
+ "top_k",
226
+ "native_compat",
227
+ "stream_enabled",
228
+ "stream_word_chunking",
229
+ "num_ctx",
230
+ "num_ctx_min",
231
+ "num_ctx_max",
232
+ "keep_alive",
233
+ "think",
234
+ "ollama_options",
235
+ "rate_limit_rpm",
236
+ "rate_limit_status",
237
+ "force_query_string",
238
+ "supports_tool_choice",
239
+ "ip_family",
240
+ "model_context_max",
241
+ "model_context_model",
242
+ "max_model_len",
243
+ }
244
+
245
+
246
+ LLM_OPTION_DESCRIPTIONS: dict[str, dict[str, str]] = {
247
+ "preset": {
248
+ "en": "Apply a bundled LLM preset (output tokens, sampling, timeout) tuned for this provider/model family.",
249
+ "ko": "현재 provider/모델 계열에 맞춘 LLM 프리셋(출력 토큰, 샘플링, 타임아웃)을 한 번에 적용합니다.",
250
+ "ja": "現在のprovider/モデル系列向けに調整されたLLMプリセット(出力トークン、サンプリング、タイムアウト)を一括適用します。",
251
+ "zh": "应用为当前 provider/模型系列调优的 LLM 预设(输出 token、采样、超时)。",
252
+ },
253
+ "context_setup": {
254
+ "en": "Begin here: choose how much of the selected model's context window ciel-runtime may use. Larger windows read more files/history but cost more time and provider quota.",
255
+ "ko": "처음엔 여기부터 설정하세요. 선택한 모델의 컨텍스트 창을 ciel-runtime가 얼마나 사용할지 고릅니다. 클수록 파일/히스토리를 더 많이 읽지만 느리고 provider 한도를 더 씁니다.",
256
+ "ja": "まずここから設定します。選択モデルのコンテキスト窓をciel-runtimeがどれだけ使うかを選びます。大きいほど多くのファイル/履歴を読めますが、遅くなりprovider枠を使います。",
257
+ "zh": "先从这里设置:选择 ciel-runtime 可使用所选模型多少上下文窗口。越大可读更多文件/历史,但更慢并消耗 provider 配额。",
258
+ },
259
+ "num_ctx": {
260
+ "en": "Ollama context window (num_ctx). Use 'auto' to size per-request between min/max, or a fixed integer like 65536.",
261
+ "ko": "Ollama 컨텍스트 창(num_ctx). auto 면 요청 크기에 따라 min/max 사이에서 자동 선택, 또는 65536 같은 고정 정수.",
262
+ "ja": "Ollamaのコンテキスト窓(num_ctx)。autoでmin/max間を要求毎に自動選択、または65536のような固定整数を指定。",
263
+ "zh": "Ollama 上下文窗口(num_ctx)。auto 在 min/max 间按请求自动选择,或填固定整数如 65536。",
264
+ },
265
+ "num_ctx_min": {
266
+ "en": "Lower bound when num_ctx is auto. Small requests will not go below this value.",
267
+ "ko": "num_ctx=auto일 때 사용할 최소 컨텍스트. 작은 요청도 이 값보다 작게 내려가지 않습니다.",
268
+ "ja": "num_ctx=auto時の最小コンテキスト。小さな要求でもこの値未満にはなりません。",
269
+ "zh": "num_ctx=auto 时的下限。小请求也不会低于此值。",
270
+ },
271
+ "num_ctx_max": {
272
+ "en": "Upper bound when num_ctx is auto. Keep at or below the real server context limit.",
273
+ "ko": "num_ctx=auto일 때 사용할 최대 컨텍스트. 실제 서버 한계 이하로 두세요.",
274
+ "ja": "num_ctx=auto時の最大コンテキスト。実サーバー上限以下にしてください。",
275
+ "zh": "num_ctx=auto 时的上限。应不高于真实服务器上下文上限。",
276
+ },
277
+ "num_predict": {
278
+ "en": "Ollama max output tokens (num_predict). Input + reserved output must fit inside num_ctx.",
279
+ "ko": "Ollama 최대 출력 토큰(num_predict). 입력 + 예약 출력이 num_ctx 안에 들어가야 합니다.",
280
+ "ja": "Ollamaの最大出力トークン(num_predict)。入力と予約出力はnum_ctxの中に収まる必要があります。",
281
+ "zh": "Ollama 最大输出 token(num_predict)。输入加预留输出必须放进 num_ctx。",
282
+ },
283
+ "max_output_tokens": {
284
+ "en": "Max output tokens passed to Claude Code (CLAUDE_CODE_MAX_OUTPUT_TOKENS) and used as the router cap.",
285
+ "ko": "Claude Code에 전달되는 최대 출력 토큰(CLAUDE_CODE_MAX_OUTPUT_TOKENS)이자 라우터 출력 상한.",
286
+ "ja": "Claude Codeへ渡す最大出力トークン(CLAUDE_CODE_MAX_OUTPUT_TOKENS)であり、ルーター出力上限としても使われます。",
287
+ "zh": "传给 Claude Code 的最大输出 token(CLAUDE_CODE_MAX_OUTPUT_TOKENS),同时作为路由器输出上限。",
288
+ },
289
+ "context_window": {
290
+ "en": "vLLM/NIM context window used by ciel-runtime caps. Native mode cannot raise the real server limit.",
291
+ "ko": "ciel-runtime 라우터가 사용하는 vLLM/NIM 컨텍스트 값. native 모드에서는 실제 서버 한계를 늘릴 수 없습니다.",
292
+ "ja": "ciel-runtimeルーターが使うvLLM/NIMコンテキスト値。nativeモードでは実サーバー上限は超えられません。",
293
+ "zh": "ciel-runtime 路由器使用的 vLLM/NIM 上下文值。native 模式无法提高真实服务器上限。",
294
+ },
295
+ "context_reserve_tokens": {
296
+ "en": "Tokens reserved for the input side when ciel-runtime caps max_tokens. Ignored by direct native requests.",
297
+ "ko": "ciel-runtime가 max_tokens를 줄일 때 입력 쪽 여유로 남기는 토큰. direct native 요청에는 적용되지 않습니다.",
298
+ "ja": "ciel-runtimeがmax_tokensを制限する時に入力側へ残す余裕。direct native要求では無視されます。",
299
+ "zh": "ciel-runtime 限制 max_tokens 时为输入侧预留的 token。direct native 请求会忽略。",
300
+ },
301
+ "request_timeout_ms": {
302
+ "en": "Upstream wait timeout in milliseconds.",
303
+ "ko": "업스트림 응답 대기 시간(ms).",
304
+ "ja": "上流応答待ちタイムアウト(ms)。",
305
+ "zh": "上游响应等待超时(毫秒)。",
306
+ },
307
+ "timeout_profile": {
308
+ "en": "Choose a timeout preset. It sets both upstream wait timeout and stream idle timeout.",
309
+ "ko": "타임아웃 프리셋을 선택합니다. 업스트림 대기 시간과 스트림 idle timeout을 함께 설정합니다.",
310
+ "ja": "timeout preset を選びます。上流待機 timeout と stream idle timeout を同時に設定します。",
311
+ "zh": "选择 timeout 预设,同时设置上游等待超时和 stream idle timeout。",
312
+ },
313
+ "stream_idle_timeout_ms": {
314
+ "en": "Maximum silence allowed while a stream is open. If no bytes arrive for this long, ciel-runtime retries or reports a timeout.",
315
+ "ko": "스트림 연결이 열린 뒤 아무 byte도 오지 않아도 기다리는 최대 시간입니다. 이 시간을 넘으면 재시도하거나 timeout으로 처리합니다.",
316
+ "ja": "stream 接続中に byte が来ないまま待つ最大時間です。超えると retry または timeout として扱います。",
317
+ "zh": "流式连接打开后允许无字节到达的最长时间;超过后重试或作为 timeout 处理。",
318
+ },
319
+ "rate_limit_rpm": {
320
+ "en": "Router-side upstream request limit per minute. Default is off; set a positive RPM to enable waiting.",
321
+ "ko": "라우터가 업스트림 요청 수를 분당 제한합니다. 기본값은 off입니다. 양수 RPM을 설정하면 대기 제한을 켭니다.",
322
+ "ja": "ルーター側の上流リクエスト数/分の制限。既定は off。正の RPM を設定すると待機制限を有効化します。",
323
+ "zh": "路由器侧上游每分钟请求限制。默认关闭;设置正数 RPM 后启用等待限制。",
324
+ },
325
+ "rate_limit_enabled": {
326
+ "en": "Toggle ciel-runtime's router-side RPM limiter. Off means rate_limit_rpm=0 and no ciel-runtime wait is inserted.",
327
+ "ko": "ciel-runtime 라우터 내부 RPM 제한을 켜거나 끕니다. off면 rate_limit_rpm=0이며 ciel-runtime가 대기 시간을 넣지 않습니다.",
328
+ "ja": "ciel-runtime ルーター側 RPM 制限を切り替えます。off は rate_limit_rpm=0 で、ciel-runtime は待機を挿入しません。",
329
+ "zh": "切换 ciel-runtime 路由器侧 RPM 限制。off 表示 rate_limit_rpm=0,ciel-runtime 不插入等待。",
330
+ },
331
+ "rate_limit_status": {
332
+ "en": "Show optional colored RPM usage status in Claude responses. Default is off.",
333
+ "ko": "Claude 응답에 RPM 사용량 상태를 색상 텍스트로 표시합니다. 기본값은 off입니다.",
334
+ "ja": "Claude応答にRPM使用量状態を色付きテキストで表示します。既定は off。",
335
+ "zh": "在 Claude 响应中显示彩色 RPM 使用量状态。默认关闭。",
336
+ },
337
+ "temperature": {
338
+ "en": "Sampling temperature (0..2). Higher is more varied; lower is more deterministic.",
339
+ "ko": "샘플링 temperature (0~2). 높을수록 다양, 낮을수록 결정적.",
340
+ "ja": "サンプリングtemperature (0〜2)。高いほど多様、低いほど決定的。",
341
+ "zh": "采样 temperature(0..2)。越高越多样,越低越确定。",
342
+ },
343
+ "top_p": {
344
+ "en": "Nucleus sampling top_p (0..1). Lower restricts token choices; 0.8 is a moderate default.",
345
+ "ko": "누적 확률 top_p (0~1). 낮을수록 후보 토큰을 좁힘. 0.8 정도가 적당한 기본값.",
346
+ "ja": "nucleus samplingのtop_p (0〜1)。低いほど候補を絞ります。0.8は中程度の既定値。",
347
+ "zh": "nucleus 采样 top_p(0..1)。越低候选越窄;0.8 是中等默认值。",
348
+ },
349
+ "top_k": {
350
+ "en": "Top-K sampling cutoff. Smaller values pick from a tighter token shortlist.",
351
+ "ko": "Top-K 샘플링. 값이 작을수록 후보 토큰 집합이 좁아집니다.",
352
+ "ja": "Top-Kサンプリング。値が小さいほど候補集合は狭くなります。",
353
+ "zh": "Top-K 采样。值越小候选集合越窄。",
354
+ },
355
+ "think": {
356
+ "en": "Toggle Ollama 'think' output. Claude Code may not display provider-specific thinking cleanly.",
357
+ "ko": "Ollama thinking 출력 여부. Claude Code가 provider별 thinking을 항상 깔끔히 표시하지는 않습니다.",
358
+ "ja": "Ollama thinking出力を切り替えます。Claude Code側で常に綺麗に表示されるとは限りません。",
359
+ "zh": "切换 Ollama thinking 输出。Claude Code 不一定能完整显示。",
360
+ },
361
+ "keep_alive": {
362
+ "en": "How long Ollama keeps the model loaded after a request. Longer reduces reloads but holds memory.",
363
+ "ko": "요청 후 Ollama가 모델을 메모리에 유지하는 시간. 길수록 재로딩은 줄지만 메모리를 더 잡습니다.",
364
+ "ja": "要求後にOllamaがモデルを保持する時間。長いほど再読み込みは減りますがメモリを保持します。",
365
+ "zh": "请求后 Ollama 保持模型加载的时间。越长减少重载,但占用内存更久。",
366
+ },
367
+ "native_compat": {
368
+ "en": "Use direct Anthropic-compatible /v1/messages on this provider. Off routes through ciel-runtime's translator.",
369
+ "ko": "이 provider의 Anthropic-호환 /v1/messages에 직접 연결합니다. off 면 ciel-runtime 라우터를 거칩니다.",
370
+ "ja": "このproviderのAnthropic互換/v1/messagesに直接接続します。offだとciel-runtimeルーターを経由します。",
371
+ "zh": "对该 provider 直接走 Anthropic 兼容 /v1/messages;关闭则经由 ciel-runtime 路由器转换。",
372
+ },
373
+ "supports_tool_choice": {
374
+ "en": "Forward Claude Code tool_choice upstream. For vLLM, enable only when the server was launched with --enable-auto-tool-choice and the matching --tool-call-parser.",
375
+ "ko": "Claude Code의 tool_choice를 upstream에 전달합니다. vLLM은 서버를 --enable-auto-tool-choice 및 모델에 맞는 --tool-call-parser로 실행한 경우에만 켜세요.",
376
+ "ja": "Claude Code の tool_choice を上流へ転送します。vLLM では --enable-auto-tool-choice と対応する --tool-call-parser で起動した場合のみ有効にしてください。",
377
+ "zh": "将 Claude Code 的 tool_choice 转发到上游。vLLM 仅在服务器使用 --enable-auto-tool-choice 和匹配的 --tool-call-parser 启动时启用。",
378
+ },
379
+ "stream_enabled": {
380
+ "en": "Toggle streaming. Off forces stream:false upstream and returns the full response, useful when SSE fragmentation causes tool-call/JSON parse errors.",
381
+ "ko": "스트리밍 on/off. off면 업스트림에 stream:false를 강제하고 응답 전체를 받습니다. SSE 단편화로 tool-call/JSON 파싱이 실패할 때 유용합니다.",
382
+ "ja": "ストリーミングを切り替えます。offにすると上流にstream:falseを強制し、応答全体を返します。SSE断片化でtool-call/JSONが失敗する時に有効です。",
383
+ "zh": "切换流式输出。off 时强制对上游 stream:false 并返回完整响应;用于 SSE 分片导致的 tool-call/JSON 解析失败。",
384
+ },
385
+ "stream_word_chunking": {
386
+ "en": "Buffer text deltas at whitespace/word boundaries before flushing the SSE event. Tool deltas pass through unchanged.",
387
+ "ko": "텍스트 delta를 공백/단어 경계까지 모아서 SSE 이벤트로 전송. tool delta는 그대로 통과합니다.",
388
+ "ja": "テキストdeltaを空白/単語境界までバッファしてSSEイベントを送信します。tool deltaはそのまま透過します。",
389
+ "zh": "在空白/单词边界处合并文本 delta 后发送 SSE 事件。工具 delta 原样透传。",
390
+ },
391
+ "workflows_enabled": {
392
+ "en": "Allow Claude Code dynamic workflow features through the ciel-runtime gateway. This removes the experimental-beta disable env for this launch.",
393
+ "ko": "ciel-runtime 게이트웨이 경유 상태에서 Claude Code dynamic workflow 기능을 허용합니다. 이 실행에서는 experimental beta 차단 env를 제거합니다.",
394
+ "ja": "ciel-runtime gateway 経由で Claude Code dynamic workflow 機能を許可します。この起動では experimental beta 無効化 env を外します。",
395
+ "zh": "允许 Claude Code dynamic workflow 通过 ciel-runtime gateway 工作。本次启动会移除 experimental beta 禁用环境变量。",
396
+ },
397
+ "ultracode_enabled": {
398
+ "en": "Start Claude Code with the ultracode session setting. Requires verified xhigh_effort model capability.",
399
+ "ko": "Claude Code를 ultracode 세션 설정으로 시작합니다. 검증된 xhigh_effort 모델 capability가 필요합니다.",
400
+ "ja": "Claude Code を ultracode セッション設定で起動します。検証済みの xhigh_effort model capability が必要です。",
401
+ "zh": "用 ultracode 会话设置启动 Claude Code。需要已验证的 xhigh_effort 模型 capability。",
402
+ },
403
+ "claude_code_supported_capabilities": {
404
+ "en": "Comma-separated Claude Code capability override for the selected model: effort,xhigh_effort,max_effort,thinking,adaptive_thinking,interleaved_thinking.",
405
+ "ko": "선택 모델의 Claude Code capability override입니다. 쉼표로 effort,xhigh_effort,max_effort,thinking,adaptive_thinking,interleaved_thinking 를 지정합니다.",
406
+ "ja": "選択モデルの Claude Code capability override。カンマ区切りで effort,xhigh_effort,max_effort,thinking,adaptive_thinking,interleaved_thinking を指定します。",
407
+ "zh": "所选模型的 Claude Code capability override,逗号分隔:effort,xhigh_effort,max_effort,thinking,adaptive_thinking,interleaved_thinking。",
408
+ },
409
+ "router_debug_external_access": {
410
+ "en": "Expose the router UI/API to non-local clients for debugging. Off denies external clients and next launch binds locally unless environment overrides it.",
411
+ "ko": "디버깅을 위해 라우터 UI/API를 외부 클라이언트에 노출합니다. off면 외부 요청을 차단하고 다음 실행부터 환경값이 없으면 로컬에만 바인딩합니다.",
412
+ "ja": "デバッグ用にルーター UI/API を外部クライアントへ公開します。off では外部リクエストを拒否し、次回起動時は環境変数がなければローカルのみで bind します。",
413
+ "zh": "为了调试向外部客户端暴露路由器 UI/API。关闭时会拒绝外部请求;下次启动在没有环境变量覆盖时仅绑定本地。",
414
+ },
415
+ "route_through_router": {
416
+ "en": "Route Anthropic through the local ciel-runtime router. This enables router features such as LLM channel injection. If no Anthropic API key is configured, the router forwards Claude Code OAuth/API auth headers.",
417
+ "ko": "Anthropic을 로컬 ciel-runtime 라우터로 경유합니다. LLM 채널 주입 같은 라우터 기능을 쓸 수 있습니다. Anthropic API 키가 없으면 Claude Code의 OAuth/API 인증 헤더를 라우터가 전달합니다.",
418
+ "ja": "Anthropic をローカル ciel-runtime ルーター経由にします。LLM channel injection などのルーター機能を使えます。Anthropic API key が未設定の場合は Claude Code の OAuth/API 認証ヘッダーをルーターが転送します。",
419
+ "zh": "通过本地 ciel-runtime 路由器转发 Anthropic。可使用 LLM channel injection 等路由器功能。未配置 Anthropic API key 时,路由器会转发 Claude Code 的 OAuth/API 认证头。",
420
+ },
421
+ "router_debug_message_preview_chars": {
422
+ "en": "When greater than 0, include the first N characters of the latest user message in router event data for debugging. Keep 0 for privacy.",
423
+ "ko": "0보다 크면 디버깅용 이벤트 data에 최근 사용자 메시지 앞 N자를 포함합니다. 개인정보 보호를 위해 기본값은 0입니다.",
424
+ "ja": "0より大きい場合、デバッグ用イベントdataに直近ユーザーメッセージの先頭N文字を含めます。プライバシー保護のため既定値は0です。",
425
+ "zh": "大于0时,在调试事件data中包含最近用户消息的前N个字符。为保护隐私默认值为0。",
426
+ },
427
+ "back": {
428
+ "en": "Return to the main menu.",
429
+ "ko": "메인 메뉴로 돌아갑니다.",
430
+ "ja": "メインメニューに戻ります。",
431
+ "zh": "返回主菜单。",
432
+ },
433
+ }
434
+
435
+
436
+ LLM_OPTION_TOGGLE_KEYS = {
437
+ "stream_enabled",
438
+ "stream_word_chunking",
439
+ "native_compat",
440
+ "think",
441
+ "rate_limit_enabled",
442
+ "rate_limit_status",
443
+ "router_debug_external_access",
444
+ "route_through_router",
445
+ "workflows_enabled",
446
+ "ultracode_enabled",
447
+ }