pmem-ai 0.6.2 → 0.7.0-a

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 (86) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/README.md +68 -4
  3. package/dist/commands/ask.d.ts.map +1 -1
  4. package/dist/commands/ask.js +5 -1
  5. package/dist/commands/ask.js.map +1 -1
  6. package/dist/commands/distill.d.ts.map +1 -1
  7. package/dist/commands/distill.js +15 -6
  8. package/dist/commands/distill.js.map +1 -1
  9. package/dist/commands/doctor.d.ts.map +1 -1
  10. package/dist/commands/doctor.js +21 -8
  11. package/dist/commands/doctor.js.map +1 -1
  12. package/dist/commands/graph.d.ts +3 -0
  13. package/dist/commands/graph.d.ts.map +1 -1
  14. package/dist/commands/graph.js +73 -25
  15. package/dist/commands/graph.js.map +1 -1
  16. package/dist/commands/init.d.ts +14 -0
  17. package/dist/commands/init.d.ts.map +1 -1
  18. package/dist/commands/init.js +145 -32
  19. package/dist/commands/init.js.map +1 -1
  20. package/dist/commands/integration.d.ts.map +1 -1
  21. package/dist/commands/integration.js +170 -15
  22. package/dist/commands/integration.js.map +1 -1
  23. package/dist/commands/new.d.ts.map +1 -1
  24. package/dist/commands/new.js +15 -14
  25. package/dist/commands/new.js.map +1 -1
  26. package/dist/commands/rebuild.d.ts +7 -0
  27. package/dist/commands/rebuild.d.ts.map +1 -1
  28. package/dist/commands/rebuild.js +175 -18
  29. package/dist/commands/rebuild.js.map +1 -1
  30. package/dist/commands/recall.d.ts.map +1 -1
  31. package/dist/commands/recall.js +11 -5
  32. package/dist/commands/recall.js.map +1 -1
  33. package/dist/commands/rename.d.ts.map +1 -1
  34. package/dist/commands/rename.js +98 -19
  35. package/dist/commands/rename.js.map +1 -1
  36. package/dist/commands/status.d.ts.map +1 -1
  37. package/dist/commands/status.js +31 -6
  38. package/dist/commands/status.js.map +1 -1
  39. package/dist/commands/update.d.ts +2 -0
  40. package/dist/commands/update.d.ts.map +1 -1
  41. package/dist/commands/update.js +117 -1
  42. package/dist/commands/update.js.map +1 -1
  43. package/dist/commands/verify.d.ts.map +1 -1
  44. package/dist/commands/verify.js +10 -5
  45. package/dist/commands/verify.js.map +1 -1
  46. package/dist/core/db.d.ts +9 -0
  47. package/dist/core/db.d.ts.map +1 -1
  48. package/dist/core/db.js +51 -0
  49. package/dist/core/db.js.map +1 -1
  50. package/dist/core/discover/detect.d.ts +12 -0
  51. package/dist/core/discover/detect.d.ts.map +1 -0
  52. package/dist/core/discover/detect.js +68 -0
  53. package/dist/core/discover/detect.js.map +1 -0
  54. package/dist/core/discover/index.d.ts +12 -0
  55. package/dist/core/discover/index.d.ts.map +1 -0
  56. package/dist/core/discover/index.js +645 -0
  57. package/dist/core/discover/index.js.map +1 -0
  58. package/dist/core/discover/patterns.d.ts +29 -0
  59. package/dist/core/discover/patterns.d.ts.map +1 -0
  60. package/dist/core/discover/patterns.js +322 -0
  61. package/dist/core/discover/patterns.js.map +1 -0
  62. package/dist/core/fs.d.ts +7 -0
  63. package/dist/core/fs.d.ts.map +1 -1
  64. package/dist/core/fs.js +57 -1
  65. package/dist/core/fs.js.map +1 -1
  66. package/dist/core/manifest.d.ts +23 -1
  67. package/dist/core/manifest.d.ts.map +1 -1
  68. package/dist/core/manifest.js +72 -0
  69. package/dist/core/manifest.js.map +1 -1
  70. package/dist/index.js +35 -2
  71. package/dist/index.js.map +1 -1
  72. package/dist/types.d.ts +111 -2
  73. package/dist/types.d.ts.map +1 -1
  74. package/docs/handover-v0.6.4.md +285 -0
  75. package/docs/project-roadmap.md +129 -4
  76. package/docs/release-checklist-v0.7.0.md +60 -0
  77. package/docs/session-start-create-design-eval.md +203 -0
  78. package/docs/usage.md +38 -0
  79. package/docs/v0.6.4 pre-design.md +526 -0
  80. package/docs/v0.7.0 pre-design.md +405 -0
  81. package/package.json +7 -3
  82. package/skills/pmem/SKILL.md +132 -6
  83. package/skills/pmem/references/first-init.md +21 -0
  84. package/skills/pmem/references/memory-cards.md +62 -2
  85. package/skills/pmem/references/session-workflow.md +3 -3
  86. package/skills/pmem/references/universal-domains.md +66 -0
