@colbymchenry/codegraph-darwin-arm64 0.9.1 → 0.9.3

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 (72) hide show
  1. package/bin/codegraph +2 -1
  2. package/lib/dist/bin/codegraph.d.ts +1 -0
  3. package/lib/dist/bin/codegraph.d.ts.map +1 -1
  4. package/lib/dist/bin/codegraph.js +41 -1
  5. package/lib/dist/bin/codegraph.js.map +1 -1
  6. package/lib/dist/extraction/grammars.d.ts +7 -1
  7. package/lib/dist/extraction/grammars.d.ts.map +1 -1
  8. package/lib/dist/extraction/grammars.js +30 -0
  9. package/lib/dist/extraction/grammars.js.map +1 -1
  10. package/lib/dist/extraction/index.d.ts +9 -14
  11. package/lib/dist/extraction/index.d.ts.map +1 -1
  12. package/lib/dist/extraction/index.js +75 -94
  13. package/lib/dist/extraction/index.js.map +1 -1
  14. package/lib/dist/extraction/tree-sitter.d.ts.map +1 -1
  15. package/lib/dist/extraction/tree-sitter.js +6 -0
  16. package/lib/dist/extraction/tree-sitter.js.map +1 -1
  17. package/lib/dist/extraction/wasm-runtime-flags.d.ts +26 -0
  18. package/lib/dist/extraction/wasm-runtime-flags.d.ts.map +1 -0
  19. package/lib/dist/extraction/wasm-runtime-flags.js +93 -0
  20. package/lib/dist/extraction/wasm-runtime-flags.js.map +1 -0
  21. package/lib/dist/index.d.ts +2 -14
  22. package/lib/dist/index.d.ts.map +1 -1
  23. package/lib/dist/index.js +9 -49
  24. package/lib/dist/index.js.map +1 -1
  25. package/lib/dist/installer/index.d.ts +54 -2
  26. package/lib/dist/installer/index.d.ts.map +1 -1
  27. package/lib/dist/installer/index.js +123 -1
  28. package/lib/dist/installer/index.js.map +1 -1
  29. package/lib/dist/installer/targets/cursor.d.ts.map +1 -1
  30. package/lib/dist/installer/targets/cursor.js +57 -3
  31. package/lib/dist/installer/targets/cursor.js.map +1 -1
  32. package/lib/dist/installer/targets/hermes.d.ts +18 -0
  33. package/lib/dist/installer/targets/hermes.d.ts.map +1 -0
  34. package/lib/dist/installer/targets/hermes.js +305 -0
  35. package/lib/dist/installer/targets/hermes.js.map +1 -0
  36. package/lib/dist/installer/targets/registry.d.ts.map +1 -1
  37. package/lib/dist/installer/targets/registry.js +2 -0
  38. package/lib/dist/installer/targets/registry.js.map +1 -1
  39. package/lib/dist/installer/targets/types.d.ts +1 -1
  40. package/lib/dist/installer/targets/types.d.ts.map +1 -1
  41. package/lib/dist/mcp/tools.d.ts.map +1 -1
  42. package/lib/dist/mcp/tools.js +25 -2
  43. package/lib/dist/mcp/tools.js.map +1 -1
  44. package/lib/dist/resolution/frameworks/drupal.d.ts +51 -0
  45. package/lib/dist/resolution/frameworks/drupal.d.ts.map +1 -0
  46. package/lib/dist/resolution/frameworks/drupal.js +335 -0
  47. package/lib/dist/resolution/frameworks/drupal.js.map +1 -0
  48. package/lib/dist/resolution/frameworks/index.d.ts +1 -0
  49. package/lib/dist/resolution/frameworks/index.d.ts.map +1 -1
  50. package/lib/dist/resolution/frameworks/index.js +5 -1
  51. package/lib/dist/resolution/frameworks/index.js.map +1 -1
  52. package/lib/dist/sync/watcher.d.ts +2 -4
  53. package/lib/dist/sync/watcher.d.ts.map +1 -1
  54. package/lib/dist/sync/watcher.js +4 -6
  55. package/lib/dist/sync/watcher.js.map +1 -1
  56. package/lib/dist/types.d.ts +1 -55
  57. package/lib/dist/types.d.ts.map +1 -1
  58. package/lib/dist/types.js +3 -190
  59. package/lib/dist/types.js.map +1 -1
  60. package/lib/node_modules/.package-lock.json +10 -1
  61. package/lib/node_modules/ignore/LICENSE-MIT +21 -0
  62. package/lib/node_modules/ignore/README.md +452 -0
  63. package/lib/node_modules/ignore/index.d.ts +81 -0
  64. package/lib/node_modules/ignore/index.js +784 -0
  65. package/lib/node_modules/ignore/legacy.js +681 -0
  66. package/lib/node_modules/ignore/package.json +87 -0
  67. package/lib/package.json +2 -1
  68. package/package.json +1 -1
  69. package/lib/dist/config.d.ts +0 -51
  70. package/lib/dist/config.d.ts.map +0 -1
  71. package/lib/dist/config.js +0 -321
  72. package/lib/dist/config.js.map +0 -1
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Hermes Agent target.
3
+ *
4
+ * Hermes reads MCP servers from `$HERMES_HOME/config.yaml` under the
5
+ * top-level `mcp_servers` key, and exposes discovered MCP tools through
6
+ * dynamic toolsets named `mcp-<server>`. We add:
7
+ *
8
+ * mcp_servers.codegraph -> `codegraph serve --mcp`
9
+ * platform_toolsets.cli -> `mcp-codegraph`
10
+ *
11
+ * The second entry matters because Hermes CLI profiles often enable an
12
+ * explicit `platform_toolsets.cli` list. Without `mcp-codegraph` in that
13
+ * list, the MCP server can be configured and connected but its tools may
14
+ * still be filtered out of normal CLI sessions.
15
+ */
16
+ import { AgentTarget } from './types';
17
+ export declare const hermesTarget: AgentTarget;
18
+ //# sourceMappingURL=hermes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hermes.d.ts","sourceRoot":"","sources":["../../../src/installer/targets/hermes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,EACL,WAAW,EAKZ,MAAM,SAAS,CAAC;AAiRjB,eAAO,MAAM,YAAY,EAAE,WAAgC,CAAC"}
@@ -0,0 +1,305 @@
1
+ "use strict";
2
+ /**
3
+ * Hermes Agent target.
4
+ *
5
+ * Hermes reads MCP servers from `$HERMES_HOME/config.yaml` under the
6
+ * top-level `mcp_servers` key, and exposes discovered MCP tools through
7
+ * dynamic toolsets named `mcp-<server>`. We add:
8
+ *
9
+ * mcp_servers.codegraph -> `codegraph serve --mcp`
10
+ * platform_toolsets.cli -> `mcp-codegraph`
11
+ *
12
+ * The second entry matters because Hermes CLI profiles often enable an
13
+ * explicit `platform_toolsets.cli` list. Without `mcp-codegraph` in that
14
+ * list, the MCP server can be configured and connected but its tools may
15
+ * still be filtered out of normal CLI sessions.
16
+ */
17
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ var desc = Object.getOwnPropertyDescriptor(m, k);
20
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
21
+ desc = { enumerable: true, get: function() { return m[k]; } };
22
+ }
23
+ Object.defineProperty(o, k2, desc);
24
+ }) : (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ o[k2] = m[k];
27
+ }));
28
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
29
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
30
+ }) : function(o, v) {
31
+ o["default"] = v;
32
+ });
33
+ var __importStar = (this && this.__importStar) || (function () {
34
+ var ownKeys = function(o) {
35
+ ownKeys = Object.getOwnPropertyNames || function (o) {
36
+ var ar = [];
37
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
38
+ return ar;
39
+ };
40
+ return ownKeys(o);
41
+ };
42
+ return function (mod) {
43
+ if (mod && mod.__esModule) return mod;
44
+ var result = {};
45
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
46
+ __setModuleDefault(result, mod);
47
+ return result;
48
+ };
49
+ })();
50
+ Object.defineProperty(exports, "__esModule", { value: true });
51
+ exports.hermesTarget = void 0;
52
+ const fs = __importStar(require("fs"));
53
+ const path = __importStar(require("path"));
54
+ const os = __importStar(require("os"));
55
+ const shared_1 = require("./shared");
56
+ class HermesTarget {
57
+ id = 'hermes';
58
+ displayName = 'Hermes Agent';
59
+ docsUrl = 'https://hermes-agent.nousresearch.com';
60
+ supportsLocation(loc) {
61
+ return loc === 'global';
62
+ }
63
+ detect(loc) {
64
+ if (loc !== 'global') {
65
+ return { installed: false, alreadyConfigured: false };
66
+ }
67
+ const file = configPath();
68
+ const content = readText(file);
69
+ const installed = fs.existsSync(hermesHome()) || fs.existsSync(file);
70
+ return {
71
+ installed,
72
+ alreadyConfigured: hasCodeGraphMcpServer(content),
73
+ configPath: file,
74
+ };
75
+ }
76
+ install(loc, _opts) {
77
+ if (loc !== 'global') {
78
+ return {
79
+ files: [],
80
+ notes: ['Hermes Agent uses $HERMES_HOME/config.yaml; re-run with --location=global.'],
81
+ };
82
+ }
83
+ return {
84
+ files: [writeHermesConfig()],
85
+ notes: ['Start a new Hermes session for MCP changes to take effect.'],
86
+ };
87
+ }
88
+ uninstall(loc) {
89
+ if (loc !== 'global')
90
+ return { files: [] };
91
+ const file = configPath();
92
+ if (!fs.existsSync(file)) {
93
+ return { files: [{ path: file, action: 'not-found' }] };
94
+ }
95
+ const before = readText(file);
96
+ const after = removeCodeGraphToolset(removeCodeGraphMcpServer(before));
97
+ if (after === before) {
98
+ return { files: [{ path: file, action: 'not-found' }] };
99
+ }
100
+ (0, shared_1.atomicWriteFileSync)(file, ensureTrailingNewline(after));
101
+ return { files: [{ path: file, action: 'removed' }] };
102
+ }
103
+ printConfig(loc) {
104
+ if (loc !== 'global') {
105
+ return '# Hermes Agent uses $HERMES_HOME/config.yaml; use --location=global.\n';
106
+ }
107
+ return [
108
+ `# Add to ${configPath()}`,
109
+ '',
110
+ renderCodeGraphMcpBlock().join('\n'),
111
+ '',
112
+ 'platform_toolsets:',
113
+ ' cli:',
114
+ ' - hermes-cli',
115
+ ' - mcp-codegraph',
116
+ '',
117
+ ].join('\n');
118
+ }
119
+ describePaths(loc) {
120
+ return loc === 'global' ? [configPath()] : [];
121
+ }
122
+ }
123
+ function hermesHome() {
124
+ return process.env.HERMES_HOME
125
+ ? path.resolve(process.env.HERMES_HOME)
126
+ : path.join(os.homedir(), '.hermes');
127
+ }
128
+ function configPath() {
129
+ return path.join(hermesHome(), 'config.yaml');
130
+ }
131
+ function readText(file) {
132
+ try {
133
+ return fs.readFileSync(file, 'utf-8');
134
+ }
135
+ catch {
136
+ return '';
137
+ }
138
+ }
139
+ function writeHermesConfig() {
140
+ const file = configPath();
141
+ const existed = fs.existsSync(file);
142
+ const before = readText(file);
143
+ const afterMcp = upsertCodeGraphMcpServer(before);
144
+ const after = upsertCodeGraphToolset(afterMcp);
145
+ if (after === before) {
146
+ return { path: file, action: 'unchanged' };
147
+ }
148
+ (0, shared_1.atomicWriteFileSync)(file, ensureTrailingNewline(after));
149
+ return { path: file, action: existed ? 'updated' : 'created' };
150
+ }
151
+ function ensureTrailingNewline(text) {
152
+ return text.endsWith('\n') ? text : text + '\n';
153
+ }
154
+ function splitLines(content) {
155
+ return content.replace(/\r\n/g, '\n').replace(/\r/g, '\n').split('\n');
156
+ }
157
+ function joinLines(lines) {
158
+ while (lines.length > 0 && lines[lines.length - 1] === '')
159
+ lines.pop();
160
+ return lines.join('\n') + '\n';
161
+ }
162
+ function topLevelRange(lines, key) {
163
+ const start = lines.findIndex((line) => line.trim() === `${key}:`);
164
+ if (start === -1)
165
+ return null;
166
+ let end = lines.length;
167
+ for (let i = start + 1; i < lines.length; i++) {
168
+ const line = lines[i] ?? '';
169
+ if (line.trim() === '')
170
+ continue;
171
+ if (/^[A-Za-z_][A-Za-z0-9_-]*:\s*(?:#.*)?$/.test(line)) {
172
+ end = i;
173
+ break;
174
+ }
175
+ }
176
+ return { start, end };
177
+ }
178
+ function childRange(lines, parent, child) {
179
+ const startPattern = new RegExp(`^ ${escapeRegExp(child)}:\\s*(?:#.*)?$`);
180
+ let start = -1;
181
+ for (let i = parent.start + 1; i < parent.end; i++) {
182
+ if (startPattern.test(lines[i] ?? '')) {
183
+ start = i;
184
+ break;
185
+ }
186
+ }
187
+ if (start === -1)
188
+ return null;
189
+ let end = parent.end;
190
+ for (let i = start + 1; i < parent.end; i++) {
191
+ const line = lines[i] ?? '';
192
+ if (line.trim() === '')
193
+ continue;
194
+ if (/^ \S/.test(line)) {
195
+ end = i;
196
+ break;
197
+ }
198
+ }
199
+ while (end > start + 1 && (lines[end - 1] ?? '').trim() === '') {
200
+ end--;
201
+ }
202
+ return { start, end };
203
+ }
204
+ function escapeRegExp(value) {
205
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
206
+ }
207
+ function renderCodeGraphMcpChild() {
208
+ return [
209
+ ' codegraph:',
210
+ ' command: codegraph',
211
+ ' args:',
212
+ ' - serve',
213
+ ' - --mcp',
214
+ ' timeout: 120',
215
+ ' connect_timeout: 60',
216
+ ' enabled: true',
217
+ ];
218
+ }
219
+ function renderCodeGraphMcpBlock() {
220
+ return ['mcp_servers:', ...renderCodeGraphMcpChild()];
221
+ }
222
+ function hasCodeGraphMcpServer(content) {
223
+ const lines = splitLines(content);
224
+ const parent = topLevelRange(lines, 'mcp_servers');
225
+ return !!parent && !!childRange(lines, parent, 'codegraph');
226
+ }
227
+ function upsertCodeGraphMcpServer(content) {
228
+ const lines = splitLines(content);
229
+ const parent = topLevelRange(lines, 'mcp_servers');
230
+ const child = parent ? childRange(lines, parent, 'codegraph') : null;
231
+ const replacement = renderCodeGraphMcpChild();
232
+ if (!parent) {
233
+ if (lines.length > 0 && lines[lines.length - 1] === '')
234
+ lines.pop();
235
+ if (lines.length > 0)
236
+ lines.push('');
237
+ lines.push(...renderCodeGraphMcpBlock());
238
+ return joinLines(lines);
239
+ }
240
+ if (child) {
241
+ const existing = lines.slice(child.start, child.end);
242
+ if (arrayEqual(existing, replacement))
243
+ return joinLines(lines);
244
+ lines.splice(child.start, child.end - child.start, ...replacement);
245
+ return joinLines(lines);
246
+ }
247
+ lines.splice(parent.end, 0, ...replacement);
248
+ return joinLines(lines);
249
+ }
250
+ function removeCodeGraphMcpServer(content) {
251
+ const lines = splitLines(content);
252
+ const parent = topLevelRange(lines, 'mcp_servers');
253
+ const child = parent ? childRange(lines, parent, 'codegraph') : null;
254
+ if (!child)
255
+ return content;
256
+ lines.splice(child.start, child.end - child.start);
257
+ return joinLines(lines);
258
+ }
259
+ function upsertCodeGraphToolset(content) {
260
+ const lines = splitLines(content);
261
+ const parent = topLevelRange(lines, 'platform_toolsets');
262
+ const cli = parent ? childRange(lines, parent, 'cli') : null;
263
+ if (!parent) {
264
+ if (lines.length > 0 && lines[lines.length - 1] === '')
265
+ lines.pop();
266
+ if (lines.length > 0)
267
+ lines.push('');
268
+ lines.push('platform_toolsets:', ' cli:', ' - hermes-cli', ' - mcp-codegraph');
269
+ return joinLines(lines);
270
+ }
271
+ if (!cli) {
272
+ lines.splice(parent.end, 0, ' cli:', ' - hermes-cli', ' - mcp-codegraph');
273
+ return joinLines(lines);
274
+ }
275
+ const hasEntry = lines
276
+ .slice(cli.start + 1, cli.end)
277
+ .some((line) => line.trim() === '- mcp-codegraph');
278
+ if (hasEntry)
279
+ return joinLines(lines);
280
+ lines.splice(cli.end, 0, ' - mcp-codegraph');
281
+ return joinLines(lines);
282
+ }
283
+ function removeCodeGraphToolset(content) {
284
+ const lines = splitLines(content);
285
+ const parent = topLevelRange(lines, 'platform_toolsets');
286
+ const cli = parent ? childRange(lines, parent, 'cli') : null;
287
+ if (!cli)
288
+ return content;
289
+ const hasEntry = lines
290
+ .slice(cli.start + 1, cli.end)
291
+ .some((line) => line.trim() === '- mcp-codegraph');
292
+ if (!hasEntry)
293
+ return content;
294
+ const next = lines.filter((line, idx) => {
295
+ if (idx <= cli.start || idx >= cli.end)
296
+ return true;
297
+ return line.trim() !== '- mcp-codegraph';
298
+ });
299
+ return joinLines(next);
300
+ }
301
+ function arrayEqual(a, b) {
302
+ return a.length === b.length && a.every((value, idx) => value === b[idx]);
303
+ }
304
+ exports.hermesTarget = new HermesTarget();
305
+ //# sourceMappingURL=hermes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hermes.js","sourceRoot":"","sources":["../../../src/installer/targets/hermes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/installer/targets/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAM1D,eAAO,MAAM,WAAW,EAAE,SAAS,WAAW,EAK5C,CAAC;AAEH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAE7D;AAED,wBAAgB,aAAa,IAAI,QAAQ,EAAE,CAE1C;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC9C,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;CAC9C,CAAC,CAKD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,GAAG,WAAW,EAAE,CAyB7E"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/installer/targets/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAO1D,eAAO,MAAM,WAAW,EAAE,SAAS,WAAW,EAM5C,CAAC;AAEH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAE7D;AAED,wBAAgB,aAAa,IAAI,QAAQ,EAAE,CAE1C;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC9C,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;CAC9C,CAAC,CAKD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,GAAG,WAAW,EAAE,CAyB7E"}
@@ -17,11 +17,13 @@ const claude_1 = require("./claude");
17
17
  const cursor_1 = require("./cursor");
18
18
  const codex_1 = require("./codex");
19
19
  const opencode_1 = require("./opencode");
20
+ const hermes_1 = require("./hermes");
20
21
  exports.ALL_TARGETS = Object.freeze([
21
22
  claude_1.claudeTarget,
22
23
  cursor_1.cursorTarget,
23
24
  codex_1.codexTarget,
24
25
  opencode_1.opencodeTarget,
26
+ hermes_1.hermesTarget,
25
27
  ]);
26
28
  function getTarget(id) {
27
29
  return exports.ALL_TARGETS.find((t) => t.id === id);
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/installer/targets/registry.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAeH,8BAEC;AAED,sCAEC;AAQD,8BAQC;AAaD,8CAyBC;AAxED,qCAAwC;AACxC,qCAAwC;AACxC,mCAAsC;AACtC,yCAA4C;AAE/B,QAAA,WAAW,GAA2B,MAAM,CAAC,MAAM,CAAC;IAC/D,qBAAY;IACZ,qBAAY;IACZ,mBAAW;IACX,yBAAc;CACf,CAAC,CAAC;AAEH,SAAgB,SAAS,CAAC,EAAU;IAClC,OAAO,mBAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,SAAgB,aAAa;IAC3B,OAAO,mBAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACtC,CAAC;AAED;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,GAAa;IAIrC,OAAO,mBAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAClC,MAAM;QACN,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;KAC9B,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,iBAAiB,CAAC,KAAa,EAAE,GAAa;IAC5D,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC;IAChC,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,CAAC,GAAG,mBAAW,CAAC,CAAC;IAC7C,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC/E,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;QACrE,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QACrC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpC,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;YACnB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,IAAI,KAAK,CACb,2BAA2B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,KAAK,iCAAiC,CAChG,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/installer/targets/registry.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAiBH,8BAEC;AAED,sCAEC;AAQD,8BAQC;AAaD,8CAyBC;AA1ED,qCAAwC;AACxC,qCAAwC;AACxC,mCAAsC;AACtC,yCAA4C;AAC5C,qCAAwC;AAE3B,QAAA,WAAW,GAA2B,MAAM,CAAC,MAAM,CAAC;IAC/D,qBAAY;IACZ,qBAAY;IACZ,mBAAW;IACX,yBAAc;IACd,qBAAY;CACb,CAAC,CAAC;AAEH,SAAgB,SAAS,CAAC,EAAU;IAClC,OAAO,mBAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,SAAgB,aAAa;IAC3B,OAAO,mBAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACtC,CAAC;AAED;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,GAAa;IAIrC,OAAO,mBAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAClC,MAAM;QACN,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;KAC9B,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,iBAAiB,CAAC,KAAa,EAAE,GAAa;IAC5D,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC;IAChC,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,CAAC,GAAG,mBAAW,CAAC,CAAC;IAC7C,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC/E,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;QACrE,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QACrC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpC,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;YACnB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,IAAI,KAAK,CACb,2BAA2B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,KAAK,iCAAiC,CAChG,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -17,7 +17,7 @@ export type Location = 'global' | 'local';
17
17
  * lookup. New targets add a value here when they're added to the
18
18
  * registry. Keep these short and lowercase.
19
19
  */
20
- export type TargetId = 'claude' | 'cursor' | 'codex' | 'opencode';
20
+ export type TargetId = 'claude' | 'cursor' | 'codex' | 'opencode' | 'hermes';
21
21
  /**
22
22
  * Result of `target.detect(location)`.
23
23
  *
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/installer/targets/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE1C;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;AAElE;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,CAAC;KAChF,CAAC,CAAC;IACH;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,gEAAgE;IAChE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;;OAOG;IACH,gBAAgB,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzC,MAAM,CAAC,GAAG,EAAE,QAAQ,GAAG,eAAe,CAAC;IACvC,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,GAAG,WAAW,CAAC;IAC1D;;;;;OAKG;IACH,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,WAAW,CAAC;IACtC;;;;OAIG;IACH,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CAAC;IACnC,oEAAoE;IACpE,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,EAAE,CAAC;IACvC;;;;;;;;;;;;;OAaG;IACH,mBAAmB,CAAC,IAAI,WAAW,CAAC;CACrC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/installer/targets/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE1C;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE7E;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,CAAC;KAChF,CAAC,CAAC;IACH;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,gEAAgE;IAChE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;;OAOG;IACH,gBAAgB,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzC,MAAM,CAAC,GAAG,EAAE,QAAQ,GAAG,eAAe,CAAC;IACvC,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,GAAG,WAAW,CAAC;IAC1D;;;;;OAKG;IACH,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,WAAW,CAAC;IACtC;;;;OAIG;IACH,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CAAC;IACnC,oEAAoE;IACpE,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,EAAE,CAAC;IACvC;;;;;;;;;;;;;OAaG;IACH,mBAAmB,CAAC,IAAI,WAAW,CAAC;CACrC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
@@ -176,15 +176,38 @@ function numberSourceLines(slice, firstLineNumber) {
176
176
  /**
177
177
  * Mark a Claude session as having consulted MCP tools.
178
178
  * This enables Grep/Glob/Bash commands that would otherwise be blocked.
179
+ *
180
+ * Why the explicit openSync + O_NOFOLLOW dance instead of plain writeFileSync:
181
+ * tmpdir() is world-writable on Linux (mode 1777), so on a shared multi-user
182
+ * machine any other local user can pre-create `codegraph-consulted-<hash>` as
183
+ * a symlink pointing at a file the victim owns. The old `writeFileSync` would
184
+ * happily follow that link and overwrite the target's contents with the ISO
185
+ * timestamp string (CWE-59). The session-id hash provides the predictability
186
+ * gate, but it's defense-in-depth: if a session id ever surfaces in logs,
187
+ * argv, or telemetry the attack becomes trivial, and the right fix is to not
188
+ * follow links from /tmp paths in the first place.
179
189
  */
180
190
  function markSessionConsulted(sessionId) {
181
191
  try {
182
192
  const hash = (0, crypto_1.createHash)('md5').update(sessionId).digest('hex').slice(0, 16);
183
193
  const markerPath = (0, path_1.join)((0, os_1.tmpdir)(), `codegraph-consulted-${hash}`);
184
- (0, fs_1.writeFileSync)(markerPath, new Date().toISOString(), 'utf8');
194
+ // O_NOFOLLOW makes openSync throw ELOOP if markerPath is already a symlink.
195
+ // O_CREAT + O_TRUNC keep the original "create-or-overwrite" semantics, and
196
+ // mode 0o600 prevents readback by other local users (the marker payload is
197
+ // benign, but narrowing the exposure costs nothing).
198
+ const flags = fs_1.constants.O_WRONLY | fs_1.constants.O_CREAT | fs_1.constants.O_TRUNC | fs_1.constants.O_NOFOLLOW;
199
+ const fd = (0, fs_1.openSync)(markerPath, flags, 0o600);
200
+ try {
201
+ (0, fs_1.writeSync)(fd, new Date().toISOString());
202
+ }
203
+ finally {
204
+ (0, fs_1.closeSync)(fd);
205
+ }
185
206
  }
186
207
  catch {
187
- // Silently fail - don't break MCP on marker write failure
208
+ // Silently fail - don't break MCP on marker write failure. ELOOP from a
209
+ // planted symlink lands here too, which is the intended behavior: refuse
210
+ // to write rather than overwrite an attacker-chosen target.
188
211
  }
189
212
  }
190
213
  /**