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.
- package/LICENSE +21 -0
- package/README.md +351 -0
- package/dist/host-middleware-v2.d.ts +3 -0
- package/dist/host-middleware-v2.d.ts.map +1 -0
- package/dist/host-middleware-v2.js +471 -0
- package/dist/host-middleware-v2.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +939 -0
- package/dist/index.js.map +1 -0
- package/dist/memory-server/concept-store-enhanced.d.ts +88 -0
- package/dist/memory-server/concept-store-enhanced.d.ts.map +1 -0
- package/dist/memory-server/concept-store-enhanced.js +392 -0
- package/dist/memory-server/concept-store-enhanced.js.map +1 -0
- package/dist/memory-server/concept-store.d.ts +58 -0
- package/dist/memory-server/concept-store.d.ts.map +1 -0
- package/dist/memory-server/concept-store.js +329 -0
- package/dist/memory-server/concept-store.js.map +1 -0
- package/dist/memory-server/context-broker.d.ts +63 -0
- package/dist/memory-server/context-broker.d.ts.map +1 -0
- package/dist/memory-server/context-broker.js +340 -0
- package/dist/memory-server/context-broker.js.map +1 -0
- package/dist/memory-server/database.d.ts +61 -0
- package/dist/memory-server/database.d.ts.map +1 -0
- package/dist/memory-server/database.js +309 -0
- package/dist/memory-server/database.js.map +1 -0
- package/dist/modules/prd/index.d.ts +47 -0
- package/dist/modules/prd/index.d.ts.map +1 -0
- package/dist/modules/prd/index.js +220 -0
- package/dist/modules/prd/index.js.map +1 -0
- package/dist/modules/prompt/index.d.ts +47 -0
- package/dist/modules/prompt/index.d.ts.map +1 -0
- package/dist/modules/prompt/index.js +313 -0
- package/dist/modules/prompt/index.js.map +1 -0
- package/dist/project-manager.d.ts +69 -0
- package/dist/project-manager.d.ts.map +1 -0
- package/dist/project-manager.js +207 -0
- package/dist/project-manager.js.map +1 -0
- package/dist/security/data-retention.d.ts +104 -0
- package/dist/security/data-retention.d.ts.map +1 -0
- package/dist/security/data-retention.js +444 -0
- package/dist/security/data-retention.js.map +1 -0
- package/dist/security/encryption.d.ts +48 -0
- package/dist/security/encryption.d.ts.map +1 -0
- package/dist/security/encryption.js +131 -0
- package/dist/security/encryption.js.map +1 -0
- package/dist/security/pii-detector.d.ts +61 -0
- package/dist/security/pii-detector.d.ts.map +1 -0
- package/dist/security/pii-detector.js +220 -0
- package/dist/security/pii-detector.js.map +1 -0
- package/dist/tools/ci-hooks.d.ts +48 -0
- package/dist/tools/ci-hooks.d.ts.map +1 -0
- package/dist/tools/ci-hooks.js +452 -0
- package/dist/tools/ci-hooks.js.map +1 -0
- package/dist/tools/migrate-to-sqlite.d.ts +32 -0
- package/dist/tools/migrate-to-sqlite.d.ts.map +1 -0
- package/dist/tools/migrate-to-sqlite.js +341 -0
- package/dist/tools/migrate-to-sqlite.js.map +1 -0
- package/dist/types/index.d.ts +151 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/logger.d.ts +9 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +33 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/mcp-logger.d.ts +14 -0
- package/dist/utils/mcp-logger.d.ts.map +1 -0
- package/dist/utils/mcp-logger.js +40 -0
- package/dist/utils/mcp-logger.js.map +1 -0
- package/package.json +88 -0
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { spawn } from 'child_process';
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import { Logger } from '../utils/logger.js';
|
|
6
|
+
const logger = new Logger('CI-Hooks');
|
|
7
|
+
/**
|
|
8
|
+
* CI/CD Integration Hooks for Kratos Protocol
|
|
9
|
+
*
|
|
10
|
+
* These hooks can be integrated into your CI/CD pipeline to:
|
|
11
|
+
* - Run leak detection tests
|
|
12
|
+
* - Perform TTL cleanup
|
|
13
|
+
* - Validate project configurations
|
|
14
|
+
* - Generate memory reports
|
|
15
|
+
*/
|
|
16
|
+
class KratosCIHooks {
|
|
17
|
+
/**
|
|
18
|
+
* Pre-commit hook: Run leak detection tests
|
|
19
|
+
*/
|
|
20
|
+
static async preCommitHook() {
|
|
21
|
+
logger.info('Running pre-commit leak detection...');
|
|
22
|
+
try {
|
|
23
|
+
// Run leak detection tests
|
|
24
|
+
const testResult = await KratosCIHooks.runCommand('npm', ['run', 'test:leak']);
|
|
25
|
+
if (testResult.exitCode !== 0) {
|
|
26
|
+
logger.error('❌ Leak detection tests failed!');
|
|
27
|
+
logger.error('Output:', testResult.output);
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
logger.info('✅ Leak detection tests passed');
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
logger.error('Pre-commit hook failed:', error);
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Pre-push hook: Validate all project configurations
|
|
40
|
+
*/
|
|
41
|
+
static async prePushHook() {
|
|
42
|
+
logger.info('Running pre-push validation...');
|
|
43
|
+
try {
|
|
44
|
+
// Find all Kratos projects in the repository
|
|
45
|
+
const projects = await KratosCIHooks.findKratosProjects();
|
|
46
|
+
if (projects.length === 0) {
|
|
47
|
+
logger.info('No Kratos projects found, skipping validation');
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
logger.info(`Found ${projects.length} Kratos projects`);
|
|
51
|
+
// Validate each project
|
|
52
|
+
for (const project of projects) {
|
|
53
|
+
const isValid = await KratosCIHooks.validateProject(project);
|
|
54
|
+
if (!isValid) {
|
|
55
|
+
logger.error(`❌ Project validation failed: ${project}`);
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
logger.info('✅ All projects validated successfully');
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
logger.error('Pre-push hook failed:', error);
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Nightly cleanup: Remove expired memories and compact databases
|
|
69
|
+
*/
|
|
70
|
+
static async nightlyCleanup() {
|
|
71
|
+
logger.info('Running nightly cleanup...');
|
|
72
|
+
try {
|
|
73
|
+
const projects = await KratosCIHooks.findKratosProjects();
|
|
74
|
+
for (const project of projects) {
|
|
75
|
+
await KratosCIHooks.cleanupProject(project);
|
|
76
|
+
}
|
|
77
|
+
// Generate cleanup report
|
|
78
|
+
await KratosCIHooks.generateCleanupReport(projects);
|
|
79
|
+
logger.info('✅ Nightly cleanup completed');
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
logger.error('Nightly cleanup failed:', error);
|
|
83
|
+
throw error;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Security audit: Check for potential data leaks and vulnerabilities
|
|
88
|
+
*/
|
|
89
|
+
static async securityAudit() {
|
|
90
|
+
logger.info('Running security audit...');
|
|
91
|
+
const report = {
|
|
92
|
+
timestamp: new Date().toISOString(),
|
|
93
|
+
projects: [],
|
|
94
|
+
globalConcepts: {},
|
|
95
|
+
vulnerabilities: [],
|
|
96
|
+
recommendations: [],
|
|
97
|
+
};
|
|
98
|
+
try {
|
|
99
|
+
const projects = await KratosCIHooks.findKratosProjects();
|
|
100
|
+
for (const project of projects) {
|
|
101
|
+
const projectAudit = await KratosCIHooks.auditProject(project);
|
|
102
|
+
report.projects.push(projectAudit);
|
|
103
|
+
// Check for vulnerabilities
|
|
104
|
+
if (projectAudit.secretsFound > 0) {
|
|
105
|
+
report.vulnerabilities.push({
|
|
106
|
+
type: 'secrets-in-memories',
|
|
107
|
+
project: project,
|
|
108
|
+
count: projectAudit.secretsFound,
|
|
109
|
+
severity: 'high'
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
if (projectAudit.crossProjectRefs > 0) {
|
|
113
|
+
report.vulnerabilities.push({
|
|
114
|
+
type: 'cross-project-references',
|
|
115
|
+
project: project,
|
|
116
|
+
count: projectAudit.crossProjectRefs,
|
|
117
|
+
severity: 'medium'
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// Global concept store audit
|
|
122
|
+
report.globalConcepts = await KratosCIHooks.auditConceptStore();
|
|
123
|
+
// Generate recommendations
|
|
124
|
+
report.recommendations = KratosCIHooks.generateSecurityRecommendations(report);
|
|
125
|
+
const passed = report.vulnerabilities.length === 0;
|
|
126
|
+
logger.info(passed ? '✅ Security audit passed' : '⚠️ Security issues found');
|
|
127
|
+
return { passed, report };
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
logger.error('Security audit failed:', error);
|
|
131
|
+
throw error;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Memory report: Generate statistics about memory usage across projects
|
|
136
|
+
*/
|
|
137
|
+
static async generateMemoryReport() {
|
|
138
|
+
logger.info('Generating memory usage report...');
|
|
139
|
+
const report = {
|
|
140
|
+
timestamp: new Date().toISOString(),
|
|
141
|
+
summary: {
|
|
142
|
+
totalProjects: 0,
|
|
143
|
+
totalMemories: 0,
|
|
144
|
+
totalConcepts: 0,
|
|
145
|
+
diskUsage: 0,
|
|
146
|
+
},
|
|
147
|
+
projects: [],
|
|
148
|
+
topTags: {},
|
|
149
|
+
recommendations: [],
|
|
150
|
+
};
|
|
151
|
+
try {
|
|
152
|
+
const projects = await KratosCIHooks.findKratosProjects();
|
|
153
|
+
report.summary.totalProjects = projects.length;
|
|
154
|
+
const allTags = new Map();
|
|
155
|
+
for (const project of projects) {
|
|
156
|
+
const projectStats = await KratosCIHooks.getProjectStats(project);
|
|
157
|
+
report.projects.push(projectStats);
|
|
158
|
+
report.summary.totalMemories += projectStats.memoryCount;
|
|
159
|
+
report.summary.diskUsage += projectStats.diskUsage;
|
|
160
|
+
// Aggregate tags
|
|
161
|
+
for (const [tag, count] of Object.entries(projectStats.topTags)) {
|
|
162
|
+
allTags.set(tag, (allTags.get(tag) || 0) + count);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// Get global concept stats
|
|
166
|
+
const conceptStats = await KratosCIHooks.getConceptStats();
|
|
167
|
+
report.summary.totalConcepts = conceptStats.totalConcepts;
|
|
168
|
+
// Top tags across all projects
|
|
169
|
+
report.topTags = Object.fromEntries(Array.from(allTags.entries())
|
|
170
|
+
.sort(([, a], [, b]) => b - a)
|
|
171
|
+
.slice(0, 20));
|
|
172
|
+
// Generate recommendations
|
|
173
|
+
report.recommendations = KratosCIHooks.generateMemoryRecommendations(report);
|
|
174
|
+
logger.info('✅ Memory report generated');
|
|
175
|
+
return report;
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
logger.error('Memory report generation failed:', error);
|
|
179
|
+
throw error;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// Helper methods
|
|
183
|
+
static async findKratosProjects() {
|
|
184
|
+
const projects = [];
|
|
185
|
+
// Search for .kratos directories
|
|
186
|
+
const findCommand = process.platform === 'win32'
|
|
187
|
+
? ['find', '.', '-name', '.kratos', '-type', 'd']
|
|
188
|
+
: ['find', '.', '-name', '.kratos', '-type', 'd'];
|
|
189
|
+
const result = await KratosCIHooks.runCommand('find', ['.', '-name', '.kratos', '-type', 'd']);
|
|
190
|
+
if (result.exitCode === 0) {
|
|
191
|
+
const lines = result.output.split('\n').filter(line => line.trim());
|
|
192
|
+
for (const line of lines) {
|
|
193
|
+
const projectRoot = path.dirname(line);
|
|
194
|
+
projects.push(path.resolve(projectRoot));
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return projects;
|
|
198
|
+
}
|
|
199
|
+
static async validateProject(projectPath) {
|
|
200
|
+
const kratosDir = path.join(projectPath, '.kratos');
|
|
201
|
+
// Check required files
|
|
202
|
+
const requiredFiles = ['project.json'];
|
|
203
|
+
for (const file of requiredFiles) {
|
|
204
|
+
if (!await fs.pathExists(path.join(kratosDir, file))) {
|
|
205
|
+
logger.error(`Missing required file: ${file} in ${projectPath}`);
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
// Validate project.json
|
|
210
|
+
try {
|
|
211
|
+
const projectConfig = await fs.readJson(path.join(kratosDir, 'project.json'));
|
|
212
|
+
if (!projectConfig.project_id || !projectConfig.name) {
|
|
213
|
+
logger.error(`Invalid project.json in ${projectPath}`);
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
logger.error(`Invalid project.json in ${projectPath}:`, error);
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
return true;
|
|
222
|
+
}
|
|
223
|
+
static async cleanupProject(projectPath) {
|
|
224
|
+
logger.info(`Cleaning up project: ${projectPath}`);
|
|
225
|
+
const dbPath = path.join(projectPath, '.kratos', 'memory.db');
|
|
226
|
+
if (await fs.pathExists(dbPath)) {
|
|
227
|
+
// Run VACUUM on SQLite database to reclaim space
|
|
228
|
+
await KratosCIHooks.runCommand('sqlite3', [dbPath, 'VACUUM;']);
|
|
229
|
+
// Clean up expired memories (handled by the database itself via triggers)
|
|
230
|
+
logger.info(`Database cleaned: ${dbPath}`);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
static async auditProject(projectPath) {
|
|
234
|
+
const audit = {
|
|
235
|
+
project: projectPath,
|
|
236
|
+
memoryCount: 0,
|
|
237
|
+
secretsFound: 0,
|
|
238
|
+
crossProjectRefs: 0,
|
|
239
|
+
largestMemory: 0,
|
|
240
|
+
oldestMemory: null,
|
|
241
|
+
diskUsage: 0,
|
|
242
|
+
};
|
|
243
|
+
try {
|
|
244
|
+
const dbPath = path.join(projectPath, '.kratos', 'memory.db');
|
|
245
|
+
if (await fs.pathExists(dbPath)) {
|
|
246
|
+
const stats = await fs.stat(dbPath);
|
|
247
|
+
audit.diskUsage = stats.size;
|
|
248
|
+
// Run security queries on the database
|
|
249
|
+
const secretsResult = await KratosCIHooks.runCommand('sqlite3', [
|
|
250
|
+
dbPath,
|
|
251
|
+
`SELECT COUNT(*) FROM memories WHERE
|
|
252
|
+
text LIKE '%api_key%' OR
|
|
253
|
+
text LIKE '%password%' OR
|
|
254
|
+
text LIKE '%secret%' OR
|
|
255
|
+
text LIKE '%token%';`
|
|
256
|
+
]);
|
|
257
|
+
if (secretsResult.exitCode === 0) {
|
|
258
|
+
audit.secretsFound = parseInt(secretsResult.output.trim()) || 0;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
logger.warn(`Audit failed for ${projectPath}:`, error);
|
|
264
|
+
}
|
|
265
|
+
return audit;
|
|
266
|
+
}
|
|
267
|
+
static async auditConceptStore() {
|
|
268
|
+
const audit = {
|
|
269
|
+
totalConcepts: 0,
|
|
270
|
+
averageLength: 0,
|
|
271
|
+
topTags: {},
|
|
272
|
+
diskUsage: 0,
|
|
273
|
+
};
|
|
274
|
+
try {
|
|
275
|
+
const conceptDbPath = path.join(require('os').homedir(), '.kratos', 'concept_store.db');
|
|
276
|
+
if (await fs.pathExists(conceptDbPath)) {
|
|
277
|
+
const stats = await fs.stat(conceptDbPath);
|
|
278
|
+
audit.diskUsage = stats.size;
|
|
279
|
+
const countResult = await KratosCIHooks.runCommand('sqlite3', [
|
|
280
|
+
conceptDbPath,
|
|
281
|
+
'SELECT COUNT(*) FROM concepts;'
|
|
282
|
+
]);
|
|
283
|
+
if (countResult.exitCode === 0) {
|
|
284
|
+
audit.totalConcepts = parseInt(countResult.output.trim()) || 0;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
catch (error) {
|
|
289
|
+
logger.warn('Concept store audit failed:', error);
|
|
290
|
+
}
|
|
291
|
+
return audit;
|
|
292
|
+
}
|
|
293
|
+
static async getProjectStats(projectPath) {
|
|
294
|
+
const stats = {
|
|
295
|
+
project: projectPath,
|
|
296
|
+
memoryCount: 0,
|
|
297
|
+
diskUsage: 0,
|
|
298
|
+
topTags: {},
|
|
299
|
+
avgImportance: 0,
|
|
300
|
+
};
|
|
301
|
+
try {
|
|
302
|
+
const dbPath = path.join(projectPath, '.kratos', 'memory.db');
|
|
303
|
+
if (await fs.pathExists(dbPath)) {
|
|
304
|
+
const fileStats = await fs.stat(dbPath);
|
|
305
|
+
stats.diskUsage = fileStats.size;
|
|
306
|
+
// Get memory count
|
|
307
|
+
const countResult = await KratosCIHooks.runCommand('sqlite3', [
|
|
308
|
+
dbPath,
|
|
309
|
+
'SELECT COUNT(*) FROM memories;'
|
|
310
|
+
]);
|
|
311
|
+
if (countResult.exitCode === 0) {
|
|
312
|
+
stats.memoryCount = parseInt(countResult.output.trim()) || 0;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
catch (error) {
|
|
317
|
+
logger.warn(`Stats collection failed for ${projectPath}:`, error);
|
|
318
|
+
}
|
|
319
|
+
return stats;
|
|
320
|
+
}
|
|
321
|
+
static async getConceptStats() {
|
|
322
|
+
const stats = {
|
|
323
|
+
totalConcepts: 0,
|
|
324
|
+
diskUsage: 0,
|
|
325
|
+
};
|
|
326
|
+
try {
|
|
327
|
+
const conceptDbPath = path.join(require('os').homedir(), '.kratos', 'concept_store.db');
|
|
328
|
+
if (await fs.pathExists(conceptDbPath)) {
|
|
329
|
+
const fileStats = await fs.stat(conceptDbPath);
|
|
330
|
+
stats.diskUsage = fileStats.size;
|
|
331
|
+
const countResult = await KratosCIHooks.runCommand('sqlite3', [
|
|
332
|
+
conceptDbPath,
|
|
333
|
+
'SELECT COUNT(*) FROM concepts;'
|
|
334
|
+
]);
|
|
335
|
+
if (countResult.exitCode === 0) {
|
|
336
|
+
stats.totalConcepts = parseInt(countResult.output.trim()) || 0;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
catch (error) {
|
|
341
|
+
logger.warn('Concept stats collection failed:', error);
|
|
342
|
+
}
|
|
343
|
+
return stats;
|
|
344
|
+
}
|
|
345
|
+
static generateSecurityRecommendations(report) {
|
|
346
|
+
const recommendations = [];
|
|
347
|
+
if (report.vulnerabilities.some((v) => v.type === 'secrets-in-memories')) {
|
|
348
|
+
recommendations.push('Review and remove any secrets stored in memories');
|
|
349
|
+
recommendations.push('Implement stronger redaction patterns in middleware');
|
|
350
|
+
}
|
|
351
|
+
if (report.vulnerabilities.some((v) => v.type === 'cross-project-references')) {
|
|
352
|
+
recommendations.push('Audit cross-project references for potential data leaks');
|
|
353
|
+
recommendations.push('Consider using concept store for shared knowledge');
|
|
354
|
+
}
|
|
355
|
+
return recommendations;
|
|
356
|
+
}
|
|
357
|
+
static generateMemoryRecommendations(report) {
|
|
358
|
+
const recommendations = [];
|
|
359
|
+
const avgMemoriesPerProject = report.summary.totalMemories / report.summary.totalProjects;
|
|
360
|
+
if (avgMemoriesPerProject > 1000) {
|
|
361
|
+
recommendations.push('Consider implementing more aggressive TTL policies');
|
|
362
|
+
recommendations.push('Review memory importance scoring to prioritize retention');
|
|
363
|
+
}
|
|
364
|
+
if (report.summary.diskUsage > 100 * 1024 * 1024) { // 100MB
|
|
365
|
+
recommendations.push('Database size is large - consider archiving old memories');
|
|
366
|
+
recommendations.push('Run VACUUM on SQLite databases to reclaim space');
|
|
367
|
+
}
|
|
368
|
+
return recommendations;
|
|
369
|
+
}
|
|
370
|
+
static async generateCleanupReport(projects) {
|
|
371
|
+
const report = {
|
|
372
|
+
timestamp: new Date().toISOString(),
|
|
373
|
+
projectsCleaned: projects.length,
|
|
374
|
+
totalSizeReclaimed: 0,
|
|
375
|
+
memoriesExpired: 0,
|
|
376
|
+
};
|
|
377
|
+
const reportPath = path.join(process.cwd(), '.kratos-cleanup-report.json');
|
|
378
|
+
await fs.writeJson(reportPath, report, { spaces: 2 });
|
|
379
|
+
logger.info(`Cleanup report saved: ${reportPath}`);
|
|
380
|
+
}
|
|
381
|
+
static async runCommand(command, args) {
|
|
382
|
+
return new Promise((resolve) => {
|
|
383
|
+
const child = spawn(command, args, { stdio: 'pipe' });
|
|
384
|
+
let output = '';
|
|
385
|
+
child.stdout.on('data', (data) => {
|
|
386
|
+
output += data.toString();
|
|
387
|
+
});
|
|
388
|
+
child.stderr.on('data', (data) => {
|
|
389
|
+
output += data.toString();
|
|
390
|
+
});
|
|
391
|
+
child.on('close', (code) => {
|
|
392
|
+
resolve({
|
|
393
|
+
exitCode: code || 0,
|
|
394
|
+
output: output.trim(),
|
|
395
|
+
});
|
|
396
|
+
});
|
|
397
|
+
child.on('error', (error) => {
|
|
398
|
+
resolve({
|
|
399
|
+
exitCode: 1,
|
|
400
|
+
output: error.message,
|
|
401
|
+
});
|
|
402
|
+
});
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
// CLI interface
|
|
407
|
+
async function main() {
|
|
408
|
+
const command = process.argv[2];
|
|
409
|
+
try {
|
|
410
|
+
switch (command) {
|
|
411
|
+
case 'pre-commit':
|
|
412
|
+
const preCommitPassed = await KratosCIHooks.preCommitHook();
|
|
413
|
+
process.exit(preCommitPassed ? 0 : 1);
|
|
414
|
+
break;
|
|
415
|
+
case 'pre-push':
|
|
416
|
+
const prePushPassed = await KratosCIHooks.prePushHook();
|
|
417
|
+
process.exit(prePushPassed ? 0 : 1);
|
|
418
|
+
break;
|
|
419
|
+
case 'nightly-cleanup':
|
|
420
|
+
await KratosCIHooks.nightlyCleanup();
|
|
421
|
+
break;
|
|
422
|
+
case 'security-audit':
|
|
423
|
+
const { passed, report } = await KratosCIHooks.securityAudit();
|
|
424
|
+
console.log(JSON.stringify(report, null, 2));
|
|
425
|
+
process.exit(passed ? 0 : 1);
|
|
426
|
+
break;
|
|
427
|
+
case 'memory-report':
|
|
428
|
+
const memoryReport = await KratosCIHooks.generateMemoryReport();
|
|
429
|
+
console.log(JSON.stringify(memoryReport, null, 2));
|
|
430
|
+
break;
|
|
431
|
+
default:
|
|
432
|
+
console.log('Usage: kratos-ci-hooks <command>');
|
|
433
|
+
console.log('Commands:');
|
|
434
|
+
console.log(' pre-commit - Run leak detection tests');
|
|
435
|
+
console.log(' pre-push - Validate project configurations');
|
|
436
|
+
console.log(' nightly-cleanup - Clean up expired memories');
|
|
437
|
+
console.log(' security-audit - Check for security vulnerabilities');
|
|
438
|
+
console.log(' memory-report - Generate memory usage statistics');
|
|
439
|
+
process.exit(1);
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
catch (error) {
|
|
443
|
+
logger.error('CI hook failed:', error);
|
|
444
|
+
process.exit(1);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
// Run if this is the main module
|
|
448
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
449
|
+
main();
|
|
450
|
+
}
|
|
451
|
+
export { KratosCIHooks };
|
|
452
|
+
//# sourceMappingURL=ci-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci-hooks.js","sourceRoot":"","sources":["../../src/tools/ci-hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
interface MigrationStats {
|
|
3
|
+
totalFound: number;
|
|
4
|
+
migrated: number;
|
|
5
|
+
skipped: number;
|
|
6
|
+
errors: number;
|
|
7
|
+
conceptsCreated: number;
|
|
8
|
+
}
|
|
9
|
+
declare class KratosMigrationTool {
|
|
10
|
+
private stats;
|
|
11
|
+
migrateProject(projectRoot: string, options?: {
|
|
12
|
+
dryRun?: boolean;
|
|
13
|
+
createBackup?: boolean;
|
|
14
|
+
extractConcepts?: boolean;
|
|
15
|
+
}): Promise<MigrationStats>;
|
|
16
|
+
private findLegacyMemories;
|
|
17
|
+
private findJsonFiles;
|
|
18
|
+
private loadLegacyMemory;
|
|
19
|
+
private convertMemory;
|
|
20
|
+
private inferImportance;
|
|
21
|
+
private calculateTTL;
|
|
22
|
+
private shouldBeConcept;
|
|
23
|
+
private extractConceptBody;
|
|
24
|
+
private extractConceptTags;
|
|
25
|
+
private generateConceptId;
|
|
26
|
+
private initializeProject;
|
|
27
|
+
private getGitHash;
|
|
28
|
+
private createBackup;
|
|
29
|
+
private createMigrationLog;
|
|
30
|
+
}
|
|
31
|
+
export { KratosMigrationTool };
|
|
32
|
+
//# sourceMappingURL=migrate-to-sqlite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-to-sqlite.d.ts","sourceRoot":"","sources":["../../src/tools/migrate-to-sqlite.ts"],"names":[],"mappings":";AA6BA,UAAU,cAAc;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,cAAM,mBAAmB;IACvB,OAAO,CAAC,KAAK,CAMX;IAEI,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE;QACjD,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,eAAe,CAAC,EAAE,OAAO,CAAC;KACtB,GAAG,OAAO,CAAC,cAAc,CAAC;YA0FlB,kBAAkB;YAmBlB,aAAa;YAkBb,gBAAgB;IAiB9B,OAAO,CAAC,aAAa;IAuCrB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,iBAAiB;YAUX,iBAAiB;YAgCjB,UAAU;YAkBV,YAAY;YAYZ,kBAAkB;CAWjC;AAqDD,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
|