pmem-ai 0.6.2 → 0.6.3
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 +34 -0
- package/README.md +12 -3
- package/dist/commands/graph.d.ts +3 -0
- package/dist/commands/graph.d.ts.map +1 -1
- package/dist/commands/graph.js +66 -23
- package/dist/commands/graph.js.map +1 -1
- package/dist/commands/rebuild.js +2 -2
- package/dist/commands/rebuild.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/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 +630 -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/index.js +29 -2
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +76 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -2
- package/skills/pmem/SKILL.md +32 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,40 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to pmem are documented here.
|
|
4
4
|
|
|
5
|
+
## 0.6.3 - Relationship Auto-Discovery
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- `pmem discover`: auto-discover project relationships across 6 languages (Node.js, Python, Rust, Go, C/C++, Java). Two-layer discovery: source file imports (regex, confidence 0.7) and package manager dependencies (package.json/Cargo.toml/go.mod/etc., confidence 0.7-0.85).
|
|
10
|
+
- `pmem discover --dry-run`: preview discoveries without writing to database.
|
|
11
|
+
- `pmem discover --lang <langs>`: filter to specific languages (auto-detect by default).
|
|
12
|
+
- `pmem discover --pattern-file <path>`: custom language pattern JSON for additional ecosystems.
|
|
13
|
+
- `pmem discover --min-confidence <0-1>`: threshold for edge creation (default 0.5).
|
|
14
|
+
- `pmem related --format json`: structured output with confidence/source per edge, grouped by `high_confidence` vs `needs_review`.
|
|
15
|
+
- `pmem related --source explicit|inferred|all`: filter edges by source.
|
|
16
|
+
- `pmem update --confirm --accept-edges <ids>`: promote inferred edges to explicit (confidence 1.0).
|
|
17
|
+
- `pmem update --confirm --reject-edges <ids>`: delete rejected inferred edges.
|
|
18
|
+
- `pmem update --suggest` now includes low-confidence inferred edges as suggestions.
|
|
19
|
+
- Agent-configurable language patterns via manifest `discover.additional_patterns`.
|
|
20
|
+
|
|
21
|
+
### False-Positive Guard
|
|
22
|
+
|
|
23
|
+
- `BUILTIN_MODULES` per-language skip list: Node.js core modules (`fs`, `path`, `crypto`, `child_process`, etc.), Python stdlib, Go stdlib, Java `java.*`/`javax.*`/`jakarta.*`/Spring/JUnit, C/C++ standard headers, Rust std crates. These are silently dropped from `discovered_edges` and `ambiguous` so the agent only sees actionable items.
|
|
24
|
+
- New `AmbiguousRelation.kind = 'external_unmatched'` and `severity` field. Bare-name imports (npm packages, third-party libs) and dep-file entries with no matching card are classified as `severity: 'informational'`, distinct from `severity: 'actionable'` for internal project files missing a card.
|
|
25
|
+
- Discover result `summary` now reports `actionable` and `external_refs` counts. Compact output shows actionable items first, then a collapsed count for informational ones.
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
|
|
29
|
+
- `pmem rebuild` (incremental) now preserves inferred edges (only deletes/recreates explicit edges).
|
|
30
|
+
- `pmem related` compact output shows `[inferred, 0.7]` tags on non-explicit edges.
|
|
31
|
+
- `pmem trace` now shows edge source and confidence annotations.
|
|
32
|
+
|
|
33
|
+
### Internal
|
|
34
|
+
|
|
35
|
+
- New `src/core/discover/` module: `index.ts` (orchestration), `patterns.ts` (6-language registry), `detect.ts` (auto-detection).
|
|
36
|
+
- New edge CRUD in `src/core/db.ts`: `deleteInferredEdges`, `getInferredEdges`, `getEdgesForCard`, `updateEdgeSource`, `deleteEdgesByIds`, `getOrphanEdges`, `deleteExplicitCardEdges`.
|
|
37
|
+
- New types in `src/types.ts`: `DiscoverResult`, `DiscoveredEdge`, `AmbiguousRelation`, `LanguagePattern`, `ManifestDiscoverConfig`.
|
|
38
|
+
|
|
5
39
|
## 0.6.2 - Real-User Friction Fixes
|
|
6
40
|
|
|
7
41
|
### Added
|
package/README.md
CHANGED
|
@@ -12,6 +12,7 @@ Coding agents lose project context quickly. A repository has source files, docs,
|
|
|
12
12
|
|
|
13
13
|
- `pmem recall` restores the hot project context.
|
|
14
14
|
- `pmem ask "<query>"` finds relevant memory cards.
|
|
15
|
+
- `pmem discover` auto-discovers project relationships (tech stack, file deps, imports) across 6 languages.
|
|
15
16
|
- `pmem status` maps changed files back to affected cards.
|
|
16
17
|
- `pmem update --suggest` tells an agent what memory likely needs attention.
|
|
17
18
|
- `pmem verify` checks that Markdown cards and runtime indexes still agree.
|
|
@@ -27,7 +28,7 @@ The design is intentionally local and Git-friendly. Markdown cards remain the so
|
|
|
27
28
|
- You want agents to update memory deliberately instead of auto-writing noisy logs.
|
|
28
29
|
- You prefer local files over hosted memory services.
|
|
29
30
|
|
|
30
|
-
It is not a vector database, MCP server, Graph UI, or remote multi-user service. v0.
|
|
31
|
+
It is not a vector database, MCP server, Graph UI, or remote multi-user service. v0.6 focuses on making the CLI agent-native with relationship discovery and polished workflows.
|
|
31
32
|
|
|
32
33
|
## Install
|
|
33
34
|
|
|
@@ -273,13 +274,17 @@ pmem init [project-name] [--guided]
|
|
|
273
274
|
|
|
274
275
|
pmem recall [--budget N] [--format compact|json|paths|pack]
|
|
275
276
|
pmem ask <query> [--format compact|json|paths|pack]
|
|
276
|
-
pmem
|
|
277
|
+
pmem discover [--dry-run] [--format compact|json] [--min-confidence 0.5]
|
|
278
|
+
[--lang auto|nodejs,python,rust,go,cpp,java]
|
|
279
|
+
[--pattern-file custom.json]
|
|
280
|
+
pmem related <id> [--depth N] [--type <edge-type>] [--format compact|json] [--source explicit|inferred|all]
|
|
277
281
|
pmem trace <id>
|
|
278
282
|
|
|
279
283
|
pmem status [--since <timestamp>] [--format compact|json]
|
|
280
284
|
pmem mark-dirty [-r <reason>] [--auto]
|
|
281
285
|
pmem update [--auto|--suggest|--apply-suggestion <id>|--confirm|--force] \
|
|
282
286
|
[-s <summary>] [-n <next>] [--format compact|json]
|
|
287
|
+
[--accept-edges <ids>] [--reject-edges <ids>]
|
|
283
288
|
|
|
284
289
|
pmem distill [--suggest|--apply-suggestion <id>|--confirm|--suggest-splits]
|
|
285
290
|
pmem rebuild [--changed|--full|--card <id>]
|
|
@@ -389,9 +394,13 @@ pmem verify
|
|
|
389
394
|
- README, quick start, and [usage guide](docs/usage.md)
|
|
390
395
|
- E2E suite, CI/CD, error UX, release checklist
|
|
391
396
|
|
|
392
|
-
**v0.6 Agent-native Workflow Polish** —
|
|
397
|
+
**v0.6 Agent-native Workflow Polish** — shipped:
|
|
393
398
|
- Non-interactive init (`--description`/`--stage`/`--next` flags, `--answers` file)
|
|
394
399
|
- Claude Code slash commands (`/pmem-recall`, `/pmem-ask`, `/pmem-update`, `/pmem-distill`)
|
|
400
|
+
- Relationship auto-discovery across 6 languages (`pmem discover`)
|
|
401
|
+
- Inferred edge review and confirmation workflow
|
|
402
|
+
- False-positive guard: language builtins and external packages filtered out
|
|
403
|
+
- Actionable vs informational `ambiguous` classification (severity field)
|
|
395
404
|
- Actionable empty states and error messages
|
|
396
405
|
- Session fault tolerance
|
|
397
406
|
- Integration verification enhanced
|
package/dist/commands/graph.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import type { CliFormat } from '../types';
|
|
1
2
|
export declare function relatedCommand(id: string, options?: {
|
|
2
3
|
depth?: number;
|
|
3
4
|
type?: string;
|
|
5
|
+
format?: CliFormat;
|
|
6
|
+
source?: 'explicit' | 'inferred' | 'mention' | 'all';
|
|
4
7
|
}): void;
|
|
5
8
|
export declare function traceCommand(id: string): void;
|
|
6
9
|
//# sourceMappingURL=graph.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAoB,SAAS,EAAE,MAAM,UAAU,CAAC;AAI5D,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,KAAK,CAAC;CACtD,GAAG,IAAI,CAyKP;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAiF7C"}
|
package/dist/commands/graph.js
CHANGED
|
@@ -44,28 +44,69 @@ function relatedCommand(id, options) {
|
|
|
44
44
|
const pmemPath = path.join(cwd, PMEM_DIR);
|
|
45
45
|
const depth = options?.depth ?? 1;
|
|
46
46
|
const edgeTypeFilter = options?.type;
|
|
47
|
+
const fmt = options?.format ?? 'compact';
|
|
48
|
+
const sourceFilter = (options?.source && options.source !== 'all')
|
|
49
|
+
? options.source
|
|
50
|
+
: undefined;
|
|
47
51
|
const db = (0, db_1.openDatabase)(pmemPath);
|
|
48
52
|
(0, db_1.createSchema)(db);
|
|
49
|
-
// Query card by ID
|
|
50
53
|
const card = db.prepare('SELECT * FROM cards WHERE id = ? AND is_deleted = 0').get(id);
|
|
51
54
|
if (!card) {
|
|
52
|
-
|
|
53
|
-
|
|
55
|
+
if (fmt === 'json') {
|
|
56
|
+
console.log(JSON.stringify({ error: `Node "${id}" not found` }, null, 2));
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
console.log(`Node "${id}" not found in database.`);
|
|
60
|
+
console.log(`Try: pmem ask "${id}" to search for related nodes.`);
|
|
61
|
+
}
|
|
54
62
|
return;
|
|
55
63
|
}
|
|
56
|
-
|
|
57
|
-
let directQuery = 'SELECT * FROM edges WHERE (from_id = ? OR to_id = ?)';
|
|
58
|
-
const directParams = [id, id];
|
|
64
|
+
let directEdges = (0, db_1.getEdgesForCard)(db, id, sourceFilter);
|
|
59
65
|
if (edgeTypeFilter) {
|
|
60
|
-
|
|
61
|
-
directParams.push(edgeTypeFilter);
|
|
66
|
+
directEdges = directEdges.filter(e => e.type === edgeTypeFilter);
|
|
62
67
|
}
|
|
63
|
-
const directEdges = db.prepare(directQuery).all(...directParams);
|
|
64
|
-
// Helper to fetch a card by ID
|
|
65
68
|
const getCard = (cardId) => {
|
|
66
69
|
return db.prepare('SELECT * FROM cards WHERE id = ? AND is_deleted = 0').get(cardId);
|
|
67
70
|
};
|
|
68
|
-
|
|
71
|
+
if (fmt === 'json') {
|
|
72
|
+
const edgesByType = {};
|
|
73
|
+
for (const edge of directEdges) {
|
|
74
|
+
const isOut = edge.from_id === id;
|
|
75
|
+
const targetId = isOut ? edge.to_id : edge.from_id;
|
|
76
|
+
const targetCard = getCard(targetId);
|
|
77
|
+
if (!edgesByType[edge.type]) {
|
|
78
|
+
edgesByType[edge.type] = [];
|
|
79
|
+
}
|
|
80
|
+
edgesByType[edge.type].push({
|
|
81
|
+
direction: isOut ? 'out' : 'in',
|
|
82
|
+
target_id: targetId,
|
|
83
|
+
target_title: targetCard?.title ?? targetId,
|
|
84
|
+
source: edge.source,
|
|
85
|
+
confidence: edge.confidence,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
const highConfidence = [];
|
|
89
|
+
const needsReview = [];
|
|
90
|
+
for (const items of Object.values(edgesByType)) {
|
|
91
|
+
for (const item of items) {
|
|
92
|
+
if (item.source === 'inferred' && item.confidence < 0.7) {
|
|
93
|
+
needsReview.push(item);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
highConfidence.push(item);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
console.log(JSON.stringify({
|
|
101
|
+
card: { id: card.id, type: card.type, title: card.title, status: card.status, file: card.file_path },
|
|
102
|
+
total_edges: directEdges.length,
|
|
103
|
+
high_confidence: highConfidence,
|
|
104
|
+
needs_review: needsReview,
|
|
105
|
+
edges_by_type: edgesByType,
|
|
106
|
+
}, null, 2));
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
// Compact output
|
|
69
110
|
console.log(`${card.id}`);
|
|
70
111
|
console.log(`Type: ${card.type}`);
|
|
71
112
|
console.log(`Title: ${card.title}`);
|
|
@@ -76,7 +117,6 @@ function relatedCommand(id, options) {
|
|
|
76
117
|
console.log('\nNo related nodes.');
|
|
77
118
|
return;
|
|
78
119
|
}
|
|
79
|
-
// Group direct edges by type
|
|
80
120
|
const grouped = new Map();
|
|
81
121
|
for (const edge of directEdges) {
|
|
82
122
|
const isOut = edge.from_id === id;
|
|
@@ -90,19 +130,21 @@ function relatedCommand(id, options) {
|
|
|
90
130
|
targetId,
|
|
91
131
|
targetTitle,
|
|
92
132
|
direction: isOut ? 'out' : 'in',
|
|
133
|
+
source: edge.source,
|
|
134
|
+
confidence: edge.confidence,
|
|
93
135
|
});
|
|
94
136
|
}
|
|
95
137
|
console.log('\nDirect Relations:');
|
|
96
138
|
for (const [edgeType, targets] of grouped) {
|
|
97
139
|
for (const t of targets) {
|
|
98
140
|
const prefix = t.direction === 'in' ? '←' : '';
|
|
99
|
-
|
|
141
|
+
const srcTag = t.source === 'inferred' ? ` [${t.source}, ${t.confidence.toFixed(1)}]` : '';
|
|
142
|
+
console.log(` ${prefix}${edgeType}: ${t.targetId} (${t.targetTitle})${srcTag}`);
|
|
100
143
|
}
|
|
101
144
|
}
|
|
102
145
|
// BFS for multi-hop traversal when depth > 1
|
|
103
146
|
if (depth > 1) {
|
|
104
147
|
const visited = new Set([id]);
|
|
105
|
-
// Seed frontier with direct neighbors
|
|
106
148
|
let frontier = new Set();
|
|
107
149
|
for (const edge of directEdges) {
|
|
108
150
|
const neighborId = edge.from_id === id ? edge.to_id : edge.from_id;
|
|
@@ -135,7 +177,7 @@ function relatedCommand(id, options) {
|
|
|
135
177
|
}
|
|
136
178
|
frontier = nextFrontier;
|
|
137
179
|
}
|
|
138
|
-
const totalReachable = visited.size - 1;
|
|
180
|
+
const totalReachable = visited.size - 1;
|
|
139
181
|
if (totalReachable > 0) {
|
|
140
182
|
console.log(`\nExtended Network (depth ${depth}):`);
|
|
141
183
|
console.log(` ${totalReachable} reachable node(s) via ${totalExtendedEdges + directEdges.length} edge(s) across all hops`);
|
|
@@ -147,7 +189,6 @@ function traceCommand(id) {
|
|
|
147
189
|
const pmemPath = path.join(cwd, PMEM_DIR);
|
|
148
190
|
const db = (0, db_1.openDatabase)(pmemPath);
|
|
149
191
|
(0, db_1.createSchema)(db);
|
|
150
|
-
// Query card by ID
|
|
151
192
|
const card = db.prepare('SELECT * FROM cards WHERE id = ? AND is_deleted = 0').get(id);
|
|
152
193
|
if (!card) {
|
|
153
194
|
console.log(`Node "${id}" not found in database.`);
|
|
@@ -174,9 +215,9 @@ function traceCommand(id) {
|
|
|
174
215
|
console.log(` ${row.file_path}`);
|
|
175
216
|
}
|
|
176
217
|
}
|
|
177
|
-
// Find depends_on chain
|
|
218
|
+
// Find depends_on chain
|
|
178
219
|
const dependsOn = db.prepare(`
|
|
179
|
-
SELECT e.to_id, c.title as to_title
|
|
220
|
+
SELECT e.to_id, c.title as to_title, e.source, e.confidence
|
|
180
221
|
FROM edges e
|
|
181
222
|
LEFT JOIN cards c ON c.id = e.to_id AND c.is_deleted = 0
|
|
182
223
|
WHERE e.from_id = ? AND e.type = 'depends_on'
|
|
@@ -184,12 +225,13 @@ function traceCommand(id) {
|
|
|
184
225
|
if (dependsOn.length > 0) {
|
|
185
226
|
console.log('\nDepends On:');
|
|
186
227
|
for (const row of dependsOn) {
|
|
187
|
-
|
|
228
|
+
const srcTag = row.source === 'inferred' ? ` [${row.source}, ${row.confidence.toFixed(1)}]` : '';
|
|
229
|
+
console.log(` - ${row.to_id}${row.to_title ? ` (${row.to_title})` : ''}${srcTag}`);
|
|
188
230
|
}
|
|
189
231
|
}
|
|
190
|
-
// Find depended_by
|
|
232
|
+
// Find depended_by
|
|
191
233
|
const dependedBy = db.prepare(`
|
|
192
|
-
SELECT e.from_id, c.title as from_title
|
|
234
|
+
SELECT e.from_id, c.title as from_title, e.source, e.confidence
|
|
193
235
|
FROM edges e
|
|
194
236
|
LEFT JOIN cards c ON c.id = e.from_id AND c.is_deleted = 0
|
|
195
237
|
WHERE e.to_id = ? AND e.type = 'depends_on'
|
|
@@ -197,10 +239,11 @@ function traceCommand(id) {
|
|
|
197
239
|
if (dependedBy.length > 0) {
|
|
198
240
|
console.log('\nDepended On By:');
|
|
199
241
|
for (const row of dependedBy) {
|
|
200
|
-
|
|
242
|
+
const srcTag = row.source === 'inferred' ? ` [${row.source}, ${row.confidence.toFixed(1)}]` : '';
|
|
243
|
+
console.log(` - ${row.from_id}${row.from_title ? ` (${row.from_title})` : ''}${srcTag}`);
|
|
201
244
|
}
|
|
202
245
|
}
|
|
203
|
-
// Read and display card body content
|
|
246
|
+
// Read and display card body content
|
|
204
247
|
const filePath = path.join(cwd, card.file_path);
|
|
205
248
|
if ((0, fs_1.fileExists)(filePath)) {
|
|
206
249
|
const content = (0, fs_1.readFile)(filePath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/rebuild.js
CHANGED
|
@@ -148,8 +148,8 @@ function rebuildCommand(options = {}) {
|
|
|
148
148
|
is_candidate: isCandidate,
|
|
149
149
|
};
|
|
150
150
|
(0, db_1.upsertCard)(db, cardRow);
|
|
151
|
-
// Clear existing relations before re-inserting
|
|
152
|
-
(0, db_1.
|
|
151
|
+
// Clear existing explicit relations before re-inserting (preserve inferred edges)
|
|
152
|
+
(0, db_1.deleteExplicitCardEdges)(db, fm.id);
|
|
153
153
|
(0, db_1.deleteCardAliases)(db, fm.id);
|
|
154
154
|
(0, db_1.deleteCardTags)(db, fm.id);
|
|
155
155
|
(0, db_1.deleteCardPaths)(db, fm.id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rebuild.js","sourceRoot":"","sources":["../../src/commands/rebuild.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,wCAqPC;AA5QD,2CAA6B;AAC7B,mCAAiG;AACjG,+CAAgD;AAChD,
|
|
1
|
+
{"version":3,"file":"rebuild.js","sourceRoot":"","sources":["../../src/commands/rebuild.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,8 @@ export declare function updateCommand(options: {
|
|
|
8
8
|
applySuggestion?: string;
|
|
9
9
|
format?: string;
|
|
10
10
|
includeHistory?: boolean;
|
|
11
|
+
acceptEdges?: string;
|
|
12
|
+
rejectEdges?: string;
|
|
11
13
|
}): void;
|
|
12
14
|
export declare function markDirtyCommand(reason: string, options?: {
|
|
13
15
|
auto?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAaA,wBAAgB,aAAa,CAAC,OAAO,EAAE;IACrC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAaA,wBAAgB,aAAa,CAAC,OAAO,EAAE;IACrC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,IAAI,CA+CP;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,IAAI,CA8FvF"}
|
package/dist/commands/update.js
CHANGED
|
@@ -56,6 +56,11 @@ function updateCommand(options) {
|
|
|
56
56
|
console.log('No manifest found. Run `pmem init` first.');
|
|
57
57
|
return;
|
|
58
58
|
}
|
|
59
|
+
// --accept-edges / --reject-edges: manage inferred edges
|
|
60
|
+
if (options.acceptEdges || options.rejectEdges) {
|
|
61
|
+
manageEdges(pmemPath, options.acceptEdges, options.rejectEdges);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
59
64
|
// --suggest: show intelligent update suggestions
|
|
60
65
|
if (options.suggest) {
|
|
61
66
|
suggestActions(pmemPath, options.format, options.includeHistory);
|
|
@@ -581,7 +586,8 @@ function generateSuggestions(pmemPath, includeHistory = false) {
|
|
|
581
586
|
};
|
|
582
587
|
}
|
|
583
588
|
function suggestActions(pmemPath, format, includeHistory) {
|
|
584
|
-
|
|
589
|
+
let report = generateSuggestions(pmemPath, includeHistory);
|
|
590
|
+
report = enrichWithEdgeSuggestions(pmemPath, report);
|
|
585
591
|
if (format === 'json') {
|
|
586
592
|
console.log(JSON.stringify({
|
|
587
593
|
summary: report.summary,
|
|
@@ -804,4 +810,114 @@ Continue as planned.
|
|
|
804
810
|
}
|
|
805
811
|
process.exit(0);
|
|
806
812
|
}
|
|
813
|
+
// === v0.6.3: Edge Confirmation Management ===
|
|
814
|
+
function manageEdges(pmemPath, acceptRaw, rejectRaw) {
|
|
815
|
+
const dbPath = path.join(pmemPath, 'pmem.db');
|
|
816
|
+
if (!(0, fs_1.fileExists)(dbPath)) {
|
|
817
|
+
console.log('No SQLite database. Run `pmem rebuild` first.');
|
|
818
|
+
process.exit(2);
|
|
819
|
+
}
|
|
820
|
+
const db = (0, db_1.openDatabase)(pmemPath);
|
|
821
|
+
// Accept edges: upgrade from inferred to explicit
|
|
822
|
+
if (acceptRaw) {
|
|
823
|
+
const ids = parseEdgeIds(acceptRaw);
|
|
824
|
+
if (ids.length > 0) {
|
|
825
|
+
const changed = (0, db_1.updateEdgeSource)(db, ids, 'explicit', 1.0);
|
|
826
|
+
console.log(`Accepted ${changed} edge(s): upgraded source to explicit, confidence to 1.0.`);
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
// Reject edges: delete them
|
|
830
|
+
if (rejectRaw) {
|
|
831
|
+
const ids = parseEdgeIds(rejectRaw);
|
|
832
|
+
if (ids.length > 0) {
|
|
833
|
+
const deleted = (0, db_1.deleteEdgesByIds)(db, ids);
|
|
834
|
+
console.log(`Rejected ${deleted} edge(s): deleted.`);
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
(0, db_1.closeDatabase)();
|
|
838
|
+
if (!acceptRaw && !rejectRaw) {
|
|
839
|
+
// Show current inferred edges for review
|
|
840
|
+
const db2 = (0, db_1.openDatabase)(pmemPath);
|
|
841
|
+
const inferred = (0, db_1.getInferredEdges)(db2);
|
|
842
|
+
if (inferred.length === 0) {
|
|
843
|
+
console.log('No inferred edges to review.');
|
|
844
|
+
}
|
|
845
|
+
else {
|
|
846
|
+
console.log(`Inferred edges (${inferred.length} total):\n`);
|
|
847
|
+
const getCardTitle = (cid) => {
|
|
848
|
+
try {
|
|
849
|
+
const row = db2.prepare('SELECT title FROM cards WHERE id = ?').get(cid);
|
|
850
|
+
return row?.title ?? cid;
|
|
851
|
+
}
|
|
852
|
+
catch {
|
|
853
|
+
return cid;
|
|
854
|
+
}
|
|
855
|
+
};
|
|
856
|
+
for (const edge of inferred) {
|
|
857
|
+
console.log(` [${edge.id}] ${edge.from_id} → ${edge.to_id}`);
|
|
858
|
+
console.log(` type: ${edge.type}, confidence: ${edge.confidence.toFixed(1)}, source: ${edge.source}`);
|
|
859
|
+
}
|
|
860
|
+
console.log('\nTo accept: pmem update --confirm --accept-edges <id1,id2>');
|
|
861
|
+
console.log('To reject: pmem update --confirm --reject-edges <id1,id2>');
|
|
862
|
+
}
|
|
863
|
+
(0, db_1.closeDatabase)();
|
|
864
|
+
}
|
|
865
|
+
}
|
|
866
|
+
function parseEdgeIds(raw) {
|
|
867
|
+
return raw
|
|
868
|
+
.split(',')
|
|
869
|
+
.map(s => parseInt(s.trim(), 10))
|
|
870
|
+
.filter(n => !isNaN(n) && n > 0);
|
|
871
|
+
}
|
|
872
|
+
// Add edge-related suggestions to the suggestion report.
|
|
873
|
+
// All inferred edges are surfaced (not just low-confidence), so the agent
|
|
874
|
+
// can review and decide which to accept / reject. Confidence and source are
|
|
875
|
+
// included as `sources[]` entries to drive the agent's judgment.
|
|
876
|
+
function enrichWithEdgeSuggestions(pmemPath, report) {
|
|
877
|
+
const dbPath = path.join(pmemPath, 'pmem.db');
|
|
878
|
+
if (!(0, fs_1.fileExists)(dbPath))
|
|
879
|
+
return report;
|
|
880
|
+
try {
|
|
881
|
+
const db = (0, db_1.openDatabase)(pmemPath);
|
|
882
|
+
const inferred = (0, db_1.getInferredEdges)(db);
|
|
883
|
+
if (inferred.length === 0)
|
|
884
|
+
return report;
|
|
885
|
+
for (const edge of inferred) {
|
|
886
|
+
const isLow = edge.confidence < 0.7;
|
|
887
|
+
const reasonTag = isLow
|
|
888
|
+
? `inferred_edge_low_confidence: ${edge.from_id} → ${edge.to_id}`
|
|
889
|
+
: `inferred_edge_review: ${edge.from_id} → ${edge.to_id}`;
|
|
890
|
+
const detailReason = isLow
|
|
891
|
+
? `inferred_${edge.type}_confidence_${edge.confidence.toFixed(1)}`
|
|
892
|
+
: `inferred_${edge.type}_confidence_${edge.confidence.toFixed(1)}_source_${edge.source}`;
|
|
893
|
+
report.groups.current_suggestions.push({
|
|
894
|
+
target: edge.from_id,
|
|
895
|
+
reason: reasonTag,
|
|
896
|
+
matched_file: null,
|
|
897
|
+
count: 1,
|
|
898
|
+
severity: isLow ? 'warning' : 'info',
|
|
899
|
+
blocks_verify: false,
|
|
900
|
+
is_duplicate: false,
|
|
901
|
+
is_historical: false,
|
|
902
|
+
created_at_first: edge.created_at || new Date().toISOString(),
|
|
903
|
+
created_at_last: edge.created_at || new Date().toISOString(),
|
|
904
|
+
sources: [{
|
|
905
|
+
scope: 'edge',
|
|
906
|
+
target: `${edge.from_id} → ${edge.to_id}`,
|
|
907
|
+
reason: detailReason,
|
|
908
|
+
created_at: edge.created_at || new Date().toISOString(),
|
|
909
|
+
session_id: null,
|
|
910
|
+
}],
|
|
911
|
+
edge_ids: edge.id !== undefined ? [edge.id] : [],
|
|
912
|
+
edge_tuple: `${edge.from_id} → ${edge.to_id}`,
|
|
913
|
+
});
|
|
914
|
+
}
|
|
915
|
+
report.summary.info += inferred.length;
|
|
916
|
+
report.summary.affected_cards = new Set(inferred.map(e => e.from_id)).size + report.summary.affected_cards;
|
|
917
|
+
return report;
|
|
918
|
+
}
|
|
919
|
+
catch {
|
|
920
|
+
return report;
|
|
921
|
+
}
|
|
922
|
+
}
|
|
807
923
|
//# sourceMappingURL=update.js.map
|