fivocell 4.4.1 → 4.6.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 (83) hide show
  1. package/dist/__tests__/context-ranker.test.d.ts +2 -0
  2. package/dist/__tests__/context-ranker.test.d.ts.map +1 -0
  3. package/dist/__tests__/context-ranker.test.js +61 -0
  4. package/dist/__tests__/context-ranker.test.js.map +1 -0
  5. package/dist/__tests__/handoff-store.test.d.ts +2 -0
  6. package/dist/__tests__/handoff-store.test.d.ts.map +1 -0
  7. package/dist/__tests__/handoff-store.test.js +151 -0
  8. package/dist/__tests__/handoff-store.test.js.map +1 -0
  9. package/dist/__tests__/memory-archive.test.d.ts +2 -0
  10. package/dist/__tests__/memory-archive.test.d.ts.map +1 -0
  11. package/dist/__tests__/memory-archive.test.js +114 -0
  12. package/dist/__tests__/memory-archive.test.js.map +1 -0
  13. package/dist/__tests__/memory-compact.test.d.ts +2 -0
  14. package/dist/__tests__/memory-compact.test.d.ts.map +1 -0
  15. package/dist/__tests__/memory-compact.test.js +43 -0
  16. package/dist/__tests__/memory-compact.test.js.map +1 -0
  17. package/dist/__tests__/memory-event-store.test.d.ts +2 -0
  18. package/dist/__tests__/memory-event-store.test.d.ts.map +1 -0
  19. package/dist/__tests__/memory-event-store.test.js +101 -0
  20. package/dist/__tests__/memory-event-store.test.js.map +1 -0
  21. package/dist/__tests__/redactor.test.d.ts +2 -0
  22. package/dist/__tests__/redactor.test.d.ts.map +1 -0
  23. package/dist/__tests__/redactor.test.js +89 -0
  24. package/dist/__tests__/redactor.test.js.map +1 -0
  25. package/dist/__tests__/style-memory.test.d.ts +2 -0
  26. package/dist/__tests__/style-memory.test.d.ts.map +1 -0
  27. package/dist/__tests__/style-memory.test.js +134 -0
  28. package/dist/__tests__/style-memory.test.js.map +1 -0
  29. package/dist/__tests__/summary-generator.test.d.ts +2 -0
  30. package/dist/__tests__/summary-generator.test.d.ts.map +1 -0
  31. package/dist/__tests__/summary-generator.test.js +53 -0
  32. package/dist/__tests__/summary-generator.test.js.map +1 -0
  33. package/dist/walls/01-context/context/prompt-builder.d.ts +7 -0
  34. package/dist/walls/01-context/context/prompt-builder.d.ts.map +1 -1
  35. package/dist/walls/01-context/context/prompt-builder.js +29 -0
  36. package/dist/walls/01-context/context/prompt-builder.js.map +1 -1
  37. package/dist/walls/06-memory/archive/memory-archive.d.ts +20 -0
  38. package/dist/walls/06-memory/archive/memory-archive.d.ts.map +1 -0
  39. package/dist/walls/06-memory/archive/memory-archive.js +201 -0
  40. package/dist/walls/06-memory/archive/memory-archive.js.map +1 -0
  41. package/dist/walls/06-memory/archive/memory-compact.d.ts +17 -0
  42. package/dist/walls/06-memory/archive/memory-compact.d.ts.map +1 -0
  43. package/dist/walls/06-memory/archive/memory-compact.js +128 -0
  44. package/dist/walls/06-memory/archive/memory-compact.js.map +1 -0
  45. package/dist/walls/06-memory/database/database.d.ts.map +1 -1
  46. package/dist/walls/06-memory/database/database.js +100 -0
  47. package/dist/walls/06-memory/database/database.js.map +1 -1
  48. package/dist/walls/06-memory/handoff/handoff-store.d.ts +31 -0
  49. package/dist/walls/06-memory/handoff/handoff-store.d.ts.map +1 -0
  50. package/dist/walls/06-memory/handoff/handoff-store.js +203 -0
  51. package/dist/walls/06-memory/handoff/handoff-store.js.map +1 -0
  52. package/dist/walls/06-memory/privacy/redactor.d.ts +14 -0
  53. package/dist/walls/06-memory/privacy/redactor.d.ts.map +1 -0
  54. package/dist/walls/06-memory/privacy/redactor.js +110 -0
  55. package/dist/walls/06-memory/privacy/redactor.js.map +1 -0
  56. package/dist/walls/06-memory/stores/context-ranker.d.ts +21 -0
  57. package/dist/walls/06-memory/stores/context-ranker.d.ts.map +1 -0
  58. package/dist/walls/06-memory/stores/context-ranker.js +84 -0
  59. package/dist/walls/06-memory/stores/context-ranker.js.map +1 -0
  60. package/dist/walls/06-memory/stores/memory-event-store.d.ts +43 -0
  61. package/dist/walls/06-memory/stores/memory-event-store.d.ts.map +1 -0
  62. package/dist/walls/06-memory/stores/memory-event-store.js +139 -0
  63. package/dist/walls/06-memory/stores/memory-event-store.js.map +1 -0
  64. package/dist/walls/06-memory/stores/summary-generator.d.ts +16 -0
  65. package/dist/walls/06-memory/stores/summary-generator.d.ts.map +1 -0
  66. package/dist/walls/06-memory/stores/summary-generator.js +151 -0
  67. package/dist/walls/06-memory/stores/summary-generator.js.map +1 -0
  68. package/dist/walls/06-memory/style/style-memory.d.ts +39 -0
  69. package/dist/walls/06-memory/style/style-memory.d.ts.map +1 -0
  70. package/dist/walls/06-memory/style/style-memory.js +186 -0
  71. package/dist/walls/06-memory/style/style-memory.js.map +1 -0
  72. package/dist/walls/07-runtime/cli/cli.js +350 -0
  73. package/dist/walls/07-runtime/cli/cli.js.map +1 -1
  74. package/dist/walls/07-runtime/daemon/server.d.ts.map +1 -1
  75. package/dist/walls/07-runtime/daemon/server.js +99 -0
  76. package/dist/walls/07-runtime/daemon/server.js.map +1 -1
  77. package/dist/walls/07-runtime/setup/setup.d.ts.map +1 -1
  78. package/dist/walls/07-runtime/setup/setup.js +35 -0
  79. package/dist/walls/07-runtime/setup/setup.js.map +1 -1
  80. package/dist/walls/07-runtime/watcher/live-watcher.d.ts.map +1 -1
  81. package/dist/walls/07-runtime/watcher/live-watcher.js +32 -0
  82. package/dist/walls/07-runtime/watcher/live-watcher.js.map +1 -1
  83. package/package.json +1 -1
