regen-koi-mcp 1.0.6 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +189 -4
- package/dist/cache.d.ts +70 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +230 -0
- package/dist/cache.js.map +1 -0
- package/dist/graph_tool.d.ts +12 -4
- package/dist/graph_tool.d.ts.map +1 -1
- package/dist/graph_tool.js +270 -26
- package/dist/graph_tool.js.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +127 -16
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +68 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +133 -0
- package/dist/logger.js.map +1 -0
- package/dist/metrics.d.ts +111 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +279 -0
- package/dist/metrics.js.map +1 -0
- package/dist/resilience.d.ts +128 -0
- package/dist/resilience.d.ts.map +1 -0
- package/dist/resilience.js +317 -0
- package/dist/resilience.js.map +1 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +8 -0
- package/dist/tools.js.map +1 -1
- package/dist/validation.d.ts +223 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +287 -0
- package/dist/validation.js.map +1 -0
- package/package.json +6 -2
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resilience Module - Retry Logic, Circuit Breaker, Timeouts
|
|
3
|
+
*
|
|
4
|
+
* Provides utilities for making the MCP server fault-tolerant:
|
|
5
|
+
* - Exponential backoff retry for transient failures
|
|
6
|
+
* - Circuit breaker to prevent cascading failures
|
|
7
|
+
* - Timeout wrapper for long-running operations
|
|
8
|
+
*/
|
|
9
|
+
import { logger, logCircuitBreaker } from './logger.js';
|
|
10
|
+
import { recordCircuitBreak } from './metrics.js';
|
|
11
|
+
/**
|
|
12
|
+
* Check if an error is retriable (transient failure)
|
|
13
|
+
*/
|
|
14
|
+
export function isRetriableError(error) {
|
|
15
|
+
// Network errors
|
|
16
|
+
if (error.code === 'ECONNREFUSED')
|
|
17
|
+
return true;
|
|
18
|
+
if (error.code === 'ECONNRESET')
|
|
19
|
+
return true;
|
|
20
|
+
if (error.code === 'ETIMEDOUT')
|
|
21
|
+
return true;
|
|
22
|
+
if (error.code === 'ENOTFOUND')
|
|
23
|
+
return true;
|
|
24
|
+
// HTTP status codes that are retriable
|
|
25
|
+
if (error.response?.status) {
|
|
26
|
+
const status = error.response.status;
|
|
27
|
+
// 5xx server errors (except 501 Not Implemented)
|
|
28
|
+
if (status >= 500 && status !== 501)
|
|
29
|
+
return true;
|
|
30
|
+
// 429 Too Many Requests (rate limited)
|
|
31
|
+
if (status === 429)
|
|
32
|
+
return true;
|
|
33
|
+
// 408 Request Timeout
|
|
34
|
+
if (status === 408)
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
// Axios network errors
|
|
38
|
+
if (error.code === 'ERR_NETWORK')
|
|
39
|
+
return true;
|
|
40
|
+
// PostgreSQL connection errors
|
|
41
|
+
if (error.code === '57P01')
|
|
42
|
+
return true; // admin_shutdown
|
|
43
|
+
if (error.code === '57P02')
|
|
44
|
+
return true; // crash_shutdown
|
|
45
|
+
if (error.code === '57P03')
|
|
46
|
+
return true; // cannot_connect_now
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Sleep helper
|
|
51
|
+
*/
|
|
52
|
+
function sleep(ms) {
|
|
53
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
54
|
+
}
|
|
55
|
+
const DEFAULT_RETRY_OPTIONS = {
|
|
56
|
+
maxRetries: 3,
|
|
57
|
+
initialDelayMs: 1000,
|
|
58
|
+
maxDelayMs: 30000,
|
|
59
|
+
backoffMultiplier: 2,
|
|
60
|
+
shouldRetry: isRetriableError,
|
|
61
|
+
onRetry: () => { }
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Execute a function with exponential backoff retry
|
|
65
|
+
*/
|
|
66
|
+
export async function withRetry(fn, options = {}) {
|
|
67
|
+
const opts = { ...DEFAULT_RETRY_OPTIONS, ...options };
|
|
68
|
+
let lastError;
|
|
69
|
+
let delay = opts.initialDelayMs;
|
|
70
|
+
for (let attempt = 1; attempt <= opts.maxRetries + 1; attempt++) {
|
|
71
|
+
try {
|
|
72
|
+
return await fn();
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
lastError = error;
|
|
76
|
+
// Check if we should retry
|
|
77
|
+
if (attempt > opts.maxRetries || !opts.shouldRetry(error)) {
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
// Log retry attempt
|
|
81
|
+
logger.warn({
|
|
82
|
+
action: 'retry',
|
|
83
|
+
attempt,
|
|
84
|
+
max_retries: opts.maxRetries,
|
|
85
|
+
delay_ms: delay,
|
|
86
|
+
error: error instanceof Error ? error.message : String(error)
|
|
87
|
+
}, `Retrying after error (attempt ${attempt}/${opts.maxRetries})`);
|
|
88
|
+
// Call onRetry callback
|
|
89
|
+
opts.onRetry(error, attempt, delay);
|
|
90
|
+
// Wait before retrying
|
|
91
|
+
await sleep(delay);
|
|
92
|
+
// Calculate next delay with exponential backoff
|
|
93
|
+
delay = Math.min(delay * opts.backoffMultiplier, opts.maxDelayMs);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
throw lastError;
|
|
97
|
+
}
|
|
98
|
+
const DEFAULT_CIRCUIT_OPTIONS = {
|
|
99
|
+
failureThreshold: 5,
|
|
100
|
+
resetTimeoutMs: 60000,
|
|
101
|
+
halfOpenMaxCalls: 3,
|
|
102
|
+
onStateChange: () => { }
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* Circuit Breaker class for preventing cascading failures
|
|
106
|
+
*/
|
|
107
|
+
export class CircuitBreaker {
|
|
108
|
+
state = 'closed';
|
|
109
|
+
failureCount = 0;
|
|
110
|
+
successCount = 0;
|
|
111
|
+
lastFailureTime;
|
|
112
|
+
halfOpenCalls = 0;
|
|
113
|
+
options;
|
|
114
|
+
serviceName;
|
|
115
|
+
constructor(serviceName, options = {}) {
|
|
116
|
+
this.serviceName = serviceName;
|
|
117
|
+
this.options = { ...DEFAULT_CIRCUIT_OPTIONS, ...options };
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Get current circuit state
|
|
121
|
+
*/
|
|
122
|
+
getState() {
|
|
123
|
+
// Check if we should transition from open to half-open
|
|
124
|
+
if (this.state === 'open' && this.lastFailureTime) {
|
|
125
|
+
const elapsed = Date.now() - this.lastFailureTime.getTime();
|
|
126
|
+
if (elapsed >= this.options.resetTimeoutMs) {
|
|
127
|
+
this.transitionTo('half-open');
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return this.state;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Transition to a new state
|
|
134
|
+
*/
|
|
135
|
+
transitionTo(newState) {
|
|
136
|
+
if (this.state !== newState) {
|
|
137
|
+
const oldState = this.state;
|
|
138
|
+
this.state = newState;
|
|
139
|
+
// Reset counters on state change
|
|
140
|
+
if (newState === 'half-open') {
|
|
141
|
+
this.halfOpenCalls = 0;
|
|
142
|
+
}
|
|
143
|
+
else if (newState === 'closed') {
|
|
144
|
+
this.failureCount = 0;
|
|
145
|
+
this.successCount = 0;
|
|
146
|
+
}
|
|
147
|
+
// Log state change
|
|
148
|
+
logCircuitBreaker({
|
|
149
|
+
state: newState,
|
|
150
|
+
service: this.serviceName,
|
|
151
|
+
failure_count: this.failureCount,
|
|
152
|
+
reset_at: newState === 'open'
|
|
153
|
+
? new Date(Date.now() + this.options.resetTimeoutMs)
|
|
154
|
+
: undefined
|
|
155
|
+
});
|
|
156
|
+
// Callback
|
|
157
|
+
this.options.onStateChange(oldState, newState);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Execute a function through the circuit breaker
|
|
162
|
+
*/
|
|
163
|
+
async execute(fn) {
|
|
164
|
+
const state = this.getState();
|
|
165
|
+
// If circuit is open, fail fast
|
|
166
|
+
if (state === 'open') {
|
|
167
|
+
throw new CircuitBreakerError(`Circuit breaker is open for ${this.serviceName}. Try again later.`, this.serviceName, this.lastFailureTime
|
|
168
|
+
? new Date(this.lastFailureTime.getTime() + this.options.resetTimeoutMs)
|
|
169
|
+
: new Date(Date.now() + this.options.resetTimeoutMs));
|
|
170
|
+
}
|
|
171
|
+
// If half-open, limit concurrent calls
|
|
172
|
+
if (state === 'half-open') {
|
|
173
|
+
if (this.halfOpenCalls >= this.options.halfOpenMaxCalls) {
|
|
174
|
+
throw new CircuitBreakerError(`Circuit breaker is half-open for ${this.serviceName}. Waiting for test calls to complete.`, this.serviceName);
|
|
175
|
+
}
|
|
176
|
+
this.halfOpenCalls++;
|
|
177
|
+
}
|
|
178
|
+
try {
|
|
179
|
+
const result = await fn();
|
|
180
|
+
this.recordSuccess();
|
|
181
|
+
return result;
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
this.recordFailure();
|
|
185
|
+
throw error;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Record a successful call
|
|
190
|
+
*/
|
|
191
|
+
recordSuccess() {
|
|
192
|
+
this.successCount++;
|
|
193
|
+
if (this.state === 'half-open') {
|
|
194
|
+
// In half-open, successes move us back to closed
|
|
195
|
+
this.transitionTo('closed');
|
|
196
|
+
}
|
|
197
|
+
else if (this.state === 'closed') {
|
|
198
|
+
// In closed, successes reduce failure count
|
|
199
|
+
if (this.failureCount > 0) {
|
|
200
|
+
this.failureCount--;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Record a failed call
|
|
206
|
+
*/
|
|
207
|
+
recordFailure() {
|
|
208
|
+
this.failureCount++;
|
|
209
|
+
this.lastFailureTime = new Date();
|
|
210
|
+
if (this.state === 'half-open') {
|
|
211
|
+
// In half-open, any failure reopens the circuit
|
|
212
|
+
this.transitionTo('open');
|
|
213
|
+
recordCircuitBreak();
|
|
214
|
+
}
|
|
215
|
+
else if (this.state === 'closed') {
|
|
216
|
+
// In closed, check if we've hit the threshold
|
|
217
|
+
if (this.failureCount >= this.options.failureThreshold) {
|
|
218
|
+
this.transitionTo('open');
|
|
219
|
+
recordCircuitBreak();
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Manually reset the circuit breaker
|
|
225
|
+
*/
|
|
226
|
+
reset() {
|
|
227
|
+
this.transitionTo('closed');
|
|
228
|
+
this.failureCount = 0;
|
|
229
|
+
this.successCount = 0;
|
|
230
|
+
this.lastFailureTime = undefined;
|
|
231
|
+
this.halfOpenCalls = 0;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Get circuit breaker stats
|
|
235
|
+
*/
|
|
236
|
+
getStats() {
|
|
237
|
+
return {
|
|
238
|
+
state: this.getState(),
|
|
239
|
+
failureCount: this.failureCount,
|
|
240
|
+
successCount: this.successCount,
|
|
241
|
+
lastFailure: this.lastFailureTime?.toISOString()
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Custom error for circuit breaker open state
|
|
247
|
+
*/
|
|
248
|
+
export class CircuitBreakerError extends Error {
|
|
249
|
+
serviceName;
|
|
250
|
+
retryAfter;
|
|
251
|
+
constructor(message, serviceName, retryAfter) {
|
|
252
|
+
super(message);
|
|
253
|
+
this.serviceName = serviceName;
|
|
254
|
+
this.retryAfter = retryAfter;
|
|
255
|
+
this.name = 'CircuitBreakerError';
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Custom error for timeouts
|
|
260
|
+
*/
|
|
261
|
+
export class TimeoutError extends Error {
|
|
262
|
+
timeoutMs;
|
|
263
|
+
constructor(message, timeoutMs) {
|
|
264
|
+
super(message);
|
|
265
|
+
this.timeoutMs = timeoutMs;
|
|
266
|
+
this.name = 'TimeoutError';
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Execute a function with a timeout
|
|
271
|
+
*/
|
|
272
|
+
export async function withTimeout(fn, timeoutMs, operationName = 'operation') {
|
|
273
|
+
return new Promise((resolve, reject) => {
|
|
274
|
+
const timeoutId = setTimeout(() => {
|
|
275
|
+
reject(new TimeoutError(`${operationName} timed out after ${timeoutMs}ms`, timeoutMs));
|
|
276
|
+
}, timeoutMs);
|
|
277
|
+
fn()
|
|
278
|
+
.then(result => {
|
|
279
|
+
clearTimeout(timeoutId);
|
|
280
|
+
resolve(result);
|
|
281
|
+
})
|
|
282
|
+
.catch(error => {
|
|
283
|
+
clearTimeout(timeoutId);
|
|
284
|
+
reject(error);
|
|
285
|
+
});
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Combine retry and timeout
|
|
290
|
+
*/
|
|
291
|
+
export async function withRetryAndTimeout(fn, timeoutMs, retryOptions = {}, operationName = 'operation') {
|
|
292
|
+
return withRetry(() => withTimeout(fn, timeoutMs, operationName), retryOptions);
|
|
293
|
+
}
|
|
294
|
+
// Create circuit breakers for different services
|
|
295
|
+
export const circuitBreakers = {
|
|
296
|
+
graphApi: new CircuitBreaker('graph-api', {
|
|
297
|
+
failureThreshold: 5,
|
|
298
|
+
resetTimeoutMs: 60000
|
|
299
|
+
}),
|
|
300
|
+
koiApi: new CircuitBreaker('koi-api', {
|
|
301
|
+
failureThreshold: 5,
|
|
302
|
+
resetTimeoutMs: 60000
|
|
303
|
+
}),
|
|
304
|
+
database: new CircuitBreaker('database', {
|
|
305
|
+
failureThreshold: 3,
|
|
306
|
+
resetTimeoutMs: 30000
|
|
307
|
+
})
|
|
308
|
+
};
|
|
309
|
+
export default {
|
|
310
|
+
withRetry,
|
|
311
|
+
withTimeout,
|
|
312
|
+
withRetryAndTimeout,
|
|
313
|
+
CircuitBreaker,
|
|
314
|
+
circuitBreakers,
|
|
315
|
+
isRetriableError
|
|
316
|
+
};
|
|
317
|
+
//# sourceMappingURL=resilience.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resilience.js","sourceRoot":"","sources":["../src/resilience.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG1D,eAAO,MAAM,KAAK,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG1D,eAAO,MAAM,KAAK,EAAE,IAAI,EA0KvB,CAAC"}
|
package/dist/tools.js
CHANGED
|
@@ -163,6 +163,14 @@ export const TOOLS = [
|
|
|
163
163
|
}
|
|
164
164
|
}
|
|
165
165
|
}
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
name: 'get_mcp_metrics',
|
|
169
|
+
description: 'Get MCP server performance metrics, cache statistics, and health status. Useful for monitoring and debugging. Returns uptime, tool latencies, cache hit rates, error counts, and circuit breaker status.',
|
|
170
|
+
inputSchema: {
|
|
171
|
+
type: 'object',
|
|
172
|
+
properties: {}
|
|
173
|
+
}
|
|
166
174
|
}
|
|
167
175
|
];
|
|
168
176
|
//# sourceMappingURL=tools.js.map
|
package/dist/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation Module - Input Validation with Zod Schemas
|
|
3
|
+
*
|
|
4
|
+
* Provides input validation for all MCP tool parameters to prevent
|
|
5
|
+
* injection attacks and ensure data integrity.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
/**
|
|
9
|
+
* Schema for query_code_graph tool
|
|
10
|
+
*/
|
|
11
|
+
export declare const QueryCodeGraphSchema: z.ZodObject<{
|
|
12
|
+
query_type: z.ZodEnum<{
|
|
13
|
+
list_repos: "list_repos";
|
|
14
|
+
list_entity_types: "list_entity_types";
|
|
15
|
+
get_entity_stats: "get_entity_stats";
|
|
16
|
+
list_modules: "list_modules";
|
|
17
|
+
find_by_type: "find_by_type";
|
|
18
|
+
get_module: "get_module";
|
|
19
|
+
search_modules: "search_modules";
|
|
20
|
+
module_entities: "module_entities";
|
|
21
|
+
module_for_entity: "module_for_entity";
|
|
22
|
+
search_entities: "search_entities";
|
|
23
|
+
keeper_for_msg: "keeper_for_msg";
|
|
24
|
+
msgs_for_keeper: "msgs_for_keeper";
|
|
25
|
+
docs_mentioning: "docs_mentioning";
|
|
26
|
+
entities_in_doc: "entities_in_doc";
|
|
27
|
+
related_entities: "related_entities";
|
|
28
|
+
}>;
|
|
29
|
+
entity_name: z.ZodOptional<z.ZodString>;
|
|
30
|
+
entity_type: z.ZodOptional<z.ZodString>;
|
|
31
|
+
doc_path: z.ZodOptional<z.ZodString>;
|
|
32
|
+
repo_name: z.ZodOptional<z.ZodString>;
|
|
33
|
+
module_name: z.ZodOptional<z.ZodString>;
|
|
34
|
+
}, z.core.$strip>;
|
|
35
|
+
/**
|
|
36
|
+
* Schema for search_knowledge tool
|
|
37
|
+
*/
|
|
38
|
+
export declare const SearchKnowledgeSchema: z.ZodObject<{
|
|
39
|
+
query: z.ZodString;
|
|
40
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
41
|
+
published_from: z.ZodOptional<z.ZodString>;
|
|
42
|
+
published_to: z.ZodOptional<z.ZodString>;
|
|
43
|
+
include_undated: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
44
|
+
}, z.core.$strip>;
|
|
45
|
+
/**
|
|
46
|
+
* Schema for hybrid_search tool
|
|
47
|
+
*/
|
|
48
|
+
export declare const HybridSearchSchema: z.ZodObject<{
|
|
49
|
+
query: z.ZodString;
|
|
50
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
51
|
+
}, z.core.$strip>;
|
|
52
|
+
/**
|
|
53
|
+
* Schema for search_github_docs tool
|
|
54
|
+
*/
|
|
55
|
+
export declare const SearchGithubDocsSchema: z.ZodObject<{
|
|
56
|
+
query: z.ZodString;
|
|
57
|
+
repository: z.ZodOptional<z.ZodEnum<{
|
|
58
|
+
"regen-ledger": "regen-ledger";
|
|
59
|
+
"regen-web": "regen-web";
|
|
60
|
+
"regen-data-standards": "regen-data-standards";
|
|
61
|
+
"regenie-corpus": "regenie-corpus";
|
|
62
|
+
"koi-sensors": "koi-sensors";
|
|
63
|
+
}>>;
|
|
64
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
65
|
+
}, z.core.$strip>;
|
|
66
|
+
/**
|
|
67
|
+
* Schema for get_repo_overview tool
|
|
68
|
+
*/
|
|
69
|
+
export declare const GetRepoOverviewSchema: z.ZodObject<{
|
|
70
|
+
repository: z.ZodEnum<{
|
|
71
|
+
"regen-ledger": "regen-ledger";
|
|
72
|
+
"regen-web": "regen-web";
|
|
73
|
+
"regen-data-standards": "regen-data-standards";
|
|
74
|
+
"regenie-corpus": "regenie-corpus";
|
|
75
|
+
"koi-sensors": "koi-sensors";
|
|
76
|
+
}>;
|
|
77
|
+
}, z.core.$strip>;
|
|
78
|
+
/**
|
|
79
|
+
* Schema for get_tech_stack tool
|
|
80
|
+
*/
|
|
81
|
+
export declare const GetTechStackSchema: z.ZodObject<{
|
|
82
|
+
repository: z.ZodOptional<z.ZodEnum<{
|
|
83
|
+
"regen-ledger": "regen-ledger";
|
|
84
|
+
"regen-web": "regen-web";
|
|
85
|
+
"regen-data-standards": "regen-data-standards";
|
|
86
|
+
"regenie-corpus": "regenie-corpus";
|
|
87
|
+
"koi-sensors": "koi-sensors";
|
|
88
|
+
}>>;
|
|
89
|
+
}, z.core.$strip>;
|
|
90
|
+
/**
|
|
91
|
+
* Schema for get_stats tool
|
|
92
|
+
*/
|
|
93
|
+
export declare const GetStatsSchema: z.ZodObject<{
|
|
94
|
+
detailed: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
95
|
+
}, z.core.$strip>;
|
|
96
|
+
/**
|
|
97
|
+
* Schema for generate_weekly_digest tool
|
|
98
|
+
*/
|
|
99
|
+
export declare const GenerateWeeklyDigestSchema: z.ZodObject<{
|
|
100
|
+
start_date: z.ZodOptional<z.ZodString>;
|
|
101
|
+
end_date: z.ZodOptional<z.ZodString>;
|
|
102
|
+
save_to_file: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
103
|
+
output_path: z.ZodOptional<z.ZodString>;
|
|
104
|
+
format: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
105
|
+
markdown: "markdown";
|
|
106
|
+
json: "json";
|
|
107
|
+
}>>>;
|
|
108
|
+
}, z.core.$strip>;
|
|
109
|
+
/**
|
|
110
|
+
* Validation result type
|
|
111
|
+
*/
|
|
112
|
+
export interface ValidationResult<T> {
|
|
113
|
+
success: boolean;
|
|
114
|
+
data?: T;
|
|
115
|
+
error?: string;
|
|
116
|
+
details?: z.ZodIssue[];
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Validate input against a schema
|
|
120
|
+
*/
|
|
121
|
+
export declare function validateInput<T>(schema: z.ZodSchema<T>, input: unknown, toolName: string): ValidationResult<T>;
|
|
122
|
+
/**
|
|
123
|
+
* Map of tool names to their schemas
|
|
124
|
+
*/
|
|
125
|
+
export declare const ToolSchemas: Record<string, z.ZodSchema<any>>;
|
|
126
|
+
/**
|
|
127
|
+
* Validate tool input by tool name
|
|
128
|
+
*/
|
|
129
|
+
export declare function validateToolInput(toolName: string, input: unknown): ValidationResult<any>;
|
|
130
|
+
/**
|
|
131
|
+
* Sanitize a string for safe use in queries
|
|
132
|
+
* Removes potentially dangerous characters
|
|
133
|
+
*/
|
|
134
|
+
export declare function sanitizeString(input: string): string;
|
|
135
|
+
/**
|
|
136
|
+
* Check if a string looks like an injection attempt
|
|
137
|
+
*/
|
|
138
|
+
export declare function detectInjection(input: string): boolean;
|
|
139
|
+
declare const _default: {
|
|
140
|
+
validateInput: typeof validateInput;
|
|
141
|
+
validateToolInput: typeof validateToolInput;
|
|
142
|
+
sanitizeString: typeof sanitizeString;
|
|
143
|
+
detectInjection: typeof detectInjection;
|
|
144
|
+
QueryCodeGraphSchema: z.ZodObject<{
|
|
145
|
+
query_type: z.ZodEnum<{
|
|
146
|
+
list_repos: "list_repos";
|
|
147
|
+
list_entity_types: "list_entity_types";
|
|
148
|
+
get_entity_stats: "get_entity_stats";
|
|
149
|
+
list_modules: "list_modules";
|
|
150
|
+
find_by_type: "find_by_type";
|
|
151
|
+
get_module: "get_module";
|
|
152
|
+
search_modules: "search_modules";
|
|
153
|
+
module_entities: "module_entities";
|
|
154
|
+
module_for_entity: "module_for_entity";
|
|
155
|
+
search_entities: "search_entities";
|
|
156
|
+
keeper_for_msg: "keeper_for_msg";
|
|
157
|
+
msgs_for_keeper: "msgs_for_keeper";
|
|
158
|
+
docs_mentioning: "docs_mentioning";
|
|
159
|
+
entities_in_doc: "entities_in_doc";
|
|
160
|
+
related_entities: "related_entities";
|
|
161
|
+
}>;
|
|
162
|
+
entity_name: z.ZodOptional<z.ZodString>;
|
|
163
|
+
entity_type: z.ZodOptional<z.ZodString>;
|
|
164
|
+
doc_path: z.ZodOptional<z.ZodString>;
|
|
165
|
+
repo_name: z.ZodOptional<z.ZodString>;
|
|
166
|
+
module_name: z.ZodOptional<z.ZodString>;
|
|
167
|
+
}, z.core.$strip>;
|
|
168
|
+
SearchKnowledgeSchema: z.ZodObject<{
|
|
169
|
+
query: z.ZodString;
|
|
170
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
171
|
+
published_from: z.ZodOptional<z.ZodString>;
|
|
172
|
+
published_to: z.ZodOptional<z.ZodString>;
|
|
173
|
+
include_undated: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
174
|
+
}, z.core.$strip>;
|
|
175
|
+
HybridSearchSchema: z.ZodObject<{
|
|
176
|
+
query: z.ZodString;
|
|
177
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
178
|
+
}, z.core.$strip>;
|
|
179
|
+
SearchGithubDocsSchema: z.ZodObject<{
|
|
180
|
+
query: z.ZodString;
|
|
181
|
+
repository: z.ZodOptional<z.ZodEnum<{
|
|
182
|
+
"regen-ledger": "regen-ledger";
|
|
183
|
+
"regen-web": "regen-web";
|
|
184
|
+
"regen-data-standards": "regen-data-standards";
|
|
185
|
+
"regenie-corpus": "regenie-corpus";
|
|
186
|
+
"koi-sensors": "koi-sensors";
|
|
187
|
+
}>>;
|
|
188
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
189
|
+
}, z.core.$strip>;
|
|
190
|
+
GetRepoOverviewSchema: z.ZodObject<{
|
|
191
|
+
repository: z.ZodEnum<{
|
|
192
|
+
"regen-ledger": "regen-ledger";
|
|
193
|
+
"regen-web": "regen-web";
|
|
194
|
+
"regen-data-standards": "regen-data-standards";
|
|
195
|
+
"regenie-corpus": "regenie-corpus";
|
|
196
|
+
"koi-sensors": "koi-sensors";
|
|
197
|
+
}>;
|
|
198
|
+
}, z.core.$strip>;
|
|
199
|
+
GetTechStackSchema: z.ZodObject<{
|
|
200
|
+
repository: z.ZodOptional<z.ZodEnum<{
|
|
201
|
+
"regen-ledger": "regen-ledger";
|
|
202
|
+
"regen-web": "regen-web";
|
|
203
|
+
"regen-data-standards": "regen-data-standards";
|
|
204
|
+
"regenie-corpus": "regenie-corpus";
|
|
205
|
+
"koi-sensors": "koi-sensors";
|
|
206
|
+
}>>;
|
|
207
|
+
}, z.core.$strip>;
|
|
208
|
+
GetStatsSchema: z.ZodObject<{
|
|
209
|
+
detailed: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
210
|
+
}, z.core.$strip>;
|
|
211
|
+
GenerateWeeklyDigestSchema: z.ZodObject<{
|
|
212
|
+
start_date: z.ZodOptional<z.ZodString>;
|
|
213
|
+
end_date: z.ZodOptional<z.ZodString>;
|
|
214
|
+
save_to_file: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
215
|
+
output_path: z.ZodOptional<z.ZodString>;
|
|
216
|
+
format: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
217
|
+
markdown: "markdown";
|
|
218
|
+
json: "json";
|
|
219
|
+
}>>>;
|
|
220
|
+
}, z.core.$strip>;
|
|
221
|
+
};
|
|
222
|
+
export default _default;
|
|
223
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAuExB;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;iBAyChC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;iBAiBhC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;iBAU7B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;iBAWjC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;iBAEhC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;iBAE7B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,cAAc;;iBAEzB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;iBAUrC,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC7B,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EACtB,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,GACf,gBAAgB,CAAC,CAAC,CAAC,CAmCrB;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CASxD,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,GACb,gBAAgB,CAAC,GAAG,CAAC,CAYvB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAWtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED,wBAaE"}
|