kratos-mcp 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.
Files changed (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +351 -0
  3. package/dist/host-middleware-v2.d.ts +3 -0
  4. package/dist/host-middleware-v2.d.ts.map +1 -0
  5. package/dist/host-middleware-v2.js +471 -0
  6. package/dist/host-middleware-v2.js.map +1 -0
  7. package/dist/index.d.ts +21 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +939 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/memory-server/concept-store-enhanced.d.ts +88 -0
  12. package/dist/memory-server/concept-store-enhanced.d.ts.map +1 -0
  13. package/dist/memory-server/concept-store-enhanced.js +392 -0
  14. package/dist/memory-server/concept-store-enhanced.js.map +1 -0
  15. package/dist/memory-server/concept-store.d.ts +58 -0
  16. package/dist/memory-server/concept-store.d.ts.map +1 -0
  17. package/dist/memory-server/concept-store.js +329 -0
  18. package/dist/memory-server/concept-store.js.map +1 -0
  19. package/dist/memory-server/context-broker.d.ts +63 -0
  20. package/dist/memory-server/context-broker.d.ts.map +1 -0
  21. package/dist/memory-server/context-broker.js +340 -0
  22. package/dist/memory-server/context-broker.js.map +1 -0
  23. package/dist/memory-server/database.d.ts +61 -0
  24. package/dist/memory-server/database.d.ts.map +1 -0
  25. package/dist/memory-server/database.js +309 -0
  26. package/dist/memory-server/database.js.map +1 -0
  27. package/dist/modules/prd/index.d.ts +47 -0
  28. package/dist/modules/prd/index.d.ts.map +1 -0
  29. package/dist/modules/prd/index.js +220 -0
  30. package/dist/modules/prd/index.js.map +1 -0
  31. package/dist/modules/prompt/index.d.ts +47 -0
  32. package/dist/modules/prompt/index.d.ts.map +1 -0
  33. package/dist/modules/prompt/index.js +313 -0
  34. package/dist/modules/prompt/index.js.map +1 -0
  35. package/dist/project-manager.d.ts +69 -0
  36. package/dist/project-manager.d.ts.map +1 -0
  37. package/dist/project-manager.js +207 -0
  38. package/dist/project-manager.js.map +1 -0
  39. package/dist/security/data-retention.d.ts +104 -0
  40. package/dist/security/data-retention.d.ts.map +1 -0
  41. package/dist/security/data-retention.js +444 -0
  42. package/dist/security/data-retention.js.map +1 -0
  43. package/dist/security/encryption.d.ts +48 -0
  44. package/dist/security/encryption.d.ts.map +1 -0
  45. package/dist/security/encryption.js +131 -0
  46. package/dist/security/encryption.js.map +1 -0
  47. package/dist/security/pii-detector.d.ts +61 -0
  48. package/dist/security/pii-detector.d.ts.map +1 -0
  49. package/dist/security/pii-detector.js +220 -0
  50. package/dist/security/pii-detector.js.map +1 -0
  51. package/dist/tools/ci-hooks.d.ts +48 -0
  52. package/dist/tools/ci-hooks.d.ts.map +1 -0
  53. package/dist/tools/ci-hooks.js +452 -0
  54. package/dist/tools/ci-hooks.js.map +1 -0
  55. package/dist/tools/migrate-to-sqlite.d.ts +32 -0
  56. package/dist/tools/migrate-to-sqlite.d.ts.map +1 -0
  57. package/dist/tools/migrate-to-sqlite.js +341 -0
  58. package/dist/tools/migrate-to-sqlite.js.map +1 -0
  59. package/dist/types/index.d.ts +151 -0
  60. package/dist/types/index.d.ts.map +1 -0
  61. package/dist/types/index.js +2 -0
  62. package/dist/types/index.js.map +1 -0
  63. package/dist/utils/logger.d.ts +9 -0
  64. package/dist/utils/logger.d.ts.map +1 -0
  65. package/dist/utils/logger.js +33 -0
  66. package/dist/utils/logger.js.map +1 -0
  67. package/dist/utils/mcp-logger.d.ts +14 -0
  68. package/dist/utils/mcp-logger.d.ts.map +1 -0
  69. package/dist/utils/mcp-logger.js +40 -0
  70. package/dist/utils/mcp-logger.js.map +1 -0
  71. package/package.json +88 -0
@@ -0,0 +1,341 @@
1
+ #!/usr/bin/env node
2
+ import fs from 'fs-extra';
3
+ import path from 'path';
4
+ import { MemoryDatabase } from '../memory-server/database.js';
5
+ import { ConceptStore } from '../memory-server/concept-store.js';
6
+ import { Logger } from '../utils/logger.js';
7
+ import crypto from 'crypto';
8
+ const logger = new Logger('Migration');
9
+ class KratosMigrationTool {
10
+ stats = {
11
+ totalFound: 0,
12
+ migrated: 0,
13
+ skipped: 0,
14
+ errors: 0,
15
+ conceptsCreated: 0
16
+ };
17
+ async migrateProject(projectRoot, options = {}) {
18
+ logger.info(`Starting migration for project: ${projectRoot}`);
19
+ // 1. Detect legacy memory files
20
+ const legacyMemories = await this.findLegacyMemories(projectRoot);
21
+ this.stats.totalFound = legacyMemories.length;
22
+ if (this.stats.totalFound === 0) {
23
+ logger.info('No legacy memories found to migrate');
24
+ return this.stats;
25
+ }
26
+ // 2. Create backup if requested
27
+ if (options.createBackup !== false && !options.dryRun) {
28
+ await this.createBackup(projectRoot);
29
+ }
30
+ // 3. Initialize project if needed
31
+ const { projectId, projectConfig } = await this.initializeProject(projectRoot, options.dryRun || false);
32
+ // 4. Create SQLite database
33
+ let memoryDb = null;
34
+ if (!options.dryRun) {
35
+ memoryDb = new MemoryDatabase(projectRoot, projectId);
36
+ }
37
+ const conceptStore = ConceptStore.getInstance();
38
+ const conceptCandidates = new Map();
39
+ // 5. Migrate each memory
40
+ for (const legacyPath of legacyMemories) {
41
+ try {
42
+ const memory = await this.loadLegacyMemory(legacyPath);
43
+ if (options.dryRun) {
44
+ logger.info(`[DRY RUN] Would migrate: ${memory.title}`);
45
+ this.stats.migrated++;
46
+ continue;
47
+ }
48
+ // Convert to new format
49
+ const newMemory = this.convertMemory(memory, projectId);
50
+ // Check if it should become a concept
51
+ if (options.extractConcepts !== false && this.shouldBeConcept(memory)) {
52
+ conceptCandidates.set(memory.id, {
53
+ id: this.generateConceptId(memory.title),
54
+ title: memory.title,
55
+ body: this.extractConceptBody(memory.content),
56
+ tags: this.extractConceptTags(memory.tags),
57
+ importance: this.inferImportance(memory)
58
+ });
59
+ }
60
+ else {
61
+ // Save as regular memory
62
+ memoryDb.save(newMemory);
63
+ this.stats.migrated++;
64
+ }
65
+ }
66
+ catch (error) {
67
+ logger.error(`Failed to migrate ${legacyPath}:`, error);
68
+ this.stats.errors++;
69
+ }
70
+ }
71
+ // 6. Create concepts
72
+ if (options.extractConcepts !== false && !options.dryRun) {
73
+ for (const concept of conceptCandidates.values()) {
74
+ try {
75
+ conceptStore.save(concept);
76
+ this.stats.conceptsCreated++;
77
+ }
78
+ catch (error) {
79
+ logger.error(`Failed to create concept ${concept.id}:`, error);
80
+ }
81
+ }
82
+ }
83
+ // 7. Create migration log
84
+ if (!options.dryRun) {
85
+ await this.createMigrationLog(projectRoot);
86
+ }
87
+ // 8. Cleanup
88
+ if (memoryDb) {
89
+ memoryDb.close();
90
+ }
91
+ logger.info('Migration completed:', this.stats);
92
+ return this.stats;
93
+ }
94
+ async findLegacyMemories(projectRoot) {
95
+ const legacyPaths = [
96
+ path.join(projectRoot, '.kratos', 'projects'),
97
+ path.join(projectRoot, '.kratos', 'memory'),
98
+ path.join(projectRoot, 'docs', 'MemoryDocs'),
99
+ ];
100
+ const memoryFiles = [];
101
+ for (const basePath of legacyPaths) {
102
+ if (await fs.pathExists(basePath)) {
103
+ const files = await this.findJsonFiles(basePath);
104
+ memoryFiles.push(...files);
105
+ }
106
+ }
107
+ return memoryFiles;
108
+ }
109
+ async findJsonFiles(dir) {
110
+ const files = [];
111
+ const items = await fs.readdir(dir, { withFileTypes: true });
112
+ for (const item of items) {
113
+ const fullPath = path.join(dir, item.name);
114
+ if (item.isDirectory()) {
115
+ const subFiles = await this.findJsonFiles(fullPath);
116
+ files.push(...subFiles);
117
+ }
118
+ else if (item.isFile() && item.name.endsWith('.json') && item.name !== 'index.json') {
119
+ files.push(fullPath);
120
+ }
121
+ }
122
+ return files;
123
+ }
124
+ async loadLegacyMemory(filePath) {
125
+ const data = await fs.readJson(filePath);
126
+ // Handle different legacy formats
127
+ if (data.memories && Array.isArray(data.memories)) {
128
+ // V1 format: multiple memories in one file
129
+ return data.memories[0]; // Take first one for now
130
+ }
131
+ if (data.id && data.title && data.content) {
132
+ // V2 format: single memory per file
133
+ return data;
134
+ }
135
+ throw new Error(`Unrecognized memory format in ${filePath}`);
136
+ }
137
+ convertMemory(legacy, projectId) {
138
+ // Map legacy types to new types
139
+ const typeMapping = {
140
+ 'fixed-guide': 'fixed-guide',
141
+ 'architecture': 'architecture',
142
+ 'open-issue': 'open-issue',
143
+ 'audit': 'audit',
144
+ 'reference': 'reference',
145
+ 'progress': 'progress',
146
+ 'feature': 'feature',
147
+ };
148
+ const mappedType = typeMapping[legacy.type] || 'reference';
149
+ // Extract paths from legacy project context
150
+ const paths = legacy.projectContext?.files?.map(f => path.dirname(f) + '/*') || [];
151
+ // Add unique project paths
152
+ const uniquePaths = [...new Set(paths)];
153
+ return {
154
+ summary: legacy.title,
155
+ text: legacy.content,
156
+ tags: [...(legacy.tags || []), mappedType],
157
+ paths: uniquePaths,
158
+ importance: this.inferImportance(legacy),
159
+ ttl: this.calculateTTL(legacy)
160
+ };
161
+ }
162
+ inferImportance(memory) {
163
+ // Infer importance based on type and content
164
+ if (memory.type === 'architecture')
165
+ return 5;
166
+ if (memory.type === 'fixed-guide')
167
+ return 4;
168
+ if (memory.type === 'feature')
169
+ return 4;
170
+ if (memory.type === 'audit')
171
+ return 3;
172
+ if (memory.type === 'progress')
173
+ return 3;
174
+ if (memory.type === 'open-issue')
175
+ return 2;
176
+ return 2; // reference
177
+ }
178
+ calculateTTL(memory) {
179
+ // Only set TTL for low-importance memories
180
+ const importance = this.inferImportance(memory);
181
+ if (importance <= 2) {
182
+ return 21 * 24 * 60 * 60; // 21 days in seconds
183
+ }
184
+ return undefined; // No TTL for important memories
185
+ }
186
+ shouldBeConcept(memory) {
187
+ // Heuristics for concept extraction
188
+ const conceptKeywords = [
189
+ 'pattern', 'template', 'checklist', 'guide', 'best practice',
190
+ 'algorithm', 'formula', 'standard', 'convention', 'protocol'
191
+ ];
192
+ const content = `${memory.title} ${memory.content}`.toLowerCase();
193
+ const hasConceptKeywords = conceptKeywords.some(keyword => content.includes(keyword));
194
+ // Path-free content (good for reusability)
195
+ const hasSpecificPaths = (memory.projectContext?.files?.length || 0) > 0;
196
+ // High value content
197
+ const isHighImportance = this.inferImportance(memory) >= 4;
198
+ return hasConceptKeywords && !hasSpecificPaths && isHighImportance;
199
+ }
200
+ extractConceptBody(content) {
201
+ // Clean and truncate for concept format (600-900 chars recommended)
202
+ let cleaned = content
203
+ .replace(/^#+\s*/gm, '') // Remove markdown headers
204
+ .replace(/\*{1,2}([^*]+)\*{1,2}/g, '$1') // Remove bold/italic
205
+ .replace(/`([^`]+)`/g, '$1') // Remove code ticks
206
+ .trim();
207
+ if (cleaned.length > 900) {
208
+ // Truncate at sentence boundary
209
+ const sentences = cleaned.split(/[.!?]+/);
210
+ cleaned = '';
211
+ for (const sentence of sentences) {
212
+ if (cleaned.length + sentence.length > 850)
213
+ break;
214
+ cleaned += sentence + '.';
215
+ }
216
+ }
217
+ return cleaned;
218
+ }
219
+ extractConceptTags(originalTags) {
220
+ // Filter and enhance tags for concepts
221
+ const technicalTags = originalTags.filter(tag => !['open-issue', 'progress', 'audit'].includes(tag));
222
+ return [...technicalTags, 'pattern'];
223
+ }
224
+ generateConceptId(title) {
225
+ const base = title
226
+ .toLowerCase()
227
+ .replace(/[^a-z0-9\s]/g, '')
228
+ .replace(/\s+/g, '-')
229
+ .substring(0, 30);
230
+ return `${base}-migrated`;
231
+ }
232
+ async initializeProject(projectRoot, dryRun) {
233
+ const projectJsonPath = path.join(projectRoot, '.kratos', 'project.json');
234
+ let projectConfig;
235
+ if (await fs.pathExists(projectJsonPath)) {
236
+ projectConfig = await fs.readJson(projectJsonPath);
237
+ }
238
+ else {
239
+ // Create new project config
240
+ projectConfig = {
241
+ project_id: `proj_${Date.now()}_${crypto.randomBytes(4).toString('hex')}`,
242
+ name: path.basename(projectRoot),
243
+ root: projectRoot,
244
+ repo_hash: await this.getGitHash(projectRoot),
245
+ migrated_at: new Date().toISOString(),
246
+ migration_version: '2.0'
247
+ };
248
+ if (!dryRun) {
249
+ await fs.ensureDir(path.dirname(projectJsonPath));
250
+ await fs.writeJson(projectJsonPath, projectConfig, { spaces: 2 });
251
+ }
252
+ }
253
+ return {
254
+ projectId: projectConfig.project_id,
255
+ projectConfig
256
+ };
257
+ }
258
+ async getGitHash(projectRoot) {
259
+ try {
260
+ const { spawn } = await import('child_process');
261
+ return new Promise((resolve) => {
262
+ const git = spawn('git', ['rev-parse', 'HEAD'], {
263
+ cwd: projectRoot,
264
+ stdio: 'pipe'
265
+ });
266
+ let hash = '';
267
+ git.stdout.on('data', (data) => { hash += data.toString(); });
268
+ git.on('close', () => resolve(hash.trim() || undefined));
269
+ git.on('error', () => resolve(undefined));
270
+ });
271
+ }
272
+ catch {
273
+ return undefined;
274
+ }
275
+ }
276
+ async createBackup(projectRoot) {
277
+ const backupDir = path.join(projectRoot, '.kratos', 'backup', `pre-migration-${Date.now()}`);
278
+ const sourceDir = path.join(projectRoot, '.kratos');
279
+ await fs.ensureDir(backupDir);
280
+ await fs.copy(sourceDir, backupDir, {
281
+ filter: (src) => !src.includes('backup') && !src.includes('memory.db')
282
+ });
283
+ logger.info(`Backup created: ${backupDir}`);
284
+ }
285
+ async createMigrationLog(projectRoot) {
286
+ const logPath = path.join(projectRoot, '.kratos', 'migration.log');
287
+ const log = {
288
+ timestamp: new Date().toISOString(),
289
+ version: '2.0',
290
+ stats: this.stats,
291
+ notes: 'Migrated from JSON-based to SQLite-based memory storage'
292
+ };
293
+ await fs.writeJson(logPath, log, { spaces: 2 });
294
+ }
295
+ }
296
+ // CLI interface
297
+ async function main() {
298
+ const args = process.argv.slice(2);
299
+ const projectRoot = args[0] || process.cwd();
300
+ const options = {
301
+ dryRun: args.includes('--dry-run'),
302
+ createBackup: !args.includes('--no-backup'),
303
+ extractConcepts: !args.includes('--no-concepts')
304
+ };
305
+ if (options.dryRun) {
306
+ logger.info('🔍 DRY RUN MODE - No changes will be made');
307
+ }
308
+ const migrationTool = new KratosMigrationTool();
309
+ try {
310
+ const stats = await migrationTool.migrateProject(projectRoot, options);
311
+ console.log('\n📊 Migration Summary:');
312
+ console.log(`├─ Total found: ${stats.totalFound}`);
313
+ console.log(`├─ Migrated: ${stats.migrated}`);
314
+ console.log(`├─ Concepts created: ${stats.conceptsCreated}`);
315
+ console.log(`├─ Errors: ${stats.errors}`);
316
+ console.log(`└─ Skipped: ${stats.skipped}`);
317
+ if (stats.errors > 0) {
318
+ console.log('\n⚠️ Some migrations failed. Check logs for details.');
319
+ process.exit(1);
320
+ }
321
+ else {
322
+ console.log('\n✅ Migration completed successfully!');
323
+ if (!options.dryRun) {
324
+ console.log(`\n🎯 Next steps:`);
325
+ console.log(`1. Test the new system: npm run start:v4`);
326
+ console.log(`2. Update your MCP config to use the new server`);
327
+ console.log(`3. Verify memories: > memory.search q="test"`);
328
+ }
329
+ }
330
+ }
331
+ catch (error) {
332
+ logger.error('Migration failed:', error);
333
+ process.exit(1);
334
+ }
335
+ }
336
+ // Run if this is the main module
337
+ if (import.meta.url === `file://${process.argv[1]}`) {
338
+ main();
339
+ }
340
+ export { KratosMigrationTool };
341
+ //# sourceMappingURL=migrate-to-sqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-to-sqlite.js","sourceRoot":"","sources":["../../src/tools/migrate-to-sqlite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,151 @@
1
+ export interface PRD {
2
+ id: string;
3
+ projectName: string;
4
+ version: string;
5
+ createdAt: Date;
6
+ updatedAt: Date;
7
+ pages: PageDefinition[];
8
+ apiEndpoints: APIEndpoint[];
9
+ dataStructures: DataStructure[];
10
+ userFlows: UserFlow[];
11
+ edgeCases: EdgeCase[];
12
+ integrations: Integration[];
13
+ }
14
+ export interface PageDefinition {
15
+ path: string;
16
+ name: string;
17
+ description: string;
18
+ components: string[];
19
+ dataRequirements: string[];
20
+ }
21
+ export interface APIEndpoint {
22
+ method: string;
23
+ path: string;
24
+ description: string;
25
+ requestBody?: object;
26
+ responseBody?: object;
27
+ authentication: boolean;
28
+ }
29
+ export interface DataStructure {
30
+ name: string;
31
+ schema: object;
32
+ relationships: string[];
33
+ }
34
+ export interface UserFlow {
35
+ name: string;
36
+ steps: string[];
37
+ entryPoint: string;
38
+ exitPoints: string[];
39
+ }
40
+ export interface EdgeCase {
41
+ scenario: string;
42
+ handling: string;
43
+ priority: 'low' | 'medium' | 'high';
44
+ }
45
+ export interface Integration {
46
+ name: string;
47
+ type: string;
48
+ configuration: object;
49
+ }
50
+ export interface Memory {
51
+ id: string;
52
+ type: 'architecture' | 'fixed-guide' | 'open-issue' | 'audit' | 'reference' | 'progress' | 'feature';
53
+ title: string;
54
+ content: string;
55
+ metadata: MemoryMetadata;
56
+ createdAt: Date;
57
+ updatedAt: Date;
58
+ }
59
+ export interface MemoryMetadata {
60
+ tags: string[];
61
+ relatedFiles: string[];
62
+ category?: string;
63
+ priority?: 'low' | 'medium' | 'high';
64
+ autoSaved: boolean;
65
+ conversationId?: string;
66
+ }
67
+ export interface PromptTemplate {
68
+ id: string;
69
+ name: string;
70
+ role: string;
71
+ stack: string[];
72
+ goal: string;
73
+ scopeConstraints: string[];
74
+ fileContext: string[];
75
+ plan: string[];
76
+ memoryRecall: string[];
77
+ verification: string[];
78
+ }
79
+ export interface ContextRule {
80
+ id: string;
81
+ name: string;
82
+ trigger: RuleTrigger;
83
+ action: RuleAction;
84
+ priority: number;
85
+ enabled: boolean;
86
+ }
87
+ export interface RuleTrigger {
88
+ type: 'always' | 'intelligent' | 'file-pattern' | 'manual';
89
+ patterns?: string[];
90
+ keywords?: string[];
91
+ conditions?: object;
92
+ }
93
+ export interface RuleAction {
94
+ type: 'inject-memory' | 'inject-prd' | 'inject-context' | 'warn';
95
+ targets: string[];
96
+ message?: string;
97
+ }
98
+ export interface AutoMemoryConfig {
99
+ enabled: boolean;
100
+ triggers: {
101
+ bugFixes: boolean;
102
+ architecture: boolean;
103
+ features: boolean;
104
+ optimizations: boolean;
105
+ };
106
+ excludePatterns: string[];
107
+ requireConfirmation: boolean;
108
+ smartMerge: boolean;
109
+ }
110
+ export interface ConversationAnalysis {
111
+ hasBugFix: boolean;
112
+ hasArchitectureDecision: boolean;
113
+ hasFeatureImplementation: boolean;
114
+ hasOptimization: boolean;
115
+ extractedTitle?: string;
116
+ extractedContent?: string;
117
+ suggestedType?: Memory['type'];
118
+ confidence: number;
119
+ }
120
+ export interface ConversationMemory {
121
+ id: string;
122
+ projectId: string;
123
+ timestamp: Date;
124
+ conversation: ConversationTurn[];
125
+ extractedInsights: ExtractedInsights;
126
+ tags: string[];
127
+ importance: 'low' | 'medium' | 'high';
128
+ summary?: string;
129
+ }
130
+ export interface ConversationTurn {
131
+ role: 'user' | 'assistant';
132
+ content: string;
133
+ timestamp: Date;
134
+ }
135
+ export interface ExtractedInsights {
136
+ decisions: string[];
137
+ implementations: string[];
138
+ problems: string[];
139
+ solutions: string[];
140
+ learnings: string[];
141
+ codeSnippets: CodeSnippet[];
142
+ dependencies: string[];
143
+ todos: string[];
144
+ }
145
+ export interface CodeSnippet {
146
+ language: string;
147
+ code: string;
148
+ description?: string;
149
+ file?: string;
150
+ }
151
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ export declare class Logger {
2
+ private logger;
3
+ constructor(service: string);
4
+ info(message: string, meta?: any): void;
5
+ error(message: string, error?: any): void;
6
+ warn(message: string, meta?: any): void;
7
+ debug(message: string, meta?: any): void;
8
+ }
9
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAGA,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAiB;gBAEnB,OAAO,EAAE,MAAM;IA0B3B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAIhC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG;IAIlC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAIhC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;CAGlC"}
@@ -0,0 +1,33 @@
1
+ import winston from 'winston';
2
+ import chalk from 'chalk';
3
+ export class Logger {
4
+ logger;
5
+ constructor(service) {
6
+ this.logger = winston.createLogger({
7
+ level: process.env.LOG_LEVEL || 'info',
8
+ format: winston.format.combine(winston.format.timestamp(), winston.format.errors({ stack: true }), winston.format.json()),
9
+ defaultMeta: { service },
10
+ transports: [
11
+ new winston.transports.Console({
12
+ format: winston.format.combine(winston.format.colorize(), winston.format.simple(), winston.format.printf(({ level, message, timestamp, ...meta }) => {
13
+ const ts = new Date(timestamp).toLocaleTimeString();
14
+ return `${chalk.gray(ts)} ${level}: ${message} ${Object.keys(meta).length ? JSON.stringify(meta, null, 2) : ''}`;
15
+ })),
16
+ }),
17
+ ],
18
+ });
19
+ }
20
+ info(message, meta) {
21
+ this.logger.info(message, meta);
22
+ }
23
+ error(message, error) {
24
+ this.logger.error(message, error);
25
+ }
26
+ warn(message, meta) {
27
+ this.logger.warn(message, meta);
28
+ }
29
+ debug(message, meta) {
30
+ this.logger.debug(message, meta);
31
+ }
32
+ }
33
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,OAAO,MAAM;IACT,MAAM,CAAiB;IAE/B,YAAY,OAAe;QACzB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;YACjC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;YACtC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAC5B,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAC1B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EACtC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CACtB;YACD,WAAW,EAAE,EAAE,OAAO,EAAE;YACxB,UAAU,EAAE;gBACV,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;oBAC7B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,EACzB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,EACvB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;wBAC/D,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,SAAmB,CAAC,CAAC,kBAAkB,EAAE,CAAC;wBAC9D,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,KAAK,OAAO,IAC3C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAC7D,EAAE,CAAC;oBACL,CAAC,CAAC,CACH;iBACF,CAAC;aACH;SACF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAAU;QAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,KAAW;QAChC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAAU;QAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAAU;QAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * MCP-safe logger that outputs to stderr to avoid corrupting JSON-RPC protocol
3
+ */
4
+ export declare class MCPLogger {
5
+ private service;
6
+ private enabled;
7
+ constructor(service: string);
8
+ private log;
9
+ info(message: string, meta?: any): void;
10
+ error(message: string, error?: any): void;
11
+ warn(message: string, meta?: any): void;
12
+ debug(message: string, meta?: any): void;
13
+ }
14
+ //# sourceMappingURL=mcp-logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-logger.d.ts","sourceRoot":"","sources":["../../src/utils/mcp-logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAU;gBAEb,OAAO,EAAE,MAAM;IAM3B,OAAO,CAAC,GAAG;IAiBX,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAIhC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG;IAIlC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAIhC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;CAGlC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * MCP-safe logger that outputs to stderr to avoid corrupting JSON-RPC protocol
3
+ */
4
+ export class MCPLogger {
5
+ service;
6
+ enabled;
7
+ constructor(service) {
8
+ this.service = service;
9
+ // Only enable logging if explicitly requested
10
+ this.enabled = process.env.KRATOS_DEBUG === 'true';
11
+ }
12
+ log(level, message, meta) {
13
+ if (!this.enabled)
14
+ return;
15
+ const timestamp = new Date().toISOString();
16
+ const logEntry = {
17
+ timestamp,
18
+ level,
19
+ service: this.service,
20
+ message,
21
+ ...meta
22
+ };
23
+ // CRITICAL: Output to stderr, not stdout
24
+ // stdout is reserved for JSON-RPC protocol
25
+ process.stderr.write(JSON.stringify(logEntry) + '\n');
26
+ }
27
+ info(message, meta) {
28
+ this.log('info', message, meta);
29
+ }
30
+ error(message, error) {
31
+ this.log('error', message, { error: error?.message || error });
32
+ }
33
+ warn(message, meta) {
34
+ this.log('warn', message, meta);
35
+ }
36
+ debug(message, meta) {
37
+ this.log('debug', message, meta);
38
+ }
39
+ }
40
+ //# sourceMappingURL=mcp-logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-logger.js","sourceRoot":"","sources":["../../src/utils/mcp-logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,SAAS;IACZ,OAAO,CAAS;IAChB,OAAO,CAAU;IAEzB,YAAY,OAAe;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,8CAA8C;QAC9C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,MAAM,CAAC;IACrD,CAAC;IAEO,GAAG,CAAC,KAAa,EAAE,OAAe,EAAE,IAAU;QACpD,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAE1B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG;YACf,SAAS;YACT,KAAK;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO;YACP,GAAG,IAAI;SACR,CAAC;QAEF,yCAAyC;QACzC,2CAA2C;QAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAAU;QAC9B,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,KAAW;QAChC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAAU;QAC9B,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAAU;QAC/B,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;CACF"}