agent-working-memory 0.6.0 → 0.6.1
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 +15 -9
- package/dist/adapters/claude-code.d.ts +4 -0
- package/dist/adapters/claude-code.d.ts.map +1 -0
- package/dist/adapters/claude-code.js +218 -0
- package/dist/adapters/claude-code.js.map +1 -0
- package/dist/adapters/codex.d.ts +4 -0
- package/dist/adapters/codex.d.ts.map +1 -0
- package/dist/adapters/codex.js +226 -0
- package/dist/adapters/codex.js.map +1 -0
- package/dist/adapters/common.d.ts +34 -0
- package/dist/adapters/common.d.ts.map +1 -0
- package/dist/adapters/common.js +145 -0
- package/dist/adapters/common.js.map +1 -0
- package/dist/adapters/cursor.d.ts +4 -0
- package/dist/adapters/cursor.d.ts.map +1 -0
- package/dist/adapters/cursor.js +138 -0
- package/dist/adapters/cursor.js.map +1 -0
- package/dist/adapters/http.d.ts +4 -0
- package/dist/adapters/http.d.ts.map +1 -0
- package/dist/adapters/http.js +88 -0
- package/dist/adapters/http.js.map +1 -0
- package/dist/adapters/index.d.ts +7 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +21 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/types.d.ts +65 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +4 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/cli.js +104 -230
- package/dist/cli.js.map +1 -1
- package/dist/coordination/events.d.ts +59 -0
- package/dist/coordination/events.d.ts.map +1 -0
- package/dist/coordination/events.js +28 -0
- package/dist/coordination/events.js.map +1 -0
- package/dist/coordination/index.d.ts +10 -1
- package/dist/coordination/index.d.ts.map +1 -1
- package/dist/coordination/index.js +87 -3
- package/dist/coordination/index.js.map +1 -1
- package/dist/coordination/peer-decisions.d.ts +40 -0
- package/dist/coordination/peer-decisions.d.ts.map +1 -0
- package/dist/coordination/peer-decisions.js +82 -0
- package/dist/coordination/peer-decisions.js.map +1 -0
- package/dist/coordination/plugin-loader.d.ts +18 -0
- package/dist/coordination/plugin-loader.d.ts.map +1 -0
- package/dist/coordination/plugin-loader.js +55 -0
- package/dist/coordination/plugin-loader.js.map +1 -0
- package/dist/coordination/plugin.d.ts +40 -0
- package/dist/coordination/plugin.d.ts.map +1 -0
- package/dist/coordination/plugin.js +22 -0
- package/dist/coordination/plugin.js.map +1 -0
- package/dist/coordination/routes.d.ts +2 -1
- package/dist/coordination/routes.d.ts.map +1 -1
- package/dist/coordination/routes.js +899 -76
- package/dist/coordination/routes.js.map +1 -1
- package/dist/coordination/schema.d.ts.map +1 -1
- package/dist/coordination/schema.js +72 -14
- package/dist/coordination/schema.js.map +1 -1
- package/dist/coordination/schemas.d.ts +84 -3
- package/dist/coordination/schemas.d.ts.map +1 -1
- package/dist/coordination/schemas.js +71 -1
- package/dist/coordination/schemas.js.map +1 -1
- package/dist/coordination/stale.d.ts.map +1 -1
- package/dist/coordination/stale.js +2 -1
- package/dist/coordination/stale.js.map +1 -1
- package/dist/coordination/types.d.ts +252 -0
- package/dist/coordination/types.d.ts.map +1 -0
- package/dist/coordination/types.js +8 -0
- package/dist/coordination/types.js.map +1 -0
- package/dist/coordination/write-mutex.d.ts +26 -0
- package/dist/coordination/write-mutex.d.ts.map +1 -0
- package/dist/coordination/write-mutex.js +63 -0
- package/dist/coordination/write-mutex.js.map +1 -0
- package/dist/core/embeddings.d.ts +2 -0
- package/dist/core/embeddings.d.ts.map +1 -1
- package/dist/core/embeddings.js +4 -0
- package/dist/core/embeddings.js.map +1 -1
- package/dist/engine/activation.d.ts.map +1 -1
- package/dist/engine/activation.js +16 -3
- package/dist/engine/activation.js.map +1 -1
- package/dist/engine/consolidation.d.ts.map +1 -1
- package/dist/engine/consolidation.js +15 -6
- package/dist/engine/consolidation.js.map +1 -1
- package/dist/engine/retraction.d.ts +3 -1
- package/dist/engine/retraction.d.ts.map +1 -1
- package/dist/engine/retraction.js +19 -6
- package/dist/engine/retraction.js.map +1 -1
- package/dist/index.js +6 -18
- package/dist/index.js.map +1 -1
- package/dist/mcp.js +52 -3
- package/dist/mcp.js.map +1 -1
- package/dist/storage/sqlite.d.ts +6 -1
- package/dist/storage/sqlite.d.ts.map +1 -1
- package/dist/storage/sqlite.js +39 -3
- package/dist/storage/sqlite.js.map +1 -1
- package/package.json +1 -1
- package/src/adapters/claude-code.ts +234 -0
- package/src/adapters/codex.ts +262 -0
- package/src/adapters/common.ts +172 -0
- package/src/adapters/cursor.ts +150 -0
- package/src/adapters/http.ts +100 -0
- package/src/adapters/index.ts +31 -0
- package/src/adapters/types.ts +75 -0
- package/src/cli.ts +107 -238
- package/src/coordination/events.ts +90 -0
- package/src/coordination/index.ts +102 -3
- package/src/coordination/peer-decisions.ts +105 -0
- package/src/coordination/plugin-loader.ts +60 -0
- package/src/coordination/plugin.ts +44 -0
- package/src/coordination/routes.ts +1176 -105
- package/src/coordination/schema.ts +67 -14
- package/src/coordination/schemas.ts +85 -1
- package/src/coordination/stale.ts +3 -2
- package/src/coordination/types.ts +311 -0
- package/src/coordination/write-mutex.ts +69 -0
- package/src/core/embeddings.ts +5 -0
- package/src/engine/activation.ts +13 -3
- package/src/engine/consolidation.ts +15 -6
- package/src/engine/retraction.ts +22 -6
- package/src/index.ts +6 -15
- package/src/mcp.ts +73 -9
- package/src/storage/sqlite.ts +39 -3
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
// Copyright 2026 Robert Winter / Complete Ideas
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
/**
|
|
4
|
+
* Shared utilities for CLI adapters.
|
|
5
|
+
*
|
|
6
|
+
* Extracted from the original setup() in cli.ts — path resolution, secrets,
|
|
7
|
+
* environment variables, MCP command building, and the AWM instruction snippet.
|
|
8
|
+
*/
|
|
9
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';
|
|
10
|
+
import { resolve, join, dirname, basename } from 'node:path';
|
|
11
|
+
import { randomBytes } from 'node:crypto';
|
|
12
|
+
import { homedir as osHomedir } from 'node:os';
|
|
13
|
+
import { fileURLToPath } from 'node:url';
|
|
14
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
15
|
+
const __dirname = dirname(__filename);
|
|
16
|
+
/** Resolve the AWM package root (where src/ and dist/ live). */
|
|
17
|
+
export function resolvePackageRoot() {
|
|
18
|
+
// __dirname is src/adapters/ at dev time, dist/adapters/ at build time
|
|
19
|
+
return resolve(__dirname, '..', '..');
|
|
20
|
+
}
|
|
21
|
+
/** Resolve the database path — default to <packageRoot>/data/memory.db. */
|
|
22
|
+
export function resolveDbPath(packageRoot, explicit) {
|
|
23
|
+
const dbPath = explicit ?? join(packageRoot, 'data', 'memory.db');
|
|
24
|
+
const dbDir = dirname(dbPath);
|
|
25
|
+
if (!existsSync(dbDir)) {
|
|
26
|
+
mkdirSync(dbDir, { recursive: true });
|
|
27
|
+
}
|
|
28
|
+
return dbPath;
|
|
29
|
+
}
|
|
30
|
+
/** Read or generate the hook secret token. */
|
|
31
|
+
export function resolveHookSecret(dbPath) {
|
|
32
|
+
const secretPath = join(dirname(dbPath), '.awm-hook-secret');
|
|
33
|
+
if (existsSync(secretPath)) {
|
|
34
|
+
const existing = readFileSync(secretPath, 'utf-8').trim();
|
|
35
|
+
if (existing)
|
|
36
|
+
return existing;
|
|
37
|
+
}
|
|
38
|
+
const secret = randomBytes(32).toString('hex');
|
|
39
|
+
mkdirSync(dirname(secretPath), { recursive: true });
|
|
40
|
+
writeFileSync(secretPath, secret + '\n');
|
|
41
|
+
return secret;
|
|
42
|
+
}
|
|
43
|
+
/** Build environment variables for the MCP server process. */
|
|
44
|
+
export function buildEnvVars(dbPath, agentId, hookPort, hookSecret, isWindows) {
|
|
45
|
+
return {
|
|
46
|
+
AWM_DB_PATH: isWindows ? dbPath.replace(/\\/g, '/') : dbPath,
|
|
47
|
+
AWM_AGENT_ID: agentId,
|
|
48
|
+
AWM_HOOK_PORT: hookPort,
|
|
49
|
+
AWM_HOOK_SECRET: hookSecret,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Resolve the MCP server command + args.
|
|
54
|
+
*
|
|
55
|
+
* Prefers absolute path to dist/mcp.js (works from any cwd).
|
|
56
|
+
* Falls back to npx tsx src/mcp.ts for dev mode.
|
|
57
|
+
*/
|
|
58
|
+
export function resolveMcpCommand(ctx) {
|
|
59
|
+
if (ctx.hasDist) {
|
|
60
|
+
return {
|
|
61
|
+
command: 'node',
|
|
62
|
+
args: [ctx.mcpDist.replace(/\\/g, '/')],
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
// Dev fallback
|
|
66
|
+
if (ctx.isWindows) {
|
|
67
|
+
return {
|
|
68
|
+
command: 'cmd',
|
|
69
|
+
args: ['/c', 'npx', 'tsx', ctx.mcpScript.replace(/\\/g, '/')],
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
command: 'npx',
|
|
74
|
+
args: ['tsx', ctx.mcpScript],
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/** Build a full SetupContext from parsed CLI flags. */
|
|
78
|
+
export function buildSetupContext(opts) {
|
|
79
|
+
const cwd = process.cwd();
|
|
80
|
+
const projectName = basename(cwd).toLowerCase().replace(/[^a-z0-9-]/g, '-');
|
|
81
|
+
const packageRoot = resolvePackageRoot();
|
|
82
|
+
const mcpScript = join(packageRoot, 'src', 'mcp.ts');
|
|
83
|
+
const mcpDist = join(packageRoot, 'dist', 'mcp.js');
|
|
84
|
+
const hasDist = existsSync(mcpDist);
|
|
85
|
+
const isWindows = process.platform === 'win32';
|
|
86
|
+
const agentId = opts.agentId ?? (opts.isGlobal ? 'claude' : projectName);
|
|
87
|
+
const dbPath = resolveDbPath(packageRoot, opts.dbPath);
|
|
88
|
+
const hookSecret = resolveHookSecret(dbPath);
|
|
89
|
+
const envVars = buildEnvVars(dbPath, agentId, opts.hookPort, hookSecret, isWindows);
|
|
90
|
+
return {
|
|
91
|
+
cwd,
|
|
92
|
+
projectName,
|
|
93
|
+
agentId,
|
|
94
|
+
dbPath,
|
|
95
|
+
packageRoot,
|
|
96
|
+
mcpDist,
|
|
97
|
+
mcpScript,
|
|
98
|
+
hasDist,
|
|
99
|
+
hookSecret,
|
|
100
|
+
hookPort: opts.hookPort,
|
|
101
|
+
isGlobal: opts.isGlobal,
|
|
102
|
+
isWindows,
|
|
103
|
+
envVars,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/** Home directory. */
|
|
107
|
+
export function homedir() {
|
|
108
|
+
return osHomedir();
|
|
109
|
+
}
|
|
110
|
+
// ─── Instruction content ────────────────────────────────
|
|
111
|
+
/**
|
|
112
|
+
* Core AWM instruction snippet — shared across all adapters.
|
|
113
|
+
* Each adapter wraps this in the appropriate file format.
|
|
114
|
+
*/
|
|
115
|
+
export const AWM_INSTRUCTION_CONTENT = `
|
|
116
|
+
## Memory (AWM)
|
|
117
|
+
You have persistent memory via the agent-working-memory MCP server.
|
|
118
|
+
|
|
119
|
+
### Lifecycle (always do these)
|
|
120
|
+
- Session start: call memory_restore to recover previous context
|
|
121
|
+
- Starting a task: call memory_task_begin (checkpoints + recalls relevant memories)
|
|
122
|
+
- Finishing a task: call memory_task_end with a summary
|
|
123
|
+
- Auto-checkpoint: hooks handle compaction, session end, and 15-min timer (no action needed)
|
|
124
|
+
|
|
125
|
+
### Write memory when:
|
|
126
|
+
- A project decision is made or changed
|
|
127
|
+
- A root cause is discovered after debugging
|
|
128
|
+
- A reusable implementation pattern is established
|
|
129
|
+
- A user preference, constraint, or requirement is clarified
|
|
130
|
+
- A prior assumption is found to be wrong
|
|
131
|
+
- A significant piece of work is completed
|
|
132
|
+
|
|
133
|
+
### Recall memory when:
|
|
134
|
+
- Starting work on a new task or subsystem
|
|
135
|
+
- Re-entering code you haven't touched recently
|
|
136
|
+
- After a failed attempt — check if there's prior knowledge
|
|
137
|
+
- Before refactoring or making architectural changes
|
|
138
|
+
- When a topic comes up that you might have prior context on
|
|
139
|
+
|
|
140
|
+
### Also:
|
|
141
|
+
- After using a recalled memory: call memory_feedback (useful/not-useful)
|
|
142
|
+
- To correct wrong info: call memory_retract or memory_supersede
|
|
143
|
+
- To track work items: memory_task_add, memory_task_update, memory_task_list, memory_task_next
|
|
144
|
+
`.trimStart();
|
|
145
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/adapters/common.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/adapters/cursor.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAkC,MAAM,YAAY,CAAC;AAG7E,QAAA,MAAM,OAAO,EAAE,UAoId,CAAC;AAEF,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
// Copyright 2026 Robert Winter / Complete Ideas
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
/**
|
|
4
|
+
* Cursor adapter — writes .cursor/mcp.json and .cursorrules.
|
|
5
|
+
*
|
|
6
|
+
* Cursor uses the same MCP config format as Claude Code (JSON with mcpServers).
|
|
7
|
+
* Instructions go in .cursorrules (project) or ~/.cursor/rules (global).
|
|
8
|
+
*/
|
|
9
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';
|
|
10
|
+
import { join, dirname } from 'node:path';
|
|
11
|
+
import { resolveMcpCommand, homedir, AWM_INSTRUCTION_CONTENT } from './common.js';
|
|
12
|
+
const adapter = {
|
|
13
|
+
id: 'cursor',
|
|
14
|
+
name: 'Cursor',
|
|
15
|
+
supportsProjectScope: true,
|
|
16
|
+
supportsGlobalScope: true,
|
|
17
|
+
writeMcpConfig(ctx) {
|
|
18
|
+
const mcpCmd = resolveMcpCommand(ctx);
|
|
19
|
+
const mcpConfig = { ...mcpCmd, env: ctx.envVars };
|
|
20
|
+
const mcpJsonPath = ctx.isGlobal
|
|
21
|
+
? join(homedir(), '.cursor', 'mcp.json')
|
|
22
|
+
: join(ctx.cwd, '.cursor', 'mcp.json');
|
|
23
|
+
const mcpDir = dirname(mcpJsonPath);
|
|
24
|
+
if (!existsSync(mcpDir)) {
|
|
25
|
+
mkdirSync(mcpDir, { recursive: true });
|
|
26
|
+
}
|
|
27
|
+
let existing = { mcpServers: {} };
|
|
28
|
+
if (existsSync(mcpJsonPath)) {
|
|
29
|
+
try {
|
|
30
|
+
existing = JSON.parse(readFileSync(mcpJsonPath, 'utf-8'));
|
|
31
|
+
if (!existing.mcpServers)
|
|
32
|
+
existing.mcpServers = {};
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
existing = { mcpServers: {} };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
existing.mcpServers['agent-working-memory'] = mcpConfig;
|
|
39
|
+
writeFileSync(mcpJsonPath, JSON.stringify(existing, null, 2) + '\n');
|
|
40
|
+
return `MCP config: ${mcpJsonPath}`;
|
|
41
|
+
},
|
|
42
|
+
writeInstructions(ctx, skip) {
|
|
43
|
+
const rulesPath = ctx.isGlobal
|
|
44
|
+
? join(homedir(), '.cursor', 'rules')
|
|
45
|
+
: join(ctx.cwd, '.cursorrules');
|
|
46
|
+
if (skip)
|
|
47
|
+
return '.cursorrules: skipped (--no-instructions)';
|
|
48
|
+
const dir = dirname(rulesPath);
|
|
49
|
+
if (!existsSync(dir)) {
|
|
50
|
+
mkdirSync(dir, { recursive: true });
|
|
51
|
+
}
|
|
52
|
+
if (existsSync(rulesPath)) {
|
|
53
|
+
const content = readFileSync(rulesPath, 'utf-8');
|
|
54
|
+
if (content.includes('## Memory (AWM)')) {
|
|
55
|
+
return '.cursorrules: already has AWM section (skipped)';
|
|
56
|
+
}
|
|
57
|
+
writeFileSync(rulesPath, content.trimEnd() + '\n\n' + AWM_INSTRUCTION_CONTENT);
|
|
58
|
+
return '.cursorrules: appended AWM workflow section';
|
|
59
|
+
}
|
|
60
|
+
writeFileSync(rulesPath, AWM_INSTRUCTION_CONTENT);
|
|
61
|
+
return '.cursorrules: created with AWM workflow section';
|
|
62
|
+
},
|
|
63
|
+
writeHooks(_ctx, _skip) {
|
|
64
|
+
return 'Hooks: not supported by Cursor (auto-checkpoint unavailable)';
|
|
65
|
+
},
|
|
66
|
+
diagnose(ctx) {
|
|
67
|
+
const results = [];
|
|
68
|
+
// Check MCP config
|
|
69
|
+
const mcpJsonPath = ctx.isGlobal
|
|
70
|
+
? join(homedir(), '.cursor', 'mcp.json')
|
|
71
|
+
: join(ctx.cwd, '.cursor', 'mcp.json');
|
|
72
|
+
if (!existsSync(mcpJsonPath)) {
|
|
73
|
+
results.push({
|
|
74
|
+
check: 'MCP config',
|
|
75
|
+
status: 'fail',
|
|
76
|
+
message: `${mcpJsonPath} not found`,
|
|
77
|
+
fix: `Run: awm setup cursor${ctx.isGlobal ? ' --global' : ''}`,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
try {
|
|
82
|
+
const config = JSON.parse(readFileSync(mcpJsonPath, 'utf-8'));
|
|
83
|
+
if (config.mcpServers?.['agent-working-memory']) {
|
|
84
|
+
results.push({ check: 'MCP config', status: 'ok', message: `AWM registered in ${mcpJsonPath}` });
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
results.push({
|
|
88
|
+
check: 'MCP config',
|
|
89
|
+
status: 'fail',
|
|
90
|
+
message: `${mcpJsonPath} exists but missing agent-working-memory entry`,
|
|
91
|
+
fix: `Run: awm setup cursor${ctx.isGlobal ? ' --global' : ''}`,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
results.push({ check: 'MCP config', status: 'fail', message: `${mcpJsonPath} is not valid JSON` });
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Check entrypoint
|
|
100
|
+
if (ctx.hasDist) {
|
|
101
|
+
results.push({ check: 'MCP entrypoint', status: 'ok', message: 'dist/mcp.js exists' });
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
results.push({
|
|
105
|
+
check: 'MCP entrypoint',
|
|
106
|
+
status: 'warn',
|
|
107
|
+
message: 'dist/mcp.js not found — using dev mode',
|
|
108
|
+
fix: 'Run: npm run build',
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
// Check database
|
|
112
|
+
if (existsSync(ctx.dbPath)) {
|
|
113
|
+
results.push({ check: 'Database', status: 'ok', message: ctx.dbPath });
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
results.push({ check: 'Database', status: 'warn', message: `${ctx.dbPath} not found` });
|
|
117
|
+
}
|
|
118
|
+
// Check instructions
|
|
119
|
+
const rulesPath = ctx.isGlobal
|
|
120
|
+
? join(homedir(), '.cursor', 'rules')
|
|
121
|
+
: join(ctx.cwd, '.cursorrules');
|
|
122
|
+
if (existsSync(rulesPath)) {
|
|
123
|
+
const content = readFileSync(rulesPath, 'utf-8');
|
|
124
|
+
if (content.includes('## Memory (AWM)')) {
|
|
125
|
+
results.push({ check: 'Instructions', status: 'ok', message: '.cursorrules has AWM section' });
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
results.push({ check: 'Instructions', status: 'warn', message: '.cursorrules exists but missing AWM section' });
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
results.push({ check: 'Instructions', status: 'warn', message: '.cursorrules not found' });
|
|
133
|
+
}
|
|
134
|
+
return results;
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
export default adapter;
|
|
138
|
+
//# sourceMappingURL=cursor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/adapters/cursor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/adapters/http.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAkC,MAAM,YAAY,CAAC;AA2B7E,QAAA,MAAM,OAAO,EAAE,UA0Dd,CAAC;AAEF,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// Copyright 2026 Robert Winter / Complete Ideas
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
/**
|
|
4
|
+
* HTTP adapter — generic fallback for any tool that can make REST calls.
|
|
5
|
+
*
|
|
6
|
+
* Doesn't write MCP config. Prints connection instructions for the HTTP API.
|
|
7
|
+
* Optionally writes an instruction file.
|
|
8
|
+
*/
|
|
9
|
+
import { readFileSync, writeFileSync, existsSync } from 'node:fs';
|
|
10
|
+
import { join } from 'node:path';
|
|
11
|
+
import { AWM_INSTRUCTION_CONTENT } from './common.js';
|
|
12
|
+
const HTTP_ADDENDUM = `
|
|
13
|
+
### HTTP API (for tools without MCP support)
|
|
14
|
+
|
|
15
|
+
If your tool doesn't support MCP, use the HTTP API directly:
|
|
16
|
+
|
|
17
|
+
**Base URL:** \`http://127.0.0.1:8400\`
|
|
18
|
+
|
|
19
|
+
| Method | Endpoint | Purpose |
|
|
20
|
+
|--------|----------|---------|
|
|
21
|
+
| GET | /memory/restore/:agentId | Restore context from prior sessions |
|
|
22
|
+
| POST | /memory/activate | Cognitive recall (use \`context\` field) |
|
|
23
|
+
| POST | /memory/write | Write a memory |
|
|
24
|
+
| POST | /memory/feedback | Report if memory was useful |
|
|
25
|
+
| POST | /memory/retract | Invalidate a wrong memory |
|
|
26
|
+
| POST | /memory/checkpoint | Save execution state |
|
|
27
|
+
| POST | /task/create | Create a task |
|
|
28
|
+
| POST | /task/update | Update task status |
|
|
29
|
+
| GET | /task/list/:agentId | List tasks |
|
|
30
|
+
| GET | /task/next/:agentId | Get next actionable task |
|
|
31
|
+
| GET | /health | Health check |
|
|
32
|
+
|
|
33
|
+
Start the server with: \`awm serve\`
|
|
34
|
+
`;
|
|
35
|
+
const adapter = {
|
|
36
|
+
id: 'http',
|
|
37
|
+
name: 'HTTP (generic)',
|
|
38
|
+
supportsProjectScope: true,
|
|
39
|
+
supportsGlobalScope: false,
|
|
40
|
+
writeMcpConfig(ctx) {
|
|
41
|
+
const port = process.env.AWM_PORT ?? '8400';
|
|
42
|
+
return `MCP config: N/A (HTTP mode)\n Start server: awm serve --port ${port}\n Base URL: http://127.0.0.1:${port}`;
|
|
43
|
+
},
|
|
44
|
+
writeInstructions(ctx, skip) {
|
|
45
|
+
const instrPath = join(ctx.cwd, 'AWM-INSTRUCTIONS.md');
|
|
46
|
+
if (skip)
|
|
47
|
+
return 'AWM-INSTRUCTIONS.md: skipped (--no-instructions)';
|
|
48
|
+
if (existsSync(instrPath)) {
|
|
49
|
+
const content = readFileSync(instrPath, 'utf-8');
|
|
50
|
+
if (content.includes('## Memory (AWM)')) {
|
|
51
|
+
return 'AWM-INSTRUCTIONS.md: already has AWM section (skipped)';
|
|
52
|
+
}
|
|
53
|
+
writeFileSync(instrPath, content.trimEnd() + '\n\n' + AWM_INSTRUCTION_CONTENT + HTTP_ADDENDUM);
|
|
54
|
+
return 'AWM-INSTRUCTIONS.md: appended AWM + HTTP API section';
|
|
55
|
+
}
|
|
56
|
+
writeFileSync(instrPath, `# Agent Working Memory\n\n${AWM_INSTRUCTION_CONTENT}${HTTP_ADDENDUM}`);
|
|
57
|
+
return 'AWM-INSTRUCTIONS.md: created with AWM + HTTP API section';
|
|
58
|
+
},
|
|
59
|
+
writeHooks(_ctx, _skip) {
|
|
60
|
+
return 'Hooks: N/A (HTTP mode)';
|
|
61
|
+
},
|
|
62
|
+
diagnose(ctx) {
|
|
63
|
+
const results = [];
|
|
64
|
+
// Check database
|
|
65
|
+
if (existsSync(ctx.dbPath)) {
|
|
66
|
+
results.push({ check: 'Database', status: 'ok', message: ctx.dbPath });
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
results.push({ check: 'Database', status: 'warn', message: `${ctx.dbPath} not found` });
|
|
70
|
+
}
|
|
71
|
+
// Check if HTTP server is reachable
|
|
72
|
+
// (can't do async in diagnose, so just check if the entrypoint exists)
|
|
73
|
+
if (ctx.hasDist) {
|
|
74
|
+
results.push({ check: 'Server entrypoint', status: 'ok', message: 'dist/index.js exists' });
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
results.push({
|
|
78
|
+
check: 'Server entrypoint',
|
|
79
|
+
status: 'warn',
|
|
80
|
+
message: 'dist/index.js not found — use: npx tsx src/index.ts',
|
|
81
|
+
fix: 'Run: npm run build',
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return results;
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
export default adapter;
|
|
88
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/adapters/http.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,sCAAsC;AAEtC;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEtD,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;CAsBrB,CAAC;AAEF,MAAM,OAAO,GAAe;IAC1B,EAAE,EAAE,MAAM;IACV,IAAI,EAAE,gBAAgB;IACtB,oBAAoB,EAAE,IAAI;IAC1B,mBAAmB,EAAE,KAAK;IAE1B,cAAc,CAAC,GAAiB;QAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC;QAC5C,OAAO,iEAAiE,IAAI,kCAAkC,IAAI,EAAE,CAAC;IACvH,CAAC;IAED,iBAAiB,CAAC,GAAiB,EAAE,IAAa;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;QAEvD,IAAI,IAAI;YAAE,OAAO,kDAAkD,CAAC;QAEpE,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACjD,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACxC,OAAO,wDAAwD,CAAC;YAClE,CAAC;YACD,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,MAAM,GAAG,uBAAuB,GAAG,aAAa,CAAC,CAAC;YAC/F,OAAO,sDAAsD,CAAC;QAChE,CAAC;QAED,aAAa,CAAC,SAAS,EAAE,6BAA6B,uBAAuB,GAAG,aAAa,EAAE,CAAC,CAAC;QACjG,OAAO,0DAA0D,CAAC;IACpE,CAAC;IAED,UAAU,CAAC,IAAkB,EAAE,KAAc;QAC3C,OAAO,wBAAwB,CAAC;IAClC,CAAC;IAED,QAAQ,CAAC,GAAiB;QACxB,MAAM,OAAO,GAAuB,EAAE,CAAC;QAEvC,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,YAAY,EAAE,CAAC,CAAC;QAC1F,CAAC;QAED,oCAAoC;QACpC,uEAAuE;QACvE,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC,CAAC;QAC9F,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,mBAAmB;gBAC1B,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,qDAAqD;gBAC9D,GAAG,EAAE,oBAAoB;aAC1B,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAC;AAEF,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAGA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAY7C,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAEvC;AAED,wBAAsB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAOhE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Copyright 2026 Robert Winter / Complete Ideas
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
const adapters = new Map();
|
|
4
|
+
adapters.set('claude-code', () => import('./claude-code.js').then(m => m.default));
|
|
5
|
+
adapters.set('codex', () => import('./codex.js').then(m => m.default));
|
|
6
|
+
adapters.set('cursor', () => import('./cursor.js').then(m => m.default));
|
|
7
|
+
adapters.set('http', () => import('./http.js').then(m => m.default));
|
|
8
|
+
// Aliases
|
|
9
|
+
adapters.set('claude', () => import('./claude-code.js').then(m => m.default));
|
|
10
|
+
export function listAdapters() {
|
|
11
|
+
return ['claude-code', 'codex', 'cursor', 'http'];
|
|
12
|
+
}
|
|
13
|
+
export async function getAdapter(id) {
|
|
14
|
+
const factory = adapters.get(id);
|
|
15
|
+
if (!factory) {
|
|
16
|
+
const valid = listAdapters().join(', ');
|
|
17
|
+
throw new Error(`Unknown target: "${id}". Valid targets: ${valid}`);
|
|
18
|
+
}
|
|
19
|
+
return factory();
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,sCAAsC;AAQtC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAqC,CAAC;AAE9D,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACnF,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACvE,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACzE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAErE,UAAU;AACV,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAE9E,MAAM,UAAU,YAAY;IAC1B,OAAO,CAAC,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAU;IACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACjC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,oBAAoB,EAAE,qBAAqB,KAAK,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,OAAO,EAAE,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for CLI adapters.
|
|
3
|
+
*
|
|
4
|
+
* Each AI CLI tool (Claude Code, Codex, Cursor, etc.) gets its own adapter
|
|
5
|
+
* that implements CLIAdapter. The setup orchestrator in cli.ts delegates to
|
|
6
|
+
* the selected adapter.
|
|
7
|
+
*/
|
|
8
|
+
export interface SetupContext {
|
|
9
|
+
/** Current working directory */
|
|
10
|
+
cwd: string;
|
|
11
|
+
/** Lowercase project name derived from cwd */
|
|
12
|
+
projectName: string;
|
|
13
|
+
/** Agent identifier for AWM */
|
|
14
|
+
agentId: string;
|
|
15
|
+
/** Absolute path to the SQLite database */
|
|
16
|
+
dbPath: string;
|
|
17
|
+
/** Absolute path to the AWM package root */
|
|
18
|
+
packageRoot: string;
|
|
19
|
+
/** Absolute path to dist/mcp.js (compiled entrypoint) */
|
|
20
|
+
mcpDist: string;
|
|
21
|
+
/** Absolute path to src/mcp.ts (dev entrypoint) */
|
|
22
|
+
mcpScript: string;
|
|
23
|
+
/** Whether dist/mcp.js exists (determines command strategy) */
|
|
24
|
+
hasDist: boolean;
|
|
25
|
+
/** Hook sidecar secret token */
|
|
26
|
+
hookSecret: string;
|
|
27
|
+
/** Hook sidecar port */
|
|
28
|
+
hookPort: string;
|
|
29
|
+
/** Whether to use global scope */
|
|
30
|
+
isGlobal: boolean;
|
|
31
|
+
/** Windows platform */
|
|
32
|
+
isWindows: boolean;
|
|
33
|
+
/** Pre-built environment variables for the MCP server */
|
|
34
|
+
envVars: Record<string, string>;
|
|
35
|
+
}
|
|
36
|
+
export interface SetupResult {
|
|
37
|
+
configAction: string;
|
|
38
|
+
instructionsAction: string;
|
|
39
|
+
hooksAction: string;
|
|
40
|
+
}
|
|
41
|
+
export interface DiagnosticResult {
|
|
42
|
+
check: string;
|
|
43
|
+
status: 'ok' | 'warn' | 'fail';
|
|
44
|
+
message: string;
|
|
45
|
+
fix?: string;
|
|
46
|
+
}
|
|
47
|
+
export interface CLIAdapter {
|
|
48
|
+
/** Short identifier: 'claude-code', 'codex', 'cursor', 'http' */
|
|
49
|
+
id: string;
|
|
50
|
+
/** Display name for output */
|
|
51
|
+
name: string;
|
|
52
|
+
/** Does this adapter support project-level scope? */
|
|
53
|
+
supportsProjectScope: boolean;
|
|
54
|
+
/** Does this adapter support global scope? */
|
|
55
|
+
supportsGlobalScope: boolean;
|
|
56
|
+
/** Write the MCP server config for this CLI. Returns action summary. */
|
|
57
|
+
writeMcpConfig(ctx: SetupContext): string;
|
|
58
|
+
/** Write/append instruction content. Returns action summary. */
|
|
59
|
+
writeInstructions(ctx: SetupContext, skip: boolean): string;
|
|
60
|
+
/** Configure hooks (if supported). Returns action summary. */
|
|
61
|
+
writeHooks(ctx: SetupContext, skip: boolean): string;
|
|
62
|
+
/** Validate that the setup is healthy. */
|
|
63
|
+
diagnose(ctx: SetupContext): DiagnosticResult[];
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AAEH,MAAM,WAAW,YAAY;IAC3B,gCAAgC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,OAAO,EAAE,OAAO,CAAC;IACjB,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,uBAAuB;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,iEAAiE;IACjE,EAAE,EAAE,MAAM,CAAC;IACX,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,oBAAoB,EAAE,OAAO,CAAC;IAC9B,8CAA8C;IAC9C,mBAAmB,EAAE,OAAO,CAAC;IAE7B,wEAAwE;IACxE,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAAC;IAE1C,gEAAgE;IAChE,iBAAiB,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IAE5D,8DAA8D;IAC9D,UAAU,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IAErD,0CAA0C;IAC1C,QAAQ,CAAC,GAAG,EAAE,YAAY,GAAG,gBAAgB,EAAE,CAAC;CACjD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,sCAAsC"}
|