regen-koi-mcp 1.0.6 → 1.2.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.
@@ -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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"}
@@ -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,EAkKvB,CAAC"}
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,EA+LvB,CAAC"}
package/dist/tools.js CHANGED
@@ -77,7 +77,7 @@ export const TOOLS = [
77
77
  },
78
78
  {
79
79
  name: 'generate_weekly_digest',
80
- description: 'Generate a weekly digest of Regen Network activity and discussions. Returns markdown content suitable for NotebookLM or sharing. Optionally saves to a file.',
80
+ description: 'Generate a weekly digest SUMMARY of Regen Network activity. Returns a curated markdown brief with executive summary, governance analysis, community discussions, and on-chain metrics. This is a condensed overview - use get_notebooklm_export for full content with complete forum posts and Notion pages.',
81
81
  inputSchema: {
82
82
  type: 'object',
83
83
  properties: {
@@ -109,6 +109,19 @@ export const TOOLS = [
109
109
  }
110
110
  }
111
111
  },
112
+ {
113
+ name: 'get_notebooklm_export',
114
+ description: 'Get the full NotebookLM export with COMPLETE content including: full forum thread posts, complete Notion page content (all chunks), enriched URLs, and detailed source material. Automatically saves to a local file to avoid bloating LLM context. Returns the file path and summary stats.',
115
+ inputSchema: {
116
+ type: 'object',
117
+ properties: {
118
+ output_path: {
119
+ type: 'string',
120
+ description: 'Custom file path for saving. Defaults to notebooklm_export_YYYY-MM-DD.md in the current directory.'
121
+ }
122
+ }
123
+ }
124
+ },
112
125
  {
113
126
  name: 'search_github_docs',
114
127
  description: 'Search Regen Network GitHub repositories for documentation, README files, configuration files, and technical content. Searches regen-ledger (blockchain), regen-web (frontend), regen-data-standards (schemas), and regenie-corpus (docs). Note: Currently searches documentation and config files, not source code.',
@@ -163,6 +176,22 @@ export const TOOLS = [
163
176
  }
164
177
  }
165
178
  }
179
+ },
180
+ {
181
+ name: 'get_mcp_metrics',
182
+ 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.',
183
+ inputSchema: {
184
+ type: 'object',
185
+ properties: {}
186
+ }
187
+ },
188
+ {
189
+ name: 'regen_koi_authenticate',
190
+ description: 'Authenticate with your @regen.network email to access internal Regen Network documentation in addition to public sources. Opens a browser window for secure OAuth login. Authentication token is saved on the server and persists across sessions. Only needs to be done once.',
191
+ inputSchema: {
192
+ type: 'object',
193
+ properties: {}
194
+ }
166
195
  }
167
196
  ];
168
197
  //# 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"}