pmem-ai 0.6.2 → 0.7.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/CHANGELOG.md +78 -0
- package/README.md +68 -4
- package/dist/commands/ask.d.ts.map +1 -1
- package/dist/commands/ask.js +5 -1
- package/dist/commands/ask.js.map +1 -1
- package/dist/commands/distill.d.ts.map +1 -1
- package/dist/commands/distill.js +15 -6
- package/dist/commands/distill.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +21 -8
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/graph.d.ts +3 -0
- package/dist/commands/graph.d.ts.map +1 -1
- package/dist/commands/graph.js +73 -25
- package/dist/commands/graph.js.map +1 -1
- package/dist/commands/init.d.ts +13 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +142 -32
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/integration.d.ts.map +1 -1
- package/dist/commands/integration.js +170 -15
- package/dist/commands/integration.js.map +1 -1
- package/dist/commands/new.d.ts.map +1 -1
- package/dist/commands/new.js +15 -14
- package/dist/commands/new.js.map +1 -1
- package/dist/commands/rebuild.d.ts.map +1 -1
- package/dist/commands/rebuild.js +84 -15
- package/dist/commands/rebuild.js.map +1 -1
- package/dist/commands/recall.d.ts.map +1 -1
- package/dist/commands/recall.js +11 -5
- package/dist/commands/recall.js.map +1 -1
- package/dist/commands/rename.d.ts.map +1 -1
- package/dist/commands/rename.js +98 -19
- package/dist/commands/rename.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +31 -6
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/update.d.ts +2 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +117 -1
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +5 -3
- package/dist/commands/verify.js.map +1 -1
- package/dist/core/db.d.ts +8 -0
- package/dist/core/db.d.ts.map +1 -1
- package/dist/core/db.js +47 -0
- package/dist/core/db.js.map +1 -1
- package/dist/core/discover/detect.d.ts +12 -0
- package/dist/core/discover/detect.d.ts.map +1 -0
- package/dist/core/discover/detect.js +68 -0
- package/dist/core/discover/detect.js.map +1 -0
- package/dist/core/discover/index.d.ts +12 -0
- package/dist/core/discover/index.d.ts.map +1 -0
- package/dist/core/discover/index.js +645 -0
- package/dist/core/discover/index.js.map +1 -0
- package/dist/core/discover/patterns.d.ts +29 -0
- package/dist/core/discover/patterns.d.ts.map +1 -0
- package/dist/core/discover/patterns.js +322 -0
- package/dist/core/discover/patterns.js.map +1 -0
- package/dist/core/fs.d.ts +7 -0
- package/dist/core/fs.d.ts.map +1 -1
- package/dist/core/fs.js +57 -1
- package/dist/core/fs.js.map +1 -1
- package/dist/core/manifest.d.ts +23 -1
- package/dist/core/manifest.d.ts.map +1 -1
- package/dist/core/manifest.js +72 -0
- package/dist/core/manifest.js.map +1 -1
- package/dist/index.js +31 -2
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +108 -1
- package/dist/types.d.ts.map +1 -1
- package/docs/handover-v0.6.4.md +285 -0
- package/docs/project-roadmap.md +129 -4
- package/docs/release-checklist-v0.7.0.md +60 -0
- package/docs/session-start-create-design-eval.md +203 -0
- package/docs/usage.md +38 -0
- package/docs/v0.6.4 pre-design.md +526 -0
- package/docs/v0.7.0 pre-design.md +405 -0
- package/package.json +7 -3
- package/skills/pmem/SKILL.md +86 -6
- package/skills/pmem/references/first-init.md +21 -0
- package/skills/pmem/references/memory-cards.md +44 -1
- package/skills/pmem/references/session-workflow.md +3 -3
- package/skills/pmem/references/universal-domains.md +66 -0
package/dist/commands/graph.js
CHANGED
|
@@ -38,34 +38,76 @@ exports.traceCommand = traceCommand;
|
|
|
38
38
|
const path = __importStar(require("path"));
|
|
39
39
|
const fs_1 = require("../core/fs");
|
|
40
40
|
const db_1 = require("../core/db");
|
|
41
|
+
const manifest_1 = require("../core/manifest");
|
|
41
42
|
const PMEM_DIR = '.pmem';
|
|
42
43
|
function relatedCommand(id, options) {
|
|
43
44
|
const cwd = process.cwd();
|
|
44
45
|
const pmemPath = path.join(cwd, PMEM_DIR);
|
|
45
46
|
const depth = options?.depth ?? 1;
|
|
46
47
|
const edgeTypeFilter = options?.type;
|
|
48
|
+
const fmt = options?.format ?? 'compact';
|
|
49
|
+
const sourceFilter = (options?.source && options.source !== 'all')
|
|
50
|
+
? options.source
|
|
51
|
+
: undefined;
|
|
47
52
|
const db = (0, db_1.openDatabase)(pmemPath);
|
|
48
53
|
(0, db_1.createSchema)(db);
|
|
49
|
-
// Query card by ID
|
|
50
54
|
const card = db.prepare('SELECT * FROM cards WHERE id = ? AND is_deleted = 0').get(id);
|
|
51
55
|
if (!card) {
|
|
52
|
-
|
|
53
|
-
|
|
56
|
+
if (fmt === 'json') {
|
|
57
|
+
console.log(JSON.stringify({ error: `Node "${id}" not found` }, null, 2));
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
console.log(`Node "${id}" not found in database.`);
|
|
61
|
+
console.log(`Try: pmem ask "${id}" to search for related nodes.`);
|
|
62
|
+
}
|
|
54
63
|
return;
|
|
55
64
|
}
|
|
56
|
-
|
|
57
|
-
let directQuery = 'SELECT * FROM edges WHERE (from_id = ? OR to_id = ?)';
|
|
58
|
-
const directParams = [id, id];
|
|
65
|
+
let directEdges = (0, db_1.getEdgesForCard)(db, id, sourceFilter);
|
|
59
66
|
if (edgeTypeFilter) {
|
|
60
|
-
|
|
61
|
-
directParams.push(edgeTypeFilter);
|
|
67
|
+
directEdges = directEdges.filter(e => e.type === edgeTypeFilter);
|
|
62
68
|
}
|
|
63
|
-
const directEdges = db.prepare(directQuery).all(...directParams);
|
|
64
|
-
// Helper to fetch a card by ID
|
|
65
69
|
const getCard = (cardId) => {
|
|
66
70
|
return db.prepare('SELECT * FROM cards WHERE id = ? AND is_deleted = 0').get(cardId);
|
|
67
71
|
};
|
|
68
|
-
|
|
72
|
+
if (fmt === 'json') {
|
|
73
|
+
const edgesByType = {};
|
|
74
|
+
for (const edge of directEdges) {
|
|
75
|
+
const isOut = edge.from_id === id;
|
|
76
|
+
const targetId = isOut ? edge.to_id : edge.from_id;
|
|
77
|
+
const targetCard = getCard(targetId);
|
|
78
|
+
if (!edgesByType[edge.type]) {
|
|
79
|
+
edgesByType[edge.type] = [];
|
|
80
|
+
}
|
|
81
|
+
edgesByType[edge.type].push({
|
|
82
|
+
direction: isOut ? 'out' : 'in',
|
|
83
|
+
target_id: targetId,
|
|
84
|
+
target_title: targetCard?.title ?? targetId,
|
|
85
|
+
source: edge.source,
|
|
86
|
+
confidence: edge.confidence,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
const highConfidence = [];
|
|
90
|
+
const needsReview = [];
|
|
91
|
+
for (const items of Object.values(edgesByType)) {
|
|
92
|
+
for (const item of items) {
|
|
93
|
+
if (item.source === 'inferred' && item.confidence < 0.7) {
|
|
94
|
+
needsReview.push(item);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
highConfidence.push(item);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
console.log(JSON.stringify({
|
|
102
|
+
card: { id: card.id, type: card.type, title: card.title, status: card.status, file: card.file_path },
|
|
103
|
+
total_edges: directEdges.length,
|
|
104
|
+
high_confidence: highConfidence,
|
|
105
|
+
needs_review: needsReview,
|
|
106
|
+
edges_by_type: edgesByType,
|
|
107
|
+
}, null, 2));
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
// Compact output
|
|
69
111
|
console.log(`${card.id}`);
|
|
70
112
|
console.log(`Type: ${card.type}`);
|
|
71
113
|
console.log(`Title: ${card.title}`);
|
|
@@ -76,7 +118,6 @@ function relatedCommand(id, options) {
|
|
|
76
118
|
console.log('\nNo related nodes.');
|
|
77
119
|
return;
|
|
78
120
|
}
|
|
79
|
-
// Group direct edges by type
|
|
80
121
|
const grouped = new Map();
|
|
81
122
|
for (const edge of directEdges) {
|
|
82
123
|
const isOut = edge.from_id === id;
|
|
@@ -90,19 +131,21 @@ function relatedCommand(id, options) {
|
|
|
90
131
|
targetId,
|
|
91
132
|
targetTitle,
|
|
92
133
|
direction: isOut ? 'out' : 'in',
|
|
134
|
+
source: edge.source,
|
|
135
|
+
confidence: edge.confidence,
|
|
93
136
|
});
|
|
94
137
|
}
|
|
95
138
|
console.log('\nDirect Relations:');
|
|
96
139
|
for (const [edgeType, targets] of grouped) {
|
|
97
140
|
for (const t of targets) {
|
|
98
141
|
const prefix = t.direction === 'in' ? '←' : '';
|
|
99
|
-
|
|
142
|
+
const srcTag = t.source === 'inferred' ? ` [${t.source}, ${t.confidence.toFixed(1)}]` : '';
|
|
143
|
+
console.log(` ${prefix}${edgeType}: ${t.targetId} (${t.targetTitle})${srcTag}`);
|
|
100
144
|
}
|
|
101
145
|
}
|
|
102
146
|
// BFS for multi-hop traversal when depth > 1
|
|
103
147
|
if (depth > 1) {
|
|
104
148
|
const visited = new Set([id]);
|
|
105
|
-
// Seed frontier with direct neighbors
|
|
106
149
|
let frontier = new Set();
|
|
107
150
|
for (const edge of directEdges) {
|
|
108
151
|
const neighborId = edge.from_id === id ? edge.to_id : edge.from_id;
|
|
@@ -135,7 +178,7 @@ function relatedCommand(id, options) {
|
|
|
135
178
|
}
|
|
136
179
|
frontier = nextFrontier;
|
|
137
180
|
}
|
|
138
|
-
const totalReachable = visited.size - 1;
|
|
181
|
+
const totalReachable = visited.size - 1;
|
|
139
182
|
if (totalReachable > 0) {
|
|
140
183
|
console.log(`\nExtended Network (depth ${depth}):`);
|
|
141
184
|
console.log(` ${totalReachable} reachable node(s) via ${totalExtendedEdges + directEdges.length} edge(s) across all hops`);
|
|
@@ -147,7 +190,6 @@ function traceCommand(id) {
|
|
|
147
190
|
const pmemPath = path.join(cwd, PMEM_DIR);
|
|
148
191
|
const db = (0, db_1.openDatabase)(pmemPath);
|
|
149
192
|
(0, db_1.createSchema)(db);
|
|
150
|
-
// Query card by ID
|
|
151
193
|
const card = db.prepare('SELECT * FROM cards WHERE id = ? AND is_deleted = 0').get(id);
|
|
152
194
|
if (!card) {
|
|
153
195
|
console.log(`Node "${id}" not found in database.`);
|
|
@@ -157,15 +199,19 @@ function traceCommand(id) {
|
|
|
157
199
|
console.log(`Type: ${card.type}`);
|
|
158
200
|
console.log(`Title: ${card.title}`);
|
|
159
201
|
console.log(`File: ${card.file_path}`);
|
|
202
|
+
const manifest = (0, manifest_1.loadManifest)(pmemPath);
|
|
203
|
+
const config = manifest ? (0, manifest_1.resolveConfig)(manifest) : { evidence_types: ['decision', 'trace'] };
|
|
204
|
+
const evidenceTypes = config.evidence_types;
|
|
205
|
+
const placeholders = evidenceTypes.map(() => '?').join(',');
|
|
160
206
|
// Find evidence: decision and trace type cards connected via edges
|
|
161
207
|
const evidenceRows = db.prepare(`
|
|
162
208
|
SELECT DISTINCT c.id, c.type, c.title, c.file_path
|
|
163
209
|
FROM edges e
|
|
164
210
|
JOIN cards c ON (c.id = e.from_id OR c.id = e.to_id) AND c.id != ?
|
|
165
211
|
WHERE (e.from_id = ? OR e.to_id = ?)
|
|
166
|
-
AND
|
|
212
|
+
AND c.type IN (${placeholders})
|
|
167
213
|
AND c.is_deleted = 0
|
|
168
|
-
`).all(id, id, id);
|
|
214
|
+
`).all(id, id, id, ...evidenceTypes);
|
|
169
215
|
if (evidenceRows.length > 0) {
|
|
170
216
|
console.log('');
|
|
171
217
|
console.log('Evidence Sources:');
|
|
@@ -174,9 +220,9 @@ function traceCommand(id) {
|
|
|
174
220
|
console.log(` ${row.file_path}`);
|
|
175
221
|
}
|
|
176
222
|
}
|
|
177
|
-
// Find depends_on chain
|
|
223
|
+
// Find depends_on chain
|
|
178
224
|
const dependsOn = db.prepare(`
|
|
179
|
-
SELECT e.to_id, c.title as to_title
|
|
225
|
+
SELECT e.to_id, c.title as to_title, e.source, e.confidence
|
|
180
226
|
FROM edges e
|
|
181
227
|
LEFT JOIN cards c ON c.id = e.to_id AND c.is_deleted = 0
|
|
182
228
|
WHERE e.from_id = ? AND e.type = 'depends_on'
|
|
@@ -184,12 +230,13 @@ function traceCommand(id) {
|
|
|
184
230
|
if (dependsOn.length > 0) {
|
|
185
231
|
console.log('\nDepends On:');
|
|
186
232
|
for (const row of dependsOn) {
|
|
187
|
-
|
|
233
|
+
const srcTag = row.source === 'inferred' ? ` [${row.source}, ${row.confidence.toFixed(1)}]` : '';
|
|
234
|
+
console.log(` - ${row.to_id}${row.to_title ? ` (${row.to_title})` : ''}${srcTag}`);
|
|
188
235
|
}
|
|
189
236
|
}
|
|
190
|
-
// Find depended_by
|
|
237
|
+
// Find depended_by
|
|
191
238
|
const dependedBy = db.prepare(`
|
|
192
|
-
SELECT e.from_id, c.title as from_title
|
|
239
|
+
SELECT e.from_id, c.title as from_title, e.source, e.confidence
|
|
193
240
|
FROM edges e
|
|
194
241
|
LEFT JOIN cards c ON c.id = e.from_id AND c.is_deleted = 0
|
|
195
242
|
WHERE e.to_id = ? AND e.type = 'depends_on'
|
|
@@ -197,10 +244,11 @@ function traceCommand(id) {
|
|
|
197
244
|
if (dependedBy.length > 0) {
|
|
198
245
|
console.log('\nDepended On By:');
|
|
199
246
|
for (const row of dependedBy) {
|
|
200
|
-
|
|
247
|
+
const srcTag = row.source === 'inferred' ? ` [${row.source}, ${row.confidence.toFixed(1)}]` : '';
|
|
248
|
+
console.log(` - ${row.from_id}${row.from_title ? ` (${row.from_title})` : ''}${srcTag}`);
|
|
201
249
|
}
|
|
202
250
|
}
|
|
203
|
-
// Read and display card body content
|
|
251
|
+
// Read and display card body content
|
|
204
252
|
const filePath = path.join(cwd, card.file_path);
|
|
205
253
|
if ((0, fs_1.fileExists)(filePath)) {
|
|
206
254
|
const content = (0, fs_1.readFile)(filePath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
export interface DomainPreset {
|
|
2
|
+
domain: string;
|
|
3
|
+
card_types: string[];
|
|
4
|
+
type_dirs: Record<string, string>;
|
|
5
|
+
foundational_types: string[];
|
|
6
|
+
evidence_types: string[];
|
|
7
|
+
default_type: string;
|
|
8
|
+
creatable_types: string[];
|
|
9
|
+
max_tokens?: Record<string, number>;
|
|
10
|
+
max_sections?: Record<string, number>;
|
|
11
|
+
}
|
|
12
|
+
export declare const DOMAIN_PRESETS: Record<string, DomainPreset>;
|
|
1
13
|
export declare function initCommand(options: {
|
|
2
14
|
guided?: boolean;
|
|
3
15
|
projectName?: string;
|
|
@@ -5,5 +17,6 @@ export declare function initCommand(options: {
|
|
|
5
17
|
stage?: string;
|
|
6
18
|
next?: string;
|
|
7
19
|
answers?: string;
|
|
20
|
+
domain?: string;
|
|
8
21
|
}): Promise<void>;
|
|
9
22
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CA8DvD,CAAC;AAuZF,wBAAsB,WAAW,CAAC,OAAO,EAAE;IACzC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4ShB"}
|
package/dist/commands/init.js
CHANGED
|
@@ -33,12 +33,76 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.DOMAIN_PRESETS = void 0;
|
|
36
37
|
exports.initCommand = initCommand;
|
|
37
38
|
const path = __importStar(require("path"));
|
|
38
39
|
const fs = __importStar(require("fs"));
|
|
39
40
|
const readline = __importStar(require("readline"));
|
|
40
41
|
const fs_1 = require("../core/fs");
|
|
41
42
|
const manifest_1 = require("../core/manifest");
|
|
43
|
+
exports.DOMAIN_PRESETS = {
|
|
44
|
+
software: {
|
|
45
|
+
domain: 'software',
|
|
46
|
+
card_types: [
|
|
47
|
+
'project', 'module', 'feature', 'task', 'decision',
|
|
48
|
+
'trace', 'risk', 'assumption', 'resource', 'integration'
|
|
49
|
+
],
|
|
50
|
+
type_dirs: {
|
|
51
|
+
module: 'modules',
|
|
52
|
+
feature: 'features',
|
|
53
|
+
decision: 'decisions',
|
|
54
|
+
task: 'tasks',
|
|
55
|
+
trace: 'traces',
|
|
56
|
+
risk: 'risks',
|
|
57
|
+
},
|
|
58
|
+
foundational_types: ['module'],
|
|
59
|
+
evidence_types: ['decision', 'trace'],
|
|
60
|
+
default_type: 'trace',
|
|
61
|
+
creatable_types: ['decision', 'module', 'task', 'feature', 'risk', 'trace'],
|
|
62
|
+
max_tokens: { module: 1200, feature: 1000, decision: 1000, task: 800, trace: 1000 },
|
|
63
|
+
max_sections: { module: 8, feature: 8, decision: 6, task: 6 },
|
|
64
|
+
},
|
|
65
|
+
novel: {
|
|
66
|
+
domain: 'novel',
|
|
67
|
+
card_types: [
|
|
68
|
+
'project', 'character', 'chapter', 'world', 'arc', 'decision', 'trace'
|
|
69
|
+
],
|
|
70
|
+
type_dirs: {
|
|
71
|
+
character: 'characters',
|
|
72
|
+
chapter: 'chapters',
|
|
73
|
+
world: 'world',
|
|
74
|
+
arc: 'arc',
|
|
75
|
+
decision: 'decisions',
|
|
76
|
+
trace: 'traces',
|
|
77
|
+
},
|
|
78
|
+
foundational_types: ['character', 'chapter'],
|
|
79
|
+
evidence_types: ['decision', 'trace'],
|
|
80
|
+
default_type: 'trace',
|
|
81
|
+
creatable_types: ['character', 'chapter', 'world', 'arc', 'decision', 'trace'],
|
|
82
|
+
max_tokens: { decision: 1000, trace: 1000, character: 1200, chapter: 1500, world: 1500, arc: 1000 },
|
|
83
|
+
max_sections: { decision: 6, character: 8, chapter: 8, world: 10 },
|
|
84
|
+
},
|
|
85
|
+
research: {
|
|
86
|
+
domain: 'research',
|
|
87
|
+
card_types: [
|
|
88
|
+
'project', 'source', 'claim', 'note', 'experiment', 'decision', 'trace'
|
|
89
|
+
],
|
|
90
|
+
type_dirs: {
|
|
91
|
+
source: 'sources',
|
|
92
|
+
claim: 'claims',
|
|
93
|
+
note: 'notes',
|
|
94
|
+
experiment: 'experiments',
|
|
95
|
+
decision: 'decisions',
|
|
96
|
+
trace: 'traces',
|
|
97
|
+
},
|
|
98
|
+
foundational_types: ['source', 'claim'],
|
|
99
|
+
evidence_types: ['decision', 'trace'],
|
|
100
|
+
default_type: 'trace',
|
|
101
|
+
creatable_types: ['source', 'claim', 'note', 'experiment', 'decision', 'trace'],
|
|
102
|
+
max_tokens: { decision: 1000, trace: 1000, source: 1200, claim: 1000, note: 1000, experiment: 1200 },
|
|
103
|
+
max_sections: { decision: 6, source: 8, claim: 6, experiment: 8 },
|
|
104
|
+
},
|
|
105
|
+
};
|
|
42
106
|
const PMEM_DIR = '.pmem';
|
|
43
107
|
const INDEX_MD = `# Project Memory Index
|
|
44
108
|
|
|
@@ -107,15 +171,14 @@ Use this when you need to understand the project.
|
|
|
107
171
|
## Token Rule
|
|
108
172
|
Do not read all memory files unless explicitly requested.
|
|
109
173
|
`;
|
|
110
|
-
const
|
|
174
|
+
const TASK_SKILL = `# Skill: Task
|
|
111
175
|
|
|
112
|
-
Use this before modifying
|
|
176
|
+
Use this before modifying files or executing tasks.
|
|
113
177
|
|
|
114
178
|
## Required Reads
|
|
115
179
|
- .pmem/index.md
|
|
116
180
|
- .pmem/state.md
|
|
117
|
-
-
|
|
118
|
-
- .pmem/decisions related to the target module
|
|
181
|
+
- Related memory cards (foundational cards or decision cards)
|
|
119
182
|
|
|
120
183
|
## Required Writes
|
|
121
184
|
After task completion:
|
|
@@ -135,8 +198,8 @@ Use this after completing a task.
|
|
|
135
198
|
- traces/YYYY-MM-DD-*.md when work completed
|
|
136
199
|
|
|
137
200
|
## Add Decision When
|
|
138
|
-
- Architecture changed
|
|
139
|
-
-
|
|
201
|
+
- Architecture/Design changed
|
|
202
|
+
- Project direction changed
|
|
140
203
|
- Major tradeoff was made
|
|
141
204
|
- A previous assumption was invalidated
|
|
142
205
|
`;
|
|
@@ -157,7 +220,7 @@ Use this to consolidate traces into stable memory cards.
|
|
|
157
220
|
5. Run \`pmem verify\` to check consistency.
|
|
158
221
|
|
|
159
222
|
## What Gets Distilled
|
|
160
|
-
- Trace summaries are added to their related
|
|
223
|
+
- Trace summaries are added to their related foundational/decision cards.
|
|
161
224
|
- Traces are marked as distilled in their frontmatter.
|
|
162
225
|
- Original trace files are preserved for evidence.
|
|
163
226
|
|
|
@@ -180,7 +243,7 @@ pmem recall --format compact --budget 2000
|
|
|
180
243
|
For specific work, ask pmem first:
|
|
181
244
|
|
|
182
245
|
\`\`\`bash
|
|
183
|
-
pmem ask "<task or
|
|
246
|
+
pmem ask "<task or memory card>" --format compact
|
|
184
247
|
\`\`\`
|
|
185
248
|
|
|
186
249
|
## Read
|
|
@@ -188,14 +251,13 @@ pmem ask "<task or module>" --format compact
|
|
|
188
251
|
Only read memory cards returned by pmem unless more context is needed.
|
|
189
252
|
|
|
190
253
|
## After Editing Code
|
|
191
|
-
|
|
192
254
|
\`\`\`bash
|
|
193
255
|
pmem status --format json
|
|
194
256
|
pmem mark-dirty --auto
|
|
195
257
|
pmem update --suggest --format json
|
|
196
258
|
\`\`\`
|
|
197
259
|
|
|
198
|
-
\`pmem update --suggest\` exits
|
|
260
|
+
\`pmem update --suggest\` exits 0. Parse the JSON output (e.g., check \`summary.has_actionable\`) to see if any memory update is suggested.
|
|
199
261
|
|
|
200
262
|
## Session End
|
|
201
263
|
|
|
@@ -421,6 +483,13 @@ async function initCommand(options) {
|
|
|
421
483
|
console.log('To reinitialize, remove .pmem/ first.');
|
|
422
484
|
return;
|
|
423
485
|
}
|
|
486
|
+
const domain = options.domain || 'software';
|
|
487
|
+
const preset = exports.DOMAIN_PRESETS[domain];
|
|
488
|
+
if (!preset) {
|
|
489
|
+
console.error(`Error: Invalid domain "${domain}".`);
|
|
490
|
+
console.error(`Valid domains are: ${Object.keys(exports.DOMAIN_PRESETS).join(', ')}`);
|
|
491
|
+
process.exit(2);
|
|
492
|
+
}
|
|
424
493
|
const name = options.projectName || path.basename(cwd);
|
|
425
494
|
// Run project scan (used by both modes)
|
|
426
495
|
const scan = scanProject();
|
|
@@ -456,7 +525,9 @@ async function initCommand(options) {
|
|
|
456
525
|
};
|
|
457
526
|
}
|
|
458
527
|
else if (hasDescription || hasStage || hasNext) {
|
|
459
|
-
//
|
|
528
|
+
// v0.6.4 polish 7: partial flags — warn + suggest, do not block.
|
|
529
|
+
// Init still proceeds with empty strings for missing fields so the user
|
|
530
|
+
// can re-run guided later or edit .pmem/index.md directly.
|
|
460
531
|
const missing = [];
|
|
461
532
|
if (!hasDescription)
|
|
462
533
|
missing.push('--description');
|
|
@@ -464,9 +535,20 @@ async function initCommand(options) {
|
|
|
464
535
|
missing.push('--stage');
|
|
465
536
|
if (!hasNext)
|
|
466
537
|
missing.push('--next');
|
|
467
|
-
|
|
468
|
-
console.error(
|
|
469
|
-
|
|
538
|
+
const firstMissing = missing[0];
|
|
539
|
+
console.error(`⚠ Missing ${firstMissing}. --guided works best with all three context flags.`);
|
|
540
|
+
console.error(` You can re-run with: pmem init ${name} --guided \\`);
|
|
541
|
+
console.error(` --description "<one-line project purpose>" \\`);
|
|
542
|
+
console.error(` --stage "<current stage>" \\`);
|
|
543
|
+
console.error(` --next "<immediate next step>"`);
|
|
544
|
+
console.error(` Or answer via: pmem init ${name} --guided --answers ./pmem-init.json`);
|
|
545
|
+
console.error(` Missing: ${missing.join(', ')}`);
|
|
546
|
+
console.error(` Continuing init with empty values for the missing field(s) — re-run guided to fill them in.`);
|
|
547
|
+
guidedInfo = {
|
|
548
|
+
description: answers.description || '',
|
|
549
|
+
stage: answers.stage || '',
|
|
550
|
+
nextStep: answers.next || '',
|
|
551
|
+
};
|
|
470
552
|
}
|
|
471
553
|
else {
|
|
472
554
|
// No args → interactive TTY
|
|
@@ -507,35 +589,63 @@ async function initCommand(options) {
|
|
|
507
589
|
}
|
|
508
590
|
}
|
|
509
591
|
// Create directory structure
|
|
510
|
-
const
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
'.pmem/decisions',
|
|
514
|
-
'.pmem/tasks',
|
|
515
|
-
'.pmem/traces',
|
|
592
|
+
const presetDirs = Object.values(preset.type_dirs).map(d => `.pmem/${d}`);
|
|
593
|
+
const dirs = Array.from(new Set([
|
|
594
|
+
...presetDirs,
|
|
516
595
|
'.pmem/summaries',
|
|
517
596
|
'.pmem/skills',
|
|
518
597
|
'.pmem/candidates',
|
|
519
|
-
'.pmem/risks',
|
|
520
598
|
'.pmem/indexes',
|
|
521
599
|
'.pmem/integrations/claude-code',
|
|
522
600
|
'.pmem/integrations/cursor',
|
|
523
601
|
'.pmem/integrations/codex',
|
|
524
|
-
];
|
|
602
|
+
]));
|
|
525
603
|
console.log('Creating .pmem/ directory structure...');
|
|
526
604
|
for (const dir of dirs) {
|
|
527
605
|
(0, fs_1.ensureDir)(path.join(cwd, dir));
|
|
528
606
|
}
|
|
529
607
|
// Write manifest with appropriate init mode
|
|
608
|
+
const manifest = guidedInfo
|
|
609
|
+
? (0, manifest_1.getDefaultManifest)(name, 'guided')
|
|
610
|
+
: (0, manifest_1.getDefaultManifest)(name, 'minimal');
|
|
611
|
+
// Customize manifest for domain preset
|
|
612
|
+
manifest.project.domain = domain;
|
|
613
|
+
manifest.schema = {
|
|
614
|
+
card_types: preset.card_types,
|
|
615
|
+
type_dirs: preset.type_dirs,
|
|
616
|
+
foundational_types: preset.foundational_types,
|
|
617
|
+
evidence_types: preset.evidence_types,
|
|
618
|
+
default_type: preset.default_type,
|
|
619
|
+
creatable_types: preset.creatable_types,
|
|
620
|
+
};
|
|
621
|
+
manifest.card_policy.id_pattern = '^({types})\\.[a-z0-9._-]+$';
|
|
622
|
+
manifest.source_of_truth.card_globs = Object.values(preset.type_dirs).map(dir => `.pmem/${dir}/**/*.md`);
|
|
623
|
+
if (preset.max_tokens) {
|
|
624
|
+
manifest.card_policy.max_tokens = preset.max_tokens;
|
|
625
|
+
}
|
|
626
|
+
if (preset.max_sections) {
|
|
627
|
+
manifest.card_policy.max_sections = preset.max_sections;
|
|
628
|
+
}
|
|
629
|
+
// Phase 4: discover default disable & domain-neutral ignores
|
|
630
|
+
manifest.discover = {
|
|
631
|
+
enabled: domain === 'software'
|
|
632
|
+
};
|
|
633
|
+
if (domain === 'software') {
|
|
634
|
+
manifest.auto_update.ignore_patterns = [
|
|
635
|
+
'node_modules/**', 'dist/**', 'build/**', '*.lock', '*.log',
|
|
636
|
+
];
|
|
637
|
+
}
|
|
638
|
+
else {
|
|
639
|
+
manifest.auto_update.ignore_patterns = [
|
|
640
|
+
'*.lock', '*.log',
|
|
641
|
+
];
|
|
642
|
+
}
|
|
643
|
+
(0, manifest_1.saveManifest)(pmemPath, manifest);
|
|
530
644
|
if (guidedInfo) {
|
|
531
|
-
const manifest = (0, manifest_1.getDefaultManifest)(name, 'guided');
|
|
532
|
-
(0, manifest_1.saveManifest)(pmemPath, manifest);
|
|
533
645
|
// Write richer guided memory files
|
|
534
646
|
writeGuidedMemory(pmemPath, name, guidedInfo, scan);
|
|
535
647
|
}
|
|
536
648
|
else {
|
|
537
|
-
const manifest = (0, manifest_1.getDefaultManifest)(name, 'minimal');
|
|
538
|
-
(0, manifest_1.saveManifest)(pmemPath, manifest);
|
|
539
649
|
// Write default template files
|
|
540
650
|
const replacements = { PROJECT_NAME: name, PROJECT_STAGE: 'Initialized', CURRENT_FOCUS: 'Set up project memory.' };
|
|
541
651
|
(0, fs_1.writeFile)(path.join(pmemPath, 'index.md'), replaceTemplate(INDEX_MD, replacements));
|
|
@@ -546,7 +656,7 @@ async function initCommand(options) {
|
|
|
546
656
|
}
|
|
547
657
|
// Write skills
|
|
548
658
|
(0, fs_1.writeFile)(path.join(pmemPath, 'skills', 'recall.md'), RECALL_SKILL);
|
|
549
|
-
(0, fs_1.writeFile)(path.join(pmemPath, 'skills', '
|
|
659
|
+
(0, fs_1.writeFile)(path.join(pmemPath, 'skills', 'task.md'), TASK_SKILL);
|
|
550
660
|
(0, fs_1.writeFile)(path.join(pmemPath, 'skills', 'update.md'), UPDATE_SKILL);
|
|
551
661
|
(0, fs_1.writeFile)(path.join(pmemPath, 'skills', 'distill.md'), DISTILL_SKILL);
|
|
552
662
|
// Write integration templates with v0.6 Agent-native Workflow Polish instructions
|
|
@@ -562,7 +672,7 @@ pmem recall --format compact --budget 2000
|
|
|
562
672
|
|
|
563
673
|
## Before Focused Work
|
|
564
674
|
\`\`\`bash
|
|
565
|
-
pmem ask "<task or
|
|
675
|
+
pmem ask "<task or memory card>" --format compact
|
|
566
676
|
\`\`\`
|
|
567
677
|
|
|
568
678
|
## During Work (after editing files)
|
|
@@ -572,7 +682,7 @@ pmem mark-dirty --auto
|
|
|
572
682
|
pmem update --suggest --format json
|
|
573
683
|
\`\`\`
|
|
574
684
|
|
|
575
|
-
\`pmem update --suggest\` exits
|
|
685
|
+
\`pmem update --suggest\` exits 0. Parse the JSON output (e.g., check \`summary.has_actionable\`) to see if any memory update is suggested.
|
|
576
686
|
|
|
577
687
|
## Session End
|
|
578
688
|
\`\`\`bash
|
|
@@ -600,7 +710,7 @@ pmem verify
|
|
|
600
710
|
In Cursor's AI chat: \`pmem session start -a "Cursor" && pmem recall --format compact --budget 2000\`
|
|
601
711
|
|
|
602
712
|
## Before Focused Work
|
|
603
|
-
\`pmem ask "<task or
|
|
713
|
+
\`pmem ask "<task or memory card>" --format compact\`
|
|
604
714
|
|
|
605
715
|
## When Editing Code
|
|
606
716
|
After each significant change: \`pmem status --format json && pmem mark-dirty --auto\`
|
|
@@ -608,7 +718,7 @@ After each significant change: \`pmem status --format json && pmem mark-dirty --
|
|
|
608
718
|
## Before Requesting Review
|
|
609
719
|
\`pmem update --suggest --format json\`
|
|
610
720
|
|
|
611
|
-
|
|
721
|
+
\`pmem update --suggest\` exits 0. Parse the JSON output (e.g., check \`summary.has_actionable\`) to see if any memory update is suggested.
|
|
612
722
|
|
|
613
723
|
## End of Session
|
|
614
724
|
\`pmem update --confirm -s "<summary>" -n "<next>" && pmem session end -s "<summary>" && pmem verify\`
|
|
@@ -630,7 +740,7 @@ pmem recall --format compact --budget 2000
|
|
|
630
740
|
3. Inspect changes: \`pmem status --format json\`
|
|
631
741
|
4. Mark changes: \`pmem mark-dirty --auto\`
|
|
632
742
|
5. Get suggestions: \`pmem update --suggest --format json\`
|
|
633
|
-
6.
|
|
743
|
+
6. \`pmem update --suggest\` exits 0. Parse the JSON output (e.g., check \`summary.has_actionable\`) to see if any memory update is suggested.
|
|
634
744
|
7. Apply: \`pmem update --confirm -s "<what changed>" -n "<next step>"\`
|
|
635
745
|
8. End session: \`pmem session end -s "<summary>" && pmem verify\`
|
|
636
746
|
|