coding-tool-x 3.3.7 → 3.3.8
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 +5 -0
- package/dist/web/assets/{Analytics-IW6eAy9u.js → Analytics-DLpoDZ2M.js} +1 -1
- package/dist/web/assets/{ConfigTemplates-BPtkTMSc.js → ConfigTemplates-D_hRb55W.js} +1 -1
- package/dist/web/assets/Home-BMoFdAwy.css +1 -0
- package/dist/web/assets/Home-DNwp-0J-.js +1 -0
- package/dist/web/assets/{PluginManager-BGx9MSDV.js → PluginManager-JXsyym1s.js} +1 -1
- package/dist/web/assets/{ProjectList-BCn-mrCx.js → ProjectList-DZWSeb-q.js} +1 -1
- package/dist/web/assets/{SessionList-CzLfebJQ.js → SessionList-Cs624DR3.js} +1 -1
- package/dist/web/assets/{SkillManager-CXz2vBQx.js → SkillManager-bEliz7qz.js} +1 -1
- package/dist/web/assets/{WorkspaceManager-CHtgMfKc.js → WorkspaceManager-J3RecFGn.js} +1 -1
- package/dist/web/assets/{icons-B29onFfZ.js → icons-Cuc23WS7.js} +1 -1
- package/dist/web/assets/index-BXeSvAwU.js +2 -0
- package/dist/web/assets/index-DWAC3Tdv.css +1 -0
- package/dist/web/index.html +3 -3
- package/package.json +3 -2
- package/src/commands/toggle-proxy.js +100 -5
- package/src/config/paths.js +102 -19
- package/src/server/api/channels.js +9 -0
- package/src/server/api/codex-channels.js +9 -0
- package/src/server/api/codex-proxy.js +22 -11
- package/src/server/api/gemini-proxy.js +22 -11
- package/src/server/api/oauth-credentials.js +163 -0
- package/src/server/api/opencode-proxy.js +22 -10
- package/src/server/api/plugins.js +3 -1
- package/src/server/api/proxy.js +39 -44
- package/src/server/api/skills.js +91 -13
- package/src/server/codex-proxy-server.js +1 -11
- package/src/server/index.js +1 -0
- package/src/server/services/channels.js +18 -22
- package/src/server/services/codex-channels.js +124 -175
- package/src/server/services/codex-config.js +2 -5
- package/src/server/services/codex-settings-manager.js +12 -348
- package/src/server/services/config-export-service.js +23 -2
- package/src/server/services/gemini-channels.js +11 -9
- package/src/server/services/mcp-service.js +33 -16
- package/src/server/services/native-keychain.js +243 -0
- package/src/server/services/native-oauth-adapters.js +890 -0
- package/src/server/services/oauth-credentials-service.js +786 -0
- package/src/server/services/oauth-utils.js +49 -0
- package/src/server/services/opencode-channels.js +13 -9
- package/src/server/services/opencode-settings-manager.js +169 -16
- package/src/server/services/plugins-service.js +22 -1
- package/src/server/services/settings-manager.js +13 -0
- package/src/server/services/skill-service.js +712 -332
- package/dist/web/assets/Home-BsSioaaB.css +0 -1
- package/dist/web/assets/Home-obifg_9E.js +0 -1
- package/dist/web/assets/index-C7LPdVsN.js +0 -2
- package/dist/web/assets/index-eEmjZKWP.css +0 -1
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
const { spawnSync } = require('child_process');
|
|
2
|
+
|
|
3
|
+
function runCommand(command, args, options = {}) {
|
|
4
|
+
const result = spawnSync(command, args, {
|
|
5
|
+
encoding: 'utf8',
|
|
6
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
7
|
+
...options
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
if (result.error) {
|
|
11
|
+
throw result.error;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
return result;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function getWindowsPowerShellCommand() {
|
|
18
|
+
return process.env.ComSpec && process.env.ComSpec.toLowerCase().includes('powershell')
|
|
19
|
+
? process.env.ComSpec
|
|
20
|
+
: 'powershell.exe';
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function runPowerShell(script, env = {}) {
|
|
24
|
+
return runCommand(getWindowsPowerShellCommand(), [
|
|
25
|
+
'-NoProfile',
|
|
26
|
+
'-NonInteractive',
|
|
27
|
+
'-Command',
|
|
28
|
+
script
|
|
29
|
+
], {
|
|
30
|
+
env: {
|
|
31
|
+
...process.env,
|
|
32
|
+
...env
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function isSupported() {
|
|
38
|
+
if (process.platform === 'darwin') return true;
|
|
39
|
+
if (process.platform === 'win32') return true;
|
|
40
|
+
|
|
41
|
+
if (process.platform === 'linux') {
|
|
42
|
+
try {
|
|
43
|
+
const result = runCommand('secret-tool', ['--help']);
|
|
44
|
+
return result.status === 0 || result.status === 1;
|
|
45
|
+
} catch {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function getPassword(service, account) {
|
|
54
|
+
if (!service || !account) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
try {
|
|
59
|
+
if (process.platform === 'darwin') {
|
|
60
|
+
const result = runCommand('security', [
|
|
61
|
+
'find-generic-password',
|
|
62
|
+
'-a',
|
|
63
|
+
String(account),
|
|
64
|
+
'-w',
|
|
65
|
+
'-s',
|
|
66
|
+
String(service)
|
|
67
|
+
]);
|
|
68
|
+
|
|
69
|
+
if (result.status !== 0) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return String(result.stdout || '').trim() || null;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (process.platform === 'linux') {
|
|
77
|
+
const result = runCommand('secret-tool', [
|
|
78
|
+
'lookup',
|
|
79
|
+
'service',
|
|
80
|
+
String(service),
|
|
81
|
+
'account',
|
|
82
|
+
String(account)
|
|
83
|
+
]);
|
|
84
|
+
|
|
85
|
+
if (result.status !== 0) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return String(result.stdout || '').trim() || null;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (process.platform === 'win32') {
|
|
93
|
+
const script = `
|
|
94
|
+
Add-Type -AssemblyName System.Runtime.WindowsRuntime
|
|
95
|
+
$vault = New-Object Windows.Security.Credentials.PasswordVault
|
|
96
|
+
try {
|
|
97
|
+
$cred = $vault.Retrieve($env:CC_TOOL_SERVICE, $env:CC_TOOL_ACCOUNT)
|
|
98
|
+
$cred.RetrievePassword()
|
|
99
|
+
[Console]::Out.Write($cred.Password)
|
|
100
|
+
exit 0
|
|
101
|
+
} catch {
|
|
102
|
+
exit 2
|
|
103
|
+
}
|
|
104
|
+
`;
|
|
105
|
+
const result = runPowerShell(script, {
|
|
106
|
+
CC_TOOL_SERVICE: String(service),
|
|
107
|
+
CC_TOOL_ACCOUNT: String(account)
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
if (result.status !== 0) {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return String(result.stdout || '').trim() || null;
|
|
115
|
+
}
|
|
116
|
+
} catch {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function setPassword(service, account, password) {
|
|
124
|
+
if (!service || !account) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
try {
|
|
129
|
+
if (process.platform === 'darwin') {
|
|
130
|
+
const result = runCommand('security', [
|
|
131
|
+
'add-generic-password',
|
|
132
|
+
'-U',
|
|
133
|
+
'-a',
|
|
134
|
+
String(account),
|
|
135
|
+
'-s',
|
|
136
|
+
String(service),
|
|
137
|
+
'-w',
|
|
138
|
+
String(password ?? '')
|
|
139
|
+
]);
|
|
140
|
+
return result.status === 0;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (process.platform === 'linux') {
|
|
144
|
+
deletePassword(service, account);
|
|
145
|
+
const result = runCommand('secret-tool', [
|
|
146
|
+
'store',
|
|
147
|
+
'--label',
|
|
148
|
+
String(service),
|
|
149
|
+
'service',
|
|
150
|
+
String(service),
|
|
151
|
+
'account',
|
|
152
|
+
String(account)
|
|
153
|
+
], {
|
|
154
|
+
input: String(password ?? '')
|
|
155
|
+
});
|
|
156
|
+
return result.status === 0;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if (process.platform === 'win32') {
|
|
160
|
+
const script = `
|
|
161
|
+
Add-Type -AssemblyName System.Runtime.WindowsRuntime
|
|
162
|
+
$vault = New-Object Windows.Security.Credentials.PasswordVault
|
|
163
|
+
try {
|
|
164
|
+
$existing = $vault.Retrieve($env:CC_TOOL_SERVICE, $env:CC_TOOL_ACCOUNT)
|
|
165
|
+
$vault.Remove($existing)
|
|
166
|
+
} catch {}
|
|
167
|
+
$credential = New-Object Windows.Security.Credentials.PasswordCredential($env:CC_TOOL_SERVICE, $env:CC_TOOL_ACCOUNT, $env:CC_TOOL_PASSWORD)
|
|
168
|
+
$vault.Add($credential)
|
|
169
|
+
exit 0
|
|
170
|
+
`;
|
|
171
|
+
const result = runPowerShell(script, {
|
|
172
|
+
CC_TOOL_SERVICE: String(service),
|
|
173
|
+
CC_TOOL_ACCOUNT: String(account),
|
|
174
|
+
CC_TOOL_PASSWORD: String(password ?? '')
|
|
175
|
+
});
|
|
176
|
+
return result.status === 0;
|
|
177
|
+
}
|
|
178
|
+
} catch {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
function deletePassword(service, account) {
|
|
186
|
+
if (!service || !account) {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
try {
|
|
191
|
+
if (process.platform === 'darwin') {
|
|
192
|
+
const result = runCommand('security', [
|
|
193
|
+
'delete-generic-password',
|
|
194
|
+
'-a',
|
|
195
|
+
String(account),
|
|
196
|
+
'-s',
|
|
197
|
+
String(service)
|
|
198
|
+
]);
|
|
199
|
+
return result.status === 0;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
if (process.platform === 'linux') {
|
|
203
|
+
const result = runCommand('secret-tool', [
|
|
204
|
+
'clear',
|
|
205
|
+
'service',
|
|
206
|
+
String(service),
|
|
207
|
+
'account',
|
|
208
|
+
String(account)
|
|
209
|
+
]);
|
|
210
|
+
return result.status === 0;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
if (process.platform === 'win32') {
|
|
214
|
+
const script = `
|
|
215
|
+
Add-Type -AssemblyName System.Runtime.WindowsRuntime
|
|
216
|
+
$vault = New-Object Windows.Security.Credentials.PasswordVault
|
|
217
|
+
try {
|
|
218
|
+
$credential = $vault.Retrieve($env:CC_TOOL_SERVICE, $env:CC_TOOL_ACCOUNT)
|
|
219
|
+
$vault.Remove($credential)
|
|
220
|
+
exit 0
|
|
221
|
+
} catch {
|
|
222
|
+
exit 2
|
|
223
|
+
}
|
|
224
|
+
`;
|
|
225
|
+
const result = runPowerShell(script, {
|
|
226
|
+
CC_TOOL_SERVICE: String(service),
|
|
227
|
+
CC_TOOL_ACCOUNT: String(account)
|
|
228
|
+
});
|
|
229
|
+
return result.status === 0;
|
|
230
|
+
}
|
|
231
|
+
} catch {
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
return false;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
module.exports = {
|
|
239
|
+
isSupported,
|
|
240
|
+
getPassword,
|
|
241
|
+
setPassword,
|
|
242
|
+
deletePassword
|
|
243
|
+
};
|