erosolar-cli 1.7.55 → 1.7.56

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 (273) hide show
  1. package/package.json +1 -1
  2. package/dist/active-stack-security.d.ts +0 -110
  3. package/dist/active-stack-security.js +0 -313
  4. package/dist/active-stack-security.js.map +0 -1
  5. package/dist/advanced-targeting.d.ts +0 -113
  6. package/dist/advanced-targeting.js +0 -252
  7. package/dist/advanced-targeting.js.map +0 -1
  8. package/dist/bin/adapters/node/index.js +0 -33
  9. package/dist/bin/adapters/types.js +0 -1
  10. package/dist/bin/alpha-zero/agentWrapper.js +0 -165
  11. package/dist/bin/alpha-zero/codeEvaluator.js +0 -272
  12. package/dist/bin/alpha-zero/competitiveRunner.js +0 -219
  13. package/dist/bin/alpha-zero/index.js +0 -98
  14. package/dist/bin/alpha-zero/introspection.js +0 -298
  15. package/dist/bin/alpha-zero/metricsTracker.js +0 -207
  16. package/dist/bin/alpha-zero/security/core.js +0 -269
  17. package/dist/bin/alpha-zero/security/google.js +0 -308
  18. package/dist/bin/alpha-zero/security/googleLoader.js +0 -40
  19. package/dist/bin/alpha-zero/security/index.js +0 -31
  20. package/dist/bin/alpha-zero/security/simulation.js +0 -274
  21. package/dist/bin/alpha-zero/selfModification.js +0 -231
  22. package/dist/bin/alpha-zero/types.js +0 -30
  23. package/dist/bin/bin/erosolar-optimized.js +0 -205
  24. package/dist/bin/capabilities/agentSpawningCapability.js +0 -116
  25. package/dist/bin/capabilities/bashCapability.js +0 -22
  26. package/dist/bin/capabilities/cloudCapability.js +0 -36
  27. package/dist/bin/capabilities/codeAnalysisCapability.js +0 -22
  28. package/dist/bin/capabilities/codeQualityCapability.js +0 -23
  29. package/dist/bin/capabilities/dependencySecurityCapability.js +0 -22
  30. package/dist/bin/capabilities/devCapability.js +0 -22
  31. package/dist/bin/capabilities/editCapability.js +0 -28
  32. package/dist/bin/capabilities/emailCapability.js +0 -20
  33. package/dist/bin/capabilities/enhancedGitCapability.js +0 -221
  34. package/dist/bin/capabilities/filesystemCapability.js +0 -22
  35. package/dist/bin/capabilities/globCapability.js +0 -28
  36. package/dist/bin/capabilities/interactionCapability.js +0 -20
  37. package/dist/bin/capabilities/learnCapability.js +0 -22
  38. package/dist/bin/capabilities/mcpCapability.js +0 -20
  39. package/dist/bin/capabilities/notebookCapability.js +0 -28
  40. package/dist/bin/capabilities/planningCapability.js +0 -27
  41. package/dist/bin/capabilities/refactoringCapability.js +0 -23
  42. package/dist/bin/capabilities/repoChecksCapability.js +0 -22
  43. package/dist/bin/capabilities/searchCapability.js +0 -22
  44. package/dist/bin/capabilities/skillCapability.js +0 -76
  45. package/dist/bin/capabilities/taskManagementCapability.js +0 -20
  46. package/dist/bin/capabilities/testingCapability.js +0 -23
  47. package/dist/bin/capabilities/toolManifest.js +0 -159
  48. package/dist/bin/capabilities/toolRegistry.js +0 -114
  49. package/dist/bin/capabilities/webCapability.js +0 -20
  50. package/dist/bin/config.js +0 -139
  51. package/dist/bin/contracts/v1/agent.js +0 -7
  52. package/dist/bin/contracts/v1/agentProfileManifest.js +0 -8
  53. package/dist/bin/contracts/v1/agentRules.js +0 -9
  54. package/dist/bin/contracts/v1/toolAccess.js +0 -8
  55. package/dist/bin/erosolar-optimized.d.ts +0 -12
  56. package/dist/bin/erosolar-optimized.d.ts.map +0 -1
  57. package/dist/bin/erosolar-optimized.js +0 -239
  58. package/dist/bin/erosolar-optimized.js.map +0 -1
  59. package/dist/bin/headless/headlessApp.js +0 -172
  60. package/dist/bin/mcp/config.js +0 -202
  61. package/dist/bin/mcp/stdioClient.js +0 -172
  62. package/dist/bin/mcp/toolBridge.js +0 -104
  63. package/dist/bin/mcp/types.js +0 -1
  64. package/dist/bin/plugins/index.js +0 -113
  65. package/dist/bin/plugins/providers/anthropic/index.js +0 -25
  66. package/dist/bin/plugins/providers/deepseek/index.js +0 -24
  67. package/dist/bin/plugins/providers/google/index.js +0 -26
  68. package/dist/bin/plugins/providers/index.js +0 -19
  69. package/dist/bin/plugins/providers/ollama/index.js +0 -59
  70. package/dist/bin/plugins/providers/openai/index.js +0 -26
  71. package/dist/bin/plugins/providers/xai/index.js +0 -24
  72. package/dist/bin/plugins/tools/agentSpawning/agentSpawningPlugin.js +0 -8
  73. package/dist/bin/plugins/tools/bash/localBashPlugin.js +0 -13
  74. package/dist/bin/plugins/tools/checks/localRepoChecksPlugin.js +0 -13
  75. package/dist/bin/plugins/tools/cloud/cloudPlugin.js +0 -13
  76. package/dist/bin/plugins/tools/codeAnalysis/codeAnalysisPlugin.js +0 -13
  77. package/dist/bin/plugins/tools/codeQuality/codeQualityPlugin.js +0 -13
  78. package/dist/bin/plugins/tools/dependency/dependencyPlugin.js +0 -11
  79. package/dist/bin/plugins/tools/development/devPlugin.js +0 -13
  80. package/dist/bin/plugins/tools/edit/editPlugin.js +0 -14
  81. package/dist/bin/plugins/tools/email/emailPlugin.js +0 -11
  82. package/dist/bin/plugins/tools/enhancedGit/enhancedGitPlugin.js +0 -8
  83. package/dist/bin/plugins/tools/filesystem/localFilesystemPlugin.js +0 -13
  84. package/dist/bin/plugins/tools/glob/globPlugin.js +0 -14
  85. package/dist/bin/plugins/tools/index.js +0 -2
  86. package/dist/bin/plugins/tools/interaction/interactionPlugin.js +0 -11
  87. package/dist/bin/plugins/tools/learn/learnPlugin.js +0 -13
  88. package/dist/bin/plugins/tools/mcp/mcpPlugin.js +0 -8
  89. package/dist/bin/plugins/tools/nodeDefaults.js +0 -56
  90. package/dist/bin/plugins/tools/notebook/notebookPlugin.js +0 -14
  91. package/dist/bin/plugins/tools/planning/planningPlugin.js +0 -14
  92. package/dist/bin/plugins/tools/refactoring/refactoringPlugin.js +0 -11
  93. package/dist/bin/plugins/tools/registry.js +0 -57
  94. package/dist/bin/plugins/tools/search/localSearchPlugin.js +0 -13
  95. package/dist/bin/plugins/tools/skills/skillPlugin.js +0 -8
  96. package/dist/bin/plugins/tools/taskManagement/taskManagementPlugin.js +0 -11
  97. package/dist/bin/plugins/tools/testing/testingPlugin.js +0 -11
  98. package/dist/bin/plugins/tools/web/webPlugin.js +0 -11
  99. package/dist/bin/providers/anthropicProvider.js +0 -329
  100. package/dist/bin/providers/googleProvider.js +0 -203
  101. package/dist/bin/providers/openaiChatCompletionsProvider.js +0 -208
  102. package/dist/bin/providers/openaiResponsesProvider.js +0 -249
  103. package/dist/bin/providers/providerFactory.js +0 -24
  104. package/dist/bin/runtime/agentController.js +0 -321
  105. package/dist/bin/runtime/agentHost.js +0 -153
  106. package/dist/bin/runtime/agentSession.js +0 -195
  107. package/dist/bin/runtime/node.js +0 -10
  108. package/dist/bin/runtime/universal.js +0 -28
  109. package/dist/bin/skills/skillRepository.js +0 -236
  110. package/dist/bin/skills/types.js +0 -1
  111. package/dist/bin/subagents/taskRunner.js +0 -269
  112. package/dist/bin/tools/backgroundBashTools.js +0 -211
  113. package/dist/bin/tools/bashTools.js +0 -159
  114. package/dist/bin/tools/cloudTools.js +0 -864
  115. package/dist/bin/tools/codeAnalysisTools.js +0 -641
  116. package/dist/bin/tools/codeQualityTools.js +0 -294
  117. package/dist/bin/tools/dependencyTools.js +0 -282
  118. package/dist/bin/tools/devTools.js +0 -238
  119. package/dist/bin/tools/diffUtils.js +0 -137
  120. package/dist/bin/tools/editTools.js +0 -134
  121. package/dist/bin/tools/emailTools.js +0 -448
  122. package/dist/bin/tools/fileTools.js +0 -282
  123. package/dist/bin/tools/globTools.js +0 -173
  124. package/dist/bin/tools/grepTools.js +0 -332
  125. package/dist/bin/tools/interactionTools.js +0 -170
  126. package/dist/bin/tools/learnTools.js +0 -1818
  127. package/dist/bin/tools/notebookEditTools.js +0 -196
  128. package/dist/bin/tools/planningTools.js +0 -46
  129. package/dist/bin/tools/refactoringTools.js +0 -293
  130. package/dist/bin/tools/repoChecksTools.js +0 -160
  131. package/dist/bin/tools/searchTools.js +0 -206
  132. package/dist/bin/tools/skillTools.js +0 -177
  133. package/dist/bin/tools/taskManagementTools.js +0 -156
  134. package/dist/bin/tools/testingTools.js +0 -232
  135. package/dist/bin/tools/webTools.js +0 -480
  136. package/dist/bin/workspace.js +0 -106
  137. package/dist/bin/workspace.validator.js +0 -213
  138. package/dist/capabilities/offensiveSecurityCapability.d.ts +0 -26
  139. package/dist/capabilities/offensiveSecurityCapability.d.ts.map +0 -1
  140. package/dist/capabilities/offensiveSecurityCapability.js +0 -58
  141. package/dist/capabilities/offensiveSecurityCapability.js.map +0 -1
  142. package/dist/capabilities/realSecurityCapability.d.ts +0 -26
  143. package/dist/capabilities/realSecurityCapability.d.ts.map +0 -1
  144. package/dist/capabilities/realSecurityCapability.js +0 -53
  145. package/dist/capabilities/realSecurityCapability.js.map +0 -1
  146. package/dist/capabilities/securityCapability.d.ts +0 -32
  147. package/dist/capabilities/securityCapability.d.ts.map +0 -1
  148. package/dist/capabilities/securityCapability.js +0 -57
  149. package/dist/capabilities/securityCapability.js.map +0 -1
  150. package/dist/capabilities/ultimateSecurityCapability.d.ts +0 -42
  151. package/dist/capabilities/ultimateSecurityCapability.d.ts.map +0 -1
  152. package/dist/capabilities/ultimateSecurityCapability.js +0 -96
  153. package/dist/capabilities/ultimateSecurityCapability.js.map +0 -1
  154. package/dist/core/designThoughtCheck.d.ts +0 -196
  155. package/dist/core/designThoughtCheck.d.ts.map +0 -1
  156. package/dist/core/designThoughtCheck.js +0 -287
  157. package/dist/core/designThoughtCheck.js.map +0 -1
  158. package/dist/core/designThoughtCheckEngine.d.ts +0 -58
  159. package/dist/core/designThoughtCheckEngine.d.ts.map +0 -1
  160. package/dist/core/designThoughtCheckEngine.js +0 -358
  161. package/dist/core/designThoughtCheckEngine.js.map +0 -1
  162. package/dist/core/designThoughtCheckIntegration.d.ts +0 -103
  163. package/dist/core/designThoughtCheckIntegration.d.ts.map +0 -1
  164. package/dist/core/designThoughtCheckIntegration.js +0 -207
  165. package/dist/core/designThoughtCheckIntegration.js.map +0 -1
  166. package/dist/core/intelligenceTools.d.ts +0 -19
  167. package/dist/core/intelligenceTools.d.ts.map +0 -1
  168. package/dist/core/intelligenceTools.js +0 -453
  169. package/dist/core/intelligenceTools.js.map +0 -1
  170. package/dist/core/operationalTools.d.ts +0 -19
  171. package/dist/core/operationalTools.d.ts.map +0 -1
  172. package/dist/core/operationalTools.js +0 -467
  173. package/dist/core/operationalTools.js.map +0 -1
  174. package/dist/offensive/core/offensive-engine.d.ts +0 -171
  175. package/dist/offensive/core/offensive-engine.d.ts.map +0 -1
  176. package/dist/offensive/core/offensive-engine.js +0 -345
  177. package/dist/offensive/core/offensive-engine.js.map +0 -1
  178. package/dist/offensive/core/offensive-integration.d.ts +0 -129
  179. package/dist/offensive/core/offensive-integration.d.ts.map +0 -1
  180. package/dist/offensive/core/offensive-integration.js +0 -364
  181. package/dist/offensive/core/offensive-integration.js.map +0 -1
  182. package/dist/offensive/core/offensive-tools.d.ts +0 -55
  183. package/dist/offensive/core/offensive-tools.d.ts.map +0 -1
  184. package/dist/offensive/core/offensive-tools.js +0 -438
  185. package/dist/offensive/core/offensive-tools.js.map +0 -1
  186. package/dist/offensive/offensive-cli.d.ts +0 -48
  187. package/dist/offensive/offensive-cli.d.ts.map +0 -1
  188. package/dist/offensive/offensive-cli.js +0 -233
  189. package/dist/offensive/offensive-cli.js.map +0 -1
  190. package/dist/security/apt-simulation-cli.d.ts +0 -57
  191. package/dist/security/apt-simulation-cli.d.ts.map +0 -1
  192. package/dist/security/apt-simulation-cli.js +0 -278
  193. package/dist/security/apt-simulation-cli.js.map +0 -1
  194. package/dist/security/apt-simulation-engine-complete.d.ts +0 -97
  195. package/dist/security/apt-simulation-engine-complete.d.ts.map +0 -1
  196. package/dist/security/apt-simulation-engine-complete.js +0 -441
  197. package/dist/security/apt-simulation-engine-complete.js.map +0 -1
  198. package/dist/security/apt-simulation-engine.d.ts +0 -97
  199. package/dist/security/apt-simulation-engine.d.ts.map +0 -1
  200. package/dist/security/apt-simulation-engine.js +0 -441
  201. package/dist/security/apt-simulation-engine.js.map +0 -1
  202. package/dist/security/authorization.d.ts +0 -45
  203. package/dist/security/authorization.d.ts.map +0 -1
  204. package/dist/security/authorization.js +0 -128
  205. package/dist/security/authorization.js.map +0 -1
  206. package/dist/security/comprehensive-security-research.d.ts +0 -84
  207. package/dist/security/comprehensive-security-research.d.ts.map +0 -1
  208. package/dist/security/comprehensive-security-research.js +0 -211
  209. package/dist/security/comprehensive-security-research.js.map +0 -1
  210. package/dist/security/offensive/exploitationEngine.d.ts +0 -54
  211. package/dist/security/offensive/exploitationEngine.d.ts.map +0 -1
  212. package/dist/security/offensive/exploitationEngine.js +0 -263
  213. package/dist/security/offensive/exploitationEngine.js.map +0 -1
  214. package/dist/security/real/networkExploitation.d.ts +0 -92
  215. package/dist/security/real/networkExploitation.d.ts.map +0 -1
  216. package/dist/security/real/networkExploitation.js +0 -316
  217. package/dist/security/real/networkExploitation.js.map +0 -1
  218. package/dist/security/real/persistenceImplementation.d.ts +0 -62
  219. package/dist/security/real/persistenceImplementation.d.ts.map +0 -1
  220. package/dist/security/real/persistenceImplementation.js +0 -323
  221. package/dist/security/real/persistenceImplementation.js.map +0 -1
  222. package/dist/security/real/vulnerabilityScanner.d.ts +0 -73
  223. package/dist/security/real/vulnerabilityScanner.d.ts.map +0 -1
  224. package/dist/security/real/vulnerabilityScanner.js +0 -341
  225. package/dist/security/real/vulnerabilityScanner.js.map +0 -1
  226. package/dist/shell/capturePastePatch.d.ts +0 -9
  227. package/dist/shell/capturePastePatch.d.ts.map +0 -1
  228. package/dist/shell/capturePastePatch.js +0 -98
  229. package/dist/shell/capturePastePatch.js.map +0 -1
  230. package/dist/shell/enhancedInteractiveShell.d.ts +0 -90
  231. package/dist/shell/enhancedInteractiveShell.d.ts.map +0 -1
  232. package/dist/shell/enhancedInteractiveShell.js +0 -248
  233. package/dist/shell/enhancedInteractiveShell.js.map +0 -1
  234. package/dist/shell/inputProcessor.d.ts +0 -56
  235. package/dist/shell/inputProcessor.d.ts.map +0 -1
  236. package/dist/shell/inputProcessor.js +0 -172
  237. package/dist/shell/inputProcessor.js.map +0 -1
  238. package/dist/shell/interactiveShell-patch.d.ts +0 -27
  239. package/dist/shell/interactiveShell-patch.d.ts.map +0 -1
  240. package/dist/shell/interactiveShell-patch.js +0 -38
  241. package/dist/shell/interactiveShell-patch.js.map +0 -1
  242. package/dist/shell/interactiveShell-robust.d.ts +0 -26
  243. package/dist/shell/interactiveShell-robust.d.ts.map +0 -1
  244. package/dist/shell/interactiveShell-robust.js +0 -34
  245. package/dist/shell/interactiveShell-robust.js.map +0 -1
  246. package/dist/shell/multiLinePasteManager.d.ts +0 -106
  247. package/dist/shell/multiLinePasteManager.d.ts.map +0 -1
  248. package/dist/shell/multiLinePasteManager.js +0 -308
  249. package/dist/shell/multiLinePasteManager.js.map +0 -1
  250. package/dist/shell/processInputBlockPatch.d.ts +0 -8
  251. package/dist/shell/processInputBlockPatch.d.ts.map +0 -1
  252. package/dist/shell/processInputBlockPatch.js +0 -133
  253. package/dist/shell/processInputBlockPatch.js.map +0 -1
  254. package/dist/shell/unifiedInputProcessor.d.ts +0 -23
  255. package/dist/shell/unifiedInputProcessor.d.ts.map +0 -1
  256. package/dist/shell/unifiedInputProcessor.js +0 -92
  257. package/dist/shell/unifiedInputProcessor.js.map +0 -1
  258. package/dist/tools/enhancedSecurityTools.d.ts +0 -19
  259. package/dist/tools/enhancedSecurityTools.d.ts.map +0 -1
  260. package/dist/tools/enhancedSecurityTools.js +0 -215
  261. package/dist/tools/enhancedSecurityTools.js.map +0 -1
  262. package/dist/tools/offensiveSecurityTools.d.ts +0 -16
  263. package/dist/tools/offensiveSecurityTools.d.ts.map +0 -1
  264. package/dist/tools/offensiveSecurityTools.js +0 -285
  265. package/dist/tools/offensiveSecurityTools.js.map +0 -1
  266. package/dist/tools/realSecurityTools.d.ts +0 -18
  267. package/dist/tools/realSecurityTools.d.ts.map +0 -1
  268. package/dist/tools/realSecurityTools.js +0 -468
  269. package/dist/tools/realSecurityTools.js.map +0 -1
  270. package/dist/tools/securityTools.d.ts +0 -20
  271. package/dist/tools/securityTools.d.ts.map +0 -1
  272. package/dist/tools/securityTools.js +0 -449
  273. package/dist/tools/securityTools.js.map +0 -1
