agent-working-memory 0.15.6 → 0.15.7
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/README.md +5 -4
- package/dist/cli.js +74 -74
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/README.md +1 -1
- package/plugin/bin/awm-mcp-launcher.cjs +2 -2
- package/plugin/skills/awm-memory/SKILL.md +1 -1
- package/src/cli.ts +842 -842
package/README.md
CHANGED
|
@@ -171,10 +171,11 @@ compatible, and the store is the same SQLite file before and after.
|
|
|
171
171
|
|
|
172
172
|
---
|
|
173
173
|
|
|
174
|
-
## What's new — v0.15.
|
|
174
|
+
## What's new — v0.15.7
|
|
175
175
|
|
|
176
176
|
| | |
|
|
177
177
|
|---|---|
|
|
178
|
+
| **0.15.6–7** | **Data-loss fix.** The default store used to sit inside the installed npm package, where `npm install -g` deletes it on upgrade. It is now `~/.awm/memory.db`; re-running `awm setup` copies an affected store to safety and `awm doctor` fails on it. 0.15.7 corrects the docs that still taught the old location |
|
|
178
179
|
| **0.15.x** | Runs as a **Claude Code plugin** and a **Claude Desktop extension**, both sharing one store with the CLI. Installs from npm with no GitHub access — `awm plugin` prints the two lines to paste. Every write now records which client produced it (`client=claude-code`) |
|
|
179
180
|
| **0.14.6** | `awm setup` caught up with four releases of engine changes it had silently fallen behind. Added the release checks that now block on that kind of drift |
|
|
180
181
|
| **0.14.5** | Benchmark instrument corrected: the eval had been querying as the wrong agent, so a product feature scored as a ranking failure. The real identifier baseline is **92.7%**, not 68% |
|
|
@@ -283,18 +284,18 @@ local ONNX via `@huggingface/transformers` — bge-small-en-v1.5 embeddings, ms-
|
|
|
283
284
|
flan-t5-small expansion. Node 22+.
|
|
284
285
|
|
|
285
286
|
```bash
|
|
286
|
-
npx vitest run #
|
|
287
|
+
npx vitest run # 789 tests
|
|
287
288
|
npm run bench # benchmark suites
|
|
288
289
|
npm run build:plugin # regenerate the Claude Code plugin from src/
|
|
289
290
|
npm run test:docker # clean-room install of the packed tarball
|
|
290
|
-
npm run test:linux # build + full suite on Linux (
|
|
291
|
+
npm run test:linux # build + full suite on Linux (789/789)
|
|
291
292
|
```
|
|
292
293
|
|
|
293
294
|
---
|
|
294
295
|
|
|
295
296
|
## Status
|
|
296
297
|
|
|
297
|
-
Active development, v0.15.
|
|
298
|
+
Active development, v0.15.7. Core retrieval, consolidation, MCP integration, hooks, task
|
|
298
299
|
management, and the HTTP API are stable and in daily production use. PGlite backend stable;
|
|
299
300
|
networked Postgres experimental.
|
|
300
301
|
|
package/dist/cli.js
CHANGED
|
@@ -39,50 +39,50 @@ catch { /* No .env file */ }
|
|
|
39
39
|
const args = process.argv.slice(2);
|
|
40
40
|
const command = args[0];
|
|
41
41
|
function printUsage() {
|
|
42
|
-
console.log(`
|
|
43
|
-
AgentWorkingMemory — Cognitive memory for AI agents
|
|
44
|
-
|
|
45
|
-
Usage:
|
|
46
|
-
awm setup [target] [options] Configure AWM for an AI CLI
|
|
42
|
+
console.log(`
|
|
43
|
+
AgentWorkingMemory — Cognitive memory for AI agents
|
|
44
|
+
|
|
45
|
+
Usage:
|
|
46
|
+
awm setup [target] [options] Configure AWM for an AI CLI
|
|
47
47
|
awm plugin Install as a Claude Code plugin (local, no GitHub)
|
|
48
|
-
awm doctor [target|--all] Validate AWM integrations
|
|
49
|
-
awm mcp Start MCP server (stdio)
|
|
50
|
-
awm serve [--port <port>] Start HTTP API server
|
|
51
|
-
awm health [--port <port>] Check server health
|
|
52
|
-
awm export --db <path> [--agent <id>] [--output <file>] [--active-only]
|
|
53
|
-
Export memories to JSON
|
|
54
|
-
awm import <file> --db <path> [--remap-agent <id>] [--dedupe] [--dry-run]
|
|
55
|
-
Import memories from JSON
|
|
56
|
-
awm merge --target <db> --source <db> [--source ...]
|
|
57
|
-
[--remap uuid=name] [--remap-all-uuids <name>]
|
|
58
|
-
[--dedupe] [--dry-run] Merge multiple memory DBs
|
|
59
|
-
awm migrate --from <sqlite.db> --to <pglite-dir> [--dry-run] [--verbose]
|
|
60
|
-
Migrate SQLite DB to PGlite
|
|
61
|
-
|
|
62
|
-
Setup targets:
|
|
63
|
-
claude-code (default) .mcp.json + CLAUDE.md + hooks
|
|
64
|
-
codex ~/.codex/config.toml + AGENTS.md
|
|
65
|
-
cursor .cursor/mcp.json + .cursorrules
|
|
66
|
-
http Connection info for HTTP API
|
|
67
|
-
|
|
68
|
-
Setup options:
|
|
69
|
-
--global Use global scope (recommended for claude-code)
|
|
70
|
-
--agent-id <id> Agent identifier (default: project name)
|
|
71
|
-
--db-path <path> Database path (default:
|
|
72
|
-
--no-instructions Skip instruction file (CLAUDE.md, AGENTS.md, etc.)
|
|
73
|
-
--no-claude-md Alias for --no-instructions
|
|
74
|
-
--no-hooks Skip hook installation
|
|
75
|
-
--no-prime Skip the UserPromptSubmit prime hook (auto-inject memories per prompt)
|
|
76
|
-
--hook-port PORT Preferred sidecar port (default: 8401; each session walks upward when busy)
|
|
77
|
-
--hook-port-range N Ports to try upward from --hook-port (default: 10)
|
|
78
|
-
Re-running setup keeps your existing agent id, db path, port and any env you added.
|
|
79
|
-
|
|
80
|
-
Examples:
|
|
81
|
-
awm setup --global Claude Code, global (recommended)
|
|
82
|
-
awm setup codex Codex CLI
|
|
83
|
-
awm setup cursor Cursor IDE
|
|
84
|
-
awm setup http Generic HTTP integration
|
|
85
|
-
awm doctor --all Check all configured targets
|
|
48
|
+
awm doctor [target|--all] Validate AWM integrations
|
|
49
|
+
awm mcp Start MCP server (stdio)
|
|
50
|
+
awm serve [--port <port>] Start HTTP API server
|
|
51
|
+
awm health [--port <port>] Check server health
|
|
52
|
+
awm export --db <path> [--agent <id>] [--output <file>] [--active-only]
|
|
53
|
+
Export memories to JSON
|
|
54
|
+
awm import <file> --db <path> [--remap-agent <id>] [--dedupe] [--dry-run]
|
|
55
|
+
Import memories from JSON
|
|
56
|
+
awm merge --target <db> --source <db> [--source ...]
|
|
57
|
+
[--remap uuid=name] [--remap-all-uuids <name>]
|
|
58
|
+
[--dedupe] [--dry-run] Merge multiple memory DBs
|
|
59
|
+
awm migrate --from <sqlite.db> --to <pglite-dir> [--dry-run] [--verbose]
|
|
60
|
+
Migrate SQLite DB to PGlite
|
|
61
|
+
|
|
62
|
+
Setup targets:
|
|
63
|
+
claude-code (default) .mcp.json + CLAUDE.md + hooks
|
|
64
|
+
codex ~/.codex/config.toml + AGENTS.md
|
|
65
|
+
cursor .cursor/mcp.json + .cursorrules
|
|
66
|
+
http Connection info for HTTP API
|
|
67
|
+
|
|
68
|
+
Setup options:
|
|
69
|
+
--global Use global scope (recommended for claude-code)
|
|
70
|
+
--agent-id <id> Agent identifier (default: project name)
|
|
71
|
+
--db-path <path> Database path (default: ~/.awm/memory.db)
|
|
72
|
+
--no-instructions Skip instruction file (CLAUDE.md, AGENTS.md, etc.)
|
|
73
|
+
--no-claude-md Alias for --no-instructions
|
|
74
|
+
--no-hooks Skip hook installation
|
|
75
|
+
--no-prime Skip the UserPromptSubmit prime hook (auto-inject memories per prompt)
|
|
76
|
+
--hook-port PORT Preferred sidecar port (default: 8401; each session walks upward when busy)
|
|
77
|
+
--hook-port-range N Ports to try upward from --hook-port (default: 10)
|
|
78
|
+
Re-running setup keeps your existing agent id, db path, port and any env you added.
|
|
79
|
+
|
|
80
|
+
Examples:
|
|
81
|
+
awm setup --global Claude Code, global (recommended)
|
|
82
|
+
awm setup codex Codex CLI
|
|
83
|
+
awm setup cursor Cursor IDE
|
|
84
|
+
awm setup http Generic HTTP integration
|
|
85
|
+
awm doctor --all Check all configured targets
|
|
86
86
|
`.trim());
|
|
87
87
|
}
|
|
88
88
|
// ─── SETUP ──────────────────────────────────────
|
|
@@ -169,20 +169,20 @@ async function setup() {
|
|
|
169
169
|
The file was COPIED, not moved: the original is still there if you want to check it.
|
|
170
170
|
Once you are satisfied, the old copy can be deleted.`);
|
|
171
171
|
}
|
|
172
|
-
console.log(`
|
|
173
|
-
AWM configured for ${adapter.name}${isGlobal ? ' (global)' : ''}
|
|
174
|
-
|
|
175
|
-
Agent ID: ${ctx.agentId}
|
|
176
|
-
DB path: ${ctx.dbPath}
|
|
177
|
-
${configAction}
|
|
178
|
-
${instructionsAction}
|
|
179
|
-
${hooksAction}
|
|
180
|
-
${skillAction}
|
|
181
|
-
|
|
182
|
-
Next steps:
|
|
183
|
-
1. Restart ${adapter.name} to pick up the MCP server
|
|
184
|
-
2. Memory tools will appear automatically${adapter.id === 'codex' ? ' (verify with /mcp)' : ''}
|
|
185
|
-
3. \`awm doctor\` checks the install and lists the live sidecars
|
|
172
|
+
console.log(`
|
|
173
|
+
AWM configured for ${adapter.name}${isGlobal ? ' (global)' : ''}
|
|
174
|
+
|
|
175
|
+
Agent ID: ${ctx.agentId}
|
|
176
|
+
DB path: ${ctx.dbPath}
|
|
177
|
+
${configAction}
|
|
178
|
+
${instructionsAction}
|
|
179
|
+
${hooksAction}
|
|
180
|
+
${skillAction}
|
|
181
|
+
|
|
182
|
+
Next steps:
|
|
183
|
+
1. Restart ${adapter.name} to pick up the MCP server
|
|
184
|
+
2. Memory tools will appear automatically${adapter.id === 'codex' ? ' (verify with /mcp)' : ''}
|
|
185
|
+
3. \`awm doctor\` checks the install and lists the live sidecars
|
|
186
186
|
`.trim());
|
|
187
187
|
}
|
|
188
188
|
// ─── PLUGIN ──────────────────────────────────────
|
|
@@ -683,10 +683,10 @@ async function mergeMemories() {
|
|
|
683
683
|
existingHashes.add(contentHash(row.concept, row.content));
|
|
684
684
|
console.log(`Target has ${existingHashes.size} unique memories (for dedupe)\n`);
|
|
685
685
|
}
|
|
686
|
-
const insertAssoc = targetDb.prepare(`
|
|
687
|
-
INSERT OR IGNORE INTO associations (id, from_engram_id, to_engram_id, weight, confidence, type,
|
|
688
|
-
activation_count, created_at, last_activated)
|
|
689
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
686
|
+
const insertAssoc = targetDb.prepare(`
|
|
687
|
+
INSERT OR IGNORE INTO associations (id, from_engram_id, to_engram_id, weight, confidence, type,
|
|
688
|
+
activation_count, created_at, last_activated)
|
|
689
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
690
690
|
`);
|
|
691
691
|
let totalMemories = 0, totalAssociations = 0, totalSkipped = 0;
|
|
692
692
|
try {
|
|
@@ -899,19 +899,19 @@ function onboardCmd() {
|
|
|
899
899
|
if (!agentId)
|
|
900
900
|
agentId = project;
|
|
901
901
|
const { packPath, reviewPath, count } = runOnboard({ docs, repo, project, agentId, purpose, outDir });
|
|
902
|
-
console.log(`
|
|
903
|
-
AWM onboard — warm-start pack for "${project}"
|
|
904
|
-
|
|
905
|
-
Scanned: ${docs.join(', ')}${repo ? ` (+repo ${repo})` : ''}
|
|
906
|
-
Extracted: ${count} candidate memories (agent: ${agentId})
|
|
907
|
-
|
|
908
|
-
Review: ${reviewPath}
|
|
909
|
-
Pack: ${packPath}
|
|
910
|
-
|
|
911
|
-
Next:
|
|
912
|
-
1. Edit the review file / pack as needed (delete noise, answer the interview questions).
|
|
913
|
-
2. Load it: awm import ${packPath} --db <path> --dedupe
|
|
914
|
-
(embeddings backfill on the first consolidation — recall is warm immediately after)
|
|
902
|
+
console.log(`
|
|
903
|
+
AWM onboard — warm-start pack for "${project}"
|
|
904
|
+
|
|
905
|
+
Scanned: ${docs.join(', ')}${repo ? ` (+repo ${repo})` : ''}
|
|
906
|
+
Extracted: ${count} candidate memories (agent: ${agentId})
|
|
907
|
+
|
|
908
|
+
Review: ${reviewPath}
|
|
909
|
+
Pack: ${packPath}
|
|
910
|
+
|
|
911
|
+
Next:
|
|
912
|
+
1. Edit the review file / pack as needed (delete noise, answer the interview questions).
|
|
913
|
+
2. Load it: awm import ${packPath} --db <path> --dedupe
|
|
914
|
+
(embeddings backfill on the first consolidation — recall is warm immediately after)
|
|
915
915
|
`.trimEnd());
|
|
916
916
|
}
|
|
917
917
|
// ─── Dispatch ──────────────────────────────────────
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-working-memory",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.7",
|
|
4
4
|
"description": "Persistent, local-first memory for AI agents. Selective by design: filters what's worth keeping, links what's related, and says nothing when it doesn't know. SQLite + ONNX, no cloud, no API keys.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai-agents",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "awm",
|
|
3
3
|
"displayName": "Agent Working Memory",
|
|
4
|
-
"version": "0.15.
|
|
4
|
+
"version": "0.15.7",
|
|
5
5
|
"description": "Persistent, local-first memory for AI agents. Selective by design: filters what's worth keeping, links what's related, and says nothing when it doesn't know. SQLite + ONNX, no cloud, no API keys.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Robert Winter"
|
package/plugin/README.md
CHANGED
|
@@ -22,7 +22,7 @@ The launcher defaults `AWM_DB_PATH` to `~/.awm/memory.db` — **the same file
|
|
|
22
22
|
than quietly starting an empty one. Set `AWM_DB_PATH` yourself to override.
|
|
23
23
|
|
|
24
24
|
It prefers an installed copy of the package (global, or a local `node_modules`) and falls
|
|
25
|
-
back to `npx -p agent-working-memory@0.15.
|
|
25
|
+
back to `npx -p agent-working-memory@0.15.7`. The npx path rebuilds
|
|
26
26
|
`better-sqlite3` on a cold cache, which is slow enough to look like a hang, so a real
|
|
27
27
|
install is worth having:
|
|
28
28
|
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
//
|
|
7
7
|
// This is a REAL source file, not a string inside the generator, because it is real code:
|
|
8
8
|
// it gets syntax-checked, linted and tested like everything else. `npm run build:plugin`
|
|
9
|
-
// copies it to plugin/bin/ and substitutes 0.15.
|
|
9
|
+
// copies it to plugin/bin/ and substitutes 0.15.7.
|
|
10
10
|
//
|
|
11
11
|
// Two jobs a bare `mcpServers` entry in plugin.json cannot do:
|
|
12
12
|
//
|
|
@@ -95,7 +95,7 @@ if (found) {
|
|
|
95
95
|
const isWin = process.platform === 'win32';
|
|
96
96
|
const child = spawn(
|
|
97
97
|
isWin ? 'npx.cmd' : 'npx',
|
|
98
|
-
['-y', '-p', 'agent-working-memory@0.15.
|
|
98
|
+
['-y', '-p', 'agent-working-memory@0.15.7', 'awm', 'mcp'],
|
|
99
99
|
{ stdio: 'inherit', env: process.env, shell: isWin }
|
|
100
100
|
);
|
|
101
101
|
child.on('error', (e) => {
|
|
@@ -10,7 +10,7 @@ description: >-
|
|
|
10
10
|
|
|
11
11
|
# Agent Working Memory
|
|
12
12
|
|
|
13
|
-
Generated from `src/adapters/common.ts` (AWM v0.15.
|
|
13
|
+
Generated from `src/adapters/common.ts` (AWM v0.15.7) — the same guidance
|
|
14
14
|
`awm setup` writes into CLAUDE.md. Do not edit here; edit the source and re-run
|
|
15
15
|
`npm run build:plugin`.
|
|
16
16
|
|