pmem-ai 0.7.2 → 0.7.4
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 +29 -27
- package/dist/commands/capture.d.ts +8 -0
- package/dist/commands/capture.d.ts.map +1 -0
- package/dist/commands/capture.js +69 -0
- package/dist/commands/capture.js.map +1 -0
- package/dist/commands/context.d.ts +5 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +109 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/install.d.ts +5 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +54 -35
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/mcp.d.ts +1 -1
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +2 -2
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/rebuild.d.ts.map +1 -1
- package/dist/commands/rebuild.js +51 -7
- package/dist/commands/rebuild.js.map +1 -1
- package/dist/commands/verify.d.ts +1 -0
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +6 -3
- package/dist/commands/verify.js.map +1 -1
- package/dist/core/agentRules.d.ts +13 -0
- package/dist/core/agentRules.d.ts.map +1 -0
- package/dist/core/agentRules.js +131 -0
- package/dist/core/agentRules.js.map +1 -0
- package/dist/core/capture.d.ts +15 -0
- package/dist/core/capture.d.ts.map +1 -0
- package/dist/core/capture.js +380 -0
- package/dist/core/capture.js.map +1 -0
- package/dist/core/db.d.ts +20 -0
- package/dist/core/db.d.ts.map +1 -1
- package/dist/core/db.js +30 -0
- package/dist/core/db.js.map +1 -1
- package/dist/core/query/context.d.ts +3 -0
- package/dist/core/query/context.d.ts.map +1 -0
- package/dist/core/query/context.js +158 -0
- package/dist/core/query/context.js.map +1 -0
- package/dist/index.js +46 -4
- package/dist/index.js.map +1 -1
- package/dist/mcp/security.d.ts +4 -0
- package/dist/mcp/security.d.ts.map +1 -1
- package/dist/mcp/security.js +35 -0
- package/dist/mcp/security.js.map +1 -1
- package/dist/mcp/server.d.ts +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +73 -5
- package/dist/mcp/server.js.map +1 -1
- package/dist/types.d.ts +31 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -2
- package/skills/pmem/SKILL.md +11 -19
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,40 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to pmem are documented here.
|
|
4
4
|
|
|
5
|
+
## v0.7.4 — Agent UX Release (2026-06-26)
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- **`pmem context` Command & `pmem_context` MCP Tool**: Consolidate recall, task-aware ask, and status queries into a single budget-aware context. Save active task to `.pmem/session.json`.
|
|
10
|
+
- **`pmem capture --auto` Command & `pmem_capture` MCP Tool**: Automatically scan changed files, mark affected cards as dirty, write date-based traces, resolve dirty flags in database, and perform incremental rebuild.
|
|
11
|
+
- **Controlled Write Mode (`--write=append-only`)**: Controlled MCP write boundary allowing trace cards generation and `next.md` managed block updates while strictly blocking direct edits to core cards.
|
|
12
|
+
- **Agent Rules Installer**: `pmem install --agent-rules` generates unified, compact guidelines (under 30 lines) for AGENTS.md, CLAUDE.md, GEMINI.md, Codex instructions, Cursor rules, Cline rules, and optionally Aider/Windsurf conventions.
|
|
13
|
+
- **Duplicate Prevention**: Exclude `.pmem/` updates from git diff hash calculations to prevent duplicate/empty captures.
|
|
14
|
+
- **Safety boundaries**: Prevent path/directory traversal and control characters in capture inputs.
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- Support running programmatic verify check without exiting Node process via `noExit` option.
|
|
19
|
+
|
|
20
|
+
## v0.7.3 — `rebuild --full` Edge Cleanup (closes #6)
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
|
|
24
|
+
- **`pmem rebuild --full` left orphan + stale edges after card split/delete** (issue #6, three concrete bugs):
|
|
25
|
+
1. *Orphan inbound edges*: When a target card was deleted but other cards' frontmatter still named it (or the user had edited their own `related:` to `[]`), the explicit edges survived `--full`. `clearAllTables` ran but the v0.7.0-a snapshot+restore step then resurrected them. Now `--full` post-cleans any edge whose `from_id` or `to_id` no longer has a `cards` row, and the snapshot+restore step skips managed sources (`explicit`/`inferred`/`mention`) so they cannot be resurrected.
|
|
26
|
+
2. *Stale `depends_on` / `related`*: When a card's `depends_on` array was reduced (e.g. `[A, X, Y]` → `[X]`), the rebuild loop's per-card `deleteExplicitCardEdges` correctly removed the old rows, but the snapshot+restore step put them back. The smart snapshot+restore filter (see above) now refuses to re-insert managed-source edges, so the diff takes effect.
|
|
27
|
+
3. *Stale inferred `next_step_of`*: Same mechanism for `source='inferred'` task→module edges. In addition, the rebuild loop now also calls a new per-card `deleteInferredCardEdges` so *incremental* rebuilds re-derive inferred edges from the current `related` frontmatter — previously only `--full` cleared them, and only by accident via `clearAllTables`.
|
|
28
|
+
- **Workaround SQL from the issue is no longer required.** All three manual `sqlite3` cleanup statements in the issue body become no-ops after `--full`.
|
|
29
|
+
|
|
30
|
+
### Added
|
|
31
|
+
|
|
32
|
+
- `deleteInferredCardEdges(db, cardId)` and `deleteOrphanEdges(db)` helpers in `src/core/db.ts`.
|
|
33
|
+
- 3 new integration tests in `src/commands/rebuild.test.ts` covering all three bugs and a regression test that confirms manually-inserted (`source='manual'`) edges still round-trip through `--full`.
|
|
34
|
+
|
|
35
|
+
### Version
|
|
36
|
+
|
|
37
|
+
Bumped from 0.7.2 → 0.7.3.
|
|
38
|
+
|
|
5
39
|
## v0.7.2 — pmem-rt v1 MCP Adapter + Dogfooding Usability Fixes
|
|
6
40
|
|
|
7
41
|
### Added
|
package/README.md
CHANGED
|
@@ -10,13 +10,14 @@ Coding agents lose project context quickly. A repository has source files, docs,
|
|
|
10
10
|
|
|
11
11
|
`pmem` gives the project a small, explicit memory layer:
|
|
12
12
|
|
|
13
|
-
- `pmem
|
|
13
|
+
- `pmem context "<task>"` restores and aggregates task-specific memory and file context.
|
|
14
|
+
- `pmem capture --auto` automatically synchronizes modified files and memory status.
|
|
15
|
+
- `pmem install --agent-rules` installs compact rules files (AGENTS.md, Cursor rules, etc.) to guide coding agents.
|
|
14
16
|
- `pmem ask "<query>"` finds relevant memory cards.
|
|
15
17
|
- `pmem discover` auto-discovers project relationships (tech stack, file deps, imports) across 6 languages.
|
|
16
|
-
- `pmem status` maps changed files back to affected cards.
|
|
17
|
-
- `pmem update --suggest` tells an agent what memory likely needs attention.
|
|
18
18
|
- `pmem verify` checks that Markdown cards and runtime indexes still agree.
|
|
19
19
|
|
|
20
|
+
|
|
20
21
|
The design is intentionally local and Git-friendly. Markdown cards remain the source of truth. SQLite is a rebuildable runtime index, not a separate knowledge base.
|
|
21
22
|
|
|
22
23
|
## Who It Is For
|
|
@@ -81,8 +82,8 @@ Create project memory in a repository:
|
|
|
81
82
|
```bash
|
|
82
83
|
pmem init my-project
|
|
83
84
|
pmem rebuild
|
|
84
|
-
pmem
|
|
85
|
-
pmem
|
|
85
|
+
pmem context "Implement core setup"
|
|
86
|
+
pmem capture --auto
|
|
86
87
|
```
|
|
87
88
|
|
|
88
89
|
For a richer setup:
|
|
@@ -337,6 +338,9 @@ Installed integration templates are available under:
|
|
|
337
338
|
```bash
|
|
338
339
|
pmem init [project-name] [--guided] [--description <text>] [--stage <text>] [--next <text>] [--answers <path>] [--domain software|novel|research]
|
|
339
340
|
|
|
341
|
+
pmem context <task> [--budget N] [--format compact|json]
|
|
342
|
+
pmem capture [--auto] [-s <summary>] [-n <next>] [--full] [--force]
|
|
343
|
+
|
|
340
344
|
pmem recall [--budget N] [--format compact|json|paths|pack] [--since <duration>]
|
|
341
345
|
pmem ask <query> [--format compact|json|paths|pack]
|
|
342
346
|
pmem discover [--dry-run] [--format compact|json] [--min-confidence <n>]
|
|
@@ -365,8 +369,8 @@ pmem migrate [--to <version>] [--dry-run] [--backup]
|
|
|
365
369
|
pmem session start [-a <agent-name>]
|
|
366
370
|
pmem session end [-s <summary>]
|
|
367
371
|
pmem integration list|install <framework>|verify
|
|
368
|
-
pmem install [--skills] [--claude] [--codex] [--gemini] [--all]
|
|
369
|
-
pmem mcp
|
|
372
|
+
pmem install [--skills] [--agent-rules] [--claude] [--codex] [--gemini] [--cursor] [--cline] [--aider] [--windsurf] [--all]
|
|
373
|
+
pmem mcp [--write readonly|append-only]
|
|
370
374
|
```
|
|
371
375
|
|
|
372
376
|
## Exit Codes
|
|
@@ -384,36 +388,34 @@ Agents should parse structured JSON output (`--format json`) to decide next step
|
|
|
384
388
|
|
|
385
389
|
> **Breaking change from v0.6.1:** `pmem update --suggest` and `pmem distill --suggest` previously exited with code `1` when suggestions existed. Scripts that checked `$? -eq 1` must now parse JSON output instead.
|
|
386
390
|
|
|
387
|
-
## pmem-rt — MCP Runtime for AI Agents
|
|
391
|
+
## pmem-rt — MCP Runtime for AI Agents
|
|
388
392
|
|
|
389
|
-
pmem-rt is a
|
|
393
|
+
pmem-rt is a stdio MCP server that lets AI coding agents interact with pmem directly in their tool loop.
|
|
390
394
|
|
|
391
|
-
|
|
395
|
+
Default mode is read-only:
|
|
392
396
|
|
|
393
397
|
```bash
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
npx pmem init --guided
|
|
397
|
-
npx pmem rebuild
|
|
398
|
+
pmem mcp
|
|
399
|
+
```
|
|
398
400
|
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
# }
|
|
404
|
-
# }
|
|
401
|
+
Append-only capture mode:
|
|
402
|
+
|
|
403
|
+
```bash
|
|
404
|
+
pmem mcp --write=append-only
|
|
405
405
|
```
|
|
406
406
|
|
|
407
407
|
### MCP Tools
|
|
408
408
|
|
|
409
|
-
| Tool | Description
|
|
410
|
-
|
|
411
|
-
| `pmem_recall` | Restore project context
|
|
412
|
-
| `pmem_ask` |
|
|
413
|
-
| `pmem_related` |
|
|
414
|
-
| `pmem_status` |
|
|
409
|
+
| Tool | Mode | Description |
|
|
410
|
+
| -------------- | ----------- | --------------------------------------------- |
|
|
411
|
+
| `pmem_recall` | readonly | Restore project context |
|
|
412
|
+
| `pmem_ask` | readonly | Search memory cards |
|
|
413
|
+
| `pmem_related` | readonly | Query graph neighbors |
|
|
414
|
+
| `pmem_status` | readonly | Detect changed files |
|
|
415
|
+
| `pmem_context` | readonly | Get task-aware context package |
|
|
416
|
+
| `pmem_capture` | append-only | Append trace and update managed next.md block |
|
|
415
417
|
|
|
416
|
-
All tools are
|
|
418
|
+
All read-only tools are safe to execute and do not perform any side effects on the workspace. In `append-only` mode, the agent can call `pmem_capture` to create new traces and update `next.md` managed blocks, while direct modifications to core cards remain strictly blocked. Every card object returned carries `content_trust: "untrusted_project_data"`.
|
|
417
419
|
|
|
418
420
|
[Full integration guide →](docs/pmem-rt.md)
|
|
419
421
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"AAIA,wBAAgB,cAAc,CAAC,OAAO,EAAE;IACtC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,IAAI,CA+BP"}
|
|
@@ -0,0 +1,69 @@
|
|
|
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.captureCommand = captureCommand;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const fs_1 = require("../core/fs");
|
|
39
|
+
const capture_1 = require("../core/capture");
|
|
40
|
+
function captureCommand(options) {
|
|
41
|
+
const cwd = process.cwd();
|
|
42
|
+
const pmemPath = path.join(cwd, '.pmem');
|
|
43
|
+
if (!(0, fs_1.fileExists)(pmemPath)) {
|
|
44
|
+
console.error('Error: No .pmem directory found. Run `pmem init` first.');
|
|
45
|
+
process.exit(2);
|
|
46
|
+
}
|
|
47
|
+
// Execute core capture
|
|
48
|
+
const result = (0, capture_1.captureCore)(pmemPath, {
|
|
49
|
+
auto: options.auto,
|
|
50
|
+
summary: options.summary,
|
|
51
|
+
next: options.next,
|
|
52
|
+
full: options.full,
|
|
53
|
+
force: options.force
|
|
54
|
+
});
|
|
55
|
+
if (!result.success) {
|
|
56
|
+
console.error(`Error: ${result.message}`);
|
|
57
|
+
process.exit(2);
|
|
58
|
+
}
|
|
59
|
+
if (result.skipped) {
|
|
60
|
+
console.log(result.message);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
console.log(result.message);
|
|
64
|
+
if (result.tracePath) {
|
|
65
|
+
console.log(`Trace card written: ${path.relative(cwd, result.tracePath)}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=capture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,wCAqCC;AAzCD,2CAA6B;AAC7B,mCAAwC;AACxC,6CAA8C;AAE9C,SAAgB,cAAc,CAAC,OAM9B;IACC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAEzC,IAAI,CAAC,IAAA,eAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,uBAAuB;IACvB,MAAM,MAAM,GAAG,IAAA,qBAAW,EAAC,QAAQ,EAAE;QACnC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAKA,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA4EhG"}
|
|
@@ -0,0 +1,109 @@
|
|
|
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.contextCommand = contextCommand;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const fs_1 = require("../core/fs");
|
|
39
|
+
const context_1 = require("../core/query/context");
|
|
40
|
+
function contextCommand(task, options) {
|
|
41
|
+
const cwd = process.cwd();
|
|
42
|
+
const pmemPath = path.join(cwd, '.pmem');
|
|
43
|
+
if (!(0, fs_1.fileExists)(pmemPath)) {
|
|
44
|
+
console.error('Error: No .pmem directory found. Run `pmem init` first.');
|
|
45
|
+
process.exit(2);
|
|
46
|
+
}
|
|
47
|
+
const budget = options.budget ? Number(options.budget) : 4000;
|
|
48
|
+
const format = options.format || 'compact';
|
|
49
|
+
// 1. Run core context query
|
|
50
|
+
const result = (0, context_1.contextQuery)(pmemPath, task, budget);
|
|
51
|
+
// 2. Save task metadata to session.json
|
|
52
|
+
const sessionPath = path.join(pmemPath, 'session.json');
|
|
53
|
+
const sessionData = {
|
|
54
|
+
latest_task: task,
|
|
55
|
+
latest_context_query: task,
|
|
56
|
+
latest_context_cards: result.relevant_memory.map(c => c.id),
|
|
57
|
+
updated_at: new Date().toISOString()
|
|
58
|
+
};
|
|
59
|
+
try {
|
|
60
|
+
(0, fs_1.writeFile)(sessionPath, JSON.stringify(sessionData, null, 2));
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
console.error(`Warning: Failed to save session metadata: ${err.message}`);
|
|
64
|
+
}
|
|
65
|
+
// 3. Print output based on format
|
|
66
|
+
if (format === 'json') {
|
|
67
|
+
console.log(JSON.stringify(result, null, 2));
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// Beautiful human/agent readable Markdown output
|
|
71
|
+
console.log(`# PMEM_CONTEXT_READY: ${task}`);
|
|
72
|
+
console.log('');
|
|
73
|
+
console.log(`- **Project Stage**: ${result.project_stage || 'Not recorded'}`);
|
|
74
|
+
console.log(`- **Current Focus**: ${result.current_focus}`);
|
|
75
|
+
console.log('');
|
|
76
|
+
console.log('## Suggested Reads');
|
|
77
|
+
for (const item of result.must_read) {
|
|
78
|
+
console.log(`- [${path.basename(item.path)}](file://${path.resolve(item.path)}) — ${item.reason}`);
|
|
79
|
+
}
|
|
80
|
+
console.log('');
|
|
81
|
+
if (result.relevant_memory.length > 0) {
|
|
82
|
+
console.log('## Relevant Memory Cards');
|
|
83
|
+
for (const card of result.relevant_memory) {
|
|
84
|
+
console.log(`- **${card.id}** (${card.type}): [${card.title}](file://${path.resolve(card.file_path)})`);
|
|
85
|
+
if (card.summary) {
|
|
86
|
+
console.log(` > ${card.summary}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
console.log('');
|
|
90
|
+
}
|
|
91
|
+
if (result.changed_files.length > 0) {
|
|
92
|
+
console.log('## Changed Files');
|
|
93
|
+
for (const file of result.changed_files) {
|
|
94
|
+
console.log(`- [${file.path}](file://${path.resolve(file.path)}) [${file.status}]`);
|
|
95
|
+
}
|
|
96
|
+
console.log('');
|
|
97
|
+
}
|
|
98
|
+
if (result.warnings.length > 0) {
|
|
99
|
+
console.log('## Warnings / Status');
|
|
100
|
+
for (const warning of result.warnings) {
|
|
101
|
+
console.log(`- ${warning}`);
|
|
102
|
+
}
|
|
103
|
+
console.log('');
|
|
104
|
+
}
|
|
105
|
+
console.log('## Recommended Next Action');
|
|
106
|
+
console.log(result.recommended_next_action);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
export declare function installCommand(options: {
|
|
2
2
|
skills?: boolean;
|
|
3
|
+
agentRules?: boolean;
|
|
3
4
|
claude?: boolean;
|
|
4
5
|
codex?: boolean;
|
|
5
6
|
gemini?: boolean;
|
|
7
|
+
cursor?: boolean;
|
|
8
|
+
cline?: boolean;
|
|
9
|
+
aider?: boolean;
|
|
10
|
+
windsurf?: boolean;
|
|
6
11
|
all?: boolean;
|
|
7
12
|
}): void;
|
|
8
13
|
//# sourceMappingURL=install.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAmBA,wBAAgB,cAAc,CAAC,OAAO,EAAE;IACtC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,GAAG,IAAI,CAmEP"}
|
package/dist/commands/install.js
CHANGED
|
@@ -37,6 +37,7 @@ exports.installCommand = installCommand;
|
|
|
37
37
|
const path = __importStar(require("path"));
|
|
38
38
|
const fs = __importStar(require("fs"));
|
|
39
39
|
const os = __importStar(require("os"));
|
|
40
|
+
const agentRules_1 = require("../core/agentRules");
|
|
40
41
|
const SKILLS_SRC_DIR = path.join(__dirname, '..', '..', 'skills', 'pmem');
|
|
41
42
|
const AGENT_TARGETS = [
|
|
42
43
|
{ name: 'Claude Code', flag: 'claude', skillsDir: path.join(os.homedir(), '.claude', 'skills') },
|
|
@@ -44,49 +45,67 @@ const AGENT_TARGETS = [
|
|
|
44
45
|
{ name: 'Gemini', flag: 'gemini', skillsDir: path.join(os.homedir(), '.gemini', 'skills') },
|
|
45
46
|
];
|
|
46
47
|
function installCommand(options) {
|
|
47
|
-
if (!options.skills) {
|
|
48
|
-
console.log('Usage:
|
|
48
|
+
if (!options.skills && !options.agentRules) {
|
|
49
|
+
console.log('Usage:');
|
|
50
|
+
console.log(' pmem install --skills [--claude] [--codex] [--gemini] [--all]');
|
|
51
|
+
console.log(' pmem install --agent-rules [--claude] [--codex] [--gemini] [--cursor] [--cline] [--aider] [--windsurf] [--all]');
|
|
49
52
|
console.log('');
|
|
50
|
-
console.log('Install
|
|
51
|
-
console.log(' --
|
|
52
|
-
console.log(' --
|
|
53
|
-
console.log(' --gemini → ~/.gemini/skills/pmem/');
|
|
54
|
-
console.log(' --all → all detected agents');
|
|
53
|
+
console.log('Install options:');
|
|
54
|
+
console.log(' --skills Install global agent skill files');
|
|
55
|
+
console.log(' --agent-rules Install compact agent workspace guidelines (AGENTS.md, etc.)');
|
|
55
56
|
return;
|
|
56
57
|
}
|
|
57
|
-
//
|
|
58
|
-
if (
|
|
59
|
-
console.
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
const detected = fs.existsSync(t.skillsDir);
|
|
70
|
-
console.log(` ${t.name}: ${detected ? 'detected' : 'not detected'} (${t.skillsDir})`);
|
|
58
|
+
// Handle agent rules installation
|
|
59
|
+
if (options.agentRules) {
|
|
60
|
+
console.log('Installing agent guidelines/rules in workspace...');
|
|
61
|
+
const written = (0, agentRules_1.writeAgentRules)(process.cwd(), options);
|
|
62
|
+
if (written.length > 0) {
|
|
63
|
+
console.log('\n✓ Rules files written successfully:');
|
|
64
|
+
for (const file of written) {
|
|
65
|
+
console.log(` - ${file}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
console.log('No rules files written (check option flags).');
|
|
71
70
|
}
|
|
72
71
|
return;
|
|
73
72
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
installed++;
|
|
73
|
+
// Handle skills installation
|
|
74
|
+
if (options.skills) {
|
|
75
|
+
// Verify skills source exists
|
|
76
|
+
if (!fs.existsSync(SKILLS_SRC_DIR)) {
|
|
77
|
+
console.error('Skills source directory not found. Make sure pmem-ai is installed correctly.');
|
|
78
|
+
console.error(`Expected: ${SKILLS_SRC_DIR}`);
|
|
79
|
+
process.exit(2);
|
|
82
80
|
}
|
|
83
|
-
|
|
84
|
-
|
|
81
|
+
// Resolve targets
|
|
82
|
+
const targets = resolveTargets(options);
|
|
83
|
+
if (targets.length === 0) {
|
|
84
|
+
console.log('No agent targets specified. Use --claude, --codex, --gemini, or --all.');
|
|
85
|
+
console.log('Detected agents:');
|
|
86
|
+
for (const t of AGENT_TARGETS) {
|
|
87
|
+
const detected = fs.existsSync(t.skillsDir);
|
|
88
|
+
console.log(` ${t.name}: ${detected ? 'detected' : 'not detected'} (${t.skillsDir})`);
|
|
89
|
+
}
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
let installed = 0;
|
|
93
|
+
for (const target of targets) {
|
|
94
|
+
const destDir = path.join(target.skillsDir, 'pmem');
|
|
95
|
+
console.log(`Installing pmem skills for ${target.name}...`);
|
|
96
|
+
try {
|
|
97
|
+
copyDir(SKILLS_SRC_DIR, destDir);
|
|
98
|
+
console.log(` ✓ ${destDir}`);
|
|
99
|
+
installed++;
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
console.error(` ✗ Failed: ${err?.message || err}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
console.log(`\nInstalled ${installed}/${targets.length} agent(s).`);
|
|
106
|
+
if (installed > 0) {
|
|
107
|
+
console.log('Agents will now discover pmem skills automatically.');
|
|
85
108
|
}
|
|
86
|
-
}
|
|
87
|
-
console.log(`\nInstalled ${installed}/${targets.length} agent(s).`);
|
|
88
|
-
if (installed > 0) {
|
|
89
|
-
console.log('Agents will now discover pmem skills automatically.');
|
|
90
109
|
}
|
|
91
110
|
}
|
|
92
111
|
function resolveTargets(options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/mcp.d.ts
CHANGED
|
@@ -5,5 +5,5 @@
|
|
|
5
5
|
* MCP protocol transport channel. Any non-JSON output will cause protocol
|
|
6
6
|
* errors. Use stderr for diagnostics if absolutely necessary.
|
|
7
7
|
*/
|
|
8
|
-
export declare function mcpCommand(): Promise<void>;
|
|
8
|
+
export declare function mcpCommand(writeMode?: 'readonly' | 'append-only'): Promise<void>;
|
|
9
9
|
//# sourceMappingURL=mcp.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH,wBAAsB,UAAU,
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH,wBAAsB,UAAU,CAAC,SAAS,GAAE,UAAU,GAAG,aAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBlG"}
|
package/dist/commands/mcp.js
CHANGED
|
@@ -45,7 +45,7 @@ const server_1 = require("../mcp/server");
|
|
|
45
45
|
* MCP protocol transport channel. Any non-JSON output will cause protocol
|
|
46
46
|
* errors. Use stderr for diagnostics if absolutely necessary.
|
|
47
47
|
*/
|
|
48
|
-
async function mcpCommand() {
|
|
48
|
+
async function mcpCommand(writeMode = 'readonly') {
|
|
49
49
|
const cwd = process.cwd();
|
|
50
50
|
const pmemPath = path.join(cwd, '.pmem');
|
|
51
51
|
if (!(0, fs_1.fileExists)(pmemPath)) {
|
|
@@ -59,6 +59,6 @@ async function mcpCommand() {
|
|
|
59
59
|
}
|
|
60
60
|
// Security: validate path scope before starting
|
|
61
61
|
(0, security_1.validatePathScope)(pmemPath);
|
|
62
|
-
await (0, server_1.startMcpServer)(pmemPath);
|
|
62
|
+
await (0, server_1.startMcpServer)(pmemPath, writeMode);
|
|
63
63
|
}
|
|
64
64
|
//# sourceMappingURL=mcp.js.map
|
package/dist/commands/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,gCAmBC;AA/BD,2CAA6B;AAC7B,mCAAwC;AACxC,8CAAoD;AACpD,0CAA+C;AAE/C;;;;;;GAMG;AACI,KAAK,UAAU,UAAU;
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,gCAmBC;AA/BD,2CAA6B;AAC7B,mCAAwC;AACxC,8CAAoD;AACpD,0CAA+C;AAE/C;;;;;;GAMG;AACI,KAAK,UAAU,UAAU,CAAC,YAAwC,UAAU;IACjF,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAEzC,IAAI,CAAC,IAAA,eAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAA,eAAU,EAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,gDAAgD;IAChD,IAAA,4BAAiB,EAAC,QAAQ,CAAC,CAAC;IAE5B,MAAM,IAAA,uBAAc,EAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rebuild.d.ts","sourceRoot":"","sources":["../../src/commands/rebuild.ts"],"names":[],"mappings":"AAWA,UAAU,cAAc;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AASD,wBAAgB,cAAc,CAAC,OAAO,GAAE,cAAmB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"rebuild.d.ts","sourceRoot":"","sources":["../../src/commands/rebuild.ts"],"names":[],"mappings":"AAWA,UAAU,cAAc;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AASD,wBAAgB,cAAc,CAAC,OAAO,GAAE,cAAmB,GAAG,IAAI,CAidjE;AA8BD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAQ3D"}
|