@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
@@ -4,37 +4,22 @@
4
4
 
5
5
  ## Python 소스
6
6
 
7
- ### `ciel_runtime.py` (약 30,600줄)
7
+ ### `ciel_runtime.py`
8
8
 
9
- 메인 엔트리포인트. 라우터, 제공자 로직, CLI 전체가 단일 파일에 포함된다.
9
+ 메인 호환 엔트리포인트이자 composition root. 라우터 조정, 제공자 설정, CLI 레거시 변환의 공개 이름을 보존하되, 시그니처가 완전히 같은 무상태 함수는 support 구현을 직접 re-export하고 orchestration만 typed service로 조립한다.
10
+ 파일 크기와 줄 번호는 빠르게 변하므로 아래 표는 물리적 줄 범위가 아니라 논리적 영역을 나타낸다.
10
11
 
11
12
  주요 구역:
12
13
 
13
- | 범위 | 내용 |
14
+ | 영역 | 내용 |
14
15
  |---------|------|
15
- | 1–50 | 임포트, 전역 설정 |
16
- | 51–200 | 플랫폼 유틸리티, 경로, 포트 계산 |
17
- | 200–660 | 상수: 제공자 목록, 모델 ID, URL, 시스템 프롬프트 |
18
- | 660–1290 | Ollama 모델 카탈로그, 컨텍스트 감지 |
19
- | 1290–1900 | 스키마 레지스트리, 입력 검증/교정 |
20
- | 1900–2320 | UI 텍스트 (다국어), i18n |
21
- | 2320–2570 | 설정 로드/저장, 캐시 |
22
- | 2570–2870 | 모델 ID 정규화, URL 조합 |
23
- | 2870–3140 | API 키 파싱, 제공자 키 선택 |
24
- | 3140–3500 | `main()`, 상태 표시, statusline |
25
- | 3500–3990 | Slash 커맨드 설치, HTTP 헬퍼 |
26
- | 4000–4130 | 로그 레벨 시스템 |
27
- | 4130–4900 | 툴 차단, thinking 정규화, Plan Mode |
28
- | 4900–5500 | 메시지 분석, 컨텍스트 요약 |
29
- | 5500–12400 | 메시지 변환 (Anthropic ↔ Ollama/OpenAI) |
30
- | 12400–14200 | Wire 정규화, Advisor 시스템 |
31
- | 14200–16200 | 스트리밍 변환 (`_rebatch_*`, `_ollama_stream_*`) |
32
- | 16200–17300 | Forward 함수 (Ollama, OpenAI 호환) |
33
- | 17300–17640 | `RouterHandler` 클래스 |
34
- | 17640–18050 | Router 건강/설정 체크 함수들 |
35
- | 18050–18320 | CLI 커맨드 (`cmd_*`) |
36
- | 18320–20500 | 채널/MCP 시스템 |
37
- | 20500–30600 | 나머지 채널, 설치, 유틸리티 |
16
+ | 기반 | 임포트, 플랫폼 유틸리티, 경로, 포트 및 전역 설정 |
17
+ | 설정 | 설정 마이그레이션, 캐시, 제공자·모델·API 선택 |
18
+ | 프로토콜 | Anthropic, OpenAI, Ollama 요청·응답과 스트리밍 호환 계층 |
19
+ | 라우터 | `RouterHandler`, 런타임 라우터 위임, 업스트림 전달 |
20
+ | 채널 | MCP 탐색, cursor, delivery acknowledgement, 터미널 주입 |
21
+ | 런처 | Claude, Codex, Codex App Server, AGY 프로세스 실행 |
22
+ | CLI/UI | 메뉴, 상태, 설정 명령, 설치 및 업데이트 진단 |
38
23
 
39
24
  ---
40
25
 
@@ -51,6 +36,1035 @@
51
36
 
52
37
  → [[Architecture]]
53
38
 
