pmem-ai 0.7.3 → 0.7.5

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 (114) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +40 -27
  3. package/dist/commands/capture.d.ts +8 -0
  4. package/dist/commands/capture.d.ts.map +1 -0
  5. package/dist/commands/capture.js +69 -0
  6. package/dist/commands/capture.js.map +1 -0
  7. package/dist/commands/context.d.ts +5 -0
  8. package/dist/commands/context.d.ts.map +1 -0
  9. package/dist/commands/context.js +124 -0
  10. package/dist/commands/context.js.map +1 -0
  11. package/dist/commands/decision.d.ts +5 -0
  12. package/dist/commands/decision.d.ts.map +1 -0
  13. package/dist/commands/decision.js +67 -0
  14. package/dist/commands/decision.js.map +1 -0
  15. package/dist/commands/init.d.ts.map +1 -1
  16. package/dist/commands/init.js +4 -0
  17. package/dist/commands/init.js.map +1 -1
  18. package/dist/commands/install.d.ts +5 -0
  19. package/dist/commands/install.d.ts.map +1 -1
  20. package/dist/commands/install.js +54 -35
  21. package/dist/commands/install.js.map +1 -1
  22. package/dist/commands/mcp.d.ts +1 -1
  23. package/dist/commands/mcp.d.ts.map +1 -1
  24. package/dist/commands/mcp.js +2 -2
  25. package/dist/commands/mcp.js.map +1 -1
  26. package/dist/commands/module.d.ts +5 -0
  27. package/dist/commands/module.d.ts.map +1 -0
  28. package/dist/commands/module.js +75 -0
  29. package/dist/commands/module.js.map +1 -0
  30. package/dist/commands/new.js +1 -1
  31. package/dist/commands/new.js.map +1 -1
  32. package/dist/commands/rebuild.js +41 -1
  33. package/dist/commands/rebuild.js.map +1 -1
  34. package/dist/commands/recall.d.ts +4 -1
  35. package/dist/commands/recall.d.ts.map +1 -1
  36. package/dist/commands/recall.js +14 -128
  37. package/dist/commands/recall.js.map +1 -1
  38. package/dist/commands/status.js +1 -1
  39. package/dist/commands/status.js.map +1 -1
  40. package/dist/commands/sync.d.ts.map +1 -1
  41. package/dist/commands/sync.js +6 -1
  42. package/dist/commands/sync.js.map +1 -1
  43. package/dist/commands/update.d.ts.map +1 -1
  44. package/dist/commands/update.js +7 -13
  45. package/dist/commands/update.js.map +1 -1
  46. package/dist/commands/verify.d.ts +1 -0
  47. package/dist/commands/verify.d.ts.map +1 -1
  48. package/dist/commands/verify.js +6 -3
  49. package/dist/commands/verify.js.map +1 -1
  50. package/dist/core/agentRules.d.ts +13 -0
  51. package/dist/core/agentRules.d.ts.map +1 -0
  52. package/dist/core/agentRules.js +131 -0
  53. package/dist/core/agentRules.js.map +1 -0
  54. package/dist/core/capture.d.ts +15 -0
  55. package/dist/core/capture.d.ts.map +1 -0
  56. package/dist/core/capture.js +397 -0
  57. package/dist/core/capture.js.map +1 -0
  58. package/dist/core/consistency.d.ts.map +1 -1
  59. package/dist/core/consistency.js +2 -0
  60. package/dist/core/consistency.js.map +1 -1
  61. package/dist/core/decisionInfer.d.ts +13 -0
  62. package/dist/core/decisionInfer.d.ts.map +1 -0
  63. package/dist/core/decisionInfer.js +172 -0
  64. package/dist/core/decisionInfer.js.map +1 -0
  65. package/dist/core/format.js +134 -11
  66. package/dist/core/format.js.map +1 -1
  67. package/dist/core/moduleInfer.d.ts +11 -0
  68. package/dist/core/moduleInfer.d.ts.map +1 -0
  69. package/dist/core/moduleInfer.js +227 -0
  70. package/dist/core/moduleInfer.js.map +1 -0
  71. package/dist/core/next.d.ts +9 -0
  72. package/dist/core/next.d.ts.map +1 -0
  73. package/dist/core/next.js +163 -0
  74. package/dist/core/next.js.map +1 -0
  75. package/dist/core/query/context.d.ts +3 -0
  76. package/dist/core/query/context.d.ts.map +1 -0
  77. package/dist/core/query/context.js +193 -0
  78. package/dist/core/query/context.js.map +1 -0
  79. package/dist/core/query/recall.d.ts +28 -0
  80. package/dist/core/query/recall.d.ts.map +1 -1
  81. package/dist/core/query/recall.js +131 -25
  82. package/dist/core/query/recall.js.map +1 -1
  83. package/dist/core/query/status.js +1 -1
  84. package/dist/core/query/status.js.map +1 -1
  85. package/dist/core/state.d.ts +6 -0
  86. package/dist/core/state.d.ts.map +1 -0
  87. package/dist/core/state.js +147 -0
  88. package/dist/core/state.js.map +1 -0
  89. package/dist/core/symbols.d.ts +2 -0
  90. package/dist/core/symbols.d.ts.map +1 -0
  91. package/dist/core/symbols.js +147 -0
  92. package/dist/core/symbols.js.map +1 -0
  93. package/dist/core/traceParse.d.ts +14 -0
  94. package/dist/core/traceParse.d.ts.map +1 -0
  95. package/dist/core/traceParse.js +80 -0
  96. package/dist/core/traceParse.js.map +1 -0
  97. package/dist/core/traceSummary.d.ts +28 -0
  98. package/dist/core/traceSummary.d.ts.map +1 -0
  99. package/dist/core/traceSummary.js +265 -0
  100. package/dist/core/traceSummary.js.map +1 -0
  101. package/dist/index.js +76 -5
  102. package/dist/index.js.map +1 -1
  103. package/dist/mcp/security.d.ts +4 -0
  104. package/dist/mcp/security.d.ts.map +1 -1
  105. package/dist/mcp/security.js +35 -0
  106. package/dist/mcp/security.js.map +1 -1
  107. package/dist/mcp/server.d.ts +1 -1
  108. package/dist/mcp/server.d.ts.map +1 -1
  109. package/dist/mcp/server.js +73 -5
  110. package/dist/mcp/server.js.map +1 -1
  111. package/dist/types.d.ts +68 -0
  112. package/dist/types.d.ts.map +1 -1
  113. package/package.json +7 -2
  114. package/skills/pmem/SKILL.md +28 -20
