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,329 +0,0 @@
1
- import Anthropic from '@anthropic-ai/sdk';
2
- import { APIError, RateLimitError } from '@anthropic-ai/sdk/error.js';
3
- const DEFAULT_RATE_LIMIT_RETRIES = 4;
4
- const DEFAULT_RATE_LIMIT_INITIAL_DELAY_MS = 1500;
5
- const MIN_RATE_LIMIT_DELAY_MS = 750;
6
- const MAX_RATE_LIMIT_DELAY_MS = 40000;
7
- export class AnthropicMessagesProvider {
8
- constructor(options) {
9
- this.id = 'anthropic';
10
- this.client = new Anthropic({ apiKey: options.apiKey });
11
- this.model = options.model;
12
- this.maxTokens = options.maxTokens ?? 2048;
13
- this.temperature = options.temperature ?? 0;
14
- this.rateLimitMaxRetries = Math.max(0, options.rateLimitMaxRetries ?? DEFAULT_RATE_LIMIT_RETRIES);
15
- this.rateLimitInitialDelayMs = Math.max(MIN_RATE_LIMIT_DELAY_MS, options.rateLimitInitialDelayMs ?? DEFAULT_RATE_LIMIT_INITIAL_DELAY_MS);
16
- this.enablePromptCaching = options.enablePromptCaching ?? true;
17
- }
18
- async generate(messages, tools) {
19
- const { system, chat } = convertConversation(messages, this.enablePromptCaching);
20
- const response = await this.executeWithRateLimitRetries(() => this.client.messages.create({
21
- model: this.model,
22
- max_tokens: this.maxTokens,
23
- temperature: this.temperature,
24
- messages: chat,
25
- ...(system ? { system } : {}),
26
- ...(tools.length ? { tools: tools.map(mapTool) } : {}),
27
- }));
28
- const usage = mapUsage(response.usage);
29
- const toolCalls = response.content
30
- .filter((block) => block.type === 'tool_use')
31
- .map((block) => ({
32
- id: block.id,
33
- name: block.name,
34
- arguments: toRecord(block.input),
35
- }));
36
- const textContent = response.content
37
- .filter((block) => block.type === 'text')
38
- .map((block) => ('text' in block ? block.text : ''))
39
- .join('\n')
40
- .trim();
41
- if (toolCalls.length > 0) {
42
- return {
43
- type: 'tool_calls',
44
- toolCalls,
45
- content: textContent,
46
- usage,
47
- };
48
- }
49
- return {
50
- type: 'message',
51
- content: textContent,
52
- usage,
53
- };
54
- }
55
- async *generateStream(messages, tools) {
56
- const { system, chat } = convertConversation(messages, this.enablePromptCaching);
57
- const stream = this.client.messages.stream({
58
- model: this.model,
59
- max_tokens: this.maxTokens,
60
- temperature: this.temperature,
61
- messages: chat,
62
- ...(system ? { system } : {}),
63
- ...(tools.length ? { tools: tools.map(mapTool) } : {}),
64
- });
65
- let currentToolCall = null;
66
- let currentToolCallInput = '';
67
- let toolCallId = '';
68
- for await (const event of stream) {
69
- // Handle different event types
70
- if (event.type === 'content_block_start') {
71
- const block = event.content_block;
72
- if (block.type === 'tool_use') {
73
- toolCallId = block.id;
74
- currentToolCall = {
75
- id: block.id,
76
- name: block.name,
77
- arguments: {},
78
- };
79
- currentToolCallInput = '';
80
- }
81
- }
82
- else if (event.type === 'content_block_delta') {
83
- const delta = event.delta;
84
- if (delta.type === 'text_delta') {
85
- yield {
86
- type: 'content',
87
- content: delta.text,
88
- };
89
- }
90
- else if (delta.type === 'input_json_delta' && currentToolCall) {
91
- // accumulate tool input JSON fragments
92
- if (typeof delta.partial_json === 'string' && delta.partial_json) {
93
- currentToolCallInput += delta.partial_json;
94
- }
95
- }
96
- }
97
- else if (event.type === 'content_block_stop') {
98
- if (currentToolCall && toolCallId) {
99
- if (currentToolCallInput.trim()) {
100
- try {
101
- currentToolCall.arguments = toRecord(JSON.parse(currentToolCallInput));
102
- }
103
- catch {
104
- currentToolCall.arguments = {};
105
- }
106
- }
107
- yield {
108
- type: 'tool_call',
109
- toolCall: currentToolCall,
110
- };
111
- currentToolCall = null;
112
- currentToolCallInput = '';
113
- toolCallId = '';
114
- }
115
- }
116
- else if (event.type === 'message_stop') {
117
- const finalMessage = await stream.finalMessage();
118
- const usage = mapUsage(finalMessage.usage);
119
- if (usage) {
120
- yield {
121
- type: 'usage',
122
- usage,
123
- };
124
- }
125
- yield {
126
- type: 'done',
127
- };
128
- }
129
- }
130
- }
131
- getCapabilities() {
132
- return {
133
- streaming: true,
134
- toolCalling: true,
135
- vision: this.model.includes('sonnet') || this.model.includes('opus'),
136
- functionCalling: true,
137
- maxTokens: this.maxTokens,
138
- supportedModalities: ['text', 'image'],
139
- };
140
- }
141
- async executeWithRateLimitRetries(operation) {
142
- let retries = 0;
143
- let delayMs = this.rateLimitInitialDelayMs;
144
- while (true) {
145
- try {
146
- return await operation();
147
- }
148
- catch (error) {
149
- if (!isRateLimitError(error)) {
150
- throw error;
151
- }
152
- if (retries >= this.rateLimitMaxRetries) {
153
- throw buildRateLimitFailureError(error, retries);
154
- }
155
- const waitMs = determineRetryDelay(error.headers, delayMs);
156
- await sleep(waitMs);
157
- retries += 1;
158
- delayMs = Math.min(delayMs * 2, MAX_RATE_LIMIT_DELAY_MS);
159
- }
160
- }
161
- }
162
- }
163
- function convertConversation(messages, enablePromptCaching = false) {
164
- const systemPrompts = [];
165
- const chat = [];
166
- for (const message of messages) {
167
- switch (message.role) {
168
- case 'system': {
169
- systemPrompts.push(message.content);
170
- break;
171
- }
172
- case 'user': {
173
- chat.push({
174
- role: 'user',
175
- content: [{ type: 'text', text: message.content }],
176
- });
177
- break;
178
- }
179
- case 'assistant': {
180
- const contentBlocks = [];
181
- if (message.content.trim().length > 0) {
182
- contentBlocks.push({ type: 'text', text: message.content });
183
- }
184
- for (const call of message.toolCalls ?? []) {
185
- contentBlocks.push({
186
- type: 'tool_use',
187
- id: call.id,
188
- name: call.name,
189
- input: call.arguments,
190
- });
191
- }
192
- chat.push({
193
- role: 'assistant',
194
- content: contentBlocks.length ? contentBlocks : [{ type: 'text', text: '' }],
195
- });
196
- break;
197
- }
198
- case 'tool': {
199
- const block = {
200
- type: 'tool_result',
201
- tool_use_id: message.toolCallId,
202
- content: [{ type: 'text', text: message.content }],
203
- };
204
- chat.push({
205
- role: 'user',
206
- content: [block],
207
- });
208
- break;
209
- }
210
- default:
211
- break;
212
- }
213
- }
214
- // Add cache control breakpoints to optimize costs
215
- // Cache the first few user messages (usually contain system context)
216
- if (enablePromptCaching && chat.length > 2) {
217
- const cacheBreakpoint = Math.min(2, chat.length - 1);
218
- for (let i = 0; i < cacheBreakpoint; i++) {
219
- const message = chat[i];
220
- if (message && message.role === 'user' && Array.isArray(message.content)) {
221
- const lastContent = message.content[message.content.length - 1];
222
- if (lastContent && 'text' in lastContent) {
223
- lastContent['cache_control'] = { type: 'ephemeral' };
224
- }
225
- }
226
- }
227
- }
228
- return {
229
- system: systemPrompts.length ? systemPrompts.join('\n\n') : null,
230
- chat,
231
- };
232
- }
233
- function mapTool(definition) {
234
- return {
235
- name: definition.name,
236
- description: definition.description,
237
- input_schema: definition.parameters ?? {
238
- type: 'object',
239
- properties: {},
240
- },
241
- };
242
- }
243
- function toRecord(value) {
244
- if (isPlainRecord(value)) {
245
- return value;
246
- }
247
- if (typeof value === 'string') {
248
- const trimmed = value.trim();
249
- if (!trimmed) {
250
- return {};
251
- }
252
- try {
253
- const parsed = JSON.parse(trimmed);
254
- return isPlainRecord(parsed) ? parsed : {};
255
- }
256
- catch {
257
- return {};
258
- }
259
- }
260
- return {};
261
- }
262
- function isPlainRecord(value) {
263
- return typeof value === 'object' && value !== null && !Array.isArray(value);
264
- }
265
- function mapUsage(usage) {
266
- if (!usage) {
267
- return null;
268
- }
269
- const total = typeof usage.input_tokens === 'number' && typeof usage.output_tokens === 'number'
270
- ? usage.input_tokens + usage.output_tokens
271
- : undefined;
272
- return {
273
- inputTokens: usage.input_tokens,
274
- outputTokens: usage.output_tokens,
275
- totalTokens: total,
276
- };
277
- }
278
- function isRateLimitError(error) {
279
- if (error instanceof RateLimitError) {
280
- return true;
281
- }
282
- if (error instanceof APIError && error.status === 429) {
283
- return true;
284
- }
285
- return typeof error === 'object' && error !== null && 'status' in error && error.status === 429;
286
- }
287
- function determineRetryDelay(headers, fallbackMs) {
288
- const retryAfter = parseRetryAfterHeader(headers);
289
- if (retryAfter !== null) {
290
- return clamp(retryAfter, MIN_RATE_LIMIT_DELAY_MS, MAX_RATE_LIMIT_DELAY_MS);
291
- }
292
- const jitter = fallbackMs * 0.25;
293
- const randomized = fallbackMs + (Math.random() * (2 * jitter) - jitter);
294
- return clamp(Math.round(randomized), MIN_RATE_LIMIT_DELAY_MS, MAX_RATE_LIMIT_DELAY_MS);
295
- }
296
- function parseRetryAfterHeader(headers) {
297
- if (!headers || typeof headers.get !== 'function') {
298
- return null;
299
- }
300
- const retryAfter = headers.get('retry-after');
301
- if (!retryAfter) {
302
- return null;
303
- }
304
- const numeric = Number(retryAfter);
305
- if (Number.isFinite(numeric) && numeric >= 0) {
306
- return numeric * 1000;
307
- }
308
- const parsedDate = Date.parse(retryAfter);
309
- if (Number.isFinite(parsedDate)) {
310
- return Math.max(0, parsedDate - Date.now());
311
- }
312
- return null;
313
- }
314
- function clamp(value, min, max) {
315
- return Math.max(min, Math.min(max, value));
316
- }
317
- async function sleep(durationMs) {
318
- await new Promise((resolve) => setTimeout(resolve, durationMs));
319
- }
320
- function buildRateLimitFailureError(error, retries) {
321
- const baseMessage = 'Anthropic rejected the request because the per-minute token rate limit was exceeded.';
322
- const retryDetails = retries > 0 ? ` Waited and retried ${retries} time${retries === 1 ? '' : 's'} without success.` : '';
323
- const advisory = ' Reduce the prompt size or wait for usage to reset before trying again. ' +
324
- 'See https://docs.claude.com/en/api/rate-limits for quota guidance.';
325
- const original = error.message ? `\nOriginal message: ${error.message}` : '';
326
- return new Error(`${baseMessage}${retryDetails}${advisory}${original}`, {
327
- cause: error,
328
- });
329
- }
@@ -1,203 +0,0 @@
1
- import { GoogleGenAI, } from '@google/genai';
2
- export class GoogleGenAIProvider {
3
- constructor(options) {
4
- this.client = new GoogleGenAI({
5
- apiKey: options.apiKey,
6
- });
7
- this.id = options.providerId ?? 'google';
8
- this.model = options.model;
9
- this.temperature = options.temperature;
10
- this.maxOutputTokens = options.maxOutputTokens;
11
- }
12
- async generate(messages, tools) {
13
- const { contents, systemInstruction } = mapConversation(messages);
14
- const config = {};
15
- if (systemInstruction) {
16
- config.systemInstruction = systemInstruction;
17
- }
18
- if (typeof this.temperature === 'number') {
19
- config.temperature = this.temperature;
20
- }
21
- if (typeof this.maxOutputTokens === 'number') {
22
- config.maxOutputTokens = this.maxOutputTokens;
23
- }
24
- const mappedTools = mapTools(tools);
25
- if (mappedTools.length > 0) {
26
- config.tools = mappedTools;
27
- }
28
- const response = await this.client.models.generateContent({
29
- model: this.model,
30
- contents: contents.length ? contents : createEmptyUserContent(),
31
- config: Object.keys(config).length ? config : undefined,
32
- });
33
- const usage = mapUsage(response.usageMetadata);
34
- const toolCalls = mapFunctionCalls(response.functionCalls ?? []);
35
- const content = response.text?.trim() ?? '';
36
- if (toolCalls.length > 0) {
37
- return {
38
- type: 'tool_calls',
39
- toolCalls,
40
- content,
41
- usage,
42
- };
43
- }
44
- return {
45
- type: 'message',
46
- content,
47
- usage,
48
- };
49
- }
50
- }
51
- function mapConversation(messages) {
52
- const contents = [];
53
- const systemPrompts = [];
54
- for (const message of messages) {
55
- switch (message.role) {
56
- case 'system': {
57
- if (message.content.trim()) {
58
- systemPrompts.push(message.content.trim());
59
- }
60
- break;
61
- }
62
- case 'user': {
63
- contents.push({
64
- role: 'user',
65
- parts: [{ text: message.content }],
66
- });
67
- break;
68
- }
69
- case 'assistant': {
70
- contents.push(mapAssistantMessage(message));
71
- break;
72
- }
73
- case 'tool': {
74
- const content = mapToolMessage(message);
75
- if (content) {
76
- contents.push(content);
77
- }
78
- break;
79
- }
80
- default:
81
- break;
82
- }
83
- }
84
- return {
85
- contents,
86
- systemInstruction: systemPrompts.length ? systemPrompts.join('\n\n') : undefined,
87
- };
88
- }
89
- function mapAssistantMessage(message) {
90
- const parts = [];
91
- const text = message.content.trim();
92
- if (text) {
93
- parts.push({ text });
94
- }
95
- for (const call of message.toolCalls ?? []) {
96
- parts.push({
97
- functionCall: {
98
- id: call.id || undefined,
99
- name: call.name,
100
- args: toRecord(call.arguments),
101
- },
102
- });
103
- }
104
- return {
105
- role: 'model',
106
- parts: parts.length ? parts : [{ text: '' }],
107
- };
108
- }
109
- function mapToolMessage(message) {
110
- if (!message.toolCallId) {
111
- return null;
112
- }
113
- return {
114
- role: 'user',
115
- parts: [
116
- {
117
- functionResponse: {
118
- id: message.toolCallId,
119
- name: message.name,
120
- response: parseToolResponse(message.content),
121
- },
122
- },
123
- ],
124
- };
125
- }
126
- function parseToolResponse(content) {
127
- const trimmed = content.trim();
128
- if (!trimmed) {
129
- return { output: '' };
130
- }
131
- try {
132
- const parsed = JSON.parse(trimmed);
133
- if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
134
- return parsed;
135
- }
136
- }
137
- catch {
138
- }
139
- return { output: content };
140
- }
141
- function mapFunctionCalls(calls) {
142
- return calls
143
- .filter((call) => Boolean(call.name))
144
- .map((call) => ({
145
- id: call.id || call.name || 'function_call',
146
- name: call.name ?? 'function_call',
147
- arguments: toRecord(call.args),
148
- }));
149
- }
150
- function createEmptyUserContent() {
151
- return [
152
- {
153
- role: 'user',
154
- parts: [{ text: '' }],
155
- },
156
- ];
157
- }
158
- function mapTools(tools) {
159
- if (!tools.length) {
160
- return [];
161
- }
162
- return [
163
- {
164
- functionDeclarations: tools.map((tool) => ({
165
- name: tool.name,
166
- description: tool.description,
167
- parametersJsonSchema: tool.parameters ?? { type: 'object', properties: {} },
168
- })),
169
- },
170
- ];
171
- }
172
- function mapUsage(metadata) {
173
- if (!metadata) {
174
- return null;
175
- }
176
- return {
177
- inputTokens: metadata.promptTokenCount ?? undefined,
178
- outputTokens: metadata.candidatesTokenCount ?? undefined,
179
- totalTokens: metadata.totalTokenCount ?? undefined,
180
- };
181
- }
182
- function toRecord(value) {
183
- if (isPlainRecord(value)) {
184
- return value;
185
- }
186
- if (typeof value === 'string') {
187
- const trimmed = value.trim();
188
- if (!trimmed) {
189
- return {};
190
- }
191
- try {
192
- const parsed = JSON.parse(trimmed);
193
- return isPlainRecord(parsed) ? parsed : {};
194
- }
195
- catch {
196
- return {};
197
- }
198
- }
199
- return {};
200
- }
201
- function isPlainRecord(value) {
202
- return typeof value === 'object' && value !== null && !Array.isArray(value);
203
- }