@nexagent-cli/cli 0.2.1 → 0.2.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.
@@ -1,6 +1,6 @@
1
1
  interface ServerOptions {
2
+ subcommand: 'start' | 'stop' | 'status';
2
3
  port?: string;
3
- host?: string;
4
4
  dataDir?: string;
5
5
  }
6
6
  export declare function runServer(opts: ServerOptions): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/commands/server.ts"],"names":[],"mappings":"AASA,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAyElE"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/commands/server.ts"],"names":[],"mappings":"AAcA,UAAU,aAAa;IACrB,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAqMD,wBAAsB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBlE"}
@@ -1,73 +1,210 @@
1
1
  // ============================================================
2
- // Command: nexagent server — HTTP/WebSocket bridge for remote access
3
- // v0.1.0 stub: spins up a basic HTTP server with health endpoint
2
+ // Command: nexagent server — proxy gateway management
3
+ // start | stop | status
4
4
  // ============================================================
5
5
  import { createServer } from 'node:http';
6
+ import { request as httpsRequest } from 'node:https';
7
+ import { existsSync } from 'node:fs';
8
+ import { writeFile, readFile, unlink } from 'node:fs/promises';
9
+ import { join, dirname } from 'node:path';
10
+ import { fileURLToPath } from 'node:url';
6
11
  import chalk from 'chalk';
7
12
  import { SYM } from '@nexagent-cli/shared';
