@vybestack/llxprt-code-core 0.1.23 → 0.2.2-nightly.250908.7b895396

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 (153) hide show
  1. package/README.md +21 -17
  2. package/dist/src/adapters/IStreamAdapter.d.ts +3 -3
  3. package/dist/src/auth/oauth-errors.d.ts +173 -0
  4. package/dist/src/auth/oauth-errors.js +461 -0
  5. package/dist/src/auth/oauth-errors.js.map +1 -0
  6. package/dist/src/auth/precedence.d.ts +1 -5
  7. package/dist/src/auth/precedence.js +28 -48
  8. package/dist/src/auth/precedence.js.map +1 -1
  9. package/dist/src/auth/token-store.js +2 -2
  10. package/dist/src/auth/token-store.js.map +1 -1
  11. package/dist/src/auth/types.d.ts +4 -4
  12. package/dist/src/code_assist/codeAssist.js +19 -6
  13. package/dist/src/code_assist/codeAssist.js.map +1 -1
  14. package/dist/src/code_assist/oauth2.d.ts +7 -0
  15. package/dist/src/code_assist/oauth2.js +82 -32
  16. package/dist/src/code_assist/oauth2.js.map +1 -1
  17. package/dist/src/code_assist/server.js +15 -4
  18. package/dist/src/code_assist/server.js.map +1 -1
  19. package/dist/src/code_assist/setup.js +9 -0
  20. package/dist/src/code_assist/setup.js.map +1 -1
  21. package/dist/src/config/index.d.ts +7 -0
  22. package/dist/src/config/index.js +8 -0
  23. package/dist/src/config/index.js.map +1 -0
  24. package/dist/src/core/client.d.ts +15 -20
  25. package/dist/src/core/client.js +98 -124
  26. package/dist/src/core/client.js.map +1 -1
  27. package/dist/src/core/compression-config.d.ts +10 -0
  28. package/dist/src/core/compression-config.js +17 -0
  29. package/dist/src/core/compression-config.js.map +1 -0
  30. package/dist/src/core/coreToolScheduler.js +50 -15
  31. package/dist/src/core/coreToolScheduler.js.map +1 -1
  32. package/dist/src/core/geminiChat.d.ts +68 -9
  33. package/dist/src/core/geminiChat.js +940 -405
  34. package/dist/src/core/geminiChat.js.map +1 -1
  35. package/dist/src/core/nonInteractiveToolExecutor.js +70 -19
  36. package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
  37. package/dist/src/core/prompts.js +35 -25
  38. package/dist/src/core/prompts.js.map +1 -1
  39. package/dist/src/core/turn.d.ts +1 -0
  40. package/dist/src/core/turn.js +8 -6
  41. package/dist/src/core/turn.js.map +1 -1
  42. package/dist/src/ide/ide-client.d.ts +1 -1
  43. package/dist/src/ide/ide-client.js +12 -6
  44. package/dist/src/ide/ide-client.js.map +1 -1
  45. package/dist/src/index.d.ts +4 -2
  46. package/dist/src/index.js +5 -2
  47. package/dist/src/index.js.map +1 -1
  48. package/dist/src/prompt-config/TemplateEngine.js +17 -0
  49. package/dist/src/prompt-config/TemplateEngine.js.map +1 -1
  50. package/dist/src/prompt-config/defaults/core-defaults.js +39 -32
  51. package/dist/src/prompt-config/defaults/core-defaults.js.map +1 -1
  52. package/dist/src/prompt-config/defaults/core.md +2 -0
  53. package/dist/src/prompt-config/defaults/provider-defaults.js +34 -27
  54. package/dist/src/prompt-config/defaults/provider-defaults.js.map +1 -1
  55. package/dist/src/prompt-config/defaults/providers/gemini/core.md +270 -0
  56. package/dist/src/prompt-config/defaults/providers/gemini/models/gemini-2.5-flash/core.md +12 -0
  57. package/dist/src/prompt-config/defaults/providers/gemini/models/gemini-2.5-flash/gemini-2-5-flash/core.md +12 -0
  58. package/dist/src/prompt-config/types.d.ts +2 -0
  59. package/dist/src/providers/BaseProvider.d.ts +39 -13
  60. package/dist/src/providers/BaseProvider.js +102 -28
  61. package/dist/src/providers/BaseProvider.js.map +1 -1
  62. package/dist/src/providers/IProvider.d.ts +17 -3
  63. package/dist/src/providers/LoggingProviderWrapper.d.ts +10 -3
  64. package/dist/src/providers/LoggingProviderWrapper.js +33 -27
  65. package/dist/src/providers/LoggingProviderWrapper.js.map +1 -1
  66. package/dist/src/providers/ProviderContentGenerator.d.ts +2 -2
  67. package/dist/src/providers/ProviderContentGenerator.js +9 -6
  68. package/dist/src/providers/ProviderContentGenerator.js.map +1 -1
  69. package/dist/src/providers/ProviderManager.d.ts +4 -0
  70. package/dist/src/providers/ProviderManager.js +6 -0
  71. package/dist/src/providers/ProviderManager.js.map +1 -1
  72. package/dist/src/providers/anthropic/AnthropicProvider.d.ts +34 -21
  73. package/dist/src/providers/anthropic/AnthropicProvider.js +505 -492
  74. package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -1
  75. package/dist/src/providers/gemini/GeminiProvider.d.ts +23 -9
  76. package/dist/src/providers/gemini/GeminiProvider.js +344 -515
  77. package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
  78. package/dist/src/providers/openai/ConversationCache.d.ts +3 -3
  79. package/dist/src/providers/openai/IChatGenerateParams.d.ts +9 -4
  80. package/dist/src/providers/openai/OpenAIProvider.d.ts +46 -96
  81. package/dist/src/providers/openai/OpenAIProvider.js +580 -1392
  82. package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
  83. package/dist/src/providers/openai/buildResponsesRequest.d.ts +3 -3
  84. package/dist/src/providers/openai/buildResponsesRequest.js +67 -37
  85. package/dist/src/providers/openai/buildResponsesRequest.js.map +1 -1
  86. package/dist/src/providers/openai/estimateRemoteTokens.d.ts +2 -2
  87. package/dist/src/providers/openai/estimateRemoteTokens.js +21 -8
  88. package/dist/src/providers/openai/estimateRemoteTokens.js.map +1 -1
  89. package/dist/src/providers/openai/parseResponsesStream.d.ts +6 -2
  90. package/dist/src/providers/openai/parseResponsesStream.js +99 -391
  91. package/dist/src/providers/openai/parseResponsesStream.js.map +1 -1
  92. package/dist/src/providers/openai/syntheticToolResponses.d.ts +5 -5
  93. package/dist/src/providers/openai/syntheticToolResponses.js +102 -91
  94. package/dist/src/providers/openai/syntheticToolResponses.js.map +1 -1
  95. package/dist/src/providers/openai-responses/OpenAIResponsesProvider.d.ts +89 -0
  96. package/dist/src/providers/openai-responses/OpenAIResponsesProvider.js +451 -0
  97. package/dist/src/providers/openai-responses/OpenAIResponsesProvider.js.map +1 -0
  98. package/dist/src/providers/openai-responses/index.d.ts +1 -0
  99. package/dist/src/providers/openai-responses/index.js +2 -0
  100. package/dist/src/providers/openai-responses/index.js.map +1 -0
  101. package/dist/src/providers/tokenizers/OpenAITokenizer.js +3 -3
  102. package/dist/src/providers/tokenizers/OpenAITokenizer.js.map +1 -1
  103. package/dist/src/providers/types.d.ts +1 -1
  104. package/dist/src/services/ClipboardService.d.ts +19 -0
  105. package/dist/src/services/ClipboardService.js +66 -0
  106. package/dist/src/services/ClipboardService.js.map +1 -0
  107. package/dist/src/services/history/ContentConverters.d.ts +43 -0
  108. package/dist/src/services/history/ContentConverters.js +325 -0
  109. package/dist/src/services/history/ContentConverters.js.map +1 -0
  110. package/dist/src/{providers/IMessage.d.ts → services/history/HistoryEvents.d.ts} +16 -22
  111. package/dist/src/{providers/IMessage.js → services/history/HistoryEvents.js} +1 -1
  112. package/dist/src/services/history/HistoryEvents.js.map +1 -0
  113. package/dist/src/services/history/HistoryService.d.ts +220 -0
  114. package/dist/src/services/history/HistoryService.js +673 -0
  115. package/dist/src/services/history/HistoryService.js.map +1 -0
  116. package/dist/src/services/history/IContent.d.ts +183 -0
  117. package/dist/src/services/history/IContent.js +104 -0
  118. package/dist/src/services/history/IContent.js.map +1 -0
  119. package/dist/src/services/index.d.ts +1 -0
  120. package/dist/src/services/index.js +1 -0
  121. package/dist/src/services/index.js.map +1 -1
  122. package/dist/src/settings/SettingsService.js.map +1 -1
  123. package/dist/src/telemetry/types.d.ts +16 -4
  124. package/dist/src/telemetry/types.js.map +1 -1
  125. package/dist/src/tools/IToolFormatter.d.ts +2 -2
  126. package/dist/src/tools/ToolFormatter.d.ts +42 -4
  127. package/dist/src/tools/ToolFormatter.js +151 -64
  128. package/dist/src/tools/ToolFormatter.js.map +1 -1
  129. package/dist/src/tools/doubleEscapeUtils.d.ts +57 -0
  130. package/dist/src/tools/doubleEscapeUtils.js +241 -0
  131. package/dist/src/tools/doubleEscapeUtils.js.map +1 -0
  132. package/dist/src/tools/read-file.d.ts +6 -1
  133. package/dist/src/tools/read-file.js +25 -11
  134. package/dist/src/tools/read-file.js.map +1 -1
  135. package/dist/src/tools/todo-schemas.d.ts +4 -4
  136. package/dist/src/tools/tool-registry.d.ts +8 -1
  137. package/dist/src/tools/tool-registry.js +79 -23
  138. package/dist/src/tools/tool-registry.js.map +1 -1
  139. package/dist/src/tools/tools.js +13 -0
  140. package/dist/src/tools/tools.js.map +1 -1
  141. package/dist/src/tools/write-file.d.ts +6 -1
  142. package/dist/src/tools/write-file.js +48 -26
  143. package/dist/src/tools/write-file.js.map +1 -1
  144. package/dist/src/types/modelParams.d.ts +12 -0
  145. package/dist/src/utils/bfsFileSearch.js +2 -6
  146. package/dist/src/utils/bfsFileSearch.js.map +1 -1
  147. package/dist/src/utils/schemaValidator.js +16 -1
  148. package/dist/src/utils/schemaValidator.js.map +1 -1
  149. package/package.json +8 -7
  150. package/dist/src/providers/IMessage.js.map +0 -1
  151. package/dist/src/providers/adapters/GeminiCompatibleWrapper.d.ts +0 -69
  152. package/dist/src/providers/adapters/GeminiCompatibleWrapper.js +0 -577
  153. package/dist/src/providers/adapters/GeminiCompatibleWrapper.js.map +0 -1
