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,309 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
import crypto from 'crypto';
|
|
5
|
+
import { MCPLogger as Logger } from '../utils/mcp-logger.js';
|
|
6
|
+
const logger = new Logger('MemoryDB');
|
|
7
|
+
export class MemoryDatabase {
|
|
8
|
+
db;
|
|
9
|
+
projectId;
|
|
10
|
+
projectRoot;
|
|
11
|
+
constructor(projectRoot, projectId) {
|
|
12
|
+
this.projectRoot = projectRoot;
|
|
13
|
+
this.projectId = projectId;
|
|
14
|
+
// CRITICAL: Each project gets COMPLETELY ISOLATED database
|
|
15
|
+
// Path: ~/.kratos/projects/{project_id}/databases/memories.db
|
|
16
|
+
// This ensures NO cross-contamination between projects
|
|
17
|
+
const kratosHome = path.join(process.env.HOME || process.env.USERPROFILE || '', '.kratos');
|
|
18
|
+
const dbPath = path.join(kratosHome, 'projects', projectId, 'databases', 'memories.db');
|
|
19
|
+
fs.ensureDirSync(path.dirname(dbPath));
|
|
20
|
+
this.db = new Database(dbPath);
|
|
21
|
+
this.db.pragma('journal_mode = WAL');
|
|
22
|
+
this.db.pragma('foreign_keys = ON');
|
|
23
|
+
this.initializeSchema();
|
|
24
|
+
this.setupTriggers();
|
|
25
|
+
logger.info(`Memory database ISOLATED for project: ${projectId} at ${dbPath}`);
|
|
26
|
+
}
|
|
27
|
+
initializeSchema() {
|
|
28
|
+
// Main memories table
|
|
29
|
+
this.db.exec(`
|
|
30
|
+
CREATE TABLE IF NOT EXISTS memories (
|
|
31
|
+
id TEXT PRIMARY KEY,
|
|
32
|
+
project_id TEXT NOT NULL,
|
|
33
|
+
summary TEXT NOT NULL,
|
|
34
|
+
text TEXT NOT NULL,
|
|
35
|
+
tags TEXT DEFAULT '[]',
|
|
36
|
+
paths TEXT DEFAULT '[]',
|
|
37
|
+
importance INTEGER DEFAULT 3 CHECK(importance >= 1 AND importance <= 5),
|
|
38
|
+
created_at INTEGER NOT NULL,
|
|
39
|
+
updated_at INTEGER NOT NULL,
|
|
40
|
+
ttl INTEGER,
|
|
41
|
+
expires_at INTEGER,
|
|
42
|
+
dedupe_hash TEXT
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
CREATE INDEX IF NOT EXISTS idx_mem_project ON memories(project_id);
|
|
46
|
+
CREATE INDEX IF NOT EXISTS idx_mem_expires ON memories(expires_at) WHERE expires_at IS NOT NULL;
|
|
47
|
+
CREATE INDEX IF NOT EXISTS idx_mem_importance ON memories(importance DESC, created_at DESC);
|
|
48
|
+
CREATE INDEX IF NOT EXISTS idx_mem_dedupe ON memories(dedupe_hash);
|
|
49
|
+
`);
|
|
50
|
+
// Full-text search virtual table - INCLUDING TAGS for better search
|
|
51
|
+
this.db.exec(`
|
|
52
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS mem_fts USING fts5(
|
|
53
|
+
summary,
|
|
54
|
+
text,
|
|
55
|
+
tags,
|
|
56
|
+
content='memories',
|
|
57
|
+
content_rowid='rowid',
|
|
58
|
+
tokenize='porter unicode61'
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
-- Triggers to keep FTS in sync - now including tags
|
|
62
|
+
CREATE TRIGGER IF NOT EXISTS mem_fts_insert AFTER INSERT ON memories BEGIN
|
|
63
|
+
INSERT INTO mem_fts(rowid, summary, text, tags)
|
|
64
|
+
VALUES (new.rowid, new.summary, new.text,
|
|
65
|
+
CASE WHEN json_array_length(new.tags) > 0
|
|
66
|
+
THEN (SELECT group_concat(value, ' ') FROM json_each(new.tags))
|
|
67
|
+
ELSE ''
|
|
68
|
+
END);
|
|
69
|
+
END;
|
|
70
|
+
|
|
71
|
+
CREATE TRIGGER IF NOT EXISTS mem_fts_delete AFTER DELETE ON memories BEGIN
|
|
72
|
+
DELETE FROM mem_fts WHERE rowid = old.rowid;
|
|
73
|
+
END;
|
|
74
|
+
|
|
75
|
+
CREATE TRIGGER IF NOT EXISTS mem_fts_update AFTER UPDATE ON memories BEGIN
|
|
76
|
+
DELETE FROM mem_fts WHERE rowid = old.rowid;
|
|
77
|
+
INSERT INTO mem_fts(rowid, summary, text, tags)
|
|
78
|
+
VALUES (new.rowid, new.summary, new.text,
|
|
79
|
+
CASE WHEN json_array_length(new.tags) > 0
|
|
80
|
+
THEN (SELECT group_concat(value, ' ') FROM json_each(new.tags))
|
|
81
|
+
ELSE ''
|
|
82
|
+
END);
|
|
83
|
+
END;
|
|
84
|
+
`);
|
|
85
|
+
}
|
|
86
|
+
setupTriggers() {
|
|
87
|
+
// Auto-cleanup expired memories
|
|
88
|
+
setInterval(() => {
|
|
89
|
+
this.cleanupExpired();
|
|
90
|
+
}, 60 * 60 * 1000); // Every hour
|
|
91
|
+
}
|
|
92
|
+
save(params) {
|
|
93
|
+
// Project isolation is enforced by the database path itself
|
|
94
|
+
// Each project has its own database file, so no cross-contamination is possible
|
|
95
|
+
const now = Date.now();
|
|
96
|
+
const id = this.generateId();
|
|
97
|
+
// Compute dedupe hash
|
|
98
|
+
const dedupeHash = this.computeDedupeHash(params.summary, params.paths || []);
|
|
99
|
+
// Check for duplicates
|
|
100
|
+
const existing = this.db.prepare('SELECT id FROM memories WHERE dedupe_hash = ? AND project_id = ?').get(dedupeHash, this.projectId);
|
|
101
|
+
if (existing && typeof existing === 'object' && 'id' in existing) {
|
|
102
|
+
logger.info(`Duplicate memory detected, updating existing: ${existing.id}`);
|
|
103
|
+
return this.update(existing.id, params);
|
|
104
|
+
}
|
|
105
|
+
// Calculate expiration
|
|
106
|
+
const expires_at = params.ttl ? now + (params.ttl * 1000) : null;
|
|
107
|
+
const stmt = this.db.prepare(`
|
|
108
|
+
INSERT INTO memories (
|
|
109
|
+
id, project_id, summary, text, tags, paths,
|
|
110
|
+
importance, created_at, updated_at, ttl, expires_at, dedupe_hash
|
|
111
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
112
|
+
`);
|
|
113
|
+
stmt.run(id, this.projectId, params.summary, params.text, JSON.stringify(params.tags || []), JSON.stringify(params.paths || []), params.importance || 3, now, now, params.ttl || null, expires_at, dedupeHash);
|
|
114
|
+
logger.info(`Memory saved: ${id} - ${params.summary}`);
|
|
115
|
+
// Return the complete memory object
|
|
116
|
+
const memory = {
|
|
117
|
+
id,
|
|
118
|
+
project_id: this.projectId,
|
|
119
|
+
summary: params.summary,
|
|
120
|
+
text: params.text,
|
|
121
|
+
tags: params.tags || [],
|
|
122
|
+
paths: params.paths || [],
|
|
123
|
+
importance: params.importance || 3,
|
|
124
|
+
created_at: now,
|
|
125
|
+
updated_at: now,
|
|
126
|
+
ttl: params.ttl,
|
|
127
|
+
expires_at: expires_at || undefined
|
|
128
|
+
};
|
|
129
|
+
return memory;
|
|
130
|
+
}
|
|
131
|
+
search(params) {
|
|
132
|
+
const k = params.k || 10;
|
|
133
|
+
const now = Date.now();
|
|
134
|
+
// Build FTS query
|
|
135
|
+
let query = `
|
|
136
|
+
SELECT
|
|
137
|
+
m.*,
|
|
138
|
+
bm25(mem_fts) as fts_score,
|
|
139
|
+
snippet(mem_fts, 0, '[', ']', '...', 32) as snippet
|
|
140
|
+
FROM memories m
|
|
141
|
+
JOIN mem_fts ON m.rowid = mem_fts.rowid
|
|
142
|
+
WHERE mem_fts MATCH ?
|
|
143
|
+
AND m.project_id = ?
|
|
144
|
+
`;
|
|
145
|
+
const queryParams = [this.escapeQuery(params.q), this.projectId];
|
|
146
|
+
// Add expiration filter
|
|
147
|
+
if (!params.include_expired) {
|
|
148
|
+
query += ' AND (m.expires_at IS NULL OR m.expires_at > ?)';
|
|
149
|
+
queryParams.push(now);
|
|
150
|
+
}
|
|
151
|
+
// Add tag filter
|
|
152
|
+
if (params.tags && params.tags.length > 0) {
|
|
153
|
+
query += ' AND EXISTS (SELECT 1 FROM json_each(m.tags) WHERE value IN (' +
|
|
154
|
+
params.tags.map(() => '?').join(',') + '))';
|
|
155
|
+
queryParams.push(...params.tags);
|
|
156
|
+
}
|
|
157
|
+
query += ' ORDER BY fts_score DESC, m.importance DESC, m.created_at DESC LIMIT ?';
|
|
158
|
+
queryParams.push(k);
|
|
159
|
+
const stmt = this.db.prepare(query);
|
|
160
|
+
const results = stmt.all(...queryParams);
|
|
161
|
+
return results.map(row => ({
|
|
162
|
+
memory: this.rowToMemory(row),
|
|
163
|
+
score: -row.fts_score, // BM25 returns negative scores
|
|
164
|
+
snippet: row.snippet
|
|
165
|
+
}));
|
|
166
|
+
}
|
|
167
|
+
getRecent(params) {
|
|
168
|
+
const k = params.k || 10;
|
|
169
|
+
const now = Date.now();
|
|
170
|
+
let query = `
|
|
171
|
+
SELECT * FROM memories
|
|
172
|
+
WHERE project_id = ?
|
|
173
|
+
`;
|
|
174
|
+
const queryParams = [this.projectId];
|
|
175
|
+
if (!params.include_expired) {
|
|
176
|
+
query += ' AND (expires_at IS NULL OR expires_at > ?)';
|
|
177
|
+
queryParams.push(now);
|
|
178
|
+
}
|
|
179
|
+
if (params.path_prefix) {
|
|
180
|
+
query += ` AND EXISTS (
|
|
181
|
+
SELECT 1 FROM json_each(paths)
|
|
182
|
+
WHERE value LIKE ? || '%'
|
|
183
|
+
)`;
|
|
184
|
+
queryParams.push(params.path_prefix);
|
|
185
|
+
}
|
|
186
|
+
query += ' ORDER BY created_at DESC LIMIT ?';
|
|
187
|
+
queryParams.push(k);
|
|
188
|
+
const stmt = this.db.prepare(query);
|
|
189
|
+
const results = stmt.all(...queryParams);
|
|
190
|
+
return results.map(row => this.rowToMemory(row));
|
|
191
|
+
}
|
|
192
|
+
forget(id) {
|
|
193
|
+
try {
|
|
194
|
+
// Project isolation is enforced - each project has its own database
|
|
195
|
+
// Check if memory exists first
|
|
196
|
+
const checkStmt = this.db.prepare('SELECT id FROM memories WHERE id = ? AND project_id = ?');
|
|
197
|
+
const exists = checkStmt.get(id, this.projectId);
|
|
198
|
+
if (!exists) {
|
|
199
|
+
return {
|
|
200
|
+
ok: false,
|
|
201
|
+
message: `Memory ${id} not found in project ${this.projectId}`
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
// Delete from main table
|
|
205
|
+
const stmt = this.db.prepare('DELETE FROM memories WHERE id = ? AND project_id = ?');
|
|
206
|
+
const result = stmt.run(id, this.projectId);
|
|
207
|
+
// Try to delete from FTS index if it exists
|
|
208
|
+
try {
|
|
209
|
+
const ftsExists = this.db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='memories_fts'").get();
|
|
210
|
+
if (ftsExists) {
|
|
211
|
+
const ftsStmt = this.db.prepare('DELETE FROM memories_fts WHERE rowid = (SELECT rowid FROM memories WHERE id = ?)');
|
|
212
|
+
ftsStmt.run(id);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
catch (ftsError) {
|
|
216
|
+
// FTS table might not exist, that's okay
|
|
217
|
+
logger.debug('FTS deletion skipped:', ftsError);
|
|
218
|
+
}
|
|
219
|
+
logger.info(`Memory deleted: ${id}`);
|
|
220
|
+
return {
|
|
221
|
+
ok: result.changes > 0,
|
|
222
|
+
message: result.changes > 0 ? 'Memory deleted successfully' : 'Memory not found'
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
logger.error(`Failed to delete memory ${id}:`, error);
|
|
227
|
+
return {
|
|
228
|
+
ok: false,
|
|
229
|
+
message: `Error: ${error.message}`
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
update(id, params) {
|
|
234
|
+
const now = Date.now();
|
|
235
|
+
const updates = ['updated_at = ?'];
|
|
236
|
+
const values = [now];
|
|
237
|
+
if (params.summary !== undefined) {
|
|
238
|
+
updates.push('summary = ?');
|
|
239
|
+
values.push(params.summary);
|
|
240
|
+
}
|
|
241
|
+
if (params.text !== undefined) {
|
|
242
|
+
updates.push('text = ?');
|
|
243
|
+
values.push(params.text);
|
|
244
|
+
}
|
|
245
|
+
if (params.tags !== undefined) {
|
|
246
|
+
updates.push('tags = ?');
|
|
247
|
+
values.push(JSON.stringify(params.tags));
|
|
248
|
+
}
|
|
249
|
+
if (params.paths !== undefined) {
|
|
250
|
+
updates.push('paths = ?');
|
|
251
|
+
values.push(JSON.stringify(params.paths));
|
|
252
|
+
}
|
|
253
|
+
if (params.importance !== undefined) {
|
|
254
|
+
updates.push('importance = ?');
|
|
255
|
+
values.push(params.importance);
|
|
256
|
+
}
|
|
257
|
+
values.push(id, this.projectId);
|
|
258
|
+
const stmt = this.db.prepare(`
|
|
259
|
+
UPDATE memories
|
|
260
|
+
SET ${updates.join(', ')}
|
|
261
|
+
WHERE id = ? AND project_id = ?
|
|
262
|
+
`);
|
|
263
|
+
stmt.run(...values);
|
|
264
|
+
return { id };
|
|
265
|
+
}
|
|
266
|
+
cleanupExpired() {
|
|
267
|
+
const now = Date.now();
|
|
268
|
+
const stmt = this.db.prepare('DELETE FROM memories WHERE expires_at < ?');
|
|
269
|
+
const result = stmt.run(now);
|
|
270
|
+
if (result.changes > 0) {
|
|
271
|
+
logger.info(`Cleaned up ${result.changes} expired memories`);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
generateId() {
|
|
275
|
+
return `mem_${Date.now()}_${crypto.randomBytes(4).toString('hex')}`;
|
|
276
|
+
}
|
|
277
|
+
computeDedupeHash(summary, paths) {
|
|
278
|
+
const normalized = summary.toLowerCase().trim() + '|' + paths.sort().join('|');
|
|
279
|
+
return crypto.createHash('md5').update(normalized).digest('hex');
|
|
280
|
+
}
|
|
281
|
+
escapeQuery(query) {
|
|
282
|
+
// Escape FTS5 special characters
|
|
283
|
+
return query.replace(/["]/g, '""');
|
|
284
|
+
}
|
|
285
|
+
rowToMemory(row) {
|
|
286
|
+
return {
|
|
287
|
+
id: row.id,
|
|
288
|
+
project_id: row.project_id,
|
|
289
|
+
summary: row.summary,
|
|
290
|
+
text: row.text,
|
|
291
|
+
tags: JSON.parse(row.tags),
|
|
292
|
+
paths: JSON.parse(row.paths),
|
|
293
|
+
importance: row.importance,
|
|
294
|
+
created_at: row.created_at,
|
|
295
|
+
updated_at: row.updated_at,
|
|
296
|
+
ttl: row.ttl,
|
|
297
|
+
expires_at: row.expires_at
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
getActiveProjectId() {
|
|
301
|
+
// Always use the projectId passed to constructor - ensures true isolation
|
|
302
|
+
// No environment variable dependency - each database instance is bound to its project
|
|
303
|
+
return this.projectId;
|
|
304
|
+
}
|
|
305
|
+
close() {
|
|
306
|
+
this.db.close();
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/memory-server/database.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,SAAS,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC;AAsBtC,MAAM,OAAO,cAAc;IACjB,EAAE,CAAoB;IACtB,SAAS,CAAS;IAClB,WAAW,CAAS;IAE5B,YAAY,WAAmB,EAAE,SAAiB;QAChD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAE3B,2DAA2D;QAC3D,8DAA8D;QAC9D,uDAAuD;QACvD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;QAC3F,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;QACxF,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAEvC,IAAI,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAEpC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,yCAAyC,SAAS,OAAO,MAAM,EAAE,CAAC,CAAC;IACjF,CAAC;IAEO,gBAAgB;QACtB,sBAAsB;QACtB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;KAoBZ,CAAC,CAAC;QAEH,oEAAoE;QACpE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAiCZ,CAAC,CAAC;IACL,CAAC;IAEO,aAAa;QACnB,gCAAgC;QAChC,WAAW,CAAC,GAAG,EAAE;YACf,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,aAAa;IACnC,CAAC;IAED,IAAI,CAAC,MAOJ;QACC,4DAA4D;QAC5D,gFAAgF;QAEhF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAE7B,sBAAsB;QACtB,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAE9E,uBAAuB;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC9B,kEAAkE,CACnE,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAElC,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC,iDAAkD,QAAgB,CAAC,EAAE,EAAE,CAAC,CAAC;YACrF,OAAO,IAAI,CAAC,MAAM,CAAE,QAAgB,CAAC,EAAY,EAAE,MAAM,CAAC,CAAC;QAC7D,CAAC;QAED,uBAAuB;QACvB,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEjE,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;KAK5B,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CACN,EAAE,EACF,IAAI,CAAC,SAAS,EACd,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,IAAI,EACX,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,EACjC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,EAClC,MAAM,CAAC,UAAU,IAAI,CAAC,EACtB,GAAG,EACH,GAAG,EACH,MAAM,CAAC,GAAG,IAAI,IAAI,EAClB,UAAU,EACV,UAAU,CACX,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAEvD,oCAAoC;QACpC,MAAM,MAAM,GAAW;YACrB,EAAE;YACF,UAAU,EAAE,IAAI,CAAC,SAAS;YAC1B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;YACvB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;YACzB,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,CAAC;YAClC,UAAU,EAAE,GAAG;YACf,UAAU,EAAE,GAAG;YACf,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,UAAU,EAAE,UAAU,IAAI,SAAS;SACpC,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,MAMN;QACC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,kBAAkB;QAClB,IAAI,KAAK,GAAG;;;;;;;;;KASX,CAAC;QAEF,MAAM,WAAW,GAAU,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAExE,wBAAwB;QACxB,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YAC5B,KAAK,IAAI,iDAAiD,CAAC;YAC3D,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;QAED,iBAAiB;QACjB,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,KAAK,IAAI,+DAA+D;gBACtE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YAC9C,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QAED,KAAK,IAAI,wEAAwE,CAAC;QAClF,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAU,CAAC;QAElD,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACzB,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;YAC7B,KAAK,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,+BAA+B;YACtD,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAC,CAAC,CAAC;IACN,CAAC;IAED,SAAS,CAAC,MAIT;QACC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,IAAI,KAAK,GAAG;;;KAGX,CAAC;QACF,MAAM,WAAW,GAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE5C,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YAC5B,KAAK,IAAI,6CAA6C,CAAC;YACvD,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;QAED,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,KAAK,IAAI;;;QAGP,CAAC;YACH,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACvC,CAAC;QAED,KAAK,IAAI,mCAAmC,CAAC;QAC7C,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAU,CAAC;QAElD,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,CAAC,EAAU;QACf,IAAI,CAAC;YACH,oEAAoE;YAEpE,+BAA+B;YAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,yDAAyD,CAAC,CAAC;YAC7F,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAEjD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,OAAO,EAAE,UAAU,EAAE,yBAAyB,IAAI,CAAC,SAAS,EAAE;iBAC/D,CAAC;YACJ,CAAC;YAED,yBAAyB;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,sDAAsD,CAAC,CAAC;YACrF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAE5C,4CAA4C;YAC5C,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,2EAA2E,CAAC,CAAC,GAAG,EAAE,CAAC;gBACrH,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,kFAAkF,CAAC,CAAC;oBACpH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;YAAC,OAAO,QAAQ,EAAE,CAAC;gBAClB,yCAAyC;gBACzC,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC;YAClD,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;YACrC,OAAO;gBACL,EAAE,EAAE,MAAM,CAAC,OAAO,GAAG,CAAC;gBACtB,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,kBAAkB;aACjF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YACtD,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE;aACnC,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,EAAU,EAAE,MAAuB;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAa,CAAC,gBAAgB,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAU,CAAC,GAAG,CAAC,CAAC;QAE5B,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACjC,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEhC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;YAErB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;;KAEzB,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QACpB,OAAO,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC;IAEO,cAAc;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;QAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE7B,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAEO,UAAU;QAChB,OAAO,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;IACtE,CAAC;IAEO,iBAAiB,CAAC,OAAe,EAAE,KAAe;QACxD,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/E,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnE,CAAC;IAEO,WAAW,CAAC,KAAa;QAC/B,iCAAiC;QACjC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC;IAEO,WAAW,CAAC,GAAQ;QAC1B,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YAC1B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;YAC5B,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,UAAU,EAAE,GAAG,CAAC,UAAU;SAC3B,CAAC;IACJ,CAAC;IAEO,kBAAkB;QACxB,0EAA0E;QAC1E,sFAAsF;QACtF,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { PRD } from '../../types/index.js';
|
|
2
|
+
export declare class PRDManager {
|
|
3
|
+
private logger;
|
|
4
|
+
private prdPath;
|
|
5
|
+
private currentPRD;
|
|
6
|
+
constructor();
|
|
7
|
+
private initialize;
|
|
8
|
+
createPRD(args: {
|
|
9
|
+
projectName: string;
|
|
10
|
+
pages?: any[];
|
|
11
|
+
apiEndpoints?: any[];
|
|
12
|
+
dataStructures?: any[];
|
|
13
|
+
userFlows?: any[];
|
|
14
|
+
edgeCases?: any[];
|
|
15
|
+
integrations?: any[];
|
|
16
|
+
}): Promise<{
|
|
17
|
+
content: {
|
|
18
|
+
type: string;
|
|
19
|
+
text: string;
|
|
20
|
+
}[];
|
|
21
|
+
}>;
|
|
22
|
+
updatePRD(section: string, data: any): Promise<{
|
|
23
|
+
content: {
|
|
24
|
+
type: string;
|
|
25
|
+
text: string;
|
|
26
|
+
}[];
|
|
27
|
+
}>;
|
|
28
|
+
getPRD(section?: string): Promise<{
|
|
29
|
+
content: {
|
|
30
|
+
type: string;
|
|
31
|
+
text: string;
|
|
32
|
+
}[];
|
|
33
|
+
}>;
|
|
34
|
+
validatePRD(): Promise<{
|
|
35
|
+
isValid: boolean;
|
|
36
|
+
missingElements: string[];
|
|
37
|
+
}>;
|
|
38
|
+
generatePRDTemplate(projectType: string): Promise<{
|
|
39
|
+
content: {
|
|
40
|
+
type: string;
|
|
41
|
+
text: string;
|
|
42
|
+
}[];
|
|
43
|
+
}>;
|
|
44
|
+
getCurrentPRD(): Promise<PRD | null>;
|
|
45
|
+
private savePRD;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/prd/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAwD,MAAM,sBAAsB,CAAC;AAMjG,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAoB;;YAQxB,UAAU;IAkBlB,SAAS,CAAC,IAAI,EAAE;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;QACd,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC;QACrB,cAAc,CAAC,EAAE,GAAG,EAAE,CAAC;QACvB,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;QAClB,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;QAClB,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC;KACtB;;;;;;IA2BK,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG;;;;;;IAyCpC,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM;;;;;;IAyDvB,WAAW,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,eAAe,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IA6BvE,mBAAmB,CAAC,WAAW,EAAE,MAAM;;;;;;IA4CvC,aAAa,IAAI,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;YAI5B,OAAO;CAMtB"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { MCPLogger as Logger } from '../../utils/mcp-logger.js';
|
|
2
|
+
import { promises as fs } from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { randomUUID } from 'crypto';
|
|
5
|
+
export class PRDManager {
|
|
6
|
+
logger;
|
|
7
|
+
prdPath;
|
|
8
|
+
currentPRD = null;
|
|
9
|
+
constructor() {
|
|
10
|
+
this.logger = new Logger('PRDManager');
|
|
11
|
+
this.prdPath = path.join(process.cwd(), '.kratos', 'prd.json');
|
|
12
|
+
this.initialize();
|
|
13
|
+
}
|
|
14
|
+
async initialize() {
|
|
15
|
+
try {
|
|
16
|
+
const kratosDir = path.dirname(this.prdPath);
|
|
17
|
+
await fs.mkdir(kratosDir, { recursive: true });
|
|
18
|
+
// Try to load existing PRD
|
|
19
|
+
try {
|
|
20
|
+
const content = await fs.readFile(this.prdPath, 'utf-8');
|
|
21
|
+
this.currentPRD = JSON.parse(content);
|
|
22
|
+
this.logger.info('Loaded existing PRD');
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
this.logger.info('No existing PRD found');
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
this.logger.error('Failed to initialize PRD manager', error);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async createPRD(args) {
|
|
33
|
+
this.currentPRD = {
|
|
34
|
+
id: randomUUID(),
|
|
35
|
+
projectName: args.projectName,
|
|
36
|
+
version: '1.0.0',
|
|
37
|
+
createdAt: new Date(),
|
|
38
|
+
updatedAt: new Date(),
|
|
39
|
+
pages: args.pages || [],
|
|
40
|
+
apiEndpoints: args.apiEndpoints || [],
|
|
41
|
+
dataStructures: args.dataStructures || [],
|
|
42
|
+
userFlows: args.userFlows || [],
|
|
43
|
+
edgeCases: args.edgeCases || [],
|
|
44
|
+
integrations: args.integrations || [],
|
|
45
|
+
};
|
|
46
|
+
await this.savePRD();
|
|
47
|
+
return {
|
|
48
|
+
content: [
|
|
49
|
+
{
|
|
50
|
+
type: 'text',
|
|
51
|
+
text: `✅ PRD created for project: ${args.projectName}\n\nNext steps:\n1. Add pages with their paths and components\n2. Define API endpoints\n3. Document data structures\n4. Map out user flows`,
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
async updatePRD(section, data) {
|
|
57
|
+
if (!this.currentPRD) {
|
|
58
|
+
throw new Error('No PRD exists. Create one first.');
|
|
59
|
+
}
|
|
60
|
+
switch (section) {
|
|
61
|
+
case 'pages':
|
|
62
|
+
this.currentPRD.pages = data;
|
|
63
|
+
break;
|
|
64
|
+
case 'api':
|
|
65
|
+
this.currentPRD.apiEndpoints = data;
|
|
66
|
+
break;
|
|
67
|
+
case 'data':
|
|
68
|
+
this.currentPRD.dataStructures = data;
|
|
69
|
+
break;
|
|
70
|
+
case 'flows':
|
|
71
|
+
this.currentPRD.userFlows = data;
|
|
72
|
+
break;
|
|
73
|
+
case 'edges':
|
|
74
|
+
this.currentPRD.edgeCases = data;
|
|
75
|
+
break;
|
|
76
|
+
case 'integrations':
|
|
77
|
+
this.currentPRD.integrations = data;
|
|
78
|
+
break;
|
|
79
|
+
default:
|
|
80
|
+
throw new Error(`Unknown PRD section: ${section}`);
|
|
81
|
+
}
|
|
82
|
+
this.currentPRD.updatedAt = new Date();
|
|
83
|
+
await this.savePRD();
|
|
84
|
+
return {
|
|
85
|
+
content: [
|
|
86
|
+
{
|
|
87
|
+
type: 'text',
|
|
88
|
+
text: `✅ Updated PRD section: ${section}`,
|
|
89
|
+
},
|
|
90
|
+
],
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
async getPRD(section) {
|
|
94
|
+
if (!this.currentPRD) {
|
|
95
|
+
return {
|
|
96
|
+
content: [
|
|
97
|
+
{
|
|
98
|
+
type: 'text',
|
|
99
|
+
text: '❌ No PRD found. Create one first using create_prd tool.',
|
|
100
|
+
},
|
|
101
|
+
],
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
let result;
|
|
105
|
+
if (!section || section === 'all') {
|
|
106
|
+
result = this.currentPRD;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
switch (section) {
|
|
110
|
+
case 'pages':
|
|
111
|
+
result = {
|
|
112
|
+
pages: this.currentPRD.pages,
|
|
113
|
+
summary: `${this.currentPRD.pages.length} pages defined`,
|
|
114
|
+
};
|
|
115
|
+
break;
|
|
116
|
+
case 'api':
|
|
117
|
+
result = {
|
|
118
|
+
endpoints: this.currentPRD.apiEndpoints,
|
|
119
|
+
summary: `${this.currentPRD.apiEndpoints.length} API endpoints defined`,
|
|
120
|
+
};
|
|
121
|
+
break;
|
|
122
|
+
case 'data':
|
|
123
|
+
result = {
|
|
124
|
+
structures: this.currentPRD.dataStructures,
|
|
125
|
+
summary: `${this.currentPRD.dataStructures.length} data structures defined`,
|
|
126
|
+
};
|
|
127
|
+
break;
|
|
128
|
+
case 'flows':
|
|
129
|
+
result = {
|
|
130
|
+
userFlows: this.currentPRD.userFlows,
|
|
131
|
+
summary: `${this.currentPRD.userFlows.length} user flows defined`,
|
|
132
|
+
};
|
|
133
|
+
break;
|
|
134
|
+
default:
|
|
135
|
+
throw new Error(`Unknown section: ${section}`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
content: [
|
|
140
|
+
{
|
|
141
|
+
type: 'text',
|
|
142
|
+
text: JSON.stringify(result, null, 2),
|
|
143
|
+
},
|
|
144
|
+
],
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
async validatePRD() {
|
|
148
|
+
if (!this.currentPRD) {
|
|
149
|
+
return { isValid: false, missingElements: ['No PRD exists'] };
|
|
150
|
+
}
|
|
151
|
+
const missingElements = [];
|
|
152
|
+
if (this.currentPRD.pages.length === 0) {
|
|
153
|
+
missingElements.push('Pages - Define all application pages with paths');
|
|
154
|
+
}
|
|
155
|
+
if (this.currentPRD.apiEndpoints.length === 0) {
|
|
156
|
+
missingElements.push('API Endpoints - Document all API routes');
|
|
157
|
+
}
|
|
158
|
+
if (this.currentPRD.dataStructures.length === 0) {
|
|
159
|
+
missingElements.push('Data Structures - Define your data models');
|
|
160
|
+
}
|
|
161
|
+
if (this.currentPRD.userFlows.length === 0) {
|
|
162
|
+
missingElements.push('User Flows - Map out user journeys');
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
isValid: missingElements.length === 0,
|
|
166
|
+
missingElements,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
async generatePRDTemplate(projectType) {
|
|
170
|
+
const templates = {
|
|
171
|
+
'web-app': {
|
|
172
|
+
pages: [
|
|
173
|
+
{ path: '/', name: 'Home', description: 'Landing page', components: ['Header', 'Hero', 'Features'], dataRequirements: [] },
|
|
174
|
+
{ path: '/login', name: 'Login', description: 'User authentication', components: ['LoginForm'], dataRequirements: ['user'] },
|
|
175
|
+
{ path: '/dashboard', name: 'Dashboard', description: 'Main app interface', components: ['Sidebar', 'MainContent'], dataRequirements: ['user', 'data'] },
|
|
176
|
+
],
|
|
177
|
+
apiEndpoints: [
|
|
178
|
+
{ method: 'POST', path: '/api/auth/login', description: 'User login', authentication: false },
|
|
179
|
+
{ method: 'POST', path: '/api/auth/logout', description: 'User logout', authentication: true },
|
|
180
|
+
{ method: 'GET', path: '/api/user/profile', description: 'Get user profile', authentication: true },
|
|
181
|
+
],
|
|
182
|
+
dataStructures: [
|
|
183
|
+
{ name: 'User', schema: { id: 'string', email: 'string', name: 'string' }, relationships: [] },
|
|
184
|
+
],
|
|
185
|
+
userFlows: [
|
|
186
|
+
{ name: 'Authentication', steps: ['Visit login', 'Enter credentials', 'Submit form', 'Redirect to dashboard'], entryPoint: '/login', exitPoints: ['/dashboard'] },
|
|
187
|
+
],
|
|
188
|
+
},
|
|
189
|
+
'api': {
|
|
190
|
+
apiEndpoints: [
|
|
191
|
+
{ method: 'GET', path: '/api/v1/health', description: 'Health check', authentication: false },
|
|
192
|
+
{ method: 'POST', path: '/api/v1/resources', description: 'Create resource', authentication: true },
|
|
193
|
+
{ method: 'GET', path: '/api/v1/resources', description: 'List resources', authentication: true },
|
|
194
|
+
],
|
|
195
|
+
dataStructures: [
|
|
196
|
+
{ name: 'Resource', schema: { id: 'string', name: 'string', createdAt: 'datetime' }, relationships: ['User'] },
|
|
197
|
+
],
|
|
198
|
+
},
|
|
199
|
+
};
|
|
200
|
+
const template = templates[projectType] || templates['web-app'];
|
|
201
|
+
return {
|
|
202
|
+
content: [
|
|
203
|
+
{
|
|
204
|
+
type: 'text',
|
|
205
|
+
text: JSON.stringify(template, null, 2),
|
|
206
|
+
},
|
|
207
|
+
],
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
async getCurrentPRD() {
|
|
211
|
+
return this.currentPRD;
|
|
212
|
+
}
|
|
213
|
+
async savePRD() {
|
|
214
|
+
if (!this.currentPRD)
|
|
215
|
+
return;
|
|
216
|
+
await fs.writeFile(this.prdPath, JSON.stringify(this.currentPRD, null, 2));
|
|
217
|
+
this.logger.info('PRD saved successfully');
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/prd/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export declare class PromptManager {
|
|
2
|
+
private logger;
|
|
3
|
+
private templates;
|
|
4
|
+
constructor();
|
|
5
|
+
private initializeTemplates;
|
|
6
|
+
generatePrompt(args: {
|
|
7
|
+
task: string;
|
|
8
|
+
role?: string;
|
|
9
|
+
stack?: string[];
|
|
10
|
+
fileContext?: string[];
|
|
11
|
+
templateId?: string;
|
|
12
|
+
}): Promise<{
|
|
13
|
+
content: {
|
|
14
|
+
type: string;
|
|
15
|
+
text: string;
|
|
16
|
+
}[];
|
|
17
|
+
}>;
|
|
18
|
+
private buildFromTemplate;
|
|
19
|
+
private buildCustomPrompt;
|
|
20
|
+
private analyzeTaskForSuggestions;
|
|
21
|
+
createCustomTemplate(args: {
|
|
22
|
+
name: string;
|
|
23
|
+
role: string;
|
|
24
|
+
stack: string[];
|
|
25
|
+
goal: string;
|
|
26
|
+
scopeConstraints: string[];
|
|
27
|
+
plan: string[];
|
|
28
|
+
verification: string[];
|
|
29
|
+
}): Promise<{
|
|
30
|
+
content: {
|
|
31
|
+
type: string;
|
|
32
|
+
text: string;
|
|
33
|
+
}[];
|
|
34
|
+
}>;
|
|
35
|
+
listTemplates(): Promise<{
|
|
36
|
+
content: {
|
|
37
|
+
type: string;
|
|
38
|
+
text: string;
|
|
39
|
+
}[];
|
|
40
|
+
}>;
|
|
41
|
+
validatePrompt(prompt: string): Promise<{
|
|
42
|
+
isValid: boolean;
|
|
43
|
+
suggestions: string[];
|
|
44
|
+
score: number;
|
|
45
|
+
}>;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/prompt/index.ts"],"names":[],"mappings":"AAIA,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAA0C;;IAO3D,OAAO,CAAC,mBAAmB;IAuFrB,cAAc,CAAC,IAAI,EAAE;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB;;;;;;IAyBD,OAAO,CAAC,iBAAiB;IA2CzB,OAAO,CAAC,iBAAiB;IAuDzB,OAAO,CAAC,yBAAyB;IA6C3B,oBAAoB,CAAC,IAAI,EAAE;QAC/B,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB;;;;;;IA0BK,aAAa;;;;;;IAkBb,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAC5C,OAAO,EAAE,OAAO,CAAC;QACjB,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CA4CH"}
|