@ritwikamit/cl8 0.1.0-alpha.8

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 (260) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +547 -0
  3. package/dist/agents/Agent.d.ts +27 -0
  4. package/dist/agents/Agent.d.ts.map +1 -0
  5. package/dist/agents/Agent.js +197 -0
  6. package/dist/agents/Agent.js.map +1 -0
  7. package/dist/agents/Executor.d.ts +12 -0
  8. package/dist/agents/Executor.d.ts.map +1 -0
  9. package/dist/agents/Executor.js +65 -0
  10. package/dist/agents/Executor.js.map +1 -0
  11. package/dist/agents/Planner.d.ts +14 -0
  12. package/dist/agents/Planner.d.ts.map +1 -0
  13. package/dist/agents/Planner.js +105 -0
  14. package/dist/agents/Planner.js.map +1 -0
  15. package/dist/agents/Reflector.d.ts +19 -0
  16. package/dist/agents/Reflector.d.ts.map +1 -0
  17. package/dist/agents/Reflector.js +97 -0
  18. package/dist/agents/Reflector.js.map +1 -0
  19. package/dist/agents/index.d.ts +5 -0
  20. package/dist/agents/index.d.ts.map +1 -0
  21. package/dist/agents/index.js +12 -0
  22. package/dist/agents/index.js.map +1 -0
  23. package/dist/bin/cl8.d.ts +3 -0
  24. package/dist/bin/cl8.d.ts.map +1 -0
  25. package/dist/bin/cl8.js +19 -0
  26. package/dist/bin/cl8.js.map +1 -0
  27. package/dist/cli/commands/chat.d.ts +12 -0
  28. package/dist/cli/commands/chat.d.ts.map +1 -0
  29. package/dist/cli/commands/chat.js +52 -0
  30. package/dist/cli/commands/chat.js.map +1 -0
  31. package/dist/cli/commands/config.d.ts +8 -0
  32. package/dist/cli/commands/config.d.ts.map +1 -0
  33. package/dist/cli/commands/config.js +69 -0
  34. package/dist/cli/commands/config.js.map +1 -0
  35. package/dist/cli/commands/init.d.ts +2 -0
  36. package/dist/cli/commands/init.d.ts.map +1 -0
  37. package/dist/cli/commands/init.js +90 -0
  38. package/dist/cli/commands/init.js.map +1 -0
  39. package/dist/cli/commands/session.d.ts +6 -0
  40. package/dist/cli/commands/session.d.ts.map +1 -0
  41. package/dist/cli/commands/session.js +70 -0
  42. package/dist/cli/commands/session.js.map +1 -0
  43. package/dist/cli/hooks/useHistory.d.ts +14 -0
  44. package/dist/cli/hooks/useHistory.d.ts.map +1 -0
  45. package/dist/cli/hooks/useHistory.js +67 -0
  46. package/dist/cli/hooks/useHistory.js.map +1 -0
  47. package/dist/cli/index.d.ts +3 -0
  48. package/dist/cli/index.d.ts.map +1 -0
  49. package/dist/cli/index.js +115 -0
  50. package/dist/cli/index.js.map +1 -0
  51. package/dist/config/env.d.ts +7 -0
  52. package/dist/config/env.d.ts.map +1 -0
  53. package/dist/config/env.js +56 -0
  54. package/dist/config/env.js.map +1 -0
  55. package/dist/config/index.d.ts +10 -0
  56. package/dist/config/index.d.ts.map +1 -0
  57. package/dist/config/index.js +125 -0
  58. package/dist/config/index.js.map +1 -0
  59. package/dist/core/Boot.d.ts +34 -0
  60. package/dist/core/Boot.d.ts.map +1 -0
  61. package/dist/core/Boot.js +97 -0
  62. package/dist/core/Boot.js.map +1 -0
  63. package/dist/core/Engine.d.ts +40 -0
  64. package/dist/core/Engine.d.ts.map +1 -0
  65. package/dist/core/Engine.js +127 -0
  66. package/dist/core/Engine.js.map +1 -0
  67. package/dist/core/Loop.d.ts +22 -0
  68. package/dist/core/Loop.d.ts.map +1 -0
  69. package/dist/core/Loop.js +221 -0
  70. package/dist/core/Loop.js.map +1 -0
  71. package/dist/core/index.d.ts +3 -0
  72. package/dist/core/index.d.ts.map +1 -0
  73. package/dist/core/index.js +8 -0
  74. package/dist/core/index.js.map +1 -0
  75. package/dist/index.d.ts +16 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +47 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/memory/ConversationMemory.d.ts +24 -0
  80. package/dist/memory/ConversationMemory.d.ts.map +1 -0
  81. package/dist/memory/ConversationMemory.js +134 -0
  82. package/dist/memory/ConversationMemory.js.map +1 -0
  83. package/dist/memory/SessionManager.d.ts +19 -0
  84. package/dist/memory/SessionManager.d.ts.map +1 -0
  85. package/dist/memory/SessionManager.js +104 -0
  86. package/dist/memory/SessionManager.js.map +1 -0
  87. package/dist/memory/VectorMemory.d.ts +16 -0
  88. package/dist/memory/VectorMemory.d.ts.map +1 -0
  89. package/dist/memory/VectorMemory.js +87 -0
  90. package/dist/memory/VectorMemory.js.map +1 -0
  91. package/dist/memory/index.d.ts +4 -0
  92. package/dist/memory/index.d.ts.map +1 -0
  93. package/dist/memory/index.js +10 -0
  94. package/dist/memory/index.js.map +1 -0
  95. package/dist/plugins/PluginLoader.d.ts +9 -0
  96. package/dist/plugins/PluginLoader.d.ts.map +1 -0
  97. package/dist/plugins/PluginLoader.js +86 -0
  98. package/dist/plugins/PluginLoader.js.map +1 -0
  99. package/dist/plugins/PluginManager.d.ts +18 -0
  100. package/dist/plugins/PluginManager.d.ts.map +1 -0
  101. package/dist/plugins/PluginManager.js +63 -0
  102. package/dist/plugins/PluginManager.js.map +1 -0
  103. package/dist/plugins/index.d.ts +11 -0
  104. package/dist/plugins/index.d.ts.map +1 -0
  105. package/dist/plugins/index.js +16 -0
  106. package/dist/plugins/index.js.map +1 -0
  107. package/dist/providers/BaseProvider.d.ts +17 -0
  108. package/dist/providers/BaseProvider.d.ts.map +1 -0
  109. package/dist/providers/BaseProvider.js +33 -0
  110. package/dist/providers/BaseProvider.js.map +1 -0
  111. package/dist/providers/GeminiProvider.d.ts +14 -0
  112. package/dist/providers/GeminiProvider.d.ts.map +1 -0
  113. package/dist/providers/GeminiProvider.js +79 -0
  114. package/dist/providers/GeminiProvider.js.map +1 -0
  115. package/dist/providers/OllamaProvider.d.ts +14 -0
  116. package/dist/providers/OllamaProvider.d.ts.map +1 -0
  117. package/dist/providers/OllamaProvider.js +131 -0
  118. package/dist/providers/OllamaProvider.js.map +1 -0
  119. package/dist/providers/OpenAIProvider.d.ts +13 -0
  120. package/dist/providers/OpenAIProvider.d.ts.map +1 -0
  121. package/dist/providers/OpenAIProvider.js +109 -0
  122. package/dist/providers/OpenAIProvider.js.map +1 -0
  123. package/dist/providers/index.d.ts +23 -0
  124. package/dist/providers/index.d.ts.map +1 -0
  125. package/dist/providers/index.js +57 -0
  126. package/dist/providers/index.js.map +1 -0
  127. package/dist/services/AuditService.d.ts +23 -0
  128. package/dist/services/AuditService.d.ts.map +1 -0
  129. package/dist/services/AuditService.js +73 -0
  130. package/dist/services/AuditService.js.map +1 -0
  131. package/dist/services/SecurityService.d.ts +15 -0
  132. package/dist/services/SecurityService.d.ts.map +1 -0
  133. package/dist/services/SecurityService.js +60 -0
  134. package/dist/services/SecurityService.js.map +1 -0
  135. package/dist/services/ToolService.d.ts +19 -0
  136. package/dist/services/ToolService.d.ts.map +1 -0
  137. package/dist/services/ToolService.js +85 -0
  138. package/dist/services/ToolService.js.map +1 -0
  139. package/dist/services/index.d.ts +4 -0
  140. package/dist/services/index.d.ts.map +1 -0
  141. package/dist/services/index.js +10 -0
  142. package/dist/services/index.js.map +1 -0
  143. package/dist/tools/BaseTool.d.ts +12 -0
  144. package/dist/tools/BaseTool.d.ts.map +1 -0
  145. package/dist/tools/BaseTool.js +25 -0
  146. package/dist/tools/BaseTool.js.map +1 -0
  147. package/dist/tools/FileTool.d.ts +14 -0
  148. package/dist/tools/FileTool.d.ts.map +1 -0
  149. package/dist/tools/FileTool.js +136 -0
  150. package/dist/tools/FileTool.js.map +1 -0
  151. package/dist/tools/SearchTool.d.ts +10 -0
  152. package/dist/tools/SearchTool.d.ts.map +1 -0
  153. package/dist/tools/SearchTool.js +117 -0
  154. package/dist/tools/SearchTool.js.map +1 -0
  155. package/dist/tools/ShellTool.d.ts +8 -0
  156. package/dist/tools/ShellTool.d.ts.map +1 -0
  157. package/dist/tools/ShellTool.js +87 -0
  158. package/dist/tools/ShellTool.js.map +1 -0
  159. package/dist/tools/index.d.ts +10 -0
  160. package/dist/tools/index.d.ts.map +1 -0
  161. package/dist/tools/index.js +29 -0
  162. package/dist/tools/index.js.map +1 -0
  163. package/dist/types/agent.d.ts +49 -0
  164. package/dist/types/agent.d.ts.map +1 -0
  165. package/dist/types/agent.js +3 -0
  166. package/dist/types/agent.js.map +1 -0
  167. package/dist/types/config.d.ts +52 -0
  168. package/dist/types/config.d.ts.map +1 -0
  169. package/dist/types/config.js +3 -0
  170. package/dist/types/config.js.map +1 -0
  171. package/dist/types/index.d.ts +7 -0
  172. package/dist/types/index.d.ts.map +1 -0
  173. package/dist/types/index.js +23 -0
  174. package/dist/types/index.js.map +1 -0
  175. package/dist/types/memory.d.ts +47 -0
  176. package/dist/types/memory.d.ts.map +1 -0
  177. package/dist/types/memory.js +3 -0
  178. package/dist/types/memory.js.map +1 -0
  179. package/dist/types/plugin.d.ts +31 -0
  180. package/dist/types/plugin.d.ts.map +1 -0
  181. package/dist/types/plugin.js +3 -0
  182. package/dist/types/plugin.js.map +1 -0
  183. package/dist/types/provider.d.ts +43 -0
  184. package/dist/types/provider.d.ts.map +1 -0
  185. package/dist/types/provider.js +3 -0
  186. package/dist/types/provider.js.map +1 -0
  187. package/dist/types/tool.d.ts +41 -0
  188. package/dist/types/tool.d.ts.map +1 -0
  189. package/dist/types/tool.js +3 -0
  190. package/dist/types/tool.js.map +1 -0
  191. package/dist/ui/MarkdownRenderer.d.ts +17 -0
  192. package/dist/ui/MarkdownRenderer.d.ts.map +1 -0
  193. package/dist/ui/MarkdownRenderer.js +148 -0
  194. package/dist/ui/MarkdownRenderer.js.map +1 -0
  195. package/dist/ui/Spinner.d.ts +14 -0
  196. package/dist/ui/Spinner.d.ts.map +1 -0
  197. package/dist/ui/Spinner.js +79 -0
  198. package/dist/ui/Spinner.js.map +1 -0
  199. package/dist/ui/StreamingOutput.d.ts +15 -0
  200. package/dist/ui/StreamingOutput.d.ts.map +1 -0
  201. package/dist/ui/StreamingOutput.js +48 -0
  202. package/dist/ui/StreamingOutput.js.map +1 -0
  203. package/dist/ui/context-monitor.d.ts +11 -0
  204. package/dist/ui/context-monitor.d.ts.map +1 -0
  205. package/dist/ui/context-monitor.js +39 -0
  206. package/dist/ui/context-monitor.js.map +1 -0
  207. package/dist/ui/index.d.ts +6 -0
  208. package/dist/ui/index.d.ts.map +1 -0
  209. package/dist/ui/index.js +17 -0
  210. package/dist/ui/index.js.map +1 -0
  211. package/dist/ui/onboarding.d.ts +9 -0
  212. package/dist/ui/onboarding.d.ts.map +1 -0
  213. package/dist/ui/onboarding.js +40 -0
  214. package/dist/ui/onboarding.js.map +1 -0
  215. package/dist/ui/pixel-logo.d.ts +11 -0
  216. package/dist/ui/pixel-logo.d.ts.map +1 -0
  217. package/dist/ui/pixel-logo.js +112 -0
  218. package/dist/ui/pixel-logo.js.map +1 -0
  219. package/dist/ui/spinner-manager.d.ts +18 -0
  220. package/dist/ui/spinner-manager.d.ts.map +1 -0
  221. package/dist/ui/spinner-manager.js +109 -0
  222. package/dist/ui/spinner-manager.js.map +1 -0
  223. package/dist/ui/splash.d.ts +18 -0
  224. package/dist/ui/splash.d.ts.map +1 -0
  225. package/dist/ui/splash.js +116 -0
  226. package/dist/ui/splash.js.map +1 -0
  227. package/dist/ui/startup-tips.json +22 -0
  228. package/dist/ui/status-bar.d.ts +17 -0
  229. package/dist/ui/status-bar.d.ts.map +1 -0
  230. package/dist/ui/status-bar.js +54 -0
  231. package/dist/ui/status-bar.js.map +1 -0
  232. package/dist/ui/theme-manager.d.ts +22 -0
  233. package/dist/ui/theme-manager.d.ts.map +1 -0
  234. package/dist/ui/theme-manager.js +91 -0
  235. package/dist/ui/theme-manager.js.map +1 -0
  236. package/dist/ui/types.d.ts +19 -0
  237. package/dist/ui/types.d.ts.map +1 -0
  238. package/dist/ui/types.js +3 -0
  239. package/dist/ui/types.js.map +1 -0
  240. package/dist/ui/typing-animation.d.ts +9 -0
  241. package/dist/ui/typing-animation.d.ts.map +1 -0
  242. package/dist/ui/typing-animation.js +36 -0
  243. package/dist/ui/typing-animation.js.map +1 -0
  244. package/dist/ui/workspace-panel.d.ts +5 -0
  245. package/dist/ui/workspace-panel.d.ts.map +1 -0
  246. package/dist/ui/workspace-panel.js +30 -0
  247. package/dist/ui/workspace-panel.js.map +1 -0
  248. package/dist/utils/crypto.d.ts +6 -0
  249. package/dist/utils/crypto.d.ts.map +1 -0
  250. package/dist/utils/crypto.js +54 -0
  251. package/dist/utils/crypto.js.map +1 -0
  252. package/dist/utils/index.d.ts +3 -0
  253. package/dist/utils/index.d.ts.map +1 -0
  254. package/dist/utils/index.js +19 -0
  255. package/dist/utils/index.js.map +1 -0
  256. package/dist/utils/logger.d.ts +7 -0
  257. package/dist/utils/logger.d.ts.map +1 -0
  258. package/dist/utils/logger.js +57 -0
  259. package/dist/utils/logger.js.map +1 -0
  260. package/package.json +90 -0
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OllamaProvider = void 0;
4
+ const BaseProvider_js_1 = require("./BaseProvider.js");
5
+ const DEFAULT_NUM_CTX = 4096;
6
+ const DEFAULT_NUM_PREDICT = 2048;
7
+ class OllamaProvider extends BaseProvider_js_1.BaseProvider {
8
+ baseUrl;
9
+ constructor(config) {
10
+ super(config);
11
+ this.baseUrl = config.baseUrl?.replace(/\/+$/, '') || 'http://localhost:11434';
12
+ }
13
+ get capabilities() {
14
+ return {
15
+ streaming: true,
16
+ toolCalling: false,
17
+ vision: false,
18
+ maxContextTokens: DEFAULT_NUM_CTX,
19
+ };
20
+ }
21
+ async chat(request) {
22
+ const response = await fetch(`${this.baseUrl}/api/chat`, {
23
+ method: 'POST',
24
+ headers: { 'Content-Type': 'application/json' },
25
+ body: JSON.stringify({
26
+ model: this.config.model,
27
+ messages: this.formatMessagesForOllama(request.messages, request.systemPrompt),
28
+ stream: false,
29
+ options: this.buildOptions(request),
30
+ }),
31
+ });
32
+ if (!response.ok) {
33
+ throw new Error(`Ollama API error: ${response.status} ${response.statusText}`);
34
+ }
35
+ const data = (await response.json());
36
+ return {
37
+ id: crypto.randomUUID(),
38
+ content: data.message?.content || '',
39
+ model: this.config.model,
40
+ usage: data.prompt_eval_count
41
+ ? {
42
+ promptTokens: data.prompt_eval_count,
43
+ completionTokens: data.eval_count || 0,
44
+ totalTokens: (data.prompt_eval_count || 0) + (data.eval_count || 0),
45
+ }
46
+ : undefined,
47
+ finishReason: 'stop',
48
+ };
49
+ }
50
+ async *chatStream(request) {
51
+ const response = await fetch(`${this.baseUrl}/api/chat`, {
52
+ method: 'POST',
53
+ headers: { 'Content-Type': 'application/json' },
54
+ body: JSON.stringify({
55
+ model: this.config.model,
56
+ messages: this.formatMessagesForOllama(request.messages, request.systemPrompt),
57
+ stream: true,
58
+ options: this.buildOptions(request),
59
+ }),
60
+ });
61
+ if (!response.ok) {
62
+ throw new Error(`Ollama API error: ${response.status} ${response.statusText}`);
63
+ }
64
+ const reader = response.body?.getReader();
65
+ if (!reader)
66
+ throw new Error('No response body');
67
+ const decoder = new TextDecoder();
68
+ let buffer = '';
69
+ while (true) {
70
+ const { done, value } = await reader.read();
71
+ if (done)
72
+ break;
73
+ buffer += decoder.decode(value, { stream: true });
74
+ const lines = buffer.split('\n');
75
+ buffer = lines.pop() || '';
76
+ for (const line of lines) {
77
+ if (!line.trim())
78
+ continue;
79
+ try {
80
+ const data = JSON.parse(line);
81
+ if (data.message?.content) {
82
+ yield { content: data.message.content, done: false };
83
+ }
84
+ if (data.done) {
85
+ yield {
86
+ content: '',
87
+ done: true,
88
+ usage: data.prompt_eval_count
89
+ ? {
90
+ promptTokens: data.prompt_eval_count,
91
+ completionTokens: data.eval_count || 0,
92
+ totalTokens: (data.prompt_eval_count || 0) + (data.eval_count || 0),
93
+ }
94
+ : undefined,
95
+ };
96
+ }
97
+ }
98
+ catch {
99
+ continue;
100
+ }
101
+ }
102
+ }
103
+ }
104
+ async countTokens(messages) {
105
+ const text = messages.map(m => m.content).join('\n');
106
+ return Math.ceil(text.length / 4);
107
+ }
108
+ buildOptions(request) {
109
+ return {
110
+ temperature: request.temperature ?? this.config.temperature,
111
+ top_p: request.topP ?? this.config.topP,
112
+ num_predict: request.maxTokens ?? DEFAULT_NUM_PREDICT,
113
+ num_ctx: DEFAULT_NUM_CTX,
114
+ };
115
+ }
116
+ formatMessagesForOllama(messages, systemPrompt) {
117
+ const result = [];
118
+ if (systemPrompt) {
119
+ result.push({ role: 'system', content: systemPrompt });
120
+ }
121
+ for (const msg of messages) {
122
+ result.push({
123
+ role: msg.role === 'assistant' ? 'assistant' : 'user',
124
+ content: msg.content,
125
+ });
126
+ }
127
+ return result;
128
+ }
129
+ }
130
+ exports.OllamaProvider = OllamaProvider;
131
+ //# sourceMappingURL=OllamaProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OllamaProvider.js","sourceRoot":"","sources":["../../src/providers/OllamaProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { BaseProvider } from './BaseProvider.js';
2
+ import { ProviderConfig, ChatCompletionRequest, ChatCompletionResponse, StreamChunk, ProviderCapabilities } from '../types/provider.js';
3
+ import { AgentMessage } from '../types/agent.js';
4
+ export declare class OpenAIProvider extends BaseProvider {
5
+ private client;
6
+ constructor(config: ProviderConfig);
7
+ get capabilities(): ProviderCapabilities;
8
+ chat(request: ChatCompletionRequest): Promise<ChatCompletionResponse>;
9
+ chatStream(request: ChatCompletionRequest): AsyncIterable<StreamChunk>;
10
+ countTokens(messages: AgentMessage[]): Promise<number>;
11
+ private formatForAPI;
12
+ }
13
+ //# sourceMappingURL=OpenAIProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenAIProvider.d.ts","sourceRoot":"","sources":["../../src/providers/OpenAIProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,WAAW,EACX,oBAAoB,EACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,cAAc;IAQlC,IAAI,YAAY,IAAI,oBAAoB,CAOvC;IAEK,IAAI,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IA2BpE,UAAU,CAAC,OAAO,EAAE,qBAAqB,GAAG,aAAa,CAAC,WAAW,CAAC;IAgCvE,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAc5D,OAAO,CAAC,YAAY;CAoBrB"}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.OpenAIProvider = void 0;
7
+ const openai_1 = __importDefault(require("openai"));
8
+ const BaseProvider_js_1 = require("./BaseProvider.js");
9
+ class OpenAIProvider extends BaseProvider_js_1.BaseProvider {
10
+ client;
11
+ constructor(config) {
12
+ super(config);
13
+ this.client = new openai_1.default({
14
+ apiKey: config.apiKey,
15
+ baseURL: config.baseUrl,
16
+ });
17
+ }
18
+ get capabilities() {
19
+ return {
20
+ streaming: true,
21
+ toolCalling: true,
22
+ vision: true,
23
+ maxContextTokens: 128000,
24
+ };
25
+ }
26
+ async chat(request) {
27
+ const messages = this.formatForAPI(request.messages, request.systemPrompt);
28
+ const response = await this.client.chat.completions.create({
29
+ model: this.config.model,
30
+ messages,
31
+ temperature: request.temperature ?? this.config.temperature,
32
+ max_tokens: request.maxTokens,
33
+ stream: false,
34
+ });
35
+ const choice = response.choices[0];
36
+ return {
37
+ id: response.id,
38
+ content: choice?.message?.content || '',
39
+ model: response.model,
40
+ usage: response.usage
41
+ ? {
42
+ promptTokens: response.usage.prompt_tokens,
43
+ completionTokens: response.usage.completion_tokens,
44
+ totalTokens: response.usage.total_tokens,
45
+ }
46
+ : undefined,
47
+ finishReason: choice?.finish_reason,
48
+ };
49
+ }
50
+ async *chatStream(request) {
51
+ const messages = this.formatForAPI(request.messages, request.systemPrompt);
52
+ const stream = await this.client.chat.completions.create({
53
+ model: this.config.model,
54
+ messages,
55
+ temperature: request.temperature ?? this.config.temperature,
56
+ max_tokens: request.maxTokens,
57
+ stream: true,
58
+ stream_options: { include_usage: true },
59
+ });
60
+ for await (const chunk of stream) {
61
+ const delta = chunk.choices?.[0]?.delta;
62
+ if (delta?.content) {
63
+ yield { content: delta.content, done: false };
64
+ }
65
+ if (chunk.usage) {
66
+ yield {
67
+ content: '',
68
+ done: true,
69
+ usage: {
70
+ promptTokens: chunk.usage.prompt_tokens,
71
+ completionTokens: chunk.usage.completion_tokens,
72
+ totalTokens: chunk.usage.total_tokens,
73
+ },
74
+ };
75
+ }
76
+ }
77
+ }
78
+ async countTokens(messages) {
79
+ try {
80
+ const response = await this.client.chat.completions.create({
81
+ model: this.config.model,
82
+ messages: this.formatForAPI(messages),
83
+ max_tokens: 1,
84
+ stream: false,
85
+ });
86
+ return response.usage?.total_tokens || 0;
87
+ }
88
+ catch {
89
+ return messages.reduce((acc, m) => acc + m.content.length / 4, 0);
90
+ }
91
+ }
92
+ formatForAPI(messages, systemPrompt) {
93
+ const result = [];
94
+ if (systemPrompt) {
95
+ result.push({ role: 'system', content: systemPrompt });
96
+ }
97
+ for (const msg of messages) {
98
+ if (msg.role === 'system')
99
+ continue;
100
+ result.push({
101
+ role: msg.role,
102
+ content: msg.content,
103
+ });
104
+ }
105
+ return result;
106
+ }
107
+ }
108
+ exports.OpenAIProvider = OpenAIProvider;
109
+ //# sourceMappingURL=OpenAIProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenAIProvider.js","sourceRoot":"","sources":["../../src/providers/OpenAIProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { ProviderConfig, ProviderType } from '../types/provider.js';
2
+ import { BaseProvider } from './BaseProvider.js';
3
+ import { OpenAIProvider } from './OpenAIProvider.js';
4
+ import { GeminiProvider } from './GeminiProvider.js';
5
+ import { OllamaProvider } from './OllamaProvider.js';
6
+ export declare function createProvider(config: ProviderConfig): BaseProvider;
7
+ export declare function getProviderConfig(config: {
8
+ defaultProvider: ProviderType;
9
+ openai?: {
10
+ apiKey?: string;
11
+ model: string;
12
+ };
13
+ gemini?: {
14
+ apiKey?: string;
15
+ model: string;
16
+ };
17
+ ollama?: {
18
+ baseUrl: string;
19
+ model: string;
20
+ };
21
+ }): ProviderConfig;
22
+ export { BaseProvider, OpenAIProvider, GeminiProvider, OllamaProvider };
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,YAAY,CAWnE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,eAAe,EAAE,YAAY,CAAC;IAC9B,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C,GAAG,cAAc,CA+BjB;AAED,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OllamaProvider = exports.GeminiProvider = exports.OpenAIProvider = exports.BaseProvider = void 0;
4
+ exports.createProvider = createProvider;
5
+ exports.getProviderConfig = getProviderConfig;
6
+ const BaseProvider_js_1 = require("./BaseProvider.js");
7
+ Object.defineProperty(exports, "BaseProvider", { enumerable: true, get: function () { return BaseProvider_js_1.BaseProvider; } });
8
+ const OpenAIProvider_js_1 = require("./OpenAIProvider.js");
9
+ Object.defineProperty(exports, "OpenAIProvider", { enumerable: true, get: function () { return OpenAIProvider_js_1.OpenAIProvider; } });
10
+ const GeminiProvider_js_1 = require("./GeminiProvider.js");
11
+ Object.defineProperty(exports, "GeminiProvider", { enumerable: true, get: function () { return GeminiProvider_js_1.GeminiProvider; } });
12
+ const OllamaProvider_js_1 = require("./OllamaProvider.js");
13
+ Object.defineProperty(exports, "OllamaProvider", { enumerable: true, get: function () { return OllamaProvider_js_1.OllamaProvider; } });
14
+ function createProvider(config) {
15
+ switch (config.type) {
16
+ case 'openai':
17
+ return new OpenAIProvider_js_1.OpenAIProvider(config);
18
+ case 'gemini':
19
+ return new GeminiProvider_js_1.GeminiProvider(config);
20
+ case 'ollama':
21
+ return new OllamaProvider_js_1.OllamaProvider(config);
22
+ default:
23
+ throw new Error(`Unsupported provider type: ${config.type}`);
24
+ }
25
+ }
26
+ function getProviderConfig(config) {
27
+ const { defaultProvider } = config;
28
+ switch (defaultProvider) {
29
+ case 'openai':
30
+ if (!config.openai?.apiKey) {
31
+ throw new Error('OpenAI API key not configured. Set OPENAI_API_KEY in .env');
32
+ }
33
+ return {
34
+ type: 'openai',
35
+ apiKey: config.openai.apiKey,
36
+ model: config.openai.model,
37
+ };
38
+ case 'gemini':
39
+ if (!config.gemini?.apiKey) {
40
+ throw new Error('Gemini API key not configured. Set GEMINI_API_KEY in .env');
41
+ }
42
+ return {
43
+ type: 'gemini',
44
+ apiKey: config.gemini.apiKey,
45
+ model: config.gemini.model,
46
+ };
47
+ case 'ollama':
48
+ return {
49
+ type: 'ollama',
50
+ baseUrl: config.ollama?.baseUrl,
51
+ model: config.ollama?.model || 'codellama',
52
+ };
53
+ default:
54
+ throw new Error(`Unsupported default provider: ${defaultProvider}`);
55
+ }
56
+ }
57
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":";;;AAMA,wCAWC;AAED,8CAoCC;AAtDD,uDAAiD;AAwDxC,6FAxDA,8BAAY,OAwDA;AAvDrB,2DAAqD;AAuD9B,+FAvDd,kCAAc,OAuDc;AAtDrC,2DAAqD;AAsDd,+FAtD9B,kCAAc,OAsD8B;AArDrD,2DAAqD;AAqDE,+FArD9C,kCAAc,OAqD8C;AAnDrE,SAAgB,cAAc,CAAC,MAAsB;IACnD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,QAAQ;YACX,OAAO,IAAI,kCAAc,CAAC,MAAM,CAAC,CAAC;QACpC,KAAK,QAAQ;YACX,OAAO,IAAI,kCAAc,CAAC,MAAM,CAAC,CAAC;QACpC,KAAK,QAAQ;YACX,OAAO,IAAI,kCAAc,CAAC,MAAM,CAAC,CAAC;QACpC;YACE,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB,CAAC,MAKjC;IACC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC;IAEnC,QAAQ,eAAe,EAAE,CAAC;QACxB,KAAK,QAAQ;YACX,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;YAC/E,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;gBAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;aAC3B,CAAC;QACJ,KAAK,QAAQ;YACX,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;YAC/E,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;gBAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;aAC3B,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO;gBAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,WAAW;aAC3C,CAAC;QACJ;YACE,MAAM,IAAI,KAAK,CAAC,iCAAiC,eAAe,EAAE,CAAC,CAAC;IACxE,CAAC;AACH,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { ToolCall, ToolResult } from '../types/tool.js';
2
+ import { AgentMessage } from '../types/agent.js';
3
+ interface AuditEntry {
4
+ timestamp: string;
5
+ type: string;
6
+ data: Record<string, unknown>;
7
+ }
8
+ export declare class AuditService {
9
+ private logPath;
10
+ private entries;
11
+ private logger;
12
+ private maxEntries;
13
+ constructor(logPath: string, maxEntries?: number);
14
+ logToolCall(call: ToolCall, result: ToolResult): void;
15
+ logMessage(msg: AgentMessage): void;
16
+ logEvent(type: string, data: Record<string, unknown>): void;
17
+ private addEntry;
18
+ flush(): Promise<void>;
19
+ getRecent(count?: number): AuditEntry[];
20
+ clear(): void;
21
+ }
22
+ export {};
23
+ //# sourceMappingURL=AuditService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditService.d.ts","sourceRoot":"","sources":["../../src/services/AuditService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,UAAU,UAAU;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,EAAE,MAAM,EAAE,UAAU,GAAE,MAAa;IAKtD,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAiBrD,UAAU,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAYnC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,OAAO,CAAC,QAAQ;IAUV,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B,SAAS,CAAC,KAAK,GAAE,MAAW,GAAG,UAAU,EAAE;IAI3C,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AuditService = void 0;
7
+ const promises_1 = __importDefault(require("node:fs/promises"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const logger_js_1 = require("../utils/logger.js");
10
+ class AuditService {
11
+ logPath;
12
+ entries = [];
13
+ logger = (0, logger_js_1.getLogger)();
14
+ maxEntries;
15
+ constructor(logPath, maxEntries = 1000) {
16
+ this.logPath = node_path_1.default.resolve(logPath, 'audit.log');
17
+ this.maxEntries = maxEntries;
18
+ }
19
+ logToolCall(call, result) {
20
+ const entry = {
21
+ timestamp: new Date().toISOString(),
22
+ type: 'tool_call',
23
+ data: {
24
+ toolCallId: call.id,
25
+ tool: call.name,
26
+ input: call.input,
27
+ success: result.output.success,
28
+ duration: result.duration,
29
+ error: result.output.error,
30
+ },
31
+ };
32
+ this.addEntry(entry);
33
+ }
34
+ logMessage(msg) {
35
+ this.addEntry({
36
+ timestamp: new Date().toISOString(),
37
+ type: 'message',
38
+ data: {
39
+ role: msg.role,
40
+ id: msg.id,
41
+ contentLength: msg.content.length,
42
+ },
43
+ });
44
+ }
45
+ logEvent(type, data) {
46
+ this.addEntry({ timestamp: new Date().toISOString(), type, data });
47
+ }
48
+ addEntry(entry) {
49
+ this.entries.push(entry);
50
+ if (this.entries.length > this.maxEntries) {
51
+ this.entries.shift();
52
+ }
53
+ this.logger.debug(`Audit: ${entry.type}`, entry.data);
54
+ }
55
+ async flush() {
56
+ try {
57
+ await promises_1.default.mkdir(node_path_1.default.dirname(this.logPath), { recursive: true });
58
+ const content = this.entries.map(e => JSON.stringify(e)).join('\n');
59
+ await promises_1.default.appendFile(this.logPath, content + '\n', 'utf-8');
60
+ }
61
+ catch (err) {
62
+ this.logger.error('Failed to flush audit log', { error: err });
63
+ }
64
+ }
65
+ getRecent(count = 10) {
66
+ return this.entries.slice(-count);
67
+ }
68
+ clear() {
69
+ this.entries = [];
70
+ }
71
+ }
72
+ exports.AuditService = AuditService;
73
+ //# sourceMappingURL=AuditService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditService.js","sourceRoot":"","sources":["../../src/services/AuditService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { SecurityConfig, ApprovalMode } from '../types/config.js';
2
+ import { ToolDefinition } from '../types/tool.js';
3
+ export declare class SecurityService {
4
+ private config;
5
+ private logger;
6
+ constructor(config: SecurityConfig);
7
+ isCommandAllowed(command: string): boolean;
8
+ isPathAllowed(targetPath: string, allowedPaths: string[]): boolean;
9
+ requiresApproval(tool: ToolDefinition): boolean;
10
+ getApprovalMode(): ApprovalMode;
11
+ setApprovalMode(mode: ApprovalMode): void;
12
+ requestApproval(toolName: string, input: Record<string, unknown>): Promise<boolean>;
13
+ validateFileSize(size: number): boolean;
14
+ }
15
+ //# sourceMappingURL=SecurityService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecurityService.d.ts","sourceRoot":"","sources":["../../src/services/SecurityService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,cAAc;IAIlC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAa1C,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO;IAclE,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO;IAU/C,eAAe,IAAI,YAAY;IAI/B,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAInC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAMzF,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAGxC"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SecurityService = void 0;
7
+ const node_path_1 = __importDefault(require("node:path"));
8
+ const logger_js_1 = require("../utils/logger.js");
9
+ class SecurityService {
10
+ config;
11
+ logger = (0, logger_js_1.getLogger)();
12
+ constructor(config) {
13
+ this.config = config;
14
+ }
15
+ isCommandAllowed(command) {
16
+ const normalized = command.toLowerCase().trim();
17
+ for (const blocked of this.config.blockedCommands) {
18
+ if (normalized.includes(blocked.toLowerCase())) {
19
+ this.logger.warn(`Blocked command detected`, { command, blocked });
20
+ return false;
21
+ }
22
+ }
23
+ return true;
24
+ }
25
+ isPathAllowed(targetPath, allowedPaths) {
26
+ const resolved = node_path_1.default.resolve(targetPath);
27
+ for (const allowed of allowedPaths) {
28
+ const resolvedAllowed = node_path_1.default.resolve(allowed);
29
+ if (resolved.startsWith(resolvedAllowed)) {
30
+ return true;
31
+ }
32
+ }
33
+ this.logger.warn(`Path access denied`, { path: targetPath });
34
+ return false;
35
+ }
36
+ requiresApproval(tool) {
37
+ if (this.config.approvalMode === 'deny') {
38
+ return true;
39
+ }
40
+ if (this.config.approvalMode === 'auto') {
41
+ return false;
42
+ }
43
+ return tool.requiresApproval || tool.dangerous;
44
+ }
45
+ getApprovalMode() {
46
+ return this.config.approvalMode;
47
+ }
48
+ setApprovalMode(mode) {
49
+ this.config.approvalMode = mode;
50
+ }
51
+ async requestApproval(toolName, input) {
52
+ this.logger.info(`Approval requested for tool`, { tool: toolName, input });
53
+ return false;
54
+ }
55
+ validateFileSize(size) {
56
+ return size <= this.config.maxFileSize;
57
+ }
58
+ }
59
+ exports.SecurityService = SecurityService;
60
+ //# sourceMappingURL=SecurityService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecurityService.js","sourceRoot":"","sources":["../../src/services/SecurityService.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA6B;AAG7B,kDAA+C;AAE/C,MAAa,eAAe;IAClB,MAAM,CAAiB;IACvB,MAAM,GAAG,IAAA,qBAAS,GAAE,CAAC;IAE7B,YAAY,MAAsB;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,gBAAgB,CAAC,OAAe;QAC9B,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAEhD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YAClD,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBAC/C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;gBACnE,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,UAAkB,EAAE,YAAsB;QACtD,MAAM,QAAQ,GAAG,mBAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAE1C,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;YACnC,MAAM,eAAe,GAAG,mBAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAI,QAAQ,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBACzC,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAC7D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gBAAgB,CAAC,IAAoB;QACnC,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;YACxC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,SAAS,CAAC;IACjD,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;IAClC,CAAC;IAED,eAAe,CAAC,IAAkB;QAChC,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,QAAgB,EAAE,KAA8B;QACpE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAE3E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gBAAgB,CAAC,IAAY;QAC3B,OAAO,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;IACzC,CAAC;CACF;AA9DD,0CA8DC"}
@@ -0,0 +1,19 @@
1
+ import { BaseTool } from '../tools/BaseTool.js';
2
+ import { SecurityService } from './SecurityService.js';
3
+ import { AuditService } from './AuditService.js';
4
+ import { ToolContext, ToolCall, ToolResult, ToolDefinition } from '../types/tool.js';
5
+ export declare class ToolService {
6
+ private tools;
7
+ private security;
8
+ private audit;
9
+ private logger;
10
+ constructor(security: SecurityService, audit: AuditService);
11
+ private registerBuiltIn;
12
+ register(tool: BaseTool): void;
13
+ unregister(name: string): void;
14
+ getTool(name: string): BaseTool | undefined;
15
+ getTools(): ToolDefinition[];
16
+ getToolNames(): string[];
17
+ execute(call: ToolCall, context: ToolContext): Promise<ToolResult>;
18
+ }
19
+ //# sourceMappingURL=ToolService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolService.d.ts","sourceRoot":"","sources":["../../src/services/ToolService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAyB,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAG5G,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,MAAM,CAAe;gBAEjB,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,YAAY;IAM1D,OAAO,CAAC,eAAe;IAMvB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAK9B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK9B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAI3C,QAAQ,IAAI,cAAc,EAAE;IAI5B,YAAY,IAAI,MAAM,EAAE;IAIlB,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;CA+CzE"}