@@ -0,0 +1,451 @@
1
+ /**
2
+ * Copyright 2025 Vybestack LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ /**
17
+ * OpenAI Responses API Provider
18
+ * This provider exclusively uses the OpenAI /responses endpoint
19
+ * for models that support it (o1, o3, etc.)
20
+ */
21
+ import { DebugLogger } from '../../debug/index.js';
22
+ import { RESPONSES_API_MODELS } from '../openai/RESPONSES_API_MODELS.js';
23
+ import { ConversationCache } from '../openai/ConversationCache.js';
24
+ import { parseResponsesStream, parseErrorResponse, } from '../openai/parseResponsesStream.js';
25
+ import { BaseProvider } from '../BaseProvider.js';
26
+ import { getSettingsService } from '../../settings/settingsServiceInstance.js';
27
+ import { getCoreSystemPromptAsync } from '../../core/prompts.js';
28
+ export class OpenAIResponsesProvider extends BaseProvider {
29
+ /**
30
+ * Converts Gemini schema format (with uppercase Type enums) to standard JSON Schema format
31
+ */
32
+ convertGeminiSchemaToStandard(schema) {
33
+ if (!schema || typeof schema !== 'object') {
34
+ return schema;
35
+ }
36
+ const newSchema = { ...schema };
37
+ // Handle properties
38
+ if (newSchema.properties && typeof newSchema.properties === 'object') {
39
+ const newProperties = {};
40
+ for (const [key, value] of Object.entries(newSchema.properties)) {
41
+ newProperties[key] = this.convertGeminiSchemaToStandard(value);
42
+ }
43
+ newSchema.properties = newProperties;
44
+ }
45
+ // Handle items
46
+ if (newSchema.items) {
47
+ if (Array.isArray(newSchema.items)) {
48
+ newSchema.items = newSchema.items.map((item) => this.convertGeminiSchemaToStandard(item));
49
+ }
50
+ else {
51
+ newSchema.items = this.convertGeminiSchemaToStandard(newSchema.items);
52
+ }
53
+ }
54
+ // Convert type from UPPERCASE enum to lowercase string
55
+ if (newSchema.type) {
56
+ newSchema.type = String(newSchema.type).toLowerCase();
57
+ }
58
+ // Convert enum values if present
59
+ if (newSchema.enum && Array.isArray(newSchema.enum)) {
60
+ newSchema.enum = newSchema.enum.map((v) => String(v));
61
+ }
62
+ // Convert minLength from string to number if present
63
+ if (newSchema.minLength && typeof newSchema.minLength === 'string') {
64
+ const minLengthNum = parseInt(newSchema.minLength, 10);
65
+ if (!isNaN(minLengthNum)) {
66
+ newSchema.minLength = minLengthNum;
67
+ }
68
+ else {
69
+ delete newSchema.minLength;
70
+ }
71
+ }
72
+ // Convert maxLength from string to number if present
73
+ if (newSchema.maxLength && typeof newSchema.maxLength === 'string') {
74
+ const maxLengthNum = parseInt(newSchema.maxLength, 10);
75
+ if (!isNaN(maxLengthNum)) {
76
+ newSchema.maxLength = maxLengthNum;
77
+ }
78
+ else {
79
+ delete newSchema.maxLength;
80
+ }
81
+ }
82
+ return newSchema;
83
+ }
84
+ logger;
85
+ currentModel = 'o3-mini';
86
+ conversationCache;
87
+ modelParams;
88
+ constructor(apiKey, baseURL, config) {
89
+ const baseConfig = {
90
+ name: 'openai-responses',
91
+ apiKey,
92
+ baseURL: baseURL || 'https://api.openai.com/v1',
93
+ envKeyNames: ['OPENAI_API_KEY'],
94
+ isOAuthEnabled: false,
95
+ oauthProvider: undefined,
96
+ oauthManager: undefined,
97
+ };
98
+ super(baseConfig, config);
99
+ this.logger = new DebugLogger('llxprt:providers:openai-responses');
100
+ this.logger.debug(() => `Constructor - baseURL: ${baseURL || 'https://api.openai.com/v1'}, apiKey: ${apiKey?.substring(0, 10) || 'none'}`);
101
+ this.conversationCache = new ConversationCache();
102
+ // Initialize from SettingsService
103
+ this.initializeFromSettings().catch((error) => {
104
+ this.logger.debug(() => `Failed to initialize from SettingsService: ${error}`);
105
+ });
106
+ // Set default model for responses API
107
+ if (process.env.LLXPRT_DEFAULT_MODEL &&
108
+ RESPONSES_API_MODELS.some((m) => process.env.LLXPRT_DEFAULT_MODEL.startsWith(m))) {
109
+ this.currentModel = process.env.LLXPRT_DEFAULT_MODEL;
110
+ }
111
+ }
112
+ /**
113
+ * This provider does not support OAuth
114
+ */
115
+ supportsOAuth() {
116
+ return false;
117
+ }
118
+ getToolFormat() {
119
+ // Always use OpenAI format for responses API
120
+ return 'openai';
121
+ }
122
+ async getModels() {
123
+ // Try to fetch models dynamically from the API
124
+ const apiKey = await this.getAuthToken();
125
+ if (!apiKey) {
126
+ // If no API key, return hardcoded list from RESPONSES_API_MODELS
127
+ return RESPONSES_API_MODELS.map((modelId) => ({
128
+ id: modelId,
129
+ name: modelId,
130
+ provider: 'openai-responses',
131
+ supportedToolFormats: ['openai'],
132
+ }));
133
+ }
134
+ try {
135
+ // Fetch models from the API
136
+ const baseURL = this.getBaseURL() || 'https://api.openai.com/v1';
137
+ const response = await fetch(`${baseURL}/models`, {
138
+ method: 'GET',
139
+ headers: {
140
+ Authorization: `Bearer ${apiKey}`,
141
+ },
142
+ });
143
+ if (response.ok) {
144
+ const data = (await response.json());
145
+ const models = [];
146
+ // Add all models without filtering - let them all through
147
+ for (const model of data.data) {
148
+ // Skip non-chat models (embeddings, audio, image, etc.)
149
+ if (!/embedding|whisper|audio|tts|image|vision|dall[- ]?e|moderation/i.test(model.id)) {
150
+ models.push({
151
+ id: model.id,
152
+ name: model.id,
153
+ provider: 'openai-responses',
154
+ supportedToolFormats: ['openai'],
155
+ });
156
+ }
157
+ }
158
+ return models.length > 0
159
+ ? models
160
+ : RESPONSES_API_MODELS.map((modelId) => ({
161
+ id: modelId,
162
+ name: modelId,
163
+ provider: 'openai-responses',
164
+ supportedToolFormats: ['openai'],
165
+ }));
166
+ }
167
+ }
168
+ catch (error) {
169
+ this.logger.debug(() => `Error fetching models from OpenAI: ${error}`);
170
+ }
171
+ // Fallback to hardcoded list from RESPONSES_API_MODELS
172
+ return RESPONSES_API_MODELS.map((modelId) => ({
173
+ id: modelId,
174
+ name: modelId,
175
+ provider: 'openai-responses',
176
+ supportedToolFormats: ['openai'],
177
+ }));
178
+ }
179
+ setModel(modelId) {
180
+ // Update SettingsService as the source of truth
181
+ this.setModelInSettings(modelId).catch((error) => {
182
+ this.logger.debug(() => `Failed to persist model to SettingsService: ${error}`);
183
+ });
184
+ // Keep local cache for performance
185
+ this.currentModel = modelId;
186
+ }
187
+ getCurrentModel() {
188
+ // Try to get from SettingsService first (source of truth)
189
+ try {
190
+ const settingsService = getSettingsService();
191
+ const providerSettings = settingsService.getProviderSettings(this.name);
192
+ if (providerSettings.model) {
193
+ return providerSettings.model;
194
+ }
195
+ }
196
+ catch (error) {
197
+ this.logger.debug(() => `Failed to get model from SettingsService: ${error}`);
198
+ }
199
+ // Fall back to cached value or default
200
+ return this.currentModel || this.getDefaultModel();
201
+ }
202
+ getDefaultModel() {
203
+ // Return the default model for responses API
204
+ return 'o3-mini';
205
+ }
206
+ setApiKey(apiKey) {
207
+ // Call base provider implementation
208
+ super.setApiKey?.(apiKey);
209
+ // Persist to SettingsService if available
210
+ this.setApiKeyInSettings(apiKey).catch((error) => {
211
+ this.logger.debug(() => `Failed to persist API key to SettingsService: ${error}`);
212
+ });
213
+ }
214
+ setBaseUrl(baseUrl) {
215
+ // Call base provider implementation which stores in ephemeral settings
216
+ super.setBaseUrl?.(baseUrl);
217
+ // Also persist to SettingsService if available
218
+ const urlToStore = baseUrl && baseUrl.trim() !== '' ? baseUrl : 'https://api.openai.com/v1';
219
+ this.setBaseUrlInSettings(urlToStore).catch((error) => {
220
+ this.logger.debug(() => `Failed to persist base URL to SettingsService: ${error}`);
221
+ });
222
+ }
223
+ setConfig(config) {
224
+ // Update the providerConfig reference but don't store it locally
225
+ // The parent class will manage it through the protected property
226
+ super.setConfig?.(config);
227
+ }
228
+ setToolFormatOverride(format) {
229
+ // Responses API only supports OpenAI format
230
+ if (format && format !== 'openai') {
231
+ this.logger.debug(() => `Warning: Responses API only supports OpenAI tool format, ignoring override to ${format}`);
232
+ }
233
+ }
234
+ /**
235
+ * Get the conversation cache instance
236
+ */
237
+ getConversationCache() {
238
+ return this.conversationCache;
239
+ }
240
+ /**
241
+ * OpenAI Responses API always requires payment (API key)
242
+ */
243
+ isPaidMode() {
244
+ return true;
245
+ }
246
+ clearState() {
247
+ // Clear the conversation cache to prevent tool call ID mismatches
248
+ this.conversationCache.clear();
249
+ }
250
+ /**
251
+ * Get the list of server tools supported by this provider
252
+ */
253
+ getServerTools() {
254
+ return [];
255
+ }
256
+ /**
257
+ * Invoke a server tool (native provider tool)
258
+ */
259
+ async invokeServerTool(_toolName, _params, _config) {
260
+ throw new Error('Server tools not supported by OpenAI Responses provider');
261
+ }
262
+ /**
263
+ * Set model parameters to be included in API calls
264
+ */
265
+ setModelParams(params) {
266
+ if (params === undefined) {
267
+ this.modelParams = undefined;
268
+ }
269
+ else {
270
+ this.modelParams = { ...this.modelParams, ...params };
271
+ }
272
+ // Persist to SettingsService if available
273
+ this.setModelParamsInSettings(this.modelParams).catch((error) => {
274
+ this.logger.debug(() => `Failed to persist model params to SettingsService: ${error}`);
275
+ });
276
+ }
277
+ /**
278
+ * Get current model parameters
279
+ */
280
+ getModelParams() {
281
+ return this.modelParams;
282
+ }
283
+ /**
284
+ * Initialize provider configuration from SettingsService
285
+ */
286
+ async initializeFromSettings() {
287
+ try {
288
+ // Load saved model if available
289
+ const savedModel = await this.getModelFromSettings();
290
+ if (savedModel &&
291
+ RESPONSES_API_MODELS.some((m) => savedModel.startsWith(m))) {
292
+ this.currentModel = savedModel;
293
+ }
294
+ // Load saved base URL if available
295
+ const savedBaseUrl = await this.getBaseUrlFromSettings();
296
+ if (savedBaseUrl !== undefined) {
297
+ this.baseProviderConfig.baseURL =
298
+ savedBaseUrl || 'https://api.openai.com/v1';
299
+ }
300
+ // Load saved model parameters if available
301
+ const savedParams = await this.getModelParamsFromSettings();
302
+ if (savedParams) {
303
+ this.modelParams = savedParams;
304
+ }
305
+ this.logger.debug(() => `Initialized from SettingsService - model: ${this.currentModel}, baseURL: ${this.baseProviderConfig.baseURL}, params: ${JSON.stringify(this.modelParams)}`);
306
+ }
307
+ catch (error) {
308
+ this.logger.debug(() => `Failed to initialize OpenAI Responses provider from SettingsService: ${error}`);
309
+ }
310
+ }
311
+ /**
312
+ * Check if the provider is authenticated using any available method
313
+ */
314
+ async isAuthenticated() {
315
+ return super.isAuthenticated();
316
+ }
317
+ /**
318
+ * Generate chat completion with IContent interface
319
+ * Direct implementation for OpenAI Responses API with IContent interface
320
+ */
321
+ async *generateChatCompletion(content, tools, _toolFormat) {
322
+ // Check if API key is available
323
+ const apiKey = await this.getAuthToken();
324
+ if (!apiKey) {
325
+ throw new Error('OpenAI API key is required to generate completions');
326
+ }
327
+ // Get the system prompt
328
+ const userMemory = this.globalConfig?.getUserMemory
329
+ ? this.globalConfig.getUserMemory()
330
+ : '';
331
+ const systemPrompt = await getCoreSystemPromptAsync(userMemory, this.currentModel, undefined);
332
+ // Build Responses API input array directly from IContent
333
+ // For the Responses API, we send system, user and assistant messages
334
+ const input = [];
335
+ // Add system prompt as the first message if available
336
+ if (systemPrompt) {
337
+ input.push({
338
+ role: 'system',
339
+ content: systemPrompt,
340
+ });
341
+ }
342
+ for (const c of content) {
343
+ if (c.speaker === 'human') {
344
+ const textBlock = c.blocks.find((b) => b.type === 'text');
345
+ if (textBlock?.text) {
346
+ input.push({
347
+ role: 'user',
348
+ content: textBlock.text,
349
+ });
350
+ }
351
+ }
352
+ else if (c.speaker === 'ai') {
353
+ // For AI messages, we only include the text content
354
+ // Tool calls are part of the history but not sent to the API
355
+ const textBlocks = c.blocks.filter((b) => b.type === 'text');
356
+ const toolCallBlocks = c.blocks.filter((b) => b.type === 'tool_call');
357
+ const contentText = textBlocks.map((b) => b.text).join('');
358
+ // If there's text content or it's a pure tool call response, include it
359
+ if (contentText || toolCallBlocks.length > 0) {
360
+ const assistantMsg = {
361
+ role: 'assistant',
362
+ };
363
+ // Include text content if present
364
+ if (contentText) {
365
+ assistantMsg.content = contentText;
366
+ }
367
+ else if (toolCallBlocks.length > 0) {
368
+ // For tool-only responses, add a brief description
369
+ assistantMsg.content = `[Called ${toolCallBlocks.length} tool${toolCallBlocks.length > 1 ? 's' : ''}: ${toolCallBlocks.map((tc) => tc.name).join(', ')}]`;
370
+ }
371
+ input.push(assistantMsg);
372
+ }
373
+ }
374
+ else if (c.speaker === 'tool') {
375
+ // Tool responses are converted to assistant messages with the result
376
+ const toolResponseBlock = c.blocks.find((b) => b.type === 'tool_response');
377
+ if (toolResponseBlock) {
378
+ // Add tool result as an assistant message
379
+ const result = typeof toolResponseBlock.result === 'string'
380
+ ? toolResponseBlock.result
381
+ : JSON.stringify(toolResponseBlock.result);
382
+ input.push({
383
+ role: 'assistant',
384
+ content: `[Tool ${toolResponseBlock.toolName} result]: ${result}`,
385
+ });
386
+ }
387
+ }
388
+ }
389
+ // Convert Gemini format tools to Responses API format directly
390
+ // Based on the ToolFormatter.toResponsesTool format
391
+ const responsesTools = tools
392
+ ? tools[0].functionDeclarations.map((decl) => {
393
+ // Support both old 'parameters' and new 'parametersJsonSchema' formats
394
+ // DeclarativeTool uses parametersJsonSchema, while legacy tools use parameters
395
+ const toolParameters = 'parametersJsonSchema' in decl
396
+ ? decl
397
+ .parametersJsonSchema
398
+ : decl.parameters;
399
+ // Convert parameters from Gemini format to standard format
400
+ const convertedParams = toolParameters
401
+ ? this.convertGeminiSchemaToStandard(toolParameters)
402
+ : { type: 'object', properties: {} };
403
+ return {
404
+ type: 'function',
405
+ name: decl.name,
406
+ description: decl.description || null,
407
+ parameters: convertedParams,
408
+ strict: null,
409
+ };
410
+ })
411
+ : undefined;
412
+ // Build the request directly for Responses API
413
+ const request = {
414
+ model: this.currentModel,
415
+ input,
416
+ stream: true,
417
+ ...(this.modelParams || {}),
418
+ };
419
+ if (responsesTools && responsesTools.length > 0) {
420
+ request.tools = responsesTools;
421
+ }
422
+ // Make the API call
423
+ const baseURL = this.getBaseURL() || 'https://api.openai.com/v1';
424
+ const responsesURL = `${baseURL}/responses`;
425
+ const requestBody = JSON.stringify(request);
426
+ const bodyBlob = new Blob([requestBody], {
427
+ type: 'application/json; charset=utf-8',
428
+ });
429
+ const response = await fetch(responsesURL, {
430
+ method: 'POST',
431
+ headers: {
432
+ Authorization: `Bearer ${apiKey}`,
433
+ 'Content-Type': 'application/json; charset=utf-8',
434
+ },
435
+ body: bodyBlob,
436
+ });
437
+ // Handle errors
438
+ if (!response.ok) {
439
+ const errorBody = await response.text();
440
+ throw parseErrorResponse(response.status, errorBody, this.name);
441
+ }
442
+ // Stream the response directly as IContent
443
+ if (response.body) {
444
+ for await (const message of parseResponsesStream(response.body)) {
445
+ // The parseResponsesStream now returns IContent directly
446
+ yield message;
447
+ }
448
+ }
449
+ }
450
+ }
451
+ //# sourceMappingURL=OpenAIResponsesProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenAIResponsesProvider.js","sourceRoot":"","sources":["../../../../src/providers/openai-responses/OpenAIResponsesProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export { OpenAIResponsesProvider } from './OpenAIResponsesProvider.js';
@@ -0,0 +1,2 @@
1
+ export { OpenAIResponsesProvider } from './OpenAIResponsesProvider.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/providers/openai-responses/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC"}
@@ -27,9 +27,9 @@ export class OpenAITokenizer {
27
27
  this.encoderCache.set(model, encoder);
28
28
  }
