@engramprotocol/mcp-server 0.9.1 → 0.10.0

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 (49) hide show
  1. package/README.md +48 -37
  2. package/dist/cli.js +42 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/setup/_helpers.d.ts +71 -0
  5. package/dist/setup/_helpers.d.ts.map +1 -0
  6. package/dist/setup/_helpers.js +275 -0
  7. package/dist/setup/_helpers.js.map +1 -0
  8. package/dist/setup/index.d.ts +2 -0
  9. package/dist/setup/index.d.ts.map +1 -0
  10. package/dist/setup/index.js +83 -0
  11. package/dist/setup/index.js.map +1 -0
  12. package/dist/setup/install.d.ts +2 -0
  13. package/dist/setup/install.d.ts.map +1 -0
  14. package/dist/setup/install.js +241 -0
  15. package/dist/setup/install.js.map +1 -0
  16. package/dist/setup/uninstall.d.ts +2 -0
  17. package/dist/setup/uninstall.d.ts.map +1 -0
  18. package/dist/setup/uninstall.js +120 -0
  19. package/dist/setup/uninstall.js.map +1 -0
  20. package/dist/setup/update.d.ts +2 -0
  21. package/dist/setup/update.d.ts.map +1 -0
  22. package/dist/setup/update.js +130 -0
  23. package/dist/setup/update.js.map +1 -0
  24. package/dist/tools/boot.d.ts.map +1 -1
  25. package/dist/tools/boot.js +2 -4
  26. package/dist/tools/boot.js.map +1 -1
  27. package/dist/tools/entity.d.ts.map +1 -1
  28. package/dist/tools/entity.js +3 -2
  29. package/dist/tools/entity.js.map +1 -1
  30. package/dist/tools/get.d.ts.map +1 -1
  31. package/dist/tools/get.js +2 -5
  32. package/dist/tools/get.js.map +1 -1
  33. package/dist/tools/list.d.ts.map +1 -1
  34. package/dist/tools/list.js +5 -8
  35. package/dist/tools/list.js.map +1 -1
  36. package/dist/tools/note.d.ts.map +1 -1
  37. package/dist/tools/note.js +4 -1
  38. package/dist/tools/note.js.map +1 -1
  39. package/dist/tools/projects.d.ts.map +1 -1
  40. package/dist/tools/projects.js +3 -1
  41. package/dist/tools/projects.js.map +1 -1
  42. package/dist/tools/recall.d.ts.map +1 -1
  43. package/dist/tools/recall.js +3 -4
  44. package/dist/tools/recall.js.map +1 -1
  45. package/dist/tools/update.js +3 -3
  46. package/dist/tools/update.js.map +1 -1
  47. package/package.json +5 -3
  48. package/templates/hooks/session_start_boot.sh +63 -0
  49. package/templates/hooks/user_prompt_submit_reminder.sh +78 -0
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ // Setup-mode router. Dispatched from cli.ts when first arg is `setup`.
3
+ //
4
+ // Sub-commands:
5
+ // setup → install (initial setup)
6
+ // setup install → same as `setup`
7
+ // setup update → refresh npm-package + hook-templates, retain config
8
+ // setup uninstall → reverse install via marker-tagged entries
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || (function () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.runSetup = runSetup;
44
+ const HELP = `npx @engramprotocol/mcp-server setup [install|update|uninstall]
45
+
46
+ Sub-commands:
47
+ install Initial setup: token prompt, config write, MCP registration, permissions, hooks. (default)
48
+ update Refresh installed templates + EML_CLIENT_VERSION in config.
49
+ uninstall Reverse install. Removes EML-managed entries from Claude Code config.
50
+
51
+ Flags (any sub-command):
52
+ --help Show this help.
53
+
54
+ Documentation: https://engramprotocol.io/docs/setup
55
+ `;
56
+ async function runSetup(argv) {
57
+ if (argv.includes('--help') || argv.includes('-h')) {
58
+ process.stderr.write(HELP);
59
+ return;
60
+ }
61
+ const sub = argv[0] || 'install';
62
+ switch (sub) {
63
+ case 'install': {
64
+ const { runInstall } = await Promise.resolve().then(() => __importStar(require('./install.js')));
65
+ await runInstall(argv.slice(1));
66
+ return;
67
+ }
68
+ case 'update': {
69
+ const { runUpdate } = await Promise.resolve().then(() => __importStar(require('./update.js')));
70
+ await runUpdate(argv.slice(1));
71
+ return;
72
+ }
73
+ case 'uninstall': {
74
+ const { runUninstall } = await Promise.resolve().then(() => __importStar(require('./uninstall.js')));
75
+ await runUninstall(argv.slice(1));
76
+ return;
77
+ }
78
+ default:
79
+ process.stderr.write(`Unknown setup sub-command: ${sub}\n\n${HELP}`);
80
+ process.exit(1);
81
+ }
82
+ }
83
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/setup/index.ts"],"names":[],"mappings":";AAAA,uEAAuE;AACvE,EAAE;AACF,gBAAgB;AAChB,+CAA+C;AAC/C,uCAAuC;AACvC,2EAA2E;AAC3E,iEAAiE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAejE,4BA4BC;AAzCD,MAAM,IAAI,GAAG;;;;;;;;;;;CAWZ,CAAA;AAEM,KAAK,UAAU,QAAQ,CAAC,IAAc;IAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC1B,OAAM;IACR,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS,CAAA;IAEhC,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,EAAE,UAAU,EAAE,GAAG,wDAAa,cAAc,GAAC,CAAA;YACnD,MAAM,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;YAC/B,OAAM;QACR,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,SAAS,EAAE,GAAG,wDAAa,aAAa,GAAC,CAAA;YACjD,MAAM,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;YAC9B,OAAM;QACR,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,EAAE,YAAY,EAAE,GAAG,wDAAa,gBAAgB,GAAC,CAAA;YACvD,MAAM,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;YACjC,OAAM;QACR,CAAC;QACD;YACE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,GAAG,OAAO,IAAI,EAAE,CAAC,CAAA;YACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function runInstall(_argv: string[]): Promise<void>;
2
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/setup/install.ts"],"names":[],"mappings":"AAyMA,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyC/D"}
@@ -0,0 +1,241 @@
1
+ "use strict";
2
+ // Setup-mode install flow. Implements v0.10.0-PROPOSAL C.2 §setup.
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.runInstall = runInstall;
38
+ const fs = __importStar(require("fs"));
39
+ const _helpers_1 = require("./_helpers");
40
+ const API_URL = 'https://api.engramprotocol.io';
41
+ const BASH_PERMISSION = `Bash(npx @engramprotocol/${_helpers_1.MCP_SERVER_NAME === 'engramprotocol' ? 'mcp-server' : _helpers_1.MCP_SERVER_NAME} setup *)`;
42
+ const MCP_PERMISSION = `mcp__${_helpers_1.MCP_SERVER_NAME}__*`;
43
+ function log(msg) {
44
+ process.stderr.write(msg + '\n');
45
+ }
46
+ function fail(msg, code = 1) {
47
+ log(`\n❌ ${msg}`);
48
+ process.exit(code);
49
+ }
50
+ async function preflight() {
51
+ log('\nStep 1/8 — Pre-flight checks');
52
+ if (!(0, _helpers_1.claudeCliExists)()) {
53
+ fail('claude CLI not found in PATH. Install Claude Code first: https://claude.ai/code');
54
+ }
55
+ log(' ✓ claude CLI available');
56
+ for (const file of [_helpers_1.CLAUDE_JSON, _helpers_1.CLAUDE_SETTINGS]) {
57
+ if (!fs.existsSync(file)) {
58
+ log(` ✓ ${file} does not exist yet (will be created)`);
59
+ continue;
60
+ }
61
+ try {
62
+ JSON.parse(fs.readFileSync(file, 'utf-8'));
63
+ log(` ✓ ${file} is valid JSON`);
64
+ }
65
+ catch (err) {
66
+ const e = err;
67
+ fail(`${file} contains invalid JSON: ${e.message}\n Fix or remove the file before running setup.`);
68
+ }
69
+ }
70
+ }
71
+ async function tokenPrompt() {
72
+ log('\nStep 2/8 — Token');
73
+ log(` EML endpoint: ${API_URL}`);
74
+ // Accept EML_API_TOKEN from the environment — same convention as the
75
+ // `claude mcp add --env EML_API_TOKEN=...` pattern. Lets `setup install`
76
+ // run as a single self-contained command instead of an interactive prompt.
77
+ const envToken = process.env.EML_API_TOKEN;
78
+ if (envToken && envToken.startsWith('eml_')) {
79
+ log(' ℹ EML_API_TOKEN found in environment — verifying...');
80
+ const health = await (0, _helpers_1.verifyToken)(API_URL, envToken);
81
+ if (health.ok) {
82
+ log(' ✓ Token verified');
83
+ return envToken;
84
+ }
85
+ if (health.status === 401) {
86
+ log(' ❌ env-var token rejected (401). Falling back to interactive prompt.');
87
+ }
88
+ else {
89
+ log(` ❌ env-var token check failed (${health.error ?? `HTTP ${health.status ?? '?'}`}). Falling back to interactive prompt.`);
90
+ }
91
+ }
92
+ while (true) {
93
+ const token = await (0, _helpers_1.promptText)(' Paste your EML API token (eml_...): ');
94
+ if (!token) {
95
+ log(' Empty token, try again.');
96
+ continue;
97
+ }
98
+ if (!token.startsWith('eml_')) {
99
+ log(' Tokens should start with "eml_". Try again.');
100
+ continue;
101
+ }
102
+ log(' Verifying token against /stats (auth-required)...');
103
+ const health = await (0, _helpers_1.verifyToken)(API_URL, token);
104
+ if (health.ok) {
105
+ log(' ✓ Token verified');
106
+ return token;
107
+ }
108
+ if (health.status === 401) {
109
+ log(' ❌ Token rejected (401). Try a different token.');
110
+ continue;
111
+ }
112
+ log(` ❌ Health check failed: ${health.error ?? `HTTP ${health.status ?? '?'}`}. Try again or check connectivity.`);
113
+ }
114
+ }
115
+ function summarizePlan() {
116
+ log(`
117
+ EML Setup is about to make the following changes:
118
+
119
+ ${_helpers_1.EML_CONFIG}
120
+ Write token + URL + client-version (chmod 600).
121
+
122
+ Claude Code MCP config (~/.claude.json)
123
+ Register MCP server "${_helpers_1.MCP_SERVER_NAME}" via \`claude mcp add\`.
124
+
125
+ ~/.claude/settings.json (backup created first)
126
+ Add permission entries:
127
+ • ${MCP_PERMISSION}
128
+ (Claude calls EML MCP tools without per-call permission prompt)
129
+ • ${BASH_PERMISSION}
130
+ (Claude can run \`setup update\` etc. without per-call prompt)
131
+ Add hook entries:
132
+ • SessionStart → ~/.eml/hooks/session_start_boot.sh
133
+ • UserPromptSubmit → ~/.eml/hooks/user_prompt_submit_reminder.sh
134
+
135
+ ${_helpers_1.EML_HOOKS_DIR}
136
+ Copy 2 hook scripts from this npm-package's templates/.
137
+
138
+ The setup is idempotent. Re-running won't create duplicates. \`setup uninstall\` reverses everything.
139
+ `);
140
+ }
141
+ function writeConfigStep(token) {
142
+ log('\nStep 4/8 — Write ~/.eml/config (chmod 600)');
143
+ (0, _helpers_1.writeConfig)({
144
+ EML_URL: API_URL,
145
+ EML_API_TOKEN: token,
146
+ EML_CLIENT_VERSION: (0, _helpers_1.pkgVersion)(),
147
+ });
148
+ log(` ✓ Config written (EML_CLIENT_VERSION=${(0, _helpers_1.pkgVersion)()})`);
149
+ }
150
+ function registerMcpServer(token) {
151
+ log('\nStep 5/8 — Register MCP server with Claude Code');
152
+ // Best-effort remove any prior registration with the same name (idempotency).
153
+ const remove = (0, _helpers_1.claudeCli)(['mcp', 'remove', _helpers_1.MCP_SERVER_NAME]);
154
+ if (remove.status === 0) {
155
+ log(` ℹ Removed existing "${_helpers_1.MCP_SERVER_NAME}" registration (idempotent reinstall)`);
156
+ }
157
+ const args = [
158
+ 'mcp', 'add', _helpers_1.MCP_SERVER_NAME,
159
+ '--scope', 'user',
160
+ '--transport', 'stdio',
161
+ '--env', `EML_API_TOKEN=${token}`,
162
+ '--',
163
+ 'npx', '@engramprotocol/mcp-server@~0.10',
164
+ '--url', API_URL,
165
+ ];
166
+ const result = (0, _helpers_1.claudeCli)(args);
167
+ if (result.status !== 0) {
168
+ fail(`claude mcp add failed (exit ${result.status}):\n${result.stderr || result.stdout}`);
169
+ }
170
+ log(` ✓ MCP server "${_helpers_1.MCP_SERVER_NAME}" registered (scope=user, stdio)`);
171
+ }
172
+ function patchPermissions(settings) {
173
+ log('\nStep 6/8 — Permissions');
174
+ const a = (0, _helpers_1.mergePermission)(settings, MCP_PERMISSION);
175
+ const b = (0, _helpers_1.mergePermission)(settings, BASH_PERMISSION);
176
+ if (a)
177
+ log(` ✓ Added ${MCP_PERMISSION}`);
178
+ else
179
+ log(` ℹ ${MCP_PERMISSION} already present`);
180
+ if (b)
181
+ log(` ✓ Added ${BASH_PERMISSION}`);
182
+ else
183
+ log(` ℹ ${BASH_PERMISSION} already present`);
184
+ }
185
+ function patchHooks(settings) {
186
+ log('\nStep 7/8 — Hooks');
187
+ for (const tpl of _helpers_1.HOOK_TEMPLATES) {
188
+ const { installedPath, alreadyExisted } = (0, _helpers_1.installTemplate)(tpl.filename);
189
+ log(` ${alreadyExisted ? 'ℹ overwrote' : '✓ installed'} ${installedPath}`);
190
+ const command = `bash ${installedPath}`;
191
+ const added = (0, _helpers_1.mergeHookCommand)(settings, tpl.event, command);
192
+ if (added)
193
+ log(` ↳ hook entry added for ${tpl.event}`);
194
+ else
195
+ log(` ↳ hook entry for ${tpl.event} already present`);
196
+ }
197
+ }
198
+ async function smokeTest(token) {
199
+ log('\nStep 8/8 — Smoke test');
200
+ const result = await (0, _helpers_1.verifyToken)(API_URL, token);
201
+ if (!result.ok) {
202
+ fail(`/stats round-trip failed (${result.status ?? result.error}). Setup completed but server may be unreachable; check ~/.eml/config and try again.`);
203
+ }
204
+ log(' ✓ /stats round-trip OK');
205
+ }
206
+ async function runInstall(_argv) {
207
+ log('Engram Protocol — Setup (install)');
208
+ await preflight();
209
+ const token = await tokenPrompt();
210
+ log('\nStep 3/8 — Consent');
211
+ summarizePlan();
212
+ const ok = await (0, _helpers_1.promptConfirm)('Proceed?', false);
213
+ if (!ok) {
214
+ log('\nCancelled. No changes made.');
215
+ return;
216
+ }
217
+ // ---- Begin mutations ----
218
+ const backupPath = (0, _helpers_1.backupSettings)();
219
+ if (backupPath)
220
+ log(` ℹ Backup: ${backupPath}`);
221
+ writeConfigStep(token);
222
+ registerMcpServer(token);
223
+ // Single read-modify-write cycle for settings.json: permissions + hooks merged together.
224
+ const settings = (0, _helpers_1.readSettings)();
225
+ patchPermissions(settings);
226
+ patchHooks(settings);
227
+ (0, _helpers_1.writeSettings)(settings);
228
+ log(` ✓ ${_helpers_1.CLAUDE_SETTINGS} updated`);
229
+ await smokeTest(token);
230
+ log(`
231
+ ✅ Done.
232
+
233
+ Restart Claude Code for the changes to take effect.
234
+ Hooks installed in: ${_helpers_1.EML_HOOKS_DIR}
235
+ Config: ${_helpers_1.EML_CONFIG}
236
+ Marker: # ${_helpers_1.MANAGED_BY_MARKER} (line 2 of each hook script + on managed entries)
237
+
238
+ To reverse: \`npx @engramprotocol/mcp-server setup uninstall\`
239
+ `);
240
+ }
241
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/setup/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runUninstall(_argv: string[]): Promise<void>;
2
+ //# sourceMappingURL=uninstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/setup/uninstall.ts"],"names":[],"mappings":"AA6BA,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiFjE"}
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ // Setup-mode uninstall flow. Implements v0.10.0-PROPOSAL C.5 §Uninstall flow.
3
+ //
4
+ // Removes all engramprotocol-managed entries from Claude Code config and removes
5
+ // the hook scripts. User's non-EML hooks, permissions, and settings remain untouched.
6
+ // ~/.eml/config is kept by default (user data — confirmed before delete).
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.runUninstall = runUninstall;
42
+ const fs = __importStar(require("fs"));
43
+ const _helpers_1 = require("./_helpers");
44
+ function log(msg) {
45
+ process.stderr.write(msg + '\n');
46
+ }
47
+ const MCP_PERMISSION = `mcp__${_helpers_1.MCP_SERVER_NAME}__*`;
48
+ const BASH_PERMISSION = `Bash(npx @engramprotocol/mcp-server setup *)`;
49
+ async function runUninstall(_argv) {
50
+ log('Engram Protocol — Setup (uninstall)\n');
51
+ log('Will remove:');
52
+ log(` • Hook entries in ${_helpers_1.CLAUDE_SETTINGS} that reference ${_helpers_1.EML_HOOKS_DIR}`);
53
+ log(` • Permission entries: ${MCP_PERMISSION}, ${BASH_PERMISSION}`);
54
+ log(` • MCP server registration "${_helpers_1.MCP_SERVER_NAME}" (via \`claude mcp remove\`)`);
55
+ log(` • ${_helpers_1.EML_HOOKS_DIR} (hook scripts)`);
56
+ log(` • ${_helpers_1.EML_CONFIG} (only after explicit confirmation — contains token)`);
57
+ log('');
58
+ const ok = await (0, _helpers_1.promptConfirm)('Proceed?', false);
59
+ if (!ok) {
60
+ log('\nCancelled. No changes made.');
61
+ return;
62
+ }
63
+ // --- 1. settings.json — backup + remove managed entries -------------------
64
+ if (fs.existsSync(_helpers_1.CLAUDE_SETTINGS)) {
65
+ const backupPath = (0, _helpers_1.backupSettings)();
66
+ log(`\n ℹ Backup: ${backupPath}`);
67
+ const settings = (0, _helpers_1.readSettings)();
68
+ const hooksRemoved = (0, _helpers_1.removeHooksByCommandPrefix)(settings, _helpers_1.EML_HOOKS_DIR);
69
+ log(` ✓ Removed ${hooksRemoved} hook entr${hooksRemoved === 1 ? 'y' : 'ies'}`);
70
+ const permsRemoved = (0, _helpers_1.removePermissions)(settings, (e) => e === MCP_PERMISSION || e === BASH_PERMISSION);
71
+ log(` ✓ Removed ${permsRemoved} permission entr${permsRemoved === 1 ? 'y' : 'ies'}`);
72
+ (0, _helpers_1.writeSettings)(settings);
73
+ log(` ✓ ${_helpers_1.CLAUDE_SETTINGS} updated`);
74
+ }
75
+ else {
76
+ log(` ℹ ${_helpers_1.CLAUDE_SETTINGS} not found — nothing to clean there`);
77
+ }
78
+ // --- 2. claude mcp remove -------------------------------------------------
79
+ const remove = (0, _helpers_1.claudeCli)(['mcp', 'remove', _helpers_1.MCP_SERVER_NAME]);
80
+ if (remove.status === 0) {
81
+ log(` ✓ MCP server "${_helpers_1.MCP_SERVER_NAME}" removed`);
82
+ }
83
+ else {
84
+ log(` ℹ \`claude mcp remove ${_helpers_1.MCP_SERVER_NAME}\` returned non-zero (likely already absent)`);
85
+ }
86
+ // --- 3. ~/.eml/hooks/ -----------------------------------------------------
87
+ if (fs.existsSync(_helpers_1.EML_HOOKS_DIR)) {
88
+ fs.rmSync(_helpers_1.EML_HOOKS_DIR, { recursive: true, force: true });
89
+ log(` ✓ Removed ${_helpers_1.EML_HOOKS_DIR}`);
90
+ }
91
+ else {
92
+ log(` ℹ ${_helpers_1.EML_HOOKS_DIR} not found — already gone`);
93
+ }
94
+ // --- 4. ~/.eml/config — confirm before delete -----------------------------
95
+ if (fs.existsSync(_helpers_1.EML_CONFIG)) {
96
+ log('');
97
+ const deleteConfig = await (0, _helpers_1.promptConfirm)(`Delete ${_helpers_1.EML_CONFIG} (contains your API token)?`, false);
98
+ if (deleteConfig) {
99
+ fs.rmSync(_helpers_1.EML_CONFIG);
100
+ log(` ✓ Removed ${_helpers_1.EML_CONFIG}`);
101
+ // ~/.eml/ — remove if empty
102
+ try {
103
+ if (fs.readdirSync(_helpers_1.EML_DIR).length === 0) {
104
+ fs.rmdirSync(_helpers_1.EML_DIR);
105
+ log(` ✓ Removed empty ${_helpers_1.EML_DIR}`);
106
+ }
107
+ }
108
+ catch { /* logs subdir or similar exists — leave as-is */ }
109
+ }
110
+ else {
111
+ log(` ℹ Kept ${_helpers_1.EML_CONFIG}`);
112
+ }
113
+ }
114
+ log(`
115
+ ✅ Uninstall complete.
116
+
117
+ Restart Claude Code for the changes to take full effect.
118
+ `);
119
+ }
120
+ //# sourceMappingURL=uninstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/setup/uninstall.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runUpdate(_argv: string[]): Promise<void>;
2
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/setup/update.ts"],"names":[],"mappings":"AAwCA,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyE9D"}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ // Setup-mode update flow. Implements v0.10.0-PROPOSAL C.5 §Update flow.
3
+ //
4
+ // What this does:
5
+ // - Refreshes EML_CLIENT_VERSION in ~/.eml/config to match the currently-installed
6
+ // package version (so the hook's banner-check sees the right version)
7
+ // - Overwrites hook templates in ~/.eml/hooks/ from the current package's templates/
8
+ // (marker-aware: skips files that the user has customized — no marker present)
9
+ // - Verifies that ~/.claude/settings.json still has the managed entries
10
+ //
11
+ // What this does NOT do:
12
+ // - Refresh the npm package itself. That's the user's responsibility (typically via
13
+ // `npx @engramprotocol/mcp-server@latest setup update` to bust npx cache).
14
+ // If the package version hasn't changed when `setup update` runs, it's a no-op
15
+ // except for config-bump and template-overwrite (idempotent).
16
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ var desc = Object.getOwnPropertyDescriptor(m, k);
19
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
20
+ desc = { enumerable: true, get: function() { return m[k]; } };
21
+ }
22
+ Object.defineProperty(o, k2, desc);
23
+ }) : (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ o[k2] = m[k];
26
+ }));
27
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
28
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
29
+ }) : function(o, v) {
30
+ o["default"] = v;
31
+ });
32
+ var __importStar = (this && this.__importStar) || (function () {
33
+ var ownKeys = function(o) {
34
+ ownKeys = Object.getOwnPropertyNames || function (o) {
35
+ var ar = [];
36
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
37
+ return ar;
38
+ };
39
+ return ownKeys(o);
40
+ };
41
+ return function (mod) {
42
+ if (mod && mod.__esModule) return mod;
43
+ var result = {};
44
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
45
+ __setModuleDefault(result, mod);
46
+ return result;
47
+ };
48
+ })();
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ exports.runUpdate = runUpdate;
51
+ const fs = __importStar(require("fs"));
52
+ const _helpers_1 = require("./_helpers");
53
+ function log(msg) {
54
+ process.stderr.write(msg + '\n');
55
+ }
56
+ function fail(msg, code = 1) {
57
+ log(`\n❌ ${msg}`);
58
+ process.exit(code);
59
+ }
60
+ async function runUpdate(_argv) {
61
+ log('Engram Protocol — Setup (update)');
62
+ // --- 1. Read existing config ---------------------------------------------
63
+ const cfg = (0, _helpers_1.readConfig)();
64
+ if (!cfg) {
65
+ fail(`No installation found at ${_helpers_1.EML_CONFIG}. Run \`setup install\` first.`);
66
+ }
67
+ if (!cfg.EML_URL || !cfg.EML_API_TOKEN) {
68
+ fail(`Config at ${_helpers_1.EML_CONFIG} is incomplete (missing EML_URL or EML_API_TOKEN). Re-run \`setup install\`.`);
69
+ }
70
+ const oldVersion = cfg.EML_CLIENT_VERSION || '(unset)';
71
+ const newVersion = (0, _helpers_1.pkgVersion)();
72
+ log(` Current installed version: ${oldVersion}`);
73
+ log(` This package's version: ${newVersion}`);
74
+ if (oldVersion === newVersion) {
75
+ log(' → Config already at this version; will still refresh templates (idempotent).');
76
+ }
77
+ // --- 2. Update config (bump EML_CLIENT_VERSION) --------------------------
78
+ (0, _helpers_1.writeConfig)({ ...cfg, EML_CLIENT_VERSION: newVersion });
79
+ log(` ✓ ${_helpers_1.EML_CONFIG} EML_CLIENT_VERSION → ${newVersion}`);
80
+ // --- 3. Hook templates: overwrite (marker-aware) -------------------------
81
+ log('\nHook templates:');
82
+ fs.mkdirSync(_helpers_1.EML_HOOKS_DIR, { recursive: true });
83
+ for (const tpl of _helpers_1.HOOK_TEMPLATES) {
84
+ const installedPath = `${_helpers_1.EML_HOOKS_DIR}/${tpl.filename}`;
85
+ if (fs.existsSync(installedPath)) {
86
+ const current = fs.readFileSync(installedPath, 'utf-8');
87
+ if (!(0, _helpers_1.hasMarker)(current)) {
88
+ log(` ⚠ skip ${installedPath} — user-customized (no \`${_helpers_1.MANAGED_BY_MARKER}\` marker). Manual review needed.`);
89
+ continue;
90
+ }
91
+ }
92
+ (0, _helpers_1.installTemplate)(tpl.filename);
93
+ log(` ✓ ${installedPath}`);
94
+ }
95
+ // --- 4. Settings.json sanity check ---------------------------------------
96
+ log('\nSettings.json sanity check:');
97
+ if (!fs.existsSync(_helpers_1.CLAUDE_SETTINGS)) {
98
+ log(` ⚠ ${_helpers_1.CLAUDE_SETTINGS} missing — was the install completed? Run \`setup install\` again.`);
99
+ }
100
+ else {
101
+ const settings = (0, _helpers_1.readSettings)();
102
+ const allow = settings.permissions?.allow ?? [];
103
+ const hasMcpPerm = allow.includes(`mcp__${_helpers_1.MCP_SERVER_NAME}__*`);
104
+ if (hasMcpPerm)
105
+ log(` ✓ mcp__${_helpers_1.MCP_SERVER_NAME}__* present in permissions.allow`);
106
+ else
107
+ log(` ⚠ mcp__${_helpers_1.MCP_SERVER_NAME}__* missing from permissions.allow — run \`setup install\` to restore`);
108
+ let hookEntries = 0;
109
+ for (const event of Object.keys(settings.hooks ?? {})) {
110
+ const arr = settings.hooks[event] ?? [];
111
+ for (const e of arr) {
112
+ for (const h of e.hooks ?? []) {
113
+ if (typeof h.command === 'string' && h.command.includes(_helpers_1.EML_HOOKS_DIR))
114
+ hookEntries += 1;
115
+ }
116
+ }
117
+ }
118
+ log(` ${hookEntries > 0 ? '✓' : '⚠'} ${hookEntries} hook entries reference ${_helpers_1.EML_HOOKS_DIR}`);
119
+ }
120
+ log(`
121
+ ✅ Update complete.
122
+
123
+ Note: this updates the local config + hook templates of the currently-running setup-mode.
124
+ If you ran an old version via npx cache, run again with @latest to force a fresh download:
125
+ npx @engramprotocol/mcp-server@latest setup update
126
+
127
+ Restart Claude Code for changes to take effect.
128
+ `);
129
+ }
130
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/setup/update.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"boot.d.ts","sourceRoot":"","sources":["../../src/tools/boot.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAGhD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAkB1E"}
1
+ {"version":3,"file":"boot.d.ts","sourceRoot":"","sources":["../../src/tools/boot.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAGhD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAgB1E"}
@@ -6,10 +6,8 @@ const _helpers_1 = require("./_helpers");
6
6
  function registerBootTool(server, http) {
7
7
  server.registerTool('eml_boot', {
8
8
  title: 'Boot Brain',
9
- description: 'Loads the brain boot view: identity (profile/rule), current status, ' +
10
- 'open tasks, recent logs, brain-hygiene reviews. Call at session start ' +
11
- 'to load context — the returned markdown is suitable for direct ' +
12
- 'injection into the context window.',
9
+ description: 'Manual brain-reload returns the same markdown the SessionStart-Hook ' +
10
+ 'delivers automatically. Use mid-session to refresh brain state.',
13
11
  inputSchema: {
14
12
  agent: zod_1.z.string().optional().describe('Agent ID (e.g. "motti", "default"). If omitted, the server uses the brain name as default.'),
15
13
  },
@@ -1 +1 @@
1
- {"version":3,"file":"boot.js","sourceRoot":"","sources":["../../src/tools/boot.ts"],"names":[],"mappings":";;AAKA,4CAkBC;AAvBD,6BAAuB;AAGvB,yCAAqC;AAErC,SAAgB,gBAAgB,CAAC,MAAiB,EAAE,IAAgB;IAClE,MAAM,CAAC,YAAY,CACjB,UAAU,EACV;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EACT,sEAAsE;YACtE,wEAAwE;YACxE,iEAAiE;YACjE,oCAAoC;QACtC,WAAW,EAAE;YACX,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACnC,4FAA4F,CAC7F;SACF;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAA,mBAAQ,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAC1E,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"boot.js","sourceRoot":"","sources":["../../src/tools/boot.ts"],"names":[],"mappings":";;AAKA,4CAgBC;AArBD,6BAAuB;AAGvB,yCAAqC;AAErC,SAAgB,gBAAgB,CAAC,MAAiB,EAAE,IAAgB;IAClE,MAAM,CAAC,YAAY,CACjB,UAAU,EACV;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EACT,wEAAwE;YACxE,iEAAiE;QACnE,WAAW,EAAE;YACX,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACnC,4FAA4F,CAC7F;SACF;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAA,mBAAQ,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAC1E,CAAA;AACH,CAAC"}