opencode-studio-server 1.16.5 → 1.17.0
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/index.js +0 -206
- package/package.json +1 -1
- package/.env +0 -2
- package/.env.example +0 -2
- package/backend.log +0 -4
- package/logs/main.log +0 -4
- package/proxy-manager.js +0 -228
- package/server.live.err.log +0 -0
- package/server.live.log +0 -1
- package/server.log +0 -1
- package/server.out +0 -201
- package/server_debug.log +0 -387
package/index.js
CHANGED
|
@@ -8,7 +8,6 @@ const crypto = require('crypto');
|
|
|
8
8
|
const { spawn, exec } = require('child_process');
|
|
9
9
|
|
|
10
10
|
const pkg = require('./package.json');
|
|
11
|
-
const proxyManager = require('./proxy-manager');
|
|
12
11
|
const profileManager = require('./profile-manager');
|
|
13
12
|
const SERVER_VERSION = pkg.version;
|
|
14
13
|
|
|
@@ -2558,211 +2557,6 @@ app.post('/api/auth/pool/quota/limit', (req, res) => {
|
|
|
2558
2557
|
res.json({ success: true, dailyLimit: limit });
|
|
2559
2558
|
});
|
|
2560
2559
|
|
|
2561
|
-
app.get('/api/proxy/status', async (req, res) => {
|
|
2562
|
-
const status = await proxyManager.getStatus();
|
|
2563
|
-
res.json(status);
|
|
2564
|
-
});
|
|
2565
|
-
|
|
2566
|
-
app.post('/api/proxy/start', async (req, res) => {
|
|
2567
|
-
const result = await proxyManager.startProxy();
|
|
2568
|
-
res.json(result);
|
|
2569
|
-
});
|
|
2570
|
-
|
|
2571
|
-
app.post('/api/proxy/stop', async (req, res) => {
|
|
2572
|
-
const result = proxyManager.stopProxy();
|
|
2573
|
-
res.json(result);
|
|
2574
|
-
});
|
|
2575
|
-
|
|
2576
|
-
app.post('/api/proxy/login', async (req, res) => {
|
|
2577
|
-
const { provider } = req.body;
|
|
2578
|
-
const result = await proxyManager.runLogin(provider);
|
|
2579
|
-
if (!result.success) return res.status(400).json(result);
|
|
2580
|
-
|
|
2581
|
-
const cmd = result.command;
|
|
2582
|
-
const cp = getConfigPath();
|
|
2583
|
-
const configDir = cp ? path.dirname(cp) : process.cwd();
|
|
2584
|
-
const safeDir = configDir.replace(/"/g, '\\"');
|
|
2585
|
-
const platform = process.platform;
|
|
2586
|
-
|
|
2587
|
-
if (platform === 'win32') {
|
|
2588
|
-
const terminalCmd = `start "" /d "${safeDir}" cmd /c "call ${cmd} || pause"`;
|
|
2589
|
-
exec(terminalCmd, (err) => {
|
|
2590
|
-
if (err) return res.status(500).json({ error: 'Failed to open terminal', details: err.message });
|
|
2591
|
-
res.json({ success: true, message: 'Terminal opened' });
|
|
2592
|
-
});
|
|
2593
|
-
} else if (platform === 'darwin') {
|
|
2594
|
-
const terminalCmd = `osascript -e 'tell application "Terminal" to do script "cd ${safeDir} && ${cmd}"'`;
|
|
2595
|
-
exec(terminalCmd, (err) => {
|
|
2596
|
-
if (err) return res.status(500).json({ error: 'Failed to open terminal', details: err.message });
|
|
2597
|
-
res.json({ success: true, message: 'Terminal opened' });
|
|
2598
|
-
});
|
|
2599
|
-
} else {
|
|
2600
|
-
const linuxTerminals = [
|
|
2601
|
-
{ name: 'x-terminal-emulator', cmd: `x-terminal-emulator -e "bash -c 'cd ${safeDir} && ${cmd}'"` },
|
|
2602
|
-
{ name: 'gnome-terminal', cmd: `gnome-terminal -- bash -c "cd ${safeDir} && ${cmd}; read -p 'Press Enter to close...'"` },
|
|
2603
|
-
{ name: 'konsole', cmd: `konsole -e bash -c "cd ${safeDir} && ${cmd}; read -p 'Press Enter to close...'"` },
|
|
2604
|
-
{ name: 'xfce4-terminal', cmd: `xfce4-terminal -e "bash -c \"cd ${safeDir} && ${cmd}; read -p 'Press Enter to close...'\"" ` },
|
|
2605
|
-
{ name: 'xterm', cmd: `xterm -e "bash -c 'cd ${safeDir} && ${cmd}; read -p Press_Enter_to_close...'"` }
|
|
2606
|
-
];
|
|
2607
|
-
|
|
2608
|
-
const tryTerminal = (index) => {
|
|
2609
|
-
if (index >= linuxTerminals.length) {
|
|
2610
|
-
return res.json({
|
|
2611
|
-
success: false,
|
|
2612
|
-
message: 'No terminal emulator found',
|
|
2613
|
-
note: 'Run this command manually:',
|
|
2614
|
-
command: cmd
|
|
2615
|
-
});
|
|
2616
|
-
}
|
|
2617
|
-
const terminal = linuxTerminals[index];
|
|
2618
|
-
exec(terminal.cmd, (err) => {
|
|
2619
|
-
if (err) {
|
|
2620
|
-
tryTerminal(index + 1);
|
|
2621
|
-
} else {
|
|
2622
|
-
res.json({ success: true, message: 'Terminal opened' });
|
|
2623
|
-
}
|
|
2624
|
-
});
|
|
2625
|
-
};
|
|
2626
|
-
tryTerminal(0);
|
|
2627
|
-
}
|
|
2628
|
-
});
|
|
2629
|
-
|
|
2630
|
-
app.get('/api/proxy/accounts', (req, res) => {
|
|
2631
|
-
res.json(proxyManager.listAccounts());
|
|
2632
|
-
});
|
|
2633
|
-
|
|
2634
|
-
app.get('/api/proxy/config', (req, res) => {
|
|
2635
|
-
res.json(proxyManager.loadProxyConfig());
|
|
2636
|
-
});
|
|
2637
|
-
|
|
2638
|
-
app.post('/api/proxy/config', (req, res) => {
|
|
2639
|
-
proxyManager.saveProxyConfig(req.body);
|
|
2640
|
-
res.json({ success: true });
|
|
2641
|
-
});
|
|
2642
|
-
|
|
2643
|
-
const PROXY_CONFIG_PATH = path.join(HOME_DIR, '.config', 'opencode-studio', 'cliproxy.yaml');
|
|
2644
|
-
|
|
2645
|
-
app.get('/api/management/config.yaml', (req, res) => {
|
|
2646
|
-
console.log('GET config.yaml hit');
|
|
2647
|
-
if (!fs.existsSync(PROXY_CONFIG_PATH)) {
|
|
2648
|
-
console.log('Config file not found:', PROXY_CONFIG_PATH);
|
|
2649
|
-
return res.send("");
|
|
2650
|
-
}
|
|
2651
|
-
console.log('Sending config file:', PROXY_CONFIG_PATH);
|
|
2652
|
-
const content = fs.readFileSync(PROXY_CONFIG_PATH, 'utf8');
|
|
2653
|
-
res.send(content);
|
|
2654
|
-
});
|
|
2655
|
-
|
|
2656
|
-
app.put('/api/management/config.yaml', (req, res) => {
|
|
2657
|
-
fs.writeFileSync(PROXY_CONFIG_PATH, req.body);
|
|
2658
|
-
res.json({ ok: true, changed: [] });
|
|
2659
|
-
});
|
|
2660
|
-
|
|
2661
|
-
app.get('/api/management/api-keys', (req, res) => {
|
|
2662
|
-
if (!fs.existsSync(PROXY_CONFIG_PATH)) return res.json({ "api-keys": [] });
|
|
2663
|
-
const content = fs.readFileSync(PROXY_CONFIG_PATH, 'utf8');
|
|
2664
|
-
const yaml = require('js-yaml');
|
|
2665
|
-
try {
|
|
2666
|
-
const doc = yaml.load(content) || {};
|
|
2667
|
-
const keys = [];
|
|
2668
|
-
if (doc['management-key']) keys.push(doc['management-key']);
|
|
2669
|
-
if (Array.isArray(doc['api-keys'])) keys.push(...doc['api-keys']);
|
|
2670
|
-
res.json({ "api-keys": [...new Set(keys)].filter(k => k) });
|
|
2671
|
-
} catch (e) {
|
|
2672
|
-
res.json({ "api-keys": [] });
|
|
2673
|
-
}
|
|
2674
|
-
});
|
|
2675
|
-
|
|
2676
|
-
app.put('/api/management/api-keys', (req, res) => {
|
|
2677
|
-
const keys = req.body;
|
|
2678
|
-
if (!fs.existsSync(PROXY_CONFIG_PATH)) return res.status(404).json({ error: "Config not found" });
|
|
2679
|
-
const content = fs.readFileSync(PROXY_CONFIG_PATH, 'utf8');
|
|
2680
|
-
const yaml = require('js-yaml');
|
|
2681
|
-
try {
|
|
2682
|
-
const doc = yaml.load(content) || {};
|
|
2683
|
-
doc['api-keys'] = keys;
|
|
2684
|
-
if (keys.length > 0) doc['management-key'] = keys[0];
|
|
2685
|
-
|
|
2686
|
-
fs.writeFileSync(PROXY_CONFIG_PATH, yaml.dump(doc));
|
|
2687
|
-
res.json({ status: "ok" });
|
|
2688
|
-
} catch (e) {
|
|
2689
|
-
res.status(500).json({ error: e.message });
|
|
2690
|
-
}
|
|
2691
|
-
});
|
|
2692
|
-
|
|
2693
|
-
app.get('/api/management/logs', (req, res) => {
|
|
2694
|
-
if (!fs.existsSync(LOG_DIR)) return res.json({ lines: [], "line-count": 0, "latest-timestamp": Date.now() });
|
|
2695
|
-
const logFiles = fs.readdirSync(LOG_DIR).filter(f => f.endsWith('.log'));
|
|
2696
|
-
if (logFiles.length === 0) return res.json({ lines: [], "line-count": 0, "latest-timestamp": Date.now() });
|
|
2697
|
-
|
|
2698
|
-
const latest = logFiles.map(f => ({ name: f, time: fs.statSync(path.join(LOG_DIR, f)).mtime.getTime() }))
|
|
2699
|
-
.sort((a, b) => b.time - a.time)[0];
|
|
2700
|
-
|
|
2701
|
-
const content = fs.readFileSync(path.join(LOG_DIR, latest.name), 'utf8');
|
|
2702
|
-
const lines = content.split('\n').slice(-1000);
|
|
2703
|
-
res.json({ lines, "line-count": lines.length, "latest-timestamp": latest.time });
|
|
2704
|
-
});
|
|
2705
|
-
|
|
2706
|
-
app.get('/api/management/usage', (req, res) => {
|
|
2707
|
-
res.json({
|
|
2708
|
-
usage: {
|
|
2709
|
-
total_requests: 0,
|
|
2710
|
-
success_count: 0,
|
|
2711
|
-
failure_count: 0,
|
|
2712
|
-
total_tokens: 0,
|
|
2713
|
-
requests_by_day: {},
|
|
2714
|
-
requests_by_hour: {},
|
|
2715
|
-
tokens_by_day: {},
|
|
2716
|
-
tokens_by_hour: {},
|
|
2717
|
-
apis: {},
|
|
2718
|
-
failed_requests: 0
|
|
2719
|
-
}
|
|
2720
|
-
});
|
|
2721
|
-
});
|
|
2722
|
-
|
|
2723
|
-
app.get('/api/management/logging-to-file', (req, res) => {
|
|
2724
|
-
if (!fs.existsSync(PROXY_CONFIG_PATH)) return res.json({ "logging-to-file": false });
|
|
2725
|
-
try {
|
|
2726
|
-
const content = fs.readFileSync(PROXY_CONFIG_PATH, 'utf8');
|
|
2727
|
-
const yaml = require('js-yaml');
|
|
2728
|
-
const doc = yaml.load(content) || {};
|
|
2729
|
-
res.json({ "logging-to-file": !!doc['logging-to-file'] });
|
|
2730
|
-
} catch (e) {
|
|
2731
|
-
res.json({ "logging-to-file": false });
|
|
2732
|
-
}
|
|
2733
|
-
});
|
|
2734
|
-
|
|
2735
|
-
app.patch('/api/management/logging-to-file', (req, res) => {
|
|
2736
|
-
if (!fs.existsSync(PROXY_CONFIG_PATH)) return res.status(404).json({ error: "Config not found" });
|
|
2737
|
-
const enabled = req.body.value;
|
|
2738
|
-
const content = fs.readFileSync(PROXY_CONFIG_PATH, 'utf8');
|
|
2739
|
-
const yaml = require('js-yaml');
|
|
2740
|
-
try {
|
|
2741
|
-
const doc = yaml.load(content) || {};
|
|
2742
|
-
doc['logging-to-file'] = enabled;
|
|
2743
|
-
fs.writeFileSync(PROXY_CONFIG_PATH, yaml.dump(doc));
|
|
2744
|
-
res.json({ status: "ok" });
|
|
2745
|
-
} catch (e) {
|
|
2746
|
-
res.status(500).json({ error: e.message });
|
|
2747
|
-
}
|
|
2748
|
-
});
|
|
2749
|
-
|
|
2750
|
-
app.delete('/api/management/logs', (req, res) => {
|
|
2751
|
-
if (!fs.existsSync(LOG_DIR)) return res.json({ success: true, removed: 0 });
|
|
2752
|
-
const logFiles = fs.readdirSync(LOG_DIR).filter(f => f.endsWith('.log'));
|
|
2753
|
-
let removed = 0;
|
|
2754
|
-
try {
|
|
2755
|
-
logFiles.forEach(f => {
|
|
2756
|
-
const filePath = path.join(LOG_DIR, f);
|
|
2757
|
-
fs.unlinkSync(filePath);
|
|
2758
|
-
removed++;
|
|
2759
|
-
});
|
|
2760
|
-
res.json({ success: true, removed });
|
|
2761
|
-
} catch (e) {
|
|
2762
|
-
res.status(500).json({ error: e.message });
|
|
2763
|
-
}
|
|
2764
|
-
});
|
|
2765
|
-
|
|
2766
2560
|
app.get('/api/profiles', (req, res) => {
|
|
2767
2561
|
res.json(profileManager.listProfiles());
|
|
2768
2562
|
});
|
package/package.json
CHANGED
package/.env
DELETED
package/.env.example
DELETED
package/backend.log
DELETED
package/logs/main.log
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
[2026-01-20 03:49:29] [--------] [info ] [main.go:415] CLIProxyAPI Version: 6.7.7, Commit: f8f3ad8, BuiltAt: 2026-01-16T21:41:36Z
|
|
2
|
-
[2026-01-20 03:49:29] [--------] [error] [run.go:54] proxy service exited with error: cliproxy: failed to create auth directory : mkdir : The system cannot find the path specified.
|
|
3
|
-
[2026-01-20 03:49:41] [--------] [info ] [main.go:415] CLIProxyAPI Version: 6.7.7, Commit: f8f3ad8, BuiltAt: 2026-01-16T21:41:36Z
|
|
4
|
-
[2026-01-20 03:49:41] [--------] [error] [run.go:54] proxy service exited with error: cliproxy: failed to create auth directory : mkdir : The system cannot find the path specified.
|
package/proxy-manager.js
DELETED
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
const { spawn, exec, execSync } = require('child_process');
|
|
2
|
-
const fs = require('fs');
|
|
3
|
-
const path = require('path');
|
|
4
|
-
const os = require('os');
|
|
5
|
-
const yaml = require('js-yaml');
|
|
6
|
-
|
|
7
|
-
const HOME_DIR = os.homedir();
|
|
8
|
-
const CONFIG_DIR = path.join(HOME_DIR, '.config', 'opencode-studio');
|
|
9
|
-
const PROXY_CONFIG_FILE = path.join(CONFIG_DIR, 'cliproxy.yaml');
|
|
10
|
-
const PROXY_AUTH_DIR = path.join(HOME_DIR, '.cli-proxy-api');
|
|
11
|
-
|
|
12
|
-
let proxyProcess = null;
|
|
13
|
-
let isProxyRunning = false;
|
|
14
|
-
|
|
15
|
-
const checkBinary = (cmd) => {
|
|
16
|
-
return new Promise((resolve) => {
|
|
17
|
-
if (path.isAbsolute(cmd)) {
|
|
18
|
-
return resolve(fs.existsSync(cmd));
|
|
19
|
-
}
|
|
20
|
-
const checkCmd = process.platform === 'win32' ? `where ${cmd}` : `which ${cmd}`;
|
|
21
|
-
exec(checkCmd, (err) => {
|
|
22
|
-
resolve(!err);
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
const getProxyCommand = async () => {
|
|
28
|
-
if (process.platform === 'win32') {
|
|
29
|
-
const localAppData = process.env.LOCALAPPDATA;
|
|
30
|
-
if (localAppData) {
|
|
31
|
-
const aliases = ['CLIProxyAPI.exe', 'cli-proxy-api.exe', 'cliproxyapi.exe'];
|
|
32
|
-
for (const alias of aliases) {
|
|
33
|
-
const wingetPath = path.join(localAppData, 'Microsoft', 'WinGet', 'Links', alias);
|
|
34
|
-
if (fs.existsSync(wingetPath)) return wingetPath;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const progPath = path.join(localAppData, 'Programs', 'CLIProxyAPI', 'CLIProxyAPI.exe');
|
|
38
|
-
if (fs.existsSync(progPath)) return progPath;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
if (await checkBinary('cli-proxy-api')) return 'cli-proxy-api';
|
|
43
|
-
if (await checkBinary('cliproxyapi')) return 'cliproxyapi';
|
|
44
|
-
if (await checkBinary('CLIProxyAPI')) return 'CLIProxyAPI';
|
|
45
|
-
if (await checkBinary('cliproxyapi.exe')) return 'cliproxyapi.exe';
|
|
46
|
-
if (await checkBinary('cliproxy')) return 'cliproxy';
|
|
47
|
-
return null;
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
const loadProxyConfig = () => {
|
|
51
|
-
if (!fs.existsSync(PROXY_CONFIG_FILE)) {
|
|
52
|
-
const defaultConfig = {
|
|
53
|
-
port: 8317,
|
|
54
|
-
cors: true,
|
|
55
|
-
"allow-origin": "*",
|
|
56
|
-
"auth-dir": PROXY_AUTH_DIR,
|
|
57
|
-
"management-key": "",
|
|
58
|
-
routing: { strategy: "round-robin" },
|
|
59
|
-
"quota-exceeded": {
|
|
60
|
-
"switch-project": true,
|
|
61
|
-
"switch-preview-model": true
|
|
62
|
-
},
|
|
63
|
-
"gemini-api-key": []
|
|
64
|
-
};
|
|
65
|
-
saveProxyConfig(defaultConfig);
|
|
66
|
-
return defaultConfig;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
try {
|
|
70
|
-
const content = fs.readFileSync(PROXY_CONFIG_FILE, 'utf8');
|
|
71
|
-
const config = yaml.load(content);
|
|
72
|
-
if (config && config['management-key'] === undefined) {
|
|
73
|
-
config['management-key'] = "";
|
|
74
|
-
saveProxyConfig(config);
|
|
75
|
-
}
|
|
76
|
-
if (config && config.cors === undefined) {
|
|
77
|
-
config.cors = true;
|
|
78
|
-
config['allow-origin'] = "*";
|
|
79
|
-
saveProxyConfig(config);
|
|
80
|
-
}
|
|
81
|
-
return config;
|
|
82
|
-
} catch (e) {
|
|
83
|
-
console.error("Failed to load proxy config:", e);
|
|
84
|
-
return {};
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
const saveProxyConfig = (config) => {
|
|
89
|
-
try {
|
|
90
|
-
if (!fs.existsSync(CONFIG_DIR)) fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
91
|
-
const content = yaml.dump(config);
|
|
92
|
-
fs.writeFileSync(PROXY_CONFIG_FILE, content);
|
|
93
|
-
} catch (e) {
|
|
94
|
-
console.error("Failed to save proxy config:", e);
|
|
95
|
-
}
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
const startProxy = async () => {
|
|
99
|
-
if (isProxyRunning) return { success: true, message: "Already running" };
|
|
100
|
-
|
|
101
|
-
const cmd = await getProxyCommand();
|
|
102
|
-
if (!cmd) return { success: false, error: "CLIProxyAPI binary not found. Please install it." };
|
|
103
|
-
|
|
104
|
-
if (!fs.existsSync(PROXY_CONFIG_FILE)) loadProxyConfig();
|
|
105
|
-
|
|
106
|
-
console.log(`Starting proxy with command: ${cmd} -config "${PROXY_CONFIG_FILE}"`);
|
|
107
|
-
|
|
108
|
-
try {
|
|
109
|
-
proxyProcess = spawn(cmd, ['-config', PROXY_CONFIG_FILE], {
|
|
110
|
-
detached: true,
|
|
111
|
-
stdio: 'pipe',
|
|
112
|
-
windowsHide: true
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
proxyProcess.unref();
|
|
116
|
-
|
|
117
|
-
proxyProcess.stdout.on('data', (data) => {
|
|
118
|
-
console.log(`[Proxy] ${data}`);
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
proxyProcess.stderr.on('data', (data) => {
|
|
122
|
-
console.error(`[Proxy Err] ${data}`);
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
proxyProcess.on('close', (code) => {
|
|
126
|
-
console.log(`[Proxy] Exited with code ${code}`);
|
|
127
|
-
isProxyRunning = false;
|
|
128
|
-
proxyProcess = null;
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
isProxyRunning = true;
|
|
132
|
-
return { success: true, pid: proxyProcess.pid };
|
|
133
|
-
} catch (e) {
|
|
134
|
-
return { success: false, error: e.message };
|
|
135
|
-
}
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
const stopProxy = () => {
|
|
139
|
-
if (proxyProcess) {
|
|
140
|
-
proxyProcess.kill();
|
|
141
|
-
proxyProcess = null;
|
|
142
|
-
isProxyRunning = false;
|
|
143
|
-
return { success: true };
|
|
144
|
-
}
|
|
145
|
-
return { success: false, error: "Not running" };
|
|
146
|
-
};
|
|
147
|
-
|
|
148
|
-
const getStatus = async () => {
|
|
149
|
-
const cmd = await getProxyCommand();
|
|
150
|
-
|
|
151
|
-
let portBusy = false;
|
|
152
|
-
try {
|
|
153
|
-
if (process.platform === 'win32') {
|
|
154
|
-
const out = execSync('netstat -ano | findstr :8317 | findstr LISTENING', { encoding: 'utf8' });
|
|
155
|
-
portBusy = out.includes('LISTENING');
|
|
156
|
-
} else {
|
|
157
|
-
const out = execSync('lsof -i :8317 | grep LISTEN', { encoding: 'utf8' });
|
|
158
|
-
portBusy = out.length > 0;
|
|
159
|
-
}
|
|
160
|
-
} catch (e) {
|
|
161
|
-
portBusy = false;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
if (portBusy) {
|
|
165
|
-
isProxyRunning = true;
|
|
166
|
-
} else {
|
|
167
|
-
isProxyRunning = false;
|
|
168
|
-
proxyProcess = null;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
return {
|
|
172
|
-
running: isProxyRunning,
|
|
173
|
-
pid: proxyProcess?.pid,
|
|
174
|
-
configFile: PROXY_CONFIG_FILE,
|
|
175
|
-
port: 8317,
|
|
176
|
-
installed: !!cmd,
|
|
177
|
-
binary: cmd
|
|
178
|
-
};
|
|
179
|
-
};
|
|
180
|
-
|
|
181
|
-
const runLogin = async (provider) => {
|
|
182
|
-
const cmd = await getProxyCommand();
|
|
183
|
-
if (!cmd) return { success: false, error: "Binary not found" };
|
|
184
|
-
|
|
185
|
-
let loginFlag = '';
|
|
186
|
-
switch(provider) {
|
|
187
|
-
case 'google':
|
|
188
|
-
case 'antigravity': loginFlag = '-antigravity-login'; break;
|
|
189
|
-
case 'openai':
|
|
190
|
-
case 'codex': loginFlag = '-codex-login'; break;
|
|
191
|
-
case 'anthropic': loginFlag = '-claude-login'; break;
|
|
192
|
-
default: return { success: false, error: "Unknown provider" };
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
const fullCmd = `${cmd} ${loginFlag} -config "${PROXY_CONFIG_FILE}"`;
|
|
196
|
-
|
|
197
|
-
return {
|
|
198
|
-
success: true,
|
|
199
|
-
command: fullCmd,
|
|
200
|
-
message: "Terminal launching..."
|
|
201
|
-
};
|
|
202
|
-
};
|
|
203
|
-
|
|
204
|
-
const listAccounts = () => {
|
|
205
|
-
if (!fs.existsSync(PROXY_AUTH_DIR)) return [];
|
|
206
|
-
try {
|
|
207
|
-
return fs.readdirSync(PROXY_AUTH_DIR)
|
|
208
|
-
.filter(f => f.endsWith('.json'))
|
|
209
|
-
.map(f => {
|
|
210
|
-
const parts = f.replace('.json', '').split('-');
|
|
211
|
-
const provider = parts[0];
|
|
212
|
-
const email = parts.slice(1).join('-').replace(/_/g, '.').replace('.gmail.com', '@gmail.com');
|
|
213
|
-
return { id: f, provider, email: email || f };
|
|
214
|
-
});
|
|
215
|
-
} catch {
|
|
216
|
-
return [];
|
|
217
|
-
}
|
|
218
|
-
};
|
|
219
|
-
|
|
220
|
-
module.exports = {
|
|
221
|
-
startProxy,
|
|
222
|
-
stopProxy,
|
|
223
|
-
getStatus,
|
|
224
|
-
loadProxyConfig,
|
|
225
|
-
saveProxyConfig,
|
|
226
|
-
runLogin,
|
|
227
|
-
listAccounts
|
|
228
|
-
};
|
package/server.live.err.log
DELETED
|
File without changes
|
package/server.live.log
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
Server running at http://localhost:3001
|
package/server.log
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
Acceso denegado.
|
package/server.out
DELETED
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
2026-01-07T15:36:27.572Z Server running at http://localhost:3001
|
|
2
|
-
2026-01-07T15:36:28.364Z --- Auth Debug ---
|
|
3
|
-
2026-01-07T15:36:28.364Z Active Google Plugin:
|
|
4
|
-
2026-01-07T15:36:28.364Z Found keys in authCfg:
|
|
5
|
-
2026-01-07T15:36:28.364Z Google Auth found!
|
|
6
|
-
2026-01-07T15:36:28.364Z google.antigravity found!
|
|
7
|
-
2026-01-07T15:36:28.364Z google.gemini found!
|
|
8
|
-
2026-01-07T15:36:28.379Z --- Auth Debug ---
|
|
9
|
-
2026-01-07T15:36:28.379Z Active Google Plugin:
|
|
10
|
-
2026-01-07T15:36:28.379Z Found keys in authCfg:
|
|
11
|
-
2026-01-07T15:36:28.379Z Google Auth found!
|
|
12
|
-
2026-01-07T15:36:28.379Z google.antigravity found!
|
|
13
|
-
2026-01-07T15:36:28.379Z google.gemini found!
|
|
14
|
-
2026-01-07T15:36:30.415Z --- Auth Debug ---
|
|
15
|
-
2026-01-07T15:36:30.415Z Active Google Plugin:
|
|
16
|
-
2026-01-07T15:36:30.415Z Found keys in authCfg:
|
|
17
|
-
2026-01-07T15:36:30.415Z Google Auth found!
|
|
18
|
-
2026-01-07T15:36:30.415Z google.antigravity found!
|
|
19
|
-
2026-01-07T15:36:30.415Z google.gemini found!
|
|
20
|
-
2026-01-07T15:36:30.427Z --- Auth Debug ---
|
|
21
|
-
2026-01-07T15:36:30.427Z Active Google Plugin:
|
|
22
|
-
2026-01-07T15:36:30.427Z Found keys in authCfg:
|
|
23
|
-
2026-01-07T15:36:30.427Z Google Auth found!
|
|
24
|
-
2026-01-07T15:36:30.427Z google.antigravity found!
|
|
25
|
-
2026-01-07T15:36:30.427Z google.gemini found!
|
|
26
|
-
2026-01-07T15:36:30.678Z --- Auth Debug ---
|
|
27
|
-
2026-01-07T15:36:30.678Z Active Google Plugin:
|
|
28
|
-
2026-01-07T15:36:30.678Z Found keys in authCfg:
|
|
29
|
-
2026-01-07T15:36:30.678Z Google Auth found!
|
|
30
|
-
2026-01-07T15:36:30.678Z google.antigravity found!
|
|
31
|
-
2026-01-07T15:36:30.678Z google.gemini found!
|
|
32
|
-
2026-01-07T15:36:30.689Z --- Auth Debug ---
|
|
33
|
-
2026-01-07T15:36:30.689Z Active Google Plugin:
|
|
34
|
-
2026-01-07T15:36:30.689Z Found keys in authCfg:
|
|
35
|
-
2026-01-07T15:36:30.689Z Google Auth found!
|
|
36
|
-
2026-01-07T15:36:30.689Z google.antigravity found!
|
|
37
|
-
2026-01-07T15:36:30.689Z google.gemini found!
|
|
38
|
-
2026-01-07T15:36:33.413Z --- Auth Debug ---
|
|
39
|
-
2026-01-07T15:36:33.413Z Active Google Plugin:
|
|
40
|
-
2026-01-07T15:36:33.413Z Found keys in authCfg:
|
|
41
|
-
2026-01-07T15:36:33.413Z Google Auth found!
|
|
42
|
-
2026-01-07T15:36:33.413Z google.antigravity found!
|
|
43
|
-
2026-01-07T15:36:33.413Z google.gemini found!
|
|
44
|
-
2026-01-07T15:36:34.379Z --- Auth Debug ---
|
|
45
|
-
2026-01-07T15:36:34.379Z Active Google Plugin:
|
|
46
|
-
2026-01-07T15:36:34.379Z Found keys in authCfg:
|
|
47
|
-
2026-01-07T15:36:34.379Z Google Auth found!
|
|
48
|
-
2026-01-07T15:36:34.379Z google.antigravity found!
|
|
49
|
-
2026-01-07T15:36:34.379Z google.gemini found!
|
|
50
|
-
2026-01-07T15:36:35.818Z --- Auth Debug ---
|
|
51
|
-
2026-01-07T15:36:35.818Z Active Google Plugin:
|
|
52
|
-
2026-01-07T15:36:35.818Z Found keys in authCfg:
|
|
53
|
-
2026-01-07T15:36:35.818Z Google Auth found!
|
|
54
|
-
2026-01-07T15:36:35.818Z google.antigravity found!
|
|
55
|
-
2026-01-07T15:36:35.818Z google.gemini found!
|
|
56
|
-
2026-01-07T15:36:36.414Z --- Auth Debug ---
|
|
57
|
-
2026-01-07T15:36:36.414Z Active Google Plugin:
|
|
58
|
-
2026-01-07T15:36:36.414Z Found keys in authCfg:
|
|
59
|
-
2026-01-07T15:36:36.414Z Google Auth found!
|
|
60
|
-
2026-01-07T15:36:36.414Z google.antigravity found!
|
|
61
|
-
2026-01-07T15:36:36.414Z google.gemini found!
|
|
62
|
-
2026-01-07T15:36:37.377Z --- Auth Debug ---
|
|
63
|
-
2026-01-07T15:36:37.377Z Active Google Plugin:
|
|
64
|
-
2026-01-07T15:36:37.377Z Found keys in authCfg:
|
|
65
|
-
2026-01-07T15:36:37.377Z Google Auth found!
|
|
66
|
-
2026-01-07T15:36:37.377Z google.antigravity found!
|
|
67
|
-
2026-01-07T15:36:37.377Z google.gemini found!
|
|
68
|
-
2026-01-07T15:36:37.516Z --- Auth Debug ---
|
|
69
|
-
2026-01-07T15:36:37.516Z Active Google Plugin:
|
|
70
|
-
2026-01-07T15:36:37.516Z Found keys in authCfg:
|
|
71
|
-
2026-01-07T15:36:37.516Z Google Auth found!
|
|
72
|
-
2026-01-07T15:36:37.516Z google.antigravity found!
|
|
73
|
-
2026-01-07T15:36:37.516Z google.gemini found!
|
|
74
|
-
2026-01-07T15:36:39.413Z --- Auth Debug ---
|
|
75
|
-
2026-01-07T15:36:39.413Z Active Google Plugin:
|
|
76
|
-
2026-01-07T15:36:39.413Z Found keys in authCfg:
|
|
77
|
-
2026-01-07T15:36:39.413Z Google Auth found!
|
|
78
|
-
2026-01-07T15:36:39.413Z google.antigravity found!
|
|
79
|
-
2026-01-07T15:36:39.413Z google.gemini found!
|
|
80
|
-
2026-01-07T15:36:40.389Z --- Auth Debug ---
|
|
81
|
-
2026-01-07T15:36:40.390Z Active Google Plugin:
|
|
82
|
-
2026-01-07T15:36:40.390Z Found keys in authCfg:
|
|
83
|
-
2026-01-07T15:36:40.390Z Google Auth found!
|
|
84
|
-
2026-01-07T15:36:40.390Z google.antigravity found!
|
|
85
|
-
2026-01-07T15:36:40.390Z google.gemini found!
|
|
86
|
-
2026-01-07T15:36:41.870Z --- Auth Debug ---
|
|
87
|
-
2026-01-07T15:36:41.870Z Active Google Plugin:
|
|
88
|
-
2026-01-07T15:36:41.870Z Found keys in authCfg:
|
|
89
|
-
2026-01-07T15:36:41.870Z Google Auth found!
|
|
90
|
-
2026-01-07T15:36:41.870Z google.antigravity found!
|
|
91
|
-
2026-01-07T15:36:41.870Z google.gemini found!
|
|
92
|
-
2026-01-07T15:36:42.421Z --- Auth Debug ---
|
|
93
|
-
2026-01-07T15:36:42.421Z Active Google Plugin:
|
|
94
|
-
2026-01-07T15:36:42.421Z Found keys in authCfg:
|
|
95
|
-
2026-01-07T15:36:42.421Z Google Auth found!
|
|
96
|
-
2026-01-07T15:36:42.421Z google.antigravity found!
|
|
97
|
-
2026-01-07T15:36:42.421Z google.gemini found!
|
|
98
|
-
2026-01-07T15:36:43.390Z --- Auth Debug ---
|
|
99
|
-
2026-01-07T15:36:43.390Z Active Google Plugin:
|
|
100
|
-
2026-01-07T15:36:43.390Z Found keys in authCfg:
|
|
101
|
-
2026-01-07T15:36:43.390Z Google Auth found!
|
|
102
|
-
2026-01-07T15:36:43.390Z google.antigravity found!
|
|
103
|
-
2026-01-07T15:36:43.390Z google.gemini found!
|
|
104
|
-
2026-01-07T15:36:45.421Z --- Auth Debug ---
|
|
105
|
-
2026-01-07T15:36:45.421Z Active Google Plugin:
|
|
106
|
-
2026-01-07T15:36:45.421Z Found keys in authCfg:
|
|
107
|
-
2026-01-07T15:36:45.421Z Google Auth found!
|
|
108
|
-
2026-01-07T15:36:45.421Z google.antigravity found!
|
|
109
|
-
2026-01-07T15:36:45.421Z google.gemini found!
|
|
110
|
-
2026-01-07T15:36:46.391Z --- Auth Debug ---
|
|
111
|
-
2026-01-07T15:36:46.391Z Active Google Plugin:
|
|
112
|
-
2026-01-07T15:36:46.391Z Found keys in authCfg:
|
|
113
|
-
2026-01-07T15:36:46.391Z Google Auth found!
|
|
114
|
-
2026-01-07T15:36:46.391Z google.antigravity found!
|
|
115
|
-
2026-01-07T15:36:46.391Z google.gemini found!
|
|
116
|
-
2026-01-07T15:36:48.415Z --- Auth Debug ---
|
|
117
|
-
2026-01-07T15:36:48.415Z Active Google Plugin:
|
|
118
|
-
2026-01-07T15:36:48.415Z Found keys in authCfg:
|
|
119
|
-
2026-01-07T15:36:48.415Z Google Auth found!
|
|
120
|
-
2026-01-07T15:36:48.415Z google.antigravity found!
|
|
121
|
-
2026-01-07T15:36:48.415Z google.gemini found!
|
|
122
|
-
2026-01-07T15:36:49.382Z --- Auth Debug ---
|
|
123
|
-
2026-01-07T15:36:49.382Z Active Google Plugin:
|
|
124
|
-
2026-01-07T15:36:49.382Z Found keys in authCfg:
|
|
125
|
-
2026-01-07T15:36:49.382Z Google Auth found!
|
|
126
|
-
2026-01-07T15:36:49.382Z google.antigravity found!
|
|
127
|
-
2026-01-07T15:36:49.382Z google.gemini found!
|
|
128
|
-
2026-01-07T15:36:51.415Z --- Auth Debug ---
|
|
129
|
-
2026-01-07T15:36:51.415Z Active Google Plugin:
|
|
130
|
-
2026-01-07T15:36:51.415Z Found keys in authCfg:
|
|
131
|
-
2026-01-07T15:36:51.415Z Google Auth found!
|
|
132
|
-
2026-01-07T15:36:51.415Z google.antigravity found!
|
|
133
|
-
2026-01-07T15:36:51.415Z google.gemini found!
|
|
134
|
-
2026-01-07T15:36:52.413Z --- Auth Debug ---
|
|
135
|
-
2026-01-07T15:36:52.413Z Active Google Plugin:
|
|
136
|
-
2026-01-07T15:36:52.413Z Found keys in authCfg:
|
|
137
|
-
2026-01-07T15:36:52.413Z Google Auth found!
|
|
138
|
-
2026-01-07T15:36:52.413Z google.antigravity found!
|
|
139
|
-
2026-01-07T15:36:52.413Z google.gemini found!
|
|
140
|
-
2026-01-07T15:36:54.414Z --- Auth Debug ---
|
|
141
|
-
2026-01-07T15:36:54.414Z Active Google Plugin:
|
|
142
|
-
2026-01-07T15:36:54.414Z Found keys in authCfg:
|
|
143
|
-
2026-01-07T15:36:54.414Z Google Auth found!
|
|
144
|
-
2026-01-07T15:36:54.414Z google.antigravity found!
|
|
145
|
-
2026-01-07T15:36:54.414Z google.gemini found!
|
|
146
|
-
2026-01-07T15:36:57.421Z --- Auth Debug ---
|
|
147
|
-
2026-01-07T15:36:57.421Z Active Google Plugin:
|
|
148
|
-
2026-01-07T15:36:57.421Z Found keys in authCfg:
|
|
149
|
-
2026-01-07T15:36:57.421Z Google Auth found!
|
|
150
|
-
2026-01-07T15:36:57.421Z google.antigravity found!
|
|
151
|
-
2026-01-07T15:36:57.421Z google.gemini found!
|
|
152
|
-
2026-01-07T15:37:00.417Z --- Auth Debug ---
|
|
153
|
-
2026-01-07T15:37:00.417Z Active Google Plugin:
|
|
154
|
-
2026-01-07T15:37:00.417Z Found keys in authCfg:
|
|
155
|
-
2026-01-07T15:37:00.417Z Google Auth found!
|
|
156
|
-
2026-01-07T15:37:00.417Z google.antigravity found!
|
|
157
|
-
2026-01-07T15:37:00.417Z google.gemini found!
|
|
158
|
-
2026-01-07T15:37:03.421Z --- Auth Debug ---
|
|
159
|
-
2026-01-07T15:37:03.421Z Active Google Plugin:
|
|
160
|
-
2026-01-07T15:37:03.421Z Found keys in authCfg:
|
|
161
|
-
2026-01-07T15:37:03.421Z Google Auth found!
|
|
162
|
-
2026-01-07T15:37:03.421Z google.antigravity found!
|
|
163
|
-
2026-01-07T15:37:03.421Z google.gemini found!
|
|
164
|
-
2026-01-07T15:37:06.425Z --- Auth Debug ---
|
|
165
|
-
2026-01-07T15:37:06.426Z Active Google Plugin:
|
|
166
|
-
2026-01-07T15:37:06.426Z Found keys in authCfg:
|
|
167
|
-
2026-01-07T15:37:06.426Z Google Auth found!
|
|
168
|
-
2026-01-07T15:37:06.426Z google.antigravity found!
|
|
169
|
-
2026-01-07T15:37:06.426Z google.gemini found!
|
|
170
|
-
2026-01-07T15:37:09.415Z --- Auth Debug ---
|
|
171
|
-
2026-01-07T15:37:09.415Z Active Google Plugin:
|
|
172
|
-
2026-01-07T15:37:09.415Z Found keys in authCfg:
|
|
173
|
-
2026-01-07T15:37:09.415Z Google Auth found!
|
|
174
|
-
2026-01-07T15:37:09.415Z google.antigravity found!
|
|
175
|
-
2026-01-07T15:37:09.415Z google.gemini found!
|
|
176
|
-
2026-01-07T15:37:12.421Z --- Auth Debug ---
|
|
177
|
-
2026-01-07T15:37:12.421Z Active Google Plugin:
|
|
178
|
-
2026-01-07T15:37:12.421Z Found keys in authCfg:
|
|
179
|
-
2026-01-07T15:37:12.421Z Google Auth found!
|
|
180
|
-
2026-01-07T15:37:12.421Z google.antigravity found!
|
|
181
|
-
2026-01-07T15:37:12.421Z google.gemini found!
|
|
182
|
-
2026-01-07T15:37:15.417Z --- Auth Debug ---
|
|
183
|
-
2026-01-07T15:37:15.417Z Active Google Plugin:
|
|
184
|
-
2026-01-07T15:37:15.417Z Found keys in authCfg:
|
|
185
|
-
2026-01-07T15:37:15.417Z Google Auth found!
|
|
186
|
-
2026-01-07T15:37:15.417Z google.antigravity found!
|
|
187
|
-
2026-01-07T15:37:15.417Z google.gemini found!
|
|
188
|
-
2026-01-07T15:37:18.419Z --- Auth Debug ---
|
|
189
|
-
2026-01-07T15:37:18.419Z Active Google Plugin:
|
|
190
|
-
2026-01-07T15:37:18.419Z Found keys in authCfg:
|
|
191
|
-
2026-01-07T15:37:18.419Z Google Auth found!
|
|
192
|
-
2026-01-07T15:37:18.419Z google.antigravity found!
|
|
193
|
-
2026-01-07T15:37:18.419Z google.gemini found!
|
|
194
|
-
2026-01-07T15:37:21.415Z --- Auth Debug ---
|
|
195
|
-
2026-01-07T15:37:21.415Z Active Google Plugin:
|
|
196
|
-
2026-01-07T15:37:21.415Z Found keys in authCfg:
|
|
197
|
-
2026-01-07T15:37:21.415Z Google Auth found!
|
|
198
|
-
2026-01-07T15:37:21.415Z google.antigravity found!
|
|
199
|
-
2026-01-07T15:37:21.415Z google.gemini found!
|
|
200
|
-
2026-01-07T15:37:23.049Z Server file changed, exiting for restart...
|
|
201
|
-
2026-01-07T15:37:23.049Z Server file changed, exiting for restart...
|
package/server_debug.log
DELETED
|
@@ -1,387 +0,0 @@
|
|
|
1
|
-
[Auth] Syncing github-copilot login for profile-1768874022150 to pool.
|
|
2
|
-
Server running at http://localhost:3001
|
|
3
|
-
[REQ] HEAD /api/management/api-keys
|
|
4
|
-
[REQ] GET /api/health
|
|
5
|
-
[REQ] GET /api/proxy/status
|
|
6
|
-
[REQ] HEAD /api/management/config.yaml
|
|
7
|
-
GET config.yaml hit
|
|
8
|
-
Sending config file: C:\Users\Microck\.config\opencode-studio\cliproxy.yaml
|
|
9
|
-
[REQ] GET /api/health
|
|
10
|
-
[REQ] GET /api/proxy/status
|
|
11
|
-
[REQ] HEAD /api/management/api-keys
|
|
12
|
-
[REQ] GET /api/health
|
|
13
|
-
[REQ] GET /api/proxy/status
|
|
14
|
-
[REQ] GET /api/health
|
|
15
|
-
[REQ] OPTIONS /api/sync/auto
|
|
16
|
-
[REQ] GET /api/config
|
|
17
|
-
[REQ] GET /api/skills
|
|
18
|
-
[REQ] GET /api/plugins
|
|
19
|
-
[REQ] POST /api/sync/auto
|
|
20
|
-
[REQ] GET /api/proxy/status
|
|
21
|
-
[REQ] GET /api/config
|
|
22
|
-
[REQ] GET /api/skills
|
|
23
|
-
[REQ] GET /api/plugins
|
|
24
|
-
[REQ] GET /api/proxy/status
|
|
25
|
-
[REQ] GET /api/health
|
|
26
|
-
[REQ] OPTIONS /api/sync/auto
|
|
27
|
-
[REQ] GET /api/config
|
|
28
|
-
[REQ] POST /api/sync/auto
|
|
29
|
-
[REQ] GET /api/skills
|
|
30
|
-
[REQ] GET /api/plugins
|
|
31
|
-
[REQ] GET /api/proxy/status
|
|
32
|
-
[REQ] GET /api/config
|
|
33
|
-
[REQ] GET /api/skills
|
|
34
|
-
[REQ] GET /api/plugins
|
|
35
|
-
[REQ] GET /api/proxy/status
|
|
36
|
-
[REQ] GET /api/health
|
|
37
|
-
[REQ] GET /api/health
|
|
38
|
-
[REQ] GET /api/health
|
|
39
|
-
[REQ] GET /api/proxy/status
|
|
40
|
-
[REQ] GET /api/proxy/status
|
|
41
|
-
[REQ] GET /api/health
|
|
42
|
-
[REQ] GET /api/health
|
|
43
|
-
[REQ] GET /api/health
|
|
44
|
-
[REQ] GET /api/health
|
|
45
|
-
[REQ] GET /api/proxy/status
|
|
46
|
-
[REQ] GET /api/health
|
|
47
|
-
[REQ] GET /api/health
|
|
48
|
-
[REQ] GET /api/health
|
|
49
|
-
[REQ] GET /api/health
|
|
50
|
-
[REQ] GET /api/proxy/status
|
|
51
|
-
[REQ] GET /api/health
|
|
52
|
-
[REQ] GET /api/proxy/status
|
|
53
|
-
[REQ] GET /api/health
|
|
54
|
-
[REQ] OPTIONS /api/sync/auto
|
|
55
|
-
[REQ] GET /api/config
|
|
56
|
-
[REQ] GET /api/skills
|
|
57
|
-
[REQ] GET /api/plugins
|
|
58
|
-
[REQ] POST /api/sync/auto
|
|
59
|
-
[REQ] GET /api/proxy/status
|
|
60
|
-
[REQ] GET /api/config
|
|
61
|
-
[REQ] GET /api/skills
|
|
62
|
-
[REQ] GET /api/plugins
|
|
63
|
-
[REQ] GET /api/proxy/status
|
|
64
|
-
[REQ] GET /api/health
|
|
65
|
-
[REQ] OPTIONS /api/sync/auto
|
|
66
|
-
[REQ] GET /api/config
|
|
67
|
-
[REQ] GET /api/skills
|
|
68
|
-
[REQ] GET /api/plugins
|
|
69
|
-
[REQ] POST /api/sync/auto
|
|
70
|
-
[REQ] GET /api/proxy/status
|
|
71
|
-
[REQ] GET /api/config
|
|
72
|
-
[REQ] GET /api/skills
|
|
73
|
-
[REQ] GET /api/plugins
|
|
74
|
-
[REQ] GET /api/proxy/status
|
|
75
|
-
[REQ] GET /api/health
|
|
76
|
-
[REQ] GET /api/proxy/status
|
|
77
|
-
[REQ] GET /api/health
|
|
78
|
-
[REQ] OPTIONS /api/sync/auto
|
|
79
|
-
[REQ] GET /api/config
|
|
80
|
-
[REQ] GET /api/skills
|
|
81
|
-
[REQ] GET /api/plugins
|
|
82
|
-
[REQ] POST /api/sync/auto
|
|
83
|
-
[REQ] GET /api/proxy/status
|
|
84
|
-
[REQ] GET /api/config
|
|
85
|
-
[REQ] GET /api/skills
|
|
86
|
-
[REQ] GET /api/plugins
|
|
87
|
-
[REQ] GET /api/proxy/status
|
|
88
|
-
[REQ] GET /api/health
|
|
89
|
-
[REQ] GET /api/health
|
|
90
|
-
[REQ] GET /api/health
|
|
91
|
-
[REQ] GET /api/proxy/status
|
|
92
|
-
[REQ] GET /api/health
|
|
93
|
-
[REQ] GET /api/health
|
|
94
|
-
[REQ] GET /api/health
|
|
95
|
-
[REQ] GET /api/proxy/status
|
|
96
|
-
[REQ] GET /api/health
|
|
97
|
-
[REQ] GET /api/health
|
|
98
|
-
[REQ] GET /api/health
|
|
99
|
-
[REQ] GET /api/health
|
|
100
|
-
[REQ] GET /api/proxy/status
|
|
101
|
-
[REQ] GET /api/health
|
|
102
|
-
[REQ] GET /api/proxy/status
|
|
103
|
-
[REQ] GET /api/health
|
|
104
|
-
[REQ] GET /api/health
|
|
105
|
-
[REQ] GET /api/health
|
|
106
|
-
[REQ] GET /api/proxy/status
|
|
107
|
-
[REQ] GET /api/health
|
|
108
|
-
[REQ] GET /api/health
|
|
109
|
-
[REQ] GET /api/health
|
|
110
|
-
[REQ] GET /api/proxy/status
|
|
111
|
-
[REQ] GET /api/health
|
|
112
|
-
[REQ] GET /api/health
|
|
113
|
-
[REQ] GET /api/health
|
|
114
|
-
[REQ] GET /api/health
|
|
115
|
-
[REQ] GET /api/proxy/status
|
|
116
|
-
[REQ] GET /api/health
|
|
117
|
-
[REQ] GET /api/health
|
|
118
|
-
[REQ] GET /api/health
|
|
119
|
-
[REQ] GET /api/proxy/status
|
|
120
|
-
[REQ] GET /api/health
|
|
121
|
-
[REQ] GET /api/health
|
|
122
|
-
[REQ] GET /api/health
|
|
123
|
-
[REQ] GET /api/proxy/status
|
|
124
|
-
[REQ] GET /api/health
|
|
125
|
-
[REQ] GET /api/health
|
|
126
|
-
[REQ] GET /api/health
|
|
127
|
-
[REQ] GET /api/health
|
|
128
|
-
[REQ] GET /api/proxy/status
|
|
129
|
-
[REQ] GET /api/health
|
|
130
|
-
[REQ] GET /api/proxy/status
|
|
131
|
-
[REQ] GET /api/health
|
|
132
|
-
[REQ] GET /api/health
|
|
133
|
-
[REQ] GET /api/health
|
|
134
|
-
[REQ] GET /api/proxy/status
|
|
135
|
-
[REQ] GET /api/health
|
|
136
|
-
[REQ] GET /api/health
|
|
137
|
-
[REQ] GET /api/health
|
|
138
|
-
[REQ] GET /api/proxy/status
|
|
139
|
-
[REQ] GET /api/health
|
|
140
|
-
[REQ] GET /api/health
|
|
141
|
-
[REQ] GET /api/health
|
|
142
|
-
[REQ] GET /api/health
|
|
143
|
-
[REQ] OPTIONS /api/sync/auto
|
|
144
|
-
[REQ] GET /api/config
|
|
145
|
-
[REQ] GET /api/skills
|
|
146
|
-
[REQ] GET /api/plugins
|
|
147
|
-
[REQ] POST /api/sync/auto
|
|
148
|
-
[REQ] GET /api/proxy/status
|
|
149
|
-
[REQ] GET /api/config
|
|
150
|
-
[REQ] GET /api/skills
|
|
151
|
-
[REQ] GET /api/plugins
|
|
152
|
-
[REQ] GET /api/proxy/status
|
|
153
|
-
[REQ] GET /api/auth/pool?provider=google
|
|
154
|
-
[Auth] getProfileDir: ns=google.antigravity, nsHas=true, plainHas=false
|
|
155
|
-
[REQ] GET /api/auth/pool?provider=google
|
|
156
|
-
[Auth] getProfileDir: ns=google.antigravity, nsHas=true, plainHas=false
|
|
157
|
-
[REQ] GET /api/management/api-keys
|
|
158
|
-
[REQ] GET /api/management/api-keys
|
|
159
|
-
[REQ] GET /api/health
|
|
160
|
-
[REQ] GET /api/management/config.yaml
|
|
161
|
-
GET config.yaml hit
|
|
162
|
-
Sending config file: C:\Users\Microck\.config\opencode-studio\cliproxy.yaml
|
|
163
|
-
[REQ] GET /api/management/config.yaml
|
|
164
|
-
GET config.yaml hit
|
|
165
|
-
Sending config file: C:\Users\Microck\.config\opencode-studio\cliproxy.yaml
|
|
166
|
-
[REQ] GET /api/management/logging-to-file
|
|
167
|
-
[REQ] GET /api/management/logging-to-file
|
|
168
|
-
[REQ] GET /api/management/usage
|
|
169
|
-
[REQ] GET /api/management/usage
|
|
170
|
-
[REQ] GET /api/health
|
|
171
|
-
[REQ] OPTIONS /api/sync/auto
|
|
172
|
-
[REQ] POST /api/sync/auto
|
|
173
|
-
[REQ] GET /api/proxy/status
|
|
174
|
-
[REQ] GET /api/auth/pool?provider=google
|
|
175
|
-
[Auth] getProfileDir: ns=google.antigravity, nsHas=true, plainHas=false
|
|
176
|
-
[REQ] GET /api/cooldowns
|
|
177
|
-
[REQ] GET /api/auth/pool?provider=openai
|
|
178
|
-
[REQ] GET /api/auth/pool?provider=anthropic
|
|
179
|
-
[REQ] GET /api/config
|
|
180
|
-
[REQ] GET /api/skills
|
|
181
|
-
[REQ] GET /api/plugins
|
|
182
|
-
[REQ] GET /api/health
|
|
183
|
-
[REQ] GET /api/health
|
|
184
|
-
[REQ] OPTIONS /api/sync/auto
|
|
185
|
-
[REQ] GET /api/config
|
|
186
|
-
[REQ] GET /api/skills
|
|
187
|
-
[REQ] GET /api/plugins
|
|
188
|
-
[REQ] POST /api/sync/auto
|
|
189
|
-
[REQ] GET /api/config
|
|
190
|
-
[REQ] GET /api/skills
|
|
191
|
-
[REQ] GET /api/plugins
|
|
192
|
-
[REQ] GET /api/proxy/status
|
|
193
|
-
[REQ] GET /api/health
|
|
194
|
-
[REQ] GET /api/auth/pool?provider=google
|
|
195
|
-
[Auth] getProfileDir: ns=google.antigravity, nsHas=true, plainHas=false
|
|
196
|
-
[REQ] GET /api/health
|
|
197
|
-
[REQ] GET /api/management/api-keys
|
|
198
|
-
[REQ] GET /api/health
|
|
199
|
-
[REQ] GET /api/health
|
|
200
|
-
[REQ] GET /api/proxy/status
|
|
201
|
-
[REQ] GET /api/health
|
|
202
|
-
[REQ] GET /api/health
|
|
203
|
-
[REQ] GET /api/health
|
|
204
|
-
[REQ] GET /api/proxy/status
|
|
205
|
-
[REQ] GET /api/health
|
|
206
|
-
[REQ] GET /api/management/config.yaml
|
|
207
|
-
GET config.yaml hit
|
|
208
|
-
Sending config file: C:\Users\Microck\.config\opencode-studio\cliproxy.yaml
|
|
209
|
-
[REQ] GET /api/health
|
|
210
|
-
[REQ] GET /api/health
|
|
211
|
-
[REQ] GET /api/proxy/status
|
|
212
|
-
[REQ] GET /api/health
|
|
213
|
-
[REQ] GET /api/management/logging-to-file
|
|
214
|
-
[REQ] GET /api/management/logs
|
|
215
|
-
[REQ] OPTIONS /api/management/logging-to-file
|
|
216
|
-
[REQ] PATCH /api/management/logging-to-file
|
|
217
|
-
[REQ] GET /api/management/logging-to-file
|
|
218
|
-
[REQ] GET /api/health
|
|
219
|
-
[REQ] GET /api/management/logs?after=1768877356971
|
|
220
|
-
[REQ] GET /api/health
|
|
221
|
-
[REQ] GET /api/management/logs?after=1768877356971
|
|
222
|
-
[REQ] GET /api/management/usage
|
|
223
|
-
[REQ] GET /api/health
|
|
224
|
-
[REQ] GET /api/proxy/status
|
|
225
|
-
[REQ] GET /api/management/logging-to-file
|
|
226
|
-
[REQ] GET /api/health
|
|
227
|
-
[REQ] POST /api/proxy/start
|
|
228
|
-
Starting proxy with command: C:\Users\Microck\AppData\Local\Microsoft\WinGet\Links\cli-proxy-api.exe -config C:\Users\Microck\.config\opencode-studio\cliproxy.yaml
|
|
229
|
-
[REQ] GET /api/proxy/status
|
|
230
|
-
[Proxy] CLIProxyAPI Version: 6.7.7, Commit: f8f3ad8, BuiltAt: 2026-01-16T21:41:36Z
|
|
231
|
-
|
|
232
|
-
[Proxy] Exited with code 0
|
|
233
|
-
[REQ] GET /api/health
|
|
234
|
-
[REQ] GET /api/health
|
|
235
|
-
[REQ] GET /api/proxy/status
|
|
236
|
-
[REQ] GET /api/health
|
|
237
|
-
[REQ] GET /api/auth/pool?provider=google
|
|
238
|
-
[Auth] getProfileDir: ns=google.antigravity, nsHas=true, plainHas=false
|
|
239
|
-
[REQ] GET /api/auth/pool?provider=openai
|
|
240
|
-
[REQ] GET /api/health
|
|
241
|
-
[REQ] POST /api/proxy/start
|
|
242
|
-
Starting proxy with command: C:\Users\Microck\AppData\Local\Microsoft\WinGet\Links\cli-proxy-api.exe -config C:\Users\Microck\.config\opencode-studio\cliproxy.yaml
|
|
243
|
-
[REQ] GET /api/proxy/status
|
|
244
|
-
[Proxy] CLIProxyAPI Version: 6.7.7, Commit: f8f3ad8, BuiltAt: 2026-01-16T21:41:36Z
|
|
245
|
-
|
|
246
|
-
[Proxy] Exited with code 0
|
|
247
|
-
[REQ] GET /api/auth/pool?provider=google
|
|
248
|
-
[Auth] getProfileDir: ns=google.antigravity, nsHas=true, plainHas=false
|
|
249
|
-
[REQ] GET /api/auth/pool?provider=openai
|
|
250
|
-
[REQ] GET /api/health
|
|
251
|
-
[REQ] GET /api/management/logging-to-file
|
|
252
|
-
[REQ] GET /api/proxy/status
|
|
253
|
-
[REQ] GET /api/health
|
|
254
|
-
[REQ] OPTIONS /api/management/logging-to-file
|
|
255
|
-
[REQ] PATCH /api/management/logging-to-file
|
|
256
|
-
[REQ] PATCH /api/management/logging-to-file
|
|
257
|
-
[REQ] GET /api/management/logs
|
|
258
|
-
[REQ] GET /api/management/logging-to-file
|
|
259
|
-
[REQ] GET /api/health
|
|
260
|
-
[REQ] GET /api/management/logs?after=1768877386976
|
|
261
|
-
[REQ] GET /api/management/logging-to-file
|
|
262
|
-
[REQ] GET /api/management/logs?after=1768877390175
|
|
263
|
-
[REQ] GET /api/management/logging-to-file
|
|
264
|
-
[REQ] GET /api/health
|
|
265
|
-
[REQ] GET /api/management/logs?after=1768877392037
|
|
266
|
-
[REQ] GET /api/management/logging-to-file
|
|
267
|
-
[REQ] GET /api/health
|
|
268
|
-
[REQ] GET /api/proxy/status
|
|
269
|
-
[REQ] GET /api/management/logs?after=1768877393439
|
|
270
|
-
[REQ] GET /api/management/logging-to-file
|
|
271
|
-
[REQ] GET /api/health
|
|
272
|
-
[REQ] GET /api/management/logs?after=1768877397061
|
|
273
|
-
[REQ] GET /api/management/logging-to-file
|
|
274
|
-
[REQ] OPTIONS /api/management/logging-to-file
|
|
275
|
-
[REQ] PATCH /api/management/logging-to-file
|
|
276
|
-
[REQ] GET /api/management/logs?after=1768877398094
|
|
277
|
-
[REQ] GET /api/management/logging-to-file
|
|
278
|
-
[REQ] GET /api/health
|
|
279
|
-
[REQ] GET /api/management/logs?after=1768877400153
|
|
280
|
-
[REQ] GET /api/management/logging-to-file
|
|
281
|
-
[REQ] GET /api/health
|
|
282
|
-
[REQ] GET /api/management/logs?after=1768877402561
|
|
283
|
-
[REQ] GET /api/management/logging-to-file
|
|
284
|
-
[REQ] GET /api/proxy/status
|
|
285
|
-
[REQ] GET /api/health
|
|
286
|
-
[REQ] GET /api/management/logs?after=1768877406180
|
|
287
|
-
[REQ] GET /api/management/logging-to-file
|
|
288
|
-
[REQ] GET /api/health
|
|
289
|
-
[REQ] GET /api/management/logs?after=1768877406933
|
|
290
|
-
[REQ] GET /api/management/logs?after=1768877406933
|
|
291
|
-
[REQ] GET /api/health
|
|
292
|
-
[REQ] GET /api/management/logs?after=1768877406933
|
|
293
|
-
[REQ] GET /api/management/logging-to-file
|
|
294
|
-
[REQ] GET /api/proxy/status
|
|
295
|
-
[REQ] GET /api/health
|
|
296
|
-
[REQ] GET /api/management/logs?after=1768877414924
|
|
297
|
-
[REQ] GET /api/management/logging-to-file
|
|
298
|
-
[REQ] GET /api/management/logs?after=1768877415269
|
|
299
|
-
[REQ] GET /api/health
|
|
300
|
-
[REQ] GET /api/management/logs?after=1768877415269
|
|
301
|
-
[REQ] GET /api/health
|
|
302
|
-
[REQ] GET /api/management/logs?after=1768877415269
|
|
303
|
-
[REQ] GET /api/health
|
|
304
|
-
[REQ] GET /api/proxy/status
|
|
305
|
-
[REQ] GET /api/auth/pool?provider=google
|
|
306
|
-
[Auth] getProfileDir: ns=google.antigravity, nsHas=true, plainHas=false
|
|
307
|
-
[REQ] GET /api/auth/pool?provider=openai
|
|
308
|
-
[REQ] GET /api/auth/pool?provider=anthropic
|
|
309
|
-
[REQ] GET /api/auth/pool?provider=openai
|
|
310
|
-
[REQ] GET /api/auth/pool?provider=google
|
|
311
|
-
[Auth] getProfileDir: ns=google.antigravity, nsHas=true, plainHas=false
|
|
312
|
-
[REQ] GET /api/health
|
|
313
|
-
[REQ] GET /api/auth/pool?provider=openai
|
|
314
|
-
[REQ] GET /api/auth/pool?provider=google
|
|
315
|
-
[Auth] getProfileDir: ns=google.antigravity, nsHas=true, plainHas=false
|
|
316
|
-
[REQ] GET /api/auth/pool?provider=openai
|
|
317
|
-
[REQ] GET /api/health
|
|
318
|
-
[REQ] GET /api/auth/pool?provider=google
|
|
319
|
-
[Auth] getProfileDir: ns=google.antigravity, nsHas=true, plainHas=false
|
|
320
|
-
[REQ] GET /api/auth/pool?provider=openai
|
|
321
|
-
[REQ] GET /api/auth/pool?provider=anthropic
|
|
322
|
-
[REQ] GET /api/auth/pool?provider=openai
|
|
323
|
-
[REQ] GET /api/auth/pool?provider=google
|
|
324
|
-
[Auth] getProfileDir: ns=google.antigravity, nsHas=true, plainHas=false
|
|
325
|
-
[REQ] GET /api/health
|
|
326
|
-
[REQ] GET /api/proxy/status
|
|
327
|
-
[REQ] GET /api/auth/pool?provider=google
|
|
328
|
-
[Auth] getProfileDir: ns=google.antigravity, nsHas=true, plainHas=false
|
|
329
|
-
[REQ] GET /api/proxy/status
|
|
330
|
-
[REQ] GET /api/proxy/status
|
|
331
|
-
[REQ] GET /api/proxy/status
|
|
332
|
-
[REQ] GET /api/proxy/status
|
|
333
|
-
[REQ] GET /api/proxy/status
|
|
334
|
-
[REQ] GET /api/health
|
|
335
|
-
[REQ] GET /api/proxy/status
|
|
336
|
-
[REQ] GET /api/proxy/status
|
|
337
|
-
[REQ] GET /api/proxy/status
|
|
338
|
-
[REQ] GET /api/health
|
|
339
|
-
[REQ] GET /api/auth/pool?provider=openai
|
|
340
|
-
[REQ] GET /api/health
|
|
341
|
-
[REQ] GET /api/auth/pool?provider=anthropic
|
|
342
|
-
[REQ] GET /api/proxy/status
|
|
343
|
-
[REQ] GET /api/health
|
|
344
|
-
[REQ] GET /api/health
|
|
345
|
-
[REQ] GET /api/health
|
|
346
|
-
[REQ] GET /api/health
|
|
347
|
-
[REQ] GET /api/proxy/status
|
|
348
|
-
[REQ] GET /api/health
|
|
349
|
-
[REQ] GET /api/health
|
|
350
|
-
[REQ] GET /api/health
|
|
351
|
-
[REQ] GET /api/proxy/status
|
|
352
|
-
[REQ] GET /api/health
|
|
353
|
-
[REQ] GET /api/health
|
|
354
|
-
[REQ] GET /api/health
|
|
355
|
-
[REQ] GET /api/health
|
|
356
|
-
[REQ] GET /api/proxy/status
|
|
357
|
-
[REQ] GET /api/health
|
|
358
|
-
[REQ] GET /api/health
|
|
359
|
-
[REQ] GET /api/health
|
|
360
|
-
[REQ] GET /api/proxy/status
|
|
361
|
-
[REQ] GET /api/health
|
|
362
|
-
[REQ] GET /api/health
|
|
363
|
-
[REQ] GET /api/health
|
|
364
|
-
[REQ] GET /api/proxy/status
|
|
365
|
-
[REQ] GET /api/health
|
|
366
|
-
[REQ] GET /api/health
|
|
367
|
-
[REQ] GET /api/health
|
|
368
|
-
[REQ] GET /api/proxy/status
|
|
369
|
-
[REQ] GET /api/health
|
|
370
|
-
[REQ] GET /api/health
|
|
371
|
-
[REQ] GET /api/health
|
|
372
|
-
[REQ] GET /api/health
|
|
373
|
-
[REQ] GET /api/proxy/status
|
|
374
|
-
[REQ] GET /api/health
|
|
375
|
-
[REQ] GET /api/proxy/status
|
|
376
|
-
[REQ] GET /api/health
|
|
377
|
-
[REQ] GET /api/proxy/status
|
|
378
|
-
[REQ] GET /api/health
|
|
379
|
-
[REQ] GET /api/proxy/status
|
|
380
|
-
[REQ] GET /api/health
|
|
381
|
-
[REQ] GET /api/proxy/status
|
|
382
|
-
[REQ] GET /api/proxy/status
|
|
383
|
-
[REQ] GET /api/health
|
|
384
|
-
[REQ] GET /api/health
|
|
385
|
-
[REQ] GET /api/proxy/status
|
|
386
|
-
[REQ] GET /api/health
|
|
387
|
-
[REQ] GET /api/proxy/status
|