@ank1015/llm 0.0.2 → 0.0.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.
package/README.md CHANGED
@@ -8,11 +8,13 @@ npx @ank1015/llm
8
8
 
9
9
  The launcher starts:
10
10
 
11
- - the Hono API server on `http://127.0.0.1:8001`
12
- - the Next.js web client on `http://127.0.0.1:3000`
11
+ - the app on `http://127.0.0.1:3210`
12
+ - the API under the same origin at `http://127.0.0.1:3210/api`
13
+
14
+ The Hono API server and Next.js web client run on private random ports behind the launcher.
13
15
 
14
16
  ## Options
15
17
 
16
18
  ```bash
17
- llm --host 127.0.0.1 --api-port 8001 --web-port 3000 --no-open
19
+ llm --host 127.0.0.1 --port 3210 --no-open
18
20
  ```
package/dist/cli.js CHANGED
@@ -1,14 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  import { spawn } from 'node:child_process';
3
+ import { createServer, request as httpRequest } from 'node:http';
3
4
  import { createRequire } from 'node:module';
5
+ import { Socket } from 'node:net';
4
6
  import { existsSync } from 'node:fs';
5
7
  import { dirname, join, resolve } from 'node:path';
6
8
  import { fileURLToPath } from 'node:url';
7
9
  const DEFAULT_OPTIONS = {
8
- apiPort: '8001',
10
+ apiPort: '0',
9
11
  host: '127.0.0.1',
10
12
  openBrowser: true,
11
- webPort: '3000',
13
+ port: '3210',
14
+ webPort: '0',
12
15
  };
13
16
  const currentDirectory = dirname(fileURLToPath(import.meta.url));
14
17
  const packageRoot = resolve(currentDirectory, '..');
@@ -35,7 +38,12 @@ function parseOptions(arguments_) {
35
38
  index += 1;
36
39
  continue;
37
40
  }
38
- if (argument === '--web-port' || argument === '--port') {
41
+ if (argument === '--port') {
42
+ options.port = readValue(arguments_, index, argument);
43
+ index += 1;
44
+ continue;
45
+ }
46
+ if (argument === '--web-port') {
39
47
  options.webPort = readValue(arguments_, index, argument);
40
48
  index += 1;
41
49
  continue;
@@ -55,10 +63,10 @@ function printHelp() {
55
63
  console.log(`Usage: llm [options]
56
64
 
57
65
  Options:
58
- --host <host> Host for both servers. Defaults to 127.0.0.1.
59
- --api-port <port> Hono API port. Defaults to 8001.
60
- --web-port <port> Next.js web port. Defaults to 3000.
61
- --port <port> Alias for --web-port.
66
+ --host <host> Host for the public app URL. Defaults to 127.0.0.1.
67
+ --port <port> Public app port for web and API. Defaults to 3210.
68
+ --api-port <port> Internal Hono API port. Defaults to a free random port.
69
+ --web-port <port> Internal Next.js web port. Defaults to a free random port.
62
70
  --no-open Do not open the browser automatically.
63
71
  -h, --help Show this help message.
64
72
  `);
@@ -76,6 +84,72 @@ function spawnNode(entry, env, cwd) {
76
84
  stdio: 'inherit',
77
85
  });
78
86
  }
87
+ function getForwardedHeaders(request, targetHost, targetPort) {
88
+ return {
89
+ ...request.headers,
90
+ host: `${targetHost}:${targetPort}`,
91
+ 'x-forwarded-host': request.headers.host,
92
+ 'x-forwarded-proto': 'http',
93
+ };
94
+ }
95
+ function proxyHttpRequest(targetPort, targetHost, clientRequest, clientResponse) {
96
+ const proxyRequest = httpRequest({
97
+ headers: getForwardedHeaders(clientRequest, targetHost, targetPort),
98
+ hostname: targetHost,
99
+ method: clientRequest.method,
100
+ path: clientRequest.url,
101
+ port: Number(targetPort),
102
+ }, (proxyResponse) => {
103
+ clientResponse.writeHead(proxyResponse.statusCode ?? 500, proxyResponse.headers);
104
+ proxyResponse.pipe(clientResponse);
105
+ });
106
+ proxyRequest.on('error', () => {
107
+ if (!clientResponse.headersSent) {
108
+ clientResponse.writeHead(502, { 'content-type': 'text/plain; charset=utf-8' });
109
+ }
110
+ clientResponse.end('Upstream service is not ready yet.');
111
+ });
112
+ clientRequest.pipe(proxyRequest);
113
+ }
114
+ function proxyUpgrade(targetPort, targetHost, clientRequest, clientSocket, head) {
115
+ const upstreamSocket = new Socket();
116
+ upstreamSocket.connect(Number(targetPort), targetHost, () => {
117
+ const headers = Object.entries(getForwardedHeaders(clientRequest, targetHost, targetPort))
118
+ .flatMap(([key, value]) => {
119
+ if (value === undefined) {
120
+ return [];
121
+ }
122
+ if (Array.isArray(value)) {
123
+ return [`${key}: ${value.join(', ')}`];
124
+ }
125
+ return [`${key}: ${value}`];
126
+ })
127
+ .join('\r\n');
128
+ upstreamSocket.write(`${clientRequest.method ?? 'GET'} ${clientRequest.url ?? '/'} HTTP/${clientRequest.httpVersion}\r\n${headers}\r\n\r\n`);
129
+ if (head.length > 0) {
130
+ upstreamSocket.write(head);
131
+ }
132
+ upstreamSocket.pipe(clientSocket);
133
+ clientSocket.pipe(upstreamSocket);
134
+ });
135
+ upstreamSocket.on('error', () => {
136
+ clientSocket.end('HTTP/1.1 502 Bad Gateway\r\nConnection: close\r\n\r\n');
137
+ });
138
+ }
139
+ function isApiRequest(url) {
140
+ return url === '/api' || url === '/health' || url?.startsWith('/api/') === true;
141
+ }
142
+ function createGatewayServer(apiPort, webPort, internalHost) {
143
+ const server = createServer((request, response) => {
144
+ const targetPort = isApiRequest(request.url) ? apiPort : webPort;
145
+ proxyHttpRequest(targetPort, internalHost, request, response);
146
+ });
147
+ server.on('upgrade', (request, socket, head) => {
148
+ const targetPort = isApiRequest(request.url) ? apiPort : webPort;
149
+ proxyUpgrade(targetPort, internalHost, request, socket, head);
150
+ });
151
+ return server;
152
+ }
79
153
  function openUrl(url) {
80
154
  const opener = process.platform === 'darwin'
81
155
  ? 'open'
@@ -96,41 +170,76 @@ function shutdown(children) {
96
170
  }
97
171
  }
98
172
  }
