@noorm/marie-cli 0.1.0

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 (193) hide show
  1. package/JOY_ZONING.md +200 -0
  2. package/LICENSE.md +190 -0
  3. package/README.md +94 -0
  4. package/dist/cli-new/components/App.js +138 -0
  5. package/dist/cli-new/components/App.js.map +1 -0
  6. package/dist/cli-new/components/ApprovalDialog.js +31 -0
  7. package/dist/cli-new/components/ApprovalDialog.js.map +1 -0
  8. package/dist/cli-new/components/Banner.js +23 -0
  9. package/dist/cli-new/components/Banner.js.map +1 -0
  10. package/dist/cli-new/components/ChatArea.js +49 -0
  11. package/dist/cli-new/components/ChatArea.js.map +1 -0
  12. package/dist/cli-new/components/Header.js +20 -0
  13. package/dist/cli-new/components/Header.js.map +1 -0
  14. package/dist/cli-new/components/InputArea.js +97 -0
  15. package/dist/cli-new/components/InputArea.js.map +1 -0
  16. package/dist/cli-new/components/MessageBubble.js +114 -0
  17. package/dist/cli-new/components/MessageBubble.js.map +1 -0
  18. package/dist/cli-new/components/SessionSwitcher.js +46 -0
  19. package/dist/cli-new/components/SessionSwitcher.js.map +1 -0
  20. package/dist/cli-new/components/SetupWizard.js +283 -0
  21. package/dist/cli-new/components/SetupWizard.js.map +1 -0
  22. package/dist/cli-new/components/ToolCallDisplay.js +45 -0
  23. package/dist/cli-new/components/ToolCallDisplay.js.map +1 -0
  24. package/dist/cli-new/hooks/useGit.js +99 -0
  25. package/dist/cli-new/hooks/useGit.js.map +1 -0
  26. package/dist/cli-new/hooks/useMarie.js +249 -0
  27. package/dist/cli-new/hooks/useMarie.js.map +1 -0
  28. package/dist/cli-new/hooks/useSessions.js +75 -0
  29. package/dist/cli-new/hooks/useSessions.js.map +1 -0
  30. package/dist/cli-new/index.js +52 -0
  31. package/dist/cli-new/index.js.map +1 -0
  32. package/dist/cli-new/styles/theme.js +68 -0
  33. package/dist/cli-new/styles/theme.js.map +1 -0
  34. package/dist/cli-new/types/cli.js +2 -0
  35. package/dist/cli-new/types/cli.js.map +1 -0
  36. package/dist/extension.cjs +655 -0
  37. package/dist/monolith/adapters/CliMarieAdapter.js +72 -0
  38. package/dist/monolith/adapters/CliMarieAdapter.js.map +1 -0
  39. package/dist/monolith/adapters/VscodeMarieAdapter.js +81 -0
  40. package/dist/monolith/adapters/VscodeMarieAdapter.js.map +1 -0
  41. package/dist/monolith/cli/CliFileSystemPort.js +83 -0
  42. package/dist/monolith/cli/CliFileSystemPort.js.map +1 -0
  43. package/dist/monolith/cli/MarieToolDefinitionsCLI.js +438 -0
  44. package/dist/monolith/cli/MarieToolDefinitionsCLI.js.map +1 -0
  45. package/dist/monolith/cli/index.js +272 -0
  46. package/dist/monolith/cli/index.js.map +1 -0
  47. package/dist/monolith/cli/services/JoyAutomationServiceCLI.js +80 -0
  48. package/dist/monolith/cli/services/JoyAutomationServiceCLI.js.map +1 -0
  49. package/dist/monolith/cli/services/JoyServiceCLI.js +63 -0
  50. package/dist/monolith/cli/services/JoyServiceCLI.js.map +1 -0
  51. package/dist/monolith/cli/storage.js +119 -0
  52. package/dist/monolith/cli/storage.js.map +1 -0
  53. package/dist/monolith/domain/joy/JoyTools.js +513 -0
  54. package/dist/monolith/domain/joy/JoyTools.js.map +1 -0
  55. package/dist/monolith/domain/joy/RitualService.js +51 -0
  56. package/dist/monolith/domain/joy/RitualService.js.map +1 -0
  57. package/dist/monolith/domain/marie/MarieTypes.js +2 -0
  58. package/dist/monolith/domain/marie/MarieTypes.js.map +1 -0
  59. package/dist/monolith/infrastructure/ai/agents/MarieAscendant.js +230 -0
  60. package/dist/monolith/infrastructure/ai/agents/MarieAscendant.js.map +1 -0
  61. package/dist/monolith/infrastructure/ai/agents/MarieYOLO.js +207 -0
  62. package/dist/monolith/infrastructure/ai/agents/MarieYOLO.js.map +1 -0
  63. package/dist/monolith/infrastructure/ai/context/ContextArchiveService.js +129 -0
  64. package/dist/monolith/infrastructure/ai/context/ContextArchiveService.js.map +1 -0
  65. package/dist/monolith/infrastructure/ai/context/ContextManager.js +118 -0
  66. package/dist/monolith/infrastructure/ai/context/ContextManager.js.map +1 -0
  67. package/dist/monolith/infrastructure/ai/core/FileSystemPort.js +2 -0
  68. package/dist/monolith/infrastructure/ai/core/FileSystemPort.js.map +1 -0
  69. package/dist/monolith/infrastructure/ai/core/GhostPort.js +2 -0
  70. package/dist/monolith/infrastructure/ai/core/GhostPort.js.map +1 -0
  71. package/dist/monolith/infrastructure/ai/core/MarieAscensionTypes.js +2 -0
  72. package/dist/monolith/infrastructure/ai/core/MarieAscensionTypes.js.map +1 -0
  73. package/dist/monolith/infrastructure/ai/core/MarieEngine.js +590 -0
  74. package/dist/monolith/infrastructure/ai/core/MarieEngine.js.map +1 -0
  75. package/dist/monolith/infrastructure/ai/core/MarieEventDispatcher.js +161 -0
  76. package/dist/monolith/infrastructure/ai/core/MarieEventDispatcher.js.map +1 -0
  77. package/dist/monolith/infrastructure/ai/core/MarieLockManager.js +121 -0
  78. package/dist/monolith/infrastructure/ai/core/MarieLockManager.js.map +1 -0
  79. package/dist/monolith/infrastructure/ai/core/MarieProgressTracker.js +256 -0
  80. package/dist/monolith/infrastructure/ai/core/MarieProgressTracker.js.map +1 -0
  81. package/dist/monolith/infrastructure/ai/core/MariePulseService.js +67 -0
  82. package/dist/monolith/infrastructure/ai/core/MariePulseService.js.map +1 -0
  83. package/dist/monolith/infrastructure/ai/core/MarieResponse.js +101 -0
  84. package/dist/monolith/infrastructure/ai/core/MarieResponse.js.map +1 -0
  85. package/dist/monolith/infrastructure/ai/core/MarieSanitizer.js +86 -0
  86. package/dist/monolith/infrastructure/ai/core/MarieSanitizer.js.map +1 -0
  87. package/dist/monolith/infrastructure/ai/core/MarieSession.js +202 -0
  88. package/dist/monolith/infrastructure/ai/core/MarieSession.js.map +1 -0
  89. package/dist/monolith/infrastructure/ai/core/MarieStabilityMonitor.js +58 -0
  90. package/dist/monolith/infrastructure/ai/core/MarieStabilityMonitor.js.map +1 -0
  91. package/dist/monolith/infrastructure/ai/core/MarieToolMender.js +127 -0
  92. package/dist/monolith/infrastructure/ai/core/MarieToolMender.js.map +1 -0
  93. package/dist/monolith/infrastructure/ai/core/MarieToolProcessor.js +548 -0
  94. package/dist/monolith/infrastructure/ai/core/MarieToolProcessor.js.map +1 -0
  95. package/dist/monolith/infrastructure/ai/core/MarieYOLOTypes.js +2 -0
  96. package/dist/monolith/infrastructure/ai/core/MarieYOLOTypes.js.map +1 -0
  97. package/dist/monolith/infrastructure/ai/core/ReasoningBudget.js +125 -0
  98. package/dist/monolith/infrastructure/ai/core/ReasoningBudget.js.map +1 -0
  99. package/dist/monolith/infrastructure/ai/core/VscodeFileSystemPort.js +30 -0
  100. package/dist/monolith/infrastructure/ai/core/VscodeFileSystemPort.js.map +1 -0
  101. package/dist/monolith/infrastructure/ai/providers/AIProvider.js +2 -0
  102. package/dist/monolith/infrastructure/ai/providers/AIProvider.js.map +1 -0
  103. package/dist/monolith/infrastructure/ai/providers/AnthropicProvider.js +148 -0
  104. package/dist/monolith/infrastructure/ai/providers/AnthropicProvider.js.map +1 -0
  105. package/dist/monolith/infrastructure/ai/providers/CerebrasProvider.js +208 -0
  106. package/dist/monolith/infrastructure/ai/providers/CerebrasProvider.js.map +1 -0
  107. package/dist/monolith/infrastructure/ai/providers/OpenRouterProvider.js +404 -0
  108. package/dist/monolith/infrastructure/ai/providers/OpenRouterProvider.js.map +1 -0
  109. package/dist/monolith/infrastructure/ai/providers/OpenRouterStreamParser.js +283 -0
  110. package/dist/monolith/infrastructure/ai/providers/OpenRouterStreamParser.js.map +1 -0
  111. package/dist/monolith/infrastructure/config/ConfigService.js +398 -0
  112. package/dist/monolith/infrastructure/config/ConfigService.js.map +1 -0
  113. package/dist/monolith/infrastructure/services/MarieMemoryStore.js +140 -0
  114. package/dist/monolith/infrastructure/services/MarieMemoryStore.js.map +1 -0
  115. package/dist/monolith/infrastructure/tools/MarieToolDefinitions.js +1568 -0
  116. package/dist/monolith/infrastructure/tools/MarieToolDefinitions.js.map +1 -0
  117. package/dist/monolith/infrastructure/tools/PureStreamParser.js +147 -0
  118. package/dist/monolith/infrastructure/tools/PureStreamParser.js.map +1 -0
  119. package/dist/monolith/infrastructure/tools/SharedToolDefinitions.js +223 -0
  120. package/dist/monolith/infrastructure/tools/SharedToolDefinitions.js.map +1 -0
  121. package/dist/monolith/infrastructure/tools/ToolRegistry.js +29 -0
  122. package/dist/monolith/infrastructure/tools/ToolRegistry.js.map +1 -0
  123. package/dist/monolith/infrastructure/tools/ToolUtils.js +59 -0
  124. package/dist/monolith/infrastructure/tools/ToolUtils.js.map +1 -0
  125. package/dist/monolith/plumbing/analysis/CodeHealthService.js +146 -0
  126. package/dist/monolith/plumbing/analysis/CodeHealthService.js.map +1 -0
  127. package/dist/monolith/plumbing/analysis/ComplexityService.js +43 -0
  128. package/dist/monolith/plumbing/analysis/ComplexityService.js.map +1 -0
  129. package/dist/monolith/plumbing/analysis/DependencyService.js +51 -0
  130. package/dist/monolith/plumbing/analysis/DependencyService.js.map +1 -0
  131. package/dist/monolith/plumbing/analysis/DiscoveryService.js +49 -0
  132. package/dist/monolith/plumbing/analysis/DiscoveryService.js.map +1 -0
  133. package/dist/monolith/plumbing/analysis/JoyMapService.js +66 -0
  134. package/dist/monolith/plumbing/analysis/JoyMapService.js.map +1 -0
  135. package/dist/monolith/plumbing/analysis/LintService.js +132 -0
  136. package/dist/monolith/plumbing/analysis/LintService.js.map +1 -0
  137. package/dist/monolith/plumbing/analysis/MarieSentinelService.js +276 -0
  138. package/dist/monolith/plumbing/analysis/MarieSentinelService.js.map +1 -0
  139. package/dist/monolith/plumbing/analysis/QualityGuardrailService.js +119 -0
  140. package/dist/monolith/plumbing/analysis/QualityGuardrailService.js.map +1 -0
  141. package/dist/monolith/plumbing/analysis/SurgicalMender.js +70 -0
  142. package/dist/monolith/plumbing/analysis/SurgicalMender.js.map +1 -0
  143. package/dist/monolith/plumbing/analysis/TestService.js +104 -0
  144. package/dist/monolith/plumbing/analysis/TestService.js.map +1 -0
  145. package/dist/monolith/plumbing/filesystem/FileService.js +406 -0
  146. package/dist/monolith/plumbing/filesystem/FileService.js.map +1 -0
  147. package/dist/monolith/plumbing/filesystem/PathResolver.js +26 -0
  148. package/dist/monolith/plumbing/filesystem/PathResolver.js.map +1 -0
  149. package/dist/monolith/plumbing/git/GitService.js +71 -0
  150. package/dist/monolith/plumbing/git/GitService.js.map +1 -0
  151. package/dist/monolith/plumbing/lsp/SymbolService.js +36 -0
  152. package/dist/monolith/plumbing/lsp/SymbolService.js.map +1 -0
  153. package/dist/monolith/plumbing/terminal/ProcessRegistry.js +31 -0
  154. package/dist/monolith/plumbing/terminal/ProcessRegistry.js.map +1 -0
  155. package/dist/monolith/plumbing/terminal/TerminalService.js +180 -0
  156. package/dist/monolith/plumbing/terminal/TerminalService.js.map +1 -0
  157. package/dist/monolith/plumbing/ui/DecorationService.js +54 -0
  158. package/dist/monolith/plumbing/ui/DecorationService.js.map +1 -0
  159. package/dist/monolith/plumbing/utils/ErrorUtils.js +11 -0
  160. package/dist/monolith/plumbing/utils/ErrorUtils.js.map +1 -0
  161. package/dist/monolith/plumbing/utils/JsonUtils.js +360 -0
  162. package/dist/monolith/plumbing/utils/JsonUtils.js.map +1 -0
  163. package/dist/monolith/plumbing/utils/PrefixTree.js +153 -0
  164. package/dist/monolith/plumbing/utils/PrefixTree.js.map +1 -0
  165. package/dist/monolith/plumbing/utils/RetryUtils.js +141 -0
  166. package/dist/monolith/plumbing/utils/RetryUtils.js.map +1 -0
  167. package/dist/monolith/plumbing/utils/StreamTagDetector.js +128 -0
  168. package/dist/monolith/plumbing/utils/StreamTagDetector.js.map +1 -0
  169. package/dist/monolith/plumbing/utils/StringUtils.js +97 -0
  170. package/dist/monolith/plumbing/utils/StringUtils.js.map +1 -0
  171. package/dist/monolith/plumbing/utils/TimeoutUtils.js +21 -0
  172. package/dist/monolith/plumbing/utils/TimeoutUtils.js.map +1 -0
  173. package/dist/monolith/runtime/MarieRuntime.js +354 -0
  174. package/dist/monolith/runtime/MarieRuntime.js.map +1 -0
  175. package/dist/monolith/runtime/RuntimeAdapterBase.js +59 -0
  176. package/dist/monolith/runtime/RuntimeAdapterBase.js.map +1 -0
  177. package/dist/monolith/runtime/providerFactory.js +11 -0
  178. package/dist/monolith/runtime/providerFactory.js.map +1 -0
  179. package/dist/monolith/runtime/types.js +2 -0
  180. package/dist/monolith/runtime/types.js.map +1 -0
  181. package/dist/monolith/services/HealthService.js +38 -0
  182. package/dist/monolith/services/HealthService.js.map +1 -0
  183. package/dist/monolith/services/JoyAutomationService.js +131 -0
  184. package/dist/monolith/services/JoyAutomationService.js.map +1 -0
  185. package/dist/monolith/services/JoyLogService.js +48 -0
  186. package/dist/monolith/services/JoyLogService.js.map +1 -0
  187. package/dist/monolith/services/JoyService.js +190 -0
  188. package/dist/monolith/services/JoyService.js.map +1 -0
  189. package/dist/monolith/services/MarieGhostService.js +168 -0
  190. package/dist/monolith/services/MarieGhostService.js.map +1 -0
  191. package/dist/monolith/services/MarieSCMProvider.js +41 -0
  192. package/dist/monolith/services/MarieSCMProvider.js.map +1 -0
  193. package/package.json +168 -0