39
+ ### `ciel_runtime_support/claude_router.py`
40
+
41
+ Claude Code의 Anthropic Messages HTTP routing Application Service. 문자열 키 기반의 거대 dependency dict 대신 Core, Pipeline, Shortcuts, Delivery, Routing, Normalization, Transport, Response 등 최대 10필드의 typed port 그룹을 사용한다.
42
+
43
+ ### `ciel_runtime_support/openai_responses_router.py`
44
+
45
+ Codex/OpenAI Responses 요청의 protocol 변환, provider routing, channel delivery acknowledgement와 오류 mapping을 조정하는 Runtime Application Service. Core, Conversion, Routing, Delivery, Output 포트는 각각 최대 10필드로 제한한다.
46
+
47
+ ### `ciel_runtime_support/openai_responses_stream.py`
48
+
49
+ OpenAI Responses 성공·오류 payload를 JSON 또는 Codex-compatible SSE lifecycle event sequence로 투영하는 Protocol Transport. response 변환과 JSON writer는 2필드 포트로 주입한다.
50
+
51
+ ### `ciel_runtime_support/protocols/ollama_response.py`
52
+
53
+ Ollama `/api/chat` 및 OpenAI-compatible chat 응답을 Anthropic Messages content로 투영하는 Provider-specific Protocol Service. Text decoding, tool normalization, reasoning projection, recovery policy, output encoding을 각각 명시적 포트로 분리해 메인과 Provider-neutral codec에서 응답 변환 정책을 격리한다.
54
+
55
+ ### `ciel_runtime_support/protocols/conversation_policy.py`
56
+
57
+ Attachment-only message, Plan Mode 상태, plan file write 이력, unchanged Read 결과와 tool-result history를 해석하는 순수 Protocol Policy. Transcript/guard 판정과 content codec은 6필드 Port로 주입받아 provider와 composition root에 의존하지 않는다.
58
+
59
+ ### `ciel_runtime_support/protocols/conversation_turn_policy.py`
60
+
61
+ Plan Mode 진입·종료, channel wake 제거, tool-result 기반 작업 완료 판정, TaskList keepalive와 empty-end-turn 복구를 소유하는 Conversation Turn State Machine. content/tool codec과 관측 효과는 7필드 typed port로 주입되어 provider transport와 독립적으로 동작한다.
62
+
63
+ `ConversationTurnCompatibilityApi`는 기존 공개 함수를 명시적 method로 투영하는 Adapter이다. 동적 `__getattr__`나 service locator 없이 매 호출마다 composition policy를 해석해 facade의 단순 wrapper 정의를 제거한다.
64
+
65
+ ### `ciel_runtime_support/protocols/anthropic_thinking_policy.py`
66
+
67
+ Anthropic thinking block과 강제 tool-choice의 provider 호환 변환을 소유하는 Protocol Policy. 요청·응답 정규화는 provider capability port를 통해 결정하고, client에 노출하지 않은 thinking passback은 용량 제한 Repository에 보관·복원한다. 메인 facade의 전역 캐시와 동적 monkeypatch 호환성은 composition wrapper가 유지한다.
68
+
69
+ ### `ciel_runtime_support/protocols/openai_reasoning.py`
70
+
71
+ Anthropic/OpenAI tool-choice projection, reasoning block 변환과 passback 오케스트레이션을 소유하는 Protocol Policy. reasoning 지원 여부는 provider 이름 분기 대신 등록된 `ProviderAdapter.openai_reasoning_passback_enabled` Strategy에 위임한다.
72
+
73
+ ### `ciel_runtime_support/session_import.py`
74
+
75
+ Codex/Claude transcript 탐색·읽기 Repository와 cross-runtime import Application Service, Anthropic/OpenAI local response를 생성하는 HTTP Controller를 소유한다. facade는 경로·response·event port만 조립한다.
76
+
77
+ ### `ciel_runtime_support/advisor_policy.py`
78
+
79
+ Advisor tool/gate 판정과 local `/advisor` short-circuit Controller를 소유한다. native advisor를 사용하는지는 provider 이름 분기 대신 `ProviderAdapter.intercepts_advisor_shortcut` Strategy가 결정한다.
80
+
81
+ ### `ciel_runtime_support/router_http.py`
82
+
83
+ HTTP parsing과 GET/POST/HEAD/DELETE endpoint dispatch를 담당하는 Router Adapter. Core, GET endpoints, POST endpoints, Presentation, Errors 포트를 통해 Runtime/Channel/Protocol 서비스에 위임한다. Codex native backend proxy는 `CodexBackendHttpAdapter`, hop-by-hop 제거·content negotiation·native authorization 강제는 `CodexRoutedHeaderPolicy`, `/ca/events` 조회·SSE long-poll projection은 `EventHttpAdapter`가 각각 소유한다.
84
+
85
+ ### `ciel_runtime_support/http_response.py`
86
+
87
+ JSON·empty·accepted HTTP response 작성, client disconnect 분류와 pending channel delivery 성공/실패 guard를 소유하는 Transport Adapter. Router application service는 handler의 임시 attribute와 socket errno를 직접 다루지 않는다.
88
+
89
+ ### `ciel_runtime_support/chat_http_controller.py`
90
+
91
+ Web Chat/Channel bridge의 health, message history·long-poll·SSE, file download/upload, notify와 transport connect/disconnect endpoint를 소유하는 HTTP Controller. read/write port를 분리해 HTTP 표현과 channel Repository·Lifecycle 구현을 격리한다.
92
+
93
+ ### `ciel_runtime_support/channel_mcp_http_controller.py`
94
+
95
+ 내장 Channel MCP의 session Repository, SSE read-loop와 JSON-RPC POST endpoint를 소유하는 HTTP Controller. session state, stream effects, RPC effects를 분리해 HTTP transport가 전역 dict/lock을 직접 조작하지 않게 한다.
96
+
97
+ ### `ciel_runtime_support/channel_mcp_transport.py`
98
+
99
+ 외부 Channel MCP의 legacy SSE·Streamable HTTP initialize, RPC request, response correlation과 notification dispatch를 조정하는 Transport Application Service. connection state/lock, HTTP codec와 side effects를 각각 9필드 이하 typed port로 분리한다.
100
+
101
+ ### `ciel_runtime_support/channel_notification_projection.py`
102
+
103
+ Native channel metadata 정규화, MCP notification envelope·capability, control/noise/superseded message filtering과 cursor 이후 notification projection을 소유하는 순수 Protocol Projection. provenance와 wake-noise 정책은 6필드 port로 주입한다.
104
+
105
+ ### `ciel_runtime_support/plan_artifact_controller.py`
106
+
107
+ 공유 plan artifact의 목록·조회·저장·latest projection과 channel announce를 소유하는 HTTP Controller/Repository Adapter. 경로 정규화와 HTTP 표현을 plan 생성 호출부에서 분리한다.
108
+
109
+ ### `ciel_runtime_support/anthropic_tool_turns.py`
110
+
111
+ 잘린 대화 기록의 짝 없는 Anthropic `tool_use`/`tool_result`를 안전한 text block으로 내리는 Protocol Normalization Service. 적용 여부는 provider 이름 비교가 아니라 adapter의 `ProviderRequestPolicy.normalize_historical_tool_turns`로 결정한다.
112
+
113
+ ### `ciel_runtime_support/advisor_policy.py`
114
+
115
+ Advisor tool schema, message/system projection, review focus·trigger·gate와 server-side advisor tool 제거를 담당하는 Application Policy. 텍스트와 의사결정 포트를 각각 6필드 이하로 나누며, server tool 지원 여부는 `ProviderAdapter.supports_server_advisor_tool` capability로 받아 provider 이름을 비교하지 않는다.
116
+
117
+ ### `ciel_runtime_support/channel_injection.py`
118
+
119
+ 대화형 CLI 메시지 주입 계층:
120
+ - `InputTransport` 포트
121
+ - `CallableInputTransport` 레거시 입력 어댑터
122
+ - `RuntimeInjectionPolicy` 런타임별 제출 전략
123
+ - `PromptInjection` 명령 객체
124
+ - `ChannelPromptInjector` 주입 오케스트레이터
125
+
126
+ SSE/MCP 수집 및 cursor 상태와 분리되어 있으며 Windows Console과 PTY가 같은 제출 계약을 사용한다.
127
+
128
+ → [[Architecture]]
129
+
130
+ ### `ciel_runtime_support/channel_event_projection.py`
131
+
132
+ SSE/MCP envelope에서 사용자 메시지와 metadata를 추출하고, 제어 이벤트를 제외하며, 민감 키를 redaction한 chat payload로 투영하는 순수 Channel Presentation Service. Transport, 저장소, 전역 상태에 의존하지 않아 SSE와 MCP notification 경로가 같은 해석 규칙을 공유한다.
133
+
134
+ ### `ciel_runtime_support/channel_session_repository.py`
135
+
136
+ Streamable HTTP session record의 조회, URL/session 중복 교체, 최대 보관 수 제한과 삭제를 소유하는 파일 기반 Repository. 경로·프로토콜 기본값·시간·프로세스·권한 효과를 주입하며 손상된 JSON과 chmod 실패를 경고로 노출한다.
137
+
138
+ ### `ciel_runtime_support/channel_session_lifecycle.py`
139
+
140
+ MCP Streamable HTTP session의 DELETE 요청, 이미 사라진 session의 멱등 처리와 stale session 정리를 담당하는 Channel Lifecycle Service. HTTP codec, Repository, transport, 로그 효과를 typed port로 받아 session 기록과 네트워크 정책을 분리한다.
141
+
142
+ ### `ciel_runtime_support/channel_compact_poll.py`
143
+
144
+ 대기 중인 `/compact` 요청의 polling cadence, in-flight 차단, defer 로그 간격과 injection 옵션을 관리하는 Channel Application Service. Windows Console과 POSIX PTY 루프가 동일 상태 전이를 사용한다.
145
+
146
+ ### `ciel_runtime_support/channel_compact_injection.py`
147
+
148
+ 대기 중인 channel compact request의 active tool/turn defer, `/compact` 명령 정규화, terminal 주입과 요청 소비를 소유하는 Application Service. Request repository와 terminal runtime을 각각 최대 5필드 typed port로 주입해 polling·terminal adapter와 저장소 정책을 분리한다.
149
+
150
+ ### `ciel_runtime_support/channel_backlog.py`
151
+
152
+ Transient chat tail을 기준으로 LLM/MCP cursor, clear floor, recovery cache와 활성 MCP session을 일관되게 fast-forward하는 Channel Application Service. cursor와 runtime 상태는 각각 최대 10필드의 typed port로 분리하며 status projection과 clear transaction이 같은 경계를 공유한다.
153
+
154
+ ### `ciel_runtime_support/channel_cursor_recovery.py`
155
+
156
+ Claude/Codex transcript의 queued-only wake를 찾아 LLM delivery cursor를 안전하게 되돌리는 Channel Recovery Service. transcript marker 기반 TTL cache, 최대 read 범위, clear-floor clamp 및 관측 로그를 typed policy/ports로 분리한다.
157
+
158
+ ### `ciel_runtime_support/channel_panel.py`
159
+
160
+ 채널 probe cache와 현재 설정을 사전 실행 메뉴의 행/값 projection으로 변환하는 Channel UI policy. 공식 플러그인, probe 분류, delivery mode는 6필드 `ChannelPanelPolicy`로 주입한다.
161
+
162
+ ### `ciel_runtime_support/channel_pending_injection.py`
163
+
164
+ 대기 중인 channel 메시지의 필터링, 중복 제거, wake claim, prompt 생성 및 터미널 주입을 조정하는 Channel Application Service. 상태 판정, prompt 전략, wake 저장소, I/O를 각각 10필드 이하 포트로 분리한다.
165
+
166
+ ### `ciel_runtime_support/channel_tool_context.py`
167
+
168
+ 외부 채널에서 시작된 tool-use의 원문 context를 bounded, thread-safe 저장소에 보관하고 대응하는 tool-result 후속 요청에 한 번만 주입하는 Channel Application Service. 저장소가 lock·eviction·consume-on-read를 소유하며 메시지 projection과 시간·텍스트·로그 효과는 typed ports로 분리한다.
169
+
170
+ ### `ciel_runtime_support/channel_pending_poll.py`
171
+
172
+ 채널 메시지 파일 marker, active-turn defer, delivery cursor와 in-flight 시작을 조정하는 polling 상태 머신. Windows Console과 POSIX PTY는 플랫폼별 active predicate와 로그 policy만 제공하고 동일 injection workflow를 사용한다.
173
+
174
+ ### `ciel_runtime_support/channel_terminal_proxy.py`
175
+
176
+ POSIX PTY의 생성, 터미널 크기 동기화, 표준 입출력 전달, channel/compact polling과 자식 프로세스 정리를 조정하는 Channel Infrastructure Adapter. Process, Terminal I/O, Policy, Polling 포트를 각각 10필드 이하로 주입하며 메인 composition root는 플랫폼 선택과 실제 콜백 조립만 담당한다.
177
+
178
+ ### `ciel_runtime_support/channel_terminal_dispatch.py`
179
+
180
+ Windows Console/POSIX PTY/direct subprocess 선택과 tracked child-process record 수명주기를 소유하는 Application Service. 플랫폼·TTY 설정, proxy adapter, direct process 효과를 각각 최대 5필드 typed port로 분리하며 Windows Adapter 실패 시 명시적으로 direct 실행으로 복구한다.
181
+
182
+ ### `ciel_runtime_support/terminal_platform_io.py`
183
+
184
+ 터미널 크기 fallback, POSIX PTY winsize ioctl, mouse/input-mode reset 시퀀스와 OS별 clipboard command 실행을 소유하는 Infrastructure Adapter. input reset 활성화·주기 clamp는 platform, environment, boolean codec, default stream만 받는 4필드 불변 Policy로 분리한다.
185
+
186
+ ### `ciel_runtime_support/windows_console_mode.py`
187
+
188
+ Windows `GetConsoleMode`/`SetConsoleMode`, console 지원 판정과 mouse-input bit 비활성화·복원 수명주기를 소유하는 Infrastructure Adapter. handle·boolean codec·environment는 3필드 port로 주입하고 Guard는 현재 mode callback을 명시적으로 받아 파사드나 전역 상태를 역참조하지 않는다.
189
+
190
+ ### `ciel_runtime_support/channel_transcript.py`
191
+
192
+ Claude/Codex JSONL transcript의 사용자 텍스트, assistant turn, tool call/result 및 활성 turn 상태를 해석하는 순수 Channel 도메인 서비스. `ChannelWakeStateReader`는 최신 transcript repository와 파서를 조합해 message별 wake 상태와 queued staleness를 판정하며 facade 전역에 의존하지 않는다.
193
+
194
+ ### `ciel_runtime_support/channel_transcript_repository.py`
195
+
196
+ Claude/Codex transcript scope, TTL cache, runtime별 검색 root, 최신 JSONL 선택과 bounded tail 읽기를 소유하는 Repository. home·clock·호환 cache/scope 상태를 명시적으로 주입받아 composition root의 filesystem 탐색을 제거한다.
197
+
198
+ ### `ciel_runtime_support/channel_message_policy.py`
199
+
200
+ MCP/SSE/Web Chat 메시지의 출처와 고유 참조, 이벤트 순서, coalescing identity를 해석하고 같은 스트림에서 superseded된 알림을 판정하는 순수 Channel 정책. 전송·저장 효과와 독립적이며 Provider나 composition root를 참조하지 않는다.
201
+
202
+ ### `ciel_runtime_support/channel_message_prompt.py`
203
+
204
+ Channel 메시지의 노이즈·scope 필터링, 안전한 metadata 축약, 일반/Web Chat/LLM prompt 표현을 소유하는 순수 projection 정책. MCP/SSE envelope 표시는 원문 JSON을 보존하면서 민감 metadata를 prompt header에서 제외한다.
205
+
206
+ ### `ciel_runtime_support/channel_event_identity.py`
207
+
208
+ MCP/SSE notification envelope에서 transport와 무관한 event identity를 만들고 stable/fallback chat dedupe key를 계산하는 순수 정책. 저장소의 최근 행 검색과 TTL 판단은 composition 계층에 남기고 identity 의미만 캡슐화한다.
209
+
210
+ ### `ciel_runtime_support/channel_message_dedupe.py`
211
+
212
+ stable/fallback event identity, 최근 저장 행, launch replay guard와 TTL을 조정해 중복 Channel 메시지를 선택하는 Application Service. identity 계산과 저장소 조회를 6필드 typed port로 결합하며 facade의 dedupe 분기를 제거한다.
213
+
214
+ ### `ciel_runtime_support/channel_message_repository.py`
215
+
216
+ Channel JSONL 메시지의 append transaction·크기 기반 회전·ID 재동기화, ID/cutoff 스캔, channel·recipient 가시성 필터, 앞뒤 방향 조회와 dedupe용 최근 행 조회를 소유하는 Repository. Windows `msvcrt`와 POSIX `flock` 기반 advisory lock도 이 인프라 경계가 캡슐화한다. condition/file-lock/dedupe/recipient 정책은 4필드 append port로 주입하며 손상된 개별 행은 격리하고 파일 I/O 실패는 경고로 노출한다.
217
+
218
+ ### `ciel_runtime_support/channel_launch_guard_repository.py`
219
+
220
+ Channel 시작 직후 replay dedupe guard의 만료 판정과 원자 저장을 소유하는 Repository. 파일 부재·만료는 정상적인 empty 상태로 처리하고, 손상·권한·I/O 실패는 명시적인 경고로 관측 가능하게 남긴다.
221
+
222
+ ### `ciel_runtime_support/channel_launch_policy.py`
223
+
224
+ Claude channel argument 생성, native/LLM/stdin bridge 선택, 외부 server 판정과 Claude channel auth probe를 소유하는 Launch Policy. passthrough, spec, delivery-mode, process 실행은 네 개의 명시적 Protocol port로 분리한다.
225
+
226
+ ### `ciel_runtime_support/channel_runtime_environment.py`
227
+
228
+ Channel probe, replay, pending scan, wake claim/inflight 및 Codex/Windows submit timing 환경변수의 기본값·파싱·상하한 clamp를 소유하는 순수 Environment Policy.
229
+
230
+ ### `ciel_runtime_support/channel_cursor_repository.py`
231
+
232
+ MCP delivery, LLM delivery, backlog clear-floor cursor의 공통 JSON 읽기와 원자 교체를 소유하는 Repository. 부재는 초기화 신호로 반환하고 손상·권한·write 실패는 경로가 포함된 경고로 노출한다. `ChannelCursorStatePolicy`는 durable cursor와 process cache의 monotonic 병합, 최초 scan/persist 여부와 newer-only commit 판정을 소유한다.
233
+
234
+ ### `ciel_runtime_support/channel_wake_claim_repository.py`
235
+
236
+ 터미널 wake prompt의 메시지 ID/문자열 참조 판정과 교차 프로세스 claim의 TTL·원자 저장을 소유하는 Repository. 파일 lock, clock, TTL policy, logger를 주입받고 메인의 in-memory fast path와 독립적으로 동작한다.
237
+
238
+ ### `ciel_runtime_support/channel_wake_delivery_repository.py`
239
+
240
+ 터미널 wake delivery의 in-memory delivered set과 prompt map을 하나의 thread-safe Repository로 관리한다. 중복 delivery 방지, prompt 기록, stale release, inflight 완료, rollback, bounded pruning과 cursor commit 효과의 순서를 캡슐화하며 facade의 기존 전역 컬렉션은 호환 관찰용 alias로만 유지한다.
241
+
242
+ ### `ciel_runtime_support/channel_terminal_input.py`
243
+
244
+ 플랫폼·환경별 Enter sequence 선택, 실제 사용자 입력에서 submit key 관찰, synthetic CR 정규화, wake byte 조립과 bounded delay를 소유하는 Terminal Input 정책. `TmuxPaneSnapshot`은 submit 확인용 pane capture와 오류 진단을 캡슐화한다. SGR/X10/숫자형 terminal mouse report의 TUI prompt 유입 차단과 Windows `CONIN$` fallback도 이 모듈이 소유한다.
245
+
246
+ ### `ciel_runtime_support/tool_guard_hooks.py`
247
+
248
+ Claude 설정의 tool guard hook을 읽고, 레거시 hook 제거와 중복 정규화 후 원자적으로 저장하는 Security/Configuration Service. matcher 유무별 지원 event 집합과 기본 `ToolGuardHookPolicy`도 이 경계가 소유한다. 구버전 npm 설치 경로의 symlink/wrapper 호환 shim도 typed installer가 소유하며, 이벤트 정책과 파일 시스템 효과를 분리하고 권한 제한 실패를 경고로 남긴다.
249
+
250
+ ### `ciel_runtime_support/tool_exposure_policy.py`
251
+
252
+ Provider adapter의 blocked tool 선언과 workflow/plan 상태를 결합해 upstream `tools` 및 강제 `tool_choice`를 불변 투영하는 Policy. 정책 입력과 로그는 4필드 typed port로 주입하며 facade는 Router 호환 delegate만 제공한다.
253
+
254
+ ### `ciel_runtime_support/tool_side_effect_dedupe.py`
255
+
256
+ 외부 메시지 전송 같은 side-effect tool call의 canonical input hash와 bounded TTL 중복 억제를 담당하는 Tool Policy. 최근 호출 상태와 lock은 repository가 소유하고 audit/log/clock 효과를 typed ports로 분리한다.
257
+
258
+ ### `ciel_runtime_support/synthetic_tool_policy.py`
259
+
260
+ Clarification 응답 뒤의 synthetic TaskList 추가와 강제 EnterPlanMode 요청의 로컬 tool response 생성을 담당한다. TaskList Policy와 PlanMode Controller는 각각 7필드 이하 포트를 사용하며 provider/thinking/plan 상태 판정과 HTTP 출력 효과를 분리한다.
261
+
262
+ ### `ciel_runtime_support/settings_repository.py`
263
+
264
+ Claude settings 호환 이름을 `SecureJsonRepository`에 연결하는 얇은 Configuration compatibility module. 기존 settings 호출자의 타입 이름을 보존하면서 저장 효과 구현은 일반 secure JSON 경계에 위임한다.
265
+
266
+ ### `ciel_runtime_support/secure_json_repository.py`
267
+
268
+ Settings, MCP config, probe cache, compact request 같은 JSON artifact를 동일 디렉터리 임시 파일로 원자 저장하는 Configuration Repository. chmod, process id, clock, logger를 주입하며 읽기 손상과 private-permission 실패를 일관된 진단 이벤트로 만든다.
269
+
270
+ ### `ciel_runtime_support/statusline_settings.py`
271
+
272
+ Statusline script 설치와 Claude `statusLine` 설정 mutation을 담당하는 Configuration Service. JSON persistence는 `JsonSettingsRepository`에 위임하고 script 실행 권한과 사용자 경고만 별도 효과로 관리한다.
273
+
274
+ ### `ciel_runtime_support/request_trace.py`
275
+
276
+ Anthropic message/tool block 요약과 request/response JSONL trace 저장·회전을 담당하는 Observability Adapter. `ResponseTraceController`가 token usage sink·event bus·response trace를 하나의 관측 흐름으로 조정하고, `RouterMessagePreviewPolicy`가 opt-in 사용자 메시지 preview의 제한·redaction·정규화를 담당한다. trace 활성화·경로·용량 정책과 content projection을 작은 포트로 분리하고 저장 실패를 진단 로그로 노출한다.
277
+
278
+ ### `ciel_runtime_support/request_shortcuts.py`
279
+
280
+ 대화 메시지에 포함된 local router marker, live option/API-key 값, channel bridge 명령과 ImportSession 인자를 해석하는 Application Policy. 런타임별 message decoding은 `ShortcutTextServices` Port로 주입받는다.
281
+
282
+ ### `ciel_runtime_support/prompt_injection.py`
283
+
284
+ Protocol Strategy Registry. Anthropic/OpenAI Chat/OpenAI Responses/Ollama/Google 요청의 system context 배치 차이를 캡슐화하고 입력 객체와 Anthropic cache-control identity block을 보존한다.
285
+
286
+ ### `ciel_runtime_support/provider_descriptor.py`
287
+
288
+ Provider 이름, 표시명, alias와 concrete Adapter factory를 정의하는 data-driven discovery Registry. 동작 정책은 descriptor가 아니라 concrete Provider Adapter가 소유한다.
289
+
290
+ ### `ciel_runtime_support/credentials.py`
291
+
292
+ API-key 파싱·중복 제거·ProviderConfig 투영, secret masking/fingerprint/redaction과 inbound OAuth header pass-through를 담당하는 Credential Application Service. `CredentialChain`은 인증 소스 우선순위를, source 구현은 allowlist와 header 투영을 소유하며 facade에는 호환 위임 함수만 남는다.
293
+
294
+ ### `ciel_runtime_support/credential_management.py`
295
+
296
+ 단일·다중 API key 저장과 삭제를 transaction으로 조정하는 Credential Management Service. 외부 credential 저장소, config 저장, model-cache 무효화, 다른 provider key 보존과 rotation cursor reset을 typed ports/repository로 분리한다. `EnvCredentialRepository`는 NVIDIA 같은 외부 dotenv credential의 기본값 보존·보안 권한·단일 key 삭제를 캡슐화하며, runtime-owned dotenv 파싱 규칙도 이 인프라 경계에 둔다.
297
+
298
+ ### `ciel_runtime_support/credential_cli.py`
299
+
300
+ API key 상태·단일/다중 입력·삭제 명령과 non-TTY secret 입력 차단을 담당하는 Credential CLI Controller. credential application service와 terminal I/O를 typed ports로 분리한다.
301
+
302
+ ### `ciel_runtime_support/routing_fallback.py`
303
+
304
+ 실패 원인별 provider/model 후보를 중복 없이 계산하는 순수 Fallback Policy. 네트워크 호출과 retry state를 포함하지 않아 기존 upstream retry 및 key cooldown 계층과 독립적이다.
305
+
306
+ ### `ciel_runtime_support/usage_events.py`
307
+
308
+ Provider 중립 `UsageEvent`, sink Port, bounded JSONL Adapter와 집계 함수를 제공한다. token 수 외의 prompt·credential 내용은 저장하지 않는다.
309
+
310
+ ### `ciel_runtime_support/ui_text.py`
311
+
312
+ 다국어 prelaunch label과 provider guidance 데이터. composition root와 UI controller에서 정적 번역 데이터를 분리한다.
313
+
314
+ ### `ciel_runtime_support/architecture_budget.py`
315
+
316
+ 모든 프로덕션 Python 파일의 최종 4,999줄 상한과 `ciel_runtime.py` 마이그레이션 ratchet을 검사한다. ratchet은 감소만 허용하며 최종적으로 두 예산을 일치시킨다.
317
+
318
+ ### `ciel_runtime_support/launch_state.py`
319
+
320
+ 작업 디렉터리별 최근 runtime/provider/model을 저장하는 Repository와 native/routed 전환 시 session fork 여부를 계산하는 순수 Policy. 파일 저장 효과와 전환 판단을 분리한다.
321
+
322
+ ### `ciel_runtime_support/launch_diagnostics.py`
323
+
324
+ Claude·Codex·Codex app-server·AGY 실행 명령과 환경을 비밀값 마스킹 후 기록하는 Observability Adapter. app-server listen target과 provider override도 동일한 redaction 정책으로 투영한다. Claude stderr의 크기 제한 회전, console/file tee, subprocess fallback을 캡슐화하여 launch application service에서 파일·파이프·스레드 세부 구현을 제거한다.
325
+
326
+ ### `ciel_runtime_support/llm_presentation_data.py`
327
+
328
+ LLM preset, timeout profile, model family, live option 설명을 보관하는 불변 Presentation Catalog. 설정 mutation과 UI controller에서 대규모 정적 데이터를 분리한다.
329
+
330
+ ### `ciel_runtime_support/statusline_script.py`
331
+
332
+ 설치되는 독립 statusline 프로그램의 배포 자산. 설치·설정 mutation은 `statusline_settings.py`가 계속 담당한다.
333
+
334
+ ### `ciel_runtime_support/slash_command_assets.py`
335
+
336
+ 설치되는 Claude slash-command 문서, version command, 현재·legacy request marker와 owned-file 판정 marker의 정적 배포 자산. facade는 호환 이름을 직접 re-export하며 command 설치 정책과 파일 효과는 composition 및 configuration service에 남긴다.
337
+
338
+ ### `ciel_runtime_support/command_asset_installer.py`
339
+
340
+ Claude command와 Codex prompt의 소유권 표식, 사용자 파일 보존, stale asset 정리, 권한 설정을 소유하는 Infrastructure Adapter. `CommandAsset` 값 객체가 내용과 ownership marker를 함께 전달해 filename 조건 분기를 제거한다.
341
+
342
+ ### `ciel_runtime_support/process_control.py`
343
+
344
+ Windows tasklist/CIM/taskkill과 POSIX signal/ps 기반 PID 생존 확인·프로세스 검색·종료를 캡슐화하는 Runtime Infrastructure Adapter. Query, Inspection, Signal 포트를 분리하며 명령행·환경·cwd 조회, descendant tree와 ciel-runtime wrapper parent 탐색, Windows netstat와 Linux procfs/lsof/ss 기반 port listener 탐색을 제공한다. `ProcessTreeController.terminate_port`는 protected PID 제외, listener별 종료와 집계 출력을 하나의 OS-neutral workflow로 조정하며 TERM/KILL 및 taskkill 실패를 구조화된 경고로 노출한다.
345
+
346
+ ### `ciel_runtime_support/executable_discovery.py`
347
+
348
+ 플랫폼별 실행 파일 확장자·추가 설치 경로, PATH 탐색, subprocess command 해석, uvx fallback과 tool-guard 위치 탐색을 소유하는 Runtime Infrastructure Resolver. launch와 MCP 설정 코드에서 Windows/POSIX 경로 분기를 제거한다.
349
+
350
+ ### `ciel_runtime_support/cli_parser.py`
351
+
352
+ `ciel-runtimectl`의 argparse 문법과 명령-handler 연결을 소유하는 CLI Adapter. Launch, Runtime, Settings, Provider, Models 명령군을 각각 10필드 이하 typed port로 나누고 메인 composition root는 실제 handler만 조립한다.
353
+
354
+ ### `ciel_runtime_support/channel_probe_report.py`
355
+
356
+ channel capability probe 결과를 capable/non-capable/inconclusive/skipped 행과 진단 hint로 투영하는 Presentation Service. probe 실행과 CLI 명령 해석에서 결과 formatting을 분리한다.
357
+
358
+ ### `ciel_runtime_support/channel_connection_registry.py`
359
+
360
+ SSE/Streamable HTTP channel connection 상태, 공개 status projection, MCP session-loss 전이와 JSON-RPC 응답 대기를 소유하는 thread-safe Repository. 공유 dict/lock/condition 접근을 transport worker에서 분리한다.
361
+
362
+ ### `ciel_runtime_support/channel_connection_lifecycle.py`
363
+
364
+ SSE/Streamable HTTP 연결 설정의 정규화, connection state 생성·교체, stale session 정리, worker 선택·기동과 stop 전이를 소유하는 Application Lifecycle Service. Factory와 thread-safe Store를 분리하고 메인에는 composition wrapper만 둔다.
365
+
366
+ ### `ciel_runtime_support/channel_connection_worker.py`
367
+
368
+ 일반 SSE와 MCP Streamable HTTP의 연결·재연결·session-loss·legacy fallback 상태 머신을 소유하는 Infrastructure Adapter. thread-safe state store와 typed effect/policy 포트로 protocol orchestration을 분리하며, 메인 모듈은 런타임 의존성을 조립하는 호환 wrapper만 유지한다.
369
+
370
+ ### `ciel_runtime_support/channel_inflight.py`
371
+
372
+ 터미널에 주입된 channel 메시지의 확인, 재조회, stale 복구 및 대기 전이를 담당하는 상태 머신. Windows Console과 POSIX PTY 프록시는 동일한 순수 전이 정책을 사용하고 cursor·wake 저장소·로그는 effect 포트로 주입한다.
373
+
374
+ ### `ciel_runtime_support/channel_llm_context.py`
375
+
376
+ 대기 channel 메시지를 LLM request context에 결합하는 Application Service. delivery/skip 정책, cursor·message Repository, wake/prompt Projection을 분리하며 upstream 전달 전 `ciel_runtime_` private metadata를 copy-on-write 방식으로 제거한다. 메인 composition root는 global cursor와 파일 저장 adapter만 조립한다.
377
+
378
+ ### `ciel_runtime_support/channel_mcp_tools.py`
379
+
380
+ 내장 Channel MCP 도구의 schema catalog와 호출 dispatcher를 소유하는 Application Service. compact 요청, 채팅·파일 저장, LLM 옵션 변경은 6필드 `ChannelMcpToolServices` 포트로 주입되어 MCP protocol projection과 인프라 구현을 분리한다.
381
+
382
+ ### `ciel_runtime_support/sse_stream.py`
383
+
384
+ SSE byte stream을 event frame으로 변환하는 Transport Codec. 일반 SSE와 MCP Streamable HTTP worker가 동일 parser를 사용하며, 종료 판정·event dispatch·잘못된 retry 관측을 `SseStreamServices`로 주입한다. `SseRetryState`는 예외 종료 후에도 서버의 retry 지시가 reconnect 정책에 전달되도록 보존한다.
385
+
386
+ ### `ciel_runtime_support/windows_console_input.py`
387
+
388
+ Windows Console `INPUT_RECORD` 생성, UTF-16 surrogate 변환, 입력 queue 소비 확인을 담당하는 플랫폼 Adapter. Channel wake 오케스트레이션과 Win32 입력 세부 구현을 분리한다.
389
+
390
+ ### `ciel_runtime_support/config_repository.py`
391
+
392
+ 기본 config schema 생성, JSON-compatible deep merge, legacy key/model 정규화, 원자적 저장과 mtime cache를 소유하는 Configuration Repository. `ConfigRepositoryProvider`가 경로 변경을 감지해 repository instance lifecycle을 관리하므로 facade에는 mutable repository cache가 남지 않는다.
393
+
394
+ ### `ciel_runtime_support/config_value_codec.py`
395
+
396
+ 환경 변수, CLI, 저장된 설정에서 사용하는 scalar 값의 변환과 유효성 검증을 소유하는 순수 Codec. 숫자의 양수·유한성 규칙과 boolean/JSON 파싱 규칙을 composition root와 상태 저장소에서 분리한다.
397
+
398
+ ### `ciel_runtime_support/llm_presets.py`
399
+
400
+ 모델 용량과 공급자 특성을 반영해 LLM 프리셋을 적용하는 애플리케이션 서비스. `PresetIdentityPolicy`가 preset ID·label·slash-command·context alias 정규화와 해석을 소유한다.
401
+
402
+ ### `ciel_runtime_support/llm_option_config.py`
403
+
404
+ LLM 옵션의 입력 검증, Provider 설정 변경, 컨텍스트·출력 보정 및 설정 저장을 조정하는 Configuration Application Service. `AutoLlmOptionsService`는 모델 변경, spec 갱신, context 동기화, preset 선택과 저장/cache 무효화를 하나의 transaction으로 조정한다. Repository, Model Policy, Preset Policy 포트를 분리해 의존성과 provider 규칙을 명시한다.
405
+
406
+ ### `ciel_runtime_support/llm_config_http.py`
407
+
408
+ `/ca/config/llm`의 현재 설정 payload projection, GET/POST workflow, action dispatch와 HTTP 오류 변환을 소유하는 Controller. identity, panel projection, mutation 전략과 HTTP I/O를 각각 7필드 이하 typed port로 분리하며 provider별 세부 mutation은 기존 application service에 위임한다.
409
+
410
+ ### `ciel_runtime_support/runtime_activity_repository.py`
411
+
412
+ Router activity, context compact, context usage snapshot의 event projection과 임시파일 기반 원자 저장을 통합하는 Repository. 경로·clock·event 효과는 각각 3필드 이하 typed port로 분리하며 저장 실패를 묵살하지 않고 구조화 경고로 노출한다.
413
+
414
+ ### `ciel_runtime_support/runtime_command_factory.py`
415
+
416
+ Provider/Runtime 설정을 정규화된 `ProviderConfig`, `RuntimeConfig`, `LaunchSpec`으로 만들고 등록된 Runtime Adapter를 통해 최종 argv/env를 생성하는 Factory. API-key parser와 Adapter Registry 생성 함수만 2필드 port로 주입한다.
417
+
418
+ ### `ciel_runtime_support/cli_dispatch.py`
419
+
420
+ 명시적 `CliServices` dependency object를 사용하는 CLI Application Service와 command dispatcher.
421
+
422
+ ### `ciel_runtime_support/cli_usage.py`
423
+
424
+ 제어 명령, headless 설정 flag, 지원 provider를 설명하는 CLI usage presentation. entrypoint와 dispatcher에서 정적 사용자 문구를 분리한다.
425
+
426
+ ### `ciel_runtime_support/headless_config.py`
427
+
428
+ `CIEL_RUNTIME_*` 환경 설정을 command 호출 계획으로 변환·적용하는 Configuration Application Service. `--ca-env-file` 인수 제거·경로 검증·dotenv 적용도 단일 effect port의 Loader가 소유한다. 일반 설정 명령, channel 명령, 환경 조회를 10필드 이하 포트로 분리하며 API key 우선순위와 provider option mapping을 한곳에서 관리한다.
429
+
430
+ ### `ciel_runtime_support/compatibility_test.py`
431
+
432
+ Provider text/tool_use/tool_result 호환성 진단을 실행하는 CLI Application Service. Configuration, mode, request, protocol, output 포트를 분리하며 각 포트는 최대 10개 의존성만 갖는다.
433
+
434
+ ### `ciel_runtime_support/compatibility_protocol.py`
435
+
436
+ Compatibility 검사의 tool schema, text/tool/tool-result 요청 payload, Anthropic content block 검증, usage 요약, HTTP Retry-After 오류 projection을 담당하는 Protocol Codec. 모델별 token limit과 공통 header/time parser만 4필드 포트로 주입받는다. `CompatibilityProtocolApi`는 late-bound codec factory를 사용하는 명시적 Adapter로 기존 공개 함수를 투영하며, 동적 attribute forwarding 없이 facade wrapper를 제거한다.
437
+
438
+ ### `ciel_runtime_support/compatibility_probe.py`
439
+
440
+ Provider API-key probe 요청 조립과 다중 key 순회·오류 변환을 소유하는 Application Service. Provider Adapter의 `probe_strategy`, `model_alias_strategy` 선언으로 Ollama, OpenCode, NCP 및 Anthropic fallback을 선택하며 projection·routing·fallback 포트를 각각 10필드 이하로 분리한다.
441
+
442
+ ### `ciel_runtime_support/compatibility_runtime.py`
443
+
444
+ Compatibility 결과의 runtime metadata·context/output 경고를 투영하고 provider/model별 결과 cache를 기록하는 Projection Service와 Repository. `ClaudeCliCapabilityProbe`는 `--help` 결과에서 permission-mode 지원을 탐지하고 executable별 결과를 캐시한다. Provider compatibility policy, runtime 조회, 저장·clock을 각각 작은 typed port로 분리한다.
445
+
446
+ ### `ciel_runtime_support/claude_environment.py`
447
+
448
+ Claude Code 모델 별칭·컨텍스트 한도·환경 변수·런타임 settings를 구성하는 Policy/Projection 계층. native와 routed 환경 계약, 모델 family 선택, 셸 출력 형식을 composition root와 분리하며 각 의존성 그룹을 최대 10필드의 typed port로 제한한다.
449
+
450
+ ### `ciel_runtime_support/provider_choice.py`
451
+
452
+ Anthropic·AGY·Codex native/routed 선택 별칭과 설정 mutation/status를 명시적 Strategy 테이블로 관리하는 Application Controller. 표준 provider 선택은 기존 provider adapter 흐름에 위임하고 설정·저장·cache 효과는 5필드 typed port로 주입한다.
453
+
454
+ ### `ciel_runtime_support/chat_files.py`
455
+
456
+ Web/Channel chat attachment의 안전한 filename, text/base64 decoding, 환경 기반 크기 제한, 파일 저장과 router URL·Markdown projection을 소유하는 Repository. Clock만 2필드 port로 주입하며 facade와 HTTP handler에서 파일 효과를 제거한다.
457
+
458
+ ### `ciel_runtime_support/package_lifecycle.py`
459
+
460
+ Claude Code·Codex·AGY 같은 npm 기반 runtime executable의 탐색, active prefix 설치, 최신 버전 비교와 자동 update를 재사용하는 Application Service. Ciel Runtime 자체 update는 현재 package root/prefix를 유지하고 새 package entrypoint로 재시작하는 별도 `SelfUpdateLifecycle`이 담당한다. 두 서비스 모두 최대 10필드 typed port를 사용한다.
461
+
462
+ ### `ciel_runtime_support/provider_model_selection.py`
463
+
464
+ Provider 모델 alias/request 해석과 catalog projection뿐 아니라 명시적 모델·Advisor 모델 선택 시 profile·context·preset·timeout·custom model 저장을 조정하는 Application Controller를 제공한다. native Advisor 사용 여부와 Z.AI의 Haiku/Opus/Sonnet 동기화 같은 provider별 mutation은 해당 adapter 정책이 소유한다. `ProviderModelSelectionApi`는 late-bound service factory로 facade의 model-selection 공개 계약을 투영한다.
465
+
466
+ ### `ciel_runtime_support/router_client_lifecycle.py`
467
+
468
+ 라우터 client lease 저장소, wrapper-root 기반 기존 client tree 종료, managed-router idle watchdog, 활성 client supervisor, 실행 수명주기와 종료 진단을 담당한다. lease 삭제·파일·환경·스레드 효과를 캡슐화하고 health/start/stop 동작은 작은 typed port로 주입한다.
469
+
470
+ ### `ciel_runtime_support/agy_cli.py`
471
+
472
+ AGY passthrough 인수 분석과 Claude 호환 인수 매핑.
473
+
474
+ ### `ciel_runtime_support/agy_installer.py`
475
+
476
+ 공식 AGY manifest의 플랫폼/아키텍처 선택, 조회·다운로드, sha512 검증, archive 설치, post-install 및 native update fallback을 소유하는 Runtime Installation Adapter. executable·version·upgrade·출력 효과는 6필드 typed port로 주입되고 facade는 호환 함수만 제공한다.
477
+
478
+ ### `ciel_runtime_support/codex_cli.py`
479
+
480
+ Codex passthrough, resume 및 채널 관련 인수 정규화.
481
+
482
+ ### `ciel_runtime_support/codex_app_server.py`
483
+
484
+ Codex App Server 프로세스와 JSON-RPC/WebSocket 상태 조정.
485
+
486
+ ### `ciel_runtime_support/provider_adapters.py`
487
+
488
+ Provider Adapter Registry와 기존 import 경로를 위한 호환 re-export 진입점. 구체 Provider 구현은 `providers/` 하위 모듈이 소유하며, 이 모듈은 이름·표시 label·factory 및 전체 Provider 기본 설정 조립만 담당한다.
489
+
490
+ ### `ciel_runtime_support/provider_model_identity.py`
491
+
492
+ Provider 이름·alias 정규화, model ID 정규화·정렬·중복 제거, Claude-facing alias 왕복 및 표시명 프로젝션을 소유하는 Domain Service. 공통 알고리즘은 Registry port에만 의존하고 Provider별 표시 규칙은 각 Adapter의 Strategy로 위임한다. `ProviderModelIdentityApi`는 기존 keyword parameter 이름까지 명시적으로 보존하면서 facade의 identity wrapper를 제거한다.
493
+
494
+ ### `ciel_runtime_support/provider_contract_projection.py`
495
+
496
+ 등록된 Provider Adapter와 legacy config contract를 결합해 endpoint, request/catalog/context/configuration 정책과 menu badge를 투영하는 Provider-neutral API. 네 개 typed port만 사용하며 facade와 Provider 이름 분기를 공유하지 않는다.
497
+
498
+ ### `ciel_runtime_support/providers/__init__.py`
499
+
500
+ Provider 구현 패키지의 안정적인 공개 진입점. 분리된 공통 기반 클래스를 기존 import 사용자에게 re-export한다.
501
+
502
+ ### `ciel_runtime_support/providers/base.py`
503
+
504
+ Bearer/API-key 인증, 무인증 및 OpenAI-compatible protocol 선택을 제공하는 공통 Provider transport 기반 클래스. 공통 persisted configuration shape와 안전한 중첩 기본값 복제를 제공하지만 구체 Provider 이름이나 Registry는 소유하지 않는다.
505
+
506
+ ### `ciel_runtime_support/providers/catalog.py`
507
+
508
+ 표준 OpenAI Chat/Models API를 제공하는 hosted provider의 immutable specification과
509
+ 공통 Adapter factory. 이름·label·기본 URL·모델 fallback·별칭·endpoint만 데이터로
510
+ 선언하고, 인증·protocol·context 동작은 `CatalogOpenAIProviderAdapter`가 공유한다.
511
+
512
+ ### `ciel_runtime_support/providers/anthropic_catalog.py`
513
+
514
+ MiniMax 계열처럼 Anthropic Messages wire 계약을 제공하는 hosted provider의 별도
515
+ 카탈로그. OpenAI 호환 카탈로그와 분리해 protocol 선택과 thinking 보존을 명시한다.
516
+
517
+ ### `ciel_runtime_support/providers/cloud.py`
518
+
519
+ 계정·deployment에 따라 endpoint가 달라지는 cloud Adapter. 현재 Azure OpenAI의 raw
520
+ `api-key`, deployment URL 및 version query 조립을 소유한다.
521
+
522
+ ### `ciel_runtime_support/providers/anthropic.py`
523
+
524
+ Anthropic native/routed Adapter. Anthropic protocol, context hint, API-key 상태, built-in Advisor 안내와 native/routed UI 정책을 소유한다.
525
+
526
+ ### `ciel_runtime_support/anthropic_model_policy.py`
527
+
528
+ Anthropic model family, context/output limit metadata, adaptive-thinking runtime hint, Claude Code capability inference와 registry 추천 preset을 소유하는 Provider Domain Policy. model registry와 launch 환경이 동일한 metadata 규칙을 공유하며, 주입이 필요 없는 순수 함수는 facade가 직접 compatibility export한다.
529
+
530
+ ### `ciel_runtime_support/providers/constants.py`
531
+
532
+ Provider 모듈들이 공유하는 기본 endpoint와 Z.AI fallback catalog 상수. 메인 composition root나 Registry 구현에 의존하지 않는다.
533
+
534
+ ### `ciel_runtime_support/providers/native.py`
535
+
536
+ Codex 및 AGY native provider-selection Adapter. native/routed 표시, API-key 상태와 Runtime 소유 모델 설정 정책을 중앙 Registry 구현에서 분리한다.
537
+
538
+ ### `ciel_runtime_support/providers/ollama.py`
539
+
540
+ 로컬 Ollama와 Ollama Cloud Adapter. Ollama protocol endpoint, context·option 정책, catalog fallback 및 launch model alias 전략을 소유한다.
541
+
542
+ ### `ciel_runtime_support/providers/ollama_runtime.py`
543
+
544
+ Ollama `/api/show` model specification, `/api/ps` loaded runtime inspection, tag matching과 runtime context 기반 output guard를 소유하는 Provider-specific Runtime Service. HTTP·model/context codec은 9필드 typed service port로 주입된다. `OllamaRuntimeApi`는 조회·변환 공개 계약을 명시적으로 투영하고, facade에는 patch 가능한 runtime-info port를 output guard에 조립하는 함수만 남긴다.
545
+
546
+ ### `ciel_runtime_support/providers/ollama_context.py`
547
+
548
+ Ollama model-context cache 일치, dynamic `num_ctx` bucket, preset cap, option/timeout projection과 context-error retry 축소를 소유하는 Provider Policy. facade는 의존성을 조립하고 기존 공개 이름만 호환 export한다.
549
+
550
+ ### `ciel_runtime_support/output_budget.py`
551
+
552
+ 요청·provider 출력 token 상한, context reserve와 입력 token 추정에 따른 출력 cap을 결정하는 Provider-neutral Domain Policy. `OpenAIContextBudgetPolicy` Strategy는 OpenAI-compatible provider의 명시적 context 설정, runtime model capacity, preset cap과 NVIDIA 기본값의 우선순위를 소유한다.
553
+
554
+ ### `ciel_runtime_support/providers/openrouter.py`
555
+
556
+ OpenRouter 인증, OpenAI protocol capability와 hosted context 정책을 소유하는 독립 Adapter.
557
+
558
+ ### `ciel_runtime_support/providers/lm_studio.py`
559
+
560
+ LM Studio catalog 경로, local capability, loaded-model readiness와 context/status 정책을 소유하는 독립 Adapter.
561
+
562
+ ### `ciel_runtime_support/providers/vllm.py`
563
+
564
+ vLLM model-selection requirement, local capability, remote context discovery와 native readiness 정책을 소유하는 독립 Adapter.
565
+
566
+ ### `ciel_runtime_support/providers/nvidia.py`
567
+
568
+ NVIDIA hosted 인증, NCP model alias, streaming requirement, context 및 router-only 호환성 정책을 소유하는 독립 Adapter.
569
+
570
+ ### `ciel_runtime_support/providers/nvidia_runtime.py`
571
+
572
+ NVIDIA hosted의 NCP 환경/API key 투영, proxy 설치·기동·종료·readiness 대기와 upstream model ID 변환을 소유하는 Provider Runtime Adapter. 설정·환경 reader·HTTP·process lifecycle은 분리된 typed port로 주입되며 `NvidiaRuntimeApi`가 공개 compatibility 계약을 명시적으로 투영한다.
573
+
574
+ ### `ciel_runtime_support/providers/nim.py`
575
+
576
+ Self-hosted NVIDIA NIM의 local capability, catalog selection, context discovery와 native readiness 정책을 소유하는 독립 Adapter.
577
+
578
+ ### `ciel_runtime_support/providers/deepseek.py`
579
+
580
+ DeepSeek Anthropic-compatible endpoint, fallback catalog, tool-choice 제약과 context/status 정책을 소유하는 독립 Adapter.
581
+
582
+ ### `ciel_runtime_support/providers/zai.py`
583
+
584
+ Z.AI Anthropic-compatible endpoint, GLM fallback catalog, model-ID 정규화와 context/status 정책을 소유하는 독립 Adapter.
585
+
586
+ ### `ciel_runtime_support/providers/kimi.py`
587
+
588
+ Kimi Anthropic/OpenAI protocol 선택, K3 1M context profile, tool-choice·thinking 정규화와 catalog/status 정책을 소유하는 독립 Adapter.
589
+
590
+ ### `ciel_runtime_support/providers/fireworks.py`
591
+
592
+ Fireworks.ai 인증, management catalog scope, account 추론, protocol 선택과 모델 metadata projection 정책을 소유하는 독립 Adapter.
593
+
594
+ ### `ciel_runtime_support/providers/opencode.py`
595
+
596
+ OpenCode Zen의 모델별 protocol routing, endpoint override, catalog/status, UI 표시 및 router model metadata projection을 소유하는 독립 Adapter. 중앙 model-object builder에는 OpenCode 이름 분기가 없다.
597
+
598
+ ### `ciel_runtime_support/providers/opencode_go.py`
599
+
600
+ OpenCode 공통 routing 정책을 확장하면서 OpenCode Go 전용 endpoint·label·인증 오류를 소유하는 독립 Adapter.
601
+
602
+ ### `ciel_runtime_support/provider_compatibility.py`
603
+
604
+ Provider transport Adapter와 분리된 Advisor 전송, 호환성 실패 진단, runtime metadata projection, 자동 웹 검색 및 Claude compatibility prompt 정책 Registry. 기본 정책과 Provider별 override를 7필드 불변 정책으로 조합한다.
605
+
606
+ ### `ciel_runtime_support/ollama_catalog.py`
607
+
608
+ Ollama Library 모델 ID, tag별 context window와 timeout을 계산하는 Functional Core이며, `latest` tag의 cloud context fallback, catalog tag 그룹화·기존 context 보존·context map 갱신 workflow도 소유한다. 파일·네트워크 효과는 6필드 `OllamaCatalogRefreshServices` 또는 명시적 조회 callback으로 주입되어 메인 composition root에는 실제 adapter 조립만 남는다. 의존성이 없는 parser·identity 함수는 facade가 직접 compatibility export한다.
609
+
610
+ ### `ciel_runtime_support/ollama_catalog_repository.py`
611
+
612
+ Ollama catalog의 원자적 JSON 저장과 Ollama API/Library HTTP 조회를 소유하는 Infrastructure Repository. catalog Functional Core에서 파일 권한·임시 파일 교체·응답 크기 제한·tag page fallback 세부를 분리한다.
613
+
614
+ ### `ciel_runtime_support/ollama_context_sync.py`
615
+
616
+ `/api/show` → cached catalog → Ollama Library → model-name hint 순서로 context capacity를 탐색하고 provider 설정 상한을 전이하는 Application Service. source port와 policy port를 분리해 중앙 facade의 Ollama 조건 분기를 제거한다.
617
+
618
+ ### `ciel_runtime_support/ollama_forwarding.py`
619
+
620
+ Ollama upstream 요청, context retry, rate-limit, streaming, Advisor 및 channel delivery를 조정하는 Provider Application Service. Request, RateLimit, Streaming, Advisor, Response 포트를 분리하고 각 포트를 9필드 이하로 제한한다.
621
+
622
+ ### `ciel_runtime_support/lm_studio_runtime.py`
623
+
624
+ LM Studio runtime model discovery, load/unload lifecycle, target context 계산과 loaded-context guard를 소유하는 Provider Runtime Service. HTTP I/O와 context 정책을 분리된 포트로 주입받아 공통 composition root에 LM Studio 상태 분기를 남기지 않는다. `LmStudioLifecycleApi`가 lifecycle 공개 함수를 명시적으로 투영한다.
625
+
626
+ LM Studio v0/v1 model API에서 현재 runtime model, 최대·실제 loaded context와 instance 상태를 탐색하고 model load/unload, 목표 context 계산과 부족 context self-heal을 수행하는 Provider Application Service. API URL, HTTP, model ID·context 정책을 9필드 이하 port로 주입하고 각 API 실패를 provider 진단 로그로 남긴다.
627
+
628
+ ### `ciel_runtime_support/openai_forwarding.py`
629
+
630
+ OpenAI-compatible chat 전달, streaming, retry, Advisor gate 및 Anthropic 응답 projection을 조정하는 Provider Application Service. NVIDIA 같은 특수 동작은 Provider 이름 비교 대신 Adapter의 request policy로 입력받는다.
631
+
632
+ ### `ciel_runtime_support/response_collection.py`
633
+
634
+ Responses API projection을 위한 비스트리밍 chat 수집 Template Method. Ollama/OpenAI 차이는 `ChatCollectionStrategy`로 주입하고, 요청·rate-limit·응답 projection 포트를 분리한다.
635
+
636
+ ### `ciel_runtime_support/protocols/chat_projection.py`
637
+
638
+ Anthropic Messages 이력을 Ollama/OpenAI chat wire message로 변환하는 순수 Protocol projection. 텍스트 필터와 tool-result 문맥 정책을 포트로 분리하고, OpenAI의 assistant tool-call/tool-result 인접성 불변조건과 orphan history 복구도 이 계층에서 보장해 전송·Provider 선택 로직과 격리한다.
639
+
640
+ ### `ciel_runtime_support/protocols/tool_result_projection.py`
641
+
642
+ 성공·실패·unchanged Read 결과를 upstream chat 문맥과 다음 단계 지침으로 투영하는 Protocol Service. unchanged 판정, 길이 제한, truncation을 3필드 포트로 받아 provider wire projection이 메인 전역 정책에 직접 결합되지 않게 한다.
643
+
644
+ ### `ciel_runtime_support/protocols/pseudo_tool_history.py`
645
+
646
+ 모델이 text로 출력한 `<invoke>` 및 tool-name XML을 실제 structured tool call로 해석하고, 과거 assistant history의 가짜 호출 text를 제거하는 Protocol Normalization Service. 사용 가능한 tool 이름·alias·argument repair·로그를 5필드 포트로 주입한다.
647
+
648
+ ### `ciel_runtime_support/upstream_retry.py`
649
+
650
+ Provider 공통 JSON 요청, 직접 요청 및 OpenAI stream 요청의 retry transport를 소유한다. 재시도 정책, API-key rotation, rate-limit 관측, HTTP I/O를 별도 포트로 분리하며 각 포트는 7필드 이하로 제한한다.
651
+
652
+ ### `ciel_runtime_support/provider_limits.py`
653
+
654
+ API 키 순환과 학습형 rate-limit 상태·backoff·적용 정책을 캡슐화한 공급자 서비스.
655
+
656
+ ### `ciel_runtime_support/rate_limit_policy.py`
657
+
658
+ RPM 설정 해석, 예약 capacity, sliding-window timestamp 정리, Retry-After/date와 reset epoch 해석, duration/header projection을 소유하는 순수 Domain Policy. rate-limit 상태 저장과 upstream retry 효과에서 HTTP 숫자 해석을 분리하며, stateless parser는 facade wrapper 없이 직접 compatibility export한다.
659
+
660
+ ### `ciel_runtime_support/provider_models.py`
661
+
662
+ 공급자별 모델 카탈로그 조회, fallback, cache 및 registry 갱신을 조정하는 모델 서비스.
663
+
664
+ ### `ciel_runtime_support/provider_catalog_sources.py`
665
+
666
+ 공급자 model catalog 응답 projection, Anthropic 공개/API source와 Fireworks pagination을 소유하는 Source Application Service. HTTP·metadata projection·정규화 정책과 provider별 source policy를 각각 최대 5필드 typed port로 분리하며, 기본 Factory가 불변 provider source 정책을 조립한다.
667
+
668
+ ### `ciel_runtime_support/provider_model_selection.py`
669
+
670
+ placeholder model 선택 강제, launch alias, 요청·tool model resolution과 routed Anthropic model-object projection을 소유하는 Provider Model Application Service. identity, selection, catalog port를 분리하고 NVIDIA alias도 provider 이름 비교가 아닌 Adapter 전략으로 처리한다.
671
+
672
+ ### `ciel_runtime_support/model_panel.py`
673
+
674
+ 모델·Advisor 모델 선택 행을 구성하는 UI projection. catalog와 presentation 포트를 분리하며 endpoint badge, Advisor 전용 안내 및 모델 주석은 Provider Adapter registry가 소유한다.
675
+
676
+ ### `ciel_runtime_support/model_catalog_projection.py`
677
+
678
+ 여러 model API 응답 shape를 공통 ID·context metadata map으로 투영하는 Provider Application Service. Provider 고유 metadata는 `ProviderAdapter.project_model_metadata` 전략에 위임하므로 Fireworks management 필드 같은 구체 구현이 중앙 parser에 섞이지 않는다.
679
+
680
+ ### `ciel_runtime_support/model_registry_repository.py`
681
+
682
+ provider model registry와 단기 model-list cache의 key 호환, TTL, metadata 정규화, 권한 설정과 JSON persistence를 소유하는 Repository. 경로와 model 정책 포트를 분리해 provider catalog service가 파일 형식을 직접 다루지 않게 한다. `ModelRegistryApi`는 300초 기본 TTL을 포함한 기존 공개 signature를 보존한다.
683
+
684
+ ### `ciel_runtime_support/model_cache_lifecycle.py`
685
+
686
+ 설정 cache 무효화와 model artifact 삭제, cached/custom/current model 합성, launch 직전 registry 우선 hydration을 조정하는 Application Service. facade는 테스트 가능한 typed port를 조립하고 호환 함수를 위임한다.
687
+
688
+ ### `ciel_runtime_support/api_key_cooldown.py`
689
+
690
+ 429 응답의 reset header 우선순위·상한 정책, secret hash 기반 상태 key, credential별 cooldown 등록·조회와 live-key 계산을 소유하는 Application Service. 영속화는 `RateLimitRepository`에 위임한다. `ApiKeyCooldownCompatibilityApi`는 동적 locator 없이 명시적 method로 facade 표면을 제공하며 매 호출마다 현재 Repository factory를 해석한다.
691
+
692
+ ### `ciel_runtime_support/npm_runtime.py`
693
+
694
+ npm 조회·global install command, semantic-like 버전 비교, CLI executable 버전 탐지와 설치 package-root/prefix 계산을 소유하는 Infrastructure Adapter. 메인 facade는 동일 공개 이름을 직접 re-export한다.
695
+
696
+ ### `ciel_runtime_support/install_diagnostics.py`
697
+
698
+ 실행 경로 후보 수집·중복 제거, launcher 버전 진단, 여러 npm 설치 root 비교와 shadowed-install 경고를 소유하는 Application Service. 환경·TTY·출력은 typed port로 주입된다.
699
+
700
+ ### `ciel_runtime_support/runtime_upgrade.py`
701
+
702
+ Ciel Runtime·Claude Code·Codex·AGY의 quiet upgrade 유스케이스, active npm prefix 유지와 설치 실패 안내를 소유하는 Application Service. executable 탐색·npm 명령·도구 설치는 두 개의 typed port 그룹으로 분리된다.
703
+
704
+ ### `ciel_runtime_support/runtime_restart.py`
705
+
706
+ self-update 이후 active package script·launcher·현재 Python 순서로 재시작하는 정책과 exec 효과를 소유하는 Application Service. 사용자 인수 정규화와 non-interactive upgrade 환경 projection도 함께 제공한다.
707
+
708
+ ### `ciel_runtime_support/visible_stream_filters.py`
709
+
710
+ chunk 경계에 걸친 `<think>`/`<thinking>` 상태와 노출된 tool-call artifact suffix를 제거하는 streaming Protocol State Machine. Ollama/OpenAI streaming adapter는 이 상태 객체를 주입받고 facade는 호환 이름만 re-export한다.
711
+
712
+ ### `ciel_runtime_support/router_rate_limit_service.py`
713
+
714
+ provider-global/legacy rate key, configured·learned RPM, 사용량 기록, server header 학습, 429 backoff와 penalty 대기를 묶는 Application Service. facade의 조립 중복을 제거하고 조회는 `RateLimitRepository`, 계산은 순수 rate-limit policy에 위임한다. `RouterRateLimitApi`는 late-bound service factory로 기존 공개 rate-limit 연산을 명시적으로 투영한다.
715
+
716
+ ### `ciel_runtime_support/provider_policy.py`
717
+
718
+ 공급자별 wire profile과 요청 메시지·thinking·tool-choice 정규화를 담당하는 순수 정책 서비스.
719
+
720
+ ### `ciel_runtime_support/provider_context.py`
721
+
722
+ Provider Adapter의 `ProviderContextPolicy`에 따라 모델 컨텍스트 용량 탐색 순서, context·output 설정 상한 및 LLM preset 추론을 수행하는 Provider-neutral 정책 서비스. 중앙 Provider 이름 분기 없이 managed/Ollama/standard 설정 전략을 실행한다.
723
+
724
+ ### `ciel_runtime_support/model_context_hints.py`
725
+
726
+ 정규화된 모델 identity와 Z.ai prefix, Qwen/Kimi family, Ollama catalog, preset metadata를 이용해 context capacity hint를 결정하는 순수 Domain Policy. 문자열 휴리스틱을 provider orchestration에서 분리하고 외부 metadata 조회를 4필드 포트로 제한한다.
727
+
728
+ ### `ciel_runtime_support/provider_timeout_policy.py`
729
+
730
+ Provider context·output 크기, hosted 가중치, model/catalog/preset 권장값을 합성해 request/idle timeout을 계산·적용하는 Application Policy. 계산 상수와 최대 9개 의존성 포트를 분리하며 Provider Adapter의 `ProviderContextPolicy`만 소비한다.
731
+
732
+ ### `ciel_runtime_support/timeout_profile.py`
733
+
734
+ 사용자가 선택하는 timeout profile의 lookup, 다국어 status/panel projection, request·idle 설정 mutation, LLM preset token override를 담당하는 Application Service. 자동 context 기반 계산 정책과 분리되며 설정과 UI 포트를 명시적으로 주입받는다. `TimeoutProfileApi`는 기본 언어 source를 주입받아 기존 facade signature를 보존한다.
735
+
736
+ ### `ciel_runtime_support/runtime_llm_options.py`
737
+
738
+ 실행 중 LLM option의 최초 snapshot, restore, preset 적용, slider 이동, slash action dispatch, status/list projection을 조정하는 Application Controller. 설정 저장, presentation, preset mutation을 각각 7필드 이하 포트로 분리하며 snapshot은 JSON-compatible 깊은 복사 의미를 유지한다. `RuntimeLlmOptionsApi`가 기존 공개 함수 signature를 보존하고 facade wrapper를 제거한다.
739
+
740
+ ### `ciel_runtime_support/live_api_key_controller.py`
741
+
742
+ 실행 중 API key의 status/help/set/clear action을 해석하고 mutation 이후 상태를 투영하는 Application Controller. 5필드 포트로 설정 조회, provider 선택, masked status, 저장 mutation을 분리하며 raw key를 응답에 노출하지 않는다.
743
+
744
+ ### `ciel_runtime_support/provider_model_specs.py`
745
+
746
+ 현재 모델의 cached metadata를 identity alias로 조회하고 Adapter context 전략에 맞춰 context 상한을 투영하며 원격 model refresh를 조정하는 Application Service. lookup, mutation, refresh 포트를 분리하고 refresh 실패 후에도 cached 사양 적용을 계속한다.
747
+
748
+ ### `ciel_runtime_support/context_setup.py`
749
+
750
+ Model capacity에 맞는 context mode를 계산하고 다국어 panel 행을 투영하며 선택한 mode를 provider 설정에 적용하는 Application Service. 10필드 포트를 통해 managed/Ollama/standard Adapter 전략, cap 정책, timeout 정책과 협력하고 persistence는 소유하지 않는다.
751
+
752
+ ### `ciel_runtime_support/provider_network.py`
753
+
754
+ upstream User-Agent, provider별 IP-family 기본값·별칭, strict/preferred DNS 정렬, HTTP 연결과 IPv4/IPv6 probe를 소유하는 Infrastructure Policy. provider application logic에서 process-wide socket override와 연결 진단 세부를 격리한다. 순수 policy 함수는 facade에서 직접 compatibility re-export하고, logger와 기본 URL이 필요한 HTTP/probe 호출만 composition root가 조립한다.
755
+
756
+ ### `ciel_runtime_support/provider_option_panel.py`
757
+
758
+ Provider option 화면의 행 구성과 runtime/context/stream control projection을 담당하는 UI Application Service. 텍스트·runtime·Provider projection을 각각 10필드 이하 포트로 분리하고 Adapter의 presentation/context 정책만 소비한다.
759
+
760
+ ### `ciel_runtime_support/llm_option_config.py`
761
+
762
+ LLM 옵션의 검증·저장·후속 context/timeout 상한 적용을 조정하는 Configuration Application Service. Provider별 mutation 방식과 라우팅 모드 projection은 Adapter 정책을 통해 주입되며 서비스 자체는 Provider 이름을 비교하지 않는다. 자동 옵션 workflow도 동일 경계의 typed service와 호출 시점 Composition Factory를 통해 실행된다.
763
+
764
+ ### `ciel_runtime_support/provider_status.py`
765
+
766
+ Base URL 및 model catalog reachability 상태를 투영하는 Provider Application Service. Provider별 native/configured/catalog 전략은 Adapter의 `ProviderStatusPolicy`가 소유하며 중앙 서비스는 Provider 이름을 비교하지 않는다.
767
+
768
+ ### `ciel_runtime_support/provider_readiness.py`
769
+
770
+ native launch 우회, Base URL·API-key 차단, ultracode capability 및 Provider runtime 검증을 조정하는 Readiness Application Service. LM Studio context 검증 같은 특수 동작은 `ProviderStatusPolicy.readiness_validation` 전략으로 선택한다.
771
+
772
+ ### `ciel_runtime_support/provider_runtime_info.py`
773
+
774
+ Provider compatibility 전략에 따라 LM Studio runtime metadata 또는 일반 `/v1/models` catalog를 조회하고 현재 모델의 context/owner/root 정보를 투영하는 Application Service. catalog HTTP 실패는 구조화 로그로 노출하며 9필드 typed port로 provider/runtime 효과를 주입한다.
775
+
776
+ ### `ciel_runtime_support/prelaunch.py`
777
+
778
+ 공급자·모델·채널·컨텍스트 설정 패널을 조정하는 사전 실행 메뉴 애플리케이션 서비스. 최상위 menu action 순서와 표준 언어·provider·dispatch 상수 조립도 이 bounded context의 immutable configuration Factory가 소유한다.
779
+
780
+ ### `ciel_runtime_support/prelaunch_panel_projection.py`
781
+
782
+ 메인 메뉴와 provider/language/log/API-key/base-URL panel 행을 생성하는 UI Projection 계층. runtime compatibility, provider mode 및 표시 데이터는 10필드 이하 typed port로 주입되고 composition root에는 projection 조립과 호환 위임만 남긴다.
783
+
784
+ ### `ciel_runtime_support/prelaunch_terminal.py`
785
+
786
+ 사전 실행 메뉴의 화면 렌더링, 다국어 cell 폭·ANSI 표현, 키 시퀀스 decoding, 선택 루프와 단일·다중행 TTY 입력을 담당하는 UI 어댑터. 렌더링 데이터, 텍스트·브랜드와 선택 서비스는 각각 10필드 이하 port로 분리하며 터미널 polling·복구 실패는 로그로 관측된다.
787
+
788
+ ### `ciel_runtime_support/prompt_compaction.py`
789
+
790
+ Provider context budget을 넘는 Anthropic 및 Ollama/OpenAI chat history를 tool-result 경계가 안전한 tail, hard-cap, 분산 요약으로 축약하는 Prompt Compaction Service. 텍스트 projection과 token/LLM/runtime 관측 포트를 분리하고 wire 형식은 호출 Strategy가 명시한다.
791
+
792
+ ### `ciel_runtime_support/context_compaction.py`
793
+
794
+ 보조 요약 요청과 map/reduce 컨텍스트 축약을 조정하는 Context Compaction Application Service. 요약 가능 여부는 Provider Adapter capability로 판단하고, 전송·워크플로·projection을 각각 10필드 이하 포트로 분리하며 Provider 이름에는 의존하지 않는다.
795
+
796
+ ### `ciel_runtime_support/context_summary_policy.py`
797
+
798
+ compact 요청 판정·text-only 변환, tool 입력 축약, persisted-output 판정, deterministic chunk 범위·summary, compact instruction 탐색, map/reduce prompt와 response codec을 소유하는 순수 Protocol/Domain Policy. token·content·JSON projection만 명시적 포트로 받는다.
799
+
800
+ `ContextSummaryCompatibilityApi`는 compact request 탐지·text-only 변환·chunk/reduce projection 공개 표면을 명시적 typed method로 연결하는 Adapter이다. facade에는 policy 조립과 호환 alias만 남긴다.
801
+
802
+ ### `ciel_runtime_support/runtime_adapters.py`
803
+
804
+ 정규화된 `LaunchSpec`을 최종 `RuntimeCommand`로 변환하는 실제 CLI 런타임 어댑터.
805
+
806
+ ### `ciel_runtime_support/runtime_compatibility.py`
807
+
808
+ Provider UI와 분리된 Runtime×Provider 호환성 정책. native Provider의 단일 Runtime affinity와 일반 upstream Provider가 사용할 수 있는 routed Runtime 집합을 선언하고, 실행 메뉴와 기본 launch 선택이 이 정책을 공유한다.
809
+
810
+ ### `ciel_runtime_support/runtime_launch.py`
811
+
812
+ Claude, Codex, Codex App Server, AGY 프로세스 실행과 라우터·채널 수명주기를 조정하는 런타임 애플리케이션 서비스. Claude가 생성하는 greedy CLI option 집합과 각 런타임의 불변 launch 정책 상수 Factory도 이 경계에 두며, Codex와 App Server는 같은 기본 상수 구성을 공유한다.
813
+
814
+ ### `ciel_runtime_support/streaming_anthropic.py`
815
+
816
+ Anthropic SSE 재배치와 thinking/tool-use 보존 정책을 실행하는 명시적 의존성 기반 스트리밍 서비스.
817
+
818
+ ### `ciel_runtime_support/registry.py`
819
+
820
+ Provider, Runtime, Protocol, Tool 확장 지점에서 사용하는 이름·별칭 기반 typed factory registry.
821
+
822
+ ### `ciel_runtime_support/tool_dialects.py`
823
+
824
+ Claude 도구 이름 dialect, MCP 서버 이름 정규화 및 Tool Dialect registry.
825
+
826
+ ### `ciel_runtime_support/tool_request_projection.py`
827
+
828
+ 강제 tool choice, 요청 내 tool 이름, synthetic Anthropic tool response와 세션별 Ultracode 상태를 투영하는 순수 Tool Request Policy. facade는 이 함수들을 직접 compatibility export하고 content codec만 `UltracodeSessionPolicy`에 주입한다.
829
+
830
+ ### `ciel_runtime_support/tool_schema.py`
831
+
832
+ 도구 schema registry, JSON Schema 기반 입력 보정, Cron/Task 별칭 변환 및 필수 필드 검증.
833
+
834
+ ### `ciel_runtime_support/protocols/openai_responses.py`
835
+
836
+ 전역 설정과 네트워크 의존성이 없는 OpenAI Responses ↔ Anthropic Messages 순수 변환.
837
+
838
+ ### `ciel_runtime_support/protocols/anthropic_content.py`
839
+
840
+ Anthropic text·tool-result content block을 표시 가능한 평문으로 재귀 투영하는 순수 Protocol codec. facade와 provider codec의 중복 구현을 제거한다.
841
+
842
+ ### `ciel_runtime_support/protocols/ollama_chat.py`
843
+
844
+ Anthropic system/tool schema를 Ollama `/api/chat` wire 구조로 투영하는 순수 Protocol codec.
845
+
846
+ ### `ciel_runtime_support/mcp_config_reader.py`
847
+
848
+ Claude/Codex MCP JSON 설정의 root·project scope를 읽고 projector별 identity로 중복 제거하는 Configuration Reader. Claude passthrough `--mcp-config`, project ancestor와 home 후보 탐색·existing 필터, MCP server name의 channel spec 투영도 순수 Path/Discovery Policy가 소유한다. 파일 손상·권한 실패를 빈 설정과 구분해 경로가 포함된 경고로 남긴다.
849
+
850
+ ### `ciel_runtime_support/managed_mcp_config.py`
851
+
852
+ Web search/fetch, Z.AI managed servers와 Ciel channel server의 MCP JSON projection·저장·비활성 정리를 소유하는 Configuration Service. 경로, 정적 endpoint 정책, executable/key/save/cursor 효과를 각각 6필드 이하 typed port로 분리한다.
853
+
854
+ ### `ciel_runtime_support/managed_mcp_discovery.py`
855
+
856
+ 런타임이 생성한 web-tools 및 MCP proxy artifact에서 native launch에 복원할 서버를 찾는 Discovery Service. proxy wrapper의 원본 server config를 복구하고 내부 notification-stream flag와 native router bridge를 제외한다. `NativeMcpConfigWriter`는 사용자 설정 우선 merge, 중복 진단과 정규화된 `mcpServers` artifact 저장을 담당하며 모든 효과를 typed port로 받는다.
857
+
858
+ ### `ciel_runtime_support/managed_service_cleanup.py`
859
+
860
+ Runtime launch 전 idle router와 provider 관리 서비스를 정리하는 provider-independent Policy. native runtime 판정과 Provider Adapter의 `managed_service` 선언을 typed port로 받아 provider 이름 분기 없이 필요한 서비스만 보존한다.
861
+
862
+ ### `ciel_runtime_support/mcp_transport.py`
863
+
864
+ 채널 상태나 라우터 설정을 소유하지 않는 MCP SSE/Streamable HTTP 전송 codec과 split-proxy URL 규칙.
865
+
866
+ ### `ciel_runtime_support/mcp_split_proxy_http.py`
867
+
868
+ Codex split MCP endpoint의 local GET hold, upstream request/header 투영, response streaming, HTTP 오류 변환과 SSE channel-notification 중복 억제를 소유하는 HTTP Adapter. 서버 설정 조회와 Router 응답·로그 효과는 7필드 typed port로 주입되며 composition root에는 호환 위임 함수만 남는다.
869
+
870
+ ### `ciel_runtime_support/mcp_probe_codec.py`
871
+
872
+ MCP 채널 capability probe의 JSONL/LSP 프레임, SSE 이벤트 및 initialize 응답 판정을 담당하는 순수 codec.
873
+
874
+ ### `ciel_runtime_support/mcp_probe_transport.py`
875
+
876
+ SSE와 Streamable HTTP MCP capability probe의 수명주기를 조정하는 Transport Application Service. codec, HTTP I/O, timeout 정책을 각각 6필드 이하 포트로 분리하고 reader·cleanup 실패를 구조화 로그로 노출한다.
877
+
878
+ ### `ciel_runtime_support/mcp_stdio_probe.py`
879
+
880
+ stdio MCP server의 spawn, initialize framing, stdout/stderr 수집 및 종료 수명주기를 담당하는 Process Adapter. codec, process I/O, timeout·preview 정책 포트를 분리하며 모든 reader·write·cleanup 실패를 관측 가능하게 유지한다.
881
+
882
+ ### `ciel_runtime_support/mcp_proxy_codec.py`
883
+
884
+ MCP 프록시의 JSON-RPC 오류·notification wait 응답과 대형 메시지 조회 결과 압축을 담당하는 codec. 전송 및 프로세스 수명주기와 분리되며 환경·로그·문자열 제한 규칙은 6필드 `McpProxyCodecPolicy` 포트로 주입된다.
885
+
886
+ ### `ciel_runtime_support/mcp_notification_wait_policy.py`
887
+
888
+ MCP notification wait 도구를 식별하고 환경 기반 timeout clamp, 반복 호출의 강화된 cap, TTL dedupe 상태와 schema-aware 입력 투영을 담당하는 Tool Policy. 최근 호출 상태는 lock 기반 repository가 소유하고 schema·clock·log는 typed ports로 주입된다.
889
+
890
+ ### `ciel_runtime_support/mcp_proxy_notifications.py`
891
+
892
+ MCP notification envelope의 chat payload projection, stable/semantic identity dedupe, TTL 상태와 chat persistence를 소유하는 Application Service. projection·effects·dedupe state를 각각 최대 5필드 typed port로 분리하며 stdio와 Streamable HTTP가 동일한 중복 제거 경로를 사용한다.
893
+
894
+ ### `ciel_runtime_support/mcp_proxy_process.py`
895
+
896
+ MCP stdio의 Content-Length/JSONL framing, stdin/stdout/stderr 전달과 Streamable HTTP 요청 어댑터. `McpStdioProxyService`가 설정 검증, process spawn, daemon forwarding thread와 종료 수명주기를 소유하며 Config·Transport·Effects를 각각 7필드 이하 typed port로 주입받는다. notification 관찰·로그·HTTP 전송은 명시적으로 주입되어 채널 저장소 및 메인 composition root와의 숨은 결합을 만들지 않는다.
897
+
898
+ ### `ciel_runtime_support/mcp_proxy_config.py`
899
+
900
+ Claude MCP 설정에서 stdio 및 강제 Streamable HTTP 서버를 선택하고 per-server config와 로컬 `mcp-proxy` command를 materialize하는 Configuration Service. 경로와 server 판정/read/save 효과를 각각 8필드 이하 typed port로 분리한다.
901
+
902
+ ### `ciel_runtime_support/mcp_http_proxy.py`
903
+
904
+ Streamable HTTP MCP session의 initialize, notification GET stream 재연결, tool-call 전달을 조정하는 Application Service. 의존성을 최대 10필드의 `McpHttpProxyCodec`, `McpHttpProxyTransport`, `McpHttpProxyRuntime` 포트로 분리하고 최상위 서비스는 이 세 포트만 소유한다. initialized 직후 stdin이 닫히는 경우 bounded shutdown drain으로 이미 도착 중인 마지막 SSE notification 유실을 방지한다.
905
+
906
+ ### `ciel_runtime_support/config_migrations.py`
907
+
908
+ 파일 저장이나 런타임 I/O 없이 구성 schema migration을 순서대로 적용하는 Configuration policy.
909
+
910
+ ### `ciel_runtime_support/configuration_cli.py`
911
+
912
+ Provider/base-URL/model/advisor/language/log-level/web 설정 명령과 휴대형 provider/language 선택 메뉴의 조회·변경·출력 흐름을 소유하는 CLI Application Controller. config, provider, model, display, I/O 포트를 각각 10필드 이하로 분리하며 Provider Adapter의 `uses_native_advisor` capability를 사용한다.
913
+
914
+ ### `ciel_runtime_support/ollama_catalog_cli.py`
915
+
916
+ Ollama catalog 갱신 명령의 입력 옵션, provider catalog service 호출 및 요약 출력을 소유하는 Provider-specific CLI Application Controller.
917
+
918
+ ### `ciel_runtime_support/provider_config_mutations.py`
919
+
920
+ CLI와 저장소에 의존하지 않고 Provider option의 검증·정규화·설정 변경을 수행하는 Configuration policy. 프로바이더 이름 분기 없이 각 Provider Adapter의 `ProviderConfigurationPolicy`가 Ollama mutation 전략, endpoint override, native 제한, route 지원 및 텍스트 option alias를 선언한다.
921
+
922
+ ### `ciel_runtime_support/provider_query_policy.py`
923
+
924
+ 강제 query-string 우선순위, inbound `beta=true` 검출·전파 및 설정 화면 상태 문구를 소유하는 Provider Query Policy. beta 전파 여부는 provider 이름 분기 대신 Adapter capability callback으로 결정한다.
925
+
926
+ ### `ciel_runtime_support/provider_tool_policy.py`
927
+
928
+ 기본·사용자 지정 blocked tool, Anthropic stream tool-use 정규화, passthrough 입력 보정 및 tool-choice 지원·정규화를 조정하는 Provider Tool Policy. 모든 기본 판정은 `ProviderAdapter` capability/strategy에 위임하고 facade에는 호환 wrapper만 남긴다.
929
+
930
+ ### `ciel_runtime_support/provider_sampling_policy.py`
931
+
932
+ Provider 공통 sampling option 별칭을 정규화하고 `temperature`, `top_p`, `top_k` 범위를 검증하는 타입화된 Policy. 설정 변경 서비스가 메인 파사드의 느슨한 callback 대신 이 객체에 의존한다.
933
+
934
+ ### `ciel_runtime_support/provider_configuration_service.py`
935
+
936
+ Provider endpoint 변경과 runtime status 출력을 담당하는 Configuration Application Service. endpoint 변경 시 model/cache/native-compat 전이를 한 transaction으로 조정하고, 상태 출력은 Provider Adapter의 configuration policy를 사용해 provider 이름 분기 없이 투영한다. Provider별 URL 정규화는 각 Adapter가 소유한다.
937
+
938
+ ### `ciel_runtime_support/provider_endpoint_policy.py`
939
+
940
+ Provider Adapter가 선택한 wire protocol과 사용자별 model endpoint override를 정규화하고 지원 여부 및 UI label을 투영하는 Domain Policy. 모델 identity와 protocol 선택을 4필드 port로 주입해 OpenCode 계열 이름 분기를 제거하고, 기본 Factory가 표준 alias·label·지원 protocol 구성을 소유한다.
941
+
942
+ ### `ciel_runtime_support/provider_option_status.py`
943
+
944
+ Provider Adapter가 선언한 context·presentation policy를 CLI/UI 상태 문자열로 투영하는 Presentation Service. `ProviderContextStatusProjection`은 model capacity, context window/reserve와 managed/Ollama 전략을 상태 문구로 변환하고 context token·parameter count 단위 formatting도 소유한다. 최대 10개 의존성의 명시적 포트를 사용하며 provider 이름 분기나 설정 저장 책임을 갖지 않는다.
945
+
946
+ ### `ciel_runtime_support/provider_option_cli.py`
947
+
948
+ `ollama-native`, `ollama-options`, `provider-options` 명령의 선택·mutation orchestration·저장·cache invalidation·출력을 담당하는 CLI Controller. 설정 I/O, Ollama command, 일반 provider command를 각각 5필드 포트로 분리하며 실제 option mutation은 Provider policy에 위임한다.
949
+
950
+ ### `ciel_runtime_support/advisor_client.py`
951
+
952
+ Advisor 검토·개선 요청의 provider 호출을 조정하는 Application Client. 전송 I/O와 재시도 정책을 명시적 포트로 분리한다.
953
+
954
+ ### `ciel_runtime_support/advisor_refinement.py`
955
+
956
+ Advisor 피드백을 원 응답 주위에 적용하는 bounded refinement decorator. 반복 횟수, 텍스트 추출, 실패 처리 정책을 호출부에서 주입받는다.
957
+
958
+ ### `ciel_runtime_support/advisor_request_builder.py`
959
+
960
+ I/O 없이 provider별 Advisor 요청을 구성하고 응답을 해석하는 Request Builder. endpoint, budget, projection 책임을 분리된 포트로 표현한다. Advisor review prompt와 Anthropic OAuth 요청의 첫 identity block을 보존하면서 review/original/additional context 순서를 투영하는 불변 System Policy도 소유한다.
961
+
962
+ ### `ciel_runtime_support/anthropic_response_writer.py`
963
+
964
+ 로컬 Anthropic message 응답을 JSON 또는 SSE로 기록하는 HTTP Adapter. protocol framing과 handler 출력 책임을 캡슐화한다.
965
+
966
+ ### `ciel_runtime_support/channel_cli.py`
967
+
968
+ Channel 설정·capability probe 명령을 조정하는 CLI Controller. parsing/presentation과 실제 command 수행을 view·command 포트로 분리한다.
969
+
970
+ ### `ciel_runtime_support/channel_compact_request_repository.py`
971
+
972
+ 채널 compact 요청의 단일 슬롯을 원자적으로 저장·소비하는 Repository. 파일 schema와 만료·claim 규칙을 composition root에서 격리한다.
973
+
974
+ ### `ciel_runtime_support/channel_config_service.py`
975
+
976
+ 지속 Channel 설정, builtin-first channel spec 정규화·중복 제거, passthrough import, native channel option 정규화와 delivery mode projection을 담당하는 Application Service. 저장 I/O는 명시적 포트 뒤에 둔다. `ChannelConfigApi`가 기존 공개 keyword/signature를 명시적으로 보존하며 late-bound service factory를 통해 facade wrapper를 제거한다.
977
+
978
+ ### `ciel_runtime_support/channel_cursor_service.py`
979
+
980
+ MCP cursor와 resume 동작을 조정하는 Channel Application Service. cursor 저장소와 메시지 조회를 분리하며, HTTP 응답 상태와 delivery guard 확인 뒤에만 pending LLM cursor를 확정한다.
981
+
982
+ ### `ciel_runtime_support/channel_mcp_discovery.py`
983
+
984
+ 설정 파일에서 HTTP MCP channel transport를 발견·투영·시작하는 Discovery Service. 인증 환경 변수와 allow-list 정책을 경계 안에서 처리한다.
985
+
986
+ ### `ciel_runtime_support/channel_mcp_ownership.py`
987
+
988
+ MCP notification stream 소유권 Repository와 router lifecycle을 제공한다. proxy 소유 server와 router 소유 worker의 중복 실행을 방지한다.
989
+
990
+ ### `ciel_runtime_support/channel_probe_cache.py`
991
+
992
+ MCP channel capability probe 결과의 저장, 분류, refresh 결정을 담당하는 Repository와 Application Service.
993
+
994
+ `ChannelProbeCompatibilityApi`는 repository·projection·probe 조회 표면을 명시적 typed method로 제공한다. external discovery와 launch refresh의 monkeypatch 가능한 조립 포트는 composition root에 남겨 Adapter가 workflow 의존성을 고정하지 않는다.
995
+
996
+ ### `ciel_runtime_support/codex_config.py`
997
+
998
+ Codex 설정 경로 발견과 TOML projection을 담당하는 Configuration Policy. 환경·파일 I/O와 순수 변환 규칙을 분리한다.
999
+
1000
+ ### `ciel_runtime_support/codex_channel_sse_launch.py`
1001
+
1002
+ Codex MCP channel의 SSE 시작을 조정하는 Application Service. channel 명시 소유권과 native bridge를 제외하고 capability가 확인된 미소유 server만 시작하며, 조회 정책과 실행 효과를 각각 최대 5필드의 typed port로 분리한다.
1003
+
1004
+ ### `ciel_runtime_support/codex_mcp_integration.py`
1005
+
1006
+ Codex MCP server 발견, 보안 JSON artifact 저장, channel capability source 필터링과 split HTTP proxy 인수 생성을 조정하는 Application Service. 설정 저장·capability 조회·이름 및 TOML projection을 각각 최대 5필드의 typed port로 분리한다.
1007
+
1008
+ ### `ciel_runtime_support/codex_launch_policy.py`
1009
+
1010
+ Codex 명령행 인수를 결정하는 순수 Launch Policy. process 실행이나 전역 설정 mutation을 수행하지 않는다.
1011
+
1012
+ ### `ciel_runtime_support/codex_launch_configuration.py`
1013
+
1014
+ Codex alternate-screen 호환, routed provider 설정, 현재 모델 인수와 version-matched model catalog 생성을 조정하는 Configuration Application Service. policy·model·catalog·effects를 각각 최대 5필드 typed port로 분리하며 filesystem과 환경 접근은 composition adapter로 격리한다. 기본 Factory가 routed provider 상수와 Codex config projection 정책을 소유한다.
1015
+
1016
+ ### `ciel_runtime_support/codex_model_catalog.py`
1017
+
1018
+ Codex bundled model catalog를 투영하고 원자적으로 저장하는 Catalog Repository.
1019
+
1020
+ ### `ciel_runtime_support/codex_session_repository.py`
1021
+
1022
+ Codex 로컬 resume index를 조회하는 read-only Repository. SQLite와 filesystem 세부사항을 호출부에서 격리한다.
1023
+
1024
+ ### `ciel_runtime_support/codex_session_selection.py`
1025
+
1026
+ Codex resume database 위치 결정, 세션 조회, UI 행 projection과 선택 흐름을 조정하는 Application Service. SQLite 조회는 Repository Port, 터미널 출력과 선택은 Presentation Port로 분리한다.
1027
+
1028
+ ### `ciel_runtime_support/provider_request_builder.py`
1029
+
1030
+ 정규화된 Anthropic message를 각 provider wire request로 변환하는 Request Builder. Ollama/OpenAI option projection과 token budget을 포트로 분리한다.
1031
+
1032
+ ### `ciel_runtime_support/provider_request_access.py`
1033
+
1034
+ Provider request model alias, stream 요구사항, API-key 복구와 outbound header 생성을 소유하는 Application Service. Anthropic OAuth/inbound credential 처리는 provider 이름 분기 대신 Adapter의 `credential_strategy` 선언으로 선택하고, adapter header 및 credential 효과는 최대 5필드 typed port로 주입한다.
1035
+
1036
+ ### `ciel_runtime_support/provider_launch_endpoint.py`
1037
+
1038
+ runtime과 provider·model 조합에 맞는 Anthropic/OpenAI 호환 endpoint 선호도를 결정하는 Policy Strategy. 기본 Factory가 선언형 provider 그룹을 소유하며, 자동 탐지와 model별 endpoint 판정은 typed query port로 분리한다.
1039
+
1040
+ ### `ciel_runtime_support/provider_endpoint_probe.py`
1041
+
1042
+ provider의 Anthropic/OpenAI endpoint 존재 여부를 확인하는 HTTP Adapter와 native compatibility 탐지·상태 보고를 수행하는 Policy. network 효과, URL projection, header fallback query를 작은 typed port로 분리한다.
1043
+
1044
+ ### `ciel_runtime_support/provider_runtime_modes.py`
1045
+
1046
+ Claude/AGY/Codex native·routed·direct mode와 provider native-Anthropic compatibility 그룹을 선언형 mapping으로 판정하는 Domain Policy. 기본 Factory가 runtime/provider 및 compatibility family mapping을 소유하며, 실제 native compatibility는 Provider Adapter의 `router_native_anthropic_enabled` 전략에 위임한다.
1047
+
1048
+ ### `ciel_runtime_support/pseudo_tool_parser.py`
1049
+
1050
+ Provider가 텍스트로 출력한 pseudo tool-call envelope를 해석하는 Parser Strategy. JSON·tag 형식 정규화를 protocol layer에 한정한다.
1051
+
1052
+ ### `ciel_runtime_support/session_import.py`
1053
+
1054
+ 다른 runtime transcript를 발견·읽기·변환하는 Repository와 Application Service. runtime별 형식과 import orchestration을 분리한다.
1055
+
1056
+ ### `ciel_runtime_support/stream_chunk_policy.py`
1057
+
1058
+ 단어 경계를 유지하면서 streaming buffer를 분할하는 순수 Chunking Policy.
1059
+
1060
+ ### `ciel_runtime_support/upstream_error_policy.py`
1061
+
1062
+ Upstream failure를 분류하고 사용자 메시지로 투영하는 순수 Error Policy. 전송과 HTTP 응답 기록을 소유하지 않는다.
1063
+
1064
+ ### `ciel_runtime_support/upstream_stream_io.py`
1065
+
1066
+ 취소 가능한 upstream response stream을 읽는 Socket Adapter. readiness polling, timeout, cancellation을 stream projection에서 분리한다.
1067
+
54
1068
  ### `ciel_runtime_support/agent_router.py`
