@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,792 @@
1
+ """Command-line application dispatcher with explicit dependencies."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import argparse
6
+ import os
7
+ import subprocess
8
+ from dataclasses import dataclass
9
+ from typing import Any
10
+
11
+
12
+ @dataclass(frozen=True)
13
+ class CliCore:
14
+ VERSION: Any
15
+ cli_usage: Any
16
+ find_executable: Any
17
+ get_current_provider: Any
18
+ load_config: Any
19
+ pop_headless_env_file_args: Any
20
+ portable_provider_menu: Any
21
+ run_external_menu: Any
22
+ run_quiet_upgrade_and_exit: Any
23
+
24
+
25
+ @dataclass(frozen=True)
26
+ class CliRuntime:
27
+ agy_passthrough_has_command: Any
28
+ codex_passthrough_has_command: Any
29
+ last_launch_runtime: Any
30
+ launch_agy: Any
31
+ launch_claude: Any
32
+ launch_codex: Any
33
+ launch_codex_app_server: Any
34
+ native_agy_enabled: Any
35
+ native_codex_enabled: Any
36
+
37
+
38
+ @dataclass(frozen=True)
39
+ class CliProviderCommands:
40
+ cmd_advisor_model: Any
41
+ cmd_api_key: Any
42
+ cmd_base_url: Any
43
+ cmd_language: Any
44
+ cmd_log_level: Any
45
+ cmd_model: Any
46
+ cmd_models: Any
47
+ cmd_provider: Any
48
+ cmd_provider_options: Any
49
+ cmd_set_api_key: Any
50
+
51
+
52
+ @dataclass(frozen=True)
53
+ class CliChannelCommands:
54
+ add_channel_spec: Any
55
+ channel_delivery_mode: Any
56
+ clear_channel_specs: Any
57
+ cmd_channels: Any
58
+ cmd_mcp_proxy: Any
59
+ set_channel_delivery_config: Any
60
+ set_channel_development_enabled: Any
61
+
62
+
63
+ @dataclass(frozen=True)
64
+ class CliSpecialCommands:
65
+ cmd_ollama_catalog: Any
66
+ cmd_ollama_native: Any
67
+ cmd_ollama_options: Any
68
+ cmd_web_fetch: Any
69
+ cmd_web_search: Any
70
+
71
+
72
+ @dataclass(frozen=True)
73
+ class CliOperations:
74
+ cmd_status: Any
75
+ cmd_stop: Any
76
+ cmd_test: Any
77
+
78
+
79
+ @dataclass(frozen=True)
80
+ class CliConfiguration:
81
+ apply_auto_llm_options_config: Any
82
+ apply_headless_env_config: Any
83
+ set_advisor_model_config: Any
84
+ set_log_level_config: Any
85
+ cmd_set_api_keys: Any
86
+
87
+
88
+ @dataclass(frozen=True)
89
+ class CliServices:
90
+ core: CliCore
91
+ runtime: CliRuntime
92
+ provider_commands: CliProviderCommands
93
+ channel_commands: CliChannelCommands
94
+ special_commands: CliSpecialCommands
95
+ operations: CliOperations
96
+ configuration: CliConfiguration
97
+
98
+
99
+ def dispatch_cli(argv: list[str], services: CliServices) -> int:
100
+ VERSION = services.core.VERSION
101
+ add_channel_spec = services.channel_commands.add_channel_spec
102
+ agy_passthrough_has_command = services.runtime.agy_passthrough_has_command
103
+ apply_auto_llm_options_config = services.configuration.apply_auto_llm_options_config
104
+ apply_headless_env_config = services.configuration.apply_headless_env_config
105
+ channel_delivery_mode = services.channel_commands.channel_delivery_mode
106
+ clear_channel_specs = services.channel_commands.clear_channel_specs
107
+ cli_usage = services.core.cli_usage
108
+ cmd_advisor_model = services.provider_commands.cmd_advisor_model
109
+ cmd_api_key = services.provider_commands.cmd_api_key
110
+ cmd_base_url = services.provider_commands.cmd_base_url
111
+ cmd_channels = services.channel_commands.cmd_channels
112
+ cmd_language = services.provider_commands.cmd_language
113
+ cmd_log_level = services.provider_commands.cmd_log_level
114
+ cmd_mcp_proxy = services.channel_commands.cmd_mcp_proxy
115
+ cmd_model = services.provider_commands.cmd_model
116
+ cmd_models = services.provider_commands.cmd_models
117
+ cmd_ollama_catalog = services.special_commands.cmd_ollama_catalog
118
+ cmd_ollama_native = services.special_commands.cmd_ollama_native
119
+ cmd_ollama_options = services.special_commands.cmd_ollama_options
120
+ cmd_provider = services.provider_commands.cmd_provider
121
+ cmd_provider_options = services.provider_commands.cmd_provider_options
122
+ cmd_set_api_key = services.provider_commands.cmd_set_api_key
123
+ cmd_set_api_keys = services.configuration.cmd_set_api_keys
124
+ cmd_status = services.operations.cmd_status
125
+ cmd_stop = services.operations.cmd_stop
126
+ cmd_test = services.operations.cmd_test
127
+ cmd_web_fetch = services.special_commands.cmd_web_fetch
128
+ cmd_web_search = services.special_commands.cmd_web_search
129
+ codex_passthrough_has_command = services.runtime.codex_passthrough_has_command
130
+ find_executable = services.core.find_executable
131
+ get_current_provider = services.core.get_current_provider
132
+ last_launch_runtime = services.runtime.last_launch_runtime
133
+ launch_agy = services.runtime.launch_agy
134
+ launch_claude = services.runtime.launch_claude
135
+ launch_codex = services.runtime.launch_codex
136
+ launch_codex_app_server = services.runtime.launch_codex_app_server
137
+ load_config = services.core.load_config
138
+ native_agy_enabled = services.runtime.native_agy_enabled
139
+ native_codex_enabled = services.runtime.native_codex_enabled
140
+ pop_headless_env_file_args = services.core.pop_headless_env_file_args
141
+ portable_provider_menu = services.core.portable_provider_menu
142
+ run_external_menu = services.core.run_external_menu
143
+ run_quiet_upgrade_and_exit = services.core.run_quiet_upgrade_and_exit
144
+ set_advisor_model_config = services.configuration.set_advisor_model_config
145
+ set_channel_delivery_config = services.channel_commands.set_channel_delivery_config
146
+ set_channel_development_enabled = services.channel_commands.set_channel_development_enabled
147
+ set_log_level_config = services.configuration.set_log_level_config
148
+ if argv and argv[0] == "mcp-proxy":
149
+ return cmd_mcp_proxy(argv[1:])
150
+ if argv and argv[0] in ("help", "--help", "-h"):
151
+ print(cli_usage())
152
+ return 0
153
+ argv = pop_headless_env_file_args(argv)
154
+ if any(arg in ("--ca-upgrade-and-exit", "--ca-quiet-upgrade", "--ca-upgrade-exit") for arg in argv):
155
+ return run_quiet_upgrade_and_exit()
156
+ if argv:
157
+ head, rest = argv[0], argv[1:]
158
+ if head in ("agy", "launch-agy", "antigravity"):
159
+ return launch_agy(rest)
160
+ if head in ("codex", "launch-codex"):
161
+ return launch_codex(rest)
162
+ if head in ("version", "--version", "-v"):
163
+ print(f"ciel-runtime {VERSION}")
164
+ return 0
165
+ if head in ("language", "lang"):
166
+ cmd_language(argparse.Namespace(value=rest[0] if rest else None))
167
+ return 0
168
+ if head == "provider":
169
+ if not rest:
170
+ rc = run_external_menu("ciel-runtime-provider")
171
+ return portable_provider_menu() if rc is None else rc
172
+ if rest[0] in ("list", "ls"):
173
+ cmd_provider(argparse.Namespace(name=None))
174
+ return 0
175
+ cmd_provider(argparse.Namespace(name=rest[0]))
176
+ return 0
177
+ if head == "model":
178
+ if not rest:
179
+ raise SystemExit("Missing model id")
180
+ cmd_model(argparse.Namespace(value=rest))
181
+ return 0
182
+ if head in ("advisor-model", "advisormodel", "advisor"):
183
+ cmd_advisor_model(argparse.Namespace(value=rest))
184
+ return 0
185
+ if head == "base-url":
186
+ if len(rest) < 2:
187
+ raise SystemExit("Usage: ciel-runtime base-url PROVIDER URL")
188
+ cmd_base_url(argparse.Namespace(provider=rest[0], url=rest[1]))
189
+ return 0
190
+ if head == "models":
191
+ cmd_models(argparse.Namespace(provider=rest[0] if rest else None))
192
+ return 0
193
+ if head in ("api-key", "apikey"):
194
+ if not rest:
195
+ raise SystemExit("Missing provider")
196
+ cmd_api_key(argparse.Namespace(provider=rest[0], action=rest[1] if len(rest) > 1 else None))
197
+ return 0
198
+ if head in ("set-api-key", "set-apikey"):
199
+ if len(rest) < 2:
200
+ raise SystemExit("Usage: ciel-runtime set-api-key PROVIDER KEY")
201
+ cmd_set_api_key(argparse.Namespace(provider=rest[0], key=rest[1]))
202
+ return 0
203
+ if head in ("set-api-keys", "set-apikeys"):
204
+ if len(rest) < 2:
205
+ raise SystemExit("Usage: ciel-runtime set-api-keys PROVIDER KEY1,KEY2")
206
+ cmd_set_api_keys(argparse.Namespace(provider=rest[0], keys=rest[1:]))
207
+ return 0
208
+ if head in ("web-search", "websearch"):
209
+ cmd_web_search(argparse.Namespace(value=rest[0] if rest else None))
210
+ return 0
211
+ if head in ("web-fetch", "webfetch"):
212
+ cmd_web_fetch(argparse.Namespace(value=rest[0] if rest else None))
213
+ return 0
214
+ if head in ("log-level", "loglevel", "logging"):
215
+ cmd_log_level(argparse.Namespace(value=rest[0] if rest else None))
216
+ return 0
217
+ if head in ("channels", "channel"):
218
+ cmd_channels(argparse.Namespace(values=rest))
219
+ return 0
220
+ if head in ("channel-delivery", "channel_delivery"):
221
+ if rest:
222
+ for line in set_channel_delivery_config(rest[0]):
223
+ print(line)
224
+ else:
225
+ print(f"channel_delivery: {channel_delivery_mode()}")
226
+ return 0
227
+ if head in ("ollama-native", "ollama-compat"):
228
+ cmd_ollama_native(argparse.Namespace(value=rest[0] if rest else None))
229
+ return 0
230
+ if head in ("ollama-options", "ollama-option", "ollama-opts"):
231
+ cmd_ollama_options(argparse.Namespace(values=rest))
232
+ return 0
233
+ if head in ("provider-options", "provider-option", "provider-opts", "vllm-options", "nim-options"):
234
+ cmd_provider_options(argparse.Namespace(values=rest))
235
+ return 0
236
+ if head in ("ollama-catalog", "ollama-catalog-refresh"):
237
+ no_contexts = "--no-contexts" in rest
238
+ timeout = 10.0
239
+ for item in rest:
240
+ if item.startswith("--timeout="):
241
+ try:
242
+ timeout = float(item.split("=", 1)[1])
243
+ except ValueError:
244
+ raise SystemExit("Usage: ciel-runtime ollama-catalog [--no-contexts] [--timeout=SECONDS]")
245
+ cmd_ollama_catalog(argparse.Namespace(no_contexts=no_contexts, timeout=timeout))
246
+ return 0
247
+ if head in ("test", "compat", "compatibility"):
248
+ timeout = 60.0
249
+ mode = "auto"
250
+ if rest and rest[0] in ("auto", "quick", "smoke", "full"):
251
+ mode = rest[0]
252
+ rest = rest[1:]
253
+ if rest:
254
+ try:
255
+ timeout = float(rest[0])
256
+ except ValueError:
257
+ raise SystemExit("Usage: ciel-runtime test [timeout_seconds] [auto|quick|smoke|full]")
258
+ if len(rest) > 1:
259
+ mode = rest[1]
260
+ if mode not in ("auto", "quick", "smoke", "full"):
261
+ raise SystemExit("Usage: ciel-runtime test [timeout_seconds] [auto|quick|smoke|full]")
262
+ cmd_test(argparse.Namespace(timeout=timeout, mode=mode))
263
+ return 0
264
+ if head == "status":
265
+ cmd_status(argparse.Namespace())
266
+ return 0
267
+ if head == "stop":
268
+ cmd_stop(argparse.Namespace())
269
+ ncp = find_executable("ncp")
270
+ if ncp:
271
+ subprocess.run([ncp, "kill"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
272
+ return 0
273
+ if argv[0] == "resume":
274
+ runtime = last_launch_runtime()
275
+ if runtime == "codex":
276
+ return launch_codex(argv)
277
+ if runtime == "agy":
278
+ return launch_agy(argv)
279
+ if codex_passthrough_has_command(argv):
280
+ cfg = load_config()
281
+ provider, _ = get_current_provider(cfg)
282
+ if native_codex_enabled(provider):
283
+ return launch_codex(argv)
284
+ if argv[0] == "resume":
285
+ cfg = load_config()
286
+ provider, _ = get_current_provider(cfg)
287
+ if native_agy_enabled(provider):
288
+ return launch_agy(argv)
289
+ if agy_passthrough_has_command(argv):
290
+ cfg = load_config()
291
+ provider, _ = get_current_provider(cfg)
292
+ if native_agy_enabled(provider):
293
+ return launch_agy(argv)
294
+
295
+ passthrough: list[str] = []
296
+ configure_only = False
297
+ auto_llm_options = False
298
+ auto_llm_model: str | None = None
299
+ runtime = "claude"
300
+ skip_menu, web_search_override, update_check_override, self_update_check_override, force_menu = apply_headless_env_config()
301
+ update_check = True
302
+ if update_check_override is not None:
303
+ update_check = update_check_override
304
+ self_update_check = True
305
+ if self_update_check_override is not None:
306
+ self_update_check = self_update_check_override
307
+ i = 0
308
+ while i < len(argv):
309
+ arg = argv[i]
310
+ if arg in ("--ca-menu", "--ca-interactive"):
311
+ force_menu = True
312
+ i += 1
313
+ elif arg == "--ca-runtime" or arg.startswith("--ca-runtime="):
314
+ value = arg.split("=", 1)[1] if "=" in arg else None
315
+ if value is None:
316
+ if i + 1 >= len(argv):
317
+ raise SystemExit("Missing runtime for --ca-runtime")
318
+ value = argv[i + 1]
319
+ i += 2
320
+ else:
321
+ i += 1
322
+ runtime = str(value or "").strip().lower()
323
+ if runtime in ("codex-app", "codex-appserver"):
324
+ runtime = "codex-app-server"
325
+ if runtime not in ("claude", "codex", "codex-app-server", "agy"):
326
+ raise SystemExit("--ca-runtime must be claude, codex, codex-app-server, or agy")
327
+ elif arg in ("--ca-no-launch", "--ca-configure-only", "--ca-setup-only"):
328
+ configure_only = True
329
+ skip_menu = True
330
+ i += 1
331
+ elif arg == "--ca-language" or arg.startswith("--ca-language="):
332
+ value = arg.split("=", 1)[1] if "=" in arg else None
333
+ if value is None:
334
+ if i + 1 >= len(argv):
335
+ raise SystemExit("Missing language for --ca-language")
336
+ value = argv[i + 1]
337
+ i += 2
338
+ else:
339
+ i += 1
340
+ cmd_language(argparse.Namespace(value=value))
341
+ skip_menu = True
342
+ elif arg == "--ca-provider" or arg.startswith("--ca-provider="):
343
+ provider_value = arg.split("=", 1)[1] if "=" in arg else None
344
+ if provider_value:
345
+ cmd_provider(argparse.Namespace(name=provider_value))
346
+ skip_menu = True
347
+ i += 1
348
+ elif i + 1 < len(argv) and not argv[i + 1].startswith("--"):
349
+ cmd_provider(argparse.Namespace(name=argv[i + 1]))
350
+ skip_menu = True
351
+ i += 2
352
+ else:
353
+ rc = run_external_menu("ciel-runtime-provider")
354
+ if rc is None:
355
+ rc = portable_provider_menu()
356
+ if rc != 0:
357
+ return rc
358
+ skip_menu = True
359
+ i += 1
360
+ elif arg == "--ca-base-url" or arg.startswith("--ca-base-url="):
361
+ value = arg.split("=", 1)[1] if "=" in arg else None
362
+ if value is None:
363
+ if i + 1 >= len(argv):
364
+ raise SystemExit("Missing URL for --ca-base-url")
365
+ value = argv[i + 1]
366
+ i += 2
367
+ else:
368
+ i += 1
369
+ provider, _ = get_current_provider(load_config())
370
+ cmd_base_url(argparse.Namespace(provider=provider, url=value))
371
+ skip_menu = True
372
+ elif arg == "--ca-model" or arg.startswith("--ca-model="):
373
+ value = arg.split("=", 1)[1] if "=" in arg else None
374
+ if value is None:
375
+ if i + 1 >= len(argv):
376
+ raise SystemExit("Missing model id for --ca-model")
377
+ value = argv[i + 1]
378
+ i += 2
379
+ else:
380
+ i += 1
381
+ cmd_model(argparse.Namespace(value=[value]))
382
+ skip_menu = True
383
+ elif arg == "--ca-advisor-model" or arg.startswith("--ca-advisor-model="):
384
+ value = arg.split("=", 1)[1] if "=" in arg else None
385
+ if value is None:
386
+ if i + 1 >= len(argv):
387
+ raise SystemExit("Missing model id for --ca-advisor-model")
388
+ value = argv[i + 1]
389
+ i += 2
390
+ else:
391
+ i += 1
392
+ for line in set_advisor_model_config(value):
393
+ print(line)
394
+ skip_menu = True
395
+ elif arg in ("--ca-auto-llm-options", "--ca-auto-llm", "--ca-recommended-llm") or arg.startswith(
396
+ ("--ca-auto-llm-options=", "--ca-auto-llm=", "--ca-recommended-llm=")
397
+ ):
398
+ auto_llm_options = True
399
+ value = arg.split("=", 1)[1] if "=" in arg else None
400
+ if value is None and i + 1 < len(argv) and not argv[i + 1].startswith("--"):
401
+ value = argv[i + 1]
402
+ i += 2
403
+ else:
404
+ i += 1
405
+ if value:
406
+ auto_llm_model = value
407
+ skip_menu = True
408
+ elif arg == "--ca-models":
409
+ cmd_models(argparse.Namespace(provider=None))
410
+ return 0
411
+ elif arg == "--ca-api-key" or arg.startswith("--ca-api-key="):
412
+ value = arg.split("=", 1)[1] if "=" in arg else None
413
+ if value is None:
414
+ if i + 1 >= len(argv):
415
+ raise SystemExit("Missing key for --ca-api-key")
416
+ value = argv[i + 1]
417
+ i += 2
418
+ else:
419
+ i += 1
420
+ provider, _ = get_current_provider(load_config())
421
+ cmd_set_api_key(argparse.Namespace(provider=provider, key=value))
422
+ skip_menu = True
423
+ elif arg == "--ca-api-key-env" or arg.startswith("--ca-api-key-env="):
424
+ env_name = arg.split("=", 1)[1] if "=" in arg else None
425
+ if env_name is None:
426
+ if i + 1 >= len(argv):
427
+ raise SystemExit("Missing env var name for --ca-api-key-env")
428
+ env_name = argv[i + 1]
429
+ i += 2
430
+ else:
431
+ i += 1
432
+ value = os.environ.get(env_name, "")
433
+ if not value:
434
+ raise SystemExit(f"Environment variable {env_name} is empty or not set")
435
+ provider, _ = get_current_provider(load_config())
436
+ cmd_set_api_key(argparse.Namespace(provider=provider, key=value))
437
+ skip_menu = True
438
+ elif arg == "--ca-api-keys" or arg.startswith("--ca-api-keys="):
439
+ value = arg.split("=", 1)[1] if "=" in arg else None
440
+ if value is None:
441
+ if i + 1 >= len(argv):
442
+ raise SystemExit("Missing key list for --ca-api-keys")
443
+ value = argv[i + 1]
444
+ i += 2
445
+ else:
446
+ i += 1
447
+ provider, _ = get_current_provider(load_config())
448
+ cmd_set_api_keys(argparse.Namespace(provider=provider, keys=[value]))
449
+ skip_menu = True
450
+ elif arg == "--ca-api-keys-env" or arg.startswith("--ca-api-keys-env="):
451
+ env_name = arg.split("=", 1)[1] if "=" in arg else None
452
+ if env_name is None:
453
+ if i + 1 >= len(argv):
454
+ raise SystemExit("Missing env var name for --ca-api-keys-env")
455
+ env_name = argv[i + 1]
456
+ i += 2
457
+ else:
458
+ i += 1
459
+ value = os.environ.get(env_name, "")
460
+ if not value:
461
+ raise SystemExit(f"Environment variable {env_name} is empty or not set")
462
+ provider, _ = get_current_provider(load_config())
463
+ cmd_set_api_keys(argparse.Namespace(provider=provider, keys=[value]))
464
+ skip_menu = True
465
+ elif arg == "--ca-set-api-key":
466
+ if i + 2 >= len(argv):
467
+ raise SystemExit("Usage: --ca-set-api-key PROVIDER KEY")
468
+ cmd_set_api_key(argparse.Namespace(provider=argv[i + 1], key=argv[i + 2]))
469
+ skip_menu = True
470
+ i += 3
471
+ elif arg == "--ca-set-api-key-env":
472
+ if i + 2 >= len(argv):
473
+ raise SystemExit("Usage: --ca-set-api-key-env PROVIDER ENVVAR")
474
+ value = os.environ.get(argv[i + 2], "")
475
+ if not value:
476
+ raise SystemExit(f"Environment variable {argv[i + 2]} is empty or not set")
477
+ cmd_set_api_key(argparse.Namespace(provider=argv[i + 1], key=value))
478
+ skip_menu = True
479
+ i += 3
480
+ elif arg == "--ca-set-api-keys":
481
+ if i + 2 >= len(argv):
482
+ raise SystemExit("Usage: --ca-set-api-keys PROVIDER KEY1,KEY2")
483
+ cmd_set_api_keys(argparse.Namespace(provider=argv[i + 1], keys=[argv[i + 2]]))
484
+ skip_menu = True
485
+ i += 3
486
+ elif arg == "--ca-set-api-keys-env":
487
+ if i + 2 >= len(argv):
488
+ raise SystemExit("Usage: --ca-set-api-keys-env PROVIDER ENVVAR")
489
+ value = os.environ.get(argv[i + 2], "")
490
+ if not value:
491
+ raise SystemExit(f"Environment variable {argv[i + 2]} is empty or not set")
492
+ cmd_set_api_keys(argparse.Namespace(provider=argv[i + 1], keys=[value]))
493
+ skip_menu = True
494
+ i += 3
495
+ elif arg in ("--ca-provider-option", "--ca-provider-options") or arg.startswith(
496
+ ("--ca-provider-option=", "--ca-provider-options=")
497
+ ):
498
+ value = arg.split("=", 1)[1] if "=" in arg else None
499
+ if value is None:
500
+ if i + 1 >= len(argv):
501
+ raise SystemExit("Missing KEY=VALUE for --ca-provider-option")
502
+ value = argv[i + 1]
503
+ i += 2
504
+ else:
505
+ i += 1
506
+ cmd_provider_options(argparse.Namespace(values=[value]))
507
+ skip_menu = True
508
+ elif arg == "--ca-set-provider-option":
509
+ if i + 2 >= len(argv):
510
+ raise SystemExit("Usage: --ca-set-provider-option PROVIDER KEY=VALUE")
511
+ cmd_provider_options(argparse.Namespace(values=[argv[i + 1], argv[i + 2]]))
512
+ skip_menu = True
513
+ i += 3
514
+ elif arg == "--ca-ollama-num-ctx" or arg.startswith("--ca-ollama-num-ctx="):
515
+ value = arg.split("=", 1)[1] if "=" in arg else None
516
+ if value is None:
517
+ if i + 1 >= len(argv):
518
+ raise SystemExit("Missing value for --ca-ollama-num-ctx")
519
+ value = argv[i + 1]
520
+ i += 2
521
+ else:
522
+ i += 1
523
+ cmd_ollama_options(argparse.Namespace(values=[f"num_ctx={value}"]))
524
+ skip_menu = True
525
+ elif arg == "--ca-ollama-ctx-range" or arg.startswith("--ca-ollama-ctx-range="):
526
+ if "=" in arg:
527
+ raw = arg.split("=", 1)[1]
528
+ sep = ":" if ":" in raw else "-"
529
+ parts = [p.strip() for p in raw.split(sep, 1)]
530
+ if len(parts) != 2 or not parts[0] or not parts[1]:
531
+ raise SystemExit("Usage: --ca-ollama-ctx-range MIN MAX")
532
+ min_value, max_value = parts
533
+ i += 1
534
+ else:
535
+ if i + 2 >= len(argv):
536
+ raise SystemExit("Usage: --ca-ollama-ctx-range MIN MAX")
537
+ min_value, max_value = argv[i + 1], argv[i + 2]
538
+ i += 3
539
+ cmd_ollama_options(
540
+ argparse.Namespace(values=[f"min={min_value}", f"max={max_value}", "num_ctx=auto"])
541
+ )
542
+ skip_menu = True
543
+ elif arg == "--ca-ollama-option" or arg.startswith("--ca-ollama-option="):
544
+ value = arg.split("=", 1)[1] if "=" in arg else None
545
+ if value is None:
546
+ if i + 1 >= len(argv):
547
+ raise SystemExit("Missing KEY=VALUE for --ca-ollama-option")
548
+ value = argv[i + 1]
549
+ i += 2
550
+ else:
551
+ i += 1
552
+ cmd_ollama_options(argparse.Namespace(values=[value]))
553
+ skip_menu = True
554
+ elif arg == "--ca-max-output-tokens" or arg.startswith("--ca-max-output-tokens="):
555
+ value = arg.split("=", 1)[1] if "=" in arg else None
556
+ if value is None:
557
+ if i + 1 >= len(argv):
558
+ raise SystemExit("Missing value for --ca-max-output-tokens")
559
+ value = argv[i + 1]
560
+ i += 2
561
+ else:
562
+ i += 1
563
+ cmd_provider_options(argparse.Namespace(values=[f"max_output_tokens={value}"]))
564
+ skip_menu = True
565
+ elif arg == "--ca-context-window" or arg.startswith("--ca-context-window="):
566
+ value = arg.split("=", 1)[1] if "=" in arg else None
567
+ if value is None:
568
+ if i + 1 >= len(argv):
569
+ raise SystemExit("Missing value for --ca-context-window")
570
+ value = argv[i + 1]
571
+ i += 2
572
+ else:
573
+ i += 1
574
+ cmd_provider_options(argparse.Namespace(values=[f"context_window={value}"]))
575
+ skip_menu = True
576
+ elif arg == "--ca-request-timeout-ms" or arg.startswith("--ca-request-timeout-ms="):
577
+ value = arg.split("=", 1)[1] if "=" in arg else None
578
+ if value is None:
579
+ if i + 1 >= len(argv):
580
+ raise SystemExit("Missing value for --ca-request-timeout-ms")
581
+ value = argv[i + 1]
582
+ i += 2
583
+ else:
584
+ i += 1
585
+ cmd_provider_options(argparse.Namespace(values=[f"request_timeout_ms={value}"]))
586
+ skip_menu = True
587
+ elif arg == "--ca-stream-idle-timeout-ms" or arg.startswith("--ca-stream-idle-timeout-ms="):
588
+ value = arg.split("=", 1)[1] if "=" in arg else None
589
+ if value is None:
590
+ if i + 1 >= len(argv):
591
+ raise SystemExit("Missing value for --ca-stream-idle-timeout-ms")
592
+ value = argv[i + 1]
593
+ i += 2
594
+ else:
595
+ i += 1
596
+ cmd_provider_options(argparse.Namespace(values=[f"stream_idle_timeout_ms={value}"]))
597
+ skip_menu = True
598
+ elif arg == "--ca-rate-limit-rpm" or arg.startswith("--ca-rate-limit-rpm="):
599
+ value = arg.split("=", 1)[1] if "=" in arg else None
600
+ if value is None:
601
+ if i + 1 >= len(argv):
602
+ raise SystemExit("Missing value for --ca-rate-limit-rpm")
603
+ value = argv[i + 1]
604
+ i += 2
605
+ else:
606
+ i += 1
607
+ cmd_provider_options(argparse.Namespace(values=[f"rate_limit_rpm={value}"]))
608
+ skip_menu = True
609
+ elif arg == "--ca-rate-limit-status" or arg.startswith("--ca-rate-limit-status="):
610
+ value = arg.split("=", 1)[1] if "=" in arg else None
611
+ if value is None:
612
+ if i + 1 >= len(argv):
613
+ raise SystemExit("Missing on/off for --ca-rate-limit-status")
614
+ value = argv[i + 1]
615
+ i += 2
616
+ else:
617
+ i += 1
618
+ cmd_provider_options(argparse.Namespace(values=[f"rate_limit_status={value}"]))
619
+ skip_menu = True
620
+ elif arg == "--ca-stream" or arg.startswith("--ca-stream="):
621
+ value = arg.split("=", 1)[1] if "=" in arg else None
622
+ if value is None:
623
+ if i + 1 >= len(argv):
624
+ raise SystemExit("Missing on/off for --ca-stream")
625
+ value = argv[i + 1]
626
+ i += 2
627
+ else:
628
+ i += 1
629
+ cmd_provider_options(argparse.Namespace(values=[f"stream_enabled={value}"]))
630
+ skip_menu = True
631
+ elif arg == "--ca-stream-word-chunking" or arg.startswith("--ca-stream-word-chunking="):
632
+ value = arg.split("=", 1)[1] if "=" in arg else None
633
+ if value is None:
634
+ if i + 1 >= len(argv):
635
+ raise SystemExit("Missing on/off for --ca-stream-word-chunking")
636
+ value = argv[i + 1]
637
+ i += 2
638
+ else:
639
+ i += 1
640
+ cmd_provider_options(argparse.Namespace(values=[f"stream_word_chunking={value}"]))
641
+ skip_menu = True
642
+ elif arg == "--ca-log-level" or arg.startswith("--ca-log-level="):
643
+ value = arg.split("=", 1)[1] if "=" in arg else None
644
+ if value is None:
645
+ if i + 1 >= len(argv):
646
+ raise SystemExit("Missing level for --ca-log-level")
647
+ value = argv[i + 1]
648
+ i += 2
649
+ else:
650
+ i += 1
651
+ for line in set_log_level_config(value):
652
+ print(line)
653
+ skip_menu = True
654
+ elif arg == "--ca-web-search":
655
+ web_search_override = True
656
+ skip_menu = True
657
+ i += 1
658
+ elif arg == "--ca-no-web-search":
659
+ web_search_override = False
660
+ skip_menu = True
661
+ i += 1
662
+ elif arg == "--ca-web-fetch":
663
+ cmd_web_fetch(argparse.Namespace(value="on"))
664
+ skip_menu = True
665
+ i += 1
666
+ elif arg == "--ca-no-web-fetch":
667
+ cmd_web_fetch(argparse.Namespace(value="off"))
668
+ skip_menu = True
669
+ i += 1
670
+ elif arg == "--ca-channel" or arg.startswith("--ca-channel="):
671
+ value = arg.split("=", 1)[1] if "=" in arg else None
672
+ if value is None:
673
+ if i + 1 >= len(argv):
674
+ raise SystemExit("Missing channel spec for --ca-channel")
675
+ value = argv[i + 1]
676
+ i += 2
677
+ else:
678
+ i += 1
679
+ for line in add_channel_spec(value):
680
+ print(line)
681
+ skip_menu = True
682
+ elif arg == "--ca-channel-delivery" or arg.startswith("--ca-channel-delivery="):
683
+ value = arg.split("=", 1)[1] if "=" in arg else None
684
+ if value is None:
685
+ if i + 1 >= len(argv):
686
+ raise SystemExit("Missing mode for --ca-channel-delivery")
687
+ value = argv[i + 1]
688
+ i += 2
689
+ else:
690
+ i += 1
691
+ for line in set_channel_delivery_config(value):
692
+ print(line)
693
+ skip_menu = True
694
+ elif arg == "--ca-dev-channel" or arg.startswith("--ca-dev-channel="):
695
+ value = arg.split("=", 1)[1] if "=" in arg else None
696
+ if value is None:
697
+ if i + 1 >= len(argv):
698
+ raise SystemExit("Missing channel spec for --ca-dev-channel")
699
+ value = argv[i + 1]
700
+ i += 2
701
+ else:
702
+ i += 1
703
+ for line in add_channel_spec(value):
704
+ print(line)
705
+ skip_menu = True
706
+ elif arg == "--ca-development-channels" or arg.startswith("--ca-development-channels="):
707
+ value = arg.split("=", 1)[1] if "=" in arg else None
708
+ if value is None:
709
+ if i + 1 >= len(argv):
710
+ raise SystemExit("Missing on/off for --ca-development-channels")
711
+ value = argv[i + 1]
712
+ i += 2
713
+ else:
714
+ i += 1
715
+ for line in set_channel_development_enabled(True):
716
+ print(line)
717
+ skip_menu = True
718
+ elif arg == "--ca-clear-channels":
719
+ for line in clear_channel_specs():
720
+ print(line)
721
+ skip_menu = True
722
+ i += 1
723
+ elif arg == "--ca-no-update-check":
724
+ update_check = False
725
+ skip_menu = True
726
+ i += 1
727
+ elif arg == "--ca-no-self-update-check":
728
+ self_update_check = False
729
+ skip_menu = True
730
+ i += 1
731
+ elif arg == "--ca-status":
732
+ cmd_status(argparse.Namespace())
733
+ return 0
734
+ elif arg == "--ca-stop":
735
+ cmd_stop(argparse.Namespace())
736
+ return 0
737
+ elif arg == "--":
738
+ passthrough.extend(argv[i + 1 :])
739
+ break
740
+ else:
741
+ passthrough.append(arg)
742
+ i += 1
743
+ if auto_llm_options:
744
+ for line in apply_auto_llm_options_config(auto_llm_model):
745
+ print(line)
746
+ if configure_only:
747
+ return 0
748
+ if runtime == "agy":
749
+ return launch_agy(
750
+ passthrough,
751
+ skip_menu=skip_menu,
752
+ force_menu=force_menu,
753
+ update_check=update_check,
754
+ self_update_check=self_update_check,
755
+ )
756
+ if runtime == "codex":
757
+ return launch_codex(
758
+ passthrough,
759
+ skip_menu=skip_menu,
760
+ force_menu=force_menu,
761
+ update_check=update_check,
762
+ self_update_check=self_update_check,
763
+ )
764
+ if runtime == "codex-app-server":
765
+ return launch_codex_app_server(
766
+ passthrough,
767
+ skip_menu=skip_menu,
768
+ force_menu=force_menu,
769
+ update_check=update_check,
770
+ self_update_check=self_update_check,
771
+ )
772
+ return launch_claude(
773
+ passthrough,
774
+ skip_menu=skip_menu,
775
+ force_menu=force_menu,
776
+ web_search_override=web_search_override,
777
+ update_check=update_check,
778
+ self_update_check=self_update_check,
779
+ )
780
+
781
+
782
+ __all__ = [
783
+ "CliChannelCommands",
784
+ "CliConfiguration",
785
+ "CliCore",
786
+ "CliOperations",
787
+ "CliProviderCommands",
788
+ "CliRuntime",
789
+ "CliServices",
790
+ "CliSpecialCommands",
791
+ "dispatch_cli",
792
+ ]