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.
- package/LICENSE +21 -0
- package/README.md +161 -0
- package/dist/agent-system.d.ts +196 -0
- package/dist/agent-system.d.ts.map +1 -0
- package/dist/agent-system.js +738 -0
- package/dist/agent-system.js.map +1 -0
- package/dist/alphabeta.d.ts +54 -0
- package/dist/alphabeta.d.ts.map +1 -0
- package/dist/alphabeta.js +193 -0
- package/dist/alphabeta.js.map +1 -0
- package/dist/browser.d.ts +62 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +224 -0
- package/dist/browser.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +565 -0
- package/dist/cli.js.map +1 -0
- package/dist/code-parser.d.ts +39 -0
- package/dist/code-parser.d.ts.map +1 -0
- package/dist/code-parser.js +385 -0
- package/dist/code-parser.js.map +1 -0
- package/dist/config.d.ts +66 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +232 -0
- package/dist/config.js.map +1 -0
- package/dist/core/engine.d.ts +359 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +127 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/daemon.d.ts +29 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +212 -0
- package/dist/daemon.js.map +1 -0
- package/dist/email-receiver.d.ts +63 -0
- package/dist/email-receiver.d.ts.map +1 -0
- package/dist/email-receiver.js +553 -0
- package/dist/email-receiver.js.map +1 -0
- package/dist/git-integration.d.ts +180 -0
- package/dist/git-integration.d.ts.map +1 -0
- package/dist/git-integration.js +850 -0
- package/dist/git-integration.js.map +1 -0
- package/dist/inbox.d.ts +84 -0
- package/dist/inbox.d.ts.map +1 -0
- package/dist/inbox.js +198 -0
- package/dist/inbox.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -0
- package/dist/languages/cpp.d.ts +51 -0
- package/dist/languages/cpp.d.ts.map +1 -0
- package/dist/languages/cpp.js +930 -0
- package/dist/languages/cpp.js.map +1 -0
- package/dist/languages/csharp.d.ts +79 -0
- package/dist/languages/csharp.d.ts.map +1 -0
- package/dist/languages/csharp.js +1776 -0
- package/dist/languages/csharp.js.map +1 -0
- package/dist/languages/go.d.ts +50 -0
- package/dist/languages/go.d.ts.map +1 -0
- package/dist/languages/go.js +882 -0
- package/dist/languages/go.js.map +1 -0
- package/dist/languages/java.d.ts +47 -0
- package/dist/languages/java.d.ts.map +1 -0
- package/dist/languages/java.js +649 -0
- package/dist/languages/java.js.map +1 -0
- package/dist/languages/python.d.ts +47 -0
- package/dist/languages/python.d.ts.map +1 -0
- package/dist/languages/python.js +655 -0
- package/dist/languages/python.js.map +1 -0
- package/dist/languages/rust.d.ts +61 -0
- package/dist/languages/rust.d.ts.map +1 -0
- package/dist/languages/rust.js +1064 -0
- package/dist/languages/rust.js.map +1 -0
- package/dist/logger.d.ts +20 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +133 -0
- package/dist/logger.js.map +1 -0
- package/dist/longterm-memory.d.ts +47 -0
- package/dist/longterm-memory.d.ts.map +1 -0
- package/dist/longterm-memory.js +300 -0
- package/dist/longterm-memory.js.map +1 -0
- package/dist/memory.d.ts +42 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +274 -0
- package/dist/memory.js.map +1 -0
- package/dist/messaging.d.ts +103 -0
- package/dist/messaging.d.ts.map +1 -0
- package/dist/messaging.js +645 -0
- package/dist/messaging.js.map +1 -0
- package/dist/multi-provider.d.ts +69 -0
- package/dist/multi-provider.d.ts.map +1 -0
- package/dist/multi-provider.js +484 -0
- package/dist/multi-provider.js.map +1 -0
- package/dist/orchestrator.d.ts +65 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +441 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/plugins.d.ts +52 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +215 -0
- package/dist/plugins.js.map +1 -0
- package/dist/prism-orchestrator.d.ts +26 -0
- package/dist/prism-orchestrator.d.ts.map +1 -0
- package/dist/prism-orchestrator.js +191 -0
- package/dist/prism-orchestrator.js.map +1 -0
- package/dist/prism.d.ts +46 -0
- package/dist/prism.d.ts.map +1 -0
- package/dist/prism.js +188 -0
- package/dist/prism.js.map +1 -0
- package/dist/privacy.d.ts +23 -0
- package/dist/privacy.d.ts.map +1 -0
- package/dist/privacy.js +220 -0
- package/dist/privacy.js.map +1 -0
- package/dist/proactive.d.ts +30 -0
- package/dist/proactive.d.ts.map +1 -0
- package/dist/proactive.js +260 -0
- package/dist/proactive.js.map +1 -0
- package/dist/refactoring-engine.d.ts +100 -0
- package/dist/refactoring-engine.d.ts.map +1 -0
- package/dist/refactoring-engine.js +717 -0
- package/dist/refactoring-engine.js.map +1 -0
- package/dist/resilience.d.ts +43 -0
- package/dist/resilience.d.ts.map +1 -0
- package/dist/resilience.js +200 -0
- package/dist/resilience.js.map +1 -0
- package/dist/safety.d.ts +40 -0
- package/dist/safety.d.ts.map +1 -0
- package/dist/safety.js +133 -0
- package/dist/safety.js.map +1 -0
- package/dist/sandbox.d.ts +33 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +173 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/scheduler.d.ts +72 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +374 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/semantic-memory.d.ts +70 -0
- package/dist/semantic-memory.d.ts.map +1 -0
- package/dist/semantic-memory.js +430 -0
- package/dist/semantic-memory.js.map +1 -0
- package/dist/skills.d.ts +97 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +575 -0
- package/dist/skills.js.map +1 -0
- package/dist/static/dashboard.html +853 -0
- package/dist/static/hub.html +772 -0
- package/dist/static/index.html +818 -0
- package/dist/static/logo.svg +24 -0
- package/dist/static/workflow-editor.html +913 -0
- package/dist/tools.d.ts +67 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +303 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +295 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +90 -0
- package/dist/types.js.map +1 -0
- package/dist/web.d.ts +76 -0
- package/dist/web.d.ts.map +1 -0
- package/dist/web.js +2139 -0
- package/dist/web.js.map +1 -0
- package/dist/workflow-engine.d.ts +114 -0
- package/dist/workflow-engine.d.ts.map +1 -0
- package/dist/workflow-engine.js +855 -0
- package/dist/workflow-engine.js.map +1 -0
- 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"}
|