agent-working-memory 0.14.5 → 0.15.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.
Files changed (54) hide show
  1. package/.claude-plugin/marketplace.json +17 -0
  2. package/README.md +131 -122
  3. package/dist/adapters/claude-code.d.ts +9 -0
  4. package/dist/adapters/claude-code.d.ts.map +1 -1
  5. package/dist/adapters/claude-code.js +235 -132
  6. package/dist/adapters/claude-code.js.map +1 -1
  7. package/dist/adapters/common.d.ts +47 -5
  8. package/dist/adapters/common.d.ts.map +1 -1
  9. package/dist/adapters/common.js +111 -41
  10. package/dist/adapters/common.js.map +1 -1
  11. package/dist/adapters/hook-scripts.d.ts +54 -0
  12. package/dist/adapters/hook-scripts.d.ts.map +1 -0
  13. package/dist/adapters/hook-scripts.js +340 -0
  14. package/dist/adapters/hook-scripts.js.map +1 -0
  15. package/dist/adapters/types.d.ts +13 -3
  16. package/dist/adapters/types.d.ts.map +1 -1
  17. package/dist/cli.js +74 -6
  18. package/dist/cli.js.map +1 -1
  19. package/dist/core/agent-id.d.ts +19 -0
  20. package/dist/core/agent-id.d.ts.map +1 -0
  21. package/dist/core/agent-id.js +28 -0
  22. package/dist/core/agent-id.js.map +1 -0
  23. package/dist/core/write-pipeline.js +17 -0
  24. package/dist/core/write-pipeline.js.map +1 -1
  25. package/dist/hooks/prime.d.ts +10 -4
  26. package/dist/hooks/prime.d.ts.map +1 -1
  27. package/dist/hooks/prime.js +16 -6
  28. package/dist/hooks/prime.js.map +1 -1
  29. package/dist/mcp.js +5 -12
  30. package/dist/mcp.js.map +1 -1
  31. package/dist/storage/factory.d.ts.map +1 -1
  32. package/dist/storage/factory.js +20 -8
  33. package/dist/storage/factory.js.map +1 -1
  34. package/package.json +100 -90
  35. package/plugin/.claude-plugin/plugin.json +34 -0
  36. package/plugin/README.md +36 -0
  37. package/plugin/bin/awm-mcp-launcher.cjs +109 -0
  38. package/plugin/hooks/awm-checkpoint.cjs +55 -0
  39. package/plugin/hooks/awm-db-mutation-reminder.cjs +25 -0
  40. package/plugin/hooks/awm-find-sidecar.cjs +145 -0
  41. package/plugin/hooks/awm-prime.cjs +97 -0
  42. package/plugin/hooks/hooks.json +66 -0
  43. package/plugin/skills/awm-memory/SKILL.md +445 -0
  44. package/src/adapters/claude-code.ts +224 -126
  45. package/src/adapters/common.ts +119 -42
  46. package/src/adapters/hook-scripts.ts +370 -0
  47. package/src/adapters/types.ts +14 -3
  48. package/src/cli.ts +76 -5
  49. package/src/core/agent-id.ts +28 -0
  50. package/src/core/write-pipeline.ts +18 -0
  51. package/src/hooks/prime.ts +22 -7
  52. package/src/mcp.ts +5 -11
  53. package/src/plugin/awm-mcp-launcher.cjs +109 -0
  54. package/src/storage/factory.ts +19 -7
@@ -9,6 +9,8 @@
9
9
  import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';
10
10
  import { join, dirname, basename } from 'node:path';
11
11
  import { resolveMcpCommand, homedir, AWM_INSTRUCTION_CONTENT, upsertAwmSection } from './common.js';
12
+ import { HOOK_SCRIPTS, AWM_HOOKS_VERSION, PRIME_DISABLE_FILE } from './hook-scripts.js';
13
+ import { request as httpRequest } from 'node:http';
12
14
  /**
13
15
  * DB-mutation reminder hook (PostToolUse on Bash|PowerShell).
14
16
  * Fires when a shell command runs sqlcmd/mysql/psql with mutation keywords and
@@ -17,7 +19,7 @@ import { resolveMcpCommand, homedir, AWM_INSTRUCTION_CONTENT, upsertAwmSection }
17
19
  * script INSERT broke a production upload six days later, and no recall could
18
20
  * surface a cause that was never written.
19
21
  */
20
- const DB_MUTATION_HOOK_SCRIPT = `#!/usr/bin/env node
22
+ export const DB_MUTATION_HOOK_SCRIPT = `#!/usr/bin/env node
21
23
  // AWM DB-mutation reminder hook (PostToolUse on Bash|PowerShell). Installed by awm setup.
22
24
  let raw = '';
23
25
  process.stdin.on('data', (d) => (raw += d));
@@ -43,37 +45,101 @@ process.stdin.on('end', () => {
43
45
  process.exit(0);
44
46
  });
