azerclaw 2.1.9 → 2.2.2

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 (258) hide show
  1. package/bin/azerclaw.ts +45 -6
  2. package/bin/opencode.ts +1 -1
  3. package/dist/bin/azerclaw.d.ts +1 -47
  4. package/dist/bin/azerclaw.d.ts.map +1 -1
  5. package/dist/bin/azerclaw.js +94 -55
  6. package/dist/bin/azerclaw.js.map +1 -1
  7. package/dist/bin/opencode.js +1 -1
  8. package/dist/src/agents/builtin.js +12 -12
  9. package/dist/src/brain/adapters/base.d.ts +33 -0
  10. package/dist/src/brain/adapters/base.d.ts.map +1 -0
  11. package/dist/src/brain/adapters/base.js +11 -0
  12. package/dist/src/brain/adapters/base.js.map +1 -0
  13. package/dist/src/brain/adapters/index.d.ts +11 -0
  14. package/dist/src/brain/adapters/index.d.ts.map +1 -0
  15. package/dist/src/brain/adapters/index.js +37 -0
  16. package/dist/src/brain/adapters/index.js.map +1 -0
  17. package/dist/src/brain/adapters/native.d.ts +15 -0
  18. package/dist/src/brain/adapters/native.d.ts.map +1 -0
  19. package/dist/src/brain/adapters/native.js +25 -0
  20. package/dist/src/brain/adapters/native.js.map +1 -0
  21. package/dist/src/brain/adapters/prompt.d.ts +16 -0
  22. package/dist/src/brain/adapters/prompt.d.ts.map +1 -0
  23. package/dist/src/brain/adapters/prompt.js +91 -0
  24. package/dist/src/brain/adapters/prompt.js.map +1 -0
  25. package/dist/src/brain/hybrid.d.ts +53 -0
  26. package/dist/src/brain/hybrid.d.ts.map +1 -0
  27. package/dist/src/brain/hybrid.js +263 -0
  28. package/dist/src/brain/hybrid.js.map +1 -0
  29. package/dist/src/brain/index.d.ts +8 -0
  30. package/dist/src/brain/index.d.ts.map +1 -0
  31. package/dist/src/brain/index.js +19 -0
  32. package/dist/src/brain/index.js.map +1 -0
  33. package/dist/src/brain/router.d.ts +55 -0
  34. package/dist/src/brain/router.d.ts.map +1 -0
  35. package/dist/src/brain/router.js +174 -0
  36. package/dist/src/brain/router.js.map +1 -0
  37. package/dist/src/channels/adapter.d.ts +6 -0
  38. package/dist/src/channels/adapter.d.ts.map +1 -1
  39. package/dist/src/channels/adapter.js +44 -1
  40. package/dist/src/channels/adapter.js.map +1 -1
  41. package/dist/src/channels/discord.d.ts.map +1 -1
  42. package/dist/src/channels/discord.js +60 -14
  43. package/dist/src/channels/discord.js.map +1 -1
  44. package/dist/src/channels/slack.d.ts +5 -0
  45. package/dist/src/channels/slack.d.ts.map +1 -1
  46. package/dist/src/channels/slack.js +77 -9
  47. package/dist/src/channels/slack.js.map +1 -1
  48. package/dist/src/channels/telegram.d.ts +1 -0
  49. package/dist/src/channels/telegram.d.ts.map +1 -1
  50. package/dist/src/channels/telegram.js +42 -4
  51. package/dist/src/channels/telegram.js.map +1 -1
  52. package/dist/src/channels/webhook.d.ts.map +1 -1
  53. package/dist/src/channels/webhook.js +37 -6
  54. package/dist/src/channels/webhook.js.map +1 -1
  55. package/dist/src/cli/animations/fish.d.ts +9 -0
  56. package/dist/src/cli/animations/fish.d.ts.map +1 -1
  57. package/dist/src/cli/animations/fish.js +64 -80
  58. package/dist/src/cli/animations/fish.js.map +1 -1
  59. package/dist/src/cli/animations/markdown.d.ts.map +1 -1
  60. package/dist/src/cli/animations/markdown.js +0 -1
  61. package/dist/src/cli/animations/markdown.js.map +1 -1
  62. package/dist/src/cli/commands/agents.js +31 -30
  63. package/dist/src/cli/commands/agents.js.map +1 -1
  64. package/dist/src/cli/commands/channels.js +41 -48
  65. package/dist/src/cli/commands/channels.js.map +1 -1
  66. package/dist/src/cli/commands/chat.d.ts +1 -0
  67. package/dist/src/cli/commands/chat.d.ts.map +1 -1
  68. package/dist/src/cli/commands/chat.js +81 -8
  69. package/dist/src/cli/commands/chat.js.map +1 -1
  70. package/dist/src/cli/commands/config.js +0 -1
  71. package/dist/src/cli/commands/config.js.map +1 -1
  72. package/dist/src/cli/commands/doctor.js +42 -40
  73. package/dist/src/cli/commands/doctor.js.map +1 -1
  74. package/dist/src/cli/commands/export.js +6 -6
  75. package/dist/src/cli/commands/export.js.map +1 -1
  76. package/dist/src/cli/commands/mcp.js +7 -7
  77. package/dist/src/cli/commands/mcp.js.map +1 -1
  78. package/dist/src/cli/commands/models.js +0 -1
  79. package/dist/src/cli/commands/models.js.map +1 -1
  80. package/dist/src/cli/commands/onboard.js +0 -55
  81. package/dist/src/cli/commands/onboard.js.map +1 -1
  82. package/dist/src/cli/commands/pairing.js +22 -24
  83. package/dist/src/cli/commands/pairing.js.map +1 -1
  84. package/dist/src/cli/commands/plugins.js +8 -8
  85. package/dist/src/cli/commands/plugins.js.map +1 -1
  86. package/dist/src/cli/commands/run.d.ts +1 -0
  87. package/dist/src/cli/commands/run.d.ts.map +1 -1
  88. package/dist/src/cli/commands/run.js +101 -50
  89. package/dist/src/cli/commands/run.js.map +1 -1
  90. package/dist/src/cli/commands/sandbox.js +27 -32
  91. package/dist/src/cli/commands/sandbox.js.map +1 -1
  92. package/dist/src/cli/commands/settings.js +1 -16
  93. package/dist/src/cli/commands/settings.js.map +1 -1
  94. package/dist/src/cli/commands/share.js +6 -6
  95. package/dist/src/cli/commands/share.js.map +1 -1
  96. package/dist/src/cli/commands/tui.js +0 -1
  97. package/dist/src/cli/commands/tui.js.map +1 -1
  98. package/dist/src/config/hotreload.d.ts +87 -0
  99. package/dist/src/config/hotreload.d.ts.map +1 -0
  100. package/dist/src/config/hotreload.js +497 -0
  101. package/dist/src/config/hotreload.js.map +1 -0
  102. package/dist/src/config/manager.d.ts +4 -2
  103. package/dist/src/config/manager.d.ts.map +1 -1
  104. package/dist/src/config/manager.js +23 -5
  105. package/dist/src/config/manager.js.map +1 -1
  106. package/dist/src/config/schema.d.ts +286 -9
  107. package/dist/src/config/schema.d.ts.map +1 -1
  108. package/dist/src/config/schema.js +71 -7
  109. package/dist/src/config/schema.js.map +1 -1
  110. package/dist/src/core/runtime.d.ts +18 -0
  111. package/dist/src/core/runtime.d.ts.map +1 -1
  112. package/dist/src/core/runtime.js +82 -12
  113. package/dist/src/core/runtime.js.map +1 -1
  114. package/dist/src/core/server.d.ts.map +1 -1
  115. package/dist/src/core/server.js +18 -2
  116. package/dist/src/core/server.js.map +1 -1
  117. package/dist/src/index.d.ts +2 -0
  118. package/dist/src/index.d.ts.map +1 -1
  119. package/dist/src/index.js +6 -0
  120. package/dist/src/index.js.map +1 -1
  121. package/dist/src/interfaces/terminal/dashboard.d.ts +80 -0
  122. package/dist/src/interfaces/terminal/dashboard.d.ts.map +1 -0
  123. package/dist/src/interfaces/terminal/dashboard.js +618 -0
  124. package/dist/src/interfaces/terminal/dashboard.js.map +1 -0
  125. package/dist/src/interfaces/terminal/index.d.ts +46 -0
  126. package/dist/src/interfaces/terminal/index.d.ts.map +1 -0
  127. package/dist/src/interfaces/terminal/index.js +171 -0
  128. package/dist/src/interfaces/terminal/index.js.map +1 -0
  129. package/dist/src/interfaces/terminal/visualizations.d.ts +78 -0
  130. package/dist/src/interfaces/terminal/visualizations.d.ts.map +1 -0
  131. package/dist/src/interfaces/terminal/visualizations.js +540 -0
  132. package/dist/src/interfaces/terminal/visualizations.js.map +1 -0
  133. package/dist/src/interfaces/web/server.d.ts +73 -0
  134. package/dist/src/interfaces/web/server.d.ts.map +1 -0
  135. package/dist/src/interfaces/web/server.js +505 -0
  136. package/dist/src/interfaces/web/server.js.map +1 -0
  137. package/dist/src/mcp-servers/antigravity/index.js +2 -2
  138. package/dist/src/mcp-servers/antigravity/index.js.map +1 -1
  139. package/dist/src/memory/dreaming.d.ts +91 -0
  140. package/dist/src/memory/dreaming.d.ts.map +1 -0
  141. package/dist/src/memory/dreaming.js +582 -0
  142. package/dist/src/memory/dreaming.js.map +1 -0
  143. package/dist/src/memory/index.d.ts +8 -0
  144. package/dist/src/memory/index.d.ts.map +1 -0
  145. package/dist/src/memory/index.js +29 -0
  146. package/dist/src/memory/index.js.map +1 -0
  147. package/dist/src/memory/store.d.ts +13 -0
  148. package/dist/src/memory/store.d.ts.map +1 -1
  149. package/dist/src/memory/store.js +28 -0
  150. package/dist/src/memory/store.js.map +1 -1
  151. package/dist/src/memory/vector.d.ts +94 -0
  152. package/dist/src/memory/vector.d.ts.map +1 -0
  153. package/dist/src/memory/vector.js +457 -0
  154. package/dist/src/memory/vector.js.map +1 -0
  155. package/dist/src/networking/analyzer.d.ts +189 -0
  156. package/dist/src/networking/analyzer.d.ts.map +1 -0
  157. package/dist/src/networking/analyzer.js +604 -0
  158. package/dist/src/networking/analyzer.js.map +1 -0
  159. package/dist/src/plugins/bundled/context-engine/index.d.ts +8 -0
  160. package/dist/src/plugins/bundled/context-engine/index.d.ts.map +1 -0
  161. package/dist/src/plugins/bundled/context-engine/index.js +353 -0
  162. package/dist/src/plugins/bundled/context-engine/index.js.map +1 -0
  163. package/dist/src/plugins/bundled/observability/index.d.ts +64 -0
  164. package/dist/src/plugins/bundled/observability/index.d.ts.map +1 -0
  165. package/dist/src/plugins/bundled/observability/index.js +441 -0
  166. package/dist/src/plugins/bundled/observability/index.js.map +1 -0
  167. package/dist/src/plugins/index.d.ts +15 -0
  168. package/dist/src/plugins/index.d.ts.map +1 -0
  169. package/dist/src/plugins/index.js +117 -0
  170. package/dist/src/plugins/index.js.map +1 -0
  171. package/dist/src/plugins/loader.d.ts +19 -0
  172. package/dist/src/plugins/loader.d.ts.map +1 -0
  173. package/dist/src/plugins/loader.js +333 -0
  174. package/dist/src/plugins/loader.js.map +1 -0
  175. package/dist/src/plugins/manager.d.ts +32 -0
  176. package/dist/src/plugins/manager.d.ts.map +1 -0
  177. package/dist/src/plugins/manager.js +410 -0
  178. package/dist/src/plugins/manager.js.map +1 -0
  179. package/dist/src/plugins/registry.d.ts +50 -0
  180. package/dist/src/plugins/registry.d.ts.map +1 -0
  181. package/dist/src/plugins/registry.js +285 -0
  182. package/dist/src/plugins/registry.js.map +1 -0
  183. package/dist/src/plugins/types.d.ts +165 -0
  184. package/dist/src/plugins/types.d.ts.map +1 -0
  185. package/dist/src/plugins/types.js +7 -0
  186. package/dist/src/plugins/types.js.map +1 -0
  187. package/dist/src/providers/base.d.ts +5 -0
  188. package/dist/src/providers/base.d.ts.map +1 -1
  189. package/dist/src/providers/base.js.map +1 -1
  190. package/dist/src/providers/huggingface.d.ts +27 -0
  191. package/dist/src/providers/huggingface.d.ts.map +1 -0
  192. package/dist/src/providers/huggingface.js +140 -0
  193. package/dist/src/providers/huggingface.js.map +1 -0
  194. package/dist/src/providers/kiloauto.d.ts +29 -0
  195. package/dist/src/providers/kiloauto.d.ts.map +1 -0
  196. package/dist/src/providers/kiloauto.js +242 -0
  197. package/dist/src/providers/kiloauto.js.map +1 -0
  198. package/dist/src/providers/localllama.d.ts +26 -0
  199. package/dist/src/providers/localllama.d.ts.map +1 -0
  200. package/dist/src/providers/localllama.js +192 -0
  201. package/dist/src/providers/localllama.js.map +1 -0
  202. package/dist/src/providers/openai.d.ts.map +1 -1
  203. package/dist/src/providers/openai.js +8 -1
  204. package/dist/src/providers/openai.js.map +1 -1
  205. package/dist/src/providers/router.d.ts.map +1 -1
  206. package/dist/src/providers/router.js +81 -29
  207. package/dist/src/providers/router.js.map +1 -1
  208. package/dist/src/scheduler/heartbeat.d.ts.map +1 -1
  209. package/dist/src/scheduler/heartbeat.js +23 -1
  210. package/dist/src/scheduler/heartbeat.js.map +1 -1
  211. package/dist/src/security/privacy.d.ts +199 -0
  212. package/dist/src/security/privacy.d.ts.map +1 -0
  213. package/dist/src/security/privacy.js +600 -0
  214. package/dist/src/security/privacy.js.map +1 -0
  215. package/dist/src/server/hq.d.ts.map +1 -1
  216. package/dist/src/server/hq.js +56 -4
  217. package/dist/src/server/hq.js.map +1 -1
  218. package/dist/src/skills/loader.d.ts.map +1 -1
  219. package/dist/src/skills/loader.js +13 -3
  220. package/dist/src/skills/loader.js.map +1 -1
  221. package/dist/src/tools/advanced.d.ts.map +1 -1
  222. package/dist/src/tools/advanced.js +73 -18
  223. package/dist/src/tools/advanced.js.map +1 -1
  224. package/dist/src/tools/filesystem.d.ts.map +1 -1
  225. package/dist/src/tools/filesystem.js +110 -7
  226. package/dist/src/tools/filesystem.js.map +1 -1
  227. package/dist/src/tools/index_memory.d.ts.map +1 -1
  228. package/dist/src/tools/index_memory.js +13 -6
  229. package/dist/src/tools/index_memory.js.map +1 -1
  230. package/dist/src/tools/loader.d.ts.map +1 -1
  231. package/dist/src/tools/loader.js +4 -2
  232. package/dist/src/tools/loader.js.map +1 -1
  233. package/dist/src/tools/registry.d.ts +6 -0
  234. package/dist/src/tools/registry.d.ts.map +1 -1
  235. package/dist/src/tools/registry.js +51 -12
  236. package/dist/src/tools/registry.js.map +1 -1
  237. package/dist/src/tools/shell.d.ts.map +1 -1
  238. package/dist/src/tools/shell.js +2 -0
  239. package/dist/src/tools/shell.js.map +1 -1
  240. package/dist/src/tools/specialized.d.ts.map +1 -1
  241. package/dist/src/tools/specialized.js +52 -12
  242. package/dist/src/tools/specialized.js.map +1 -1
  243. package/dist/src/workflow/engine.d.ts.map +1 -1
  244. package/dist/src/workflow/engine.js +43 -13
  245. package/dist/src/workflow/engine.js.map +1 -1
  246. package/dist/src/workflow/lobster.d.ts +138 -0
  247. package/dist/src/workflow/lobster.d.ts.map +1 -0
  248. package/dist/src/workflow/lobster.js +620 -0
  249. package/dist/src/workflow/lobster.js.map +1 -0
  250. package/dist/src/workspace/heartbeat.d.ts +122 -0
  251. package/dist/src/workspace/heartbeat.d.ts.map +1 -0
  252. package/dist/src/workspace/heartbeat.js +624 -0
  253. package/dist/src/workspace/heartbeat.js.map +1 -0
  254. package/dist/src/workspace/index.d.ts +29 -0
  255. package/dist/src/workspace/index.d.ts.map +1 -0
  256. package/dist/src/workspace/index.js +97 -0
  257. package/dist/src/workspace/index.js.map +1 -0
  258. package/package.json +2 -2
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ /**
3
+ * 🐟 AZERCLAW HuggingFace Provider
4
+ * Inference API provider for HuggingFace free tier endpoints.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.HuggingFaceProvider = void 0;
8
+ const base_1 = require("./base");
9
+ class HuggingFaceProvider extends base_1.BaseProvider {
10
+ name = 'huggingface';
11
+ displayName = 'HuggingFace';
12
+ apiKey;
13
+ baseUrl;
14
+ defaultModel;
15
+ constructor(config) {
16
+ super();
17
+ this.apiKey = config.apiKey;
18
+ this.baseUrl = (config.baseUrl || 'https://api-inference.huggingface.co/models').replace(/\/$/, '');
19
+ this.defaultModel = config.defaultModel || 'meta-llama/Llama-3.2-1B-Instruct';
20
+ }
21
+ async isAvailable() {
22
+ try {
23
+ const result = await this.validateConnection();
24
+ return result.valid;
25
+ }
26
+ catch {
27
+ return false;
28
+ }
29
+ }
30
+ async complete(options) {
31
+ const model = options.model || this.defaultModel;
32
+ try {
33
+ const response = await fetch(`${this.baseUrl}/${model}`, {
34
+ method: 'POST',
35
+ headers: {
36
+ 'Content-Type': 'application/json',
37
+ 'Authorization': `Bearer ${this.apiKey}`,
38
+ },
39
+ body: JSON.stringify({
40
+ inputs: this.formatPrompt(options),
41
+ parameters: {
42
+ max_new_tokens: options.maxTokens || 4096,
43
+ temperature: options.temperature ?? 0.7,
44
+ return_full_text: false,
45
+ },
46
+ }),
47
+ });
48
+ if (!response.ok) {
49
+ const text = await response.text().catch(() => 'Unknown error');
50
+ return {
51
+ content: `HuggingFace HTTP ${response.status}: ${text}`,
52
+ model,
53
+ provider: this.name,
54
+ finishReason: 'error',
55
+ };
56
+ }
57
+ const data = await response.json();
58
+ // HF inference API can return an array of generated texts
59
+ let text = '';
60
+ if (Array.isArray(data) && data.length > 0) {
61
+ text = data[0].generated_text || String(data[0]);
62
+ }
63
+ else if (typeof data === 'string') {
64
+ text = data;
65
+ }
66
+ else if (data.generated_text) {
67
+ text = data.generated_text;
68
+ }
69
+ else {
70
+ text = JSON.stringify(data);
71
+ }
72
+ return {
73
+ content: text,
74
+ model,
75
+ provider: this.name,
76
+ finishReason: 'stop',
77
+ };
78
+ }
79
+ catch (error) {
80
+ const msg = error instanceof Error ? error.message : 'Unknown error';
81
+ return {
82
+ content: `HuggingFace provider error: ${msg}`,
83
+ model,
84
+ provider: this.name,
85
+ finishReason: 'error',
86
+ };
87
+ }
88
+ }
89
+ async *stream(options) {
90
+ // HF free tier inference API does not support streaming in the same way
91
+ // Fall back to complete and yield the full result as a single text chunk
92
+ const result = await this.complete(options);
93
+ if (result.finishReason === 'error') {
94
+ yield { type: 'error', error: result.content };
95
+ return;
96
+ }
97
+ yield { type: 'text', content: result.content };
98
+ yield { type: 'done' };
99
+ }
100
+ async listModels() {
101
+ // HF doesn't have a single "list models" endpoint for inference API
102
+ // Return a curated list of known free-tier conversational models
103
+ return [
104
+ { id: 'meta-llama/Llama-3.2-1B-Instruct', name: 'Llama 3.2 1B', provider: this.name, contextWindow: 128000, supportsTools: false, supportsStreaming: false, description: 'FREE · Small & fast' },
105
+ { id: 'meta-llama/Llama-3.2-3B-Instruct', name: 'Llama 3.2 3B', provider: this.name, contextWindow: 128000, supportsTools: false, supportsStreaming: false, description: 'FREE · Balanced' },
106
+ { id: 'mistralai/Mistral-7B-Instruct-v0.3', name: 'Mistral 7B', provider: this.name, contextWindow: 32000, supportsTools: false, supportsStreaming: false, description: 'FREE · Capable' },
107
+ { id: 'microsoft/DialoGPT-medium', name: 'DialoGPT', provider: this.name, contextWindow: 1024, supportsTools: false, supportsStreaming: false, description: 'FREE · Chat' },
108
+ ];
109
+ }
110
+ async validateConnection() {
111
+ try {
112
+ const response = await Promise.race([
113
+ fetch(`${this.baseUrl}/${this.defaultModel}`, {
114
+ method: 'HEAD',
115
+ headers: { 'Authorization': `Bearer ${this.apiKey}` },
116
+ }),
117
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Connection timed out (10s)')), 10000)),
118
+ ]);
119
+ return { valid: response.ok || response.status === 405 };
120
+ }
121
+ catch (error) {
122
+ return { valid: false, error: error instanceof Error ? error.message : 'Connection failed' };
123
+ }
124
+ }
125
+ formatPrompt(options) {
126
+ // Build a simple chat prompt for instruction-tuned models
127
+ const parts = [];
128
+ if (options.systemPrompt) {
129
+ parts.push(`System: ${options.systemPrompt}`);
130
+ }
131
+ for (const msg of options.messages) {
132
+ const roleLabel = msg.role === 'assistant' ? 'Assistant' : msg.role === 'user' ? 'User' : 'System';
133
+ parts.push(`${roleLabel}: ${msg.content}`);
134
+ }
135
+ parts.push('Assistant:');
136
+ return parts.join('\n\n');
137
+ }
138
+ }
139
+ exports.HuggingFaceProvider = HuggingFaceProvider;
140
+ //# sourceMappingURL=huggingface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"huggingface.js","sourceRoot":"","sources":["../../../src/providers/huggingface.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * 🐟 AZERCLAW KiloAuto Provider
3
+ * Fetch-based provider for https://api.kilo.ai/auto free tier.
4
+ */
5
+ import { BaseProvider, CompletionOptions, CompletionResult, StreamChunk, ModelInfo } from './base';
6
+ export declare class KiloAutoProvider extends BaseProvider {
7
+ readonly name = "kiloauto";
8
+ readonly displayName = "KiloAuto";
9
+ private apiKey;
10
+ private baseUrl;
11
+ private defaultModel;
12
+ constructor(config: {
13
+ apiKey: string;
14
+ baseUrl?: string;
15
+ defaultModel?: string;
16
+ });
17
+ isAvailable(): Promise<boolean>;
18
+ complete(options: CompletionOptions): Promise<CompletionResult>;
19
+ stream(options: CompletionOptions): AsyncGenerator<StreamChunk>;
20
+ listModels(): Promise<ModelInfo[]>;
21
+ validateConnection(): Promise<{
22
+ valid: boolean;
23
+ error?: string;
24
+ }>;
25
+ private formatMessages;
26
+ private getContextWindow;
27
+ private getDefaultModels;
28
+ }
29
+ //# sourceMappingURL=kiloauto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kiloauto.d.ts","sourceRoot":"","sources":["../../../src/providers/kiloauto.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,YAAY,EAEZ,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,SAAS,EAEV,MAAM,QAAQ,CAAC;AAEhB,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,WAAW,cAAc;IAElC,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;IAOzE,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAS/B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA8E9D,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc,CAAC,WAAW,CAAC;IAkFhE,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAqBlC,kBAAkB,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAgBvE,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,gBAAgB;CAKzB"}
@@ -0,0 +1,242 @@
1
+ "use strict";
2
+ /**
3
+ * 🐟 AZERCLAW KiloAuto Provider
4
+ * Fetch-based provider for https://api.kilo.ai/auto free tier.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.KiloAutoProvider = void 0;
8
+ const base_1 = require("./base");
9
+ class KiloAutoProvider extends base_1.BaseProvider {
10
+ name = 'kiloauto';
11
+ displayName = 'KiloAuto';
12
+ apiKey;
13
+ baseUrl;
14
+ defaultModel;
15
+ constructor(config) {
16
+ super();
17
+ this.apiKey = config.apiKey;
18
+ this.baseUrl = (config.baseUrl || 'https://api.kilo.ai/auto').replace(/\/$/, '');
19
+ this.defaultModel = config.defaultModel || 'kilo-auto-v1';
20
+ }
21
+ async isAvailable() {
22
+ try {
23
+ const result = await this.validateConnection();
24
+ return result.valid;
25
+ }
26
+ catch {
27
+ return false;
28
+ }
29
+ }
30
+ async complete(options) {
31
+ const model = options.model || this.defaultModel;
32
+ try {
33
+ const response = await fetch(`${this.baseUrl}/chat/completions`, {
34
+ method: 'POST',
35
+ headers: {
36
+ 'Content-Type': 'application/json',
37
+ 'Authorization': `Bearer ${this.apiKey}`,
38
+ },
39
+ body: JSON.stringify({
40
+ model,
41
+ messages: this.formatMessages(options),
42
+ max_tokens: options.maxTokens || 4096,
43
+ temperature: options.temperature ?? 0.7,
44
+ tools: options.tools && options.tools.length > 0 ? options.tools : undefined,
45
+ }),
46
+ });
47
+ if (!response.ok) {
48
+ const text = await response.text().catch(() => 'Unknown error');
49
+ return {
50
+ content: `KiloAuto HTTP ${response.status}: ${text}`,
51
+ model,
52
+ provider: this.name,
53
+ finishReason: 'error',
54
+ };
55
+ }
56
+ const data = await response.json();
57
+ if (!data.choices || data.choices.length === 0) {
58
+ return {
59
+ content: `KiloAuto error: ${data.error?.message || 'Empty response'}`,
60
+ model,
61
+ provider: this.name,
62
+ finishReason: 'error',
63
+ };
64
+ }
65
+ const choice = data.choices[0];
66
+ const message = choice.message || {};
67
+ return {
68
+ content: message.content || '',
69
+ toolCalls: Array.isArray(message.tool_calls)
70
+ ? message.tool_calls.map((tc) => ({
71
+ id: tc.id || '',
72
+ type: 'function',
73
+ function: {
74
+ name: tc.function?.name || '',
75
+ arguments: tc.function?.arguments || '',
76
+ },
77
+ }))
78
+ : undefined,
79
+ usage: data.usage
80
+ ? {
81
+ promptTokens: data.usage.prompt_tokens,
82
+ completionTokens: data.usage.completion_tokens,
83
+ totalTokens: data.usage.total_tokens,
84
+ }
85
+ : undefined,
86
+ model: data.model || model,
87
+ provider: this.name,
88
+ finishReason: choice.finish_reason === 'tool_calls' ? 'tool_calls' :
89
+ choice.finish_reason === 'length' ? 'length' : 'stop',
90
+ };
91
+ }
92
+ catch (error) {
93
+ const msg = error instanceof Error ? error.message : 'Unknown error';
94
+ return {
95
+ content: `KiloAuto provider error: ${msg}`,
96
+ model,
97
+ provider: this.name,
98
+ finishReason: 'error',
99
+ };
100
+ }
101
+ }
102
+ async *stream(options) {
103
+ const model = options.model || this.defaultModel;
104
+ try {
105
+ const response = await fetch(`${this.baseUrl}/chat/completions`, {
106
+ method: 'POST',
107
+ headers: {
108
+ 'Content-Type': 'application/json',
109
+ 'Authorization': `Bearer ${this.apiKey}`,
110
+ },
111
+ body: JSON.stringify({
112
+ model,
113
+ messages: this.formatMessages(options),
114
+ max_tokens: options.maxTokens || 4096,
115
+ temperature: options.temperature ?? 0.7,
116
+ stream: true,
117
+ tools: options.tools && options.tools.length > 0 ? options.tools : undefined,
118
+ }),
119
+ });
120
+ if (!response.ok) {
121
+ const text = await response.text().catch(() => 'Unknown error');
122
+ yield { type: 'error', error: `KiloAuto HTTP ${response.status}: ${text}` };
123
+ return;
124
+ }
125
+ if (!response.body) {
126
+ yield { type: 'error', error: 'KiloAuto: empty response body' };
127
+ return;
128
+ }
129
+ const reader = response.body.getReader();
130
+ const decoder = new TextDecoder();
131
+ let buffer = '';
132
+ while (true) {
133
+ const { done, value } = await reader.read();
134
+ if (done)
135
+ break;
136
+ buffer += decoder.decode(value, { stream: true });
137
+ const lines = buffer.split('\n');
138
+ buffer = lines.pop() || '';
139
+ for (const line of lines) {
140
+ const trimmed = line.trim();
141
+ if (!trimmed || trimmed === 'data: [DONE]')
142
+ continue;
143
+ if (!trimmed.startsWith('data: '))
144
+ continue;
145
+ try {
146
+ const chunk = JSON.parse(trimmed.slice(6));
147
+ const delta = chunk.choices?.[0]?.delta;
148
+ if (delta?.content) {
149
+ yield { type: 'text', content: delta.content };
150
+ }
151
+ if (delta?.tool_calls) {
152
+ for (const tc of delta.tool_calls) {
153
+ yield {
154
+ type: 'tool_call',
155
+ toolCall: {
156
+ id: tc.id || '',
157
+ type: 'function',
158
+ function: {
159
+ name: tc.function?.name || '',
160
+ arguments: tc.function?.arguments || '',
161
+ },
162
+ },
163
+ };
164
+ }
165
+ }
166
+ if (chunk.choices?.[0]?.finish_reason) {
167
+ yield { type: 'done' };
168
+ }
169
+ }
170
+ catch {
171
+ // Skip malformed SSE lines
172
+ }
173
+ }
174
+ }
175
+ }
176
+ catch (error) {
177
+ yield { type: 'error', error: error instanceof Error ? error.message : 'Unknown error' };
178
+ }
179
+ }
180
+ async listModels() {
181
+ try {
182
+ const response = await fetch(`${this.baseUrl}/models`, {
183
+ headers: { 'Authorization': `Bearer ${this.apiKey}` },
184
+ });
185
+ if (!response.ok)
186
+ return this.getDefaultModels();
187
+ const data = await response.json();
188
+ const models = Array.isArray(data.data) ? data.data : Array.isArray(data) ? data : [];
189
+ return models.map((m) => ({
190
+ id: m.id,
191
+ name: m.id,
192
+ provider: this.name,
193
+ contextWindow: this.getContextWindow(m.id),
194
+ supportsTools: true,
195
+ supportsStreaming: true,
196
+ }));
197
+ }
198
+ catch {
199
+ return this.getDefaultModels();
200
+ }
201
+ }
202
+ async validateConnection() {
203
+ try {
204
+ await Promise.race([
205
+ fetch(`${this.baseUrl}/models`, {
206
+ headers: { 'Authorization': `Bearer ${this.apiKey}` },
207
+ }),
208
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Connection timed out (10s)')), 10000)),
209
+ ]);
210
+ return { valid: true };
211
+ }
212
+ catch (error) {
213
+ return { valid: false, error: error instanceof Error ? error.message : 'Connection failed' };
214
+ }
215
+ }
216
+ formatMessages(options) {
217
+ const messages = [];
218
+ if (options.systemPrompt) {
219
+ messages.push({ role: 'system', content: options.systemPrompt });
220
+ }
221
+ for (const msg of options.messages) {
222
+ messages.push({ role: msg.role, content: msg.content });
223
+ }
224
+ return messages;
225
+ }
226
+ getContextWindow(modelId) {
227
+ if (modelId.includes('128k'))
228
+ return 128000;
229
+ if (modelId.includes('200k'))
230
+ return 200000;
231
+ if (modelId.includes('1m'))
232
+ return 1000000;
233
+ return 128000;
234
+ }
235
+ getDefaultModels() {
236
+ return [
237
+ { id: this.defaultModel, name: this.defaultModel, provider: this.name, contextWindow: 128000, supportsTools: true, supportsStreaming: true, description: 'FREE · KiloAuto' },
238
+ ];
239
+ }
240
+ }
241
+ exports.KiloAutoProvider = KiloAutoProvider;
242
+ //# sourceMappingURL=kiloauto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kiloauto.js","sourceRoot":"","sources":["../../../src/providers/kiloauto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * 🐟 AZERCLAW LocalLlama Provider
3
+ * Ollama-compatible local provider for self-hosted free models.
4
+ */
5
+ import { BaseProvider, CompletionOptions, CompletionResult, StreamChunk, ModelInfo } from './base';
6
+ export declare class LocalLlamaProvider extends BaseProvider {
7
+ readonly name = "localllama";
8
+ readonly displayName = "LocalLlama";
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
+ private formatMessages;
24
+ private getDefaultModels;
25
+ }
26
+ //# sourceMappingURL=localllama.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localllama.d.ts","sourceRoot":"","sources":["../../../src/providers/localllama.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,SAAS,EACV,MAAM,QAAQ,CAAC;AAEhB,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,QAAQ,CAAC,WAAW,gBAAgB;IAEpC,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;IAMzD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAS/B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAgD9D,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc,CAAC,WAAW,CAAC;IA2EhE,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAmBlC,kBAAkB,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAcvE,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,gBAAgB;CAKzB"}
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ /**
3
+ * 🐟 AZERCLAW LocalLlama Provider
4
+ * Ollama-compatible local provider for self-hosted free models.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.LocalLlamaProvider = void 0;
8
+ const base_1 = require("./base");
9
+ class LocalLlamaProvider extends base_1.BaseProvider {
10
+ name = 'localllama';
11
+ displayName = 'LocalLlama';
12
+ baseUrl;
13
+ defaultModel;
14
+ constructor(config) {
15
+ super();
16
+ this.baseUrl = (config.baseUrl || 'http://localhost:11434').replace(/\/$/, '');
17
+ this.defaultModel = config.defaultModel || 'llama3.2';
18
+ }
19
+ async isAvailable() {
20
+ try {
21
+ const result = await this.validateConnection();
22
+ return result.valid;
23
+ }
24
+ catch {
25
+ return false;
26
+ }
27
+ }
28
+ async complete(options) {
29
+ const model = options.model || this.defaultModel;
30
+ try {
31
+ const response = await fetch(`${this.baseUrl}/api/chat`, {
32
+ method: 'POST',
33
+ headers: { 'Content-Type': 'application/json' },
34
+ body: JSON.stringify({
35
+ model,
36
+ messages: this.formatMessages(options),
37
+ stream: false,
38
+ options: {
39
+ num_predict: options.maxTokens || 4096,
40
+ temperature: options.temperature ?? 0.7,
41
+ },
42
+ }),
43
+ });
44
+ if (!response.ok) {
45
+ const text = await response.text().catch(() => 'Unknown error');
46
+ return {
47
+ content: `LocalLlama HTTP ${response.status}: ${text}`,
48
+ model,
49
+ provider: this.name,
50
+ finishReason: 'error',
51
+ };
52
+ }
53
+ const data = await response.json();
54
+ const message = data.message || {};
55
+ return {
56
+ content: message.content || '',
57
+ model,
58
+ provider: this.name,
59
+ finishReason: 'stop',
60
+ };
61
+ }
62
+ catch (error) {
63
+ const msg = error instanceof Error ? error.message : 'Unknown error';
64
+ return {
65
+ content: `LocalLlama provider error: ${msg}`,
66
+ model,
67
+ provider: this.name,
68
+ finishReason: 'error',
69
+ };
70
+ }
71
+ }
72
+ async *stream(options) {
73
+ const model = options.model || this.defaultModel;
74
+ try {
75
+ const response = await fetch(`${this.baseUrl}/api/chat`, {
76
+ method: 'POST',
77
+ headers: { 'Content-Type': 'application/json' },
78
+ body: JSON.stringify({
79
+ model,
80
+ messages: this.formatMessages(options),
81
+ stream: true,
82
+ options: {
83
+ num_predict: options.maxTokens || 4096,
84
+ temperature: options.temperature ?? 0.7,
85
+ },
86
+ }),
87
+ });
88
+ if (!response.ok) {
89
+ const text = await response.text().catch(() => 'Unknown error');
90
+ yield { type: 'error', error: `LocalLlama HTTP ${response.status}: ${text}` };
91
+ return;
92
+ }
93
+ if (!response.body) {
94
+ yield { type: 'error', error: 'LocalLlama: empty response body' };
95
+ return;
96
+ }
97
+ const reader = response.body.getReader();
98
+ const decoder = new TextDecoder();
99
+ let buffer = '';
100
+ while (true) {
101
+ const { done, value } = await reader.read();
102
+ if (done) {
103
+ if (buffer.trim()) {
104
+ try {
105
+ const data = JSON.parse(buffer.trim());
106
+ if (data.message?.content) {
107
+ yield { type: 'text', content: data.message.content };
108
+ }
109
+ if (data.done) {
110
+ yield { type: 'done' };
111
+ }
112
+ }
113
+ catch { /* ignore */ }
114
+ }
115
+ break;
116
+ }
117
+ buffer += decoder.decode(value, { stream: true });
118
+ const lines = buffer.split('\n');
119
+ buffer = lines.pop() || '';
120
+ for (const line of lines) {
121
+ const trimmed = line.trim();
122
+ if (!trimmed)
123
+ continue;
124
+ try {
125
+ const data = JSON.parse(trimmed);
126
+ if (data.message?.content) {
127
+ yield { type: 'text', content: data.message.content };
128
+ }
129
+ if (data.done) {
130
+ yield { type: 'done' };
131
+ }
132
+ }
133
+ catch {
134
+ // Skip malformed lines
135
+ }
136
+ }
137
+ }
138
+ }
139
+ catch (error) {
140
+ yield { type: 'error', error: error instanceof Error ? error.message : 'Unknown error' };
141
+ }
142
+ }
143
+ async listModels() {
144
+ try {
145
+ const response = await fetch(`${this.baseUrl}/api/tags`);
146
+ if (!response.ok)
147
+ return this.getDefaultModels();
148
+ const data = await response.json();
149
+ const models = Array.isArray(data.models) ? data.models : [];
150
+ return models.map((m) => ({
151
+ id: m.name || m.model || 'unknown',
152
+ name: m.name || m.model || 'unknown',
153
+ provider: this.name,
154
+ contextWindow: 128000,
155
+ supportsTools: false,
156
+ supportsStreaming: true,
157
+ }));
158
+ }
159
+ catch {
160
+ return this.getDefaultModels();
161
+ }
162
+ }
163
+ async validateConnection() {
164
+ try {
165
+ await Promise.race([
166
+ fetch(`${this.baseUrl}/api/tags`),
167
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Connection timed out (5s)')), 5000)),
168
+ ]);
169
+ return { valid: true };
170
+ }
171
+ catch (error) {
172
+ return { valid: false, error: error instanceof Error ? error.message : 'Connection failed' };
173
+ }
174
+ }
175
+ formatMessages(options) {
176
+ const messages = [];
177
+ if (options.systemPrompt) {
178
+ messages.push({ role: 'system', content: options.systemPrompt });
179
+ }
180
+ for (const msg of options.messages) {
181
+ messages.push({ role: msg.role, content: msg.content });
182
+ }
183
+ return messages;
184
+ }
185
+ getDefaultModels() {
186
+ return [
187
+ { id: this.defaultModel, name: this.defaultModel, provider: this.name, contextWindow: 128000, supportsTools: false, supportsStreaming: true, description: 'FREE · Local' },
188
+ ];
189
+ }
190
+ }
191
+ exports.LocalLlamaProvider = LocalLlamaProvider;
192
+ //# sourceMappingURL=localllama.js.map