base_parts_ai 1.0.54 → 1.0.55
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/lib/setapi_cx.js +27 -60
- package/package.json +3 -3
package/lib/setapi_cx.js
CHANGED
|
@@ -10,7 +10,7 @@ var fs = require('fs');
|
|
|
10
10
|
var inquirer = require('inquirer');
|
|
11
11
|
var utils = require('./ai_utils');
|
|
12
12
|
var childProcess = require('child_process');
|
|
13
|
-
var TOML = require('
|
|
13
|
+
var TOML = require('@ltd/j-toml');
|
|
14
14
|
|
|
15
15
|
// Codex 配置清除选项使用固定内部值,避免与服务端渠道 id 冲突。
|
|
16
16
|
var CLEAR_CODEX_CONFIG = '__clear_codex_config__';
|
|
@@ -96,12 +96,12 @@ function parseTomlConfig(toml) {
|
|
|
96
96
|
* @returns {string}
|
|
97
97
|
*/
|
|
98
98
|
function stringifyTomlConfig(config) {
|
|
99
|
-
var content = TOML.stringify(config || {}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
);
|
|
99
|
+
var content = TOML.stringify(config || {}, {
|
|
100
|
+
newline: '\n',
|
|
101
|
+
newlineAround: 'section',
|
|
102
|
+
});
|
|
103
|
+
// j-toml 默认在文档开头保留空行,此处统一为原有配置文件格式。
|
|
104
|
+
content = content.replace(/^\n/, '');
|
|
105
105
|
return content ? content.replace(/\s+$/, '') + '\n' : '';
|
|
106
106
|
}
|
|
107
107
|
|
|
@@ -177,7 +177,7 @@ function hasTopLevelKey(toml, key) {
|
|
|
177
177
|
function ensureSandboxMode(toml) {
|
|
178
178
|
var config = parseTomlConfig(toml);
|
|
179
179
|
if (!Object.prototype.hasOwnProperty.call(config, 'sandbox_mode')) {
|
|
180
|
-
config.sandbox_mode = 'danger-full-access';
|
|
180
|
+
config.sandbox_mode = TOML.basic('danger-full-access');
|
|
181
181
|
}
|
|
182
182
|
return stringifyTomlConfig(config);
|
|
183
183
|
}
|
|
@@ -241,62 +241,32 @@ function removeJcodexProviderBlock(toml) {
|
|
|
241
241
|
* @param {string} toml 原 TOML 内容
|
|
242
242
|
* @param {string} baseUrl provider base_url
|
|
243
243
|
* @param {string} wireApi provider wire_api,空值表示删除该字段
|
|
244
|
+
* @param {string} openAiKey 当前渠道生效的 OPENAI_API_KEY
|
|
244
245
|
* @returns {string}
|
|
245
246
|
*/
|
|
246
|
-
function setJcodexProvider(toml, baseUrl, wireApi) {
|
|
247
|
+
function setJcodexProvider(toml, baseUrl, wireApi, openAiKey) {
|
|
248
|
+
if (typeof openAiKey !== 'string' || !openAiKey.trim()) {
|
|
249
|
+
throw new Error('写入 jcodex provider 时 OPENAI_API_KEY 不能为空');
|
|
250
|
+
}
|
|
247
251
|
var config = parseTomlConfig(toml);
|
|
248
252
|
var providers = ensureTable(config, 'model_providers');
|
|
249
|
-
config.model_provider = 'jcodex';
|
|
250
|
-
providers.jcodex = {
|
|
251
|
-
name: 'jcodex',
|
|
252
|
-
base_url: baseUrl,
|
|
253
|
-
|
|
253
|
+
config.model_provider = TOML.basic('jcodex');
|
|
254
|
+
providers.jcodex = TOML.Section({
|
|
255
|
+
name: TOML.basic('jcodex'),
|
|
256
|
+
base_url: TOML.basic(baseUrl),
|
|
257
|
+
|
|
258
|
+
// jcodex 使用本地图片扩展身份 - 该方法 codex 0.149.0 版本会导致401错误,需要增加Authorization请求头
|
|
254
259
|
requires_openai_auth: false,
|
|
255
|
-
http_headers: {
|
|
256
|
-
'x-openai-actor-authorization': 'local-image-extension',
|
|
257
|
-
|
|
258
|
-
|
|
260
|
+
http_headers: TOML.inline({
|
|
261
|
+
'x-openai-actor-authorization': TOML.basic('local-image-extension'),
|
|
262
|
+
Authorization: TOML.basic('Bearer ' + openAiKey),
|
|
263
|
+
}),
|
|
264
|
+
|
|
265
|
+
});
|
|
259
266
|
// wire_api 是 Codex provider 私有字段,非空时强制写入到 model_providers.jcodex 下
|
|
260
267
|
if (wireApi) {
|
|
261
|
-
providers.jcodex.wire_api = wireApi;
|
|
262
|
-
}
|
|
263
|
-
return stringifyTomlConfig(config);
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
/**
|
|
267
|
-
* 删除已有 jcodex provider 段中的 wire_api 字段,保留其它配置
|
|
268
|
-
* @param {string} toml TOML 内容
|
|
269
|
-
* @returns {string}
|
|
270
|
-
*/
|
|
271
|
-
function removeJcodexWireApi(toml) {
|
|
272
|
-
var config = parseTomlConfig(toml);
|
|
273
|
-
var provider = config.model_providers && config.model_providers.jcodex;
|
|
274
|
-
// wire_api 为空时只删除 jcodex provider 下的私有字段,不影响其它段落
|
|
275
|
-
if (provider && typeof provider === 'object' && !Array.isArray(provider)) {
|
|
276
|
-
delete provider.wire_api;
|
|
277
|
-
}
|
|
278
|
-
return stringifyTomlConfig(config);
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
/**
|
|
282
|
-
* 写入 jcodex provider 段中的 wire_api 字段,已有字段会被强制覆盖
|
|
283
|
-
* @param {string} toml TOML 内容
|
|
284
|
-
* @param {string} wireApi provider wire_api
|
|
285
|
-
* @returns {string}
|
|
286
|
-
*/
|
|
287
|
-
function setJcodexWireApi(toml, wireApi) {
|
|
288
|
-
var config = parseTomlConfig(toml);
|
|
289
|
-
var providers = ensureTable(config, 'model_providers');
|
|
290
|
-
var provider = ensureTable(providers, 'jcodex');
|
|
291
|
-
if (!provider.name) {
|
|
292
|
-
provider.name = 'jcodex';
|
|
268
|
+
providers.jcodex.wire_api = TOML.basic(wireApi);
|
|
293
269
|
}
|
|
294
|
-
// 即使渠道只配置 wire_api,也要补齐 jcodex 的固定鉴权参数。
|
|
295
|
-
provider.requires_openai_auth = false;
|
|
296
|
-
provider.http_headers = {
|
|
297
|
-
'x-openai-actor-authorization': 'local-image-extension',
|
|
298
|
-
};
|
|
299
|
-
provider.wire_api = wireApi;
|
|
300
270
|
return stringifyTomlConfig(config);
|
|
301
271
|
}
|
|
302
272
|
|
|
@@ -547,10 +517,9 @@ async function setapiCx(cmd, buildCfg) {
|
|
|
547
517
|
utils.writeJsonFile(buildCfg.codexAuthPath, auth);
|
|
548
518
|
|
|
549
519
|
if (baseUrl) {
|
|
550
|
-
toml = setJcodexProvider(toml, baseUrl, wireApi);
|
|
520
|
+
toml = setJcodexProvider(toml, baseUrl, wireApi, forcedKey);
|
|
551
521
|
} else {
|
|
552
522
|
toml = removeTopLevelModelProvider(toml);
|
|
553
|
-
toml = wireApi ? setJcodexWireApi(toml, wireApi) : removeJcodexWireApi(toml);
|
|
554
523
|
}
|
|
555
524
|
toml = ensureSandboxMode(toml);
|
|
556
525
|
toml = removeEditorInsertNewlineKeymap(toml);
|
|
@@ -576,8 +545,6 @@ setapiCx._private = {
|
|
|
576
545
|
removeEditorInsertNewlineKeymap: removeEditorInsertNewlineKeymap,
|
|
577
546
|
removeTopLevelModelProvider: removeTopLevelModelProvider,
|
|
578
547
|
removeJcodexProviderBlock: removeJcodexProviderBlock,
|
|
579
|
-
removeJcodexWireApi: removeJcodexWireApi,
|
|
580
|
-
setJcodexWireApi: setJcodexWireApi,
|
|
581
548
|
setJcodexProvider: setJcodexProvider,
|
|
582
549
|
getCurrentCodexChannelId: getCurrentCodexChannelId,
|
|
583
550
|
saveLastManualOpenAiKey: saveLastManualOpenAiKey,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "base_parts_ai",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.55",
|
|
4
4
|
"description": "jaskle base_parts_ai",
|
|
5
5
|
"main": "./main.js",
|
|
6
6
|
"registry": true,
|
|
@@ -31,8 +31,8 @@
|
|
|
31
31
|
"author": "jaskle",
|
|
32
32
|
"license": "ISC",
|
|
33
33
|
"dependencies": {
|
|
34
|
+
"@ltd/j-toml": "^1.38.0",
|
|
34
35
|
"commander": "^14.0.3",
|
|
35
|
-
"inquirer": "^8.2.7"
|
|
36
|
-
"smol-toml": "^1.6.1"
|
|
36
|
+
"inquirer": "^8.2.7"
|
|
37
37
|
}
|
|
38
38
|
}
|