@@ -0,0 +1,203 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.saveHandoffEntry = saveHandoffEntry;
37
+ exports.getCurrentHandoff = getCurrentHandoff;
38
+ exports.getHistoryHandoff = getHistoryHandoff;
39
+ exports.getHandoffEntries = getHandoffEntries;
40
+ exports.rotateHandoffIfNeeded = rotateHandoffIfNeeded;
41
+ exports.getHandoffStats = getHandoffStats;
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const database_1 = require("../database/database");
45
+ const MAX_CURRENT_LINES = 200;
46
+ function getCellDir(projectDir) {
47
+ return path.join(projectDir, '.cell');
48
+ }
49
+ function getHandoffDir(projectDir) {
50
+ return path.join(getCellDir(projectDir), 'handoff');
51
+ }
52
+ function getCurrentPath(projectDir) {
53
+ return path.join(getHandoffDir(projectDir), 'current.md');
54
+ }
55
+ function getHistoryDir(projectDir) {
56
+ return path.join(getHandoffDir(projectDir), 'history');
57
+ }
58
+ function formatEntryMd(entry) {
59
+ const now = new Date().toISOString().replace('T', ' ').slice(0, 16);
60
+ const lines = [];
61
+ lines.push(`## ${now} - ${entry.title}`);
62
+ lines.push('');
63
+ lines.push(`Summary: ${entry.summary}`);
64
+ if (entry.why)
65
+ lines.push(`\nWhy: ${entry.why}`);
66
+ if (entry.filesChanged && entry.filesChanged.length > 0) {
67
+ lines.push(`\nFiles Changed:`);
68
+ for (const f of entry.filesChanged)
69
+ lines.push(`- ${f}`);
70
+ }
71
+ if (entry.relatedFiles && entry.relatedFiles.length > 0) {
72
+ lines.push(`\nRelated Files:`);
73
+ for (const f of entry.relatedFiles)
74
+ lines.push(`- ${f}`);
75
+ }
76
+ if (entry.impact)
77
+ lines.push(`\nImpact: ${entry.impact}`);
78
+ if (entry.verification)
79
+ lines.push(`\nVerification: ${entry.verification}`);
80
+ if (entry.tool || entry.model)
81
+ lines.push(`\nTool/Model: ${entry.tool || '?'} / ${entry.model || '?'}`);
82
+ lines.push(`\nStatus: ${entry.status}`);
83
+ if (entry.nextSteps)
84
+ lines.push(`\nNext: ${entry.nextSteps}`);
85
+ lines.push('');
86
+ return lines.join('\n');
87
+ }
88
+ function ensureDirs(projectDir) {
89
+ const dirs = [
90
+ getHandoffDir(projectDir),
91
+ getHistoryDir(projectDir),
92
+ ];
93
+ for (const d of dirs) {
94
+ if (!fs.existsSync(d))
95
+ fs.mkdirSync(d, { recursive: true });
96
+ }
97
+ }
98
+ function saveHandoffEntry(projectDir, entry) {
99
+ ensureDirs(projectDir);
100
+ // 1. Save to SQLite
101
+ const db = (0, database_1.getDb)();
102
+ db.prepare(`
103
+ INSERT INTO handoff_entries (project, branch, title, summary, why, files_changed_json, related_files_json, impact, verification, tool, model, status, next_steps)
104
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
105
+ `).run(entry.project, entry.branch || null, entry.title, entry.summary, entry.why || null, entry.filesChanged ? JSON.stringify(entry.filesChanged) : null, entry.relatedFiles ? JSON.stringify(entry.relatedFiles) : null, entry.impact || null, entry.verification || null, entry.tool || null, entry.model || null, entry.status, entry.nextSteps || null);
106
+ // 2. Append to current.md
107
+ const currentPath = getCurrentPath(projectDir);
108
+ let currentContent = '';
109
+ if (fs.existsSync(currentPath)) {
110
+ currentContent = fs.readFileSync(currentPath, 'utf-8');
111
+ }
112
+ const newEntryMd = formatEntryMd(entry);
113
+ const lines = (currentContent + '\n' + newEntryMd).split('\n');
114
+ if (lines.length > MAX_CURRENT_LINES) {
115
+ // Rotate: move old content to monthly history
116
+ const historyDir = getHistoryDir(projectDir);
117
+ const now = new Date();
118
+ const monthFile = path.join(historyDir, `${now.getFullYear()}-${(now.getMonth() + 1).toString().padStart(2, '0')}.md`);
119
+ const header = lines[0] || '# Handoff History';
120
+ const excessLines = lines.slice(0, lines.length - MAX_CURRENT_LINES);
121
+ const keepLines = lines.slice(lines.length - MAX_CURRENT_LINES);
122
+ let existingHistory = '';
123
+ if (fs.existsSync(monthFile)) {
124
+ existingHistory = fs.readFileSync(monthFile, 'utf-8');
125
+ }
126
+ const historyContent = (existingHistory ? existingHistory + '\n\n' : header + '\n\n') + excessLines.join('\n');
127
+ fs.writeFileSync(monthFile, historyContent);
128
+ fs.writeFileSync(currentPath, keepLines.join('\n'));
129
+ }
130
+ else {
131
+ const content = currentContent.trim() ? currentContent.trim() + '\n\n' + newEntryMd : '# Current Handoff\n\n' + newEntryMd;
132
+ fs.writeFileSync(currentPath, content);
133
+ }
134
+ }
135
+ function getCurrentHandoff(projectDir) {
136
+ const currentPath = getCurrentPath(projectDir);
137
+ if (!fs.existsSync(currentPath))
138
+ return '# Current Handoff\n\nNo handoff entries yet.';
139
+ return fs.readFileSync(currentPath, 'utf-8');
140
+ }
141
+ function getHistoryHandoff(projectDir, yearMonth) {
142
+ const historyDir = getHistoryDir(projectDir);
143
+ if (!yearMonth) {
144
+ const now = new Date();
145
+ yearMonth = `${now.getFullYear()}-${(now.getMonth() + 1).toString().padStart(2, '0')}`;
146
+ }
147
+ const historyPath = path.join(historyDir, `${yearMonth}.md`);
148
+ if (!fs.existsSync(historyPath))
149
+ return `# Handoff History — ${yearMonth}\n\nNo history entries for this month.`;
150
+ return fs.readFileSync(historyPath, 'utf-8');
151
+ }
152
+ function getHandoffEntries(projectDir, limit = 20) {
153
+ const db = (0, database_1.getDb)();
154
+ const project = path.basename(projectDir);
155
+ return db.prepare('SELECT * FROM handoff_entries WHERE project = ? ORDER BY created_at DESC LIMIT ?').all(project, limit);
156
+ }
157
+ function rotateHandoffIfNeeded(projectDir) {
158
+ const currentPath = getCurrentPath(projectDir);
159
+ if (!fs.existsSync(currentPath))
160
+ return false;
161
+ const content = fs.readFileSync(currentPath, 'utf-8');
162
+ const lines = content.split('\n');
163
+ if (lines.length <= MAX_CURRENT_LINES)
164
+ return false;
165
+ const historyDir = getHistoryDir(projectDir);
166
+ if (!fs.existsSync(historyDir))
167
+ fs.mkdirSync(historyDir, { recursive: true });
168
+ const now = new Date();
169
+ const monthFile = path.join(historyDir, `${now.getFullYear()}-${(now.getMonth() + 1).toString().padStart(2, '0')}.md`);
170
+ const header = '# Handoff History\n\n';
171
+ const excessLines = lines.slice(0, lines.length - MAX_CURRENT_LINES);
172
+ const keepLines = lines.slice(lines.length - MAX_CURRENT_LINES);
173
+ let existingHistory = '';
174
+ if (fs.existsSync(monthFile)) {
175
+ existingHistory = fs.readFileSync(monthFile, 'utf-8');
176
+ }
177
+ const historyContent = (existingHistory ? existingHistory + '\n\n' : header) + excessLines.join('\n');
178
+ fs.writeFileSync(monthFile, historyContent);
179
+ fs.writeFileSync(currentPath, keepLines.join('\n'));
180
+ return true;
181
+ }
182
+ function getHandoffStats(projectDir) {
183
+ const currentPath = getCurrentPath(projectDir);
184
+ let currentLines = 0;
185
+ if (fs.existsSync(currentPath)) {
186
+ currentLines = fs.readFileSync(currentPath, 'utf-8').split('\n').length;
187
+ }
188
+ const historyDir = getHistoryDir(projectDir);
189
+ let historyMonths = 0;
190
+ if (fs.existsSync(historyDir)) {
191
+ historyMonths = fs.readdirSync(historyDir).filter(f => f.endsWith('.md')).length;
192
+ }
193
+ const project = path.basename(projectDir);
194
+ const db = (0, database_1.getDb)();
195
+ const row = db.prepare('SELECT COUNT(*) as c FROM handoff_entries WHERE project = ?').get(project);
196
+ return {
197
+ currentLines,
198
+ historyMonths,
199
+ dbEntries: row.c,
200
+ needsRotation: currentLines > MAX_CURRENT_LINES,
201
+ };
202
+ }
203
+ //# sourceMappingURL=handoff-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handoff-store.js","sourceRoot":"","sources":["../../../../src/walls/06-memory/handoff/handoff-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface RedactionResult {
2
+ content: string;
3
+ redacted: number;
4
+ secrets: string[];
5
+ }
6
+ export declare function redactSecrets(content: string): RedactionResult;
7
+ export declare function redactEnvFile(filePath: string): RedactionResult;
8
+ export declare function isEnvFile(filePath: string): boolean;
9
+ export declare function getSecretSummary(): Array<{
10
+ name: string;
11
+ required: boolean;
12
+ present: boolean;
13
+ }>;
14
+ //# sourceMappingURL=redactor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redactor.d.ts","sourceRoot":"","sources":["../../../../src/walls/06-memory/privacy/redactor.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAe9D;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAO/D;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGnD;AAED,wBAAgB,gBAAgB,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAuB/F"}
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.redactSecrets = redactSecrets;
37
+ exports.redactEnvFile = redactEnvFile;
38
+ exports.isEnvFile = isEnvFile;
39
+ exports.getSecretSummary = getSecretSummary;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const SECRET_PATTERNS = [
43
+ { name: 'API_KEY', pattern: /(?:api[_-]?key|apikey)\s*[:=]\s*["']?([A-Za-z0-9_\-]{20,})["']?/gi, replacement: 'API_KEY=<REDACTED>' },
44
+ { name: 'TOKEN', pattern: /(?:token|access[_-]?token|auth[_-]?token)\s*[:=]\s*["']?([A-Za-z0-9_\-.]{20,})["']?/gi, replacement: 'TOKEN=<REDACTED>' },
45
+ { name: 'SECRET', pattern: /(?:secret|client[_-]?secret|app[_-]?secret)\s*[:=]\s*["']?([A-Za-z0-9_\-]{20,})["']?/gi, replacement: 'SECRET=<REDACTED>' },
46
+ { name: 'PASSWORD', pattern: /(?:password|passwd|pwd)\s*[:=]\s*["']?([^\s"']{8,})["']?/gi, replacement: 'PASSWORD=<REDACTED>' },
47
+ { name: 'PRIVATE_KEY', pattern: /-----BEGIN [A-Z ]+PRIVATE KEY-----[\s\S]*?-----END [A-Z ]+PRIVATE KEY-----/g, replacement: '<PRIVATE_KEY_REDACTED>' },
48
+ { name: 'SSH_KEY', pattern: /-----BEGIN OPENSSH PRIVATE KEY-----[\s\S]*?-----END OPENSSH PRIVATE KEY-----/g, replacement: '<SSH_KEY_REDACTED>' },
49
+ { name: 'JWT', pattern: /eyJ[A-Za-z0-9_\-]+\.eyJ[A-Za-z0-9_\-]+\.[A-Za-z0-9_\-]+/g, replacement: '<JWT_REDACTED>' },
50
+ { name: 'NPM_TOKEN', pattern: /npm_[A-Za-z0-9]{36}/g, replacement: '<NPM_TOKEN_REDACTED>' },
51
+ { name: 'AWS_KEY', pattern: /AKIA[0-9A-Z]{16}/g, replacement: '<AWS_KEY_REDACTED>' },
52
+ { name: 'GITHUB_TOKEN', pattern: /ghp_[A-Za-z0-9]{36}/g, replacement: '<GITHUB_TOKEN_REDACTED>' },
53
+ { name: 'OPENAI_KEY', pattern: /sk-[A-Za-z0-9]{48}/g, replacement: '<OPENAI_KEY_REDACTED>' },
54
+ { name: 'CONNECTION_STRING', pattern: /(?:mongodb|postgres|mysql|redis|amqp):\/\/[^\s"']+/gi, replacement: '<CONNECTION_STRING_REDACTED>' },
55
+ { name: 'BEARER', pattern: /Bearer\s+[A-Za-z0-9_\-\.]{20,}/g, replacement: 'Bearer <REDACTED>' },
56
+ ];
57
+ const ENV_FILE_NAMES = ['.env', '.env.local', '.env.production', '.env.development', '.env.staging'];
58
+ function redactSecrets(content) {
59
+ let redacted = content;
60
+ let count = 0;
61
+ const found = [];
62
+ for (const rule of SECRET_PATTERNS) {
63
+ const matches = redacted.match(rule.pattern);
64
+ if (matches && matches.length > 0) {
65
+ count += matches.length;
66
+ if (!found.includes(rule.name))
67
+ found.push(rule.name);
68
+ redacted = redacted.replace(rule.pattern, rule.replacement);
69
+ }
70
+ }
71
+ return { content: redacted, redacted: count, secrets: found };
72
+ }
73
+ function redactEnvFile(filePath) {
74
+ try {
75
+ const content = fs.readFileSync(filePath, 'utf-8');
76
+ return redactSecrets(content);
77
+ }
78
+ catch {
79
+ return { content: '', redacted: 0, secrets: [] };
80
+ }
81
+ }
82
+ function isEnvFile(filePath) {
83
+ const base = path.basename(filePath);
84
+ return ENV_FILE_NAMES.includes(base) || base.startsWith('.env.');
85
+ }
86
+ function getSecretSummary() {
87
+ const secrets = [
88
+ 'OPENAI_API_KEY',
89
+ 'ANTHROPIC_API_KEY',
90
+ 'GITHUB_TOKEN',
91
+ 'NPM_TOKEN',
92
+ 'AWS_ACCESS_KEY_ID',
93
+ 'MONGODB_URI',
94
+ 'DATABASE_URL',
95
+ 'REDIS_URL',
96
+ ];
97
+ return secrets.map(name => {
98
+ let present = false;
99
+ try {
100
+ const envPath = path.join(process.cwd(), '.env');
101
+ if (fs.existsSync(envPath)) {
102
+ const content = fs.readFileSync(envPath, 'utf-8');
103
+ present = content.includes(name + '=') && !content.includes(name + '=\n');
104
+ }
105
+ }
106
+ catch { /* ignore */ }
107
+ return { name, required: false, present };
108
+ });
109
+ }
110
+ //# sourceMappingURL=redactor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redactor.js","sourceRoot":"","sources":["../../../../src/walls/06-memory/privacy/redactor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface RankedMemory {
2
+ id: number;
3
+ type: string;
4
+ topic: string | null;
5
+ summary: string;
6
+ importance: number;
7
+ relevance: number;
8
+ created_at: string;
9
+ files_json: string | null;
10
+ }
11
+ export interface RankOptions {
12
+ project?: string;
13
+ query?: string;
14
+ topic?: string;
15
+ maxResults?: number;
16
+ minImportance?: number;
17
+ maxAgeDays?: number;
18
+ }
19
+ export declare function rankMemories(opts?: RankOptions): RankedMemory[];
20
+ export declare function getTopMemoriesForContext(project: string, maxWords?: number): RankedMemory[];
21
+ //# sourceMappingURL=context-ranker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-ranker.d.ts","sourceRoot":"","sources":["../../../../src/walls/06-memory/stores/context-ranker.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,YAAY,CAAC,IAAI,GAAE,WAAgB,GAAG,YAAY,EAAE,CAmCnE;AAoCD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAa,GAAG,YAAY,EAAE,CAajG"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.rankMemories = rankMemories;
4
+ exports.getTopMemoriesForContext = getTopMemoriesForContext;
5
+ const database_1 = require("../database/database");
6
+ function rankMemories(opts = {}) {
7
+ const db = (0, database_1.getDb)();
8
+ const conditions = [];
9
+ const params = [];
10
+ if (opts.project) {
11
+ conditions.push('project = ?');
12
+ params.push(opts.project);
13
+ }
14
+ if (opts.minImportance !== undefined) {
15
+ conditions.push('importance >= ?');
16
+ params.push(opts.minImportance);
17
+ }
18
+ if (opts.maxAgeDays) {
19
+ const since = new Date(Date.now() - opts.maxAgeDays * 86400000).toISOString();
20
+ conditions.push('created_at >= ?');
21
+ params.push(since);
22
+ }
23
+ if (opts.topic) {
24
+ conditions.push('topic LIKE ?');
25
+ params.push(`%${opts.topic}%`);
26
+ }
27
+ if (opts.query) {
28
+ conditions.push('(summary LIKE ? OR topic LIKE ? OR details_json LIKE ? OR tags_json LIKE ?)');
29
+ const q = `%${opts.query}%`;
30
+ params.push(q, q, q, q);
31
+ }
32
+ const where = conditions.length > 0 ? 'WHERE ' + conditions.join(' AND ') : '';
33
+ const limit = opts.maxResults || 20;
34
+ const rows = db.prepare(`SELECT id, type, topic, summary, importance, created_at, files_json
35
+ FROM memory_events ${where}
36
+ ORDER BY importance DESC, created_at DESC
37
+ LIMIT ?`).all(...params, limit);
38
+ return rows.map(r => ({
39
+ ...r,
40
+ relevance: calculateRelevance(r, opts),
41
+ })).sort((a, b) => b.relevance - a.relevance);
42
+ }
43
+ function calculateRelevance(row, opts) {
44
+ let score = row.importance * 10;
45
+ // Recency boost (newer = higher)
46
+ const ageMs = Date.now() - new Date(row.created_at).getTime();
47
+ const ageDays = ageMs / 86400000;
48
+ if (ageDays < 1)
49
+ score += 30;
50
+ else if (ageDays < 7)
51
+ score += 20;
52
+ else if (ageDays < 30)
53
+ score += 10;
54
+ // Type boost
55
+ const typeBoost = {
56
+ decision: 25, error: 20, fix: 22, publish: 18, handoff: 15,
57
+ pattern: 24, style: 20, risk: 19, question: 12, ai_work: 14,
58
+ session: 10, branch: 8, edit: 5, verification: 8, file_event: 2,
59
+ };
60
+ score += typeBoost[row.type] || 0;
61
+ // Topic match boost
62
+ if (opts.topic && row.topic && row.topic.toLowerCase().includes(opts.topic.toLowerCase())) {
63
+ score += 40;
64
+ }
65
+ // Query match boost
66
+ if (opts.query && row.summary.toLowerCase().includes(opts.query.toLowerCase())) {
67
+ score += 35;
68
+ }
69
+ return Math.round(score);
70
+ }
71
+ function getTopMemoriesForContext(project, maxWords = 2000) {
72
+ const memories = rankMemories({ project, maxResults: 50, minImportance: 3 });
73
+ const result = [];
74
+ let wordCount = 0;
75
+ for (const mem of memories) {
76
+ const summaryWords = mem.summary.split(/\s+/).length;
77
+ if (wordCount + summaryWords > maxWords)
78
+ break;
79
+ result.push(mem);
80
+ wordCount += summaryWords;
81
+ }
82
+ return result;
83
+ }
84
+ //# sourceMappingURL=context-ranker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-ranker.js","sourceRoot":"","sources":["../../../../src/walls/06-memory/stores/context-ranker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ export interface MemoryEvent {
2
+ project: string;
3
+ branch?: string;
4
+ type: 'file_event' | 'edit' | 'decision' | 'error' | 'fix' | 'verification' | 'publish' | 'handoff' | 'pattern' | 'style' | 'session' | 'branch' | 'risk' | 'question' | 'ai_work';
5
+ topic?: string;
6
+ summary: string;
7
+ details?: Record<string, unknown>;
8
+ files?: string[];
9
+ importance?: number;
10
+ tool?: string;
11
+ model?: string;
12
+ tags?: string[];
13
+ }
14
+ export interface MemoryEventRow extends MemoryEvent {
15
+ id: number;
16
+ created_at: string;
17
+ }
18
+ export declare function recordMemoryEvent(event: MemoryEvent): number;
19
+ export declare function recordMemoryEvents(events: MemoryEvent[]): number[];
20
+ export declare function getMemoryEvents(opts?: {
21
+ project?: string;
22
+ type?: string;
23
+ topic?: string;
24
+ branch?: string;
25
+ limit?: number;
26
+ since?: string;
27
+ minImportance?: number;
28
+ }): MemoryEventRow[];
29
+ export declare function searchMemoryEvents(query: string, project?: string, limit?: number): MemoryEventRow[];
30
+ export declare function getMemoryTimeline(project?: string, days?: number): Array<{
31
+ date: string;
32
+ count: number;
33
+ types: Record<string, number>;
34
+ }>;
35
+ export declare function getMemoryStats(project?: string): {
36
+ total: number;
37
+ byType: Record<string, number>;
38
+ avgImportance: number;
39
+ oldestEvent: string | null;
40
+ newestEvent: string | null;
41
+ };
42
+ export declare function deleteMemoryEventsOlderThan(days: number): number;
43
+ //# sourceMappingURL=memory-event-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-event-store.d.ts","sourceRoot":"","sources":["../../../../src/walls/06-memory/stores/memory-event-store.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,KAAK,GAAG,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IACnL,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAoB5D;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,CAUlE;AAED,wBAAgB,eAAe,CAAC,IAAI,GAAE;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,cAAc,EAAE,CAgBxB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,cAAc,EAAE,CASxG;AAED,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC,CAiB5I;AAED,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAqBA;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKhE"}