55
1069
 
56
1070
  런타임 HTTP 라우터 공통 계약:
@@ -77,6 +1091,7 @@ Codex용 HTTP 라우터:
77
1091
  - `/backend-api/codex/responses`
78
1092
  - `/v1/responses`
79
1093
  - native Codex auth passthrough, Responses SSE proxy, 채널 주입 경로 소유
1094
+ - `CodexChannelContextProjector`가 Responses input 변환, pending/tool-result context 추가와 upstream metadata 제거를 copy-on-write로 수행
80
1095
 
81
1096
  → [[Architecture]]
82
1097
 
@@ -89,6 +1104,50 @@ Codex용 HTTP 라우터:
89
1104
 
90
1105
  → [[Observability]]
91
1106
 
1107
+ ### `ciel_runtime_support/sse_trace.py`
1108
+
1109
+ Anthropic SSE lifecycle event의 bounded 요약·선택적 raw payload, atomic last-trace snapshot, 회전 JSONL과 tool-call audit log를 소유하는 Observability Repository. trace enablement, payload truncation과 logging은 typed port로 주입한다.
1110
+
1111
+ ### `ciel_runtime_support/rate_limit_repository.py`
1112
+
1113
+ Provider RPM timestamp, server 학습 limit, penalty와 hash-key 기반 API-key cooldown을 단일 lock 아래 영속화하는 Repository. facade와 rate policy는 JSON 파일 형식·원자적 상태 갱신을 직접 다루지 않는다.
1114
+
1115
+ ### `ciel_runtime_support/runtime_logging.py`
1116
+
1117
+ log-level 파일·환경 우선순위, mtime cache, 설정 저장·reset과 router.log 회전을 소유하는 Repository/Infrastructure Adapter. `LogLevelApi`는 late-bound Repository factory를 쓰는 명시적 Adapter로 기존 공개 logging 계약을 투영하며, 메인 facade는 저장소와 file logger만 조립한다.
1118
+
1119
+ ### `ciel_runtime_support/runtime_paths.py`
1120
+
1121
+ Windows/POSIX 사용자 경로, config artifact 위치와 사용자별 local router endpoint를 계산하는 Infrastructure Configuration 모듈. 표준 라이브러리에만 의존하며 facade는 기존 경로 상수와 helper를 compatibility export로 제공한다.
1122
+
1123
+ ### `ciel_runtime_support/runtime_constants.py`
1124
+
1125
+ Provider alias, model/catalog 기본값, launch code, logging limit, tool policy, routed compatibility prompt와 launch endpoint provider group을 소유하는 immutable Data Configuration 모듈. 런타임 상태나 facade에 의존하지 않으며 entrypoint는 필요한 이름만 compatibility export한다.
1126
+
1127
+ ### `ciel_runtime_support/router_process_lifecycle.py`
1128
+
1129
+ Router PID file 종료, health PID 보호, foreign-config 충돌 거부, 포트 교체 대기·종료 보장과 managed router spawn/reuse/version replacement를 조정하는 Process Lifecycle Application Service. 지연 self-exec 재시작과 이중 실패 stderr 진단도 이 경계가 소유한다. OS별 process 조회·signal, health repository, spawn effect와 clock은 typed port로 주입된다.
1130
+
1131
+ ### `ciel_runtime_support/router_server_runtime.py`
1132
+
1133
+ Router HTTP server의 config/PID 준비, startup banner, server·watchdog 시작, managed channel thread 실행과 finally cleanup을 조정하는 Application Service. 상태 조회와 OS/HTTP/thread 효과를 각각 10필드 이하 typed port로 분리하며 facade의 `serve`는 composition과 호환 진입점만 담당한다.
1134
+
1135
+ ### `ciel_runtime_support/router_access.py`
1136
+
1137
+ Router bind host, loopback 신뢰, bearer-token 비교와 external-debug 확인 정책을 소유하는 Security Policy. token의 환경 우선순위와 원자적 생성은 `RouterExternalTokenRepository`, 설정 변경은 typed port를 사용하는 `RouterAccessConfigService`, 401/403 JSON 거부 응답은 `RouterAccessHttpController`로 분리한다.
1138
+
1139
+ ### `ciel_runtime_support/router_health_policy.py`
1140
+
1141
+ Router health 요약, version/source/user/config identity 일치 판정, foreign config 탐지와 PID 진단을 소유하는 불변 Health Policy. HTTP health 조회와 TCP 연결 진단은 callback으로 주입한다.
1142
+
1143
+ ### `ciel_runtime_support/router_shortcuts.py`
1144
+
1145
+ Router debug, version, channel backlog, live LLM/API-key slash command의 local short-circuit workflow를 소유하는 Controller. request 판별, response/event 효과와 기능별 command port를 분리해 HTTP router와 facade에는 조립과 2줄 호환 wrapper만 남긴다.
1146
+
1147
+ ### `ciel_runtime_support/codex_process_lifecycle.py`
1148
+
1149
+ Codex child PID JSON record의 생성·권한·해제와 tracked/untracked process 탐색·종료를 소유하는 Repository/Lifecycle Service. command/environment 판정, process inspection과 tree signal은 10필드 port로 주입하며 모든 발견 PID를 단락 없이 정리한다.
1150
+
92
1151
  ### `ciel_runtime_support/transcript_filter.py`
93
1152
 
94
1153
  Claude Code 트랜스크립트 이벤트 필터:
@@ -97,6 +1156,14 @@ Claude Code 트랜스크립트 이벤트 필터:
97
1156
 
98
1157
  → [[Observability]]
99
1158
 
1159
+ ### `ciel_runtime_support/web_ui.py`
1160
+
1161
+ 설정·파일·네트워크에 의존하지 않는 Router Web Chat HTML renderer.
1162
+
1163
+ ### `ciel_runtime_support/web_ui_controller.py`
1164
+
1165
+ Router home metric view-model, web-chat view-model 및 `/ca/web/chat` GET 흐름을 소유하는 Web UI Application Controller. runtime projection, renderer, HTTP 효과와 상수는 각각 10필드 이하 typed port로 분리한다.
1166
+
100
1167
  ---
101
1168
 
102
1169
  ## 실행 스크립트