99
- try {
173
+ function listen(server, port, host) {
174
+ return new Promise((resolveListen, reject) => {
175
+ server.once('error', reject);
176
+ server.listen(Number(port), host, () => {
177
+ server.off('error', reject);
178
+ const address = server.address();
179
+ if (!address || typeof address === 'string') {
180
+ reject(new Error('Unable to read listening port'));
181
+ return;
182
+ }
183
+ resolveListen(String(address.port));
184
+ });
185
+ });
186
+ }
187
+ async function findAvailablePort(host) {
188
+ const server = createServer();
189
+ const port = await listen(server, '0', host);
190
+ await new Promise((resolveClose, reject) => {
191
+ server.close((error) => {
192
+ if (error) {
193
+ reject(error);
194
+ return;
195
+ }
196
+ resolveClose();
197
+ });
198
+ });
199
+ return port;
200
+ }
201
+ async function main() {
100
202
  const options = parseOptions(process.argv.slice(2));
101
203
  const webEntry = resolveWebEntry();
102
204
  const serverEntry = resolveServerEntry();
103
205
  if (!existsSync(webEntry)) {
104
206
  throw new Error(`Missing assembled web server at ${webEntry}. Run pnpm release:app:build first.`);
105
207
  }
106
- const apiBaseUrl = `http://${options.host}:${options.apiPort}`;
107
- const webBaseUrl = `http://${options.host}:${options.webPort}`;
208
+ const internalHost = '127.0.0.1';
108
209
  const webCwd = dirname(webEntry);
109
210
  const children = [];
211
+ const apiPort = options.apiPort === '0' ? await findAvailablePort(internalHost) : options.apiPort;
212
+ const webPort = options.webPort === '0' ? await findAvailablePort(internalHost) : options.webPort;
213
+ const publicServer = createGatewayServer(apiPort, webPort, internalHost);
214
+ const gatewayPort = await listen(publicServer, options.port, options.host);
215
+ const gatewayBaseUrl = `http://${options.host}:${gatewayPort}`;
216
+ const apiBaseUrl = gatewayBaseUrl;
110
217
  children.push(spawnNode(serverEntry, {
111
218
  ...process.env,
112
- HOST: options.host,
113
- PORT: options.apiPort,
219
+ HOST: internalHost,
220
+ PORT: apiPort,
114
221
  }));
115
222
  children.push(spawnNode(webEntry, {
116
223
  ...process.env,
117
- HOSTNAME: options.host,
224
+ HOSTNAME: internalHost,
118
225
  NEXT_PUBLIC_LLM_SERVER_BASE_URL: apiBaseUrl,
119
- PORT: options.webPort,
226
+ PORT: webPort,
120
227
  }, webCwd));
121
- console.log(`LLM API: ${apiBaseUrl}`);
122
- console.log(`LLM web: ${webBaseUrl}`);
228
+ console.log(`LLM app: ${gatewayBaseUrl}`);
229
+ console.log(`LLM API: ${gatewayBaseUrl}/api`);
123
230
  if (options.openBrowser) {
124
- setTimeout(() => openUrl(webBaseUrl), 1500);
231
+ setTimeout(() => openUrl(gatewayBaseUrl), 1500);
125
232
  }
126
233
  for (const signal of ['SIGINT', 'SIGTERM']) {
127
234
  process.on(signal, () => {
235
+ publicServer.close();
128
236
  shutdown(children);
129
237
  process.exit(0);
130
238
  });
131
239
  }
132
240
  for (const child of children) {
133
241
  child.on('exit', (code, signal) => {
242
+ publicServer.close();
134
243
  shutdown(children);
135
244
  if (signal) {
136
245
  process.kill(process.pid, signal);
@@ -140,8 +249,8 @@ try {
140
249
  });
141
250
  }
142
251
  }
143
- catch (error) {
252
+ main().catch((error) => {
144
253
  console.error(error instanceof Error ? error.message : error);
145
254
  process.exit(1);
146
- }
255
+ });
147
256
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ank1015/llm",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "description": "Local LLM runtime app launcher for the Hono server and Next.js web client",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "builtAt": "2026-04-15T15:40:31.608Z",
2
+ "builtAt": "2026-04-15T16:09:04.402Z",
3
3
  "source": {
4
4
  "static": "apps/web/.next/static",
5
5
  "standalone": "apps/web/.next/standalone"