azerclaw 1.0.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 (161) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +222 -0
  3. package/bin/azerclaw.ts +290 -0
  4. package/dist/bin/azerclaw.d.ts +19 -0
  5. package/dist/bin/azerclaw.d.ts.map +1 -0
  6. package/dist/bin/azerclaw.js +247 -0
  7. package/dist/bin/azerclaw.js.map +1 -0
  8. package/dist/skills/code-review/SKILL.md +46 -0
  9. package/dist/skills/daily-briefing/SKILL.md +35 -0
  10. package/dist/skills/git-assistant/SKILL.md +31 -0
  11. package/dist/src/agents/builtin.d.ts +52 -0
  12. package/dist/src/agents/builtin.d.ts.map +1 -0
  13. package/dist/src/agents/builtin.js +497 -0
  14. package/dist/src/agents/builtin.js.map +1 -0
  15. package/dist/src/agents/loader.d.ts +23 -0
  16. package/dist/src/agents/loader.d.ts.map +1 -0
  17. package/dist/src/agents/loader.js +154 -0
  18. package/dist/src/agents/loader.js.map +1 -0
  19. package/dist/src/channels/adapter.d.ts +57 -0
  20. package/dist/src/channels/adapter.d.ts.map +1 -0
  21. package/dist/src/channels/adapter.js +45 -0
  22. package/dist/src/channels/adapter.js.map +1 -0
  23. package/dist/src/channels/discord.d.ts +23 -0
  24. package/dist/src/channels/discord.d.ts.map +1 -0
  25. package/dist/src/channels/discord.js +129 -0
  26. package/dist/src/channels/discord.js.map +1 -0
  27. package/dist/src/channels/slack.d.ts +19 -0
  28. package/dist/src/channels/slack.d.ts.map +1 -0
  29. package/dist/src/channels/slack.js +97 -0
  30. package/dist/src/channels/slack.js.map +1 -0
  31. package/dist/src/channels/telegram.d.ts +20 -0
  32. package/dist/src/channels/telegram.d.ts.map +1 -0
  33. package/dist/src/channels/telegram.js +87 -0
  34. package/dist/src/channels/telegram.js.map +1 -0
  35. package/dist/src/channels/webhook.d.ts +19 -0
  36. package/dist/src/channels/webhook.d.ts.map +1 -0
  37. package/dist/src/channels/webhook.js +124 -0
  38. package/dist/src/channels/webhook.js.map +1 -0
  39. package/dist/src/cli/animations/fish.d.ts +33 -0
  40. package/dist/src/cli/animations/fish.d.ts.map +1 -0
  41. package/dist/src/cli/animations/fish.js +297 -0
  42. package/dist/src/cli/animations/fish.js.map +1 -0
  43. package/dist/src/cli/commands/agents.d.ts +8 -0
  44. package/dist/src/cli/commands/agents.d.ts.map +1 -0
  45. package/dist/src/cli/commands/agents.js +104 -0
  46. package/dist/src/cli/commands/agents.js.map +1 -0
  47. package/dist/src/cli/commands/chat.d.ts +9 -0
  48. package/dist/src/cli/commands/chat.d.ts.map +1 -0
  49. package/dist/src/cli/commands/chat.js +236 -0
  50. package/dist/src/cli/commands/chat.js.map +1 -0
  51. package/dist/src/cli/commands/config.d.ts +9 -0
  52. package/dist/src/cli/commands/config.d.ts.map +1 -0
  53. package/dist/src/cli/commands/config.js +97 -0
  54. package/dist/src/cli/commands/config.js.map +1 -0
  55. package/dist/src/cli/commands/doctor.d.ts +8 -0
  56. package/dist/src/cli/commands/doctor.d.ts.map +1 -0
  57. package/dist/src/cli/commands/doctor.js +159 -0
  58. package/dist/src/cli/commands/doctor.js.map +1 -0
  59. package/dist/src/cli/commands/models.d.ts +7 -0
  60. package/dist/src/cli/commands/models.d.ts.map +1 -0
  61. package/dist/src/cli/commands/models.js +64 -0
  62. package/dist/src/cli/commands/models.js.map +1 -0
  63. package/dist/src/cli/commands/onboard.d.ts +6 -0
  64. package/dist/src/cli/commands/onboard.d.ts.map +1 -0
  65. package/dist/src/cli/commands/onboard.js +150 -0
  66. package/dist/src/cli/commands/onboard.js.map +1 -0
  67. package/dist/src/cli/commands/run.d.ts +9 -0
  68. package/dist/src/cli/commands/run.d.ts.map +1 -0
  69. package/dist/src/cli/commands/run.js +84 -0
  70. package/dist/src/cli/commands/run.js.map +1 -0
  71. package/dist/src/cli/commands/tui.d.ts +6 -0
  72. package/dist/src/cli/commands/tui.d.ts.map +1 -0
  73. package/dist/src/cli/commands/tui.js +252 -0
  74. package/dist/src/cli/commands/tui.js.map +1 -0
  75. package/dist/src/config/manager.d.ts +80 -0
  76. package/dist/src/config/manager.d.ts.map +1 -0
  77. package/dist/src/config/manager.js +232 -0
  78. package/dist/src/config/manager.js.map +1 -0
  79. package/dist/src/config/schema.d.ts +910 -0
  80. package/dist/src/config/schema.d.ts.map +1 -0
  81. package/dist/src/config/schema.js +138 -0
  82. package/dist/src/config/schema.js.map +1 -0
  83. package/dist/src/core/gateway.d.ts +35 -0
  84. package/dist/src/core/gateway.d.ts.map +1 -0
  85. package/dist/src/core/gateway.js +205 -0
  86. package/dist/src/core/gateway.js.map +1 -0
  87. package/dist/src/core/runtime.d.ts +69 -0
  88. package/dist/src/core/runtime.d.ts.map +1 -0
  89. package/dist/src/core/runtime.js +188 -0
  90. package/dist/src/core/runtime.js.map +1 -0
  91. package/dist/src/core/security.d.ts +55 -0
  92. package/dist/src/core/security.d.ts.map +1 -0
  93. package/dist/src/core/security.js +241 -0
  94. package/dist/src/core/security.js.map +1 -0
  95. package/dist/src/index.d.ts +24 -0
  96. package/dist/src/index.d.ts.map +1 -0
  97. package/dist/src/index.js +46 -0
  98. package/dist/src/index.js.map +1 -0
  99. package/dist/src/memory/store.d.ts +65 -0
  100. package/dist/src/memory/store.d.ts.map +1 -0
  101. package/dist/src/memory/store.js +250 -0
  102. package/dist/src/memory/store.js.map +1 -0
  103. package/dist/src/providers/anthropic.d.ts +25 -0
  104. package/dist/src/providers/anthropic.d.ts.map +1 -0
  105. package/dist/src/providers/anthropic.js +163 -0
  106. package/dist/src/providers/anthropic.js.map +1 -0
  107. package/dist/src/providers/base.d.ts +90 -0
  108. package/dist/src/providers/base.d.ts.map +1 -0
  109. package/dist/src/providers/base.js +12 -0
  110. package/dist/src/providers/base.js.map +1 -0
  111. package/dist/src/providers/google.d.ts +23 -0
  112. package/dist/src/providers/google.d.ts.map +1 -0
  113. package/dist/src/providers/google.js +118 -0
  114. package/dist/src/providers/google.js.map +1 -0
  115. package/dist/src/providers/ollama.d.ts +24 -0
  116. package/dist/src/providers/ollama.d.ts.map +1 -0
  117. package/dist/src/providers/ollama.js +81 -0
  118. package/dist/src/providers/ollama.js.map +1 -0
  119. package/dist/src/providers/openai.d.ts +30 -0
  120. package/dist/src/providers/openai.d.ts.map +1 -0
  121. package/dist/src/providers/openai.js +187 -0
  122. package/dist/src/providers/openai.js.map +1 -0
  123. package/dist/src/providers/router.d.ts +20 -0
  124. package/dist/src/providers/router.d.ts.map +1 -0
  125. package/dist/src/providers/router.js +156 -0
  126. package/dist/src/providers/router.js.map +1 -0
  127. package/dist/src/scheduler/heartbeat.d.ts +62 -0
  128. package/dist/src/scheduler/heartbeat.d.ts.map +1 -0
  129. package/dist/src/scheduler/heartbeat.js +267 -0
  130. package/dist/src/scheduler/heartbeat.js.map +1 -0
  131. package/dist/src/skills/loader.d.ts +25 -0
  132. package/dist/src/skills/loader.d.ts.map +1 -0
  133. package/dist/src/skills/loader.js +165 -0
  134. package/dist/src/skills/loader.js.map +1 -0
  135. package/dist/src/tools/advanced.d.ts +15 -0
  136. package/dist/src/tools/advanced.d.ts.map +1 -0
  137. package/dist/src/tools/advanced.js +102 -0
  138. package/dist/src/tools/advanced.js.map +1 -0
  139. package/dist/src/tools/filesystem.d.ts +10 -0
  140. package/dist/src/tools/filesystem.d.ts.map +1 -0
  141. package/dist/src/tools/filesystem.js +160 -0
  142. package/dist/src/tools/filesystem.js.map +1 -0
  143. package/dist/src/tools/registry.d.ts +26 -0
  144. package/dist/src/tools/registry.d.ts.map +1 -0
  145. package/dist/src/tools/registry.js +49 -0
  146. package/dist/src/tools/registry.js.map +1 -0
  147. package/dist/src/tools/shell.d.ts +7 -0
  148. package/dist/src/tools/shell.d.ts.map +1 -0
  149. package/dist/src/tools/shell.js +46 -0
  150. package/dist/src/tools/shell.js.map +1 -0
  151. package/dist/src/workflow/engine.d.ts +65 -0
  152. package/dist/src/workflow/engine.d.ts.map +1 -0
  153. package/dist/src/workflow/engine.js +297 -0
  154. package/dist/src/workflow/engine.js.map +1 -0
  155. package/package.json +113 -0
  156. package/skills/code-review/SKILL.md +46 -0
  157. package/skills/daily-briefing/SKILL.md +35 -0
  158. package/skills/git-assistant/SKILL.md +31 -0
  159. package/templates/HEARTBEAT.md +27 -0
  160. package/templates/IDENTITY.md +23 -0
  161. package/templates/deploy-pipeline.fishbone +39 -0
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ /**
3
+ * 🐟 AZERCLAW Google Gemini Provider
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.GoogleProvider = void 0;
7
+ const generative_ai_1 = require("@google/generative-ai");
8
+ const base_1 = require("./base");
9
+ class GoogleProvider extends base_1.BaseProvider {
10
+ name = 'google';
11
+ displayName = 'Google Gemini';
12
+ client;
13
+ defaultModel;
14
+ constructor(config) {
15
+ super();
16
+ this.defaultModel = config.defaultModel || 'gemini-2.5-flash';
17
+ this.client = new generative_ai_1.GoogleGenerativeAI(config.apiKey);
18
+ }
19
+ async isAvailable() {
20
+ const result = await this.validateConnection();
21
+ return result.valid;
22
+ }
23
+ async complete(options) {
24
+ const modelId = options.model || this.defaultModel;
25
+ try {
26
+ const model = this.client.getGenerativeModel({ model: modelId });
27
+ const systemPrompt = options.systemPrompt ||
28
+ options.messages.find(m => m.role === 'system')?.content || '';
29
+ const history = options.messages
30
+ .filter(m => m.role !== 'system')
31
+ .map(m => ({
32
+ role: m.role === 'assistant' ? 'model' : 'user',
33
+ parts: [{ text: m.content }],
34
+ }));
35
+ // Get the last user message
36
+ const lastMessage = history.pop();
37
+ if (!lastMessage) {
38
+ return { content: '', model: modelId, provider: this.name, finishReason: 'error' };
39
+ }
40
+ const chat = model.startChat({
41
+ history: history,
42
+ systemInstruction: systemPrompt ? { role: 'system', parts: [{ text: systemPrompt }] } : undefined,
43
+ });
44
+ const result = await chat.sendMessage(lastMessage.parts[0].text);
45
+ const response = result.response;
46
+ return {
47
+ content: response.text(),
48
+ model: modelId,
49
+ provider: this.name,
50
+ finishReason: 'stop',
51
+ usage: response.usageMetadata ? {
52
+ promptTokens: response.usageMetadata.promptTokenCount || 0,
53
+ completionTokens: response.usageMetadata.candidatesTokenCount || 0,
54
+ totalTokens: response.usageMetadata.totalTokenCount || 0,
55
+ } : undefined,
56
+ };
57
+ }
58
+ catch (error) {
59
+ return { content: '', model: modelId, provider: this.name, finishReason: 'error' };
60
+ }
61
+ }
62
+ async *stream(options) {
63
+ const modelId = options.model || this.defaultModel;
64
+ try {
65
+ const model = this.client.getGenerativeModel({ model: modelId });
66
+ const systemPrompt = options.systemPrompt ||
67
+ options.messages.find(m => m.role === 'system')?.content || '';
68
+ const history = options.messages
69
+ .filter(m => m.role !== 'system')
70
+ .map(m => ({
71
+ role: m.role === 'assistant' ? 'model' : 'user',
72
+ parts: [{ text: m.content }],
73
+ }));
74
+ const lastMessage = history.pop();
75
+ if (!lastMessage) {
76
+ yield { type: 'error', error: 'No messages provided' };
77
+ return;
78
+ }
79
+ const chat = model.startChat({
80
+ history: history,
81
+ systemInstruction: systemPrompt ? { role: 'system', parts: [{ text: systemPrompt }] } : undefined,
82
+ });
83
+ const result = await chat.sendMessageStream(lastMessage.parts[0].text);
84
+ for await (const chunk of result.stream) {
85
+ const text = chunk.text();
86
+ if (text) {
87
+ yield { type: 'text', content: text };
88
+ }
89
+ }
90
+ yield { type: 'done' };
91
+ }
92
+ catch (error) {
93
+ yield { type: 'error', error: error.message || 'Unknown error' };
94
+ }
95
+ }
96
+ async listModels() {
97
+ return [
98
+ { id: 'gemini-2.5-pro', name: 'Gemini 2.5 Pro', provider: this.name, contextWindow: 1048576, supportsTools: true, supportsStreaming: true },
99
+ { id: 'gemini-2.5-flash', name: 'Gemini 2.5 Flash', provider: this.name, contextWindow: 1048576, supportsTools: true, supportsStreaming: true },
100
+ { id: 'gemini-2.0-flash', name: 'Gemini 2.0 Flash', provider: this.name, contextWindow: 1048576, supportsTools: true, supportsStreaming: true },
101
+ ];
102
+ }
103
+ async validateConnection() {
104
+ try {
105
+ const model = this.client.getGenerativeModel({ model: this.defaultModel });
106
+ await model.generateContent('test');
107
+ return { valid: true };
108
+ }
109
+ catch (error) {
110
+ if (error.message?.includes('API_KEY')) {
111
+ return { valid: false, error: 'Invalid API key' };
112
+ }
113
+ return { valid: false, error: error.message || 'Connection failed' };
114
+ }
115
+ }
116
+ }
117
+ exports.GoogleProvider = GoogleProvider;
118
+ //# sourceMappingURL=google.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google.js","sourceRoot":"","sources":["../../../src/providers/google.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * 🐟 AZERCLAW Ollama Provider (Local Models)
3
+ */
4
+ import { BaseProvider, CompletionOptions, CompletionResult, StreamChunk, ModelInfo } from './base';
5
+ export declare class OllamaProvider extends BaseProvider {
6
+ readonly name = "ollama";
7
+ readonly displayName = "Ollama (Local)";
8
+ private client;
9
+ private baseUrl;
10
+ private defaultModel;
11
+ constructor(config: {
12
+ baseUrl?: string;
13
+ defaultModel?: string;
14
+ });
15
+ isAvailable(): Promise<boolean>;
16
+ complete(options: CompletionOptions): Promise<CompletionResult>;
17
+ stream(options: CompletionOptions): AsyncGenerator<StreamChunk>;
18
+ listModels(): Promise<ModelInfo[]>;
19
+ validateConnection(): Promise<{
20
+ valid: boolean;
21
+ error?: string;
22
+ }>;
23
+ }
24
+ //# sourceMappingURL=ollama.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../../src/providers/ollama.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEnG,qBAAa,cAAe,SAAQ,YAAY;IAC9C,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,oBAAoB;IACxC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAS;gBAEjB,MAAM,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE;IAOzD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAS9D,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc,CAAC,WAAW,CAAC;IAYhE,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAQlC,kBAAkB,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAIxE"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ /**
3
+ * 🐟 AZERCLAW Ollama Provider (Local Models)
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.OllamaProvider = void 0;
10
+ const openai_1 = __importDefault(require("openai"));
11
+ const base_1 = require("./base");
12
+ class OllamaProvider extends base_1.BaseProvider {
13
+ name = 'ollama';
14
+ displayName = 'Ollama (Local)';
15
+ client;
16
+ baseUrl;
17
+ defaultModel;
18
+ constructor(config) {
19
+ super();
20
+ this.baseUrl = config.baseUrl || 'http://localhost:11434';
21
+ this.defaultModel = config.defaultModel || 'llama3.1';
22
+ this.client = new openai_1.default({ apiKey: 'ollama', baseURL: `${this.baseUrl}/v1` });
23
+ }
24
+ async isAvailable() {
25
+ try {
26
+ const res = await fetch(`${this.baseUrl}/api/tags`);
27
+ return res.ok;
28
+ }
29
+ catch {
30
+ return false;
31
+ }
32
+ }
33
+ async complete(options) {
34
+ const model = options.model || this.defaultModel;
35
+ try {
36
+ const msgs = options.systemPrompt ? [{ role: 'system', content: options.systemPrompt }, ...options.messages] : options.messages;
37
+ const response = await this.client.chat.completions.create({ model, messages: msgs, max_tokens: options.maxTokens || 4096, temperature: options.temperature ?? 0.7 });
38
+ return { content: response.choices[0].message?.content || '', model, provider: this.name, finishReason: 'stop' };
39
+ }
40
+ catch {
41
+ return { content: '', model, provider: this.name, finishReason: 'error' };
42
+ }
43
+ }
44
+ async *stream(options) {
45
+ const model = options.model || this.defaultModel;
46
+ try {
47
+ const msgs = options.systemPrompt ? [{ role: 'system', content: options.systemPrompt }, ...options.messages] : options.messages;
48
+ const stream = await this.client.chat.completions.create({ model, messages: msgs, max_tokens: options.maxTokens || 4096, stream: true });
49
+ for await (const chunk of stream) {
50
+ if (chunk.choices[0]?.delta?.content)
51
+ yield { type: 'text', content: chunk.choices[0].delta.content };
52
+ if (chunk.choices[0]?.finish_reason)
53
+ yield { type: 'done' };
54
+ }
55
+ }
56
+ catch (e) {
57
+ yield { type: 'error', error: e.message || 'Ollama connection failed' };
58
+ }
59
+ }
60
+ async listModels() {
61
+ try {
62
+ const res = await fetch(`${this.baseUrl}/api/tags`);
63
+ const data = await res.json();
64
+ return (data.models || []).map((m) => ({ id: m.name, name: m.name, provider: this.name, contextWindow: 8192, supportsTools: false, supportsStreaming: true }));
65
+ }
66
+ catch {
67
+ return [];
68
+ }
69
+ }
70
+ async validateConnection() {
71
+ try {
72
+ const res = await fetch(`${this.baseUrl}/api/tags`);
73
+ return res.ok ? { valid: true } : { valid: false, error: `HTTP ${res.status}` };
74
+ }
75
+ catch {
76
+ return { valid: false, error: 'Cannot connect to Ollama' };
77
+ }
78
+ }
79
+ }
80
+ exports.OllamaProvider = OllamaProvider;
81
+ //# sourceMappingURL=ollama.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../../src/providers/ollama.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * 🐟 AZERCLAW OpenAI Provider
3
+ * Supports OpenAI API and any OpenAI-compatible endpoints.
4
+ */
5
+ import { BaseProvider, CompletionOptions, CompletionResult, StreamChunk, ModelInfo } from './base';
6
+ export declare class OpenAIProvider extends BaseProvider {
7
+ readonly name = "openai";
8
+ readonly displayName = "OpenAI";
9
+ private client;
10
+ private apiKey;
11
+ private baseUrl;
12
+ private defaultModel;
13
+ constructor(config: {
14
+ apiKey: string;
15
+ baseUrl?: string;
16
+ defaultModel?: string;
17
+ });
18
+ isAvailable(): Promise<boolean>;
19
+ complete(options: CompletionOptions): Promise<CompletionResult>;
20
+ stream(options: CompletionOptions): AsyncGenerator<StreamChunk>;
21
+ listModels(): Promise<ModelInfo[]>;
22
+ validateConnection(): Promise<{
23
+ valid: boolean;
24
+ error?: string;
25
+ }>;
26
+ private formatMessages;
27
+ private getContextWindow;
28
+ private getDefaultModels;
29
+ }
30
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/providers/openai.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,SAAS,EAEV,MAAM,QAAQ,CAAC;AAEhB,qBAAa,cAAe,SAAQ,YAAY;IAC9C,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,YAAY;IAChC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAS;gBAEjB,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE;IAWzE,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAS/B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAiD9D,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc,CAAC,WAAW,CAAC;IAmDhE,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAkBlC,kBAAkB,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IASvE,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,gBAAgB;CASzB"}
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ /**
3
+ * 🐟 AZERCLAW OpenAI Provider
4
+ * Supports OpenAI API and any OpenAI-compatible endpoints.
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.OpenAIProvider = void 0;
11
+ const openai_1 = __importDefault(require("openai"));
12
+ const base_1 = require("./base");
13
+ class OpenAIProvider extends base_1.BaseProvider {
14
+ name = 'openai';
15
+ displayName = 'OpenAI';
16
+ client;
17
+ apiKey;
18
+ baseUrl;
19
+ defaultModel;
20
+ constructor(config) {
21
+ super();
22
+ this.apiKey = config.apiKey;
23
+ this.baseUrl = config.baseUrl || 'https://api.openai.com/v1';
24
+ this.defaultModel = config.defaultModel || 'gpt-4o';
25
+ this.client = new openai_1.default({
26
+ apiKey: this.apiKey,
27
+ baseURL: this.baseUrl,
28
+ });
29
+ }
30
+ async isAvailable() {
31
+ try {
32
+ const result = await this.validateConnection();
33
+ return result.valid;
34
+ }
35
+ catch {
36
+ return false;
37
+ }
38
+ }
39
+ async complete(options) {
40
+ const messages = this.formatMessages(options);
41
+ const model = options.model || this.defaultModel;
42
+ try {
43
+ const params = {
44
+ model,
45
+ messages: messages,
46
+ max_tokens: options.maxTokens || 4096,
47
+ temperature: options.temperature ?? 0.7,
48
+ };
49
+ if (options.tools && options.tools.length > 0) {
50
+ params.tools = options.tools;
51
+ }
52
+ const response = await this.client.chat.completions.create(params);
53
+ const choice = response.choices[0];
54
+ return {
55
+ content: choice.message?.content || '',
56
+ toolCalls: choice.message?.tool_calls?.map((tc) => ({
57
+ id: tc.id,
58
+ type: 'function',
59
+ function: {
60
+ name: tc.function.name,
61
+ arguments: tc.function.arguments,
62
+ },
63
+ })),
64
+ usage: response.usage ? {
65
+ promptTokens: response.usage.prompt_tokens,
66
+ completionTokens: response.usage.completion_tokens,
67
+ totalTokens: response.usage.total_tokens,
68
+ } : undefined,
69
+ model: response.model,
70
+ provider: this.name,
71
+ finishReason: choice.finish_reason === 'tool_calls' ? 'tool_calls' :
72
+ choice.finish_reason === 'length' ? 'length' : 'stop',
73
+ };
74
+ }
75
+ catch (error) {
76
+ return {
77
+ content: `Provider error: ${error.message || 'Unknown error'}`,
78
+ model,
79
+ provider: this.name,
80
+ finishReason: 'error',
81
+ };
82
+ }
83
+ }
84
+ async *stream(options) {
85
+ const messages = this.formatMessages(options);
86
+ const model = options.model || this.defaultModel;
87
+ try {
88
+ const params = {
89
+ model,
90
+ messages: messages,
91
+ max_tokens: options.maxTokens || 4096,
92
+ temperature: options.temperature ?? 0.7,
93
+ stream: true,
94
+ };
95
+ if (options.tools && options.tools.length > 0) {
96
+ params.tools = options.tools;
97
+ }
98
+ const stream = await this.client.chat.completions.create(params);
99
+ for await (const chunk of stream) {
100
+ const delta = chunk.choices[0]?.delta;
101
+ if (delta?.content) {
102
+ yield { type: 'text', content: delta.content };
103
+ }
104
+ if (delta?.tool_calls) {
105
+ for (const tc of delta.tool_calls) {
106
+ yield {
107
+ type: 'tool_call',
108
+ toolCall: {
109
+ id: tc.id || '',
110
+ type: 'function',
111
+ function: {
112
+ name: tc.function?.name || '',
113
+ arguments: tc.function?.arguments || '',
114
+ },
115
+ },
116
+ };
117
+ }
118
+ }
119
+ if (chunk.choices[0]?.finish_reason) {
120
+ yield { type: 'done' };
121
+ }
122
+ }
123
+ }
124
+ catch (error) {
125
+ yield { type: 'error', error: error.message || 'Unknown error' };
126
+ }
127
+ }
128
+ async listModels() {
129
+ try {
130
+ const models = await this.client.models.list();
131
+ return models.data
132
+ .filter(m => m.id.includes('gpt') || m.id.includes('o1') || m.id.includes('o3') || m.id.includes('o4'))
133
+ .map(m => ({
134
+ id: m.id,
135
+ name: m.id,
136
+ provider: this.name,
137
+ contextWindow: this.getContextWindow(m.id),
138
+ supportsTools: true,
139
+ supportsStreaming: true,
140
+ }));
141
+ }
142
+ catch {
143
+ return this.getDefaultModels();
144
+ }
145
+ }
146
+ async validateConnection() {
147
+ try {
148
+ await this.client.models.list();
149
+ return { valid: true };
150
+ }
151
+ catch (error) {
152
+ return { valid: false, error: error.message || 'Connection failed' };
153
+ }
154
+ }
155
+ formatMessages(options) {
156
+ const messages = [];
157
+ if (options.systemPrompt) {
158
+ messages.push({ role: 'system', content: options.systemPrompt });
159
+ }
160
+ messages.push(...options.messages);
161
+ return messages;
162
+ }
163
+ getContextWindow(modelId) {
164
+ if (modelId.includes('gpt-4o'))
165
+ return 128000;
166
+ if (modelId.includes('gpt-4-turbo'))
167
+ return 128000;
168
+ if (modelId.includes('gpt-4.1'))
169
+ return 1047576;
170
+ if (modelId.includes('o3'))
171
+ return 200000;
172
+ if (modelId.includes('o4-mini'))
173
+ return 200000;
174
+ return 128000;
175
+ }
176
+ getDefaultModels() {
177
+ return [
178
+ { id: 'gpt-4o', name: 'GPT-4o', provider: this.name, contextWindow: 128000, supportsTools: true, supportsStreaming: true },
179
+ { id: 'gpt-4o-mini', name: 'GPT-4o Mini', provider: this.name, contextWindow: 128000, supportsTools: true, supportsStreaming: true },
180
+ { id: 'gpt-4.1', name: 'GPT-4.1', provider: this.name, contextWindow: 1047576, supportsTools: true, supportsStreaming: true },
181
+ { id: 'o3', name: 'o3', provider: this.name, contextWindow: 200000, supportsTools: true, supportsStreaming: true },
182
+ { id: 'o4-mini', name: 'o4-mini', provider: this.name, contextWindow: 200000, supportsTools: true, supportsStreaming: true },
183
+ ];
184
+ }
185
+ }
186
+ exports.OpenAIProvider = OpenAIProvider;
187
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/providers/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * 🐟 AZERCLAW Multi-Provider LLM Router
3
+ * Routes requests to the best available provider with automatic fallback.
4
+ */
5
+ import { BaseProvider, CompletionOptions, CompletionResult, StreamChunk, ModelInfo } from './base';
6
+ export declare class ProviderRouter {
7
+ private providers;
8
+ private fallbackChain;
9
+ constructor();
10
+ private initProviders;
11
+ getProvider(name?: string): BaseProvider | undefined;
12
+ complete(options: CompletionOptions, preferredProvider?: string): Promise<CompletionResult>;
13
+ stream(options: CompletionOptions, preferredProvider?: string): AsyncGenerator<StreamChunk>;
14
+ listAllModels(): Promise<ModelInfo[]>;
15
+ getAvailableProviders(): string[];
16
+ hasAnyProvider(): boolean;
17
+ }
18
+ export declare function getRouter(): ProviderRouter;
19
+ export declare function resetRouter(): void;
20
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../src/providers/router.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAQnG,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,aAAa,CAAW;;IAShC,OAAO,CAAC,aAAa;IA6BrB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAO9C,QAAQ,CAAC,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAoE1F,MAAM,CAAC,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC;IAM5F,aAAa,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAW3C,qBAAqB,IAAI,MAAM,EAAE;IAIjC,cAAc,IAAI,OAAO;CAG1B;AAGD,wBAAgB,SAAS,IAAI,cAAc,CAG1C;AACD,wBAAgB,WAAW,IAAI,IAAI,CAA2B"}