8
- export async function runServer(opts) {
9
- const port = parseInt(opts.port ?? '7373', 10);
10
- const host = opts.host ?? '127.0.0.1';
13
+ const PROXY_PORT = 18080;
14
+ const PID_FILE = join(process.env['NEXAGENT_DATA_DIR'] ?? join(process.env['HOME'] ?? process.env['USERPROFILE'] ?? '.', '.nexagent'), 'proxy.pid');
15
+ // ── Built-in minimal proxy (no external deps) ─────────────────
16
+ let builtInProxy = null;
17
+ function startBuiltInProxy(port) {
18
+ const OPENAI_API_KEY = process.env['OPENAI_API_KEY'] ?? '';
19
+ const VALID_TOKENS = new Set(['nxag_test_123456789']);
11
20
  const server = createServer((req, res) => {
12
- const url = req.url ?? '/';
13
- const method = req.method ?? 'GET';
14
- // CORS headers
21
+ // CORS
15
22
  res.setHeader('Access-Control-Allow-Origin', '*');
16
23
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
17
- res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
18
- if (method === 'OPTIONS') {
24
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
25
+ if (req.method === 'OPTIONS') {
19
26
  res.writeHead(204);
20
27
  res.end();
21
28
  return;
22
29
  }
23
- // Health check
24
- if (url === '/health' && method === 'GET') {
30
+ // Health
31
+ if (req.url === '/health' && req.method === 'GET') {
25
32
  res.writeHead(200, { 'Content-Type': 'application/json' });
26
33
  res.end(JSON.stringify({
27
34
  status: 'ok',
28
- service: 'nexagent-server',
29
- version: '0.1.0',
30
- timestamp: new Date().toISOString(),
35
+ providers: { openai: !!OPENAI_API_KEY, anthropic: false },
31
36
  }));
32
37
  return;
33
38
  }
34
- // Root
35
- if (url === '/' && method === 'GET') {
36
- res.writeHead(200, { 'Content-Type': 'application/json' });
37
- res.end(JSON.stringify({
38
- name: 'NexAgent Server',
39
- version: '0.1.0',
40
- endpoints: ['/health', '/api/v1/chat (POST — stub)'],
41
- }));
42
- return;
43
- }
44
- // Stub chat endpoint
45
- if (url === '/api/v1/chat' && method === 'POST') {
39
+ // OpenAI proxy
40
+ if (req.url === '/v1/chat/completions' && req.method === 'POST') {
41
+ const auth = req.headers['authorization'] ?? '';
42
+ const token = auth.startsWith('Bearer ') ? auth.slice(7).trim() : '';
43
+ if (!VALID_TOKENS.has(token)) {
44
+ res.writeHead(401, { 'Content-Type': 'application/json' });
45
+ res.end(JSON.stringify({ error: 'Unauthorized' }));
46
+ return;
47
+ }
48
+ if (!OPENAI_API_KEY) {
49
+ res.writeHead(503, { 'Content-Type': 'application/json' });
50
+ res.end(JSON.stringify({ error: 'OpenAI provider not configured on proxy' }));
51
+ return;
52
+ }
53
+ // Collect body
46
54
  let body = '';
47
55
  req.on('data', chunk => body += chunk);
48
56
  req.on('end', () => {
49
- res.writeHead(501, { 'Content-Type': 'application/json' });
50
- res.end(JSON.stringify({
51
- error: 'Not yet implemented',
52
- message: 'The HTTP chat bridge is planned for v0.2.0. Use `nexagent chat` locally for now.',
53
- }));
57
+ const proxyReq = httpsRequest({
58
+ hostname: 'api.openai.com',
59
+ port: 443,
60
+ path: '/v1/chat/completions',
61
+ method: 'POST',
62
+ headers: {
63
+ 'Content-Type': 'application/json',
64
+ 'Authorization': `Bearer ${OPENAI_API_KEY}`,
65
+ 'Content-Length': Buffer.byteLength(body),
66
+ },
67
+ }, (proxyRes) => {
68
+ res.writeHead(proxyRes.statusCode ?? 200, proxyRes.headers);
69
+ proxyRes.pipe(res);
70
+ });
71
+ proxyReq.on('error', (err) => {
72
+ res.writeHead(502, { 'Content-Type': 'application/json' });
73
+ res.end(JSON.stringify({ error: 'Proxy error', message: err.message }));
74
+ });
75
+ proxyReq.write(body);
76
+ proxyReq.end();
54
77
  });
55
78
  return;
56
79
  }
57
- // 404
58
80
  res.writeHead(404, { 'Content-Type': 'application/json' });
59
81
  res.end(JSON.stringify({ error: 'Not found' }));
60
82
  });
61
- server.listen(port, host, () => {
62
- console.log(chalk.bold(`\n ${SYM.SUCCESS} NexAgent server running`));
63
- console.log(chalk.dim(` http://${host}:${port}`));
64
- console.log(chalk.dim(` Health: http://${host}:${port}/health\n`));
65
- console.log(chalk.dim(' Press Ctrl+C to stop\n'));
83
+ server.listen(port, '127.0.0.1', () => {
84
+ console.log(chalk.dim(` [proxy] listening on http://127.0.0.1:${port}`));
66
85
  });
67
- // Graceful shutdown
68
- process.on('SIGINT', () => {
69
- console.log(chalk.dim('\n Shutting down server...'));
70
- server.close(() => process.exit(0));
86
+ builtInProxy = server;
87
+ }
88
+ function stopBuiltInProxy() {
89
+ if (builtInProxy) {
90
+ builtInProxy.close();
91
+ builtInProxy = null;
92
+ }
93
+ }
94
+ // ── External proxy server (monorepo dev) ─────────────────────
95
+ function getProxyScriptPath() {
96
+ const candidates = [
97
+ join(dirname(fileURLToPath(import.meta.url)), '..', '..', 'proxy-server.mjs'),
98
+ join(dirname(fileURLToPath(import.meta.url)), '..', '..', '..', '..', 'proxy-server', 'server.mjs'),
99
+ join(process.cwd(), 'proxy-server', 'server.mjs'),
100
+ ];
101
+ for (const p of candidates) {
102
+ if (existsSync(p))
103
+ return p;
104
+ }
105
+ return null;
106
+ }
107
+ async function isProxyRunning() {
108
+ try {
109
+ const res = await fetch(`http://127.0.0.1:${PROXY_PORT}/health`, { signal: AbortSignal.timeout(2000) });
110
+ return res.ok;
111
+ }
112
+ catch {
113
+ return false;
114
+ }
115
+ }
116
+ async function startProxy(port) {
117
+ if (await isProxyRunning()) {
118
+ console.log(chalk.yellow(`\n ${SYM.WARNING} Proxy gateway is already running on port ${PROXY_PORT}`));
119
+ return;
120
+ }
121
+ // Use built-in proxy (runs in-process, reliable on all platforms)
122
+ startBuiltInProxy(port);
123
+ await writeFile(PID_FILE, String(process.pid), 'utf-8');
124
+ // Wait for the proxy to initialise
125
+ await new Promise(r => setTimeout(r, 500));
126
+ if (await isProxyRunning()) {
127
+ console.log(chalk.green(`\n ${SYM.SUCCESS} Proxy gateway started`));
128
+ console.log(chalk.dim(` http://127.0.0.1:${port}`));
129
+ console.log(chalk.dim(` Health: http://127.0.0.1:${port}/health`));
130
+ console.log(chalk.dim(` Press Ctrl+C to stop\n`));
131
+ }
132
+ else {
133
+ console.log(chalk.yellow(`\n ${SYM.WARNING} Proxy started but health check is not responding yet.\n`));
134
+ }
135
+ // Block until user presses Ctrl+C
136
+ await new Promise(() => {
137
+ process.on('SIGINT', () => {
138
+ console.log(chalk.dim('\n Shutting down proxy...'));
139
+ stopBuiltInProxy();
140
+ process.exit(0);
141
+ });
71
142
  });
72
143
  }
144
+ async function stopProxy() {
145
+ stopBuiltInProxy();
146
+ let pid = null;
147
+ try {
148
+ const raw = await readFile(PID_FILE, 'utf-8');
149
+ pid = parseInt(raw.trim(), 10);
150
+ }
151
+ catch { /* no pid file */ }
152
+ if (pid && pid !== process.pid) {
153
+ try {
154
+ process.kill(pid, 'SIGTERM');
155
+ }
156
+ catch { /* process may already be gone */ }
157
+ }
158
+ try {
159
+ await unlink(PID_FILE);
160
+ }
161
+ catch { /* ignore */ }
162
+ if (await isProxyRunning()) {
163
+ console.log(chalk.yellow(`\n ${SYM.WARNING} Proxy gateway is still running. You may need to stop it manually.\n`));
164
+ }
165
+ else {
166
+ console.log(chalk.green(`\n ${SYM.SUCCESS} Proxy gateway stopped.\n`));
167
+ }
168
+ }
169
+ async function statusProxy() {
170
+ const running = await isProxyRunning();
171
+ if (running) {
172
+ try {
173
+ const res = await fetch(`http://127.0.0.1:${PROXY_PORT}/health`, { signal: AbortSignal.timeout(2000) });
174
+ const data = await res.json();
175
+ const active = Object.entries(data.providers ?? {})
176
+ .filter(([, v]) => v)
177
+ .map(([k]) => k)
178
+ .join(', ');
179
+ console.log(chalk.green(`\n ${SYM.SUCCESS} Proxy gateway is running`));
180
+ console.log(chalk.dim(` http://127.0.0.1:${PROXY_PORT}`));
181
+ console.log(chalk.dim(` Providers: ${active || 'none configured'}\n`));
182
+ }
183
+ catch {
184
+ console.log(chalk.green(`\n ${SYM.SUCCESS} Proxy gateway is running`));
185
+ console.log(chalk.dim(` http://127.0.0.1:${PROXY_PORT}\n`));
186
+ }
187
+ }
188
+ else {
189
+ console.log(chalk.yellow(`\n ${SYM.WARNING} Proxy gateway is not running.`));
190
+ console.log(chalk.dim(` Start it with: nexagent server start\n`));
191
+ }
192
+ }
193
+ export async function runServer(opts) {
194
+ switch (opts.subcommand) {
195
+ case 'start':
196
+ await startProxy(parseInt(opts.port ?? String(PROXY_PORT), 10));
197
+ break;
198
+ case 'stop':
199
+ await stopProxy();
200
+ break;
201
+ case 'status':
202
+ await statusProxy();
203
+ break;
204
+ default:
205
+ console.log(chalk.red(`\n Unknown subcommand: ${opts.subcommand}`));
206
+ console.log(chalk.dim(' Usage: nexagent server start|stop|status\n'));
207
+ process.exit(1);
208
+ }
209
+ }
73
210
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../src/commands/server.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,qEAAqE;AACrE,iEAAiE;AACjE,+DAA+D;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAQ3C,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAmB;IACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,WAAW,CAAC;IAEtC,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACvC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC;QAC3B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC;QAEnC,eAAe;QACf,GAAG,CAAC,SAAS,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;QAClD,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,oBAAoB,CAAC,CAAC;QACpE,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,cAAc,CAAC,CAAC;QAE9D,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,GAAG,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,eAAe;QACf,IAAI,GAAG,KAAK,SAAS,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YAC1C,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACrB,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,iBAAiB;gBAC1B,OAAO,EAAE,OAAO;gBAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC,CAAC;YACJ,OAAO;QACT,CAAC;QAED,OAAO;QACP,IAAI,GAAG,KAAK,GAAG,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACpC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACrB,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,OAAO;gBAChB,SAAS,EAAE,CAAC,SAAS,EAAE,4BAA4B,CAAC;aACrD,CAAC,CAAC,CAAC;YACJ,OAAO;QACT,CAAC;QAED,qBAAqB;QACrB,IAAI,GAAG,KAAK,cAAc,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YAChD,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;YACvC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;oBACrB,KAAK,EAAE,qBAAqB;oBAC5B,OAAO,EAAE,kFAAkF;iBAC5F,CAAC,CAAC,CAAC;YACN,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM;QACN,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,IAAI,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,oBAAoB;IACpB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../src/commands/server.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -187,16 +187,30 @@ program
187
187
  await runDoctor({ ...opts, ...globals });
188
188
  });
189
189
  // ?? nexagent server ??
190
- program
190
+ const serverCmd = program
191
191
  .command('server')
192
192
  .alias('srv')
193
- .description('Start HTTP/WebSocket bridge for remote access')
194
- .option('-p, --port <n>', 'Server port', '7373')
195
- .option('-h, --host <addr>', 'Bind address', '127.0.0.1')
193
+ .description('Manage the NexAgent proxy gateway');
194
+ serverCmd
195
+ .command('start')
196
+ .description('Start the proxy gateway on localhost:18080')
197
+ .option('-p, --port <n>', 'Proxy port', '18080')
196
198
  .option('--data-dir <path>', 'Override agent data directory')
197
199
  .action(async (opts, cmd) => {
198
- const globals = cmd.parent?.opts() ?? {};
199
- await runServer({ ...opts, ...globals });
200
+ const globals = cmd.parent?.parent?.opts() ?? {};
201
+ await runServer({ subcommand: 'start', ...opts, ...globals });
202
+ });
203
+ serverCmd
204
+ .command('stop')
205
+ .description('Stop the running proxy gateway')
206
+ .action(async () => {
207
+ await runServer({ subcommand: 'stop' });
208
+ });
209
+ serverCmd
210
+ .command('status')
211
+ .description('Check if the proxy gateway is running')
212
+ .action(async () => {
213
+ await runServer({ subcommand: 'status' });
200
214
  });
201
215
  // ── Parse ─────────────────────────────────────────────────────
202
216
  program.parseAsync(process.argv).catch((err) => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nexagent-cli/cli",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "NexAgent — locally-runnable AI agent CLI with file editing, tools, and beautiful TUI",
5
5
  "bin": {
6
6
  "nexagent": "./dist/index.js"
@@ -12,7 +12,8 @@
12
12
  "dist/**/*",
13
13
  "README.md",
14
14
  "CHANGELOG.md",
15
- "LICENSE"
15
+ "LICENSE",
16
+ "proxy-server.mjs"
16
17
  ],
17
18
  "publishConfig": {
18
19
  "access": "public"
@@ -52,7 +53,10 @@
52
53
  "wrap-ansi": "^9.0.0",
53
54
  "yaml": "^2.5.0",
54
55
  "zod": "^3.23.0",
55
- "@nexagent-cli/shared": "^0.2.1"
56
+ "@nexagent-cli/shared": "^0.2.2",
57
+ "express": "^4.21.0",
58
+ "cors": "^2.8.5",
59
+ "dotenv": "^16.4.5"
56
60
  },
57
61
  "optionalDependencies": {
58
62
  "keytar": "^7.9.0"
@@ -0,0 +1,272 @@
1
+ import "dotenv/config";
2
+ import express from "express";
3
+ import cors from "cors";
4
+ // ------------------------------------------------------------------
5
+ // Configuration
6
+ // ------------------------------------------------------------------
7
+ const PORT = Number(process.env.PORT) || 18080;
8
+ const OPENAI_API_KEY = process.env.OPENAI_API_KEY;
9
+ const ANTHROPIC_API_KEY = process.env.ANTHROPIC_API_KEY;
10
+ const VALID_API_KEYS = new Set(["nxag_test_123456789"]);
11
+ // ------------------------------------------------------------------
12
+ // Express setup
13
+ // ------------------------------------------------------------------
14
+ const app = express();
15
+ app.use(cors());
16
+ app.use(express.json({ limit: "10mb" }));
17
+ // ------------------------------------------------------------------
18
+ // Logging helpers
19
+ // ------------------------------------------------------------------
20
+ function logInfo(msg, meta) {
21
+ const metaStr = meta ? " " + JSON.stringify(meta) : "";
22
+ console.log(`[INFO] ${msg}${metaStr}`);
23
+ }
24
+ function logWarn(msg, meta) {
25
+ const metaStr = meta ? " " + JSON.stringify(meta) : "";
26
+ console.warn(`[WARN] ${msg}${metaStr}`);
27
+ }
28
+ function logError(msg, meta) {
29
+ const metaStr = meta ? " " + JSON.stringify(meta) : "";
30
+ console.error(`[ERROR] ${msg}${metaStr}`);
31
+ }
32
+ // ------------------------------------------------------------------
33
+ // Auth middleware
34
+ // ------------------------------------------------------------------
35
+ function authMiddleware(req, res, next) {
36
+ const authHeader = req.headers.authorization;
37
+ if (!authHeader || !authHeader.startsWith("Bearer ")) {
38
+ res.status(401).json({ error: "Missing or invalid Authorization header" });
39
+ return;
40
+ }
41
+ const token = authHeader.slice("Bearer ".length).trim();
42
+ if (!VALID_API_KEYS.has(token)) {
43
+ res.status(403).json({ error: "Invalid API key" });
44
+ return;
45
+ }
46
+ // Attach key identifier (safe prefix) for logging
47
+ req.apiKeyPrefix = token.slice(0, 12) + "…";
48
+ next();
49
+ }
50
+ // ------------------------------------------------------------------
51
+ // Usage tracking helpers
52
+ // ------------------------------------------------------------------
53
+ function logUsage(provider, apiKeyPrefix, model, usage) {
54
+ logInfo("Usage", {
55
+ provider,
56
+ apiKey: apiKeyPrefix,
57
+ model,
58
+ promptTokens: usage?.prompt_tokens ?? null,
59
+ completionTokens: usage?.completion_tokens ?? null,
60
+ totalTokens: usage?.total_tokens ?? null,
61
+ });
62
+ }
63
+ // ------------------------------------------------------------------
64
+ // Health endpoint
65
+ // ------------------------------------------------------------------
66
+ app.get("/health", (_req, res) => {
67
+ res.json({ status: "ok", providers: { openai: !!OPENAI_API_KEY, anthropic: !!ANTHROPIC_API_KEY } });
68
+ });
69
+ // ------------------------------------------------------------------
70
+ // OpenAI proxy: POST /v1/chat/completions
71
+ // ------------------------------------------------------------------
72
+ app.post("/v1/chat/completions", authMiddleware, async (req, res) => {
73
+ if (!OPENAI_API_KEY) {
74
+ res.status(503).json({ error: "OpenAI provider is not configured" });
75
+ return;
76
+ }
77
+ const model = req.body.model || "unknown";
78
+ const apiKeyPrefix = req.apiKeyPrefix;
79
+ logInfo("OpenAI request", { apiKey: apiKeyPrefix, model });
80
+ try {
81
+ const upstreamRes = await fetch("https://api.openai.com/v1/chat/completions", {
82
+ method: "POST",
83
+ headers: {
84
+ "Content-Type": "application/json",
85
+ Authorization: `Bearer ${OPENAI_API_KEY}`,
86
+ },
87
+ body: JSON.stringify(req.body),
88
+ });
89
+ if (!upstreamRes.ok) {
90
+ const text = await upstreamRes.text();
91
+ logError("OpenAI upstream error", { status: upstreamRes.status, body: text });
92
+ res.status(upstreamRes.status).type("json").send(text);
93
+ return;
94
+ }
95
+ // Streamed response
96
+ res.status(200);
97
+ upstreamRes.headers.forEach((value, key) => {
98
+ if (key.toLowerCase() !== "content-encoding") {
99
+ res.setHeader(key, value);
100
+ }
101
+ });
102
+ const reader = upstreamRes.body?.getReader();
103
+ if (!reader) {
104
+ res.status(502).json({ error: "Empty upstream body" });
105
+ return;
106
+ }
107
+ let usageLogged = false;
108
+ const decoder = new TextDecoder();
109
+ try {
110
+ while (true) {
111
+ const { done, value } = await reader.read();
112
+ if (done)
113
+ break;
114
+ const chunk = decoder.decode(value, { stream: true });
115
+ res.write(chunk);
116
+ // Attempt to extract usage from the final chunk in the stream
117
+ if (!usageLogged && chunk.includes('"usage"')) {
118
+ try {
119
+ const lines = chunk.split("\n").filter((l) => l.trim().startsWith("data:"));
120
+ for (const line of lines) {
121
+ const jsonStr = line.replace(/^data:\s*/, "").trim();
122
+ if (jsonStr === "[DONE]")
123
+ continue;
124
+ const parsed = JSON.parse(jsonStr);
125
+ if (parsed?.usage) {
126
+ logUsage("openai", apiKeyPrefix, model, parsed.usage);
127
+ usageLogged = true;
128
+ break;
129
+ }
130
+ }
131
+ }
132
+ catch {
133
+ // Ignore JSON parse errors in stream chunks
134
+ }
135
+ }
136
+ }
137
+ }
138
+ finally {
139
+ reader.releaseLock();
140
+ }
141
+ if (!usageLogged) {
142
+ logUsage("openai", apiKeyPrefix, model);
143
+ }
144
+ res.end();
145
+ }
146
+ catch (err) {
147
+ logError("OpenAI proxy error", { error: err.message });
148
+ if (!res.headersSent) {
149
+ res.status(502).json({ error: "Failed to reach OpenAI" });
150
+ }
151
+ else {
152
+ res.end();
153
+ }
154
+ }
155
+ });
156
+ // ------------------------------------------------------------------
157
+ // Anthropic proxy: POST /v1/messages
158
+ // ------------------------------------------------------------------
159
+ app.post("/v1/messages", authMiddleware, async (req, res) => {
160
+ if (!ANTHROPIC_API_KEY) {
161
+ res.status(503).json({ error: "Anthropic provider is not configured" });
162
+ return;
163
+ }
164
+ const model = req.body.model || "unknown";
165
+ const apiKeyPrefix = req.apiKeyPrefix;
166
+ logInfo("Anthropic request", { apiKey: apiKeyPrefix, model });
167
+ try {
168
+ const upstreamRes = await fetch("https://api.anthropic.com/v1/messages", {
169
+ method: "POST",
170
+ headers: {
171
+ "Content-Type": "application/json",
172
+ "x-api-key": ANTHROPIC_API_KEY,
173
+ "anthropic-version": "2023-06-01",
174
+ },
175
+ body: JSON.stringify(req.body),
176
+ });
177
+ if (!upstreamRes.ok) {
178
+ const text = await upstreamRes.text();
179
+ logError("Anthropic upstream error", { status: upstreamRes.status, body: text });
180
+ res.status(upstreamRes.status).type("json").send(text);
181
+ return;
182
+ }
183
+ res.status(200);
184
+ upstreamRes.headers.forEach((value, key) => {
185
+ if (key.toLowerCase() !== "content-encoding") {
186
+ res.setHeader(key, value);
187
+ }
188
+ });
189
+ const reader = upstreamRes.body?.getReader();
190
+ if (!reader) {
191
+ res.status(502).json({ error: "Empty upstream body" });
192
+ return;
193
+ }
194
+ let usageLogged = false;
195
+ const decoder = new TextDecoder();
196
+ try {
197
+ while (true) {
198
+ const { done, value } = await reader.read();
199
+ if (done)
200
+ break;
201
+ const chunk = decoder.decode(value, { stream: true });
202
+ res.write(chunk);
203
+ // Anthropic sends usage in message_delta events
204
+ if (!usageLogged && chunk.includes('"usage"')) {
205
+ try {
206
+ const lines = chunk.split("\n").filter((l) => l.trim().startsWith("data:"));
207
+ for (const line of lines) {
208
+ const jsonStr = line.replace(/^data:\s*/, "").trim();
209
+ const parsed = JSON.parse(jsonStr);
210
+ if (parsed?.type === "message_delta" && parsed?.delta?.usage) {
211
+ logUsage("anthropic", apiKeyPrefix, model, {
212
+ prompt_tokens: parsed.delta.usage.input_tokens,
213
+ completion_tokens: parsed.delta.usage.output_tokens,
214
+ total_tokens: (parsed.delta.usage.input_tokens ?? 0) +
215
+ (parsed.delta.usage.output_tokens ?? 0),
216
+ });
217
+ usageLogged = true;
218
+ break;
219
+ }
220
+ }
221
+ }
222
+ catch {
223
+ // Ignore JSON parse errors in stream chunks
224
+ }
225
+ }
226
+ }
227
+ }
228
+ finally {
229
+ reader.releaseLock();
230
+ }
231
+ if (!usageLogged) {
232
+ logUsage("anthropic", apiKeyPrefix, model);
233
+ }
234
+ res.end();
235
+ }
236
+ catch (err) {
237
+ logError("Anthropic proxy error", { error: err.message });
238
+ if (!res.headersSent) {
239
+ res.status(502).json({ error: "Failed to reach Anthropic" });
240
+ }
241
+ else {
242
+ res.end();
243
+ }
244
+ }
245
+ });
246
+ // ------------------------------------------------------------------
247
+ // Global error handler
248
+ // ------------------------------------------------------------------
249
+ app.use((err, _req, res, _next) => {
250
+ logError("Unhandled error", { error: err.message });
251
+ if (!res.headersSent) {
252
+ res.status(500).json({ error: "Internal server error" });
253
+ }
254
+ });
255
+ // ------------------------------------------------------------------
256
+ // Startup
257
+ // ------------------------------------------------------------------
258
+ app.listen(PORT, "0.0.0.0", () => {
259
+ console.log(`\n╔══════════════════════════════════════════╗`);
260
+ console.log(`║ NexAgent Proxy Gateway ║`);
261
+ console.log(`╠══════════════════════════════════════════╣`);
262
+ console.log(`║ Port: ${PORT.toString().padEnd(27)}║`);
263
+ console.log(`║ OpenAI: ${(OPENAI_API_KEY ? "configured" : "NOT CONFIGURED").padEnd(27)}║`);
264
+ console.log(`║ Anthropic: ${(ANTHROPIC_API_KEY ? "configured" : "NOT CONFIGURED").padEnd(27)}║`);
265
+ console.log(`╚══════════════════════════════════════════╝\n`);
266
+ if (!OPENAI_API_KEY) {
267
+ logWarn("OPENAI_API_KEY is missing. OpenAI requests will return 503.");
268
+ }
269
+ if (!ANTHROPIC_API_KEY) {
270
+ logWarn("ANTHROPIC_API_KEY is missing. Anthropic requests will return 503.");
271
+ }
272
+ });