@raviolelabs/engram-mcp 0.5.1 → 0.5.2

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.
@@ -33,21 +33,64 @@ async function main() {
33
33
  ? process.argv[baseUrlArg + 1]?.replace('engram-mcp.com', 'api.engram-mcp.com') ??
34
34
  'https://api.engram-mcp.com'
35
35
  : 'https://api.engram-mcp.com';
36
+ // --token <TOKEN> short-circuit: skip the browser callback flow and redeem
37
+ // an invite token directly. This is what the dashboard surfaces when a user
38
+ // already has engram-mcp installed and just wants to re-pair after a revoke.
39
+ const tokenArg = process.argv.indexOf('--token');
40
+ const inviteToken = tokenArg !== -1 ? process.argv[tokenArg + 1] : process.env.ENGRAM_INVITE_TOKEN || null;
36
41
  // Load config to get dataDir
37
42
  const config = loadConfig();
38
43
  initDb(config.dataDir);
39
44
  if (config.engramAccount) {
40
45
  console.log('\n Note: Re-pairing will replace existing tokens.\n');
41
46
  }
42
- // Start pairing flow — opens browser automatically
43
47
  let result;
44
- try {
45
- result = await startPairing({ baseUrl });
48
+ if (inviteToken) {
49
+ // Direct redemption same endpoint install.sh hits at step 8
50
+ if (!/^[A-Za-z0-9_-]{6,32}$/.test(inviteToken)) {
51
+ console.error('\n Invalid token format (expected 6-32 url-safe chars)\n');
52
+ process.exit(1);
53
+ }
54
+ try {
55
+ const res = await fetch(`${apiBaseUrl}/api/pair/redeem-invite`, {
56
+ method: 'POST',
57
+ headers: { 'Content-Type': 'application/json' },
58
+ body: JSON.stringify({ token: inviteToken }),
59
+ });
60
+ if (!res.ok) {
61
+ const body = await res.text();
62
+ console.error(`\n Redeem failed (HTTP ${res.status}): ${body.slice(0, 200)}\n`);
63
+ process.exit(1);
64
+ }
65
+ const data = (await res.json());
66
+ if (!data.jwt || !data.api_key) {
67
+ console.error('\n Redeem response missing tokens\n');
68
+ process.exit(1);
69
+ }
70
+ result = {
71
+ jwt: data.jwt,
72
+ refreshToken: data.refresh_token,
73
+ apiKey: data.api_key,
74
+ expiresAt: data.expires_at ?? Date.now() + 30 * 24 * 60 * 60 * 1000,
75
+ };
76
+ console.log(`\n ✓ Linked to ${data.user?.email ?? 'your account'}`);
77
+ }
78
+ catch (e) {
79
+ console.error(`\n Pairing failed: ${e instanceof Error ? e.message : String(e)}\n`);
80
+ process.exit(1);
81
+ }
46
82
  }
47
- catch (e) {
48
- log.error(`Pairing failed: ${e instanceof Error ? e.message : String(e)}`);
49
- console.error(`\n Pairing failed: ${e instanceof Error ? e.message : String(e)}`);
50
- process.exit(1);
83
+ else {
84
+ // Interactive browser flow (kept for users who run `engram-mcp pair`
85
+ // without any args same UX as install.sh's initial pair step).
86
+ try {
87
+ result = await startPairing({ baseUrl });
88
+ }
89
+ catch (e) {
90
+ log.error(`Pairing failed: ${e instanceof Error ? e.message : String(e)}`);
91
+ console.error(`\n Pairing failed: ${e instanceof Error ? e.message : String(e)}`);
92
+ process.exit(1);
93
+ }
51
94
  }
52
95
  // Generate or reuse master key salt
53
96
  const existingSalt = config.engramAccount?.masterKeySalt;
@@ -67,8 +110,27 @@ async function main() {
67
110
  fs.mkdirSync(ENGRAM_DIR, { recursive: true, mode: 0o700 });
68
111
  fs.writeFileSync(CONFIG_PATH, JSON.stringify(updatedConfig, null, 2));
69
112
  fs.chmodSync(CONFIG_PATH, 0o600);
70
- console.log('\n Paired successfully (api key stored locally)');
71
- console.log(' Bridge will connect on next engram-mcp start.');
113
+ console.log('\n Paired successfully (tokens saved to ~/.engram/config.json)');
114
+ // Restart the service so the bridge picks up the fresh tokens. Without
115
+ // this the user has to manually kickstart, which defeats the one-command
116
+ // re-pair UX.
117
+ try {
118
+ const { spawnSync } = await import('node:child_process');
119
+ if (process.platform === 'darwin') {
120
+ const uid = process.getuid?.() ?? 0;
121
+ const r = spawnSync('launchctl', ['kickstart', '-k', `gui/${uid}/com.ravolelabs.engram`]);
122
+ if (r.status === 0)
123
+ console.log(' ✓ Restarted background service — bridge now connecting');
124
+ }
125
+ else if (process.platform === 'linux') {
126
+ const r = spawnSync('systemctl', ['--user', 'restart', 'engram.service']);
127
+ if (r.status === 0)
128
+ console.log(' ✓ Restarted background service — bridge now connecting');
129
+ }
130
+ }
131
+ catch {
132
+ console.log(' (Bridge will connect on next engram-mcp start.)');
133
+ }
72
134
  console.log(`\n Open your dashboard: https://engram-mcp.com/dashboard\n`);
73
135
  }
74
136
  main().catch((e) => {
@@ -1 +1 @@
1
- {"version":3,"file":"pair.js","sourceRoot":"","sources":["../../src/scripts/pair.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pair.js","sourceRoot":"","sources":["../../src/scripts/pair.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@raviolelabs/engram-mcp",
3
- "version": "0.5.1",
3
+ "version": "0.5.2",
4
4
  "mcpName": "io.github.RavioleLabs/engram-mcp",
5
5
  "description": "EngramMCP — local-first semantic memory layer for AI agents",
6
6
  "license": "Elastic-2.0",