fivocell 4.4.0 → 4.5.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/dist/__tests__/autostart.test.js +7 -2
- package/dist/__tests__/autostart.test.js.map +1 -1
- package/dist/__tests__/handoff-store.test.d.ts +2 -0
- package/dist/__tests__/handoff-store.test.d.ts.map +1 -0
- package/dist/__tests__/handoff-store.test.js +151 -0
- package/dist/__tests__/handoff-store.test.js.map +1 -0
- package/dist/__tests__/memory-archive.test.d.ts +2 -0
- package/dist/__tests__/memory-archive.test.d.ts.map +1 -0
- package/dist/__tests__/memory-archive.test.js +114 -0
- package/dist/__tests__/memory-archive.test.js.map +1 -0
- package/dist/__tests__/memory-event-store.test.d.ts +2 -0
- package/dist/__tests__/memory-event-store.test.d.ts.map +1 -0
- package/dist/__tests__/memory-event-store.test.js +101 -0
- package/dist/__tests__/memory-event-store.test.js.map +1 -0
- package/dist/__tests__/redactor.test.d.ts +2 -0
- package/dist/__tests__/redactor.test.d.ts.map +1 -0
- package/dist/__tests__/redactor.test.js +89 -0
- package/dist/__tests__/redactor.test.js.map +1 -0
- package/dist/__tests__/style-memory.test.d.ts +2 -0
- package/dist/__tests__/style-memory.test.d.ts.map +1 -0
- package/dist/__tests__/style-memory.test.js +134 -0
- package/dist/__tests__/style-memory.test.js.map +1 -0
- package/dist/walls/06-memory/archive/memory-archive.d.ts +20 -0
- package/dist/walls/06-memory/archive/memory-archive.d.ts.map +1 -0
- package/dist/walls/06-memory/archive/memory-archive.js +201 -0
- package/dist/walls/06-memory/archive/memory-archive.js.map +1 -0
- package/dist/walls/06-memory/database/database.d.ts.map +1 -1
- package/dist/walls/06-memory/database/database.js +100 -0
- package/dist/walls/06-memory/database/database.js.map +1 -1
- package/dist/walls/06-memory/handoff/handoff-store.d.ts +31 -0
- package/dist/walls/06-memory/handoff/handoff-store.d.ts.map +1 -0
- package/dist/walls/06-memory/handoff/handoff-store.js +203 -0
- package/dist/walls/06-memory/handoff/handoff-store.js.map +1 -0
- package/dist/walls/06-memory/privacy/redactor.d.ts +14 -0
- package/dist/walls/06-memory/privacy/redactor.d.ts.map +1 -0
- package/dist/walls/06-memory/privacy/redactor.js +110 -0
- package/dist/walls/06-memory/privacy/redactor.js.map +1 -0
- package/dist/walls/06-memory/stores/memory-event-store.d.ts +43 -0
- package/dist/walls/06-memory/stores/memory-event-store.d.ts.map +1 -0
- package/dist/walls/06-memory/stores/memory-event-store.js +139 -0
- package/dist/walls/06-memory/stores/memory-event-store.js.map +1 -0
- package/dist/walls/06-memory/style/style-memory.d.ts +39 -0
- package/dist/walls/06-memory/style/style-memory.d.ts.map +1 -0
- package/dist/walls/06-memory/style/style-memory.js +186 -0
- package/dist/walls/06-memory/style/style-memory.js.map +1 -0
- package/dist/walls/07-runtime/cli/cli.js +291 -0
- package/dist/walls/07-runtime/cli/cli.js.map +1 -1
- package/dist/walls/07-runtime/setup/autostart.d.ts +2 -0
- package/dist/walls/07-runtime/setup/autostart.d.ts.map +1 -1
- package/dist/walls/07-runtime/setup/autostart.js +49 -16
- package/dist/walls/07-runtime/setup/autostart.js.map +1 -1
- package/dist/walls/07-runtime/setup/setup.d.ts.map +1 -1
- package/dist/walls/07-runtime/setup/setup.js +35 -0
- package/dist/walls/07-runtime/setup/setup.js.map +1 -1
- 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6EA,4CAwDC;AAED,8CAIC;AAED,8CASC;AAED,8CAIC;AAED,sDA6BC;AAED,0CA4BC;AAzND,uCAAyB;AACzB,2CAA6B;AAC7B,mDAA6C;AAuB7C,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAE9B,SAAS,UAAU,CAAC,UAAkB;IACpC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,aAAa,CAAC,UAAkB;IACvC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,cAAc,CAAC,UAAkB;IACxC,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,aAAa,CAAC,UAAkB;IACvC,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,aAAa,CAAC,KAAmB;IACxC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACzC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACxC,IAAI,KAAK,CAAC,GAAG;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IACjD,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,KAAK,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1D,IAAI,KAAK,CAAC,YAAY;QAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5E,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,IAAI,IAAI,GAAG,MAAM,KAAK,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;IACxG,KAAK,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,IAAI,KAAK,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IAC9D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,UAAU,CAAC,UAAkB;IACpC,MAAM,IAAI,GAAG;QACX,aAAa,CAAC,UAAU,CAAC;QACzB,aAAa,CAAC,UAAU,CAAC;KAC1B,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,SAAgB,gBAAgB,CAAC,UAAkB,EAAE,KAAmB;IACtE,UAAU,CAAC,UAAU,CAAC,CAAC;IAEvB,oBAAoB;IACpB,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,EAAE,CAAC,OAAO,CAAC;;;GAGV,CAAC,CAAC,GAAG,CACJ,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,MAAM,IAAI,IAAI,EACpB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,GAAG,IAAI,IAAI,EACjB,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAC9D,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAC9D,KAAK,CAAC,MAAM,IAAI,IAAI,EACpB,KAAK,CAAC,YAAY,IAAI,IAAI,EAC1B,KAAK,CAAC,IAAI,IAAI,IAAI,EAClB,KAAK,CAAC,KAAK,IAAI,IAAI,EACnB,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,SAAS,IAAI,IAAI,CACxB,CAAC;IAEF,0BAA0B;IAC1B,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAC/C,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,CAAC,cAAc,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE/D,IAAI,KAAK,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACrC,8CAA8C;QAC9C,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QAEvH,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,mBAAmB,CAAC;QAC/C,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,iBAAiB,CAAC,CAAC;QACrE,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,iBAAiB,CAAC,CAAC;QAEhE,IAAI,eAAe,GAAG,EAAE,CAAC;QACzB,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,eAAe,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,cAAc,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/G,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QAC5C,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,uBAAuB,GAAG,UAAU,CAAC;QAC3H,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB,CAAC,UAAkB;IAClD,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,8CAA8C,CAAC;IACvF,OAAO,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED,SAAgB,iBAAiB,CAAC,UAAkB,EAAE,SAAkB;IACtE,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,SAAS,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IACzF,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,SAAS,KAAK,CAAC,CAAC;IAC7D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,uBAAuB,SAAS,wCAAwC,CAAC;IACjH,OAAO,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED,SAAgB,iBAAiB,CAAC,UAAkB,EAAE,QAAgB,EAAE;IACtE,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC1C,OAAO,EAAE,CAAC,OAAO,CAAC,kFAAkF,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAiB,CAAC;AAC5I,CAAC;AAED,SAAgB,qBAAqB,CAAC,UAAkB;IACtD,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAC;IAE9C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,IAAI,KAAK,CAAC,MAAM,IAAI,iBAAiB;QAAE,OAAO,KAAK,CAAC;IAEpD,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9E,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IAEvH,MAAM,MAAM,GAAG,uBAAuB,CAAC;IACvC,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,iBAAiB,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,iBAAiB,CAAC,CAAC;IAEhE,IAAI,eAAe,GAAG,EAAE,CAAC;IACzB,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,eAAe,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,cAAc,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtG,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC5C,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAEpD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,eAAe,CAAC,UAAkB;IAMhD,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAC/C,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IAC1E,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,aAAa,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IACnF,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,6DAA6D,CAAC,CAAC,GAAG,CAAC,OAAO,CAAkB,CAAC;IAEpH,OAAO;QACL,YAAY;QACZ,aAAa;QACb,SAAS,EAAE,GAAG,CAAC,CAAC;QAChB,aAAa,EAAE,YAAY,GAAG,iBAAiB;KAChD,CAAC;AACJ,CAAC"}
|
|
@@ -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,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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.recordMemoryEvent = recordMemoryEvent;
|
|
4
|
+
exports.recordMemoryEvents = recordMemoryEvents;
|
|
5
|
+
exports.getMemoryEvents = getMemoryEvents;
|
|
6
|
+
exports.searchMemoryEvents = searchMemoryEvents;
|
|
7
|
+
exports.getMemoryTimeline = getMemoryTimeline;
|
|
8
|
+
exports.getMemoryStats = getMemoryStats;
|
|
9
|
+
exports.deleteMemoryEventsOlderThan = deleteMemoryEventsOlderThan;
|
|
10
|
+
const database_1 = require("../database/database");
|
|
11
|
+
function recordMemoryEvent(event) {
|
|
12
|
+
const db = (0, database_1.getDb)();
|
|
13
|
+
const stmt = db.prepare(`
|
|
14
|
+
INSERT INTO memory_events (project, branch, type, topic, summary, details_json, files_json, importance, tool, model, tags_json)
|
|
15
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
16
|
+
`);
|
|
17
|
+
const result = stmt.run(event.project, event.branch || null, event.type, event.topic || null, event.summary, event.details ? JSON.stringify(event.details) : null, event.files ? JSON.stringify(event.files) : null, event.importance || getImportanceForType(event.type), event.tool || null, event.model || null, event.tags ? JSON.stringify(event.tags) : null);
|
|
18
|
+
return Number(result.lastInsertRowid);
|
|
19
|
+
}
|
|
20
|
+
function recordMemoryEvents(events) {
|
|
21
|
+
const db = (0, database_1.getDb)();
|
|
22
|
+
const ids = [];
|
|
23
|
+
const tx = db.transaction(() => {
|
|
24
|
+
for (const event of events) {
|
|
25
|
+
ids.push(recordMemoryEvent(event));
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
tx();
|
|
29
|
+
return ids;
|
|
30
|
+
}
|
|
31
|
+
function getMemoryEvents(opts = {}) {
|
|
32
|
+
const db = (0, database_1.getDb)();
|
|
33
|
+
const conditions = [];
|
|
34
|
+
const params = [];
|
|
35
|
+
if (opts.project) {
|
|
36
|
+
conditions.push('project = ?');
|
|
37
|
+
params.push(opts.project);
|
|
38
|
+
}
|
|
39
|
+
if (opts.type) {
|
|
40
|
+
conditions.push('type = ?');
|
|
41
|
+
params.push(opts.type);
|
|
42
|
+
}
|
|
43
|
+
if (opts.topic) {
|
|
44
|
+
conditions.push('topic LIKE ?');
|
|
45
|
+
params.push(`%${opts.topic}%`);
|
|
46
|
+
}
|
|
47
|
+
if (opts.branch) {
|
|
48
|
+
conditions.push('branch = ?');
|
|
49
|
+
params.push(opts.branch);
|
|
50
|
+
}
|
|
51
|
+
if (opts.since) {
|
|
52
|
+
conditions.push('created_at >= ?');
|
|
53
|
+
params.push(opts.since);
|
|
54
|
+
}
|
|
55
|
+
if (opts.minImportance !== undefined) {
|
|
56
|
+
conditions.push('importance >= ?');
|
|
57
|
+
params.push(opts.minImportance);
|
|
58
|
+
}
|
|
59
|
+
const where = conditions.length > 0 ? 'WHERE ' + conditions.join(' AND ') : '';
|
|
60
|
+
const limit = opts.limit || 50;
|
|
61
|
+
return db.prepare(`SELECT * FROM memory_events ${where} ORDER BY created_at DESC LIMIT ?`).all(...params, limit);
|
|
62
|
+
}
|
|
63
|
+
function searchMemoryEvents(query, project, limit = 20) {
|
|
64
|
+
const db = (0, database_1.getDb)();
|
|
65
|
+
const conditions = ['(summary LIKE ? OR topic LIKE ? OR details_json LIKE ? OR tags_json LIKE ?)'];
|
|
66
|
+
const params = [`%${query}%`, `%${query}%`, `%${query}%`, `%${query}%`];
|
|
67
|
+
if (project) {
|
|
68
|
+
conditions.push('project = ?');
|
|
69
|
+
params.push(project);
|
|
70
|
+
}
|
|
71
|
+
const where = 'WHERE ' + conditions.join(' AND ');
|
|
72
|
+
return db.prepare(`SELECT * FROM memory_events ${where} ORDER BY importance DESC, created_at DESC LIMIT ?`).all(...params, limit);
|
|
73
|
+
}
|
|
74
|
+
function getMemoryTimeline(project, days = 30) {
|
|
75
|
+
const db = (0, database_1.getDb)();
|
|
76
|
+
const since = new Date(Date.now() - days * 86400000).toISOString();
|
|
77
|
+
const conditions = ['created_at >= ?'];
|
|
78
|
+
const params = [since];
|
|
79
|
+
if (project) {
|
|
80
|
+
conditions.push('project = ?');
|
|
81
|
+
params.push(project);
|
|
82
|
+
}
|
|
83
|
+
const rows = db.prepare(`SELECT date(created_at) as date, type FROM memory_events WHERE ${conditions.join(' AND ')} ORDER BY date`).all(...params);
|
|
84
|
+
const timeline = {};
|
|
85
|
+
for (const row of rows) {
|
|
86
|
+
if (!timeline[row.date])
|
|
87
|
+
timeline[row.date] = { count: 0, types: {} };
|
|
88
|
+
timeline[row.date].count++;
|
|
89
|
+
timeline[row.date].types[row.type] = (timeline[row.date].types[row.type] || 0) + 1;
|
|
90
|
+
}
|
|
91
|
+
return Object.entries(timeline).map(([date, data]) => ({ date, ...data }));
|
|
92
|
+
}
|
|
93
|
+
function getMemoryStats(project) {
|
|
94
|
+
const db = (0, database_1.getDb)();
|
|
95
|
+
const where = project ? 'WHERE project = ?' : '';
|
|
96
|
+
const params = project ? [project] : [];
|
|
97
|
+
const totalRow = db.prepare(`SELECT COUNT(*) as c FROM memory_events ${where}`).get(...params);
|
|
98
|
+
const avgRow = db.prepare(`SELECT AVG(importance) as a FROM memory_events ${where}`).get(...params);
|
|
99
|
+
const oldestRow = db.prepare(`SELECT MIN(created_at) as o FROM memory_events ${where}`).get(...params);
|
|
100
|
+
const newestRow = db.prepare(`SELECT MAX(created_at) as n FROM memory_events ${where}`).get(...params);
|
|
101
|
+
const typeRows = db.prepare(`SELECT type, COUNT(*) as c FROM memory_events ${where} GROUP BY type`).all(...params);
|
|
102
|
+
const byType = {};
|
|
103
|
+
for (const row of typeRows)
|
|
104
|
+
byType[row.type] = row.c;
|
|
105
|
+
return {
|
|
106
|
+
total: totalRow.c,
|
|
107
|
+
byType,
|
|
108
|
+
avgImportance: Math.round((avgRow.a || 0) * 10) / 10,
|
|
109
|
+
oldestEvent: oldestRow.o,
|
|
110
|
+
newestEvent: newestRow.n,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
function deleteMemoryEventsOlderThan(days) {
|
|
114
|
+
const db = (0, database_1.getDb)();
|
|
115
|
+
const cutoff = new Date(Date.now() - days * 86400000).toISOString();
|
|
116
|
+
const result = db.prepare('DELETE FROM memory_events WHERE created_at < ? AND importance < 5').run(cutoff);
|
|
117
|
+
return result.changes;
|
|
118
|
+
}
|
|
119
|
+
function getImportanceForType(type) {
|
|
120
|
+
const map = {
|
|
121
|
+
file_event: 1,
|
|
122
|
+
edit: 3,
|
|
123
|
+
decision: 8,
|
|
124
|
+
error: 7,
|
|
125
|
+
fix: 8,
|
|
126
|
+
verification: 6,
|
|
127
|
+
publish: 7,
|
|
128
|
+
handoff: 5,
|
|
129
|
+
pattern: 9,
|
|
130
|
+
style: 8,
|
|
131
|
+
session: 5,
|
|
132
|
+
branch: 5,
|
|
133
|
+
risk: 6,
|
|
134
|
+
question: 4,
|
|
135
|
+
ai_work: 6,
|
|
136
|
+
};
|
|
137
|
+
return map[type] || 3;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=memory-event-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-event-store.js","sourceRoot":"","sources":["../../../../src/walls/06-memory/stores/memory-event-store.ts"],"names":[],"mappings":";;AAqBA,8CAoBC;AAED,gDAUC;AAED,0CAwBC;AAED,gDASC;AAED,8CAiBC;AAED,wCA2BC;AAED,kEAKC;AAjJD,mDAA6C;AAqB7C,SAAgB,iBAAiB,CAAC,KAAkB;IAClD,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;GAGvB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CACrB,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,MAAM,IAAI,IAAI,EACpB,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,KAAK,IAAI,IAAI,EACnB,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EACpD,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAChD,KAAK,CAAC,UAAU,IAAI,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,EACpD,KAAK,CAAC,IAAI,IAAI,IAAI,EAClB,KAAK,CAAC,KAAK,IAAI,IAAI,EACnB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAC/C,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AACxC,CAAC;AAED,SAAgB,kBAAkB,CAAC,MAAqB;IACtD,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;QACrC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,EAAE,EAAE,CAAC;IACL,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAgB,eAAe,CAAC,OAQ5B,EAAE;IACJ,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,MAAM,GAAc,EAAE,CAAC;IAE7B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IAChF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC;IACvE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IAAC,CAAC;IACpF,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAAC,CAAC;IAC7E,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAAC,CAAC;IAChF,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAAC,CAAC;IAE9G,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;IAE/B,OAAO,EAAE,CAAC,OAAO,CAAC,+BAA+B,KAAK,mCAAmC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,KAAK,CAAqB,CAAC;AACvI,CAAC;AAED,SAAgB,kBAAkB,CAAC,KAAa,EAAE,OAAgB,EAAE,QAAgB,EAAE;IACpF,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,MAAM,UAAU,GAAa,CAAC,6EAA6E,CAAC,CAAC;IAC7G,MAAM,MAAM,GAAc,CAAC,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;IAEnF,IAAI,OAAO,EAAE,CAAC;QAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IAEtE,MAAM,KAAK,GAAG,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClD,OAAO,EAAE,CAAC,OAAO,CAAC,+BAA+B,KAAK,oDAAoD,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,KAAK,CAAqB,CAAC;AACxJ,CAAC;AAED,SAAgB,iBAAiB,CAAC,OAAgB,EAAE,OAAe,EAAE;IACnE,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACnE,MAAM,UAAU,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACvC,MAAM,MAAM,GAAc,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,OAAO,EAAE,CAAC;QAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IAEtE,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,kEAAkE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAA0C,CAAC;IAE5L,MAAM,QAAQ,GAAqE,EAAE,CAAC;IACtF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACtE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QAC3B,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACrF,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,SAAgB,cAAc,CAAC,OAAgB;IAO7C,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAExC,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,2CAA2C,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAkB,CAAC;IAChH,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,kDAAkD,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAkB,CAAC;IACrH,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,kDAAkD,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAyB,CAAC;IAC/H,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,kDAAkD,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAyB,CAAC;IAE/H,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,iDAAiD,KAAK,gBAAgB,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAuC,CAAC;IACzJ,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,GAAG,IAAI,QAAQ;QAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAErD,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,CAAC;QACjB,MAAM;QACN,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE;QACpD,WAAW,EAAE,SAAS,CAAC,CAAC;QACxB,WAAW,EAAE,SAAS,CAAC,CAAC;KACzB,CAAC;AACJ,CAAC;AAED,SAAgB,2BAA2B,CAAC,IAAY;IACtD,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACpE,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,mEAAmE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3G,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY;IACxC,MAAM,GAAG,GAA2B;QAClC,UAAU,EAAE,CAAC;QACb,IAAI,EAAE,CAAC;QACP,QAAQ,EAAE,CAAC;QACX,KAAK,EAAE,CAAC;QACR,GAAG,EAAE,CAAC;QACN,YAAY,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;KACX,CAAC;IACF,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export interface DeveloperStyle {
|
|
2
|
+
communication: string;
|
|
3
|
+
coding: string;
|
|
4
|
+
verification: string[];
|
|
5
|
+
privacy: string[];
|
|
6
|
+
product_rules: string[];
|
|
7
|
+
language_preference?: string;
|
|
8
|
+
timezone?: string;
|
|
9
|
+
work_hours?: string;
|
|
10
|
+
preferences: Record<string, string>;
|
|
11
|
+
}
|
|
12
|
+
export interface ProjectStyle {
|
|
13
|
+
architecture: string;
|
|
14
|
+
naming: string;
|
|
15
|
+
testing: string;
|
|
16
|
+
stack: string[];
|
|
17
|
+
conventions: string[];
|
|
18
|
+
entry_points: string[];
|
|
19
|
+
module_system: string;
|
|
20
|
+
}
|
|
21
|
+
export interface StyleProfile {
|
|
22
|
+
project: string;
|
|
23
|
+
developer: DeveloperStyle;
|
|
24
|
+
project_style: ProjectStyle;
|
|
25
|
+
updated_at: string;
|
|
26
|
+
}
|
|
27
|
+
export declare function loadDeveloperStyle(projectDir: string): DeveloperStyle;
|
|
28
|
+
export declare function saveDeveloperStyle(projectDir: string, style: DeveloperStyle): void;
|
|
29
|
+
export declare function loadProjectStyle(projectDir: string): ProjectStyle;
|
|
30
|
+
export declare function saveProjectStyle(projectDir: string, style: ProjectStyle): void;
|
|
31
|
+
export declare function loadCommunication(projectDir: string): string;
|
|
32
|
+
export declare function saveCommunication(projectDir: string, content: string): void;
|
|
33
|
+
export declare function getStyleProfile(projectDir: string): StyleProfile;
|
|
34
|
+
export declare function updateDeveloperPreference(projectDir: string, key: string, value: string): void;
|
|
35
|
+
export declare function addVerificationCommand(projectDir: string, command: string): void;
|
|
36
|
+
export declare function addProductRule(projectDir: string, rule: string): void;
|
|
37
|
+
export declare function addProjectConvention(projectDir: string, convention: string): void;
|
|
38
|
+
export declare function initDefaultStyle(projectDir: string): void;
|
|
39
|
+
//# sourceMappingURL=style-memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style-memory.d.ts","sourceRoot":"","sources":["../../../../src/walls/06-memory/style/style-memory.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,cAAc,CAAC;IAC1B,aAAa,EAAE,YAAY,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB;AA8CD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CAQrE;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI,CAWlF;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,CAQjE;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAU9E;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAI5D;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAG3E;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,CAOhE;AAED,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAI9F;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAMhF;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAMrE;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAMjF;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAUzD"}
|