gthinking 1.3.0 → 2.1.1
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/.eslintrc.js +34 -0
- package/ANALYSIS_SUMMARY.md +363 -0
- package/README.md +230 -250
- package/dist/analysis/analysis-engine.d.ts +63 -0
- package/dist/analysis/analysis-engine.d.ts.map +1 -0
- package/dist/analysis/analysis-engine.js +322 -0
- package/dist/analysis/analysis-engine.js.map +1 -0
- package/dist/core/config.d.ts +1419 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +361 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/engine.d.ts +176 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +604 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/errors.d.ts +153 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +287 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/{types.js → core/index.js} +8 -4
- package/dist/core/index.js.map +1 -0
- package/dist/core/pipeline.d.ts +121 -0
- package/dist/core/pipeline.d.ts.map +1 -0
- package/dist/core/pipeline.js +289 -0
- package/dist/core/pipeline.js.map +1 -0
- package/dist/core/rate-limiter.d.ts +58 -0
- package/dist/core/rate-limiter.d.ts.map +1 -0
- package/dist/core/rate-limiter.js +133 -0
- package/dist/core/rate-limiter.js.map +1 -0
- package/dist/core/session-manager.d.ts +96 -0
- package/dist/core/session-manager.d.ts.map +1 -0
- package/dist/core/session-manager.js +223 -0
- package/dist/core/session-manager.js.map +1 -0
- package/dist/creativity/creativity-engine.d.ts +6 -0
- package/dist/creativity/creativity-engine.d.ts.map +1 -0
- package/dist/creativity/creativity-engine.js +17 -0
- package/dist/creativity/creativity-engine.js.map +1 -0
- package/dist/index.d.ts +24 -32
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +130 -104
- package/dist/index.js.map +1 -1
- package/dist/learning/learning-engine.d.ts +6 -0
- package/dist/learning/learning-engine.d.ts.map +1 -0
- package/dist/learning/learning-engine.js +17 -0
- package/dist/learning/learning-engine.js.map +1 -0
- package/dist/llm/index.d.ts +10 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +26 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/llm-service.d.ts +109 -0
- package/dist/llm/llm-service.d.ts.map +1 -0
- package/dist/llm/llm-service.js +224 -0
- package/dist/llm/llm-service.js.map +1 -0
- package/dist/llm/providers/base.d.ts +85 -0
- package/dist/llm/providers/base.d.ts.map +1 -0
- package/dist/llm/providers/base.js +57 -0
- package/dist/llm/providers/base.js.map +1 -0
- package/dist/llm/providers/cli.d.ts +23 -0
- package/dist/llm/providers/cli.d.ts.map +1 -0
- package/dist/llm/providers/cli.js +158 -0
- package/dist/llm/providers/cli.js.map +1 -0
- package/dist/llm/providers/gemini.d.ts +30 -0
- package/dist/llm/providers/gemini.d.ts.map +1 -0
- package/dist/llm/providers/gemini.js +168 -0
- package/dist/llm/providers/gemini.js.map +1 -0
- package/dist/llm/sanitization.d.ts +50 -0
- package/dist/llm/sanitization.d.ts.map +1 -0
- package/dist/llm/sanitization.js +149 -0
- package/dist/llm/sanitization.js.map +1 -0
- package/dist/{server.d.ts.map → mcp/server.d.ts.map} +1 -1
- package/dist/mcp/server.js +108 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/planning/planning-engine.d.ts +6 -0
- package/dist/planning/planning-engine.d.ts.map +1 -0
- package/dist/planning/planning-engine.js +17 -0
- package/dist/planning/planning-engine.js.map +1 -0
- package/dist/reasoning/reasoning-engine.d.ts +6 -0
- package/dist/reasoning/reasoning-engine.d.ts.map +1 -0
- package/dist/reasoning/reasoning-engine.js +17 -0
- package/dist/reasoning/reasoning-engine.js.map +1 -0
- package/dist/search/search-engine.d.ts +99 -0
- package/dist/search/search-engine.d.ts.map +1 -0
- package/dist/search/search-engine.js +271 -0
- package/dist/search/search-engine.js.map +1 -0
- package/dist/synthesis/synthesis-engine.d.ts +6 -0
- package/dist/synthesis/synthesis-engine.d.ts.map +1 -0
- package/dist/synthesis/synthesis-engine.js +17 -0
- package/dist/synthesis/synthesis-engine.js.map +1 -0
- package/dist/types/analysis.d.ts +1534 -49
- package/dist/types/analysis.d.ts.map +1 -1
- package/dist/types/analysis.js +250 -0
- package/dist/types/analysis.js.map +1 -1
- package/dist/types/core.d.ts +257 -30
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/core.js +148 -18
- package/dist/types/core.js.map +1 -1
- package/dist/types/creativity.d.ts +2871 -56
- package/dist/types/creativity.d.ts.map +1 -1
- package/dist/types/creativity.js +195 -0
- package/dist/types/creativity.js.map +1 -1
- package/dist/types/index.d.ts +6 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +17 -2
- package/dist/types/index.js.map +1 -1
- package/dist/types/learning.d.ts +851 -61
- package/dist/types/learning.d.ts.map +1 -1
- package/dist/types/learning.js +155 -0
- package/dist/types/learning.js.map +1 -1
- package/dist/types/planning.d.ts +2223 -71
- package/dist/types/planning.d.ts.map +1 -1
- package/dist/types/planning.js +190 -0
- package/dist/types/planning.js.map +1 -1
- package/dist/types/reasoning.d.ts +2209 -72
- package/dist/types/reasoning.d.ts.map +1 -1
- package/dist/types/reasoning.js +200 -1
- package/dist/types/reasoning.js.map +1 -1
- package/dist/types/search.d.ts +981 -53
- package/dist/types/search.d.ts.map +1 -1
- package/dist/types/search.js +137 -0
- package/dist/types/search.js.map +1 -1
- package/dist/types/synthesis.d.ts +583 -38
- package/dist/types/synthesis.d.ts.map +1 -1
- package/dist/types/synthesis.js +138 -0
- package/dist/types/synthesis.js.map +1 -1
- package/dist/utils/cache.d.ts +144 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +288 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/id-generator.d.ts +89 -0
- package/dist/utils/id-generator.d.ts.map +1 -0
- package/dist/utils/id-generator.js +132 -0
- package/dist/utils/id-generator.js.map +1 -0
- package/dist/utils/index.d.ts +11 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +33 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +142 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +248 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/metrics.d.ts +149 -0
- package/dist/utils/metrics.d.ts.map +1 -0
- package/dist/utils/metrics.js +296 -0
- package/dist/utils/metrics.js.map +1 -0
- package/dist/utils/timer.d.ts +7 -0
- package/dist/utils/timer.d.ts.map +1 -0
- package/dist/utils/timer.js +17 -0
- package/dist/utils/timer.js.map +1 -0
- package/dist/utils/validation.d.ts +147 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +275 -0
- package/dist/utils/validation.js.map +1 -0
- package/docs/API.md +411 -0
- package/docs/ARCHITECTURE.md +271 -0
- package/docs/CHANGELOG.md +283 -0
- package/jest.config.js +28 -0
- package/package.json +43 -30
- package/src/analysis/analysis-engine.ts +383 -0
- package/src/core/config.ts +406 -0
- package/src/core/engine.ts +785 -0
- package/src/core/errors.ts +349 -0
- package/src/core/index.ts +12 -0
- package/src/core/pipeline.ts +424 -0
- package/src/core/rate-limiter.ts +155 -0
- package/src/core/session-manager.ts +269 -0
- package/src/creativity/creativity-engine.ts +14 -0
- package/src/index.ts +178 -0
- package/src/learning/learning-engine.ts +14 -0
- package/src/llm/index.ts +10 -0
- package/src/llm/llm-service.ts +285 -0
- package/src/llm/providers/base.ts +146 -0
- package/src/llm/providers/cli.ts +186 -0
- package/src/llm/providers/gemini.ts +201 -0
- package/src/llm/sanitization.ts +178 -0
- package/src/mcp/server.ts +117 -0
- package/src/planning/planning-engine.ts +14 -0
- package/src/reasoning/reasoning-engine.ts +14 -0
- package/src/search/search-engine.ts +333 -0
- package/src/synthesis/synthesis-engine.ts +14 -0
- package/src/types/analysis.ts +337 -0
- package/src/types/core.ts +342 -0
- package/src/types/creativity.ts +268 -0
- package/src/types/index.ts +31 -0
- package/src/types/learning.ts +215 -0
- package/src/types/planning.ts +251 -0
- package/src/types/reasoning.ts +288 -0
- package/src/types/search.ts +192 -0
- package/src/types/synthesis.ts +187 -0
- package/src/utils/cache.ts +363 -0
- package/src/utils/id-generator.ts +135 -0
- package/src/utils/index.ts +22 -0
- package/src/utils/logger.ts +290 -0
- package/src/utils/metrics.ts +380 -0
- package/src/utils/timer.ts +15 -0
- package/src/utils/validation.ts +297 -0
- package/tests/setup.ts +22 -0
- package/tests/unit/cache.test.ts +189 -0
- package/tests/unit/engine.test.ts +179 -0
- package/tests/unit/validation.test.ts +218 -0
- package/tsconfig.json +17 -12
- package/GEMINI.md +0 -68
- package/analysis.ts +0 -1063
- package/creativity.ts +0 -1055
- package/dist/analysis.d.ts +0 -54
- package/dist/analysis.d.ts.map +0 -1
- package/dist/analysis.js +0 -866
- package/dist/analysis.js.map +0 -1
- package/dist/creativity.d.ts +0 -81
- package/dist/creativity.d.ts.map +0 -1
- package/dist/creativity.js +0 -828
- package/dist/creativity.js.map +0 -1
- package/dist/engine.d.ts +0 -90
- package/dist/engine.d.ts.map +0 -1
- package/dist/engine.js +0 -720
- package/dist/engine.js.map +0 -1
- package/dist/examples.d.ts +0 -7
- package/dist/examples.d.ts.map +0 -1
- package/dist/examples.js +0 -506
- package/dist/examples.js.map +0 -1
- package/dist/learning.d.ts +0 -72
- package/dist/learning.d.ts.map +0 -1
- package/dist/learning.js +0 -615
- package/dist/learning.js.map +0 -1
- package/dist/llm-service.d.ts +0 -21
- package/dist/llm-service.d.ts.map +0 -1
- package/dist/llm-service.js +0 -100
- package/dist/llm-service.js.map +0 -1
- package/dist/planning.d.ts +0 -62
- package/dist/planning.d.ts.map +0 -1
- package/dist/planning.js +0 -886
- package/dist/planning.js.map +0 -1
- package/dist/reasoning.d.ts +0 -73
- package/dist/reasoning.d.ts.map +0 -1
- package/dist/reasoning.js +0 -845
- package/dist/reasoning.js.map +0 -1
- package/dist/search-discovery.d.ts +0 -73
- package/dist/search-discovery.d.ts.map +0 -1
- package/dist/search-discovery.js +0 -548
- package/dist/search-discovery.js.map +0 -1
- package/dist/server.js +0 -113
- package/dist/server.js.map +0 -1
- package/dist/types/engine.d.ts +0 -55
- package/dist/types/engine.d.ts.map +0 -1
- package/dist/types/engine.js +0 -3
- package/dist/types/engine.js.map +0 -1
- package/dist/types.d.ts +0 -6
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/engine.ts +0 -1009
- package/examples.ts +0 -717
- package/index.ts +0 -106
- package/learning.ts +0 -779
- package/llm-service.ts +0 -120
- package/planning.ts +0 -1101
- package/reasoning.ts +0 -1079
- package/search-discovery.ts +0 -700
- package/server.ts +0 -115
- package/types/analysis.ts +0 -69
- package/types/core.ts +0 -90
- package/types/creativity.ts +0 -72
- package/types/engine.ts +0 -60
- package/types/index.ts +0 -9
- package/types/learning.ts +0 -69
- package/types/planning.ts +0 -85
- package/types/reasoning.ts +0 -92
- package/types/search.ts +0 -58
- package/types/synthesis.ts +0 -43
- package/types.ts +0 -6
- /package/dist/{server.d.ts → mcp/server.d.ts} +0 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CLIProvider = void 0;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
const base_1 = require("./base");
|
|
6
|
+
const errors_1 = require("../../core/errors");
|
|
7
|
+
const logger_1 = require("../../utils/logger");
|
|
8
|
+
class CLIProvider extends base_1.BaseLLMProvider {
|
|
9
|
+
name = 'cli';
|
|
10
|
+
availableModels = ['local-default']; // CLI usually handles the model selection internally or via args
|
|
11
|
+
command;
|
|
12
|
+
defaultArgs;
|
|
13
|
+
promptPassingMethod;
|
|
14
|
+
promptFlag;
|
|
15
|
+
constructor(config) {
|
|
16
|
+
super({
|
|
17
|
+
apiKey: 'local-auth', // Placeholder for base class requirement
|
|
18
|
+
baseUrl: 'local', // Placeholder
|
|
19
|
+
defaultModel: 'default',
|
|
20
|
+
timeoutMs: config.timeoutMs,
|
|
21
|
+
maxRetries: config.maxRetries
|
|
22
|
+
});
|
|
23
|
+
this.command = config.command;
|
|
24
|
+
this.defaultArgs = config.args || [];
|
|
25
|
+
this.promptPassingMethod = config.promptPassingMethod || 'stdin';
|
|
26
|
+
this.promptFlag = config.promptFlag;
|
|
27
|
+
}
|
|
28
|
+
// Helper to extract the actual prompt from messages
|
|
29
|
+
// CLIs usually accept a single prompt string, not a full chat history JSON
|
|
30
|
+
getPromptText(messages) {
|
|
31
|
+
// Strategy: Concatenate system prompt and user messages
|
|
32
|
+
return messages.map(m => {
|
|
33
|
+
if (m.role === 'system')
|
|
34
|
+
return `System: ${m.content}\n`;
|
|
35
|
+
if (m.role === 'user')
|
|
36
|
+
return `User: ${m.content}\n`;
|
|
37
|
+
return `Assistant: ${m.content}\n`;
|
|
38
|
+
}).join('\n') + "\nResponse:";
|
|
39
|
+
}
|
|
40
|
+
// Strategy for simple CLIs (like 'gemini "prompt"'):
|
|
41
|
+
// If the CLI accepts the prompt as the last argument
|
|
42
|
+
getLatestPrompt(messages) {
|
|
43
|
+
const lastUserMsg = [...messages].reverse().find(m => m.role === 'user');
|
|
44
|
+
return lastUserMsg ? lastUserMsg.content : '';
|
|
45
|
+
}
|
|
46
|
+
async complete(messages, options = {}) {
|
|
47
|
+
return this.withRetry(async () => {
|
|
48
|
+
const prompt = this.getLatestPrompt(messages);
|
|
49
|
+
let args = [...this.defaultArgs];
|
|
50
|
+
// Handle Prompt passing logic
|
|
51
|
+
if (this.promptPassingMethod === 'arg') {
|
|
52
|
+
if (this.promptFlag) {
|
|
53
|
+
args.push(this.promptFlag);
|
|
54
|
+
}
|
|
55
|
+
args.push(prompt);
|
|
56
|
+
}
|
|
57
|
+
return new Promise((resolve, reject) => {
|
|
58
|
+
logger_1.logger.debug(`Executing CLI command: ${this.command}`, { args, method: this.promptPassingMethod });
|
|
59
|
+
const child = (0, child_process_1.spawn)(this.command, args, {
|
|
60
|
+
env: { ...process.env },
|
|
61
|
+
shell: false,
|
|
62
|
+
stdio: ['pipe', 'pipe', 'pipe']
|
|
63
|
+
});
|
|
64
|
+
let stdout = '';
|
|
65
|
+
let stderr = '';
|
|
66
|
+
child.stdout.on('data', (data) => {
|
|
67
|
+
stdout += data.toString();
|
|
68
|
+
});
|
|
69
|
+
child.stderr.on('data', (data) => {
|
|
70
|
+
stderr += data.toString();
|
|
71
|
+
});
|
|
72
|
+
child.on('close', (code) => {
|
|
73
|
+
if (code !== 0) {
|
|
74
|
+
logger_1.logger.error(`CLI execution failed`, { code, stderr });
|
|
75
|
+
reject(new errors_1.LLMError(`CLI command failed with code ${code}: ${stderr}`, 'cli'));
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
resolve({
|
|
79
|
+
content: stdout.trim(),
|
|
80
|
+
model: 'cli-default',
|
|
81
|
+
usage: {
|
|
82
|
+
promptTokens: 0,
|
|
83
|
+
completionTokens: 0,
|
|
84
|
+
totalTokens: 0
|
|
85
|
+
},
|
|
86
|
+
finishReason: 'stop'
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
child.on('error', (err) => {
|
|
91
|
+
reject(new errors_1.LLMError(`Failed to spawn CLI process: ${err.message}`, 'cli'));
|
|
92
|
+
});
|
|
93
|
+
// Only write to stdin if configured to do so
|
|
94
|
+
if (this.promptPassingMethod === 'stdin') {
|
|
95
|
+
child.stdin.write(prompt);
|
|
96
|
+
child.stdin.end();
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
// Even if passing by arg, we should end stdin to prevent hanging if process reads stdin
|
|
100
|
+
child.stdin.end();
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
async *stream(messages, options = {}) {
|
|
106
|
+
const prompt = this.getLatestPrompt(messages);
|
|
107
|
+
let args = [...this.defaultArgs];
|
|
108
|
+
if (this.promptPassingMethod === 'arg') {
|
|
109
|
+
if (this.promptFlag) {
|
|
110
|
+
args.push(this.promptFlag);
|
|
111
|
+
}
|
|
112
|
+
args.push(prompt);
|
|
113
|
+
}
|
|
114
|
+
const child = (0, child_process_1.spawn)(this.command, args, {
|
|
115
|
+
env: { ...process.env },
|
|
116
|
+
shell: false,
|
|
117
|
+
stdio: ['pipe', 'pipe', 'pipe']
|
|
118
|
+
});
|
|
119
|
+
if (this.promptPassingMethod === 'stdin') {
|
|
120
|
+
child.stdin.write(prompt);
|
|
121
|
+
child.stdin.end();
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
child.stdin.end();
|
|
125
|
+
}
|
|
126
|
+
// Use a manual iterator to handle backpressure properly would require
|
|
127
|
+
// implementing a ReadableStream-like behavior or simply yielding as we get data.
|
|
128
|
+
// For simplicity and effectiveness in this context, we'll iterate over the stdout stream.
|
|
129
|
+
try {
|
|
130
|
+
for await (const chunk of child.stdout) {
|
|
131
|
+
yield {
|
|
132
|
+
content: chunk.toString(),
|
|
133
|
+
isComplete: false
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
// Wait for process to exit to check for errors
|
|
137
|
+
await new Promise((resolve, reject) => {
|
|
138
|
+
child.on('close', (code) => {
|
|
139
|
+
if (code !== 0) {
|
|
140
|
+
// We can capture stderr here if needed, but for stream we just end
|
|
141
|
+
// Ideally we would have collected stderr separately
|
|
142
|
+
reject(new errors_1.LLMError(`CLI stream failed with code ${code}`, 'cli'));
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
resolve();
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
child.on('error', reject);
|
|
149
|
+
});
|
|
150
|
+
yield { content: '', isComplete: true };
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
throw new errors_1.LLMError(`Stream error: ${error.message}`, 'cli');
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
exports.CLIProvider = CLIProvider;
|
|
158
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/llm/providers/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Gemini LLM Provider
|
|
3
|
+
*
|
|
4
|
+
* @module llm/providers/gemini
|
|
5
|
+
*/
|
|
6
|
+
import { BaseLLMProvider, type LLMMessage, type LLMRequestOptions, type LLMResponse, type LLMStreamChunk } from './base';
|
|
7
|
+
/**
|
|
8
|
+
* Gemini provider configuration
|
|
9
|
+
*/
|
|
10
|
+
export interface GeminiConfig {
|
|
11
|
+
apiKey: string;
|
|
12
|
+
model?: string;
|
|
13
|
+
baseUrl?: string;
|
|
14
|
+
timeoutMs?: number;
|
|
15
|
+
maxRetries?: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Gemini provider implementation
|
|
19
|
+
*/
|
|
20
|
+
export declare class GeminiProvider extends BaseLLMProvider {
|
|
21
|
+
readonly name = "gemini";
|
|
22
|
+
readonly availableModels: string[];
|
|
23
|
+
constructor(config: GeminiConfig);
|
|
24
|
+
complete(messages: LLMMessage[], options?: LLMRequestOptions): Promise<LLMResponse>;
|
|
25
|
+
stream(messages: LLMMessage[], options?: LLMRequestOptions): AsyncGenerator<LLMStreamChunk>;
|
|
26
|
+
private buildRequestBody;
|
|
27
|
+
private parseResponse;
|
|
28
|
+
protected isNonRetryableError(error: unknown): boolean;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=gemini.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/gemini.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,eAAe,EAAE,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,QAAQ,CAAC;AAIzH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,eAAe;IACjD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,eAAe,WAItB;gBAEU,MAAM,EAAE,YAAY;IAU1B,QAAQ,CACZ,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,WAAW,CAAC;IA6BhB,MAAM,CACX,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,GAAE,iBAAsB,GAC9B,cAAc,CAAC,cAAc,CAAC;IAmDjC,OAAO,CAAC,gBAAgB;IAyCxB,OAAO,CAAC,aAAa;cAoBF,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;CAUhE"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Google Gemini LLM Provider
|
|
4
|
+
*
|
|
5
|
+
* @module llm/providers/gemini
|
|
6
|
+
*/
|
|
7
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
|
+
};
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.GeminiProvider = void 0;
|
|
12
|
+
const axios_1 = __importDefault(require("axios"));
|
|
13
|
+
const base_1 = require("./base");
|
|
14
|
+
const errors_1 = require("../../core/errors");
|
|
15
|
+
const logger_1 = require("../../utils/logger");
|
|
16
|
+
/**
|
|
17
|
+
* Gemini provider implementation
|
|
18
|
+
*/
|
|
19
|
+
class GeminiProvider extends base_1.BaseLLMProvider {
|
|
20
|
+
name = 'gemini';
|
|
21
|
+
availableModels = [
|
|
22
|
+
'gemini-1.5-pro',
|
|
23
|
+
'gemini-1.5-flash',
|
|
24
|
+
'gemini-1.0-pro',
|
|
25
|
+
];
|
|
26
|
+
constructor(config) {
|
|
27
|
+
super({
|
|
28
|
+
apiKey: config.apiKey,
|
|
29
|
+
baseUrl: config.baseUrl ?? 'https://generativelanguage.googleapis.com/v1beta',
|
|
30
|
+
defaultModel: config.model ?? 'gemini-1.5-pro',
|
|
31
|
+
timeoutMs: config.timeoutMs,
|
|
32
|
+
maxRetries: config.maxRetries,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
async complete(messages, options = {}) {
|
|
36
|
+
return this.withRetry(async () => {
|
|
37
|
+
const model = this.getModel(options);
|
|
38
|
+
const url = `${this.baseUrl}/models/${model}:generateContent?key=${this.apiKey}`;
|
|
39
|
+
const requestBody = this.buildRequestBody(messages, options);
|
|
40
|
+
try {
|
|
41
|
+
const response = await axios_1.default.post(url, requestBody, {
|
|
42
|
+
timeout: options.timeoutMs ?? this.timeoutMs,
|
|
43
|
+
headers: {
|
|
44
|
+
'Content-Type': 'application/json',
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
return this.parseResponse(response.data, model);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
if (axios_1.default.isAxiosError(error)) {
|
|
51
|
+
const statusCode = error.response?.status;
|
|
52
|
+
const errorMessage = error.response?.data?.error?.message ?? error.message;
|
|
53
|
+
logger_1.logger.error('Gemini API error', { statusCode, errorMessage });
|
|
54
|
+
throw new errors_1.LLMError(errorMessage, 'gemini', statusCode);
|
|
55
|
+
}
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
async *stream(messages, options = {}) {
|
|
61
|
+
const model = this.getModel(options);
|
|
62
|
+
const url = `${this.baseUrl}/models/${model}:streamGenerateContent?key=${this.apiKey}`;
|
|
63
|
+
const requestBody = this.buildRequestBody(messages, options);
|
|
64
|
+
try {
|
|
65
|
+
const response = await axios_1.default.post(url, requestBody, {
|
|
66
|
+
timeout: options.timeoutMs ?? this.timeoutMs,
|
|
67
|
+
headers: {
|
|
68
|
+
'Content-Type': 'application/json',
|
|
69
|
+
},
|
|
70
|
+
responseType: 'stream',
|
|
71
|
+
});
|
|
72
|
+
const stream = response.data;
|
|
73
|
+
for await (const chunk of stream) {
|
|
74
|
+
const lines = chunk.toString().split('\n').filter((line) => line.trim());
|
|
75
|
+
for (const line of lines) {
|
|
76
|
+
try {
|
|
77
|
+
const data = JSON.parse(line);
|
|
78
|
+
const content = data.candidates?.[0]?.content?.parts?.[0]?.text ?? '';
|
|
79
|
+
if (content) {
|
|
80
|
+
yield {
|
|
81
|
+
content,
|
|
82
|
+
isComplete: false,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// Ignore parse errors for non-JSON lines
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
yield {
|
|
92
|
+
content: '',
|
|
93
|
+
isComplete: true,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
if (axios_1.default.isAxiosError(error)) {
|
|
98
|
+
const statusCode = error.response?.status;
|
|
99
|
+
const errorMessage = error.response?.data?.error?.message ?? error.message;
|
|
100
|
+
throw new errors_1.LLMError(errorMessage, 'gemini', statusCode);
|
|
101
|
+
}
|
|
102
|
+
throw error;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
buildRequestBody(messages, options) {
|
|
106
|
+
const contents = messages.map(msg => ({
|
|
107
|
+
role: msg.role === 'user' ? 'user' : 'model',
|
|
108
|
+
parts: [{ text: msg.content }],
|
|
109
|
+
}));
|
|
110
|
+
const body = {
|
|
111
|
+
contents,
|
|
112
|
+
};
|
|
113
|
+
if (options.temperature !== undefined) {
|
|
114
|
+
body.generationConfig = {
|
|
115
|
+
...body.generationConfig,
|
|
116
|
+
temperature: options.temperature,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
if (options.maxTokens !== undefined) {
|
|
120
|
+
body.generationConfig = {
|
|
121
|
+
...body.generationConfig,
|
|
122
|
+
maxOutputTokens: options.maxTokens,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
if (options.topP !== undefined) {
|
|
126
|
+
body.generationConfig = {
|
|
127
|
+
...body.generationConfig,
|
|
128
|
+
topP: options.topP,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
if (options.stopSequences !== undefined) {
|
|
132
|
+
body.generationConfig = {
|
|
133
|
+
...body.generationConfig,
|
|
134
|
+
stopSequences: options.stopSequences,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
return body;
|
|
138
|
+
}
|
|
139
|
+
parseResponse(data, model) {
|
|
140
|
+
const candidate = data.candidates?.[0];
|
|
141
|
+
const content = candidate?.content;
|
|
142
|
+
const parts = content?.parts;
|
|
143
|
+
const text = parts?.[0]?.text ?? '';
|
|
144
|
+
const usage = data.usageMetadata;
|
|
145
|
+
return {
|
|
146
|
+
content: text,
|
|
147
|
+
model,
|
|
148
|
+
usage: {
|
|
149
|
+
promptTokens: usage?.promptTokenCount ?? 0,
|
|
150
|
+
completionTokens: usage?.candidatesTokenCount ?? 0,
|
|
151
|
+
totalTokens: usage?.totalTokenCount ?? 0,
|
|
152
|
+
},
|
|
153
|
+
finishReason: candidate?.finishReason ?? 'stop',
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
isNonRetryableError(error) {
|
|
157
|
+
if (axios_1.default.isAxiosError(error)) {
|
|
158
|
+
const statusCode = error.response?.status;
|
|
159
|
+
// Don't retry on client errors (4xx except 429)
|
|
160
|
+
if (statusCode !== undefined && statusCode >= 400 && statusCode < 500 && statusCode !== 429) {
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
exports.GeminiProvider = GeminiProvider;
|
|
168
|
+
//# sourceMappingURL=gemini.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../src/llm/providers/gemini.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;AAEH,kDAA0B;AAC1B,iCAAyH;AACzH,8CAA6C;AAC7C,+CAA4C;AAa5C;;GAEG;AACH,MAAa,cAAe,SAAQ,sBAAe;IACxC,IAAI,GAAG,QAAQ,CAAC;IAChB,eAAe,GAAG;QACzB,gBAAgB;QAChB,kBAAkB;QAClB,gBAAgB;KACjB,CAAC;IAEF,YAAY,MAAoB;QAC9B,KAAK,CAAC;YACJ,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,kDAAkD;YAC7E,YAAY,EAAE,MAAM,CAAC,KAAK,IAAI,gBAAgB;YAC9C,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,QAAsB,EACtB,UAA6B,EAAE;QAE/B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACrC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,WAAW,KAAK,wBAAwB,IAAI,CAAC,MAAM,EAAE,CAAC;YAEjF,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAE7D,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE;oBAClD,OAAO,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS;oBAC5C,OAAO,EAAE;wBACP,cAAc,EAAE,kBAAkB;qBACnC;iBACF,CAAC,CAAC;gBAEH,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAClD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,eAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;oBAC1C,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;oBAE3E,eAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;oBAC/D,MAAM,IAAI,iBAAQ,CAAC,YAAY,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;gBACzD,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,CAAC,MAAM,CACX,QAAsB,EACtB,UAA6B,EAAE;QAE/B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,WAAW,KAAK,8BAA8B,IAAI,CAAC,MAAM,EAAE,CAAC;QAEvF,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE7D,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE;gBAClD,OAAO,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS;gBAC5C,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,YAAY,EAAE,QAAQ;aACvB,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC;YAE7B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAEjF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,CAAC;wBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;wBAEtE,IAAI,OAAO,EAAE,CAAC;4BACZ,MAAM;gCACJ,OAAO;gCACP,UAAU,EAAE,KAAK;6BAClB,CAAC;wBACJ,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,yCAAyC;oBAC3C,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM;gBACJ,OAAO,EAAE,EAAE;gBACX,UAAU,EAAE,IAAI;aACjB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,eAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAC1C,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;gBAC3E,MAAM,IAAI,iBAAQ,CAAC,YAAY,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;YACzD,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,QAAsB,EAAE,OAA0B;QACzE,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACpC,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;YAC5C,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;SAC/B,CAAC,CAAC,CAAC;QAEJ,MAAM,IAAI,GAA4B;YACpC,QAAQ;SACT,CAAC;QAEF,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,gBAAgB,GAAG;gBACtB,GAAI,IAAI,CAAC,gBAA4C;gBACrD,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACpC,IAAI,CAAC,gBAAgB,GAAG;gBACtB,GAAI,IAAI,CAAC,gBAA4C;gBACrD,eAAe,EAAE,OAAO,CAAC,SAAS;aACnC,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,gBAAgB,GAAG;gBACtB,GAAI,IAAI,CAAC,gBAA4C;gBACrD,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACxC,IAAI,CAAC,gBAAgB,GAAG;gBACtB,GAAI,IAAI,CAAC,gBAA4C;gBACrD,aAAa,EAAE,OAAO,CAAC,aAAa;aACrC,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,aAAa,CAAC,IAA6B,EAAE,KAAa;QAChE,MAAM,SAAS,GAAI,IAAI,CAAC,UAAwB,EAAE,CAAC,CAAC,CAAwC,CAAC;QAC7F,MAAM,OAAO,GAAG,SAAS,EAAE,OAA8C,CAAC;QAC1E,MAAM,KAAK,GAAG,OAAO,EAAE,KAA6C,CAAC;QACrE,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;QAEpC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAmD,CAAC;QAEvE,OAAO;YACL,OAAO,EAAE,IAAI;YACb,KAAK;YACL,KAAK,EAAE;gBACL,YAAY,EAAE,KAAK,EAAE,gBAAgB,IAAI,CAAC;gBAC1C,gBAAgB,EAAE,KAAK,EAAE,oBAAoB,IAAI,CAAC;gBAClD,WAAW,EAAE,KAAK,EAAE,eAAe,IAAI,CAAC;aACzC;YACD,YAAY,EAAG,SAAS,EAAE,YAAuB,IAAI,MAAM;SAC5D,CAAC;IACJ,CAAC;IAEkB,mBAAmB,CAAC,KAAc;QACnD,IAAI,eAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;YAC1C,gDAAgD;YAChD,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;gBAC5F,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AA/KD,wCA+KC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Input Sanitization for LLM Service
|
|
3
|
+
*
|
|
4
|
+
* Provides security-focused sanitization to prevent prompt injection
|
|
5
|
+
* and other LLM-related security vulnerabilities.
|
|
6
|
+
*
|
|
7
|
+
* @module llm/sanitization
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Sanitization options
|
|
11
|
+
*/
|
|
12
|
+
export interface SanitizationOptions {
|
|
13
|
+
maxLength?: number;
|
|
14
|
+
allowCode?: boolean;
|
|
15
|
+
allowHTML?: boolean;
|
|
16
|
+
allowedTags?: string[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Sanitize a prompt for LLM use
|
|
20
|
+
*
|
|
21
|
+
* @param input - Raw input string
|
|
22
|
+
* @param options - Sanitization options
|
|
23
|
+
* @returns Sanitized string
|
|
24
|
+
*/
|
|
25
|
+
export declare function sanitizePrompt(input: string, options?: SanitizationOptions): string;
|
|
26
|
+
/**
|
|
27
|
+
* Validate that a prompt is safe to use
|
|
28
|
+
*
|
|
29
|
+
* @param input - Input to validate
|
|
30
|
+
* @returns Validation result
|
|
31
|
+
*/
|
|
32
|
+
export declare function validatePrompt(input: string): {
|
|
33
|
+
safe: boolean;
|
|
34
|
+
issues: string[];
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Escape special characters for safe inclusion in prompts
|
|
38
|
+
*
|
|
39
|
+
* @param input - Input to escape
|
|
40
|
+
* @returns Escaped string
|
|
41
|
+
*/
|
|
42
|
+
export declare function escapeSpecialChars(input: string): string;
|
|
43
|
+
/**
|
|
44
|
+
* Sanitize LLM response to remove any system-like content
|
|
45
|
+
*
|
|
46
|
+
* @param response - LLM response
|
|
47
|
+
* @returns Sanitized response
|
|
48
|
+
*/
|
|
49
|
+
export declare function sanitizeResponse(response: string): string;
|
|
50
|
+
//# sourceMappingURL=sanitization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitization.d.ts","sourceRoot":"","sources":["../../src/llm/sanitization.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAuCD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,MAAM,CA+CvF;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAwBjF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOxD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUzD"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Input Sanitization for LLM Service
|
|
4
|
+
*
|
|
5
|
+
* Provides security-focused sanitization to prevent prompt injection
|
|
6
|
+
* and other LLM-related security vulnerabilities.
|
|
7
|
+
*
|
|
8
|
+
* @module llm/sanitization
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.sanitizePrompt = sanitizePrompt;
|
|
12
|
+
exports.validatePrompt = validatePrompt;
|
|
13
|
+
exports.escapeSpecialChars = escapeSpecialChars;
|
|
14
|
+
exports.sanitizeResponse = sanitizeResponse;
|
|
15
|
+
const logger_1 = require("../utils/logger");
|
|
16
|
+
/**
|
|
17
|
+
* Default sanitization options
|
|
18
|
+
*/
|
|
19
|
+
const DEFAULT_OPTIONS = {
|
|
20
|
+
maxLength: 10000,
|
|
21
|
+
allowCode: false,
|
|
22
|
+
allowHTML: false,
|
|
23
|
+
allowedTags: [],
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Dangerous patterns that could indicate prompt injection
|
|
27
|
+
*/
|
|
28
|
+
const DANGEROUS_PATTERNS = [
|
|
29
|
+
// System prompt injection attempts
|
|
30
|
+
/ignore\s+(previous|prior|above)\s+instructions?/gi,
|
|
31
|
+
/disregard\s+(all\s+)?(previous|prior)\s+instructions?/gi,
|
|
32
|
+
/forget\s+(everything|all)\s+(you\s+)?(were\s+)?told/gi,
|
|
33
|
+
/system\s*:\s*/gi,
|
|
34
|
+
/user\s*:\s*/gi,
|
|
35
|
+
/assistant\s*:\s*/gi,
|
|
36
|
+
/\[system\s+prompt\]/gi,
|
|
37
|
+
/\[instructions\]/gi,
|
|
38
|
+
// Jailbreak attempts
|
|
39
|
+
/DAN\s*\(|do\s+anything\s+now/gi,
|
|
40
|
+
/jailbreak/gi,
|
|
41
|
+
/\bmode\s*:\s*\w+\s+unfiltered/gi,
|
|
42
|
+
/no\s+(restrictions?|limits?|filter)/gi,
|
|
43
|
+
// Delimiter manipulation
|
|
44
|
+
/```\s*system/gi,
|
|
45
|
+
/<\|system\|>/gi,
|
|
46
|
+
/<\|im_start\|>/gi,
|
|
47
|
+
/<\|im_end\|>/gi,
|
|
48
|
+
];
|
|
49
|
+
/**
|
|
50
|
+
* Sanitize a prompt for LLM use
|
|
51
|
+
*
|
|
52
|
+
* @param input - Raw input string
|
|
53
|
+
* @param options - Sanitization options
|
|
54
|
+
* @returns Sanitized string
|
|
55
|
+
*/
|
|
56
|
+
function sanitizePrompt(input, options = {}) {
|
|
57
|
+
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
58
|
+
// Check for dangerous patterns
|
|
59
|
+
for (const pattern of DANGEROUS_PATTERNS) {
|
|
60
|
+
if (pattern.test(input)) {
|
|
61
|
+
logger_1.logger.warn('Potentially dangerous pattern detected in prompt', { pattern: pattern.source });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
let sanitized = input;
|
|
65
|
+
// Remove null bytes and control characters
|
|
66
|
+
sanitized = sanitized.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g, '');
|
|
67
|
+
// Remove potential prompt injection markers
|
|
68
|
+
sanitized = sanitized.replace(/^(system|user|assistant)\s*:\s*/gim, '');
|
|
69
|
+
// Remove system prompt markers
|
|
70
|
+
sanitized = sanitized.replace(/\[system\s+prompt\]/gi, '');
|
|
71
|
+
sanitized = sanitized.replace(/\[instructions?\]/gi, '');
|
|
72
|
+
// Handle code blocks
|
|
73
|
+
if (!opts.allowCode) {
|
|
74
|
+
// Escape code block markers
|
|
75
|
+
sanitized = sanitized.replace(/```/g, '` ` `');
|
|
76
|
+
}
|
|
77
|
+
// Handle HTML
|
|
78
|
+
if (!opts.allowHTML) {
|
|
79
|
+
// Remove or escape HTML tags
|
|
80
|
+
sanitized = sanitized.replace(/</g, '<').replace(/>/g, '>');
|
|
81
|
+
}
|
|
82
|
+
// Trim whitespace
|
|
83
|
+
sanitized = sanitized.trim();
|
|
84
|
+
// Enforce length limit
|
|
85
|
+
if (sanitized.length > opts.maxLength) {
|
|
86
|
+
logger_1.logger.warn('Prompt truncated due to length limit', {
|
|
87
|
+
originalLength: sanitized.length,
|
|
88
|
+
maxLength: opts.maxLength
|
|
89
|
+
});
|
|
90
|
+
sanitized = sanitized.substring(0, opts.maxLength);
|
|
91
|
+
}
|
|
92
|
+
return sanitized;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Validate that a prompt is safe to use
|
|
96
|
+
*
|
|
97
|
+
* @param input - Input to validate
|
|
98
|
+
* @returns Validation result
|
|
99
|
+
*/
|
|
100
|
+
function validatePrompt(input) {
|
|
101
|
+
const issues = [];
|
|
102
|
+
// Check for dangerous patterns
|
|
103
|
+
for (const pattern of DANGEROUS_PATTERNS) {
|
|
104
|
+
if (pattern.test(input)) {
|
|
105
|
+
issues.push(`Suspicious pattern detected: ${pattern.source}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Check length
|
|
109
|
+
if (input.length > 10000) {
|
|
110
|
+
issues.push('Input exceeds maximum length of 10000 characters');
|
|
111
|
+
}
|
|
112
|
+
// Check for null bytes
|
|
113
|
+
if (/\x00/.test(input)) {
|
|
114
|
+
issues.push('Input contains null bytes');
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
safe: issues.length === 0,
|
|
118
|
+
issues,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Escape special characters for safe inclusion in prompts
|
|
123
|
+
*
|
|
124
|
+
* @param input - Input to escape
|
|
125
|
+
* @returns Escaped string
|
|
126
|
+
*/
|
|
127
|
+
function escapeSpecialChars(input) {
|
|
128
|
+
return input
|
|
129
|
+
.replace(/\\/g, '\\\\')
|
|
130
|
+
.replace(/"/g, '\\"')
|
|
131
|
+
.replace(/\n/g, '\\n')
|
|
132
|
+
.replace(/\r/g, '\\r')
|
|
133
|
+
.replace(/\t/g, '\\t');
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Sanitize LLM response to remove any system-like content
|
|
137
|
+
*
|
|
138
|
+
* @param response - LLM response
|
|
139
|
+
* @returns Sanitized response
|
|
140
|
+
*/
|
|
141
|
+
function sanitizeResponse(response) {
|
|
142
|
+
let sanitized = response;
|
|
143
|
+
// Remove system-like prefixes
|
|
144
|
+
sanitized = sanitized.replace(/^(system|user|assistant)\s*:\s*/gim, '');
|
|
145
|
+
// Remove any embedded instructions
|
|
146
|
+
sanitized = sanitized.replace(/\[system\s+prompt\].*?\[\/system\s+prompt\]/gis, '');
|
|
147
|
+
return sanitized.trim();
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=sanitization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitization.js","sourceRoot":"","sources":["../../src/llm/sanitization.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":""}
|