45
47
  `;
48
+ const SERVER_NAME = 'agent-working-memory';
49
+ /** Where this adapter keeps the AWM server entry for a scope. */
50
+ function mcpJsonPathFor(isGlobal, cwd) {
51
+ // Global: ~/.mcp.json (standard MCP location, all projects)
52
+ // Project: .claude/mcp.json (Claude Code's native project scope)
53
+ return isGlobal ? join(homedir(), '.mcp.json') : join(cwd, '.claude', 'mcp.json');
54
+ }
55
+ function readJson(path) {
56
+ if (!existsSync(path))
57
+ return null;
58
+ try {
59
+ return JSON.parse(readFileSync(path, 'utf-8'));
60
+ }
61
+ catch {
62
+ return null;
63
+ }
64
+ }
65
+ /**
66
+ * Exactly the hook scripts `awm setup` installs. Used to recognise our own groups in
67
+ * settings.json so they can be replaced on a re-run.
68
+ *
69
+ * This list must stay TIGHT. It was briefly a loose `awm-*.cjs` pattern, and on a real
70
+ * install that silently deleted the owner's own `awm-dev-log.cjs` and
71
+ * `awm-recall-stamp.cjs` hooks, which merely share the prefix. Anything not installed by
72
+ * this adapter belongs to the user.
73
+ */
74
+ const OWNED_HOOK_FILES = [
75
+ ...HOOK_SCRIPTS.map(h => h.file),
76
+ 'awm-db-mutation-reminder.cjs',
77
+ ];
78
+ /** True for a settings.json hook group that `awm setup` wrote, in any version. */
79
+ function isAwmHookGroup(group) {
80
+ const text = JSON.stringify(group ?? {});
81
+ return OWNED_HOOK_FILES.some(f => text.includes(f)) // 0.14.6 scripts
82
+ || /curl[^"]*\/hooks\/checkpoint/.test(text) // pre-0.14.6 inline curl
83
+ || text.includes('MEMORY: (1) Did you learn'); // the Stop reminder
84
+ }
85
+ /** Merge one hook group for `event`: drop every AWM-owned group, keep the user's, append ours. */
86
+ function setHookGroup(settings, event, group) {
87
+ const others = (settings.hooks[event] || []).filter((g) => !isAwmHookGroup(g));
88
+ settings.hooks[event] = group ? [...others, group] : others;
89
+ if (settings.hooks[event].length === 0)
90
+ delete settings.hooks[event];
91
+ }
92
+ /** GET /health on one sidecar port; null when nothing answers or it is not a sidecar. */
93
+ function probeSidecar(port, timeoutMs = 400) {
94
+ return new Promise(resolve => {
95
+ const req = httpRequest({ host: '127.0.0.1', port, path: '/health', method: 'GET', timeout: timeoutMs }, res => {
96
+ let data = '';
97
+ res.on('data', c => { data += c; });
98
+ res.on('end', () => {
99
+ try {
100
+ const j = JSON.parse(data);
101
+ resolve(j && j.sidecar ? { port, agentId: j.agentId ?? null, version: j.version ?? '0.0.0', pid: j.pid ?? null } : null);
102
+ }
103
+ catch {
104
+ resolve(null);
105
+ }
106
+ });
107
+ });
108
+ req.on('error', () => resolve(null));
109
+ req.on('timeout', () => { req.destroy(); resolve(null); });
110
+ req.end();
111
+ });
112
+ }
46
113
  const adapter = {
47
114
  id: 'claude-code',
48
115
  name: 'Claude Code',
49
116
  supportsProjectScope: true,
50
117
  supportsGlobalScope: true,
118
+ readExistingEnv(isGlobal, cwd) {
119
+ const entry = readJson(mcpJsonPathFor(isGlobal, cwd))?.mcpServers?.[SERVER_NAME];
120
+ return entry?.env && typeof entry.env === 'object' ? { ...entry.env } : null;
121
+ },
51
122
  writeMcpConfig(ctx) {
52
123
  const mcpCmd = resolveMcpCommand(ctx);
53
- const mcpConfig = { ...mcpCmd, env: ctx.envVars };
54
- // Global: ~/.mcp.json (standard MCP location, all projects)
55
- // Project: .claude/mcp.json (Claude Code's native project scope)
56
- const mcpJsonPath = ctx.isGlobal
57
- ? join(homedir(), '.mcp.json')
58
- : join(ctx.cwd, '.claude', 'mcp.json');
124
+ // ctx.envVars already layers recommended defaults < the user's existing env < owned keys
125
+ // (buildEnvVars). Only the env and the command are ours; anything else the user put on
126
+ // the entry (e.g. a `type`, a `cwd`) is carried across.
127
+ const mcpJsonPath = mcpJsonPathFor(ctx.isGlobal, ctx.cwd);
59
128
  const mcpDir = dirname(mcpJsonPath);
60
- if (!existsSync(mcpDir)) {
129
+ if (!existsSync(mcpDir))
61
130
  mkdirSync(mcpDir, { recursive: true });
62
- }
63
- let existing = {};
64
- if (existsSync(mcpJsonPath)) {
65
- try {
66
- existing = JSON.parse(readFileSync(mcpJsonPath, 'utf-8'));
67
- }
68
- catch {
69
- existing = {};
70
- }
71
- }
131
+ const existing = readJson(mcpJsonPath) ?? {};
72
132
  if (!existing.mcpServers)
73
133
  existing.mcpServers = {};
74
- existing.mcpServers['agent-working-memory'] = mcpConfig;
134
+ const prior = existing.mcpServers[SERVER_NAME] ?? {};
135
+ const priorEnv = prior.env ?? {};
136
+ const preserved = Object.keys(priorEnv).filter(k => ctx.envVars[k] === priorEnv[k]);
137
+ existing.mcpServers[SERVER_NAME] = { ...prior, ...mcpCmd, env: ctx.envVars };
75
138
  writeFileSync(mcpJsonPath, JSON.stringify(existing, null, 2) + '\n');
76
- return `MCP config: ${mcpJsonPath}`;
139
+ const kept = Object.keys(priorEnv).length
140
+ ? ` (${preserved.length} of ${Object.keys(priorEnv).length} existing env values carried over)`
141
+ : '';
142
+ return `MCP config: ${mcpJsonPath}${kept}`;
77
143
  },
78
144
  writeInstructions(ctx, skip) {
79
145
  const claudeMdPath = ctx.isGlobal
@@ -88,122 +154,111 @@ const adapter = {
88
154
  if (skip)
89
155
  return 'Hooks: skipped (--no-hooks)';
90
156
  const settingsPath = join(homedir(), '.claude', 'settings.json');
91
- let settings = {};
92
- if (existsSync(settingsPath)) {
93
- try {
94
- settings = JSON.parse(readFileSync(settingsPath, 'utf-8'));
95
- }
96
- catch {
97
- settings = {};
98
- }
99
- }
157
+ const settings = readJson(settingsPath) ?? {};
100
158
  if (!settings.hooks)
101
159
  settings.hooks = {};
102
- const hookUrl = `http://127.0.0.1:${ctx.hookPort}/hooks/checkpoint`;
103
- // Stop — remind Claude to write/recall/switch tasks
104
- settings.hooks.Stop = [{
105
- matcher: '',
106
- hooks: [{
107
- type: 'command',
108
- command: 'echo "MEMORY: (1) Did you learn anything new? Call memory_write. (2) Are you about to work on a topic you might have prior knowledge about? Call memory_recall. (3) Switching tasks? Call memory_task_begin."',
109
- timeout: 5,
110
- async: true,
111
- }],
112
- }];
113
- // Multi-port fallback for separate memory pools
114
- const altPort = ctx.hookPort === '8401' ? '8402' : '8401';
115
- const hookUrlAlt = `http://127.0.0.1:${altPort}/hooks/checkpoint`;
116
- const buildHookCmd = (event, maxTime) => {
117
- const primary = `curl -sf -X POST ${hookUrl} -H "Content-Type: application/json" -H "Authorization: Bearer ${ctx.hookSecret}" -d "{\\"hook_event_name\\":\\"${event}\\"}" --max-time ${maxTime}`;
118
- const fallback = `curl -sf -X POST ${hookUrlAlt} -H "Content-Type: application/json" -H "Authorization: Bearer ${ctx.hookSecret}" -d "{\\"hook_event_name\\":\\"${event}\\"}" --max-time ${maxTime}`;
119
- return `${primary} || ${fallback}`;
120
- };
121
- // PreCompact — auto-checkpoint before context compaction
122
- settings.hooks.PreCompact = [{
123
- matcher: '',
124
- hooks: [{
125
- type: 'command',
126
- command: buildHookCmd('PreCompact', 5),
127
- timeout: 10,
128
- }],
129
- }];
130
- // SessionEnd — auto-checkpoint on session close
131
- settings.hooks.SessionEnd = [{
132
- matcher: '',
133
- hooks: [{
134
- type: 'command',
135
- command: buildHookCmd('SessionEnd', 2),
136
- timeout: 5,
137
- }],
138
- }];
139
- // PostToolUse — DB-mutation reminder: a production data change is not
140
- // complete until it is memory_written. Deploy the script, then merge the
141
- // hook entry (preserve any unrelated PostToolUse groups the user has).
160
+ // 0.14.6: hooks are scripts that resolve the sidecar, the agent and the secret at run
161
+ // time (see hook-scripts.ts). Nothing about ports or secrets is baked into settings.json.
142
162
  const hooksDir = join(homedir(), '.claude', 'hooks');