29
29
  catch (_error) {
30
- // Fall back to cl100k_base encoding for newer models
31
- console.warn(`No specific encoding for model ${model}, using cl100k_base`);
32
- encoder = encoding_for_model('gpt-4');
30
+ // Fall back to o200k_base encoding for newer models
31
+ console.warn(`No specific encoding for model ${model}, using o200k_base`);
32
+ encoder = encoding_for_model('gpt-4o-mini');
33
33
  this.encoderCache.set(model, encoder);
34
34
  }
35
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"OpenAITokenizer.js","sourceRoot":"","sources":["../../../../src/providers/tokenizers/OpenAITokenizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,kBAAkB,EAAiB,MAAM,gBAAgB,CAAC;AAGnE,MAAM,OAAO,eAAe;IAClB,YAAY,GAAG,IAAI,GAAG,EAG3B,CAAC;IAEJ,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,KAAa;QAC3C,IAAI,CAAC;YACH,sCAAsC;YACtC,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,4CAA4C;gBAC5C,IAAI,CAAC;oBACH,OAAO,GAAG,kBAAkB,CAAC,KAAsB,CAAC,CAAC;oBACrD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACxC,CAAC;gBAAC,OAAO,MAAM,EAAE,CAAC;oBAChB,qDAAqD;oBACrD,OAAO,CAAC,IAAI,CACV,kCAAkC,KAAK,qBAAqB,CAC7D,CAAC;oBACF,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;oBACtC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;YAED,eAAe;YACf,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACpC,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;YAC/C,+CAA+C;YAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO;QACL,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;CACF"}
1
+ {"version":3,"file":"OpenAITokenizer.js","sourceRoot":"","sources":["../../../../src/providers/tokenizers/OpenAITokenizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,kBAAkB,EAAiB,MAAM,gBAAgB,CAAC;AAGnE,MAAM,OAAO,eAAe;IAClB,YAAY,GAAG,IAAI,GAAG,EAG3B,CAAC;IAEJ,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,KAAa;QAC3C,IAAI,CAAC;YACH,sCAAsC;YACtC,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,4CAA4C;gBAC5C,IAAI,CAAC;oBACH,OAAO,GAAG,kBAAkB,CAAC,KAAsB,CAAC,CAAC;oBACrD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACxC,CAAC;gBAAC,OAAO,MAAM,EAAE,CAAC;oBAChB,oDAAoD;oBACpD,OAAO,CAAC,IAAI,CACV,kCAAkC,KAAK,oBAAoB,CAC5D,CAAC;oBACF,OAAO,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;oBAC5C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;YAED,eAAe;YACf,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACpC,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;YAC/C,+CAA+C;YAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO;QACL,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;CACF"}
@@ -3,7 +3,7 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- export type { IMessage as ProviderMessage } from './IMessage.js';
6
+ export type { IContent as ProviderMessage } from '../services/history/IContent.js';
7
7
  export type { ITool as ProviderTool } from './ITool.js';
8
8
  export type { IProvider as Provider } from './IProvider.js';
9
9
  export type { IProviderManager as ProviderManager } from './IProviderManager.js';
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * @plan PLAN-20250822-GEMINIFALLBACK.P06
8
+ * @requirement REQ-001.1, REQ-001.2, REQ-001.3
9
+ * @pseudocode lines 29-37
10
+ */
11
+ export declare class ClipboardService {
12
+ /**
13
+ * Copy text to clipboard using platform-specific utilities
14
+ * @plan PLAN-20250822-GEMINIFALLBACK.P06
15
+ * @requirement REQ-001.1
16
+ * @pseudocode lines 29-30
17
+ */
18
+ copyToClipboard(text: string): Promise<void>;
19
+ }
@@ -0,0 +1,66 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { spawn } from 'child_process';
7
+ /**
8
+ * @plan PLAN-20250822-GEMINIFALLBACK.P06
9
+ * @requirement REQ-001.1, REQ-001.2, REQ-001.3
10
+ * @pseudocode lines 29-37
11
+ */
12
+ export class ClipboardService {
13
+ /**
14
+ * Copy text to clipboard using platform-specific utilities
15
+ * @plan PLAN-20250822-GEMINIFALLBACK.P06
16
+ * @requirement REQ-001.1
17
+ * @pseudocode lines 29-30
18
+ */
19
+ async copyToClipboard(text) {
20
+ const run = (cmd, args) => new Promise((resolveInner, rejectInner) => {
21
+ const child = spawn(cmd, args);
22
+ let stderr = '';
23
+ child.stderr.on('data', (chunk) => (stderr += chunk.toString()));
24
+ child.on('error', rejectInner);
25
+ child.on('close', (code) => {
26
+ if (code === 0)
27
+ return resolveInner();
28
+ const errorMsg = stderr.trim();
29
+ rejectInner(new Error(`'${cmd}' exited with code ${code}${errorMsg ? `: ${errorMsg}` : ''}`));
30
+ });
31
+ child.stdin.on('error', rejectInner);
32
+ child.stdin.write(text);
33
+ child.stdin.end();
34
+ });
35
+ return new Promise((resolve, reject) => {
36
+ /**
37
+ * @plan PLAN-20250822-GEMINIFALLBACK.P06
38
+ * @requirement REQ-001.2
39
+ * @pseudocode lines 31-36
40
+ */
41
+ switch (process.platform) {
42
+ case 'win32':
43
+ // Windows: clip
44
+ run('clip', []).then(resolve).catch(reject);
45
+ break;
46
+ case 'darwin':
47
+ // macOS: pbcopy
48
+ run('pbcopy', []).then(resolve).catch(reject);
49
+ break;
50
+ case 'linux':
51
+ // Linux: try xclip first, then wl-copy (Wayland) as fallback
52
+ run('xclip', ['-selection', 'clipboard'])
53
+ .then(resolve)
54
+ .catch(() => {
55
+ // Try wl-copy as fallback for Wayland
56
+ run('wl-copy', []).then(resolve).catch(reject);
57
+ });
58
+ break;
59
+ default:
60
+ reject(new Error(`Unsupported platform: ${process.platform}`));
61
+ break;
62
+ }
63
+ });
64
+ }
65
+ }
66
+ //# sourceMappingURL=ClipboardService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClipboardService.js","sourceRoot":"","sources":["../../../src/services/ClipboardService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC;;;;GAIG;AACH,MAAM,OAAO,gBAAgB;IAC3B;;;;;OAKG;IACH,KAAK,CAAC,eAAe,CAAC,IAAY;QAChC,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,IAAc,EAAiB,EAAE,CACzD,IAAI,OAAO,CAAO,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE;YAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC/B,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACjE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAC/B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,IAAI,IAAI,KAAK,CAAC;oBAAE,OAAO,YAAY,EAAE,CAAC;gBACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC/B,WAAW,CACT,IAAI,KAAK,CACP,IAAI,GAAG,sBAAsB,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACtE,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YACrC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxB,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;QAEL,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC;;;;eAIG;YACH,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACzB,KAAK,OAAO;oBACV,gBAAgB;oBAChB,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC5C,MAAM;gBACR,KAAK,QAAQ;oBACX,gBAAgB;oBAChB,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC9C,MAAM;gBACR,KAAK,OAAO;oBACV,6DAA6D;oBAC7D,GAAG,CAAC,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;yBACtC,IAAI,CAAC,OAAO,CAAC;yBACb,KAAK,CAAC,GAAG,EAAE;wBACV,sCAAsC;wBACtC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBACjD,CAAC,CAAC,CAAC;oBACL,MAAM;gBACR;oBACE,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;oBAC/D,MAAM;YACV,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Copyright 2025 Vybestack LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { Content } from '@google/genai';
17
+ import type { IContent } from './IContent.js';
18
+ /**
19
+ * Converts between Gemini Content format and IContent format
20
+ */
21
+ export declare class ContentConverters {
22
+ private static logger;
23
+ private static normalizeToHistoryId;
24
+ /**
25
+ * Convert IContent to Gemini Content format
26
+ */
27
+ static toGeminiContent(iContent: IContent): Content;
28
+ /**
29
+ * Convert Gemini Content to IContent format
30
+ */
31
+ static toIContent(content: Content, generateIdCb?: () => string, getNextUnmatchedToolCall?: () => {
32
+ historyId: string;
33
+ toolName?: string;
34
+ }): IContent;
35
+ /**
36
+ * Convert array of IContent to array of Gemini Content
37
+ */
38
+ static toGeminiContents(iContents: IContent[]): Content[];
39
+ /**
40
+ * Convert array of Gemini Content to array of IContent
41
+ */
42
+ static toIContents(contents: Content[]): IContent[];
43
+ }