@@ -1,208 +0,0 @@
1
- import OpenAI from 'openai';
2
- export class OpenAIChatCompletionsProvider {
3
- constructor(options) {
4
- const clientConfig = {
5
- apiKey: options.apiKey,
6
- };
7
- if (options.baseURL) {
8
- clientConfig.baseURL = options.baseURL;
9
- }
10
- this.client = new OpenAI(clientConfig);
11
- this.id = options.providerId ?? 'openai';
12
- this.model = options.model;
13
- }
14
- async generate(messages, tools) {
15
- const request = {
16
- model: this.model,
17
- messages: mapMessages(messages),
18
- tools: tools.length ? tools.map(mapTool) : undefined,
19
- stream: false,
20
- };
21
- const completion = await this.client.chat.completions.create(request);
22
- assertHasChoices(completion);
23
- const choice = completion.choices[0];
24
- const usage = mapUsage(completion.usage);
25
- if (!choice) {
26
- return {
27
- type: 'message',
28
- content: '',
29
- usage,
30
- };
31
- }
32
- const toolCalls = (choice.message.tool_calls ?? []).map(mapToolCall);
33
- const content = extractMessageContent(choice);
34
- if (toolCalls.length > 0) {
35
- return {
36
- type: 'tool_calls',
37
- toolCalls,
38
- content,
39
- usage,
40
- };
41
- }
42
- return {
43
- type: 'message',
44
- content,
45
- usage,
46
- };
47
- }
48
- }
49
- function mapMessages(messages) {
50
- const params = [];
51
- for (const message of messages) {
52
- switch (message.role) {
53
- case 'system':
54
- case 'user': {
55
- params.push({
56
- role: message.role,
57
- content: message.content,
58
- });
59
- break;
60
- }
61
- case 'assistant': {
62
- params.push({
63
- role: 'assistant',
64
- content: message.content,
65
- tool_calls: message.toolCalls?.map((call, index) => ({
66
- id: call.id || `call_${index}`,
67
- type: 'function',
68
- function: {
69
- name: call.name,
70
- arguments: JSON.stringify(call.arguments ?? {}),
71
- },
72
- })),
73
- });
74
- break;
75
- }
76
- case 'tool': {
77
- params.push({
78
- role: 'tool',
79
- content: message.content,
80
- tool_call_id: message.toolCallId,
81
- });
82
- break;
83
- }
84
- default:
85
- break;
86
- }
87
- }
88
- return params;
89
- }
90
- function mapTool(definition) {
91
- const parameters = definition.parameters ??
92
- {
93
- type: 'object',
94
- properties: {},
95
- };
96
- return {
97
- type: 'function',
98
- function: {
99
- name: definition.name,
100
- description: definition.description,
101
- parameters,
102
- },
103
- };
104
- }
105
- function extractMessageContent(choice) {
106
- const message = choice.message;
107
- const content = message?.content;
108
- if (typeof content === 'string' && content.trim()) {
109
- return content.trim();
110
- }
111
- const refusal = message?.refusal;
112
- if (typeof refusal === 'string' && refusal.trim()) {
113
- return refusal.trim();
114
- }
115
- return '';
116
- }
117
- function mapToolCall(call) {
118
- let parsed = {};
119
- const rawArgs = call.function.arguments ?? '{}';
120
- try {
121
- parsed = JSON.parse(rawArgs);
122
- }
123
- catch (error) {
124
- // Try to recover malformed JSON (common with some models)
125
- const recovered = tryRecoverMalformedJson(rawArgs);
126
- if (recovered) {
127
- parsed = recovered;
128
- }
129
- else {
130
- // Log warning for debugging but continue with empty args
131
- console.warn(`[tool-call] Failed to parse arguments for ${call.function.name}: ${rawArgs.slice(0, 100)}...`);
132
- }
133
- }
134
- return {
135
- id: call.id ?? call.function.name,
136
- name: call.function.name,
137
- arguments: parsed,
138
- };
139
- }
140
- /**
141
- * Try to recover malformed JSON from tool call arguments.
142
- * Some models return truncated or malformed JSON that can be fixed.
143
- */
144
- function tryRecoverMalformedJson(raw) {
145
- if (!raw || !raw.trim()) {
146
- return null;
147
- }
148
- const attempts = [
149
- // Try adding missing closing braces/quotes
150
- raw + '"}',
151
- raw + '}',
152
- raw + '"' + '}',
153
- raw + '"}}',
154
- raw + '}}',
155
- ];
156
- for (const attempt of attempts) {
157
- try {
158
- const parsed = JSON.parse(attempt);
159
- if (typeof parsed === 'object' && parsed !== null) {
160
- return parsed;
161
- }
162
- }
163
- catch {
164
- // Continue to next attempt
165
- }
166
- }
167
- // Try regex extraction as last resort
168
- try {
169
- const pairs = raw.matchAll(/"([^"]+)":\s*(?:"([^"]*)"?|(\d+(?:\.\d+)?)|(\btrue\b|\bfalse\b|\bnull\b))/g);
170
- const result = {};
171
- for (const match of pairs) {
172
- const [, key, strVal, numVal, boolVal] = match;
173
- if (key) {
174
- if (strVal !== undefined) {
175
- result[key] = strVal;
176
- }
177
- else if (numVal) {
178
- result[key] = numVal.includes('.') ? parseFloat(numVal) : parseInt(numVal, 10);
179
- }
180
- else if (boolVal) {
181
- result[key] = boolVal === 'true' ? true : boolVal === 'false' ? false : null;
182
- }
183
- }
184
- }
185
- if (Object.keys(result).length > 0) {
186
- return result;
187
- }
188
- }
189
- catch {
190
- // Regex extraction failed
191
- }
192
- return null;
193
- }
194
- function mapUsage(usage) {
195
- if (!usage) {
196
- return null;
197
- }
198
- return {
199
- inputTokens: usage.prompt_tokens,
200
- outputTokens: usage.completion_tokens,
201
- totalTokens: usage.total_tokens,
202
- };
203
- }
204
- function assertHasChoices(result) {
205
- if (!('choices' in result)) {
206
- throw new Error('Streaming responses are not supported in this runtime.');
207
- }
208
- }
@@ -1,249 +0,0 @@
1
- import OpenAI from 'openai';
2
- export class OpenAIResponsesProvider {
3
- constructor(options) {
4
- const clientConfig = {
5
- apiKey: options.apiKey,
6
- };
7
- if (options.baseURL) {
8
- clientConfig.baseURL = options.baseURL;
9
- }
10
- this.client = new OpenAI(clientConfig);
11
- this.id = options.providerId ?? 'openai';
12
- this.model = options.model;
13
- this.reasoningEffort = options.reasoningEffort;
14
- this.textVerbosity = options.textVerbosity;
15
- }
16
- async generate(messages, tools) {
17
- const request = {
18
- model: this.model,
19
- input: mapMessages(messages),
20
- tools: tools.length ? tools.map(mapTool) : undefined,
21
- stream: false,
22
- };
23
- if (this.reasoningEffort) {
24
- request.reasoning = { effort: this.reasoningEffort };
25
- }
26
- if (this.textVerbosity) {
27
- request.text = { verbosity: this.textVerbosity };
28
- }
29
- const response = await this.client.responses.create(request);
30
- assertHasOutput(response);
31
- const toolCalls = response.output.filter(isFunctionCall).map(mapToolCall);
32
- const usage = mapUsage(response.usage);
33
- if (toolCalls.length > 0) {
34
- return {
35
- type: 'tool_calls',
36
- toolCalls,
37
- content: extractTextContent(response),
38
- usage,
39
- };
40
- }
41
- return {
42
- type: 'message',
43
- content: extractTextContent(response),
44
- usage,
45
- };
46
- }
47
- async *generateStream(messages, tools) {
48
- const request = {
49
- model: this.model,
50
- input: mapMessages(messages),
51
- tools: tools.length ? tools.map(mapTool) : undefined,
52
- stream: true,
53
- };
54
- if (this.reasoningEffort) {
55
- request.reasoning = { effort: this.reasoningEffort };
56
- }
57
- if (this.textVerbosity) {
58
- request.text = { verbosity: this.textVerbosity };
59
- }
60
- const stream = await this.client.responses.create(request);
61
- // Track tool calls being built
62
- const pendingToolCalls = new Map();
63
- for await (const event of stream) {
64
- switch (event.type) {
65
- case 'response.output_text.delta':
66
- if (event.delta) {
67
- yield { type: 'content', content: event.delta };
68
- }
69
- break;
70
- case 'response.function_call_arguments.delta':
71
- if (event.call_id) {
72
- const existing = pendingToolCalls.get(event.call_id);
73
- if (existing) {
74
- existing.arguments += event.delta ?? '';
75
- }
76
- else {
77
- pendingToolCalls.set(event.call_id, {
78
- name: event.name ?? '',
79
- arguments: event.delta ?? '',
80
- });
81
- }
82
- }
83
- break;
84
- case 'response.function_call_arguments.done':
85
- if (event.call_id) {
86
- const pending = pendingToolCalls.get(event.call_id);
87
- if (pending) {
88
- let parsed = {};
89
- try {
90
- parsed = JSON.parse(pending.arguments || '{}');
91
- }
92
- catch {
93
- parsed = {};
94
- }
95
- yield {
96
- type: 'tool_call',
97
- toolCall: {
98
- id: event.call_id,
99
- name: event.name ?? pending.name,
100
- arguments: parsed,
101
- },
102
- };
103
- pendingToolCalls.delete(event.call_id);
104
- }
105
- }
106
- break;
107
- case 'response.done':
108
- if (event.response?.usage) {
109
- const usage = mapUsage(event.response.usage);
110
- if (usage) {
111
- yield { type: 'usage', usage };
112
- }
113
- }
114
- yield { type: 'done' };
115
- break;
116
- }
117
- }
118
- }
119
- }
120
- function mapMessages(messages) {
121
- const input = [];
122
- for (const message of messages) {
123
- switch (message.role) {
124
- case 'system':
125
- case 'user':
126
- case 'assistant': {
127
- input.push({
128
- role: message.role,
129
- content: message.content,
130
- type: 'message',
131
- });
132
- if (message.role === 'assistant') {
133
- for (const call of message.toolCalls ?? []) {
134
- input.push({
135
- type: 'function_call',
136
- call_id: call.id,
137
- name: call.name,
138
- arguments: JSON.stringify(call.arguments ?? {}),
139
- });
140
- }
141
- }
142
- break;
143
- }
144
- case 'tool': {
145
- input.push({
146
- type: 'function_call_output',
147
- call_id: message.toolCallId,
148
- output: message.content,
149
- });
150
- break;
151
- }
152
- default:
153
- break;
154
- }
155
- }
156
- return input;
157
- }
158
- function mapTool(definition) {
159
- return {
160
- type: 'function',
161
- name: definition.name,
162
- description: definition.description,
163
- parameters: (definition.parameters ?? {
164
- type: 'object',
165
- properties: {},
166
- }),
167
- strict: false,
168
- };
169
- }
170
- function extractTextContent(response) {
171
- const primary = collectOutputText(response.output);
172
- if (primary) {
173
- return primary;
174
- }
175
- const aggregated = typeof response.output_text === 'string' ? response.output_text.trim() : '';
176
- if (aggregated) {
177
- return aggregated;
178
- }
179
- const refusal = collectRefusalText(response.output);
180
- if (refusal) {
181
- return refusal;
182
- }
183
- return '';
184
- }
185
- function collectOutputText(output) {
186
- const chunks = [];
187
- for (const item of output) {
188
- if (!isOutputMessage(item)) {
189
- continue;
190
- }
191
- for (const block of item.content) {
192
- if (block.type === 'output_text') {
193
- chunks.push(block.text);
194
- }
195
- }
196
- }
197
- return chunks.join('\n').trim();
198
- }
199
- function collectRefusalText(output) {
200
- for (const item of output) {
201
- if (!isOutputMessage(item)) {
202
- continue;
203
- }
204
- for (const block of item.content) {
205
- if (isRefusal(block) && block.refusal?.trim()) {
206
- return block.refusal.trim();
207
- }
208
- }
209
- }
210
- return '';
211
- }
212
- function mapToolCall(call) {
213
- let parsed = {};
214
- try {
215
- parsed = JSON.parse(call.arguments ?? '{}');
216
- }
217
- catch {
218
- parsed = {};
219
- }
220
- return {
221
- id: call.call_id ?? call.id ?? '',
222
- name: call.name,
223
- arguments: parsed,
224
- };
225
- }
226
- function mapUsage(usage) {
227
- if (!usage) {
228
- return undefined;
229
- }
230
- return {
231
- inputTokens: usage.input_tokens,
232
- outputTokens: usage.output_tokens,
233
- totalTokens: usage.total_tokens,
234
- };
235
- }
236
- function isFunctionCall(item) {
237
- return item.type === 'function_call';
238
- }
239
- function isOutputMessage(item) {
240
- return item.type === 'message';
241
- }
242
- function isRefusal(block) {
243
- return block.type === 'refusal';
244
- }
245
- function assertHasOutput(response) {
246
- if (!('output' in response)) {
247
- throw new Error('Streaming responses are not supported in this runtime.');
248
- }
249
- }
@@ -1,24 +0,0 @@
1
- const registry = new Map();
2
- export function registerProvider(id, factory, options = {}) {
3
- if (!id?.trim()) {
4
- throw new Error('Provider id cannot be blank.');
5
- }
6
- if (registry.has(id) && !options.override) {
7
- throw new Error(`Provider "${id}" is already registered.`);
8
- }
9
- registry.set(id, factory);
10
- }
11
- export function createProvider(config) {
12
- const factory = registry.get(config.provider);
13
- if (!factory) {
14
- const known = Array.from(registry.keys()).sort().join(', ');
15
- throw new Error(`Provider "${config.provider}" is not registered. Registered providers: ${known || 'none'}.`);
16
- }
17
- return factory(config);
18
- }
19
- export function listRegisteredProviders() {
20
- return Array.from(registry.keys());
21
- }
22
- export function hasProvider(id) {
23
- return registry.has(id);
24
- }