@memnexus-ai/cli 1.7.45 → 1.7.46

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.
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAU1D"}
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAU1D"}
@@ -41,9 +41,13 @@ var __importStar = (this && this.__importStar) || (function () {
41
41
  return result;
42
42
  };
43
43
  })();
44
+ var __importDefault = (this && this.__importDefault) || function (mod) {
45
+ return (mod && mod.__esModule) ? mod : { "default": mod };
46
+ };
44
47
  Object.defineProperty(exports, "__esModule", { value: true });
45
48
  exports.registerMcpCommands = registerMcpCommands;
46
49
  const config_1 = require("../lib/config");
50
+ const package_json_1 = __importDefault(require("../../package.json"));
47
51
  const DEFAULT_MCP_URL = 'https://mcp.memnexus.ai/mcp';
48
52
  function registerMcpCommands(program) {
49
53
  const mcp = program.command('mcp').description('MCP bridge commands');
@@ -55,6 +59,22 @@ function registerMcpCommands(program) {
55
59
  await serve(opts.url);
56
60
  });
57
61
  }
62
+ /**
63
+ * Format an error with its cause chain for diagnostic logging.
64
+ * Node.js fetch errors (undici) put the real error in `error.cause`.
65
+ */
66
+ function formatError(err) {
67
+ if (!(err instanceof Error))
68
+ return String(err);
69
+ let msg = err.message;
70
+ const cause = err.cause;
71
+ if (cause instanceof Error) {
72
+ msg += ` — ${cause.message}`;
73
+ if ('code' in cause)
74
+ msg += ` (${cause.code})`;
75
+ }
76
+ return msg;
77
+ }
58
78
  async function serve(mcpUrl) {
59
79
  // Resolve API key
60
80
  const apiKey = config_1.config.getApiKey();
@@ -68,38 +88,75 @@ async function serve(mcpUrl) {
68
88
  // unless this command is actually invoked.
69
89
  const { StdioServerTransport } = await Promise.resolve().then(() => __importStar(require('@modelcontextprotocol/sdk/server/stdio.js')));
70
90
  const { StreamableHTTPClientTransport } = await Promise.resolve().then(() => __importStar(require('@modelcontextprotocol/sdk/client/streamableHttp.js')));
91
+ // Build the X-MX-Client analytics header value
92
+ const agentInfo = config_1.config.detectAIAgent();
93
+ const agentName = agentInfo.detected ? agentInfo.agent : 'mcp-bridge';
94
+ const mxClient = [
95
+ `mx-cli/${package_json_1.default.version}`,
96
+ `os=${process.platform}`,
97
+ `node=${process.version}`,
98
+ `agent=${agentName}`,
99
+ ].join(' ');
100
+ // Custom fetch wrapper that adds our headers non-destructively.
101
+ // The global fetch (index.ts) is monkey-patched to inject X-MX-Client,
102
+ // but that wrapper creates new Headers(init?.headers) which can lose
103
+ // headers when the SDK passes them on a Request object or omits init.
104
+ // This wrapper preserves existing headers and only adds missing ones.
105
+ const mcpFetch = (input, init) => {
106
+ const headers = new Headers(init?.headers);
107
+ // Also copy headers from Request object if input is a Request
108
+ if (input instanceof Request) {
109
+ input.headers.forEach((value, key) => {
110
+ if (!headers.has(key))
111
+ headers.set(key, value);
112
+ });
113
+ }
114
+ if (!headers.has('Authorization')) {
115
+ headers.set('Authorization', `Bearer ${apiKey}`);
116
+ }
117
+ if (!headers.has('X-MX-Client')) {
118
+ headers.set('X-MX-Client', mxClient);
119
+ }
120
+ return globalThis.fetch(input, { ...init, headers });
121
+ };
71
122
  // stdio side — reads JSON-RPC from the agent on stdin, writes to stdout
72
123
  const stdio = new StdioServerTransport();
73
- // HTTP side — connects to the remote MCP server with auth header
124
+ // HTTP side — connects to the remote MCP server with auth + analytics headers
74
125
  const http = new StreamableHTTPClientTransport(new URL(mcpUrl), {
75
126
  requestInit: {
76
127
  headers: {
77
128
  Authorization: `Bearer ${apiKey}`,
129
+ 'X-MX-Client': mxClient,
78
130
  },
79
131
  },
132
+ fetch: mcpFetch,
80
133
  });
81
134
  // Wire the two transports together as a raw message pipe:
82
135
  // Agent stdin → stdio.onmessage → http.send() → HTTP server
83
136
  // HTTP server → http.onmessage → stdio.send() → Agent stdout
84
137
  stdio.onmessage = (message) => {
85
138
  http.send(message).catch((err) => {
86
- log(`Error forwarding to server: ${err.message}`);
139
+ log(`Error forwarding to server: ${formatError(err)}`);
87
140
  });
88
141
  };
89
142
  http.onmessage = (message) => {
90
143
  stdio.send(message).catch((err) => {
91
- log(`Error forwarding to agent: ${err.message}`);
144
+ log(`Error forwarding to agent: ${formatError(err)}`);
92
145
  });
93
146
  };
94
147
  // Error handlers
95
148
  stdio.onerror = (error) => {
96
- log(`stdio error: ${error.message}`);
149
+ log(`stdio error: ${formatError(error)}`);
97
150
  };
98
151
  http.onerror = (error) => {
99
- log(`HTTP error: ${error.message}`);
152
+ log(`HTTP error: ${formatError(error)}`);
100
153
  };
101
154
  // Close handlers — shut down both sides when either closes
155
+ let shuttingDown = false;
102
156
  const shutdown = async () => {
157
+ if (shuttingDown)
158
+ return;
159
+ shuttingDown = true;
103
160
  log('Shutting down...');
104
161
  await Promise.allSettled([stdio.close(), http.close()]);
105
162
  process.exit(0);
@@ -119,7 +176,7 @@ async function serve(mcpUrl) {
119
176
  log('Bridge active');
120
177
  }
121
178
  catch (err) {
122
- log(`Failed to start: ${err.message}`);
179
+ log(`Failed to start: ${formatError(err)}`);
123
180
  process.exit(1);
124
181
  }
125
182
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memnexus-ai/cli",
3
- "version": "1.7.45",
3
+ "version": "1.7.46",
4
4
  "description": "Command-line interface for MemNexus Core API",
5
5
  "main": "dist/index.js",
6
6
  "bin": {