143
- if (!existsSync(hooksDir)) {
163
+ if (!existsSync(hooksDir))
144
164
  mkdirSync(hooksDir, { recursive: true });
165
+ for (const { file, source } of HOOK_SCRIPTS) {
166
+ writeFileSync(join(hooksDir, file), source);
145
167
  }
168
+ const record = {
169
+ version: AWM_HOOKS_VERSION,
170
+ agentId: ctx.agentId,
171
+ dbPath: ctx.envVars.AWM_DB_PATH,
172
+ secretPath: join(dirname(ctx.dbPath), '.awm-hook-secret').replace(/\\/g, '/'),
173
+ hookPort: ctx.hookPort,
174
+ hookPortRange: ctx.hookPortRange,
175
+ installedAt: new Date().toISOString(),
176
+ };
177
+ writeFileSync(join(hooksDir, 'awm-hooks.json'), JSON.stringify(record, null, 2) + '\n');
178
+ const script = (file) => `node "${join(hooksDir, file).replace(/\\/g, '/')}"`;
179
+ // Stop — remind Claude to write/recall/switch tasks
180
+ setHookGroup(settings, 'Stop', {
181
+ matcher: '',
182
+ hooks: [{
183
+ type: 'command',
184
+ command: 'echo "MEMORY: (1) Did you learn anything new? Call memory_write. (2) Are you about to work on a topic you might have prior knowledge about? Call memory_recall. (3) Switching tasks? Call memory_task_begin."',
185
+ timeout: 5,
186
+ async: true,
187
+ }],
188
+ });
189
+ // PreCompact — auto-checkpoint before context compaction
190
+ setHookGroup(settings, 'PreCompact', {
191
+ matcher: '',
192
+ hooks: [{ type: 'command', command: script('awm-checkpoint.cjs'), timeout: 10 }],
193
+ });
194
+ // SessionEnd — auto-checkpoint on session close (+ consolidation in the sidecar)
195
+ setHookGroup(settings, 'SessionEnd', {
196
+ matcher: '',
197
+ hooks: [{ type: 'command', command: script('awm-checkpoint.cjs'), timeout: 8 }],
198
+ });
199
+ // UserPromptSubmit — PRIME: inject relevant memories, or nothing (0.14.6)
200
+ setHookGroup(settings, 'UserPromptSubmit', ctx.installPrime ? {
201
+ matcher: '',
202
+ hooks: [{ type: 'command', command: script('awm-prime.cjs'), timeout: 6 }],
203
+ } : null);
204
+ // PostToolUse — DB-mutation reminder: a production data change is not
205
+ // complete until it is memory_written.
146
206
  const mutationHookPath = join(hooksDir, 'awm-db-mutation-reminder.cjs');
147
207
  writeFileSync(mutationHookPath, DB_MUTATION_HOOK_SCRIPT);
148
- const mutationHookCmd = `node "${mutationHookPath.replace(/\\/g, '/')}"`;
149
- const otherPostToolUse = (settings.hooks.PostToolUse || []).filter((g) => !JSON.stringify(g).includes('awm-db-mutation-reminder'));
150
- settings.hooks.PostToolUse = [
151
- ...otherPostToolUse,
152
- {
153
- matcher: 'Bash|PowerShell',
154
- hooks: [{
155
- type: 'command',
156
- command: mutationHookCmd,
157
- timeout: 10,
158
- }],
159
- },
160
- ];
208
+ setHookGroup(settings, 'PostToolUse', {
209
+ matcher: 'Bash|PowerShell',
210
+ hooks: [{ type: 'command', command: script('awm-db-mutation-reminder.cjs'), timeout: 10 }],
211
+ });
161
212
  const settingsDir = dirname(settingsPath);
162
- if (!existsSync(settingsDir)) {
213
+ if (!existsSync(settingsDir))
163
214
  mkdirSync(settingsDir, { recursive: true });
164
- }
165
215
  writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n');
166
- return `Hooks: Stop + PreCompact + SessionEnd (port ${ctx.hookPort}) + PostToolUse DB-mutation reminder`;
216
+ const lastPort = Number(ctx.hookPort) + Number(ctx.hookPortRange) - 1;
217
+ const primeNote = ctx.installPrime
218
+ ? `UserPromptSubmit prime (off switch: create ${join(hooksDir, PRIME_DISABLE_FILE).replace(/\\/g, '/')})`
219
+ : 'prime skipped (--no-prime)';
220
+ return `Hooks: Stop + PreCompact/SessionEnd checkpoint + ${primeNote} + PostToolUse DB-mutation reminder\n` +
221
+ ` scripts in ${hooksDir.replace(/\\/g, '/')} find this session's sidecar on ports ${ctx.hookPort}–${lastPort} at run time`;
167
222
  },
