@vybestack/llxprt-code 0.1.18-nightly.250808.f9b79d74 → 0.1.18-nightly.250812.12fa8ad2

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 (218) hide show
  1. package/README.md +49 -2
  2. package/dist/package.json +5 -3
  3. package/dist/src/auth/anthropic-oauth-provider.d.ts +33 -0
  4. package/dist/src/auth/anthropic-oauth-provider.js +129 -0
  5. package/dist/src/auth/anthropic-oauth-provider.js.map +1 -0
  6. package/dist/src/auth/gemini-oauth-provider.d.ts +15 -0
  7. package/dist/src/auth/gemini-oauth-provider.js +33 -0
  8. package/dist/src/auth/gemini-oauth-provider.js.map +1 -0
  9. package/dist/src/auth/oauth-manager.d.ts +109 -0
  10. package/dist/src/auth/oauth-manager.js +334 -0
  11. package/dist/src/auth/oauth-manager.js.map +1 -0
  12. package/dist/src/auth/oauth-manager.spec.d.ts +6 -0
  13. package/dist/src/auth/oauth-manager.spec.js +523 -0
  14. package/dist/src/auth/oauth-manager.spec.js.map +1 -0
  15. package/dist/src/auth/qwen-oauth-provider.d.ts +14 -0
  16. package/dist/src/auth/qwen-oauth-provider.js +75 -0
  17. package/dist/src/auth/qwen-oauth-provider.js.map +1 -0
  18. package/dist/src/auth/types.d.ts +7 -0
  19. package/dist/src/auth/types.js +7 -0
  20. package/dist/src/auth/types.js.map +1 -0
  21. package/dist/src/config/auth.js +11 -0
  22. package/dist/src/config/auth.js.map +1 -1
  23. package/dist/src/config/config.js +93 -43
  24. package/dist/src/config/config.js.map +1 -1
  25. package/dist/src/config/keyBindings.d.ts +66 -0
  26. package/dist/src/config/keyBindings.js +136 -0
  27. package/dist/src/config/keyBindings.js.map +1 -0
  28. package/dist/src/config/settings.d.ts +3 -59
  29. package/dist/src/config/settings.js +17 -1
  30. package/dist/src/config/settings.js.map +1 -1
  31. package/dist/src/config/settingsSchema.d.ts +587 -0
  32. package/dist/src/config/settingsSchema.js +565 -0
  33. package/dist/src/config/settingsSchema.js.map +1 -0
  34. package/dist/src/gemini.js +12 -109
  35. package/dist/src/gemini.js.map +1 -1
  36. package/dist/src/generated/git-commit.d.ts +1 -1
  37. package/dist/src/generated/git-commit.js +1 -1
  38. package/dist/src/nonInteractiveCli.js +0 -1
  39. package/dist/src/nonInteractiveCli.js.map +1 -1
  40. package/dist/src/providers/logging/git-stats-service-impl.d.ts +19 -0
  41. package/dist/src/providers/logging/git-stats-service-impl.js +25 -0
  42. package/dist/src/providers/logging/git-stats-service-impl.js.map +1 -0
  43. package/dist/src/providers/logging/git-stats.d.ts +43 -0
  44. package/dist/src/providers/logging/git-stats.js +137 -0
  45. package/dist/src/providers/logging/git-stats.js.map +1 -0
  46. package/dist/src/providers/providerManagerInstance.d.ts +2 -0
  47. package/dist/src/providers/providerManagerInstance.js +49 -5
  48. package/dist/src/providers/providerManagerInstance.js.map +1 -1
  49. package/dist/src/services/BuiltinCommandLoader.js +4 -0
  50. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  51. package/dist/src/services/todo-continuation/todoContinuationService.d.ts +172 -0
  52. package/dist/src/services/todo-continuation/todoContinuationService.js +387 -0
  53. package/dist/src/services/todo-continuation/todoContinuationService.js.map +1 -0
  54. package/dist/src/services/todo-continuation/todoContinuationService.spec.d.ts +6 -0
  55. package/dist/src/services/todo-continuation/todoContinuationService.spec.js +385 -0
  56. package/dist/src/services/todo-continuation/todoContinuationService.spec.js.map +1 -0
  57. package/dist/src/ui/App.js +156 -35
  58. package/dist/src/ui/App.js.map +1 -1
  59. package/dist/src/ui/colors.d.ts +5 -0
  60. package/dist/src/ui/colors.js +51 -0
  61. package/dist/src/ui/colors.js.map +1 -1
  62. package/dist/src/ui/commands/authCommand.d.ts +11 -1
  63. package/dist/src/ui/commands/authCommand.js +145 -48
  64. package/dist/src/ui/commands/authCommand.js.map +1 -1
  65. package/dist/src/ui/commands/chatCommand.js +16 -0
  66. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  67. package/dist/src/ui/commands/diagnosticsCommand.js +94 -10
  68. package/dist/src/ui/commands/diagnosticsCommand.js.map +1 -1
  69. package/dist/src/ui/commands/ideCommand.js +67 -31
  70. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  71. package/dist/src/ui/commands/keyCommand.js +32 -2
  72. package/dist/src/ui/commands/keyCommand.js.map +1 -1
  73. package/dist/src/ui/commands/keyfileCommand.js +15 -12
  74. package/dist/src/ui/commands/keyfileCommand.js.map +1 -1
  75. package/dist/src/ui/commands/loggingCommand.d.ts +15 -0
  76. package/dist/src/ui/commands/loggingCommand.js +421 -0
  77. package/dist/src/ui/commands/loggingCommand.js.map +1 -0
  78. package/dist/src/ui/commands/modelCommand.js +21 -3
  79. package/dist/src/ui/commands/modelCommand.js.map +1 -1
  80. package/dist/src/ui/commands/privacyCommand.d.ts +3 -0
  81. package/dist/src/ui/commands/privacyCommand.js +6 -3
  82. package/dist/src/ui/commands/privacyCommand.js.map +1 -1
  83. package/dist/src/ui/commands/providerCommand.js +52 -14
  84. package/dist/src/ui/commands/providerCommand.js.map +1 -1
  85. package/dist/src/ui/commands/setCommand.js +17 -1
  86. package/dist/src/ui/commands/setCommand.js.map +1 -1
  87. package/dist/src/ui/commands/settingsCommand.d.ts +7 -0
  88. package/dist/src/ui/commands/settingsCommand.js +16 -0
  89. package/dist/src/ui/commands/settingsCommand.js.map +1 -0
  90. package/dist/src/ui/commands/setupGithubCommand.js +21 -2
  91. package/dist/src/ui/commands/setupGithubCommand.js.map +1 -1
  92. package/dist/src/ui/commands/toolformatCommand.js +79 -23
  93. package/dist/src/ui/commands/toolformatCommand.js.map +1 -1
  94. package/dist/src/ui/commands/types.d.ts +14 -2
  95. package/dist/src/ui/commands/types.js.map +1 -1
  96. package/dist/src/ui/components/AuthDialog.js +15 -54
  97. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  98. package/dist/src/ui/components/AuthInProgress.js +3 -3
  99. package/dist/src/ui/components/AuthInProgress.js.map +1 -1
  100. package/dist/src/ui/components/ContextUsageDisplay.d.ts +10 -0
  101. package/dist/src/ui/components/ContextUsageDisplay.js +27 -0
  102. package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -0
  103. package/dist/src/ui/components/FolderTrustDialog.d.ts +16 -0
  104. package/dist/src/ui/components/FolderTrustDialog.js +38 -0
  105. package/dist/src/ui/components/FolderTrustDialog.js.map +1 -0
  106. package/dist/src/ui/components/Footer.js +132 -15
  107. package/dist/src/ui/components/Footer.js.map +1 -1
  108. package/dist/src/ui/components/InputPrompt.d.ts +1 -0
  109. package/dist/src/ui/components/InputPrompt.js +87 -31
  110. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  111. package/dist/src/ui/components/LoggingDialog.d.ts +37 -0
  112. package/dist/src/ui/components/LoggingDialog.js +155 -0
  113. package/dist/src/ui/components/LoggingDialog.js.map +1 -0
  114. package/dist/src/ui/components/MemoryUsageDisplay.js +6 -4
  115. package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -1
  116. package/dist/src/ui/components/OAuthCodeDialog.d.ts +13 -0
  117. package/dist/src/ui/components/OAuthCodeDialog.js +54 -0
  118. package/dist/src/ui/components/OAuthCodeDialog.js.map +1 -0
  119. package/dist/src/ui/components/ProviderDialog.js +100 -26
  120. package/dist/src/ui/components/ProviderDialog.js.map +1 -1
  121. package/dist/src/ui/components/ProviderModelDialog.js +99 -27
  122. package/dist/src/ui/components/ProviderModelDialog.js.map +1 -1
  123. package/dist/src/ui/components/SettingsDialog.d.ts +14 -0
  124. package/dist/src/ui/components/SettingsDialog.js +247 -0
  125. package/dist/src/ui/components/SettingsDialog.js.map +1 -0
  126. package/dist/src/ui/components/ThemeDialog.js +4 -15
  127. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  128. package/dist/src/ui/components/TodoPanel.js +93 -18
  129. package/dist/src/ui/components/TodoPanel.js.map +1 -1
  130. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +85 -7
  131. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  132. package/dist/src/ui/contexts/SettingsContext.d.ts +9 -0
  133. package/dist/src/ui/contexts/SettingsContext.js +15 -0
  134. package/dist/src/ui/contexts/SettingsContext.js.map +1 -0
  135. package/dist/src/ui/hooks/atCommandProcessor.js +21 -0
  136. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  137. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +6 -2
  138. package/dist/src/ui/hooks/slashCommandProcessor.js +142 -113
  139. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  140. package/dist/src/ui/hooks/useAtCompletion.js +1 -1
  141. package/dist/src/ui/hooks/useAuthCommand.js +48 -2
  142. package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
  143. package/dist/src/ui/hooks/useConsoleMessages.js +7 -0
  144. package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -1
  145. package/dist/src/ui/hooks/useFolderTrust.d.ts +11 -0
  146. package/dist/src/ui/hooks/useFolderTrust.js +22 -0
  147. package/dist/src/ui/hooks/useFolderTrust.js.map +1 -0
  148. package/dist/src/ui/hooks/useGeminiStream.d.ts +1 -1
  149. package/dist/src/ui/hooks/useGeminiStream.js +35 -10
  150. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  151. package/dist/src/ui/hooks/useResponsive.d.ts +14 -0
  152. package/dist/src/ui/hooks/useResponsive.js +19 -0
  153. package/dist/src/ui/hooks/useResponsive.js.map +1 -0
  154. package/dist/src/ui/hooks/useSettingsCommand.d.ts +10 -0
  155. package/dist/src/ui/hooks/useSettingsCommand.js +21 -0
  156. package/dist/src/ui/hooks/useSettingsCommand.js.map +1 -0
  157. package/dist/src/ui/hooks/useTodoContinuation.d.ts +31 -0
  158. package/dist/src/ui/hooks/useTodoContinuation.js +148 -0
  159. package/dist/src/ui/hooks/useTodoContinuation.js.map +1 -0
  160. package/dist/src/ui/hooks/useTodoContinuation.spec.d.ts +6 -0
  161. package/dist/src/ui/hooks/useTodoContinuation.spec.js +378 -0
  162. package/dist/src/ui/hooks/useTodoContinuation.spec.js.map +1 -0
  163. package/dist/src/ui/keyMatchers.d.ts +26 -0
  164. package/dist/src/ui/keyMatchers.js +68 -0
  165. package/dist/src/ui/keyMatchers.js.map +1 -0
  166. package/dist/src/ui/privacy/PrivacyNotice.js +10 -4
  167. package/dist/src/ui/privacy/PrivacyNotice.js.map +1 -1
  168. package/dist/src/ui/reducers/appReducer.d.ts +3 -2
  169. package/dist/src/ui/reducers/appReducer.js +1 -0
  170. package/dist/src/ui/reducers/appReducer.js.map +1 -1
  171. package/dist/src/ui/themes/semantic-resolver.d.ts +12 -0
  172. package/dist/src/ui/themes/semantic-resolver.js +32 -0
  173. package/dist/src/ui/themes/semantic-resolver.js.map +1 -0
  174. package/dist/src/ui/themes/semantic-tokens.d.ts +52 -0
  175. package/dist/src/ui/themes/semantic-tokens.js +7 -0
  176. package/dist/src/ui/themes/semantic-tokens.js.map +1 -0
  177. package/dist/src/ui/themes/theme-compat.d.ts +34 -0
  178. package/dist/src/ui/themes/theme-compat.js +65 -0
  179. package/dist/src/ui/themes/theme-compat.js.map +1 -0
  180. package/dist/src/ui/themes/theme-manager.d.ts +8 -0
  181. package/dist/src/ui/themes/theme-manager.js +18 -0
  182. package/dist/src/ui/themes/theme-manager.js.map +1 -1
  183. package/dist/src/ui/utils/CodeColorizer.d.ts +2 -1
  184. package/dist/src/ui/utils/CodeColorizer.js +4 -3
  185. package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
  186. package/dist/src/ui/utils/MarkdownDisplay.js +4 -2
  187. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
  188. package/dist/src/ui/utils/commandUtils.d.ts +1 -0
  189. package/dist/src/ui/utils/commandUtils.js +22 -1
  190. package/dist/src/ui/utils/commandUtils.js.map +1 -1
  191. package/dist/src/ui/utils/responsive.d.ts +16 -0
  192. package/dist/src/ui/utils/responsive.js +111 -0
  193. package/dist/src/ui/utils/responsive.js.map +1 -0
  194. package/dist/src/utils/cleanup.d.ts +2 -2
  195. package/dist/src/utils/cleanup.js +2 -2
  196. package/dist/src/utils/cleanup.js.map +1 -1
  197. package/dist/src/utils/dialogScopeUtils.d.ts +31 -0
  198. package/dist/src/utils/dialogScopeUtils.js +48 -0
  199. package/dist/src/utils/dialogScopeUtils.js.map +1 -0
  200. package/dist/src/utils/gitUtils.d.ts +9 -0
  201. package/dist/src/utils/gitUtils.js +17 -0
  202. package/dist/src/utils/gitUtils.js.map +1 -1
  203. package/dist/src/utils/privacy/ConversationDataRedactor.d.ts +75 -0
  204. package/dist/src/utils/privacy/ConversationDataRedactor.js +412 -0
  205. package/dist/src/utils/privacy/ConversationDataRedactor.js.map +1 -0
  206. package/dist/src/utils/privacy/PrivacyManager.d.ts +58 -0
  207. package/dist/src/utils/privacy/PrivacyManager.js +133 -0
  208. package/dist/src/utils/privacy/PrivacyManager.js.map +1 -0
  209. package/dist/src/utils/sandbox.js +10 -0
  210. package/dist/src/utils/sandbox.js.map +1 -1
  211. package/dist/src/utils/settingsUtils.d.ts +126 -0
  212. package/dist/src/utils/settingsUtils.js +327 -0
  213. package/dist/src/utils/settingsUtils.js.map +1 -0
  214. package/dist/tsconfig.tsbuildinfo +1 -1
  215. package/package.json +5 -3
  216. package/dist/src/ui/components/IDEContextDetailDisplay.d.ts +0 -12
  217. package/dist/src/ui/components/IDEContextDetailDisplay.js +0 -17
  218. package/dist/src/ui/components/IDEContextDetailDisplay.js.map +0 -1
