traqr-memory-mcp 0.1.4 → 0.1.6
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 +138 -65
- package/dist/cli/config-templates.d.ts +23 -0
- package/dist/cli/config-templates.d.ts.map +1 -0
- package/dist/cli/config-templates.js +66 -0
- package/dist/cli/config-templates.js.map +1 -0
- package/dist/cli/detect-client.d.ts +14 -0
- package/dist/cli/detect-client.d.ts.map +1 -0
- package/dist/cli/detect-client.js +40 -0
- package/dist/cli/detect-client.js.map +1 -0
- package/dist/cli/install.d.ts +10 -0
- package/dist/cli/install.d.ts.map +1 -0
- package/dist/cli/install.js +223 -0
- package/dist/cli/install.js.map +1 -0
- package/dist/cli/instructions.d.ts +10 -0
- package/dist/cli/instructions.d.ts.map +1 -0
- package/dist/cli/instructions.js +22 -0
- package/dist/cli/instructions.js.map +1 -0
- package/dist/cli/setup-db.d.ts +10 -0
- package/dist/cli/setup-db.d.ts.map +1 -0
- package/dist/cli/setup-db.js +114 -0
- package/dist/cli/setup-db.js.map +1 -0
- package/dist/cli/verify.d.ts +9 -0
- package/dist/cli/verify.d.ts.map +1 -0
- package/dist/cli/verify.js +133 -0
- package/dist/cli/verify.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +55 -1
- package/dist/tools.js.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* --install — Interactive Setup Wizard
|
|
3
|
+
*
|
|
4
|
+
* Detects MCP client, asks 2-3 questions, writes config.
|
|
5
|
+
* Uses @clack/prompts for polished interactive UI.
|
|
6
|
+
*
|
|
7
|
+
* Usage: npx traqr-memory-mcp --install
|
|
8
|
+
*/
|
|
9
|
+
import * as p from '@clack/prompts';
|
|
10
|
+
import { writeFileSync } from 'node:fs';
|
|
11
|
+
import { detectMcpClients, readClientConfig } from './detect-client.js';
|
|
12
|
+
import { buildMcpConfig, formatConfig } from './config-templates.js';
|
|
13
|
+
async function run() {
|
|
14
|
+
p.intro('TraqrDB Memory — Setup Wizard');
|
|
15
|
+
// Step 1: Detect MCP clients
|
|
16
|
+
const clients = detectMcpClients();
|
|
17
|
+
let targetClient = null;
|
|
18
|
+
if (clients.length === 1) {
|
|
19
|
+
p.log.info(`Detected ${clients[0].name} at ${clients[0].configPath}`);
|
|
20
|
+
targetClient = clients[0];
|
|
21
|
+
}
|
|
22
|
+
else if (clients.length > 1) {
|
|
23
|
+
const choice = await p.select({
|
|
24
|
+
message: 'Multiple MCP clients detected. Which one?',
|
|
25
|
+
options: [
|
|
26
|
+
...clients.map(c => ({ label: c.name, value: c.configPath })),
|
|
27
|
+
{ label: 'Print config to terminal (manual setup)', value: '__stdout__' },
|
|
28
|
+
],
|
|
29
|
+
});
|
|
30
|
+
if (p.isCancel(choice)) {
|
|
31
|
+
p.cancel('Setup cancelled.');
|
|
32
|
+
process.exit(0);
|
|
33
|
+
}
|
|
34
|
+
if (choice !== '__stdout__') {
|
|
35
|
+
targetClient = clients.find(c => c.configPath === choice) || null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
p.log.warn('No MCP client config detected. Config will be printed to terminal.');
|
|
40
|
+
}
|
|
41
|
+
// Step 2: Database provider
|
|
42
|
+
const db = await p.select({
|
|
43
|
+
message: 'Where is your database?',
|
|
44
|
+
options: [
|
|
45
|
+
{ label: 'Supabase', value: 'supabase', hint: 'easiest — free tier at supabase.com' },
|
|
46
|
+
{ label: 'Postgres', value: 'postgres', hint: 'RDS, Aurora, Docker, any Postgres 15+ with pgvector' },
|
|
47
|
+
{ label: "I don't have one yet", value: 'none', hint: 'we\'ll help you set one up' },
|
|
48
|
+
],
|
|
49
|
+
});
|
|
50
|
+
if (p.isCancel(db)) {
|
|
51
|
+
p.cancel('Setup cancelled.');
|
|
52
|
+
process.exit(0);
|
|
53
|
+
}
|
|
54
|
+
if (db === 'none') {
|
|
55
|
+
p.log.info('Create a free Supabase project at https://supabase.com');
|
|
56
|
+
p.log.info('Then run this wizard again with your project URL and service role key.');
|
|
57
|
+
p.outro('Come back when your database is ready!');
|
|
58
|
+
process.exit(0);
|
|
59
|
+
}
|
|
60
|
+
// Step 3: Collect DB credentials
|
|
61
|
+
const answers = { db: db, embedding: 'none' };
|
|
62
|
+
if (db === 'supabase') {
|
|
63
|
+
const url = await p.text({
|
|
64
|
+
message: 'Supabase project URL',
|
|
65
|
+
placeholder: 'https://xxx.supabase.co',
|
|
66
|
+
validate: (v) => v && !v.includes('supabase.co') ? 'Should be a Supabase URL (https://xxx.supabase.co)' : undefined,
|
|
67
|
+
});
|
|
68
|
+
if (p.isCancel(url)) {
|
|
69
|
+
p.cancel('Setup cancelled.');
|
|
70
|
+
process.exit(0);
|
|
71
|
+
}
|
|
72
|
+
answers.supabaseUrl = url;
|
|
73
|
+
const key = await p.text({
|
|
74
|
+
message: 'Supabase service role key',
|
|
75
|
+
placeholder: 'eyJ...',
|
|
76
|
+
validate: (v) => v && !v.startsWith('eyJ') ? 'Service role key starts with eyJ (not the anon key)' : undefined,
|
|
77
|
+
});
|
|
78
|
+
if (p.isCancel(key)) {
|
|
79
|
+
p.cancel('Setup cancelled.');
|
|
80
|
+
process.exit(0);
|
|
81
|
+
}
|
|
82
|
+
answers.supabaseKey = key;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
const url = await p.text({
|
|
86
|
+
message: 'Postgres connection string',
|
|
87
|
+
placeholder: 'postgresql://user:pass@host:5432/dbname',
|
|
88
|
+
validate: (v) => v && !v.startsWith('postgres') ? 'Should start with postgresql:// or postgres://' : undefined,
|
|
89
|
+
});
|
|
90
|
+
if (p.isCancel(url)) {
|
|
91
|
+
p.cancel('Setup cancelled.');
|
|
92
|
+
process.exit(0);
|
|
93
|
+
}
|
|
94
|
+
answers.databaseUrl = url;
|
|
95
|
+
}
|
|
96
|
+
// Step 4: Embedding provider
|
|
97
|
+
const embedding = await p.select({
|
|
98
|
+
message: 'Which embedding provider?',
|
|
99
|
+
options: [
|
|
100
|
+
{ label: 'OpenAI', value: 'openai', hint: 'text-embedding-3-small — $0.02/1M tokens' },
|
|
101
|
+
{ label: 'Gemini', value: 'gemini', hint: 'gemini-embedding-001 — free tier available' },
|
|
102
|
+
{ label: 'Amazon Bedrock', value: 'bedrock', hint: 'Nova Embeddings — uses AWS credentials' },
|
|
103
|
+
{ label: 'Ollama', value: 'ollama', hint: 'local models — no API key needed' },
|
|
104
|
+
{ label: 'None', value: 'none', hint: 'BM25 keyword search only — no embeddings' },
|
|
105
|
+
],
|
|
106
|
+
});
|
|
107
|
+
if (p.isCancel(embedding)) {
|
|
108
|
+
p.cancel('Setup cancelled.');
|
|
109
|
+
process.exit(0);
|
|
110
|
+
}
|
|
111
|
+
answers.embedding = embedding;
|
|
112
|
+
// Step 5: Collect embedding credentials
|
|
113
|
+
switch (embedding) {
|
|
114
|
+
case 'openai': {
|
|
115
|
+
const key = await p.text({
|
|
116
|
+
message: 'OpenAI API key',
|
|
117
|
+
placeholder: 'sk-...',
|
|
118
|
+
validate: (v) => v && !v.startsWith('sk-') ? 'OpenAI keys start with sk-' : undefined,
|
|
119
|
+
});
|
|
120
|
+
if (p.isCancel(key)) {
|
|
121
|
+
p.cancel('Setup cancelled.');
|
|
122
|
+
process.exit(0);
|
|
123
|
+
}
|
|
124
|
+
answers.openaiKey = key;
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
case 'gemini': {
|
|
128
|
+
const key = await p.text({
|
|
129
|
+
message: 'Google API key',
|
|
130
|
+
placeholder: 'AIza...',
|
|
131
|
+
});
|
|
132
|
+
if (p.isCancel(key)) {
|
|
133
|
+
p.cancel('Setup cancelled.');
|
|
134
|
+
process.exit(0);
|
|
135
|
+
}
|
|
136
|
+
answers.googleKey = key;
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
case 'bedrock': {
|
|
140
|
+
const region = await p.text({
|
|
141
|
+
message: 'AWS region',
|
|
142
|
+
placeholder: 'us-east-1',
|
|
143
|
+
initialValue: 'us-east-1',
|
|
144
|
+
});
|
|
145
|
+
if (p.isCancel(region)) {
|
|
146
|
+
p.cancel('Setup cancelled.');
|
|
147
|
+
process.exit(0);
|
|
148
|
+
}
|
|
149
|
+
answers.awsRegion = region;
|
|
150
|
+
p.log.info('Bedrock uses your AWS credentials (IAM role, env vars, or ~/.aws/credentials).');
|
|
151
|
+
p.log.info('Make sure the role has bedrock:InvokeModel permission.');
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
case 'ollama': {
|
|
155
|
+
const url = await p.text({
|
|
156
|
+
message: 'Ollama URL',
|
|
157
|
+
placeholder: 'http://localhost:11434',
|
|
158
|
+
initialValue: 'http://localhost:11434',
|
|
159
|
+
});
|
|
160
|
+
if (p.isCancel(url)) {
|
|
161
|
+
p.cancel('Setup cancelled.');
|
|
162
|
+
process.exit(0);
|
|
163
|
+
}
|
|
164
|
+
answers.ollamaUrl = url;
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
// 'none' needs no credentials
|
|
168
|
+
}
|
|
169
|
+
// Step 6: Build config
|
|
170
|
+
const config = buildMcpConfig(answers);
|
|
171
|
+
const configJson = formatConfig(config);
|
|
172
|
+
// Step 7: Write or print config
|
|
173
|
+
if (targetClient) {
|
|
174
|
+
const existingConfig = readClientConfig(targetClient);
|
|
175
|
+
const servers = existingConfig[targetClient.configKey] || {};
|
|
176
|
+
if (servers['traqr-memory']) {
|
|
177
|
+
const overwrite = await p.confirm({
|
|
178
|
+
message: 'traqr-memory already exists in your config. Overwrite?',
|
|
179
|
+
});
|
|
180
|
+
if (p.isCancel(overwrite) || !overwrite) {
|
|
181
|
+
p.log.info('Existing config preserved. Here\'s the new config for reference:');
|
|
182
|
+
console.log('\n' + configJson + '\n');
|
|
183
|
+
p.outro('Add it manually if needed.');
|
|
184
|
+
process.exit(0);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
servers['traqr-memory'] = config['traqr-memory'];
|
|
188
|
+
existingConfig[targetClient.configKey] = servers;
|
|
189
|
+
try {
|
|
190
|
+
writeFileSync(targetClient.configPath, JSON.stringify(existingConfig, null, 2) + '\n');
|
|
191
|
+
p.log.success(`Written to ${targetClient.configPath}`);
|
|
192
|
+
}
|
|
193
|
+
catch (err) {
|
|
194
|
+
p.log.error(`Failed to write config: ${err instanceof Error ? err.message : err}`);
|
|
195
|
+
p.log.info('Add this to your MCP config manually:');
|
|
196
|
+
console.log('\n' + configJson + '\n');
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
p.log.info('Add this to your MCP client config:');
|
|
201
|
+
console.log('\n' + configJson + '\n');
|
|
202
|
+
}
|
|
203
|
+
// Step 8: Next steps
|
|
204
|
+
p.log.step('Next steps:');
|
|
205
|
+
if (db === 'supabase') {
|
|
206
|
+
p.log.info('1. Run setup.sql in your Supabase SQL Editor');
|
|
207
|
+
p.log.info(' Get it: npx traqr-memory-mcp --setup');
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
p.log.info('1. Run: npx traqr-memory-mcp --setup');
|
|
211
|
+
p.log.info(' This will create the schema in your Postgres database');
|
|
212
|
+
}
|
|
213
|
+
p.log.info('2. Restart your MCP client');
|
|
214
|
+
p.log.info('3. Run: npx traqr-memory-mcp --verify');
|
|
215
|
+
p.log.info('4. Optional: npx traqr-memory-mcp --print-instructions');
|
|
216
|
+
p.log.info(' Prints a CLAUDE.md section that teaches Claude how to use memory proactively');
|
|
217
|
+
p.outro('Setup complete! Restart your MCP client to connect.');
|
|
218
|
+
}
|
|
219
|
+
run().catch((err) => {
|
|
220
|
+
console.error('Setup failed:', err instanceof Error ? err.message : err);
|
|
221
|
+
process.exit(1);
|
|
222
|
+
});
|
|
223
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/cli/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* --print-instructions — Print MEMORY_INSTRUCTIONS.md to stdout
|
|
3
|
+
*
|
|
4
|
+
* Users paste this into their CLAUDE.md to teach Claude
|
|
5
|
+
* how to use memory proactively.
|
|
6
|
+
*
|
|
7
|
+
* Usage: npx traqr-memory-mcp --print-instructions
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=instructions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/cli/instructions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* --print-instructions — Print MEMORY_INSTRUCTIONS.md to stdout
|
|
3
|
+
*
|
|
4
|
+
* Users paste this into their CLAUDE.md to teach Claude
|
|
5
|
+
* how to use memory proactively.
|
|
6
|
+
*
|
|
7
|
+
* Usage: npx traqr-memory-mcp --print-instructions
|
|
8
|
+
*/
|
|
9
|
+
import { readFileSync } from 'node:fs';
|
|
10
|
+
import { fileURLToPath } from 'node:url';
|
|
11
|
+
import { dirname, join } from 'node:path';
|
|
12
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
13
|
+
try {
|
|
14
|
+
const content = readFileSync(join(__dirname, '..', 'MEMORY_INSTRUCTIONS.md'), 'utf-8');
|
|
15
|
+
console.log(content);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
console.error('MEMORY_INSTRUCTIONS.md not found.');
|
|
19
|
+
console.error('If installed via npm, it should be at: node_modules/traqr-memory-mcp/MEMORY_INSTRUCTIONS.md');
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=instructions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/cli/instructions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAEzD,IAAI,CAAC;IACH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,wBAAwB,CAAC,EAAE,OAAO,CAAC,CAAA;IACtF,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AACtB,CAAC;AAAC,MAAM,CAAC;IACP,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAA;IAClD,OAAO,CAAC,KAAK,CAAC,6FAA6F,CAAC,CAAA;IAC5G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* --setup — Run setup.sql on configured database
|
|
3
|
+
*
|
|
4
|
+
* For Postgres: executes setup.sql directly via pg.
|
|
5
|
+
* For Supabase: prints the SQL with instructions to paste into SQL Editor.
|
|
6
|
+
*
|
|
7
|
+
* Usage: npx traqr-memory-mcp --setup
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=setup-db.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-db.d.ts","sourceRoot":"","sources":["../../src/cli/setup-db.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* --setup — Run setup.sql on configured database
|
|
3
|
+
*
|
|
4
|
+
* For Postgres: executes setup.sql directly via pg.
|
|
5
|
+
* For Supabase: prints the SQL with instructions to paste into SQL Editor.
|
|
6
|
+
*
|
|
7
|
+
* Usage: npx traqr-memory-mcp --setup
|
|
8
|
+
*/
|
|
9
|
+
import { readFileSync } from 'node:fs';
|
|
10
|
+
import { fileURLToPath } from 'node:url';
|
|
11
|
+
import { dirname, join } from 'node:path';
|
|
12
|
+
import * as p from '@clack/prompts';
|
|
13
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
14
|
+
async function run() {
|
|
15
|
+
p.intro('TraqrDB Memory — Database Setup');
|
|
16
|
+
const setupSqlPath = join(__dirname, '..', 'setup.sql');
|
|
17
|
+
let setupSql;
|
|
18
|
+
try {
|
|
19
|
+
setupSql = readFileSync(setupSqlPath, 'utf-8');
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
p.log.error(`setup.sql not found at ${setupSqlPath}`);
|
|
23
|
+
p.log.info('If installed via npm, it should be at: node_modules/traqr-memory-mcp/setup.sql');
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
const databaseUrl = process.env.DATABASE_URL;
|
|
27
|
+
const supabaseUrl = process.env.SUPABASE_URL;
|
|
28
|
+
if (!databaseUrl && !supabaseUrl) {
|
|
29
|
+
p.log.error('No database configured.');
|
|
30
|
+
p.log.info('Set DATABASE_URL or SUPABASE_URL environment variable, then run again.');
|
|
31
|
+
p.log.info('Or run: npx traqr-memory-mcp --install');
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
if (databaseUrl) {
|
|
35
|
+
// Postgres: execute directly
|
|
36
|
+
p.log.info(`Connecting to Postgres...`);
|
|
37
|
+
let pg;
|
|
38
|
+
try {
|
|
39
|
+
pg = await Function('return import("pg")')();
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
p.log.error('The pg package is required for direct Postgres setup.');
|
|
43
|
+
p.log.info('Install it: npm install pg');
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
const Pool = pg.default?.Pool || pg.Pool;
|
|
47
|
+
const pool = new Pool({ connectionString: databaseUrl });
|
|
48
|
+
try {
|
|
49
|
+
// Check if schema already exists
|
|
50
|
+
try {
|
|
51
|
+
const result = await pool.query('SELECT version FROM schema_version ORDER BY version DESC LIMIT 1');
|
|
52
|
+
if (result.rows.length > 0) {
|
|
53
|
+
const version = result.rows[0].version;
|
|
54
|
+
p.log.success(`Schema v${version} already exists.`);
|
|
55
|
+
const proceed = await p.confirm({
|
|
56
|
+
message: 'Re-run setup.sql anyway? (safe — uses IF NOT EXISTS)',
|
|
57
|
+
});
|
|
58
|
+
if (p.isCancel(proceed) || !proceed) {
|
|
59
|
+
p.outro('Schema is up to date.');
|
|
60
|
+
await pool.end();
|
|
61
|
+
process.exit(0);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// schema_version doesn't exist — fresh database
|
|
67
|
+
p.log.info('Fresh database detected. Running setup.sql...');
|
|
68
|
+
}
|
|
69
|
+
const s = p.spinner();
|
|
70
|
+
s.start('Running setup.sql...');
|
|
71
|
+
await pool.query(setupSql);
|
|
72
|
+
s.stop('Schema created successfully!');
|
|
73
|
+
// Verify
|
|
74
|
+
const result = await pool.query('SELECT version FROM schema_version ORDER BY version DESC LIMIT 1');
|
|
75
|
+
if (result.rows.length > 0) {
|
|
76
|
+
p.log.success(`Schema v${result.rows[0].version} is ready.`);
|
|
77
|
+
}
|
|
78
|
+
await pool.end();
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
p.log.error(`Failed to run setup.sql: ${err instanceof Error ? err.message : err}`);
|
|
82
|
+
p.log.info('Check your DATABASE_URL and ensure pgvector is enabled:');
|
|
83
|
+
p.log.info(' CREATE EXTENSION IF NOT EXISTS vector;');
|
|
84
|
+
await pool.end();
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
// Supabase: print instructions
|
|
90
|
+
p.log.info('Supabase detected. Setup.sql must be run via the Supabase SQL Editor.');
|
|
91
|
+
p.log.step('Steps:');
|
|
92
|
+
p.log.info('1. Go to your Supabase project dashboard');
|
|
93
|
+
p.log.info('2. Open SQL Editor (left sidebar)');
|
|
94
|
+
p.log.info('3. Paste the contents of setup.sql');
|
|
95
|
+
p.log.info('4. Click "Run"');
|
|
96
|
+
p.log.info('');
|
|
97
|
+
p.log.info(`setup.sql location: ${setupSqlPath}`);
|
|
98
|
+
p.log.info('');
|
|
99
|
+
const print = await p.confirm({
|
|
100
|
+
message: 'Print setup.sql contents to terminal? (for easy copy-paste)',
|
|
101
|
+
});
|
|
102
|
+
if (!p.isCancel(print) && print) {
|
|
103
|
+
console.log('\n--- BEGIN setup.sql ---\n');
|
|
104
|
+
console.log(setupSql);
|
|
105
|
+
console.log('\n--- END setup.sql ---\n');
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
p.outro('Database setup complete! Run: npx traqr-memory-mcp --verify');
|
|
109
|
+
}
|
|
110
|
+
run().catch((err) => {
|
|
111
|
+
console.error('Setup failed:', err instanceof Error ? err.message : err);
|
|
112
|
+
process.exit(1);
|
|
113
|
+
});
|
|
114
|
+
//# sourceMappingURL=setup-db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-db.js","sourceRoot":"","sources":["../../src/cli/setup-db.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/cli/verify.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* --verify — Health check + round trip test
|
|
3
|
+
*
|
|
4
|
+
* Verifies the complete setup: DB connection, schema, embeddings, round trip.
|
|
5
|
+
*
|
|
6
|
+
* Usage: npx traqr-memory-mcp --verify
|
|
7
|
+
*/
|
|
8
|
+
import * as p from '@clack/prompts';
|
|
9
|
+
import { configureMemory, getVectorDB, getEmbeddingProvider, storeMemory, searchMemoriesV2 } from '@traqr/memory';
|
|
10
|
+
async function run() {
|
|
11
|
+
p.intro('TraqrDB Memory — Verify Setup');
|
|
12
|
+
// Configure from env
|
|
13
|
+
const supabaseUrl = process.env.SUPABASE_URL;
|
|
14
|
+
const databaseUrl = process.env.DATABASE_URL;
|
|
15
|
+
const supabaseKey = process.env.SUPABASE_SERVICE_ROLE_KEY;
|
|
16
|
+
if (!supabaseUrl && !databaseUrl) {
|
|
17
|
+
p.log.error('No database configured. Set DATABASE_URL or SUPABASE_URL.');
|
|
18
|
+
p.log.info('Run: npx traqr-memory-mcp --install');
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
configureMemory({
|
|
22
|
+
supabaseUrl,
|
|
23
|
+
supabaseKey,
|
|
24
|
+
databaseUrl,
|
|
25
|
+
});
|
|
26
|
+
const checks = { db: false, schema: false, embedding: false, roundTrip: false };
|
|
27
|
+
const dbProvider = supabaseUrl ? 'Supabase' : 'Postgres';
|
|
28
|
+
const ep = getEmbeddingProvider();
|
|
29
|
+
const embeddingInfo = ep.provider === 'none' ? 'None (BM25 only)' : `${ep.provider}/${ep.model}`;
|
|
30
|
+
// Check 1: DB connection
|
|
31
|
+
const s = p.spinner();
|
|
32
|
+
s.start('Checking database connection...');
|
|
33
|
+
try {
|
|
34
|
+
const db = getVectorDB();
|
|
35
|
+
const ok = await db.ping();
|
|
36
|
+
if (!ok)
|
|
37
|
+
throw new Error('ping returned false');
|
|
38
|
+
checks.db = true;
|
|
39
|
+
s.stop(`Database: ${dbProvider} — connected`);
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
s.stop(`Database: ${dbProvider} — FAILED`);
|
|
43
|
+
p.log.error(err instanceof Error ? err.message : String(err));
|
|
44
|
+
}
|
|
45
|
+
// Check 2: Schema version
|
|
46
|
+
if (checks.db) {
|
|
47
|
+
s.start('Checking schema version...');
|
|
48
|
+
try {
|
|
49
|
+
const db = getVectorDB();
|
|
50
|
+
const version = await db.schemaVersion();
|
|
51
|
+
if (version === null)
|
|
52
|
+
throw new Error('schema_version table not found — run setup.sql first');
|
|
53
|
+
checks.schema = true;
|
|
54
|
+
s.stop(`Schema: v${version}`);
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
s.stop('Schema: FAILED');
|
|
58
|
+
p.log.error(err instanceof Error ? err.message : String(err));
|
|
59
|
+
p.log.info('Run: npx traqr-memory-mcp --setup');
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Check 3: Embedding provider
|
|
63
|
+
s.start(`Checking embeddings (${embeddingInfo})...`);
|
|
64
|
+
try {
|
|
65
|
+
if (ep.provider === 'none') {
|
|
66
|
+
checks.embedding = true;
|
|
67
|
+
s.stop(`Embeddings: None (BM25 keyword search only)`);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
const result = await ep.generate('health check');
|
|
71
|
+
if (!result.embedding?.length)
|
|
72
|
+
throw new Error('Empty embedding returned');
|
|
73
|
+
checks.embedding = true;
|
|
74
|
+
s.stop(`Embeddings: ${embeddingInfo} — ${result.dimensions} dimensions`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
s.stop(`Embeddings: ${embeddingInfo} — FAILED`);
|
|
79
|
+
p.log.error(err instanceof Error ? err.message : String(err));
|
|
80
|
+
}
|
|
81
|
+
// Check 4: Round trip (store → search → delete)
|
|
82
|
+
if (checks.db && checks.schema) {
|
|
83
|
+
s.start('Running round-trip test (store → search → delete)...');
|
|
84
|
+
try {
|
|
85
|
+
const testContent = `TraqrDB verify test — ${Date.now()}`;
|
|
86
|
+
const memory = await storeMemory({
|
|
87
|
+
content: testContent,
|
|
88
|
+
sourceType: 'session',
|
|
89
|
+
sourceProject: 'verify-test',
|
|
90
|
+
confidence: 0.1,
|
|
91
|
+
});
|
|
92
|
+
// Search for it (only if embeddings work)
|
|
93
|
+
if (checks.embedding && ep.provider !== 'none') {
|
|
94
|
+
const results = await searchMemoriesV2(testContent, { limit: 1 });
|
|
95
|
+
if (results.length === 0) {
|
|
96
|
+
p.log.warn('Search returned no results for test memory (may be indexing delay)');
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Clean up
|
|
100
|
+
const db = getVectorDB();
|
|
101
|
+
await db.delete(memory.id);
|
|
102
|
+
checks.roundTrip = true;
|
|
103
|
+
s.stop('Round trip: store → search → delete — OK');
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
s.stop('Round trip: FAILED');
|
|
107
|
+
p.log.error(err instanceof Error ? err.message : String(err));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Summary
|
|
111
|
+
const allPassed = Object.values(checks).every(Boolean);
|
|
112
|
+
const passCount = Object.values(checks).filter(Boolean).length;
|
|
113
|
+
console.log('');
|
|
114
|
+
p.log.info(`DB: ${dbProvider} | Embeddings: ${embeddingInfo}`);
|
|
115
|
+
console.log('');
|
|
116
|
+
console.log(` ${checks.db ? 'pass' : 'FAIL'} Database connection`);
|
|
117
|
+
console.log(` ${checks.schema ? 'pass' : 'FAIL'} Schema version`);
|
|
118
|
+
console.log(` ${checks.embedding ? 'pass' : 'FAIL'} Embedding provider`);
|
|
119
|
+
console.log(` ${checks.roundTrip ? 'pass' : 'FAIL'} Round trip (store/search/delete)`);
|
|
120
|
+
console.log('');
|
|
121
|
+
if (allPassed) {
|
|
122
|
+
p.outro(`All ${passCount} checks passed! TraqrDB is ready.`);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
p.outro(`${passCount}/4 checks passed. Fix the failures above and re-run.`);
|
|
126
|
+
process.exit(1);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
run().catch((err) => {
|
|
130
|
+
console.error('Verify failed:', err instanceof Error ? err.message : err);
|
|
131
|
+
process.exit(1);
|
|
132
|
+
});
|
|
133
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/cli/verify.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* TraqrDB Memory MCP Server
|
|
4
4
|
*
|
|
5
|
+
* CLI flags (run instead of MCP server):
|
|
6
|
+
* --install Interactive setup wizard
|
|
7
|
+
* --setup Run setup.sql on your database
|
|
8
|
+
* --verify Health check + round trip test
|
|
9
|
+
* --print-instructions Print CLAUDE.md memory instructions
|
|
10
|
+
*
|
|
5
11
|
* Standalone MCP server for AI agents. 10 memory tools powered by
|
|
6
12
|
* Postgres + pgvector. Multi-strategy retrieval (semantic + BM25 + RRF),
|
|
7
13
|
* cosine triage, LLM borderline decisions, entity extraction.
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;GAeG"}
|
package/dist/index.js
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* TraqrDB Memory MCP Server
|
|
4
4
|
*
|
|
5
|
+
* CLI flags (run instead of MCP server):
|
|
6
|
+
* --install Interactive setup wizard
|
|
7
|
+
* --setup Run setup.sql on your database
|
|
8
|
+
* --verify Health check + round trip test
|
|
9
|
+
* --print-instructions Print CLAUDE.md memory instructions
|
|
10
|
+
*
|
|
5
11
|
* Standalone MCP server for AI agents. 10 memory tools powered by
|
|
6
12
|
* Postgres + pgvector. Multi-strategy retrieval (semantic + BM25 + RRF),
|
|
7
13
|
* cosine triage, LLM borderline decisions, entity extraction.
|
|
@@ -9,6 +15,44 @@
|
|
|
9
15
|
* Usage:
|
|
10
16
|
* SUPABASE_URL=... SUPABASE_SERVICE_ROLE_KEY=... npx traqr-memory-mcp
|
|
11
17
|
*/
|
|
18
|
+
// CLI flag routing — handle before heavy imports
|
|
19
|
+
const cliFlag = process.argv[2];
|
|
20
|
+
if (cliFlag === '--install') {
|
|
21
|
+
await import('./cli/install.js');
|
|
22
|
+
process.exit(0);
|
|
23
|
+
}
|
|
24
|
+
if (cliFlag === '--setup') {
|
|
25
|
+
await import('./cli/setup-db.js');
|
|
26
|
+
process.exit(0);
|
|
27
|
+
}
|
|
28
|
+
if (cliFlag === '--verify') {
|
|
29
|
+
await import('./cli/verify.js');
|
|
30
|
+
process.exit(0);
|
|
31
|
+
}
|
|
32
|
+
if (cliFlag === '--print-instructions') {
|
|
33
|
+
await import('./cli/instructions.js');
|
|
34
|
+
process.exit(0);
|
|
35
|
+
}
|
|
36
|
+
if (cliFlag === '--help' || cliFlag === '-h') {
|
|
37
|
+
console.log(`
|
|
38
|
+
traqr-memory-mcp — MCP server for persistent AI agent memory
|
|
39
|
+
|
|
40
|
+
Usage: npx traqr-memory-mcp [flag]
|
|
41
|
+
|
|
42
|
+
Flags:
|
|
43
|
+
--install Interactive setup wizard
|
|
44
|
+
--setup Run setup.sql on your database
|
|
45
|
+
--verify Health check + round trip test
|
|
46
|
+
--print-instructions Print CLAUDE.md memory instructions
|
|
47
|
+
--help, -h Show this help
|
|
48
|
+
|
|
49
|
+
No flags: start MCP server (for MCP client config, not direct use)
|
|
50
|
+
|
|
51
|
+
Quick start:
|
|
52
|
+
npx traqr-memory-mcp --install
|
|
53
|
+
`);
|
|
54
|
+
process.exit(0);
|
|
55
|
+
}
|
|
12
56
|
import { readFileSync } from 'node:fs';
|
|
13
57
|
import { fileURLToPath } from 'node:url';
|
|
14
58
|
import { dirname, join } from 'node:path';
|