168
- diagnose(ctx) {
223
+ async diagnose(ctx) {
169
224
  const results = [];
225
+ const rerun = `Re-run: awm setup claude-code${ctx.isGlobal ? ' --global' : ''}`;
170
226
  // Check MCP config — Claude Code reads from both locations, check all
171
227
  const globalPath = join(homedir(), '.mcp.json');
172
228
  const projectPath = join(ctx.cwd, '.claude', 'mcp.json');
173
229
  const candidates = [projectPath, globalPath];
174
230
  let foundConfig = false;
231
+ let configuredEnv = {};
175
232
  for (const mcpJsonPath of candidates) {
176
- if (!existsSync(mcpJsonPath))
233
+ const entry = readJson(mcpJsonPath)?.mcpServers?.[SERVER_NAME];
234
+ if (!entry)
177
235
  continue;
178
- try {
179
- const config = JSON.parse(readFileSync(mcpJsonPath, 'utf-8'));
180
- if (config.mcpServers?.['agent-working-memory']) {
181
- results.push({ check: 'MCP config', status: 'ok', message: `AWM registered in ${mcpJsonPath}` });
182
- foundConfig = true;
183
- break;
184
- }
236
+ configuredEnv = entry.env ?? {};
237
+ const agentNote = configuredEnv.AWM_AGENT_ID
238
+ ? ` (agent ${configuredEnv.AWM_AGENT_ID})`
239
+ : ' (no AWM_AGENT_ID — the server derives it from the directory)';
240
+ results.push({ check: 'MCP config', status: 'ok', message: `AWM registered in ${mcpJsonPath}${agentNote}` });
241
+ const missing = ['AWM_RERANK2', 'AWM_RERANK_WINDOW', 'AWM_RERANK_TAGS'].filter(k => !(k in configuredEnv));
242
+ if (missing.length) {
243
+ results.push({
244
+ check: 'Recommended env',
245
+ status: 'warn',
246
+ message: `not set: ${missing.join(', ')} (the measured-good retrieval configuration)`,
247
+ fix: `${rerun} — adds them; every other env value you have is kept`,
248
+ });
185
249
  }
186
- catch { /* not valid JSON, skip */ }
250
+ foundConfig = true;
251
+ break;
187
252
  }
188
253
  if (!foundConfig) {
189
- results.push({
190
- check: 'MCP config',
191
- status: 'fail',
192
- message: 'No AWM MCP config found',
193
- fix: `Run: awm setup claude-code${ctx.isGlobal ? ' --global' : ''}`,
194
- });
254
+ results.push({ check: 'MCP config', status: 'fail', message: 'No AWM MCP config found', fix: `Run: awm setup claude-code${ctx.isGlobal ? ' --global' : ''}` });
195
255
  }
196
256
  // Check MCP entrypoint
197
257
  if (ctx.hasDist) {
198
258
  results.push({ check: 'MCP entrypoint', status: 'ok', message: `dist/mcp.js exists` });
199
259
  }
200
260
  else {
201
- results.push({
202
- check: 'MCP entrypoint',
203
- status: 'warn',
204
- message: 'dist/mcp.js not found — using dev mode (npx tsx)',
205
- fix: 'Run: npm run build',
206
- });
261
+ results.push({ check: 'MCP entrypoint', status: 'warn', message: 'dist/mcp.js not found — using dev mode (npx tsx)', fix: 'Run: npm run build' });
207
262
  }
208
263
  // Check database
209
264
  if (existsSync(ctx.dbPath)) {
@@ -219,43 +274,91 @@ const adapter = {
219
274
  if (existsSync(claudeMdPath)) {
220
275
  const content = readFileSync(claudeMdPath, 'utf-8');
221
276
  if (content.includes('## Memory (AWM)')) {
222
- results.push({ check: 'Instructions', status: 'ok', message: `CLAUDE.md has AWM section` });
223
- }
224
- else {
277
+ const marked = content.includes('AWM:GENERATED:BEGIN');
225
278
  results.push({
226
279
  check: 'Instructions',
227
- status: 'warn',
228
- message: `CLAUDE.md exists but missing AWM section`,
229
- fix: `Run: awm setup claude-code${ctx.isGlobal ? ' --global' : ''}`,
280
+ status: 'ok',
281
+ message: `CLAUDE.md has AWM section${marked ? '' : ' (hand-maintained, predates generated markers — awm setup leaves it alone)'}`,
230
282
  });
231
283
  }
284
+ else {
285
+ results.push({ check: 'Instructions', status: 'warn', message: `CLAUDE.md exists but missing AWM section`, fix: rerun });
286
+ }
232
287
  }
233
288
  else {
234
289
  results.push({ check: 'Instructions', status: 'warn', message: `CLAUDE.md not found` });
235
290
  }
236
- // Check hooks
291
+ // Check hooks — scripts present and current, settings pointing at them, no legacy curl
292
+ const hooksDir = join(homedir(), '.claude', 'hooks');
237
293
  const settingsPath = join(homedir(), '.claude', 'settings.json');
238
- if (existsSync(settingsPath)) {
239
- try {
240
- const settings = JSON.parse(readFileSync(settingsPath, 'utf-8'));
241
- const hasHooks = settings.hooks?.PreCompact && settings.hooks?.SessionEnd;
242
- const hasMutationHook = JSON.stringify(settings.hooks?.PostToolUse || []).includes('awm-db-mutation-reminder');
243
- if (hasHooks && hasMutationHook) {
244
- results.push({ check: 'Hooks', status: 'ok', message: 'PreCompact + SessionEnd + DB-mutation reminder configured' });
245
- }
246
- else if (hasHooks) {
247
- results.push({ check: 'Hooks', status: 'warn', message: 'Checkpoint hooks ok; DB-mutation reminder missing (re-run awm setup)' });
248
- }
249
- else {
250
- results.push({ check: 'Hooks', status: 'warn', message: 'Hooks partially configured' });
251
- }
294
+ const settings = readJson(settingsPath);
295
+ if (!settings) {
296
+ results.push({
297
+ check: 'Hooks',
298
+ status: 'warn',
299
+ message: existsSync(settingsPath) ? 'settings.json is not valid JSON' : 'No hooks configured (auto-checkpoint and prime disabled)',
300
+ fix: rerun,
301
+ });
302
+ }
303
+ else {
304
+ const hooksText = JSON.stringify(settings.hooks ?? {});
305
+ const has = (ev, needle) => JSON.stringify(settings.hooks?.[ev] ?? []).includes(needle);
306
+ const legacyCurl = /curl[^"]*\/hooks\/checkpoint/.test(hooksText);
307
+ const record = readJson(join(hooksDir, 'awm-hooks.json'));
308
+ const scriptsPresent = HOOK_SCRIPTS.every(h => existsSync(join(hooksDir, h.file)));
309
+ const checkpointWired = has('PreCompact', 'awm-checkpoint.cjs') && has('SessionEnd', 'awm-checkpoint.cjs');
310
+ const primeWired = has('UserPromptSubmit', 'awm-prime.cjs');
311
+ const primeDisabled = existsSync(join(hooksDir, PRIME_DISABLE_FILE));
312
+ const mutationWired = has('PostToolUse', 'awm-db-mutation-reminder');
313
+ if (legacyCurl || !scriptsPresent || !checkpointWired) {
314
+ results.push({
315
+ check: 'Hooks',
316
+ status: 'warn',
317
+ message: legacyCurl
318
+ ? 'checkpoint hooks are the pre-0.14.6 inline curl (fixed port 8401/8402, secret baked into settings.json)'
319
+ : !scriptsPresent ? 'hook scripts missing from ~/.claude/hooks' : 'checkpoint hooks not wired to awm-checkpoint.cjs',
320
+ fix: rerun,
321
+ });
322
+ }
323
+ else if (record && record.version !== AWM_HOOKS_VERSION) {
324
+ results.push({ check: 'Hooks', status: 'warn', message: `hook scripts v${record.version}; current is v${AWM_HOOKS_VERSION}`, fix: rerun });
252
325
  }
253
- catch {
254
- results.push({ check: 'Hooks', status: 'warn', message: 'settings.json is not valid JSON' });
326
+ else {
327
+ results.push({ check: 'Hooks', status: 'ok', message: `PreCompact + SessionEnd checkpoint via awm-checkpoint.cjs (hooks v${record?.version ?? AWM_HOOKS_VERSION})` });
328
+ }
329
+ if (!primeWired) {
330
+ results.push({ check: 'Prime hook', status: 'warn', message: 'not installed — memory reaches the agent only when it chooses to call memory_recall', fix: `${rerun} (without --no-prime)` });
331
+ }
332
+ else if (primeDisabled) {
333
+ results.push({ check: 'Prime hook', status: 'warn', message: `installed but OFF (${PRIME_DISABLE_FILE} present)`, fix: `Delete ${join(hooksDir, PRIME_DISABLE_FILE)} to turn it on` });
334
+ }
335
+ else {
336
+ results.push({ check: 'Prime hook', status: 'ok', message: 'UserPromptSubmit → awm-prime.cjs (memories injected per prompt when confident)' });
337
+ }
338
+ if (!mutationWired) {
339
+ results.push({ check: 'DB-mutation reminder', status: 'warn', message: 'PostToolUse reminder missing', fix: rerun });
255
340
  }
256
341
  }
342
+ // Live sidecars — the thing the hooks actually talk to
343
+ const basePort = parseInt(configuredEnv.AWM_HOOK_PORT ?? ctx.hookPort, 10) || 8401;
344
+ const range = Math.max(1, parseInt(configuredEnv.AWM_HOOK_PORT_RANGE ?? ctx.hookPortRange, 10) || 10);
345
+ const probes = await Promise.all(Array.from({ length: range }, (_, i) => probeSidecar(basePort + i)));
346
+ const live = probes.filter((s) => s !== null);
347
+ if (live.length === 0) {
348
+ results.push({ check: 'Sidecars', status: 'warn', message: `none listening on ${basePort}–${basePort + range - 1} (normal when no Claude Code session is open)` });
349
+ }
257
350
  else {
258
- results.push({ check: 'Hooks', status: 'warn', message: 'No hooks configured (auto-checkpoint disabled)' });
351
+ const summary = live.map(s => `${s.port}=${s.agentId ?? '?'}@${s.version}${s.pid ? ` pid ${s.pid}` : ''}`).join(', ');
352
+ results.push({ check: 'Sidecars', status: 'ok', message: `${live.length} live: ${summary}` });
353
+ const agents = [...new Set(live.map(s => s.agentId))];
354
+ const configuredAgent = configuredEnv.AWM_AGENT_ID ?? ctx.agentId;
355
+ if (!agents.includes(configuredAgent)) {
356
+ results.push({
357
+ check: 'Sidecar match',
358
+ status: 'warn',
359
+ message: `no live sidecar serves agent "${configuredAgent}" — hooks from this directory fail open (live agents: ${agents.join(', ')})`,
360
+ });
361
+ }
259
362
  }
260
363
  return results;
261
364
  },
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/adapters/claude-code.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,sCAAsC;AAEtC;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpG;;;;;;;GAOG;AACH,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyB/B,CAAC;AAEF,MAAM,OAAO,GAAe;IAC1B,EAAE,EAAE,aAAa;IACjB,IAAI,EAAE,aAAa;IACnB,oBAAoB,EAAE,IAAI;IAC1B,mBAAmB,EAAE,IAAI;IAEzB,cAAc,CAAC,GAAiB;QAC9B,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAElD,4DAA4D;QAC5D,iEAAiE;QACjE,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ;YAC9B,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC;YAC9B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAEzC,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,QAAQ,GAAQ,EAAE,CAAC;QACvB,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;YAC5D,CAAC;YAAC,MAAM,CAAC;gBACP,QAAQ,GAAG,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,UAAU;YAAE,QAAQ,CAAC,UAAU,GAAG,EAAE,CAAC;QAEnD,QAAQ,CAAC,UAAU,CAAC,sBAAsB,CAAC,GAAG,SAAS,CAAC;QACxD,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACrE,OAAO,eAAe,WAAW,EAAE,CAAC;IACtC,CAAC;IAED,iBAAiB,CAAC,GAAiB,EAAE,IAAa;QAChD,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ;YAC/B,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC;YACzC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAE/B,IAAI,IAAI;YAAE,OAAO,wCAAwC,CAAC;QAE1D,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAChF,OAAO,gBAAgB,CAAC,YAAY,EAAE,uBAAuB,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,UAAU,CAAC,GAAiB,EAAE,IAAa;QACzC,IAAI,IAAI;YAAE,OAAO,6BAA6B,CAAC;QAE/C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QACjE,IAAI,QAAQ,GAAQ,EAAE,CAAC;QACvB,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7D,CAAC;YAAC,MAAM,CAAC;gBACP,QAAQ,GAAG,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,KAAK;YAAE,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;QAEzC,MAAM,OAAO,GAAG,oBAAoB,GAAG,CAAC,QAAQ,mBAAmB,CAAC;QAEpE,oDAAoD;QACpD,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;gBACrB,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,CAAC;wBACN,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,+MAA+M;wBACxN,OAAO,EAAE,CAAC;wBACV,KAAK,EAAE,IAAI;qBACZ,CAAC;aACH,CAAC,CAAC;QAEH,gDAAgD;QAChD,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1D,MAAM,UAAU,GAAG,oBAAoB,OAAO,mBAAmB,CAAC;QAClE,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,OAAe,EAAE,EAAE;YACtD,MAAM,OAAO,GAAG,oBAAoB,OAAO,kEAAkE,GAAG,CAAC,UAAU,mCAAmC,KAAK,oBAAoB,OAAO,EAAE,CAAC;YACjM,MAAM,QAAQ,GAAG,oBAAoB,UAAU,kEAAkE,GAAG,CAAC,UAAU,mCAAmC,KAAK,oBAAoB,OAAO,EAAE,CAAC;YACrM,OAAO,GAAG,OAAO,OAAO,QAAQ,EAAE,CAAC;QACrC,CAAC,CAAC;QAEF,yDAAyD;QACzD,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC;gBAC3B,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,CAAC;wBACN,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC;wBACtC,OAAO,EAAE,EAAE;qBACZ,CAAC;aACH,CAAC,CAAC;QAEH,gDAAgD;QAChD,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC;gBAC3B,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,CAAC;wBACN,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC;wBACtC,OAAO,EAAE,CAAC;qBACX,CAAC;aACH,CAAC,CAAC;QAEH,sEAAsE;QACtE,yEAAyE;QACzE,uEAAuE;QACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,EAAE,8BAA8B,CAAC,CAAC;QACxE,aAAa,CAAC,gBAAgB,EAAE,uBAAuB,CAAC,CAAC;QACzD,MAAM,eAAe,GAAG,SAAS,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC;QACzE,MAAM,gBAAgB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,MAAM,CAChE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CACpE,CAAC;QACF,QAAQ,CAAC,KAAK,CAAC,WAAW,GAAG;YAC3B,GAAG,gBAAgB;YACnB;gBACE,OAAO,EAAE,iBAAiB;gBAC1B,KAAK,EAAE,CAAC;wBACN,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,eAAe;wBACxB,OAAO,EAAE,EAAE;qBACZ,CAAC;aACH;SACF,CAAC;QAEF,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,CAAC;QACD,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAEtE,OAAO,+CAA+C,GAAG,CAAC,QAAQ,sCAAsC,CAAC;IAC3G,CAAC;IAED,QAAQ,CAAC,GAAiB;QACxB,MAAM,OAAO,GAAuB,EAAE,CAAC;QAEvC,sEAAsE;QACtE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;QAChD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAE7C,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,KAAK,MAAM,WAAW,IAAI,UAAU,EAAE,CAAC;YACrC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;gBAAE,SAAS;YACvC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC9D,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC,sBAAsB,CAAC,EAAE,CAAC;oBAChD,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,WAAW,EAAE,EAAE,CAAC,CAAC;oBACjG,WAAW,GAAG,IAAI,CAAC;oBACnB,MAAM;gBACR,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,0BAA0B,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,YAAY;gBACnB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,yBAAyB;gBAClC,GAAG,EAAE,6BAA6B,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE;aACpE,CAAC,CAAC;QACL,CAAC;QAED,uBAAuB;QACvB,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,gBAAgB;gBACvB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,kDAAkD;gBAC3D,GAAG,EAAE,oBAAoB;aAC1B,CAAC,CAAC;QACL,CAAC;QAED,iBAAiB;QACjB,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,MAAM,2CAA2C,EAAE,CAAC,CAAC;QACzH,CAAC;QAED,kBAAkB;QAClB,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ;YAC/B,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC;YACzC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC/B,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACpD,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACxC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC,CAAC;YAC9F,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC;oBACX,KAAK,EAAE,cAAc;oBACrB,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,0CAA0C;oBACnD,GAAG,EAAE,6BAA6B,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE;iBACpE,CAAC,CAAC;YACL,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,CAAC;QAC1F,CAAC;QAED,cAAc;QACd,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QACjE,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;gBACjE,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAE,UAAU,IAAI,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;gBAC1E,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;gBAC/G,IAAI,QAAQ,IAAI,eAAe,EAAE,CAAC;oBAChC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,2DAA2D,EAAE,CAAC,CAAC;gBACvH,CAAC;qBAAM,IAAI,QAAQ,EAAE,CAAC;oBACpB,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,sEAAsE,EAAE,CAAC,CAAC;gBACpI,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAC;gBAC1F,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iCAAiC,EAAE,CAAC,CAAC;YAC/F,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gDAAgD,EAAE,CAAC,CAAC;QAC9G,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/adapters/claude-code.ts"],"names":[],"mappings":"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"}
@@ -5,8 +5,31 @@ export declare function resolvePackageRoot(): string;
5
5
  export declare function resolveDbPath(packageRoot: string, explicit?: string | null): string;
6
6
  /** Read or generate the hook secret token. */
7
7
  export declare function resolveHookSecret(dbPath: string): string;
8
- /** Build environment variables for the MCP server process. */
9
- export declare function buildEnvVars(dbPath: string, agentId: string, hookPort: string, hookSecret: string, isWindows: boolean): Record<string, string>;
8
+ /**
9
+ * Retrieval settings `awm setup` turns on for a new install (0.14.6).
10
+ *
11
+ * All three ship default-off in the engine so an existing process never changes
12
+ * behaviour on upgrade, but the README has recommended them together since 0.14.0:
13
+ * second-stage rerank by the cross-encoder's own score, a 400-char rerank window
14
+ * on the densest query-term region (25% → 87.5% on long memories), and tags in the
15
+ * rerank passage (+7.4pp). A value the user already has in their config wins.
16
+ */
17
+ export declare const RECOMMENDED_ENV: Readonly<Record<string, string>>;
18
+ /** Keys `awm setup` owns outright; everything else in an existing env block is the user's. */
19
+ export declare const OWNED_ENV_KEYS: readonly ["AWM_DB_PATH", "AWM_AGENT_ID", "AWM_HOOK_PORT", "AWM_HOOK_PORT_RANGE", "AWM_HOOK_SECRET", "AWM_CLIENT"];
20
+ /**
21
+ * Build environment variables for the MCP server process.
22
+ *
23
+ * Layering, lowest to highest: recommended defaults → whatever the user's current
24
+ * entry already carries (rerank flags they tuned, AWM_WORKSPACE, backend choice…)
25
+ * → the keys setup owns. Before 0.14.6 the entry was replaced wholesale, which
26
+ * dropped hand-set flags on every re-run.
27
+ */
28
+ export declare function buildEnvVars(dbPath: string, agentId: string, hookPort: string, hookSecret: string, isWindows: boolean, opts?: {
29
+ hookPortRange?: string;
30
+ existing?: Record<string, string> | null;
31
+ client?: string;
32
+ }): Record<string, string>;
10
33
  /**
11
34
  * Resolve the MCP server command + args.
12
35
  *
@@ -17,14 +40,33 @@ export declare function resolveMcpCommand(ctx: SetupContext): {
17
40
  command: string;
18
41
  args: string[];
19
42
  };
20
- /** Build a full SetupContext from parsed CLI flags. */
43
+ /**
44
+ * Build a full SetupContext from parsed CLI flags.
45
+ *
46
+ * Precedence for every owned value: an explicit flag → the value in the entry a
47
+ * previous `awm setup` wrote (`existingEnv`) → the default. So re-running setup to
48
+ * pick up new hooks or guidance never repoints the database, renames the agent or
49
+ * moves the sidecar port underneath a working install.
50
+ *
51
+ * Global default agent id is `work` (was `claude` before 0.14.6): it matches what
52
+ * the server itself resolves to when AWM_AGENT_ID is unset (see core/agent-id.ts),
53
+ * so a config with and without the key name the same pool.
54
+ */
21
55
  export declare function buildSetupContext(opts: {
22
56
  agentId?: string;
23
57
  dbPath?: string | null;
24
58
  isGlobal: boolean;
25
- hookPort: string;
59
+ hookPort?: string;
60
+ hookPortRange?: string;
61
+ installPrime?: boolean;
62
+ existingEnv?: Record<string, string> | null;
63
+ /** Which surface this install is for — stamped onto every write as a `client=` tag. */
64
+ client?: string;
26
65
  }): SetupContext;
27
- /** Home directory. */
66
+ /**
67
+ * Home directory. `AWM_SETUP_HOME` overrides it so `awm setup` / `awm doctor` can be
68
+ * exercised against a scratch tree (tests do this; so does a cautious upgrade).
69
+ */
28
70
  export declare function homedir(): string;
29
71
  /**
30
72
  * Core AWM instruction snippet — shared across all adapters.
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/adapters/common.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAK/C,gEAAgE;AAChE,wBAAgB,kBAAkB,IAAI,MAAM,CAG3C;AAED,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAOnF;AAED,8CAA8C;AAC9C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAUxD;AAED,8DAA8D;AAC9D,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,OAAO,GACjB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOxB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,CAkBA;AAED,uDAAuD;AACvD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,YAAY,CA6Bf;AAED,sBAAsB;AACtB,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAID;;;GAGG;AACH;;;;;;;;;;;;;GAaG;AACH;;iEAEiE;AACjE,eAAO,MAAM,aAAa,QAEsD,CAAC;AACjF,eAAO,MAAM,WAAW,+BAA+B,CAAC;AAOxD,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GACtE,MAAM,CAkFR;AAED,eAAO,MAAM,uBAAuB,QAwZvB,CAAC"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/adapters/common.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C,gEAAgE;AAChE,wBAAgB,kBAAkB,IAAI,MAAM,CAG3C;AAED,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAOnF;AAED,8CAA8C;AAC9C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAUxD;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAI5D,CAAC;AAEF,8FAA8F;AAC9F,eAAO,MAAM,cAAc,mHAAoH,CAAC;AAEhJ;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,OAAO,EAClB,IAAI,GAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/F,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASxB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,CAkBA;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAC5C,uFAAuF;IACvF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,YAAY,CAoCf;AAED;;;GAGG;AACH,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAID;;;GAGG;AACH;;;;;;;;;;;;;GAaG;AACH;;iEAEiE;AACjE,eAAO,MAAM,aAAa,QAEsD,CAAC;AACjF,eAAO,MAAM,WAAW,+BAA+B,CAAC;AAOxD,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GACtE,MAAM,CAkFR;AAED,eAAO,MAAM,uBAAuB,QA8avB,CAAC"}