@vybestack/llxprt-code-core 0.1.19-gamma → 0.1.20
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.
- package/README.md +9 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/src/auth/anthropic-device-flow.d.ts +1 -1
- package/dist/src/auth/anthropic-device-flow.js +4 -2
- package/dist/src/auth/anthropic-device-flow.js.map +1 -1
- package/dist/src/code_assist/converter.d.ts +2 -2
- package/dist/src/code_assist/converter.js +1 -1
- package/dist/src/code_assist/converter.js.map +1 -1
- package/dist/src/code_assist/setup.js +49 -15
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/config/config.d.ts +9 -6
- package/dist/src/config/config.js +28 -22
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/core/client.d.ts +8 -3
- package/dist/src/core/client.js +177 -38
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/contentGenerator.js +0 -2
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/coreToolScheduler.d.ts +0 -1
- package/dist/src/core/coreToolScheduler.js +0 -3
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/geminiChat.js +57 -5
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.d.ts +5 -0
- package/dist/src/core/loggingContentGenerator.js +9 -1
- package/dist/src/core/loggingContentGenerator.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.js +158 -3
- package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
- package/dist/src/core/prompts.js +19 -2
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/filters/EmojiFilter.d.ts +122 -0
- package/dist/src/filters/EmojiFilter.js +327 -0
- package/dist/src/filters/EmojiFilter.js.map +1 -0
- package/dist/src/ide/detect-ide.d.ts +12 -2
- package/dist/src/ide/detect-ide.js +64 -5
- package/dist/src/ide/detect-ide.js.map +1 -1
- package/dist/src/ide/ide-client.js +22 -15
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/ide/ide-installer.js +1 -26
- package/dist/src/ide/ide-installer.js.map +1 -1
- package/dist/src/ide/ideContext.d.ts +6 -6
- package/dist/src/index.d.ts +4 -1
- package/dist/src/index.js +4 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/oauth-provider.d.ts +0 -1
- package/dist/src/mcp/oauth-provider.js +2 -3
- package/dist/src/mcp/oauth-provider.js.map +1 -1
- package/dist/src/prompt-config/defaults/core-defaults.d.ts +1 -1
- package/dist/src/prompt-config/defaults/core-defaults.js +205 -326
- package/dist/src/prompt-config/defaults/core-defaults.js.map +1 -1
- package/dist/src/prompt-config/defaults/core.md +1 -1
- package/dist/src/prompt-config/defaults/provider-defaults.d.ts +1 -1
- package/dist/src/prompt-config/defaults/provider-defaults.js +172 -19
- package/dist/src/prompt-config/defaults/provider-defaults.js.map +1 -1
- package/dist/src/prompt-config/defaults/providers/anthropic/core.md +81 -0
- package/dist/src/prompt-config/defaults/providers/anthropic/tools/glob.md +34 -0
- package/dist/src/prompt-config/defaults/providers/anthropic/tools/list-directory.md +11 -0
- package/dist/src/prompt-config/defaults/providers/anthropic/tools/read-file.md +14 -0
- package/dist/src/prompt-config/defaults/providers/anthropic/tools/read-many-files.md +31 -0
- package/dist/src/prompt-config/defaults/providers/anthropic/tools/replace.md +41 -0
- package/dist/src/prompt-config/defaults/providers/anthropic/tools/run-shell-command.md +32 -0
- package/dist/src/prompt-config/defaults/providers/anthropic/tools/save-memory.md +35 -0
- package/dist/src/prompt-config/defaults/providers/anthropic/tools/search-file-content.md +44 -0
- package/dist/src/prompt-config/defaults/providers/anthropic/tools/todo-write.md +45 -0
- package/dist/src/prompt-config/defaults/providers/anthropic/tools/write-file.md +11 -0
- package/dist/src/prompt-config/defaults/providers/gemini/models/gemini-2.5-flash/core.md +273 -10
- package/dist/src/prompt-config/defaults/providers/gemini/models/gemini-2.5-flash/gemini-2-5-flash/core.md +278 -0
- package/dist/src/prompt-config/defaults/tool-defaults.d.ts +1 -1
- package/dist/src/prompt-config/defaults/tool-defaults.js +184 -75
- package/dist/src/prompt-config/defaults/tool-defaults.js.map +1 -1
- package/dist/src/prompt-config/defaults/tools/read-file.md +1 -1
- package/dist/src/prompt-config/prompt-service.d.ts +1 -1
- package/dist/src/prompt-config/prompt-service.js +5 -3
- package/dist/src/prompt-config/prompt-service.js.map +1 -1
- package/dist/src/providers/BaseProvider.js +1 -1
- package/dist/src/providers/BaseProvider.js.map +1 -1
- package/dist/src/providers/LoggingProviderWrapper.js +0 -12
- package/dist/src/providers/LoggingProviderWrapper.js.map +1 -1
- package/dist/src/providers/ProviderContentGenerator.d.ts +2 -2
- package/dist/src/providers/ProviderContentGenerator.js +5 -3
- package/dist/src/providers/ProviderContentGenerator.js.map +1 -1
- package/dist/src/providers/adapters/GeminiCompatibleWrapper.js +1 -1
- package/dist/src/providers/adapters/GeminiCompatibleWrapper.js.map +1 -1
- package/dist/src/providers/anthropic/AnthropicProvider.d.ts +1 -1
- package/dist/src/providers/anthropic/AnthropicProvider.js +97 -35
- package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -1
- package/dist/src/providers/gemini/GeminiProvider.d.ts +4 -5
- package/dist/src/providers/gemini/GeminiProvider.js +21 -26
- package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
- package/dist/src/providers/openai/OpenAIProvider.js +2 -1
- package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
- package/dist/src/providers/openai/parseResponsesStream.js +6 -6
- package/dist/src/providers/openai/parseResponsesStream.js.map +1 -1
- package/dist/src/services/loopDetectionService.js +4 -5
- package/dist/src/services/loopDetectionService.js.map +1 -1
- package/dist/src/services/todo-context-tracker.d.ts +1 -1
- package/dist/src/services/todo-context-tracker.js +5 -3
- package/dist/src/services/todo-context-tracker.js.map +1 -1
- package/dist/src/settings/SettingsService.js.map +1 -1
- package/dist/src/settings/types.d.ts +16 -0
- package/dist/src/telemetry/integration.test.circular.js +2 -40
- package/dist/src/telemetry/integration.test.circular.js.map +1 -1
- package/dist/src/telemetry/loggers.js +0 -20
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/sdk.d.ts +1 -1
- package/dist/src/telemetry/sdk.js +13 -29
- package/dist/src/telemetry/sdk.js.map +1 -1
- package/dist/src/test-utils/tools.js +2 -2
- package/dist/src/test-utils/tools.js.map +1 -1
- package/dist/src/tools/edit.js +91 -27
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/glob.js +9 -10
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/grep.js +8 -9
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/ls.d.ts +3 -22
- package/dist/src/tools/ls.js +84 -114
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/mcp-client.js +2 -2
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +6 -13
- package/dist/src/tools/mcp-tool.js +41 -31
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/memoryTool.d.ts +9 -13
- package/dist/src/tools/memoryTool.js +127 -121
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/read-file.js +7 -8
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-many-files.d.ts +4 -6
- package/dist/src/tools/read-many-files.js +118 -111
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/shell.d.ts +7 -14
- package/dist/src/tools/shell.js +120 -117
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/todo-pause.js +2 -2
- package/dist/src/tools/todo-pause.js.map +1 -1
- package/dist/src/tools/todo-read.js +8 -8
- package/dist/src/tools/todo-read.js.map +1 -1
- package/dist/src/tools/todo-write.js +2 -2
- package/dist/src/tools/todo-write.js.map +1 -1
- package/dist/src/tools/tool-registry.d.ts +6 -15
- package/dist/src/tools/tool-registry.js +17 -74
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tools.d.ts +20 -19
- package/dist/src/tools/tools.js +21 -20
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/web-fetch.d.ts +4 -7
- package/dist/src/tools/web-fetch.js +81 -83
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/web-search.js +26 -9
- package/dist/src/tools/web-search.js.map +1 -1
- package/dist/src/tools/write-file.d.ts +2 -1
- package/dist/src/tools/write-file.js +89 -29
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/utils/editCorrector.js +8 -9
- package/dist/src/utils/editCorrector.js.map +1 -1
- package/dist/src/utils/errorParsing.d.ts +8 -0
- package/dist/src/utils/errorParsing.js +109 -0
- package/dist/src/utils/errorParsing.js.map +1 -0
- package/dist/src/utils/filesearch/fileSearch.js +1 -1
- package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
- package/dist/src/utils/filesearch/result-cache.d.ts +1 -2
- package/dist/src/utils/filesearch/result-cache.js +1 -3
- package/dist/src/utils/filesearch/result-cache.js.map +1 -1
- package/dist/src/utils/memoryImportProcessor.js +1 -1
- package/dist/src/utils/memoryImportProcessor.js.map +1 -1
- package/dist/src/utils/nextSpeakerChecker.js +3 -4
- package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
- package/dist/src/utils/quotaErrorDetection.d.ts +1 -5
- package/dist/src/utils/quotaErrorDetection.js.map +1 -1
- package/dist/src/utils/schemaValidator.d.ts +1 -9
- package/dist/src/utils/schemaValidator.js +1 -109
- package/dist/src/utils/schemaValidator.js.map +1 -1
- package/package.json +2 -2
- package/dist/src/core/modelCheck.d.ts +0 -14
- package/dist/src/core/modelCheck.js +0 -62
- package/dist/src/core/modelCheck.js.map +0 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +0 -48
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +0 -577
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +0 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +0 -58
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +0 -157
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +0 -1
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EmojiFilter - Filters emojis from text content based on configuration
|
|
3
|
+
* Implementation stub based on pseudocode lines 01-186
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* EmojiFilter class for filtering emojis from various content types
|
|
7
|
+
* @pseudocode lines 01-186
|
|
8
|
+
*/
|
|
9
|
+
export class EmojiFilter {
|
|
10
|
+
patterns;
|
|
11
|
+
conversions;
|
|
12
|
+
buffer;
|
|
13
|
+
config;
|
|
14
|
+
/**
|
|
15
|
+
* Creates new EmojiFilter instance
|
|
16
|
+
* @param config Filter configuration
|
|
17
|
+
* @pseudocode lines 07-12
|
|
18
|
+
*/
|
|
19
|
+
constructor(config) {
|
|
20
|
+
this.config = config;
|
|
21
|
+
this.patterns = this.compileEmojiPatterns();
|
|
22
|
+
this.conversions = this.loadConversionMap();
|
|
23
|
+
this.buffer = '';
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Filters text content for emojis
|
|
27
|
+
* @param text Text to filter
|
|
28
|
+
* @returns Filter result with processed text
|
|
29
|
+
* @pseudocode lines 14-45
|
|
30
|
+
*/
|
|
31
|
+
filterText(text) {
|
|
32
|
+
if (this.config.mode === 'allowed') {
|
|
33
|
+
return { filtered: text, emojiDetected: false, blocked: false };
|
|
34
|
+
}
|
|
35
|
+
const emojiDetected = this.detectEmojis(text);
|
|
36
|
+
if (!emojiDetected) {
|
|
37
|
+
return { filtered: text, emojiDetected: false, blocked: false };
|
|
38
|
+
}
|
|
39
|
+
if (this.config.mode === 'error') {
|
|
40
|
+
return {
|
|
41
|
+
filtered: null,
|
|
42
|
+
emojiDetected: true,
|
|
43
|
+
blocked: true,
|
|
44
|
+
error: 'Emojis detected in content',
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
let filtered = this.applyConversions(text);
|
|
48
|
+
filtered = this.removeDecorativeEmojis(filtered);
|
|
49
|
+
/**
|
|
50
|
+
* @requirement REQ-004.1 - Silent filtering in auto mode
|
|
51
|
+
*/
|
|
52
|
+
return {
|
|
53
|
+
filtered,
|
|
54
|
+
emojiDetected: true,
|
|
55
|
+
blocked: false,
|
|
56
|
+
systemFeedback: this.config.mode === 'warn'
|
|
57
|
+
? 'Emojis were detected and removed. Please avoid using emojis.'
|
|
58
|
+
: undefined,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Filters streaming text chunks for emojis
|
|
63
|
+
* @param chunk Text chunk to filter
|
|
64
|
+
* @returns Filter result with processed chunk
|
|
65
|
+
* @pseudocode lines 47-60
|
|
66
|
+
*/
|
|
67
|
+
filterStreamChunk(chunk) {
|
|
68
|
+
const combined = this.buffer + chunk;
|
|
69
|
+
const lastBoundary = this.findLastSafeBoundary(combined);
|
|
70
|
+
if (lastBoundary === -1 || lastBoundary === 0) {
|
|
71
|
+
this.buffer = combined;
|
|
72
|
+
// In error mode, check if buffer has emojis and return error immediately
|
|
73
|
+
if (this.config.mode === 'error' && this.detectEmojis(combined)) {
|
|
74
|
+
return {
|
|
75
|
+
filtered: null,
|
|
76
|
+
emojiDetected: true,
|
|
77
|
+
blocked: true,
|
|
78
|
+
error: 'Emojis detected in content',
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
return { filtered: '', emojiDetected: false, blocked: false };
|
|
82
|
+
}
|
|
83
|
+
const toProcess = combined.substring(0, lastBoundary);
|
|
84
|
+
this.buffer = combined.substring(lastBoundary);
|
|
85
|
+
return this.filterText(toProcess);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Filters tool arguments for emojis
|
|
89
|
+
* @param args Tool arguments object
|
|
90
|
+
* @returns Filter result with processed arguments
|
|
91
|
+
* @pseudocode lines 62-95
|
|
92
|
+
*/
|
|
93
|
+
filterToolArgs(args) {
|
|
94
|
+
if (this.config.mode === 'allowed') {
|
|
95
|
+
return { filtered: args, emojiDetected: false, blocked: false };
|
|
96
|
+
}
|
|
97
|
+
const stringified = JSON.stringify(args);
|
|
98
|
+
const emojiDetected = this.detectEmojis(stringified);
|
|
99
|
+
if (!emojiDetected) {
|
|
100
|
+
return { filtered: args, emojiDetected: false, blocked: false };
|
|
101
|
+
}
|
|
102
|
+
if (this.config.mode === 'error') {
|
|
103
|
+
return {
|
|
104
|
+
filtered: null,
|
|
105
|
+
emojiDetected: true,
|
|
106
|
+
blocked: true,
|
|
107
|
+
error: 'Cannot execute tool with emojis in parameters',
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
const filteredArgs = this.deepFilterObject(args);
|
|
111
|
+
/**
|
|
112
|
+
* @requirement REQ-004.1 - Silent filtering in auto mode
|
|
113
|
+
*/
|
|
114
|
+
return {
|
|
115
|
+
filtered: filteredArgs,
|
|
116
|
+
emojiDetected: true,
|
|
117
|
+
blocked: false,
|
|
118
|
+
systemFeedback: this.config.mode === 'warn'
|
|
119
|
+
? 'Emojis were detected and removed from your tool call. Please avoid using emojis in tool parameters.'
|
|
120
|
+
: undefined,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Filters file content for emojis
|
|
125
|
+
* @param content File content to filter
|
|
126
|
+
* @param toolName Name of the tool writing the file
|
|
127
|
+
* @returns Filter result with processed content
|
|
128
|
+
* @pseudocode lines 97-128
|
|
129
|
+
*/
|
|
130
|
+
filterFileContent(content, toolName) {
|
|
131
|
+
if (this.config.mode === 'allowed') {
|
|
132
|
+
return { filtered: content, emojiDetected: false, blocked: false };
|
|
133
|
+
}
|
|
134
|
+
const emojiDetected = this.detectEmojis(content);
|
|
135
|
+
if (!emojiDetected) {
|
|
136
|
+
return { filtered: content, emojiDetected: false, blocked: false };
|
|
137
|
+
}
|
|
138
|
+
if (this.config.mode === 'error') {
|
|
139
|
+
return {
|
|
140
|
+
filtered: null,
|
|
141
|
+
emojiDetected: true,
|
|
142
|
+
blocked: true,
|
|
143
|
+
error: 'Cannot write emojis to code files',
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
let filtered = this.applyConversions(content);
|
|
147
|
+
filtered = this.removeDecorativeEmojis(filtered);
|
|
148
|
+
/**
|
|
149
|
+
* @requirement REQ-004.1 - Silent filtering in auto mode
|
|
150
|
+
*/
|
|
151
|
+
return {
|
|
152
|
+
filtered,
|
|
153
|
+
emojiDetected: true,
|
|
154
|
+
blocked: false,
|
|
155
|
+
systemFeedback: this.config.mode === 'warn'
|
|
156
|
+
? `Emojis were removed from ${toolName} content. Please avoid using emojis in code.`
|
|
157
|
+
: undefined,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Flushes remaining buffered content
|
|
162
|
+
* @returns Remaining filtered content
|
|
163
|
+
* @pseudocode lines 130-138
|
|
164
|
+
*/
|
|
165
|
+
flushBuffer() {
|
|
166
|
+
const remaining = this.buffer;
|
|
167
|
+
this.buffer = '';
|
|
168
|
+
if (remaining.length > 0) {
|
|
169
|
+
const result = this.filterText(remaining);
|
|
170
|
+
return (typeof result.filtered === 'string' ? result.filtered : '') || '';
|
|
171
|
+
}
|
|
172
|
+
return '';
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Detects if text contains emojis
|
|
176
|
+
* @param text Text to check
|
|
177
|
+
* @returns True if emojis detected
|
|
178
|
+
* @pseudocode lines 140-147
|
|
179
|
+
*/
|
|
180
|
+
detectEmojis(text) {
|
|
181
|
+
for (const pattern of this.patterns) {
|
|
182
|
+
// Reset lastIndex to ensure test starts from beginning
|
|
183
|
+
pattern.lastIndex = 0;
|
|
184
|
+
if (pattern.test(text)) {
|
|
185
|
+
return true;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Applies emoji-to-text conversions
|
|
192
|
+
* @param text Text to convert
|
|
193
|
+
* @returns Text with emojis converted
|
|
194
|
+
* @pseudocode lines 149-155
|
|
195
|
+
*/
|
|
196
|
+
applyConversions(text) {
|
|
197
|
+
let result = text;
|
|
198
|
+
for (const [emoji, replacement] of this.conversions) {
|
|
199
|
+
result = result.replaceAll(emoji, replacement);
|
|
200
|
+
}
|
|
201
|
+
return result;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Removes decorative emojis from text
|
|
205
|
+
* @param text Text to clean
|
|
206
|
+
* @returns Text with decorative emojis removed
|
|
207
|
+
* @pseudocode lines 157-163
|
|
208
|
+
*/
|
|
209
|
+
removeDecorativeEmojis(text) {
|
|
210
|
+
// Remove ALL emojis using comprehensive Unicode patterns
|
|
211
|
+
// Note: Functional emojis (✅, ✓, ⚠️, ❌, ⚡) are already converted by applyConversions
|
|
212
|
+
let result = text;
|
|
213
|
+
// Apply each pattern to remove emojis
|
|
214
|
+
for (const pattern of this.patterns) {
|
|
215
|
+
result = result.replace(new RegExp(pattern.source, pattern.flags), '');
|
|
216
|
+
}
|
|
217
|
+
return result;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Finds last safe boundary to avoid splitting multi-byte characters
|
|
221
|
+
* @param text Text to analyze
|
|
222
|
+
* @returns Safe boundary position or -1 if none found
|
|
223
|
+
* @pseudocode lines 165-180
|
|
224
|
+
*/
|
|
225
|
+
findLastSafeBoundary(text) {
|
|
226
|
+
const length = text.length;
|
|
227
|
+
if (length === 0) {
|
|
228
|
+
return -1;
|
|
229
|
+
}
|
|
230
|
+
// If text contains emojis, be more conservative about boundaries
|
|
231
|
+
const hasEmojis = this.detectEmojis(text);
|
|
232
|
+
// Special case: if text ends with known complete words (common endings)
|
|
233
|
+
const endsWithKnownCompleteWords = /(?:done|completed|finished|success|error|failed|ready|developer|warnings)$/i.test(text);
|
|
234
|
+
if (endsWithKnownCompleteWords) {
|
|
235
|
+
return length;
|
|
236
|
+
}
|
|
237
|
+
// If we have emojis in the text, be very conservative - only process
|
|
238
|
+
// when we have known complete words or strong punctuation
|
|
239
|
+
if (hasEmojis) {
|
|
240
|
+
const endsWithPunctuation = /[.!?]$/.test(text);
|
|
241
|
+
if (endsWithPunctuation) {
|
|
242
|
+
return length;
|
|
243
|
+
}
|
|
244
|
+
return -1;
|
|
245
|
+
}
|
|
246
|
+
// For text without emojis, check if text ends with clear termination
|
|
247
|
+
const endsWithPunctuation = /[.!?]$/.test(text);
|
|
248
|
+
const endsWithSpace = /\s$/.test(text);
|
|
249
|
+
// Process text if it ends with punctuation or whitespace
|
|
250
|
+
if (endsWithPunctuation || endsWithSpace) {
|
|
251
|
+
return length;
|
|
252
|
+
}
|
|
253
|
+
// Otherwise buffer - text might be incomplete (like 'tas' from 'task')
|
|
254
|
+
return -1;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Compiles emoji detection patterns
|
|
258
|
+
* @returns Array of compiled regex patterns
|
|
259
|
+
* @pseudocode line 09
|
|
260
|
+
*/
|
|
261
|
+
compileEmojiPatterns() {
|
|
262
|
+
return [
|
|
263
|
+
// Unicode emoji ranges for comprehensive detection
|
|
264
|
+
/[\u{1F300}-\u{1F9FF}]/gu, // Miscellaneous Symbols and Pictographs + Supplemental Symbols
|
|
265
|
+
/[\u{1FA00}-\u{1FAFF}]/gu, // Extended Symbols and Pictographs (includes magic wand, rock, blood, planet, berries, vegetables, teapot, beans, jar)
|
|
266
|
+
/[\u{2600}-\u{26FF}]/gu, // Miscellaneous Symbols
|
|
267
|
+
/[\u{2700}-\u{27BF}]/gu, // Dingbats
|
|
268
|
+
/[\u{1F170}-\u{1F1FF}]/gu, // Enclosed Alphanumeric Supplement (includes 🆙 U+1F199) and Regional Indicators
|
|
269
|
+
/[\u{1F600}-\u{1F64F}]/gu, // Emoticons
|
|
270
|
+
/[\u{1F680}-\u{1F6FF}]/gu, // Transport and Map Symbols
|
|
271
|
+
/[\u{23E9}-\u{23FF}]/gu, // Additional symbols including ⏳ (hourglass)
|
|
272
|
+
// Specific functional emojis that might not be caught by ranges
|
|
273
|
+
/[\u2705\u2713\u26A0\u274C\u26A1]|\u26A0\uFE0F/gu,
|
|
274
|
+
// Variation selectors and combining characters often used with emojis
|
|
275
|
+
/[\uFE0E\uFE0F]/gu, // Variation selectors
|
|
276
|
+
/[\u200D]/gu, // Zero-width joiner
|
|
277
|
+
];
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Loads emoji-to-text conversion map
|
|
281
|
+
* @returns Map of emoji conversions
|
|
282
|
+
* @pseudocode line 10
|
|
283
|
+
*/
|
|
284
|
+
loadConversionMap() {
|
|
285
|
+
return new Map([
|
|
286
|
+
['✅', '[OK]'], // ✅ -> [OK]
|
|
287
|
+
['✓', '[OK]'], // ✓ -> [OK]
|
|
288
|
+
['⚠️', 'WARNING:'], // ⚠️ -> WARNING:
|
|
289
|
+
['❌', '[ERROR]'], // ❌ -> [ERROR]
|
|
290
|
+
['⚡', '[ACTION]'], // ⚡ -> [ACTION]
|
|
291
|
+
['🪄', '[MAGIC]'], // 🪄 -> [MAGIC]
|
|
292
|
+
['🆙', '[UP]'], // 🆙 -> [UP]
|
|
293
|
+
['🪨', '[ROCK]'], // 🪨 -> [ROCK]
|
|
294
|
+
['🩸', '[BLOOD]'], // 🩸 -> [BLOOD]
|
|
295
|
+
['🪐', '[PLANET]'], // 🪐 -> [PLANET]
|
|
296
|
+
['🫐', '[BLUEBERRIES]'], // 🫐 -> [BLUEBERRIES]
|
|
297
|
+
['🫒', '[OLIVE]'], // 🫒 -> [OLIVE]
|
|
298
|
+
['🫑', '[BELL_PEPPER]'], // 🫑 -> [BELL_PEPPER]
|
|
299
|
+
['🫖', '[TEAPOT]'], // 🫖 -> [TEAPOT]
|
|
300
|
+
['🫘', '[BEANS]'], // 🫘 -> [BEANS]
|
|
301
|
+
['🫙', '[JAR]'], // 🫙 -> [JAR]
|
|
302
|
+
// Note: 📝 is treated as decorative in the tests, not functional
|
|
303
|
+
]);
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Recursively filters emojis from object properties
|
|
307
|
+
* @param obj Object to filter
|
|
308
|
+
* @returns Filtered object
|
|
309
|
+
*/
|
|
310
|
+
deepFilterObject(obj) {
|
|
311
|
+
if (typeof obj === 'string') {
|
|
312
|
+
return this.filterText(obj).filtered;
|
|
313
|
+
}
|
|
314
|
+
if (Array.isArray(obj)) {
|
|
315
|
+
return obj.map((item) => this.deepFilterObject(item));
|
|
316
|
+
}
|
|
317
|
+
if (obj && typeof obj === 'object') {
|
|
318
|
+
const filtered = {};
|
|
319
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
320
|
+
filtered[key] = this.deepFilterObject(value);
|
|
321
|
+
}
|
|
322
|
+
return filtered;
|
|
323
|
+
}
|
|
324
|
+
return obj;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
//# sourceMappingURL=EmojiFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmojiFilter.js","sourceRoot":"","sources":["../../../src/filters/EmojiFilter.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,17 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
export declare enum DetectedIde {
|
|
7
|
-
|
|
7
|
+
Devin = "devin",
|
|
8
|
+
Replit = "replit",
|
|
9
|
+
VSCode = "vscode",
|
|
10
|
+
Cursor = "cursor",
|
|
11
|
+
CloudShell = "cloudshell",
|
|
12
|
+
Codespaces = "codespaces",
|
|
13
|
+
FirebaseStudio = "firebasestudio",
|
|
14
|
+
Trae = "trae"
|
|
8
15
|
}
|
|
9
|
-
export
|
|
16
|
+
export interface IdeInfo {
|
|
17
|
+
displayName: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function getIdeInfo(ide: DetectedIde): IdeInfo;
|
|
10
20
|
export declare function detectIde(): DetectedIde | undefined;
|
|
@@ -5,12 +5,49 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export var DetectedIde;
|
|
7
7
|
(function (DetectedIde) {
|
|
8
|
+
DetectedIde["Devin"] = "devin";
|
|
9
|
+
DetectedIde["Replit"] = "replit";
|
|
8
10
|
DetectedIde["VSCode"] = "vscode";
|
|
11
|
+
DetectedIde["Cursor"] = "cursor";
|
|
12
|
+
DetectedIde["CloudShell"] = "cloudshell";
|
|
13
|
+
DetectedIde["Codespaces"] = "codespaces";
|
|
14
|
+
DetectedIde["FirebaseStudio"] = "firebasestudio";
|
|
15
|
+
DetectedIde["Trae"] = "trae";
|
|
9
16
|
})(DetectedIde || (DetectedIde = {}));
|
|
10
|
-
export function
|
|
17
|
+
export function getIdeInfo(ide) {
|
|
11
18
|
switch (ide) {
|
|
19
|
+
case DetectedIde.Devin:
|
|
20
|
+
return {
|
|
21
|
+
displayName: 'Devin',
|
|
22
|
+
};
|
|
23
|
+
case DetectedIde.Replit:
|
|
24
|
+
return {
|
|
25
|
+
displayName: 'Replit',
|
|
26
|
+
};
|
|
12
27
|
case DetectedIde.VSCode:
|
|
13
|
-
return
|
|
28
|
+
return {
|
|
29
|
+
displayName: 'VS Code',
|
|
30
|
+
};
|
|
31
|
+
case DetectedIde.Cursor:
|
|
32
|
+
return {
|
|
33
|
+
displayName: 'Cursor',
|
|
34
|
+
};
|
|
35
|
+
case DetectedIde.CloudShell:
|
|
36
|
+
return {
|
|
37
|
+
displayName: 'Cloud Shell',
|
|
38
|
+
};
|
|
39
|
+
case DetectedIde.Codespaces:
|
|
40
|
+
return {
|
|
41
|
+
displayName: 'GitHub Codespaces',
|
|
42
|
+
};
|
|
43
|
+
case DetectedIde.FirebaseStudio:
|
|
44
|
+
return {
|
|
45
|
+
displayName: 'Firebase Studio',
|
|
46
|
+
};
|
|
47
|
+
case DetectedIde.Trae:
|
|
48
|
+
return {
|
|
49
|
+
displayName: 'Trae',
|
|
50
|
+
};
|
|
14
51
|
default: {
|
|
15
52
|
// This ensures that if a new IDE is added to the enum, we get a compile-time error.
|
|
16
53
|
const exhaustiveCheck = ide;
|
|
@@ -19,9 +56,31 @@ export function getIdeDisplayName(ide) {
|
|
|
19
56
|
}
|
|
20
57
|
}
|
|
21
58
|
export function detectIde() {
|
|
22
|
-
|
|
23
|
-
|
|
59
|
+
// Only VSCode-based integrations are currently supported.
|
|
60
|
+
if (process.env.TERM_PROGRAM !== 'vscode') {
|
|
61
|
+
return undefined;
|
|
24
62
|
}
|
|
25
|
-
|
|
63
|
+
if (process.env.__COG_BASHRC_SOURCED) {
|
|
64
|
+
return DetectedIde.Devin;
|
|
65
|
+
}
|
|
66
|
+
if (process.env.REPLIT_USER) {
|
|
67
|
+
return DetectedIde.Replit;
|
|
68
|
+
}
|
|
69
|
+
if (process.env.CURSOR_TRACE_ID) {
|
|
70
|
+
return DetectedIde.Cursor;
|
|
71
|
+
}
|
|
72
|
+
if (process.env.CODESPACES) {
|
|
73
|
+
return DetectedIde.Codespaces;
|
|
74
|
+
}
|
|
75
|
+
if (process.env.EDITOR_IN_CLOUD_SHELL || process.env.CLOUD_SHELL) {
|
|
76
|
+
return DetectedIde.CloudShell;
|
|
77
|
+
}
|
|
78
|
+
if (process.env.TERM_PRODUCT === 'Trae') {
|
|
79
|
+
return DetectedIde.Trae;
|
|
80
|
+
}
|
|
81
|
+
if (process.env.FIREBASE_DEPLOY_AGENT || process.env.MONOSPACE_ENV) {
|
|
82
|
+
return DetectedIde.FirebaseStudio;
|
|
83
|
+
}
|
|
84
|
+
return DetectedIde.VSCode;
|
|
26
85
|
}
|
|
27
86
|
//# sourceMappingURL=detect-ide.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect-ide.js","sourceRoot":"","sources":["../../../src/ide/detect-ide.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"detect-ide.js","sourceRoot":"","sources":["../../../src/ide/detect-ide.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAN,IAAY,WASX;AATD,WAAY,WAAW;IACrB,8BAAe,CAAA;IACf,gCAAiB,CAAA;IACjB,gCAAiB,CAAA;IACjB,gCAAiB,CAAA;IACjB,wCAAyB,CAAA;IACzB,wCAAyB,CAAA;IACzB,gDAAiC,CAAA;IACjC,4BAAa,CAAA;AACf,CAAC,EATW,WAAW,KAAX,WAAW,QAStB;AAMD,MAAM,UAAU,UAAU,CAAC,GAAgB;IACzC,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,WAAW,CAAC,KAAK;YACpB,OAAO;gBACL,WAAW,EAAE,OAAO;aACrB,CAAC;QACJ,KAAK,WAAW,CAAC,MAAM;YACrB,OAAO;gBACL,WAAW,EAAE,QAAQ;aACtB,CAAC;QACJ,KAAK,WAAW,CAAC,MAAM;YACrB,OAAO;gBACL,WAAW,EAAE,SAAS;aACvB,CAAC;QACJ,KAAK,WAAW,CAAC,MAAM;YACrB,OAAO;gBACL,WAAW,EAAE,QAAQ;aACtB,CAAC;QACJ,KAAK,WAAW,CAAC,UAAU;YACzB,OAAO;gBACL,WAAW,EAAE,aAAa;aAC3B,CAAC;QACJ,KAAK,WAAW,CAAC,UAAU;YACzB,OAAO;gBACL,WAAW,EAAE,mBAAmB;aACjC,CAAC;QACJ,KAAK,WAAW,CAAC,cAAc;YAC7B,OAAO;gBACL,WAAW,EAAE,iBAAiB;aAC/B,CAAC;QACJ,KAAK,WAAW,CAAC,IAAI;YACnB,OAAO;gBACL,WAAW,EAAE,MAAM;aACpB,CAAC;QACJ,OAAO,CAAC,CAAC,CAAC;YACR,oFAAoF;YACpF,MAAM,eAAe,GAAU,GAAG,CAAC;YACnC,OAAO,eAAe,CAAC;QACzB,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,0DAA0D;IAC1D,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;QACrC,OAAO,WAAW,CAAC,KAAK,CAAC;IAC3B,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QAC5B,OAAO,WAAW,CAAC,MAAM,CAAC;IAC5B,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QAChC,OAAO,WAAW,CAAC,MAAM,CAAC;IAC5B,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;QAC3B,OAAO,WAAW,CAAC,UAAU,CAAC;IAChC,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QACjE,OAAO,WAAW,CAAC,UAAU,CAAC;IAChC,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;QACxC,OAAO,WAAW,CAAC,IAAI,CAAC;IAC1B,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACnE,OAAO,WAAW,CAAC,cAAc,CAAC;IACpC,CAAC;IACD,OAAO,WAAW,CAAC,MAAM,CAAC;AAC5B,CAAC"}
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import * as fs from 'node:fs';
|
|
7
|
-
import
|
|
7
|
+
import * as path from 'node:path';
|
|
8
|
+
import { detectIde, DetectedIde, getIdeInfo } from '../ide/detect-ide.js';
|
|
8
9
|
import { ideContext, IdeContextNotificationSchema, IdeDiffAcceptedNotificationSchema, IdeDiffClosedNotificationSchema, CloseDiffResponseSchema, } from '../ide/ideContext.js';
|
|
9
10
|
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
10
11
|
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
@@ -45,7 +46,7 @@ export class IdeClient {
|
|
|
45
46
|
constructor(ideMode) {
|
|
46
47
|
this.currentIde = detectIde();
|
|
47
48
|
if (this.currentIde) {
|
|
48
|
-
this.currentIdeDisplayName =
|
|
49
|
+
this.currentIdeDisplayName = getIdeInfo(this.currentIde).displayName;
|
|
49
50
|
}
|
|
50
51
|
if (!ideMode) {
|
|
51
52
|
return;
|
|
@@ -61,13 +62,13 @@ export class IdeClient {
|
|
|
61
62
|
return IdeClient.instance;
|
|
62
63
|
}
|
|
63
64
|
async connect() {
|
|
64
|
-
this.setState(IDEConnectionStatus.Connecting);
|
|
65
65
|
if (!this.currentIde || !this.currentIdeDisplayName) {
|
|
66
66
|
this.setState(IDEConnectionStatus.Disconnected, `IDE integration is not supported in your current environment. To use this feature, run LLxprt Code in one of these supported IDEs: ${Object.values(DetectedIde)
|
|
67
|
-
.map((ide) =>
|
|
68
|
-
.join(', ')}`,
|
|
67
|
+
.map((ide) => getIdeInfo(ide).displayName)
|
|
68
|
+
.join(', ')}`, false);
|
|
69
69
|
return;
|
|
70
70
|
}
|
|
71
|
+
this.setState(IDEConnectionStatus.Connecting);
|
|
71
72
|
if (!this.validateWorkspacePath()) {
|
|
72
73
|
return;
|
|
73
74
|
}
|
|
@@ -168,19 +169,25 @@ export class IdeClient {
|
|
|
168
169
|
// disconnected, so that the first detail message is preserved.
|
|
169
170
|
if (!isAlreadyDisconnected) {
|
|
170
171
|
this.state = { status, details };
|
|
171
|
-
if (
|
|
172
|
-
|
|
172
|
+
if (details) {
|
|
173
|
+
if (logToConsole) {
|
|
174
|
+
logger.error(details);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
// We only want to log disconnect messages to debug
|
|
178
|
+
// if they are not already being logged to the console.
|
|
179
|
+
logger.debug(details);
|
|
180
|
+
}
|
|
173
181
|
}
|
|
174
182
|
}
|
|
175
183
|
if (status === IDEConnectionStatus.Disconnected) {
|
|
176
|
-
logger.debug(details);
|
|
177
184
|
ideContext.clearIdeContext();
|
|
178
185
|
}
|
|
179
186
|
}
|
|
180
187
|
getPortFromEnv() {
|
|
181
188
|
const port = process.env['LLXPRT_CODE_IDE_SERVER_PORT'];
|
|
182
189
|
if (!port) {
|
|
183
|
-
this.setState(IDEConnectionStatus.Disconnected, `Failed to connect to IDE companion extension for ${this.currentIdeDisplayName}.
|
|
190
|
+
this.setState(IDEConnectionStatus.Disconnected, `Failed to connect to IDE companion extension for ${this.currentIdeDisplayName}. Please ensure the extension is running and try restarting your terminal. To install the extension, run /ide install.`, true);
|
|
184
191
|
return undefined;
|
|
185
192
|
}
|
|
186
193
|
return port;
|
|
@@ -191,7 +198,10 @@ export class IdeClient {
|
|
|
191
198
|
this.setState(IDEConnectionStatus.Disconnected, `To use this feature, please open a single workspace folder in ${this.currentIdeDisplayName} and try again.`, true);
|
|
192
199
|
return false;
|
|
193
200
|
}
|
|
194
|
-
|
|
201
|
+
const idePath = getRealPath(ideWorkspacePath).toLocaleLowerCase();
|
|
202
|
+
const cwd = getRealPath(process.cwd()).toLocaleLowerCase();
|
|
203
|
+
const rel = path.relative(idePath, cwd);
|
|
204
|
+
if (rel.startsWith('..') || path.isAbsolute(rel)) {
|
|
195
205
|
this.setState(IDEConnectionStatus.Disconnected, `Directory mismatch. LLxprt Code is running in a different location than the open workspace in ${this.currentIdeDisplayName}. Please run the CLI from the same directory as your project's root folder.`, true);
|
|
196
206
|
return false;
|
|
197
207
|
}
|
|
@@ -250,7 +260,7 @@ export class IdeClient {
|
|
|
250
260
|
this.setState(IDEConnectionStatus.Connected);
|
|
251
261
|
}
|
|
252
262
|
catch (_error) {
|
|
253
|
-
this.setState(IDEConnectionStatus.Disconnected, `Failed to connect to IDE companion extension for ${this.currentIdeDisplayName}. Please ensure the extension is running and try
|
|
263
|
+
this.setState(IDEConnectionStatus.Disconnected, `Failed to connect to IDE companion extension for ${this.currentIdeDisplayName}. Please ensure the extension is running and try restarting your terminal. To install the extension, run /ide install.`, true);
|
|
254
264
|
if (transport) {
|
|
255
265
|
try {
|
|
256
266
|
await transport.close();
|
|
@@ -287,10 +297,7 @@ export class IdeClient {
|
|
|
287
297
|
}
|
|
288
298
|
}
|
|
289
299
|
function getIdeServerHost() {
|
|
290
|
-
const isInContainer = fs.existsSync('/.dockerenv') ||
|
|
291
|
-
fs.existsSync('/run/.containerenv') ||
|
|
292
|
-
!!process.env.SANDBOX ||
|
|
293
|
-
!!process.env.container;
|
|
300
|
+
const isInContainer = fs.existsSync('/.dockerenv') || fs.existsSync('/run/.containerenv');
|
|
294
301
|
return isInContainer ? 'host.docker.internal' : 'localhost';
|
|
295
302
|
}
|
|
296
303
|
//# sourceMappingURL=ide-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ide-client.js","sourceRoot":"","sources":["../../../src/ide/ide-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,
|
|
1
|
+
{"version":3,"file":"ide-client.js","sourceRoot":"","sources":["../../../src/ide/ide-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,14 +5,11 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import * as child_process from 'child_process';
|
|
7
7
|
import * as process from 'process';
|
|
8
|
-
import { glob } from 'glob';
|
|
9
8
|
import * as path from 'path';
|
|
10
9
|
import * as fs from 'fs';
|
|
11
10
|
import * as os from 'os';
|
|
12
|
-
import { fileURLToPath } from 'url';
|
|
13
11
|
import { DetectedIde } from './detect-ide.js';
|
|
14
12
|
const VSCODE_COMMAND = process.platform === 'win32' ? 'code.cmd' : 'code';
|
|
15
|
-
const VSCODE_COMPANION_EXTENSION_FOLDER = 'vscode-ide-companion';
|
|
16
13
|
async function findVsCodeCommand() {
|
|
17
14
|
// 1. Check PATH first.
|
|
18
15
|
try {
|
|
@@ -60,29 +57,7 @@ class VsCodeInstaller {
|
|
|
60
57
|
message: `VS Code CLI not found. Please ensure 'code' is in your system's PATH. For help, see https://code.visualstudio.com/docs/configure/command-line#_code-is-not-recognized-as-an-internal-or-external-command. You can also install the companion extension manually from the VS Code marketplace.`,
|
|
61
58
|
};
|
|
62
59
|
}
|
|
63
|
-
const
|
|
64
|
-
// The VSIX file is copied to the bundle directory as part of the build.
|
|
65
|
-
let vsixFiles = glob.sync(path.join(bundleDir, '*.vsix'));
|
|
66
|
-
if (vsixFiles.length === 0) {
|
|
67
|
-
// If the VSIX file is not in the bundle, it might be a dev
|
|
68
|
-
// environment running with `npm start`. Look for it in the original
|
|
69
|
-
// package location, relative to the bundle dir.
|
|
70
|
-
const devPath = path.join(bundleDir, // .../packages/core/dist/src/ide
|
|
71
|
-
'..', // .../packages/core/dist/src
|
|
72
|
-
'..', // .../packages/core/dist
|
|
73
|
-
'..', // .../packages/core
|
|
74
|
-
'..', // .../packages
|
|
75
|
-
VSCODE_COMPANION_EXTENSION_FOLDER, '*.vsix');
|
|
76
|
-
vsixFiles = glob.sync(devPath);
|
|
77
|
-
}
|
|
78
|
-
if (vsixFiles.length === 0) {
|
|
79
|
-
return {
|
|
80
|
-
success: false,
|
|
81
|
-
message: 'Could not find the required VS Code companion extension. Please file a bug via /bug.',
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
const vsixPath = vsixFiles[0];
|
|
85
|
-
const command = `"${commandPath}" --install-extension "${vsixPath}" --force`;
|
|
60
|
+
const command = `"${commandPath}" --install-extension google.gemini-cli-vscode-ide-companion --force`;
|
|
86
61
|
try {
|
|
87
62
|
child_process.execSync(command, { stdio: 'pipe' });
|
|
88
63
|
return {
|