pmem-ai 0.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.
Files changed (99) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/LICENSE +21 -0
  3. package/README.md +349 -0
  4. package/dist/commands/ask.d.ts +3 -0
  5. package/dist/commands/ask.d.ts.map +1 -0
  6. package/dist/commands/ask.js +303 -0
  7. package/dist/commands/ask.js.map +1 -0
  8. package/dist/commands/distill.d.ts +6 -0
  9. package/dist/commands/distill.d.ts.map +1 -0
  10. package/dist/commands/distill.js +425 -0
  11. package/dist/commands/distill.js.map +1 -0
  12. package/dist/commands/graph.d.ts +6 -0
  13. package/dist/commands/graph.d.ts.map +1 -0
  14. package/dist/commands/graph.js +216 -0
  15. package/dist/commands/graph.js.map +1 -0
  16. package/dist/commands/init.d.ts +5 -0
  17. package/dist/commands/init.d.ts.map +1 -0
  18. package/dist/commands/init.js +566 -0
  19. package/dist/commands/init.js.map +1 -0
  20. package/dist/commands/integration.d.ts +2 -0
  21. package/dist/commands/integration.d.ts.map +1 -0
  22. package/dist/commands/integration.js +216 -0
  23. package/dist/commands/integration.js.map +1 -0
  24. package/dist/commands/migrate.d.ts +6 -0
  25. package/dist/commands/migrate.d.ts.map +1 -0
  26. package/dist/commands/migrate.js +379 -0
  27. package/dist/commands/migrate.js.map +1 -0
  28. package/dist/commands/rebuild.d.ts +8 -0
  29. package/dist/commands/rebuild.d.ts.map +1 -0
  30. package/dist/commands/rebuild.js +299 -0
  31. package/dist/commands/rebuild.js.map +1 -0
  32. package/dist/commands/recall.d.ts +3 -0
  33. package/dist/commands/recall.d.ts.map +1 -0
  34. package/dist/commands/recall.js +140 -0
  35. package/dist/commands/recall.js.map +1 -0
  36. package/dist/commands/session.d.ts +3 -0
  37. package/dist/commands/session.d.ts.map +1 -0
  38. package/dist/commands/session.js +147 -0
  39. package/dist/commands/session.js.map +1 -0
  40. package/dist/commands/status.d.ts +5 -0
  41. package/dist/commands/status.d.ts.map +1 -0
  42. package/dist/commands/status.js +275 -0
  43. package/dist/commands/status.js.map +1 -0
  44. package/dist/commands/update.d.ts +14 -0
  45. package/dist/commands/update.d.ts.map +1 -0
  46. package/dist/commands/update.js +536 -0
  47. package/dist/commands/update.js.map +1 -0
  48. package/dist/commands/verify.d.ts +4 -0
  49. package/dist/commands/verify.d.ts.map +1 -0
  50. package/dist/commands/verify.js +296 -0
  51. package/dist/commands/verify.js.map +1 -0
  52. package/dist/core/db.d.ts +47 -0
  53. package/dist/core/db.d.ts.map +1 -0
  54. package/dist/core/db.js +326 -0
  55. package/dist/core/db.js.map +1 -0
  56. package/dist/core/format.d.ts +3 -0
  57. package/dist/core/format.d.ts.map +1 -0
  58. package/dist/core/format.js +221 -0
  59. package/dist/core/format.js.map +1 -0
  60. package/dist/core/fs.d.ts +16 -0
  61. package/dist/core/fs.d.ts.map +1 -0
  62. package/dist/core/fs.js +175 -0
  63. package/dist/core/fs.js.map +1 -0
  64. package/dist/core/git.d.ts +6 -0
  65. package/dist/core/git.d.ts.map +1 -0
  66. package/dist/core/git.js +20 -0
  67. package/dist/core/git.js.map +1 -0
  68. package/dist/core/hash.d.ts +10 -0
  69. package/dist/core/hash.d.ts.map +1 -0
  70. package/dist/core/hash.js +25 -0
  71. package/dist/core/hash.js.map +1 -0
  72. package/dist/core/manifest.d.ts +6 -0
  73. package/dist/core/manifest.d.ts.map +1 -0
  74. package/dist/core/manifest.js +207 -0
  75. package/dist/core/manifest.js.map +1 -0
  76. package/dist/core/yaml.d.ts +11 -0
  77. package/dist/core/yaml.d.ts.map +1 -0
  78. package/dist/core/yaml.js +94 -0
  79. package/dist/core/yaml.js.map +1 -0
  80. package/dist/index.d.ts +3 -0
  81. package/dist/index.d.ts.map +1 -0
  82. package/dist/index.js +167 -0
  83. package/dist/index.js.map +1 -0
  84. package/dist/types.d.ts +351 -0
  85. package/dist/types.d.ts.map +1 -0
  86. package/dist/types.js +4 -0
  87. package/dist/types.js.map +1 -0
  88. package/docs/Voorlopige projekidee.md +695 -0
  89. package/docs/handover-v0.3.md +355 -0
  90. package/docs/handover-v0.4.md +367 -0
  91. package/docs/prd.md +318 -0
  92. package/docs/project-roadmap.md +279 -0
  93. package/docs/release-checklist-v0.5.md +109 -0
  94. package/docs/v0.2 pre-design.md +182 -0
  95. package/docs/v0.2 pre-roadmap.md +270 -0
  96. package/docs/v0.3 pre-design.md +686 -0
  97. package/docs/v0.4 pre-design.md +417 -0
  98. package/docs/v0.5 pre-design.md +481 -0
  99. package/package.json +67 -0