@@ -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
- console.log(`Node "${id}" not found in database.`);
53
- console.log(`Try: pmem ask "${id}" to search for related nodes.`);
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
- // Query direct edges
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
- directQuery += ' AND type = ?';
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
- // Output node info
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
- console.log(` ${prefix}${edgeType}: ${t.targetId} (${t.targetTitle})`);
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; // excluding the target itself
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 (c.type = 'decision' OR c.type = 'trace')
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: edges where this node depends on others
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
- console.log(` - ${row.to_id}${row.to_title ? ` (${row.to_title})` : ''}`);
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: edges where other nodes depend on this node
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
- console.log(` - ${row.from_id}${row.from_title ? ` (${row.from_title})` : ''}`);
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 (first 3000 chars after frontmatter)
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":"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"}
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,16 @@
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
+ warn_when_related_count_gt_by_type?: Record<string, number>;
12
+ }
13
+ export declare const DOMAIN_PRESETS: Record<string, DomainPreset>;
1
14
  export declare function initCommand(options: {
2
15
  guided?: boolean;
3
16
  projectName?: string;
@@ -5,5 +18,6 @@ export declare function initCommand(options: {
5
18
  stage?: string;
6
19
  next?: string;
7
20
  answers?: string;
21
+ domain?: string;
8
22
  }): Promise<void>;
9
23
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AA8ZA,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;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwPhB"}
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;IACtC,kCAAkC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7D;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,CA+ShB"}
@@ -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 CODE_TASK_SKILL = `# Skill: Code Task
174
+ const TASK_SKILL = `# Skill: Task
111
175
 
112
- Use this before modifying code.
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
- - .pmem/modules related to the target code
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
- - Product direction changed
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 module/decision/task cards.
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 module>" --format compact
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 with code 1 when suggestions exist. Treat that as "action suggested", not as a hard failure.
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
- // Partial args error with guidance
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
- console.error(`Incomplete non-interactive init. Missing: ${missing.join(', ')}`);
468
- console.error('Provide all three flags, use --answers <file.json>, or run without flags for interactive mode.');
469
- return;
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,66 @@ async function initCommand(options) {
507
589
  }
508
590
  }
509
591
  // Create directory structure
510
- const dirs = [
511
- '.pmem/modules',
512
- '.pmem/features',
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
+ if (preset.warn_when_related_count_gt_by_type) {
630
+ manifest.card_policy.warn_when_related_count_gt_by_type = preset.warn_when_related_count_gt_by_type;
631
+ }
632
+ // Phase 4: discover default disable & domain-neutral ignores
633
+ manifest.discover = {
634
+ enabled: domain === 'software'
635
+ };
636
+ if (domain === 'software') {
637
+ manifest.auto_update.ignore_patterns = [
638
+ 'node_modules/**', 'dist/**', 'build/**', '*.lock', '*.log',
639
+ ];
640
+ }
641
+ else {
642
+ manifest.auto_update.ignore_patterns = [
643
+ '*.lock', '*.log',
644
+ ];
645
+ }
646
+ (0, manifest_1.saveManifest)(pmemPath, manifest);
530
647
  if (guidedInfo) {
531
- const manifest = (0, manifest_1.getDefaultManifest)(name, 'guided');
532
- (0, manifest_1.saveManifest)(pmemPath, manifest);
533
648
  // Write richer guided memory files
534
649
  writeGuidedMemory(pmemPath, name, guidedInfo, scan);
535
650
  }
536
651
  else {
537
- const manifest = (0, manifest_1.getDefaultManifest)(name, 'minimal');
538
- (0, manifest_1.saveManifest)(pmemPath, manifest);
539
652
  // Write default template files
540
653
  const replacements = { PROJECT_NAME: name, PROJECT_STAGE: 'Initialized', CURRENT_FOCUS: 'Set up project memory.' };
541
654
  (0, fs_1.writeFile)(path.join(pmemPath, 'index.md'), replaceTemplate(INDEX_MD, replacements));
@@ -546,7 +659,7 @@ async function initCommand(options) {
546
659
  }
547
660
  // Write skills
548
661
  (0, fs_1.writeFile)(path.join(pmemPath, 'skills', 'recall.md'), RECALL_SKILL);
549
- (0, fs_1.writeFile)(path.join(pmemPath, 'skills', 'code-task.md'), CODE_TASK_SKILL);
662
+ (0, fs_1.writeFile)(path.join(pmemPath, 'skills', 'task.md'), TASK_SKILL);
550
663
  (0, fs_1.writeFile)(path.join(pmemPath, 'skills', 'update.md'), UPDATE_SKILL);
551
664
  (0, fs_1.writeFile)(path.join(pmemPath, 'skills', 'distill.md'), DISTILL_SKILL);
552
665
  // Write integration templates with v0.6 Agent-native Workflow Polish instructions
@@ -562,7 +675,7 @@ pmem recall --format compact --budget 2000
562
675
 
563
676
  ## Before Focused Work
564
677
  \`\`\`bash
565
- pmem ask "<task or module>" --format compact
678
+ pmem ask "<task or memory card>" --format compact
566
679
  \`\`\`
567
680
 
568
681
  ## During Work (after editing files)
@@ -572,7 +685,7 @@ pmem mark-dirty --auto
572
685
  pmem update --suggest --format json
573
686
  \`\`\`
574
687
 
575
- \`pmem update --suggest\` exits with code 1 when suggestions exist. That is a workflow signal, not a hard failure.
688
+ \`pmem update --suggest\` exits 0. Parse the JSON output (e.g., check \`summary.has_actionable\`) to see if any memory update is suggested.
576
689
 
577
690
  ## Session End
578
691
  \`\`\`bash
@@ -600,7 +713,7 @@ pmem verify
600
713
  In Cursor's AI chat: \`pmem session start -a "Cursor" && pmem recall --format compact --budget 2000\`
601
714
 
602
715
  ## Before Focused Work
603
- \`pmem ask "<task or module>" --format compact\`
716
+ \`pmem ask "<task or memory card>" --format compact\`
604
717
 
605
718
  ## When Editing Code
606
719
  After each significant change: \`pmem status --format json && pmem mark-dirty --auto\`
@@ -608,7 +721,7 @@ After each significant change: \`pmem status --format json && pmem mark-dirty --
608
721
  ## Before Requesting Review
609
722
  \`pmem update --suggest --format json\`
610
723
 
611
- Exit code 1 from \`pmem update --suggest\` means suggestions exist, not that the command failed.
724
+ \`pmem update --suggest\` exits 0. Parse the JSON output (e.g., check \`summary.has_actionable\`) to see if any memory update is suggested.
612
725
 
613
726
  ## End of Session
614
727
  \`pmem update --confirm -s "<summary>" -n "<next>" && pmem session end -s "<summary>" && pmem verify\`
@@ -630,7 +743,7 @@ pmem recall --format compact --budget 2000
630
743
  3. Inspect changes: \`pmem status --format json\`
631
744
  4. Mark changes: \`pmem mark-dirty --auto\`
632
745
  5. Get suggestions: \`pmem update --suggest --format json\`
633
- 6. Treat exit code 1 from suggest commands as "action suggested", not failure
746
+ 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
747
  7. Apply: \`pmem update --confirm -s "<what changed>" -n "<next step>"\`
635
748
  8. End session: \`pmem session end -s "<summary>" && pmem verify\`
636
749