llmpt 1.2.3 → 1.2.5
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/dist/index.js +45 -40
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -8,6 +8,7 @@ import path from 'node:path';
|
|
|
8
8
|
import fs from 'node:fs';
|
|
9
9
|
import os from 'node:os';
|
|
10
10
|
import { fileURLToPath } from 'node:url';
|
|
11
|
+
import { createServer } from 'node:net';
|
|
11
12
|
import { spawn } from 'node:child_process';
|
|
12
13
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
13
14
|
/**
|
|
@@ -62,49 +63,13 @@ function resolveConfigPath(cwd) {
|
|
|
62
63
|
const appDataDir = getAppDataDir();
|
|
63
64
|
return path.join(appDataDir, 'lpt.config.yaml');
|
|
64
65
|
}
|
|
65
|
-
/**
|
|
66
|
-
* llmpt claude [...args]
|
|
67
|
-
* 用临时 settings 文件覆盖 ANTHROPIC_BASE_URL,让 Claude Code 流量过 LPT 代理。
|
|
68
|
-
* Claude Code 的 settings.json 里的 env 字段会覆盖进程环境变量,
|
|
69
|
-
* 因此必须通过 --settings 注入,而不是仅靠环境变量。
|
|
70
|
-
*/
|
|
71
|
-
function runClaude(args, port) {
|
|
72
|
-
// 写临时 settings 文件,覆盖 ANTHROPIC_BASE_URL
|
|
73
|
-
const settingsPath = path.join(os.tmpdir(), 'lpt-claude-settings.json');
|
|
74
|
-
const settings = { env: { ANTHROPIC_BASE_URL: `http://localhost:${port}` } };
|
|
75
|
-
fs.writeFileSync(settingsPath, JSON.stringify(settings), 'utf-8');
|
|
76
|
-
// 若用户已经传了 --settings,不重复注入(尊重用户的配置)
|
|
77
|
-
const hasSettings = args.some(a => a === '--settings');
|
|
78
|
-
const claudeArgs = hasSettings ? args : ['--settings', settingsPath, ...args];
|
|
79
|
-
const child = spawn('claude', claudeArgs, {
|
|
80
|
-
stdio: 'inherit',
|
|
81
|
-
// Windows 下 claude 是 .exe,不需要 shell;shell:true 在 Windows 上会产生安全警告
|
|
82
|
-
windowsVerbatimArguments: false,
|
|
83
|
-
});
|
|
84
|
-
child.on('error', (err) => {
|
|
85
|
-
console.error('❌ 启动 claude 失败:', err.message);
|
|
86
|
-
console.error(' 请确保已安装 Claude Code:https://claude.ai/code');
|
|
87
|
-
process.exit(1);
|
|
88
|
-
});
|
|
89
|
-
child.on('exit', (code) => {
|
|
90
|
-
process.exit(code ?? 0);
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
66
|
async function main() {
|
|
94
67
|
const args = process.argv.slice(2);
|
|
95
68
|
// ── 子命令:llmpt claude [...claude args] ──
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
const configPath = resolveConfigPath(cwd);
|
|
101
|
-
const config = loadConfig(configPath, envPath);
|
|
102
|
-
const port = config.proxy.port;
|
|
103
|
-
console.log(`🔍 LPT 代理:http://localhost:${port} → claude ${claudeArgs.join(' ') || '(interactive)'}`);
|
|
104
|
-
runClaude(claudeArgs, port);
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
// ── 默认:启动 LPT 服务 ──
|
|
69
|
+
// 先启动 LPT 服务,等端口就绪后再启动 claude
|
|
70
|
+
const isClaudeSubcommand = args[0] === 'claude';
|
|
71
|
+
const claudeArgs = isClaudeSubcommand ? args.slice(1) : [];
|
|
72
|
+
// ── 启动 LPT 服务 ──
|
|
108
73
|
console.log('🚀 LPT 启动中...');
|
|
109
74
|
const cwd = process.cwd();
|
|
110
75
|
const appDataDir = getAppDataDir();
|
|
@@ -115,6 +80,22 @@ async function main() {
|
|
|
115
80
|
if (config.trace.dir === './traces') {
|
|
116
81
|
config.trace.dir = path.join(appDataDir, 'traces');
|
|
117
82
|
}
|
|
83
|
+
// 检查端口是否被占用(同时探测 IPv4/IPv6)
|
|
84
|
+
await Promise.all(['0.0.0.0', '::'].map(host => new Promise((resolve, reject) => {
|
|
85
|
+
const tester = createServer();
|
|
86
|
+
tester.once('error', (err) => {
|
|
87
|
+
if (err.code === 'EADDRINUSE') {
|
|
88
|
+
console.error(`❌ 端口 ${config.proxy.port} 已被占用`);
|
|
89
|
+
console.error(` 请关闭占用该端口的程序后重试`);
|
|
90
|
+
console.error(` 查找占用进程(Windows):netstat -ano | findstr :${config.proxy.port}`);
|
|
91
|
+
console.error(` 查找占用进程(macOS/Linux):lsof -i :${config.proxy.port}`);
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
reject(err);
|
|
95
|
+
});
|
|
96
|
+
tester.once('listening', () => { tester.close(); resolve(); });
|
|
97
|
+
tester.listen(config.proxy.port, host);
|
|
98
|
+
})));
|
|
118
99
|
// Create application
|
|
119
100
|
const { app, registry, collector, ws } = createApp(config, configPath);
|
|
120
101
|
// Create HTTP server with Hono handler
|
|
@@ -129,6 +110,30 @@ async function main() {
|
|
|
129
110
|
console.log(`✅ 服务已启动:http://localhost:${config.proxy.port}`);
|
|
130
111
|
console.log(`📝 配置文件:${envPath}`);
|
|
131
112
|
console.log(` 修改后重启服务生效`);
|
|
113
|
+
// ── 子命令模式:启动 claude,claude 退出后关闭 LPT ──
|
|
114
|
+
if (isClaudeSubcommand) {
|
|
115
|
+
console.log(`🔍 LPT 代理:http://localhost:${config.proxy.port} → claude ${claudeArgs.join(' ') || '(interactive)'}`);
|
|
116
|
+
const child = spawn('claude', (() => {
|
|
117
|
+
const hasSettings = claudeArgs.some(a => a === '--settings' || a.startsWith('--settings='));
|
|
118
|
+
const settingsJson = JSON.stringify({ env: { ANTHROPIC_BASE_URL: `http://localhost:${config.proxy.port}` } });
|
|
119
|
+
return hasSettings ? claudeArgs : ['--settings', settingsJson, ...claudeArgs];
|
|
120
|
+
})(), { stdio: 'inherit', windowsVerbatimArguments: false });
|
|
121
|
+
child.on('error', (err) => {
|
|
122
|
+
console.error('❌ 启动 claude 失败:', err.message);
|
|
123
|
+
console.error(' 请确保已安装 Claude Code:https://claude.ai/code');
|
|
124
|
+
registry.stopRefreshTimers();
|
|
125
|
+
ws.stop();
|
|
126
|
+
server.close();
|
|
127
|
+
process.exit(1);
|
|
128
|
+
});
|
|
129
|
+
child.on('exit', (code) => {
|
|
130
|
+
registry.stopRefreshTimers();
|
|
131
|
+
ws.stop();
|
|
132
|
+
server.close();
|
|
133
|
+
process.exit(code ?? 0);
|
|
134
|
+
});
|
|
135
|
+
return; // 不走 autoOpen / shutdown 注册,等待 child
|
|
136
|
+
}
|
|
132
137
|
// Auto-open dashboard
|
|
133
138
|
if (config.dashboard.autoOpen) {
|
|
134
139
|
const url = `http://localhost:${config.proxy.port}`;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,+DAA+D;AAC/D,gEAAgE;AAChE,+DAA+D;AAE/D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D;;;;;GAKG;AACH,SAAS,aAAa;IACpB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;IAClG,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACtC,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAEzC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACjD,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IAEjD,cAAc;IACd,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IAClE,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,YAAY,UAAU,0BAA0B,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,GAAW;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IACjD,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|