@ritwikamit/cl8 0.1.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +547 -0
- package/dist/agents/Agent.d.ts +27 -0
- package/dist/agents/Agent.d.ts.map +1 -0
- package/dist/agents/Agent.js +197 -0
- package/dist/agents/Agent.js.map +1 -0
- package/dist/agents/Executor.d.ts +12 -0
- package/dist/agents/Executor.d.ts.map +1 -0
- package/dist/agents/Executor.js +65 -0
- package/dist/agents/Executor.js.map +1 -0
- package/dist/agents/Planner.d.ts +14 -0
- package/dist/agents/Planner.d.ts.map +1 -0
- package/dist/agents/Planner.js +105 -0
- package/dist/agents/Planner.js.map +1 -0
- package/dist/agents/Reflector.d.ts +19 -0
- package/dist/agents/Reflector.d.ts.map +1 -0
- package/dist/agents/Reflector.js +97 -0
- package/dist/agents/Reflector.js.map +1 -0
- package/dist/agents/index.d.ts +5 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +12 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/bin/cl8.d.ts +3 -0
- package/dist/bin/cl8.d.ts.map +1 -0
- package/dist/bin/cl8.js +19 -0
- package/dist/bin/cl8.js.map +1 -0
- package/dist/bin/jarvis.d.ts +3 -0
- package/dist/bin/jarvis.d.ts.map +1 -0
- package/dist/bin/jarvis.js +19 -0
- package/dist/bin/jarvis.js.map +1 -0
- package/dist/cli/commands/chat.d.ts +12 -0
- package/dist/cli/commands/chat.d.ts.map +1 -0
- package/dist/cli/commands/chat.js +52 -0
- package/dist/cli/commands/chat.js.map +1 -0
- package/dist/cli/commands/config.d.ts +8 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +69 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +90 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/session.d.ts +6 -0
- package/dist/cli/commands/session.d.ts.map +1 -0
- package/dist/cli/commands/session.js +70 -0
- package/dist/cli/commands/session.js.map +1 -0
- package/dist/cli/hooks/useHistory.d.ts +14 -0
- package/dist/cli/hooks/useHistory.d.ts.map +1 -0
- package/dist/cli/hooks/useHistory.js +67 -0
- package/dist/cli/hooks/useHistory.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +115 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/env.d.ts +7 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +56 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/index.d.ts +10 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +125 -0
- package/dist/config/index.js.map +1 -0
- package/dist/core/Boot.d.ts +34 -0
- package/dist/core/Boot.d.ts.map +1 -0
- package/dist/core/Boot.js +97 -0
- package/dist/core/Boot.js.map +1 -0
- package/dist/core/Engine.d.ts +40 -0
- package/dist/core/Engine.d.ts.map +1 -0
- package/dist/core/Engine.js +127 -0
- package/dist/core/Engine.js.map +1 -0
- package/dist/core/Loop.d.ts +22 -0
- package/dist/core/Loop.d.ts.map +1 -0
- package/dist/core/Loop.js +221 -0
- package/dist/core/Loop.js.map +1 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +8 -0
- package/dist/core/index.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/ConversationMemory.d.ts +24 -0
- package/dist/memory/ConversationMemory.d.ts.map +1 -0
- package/dist/memory/ConversationMemory.js +134 -0
- package/dist/memory/ConversationMemory.js.map +1 -0
- package/dist/memory/SessionManager.d.ts +19 -0
- package/dist/memory/SessionManager.d.ts.map +1 -0
- package/dist/memory/SessionManager.js +104 -0
- package/dist/memory/SessionManager.js.map +1 -0
- package/dist/memory/VectorMemory.d.ts +16 -0
- package/dist/memory/VectorMemory.d.ts.map +1 -0
- package/dist/memory/VectorMemory.js +87 -0
- package/dist/memory/VectorMemory.js.map +1 -0
- package/dist/memory/index.d.ts +4 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +10 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/plugins/PluginLoader.d.ts +9 -0
- package/dist/plugins/PluginLoader.d.ts.map +1 -0
- package/dist/plugins/PluginLoader.js +86 -0
- package/dist/plugins/PluginLoader.js.map +1 -0
- package/dist/plugins/PluginManager.d.ts +18 -0
- package/dist/plugins/PluginManager.d.ts.map +1 -0
- package/dist/plugins/PluginManager.js +63 -0
- package/dist/plugins/PluginManager.js.map +1 -0
- package/dist/plugins/index.d.ts +11 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +16 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/providers/BaseProvider.d.ts +17 -0
- package/dist/providers/BaseProvider.d.ts.map +1 -0
- package/dist/providers/BaseProvider.js +33 -0
- package/dist/providers/BaseProvider.js.map +1 -0
- package/dist/providers/GeminiProvider.d.ts +14 -0
- package/dist/providers/GeminiProvider.d.ts.map +1 -0
- package/dist/providers/GeminiProvider.js +79 -0
- package/dist/providers/GeminiProvider.js.map +1 -0
- package/dist/providers/OllamaProvider.d.ts +14 -0
- package/dist/providers/OllamaProvider.d.ts.map +1 -0
- package/dist/providers/OllamaProvider.js +131 -0
- package/dist/providers/OllamaProvider.js.map +1 -0
- package/dist/providers/OpenAIProvider.d.ts +13 -0
- package/dist/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/providers/OpenAIProvider.js +109 -0
- package/dist/providers/OpenAIProvider.js.map +1 -0
- package/dist/providers/index.d.ts +23 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +57 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/services/AuditService.d.ts +23 -0
- package/dist/services/AuditService.d.ts.map +1 -0
- package/dist/services/AuditService.js +73 -0
- package/dist/services/AuditService.js.map +1 -0
- package/dist/services/SecurityService.d.ts +15 -0
- package/dist/services/SecurityService.d.ts.map +1 -0
- package/dist/services/SecurityService.js +60 -0
- package/dist/services/SecurityService.js.map +1 -0
- package/dist/services/ToolService.d.ts +19 -0
- package/dist/services/ToolService.d.ts.map +1 -0
- package/dist/services/ToolService.js +85 -0
- package/dist/services/ToolService.js.map +1 -0
- package/dist/services/index.d.ts +4 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +10 -0
- package/dist/services/index.js.map +1 -0
- package/dist/tools/BaseTool.d.ts +12 -0
- package/dist/tools/BaseTool.d.ts.map +1 -0
- package/dist/tools/BaseTool.js +25 -0
- package/dist/tools/BaseTool.js.map +1 -0
- package/dist/tools/FileTool.d.ts +14 -0
- package/dist/tools/FileTool.d.ts.map +1 -0
- package/dist/tools/FileTool.js +136 -0
- package/dist/tools/FileTool.js.map +1 -0
- package/dist/tools/SearchTool.d.ts +10 -0
- package/dist/tools/SearchTool.d.ts.map +1 -0
- package/dist/tools/SearchTool.js +117 -0
- package/dist/tools/SearchTool.js.map +1 -0
- package/dist/tools/ShellTool.d.ts +8 -0
- package/dist/tools/ShellTool.d.ts.map +1 -0
- package/dist/tools/ShellTool.js +87 -0
- package/dist/tools/ShellTool.js.map +1 -0
- package/dist/tools/index.d.ts +10 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +29 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types/agent.d.ts +49 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js +3 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/config.d.ts +52 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +3 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +23 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/memory.d.ts +47 -0
- package/dist/types/memory.d.ts.map +1 -0
- package/dist/types/memory.js +3 -0
- package/dist/types/memory.js.map +1 -0
- package/dist/types/plugin.d.ts +31 -0
- package/dist/types/plugin.d.ts.map +1 -0
- package/dist/types/plugin.js +3 -0
- package/dist/types/plugin.js.map +1 -0
- package/dist/types/provider.d.ts +43 -0
- package/dist/types/provider.d.ts.map +1 -0
- package/dist/types/provider.js +3 -0
- package/dist/types/provider.js.map +1 -0
- package/dist/types/tool.d.ts +41 -0
- package/dist/types/tool.d.ts.map +1 -0
- package/dist/types/tool.js +3 -0
- package/dist/types/tool.js.map +1 -0
- package/dist/ui/MarkdownRenderer.d.ts +17 -0
- package/dist/ui/MarkdownRenderer.d.ts.map +1 -0
- package/dist/ui/MarkdownRenderer.js +148 -0
- package/dist/ui/MarkdownRenderer.js.map +1 -0
- package/dist/ui/Spinner.d.ts +14 -0
- package/dist/ui/Spinner.d.ts.map +1 -0
- package/dist/ui/Spinner.js +79 -0
- package/dist/ui/Spinner.js.map +1 -0
- package/dist/ui/StreamingOutput.d.ts +15 -0
- package/dist/ui/StreamingOutput.d.ts.map +1 -0
- package/dist/ui/StreamingOutput.js +48 -0
- package/dist/ui/StreamingOutput.js.map +1 -0
- package/dist/ui/context-monitor.d.ts +11 -0
- package/dist/ui/context-monitor.d.ts.map +1 -0
- package/dist/ui/context-monitor.js +39 -0
- package/dist/ui/context-monitor.js.map +1 -0
- package/dist/ui/index.d.ts +14 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +30 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/onboarding.d.ts +9 -0
- package/dist/ui/onboarding.d.ts.map +1 -0
- package/dist/ui/onboarding.js +40 -0
- package/dist/ui/onboarding.js.map +1 -0
- package/dist/ui/pixel-logo.d.ts +2 -0
- package/dist/ui/pixel-logo.d.ts.map +1 -0
- package/dist/ui/pixel-logo.js +32 -0
- package/dist/ui/pixel-logo.js.map +1 -0
- package/dist/ui/spinner-manager.d.ts +18 -0
- package/dist/ui/spinner-manager.d.ts.map +1 -0
- package/dist/ui/spinner-manager.js +109 -0
- package/dist/ui/spinner-manager.js.map +1 -0
- package/dist/ui/splash-screen/gradient-logo.d.ts +2 -0
- package/dist/ui/splash-screen/gradient-logo.d.ts.map +1 -0
- package/dist/ui/splash-screen/gradient-logo.js +20 -0
- package/dist/ui/splash-screen/gradient-logo.js.map +1 -0
- package/dist/ui/splash.d.ts +18 -0
- package/dist/ui/splash.d.ts.map +1 -0
- package/dist/ui/splash.js +68 -0
- package/dist/ui/splash.js.map +1 -0
- package/dist/ui/startup-tips.json +22 -0
- package/dist/ui/status-bar.d.ts +17 -0
- package/dist/ui/status-bar.d.ts.map +1 -0
- package/dist/ui/status-bar.js +54 -0
- package/dist/ui/status-bar.js.map +1 -0
- package/dist/ui/theme-manager.d.ts +22 -0
- package/dist/ui/theme-manager.d.ts.map +1 -0
- package/dist/ui/theme-manager.js +91 -0
- package/dist/ui/theme-manager.js.map +1 -0
- package/dist/ui/types.d.ts +19 -0
- package/dist/ui/types.d.ts.map +1 -0
- package/dist/ui/types.js +3 -0
- package/dist/ui/types.js.map +1 -0
- package/dist/ui/typing-animation.d.ts +9 -0
- package/dist/ui/typing-animation.d.ts.map +1 -0
- package/dist/ui/typing-animation.js +36 -0
- package/dist/ui/typing-animation.js.map +1 -0
- package/dist/ui/workspace-panel.d.ts +5 -0
- package/dist/ui/workspace-panel.d.ts.map +1 -0
- package/dist/ui/workspace-panel.js +30 -0
- package/dist/ui/workspace-panel.js.map +1 -0
- package/dist/utils/crypto.d.ts +6 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/crypto.js +54 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +19 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +7 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +57 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +88 -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"}
|