linguclaw 0.4.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 (168) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +161 -0
  3. package/dist/agent-system.d.ts +196 -0
  4. package/dist/agent-system.d.ts.map +1 -0
  5. package/dist/agent-system.js +738 -0
  6. package/dist/agent-system.js.map +1 -0
  7. package/dist/alphabeta.d.ts +54 -0
  8. package/dist/alphabeta.d.ts.map +1 -0
  9. package/dist/alphabeta.js +193 -0
  10. package/dist/alphabeta.js.map +1 -0
  11. package/dist/browser.d.ts +62 -0
  12. package/dist/browser.d.ts.map +1 -0
  13. package/dist/browser.js +224 -0
  14. package/dist/browser.js.map +1 -0
  15. package/dist/cli.d.ts +7 -0
  16. package/dist/cli.d.ts.map +1 -0
  17. package/dist/cli.js +565 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/code-parser.d.ts +39 -0
  20. package/dist/code-parser.d.ts.map +1 -0
  21. package/dist/code-parser.js +385 -0
  22. package/dist/code-parser.js.map +1 -0
  23. package/dist/config.d.ts +66 -0
  24. package/dist/config.d.ts.map +1 -0
  25. package/dist/config.js +232 -0
  26. package/dist/config.js.map +1 -0
  27. package/dist/core/engine.d.ts +359 -0
  28. package/dist/core/engine.d.ts.map +1 -0
  29. package/dist/core/engine.js +127 -0
  30. package/dist/core/engine.js.map +1 -0
  31. package/dist/daemon.d.ts +29 -0
  32. package/dist/daemon.d.ts.map +1 -0
  33. package/dist/daemon.js +212 -0
  34. package/dist/daemon.js.map +1 -0
  35. package/dist/email-receiver.d.ts +63 -0
  36. package/dist/email-receiver.d.ts.map +1 -0
  37. package/dist/email-receiver.js +553 -0
  38. package/dist/email-receiver.js.map +1 -0
  39. package/dist/git-integration.d.ts +180 -0
  40. package/dist/git-integration.d.ts.map +1 -0
  41. package/dist/git-integration.js +850 -0
  42. package/dist/git-integration.js.map +1 -0
  43. package/dist/inbox.d.ts +84 -0
  44. package/dist/inbox.d.ts.map +1 -0
  45. package/dist/inbox.js +198 -0
  46. package/dist/inbox.js.map +1 -0
  47. package/dist/index.d.ts +6 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +41 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/languages/cpp.d.ts +51 -0
  52. package/dist/languages/cpp.d.ts.map +1 -0
  53. package/dist/languages/cpp.js +930 -0
  54. package/dist/languages/cpp.js.map +1 -0
  55. package/dist/languages/csharp.d.ts +79 -0
  56. package/dist/languages/csharp.d.ts.map +1 -0
  57. package/dist/languages/csharp.js +1776 -0
  58. package/dist/languages/csharp.js.map +1 -0
  59. package/dist/languages/go.d.ts +50 -0
  60. package/dist/languages/go.d.ts.map +1 -0
  61. package/dist/languages/go.js +882 -0
  62. package/dist/languages/go.js.map +1 -0
  63. package/dist/languages/java.d.ts +47 -0
  64. package/dist/languages/java.d.ts.map +1 -0
  65. package/dist/languages/java.js +649 -0
  66. package/dist/languages/java.js.map +1 -0
  67. package/dist/languages/python.d.ts +47 -0
  68. package/dist/languages/python.d.ts.map +1 -0
  69. package/dist/languages/python.js +655 -0
  70. package/dist/languages/python.js.map +1 -0
  71. package/dist/languages/rust.d.ts +61 -0
  72. package/dist/languages/rust.d.ts.map +1 -0
  73. package/dist/languages/rust.js +1064 -0
  74. package/dist/languages/rust.js.map +1 -0
  75. package/dist/logger.d.ts +20 -0
  76. package/dist/logger.d.ts.map +1 -0
  77. package/dist/logger.js +133 -0
  78. package/dist/logger.js.map +1 -0
  79. package/dist/longterm-memory.d.ts +47 -0
  80. package/dist/longterm-memory.d.ts.map +1 -0
  81. package/dist/longterm-memory.js +300 -0
  82. package/dist/longterm-memory.js.map +1 -0
  83. package/dist/memory.d.ts +42 -0
  84. package/dist/memory.d.ts.map +1 -0
  85. package/dist/memory.js +274 -0
  86. package/dist/memory.js.map +1 -0
  87. package/dist/messaging.d.ts +103 -0
  88. package/dist/messaging.d.ts.map +1 -0
  89. package/dist/messaging.js +645 -0
  90. package/dist/messaging.js.map +1 -0
  91. package/dist/multi-provider.d.ts +69 -0
  92. package/dist/multi-provider.d.ts.map +1 -0
  93. package/dist/multi-provider.js +484 -0
  94. package/dist/multi-provider.js.map +1 -0
  95. package/dist/orchestrator.d.ts +65 -0
  96. package/dist/orchestrator.d.ts.map +1 -0
  97. package/dist/orchestrator.js +441 -0
  98. package/dist/orchestrator.js.map +1 -0
  99. package/dist/plugins.d.ts +52 -0
  100. package/dist/plugins.d.ts.map +1 -0
  101. package/dist/plugins.js +215 -0
  102. package/dist/plugins.js.map +1 -0
  103. package/dist/prism-orchestrator.d.ts +26 -0
  104. package/dist/prism-orchestrator.d.ts.map +1 -0
  105. package/dist/prism-orchestrator.js +191 -0
  106. package/dist/prism-orchestrator.js.map +1 -0
  107. package/dist/prism.d.ts +46 -0
  108. package/dist/prism.d.ts.map +1 -0
  109. package/dist/prism.js +188 -0
  110. package/dist/prism.js.map +1 -0
  111. package/dist/privacy.d.ts +23 -0
  112. package/dist/privacy.d.ts.map +1 -0
  113. package/dist/privacy.js +220 -0
  114. package/dist/privacy.js.map +1 -0
  115. package/dist/proactive.d.ts +30 -0
  116. package/dist/proactive.d.ts.map +1 -0
  117. package/dist/proactive.js +260 -0
  118. package/dist/proactive.js.map +1 -0
  119. package/dist/refactoring-engine.d.ts +100 -0
  120. package/dist/refactoring-engine.d.ts.map +1 -0
  121. package/dist/refactoring-engine.js +717 -0
  122. package/dist/refactoring-engine.js.map +1 -0
  123. package/dist/resilience.d.ts +43 -0
  124. package/dist/resilience.d.ts.map +1 -0
  125. package/dist/resilience.js +200 -0
  126. package/dist/resilience.js.map +1 -0
  127. package/dist/safety.d.ts +40 -0
  128. package/dist/safety.d.ts.map +1 -0
  129. package/dist/safety.js +133 -0
  130. package/dist/safety.js.map +1 -0
  131. package/dist/sandbox.d.ts +33 -0
  132. package/dist/sandbox.d.ts.map +1 -0
  133. package/dist/sandbox.js +173 -0
  134. package/dist/sandbox.js.map +1 -0
  135. package/dist/scheduler.d.ts +72 -0
  136. package/dist/scheduler.d.ts.map +1 -0
  137. package/dist/scheduler.js +374 -0
  138. package/dist/scheduler.js.map +1 -0
  139. package/dist/semantic-memory.d.ts +70 -0
  140. package/dist/semantic-memory.d.ts.map +1 -0
  141. package/dist/semantic-memory.js +430 -0
  142. package/dist/semantic-memory.js.map +1 -0
  143. package/dist/skills.d.ts +97 -0
  144. package/dist/skills.d.ts.map +1 -0
  145. package/dist/skills.js +575 -0
  146. package/dist/skills.js.map +1 -0
  147. package/dist/static/dashboard.html +853 -0
  148. package/dist/static/hub.html +772 -0
  149. package/dist/static/index.html +818 -0
  150. package/dist/static/logo.svg +24 -0
  151. package/dist/static/workflow-editor.html +913 -0
  152. package/dist/tools.d.ts +67 -0
  153. package/dist/tools.d.ts.map +1 -0
  154. package/dist/tools.js +303 -0
  155. package/dist/tools.js.map +1 -0
  156. package/dist/types.d.ts +295 -0
  157. package/dist/types.d.ts.map +1 -0
  158. package/dist/types.js +90 -0
  159. package/dist/types.js.map +1 -0
  160. package/dist/web.d.ts +76 -0
  161. package/dist/web.d.ts.map +1 -0
  162. package/dist/web.js +2139 -0
  163. package/dist/web.js.map +1 -0
  164. package/dist/workflow-engine.d.ts +114 -0
  165. package/dist/workflow-engine.d.ts.map +1 -0
  166. package/dist/workflow-engine.js +855 -0
  167. package/dist/workflow-engine.js.map +1 -0
  168. package/package.json +77 -0
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Multi-provider LLM support - OpenAI, Claude, Local LLMs, Ollama
3
+ * TypeScript equivalent of Python multi_provider.py
4
+ */
5
+ import { AxiosInstance } from 'axios';
6
+ import { Message, LLMResponse, ProviderType } from './types';
7
+ import { CircuitBreaker } from './resilience';
8
+ export { ProviderType } from './types';
9
+ export declare abstract class BaseProvider {
10
+ model: string;
11
+ apiKey: string | null;
12
+ baseUrl: string;
13
+ client: AxiosInstance;
14
+ circuitBreaker: CircuitBreaker;
15
+ constructor(model: string, apiKey?: string | null, baseUrl?: string | null);
16
+ abstract complete(messages: Message[], temperature?: number, maxTokens?: number): Promise<LLMResponse>;
17
+ stream(messages: Message[], temperature?: number, maxTokens?: number): AsyncGenerator<string>;
18
+ /**
19
+ * Execute with resilience patterns (retry + circuit breaker)
20
+ */
21
+ protected executeWithResilience<T>(fn: () => Promise<T>, operationName: string): Promise<T>;
22
+ /**
23
+ * Helper for OpenAI-compatible SSE streaming (used by OpenRouter, OpenAI, LMStudio)
24
+ */
25
+ protected streamOpenAICompat(url: string, headers: Record<string, string>, messages: Message[], model: string, temperature: number, maxTokens: number): AsyncGenerator<string>;
26
+ close(): Promise<void>;
27
+ }
28
+ export declare class OpenRouterProvider extends BaseProvider {
29
+ headers: Record<string, string>;
30
+ constructor(apiKey: string, model?: string);
31
+ complete(messages: Message[], temperature?: number, maxTokens?: number): Promise<LLMResponse>;
32
+ stream(messages: Message[], temperature?: number, maxTokens?: number): AsyncGenerator<string>;
33
+ }
34
+ export declare class OpenAIProvider extends BaseProvider {
35
+ headers: Record<string, string>;
36
+ constructor(apiKey: string, model?: string);
37
+ complete(messages: Message[], temperature?: number, maxTokens?: number): Promise<LLMResponse>;
38
+ stream(messages: Message[], temperature?: number, maxTokens?: number): AsyncGenerator<string>;
39
+ }
40
+ export declare class AnthropicProvider extends BaseProvider {
41
+ headers: Record<string, string>;
42
+ constructor(apiKey: string, model?: string);
43
+ complete(messages: Message[], temperature?: number, maxTokens?: number): Promise<LLMResponse>;
44
+ stream(messages: Message[], temperature?: number, maxTokens?: number): AsyncGenerator<string>;
45
+ }
46
+ export declare class OllamaProvider extends BaseProvider {
47
+ available: boolean;
48
+ constructor(model?: string, baseUrl?: string);
49
+ private checkAvailability;
50
+ complete(messages: Message[], temperature?: number, maxTokens?: number): Promise<LLMResponse>;
51
+ private formatMessages;
52
+ }
53
+ export declare class LMStudioProvider extends BaseProvider {
54
+ available: boolean;
55
+ constructor(baseUrl?: string);
56
+ private checkAvailability;
57
+ complete(messages: Message[], temperature?: number, maxTokens?: number): Promise<LLMResponse>;
58
+ }
59
+ export declare class ProviderManager {
60
+ providers: Map<string, BaseProvider>;
61
+ primaryProvider: string | null;
62
+ constructor();
63
+ addProvider(name: string, provider: BaseProvider, primary?: boolean): void;
64
+ createFromEnv(): BaseProvider | null;
65
+ complete(messages: Message[], temperature?: number, maxTokens?: number, provider?: string): Promise<LLMResponse>;
66
+ closeAll(): Promise<void>;
67
+ }
68
+ export declare function createProvider(providerType: ProviderType, kwargs?: Record<string, any>): BaseProvider;
69
+ //# sourceMappingURL=multi-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-provider.d.ts","sourceRoot":"","sources":["../src/multi-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,484 @@
1
+ "use strict";
2
+ /**
3
+ * Multi-provider LLM support - OpenAI, Claude, Local LLMs, Ollama
4
+ * TypeScript equivalent of Python multi_provider.py
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.ProviderManager = exports.LMStudioProvider = exports.OllamaProvider = exports.AnthropicProvider = exports.OpenAIProvider = exports.OpenRouterProvider = exports.BaseProvider = exports.ProviderType = void 0;
11
+ exports.createProvider = createProvider;
12
+ const axios_1 = __importDefault(require("axios"));
13
+ const types_1 = require("./types");
14
+ const logger_1 = require("./logger");
15
+ const config_1 = require("./config");
16
+ const resilience_1 = require("./resilience");
17
+ var types_2 = require("./types");
18
+ Object.defineProperty(exports, "ProviderType", { enumerable: true, get: function () { return types_2.ProviderType; } });
19
+ const logger = (0, logger_1.getLogger)();
20
+ /** Safely extract content from OpenAI-compatible response */
21
+ function parseOpenAIResponse(data, model) {
22
+ if (!data?.choices?.length || !data.choices[0]?.message?.content) {
23
+ return { content: '', error: 'Empty or malformed response from provider', model };
24
+ }
25
+ return {
26
+ content: data.choices[0].message.content,
27
+ usage: data.usage || {},
28
+ model: data.model || model,
29
+ finish_reason: data.choices[0].finish_reason,
30
+ };
31
+ }
32
+ class BaseProvider {
33
+ model;
34
+ apiKey;
35
+ baseUrl;
36
+ client;
37
+ circuitBreaker;
38
+ constructor(model, apiKey = null, baseUrl = null) {
39
+ this.model = model;
40
+ this.apiKey = apiKey;
41
+ this.baseUrl = baseUrl || '';
42
+ this.circuitBreaker = new resilience_1.CircuitBreaker(5, 30000, model);
43
+ this.client = axios_1.default.create({
44
+ timeout: 120000,
45
+ headers: {
46
+ 'Content-Type': 'application/json',
47
+ },
48
+ });
49
+ }
50
+ async *stream(messages, temperature = 0.7, maxTokens = 4096) {
51
+ // Default fallback: yield complete response as single chunk
52
+ const response = await this.complete(messages, temperature, maxTokens);
53
+ yield response.content;
54
+ }
55
+ /**
56
+ * Execute with resilience patterns (retry + circuit breaker)
57
+ */
58
+ async executeWithResilience(fn, operationName) {
59
+ return this.circuitBreaker.execute(() => (0, resilience_1.withRetry)(fn, { maxRetries: 3, baseDelayMs: 1000 }, operationName));
60
+ }
61
+ /**
62
+ * Helper for OpenAI-compatible SSE streaming (used by OpenRouter, OpenAI, LMStudio)
63
+ */
64
+ async *streamOpenAICompat(url, headers, messages, model, temperature, maxTokens) {
65
+ const payload = {
66
+ model,
67
+ messages: messages.map(m => ({ role: m.role, content: m.content })),
68
+ temperature,
69
+ max_tokens: maxTokens,
70
+ stream: true,
71
+ };
72
+ // Retry with exponential backoff for rate limits
73
+ let retries = 0;
74
+ const maxRetries = 3;
75
+ let response;
76
+ while (retries < maxRetries) {
77
+ try {
78
+ response = await this.client.post(url, payload, {
79
+ headers,
80
+ responseType: 'stream',
81
+ timeout: 120000,
82
+ validateStatus: (status) => status < 500 || status === 429,
83
+ });
84
+ break; // Success, exit retry loop
85
+ }
86
+ catch (error) {
87
+ const status = error.response?.status;
88
+ if (status === 429 && retries < maxRetries - 1) {
89
+ const delay = Math.pow(2, retries) * 1000 + Math.random() * 1000;
90
+ logger.warn(`Rate limit hit, retrying in ${delay}ms...`);
91
+ await new Promise(r => setTimeout(r, delay));
92
+ retries++;
93
+ }
94
+ else {
95
+ throw error;
96
+ }
97
+ }
98
+ }
99
+ if (!response) {
100
+ throw new Error('Failed to get streaming response after retries');
101
+ }
102
+ const stream = response.data;
103
+ let buffer = '';
104
+ for await (const chunk of stream) {
105
+ buffer += chunk.toString();
106
+ const lines = buffer.split('\n');
107
+ buffer = lines.pop() || '';
108
+ for (const line of lines) {
109
+ const trimmed = line.trim();
110
+ if (!trimmed || !trimmed.startsWith('data: '))
111
+ continue;
112
+ const data = trimmed.slice(6);
113
+ if (data === '[DONE]')
114
+ return;
115
+ try {
116
+ const parsed = JSON.parse(data);
117
+ const delta = parsed.choices?.[0]?.delta?.content;
118
+ if (delta)
119
+ yield delta;
120
+ }
121
+ catch {
122
+ // Skip malformed JSON chunks
123
+ }
124
+ }
125
+ }
126
+ }
127
+ async close() {
128
+ // Axios doesn't require explicit cleanup, but we keep this for API consistency
129
+ }
130
+ }
131
+ exports.BaseProvider = BaseProvider;
132
+ class OpenRouterProvider extends BaseProvider {
133
+ headers;
134
+ constructor(apiKey, model = 'anthropic/claude-3.5-sonnet') {
135
+ super(model, apiKey, 'https://openrouter.ai/api/v1');
136
+ this.headers = {
137
+ 'Authorization': `Bearer ${apiKey}`,
138
+ 'Content-Type': 'application/json',
139
+ 'HTTP-Referer': 'https://linguclaw.local',
140
+ 'X-Title': 'LinguClaw',
141
+ };
142
+ }
143
+ async complete(messages, temperature = 0.7, maxTokens = 4096) {
144
+ try {
145
+ const payload = {
146
+ model: this.model,
147
+ messages: messages.map(m => ({ role: m.role, content: m.content })),
148
+ temperature,
149
+ max_tokens: maxTokens,
150
+ };
151
+ const response = await this.client.post(`${this.baseUrl}/chat/completions`, payload, { headers: this.headers });
152
+ const data = response.data;
153
+ return parseOpenAIResponse(data, this.model);
154
+ }
155
+ catch (error) {
156
+ logger.error(`OpenRouter error: ${error.message}`, {
157
+ code: error.code,
158
+ status: error.response?.status,
159
+ response: error.response?.data,
160
+ });
161
+ return { content: '', error: error.message, model: '' };
162
+ }
163
+ }
164
+ async *stream(messages, temperature = 0.7, maxTokens = 4096) {
165
+ yield* this.streamOpenAICompat(`${this.baseUrl}/chat/completions`, this.headers, messages, this.model, temperature, maxTokens);
166
+ }
167
+ }
168
+ exports.OpenRouterProvider = OpenRouterProvider;
169
+ class OpenAIProvider extends BaseProvider {
170
+ headers;
171
+ constructor(apiKey, model = 'gpt-4o') {
172
+ super(model, apiKey, 'https://api.openai.com/v1');
173
+ this.headers = {
174
+ 'Authorization': `Bearer ${apiKey}`,
175
+ 'Content-Type': 'application/json',
176
+ };
177
+ }
178
+ async complete(messages, temperature = 0.7, maxTokens = 4096) {
179
+ try {
180
+ const payload = {
181
+ model: this.model,
182
+ messages: messages.map(m => ({ role: m.role, content: m.content })),
183
+ temperature,
184
+ max_tokens: maxTokens,
185
+ };
186
+ const response = await this.client.post(`${this.baseUrl}/chat/completions`, payload, { headers: this.headers });
187
+ const data = response.data;
188
+ return parseOpenAIResponse(data, this.model);
189
+ }
190
+ catch (error) {
191
+ logger.error(`OpenAI error: ${error.message}`);
192
+ return { content: '', error: error.message, model: '' };
193
+ }
194
+ }
195
+ async *stream(messages, temperature = 0.7, maxTokens = 4096) {
196
+ yield* this.streamOpenAICompat(`${this.baseUrl}/chat/completions`, this.headers, messages, this.model, temperature, maxTokens);
197
+ }
198
+ }
199
+ exports.OpenAIProvider = OpenAIProvider;
200
+ class AnthropicProvider extends BaseProvider {
201
+ headers;
202
+ constructor(apiKey, model = 'claude-3-5-sonnet-20241022') {
203
+ super(model, apiKey, 'https://api.anthropic.com/v1');
204
+ this.headers = {
205
+ 'x-api-key': apiKey,
206
+ 'Content-Type': 'application/json',
207
+ 'anthropic-version': '2023-06-01',
208
+ };
209
+ }
210
+ async complete(messages, temperature = 0.7, maxTokens = 4096) {
211
+ try {
212
+ // Convert messages to Anthropic format
213
+ let systemMsg = '';
214
+ const userMsgs = [];
215
+ for (const m of messages) {
216
+ if (m.role === 'system') {
217
+ systemMsg = m.content;
218
+ }
219
+ else {
220
+ userMsgs.push({ role: m.role, content: m.content });
221
+ }
222
+ }
223
+ const payload = {
224
+ model: this.model,
225
+ max_tokens: maxTokens,
226
+ temperature,
227
+ messages: userMsgs,
228
+ };
229
+ if (systemMsg) {
230
+ payload.system = systemMsg;
231
+ }
232
+ const response = await this.client.post(`${this.baseUrl}/messages`, payload, { headers: this.headers });
233
+ const data = response.data;
234
+ if (!data?.content?.length || !data.content[0]?.text) {
235
+ return { content: '', error: 'Empty or malformed response from Anthropic', model: this.model };
236
+ }
237
+ return {
238
+ content: data.content[0].text,
239
+ usage: data.usage || {},
240
+ model: data.model || this.model,
241
+ finish_reason: data.stop_reason,
242
+ };
243
+ }
244
+ catch (error) {
245
+ logger.error(`Anthropic error: ${error.message}`);
246
+ return { content: '', error: error.message, model: '' };
247
+ }
248
+ }
249
+ async *stream(messages, temperature = 0.7, maxTokens = 4096) {
250
+ let systemMsg = '';
251
+ const userMsgs = [];
252
+ for (const m of messages) {
253
+ if (m.role === 'system')
254
+ systemMsg = m.content;
255
+ else
256
+ userMsgs.push({ role: m.role, content: m.content });
257
+ }
258
+ const payload = {
259
+ model: this.model,
260
+ max_tokens: maxTokens,
261
+ temperature,
262
+ messages: userMsgs,
263
+ stream: true,
264
+ };
265
+ if (systemMsg)
266
+ payload.system = systemMsg;
267
+ const response = await this.client.post(`${this.baseUrl}/messages`, payload, { headers: this.headers, responseType: 'stream', timeout: 120000 });
268
+ let buffer = '';
269
+ for await (const chunk of response.data) {
270
+ buffer += chunk.toString();
271
+ const lines = buffer.split('\n');
272
+ buffer = lines.pop() || '';
273
+ for (const line of lines) {
274
+ const trimmed = line.trim();
275
+ if (!trimmed.startsWith('data: '))
276
+ continue;
277
+ const data = trimmed.slice(6);
278
+ try {
279
+ const parsed = JSON.parse(data);
280
+ if (parsed.type === 'content_block_delta' && parsed.delta?.text) {
281
+ yield parsed.delta.text;
282
+ }
283
+ }
284
+ catch {
285
+ // Skip malformed chunks
286
+ }
287
+ }
288
+ }
289
+ }
290
+ }
291
+ exports.AnthropicProvider = AnthropicProvider;
292
+ class OllamaProvider extends BaseProvider {
293
+ available;
294
+ constructor(model = 'llama3.2', baseUrl = 'http://localhost:11434') {
295
+ super(model, null, baseUrl);
296
+ this.available = this.checkAvailability();
297
+ }
298
+ checkAvailability() {
299
+ try {
300
+ // Note: In a real implementation, this would be async
301
+ // For now, we assume availability is checked elsewhere
302
+ return true;
303
+ }
304
+ catch {
305
+ return false;
306
+ }
307
+ }
308
+ async complete(messages, temperature = 0.7, maxTokens = 4096) {
309
+ if (!this.available) {
310
+ return { content: '', error: "Ollama not available. Run 'ollama serve' first.", model: '' };
311
+ }
312
+ try {
313
+ const prompt = this.formatMessages(messages);
314
+ const payload = {
315
+ model: this.model,
316
+ prompt,
317
+ stream: false,
318
+ options: {
319
+ temperature,
320
+ num_predict: maxTokens,
321
+ },
322
+ };
323
+ const response = await this.client.post(`${this.baseUrl}/api/generate`, payload);
324
+ const data = response.data;
325
+ return {
326
+ content: data.response || '',
327
+ model: this.model,
328
+ usage: {
329
+ prompt_tokens: data.prompt_eval_count || 0,
330
+ completion_tokens: data.eval_count || 0,
331
+ },
332
+ };
333
+ }
334
+ catch (error) {
335
+ logger.error(`Ollama error: ${error.message}`);
336
+ return { content: '', error: error.message, model: '' };
337
+ }
338
+ }
339
+ formatMessages(messages) {
340
+ const parts = [];
341
+ for (const m of messages) {
342
+ if (m.role === 'system') {
343
+ parts.push(`System: ${m.content}`);
344
+ }
345
+ else if (m.role === 'user') {
346
+ parts.push(`User: ${m.content}`);
347
+ }
348
+ else if (m.role === 'assistant') {
349
+ parts.push(`Assistant: ${m.content}`);
350
+ }
351
+ }
352
+ parts.push('Assistant:');
353
+ return parts.join('\n\n');
354
+ }
355
+ }
356
+ exports.OllamaProvider = OllamaProvider;
357
+ class LMStudioProvider extends BaseProvider {
358
+ available;
359
+ constructor(baseUrl = 'http://localhost:1234') {
360
+ super('local', null, baseUrl);
361
+ this.available = this.checkAvailability();
362
+ }
363
+ checkAvailability() {
364
+ try {
365
+ return true;
366
+ }
367
+ catch {
368
+ return false;
369
+ }
370
+ }
371
+ async complete(messages, temperature = 0.7, maxTokens = 4096) {
372
+ if (!this.available) {
373
+ return { content: '', error: 'LM Studio not available. Start the server first.', model: '' };
374
+ }
375
+ try {
376
+ const payload = {
377
+ messages: messages.map(m => ({ role: m.role, content: m.content })),
378
+ temperature,
379
+ max_tokens: maxTokens,
380
+ };
381
+ const response = await this.client.post(`${this.baseUrl}/v1/chat/completions`, payload);
382
+ const data = response.data;
383
+ return parseOpenAIResponse(data, 'local');
384
+ }
385
+ catch (error) {
386
+ logger.error(`LM Studio error: ${error.message}`);
387
+ return { content: '', error: error.message, model: '' };
388
+ }
389
+ }
390
+ }
391
+ exports.LMStudioProvider = LMStudioProvider;
392
+ class ProviderManager {
393
+ providers;
394
+ primaryProvider;
395
+ constructor() {
396
+ this.providers = new Map();
397
+ this.primaryProvider = null;
398
+ }
399
+ addProvider(name, provider, primary = false) {
400
+ this.providers.set(name, provider);
401
+ if (primary || this.primaryProvider === null) {
402
+ this.primaryProvider = name;
403
+ }
404
+ }
405
+ createFromEnv() {
406
+ // Read from config system (includes env var overrides from loadEnvConfig)
407
+ const config = (0, config_1.getConfig)();
408
+ const llmConfig = config.getLLM();
409
+ // If config has a specific provider + apiKey, use that directly
410
+ if (llmConfig.apiKey && llmConfig.apiKey.length > 0) {
411
+ const provider = llmConfig.provider;
412
+ const model = llmConfig.model;
413
+ const apiKey = llmConfig.apiKey;
414
+ logger.info(`Using configured provider: ${provider}, model: ${model}`);
415
+ switch (provider) {
416
+ case 'openrouter':
417
+ return new OpenRouterProvider(apiKey, model);
418
+ case 'openai':
419
+ return new OpenAIProvider(apiKey, model);
420
+ case 'anthropic':
421
+ return new AnthropicProvider(apiKey, model);
422
+ case 'ollama':
423
+ return new OllamaProvider(model, llmConfig.baseUrl || 'http://localhost:11434');
424
+ case 'lmstudio':
425
+ return new LMStudioProvider(llmConfig.baseUrl || 'http://localhost:1234');
426
+ }
427
+ }
428
+ // Fallback: Check local providers
429
+ const ollama = new OllamaProvider();
430
+ if (ollama.available) {
431
+ logger.info('Using local Ollama provider');
432
+ return ollama;
433
+ }
434
+ const lmstudio = new LMStudioProvider();
435
+ if (lmstudio.available) {
436
+ logger.info('Using local LM Studio provider');
437
+ return lmstudio;
438
+ }
439
+ // Fallback: Check environment variables directly
440
+ if (process.env.OPENROUTER_API_KEY) {
441
+ return new OpenRouterProvider(process.env.OPENROUTER_API_KEY, process.env.LINGUCLAW_MODEL || 'anthropic/claude-3.5-sonnet');
442
+ }
443
+ if (process.env.OPENAI_API_KEY) {
444
+ return new OpenAIProvider(process.env.OPENAI_API_KEY, process.env.OPENAI_MODEL || 'gpt-4o');
445
+ }
446
+ if (process.env.ANTHROPIC_API_KEY) {
447
+ return new AnthropicProvider(process.env.ANTHROPIC_API_KEY, process.env.ANTHROPIC_MODEL || 'claude-3-5-sonnet-20241022');
448
+ }
449
+ logger.error('No LLM provider available. Set API key in Settings or env vars (OPENROUTER_API_KEY, OPENAI_API_KEY, ANTHROPIC_API_KEY), or run Ollama/LM Studio.');
450
+ return null;
451
+ }
452
+ async complete(messages, temperature = 0.7, maxTokens = 4096, provider) {
453
+ const provName = provider || this.primaryProvider;
454
+ if (!provName || !this.providers.has(provName)) {
455
+ return { content: '', error: 'No provider available', model: '' };
456
+ }
457
+ const prov = this.providers.get(provName);
458
+ return await prov.complete(messages, temperature, maxTokens);
459
+ }
460
+ async closeAll() {
461
+ for (const provider of this.providers.values()) {
462
+ await provider.close();
463
+ }
464
+ }
465
+ }
466
+ exports.ProviderManager = ProviderManager;
467
+ // Factory function for easy provider creation
468
+ function createProvider(providerType, kwargs = {}) {
469
+ switch (providerType) {
470
+ case types_1.ProviderType.OPENROUTER:
471
+ return new OpenRouterProvider(kwargs.api_key, kwargs.model || 'openai/gpt-3.5-turbo');
472
+ case types_1.ProviderType.OPENAI:
473
+ return new OpenAIProvider(kwargs.api_key, kwargs.model || 'gpt-4o');
474
+ case types_1.ProviderType.ANTHROPIC:
475
+ return new AnthropicProvider(kwargs.api_key, kwargs.model || 'claude-3-5-sonnet-20241022');
476
+ case types_1.ProviderType.OLLAMA:
477
+ return new OllamaProvider(kwargs.model || 'llama3.2', kwargs.base_url || 'http://localhost:11434');
478
+ case types_1.ProviderType.LMSTUDIO:
479
+ return new LMStudioProvider(kwargs.base_url || 'http://localhost:1234');
480
+ default:
481
+ throw new Error(`Unknown provider type: ${providerType}`);
482
+ }
483
+ }
484
+ //# sourceMappingURL=multi-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-provider.js","sourceRoot":"","sources":["../src/multi-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Multi-agent orchestration layer
3
+ * TypeScript equivalent of Python orchestrator.py
4
+ */
5
+ import { SharedState } from './types';
6
+ export { SharedState } from './types';
7
+ import { ShellTool, FileSystemTool } from './tools';
8
+ import { SafetyMiddleware } from './safety';
9
+ import { RAGMemory } from './memory';
10
+ import { getSemanticMemory } from './semantic-memory';
11
+ import { BaseProvider } from './multi-provider';
12
+ export declare class Orchestrator {
13
+ provider: BaseProvider;
14
+ shell: ShellTool;
15
+ fs: FileSystemTool;
16
+ safety: SafetyMiddleware;
17
+ maxIterations: number;
18
+ state: SharedState;
19
+ memory: RAGMemory;
20
+ semanticMemory: ReturnType<typeof getSemanticMemory>;
21
+ constructor(provider: BaseProvider, shell: ShellTool, fs: FileSystemTool, maxIterations?: number, projectRoot?: string);
22
+ /**
23
+ * Main execution loop
24
+ */
25
+ run(task: string): Promise<string>;
26
+ /**
27
+ * Get codebase context relevant to the task
28
+ */
29
+ private getCodebaseContext;
30
+ /**
31
+ * Planning phase with codebase context
32
+ */
33
+ private planPhase;
34
+ /**
35
+ * Parse plan from LLM response
36
+ */
37
+ private parsePlan;
38
+ /**
39
+ * Execute a single plan step
40
+ */
41
+ private executeStep;
42
+ /**
43
+ * Execute tool-based step (shell, filesystem)
44
+ */
45
+ private executeToolStep;
46
+ /**
47
+ * Execute decision/planning step - re-plans based on current state
48
+ */
49
+ private executeDecisionStep;
50
+ /**
51
+ * Execute review step
52
+ */
53
+ private executeReviewStep;
54
+ /**
55
+ * Parse action from executor response
56
+ */
57
+ private parseAction;
58
+ /**
59
+ * Generate final summary
60
+ */
61
+ private isSimpleTask;
62
+ private handleSimpleTask;
63
+ private generateSummary;
64
+ }
65
+ //# sourceMappingURL=orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAIL,WAAW,EAIZ,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA4ChD,qBAAa,YAAY;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,EAAE,EAAE,cAAc,CAAC;IACnB,MAAM,EAAE,gBAAgB,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,SAAS,CAAC;IAClB,cAAc,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;gBAGnD,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,SAAS,EAChB,EAAE,EAAE,cAAc,EAClB,aAAa,GAAE,MAAW,EAC1B,WAAW,GAAE,MAAY;IAsB3B;;OAEG;IACG,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA4ExC;;OAEG;YACW,kBAAkB;IAwBhC;;OAEG;YACW,SAAS;IA8BvB;;OAEG;IACH,OAAO,CAAC,SAAS;IA0DjB;;OAEG;YACW,WAAW;IAazB;;OAEG;YACW,eAAe;IAkD7B;;OAEG;YACW,mBAAmB;IAwBjC;;OAEG;YACW,iBAAiB;IA8B/B;;OAEG;IACH,OAAO,CAAC,WAAW;IAgBnB;;OAEG;IACH,OAAO,CAAC,YAAY;YAMN,gBAAgB;IAqB9B,OAAO,CAAC,eAAe;CAwBxB"}