@adversity/coding-tool-x 2.2.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/CHANGELOG.md +333 -0
- package/LICENSE +21 -0
- package/README.md +404 -0
- package/bin/ctx.js +8 -0
- package/dist/web/assets/index-D1AYlFLZ.js +3220 -0
- package/dist/web/assets/index-aL3cKxSK.css +41 -0
- package/dist/web/favicon.ico +0 -0
- package/dist/web/index.html +14 -0
- package/dist/web/logo.png +0 -0
- package/docs/CHANGELOG.md +582 -0
- package/docs/DIRECTORY_MIGRATION.md +112 -0
- package/docs/PROJECT_STRUCTURE.md +396 -0
- package/docs/bannel.png +0 -0
- package/docs/home.png +0 -0
- package/docs/logo.png +0 -0
- package/docs/multi-channel-load-balancing.md +249 -0
- package/package.json +73 -0
- package/src/commands/channels.js +504 -0
- package/src/commands/cli-type.js +99 -0
- package/src/commands/daemon.js +286 -0
- package/src/commands/doctor.js +332 -0
- package/src/commands/list.js +222 -0
- package/src/commands/logs.js +259 -0
- package/src/commands/port-config.js +115 -0
- package/src/commands/proxy-control.js +258 -0
- package/src/commands/proxy.js +152 -0
- package/src/commands/resume.js +137 -0
- package/src/commands/search.js +190 -0
- package/src/commands/stats.js +224 -0
- package/src/commands/switch.js +48 -0
- package/src/commands/toggle-proxy.js +222 -0
- package/src/commands/ui.js +92 -0
- package/src/commands/workspace.js +454 -0
- package/src/config/default.js +40 -0
- package/src/config/loader.js +75 -0
- package/src/config/paths.js +121 -0
- package/src/index.js +373 -0
- package/src/reset-config.js +92 -0
- package/src/server/api/agents.js +248 -0
- package/src/server/api/aliases.js +36 -0
- package/src/server/api/channels.js +258 -0
- package/src/server/api/claude-hooks.js +480 -0
- package/src/server/api/codex-channels.js +312 -0
- package/src/server/api/codex-projects.js +91 -0
- package/src/server/api/codex-proxy.js +182 -0
- package/src/server/api/codex-sessions.js +491 -0
- package/src/server/api/codex-statistics.js +57 -0
- package/src/server/api/commands.js +245 -0
- package/src/server/api/config-templates.js +182 -0
- package/src/server/api/config.js +147 -0
- package/src/server/api/convert.js +127 -0
- package/src/server/api/dashboard.js +125 -0
- package/src/server/api/env.js +144 -0
- package/src/server/api/favorites.js +77 -0
- package/src/server/api/gemini-channels.js +261 -0
- package/src/server/api/gemini-projects.js +91 -0
- package/src/server/api/gemini-proxy.js +160 -0
- package/src/server/api/gemini-sessions.js +397 -0
- package/src/server/api/gemini-statistics.js +57 -0
- package/src/server/api/health-check.js +118 -0
- package/src/server/api/mcp.js +336 -0
- package/src/server/api/pm2-autostart.js +269 -0
- package/src/server/api/projects.js +124 -0
- package/src/server/api/prompts.js +279 -0
- package/src/server/api/proxy.js +235 -0
- package/src/server/api/rules.js +271 -0
- package/src/server/api/sessions.js +595 -0
- package/src/server/api/settings.js +61 -0
- package/src/server/api/skills.js +305 -0
- package/src/server/api/statistics.js +91 -0
- package/src/server/api/terminal.js +202 -0
- package/src/server/api/ui-config.js +64 -0
- package/src/server/api/workspaces.js +407 -0
- package/src/server/codex-proxy-server.js +538 -0
- package/src/server/dev-server.js +26 -0
- package/src/server/gemini-proxy-server.js +518 -0
- package/src/server/index.js +305 -0
- package/src/server/proxy-server.js +469 -0
- package/src/server/services/agents-service.js +354 -0
- package/src/server/services/alias.js +71 -0
- package/src/server/services/channel-health.js +234 -0
- package/src/server/services/channel-scheduler.js +234 -0
- package/src/server/services/channels.js +347 -0
- package/src/server/services/codex-channels.js +625 -0
- package/src/server/services/codex-config.js +90 -0
- package/src/server/services/codex-parser.js +322 -0
- package/src/server/services/codex-sessions.js +665 -0
- package/src/server/services/codex-settings-manager.js +397 -0
- package/src/server/services/codex-speed-test-template.json +24 -0
- package/src/server/services/codex-statistics-service.js +255 -0
- package/src/server/services/commands-service.js +360 -0
- package/src/server/services/config-templates-service.js +732 -0
- package/src/server/services/env-checker.js +307 -0
- package/src/server/services/env-manager.js +300 -0
- package/src/server/services/favorites.js +163 -0
- package/src/server/services/gemini-channels.js +333 -0
- package/src/server/services/gemini-config.js +73 -0
- package/src/server/services/gemini-sessions.js +689 -0
- package/src/server/services/gemini-settings-manager.js +263 -0
- package/src/server/services/gemini-statistics-service.js +253 -0
- package/src/server/services/health-check.js +399 -0
- package/src/server/services/mcp-service.js +1188 -0
- package/src/server/services/prompts-service.js +492 -0
- package/src/server/services/proxy-runtime.js +79 -0
- package/src/server/services/pty-manager.js +435 -0
- package/src/server/services/rules-service.js +401 -0
- package/src/server/services/session-cache.js +127 -0
- package/src/server/services/session-converter.js +577 -0
- package/src/server/services/sessions.js +757 -0
- package/src/server/services/settings-manager.js +163 -0
- package/src/server/services/skill-service.js +965 -0
- package/src/server/services/speed-test.js +545 -0
- package/src/server/services/statistics-service.js +386 -0
- package/src/server/services/terminal-commands.js +155 -0
- package/src/server/services/terminal-config.js +140 -0
- package/src/server/services/terminal-detector.js +306 -0
- package/src/server/services/ui-config.js +130 -0
- package/src/server/services/workspace-service.js +662 -0
- package/src/server/utils/pricing.js +41 -0
- package/src/server/websocket-server.js +557 -0
- package/src/ui/menu.js +129 -0
- package/src/ui/prompts.js +100 -0
- package/src/utils/format.js +43 -0
- package/src/utils/port-helper.js +94 -0
- package/src/utils/session.js +239 -0
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const os = require('os');
|
|
4
|
+
|
|
5
|
+
// Claude Code 配置文件路径
|
|
6
|
+
function getSettingsPath() {
|
|
7
|
+
return path.join(os.homedir(), '.claude', 'settings.json');
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
// 备份文件路径
|
|
11
|
+
function getBackupPath() {
|
|
12
|
+
return path.join(os.homedir(), '.claude', 'settings.json.cc-tool-backup');
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// 检查配置文件是否存在
|
|
16
|
+
function settingsExists() {
|
|
17
|
+
return fs.existsSync(getSettingsPath());
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// 检查是否已经有备份
|
|
21
|
+
function hasBackup() {
|
|
22
|
+
return fs.existsSync(getBackupPath());
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// 读取配置文件
|
|
26
|
+
function readSettings() {
|
|
27
|
+
try {
|
|
28
|
+
const content = fs.readFileSync(getSettingsPath(), 'utf8');
|
|
29
|
+
return JSON.parse(content);
|
|
30
|
+
} catch (err) {
|
|
31
|
+
throw new Error('Failed to read settings.json: ' + err.message);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// 写入配置文件
|
|
36
|
+
function writeSettings(settings) {
|
|
37
|
+
try {
|
|
38
|
+
const content = JSON.stringify(settings, null, 2);
|
|
39
|
+
fs.writeFileSync(getSettingsPath(), content, 'utf8');
|
|
40
|
+
} catch (err) {
|
|
41
|
+
throw new Error('Failed to write settings.json: ' + err.message);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// 备份当前配置
|
|
46
|
+
function backupSettings() {
|
|
47
|
+
try {
|
|
48
|
+
if (!settingsExists()) {
|
|
49
|
+
throw new Error('settings.json not found');
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// 如果已经有备份,不覆盖
|
|
53
|
+
if (hasBackup()) {
|
|
54
|
+
console.log('Backup already exists, skipping backup');
|
|
55
|
+
return { success: true, alreadyExists: true };
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const content = fs.readFileSync(getSettingsPath(), 'utf8');
|
|
59
|
+
fs.writeFileSync(getBackupPath(), content, 'utf8');
|
|
60
|
+
|
|
61
|
+
console.log('✅ Settings backed up to:', getBackupPath());
|
|
62
|
+
return { success: true, alreadyExists: false };
|
|
63
|
+
} catch (err) {
|
|
64
|
+
throw new Error('Failed to backup settings: ' + err.message);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// 恢复配置
|
|
69
|
+
function restoreSettings() {
|
|
70
|
+
try {
|
|
71
|
+
if (!hasBackup()) {
|
|
72
|
+
throw new Error('No backup found');
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const content = fs.readFileSync(getBackupPath(), 'utf8');
|
|
76
|
+
fs.writeFileSync(getSettingsPath(), content, 'utf8');
|
|
77
|
+
|
|
78
|
+
// 删除备份文件
|
|
79
|
+
fs.unlinkSync(getBackupPath());
|
|
80
|
+
|
|
81
|
+
console.log('✅ Settings restored from backup');
|
|
82
|
+
return { success: true };
|
|
83
|
+
} catch (err) {
|
|
84
|
+
throw new Error('Failed to restore settings: ' + err.message);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// 设置代理配置
|
|
89
|
+
function setProxyConfig(proxyPort) {
|
|
90
|
+
try {
|
|
91
|
+
// 先备份
|
|
92
|
+
backupSettings();
|
|
93
|
+
|
|
94
|
+
// 读取当前配置
|
|
95
|
+
const settings = readSettings();
|
|
96
|
+
|
|
97
|
+
// 确保 env 对象存在
|
|
98
|
+
if (!settings.env) {
|
|
99
|
+
settings.env = {};
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// 修改为代理配置(使用 Claude Code 的标准格式)
|
|
103
|
+
settings.env.ANTHROPIC_BASE_URL = `http://127.0.0.1:${proxyPort}`;
|
|
104
|
+
settings.env.ANTHROPIC_API_KEY = 'PROXY_KEY';
|
|
105
|
+
settings.apiKeyHelper = `echo 'PROXY_KEY'`;
|
|
106
|
+
|
|
107
|
+
// 写入
|
|
108
|
+
writeSettings(settings);
|
|
109
|
+
|
|
110
|
+
console.log(`✅ Settings updated to use proxy on port ${proxyPort}`);
|
|
111
|
+
return { success: true, port: proxyPort };
|
|
112
|
+
} catch (err) {
|
|
113
|
+
throw new Error('Failed to set proxy config: ' + err.message);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// 检查当前是否是代理配置
|
|
118
|
+
function isProxyConfig() {
|
|
119
|
+
try {
|
|
120
|
+
if (!settingsExists()) {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const settings = readSettings();
|
|
125
|
+
const baseUrl = settings?.env?.ANTHROPIC_BASE_URL || '';
|
|
126
|
+
const apiKey = settings?.env?.ANTHROPIC_API_KEY || '';
|
|
127
|
+
|
|
128
|
+
return baseUrl.includes('127.0.0.1') || apiKey === 'PROXY_KEY';
|
|
129
|
+
} catch (err) {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// 获取当前代理端口(如果是代理配置)
|
|
135
|
+
function getCurrentProxyPort() {
|
|
136
|
+
try {
|
|
137
|
+
if (!isProxyConfig()) {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const settings = readSettings();
|
|
142
|
+
const baseUrl = settings?.env?.ANTHROPIC_BASE_URL || '';
|
|
143
|
+
const match = baseUrl.match(/:(\d+)/);
|
|
144
|
+
|
|
145
|
+
return match ? parseInt(match[1]) : null;
|
|
146
|
+
} catch (err) {
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
module.exports = {
|
|
152
|
+
getSettingsPath,
|
|
153
|
+
getBackupPath,
|
|
154
|
+
settingsExists,
|
|
155
|
+
hasBackup,
|
|
156
|
+
readSettings,
|
|
157
|
+
writeSettings,
|
|
158
|
+
backupSettings,
|
|
159
|
+
restoreSettings,
|
|
160
|
+
setProxyConfig,
|
|
161
|
+
isProxyConfig,
|
|
162
|
+
getCurrentProxyPort
|
|
163
|
+
};
|