@@ -0,0 +1,296 @@
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.verifyCommand = verifyCommand;
37
+ const path = __importStar(require("path"));
38
+ const fs_1 = require("fs");
39
+ const fs_2 = require("../core/fs");
40
+ const manifest_1 = require("../core/manifest");
41
+ const db_1 = require("../core/db");
42
+ const hash_1 = require("../core/hash");
43
+ const rebuild_1 = require("./rebuild");
44
+ const PMEM_DIR = '.pmem';
45
+ function verifyCommand(options) {
46
+ const cwd = process.cwd();
47
+ const pmemPath = path.join(cwd, PMEM_DIR);
48
+ if (!(0, fs_2.fileExists)(pmemPath)) {
49
+ console.log('No .pmem directory found. Run `pmem init` first.');
50
+ return;
51
+ }
52
+ const issues = [];
53
+ // 1. Check manifest exists
54
+ const manifest = (0, manifest_1.loadManifest)(pmemPath);
55
+ if (!manifest) {
56
+ issues.push({
57
+ severity: 'error',
58
+ type: 'missing_manifest',
59
+ message: '.pmem/manifest.yml not found or invalid.',
60
+ fix: 'Run: pmem init',
61
+ });
62
+ }
63
+ // 2. Check SQLite DB exists
64
+ const dbPath = path.join(pmemPath, 'pmem.db');
65
+ const dbExists = (0, fs_2.fileExists)(dbPath);
66
+ let db = null;
67
+ if (!dbExists) {
68
+ issues.push({
69
+ severity: 'warning',
70
+ type: 'missing_database',
71
+ message: '.pmem/pmem.db not found.',
72
+ fix: 'Run: pmem rebuild',
73
+ });
74
+ }
75
+ else {
76
+ try {
77
+ db = (0, db_1.openDatabase)(pmemPath);
78
+ (0, db_1.createSchema)(db);
79
+ }
80
+ catch (err) {
81
+ issues.push({
82
+ severity: 'error',
83
+ type: 'corrupt_database',
84
+ message: err?.message || '.pmem/pmem.db is corrupted.',
85
+ fix: 'Back up the file if needed, then run: pmem rebuild --full',
86
+ });
87
+ db = null;
88
+ }
89
+ }
90
+ if (manifest) {
91
+ // 3. Check schema version
92
+ const currentSchema = manifest.pmem?.schema_version;
93
+ if (!currentSchema) {
94
+ issues.push({
95
+ severity: 'warning',
96
+ type: 'missing_schema_version',
97
+ message: 'Manifest is missing pmem.schema_version.',
98
+ fix: 'Run: pmem migrate --to 0.3',
99
+ });
100
+ }
101
+ else if (currentSchema < '0.3') {
102
+ issues.push({
103
+ severity: 'warning',
104
+ type: 'old_schema_version',
105
+ message: `Project schema version is ${currentSchema}. Current CLI supports 0.3.`,
106
+ fix: 'Run: pmem migrate --to 0.3',
107
+ });
108
+ }
109
+ else if (currentSchema > '0.3') {
110
+ issues.push({
111
+ severity: 'error',
112
+ type: 'newer_schema_version',
113
+ message: `Project schema version is ${currentSchema}. Current CLI only supports up to 0.3.`,
114
+ fix: 'Please upgrade pmem CLI to a newer version.',
115
+ });
116
+ }
117
+ if (db) {
118
+ const cards = db.prepare('SELECT * FROM cards WHERE is_deleted = 0').all();
119
+ // 4. Hash consistency — compare DB file_hash against actual .md file content
120
+ for (const card of cards) {
121
+ const cardFilePath = path.join(cwd, card.file_path);
122
+ if (!(0, fs_2.fileExists)(cardFilePath)) {
123
+ issues.push({
124
+ severity: 'warning',
125
+ type: 'missing_card_file',
126
+ message: `Card "${card.id}" references missing file: ${card.file_path}`,
127
+ fix: 'Run: pmem rebuild',
128
+ });
129
+ continue;
130
+ }
131
+ const content = (0, fs_2.readFile)(cardFilePath);
132
+ if (!content)
133
+ continue;
134
+ const currentFileHash = (0, hash_1.computeHash)(content);
135
+ if (currentFileHash !== card.file_hash) {
136
+ issues.push({
137
+ severity: 'warning',
138
+ type: 'stale_index',
139
+ message: `Card "${card.id}" file hash mismatch (stored: ${card.file_hash}, current: ${currentFileHash}).`,
140
+ fix: 'Run: pmem rebuild',
141
+ });
142
+ }
143
+ }
144
+ // 5. Orphan edges — edges referencing non-existent card IDs
145
+ const orphanFrom = db.prepare('SELECT e.* FROM edges e LEFT JOIN cards c ON e.from_id = c.id WHERE c.id IS NULL').all();
146
+ const orphanTo = db.prepare('SELECT e.* FROM edges e LEFT JOIN cards c ON e.to_id = c.id WHERE c.id IS NULL').all();
147
+ const orphanEdgeSet = new Map();
148
+ for (const e of orphanFrom) {
149
+ if (e.id !== undefined)
150
+ orphanEdgeSet.set(e.id, e);
151
+ }
152
+ for (const e of orphanTo) {
153
+ if (e.id !== undefined && !orphanEdgeSet.has(e.id))
154
+ orphanEdgeSet.set(e.id, e);
155
+ }
156
+ if (orphanEdgeSet.size > 0) {
157
+ issues.push({
158
+ severity: 'warning',
159
+ type: 'orphan_edges',
160
+ message: `${orphanEdgeSet.size} edge(s) reference non-existent card IDs.`,
161
+ fix: 'Run: pmem rebuild',
162
+ });
163
+ }
164
+ // 6. Card policy checks
165
+ if (manifest.card_policy) {
166
+ const policy = manifest.card_policy;
167
+ // 6a. ID naming pattern
168
+ const idRegex = new RegExp(policy.id_pattern);
169
+ for (const card of cards) {
170
+ if (!idRegex.test(card.id)) {
171
+ issues.push({
172
+ severity: 'warning',
173
+ type: 'card_id_violation',
174
+ message: `Card "${card.id}" does not match naming pattern.`,
175
+ fix: `Rename card ID to match: ${policy.id_pattern}`,
176
+ });
177
+ }
178
+ }
179
+ // 6b. Token count limits — read files and estimate tokens
180
+ for (const card of cards) {
181
+ const filePath = path.join(cwd, card.file_path);
182
+ const content = (0, fs_2.readFile)(filePath);
183
+ if (content) {
184
+ const estimatedTokens = (0, hash_1.tokenCount)(content);
185
+ const maxForType = policy.max_tokens[card.type];
186
+ if (maxForType && estimatedTokens > maxForType) {
187
+ issues.push({
188
+ severity: 'warning',
189
+ type: 'card_too_large',
190
+ message: `Card "${card.id}" is ~${estimatedTokens} tokens (max for ${card.type}: ${maxForType}).`,
191
+ fix: 'Consider splitting this card or run `pmem distill --suggest-splits`.',
192
+ });
193
+ }
194
+ }
195
+ }
196
+ // 6c. Relation count threshold
197
+ for (const card of cards) {
198
+ const { count: relatedEdgeCount } = db.prepare('SELECT COUNT(*) as count FROM edges WHERE from_id = ? OR to_id = ?').get(card.id, card.id);
199
+ if (relatedEdgeCount > policy.warn_when_related_count_gt) {
200
+ issues.push({
201
+ severity: 'warning',
202
+ type: 'too_many_relations',
203
+ message: `Card "${card.id}" has ${relatedEdgeCount} relations (threshold: ${policy.warn_when_related_count_gt}).`,
204
+ fix: 'Review whether all relations are necessary.',
205
+ });
206
+ }
207
+ }
208
+ }
209
+ // 9. Stale memory: source files newer than card update time
210
+ for (const card of cards) {
211
+ const sourceFiles = db.prepare("SELECT p.path FROM paths p WHERE p.card_id = ? AND p.relation = 'source_file'").all(card.id);
212
+ const cardUpdated = card.updated_at || card.last_verified_at;
213
+ if (!cardUpdated)
214
+ continue;
215
+ const cardUpdatedMs = new Date(cardUpdated).getTime();
216
+ for (const sourceFile of sourceFiles) {
217
+ const absPath = path.join(cwd, sourceFile.path);
218
+ if (!(0, fs_2.fileExists)(absPath))
219
+ continue;
220
+ try {
221
+ const sourceStat = (0, fs_1.statSync)(absPath);
222
+ if (sourceStat.mtimeMs > cardUpdatedMs) {
223
+ issues.push({
224
+ severity: 'warning',
225
+ type: 'stale_memory',
226
+ message: `${card.id} may be stale — ${sourceFile.path} modified after last card update`,
227
+ fix: `Run: pmem update --confirm to update ${card.id}.`,
228
+ });
229
+ }
230
+ }
231
+ catch {
232
+ // skip files that can't be stat'd
233
+ }
234
+ }
235
+ }
236
+ }
237
+ // 7. Check AGENTS.md exists
238
+ if (!(0, fs_2.fileExists)(path.join(cwd, 'AGENTS.md'))) {
239
+ issues.push({
240
+ severity: 'warning',
241
+ type: 'missing_agents',
242
+ message: 'AGENTS.md not found in project root.',
243
+ fix: 'Run: pmem init',
244
+ });
245
+ }
246
+ // 8. Check memory_status.dirty
247
+ if (manifest.memory_status?.dirty) {
248
+ issues.push({
249
+ severity: 'warning',
250
+ type: 'memory_dirty',
251
+ message: `Memory is marked dirty since ${manifest.memory_status.dirty_since || 'unknown'}. Reason: ${manifest.memory_status.dirty_reason || 'unknown'}.`,
252
+ fix: 'Run: pmem update --auto (to detect changes) or pmem update --confirm (to record updates).',
253
+ });
254
+ }
255
+ }
256
+ // Build result
257
+ const errors = issues.filter(i => i.severity === 'error');
258
+ const warnings = issues.filter(i => i.severity === 'warning');
259
+ const passed = errors.length === 0;
260
+ const score = Math.max(0, 100 - errors.length * 30 - warnings.length * 5);
261
+ const result = { passed, score, issues };
262
+ // Output
263
+ if (passed && warnings.length === 0) {
264
+ console.log(`✓ Memory verification passed.`);
265
+ console.log(` Score: ${score}/100`);
266
+ return;
267
+ }
268
+ console.log(`Memory Verify Result: ${passed ? 'Warnings found' : 'Failed'}`);
269
+ console.log(`Score: ${score}/100`);
270
+ console.log('');
271
+ for (const issue of issues) {
272
+ const icon = issue.severity === 'error' ? '✗' : '⚠';
273
+ console.log(`${icon} [${issue.type}] ${issue.message}`);
274
+ console.log(` Fix: ${issue.fix}`);
275
+ console.log('');
276
+ }
277
+ // Auto-fix if requested
278
+ if (options.fix) {
279
+ const fixableIssue = issues.find(i => i.type === 'stale_index' ||
280
+ i.type === 'missing_database' ||
281
+ i.type === 'missing_card_file' ||
282
+ i.type === 'orphan_edges');
283
+ if (fixableIssue) {
284
+ console.log('Auto-fixing: rebuilding indexes...');
285
+ (0, rebuild_1.rebuildCommand)();
286
+ }
287
+ }
288
+ const hasErrors = issues.some(i => i.severity === 'error');
289
+ const hasWarnings = issues.some(i => i.severity === 'warning');
290
+ if (hasErrors)
291
+ process.exit(2);
292
+ if (hasWarnings)
293
+ process.exit(1);
294
+ process.exit(0);
295
+ }
296
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import Database from 'better-sqlite3';
2
+ export declare function openDatabase(pmemPath: string): Database.Database;
3
+ export declare function closeDatabase(): void;
4
+ export declare function getDatabase(): Database.Database | null;
5
+ export declare function createSchema(db: Database.Database): void;
6
+ export declare function hasFTS5(db: Database.Database): boolean;
7
+ export declare function createFTS5(db: Database.Database): void;
8
+ export declare function getSchemaVersion(db: Database.Database): string | null;
9
+ export declare function setSchemaVersion(db: Database.Database, version: string): void;
10
+ export declare function upsertCard(db: Database.Database, card: import('../types').CardRow): void;
11
+ export declare function deleteCardEdges(db: Database.Database, cardId: string): void;
12
+ export declare function insertEdge(db: Database.Database, edge: import('../types').EdgeRow): void;
13
+ export declare function deleteCardAliases(db: Database.Database, cardId: string): void;
14
+ export declare function insertAlias(db: Database.Database, cardId: string, alias: string, language?: string): void;
15
+ export declare function deleteCardTags(db: Database.Database, cardId: string): void;
16
+ export declare function insertTag(db: Database.Database, cardId: string, tag: string): void;
17
+ export declare function deleteCardPaths(db: Database.Database, cardId: string): void;
18
+ export declare function insertPath(db: Database.Database, cardId: string, filePath: string, relation: string): void;
19
+ export declare function clearAllTables(db: Database.Database): void;
20
+ export declare function getCardHash(db: Database.Database, filePath: string): {
21
+ file_hash: string;
22
+ frontmatter_hash: string;
23
+ body_hash: string;
24
+ } | null;
25
+ export declare function insertDirtyFlag(db: Database.Database, scope: string, target: string, reason: string, sessionId?: string): void;
26
+ export declare function resolveDirtyFlags(db: Database.Database, scope?: string, target?: string): number;
27
+ export declare function getUnresolvedDirtyFlags(db: Database.Database): Array<{
28
+ scope: string;
29
+ target: string;
30
+ reason: string;
31
+ created_at: string;
32
+ }>;
33
+ export declare function startSession(db: Database.Database, id: string, agentName?: string): void;
34
+ export declare function endSession(db: Database.Database, id: string, status?: string, taskSummary?: string): void;
35
+ export declare function getActiveSession(db: Database.Database): {
36
+ id: string;
37
+ agent_name: string | null;
38
+ started_at: string;
39
+ } | null;
40
+ export declare function insertUpdateLog(db: Database.Database, action: string, summary?: string, sessionId?: string, affectedCards?: string[], success?: boolean, error?: string): void;
41
+ export declare function getRecentUpdateLogs(db: Database.Database, limit?: number): Array<{
42
+ action: string;
43
+ summary: string | null;
44
+ created_at: string;
45
+ success: number;
46
+ }>;
47
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/core/db.ts"],"names":[],"mappings":"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"}