@@ -0,0 +1,421 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { CommandKind, } from './types.js';
7
+ import { SettingScope } from '../../config/settings.js';
8
+ import * as fs from 'fs/promises';
9
+ import * as path from 'path';
10
+ import * as os from 'os';
11
+ function isLogEntry(obj) {
12
+ return (typeof obj === 'object' &&
13
+ obj !== null &&
14
+ 'timestamp' in obj &&
15
+ 'type' in obj &&
16
+ 'provider' in obj &&
17
+ typeof obj.timestamp === 'string' &&
18
+ typeof obj.type === 'string' &&
19
+ typeof obj.provider === 'string');
20
+ }
21
+ export async function handleLoggingCommand(args, context) {
22
+ const subcommand = args[0];
23
+ switch (subcommand) {
24
+ case 'status':
25
+ return handleLoggingStatus(context);
26
+ case 'enable':
27
+ return handleEnableLogging(args.slice(1), context);
28
+ case 'disable':
29
+ return handleDisableLogging(context);
30
+ case 'redaction':
31
+ return handleRedactionSettings(args.slice(1), context);
32
+ case 'show':
33
+ return handleShowLogs(args.slice(1), context);
34
+ default:
35
+ return {
36
+ type: 'message',
37
+ messageType: 'error',
38
+ content: `Unknown logging subcommand: ${subcommand}. Available: status, enable, disable, redaction, show`,
39
+ };
40
+ }
41
+ }
42
+ async function handleLoggingStatus(context) {
43
+ // Read directly from settings, not from cached Config
44
+ const isLoggingEnabled = context.settings.merged.telemetry?.logConversations ?? false;
45
+ const status = `Conversation Logging: ${isLoggingEnabled ? 'Enabled' : 'Disabled'}`;
46
+ return {
47
+ type: 'message',
48
+ messageType: 'info',
49
+ content: status,
50
+ };
51
+ }
52
+ async function handleEnableLogging(_args, context) {
53
+ // Enable conversation logging through settings
54
+ const currentTelemetry = context.settings.merged.telemetry || {};
55
+ context.settings.setValue(SettingScope.User, 'telemetry', {
56
+ ...currentTelemetry,
57
+ logConversations: true,
58
+ });
59
+ // Update the Config to reflect the new setting
60
+ context.config.updateTelemetrySettings({
61
+ ...context.config.getTelemetrySettings(),
62
+ logConversations: true,
63
+ });
64
+ return {
65
+ type: 'message',
66
+ messageType: 'info',
67
+ content: 'Conversation logging enabled. Data stored locally only.',
68
+ };
69
+ }
70
+ async function handleDisableLogging(context) {
71
+ const currentTelemetry = context.settings.merged.telemetry || {};
72
+ context.settings.setValue(SettingScope.User, 'telemetry', {
73
+ ...currentTelemetry,
74
+ logConversations: false,
75
+ });
76
+ // Update the Config to reflect the new setting
77
+ context.config.updateTelemetrySettings({
78
+ ...context.config.getTelemetrySettings(),
79
+ logConversations: false,
80
+ });
81
+ return {
82
+ type: 'message',
83
+ messageType: 'info',
84
+ content: 'Conversation logging disabled. No conversation data will be collected.',
85
+ };
86
+ }
87
+ async function handleShowLogs(args, context) {
88
+ // Parse number of lines from args (default to 50)
89
+ const numLines = args[0] ? parseInt(args[0], 10) : 50;
90
+ if (isNaN(numLines) || numLines < 1) {
91
+ return {
92
+ type: 'message',
93
+ messageType: 'error',
94
+ content: 'Invalid number of lines. Please provide a positive number.',
95
+ };
96
+ }
97
+ // Get the log path from config
98
+ const logPath = context.config.getConversationLogPath();
99
+ const expandedPath = logPath.replace('~', os.homedir());
100
+ try {
101
+ // Find all log files
102
+ const files = await fs.readdir(expandedPath);
103
+ const logFiles = files
104
+ .filter((file) => file.endsWith('.jsonl'))
105
+ .sort()
106
+ .reverse();
107
+ if (logFiles.length === 0) {
108
+ return {
109
+ type: 'dialog',
110
+ dialog: 'logging',
111
+ dialogData: { entries: [] },
112
+ };
113
+ }
114
+ // Read and parse log entries from all recent files
115
+ const allEntries = [];
116
+ let remainingLines = numLines;
117
+ for (const logFile of logFiles) {
118
+ if (remainingLines <= 0)
119
+ break;
120
+ const filePath = path.join(expandedPath, logFile);
121
+ const content = await fs.readFile(filePath, 'utf-8');
122
+ const lines = content.split('\n').filter((line) => line.trim());
123
+ // Read from the end of the file
124
+ const startIndex = Math.max(0, lines.length - remainingLines);
125
+ const fileLines = lines.slice(startIndex);
126
+ for (const line of fileLines) {
127
+ try {
128
+ const parsed = JSON.parse(line);
129
+ allEntries.push(parsed);
130
+ }
131
+ catch {
132
+ // Skip invalid JSON lines
133
+ }
134
+ }
135
+ remainingLines -= fileLines.length;
136
+ }
137
+ // Return dialog with entries
138
+ return {
139
+ type: 'dialog',
140
+ dialog: 'logging',
141
+ dialogData: { entries: allEntries.slice(-numLines) },
142
+ };
143
+ }
144
+ catch (error) {
145
+ if (error.code === 'ENOENT') {
146
+ return {
147
+ type: 'message',
148
+ messageType: 'error',
149
+ content: `Log directory not found: ${logPath}\nCreating directory and starting logging...`,
150
+ };
151
+ }
152
+ return {
153
+ type: 'message',
154
+ messageType: 'error',
155
+ content: `Error reading logs: ${error instanceof Error ? error.message : String(error)}`,
156
+ };
157
+ }
158
+ }
159
+ async function handleRedactionSettings(args, context) {
160
+ if (args.length === 0) {
161
+ // Show current redaction settings
162
+ const redactionConfig = context.config.getRedactionConfig();
163
+ const settings = [
164
+ 'Current Redaction Settings:',
165
+ ` • API Keys: ${redactionConfig.redactApiKeys ? 'Enabled' : 'Disabled'}`,
166
+ ` • Credentials: ${redactionConfig.redactCredentials ? 'Enabled' : 'Disabled'}`,
167
+ ` • File Paths: ${redactionConfig.redactFilePaths ? 'Enabled' : 'Disabled'}`,
168
+ ` • URLs: ${redactionConfig.redactUrls ? 'Enabled' : 'Disabled'}`,
169
+ ` • Email Addresses: ${redactionConfig.redactEmails ? 'Enabled' : 'Disabled'}`,
170
+ ` • Personal Info: ${redactionConfig.redactPersonalInfo ? 'Enabled' : 'Disabled'}`,
171
+ '',
172
+ 'To modify settings:',
173
+ ' /logging redaction --api-keys=false',
174
+ ' /logging redaction --file-paths=true',
175
+ ].join('\n');
176
+ return {
177
+ type: 'message',
178
+ messageType: 'info',
179
+ content: settings,
180
+ };
181
+ }
182
+ // Parse redaction setting changes
183
+ const updates = {};
184
+ for (const arg of args) {
185
+ const [key, value] = arg.replace('--', '').split('=');
186
+ const boolValue = value === 'true';
187
+ switch (key) {
188
+ case 'api-keys':
189
+ updates.redactSensitiveData = boolValue; // Maps to existing setting
190
+ break;
191
+ case 'credentials':
192
+ updates.redactSensitiveData = boolValue; // Maps to existing setting
193
+ break;
194
+ case 'file-paths':
195
+ updates.redactFilePaths = boolValue;
196
+ break;
197
+ case 'urls':
198
+ updates.redactUrls = boolValue;
199
+ break;
200
+ case 'emails':
201
+ updates.redactEmails = boolValue;
202
+ break;
203
+ case 'personal-info':
204
+ updates.redactPersonalInfo = boolValue;
205
+ break;
206
+ default:
207
+ // Unknown key, ignore
208
+ break;
209
+ }
210
+ }
211
+ if (Object.keys(updates).length === 0) {
212
+ return {
213
+ type: 'message',
214
+ messageType: 'error',
215
+ content: 'No valid redaction settings provided. Use format: --api-keys=true',
216
+ };
217
+ }
218
+ // Update telemetry settings
219
+ const currentTelemetry = context.settings.merged.telemetry || {};
220
+ context.settings.setValue(SettingScope.User, 'telemetry', {
221
+ ...currentTelemetry,
222
+ ...updates,
223
+ });
224
+ const changes = Object.entries(updates)
225
+ .map(([key, value]) => ` • ${key}: ${value ? 'enabled' : 'disabled'}`)
226
+ .join('\n');
227
+ return {
228
+ type: 'message',
229
+ messageType: 'info',
230
+ content: `Redaction settings updated:\n${changes}`,
231
+ };
232
+ }
233
+ // Subcommands for logging
234
+ const statusCommand = {
235
+ name: 'status',
236
+ description: 'show current logging status',
237
+ kind: CommandKind.BUILT_IN,
238
+ action: async (context) => {
239
+ if (!context.services.config) {
240
+ context.ui.addItem({
241
+ type: 'error',
242
+ text: 'Configuration not available',
243
+ }, Date.now());
244
+ return;
245
+ }
246
+ const result = await handleLoggingStatus({
247
+ config: context.services.config,
248
+ settings: context.services.settings,
249
+ });
250
+ if (result.type === 'message') {
251
+ context.ui.addItem({
252
+ type: result.messageType,
253
+ text: result.content,
254
+ }, Date.now());
255
+ }
256
+ },
257
+ };
258
+ const enableCommand = {
259
+ name: 'enable',
260
+ description: 'enable conversation logging',
261
+ kind: CommandKind.BUILT_IN,
262
+ action: async (context, args) => {
263
+ if (!context.services.config) {
264
+ context.ui.addItem({
265
+ type: 'error',
266
+ text: 'Configuration not available',
267
+ }, Date.now());
268
+ return;
269
+ }
270
+ const argsArray = args ? args.split(/\s+/) : [];
271
+ const result = await handleEnableLogging(argsArray, {
272
+ config: context.services.config,
273
+ settings: context.services.settings,
274
+ });
275
+ if (result.type === 'message') {
276
+ context.ui.addItem({
277
+ type: result.messageType,
278
+ text: result.content,
279
+ }, Date.now());
280
+ }
281
+ },
282
+ };
283
+ const disableCommand = {
284
+ name: 'disable',
285
+ description: 'disable conversation logging',
286
+ kind: CommandKind.BUILT_IN,
287
+ action: async (context) => {
288
+ if (!context.services.config) {
289
+ context.ui.addItem({
290
+ type: 'error',
291
+ text: 'Configuration not available',
292
+ }, Date.now());
293
+ return;
294
+ }
295
+ const result = await handleDisableLogging({
296
+ config: context.services.config,
297
+ settings: context.services.settings,
298
+ });
299
+ if (result.type === 'message') {
300
+ context.ui.addItem({
301
+ type: result.messageType,
302
+ text: result.content,
303
+ }, Date.now());
304
+ }
305
+ },
306
+ };
307
+ const redactionCommand = {
308
+ name: 'redaction',
309
+ description: 'configure data redaction settings',
310
+ kind: CommandKind.BUILT_IN,
311
+ action: async (context, args) => {
312
+ if (!context.services.config) {
313
+ context.ui.addItem({
314
+ type: 'error',
315
+ text: 'Configuration not available',
316
+ }, Date.now());
317
+ return;
318
+ }
319
+ const argsArray = args ? args.split(/\s+/) : [];
320
+ const result = await handleRedactionSettings(argsArray, {
321
+ config: context.services.config,
322
+ settings: context.services.settings,
323
+ });
324
+ if (result.type === 'message') {
325
+ context.ui.addItem({
326
+ type: result.messageType,
327
+ text: result.content,
328
+ }, Date.now());
329
+ }
330
+ },
331
+ };
332
+ const showCommand = {
333
+ name: 'show',
334
+ description: 'show last N lines from conversation log (default 50)',
335
+ kind: CommandKind.BUILT_IN,
336
+ action: async (context, args) => {
337
+ if (!context.services.config) {
338
+ context.ui.addItem({
339
+ type: 'error',
340
+ text: 'Configuration not available',
341
+ }, Date.now());
342
+ return;
343
+ }
344
+ const argsArray = args ? args.split(/\s+/) : [];
345
+ const result = await handleShowLogs(argsArray, {
346
+ config: context.services.config,
347
+ settings: context.services.settings,
348
+ });
349
+ if (result.type === 'message') {
350
+ context.ui.addItem({
351
+ type: result.messageType,
352
+ text: result.content,
353
+ }, Date.now());
354
+ }
355
+ else if (result.type === 'dialog') {
356
+ // Format the log entries as text for now until dialog system is implemented
357
+ const entries = result.dialogData?.entries || [];
358
+ if (entries.length === 0) {
359
+ context.ui.addItem({
360
+ type: 'info',
361
+ text: 'No log entries found',
362
+ }, Date.now());
363
+ }
364
+ else {
365
+ // Format entries for display
366
+ const formattedEntries = entries
367
+ .filter(isLogEntry)
368
+ .map((entry, index) => {
369
+ const timestamp = new Date(entry.timestamp).toLocaleTimeString();
370
+ const typeIcon = entry.type === 'request' ? '→' : '←';
371
+ let content = '';
372
+ if (entry.type === 'request' && entry.messages) {
373
+ const lastMessage = entry.messages[entry.messages.length - 1];
374
+ if (lastMessage) {
375
+ content = lastMessage.content.substring(0, 100);
376
+ if (lastMessage.content.length > 100)
377
+ content += '...';
378
+ }
379
+ }
380
+ else if (entry.type === 'response' && entry.response) {
381
+ content = entry.response.substring(0, 100);
382
+ if (entry.response.length > 100)
383
+ content += '...';
384
+ }
385
+ return `[${index + 1}] ${timestamp} ${typeIcon} ${entry.provider}: ${content}`;
386
+ })
387
+ .join('\n');
388
+ context.ui.addItem({
389
+ type: 'info',
390
+ text: `Conversation Logs (${entries.length} entries):\n${'─'.repeat(60)}\n${formattedEntries}\n${'─'.repeat(60)}`,
391
+ }, Date.now());
392
+ }
393
+ return;
394
+ }
395
+ },
396
+ };
397
+ // Main logging command with subcommands
398
+ export const loggingCommand = {
399
+ name: 'logging',
400
+ description: 'manage conversation logging settings',
401
+ kind: CommandKind.BUILT_IN,
402
+ subCommands: [
403
+ statusCommand,
404
+ enableCommand,
405
+ disableCommand,
406
+ redactionCommand,
407
+ showCommand,
408
+ ],
409
+ action: async (context, args) => {
410
+ // Default action shows status when no subcommand provided
411
+ if (!args || args.trim() === '') {
412
+ return statusCommand.action(context, '');
413
+ }
414
+ // If args provided but no subcommand matched, show help
415
+ context.ui.addItem({
416
+ type: 'info',
417
+ text: 'Available logging commands:\n status - show current status\n enable - enable logging\n disable - disable logging\n redaction - configure redaction\n show [N] - show last N lines from log (default 50)',
418
+ }, Date.now());
419
+ },
420
+ };
421
+ //# sourceMappingURL=loggingCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loggingCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/loggingCommand.ts"],"names":[],"mappings":"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"}
@@ -26,10 +26,28 @@ export const modelCommand = {
26
26
  ? activeProvider.getCurrentModel()
27
27
  : 'unknown';
28
28
  if (activeProvider.setModel) {
29
+ const config = context.services.config;
30
+ const settingsService = config?.getSettingsService();
31
+ const useSettingsService = settingsService !== null;
29
32
  activeProvider.setModel(modelName);
30
- // Keep config model in sync so /about shows correct model
31
- if (context.services.config) {
32
- context.services.config.setModel(modelName);
33
+ if (useSettingsService && settingsService && config) {
34
+ // Use SettingsService to update provider settings
35
+ try {
36
+ // Ensure activeProvider is set in SettingsService
37
+ settingsService.set('activeProvider', activeProvider.name);
38
+ await settingsService.updateSettings(activeProvider.name, {
39
+ model: modelName,
40
+ });
41
+ }
42
+ catch (error) {
43
+ console.error('SettingsService error, using fallback:', error);
44
+ // Keep config model in sync so /about shows correct model
45
+ config.setModel(modelName);
46
+ }
47
+ }
48
+ else if (config) {
49
+ // Fallback to direct config update
50
+ config.setModel(modelName);
33
51
  }
34
52
  return {
35
53
  type: 'message',
@@ -1 +1 @@
1
- {"version":3,"file":"modelCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/modelCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAKL,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAEhF,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,wBAAwB;IACrC,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,KAAK,EACX,OAAuB,EACvB,IAAY,EACkD,EAAE;QAChE,MAAM,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC;QAC/B,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;QAE7C,yDAAyD;QACzD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,eAAe;aACxB,CAAC;QACJ,CAAC;QAED,2BAA2B;QAC3B,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,eAAe,CAAC,iBAAiB,EAAE,CAAC;YAC3D,MAAM,YAAY,GAAG,cAAc,CAAC,eAAe;gBACjD,CAAC,CAAC,cAAc,CAAC,eAAe,EAAE;gBAClC,CAAC,CAAC,SAAS,CAAC;YAEd,IAAI,cAAc,CAAC,QAAQ,EAAE,CAAC;gBAC5B,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACnC,0DAA0D;gBAC1D,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;oBAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAC9C,CAAC;gBAED,OAAO;oBACL,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,MAAM;oBACnB,OAAO,EAAE,iBAAiB,YAAY,OAAO,SAAS,iBAAiB,cAAc,CAAC,IAAI,GAAG;iBAC9F,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO;oBACL,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,OAAO;oBACpB,OAAO,EAAE,aAAa,cAAc,CAAC,IAAI,oCAAoC;iBAC9E,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,OAAO;gBACpB,OAAO,EAAE,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aAC7F,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"modelCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/modelCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAKL,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAEhF,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,wBAAwB;IACrC,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,KAAK,EACX,OAAuB,EACvB,IAAY,EACkD,EAAE;QAChE,MAAM,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC;QAC/B,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;QAE7C,yDAAyD;QACzD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,eAAe;aACxB,CAAC;QACJ,CAAC;QAED,2BAA2B;QAC3B,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,eAAe,CAAC,iBAAiB,EAAE,CAAC;YAC3D,MAAM,YAAY,GAAG,cAAc,CAAC,eAAe;gBACjD,CAAC,CAAC,cAAc,CAAC,eAAe,EAAE;gBAClC,CAAC,CAAC,SAAS,CAAC;YAEd,IAAI,cAAc,CAAC,QAAQ,EAAE,CAAC;gBAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACvC,MAAM,eAAe,GAAG,MAAM,EAAE,kBAAkB,EAAE,CAAC;gBACrD,MAAM,kBAAkB,GAAG,eAAe,KAAK,IAAI,CAAC;gBAEpD,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAEnC,IAAI,kBAAkB,IAAI,eAAe,IAAI,MAAM,EAAE,CAAC;oBACpD,kDAAkD;oBAClD,IAAI,CAAC;wBACH,kDAAkD;wBAClD,eAAe,CAAC,GAAG,CAAC,gBAAgB,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;wBAC3D,MAAM,eAAe,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,EAAE;4BACxD,KAAK,EAAE,SAAS;yBACjB,CAAC,CAAC;oBACL,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;wBAC/D,0DAA0D;wBAC1D,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;oBAC7B,CAAC;gBACH,CAAC;qBAAM,IAAI,MAAM,EAAE,CAAC;oBAClB,mCAAmC;oBACnC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAC7B,CAAC;gBAED,OAAO;oBACL,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,MAAM;oBACnB,OAAO,EAAE,iBAAiB,YAAY,OAAO,SAAS,iBAAiB,cAAc,CAAC,IAAI,GAAG;iBAC9F,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO;oBACL,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,OAAO;oBACpB,OAAO,EAAE,aAAa,cAAc,CAAC,IAAI,oCAAoC;iBAC9E,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,OAAO;gBACpB,OAAO,EAAE,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aAC7F,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -4,4 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { SlashCommand } from './types.js';
7
+ /**
8
+ * Privacy command - shows Google's privacy disclosure for the Gemini API
9
+ */
7
10
  export declare const privacyCommand: SlashCommand;
@@ -3,12 +3,15 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { CommandKind } from './types.js';
6
+ import { CommandKind, } from './types.js';
7
+ /**
8
+ * Privacy command - shows Google's privacy disclosure for the Gemini API
9
+ */
7
10
  export const privacyCommand = {
8
11
  name: 'privacy',
9
- description: 'display the privacy notice',
12
+ description: 'view Gemini API privacy disclosure and terms',
10
13
  kind: CommandKind.BUILT_IN,
11
- action: () => ({
14
+ action: async (_context) => ({
12
15
  type: 'dialog',
13
16
  dialog: 'privacy',
14
17
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"privacyCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/privacyCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAwC,MAAM,YAAY,CAAC;AAE/E,MAAM,CAAC,MAAM,cAAc,GAAiB;IAC1C,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,4BAA4B;IACzC,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,GAA2B,EAAE,CAAC,CAAC;QACrC,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,SAAS;KAClB,CAAC;CACH,CAAC"}
1
+ {"version":3,"file":"privacyCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/privacyCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,WAAW,GAIZ,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAiB;IAC1C,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,8CAA8C;IAC3D,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,KAAK,EACX,QAAwB,EACS,EAAE,CAAC,CAAC;QACrC,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,SAAS;KAClB,CAAC;CACH,CAAC"}
@@ -7,6 +7,21 @@ import { CommandKind, } from './types.js';
7
7
  import { getProviderManager } from '../../providers/providerManagerInstance.js';
8
8
  import { MessageType } from '../types.js';
9
9
  import { AuthType } from '@vybestack/llxprt-code-core';
10
+ /**
11
+ * Get SettingsService instance for provider switching
12
+ */
13
+ async function getSettingsServiceForProvider() {
14
+ try {
15
+ const { getSettingsService } = await import('@vybestack/llxprt-code-core/src/settings/settingsServiceInstance.js');
16
+ return getSettingsService();
17
+ }
18
+ catch (error) {
19
+ if (process.env.DEBUG) {
20
+ console.warn('Failed to get SettingsService for provider switching:', error);
21
+ }
22
+ throw error;
23
+ }
24
+ }
10
25
  export const providerCommand = {
11
26
  name: 'provider',
12
27
  description: 'switch between different AI providers (openai, anthropic, etc.)',
@@ -38,6 +53,27 @@ export const providerCommand = {
38
53
  // };
39
54
  // Switch provider first (this will clear state from ALL providers)
40
55
  providerManager.setActiveProvider(providerName);
56
+ // Clear base-url ephemeral setting when switching providers
57
+ // This prevents the old provider's base-url from affecting the new provider
58
+ const config = context.services.config;
59
+ if (config) {
60
+ config.setEphemeralSetting('base-url', undefined);
61
+ }
62
+ // Use SettingsService for provider switching
63
+ try {
64
+ const settingsService = await getSettingsServiceForProvider();
65
+ await settingsService.switchProvider(providerName);
66
+ // Also set the default model for this provider
67
+ const activeProvider = providerManager.getActiveProvider();
68
+ const defaultModel = activeProvider.getDefaultModel();
69
+ settingsService.setProviderSetting(providerName, 'model', defaultModel);
70
+ // Don't return early - continue with the rest of the setup
71
+ }
72
+ catch (error) {
73
+ if (process.env.DEBUG) {
74
+ console.warn('SettingsService provider switch failed, falling back to legacy method:', error);
75
+ }
76
+ }
41
77
  // Update config if available
42
78
  if (context.services.config) {
43
79
  // Clear ephemeral settings when switching providers
@@ -66,20 +102,22 @@ export const providerCommand = {
66
102
  context.services.config.setProvider(providerName);
67
103
  // Get the active provider and ensure it uses a valid default model
68
104
  const activeProvider = providerManager.getActiveProvider();
69
- // Determine the correct default model for this provider
70
- let defaultModel = '';
71
- switch (providerName) {
72
- case 'gemini':
73
- defaultModel = 'gemini-2.5-pro';
74
- break;
75
- case 'openai':
76
- defaultModel = 'gpt-4.1';
77
- break;
78
- case 'anthropic':
79
- defaultModel = 'claude-sonnet-4-latest';
80
- break;
81
- default:
82
- defaultModel = activeProvider.getCurrentModel?.() || '';
105
+ // Get the default model from the provider
106
+ const defaultModel = activeProvider.getDefaultModel();
107
+ let baseUrl;
108
+ // Set base URL for specific providers
109
+ if (providerName === 'qwen') {
110
+ baseUrl = 'https://portal.qwen.ai/v1';
111
+ }
112
+ // Set the base URL if needed (for qwen)
113
+ if (baseUrl) {
114
+ context.services.config.setEphemeralSetting('base-url', baseUrl);
115
+ // Also set it directly on the provider if it has the method
116
+ if ('setBaseUrl' in activeProvider &&
117
+ typeof activeProvider.setBaseUrl === 'function') {
118
+ const providerWithSetBaseUrl = activeProvider;
119
+ providerWithSetBaseUrl.setBaseUrl(baseUrl);
120
+ }
83
121
  }
84
122
  // Set the model on both the provider and config
85
123
  if (defaultModel) {
@@ -1 +1 @@
1
- {"version":3,"file":"providerCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/providerCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAKL,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD,MAAM,CAAC,MAAM,eAAe,GAAiB;IAC3C,IAAI,EAAE,UAAU;IAChB,WAAW,EACT,iEAAiE;IACnE,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,KAAK,EACX,OAAuB,EACvB,IAAY,EACkD,EAAE;QAChE,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;QAC7C,MAAM,YAAY,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC;QAElC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,6CAA6C;YAC7C,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,UAAU;aACnB,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,eAAe,CAAC,qBAAqB,EAAE,CAAC;YAEhE,oCAAoC;YACpC,IAAI,YAAY,KAAK,eAAe,EAAE,CAAC;gBACrC,OAAO;oBACL,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,MAAM;oBACnB,OAAO,EAAE,2BAA2B,eAAe,EAAE;iBACtD,CAAC;YACJ,CAAC;YAED,MAAM,YAAY,GAAG,eAAe,IAAI,MAAM,CAAC;YAE/C,mDAAmD;YACnD,kCAAkC;YAClC,oEAAoE;YACpE,KAAK;YAEL,mEAAmE;YACnE,eAAe,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAEhD,6BAA6B;YAC7B,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAC5B,oDAAoD;gBACpD,2DAA2D;gBAC3D,MAAM,aAAa,GAAG;oBACpB,UAAU;oBACV,cAAc;oBACd,UAAU;oBACV,eAAe;oBACf,uBAAuB;oBACvB,aAAa;oBACb,aAAa;oBACb,gBAAgB;iBACjB,CAAC;gBACF,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;oBAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBAC9D,CAAC;gBAED,6CAA6C;gBAC7C,MAAM,WAAW,GAAG,eAAe,CAAC,iBAAiB,EAAE,CAAC;gBACxD,IAAI,WAAW,CAAC,cAAc,EAAE,CAAC;oBAC/B,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;gBACjC,CAAC;gBAED,2CAA2C;gBAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;gBAE5D,gCAAgC;gBAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;gBAElD,mEAAmE;gBACnE,MAAM,cAAc,GAAG,eAAe,CAAC,iBAAiB,EAAE,CAAC;gBAE3D,wDAAwD;gBACxD,IAAI,YAAY,GAAG,EAAE,CAAC;gBACtB,QAAQ,YAAY,EAAE,CAAC;oBACrB,KAAK,QAAQ;wBACX,YAAY,GAAG,gBAAgB,CAAC;wBAChC,MAAM;oBACR,KAAK,QAAQ;wBACX,YAAY,GAAG,SAAS,CAAC;wBACzB,MAAM;oBACR,KAAK,WAAW;wBACd,YAAY,GAAG,wBAAwB,CAAC;wBACxC,MAAM;oBACR;wBACE,YAAY,GAAG,cAAc,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,CAAC;gBAC5D,CAAC;gBAED,gDAAgD;gBAChD,IAAI,YAAY,EAAE,CAAC;oBACjB,IAAI,cAAc,CAAC,QAAQ,EAAE,CAAC;wBAC5B,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;oBACxC,CAAC;oBACD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gBACjD,CAAC;gBAED,iFAAiF;gBACjF,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;gBAC/D,IAAI,YAAY,IAAI,YAAY,CAAC,aAAa,EAAE,EAAE,CAAC;oBACjD,MAAM,YAAY,CAAC,SAAS,EAAE,CAAC;gBACjC,CAAC;gBAED,2EAA2E;gBAC3E,MAAM,eAAe,GACnB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,yBAAyB,EAAE,EAAE,QAAQ;oBAC7D,QAAQ,CAAC,iBAAiB,CAAC;gBAE7B,sDAAsD;gBACtD,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;gBAE3D,6DAA6D;gBAC7D,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;oBAC9B,OAAO,CAAC,EAAE,CAAC,OAAO,CAChB;wBACE,IAAI,EAAE,WAAW,CAAC,IAAI;wBACtB,IAAI,EAAE,eAAe,YAAY,sCAAsC;qBACxE,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;gBACJ,CAAC;gBAED,sDAAsD;gBACtD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC;YAED,0CAA0C;YAC1C,MAAM,eAAe,GAAG,OAEvB,CAAC;YACF,IAAI,eAAe,CAAC,sBAAsB,EAAE,CAAC;gBAC3C,UAAU,CACR,GAAG,EAAE,CAAC,eAAe,CAAC,sBAAuB,CAAC,YAAY,CAAC,EAC3D,GAAG,CACJ,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,MAAM;gBACnB,OAAO,EAAE,iBAAiB,YAAY,OAAO,YAAY,EAAE;aAC5D,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,OAAO;gBACpB,OAAO,EAAE,8BAA8B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aAChG,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"providerCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/providerCommand.ts"],"names":[],"mappings":"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"}