{"repo": "ai-guiders/cascade-ide", "files": {"Models/AiSettings.cs": {"be6a6bf94415ad63a1ddde1aef9e12b3dba2c6a4": {"t": 1785746189.9684365, "n": 4002, "h": "f370791a957b12f5", "c": "using System.Text.Json.Serialization;\nusing CascadeIDE.Services;\n\nnamespace CascadeIDE.Models;\n\n/// Контур AI в [ai] (settings.toml). ADR 0083: mode и вложенные таблицы.\npublic sealed class AiSettings\n{\n /// Один из: local, acp, mcp_only, cloud.\n public string Mode { get; set; } = \"local\";\n\n public AiLocalSettings Local { get; set; } = new();\n\n public AiAcpSettings Acp { get; set; } = new();\n\n public AiMcpOnlySettings McpOnly { get; set; } = new();\n\n public AiCloudSettings Cloud { get; set; } = new();\n\n public AiChatSettings Chat { get; set; } = new();\n\n /// Ключ провайдера для существующего кода чата (Ollama, Anthropic, …).\n public string ResolveEffectiveProviderUiKey()\n {\n return NormalizeMode(Mode) switch\n {\n \"local\" => \"Ollama\",\n \"acp\" => \"CursorACP\",\n \"mcp_only\" => \"Ollama\",\n \"cloud\" => NormalizeCloudProvider(Cloud.ActiveProvider) switch\n {\n \"anthropic\" => \"Anthropic\",\n \"openai\" => \"OpenAI\",\n \"deepseek\" => \"DeepSeek\",\n _ => \"Anthropic\"\n },\n _ => \"Ollama\"\n };\n }\n\n public static string NormalizeMode(string? mode)\n {\n var m = (mode ?? \"local\").Trim().ToLowerInvariant();\n return m is \"local\" or \"acp\" or \"mcp_only\" or \"cloud\" ? m : \"local\";\n }\n\n public static string NormalizeCloudProvider(string? p)\n {\n var x = (p ?? \"anthropic\").Trim().ToLowerInvariant();\n return x is \"anthropic\" or \"openai\" or \"deepseek\" ? x : \"anthropic\";\n }\n}\n\n/// TOML: [ai.local] и [ai.local.ollama].\npublic sealed class AiLocalSettings\n{\n /// Например ollama; должен совпадать с активной подтаблицей.\n public string Backend { get; set; } = \"ollama\";\n\n public AiLocalOllamaSettings Ollama { get; set; } = new();\n}\n\n/// TOML: [ai.local.ollama].\npublic sealed class AiLocalOllamaSettings\n{\n public string Model { get; set; } = \"qwen2.5-coder:7b\";\n}\n\n/// TOML: [ai.acp].\npublic sealed class AiAcpSettings\n{\n public string CursorAcpPath { get; set; } = \"\";\n\n /// TOML: cursor_acp_path_env — PATH или имя переменной с путём (ADR 0149).\n public string CursorAcpPathEnv { get; set; } = \"\";\n\n public string CursorAcpModelId { get; set; } = \"\";\n\n public string ResolveCursorAcpPath() =>\n SettingsEnvResolver.ResolveLaunchPath(CursorAcpPath, CursorAcpPathEnv);\n}\n\n/// TOML: [ai.mcp_only] — зарезервировано под флаги режима.\npublic sealed class AiMcpOnlySettings\n{\n}\n\n/// TOML: [ai.cloud] и [ai.cloud.*].\npublic sealed class AiCloudSettings\n{\n public string ActiveProvider { get; set; } = \"anthropic\";\n\n [JsonPropertyName(\"anthropic\")]\n public AiCloudAnthropicSettings Anthropic { get; set; } = new();\n\n [JsonPropertyName(\"openai\")]\n public AiCloudOpenAiSettings OpenAi { get; set; } = new();\n\n [JsonPropertyName(\"deepseek\")]\n public AiCloudDeepSeekSettings DeepSeek { get; set; } = new();\n}\n\npublic sealed class AiCloudAnthropicSettings\n{\n public string Model { get; set; } = \"claude-sonnet-4-20250514\";\n}\n\npublic sealed class AiCloudOpenAiSettings\n{\n public string BaseUrl { get; set; } = \"https://api.openai.com\";\n\n public string Model { get; set; } = \"gpt-4o\";\n}\n\npublic sealed class AiCloudDeepSeekSettings\n{\n public string BaseUrl { get; set; } = \"https://api.deepseek.com\";\n\n public string Model { get; set; } = \"deepseek-chat\";\n}\n\n/// TOML: [ai.chat].\npublic sealed class AiChatSettings\n{\n /// mfd | window.\n public string SettingsPresentation { get; set; } = \"mfd\";\n\n public bool ShowThinkingInHistory { get; set; } = true;\n}\n"}, "d05466adeddbfc60c9ca858288a95515a4b724b4": {"t": 1785760473.8805573, "n": 4002, "h": "f370791a957b12f5", "c": "using System.Text.Json.Serialization;\nusing CascadeIDE.Services;\n\nnamespace CascadeIDE.Models;\n\n/// Контур AI в [ai] (settings.toml). ADR 0083: mode и вложенные таблицы.\npublic sealed class AiSettings\n{\n /// Один из: local, acp, mcp_only, cloud.\n public string Mode { get; set; } = \"local\";\n\n public AiLocalSettings Local { get; set; } = new();\n\n public AiAcpSettings Acp { get; set; } = new();\n\n public AiMcpOnlySettings McpOnly { get; set; } = new();\n\n public AiCloudSettings Cloud { get; set; } = new();\n\n public AiChatSettings Chat { get; set; } = new();\n\n /// Ключ провайдера для существующего кода чата (Ollama, Anthropic, …).\n public string ResolveEffectiveProviderUiKey()\n {\n return NormalizeMode(Mode) switch\n {\n \"local\" => \"Ollama\",\n \"acp\" => \"CursorACP\",\n \"mcp_only\" => \"Ollama\",\n \"cloud\" => NormalizeCloudProvider(Cloud.ActiveProvider) switch\n {\n \"anthropic\" => \"Anthropic\",\n \"openai\" => \"OpenAI\",\n \"deepseek\" => \"DeepSeek\",\n _ => \"Anthropic\"\n },\n _ => \"Ollama\"\n };\n }\n\n public static string NormalizeMode(string? mode)\n {\n var m = (mode ?? \"local\").Trim().ToLowerInvariant();\n return m is \"local\" or \"acp\" or \"mcp_only\" or \"cloud\" ? m : \"local\";\n }\n\n public static string NormalizeCloudProvider(string? p)\n {\n var x = (p ?? \"anthropic\").Trim().ToLowerInvariant();\n return x is \"anthropic\" or \"openai\" or \"deepseek\" ? x : \"anthropic\";\n }\n}\n\n/// TOML: [ai.local] и [ai.local.ollama].\npublic sealed class AiLocalSettings\n{\n /// Например ollama; должен совпадать с активной подтаблицей.\n public string Backend { get; set; } = \"ollama\";\n\n public AiLocalOllamaSettings Ollama { get; set; } = new();\n}\n\n/// TOML: [ai.local.ollama].\npublic sealed class AiLocalOllamaSettings\n{\n public string Model { get; set; } = \"qwen2.5-coder:7b\";\n}\n\n/// TOML: [ai.acp].\npublic sealed class AiAcpSettings\n{\n public string CursorAcpPath { get; set; } = \"\";\n\n /// TOML: cursor_acp_path_env — PATH или имя переменной с путём (ADR 0149).\n public string CursorAcpPathEnv { get; set; } = \"\";\n\n public string CursorAcpModelId { get; set; } = \"\";\n\n public string ResolveCursorAcpPath() =>\n SettingsEnvResolver.ResolveLaunchPath(CursorAcpPath, CursorAcpPathEnv);\n}\n\n/// TOML: [ai.mcp_only] — зарезервировано под флаги режима.\npublic sealed class AiMcpOnlySettings\n{\n}\n\n/// TOML: [ai.cloud] и [ai.cloud.*].\npublic sealed class AiCloudSettings\n{\n public string ActiveProvider { get; set; } = \"anthropic\";\n\n [JsonPropertyName(\"anthropic\")]\n public AiCloudAnthropicSettings Anthropic { get; set; } = new();\n\n [JsonPropertyName(\"openai\")]\n public AiCloudOpenAiSettings OpenAi { get; set; } = new();\n\n [JsonPropertyName(\"deepseek\")]\n public AiCloudDeepSeekSettings DeepSeek { get; set; } = new();\n}\n\npublic sealed class AiCloudAnthropicSettings\n{\n public string Model { get; set; } = \"claude-sonnet-4-20250514\";\n}\n\npublic sealed class AiCloudOpenAiSettings\n{\n public string BaseUrl { get; set; } = \"https://api.openai.com\";\n\n public string Model { get; set; } = \"gpt-4o\";\n}\n\npublic sealed class AiCloudDeepSeekSettings\n{\n public string BaseUrl { get; set; } = \"https://api.deepseek.com\";\n\n public string Model { get; set; } = \"deepseek-chat\";\n}\n\n/// TOML: [ai.chat].\npublic sealed class AiChatSettings\n{\n /// mfd | window.\n public string SettingsPresentation { get; set; } = \"mfd\";\n\n public bool ShowThinkingInHistory { get; set; } = true;\n}\n"}, "7d8ebb7a322607995e9bba7aebd99cfa9d8bf8ab": {"t": 1785760476.712415, "n": 3681, "h": "3075c0031591bf8a", "c": "using System.Text.Json.Serialization;\n\nnamespace CascadeIDE.Models;\n\n/// Контур AI в [ai] (settings.toml). ADR 0083: mode и вложенные таблицы.\npublic sealed class AiSettings\n{\n /// Один из: local, acp, mcp_only, cloud.\n public string Mode { get; set; } = \"local\";\n\n public AiLocalSettings Local { get; set; } = new();\n\n public AiAcpSettings Acp { get; set; } = new();\n\n public AiMcpOnlySettings McpOnly { get; set; } = new();\n\n public AiCloudSettings Cloud { get; set; } = new();\n\n public AiChatSettings Chat { get; set; } = new();\n\n /// Ключ провайдера для существующего кода чата (Ollama, Anthropic, …).\n public string ResolveEffectiveProviderUiKey()\n {\n return NormalizeMode(Mode) switch\n {\n \"local\" => \"Ollama\",\n \"acp\" => \"CursorACP\",\n \"mcp_only\" => \"Ollama\",\n \"cloud\" => NormalizeCloudProvider(Cloud.ActiveProvider) switch\n {\n \"anthropic\" => \"Anthropic\",\n \"openai\" => \"OpenAI\",\n \"deepseek\" => \"DeepSeek\",\n _ => \"Anthropic\"\n },\n _ => \"Ollama\"\n };\n }\n\n public static string NormalizeMode(string? mode)\n {\n var m = (mode ?? \"local\").Trim().ToLowerInvariant();\n return m is \"local\" or \"acp\" or \"mcp_only\" or \"cloud\" ? m : \"local\";\n }\n\n public static string NormalizeCloudProvider(string? p)\n {\n var x = (p ?? \"anthropic\").Trim().ToLowerInvariant();\n return x is \"anthropic\" or \"openai\" or \"deepseek\" ? x : \"anthropic\";\n }\n}\n\n/// TOML: [ai.local] и [ai.local.ollama].\npublic sealed class AiLocalSettings\n{\n /// Например ollama; должен совпадать с активной подтаблицей.\n public string Backend { get; set; } = \"ollama\";\n\n public AiLocalOllamaSettings Ollama { get; set; } = new();\n}\n\n/// TOML: [ai.local.ollama].\npublic sealed class AiLocalOllamaSettings\n{\n public string Model { get; set; } = \"qwen2.5-coder:7b\";\n}\n\n/// TOML: [ai.acp].\npublic sealed class AiAcpSettings\n{\n public string CursorAcpPath { get; set; } = \"\";\n\n public string CursorAcpModelId { get; set; } = \"\";\n}\n\n/// TOML: [ai.mcp_only] — зарезервировано под флаги режима.\npublic sealed class AiMcpOnlySettings\n{\n}\n\n/// TOML: [ai.cloud] и [ai.cloud.*].\npublic sealed class AiCloudSettings\n{\n public string ActiveProvider { get; set; } = \"anthropic\";\n\n [JsonPropertyName(\"anthropic\")]\n public AiCloudAnthropicSettings Anthropic { get; set; } = new();\n\n [JsonPropertyName(\"openai\")]\n public AiCloudOpenAiSettings OpenAi { get; set; } = new();\n\n [JsonPropertyName(\"deepseek\")]\n public AiCloudDeepSeekSettings DeepSeek { get; set; } = new();\n}\n\npublic sealed class AiCloudAnthropicSettings\n{\n public string Model { get; set; } = \"claude-sonnet-4-20250514\";\n}\n\npublic sealed class AiCloudOpenAiSettings\n{\n public string BaseUrl { get; set; } = \"https://api.openai.com\";\n\n public string Model { get; set; } = \"gpt-4o\";\n}\n\npublic sealed class AiCloudDeepSeekSettings\n{\n public string BaseUrl { get; set; } = \"https://api.deepseek.com\";\n\n public string Model { get; set; } = \"deepseek-chat\";\n}\n\n/// TOML: [ai.chat].\npublic sealed class AiChatSettings\n{\n /// mfd | window.\n public string SettingsPresentation { get; set; } = \"mfd\";\n\n public bool ShowThinkingInHistory { get; set; } = true;\n}\n"}, "93ccfed5b94f2a499e1c6d6822bf925eb4f805f1": {"t": 1785760478.9009008, "n": 1968, "h": "211a55aeb07059f2", "c": "namespace CascadeIDE.Models;\n\n/// AI-провайдеры, модели и путь Cursor ACP ([ai] в settings.toml).\npublic sealed class AiSettings\n{\n /// Ollama-модель по умолчанию для чата (TOML: default_ollama_model).\n public string DefaultOllamaModel { get; set; } = \"qwen2.5-coder:7b\";\n\n /// Активный провайдер: Ollama, Anthropic, OpenAI, DeepSeek, CursorACP (TOML: provider).\n public string Provider { get; set; } = \"Ollama\";\n\n public string AnthropicModel { get; set; } = \"claude-sonnet-4-20250514\";\n public string OpenAiBaseUrl { get; set; } = \"https://api.openai.com\";\n public string OpenAiModel { get; set; } = \"gpt-4o\";\n public string DeepSeekBaseUrl { get; set; } = \"https://api.deepseek.com\";\n public string DeepSeekModel { get; set; } = \"deepseek-chat\";\n\n /// Путь к cursor-agent.cmd или каталогу с dist-package\\\\cursor-agent.cmd; если пусто — поиск cursor-agent в PATH (TOML: cursor_acp_path).\n public string CursorAcpPath { get; set; } = \"\";\n\n /// \n /// Где показывать «Параметры AI и чата»: mfd — страница вторичного контура (зона Mfd); window — отдельное окно со всеми настройками (TOML: ai_chat_settings_presentation).\n /// \n public string AiChatSettingsPresentation { get; set; } = \"mfd\";\n\n /// \n /// Не вызывать встроенный провайдер (Ollama/облако/Cursor ACP) после отправки user-сообщения — ответы только через внешний MCP (send_chat с role=assistant). TOML: chat_mcp_only.\n /// \n public bool ChatMcpOnly { get; set; }\n\n /// \n /// Показывать reasoning/thinking сообщения в истории после завершения ответа. Если false — thinking виден только во время стриминга. TOML: show_thinking_in_history.\n /// \n public bool ShowThinkingInHistory { get; set; } = true;\n}\n"}, "9616a050ff590489a09f8ee186ba41fbba03d662": {"t": 1785760482.2228022, "n": 1646, "h": "d42cf59a400f9177", "c": "namespace CascadeIDE.Models;\n\n/// AI-провайдеры, модели и путь Cursor ACP ([ai] в settings.toml).\npublic sealed class AiSettings\n{\n /// Ollama-модель по умолчанию для чата (TOML: default_ollama_model).\n public string DefaultOllamaModel { get; set; } = \"qwen2.5-coder:7b\";\n\n /// Активный провайдер: Ollama, Anthropic, OpenAI, DeepSeek, CursorACP (TOML: provider).\n public string Provider { get; set; } = \"Ollama\";\n\n public string AnthropicModel { get; set; } = \"claude-sonnet-4-20250514\";\n public string OpenAiBaseUrl { get; set; } = \"https://api.openai.com\";\n public string OpenAiModel { get; set; } = \"gpt-4o\";\n public string DeepSeekBaseUrl { get; set; } = \"https://api.deepseek.com\";\n public string DeepSeekModel { get; set; } = \"deepseek-chat\";\n\n /// Путь к cursor-agent.cmd или каталогу с dist-package\\\\cursor-agent.cmd (TOML: cursor_acp_path).\n public string CursorAcpPath { get; set; } = \"\";\n\n /// \n /// Где показывать «Параметры AI и чата»: mfd — страница вторичного контура (зона Mfd); window — отдельное окно со всеми настройками (TOML: ai_chat_settings_presentation).\n /// \n public string AiChatSettingsPresentation { get; set; } = \"mfd\";\n\n /// \n /// Не вызывать встроенный провайдер (Ollama/облако/Cursor ACP) после отправки user-сообщения — ответы только через внешний MCP (send_chat с role=assistant). TOML: chat_mcp_only.\n /// \n public bool ChatMcpOnly { get; set; }\n}\n"}, "713be2241fe15695a3d44fa799a83ca54f71703a": {"t": 1785760483.6246045, "n": 1676, "h": "ed9c1d287d25a3f2", "c": "namespace CascadeIDE.Models;\r\n\r\n/// AI-провайдеры, модели и путь Cursor ACP ([ai] в settings.toml).\r\npublic sealed class AiSettings\r\n{\r\n /// Ollama-модель по умолчанию для чата (TOML: default_ollama_model).\r\n public string DefaultOllamaModel { get; set; } = \"qwen2.5-coder:7b\";\r\n\r\n /// Активный провайдер: Ollama, Anthropic, OpenAI, DeepSeek, CursorACP (TOML: provider).\r\n public string Provider { get; set; } = \"Ollama\";\r\n\r\n public string AnthropicModel { get; set; } = \"claude-sonnet-4-20250514\";\r\n public string OpenAiBaseUrl { get; set; } = \"https://api.openai.com\";\r\n public string OpenAiModel { get; set; } = \"gpt-4o\";\r\n public string DeepSeekBaseUrl { get; set; } = \"https://api.deepseek.com\";\r\n public string DeepSeekModel { get; set; } = \"deepseek-chat\";\r\n\r\n /// Путь к cursor-agent.cmd или каталогу с dist-package\\\\cursor-agent.cmd (TOML: cursor_acp_path).\r\n public string CursorAcpPath { get; set; } = \"\";\r\n\r\n /// \r\n /// Где показывать «Параметры AI и чата»: mfd — страница вторичного контура (зона Mfd); window — отдельное окно со всеми настройками (TOML: ai_chat_settings_presentation).\r\n /// \r\n public string AiChatSettingsPresentation { get; set; } = \"mfd\";\r\n\r\n /// \r\n /// Не вызывать встроенный провайдер (Ollama/облако/Cursor ACP) после отправки user-сообщения — ответы только через внешний MCP (send_chat с role=assistant). TOML: chat_mcp_only.\r\n /// \r\n public bool ChatMcpOnly { get; set; }\r\n}\r\n"}, "b728906672d4341efff115bc806386763288954e": {"t": 1785760485.8993125, "n": 1646, "h": "d42cf59a400f9177", "c": "namespace CascadeIDE.Models;\n\n/// AI-провайдеры, модели и путь Cursor ACP ([ai] в settings.toml).\npublic sealed class AiSettings\n{\n /// Ollama-модель по умолчанию для чата (TOML: default_ollama_model).\n public string DefaultOllamaModel { get; set; } = \"qwen2.5-coder:7b\";\n\n /// Активный провайдер: Ollama, Anthropic, OpenAI, DeepSeek, CursorACP (TOML: provider).\n public string Provider { get; set; } = \"Ollama\";\n\n public string AnthropicModel { get; set; } = \"claude-sonnet-4-20250514\";\n public string OpenAiBaseUrl { get; set; } = \"https://api.openai.com\";\n public string OpenAiModel { get; set; } = \"gpt-4o\";\n public string DeepSeekBaseUrl { get; set; } = \"https://api.deepseek.com\";\n public string DeepSeekModel { get; set; } = \"deepseek-chat\";\n\n /// Путь к cursor-agent.cmd или каталогу с dist-package\\\\cursor-agent.cmd (TOML: cursor_acp_path).\n public string CursorAcpPath { get; set; } = \"\";\n\n /// \n /// Где показывать «Параметры AI и чата»: mfd — страница вторичного контура (зона Mfd); window — отдельное окно со всеми настройками (TOML: ai_chat_settings_presentation).\n /// \n public string AiChatSettingsPresentation { get; set; } = \"mfd\";\n\n /// \n /// Не вызывать встроенный провайдер (Ollama/облако/Cursor ACP) после отправки user-сообщения — ответы только через внешний MCP (send_chat с role=assistant). TOML: chat_mcp_only.\n /// \n public bool ChatMcpOnly { get; set; }\n}\n"}, "3493c2d1f08263e575de65a4aec1ea6fc7e58e67": {"t": 1785760489.6121445, "n": 1362, "h": "9e8c48922bde5689", "c": "namespace CascadeIDE.Models;\n\n/// AI-провайдеры, модели и путь Cursor ACP ([ai] в settings.toml).\npublic sealed class AiSettings\n{\n /// Ollama-модель по умолчанию для чата (TOML: default_ollama_model).\n public string DefaultOllamaModel { get; set; } = \"qwen2.5-coder:7b\";\n\n /// Активный провайдер: Ollama, Anthropic, OpenAI, DeepSeek, CursorACP (TOML: provider).\n public string Provider { get; set; } = \"Ollama\";\n\n public string AnthropicModel { get; set; } = \"claude-sonnet-4-20250514\";\n public string OpenAiBaseUrl { get; set; } = \"https://api.openai.com\";\n public string OpenAiModel { get; set; } = \"gpt-4o\";\n public string DeepSeekBaseUrl { get; set; } = \"https://api.deepseek.com\";\n public string DeepSeekModel { get; set; } = \"deepseek-chat\";\n\n /// Путь к cursor-agent.cmd или каталогу с dist-package\\\\cursor-agent.cmd (TOML: cursor_acp_path).\n public string CursorAcpPath { get; set; } = \"\";\n\n /// \n /// Где показывать «Параметры AI и чата»: mfd — страница вторичного контура (зона Mfd); window — отдельное окно со всеми настройками (TOML: ai_chat_settings_presentation).\n /// \n public string AiChatSettingsPresentation { get; set; } = \"mfd\";\n}\n"}, "715bc9a08e27e31f5efee1369f27ae4c509046e3": {"t": 1785760490.8713155, "n": 1099, "h": "e4d8b2c6f25bc92b", "c": "namespace CascadeIDE.Models;\r\r\n\r\r\n/// AI-провайдеры, модели и путь Cursor ACP ([ai] в settings.toml).\r\r\npublic sealed class AiSettings\r\r\n{\r\r\n /// Ollama-модель по умолчанию для чата (TOML: default_ollama_model).\r\r\n public string DefaultOllamaModel { get; set; } = \"qwen2.5-coder:7b\";\r\r\n\r\r\n /// Активный провайдер: Ollama, Anthropic, OpenAI, DeepSeek, CursorACP (TOML: provider).\r\r\n public string Provider { get; set; } = \"Ollama\";\r\r\n\r\r\n public string AnthropicModel { get; set; } = \"claude-sonnet-4-20250514\";\r\r\n public string OpenAiBaseUrl { get; set; } = \"https://api.openai.com\";\r\r\n public string OpenAiModel { get; set; } = \"gpt-4o\";\r\r\n public string DeepSeekBaseUrl { get; set; } = \"https://api.deepseek.com\";\r\r\n public string DeepSeekModel { get; set; } = \"deepseek-chat\";\r\r\n\r\r\n /// Путь к cursor-agent.cmd или каталогу с dist-package\\\\cursor-agent.cmd (TOML: cursor_acp_path).\r\r\n public string CursorAcpPath { get; set; } = \"\";\r\r\n}\r\r\n"}}}}