@@ -0,0 +1,404 @@
1
+ import { ConfigService } from "../../config/ConfigService.js";
2
+ import { getErrorMessage } from "../../../plumbing/utils/ErrorUtils.js";
3
+ import { JsonUtils } from "../../../plumbing/utils/JsonUtils.js";
4
+ import { OpenRouterStreamParser } from "./OpenRouterStreamParser.js";
5
+ export class OpenRouterProvider {
6
+ apiKey;
7
+ baseUrl = "https://openrouter.ai/api/v1";
8
+ constructor(apiKey) {
9
+ this.apiKey = apiKey;
10
+ }
11
+ async createMessage(params) {
12
+ const translatedModel = this.translateModelName(params.model);
13
+ const response = await fetch(`${this.baseUrl}/chat/completions`, {
14
+ method: "POST",
15
+ headers: {
16
+ Authorization: `Bearer ${this.apiKey}`,
17
+ "HTTP-Referer": "https://github.com/bozoegg/MarieCoder",
18
+ "X-Title": "MarieCoder VS Code Extension",
19
+ "Content-Type": "application/json",
20
+ Accept: "application/json",
21
+ },
22
+ body: JSON.stringify({
23
+ model: translatedModel,
24
+ messages: this.getOpenAiMessages(params),
25
+ tools: this.getOpenAiTools(params),
26
+ max_tokens: params.max_tokens || 1024,
27
+ }),
28
+ });
29
+ if (!response.ok) {
30
+ let errorMsg = `OpenRouter API error: ${response.status} ${response.statusText} (model: ${translatedModel})`;
31
+ try {
32
+ const errorJson = (await response.json());
33
+ if (errorJson.error?.message)
34
+ errorMsg = `OpenRouter API error: ${errorJson.error.message} (model: ${translatedModel})`;
35
+ }
36
+ catch (e) {
37
+ const text = await response.text().catch(() => "");
38
+ if (text)
39
+ errorMsg += ` - ${text}`;
40
+ }
41
+ throw new Error(errorMsg);
42
+ }
43
+ const data = (await response.json());
44
+ if (!data.choices || data.choices.length === 0)
45
+ throw new Error("OpenRouter API returned no choices.");
46
+ const choice = data.choices[0].message;
47
+ if (choice.tool_calls && choice.tool_calls.length > 0) {
48
+ try {
49
+ const toolUses = choice.tool_calls.map((tc) => ({
50
+ id: tc.id,
51
+ name: tc.function.name,
52
+ input: JsonUtils.safeParseJson(tc.function.arguments),
53
+ }));
54
+ return {
55
+ role: "assistant",
56
+ content: choice.content || "",
57
+ tool_uses: toolUses,
58
+ };
59
+ }
60
+ catch (error) {
61
+ console.error("Failed to parse tool arguments from OpenRouter:", getErrorMessage(error));
62
+ return {
63
+ role: "assistant",
64
+ content: choice.content || `(Message error: Malformed tool arguments)`,
65
+ };
66
+ }
67
+ }
68
+ return {
69
+ role: "assistant",
70
+ content: choice.content || "",
71
+ };
72
+ }
73
+ async createMessageStream(params, onUpdate, signal) {
74
+ const controller = new AbortController();
75
+ let isTimeout = false;
76
+ const timeoutId = setTimeout(() => {
77
+ isTimeout = true;
78
+ controller.abort();
79
+ }, 120000);
80
+ let isUserAbort = false;
81
+ const onAbort = () => {
82
+ isUserAbort = true;
83
+ controller.abort();
84
+ };
85
+ if (signal)
86
+ signal.addEventListener("abort", onAbort);
87
+ try {
88
+ const translatedModel = this.translateModelName(params.model);
89
+ const response = await fetch(`${this.baseUrl}/chat/completions`, {
90
+ method: "POST",
91
+ headers: {
92
+ Authorization: `Bearer ${this.apiKey}`,
93
+ "HTTP-Referer": "https://github.com/bozoegg/MarieCoder",
94
+ "X-Title": "MarieCoder VS Code Extension",
95
+ "Content-Type": "application/json",
96
+ Accept: "text/event-stream",
97
+ "Cache-Control": "no-cache",
98
+ Connection: "keep-alive",
99
+ },
100
+ body: JSON.stringify({
101
+ model: translatedModel,
102
+ messages: this.getOpenAiMessages(params),
103
+ tools: this.getOpenAiTools(params),
104
+ max_tokens: params.max_tokens || 1024,
105
+ stream: true,
106
+ include_reasoning: true,
107
+ }),
108
+ signal: controller.signal,
109
+ });
110
+ if (!response.ok) {
111
+ throw new Error(`OpenRouter API error: ${response.status} (model: ${translatedModel})`);
112
+ }
113
+ if (!response.body)
114
+ throw new Error("OpenRouter API returned no body.");
115
+ const reader = response.body.getReader();
116
+ const decoder = new TextDecoder();
117
+ const contentParts = [];
118
+ const reasoningParts = [];
119
+ const bufferParts = [];
120
+ const toolCalls = {};
121
+ const startTime = Date.now();
122
+ onUpdate({ type: "run_started", timestamp: startTime });
123
+ onUpdate({
124
+ type: "stage_change",
125
+ stage: "thinking",
126
+ label: "Processing request...",
127
+ });
128
+ const streamParser = new OpenRouterStreamParser();
129
+ try {
130
+ while (true) {
131
+ const { done, value } = await reader.read();
132
+ if (done)
133
+ break;
134
+ const chunk = decoder.decode(value, { stream: true });
135
+ bufferParts.push(chunk);
136
+ const buffer = bufferParts.join("");
137
+ const lines = buffer.split("\n");
138
+ const remainder = lines.pop() || "";
139
+ bufferParts.length = 0;
140
+ if (remainder)
141
+ bufferParts.push(remainder);
142
+ for (const line of lines) {
143
+ const trimmedLine = line.trim();
144
+ if (!trimmedLine || trimmedLine.startsWith(":"))
145
+ continue;
146
+ if (trimmedLine.startsWith("data: ")) {
147
+ const dataStr = trimmedLine.slice(6);
148
+ if (dataStr === "[DONE]")
149
+ continue;
150
+ try {
151
+ const data = JSON.parse(dataStr);
152
+ const choice = data.choices?.[0];
153
+ if (!choice)
154
+ continue;
155
+ const delta = choice.delta;
156
+ if (delta?.content) {
157
+ const events = streamParser.processContent(delta.content);
158
+ for (const event of events) {
159
+ if (event.type === "content_delta")
160
+ contentParts.push(event.text);
161
+ if (event.type === "reasoning_delta")
162
+ reasoningParts.push(event.text);
163
+ onUpdate(event);
164
+ }
165
+ }
166
+ if (delta?.tool_calls) {
167
+ onUpdate({
168
+ type: "stage_change",
169
+ stage: "calling_tool",
170
+ label: "Using tool...",
171
+ });
172
+ for (const tc of delta.tool_calls) {
173
+ const idx = tc.index;
174
+ if (!toolCalls[idx]) {
175
+ toolCalls[idx] = {
176
+ id: tc.id || "",
177
+ name: tc.function?.name || "",
178
+ argumentsParts: [],
179
+ };
180
+ }
181
+ else {
182
+ if (tc.id)
183
+ toolCalls[idx].id = tc.id;
184
+ if (tc.function?.name)
185
+ toolCalls[idx].name += tc.function.name;
186
+ }
187
+ if (tc.function?.arguments) {
188
+ toolCalls[idx].argumentsParts.push(tc.function.arguments);
189
+ onUpdate({
190
+ type: "tool_call_delta",
191
+ index: idx,
192
+ id: toolCalls[idx].id,
193
+ name: toolCalls[idx].name,
194
+ argumentsDelta: tc.function.arguments,
195
+ });
196
+ }
197
+ }
198
+ }
199
+ if (data.usage) {
200
+ onUpdate({
201
+ type: "usage",
202
+ usage: {
203
+ inputTokens: data.usage.prompt_tokens,
204
+ outputTokens: data.usage.completion_tokens,
205
+ totalTokens: data.usage.total_tokens,
206
+ reasoningTokens: data.usage.reasoning_tokens,
207
+ },
208
+ });
209
+ }
210
+ }
211
+ catch (e) {
212
+ // Ignore parsing errors for individual chunks
213
+ }
214
+ }
215
+ }
216
+ }
217
+ }
218
+ finally {
219
+ reader.releaseLock();
220
+ }
221
+ // Join all array buffers into final strings
222
+ const fullContent = contentParts.join("");
223
+ const fullReasoning = reasoningParts.join("");
224
+ const finalEvents = streamParser.finalize(fullContent);
225
+ for (const event of finalEvents)
226
+ onUpdate(event);
227
+ const endTime = Date.now();
228
+ onUpdate({
229
+ type: "run_completed",
230
+ timestamp: endTime,
231
+ durationMs: endTime - startTime,
232
+ });
233
+ const llamaCalls = streamParser.getCollectedToolCalls();
234
+ for (const idx in llamaCalls) {
235
+ const call = llamaCalls[idx];
236
+ toolCalls[parseInt(idx) + 1000] = {
237
+ id: call.id,
238
+ name: call.name,
239
+ argumentsParts: [call.arguments], // Wrap string as array for consistency
240
+ };
241
+ }
242
+ const finalToolUses = [];
243
+ for (const idx in toolCalls) {
244
+ const tc = toolCalls[idx];
245
+ try {
246
+ const args = tc.argumentsParts.join("");
247
+ finalToolUses.push({
248
+ id: tc.id,
249
+ name: tc.name,
250
+ input: JsonUtils.safeParseJson(args),
251
+ });
252
+ }
253
+ catch (e) {
254
+ // Ignore tool call parsing errors in stream
255
+ }
256
+ }
257
+ const blocks = [];
258
+ if (fullReasoning)
259
+ blocks.push({ type: "thought", text: fullReasoning });
260
+ if (fullContent)
261
+ blocks.push({ type: "text", text: fullContent });
262
+ return {
263
+ role: "assistant",
264
+ content: blocks.length > 0 ? blocks : fullContent,
265
+ tool_uses: finalToolUses.length > 0 ? finalToolUses : undefined,
266
+ };
267
+ }
268
+ catch (error) {
269
+ if (error instanceof Error && error.name === "AbortError") {
270
+ // Distinguish between user manual stop and actual timeout
271
+ if (isUserAbort) {
272
+ throw new Error("Request stopped by user");
273
+ }
274
+ else if (isTimeout) {
275
+ throw new Error("OpenRouter timeout");
276
+ }
277
+ else {
278
+ throw new Error("Request aborted");
279
+ }
280
+ }
281
+ throw error;
282
+ }
283
+ finally {
284
+ clearTimeout(timeoutId);
285
+ if (signal)
286
+ signal.removeEventListener("abort", onAbort);
287
+ }
288
+ }
289
+ /**
290
+ * Translates Anthropic model names to OpenRouter format.
291
+ * OpenRouter expects format like "anthropic/claude-3.5-sonnet"
292
+ */
293
+ translateModelName(model) {
294
+ const normalized = (model || "").trim();
295
+ if (!normalized) {
296
+ return "anthropic/claude-3.5-sonnet";
297
+ }
298
+ // If already in OpenRouter format, return as-is
299
+ if (normalized.includes("/")) {
300
+ return normalized;
301
+ }
302
+ // Map Anthropic model names to OpenRouter format
303
+ const modelMap = {
304
+ "claude-3-5-sonnet-20241022": "anthropic/claude-3.5-sonnet",
305
+ "claude-3-5-sonnet": "anthropic/claude-3.5-sonnet",
306
+ "claude-3-5-haiku-20241022": "anthropic/claude-3.5-haiku",
307
+ "claude-3-5-haiku": "anthropic/claude-3.5-haiku",
308
+ "claude-3-opus-20240229": "anthropic/claude-3-opus",
309
+ "claude-3-opus": "anthropic/claude-3-opus",
310
+ "claude-3-sonnet-20240229": "anthropic/claude-3-sonnet",
311
+ "claude-3-sonnet": "anthropic/claude-3-sonnet",
312
+ "claude-3-haiku-20240307": "anthropic/claude-3-haiku",
313
+ "claude-3-haiku": "anthropic/claude-3-haiku",
314
+ };
315
+ if (modelMap[normalized]) {
316
+ return modelMap[normalized];
317
+ }
318
+ // Try to convert claude models that aren't in the map.
319
+ // Examples:
320
+ // - claude-3-5-sonnet-20241022 => anthropic/claude-3.5-sonnet
321
+ // - claude-3-7-sonnet => anthropic/claude-3.7-sonnet
322
+ if (normalized.startsWith("claude-")) {
323
+ const withoutDateSuffix = normalized.replace(/-20\d{6}$/, "");
324
+ const claudeVersioned = withoutDateSuffix.match(/^claude-(\d+)-(\d+)(-.+)$/);
325
+ if (claudeVersioned) {
326
+ const major = claudeVersioned[1];
327
+ const minor = claudeVersioned[2];
328
+ const variant = claudeVersioned[3];
329
+ return `anthropic/claude-${major}.${minor}${variant}`;
330
+ }
331
+ return `anthropic/${withoutDateSuffix}`;
332
+ }
333
+ // Return as-is if we can't translate
334
+ return normalized;
335
+ }
336
+ getOpenAiMessages(params) {
337
+ const messages = [];
338
+ if (params.system)
339
+ messages.push({ role: "system", content: params.system });
340
+ for (const msg of params.messages) {
341
+ if (typeof msg.content === "string") {
342
+ messages.push({ role: msg.role, content: msg.content });
343
+ }
344
+ else if (Array.isArray(msg.content)) {
345
+ let text = "";
346
+ const tools = [];
347
+ for (const block of msg.content) {
348
+ if (block.type === "text")
349
+ text += block.text;
350
+ else if (block.type === "tool_use")
351
+ tools.push({
352
+ id: block.id,
353
+ type: "function",
354
+ function: {
355
+ name: block.name,
356
+ arguments: JSON.stringify(block.input),
357
+ },
358
+ });
359
+ else if (block.type === "tool_result") {
360
+ messages.push({
361
+ role: "tool",
362
+ tool_call_id: block.tool_use_id,
363
+ content: typeof block.content === "string"
364
+ ? block.content
365
+ : JSON.stringify(block.content),
366
+ });
367
+ }
368
+ }
369
+ if (msg.role === "assistant" && (text || tools.length > 0)) {
370
+ const m = { role: "assistant", content: text || null };
371
+ if (tools.length > 0)
372
+ m.tool_calls = tools;
373
+ messages.push(m);
374
+ }
375
+ else if (msg.role === "user" && text) {
376
+ messages.push({ role: "user", content: text });
377
+ }
378
+ }
379
+ }
380
+ return messages;
381
+ }
382
+ getOpenAiTools(params) {
383
+ if (!params.tools)
384
+ return undefined;
385
+ return params.tools.map((tool) => ({
386
+ type: "function",
387
+ function: {
388
+ name: tool.name,
389
+ description: tool.description,
390
+ parameters: tool.input_schema,
391
+ },
392
+ }));
393
+ }
394
+ estimateTokens(text) {
395
+ return Math.ceil(text.length * ConfigService.getTokensPerChar());
396
+ }
397
+ async listModels() {
398
+ return [
399
+ { id: "anthropic/claude-3.5-sonnet", name: "Claude 3.5 Sonnet" },
400
+ { id: "google/gemini-2.0-flash-001", name: "Gemini 2.0 Flash" },
401
+ ];
402
+ }
403
+ }
404
+ //# sourceMappingURL=OpenRouterProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenRouterProvider.js","sourceRoot":"","sources":["../../../../../src/monolith/infrastructure/ai/providers/OpenRouterProvider.ts"],"names":[],"mappings":"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"}