@@ -0,0 +1,397 @@
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.captureCore = captureCore;
37
+ const path = __importStar(require("path"));
38
+ const fs = __importStar(require("fs"));
39
+ const crypto = __importStar(require("crypto"));
40
+ const child_process_1 = require("child_process");
41
+ const fs_1 = require("./fs");
42
+ const manifest_1 = require("./manifest");
43
+ const rebuild_1 = require("../commands/rebuild");
44
+ const verify_1 = require("../commands/verify");
45
+ const db_1 = require("./db");
46
+ const status_1 = require("./query/status");
47
+ const traceSummary_1 = require("./traceSummary");
48
+ const next_1 = require("./next");
49
+ function captureCore(pmemPath, options = {}) {
50
+ const cwd = process.cwd();
51
+ if (!(0, fs_1.fileExists)(pmemPath)) {
52
+ return {
53
+ success: false,
54
+ message: 'No .pmem directory found. Run pmem init first.'
55
+ };
56
+ }
57
+ // 1. Detect changed files
58
+ let status;
59
+ try {
60
+ status = (0, status_1.statusQuery)(pmemPath);
61
+ }
62
+ catch (err) {
63
+ return {
64
+ success: false,
65
+ message: `Failed to detect changes: ${err.message}`
66
+ };
67
+ }
68
+ const changedFiles = (status.changes || []).filter(f => !f.path.startsWith('.pmem/') && !f.path.startsWith('.pmem\\') && f.path !== '.pmem');
69
+ if (changedFiles.length === 0 && !options.force) {
70
+ return {
71
+ success: true,
72
+ message: 'No changed files detected. Memory is up-to-date.',
73
+ skipped: true
74
+ };
75
+ }
76
+ // 2. Compute git/mtime diff hash for duplicate check
77
+ let diffHash = '';
78
+ try {
79
+ const isGit = (() => {
80
+ try {
81
+ (0, child_process_1.execSync)('git rev-parse --git-dir', { cwd, stdio: 'ignore' });
82
+ return true;
83
+ }
84
+ catch {
85
+ return false;
86
+ }
87
+ })();
88
+ if (isGit) {
89
+ const statusOutput = (0, child_process_1.execSync)("git status --porcelain --untracked-files=all -- . ':!.pmem'", { cwd, encoding: 'utf8', timeout: 5000 });
90
+ const diffOutput = (0, child_process_1.execSync)("git diff HEAD -- . ':!.pmem'", { cwd, encoding: 'utf8', timeout: 5000 });
91
+ const untrackedHashes = changedFiles
92
+ .filter(f => f.status.includes('?') || f.status === '??')
93
+ .map(f => {
94
+ const fullPath = path.join(cwd, f.path);
95
+ if (!(0, fs_1.fileExists)(fullPath))
96
+ return `${f.path}:missing`;
97
+ try {
98
+ const content = fs.readFileSync(fullPath);
99
+ return `${f.path}:${crypto.createHash('sha256').update(content).digest('hex')}`;
100
+ }
101
+ catch {
102
+ return `${f.path}:error`;
103
+ }
104
+ })
105
+ .join('\n');
106
+ const combined = [
107
+ statusOutput,
108
+ diffOutput,
109
+ untrackedHashes
110
+ ].join('\n---pmem-diff-boundary---');
111
+ diffHash = crypto.createHash('sha256').update(combined).digest('hex');
112
+ }
113
+ else {
114
+ // Fallback mtime-based hash of changed files and mtimes
115
+ const mtimeList = changedFiles.map(c => {
116
+ const fullPath = path.join(cwd, c.path);
117
+ const mtime = (0, fs_1.fileExists)(fullPath) ? (0, fs_1.getFileMtime)(fullPath) || 0 : 0;
118
+ return `${c.path}:${mtime}:${c.status}`;
119
+ }).join('\n');
120
+ diffHash = crypto.createHash('sha256').update(mtimeList).digest('hex');
121
+ }
122
+ }
123
+ catch (err) {
124
+ // If diff computation fails, we use a fallback hash based on file names only
125
+ const fallbackList = changedFiles.map(c => `${c.path}:${c.status}`).join('\n');
126
+ diffHash = crypto.createHash('sha256').update(fallbackList).digest('hex');
127
+ }
128
+ // 3. Find the latest trace card and check its diff_hash
129
+ const traceDir = path.resolve(pmemPath, 'traces');
130
+ (0, fs_1.ensureDir)(traceDir);
131
+ if (!options.force && diffHash) {
132
+ try {
133
+ const existingTraceFiles = fs.readdirSync(traceDir)
134
+ .filter((f) => f.endsWith('.md'))
135
+ .sort((a, b) => b.localeCompare(a)); // Sort descending to get latest first
136
+ if (existingTraceFiles.length > 0) {
137
+ const latestTracePath = path.join(traceDir, existingTraceFiles[0]);
138
+ const latestTraceContent = (0, fs_1.readFile)(latestTracePath) || '';
139
+ // Match diff_hash: "..." or diff_hash: ...
140
+ const diffHashMatch = latestTraceContent.match(/diff_hash:\s*["']?([a-fA-F0-9]+)["']?/);
141
+ if (diffHashMatch && diffHashMatch[1] === diffHash) {
142
+ return {
143
+ success: true,
144
+ message: 'No new capture created. Existing trace already records this diff.',
145
+ skipped: true
146
+ };
147
+ }
148
+ }
149
+ }
150
+ catch {
151
+ // Ignore directory read/parse errors for safety
152
+ }
153
+ }
154
+ // 4. Resolve latest task
155
+ let latestTask;
156
+ const sessionPath = path.join(pmemPath, 'session.json');
157
+ if ((0, fs_1.fileExists)(sessionPath)) {
158
+ try {
159
+ const sessionContent = (0, fs_1.readFile)(sessionPath);
160
+ if (sessionContent) {
161
+ const sessionData = JSON.parse(sessionContent);
162
+ if (sessionData.latest_task) {
163
+ latestTask = sessionData.latest_task;
164
+ }
165
+ }
166
+ }
167
+ catch {
168
+ // Fallback if parsing fails
169
+ }
170
+ }
171
+ // 5. Build trace summary
172
+ const traceSummary = (0, traceSummary_1.buildTraceSummary)({
173
+ cwd,
174
+ pmemPath,
175
+ changedFiles,
176
+ userSummary: options.summary,
177
+ next: options.next,
178
+ latestTask
179
+ });
180
+ const next = traceSummary.next[0] || 'Continue development.';
181
+ // 6. Create trace card
182
+ const today = new Date().toISOString().split('T')[0];
183
+ let traceFile = '';
184
+ try {
185
+ const existingTraces = fs.readdirSync(traceDir)
186
+ .filter((f) => f.startsWith(today) && f.endsWith('.md'))
187
+ .length;
188
+ const traceNum = String(existingTraces + 1).padStart(3, '0');
189
+ traceFile = path.resolve(traceDir, `${today}-${traceNum}.md`);
190
+ // Strict path traversal validation
191
+ if (!traceFile.startsWith(traceDir)) {
192
+ throw new Error('Security: trace path traversal detected');
193
+ }
194
+ const cardId = `trace.${today}-${traceNum}`;
195
+ const listItems = (arr) => arr.length > 0 ? arr.map(x => `- ${x}`).join('\n') : '- (none)';
196
+ const traceContent = `---
197
+ id: ${cardId}
198
+ type: trace
199
+ created: ${new Date().toISOString()}
200
+ updated: ${new Date().toISOString()}
201
+ title: "${traceSummary.title.replace(/"/g, '\\"')}"
202
+ summary: "${traceSummary.summary.replace(/"/g, '\\"')}"
203
+ change_kind: "implementation"
204
+ confidence: "${traceSummary.confidence}"
205
+ source: "${options.summary ? 'capture_manual' : 'capture_auto'}"
206
+ diff_hash: "${diffHash}"
207
+ source_files:
208
+ ${changedFiles.map(f => ` - ${f.path}`).join('\n')}
209
+ related:
210
+ ${traceSummary.affectedModules.map(m => ` - ${m}`).join('\n')}
211
+ ---
212
+
213
+ # Capture: ${traceSummary.title}
214
+
215
+ ## Summary
216
+ ${traceSummary.summary}
217
+
218
+ ## Changed files
219
+ ${traceSummary.changedFiles.map(f => `- ${f.path} [${f.status}]${f.additions !== undefined ? ` (+${f.additions} -${f.deletions})` : ''}`).join('\n')}
220
+
221
+ ## What changed
222
+ ${listItems(traceSummary.whatChanged)}
223
+
224
+ ## Why
225
+ ${listItems(traceSummary.why)}
226
+
227
+ ## Architecture notes
228
+ ${listItems(traceSummary.architectureNotes)}
229
+
230
+ ## Decisions
231
+ ${listItems(traceSummary.decisions)}
232
+
233
+ ## Affected modules
234
+ ${listItems(traceSummary.affectedModules)}
235
+
236
+ ## Next
237
+ ${listItems(traceSummary.next)}
238
+ `;
239
+ (0, fs_1.atomicWrite)(traceFile, traceContent);
240
+ }
241
+ catch (err) {
242
+ return {
243
+ success: false,
244
+ message: `Failed to write trace card: ${err.message}`
245
+ };
246
+ }
247
+ // 7. Update .pmem/next.md in managed block
248
+ try {
249
+ const traceRelPath = path.relative(cwd, traceFile);
250
+ const contextList = [traceRelPath, ...traceSummary.affectedModules];
251
+ (0, next_1.writeManagedNext)(pmemPath, {
252
+ nextStep: next,
253
+ why: traceSummary.why[0] || 'Capture of latest changes.',
254
+ context: contextList
255
+ });
256
+ }
257
+ catch (err) {
258
+ return {
259
+ success: false,
260
+ message: `Failed to update next.md: ${err.message}`
261
+ };
262
+ }
263
+ // 8. DB transaction to resolve dirty flags
264
+ const dbPath = path.join(pmemPath, 'pmem.db');
265
+ let db = null;
266
+ let transactionActive = false;
267
+ let backupManifest = null;
268
+ const manifestPath = path.join(pmemPath, 'manifest.yml');
269
+ const dirtyPath = path.join(pmemPath, '.dirty');
270
+ try {
271
+ const manifest = (0, manifest_1.loadManifest)(pmemPath);
272
+ if (manifest) {
273
+ backupManifest = JSON.stringify(manifest);
274
+ }
275
+ if ((0, fs_1.fileExists)(dbPath)) {
276
+ db = (0, db_1.openDatabase)(pmemPath);
277
+ (0, db_1.createSchema)(db);
278
+ // Start transaction
279
+ db.prepare('BEGIN TRANSACTION').run();
280
+ transactionActive = true;
281
+ const activeSession = (0, db_1.getActiveSession)(db);
282
+ // Auto mark changed files dirty first to make sure they are tracked before resolving
283
+ const allPaths = db.prepare("SELECT card_id, path FROM paths").all();
284
+ const dirtyCards = [];
285
+ for (const change of changedFiles) {
286
+ for (const p of allPaths) {
287
+ if (p.card_id && p.path && change.path) {
288
+ // Check if matches
289
+ const isMatch = (() => {
290
+ const p1 = change.path.replace(/\\/g, '/');
291
+ const p2 = p.path.replace(/\\/g, '/');
292
+ return p1 === p2 || p1.endsWith('/' + p2) || p2.endsWith('/' + p1);
293
+ })();
294
+ if (isMatch) {
295
+ if (!dirtyCards.includes(p.card_id)) {
296
+ (0, db_1.insertDirtyFlag)(db, 'card', p.card_id, 'file_changed: ' + change.path, activeSession?.id);
297
+ dirtyCards.push(p.card_id);
298
+ }
299
+ }
300
+ }
301
+ }
302
+ }
303
+ // Resolve affected cards dirty flags
304
+ const affectedCards = status.affected_cards || [];
305
+ const cardsToResolve = Array.from(new Set([
306
+ ...dirtyCards,
307
+ ...affectedCards.map((ac) => ac.card_id)
308
+ ]));
309
+ for (const cardId of cardsToResolve) {
310
+ (0, db_1.resolveDirtyFlags)(db, 'card', cardId);
311
+ }
312
+ // Resolve project level dirty flag
313
+ (0, db_1.resolveDirtyFlags)(db, 'project', '.pmem');
314
+ // Log update to SQLite
315
+ const todayNum = path.basename(traceFile, '.md').split('-').pop() || '001';
316
+ const traceCardId = `trace.${today}-${todayNum}`;
317
+ (0, db_1.insertUpdateLog)(db, 'confirm_update', traceSummary.summary, activeSession?.id, [traceCardId], true);
318
+ // Commit transaction
319
+ db.prepare('COMMIT').run();
320
+ transactionActive = false;
321
+ (0, db_1.closeDatabase)();
322
+ }
323
+ // Clean up dirty state in files
324
+ if ((0, fs_1.fileExists)(dirtyPath)) {
325
+ fs.unlinkSync(dirtyPath);
326
+ }
327
+ if (manifest) {
328
+ manifest.memory_status.dirty = false;
329
+ manifest.memory_status.dirty_reason = null;
330
+ manifest.memory_status.dirty_since = null;
331
+ (0, manifest_1.saveManifest)(pmemPath, manifest);
332
+ }
333
+ }
334
+ catch (err) {
335
+ if (db && transactionActive) {
336
+ try {
337
+ db.prepare('ROLLBACK').run();
338
+ }
339
+ catch { }
340
+ }
341
+ try {
342
+ (0, db_1.closeDatabase)();
343
+ }
344
+ catch { }
345
+ // Rollback manifest
346
+ if (backupManifest && (0, fs_1.fileExists)(manifestPath)) {
347
+ try {
348
+ (0, manifest_1.saveManifest)(pmemPath, JSON.parse(backupManifest));
349
+ }
350
+ catch { }
351
+ }
352
+ // Rollback trace file
353
+ if ((0, fs_1.fileExists)(traceFile)) {
354
+ try {
355
+ fs.unlinkSync(traceFile);
356
+ }
357
+ catch { }
358
+ }
359
+ return {
360
+ success: false,
361
+ message: `Failed SQLite transaction: ${err.message}`
362
+ };
363
+ }
364
+ // 9. Run rebuild (incremental or full)
365
+ try {
366
+ (0, rebuild_1.rebuildCommand)({ full: options.full === true });
367
+ }
368
+ catch (err) {
369
+ return {
370
+ success: false,
371
+ message: `Failed rebuild: ${err.message}`,
372
+ tracePath: traceFile
373
+ };
374
+ }
375
+ // Update state.md
376
+ try {
377
+ const { updateStateRecentChanges, updateStateModules } = require('./state');
378
+ updateStateRecentChanges(pmemPath, { title: traceSummary.title, summary: traceSummary.summary });
379
+ updateStateModules(pmemPath);
380
+ }
381
+ catch (err) {
382
+ // Ignore state update errors
383
+ }
384
+ // 10. Run lightweight verify
385
+ try {
386
+ (0, verify_1.verifyCommand)({ fix: false, fixLocks: false, fixStale: false, relaxed: true, noExit: true });
387
+ }
388
+ catch (err) {
389
+ // Verification warning only, do not fail capture
390
+ }
391
+ return {
392
+ success: true,
393
+ message: 'Memory sync and update completed successfully.',
394
+ tracePath: traceFile
395
+ };
396
+ }
397
+ //# sourceMappingURL=capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/core/capture.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"consistency.d.ts","sourceRoot":"","sources":["../../src/core/consistency.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAW,MAAM,UAAU,CAAC;AAE1D;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EAAE,CA8DrE"}
1
+ {"version":3,"file":"consistency.d.ts","sourceRoot":"","sources":["../../src/core/consistency.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAW,MAAM,UAAU,CAAC;AAE1D;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EAAE,CA+DrE"}
@@ -62,6 +62,8 @@ function checkStaleMemory(pmemPath) {
62
62
  try {
63
63
  const cards = db.prepare('SELECT * FROM cards WHERE is_deleted = 0').all();
64
64
  for (const card of cards) {
65
+ if (card.type === 'trace')
66
+ continue;
65
67
  const sourceFiles = db.prepare("SELECT p.path FROM paths p WHERE p.card_id = ? AND p.relation = 'source_file'").all(card.id);
66
68
  const t1 = card.updated_at ? new Date(card.updated_at).getTime() : 0;
67
69
  const t2 = card.last_verified_at ? new Date(card.last_verified_at).getTime() : 0;
@@ -1 +1 @@
1
- {"version":3,"file":"consistency.js","sourceRoot":"","sources":["../../src/core/consistency.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,4CA8DC;AA3ED,2CAA6B;AAC7B,2BAA8B;AAC9B,6BAAkC;AAClC,6BAAoC;AAGpC;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAAC,QAAgB;IAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAE9C,IAAI,CAAC,IAAA,eAAU,EAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,EAAmC,CAAC;IACxC,IAAI,CAAC;QACH,EAAE,GAAG,IAAA,iBAAY,EAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAuB,EAAE,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CACtB,0CAA0C,CAC3C,CAAC,GAAG,EAAe,CAAC;QAErB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAC5B,+EAA+E,CAChF,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAA4B,CAAC;YAE1C,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACrE,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACjF,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACvC,IAAI,aAAa,KAAK,CAAC;gBAAE,SAAS;YAElC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;gBACrC,8DAA8D;gBAC9D,4DAA4D;gBAC5D,8DAA8D;gBAC9D,8DAA8D;gBAC9D,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO;oBAAE,SAAS;gBAElF,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;gBAChD,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC;oBAAE,SAAS;gBACnC,IAAI,CAAC;oBACH,MAAM,UAAU,GAAG,IAAA,aAAQ,EAAC,OAAO,CAAC,CAAC;oBACrC,IAAI,UAAU,CAAC,OAAO,GAAG,aAAa,EAAE,CAAC;wBACvC,MAAM,CAAC,IAAI,CAAC;4BACV,IAAI,EAAE,cAAc;4BACpB,QAAQ,EAAE,UAAU;4BACpB,OAAO,EAAE,IAAI,CAAC,EAAE;4BAChB,SAAS,EAAE,UAAU,CAAC,IAAI;4BAC1B,OAAO,EAAE,GAAG,IAAI,CAAC,EAAE,mBAAmB,UAAU,CAAC,IAAI,kCAAkC;yBACxF,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,kCAAkC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,sDAAsD;IACxD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"consistency.js","sourceRoot":"","sources":["../../src/core/consistency.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,4CA+DC;AA5ED,2CAA6B;AAC7B,2BAA8B;AAC9B,6BAAkC;AAClC,6BAAoC;AAGpC;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAAC,QAAgB;IAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAE9C,IAAI,CAAC,IAAA,eAAU,EAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,EAAmC,CAAC;IACxC,IAAI,CAAC;QACH,EAAE,GAAG,IAAA,iBAAY,EAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAuB,EAAE,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CACtB,0CAA0C,CAC3C,CAAC,GAAG,EAAe,CAAC;QAErB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;gBAAE,SAAS;YACpC,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAC5B,+EAA+E,CAChF,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAA4B,CAAC;YAE1C,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACrE,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACjF,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACvC,IAAI,aAAa,KAAK,CAAC;gBAAE,SAAS;YAElC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;gBACrC,8DAA8D;gBAC9D,4DAA4D;gBAC5D,8DAA8D;gBAC9D,8DAA8D;gBAC9D,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO;oBAAE,SAAS;gBAElF,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;gBAChD,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC;oBAAE,SAAS;gBACnC,IAAI,CAAC;oBACH,MAAM,UAAU,GAAG,IAAA,aAAQ,EAAC,OAAO,CAAC,CAAC;oBACrC,IAAI,UAAU,CAAC,OAAO,GAAG,aAAa,EAAE,CAAC;wBACvC,MAAM,CAAC,IAAI,CAAC;4BACV,IAAI,EAAE,cAAc;4BACpB,QAAQ,EAAE,UAAU;4BACpB,OAAO,EAAE,IAAI,CAAC,EAAE;4BAChB,SAAS,EAAE,UAAU,CAAC,IAAI;4BAC1B,OAAO,EAAE,GAAG,IAAI,CAAC,EAAE,mBAAmB,UAAU,CAAC,IAAI,kCAAkC;yBACxF,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,kCAAkC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,sDAAsD;IACxD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface InferredDecision {
2
+ id: string;
3
+ title: string;
4
+ statement: string;
5
+ reason: string;
6
+ evidence: string[];
7
+ related: string[];
8
+ source_files: string[];
9
+ }
10
+ export declare function inferDecisions(pmemPath: string): InferredDecision[];
11
+ export declare function writeInferredDecisions(pmemPath: string, decisions: InferredDecision[]): string[];
12
+ export declare function writeDecisionCandidates(pmemPath: string, decisions: InferredDecision[]): string;
13
+ //# sourceMappingURL=decisionInfer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisionInfer.d.ts","sourceRoot":"","sources":["../../src/core/decisionInfer.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAsEnE;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAG,MAAM,EAAE,CA2ChG;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAsB/F"}
@@ -0,0 +1,172 @@
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.inferDecisions = inferDecisions;
37
+ exports.writeInferredDecisions = writeInferredDecisions;
38
+ exports.writeDecisionCandidates = writeDecisionCandidates;
39
+ const path = __importStar(require("path"));
40
+ const fs = __importStar(require("fs"));
41
+ const traceParse_1 = require("./traceParse");
42
+ const fs_1 = require("./fs");
43
+ function inferDecisions(pmemPath) {
44
+ const traceDir = path.join(pmemPath, 'traces');
45
+ if (!(0, fs_1.fileExists)(traceDir))
46
+ return [];
47
+ const decisions = [];
48
+ try {
49
+ const traceFiles = fs.readdirSync(traceDir)
50
+ .filter(f => f.endsWith('.md'))
51
+ .sort((a, b) => a.localeCompare(b)); // Chronological order
52
+ for (const file of traceFiles) {
53
+ const filePath = path.join(traceDir, file);
54
+ const content = (0, fs_1.readFile)(filePath);
55
+ if (!content)
56
+ continue;
57
+ const parsed = (0, traceParse_1.parseTraceCard)(content);
58
+ if (!parsed || !parsed.decisions || parsed.decisions.length === 0)
59
+ continue;
60
+ for (const dec of parsed.decisions) {
61
+ if (dec === '(none)')
62
+ continue;
63
+ // Generate slug from decision statement
64
+ const slug = dec
65
+ .toLowerCase()
66
+ .replace(/[^a-z0-9]+/g, '_')
67
+ .replace(/^_|_$/g, '')
68
+ .slice(0, 40);
69
+ const id = `decision.${slug}`;
70
+ // Look for existing
71
+ let existing = decisions.find(d => d.id === id);
72
+ if (existing) {
73
+ if (!existing.evidence.includes(parsed.id)) {
74
+ existing.evidence.push(parsed.id);
75
+ }
76
+ }
77
+ else {
78
+ // Uniquify title from decision statement
79
+ let title = dec.charAt(0).toUpperCase() + dec.slice(1);
80
+ if (title.length > 50) {
81
+ title = title.slice(0, 47) + '...';
82
+ }
83
+ decisions.push({
84
+ id,
85
+ title,
86
+ statement: dec,
87
+ reason: `Inferred from trace ${parsed.id}`,
88
+ evidence: [parsed.id],
89
+ related: parsed.changedFiles
90
+ .filter(f => f.includes('App') || f.includes('engine') || f.includes('render'))
91
+ .map(f => {
92
+ if (f.toLowerCase().includes('engine'))
93
+ return 'module.engine';
94
+ if (f.toLowerCase().includes('render'))
95
+ return 'module.renderer';
96
+ return 'module.ui';
97
+ }),
98
+ source_files: parsed.changedFiles
99
+ });
100
+ }
101
+ }
102
+ }
103
+ }
104
+ catch { }
105
+ // Deduplicate related modules
106
+ for (const d of decisions) {
107
+ d.related = Array.from(new Set(d.related));
108
+ }
109
+ return decisions;
110
+ }
111
+ function writeInferredDecisions(pmemPath, decisions) {
112
+ const writtenPaths = [];
113
+ const decisionsDir = path.join(pmemPath, 'decisions');
114
+ (0, fs_1.ensureDir)(decisionsDir);
115
+ for (const d of decisions) {
116
+ const filename = `${d.id}.md`;
117
+ const filePath = path.join(decisionsDir, filename);
118
+ const content = `---
119
+ id: ${d.id}
120
+ type: decision
121
+ status: active
122
+ tags:
123
+ - inferred
124
+ updated: "${new Date().toISOString()}"
125
+ related:
126
+ ${d.related.map(r => ` - ${r}`).join('\n')}
127
+ source_files:
128
+ ${d.source_files.map(sf => ` - ${sf}`).join('\n')}
129
+ ---
130
+
131
+ # ${d.title}
132
+
133
+ ## Decision
134
+ ${d.statement}
135
+
136
+ ## Reason
137
+ ${d.reason}
138
+
139
+ ## Impact
140
+ - Renderer and logic bounds depend on this decision.
141
+ - Project implementations must align with this choice.
142
+
143
+ ## Evidence
144
+ ${d.evidence.map(e => `- [[${e}]]`).join('\n')}
145
+ `;
146
+ (0, fs_1.atomicWrite)(filePath, content);
147
+ writtenPaths.push(filePath);
148
+ }
149
+ return writtenPaths;
150
+ }
151
+ function writeDecisionCandidates(pmemPath, decisions) {
152
+ const candidatesDir = path.join(pmemPath, 'candidates');
153
+ (0, fs_1.ensureDir)(candidatesDir);
154
+ const filePath = path.join(candidatesDir, 'decisions.generated.md');
155
+ const content = `# Generated Decision Candidates
156
+
157
+ Generated on ${new Date().toISOString().split('T')[0]}.
158
+
159
+ ## Candidates
160
+ ${decisions.map(d => `### ${d.title}
161
+ - Suggested ID: ${d.id}
162
+ - Statement: ${d.statement}
163
+ - Evidence: ${d.evidence.join(', ')}
164
+ - Related: ${d.related.join(', ')}
165
+ `).join('\n')}
166
+
167
+ Run \`pmem decision infer --write\` to finalize these decision cards.
168
+ `;
169
+ (0, fs_1.atomicWrite)(filePath, content);
170
+ return filePath;
171
+ }
172
+ //# sourceMappingURL=decisionInfer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisionInfer.js","sourceRoot":"","sources":["../../src/core/decisionInfer.ts"],"names":[],"mappings":"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"}