@luchenglong/cli-bridge 0.2.9 → 0.2.11
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 +73 -0
- package/PROVIDER-CONTRACT.md +56 -5
- package/docs/HANDOVER.md +109 -15
- package/dynamic/claude.host.js +362 -106
- package/dynamic/codebuddy.host.js +1426 -1378
- package/dynamic/codex.host.js +78 -103
- package/dynamic/mimo.host.js +720 -514
- package/dynamic/mimo.host.template.mjs +2 -0
- package/dynamic/opencode.host.js +740 -584
- package/dynamic/opencode.host.template.mjs +2 -0
- package/home-plugin/cli-bridge-indicator/lib/client.js +590 -600
- package/home-plugin/cli-bridge-indicator/lib/index.mjs +48 -0
- package/home-plugin/cli-bridge-indicator/lib/preset-declarations.mjs +1 -1
- package/mcp/cli-bridge-mcp.mjs +3 -3
- package/mcp/providers/codebuddy.mjs +427 -427
- package/package.json +3 -3
- package/providers/claude-endpoint.mjs +132 -0
- package/providers/claude-models.mjs +141 -101
- package/providers/claude.mjs +88 -6
- package/providers/codebuddy-catalog.mjs +367 -599
- package/providers/codebuddy-consts.mjs +72 -72
- package/providers/codebuddy-models-source.mjs +254 -0
- package/providers/codebuddy-models-tool.mjs +106 -106
- package/providers/codebuddy-schemas.mjs +46 -46
- package/providers/codebuddy.mjs +600 -578
- package/providers/codex-cli.mjs +33 -99
- package/providers/codex.mjs +45 -4
- package/providers/mimo-pure.mjs +270 -111
- package/providers/mimo.mjs +453 -517
- package/providers/opencode-exe.mjs +190 -63
- package/providers/opencode.mjs +553 -587
- package/scripts/build.mjs +261 -261
|
@@ -403,6 +403,54 @@ export function apply(ctx) {
|
|
|
403
403
|
}).catch((e) => jsonRes(res, 400, { error: String(e && e.message || e) }))
|
|
404
404
|
}
|
|
405
405
|
}, 'cli-bridge: settings route'))
|
|
406
|
+
// 手动拉取可用项(契约 §3.2):面板**不自动探测**,用户点按钮才走到这里。
|
|
407
|
+
// 业务失败一律 HTTP 200 + { ok:false, error },不用 4xx/5xx —— 否则前端容易把
|
|
408
|
+
// 「没拉到」误当网络故障静默吞掉(本项目模型清单反复踩的坑)。
|
|
409
|
+
webCtx.effect(() => ws.register({
|
|
410
|
+
kind: 'exact', path: '/cli-bridge/settings/models',
|
|
411
|
+
handler: (req, res) => {
|
|
412
|
+
const method = String((req && req.method) || 'GET').toUpperCase()
|
|
413
|
+
if (method !== 'POST') { jsonRes(res, 405, { error: 'method not allowed' }); return }
|
|
414
|
+
readBody(req, 16 * 1024).then(async (text) => {
|
|
415
|
+
let provider = ''
|
|
416
|
+
try { provider = String((JSON.parse(text || '{}') || {}).provider || '') } catch (e) {
|
|
417
|
+
jsonRes(res, 200, { ok: false, provider: '', error: 'request body is not valid JSON' }); return
|
|
418
|
+
}
|
|
419
|
+
if (!provider || PROVIDER_IDS.indexOf(provider) < 0) {
|
|
420
|
+
jsonRes(res, 200, { ok: false, provider: provider, error: 'unknown provider ' + JSON.stringify(provider) + '; expected one of ' + PROVIDER_IDS.join(', ') })
|
|
421
|
+
return
|
|
422
|
+
}
|
|
423
|
+
let d = null
|
|
424
|
+
try { d = createProvider(provider, { env: process.env, process }) } catch (e) {
|
|
425
|
+
jsonRes(res, 200, { ok: false, provider: provider, error: 'provider load failed: ' + String(e && e.message || e) }); return
|
|
426
|
+
}
|
|
427
|
+
const fn = d && d.settings && d.settings.refreshModels
|
|
428
|
+
if (typeof fn !== 'function') {
|
|
429
|
+
jsonRes(res, 200, { ok: false, provider: provider, error: 'provider "' + provider + '" does not implement settings.refreshModels()' }); return
|
|
430
|
+
}
|
|
431
|
+
// 生效设置是扁平结构:snap[providerId] = 该 provider 的分区(见 settings.mjs normalizeAll)。
|
|
432
|
+
const snap = effectiveSettings({ env: process.env })
|
|
433
|
+
const sec = (snap && snap[provider]) || {}
|
|
434
|
+
try {
|
|
435
|
+
const r = (await fn(sec, process.env)) || {}
|
|
436
|
+
if (!r.ok || !Array.isArray(r.ids) || !r.ids.length) {
|
|
437
|
+
jsonRes(res, 200, {
|
|
438
|
+
ok: false, provider: provider, source: r.source || null,
|
|
439
|
+
error: r.error || 'provider returned no items'
|
|
440
|
+
})
|
|
441
|
+
return
|
|
442
|
+
}
|
|
443
|
+
const labels = (r.labels && typeof r.labels === 'object') ? r.labels : {}
|
|
444
|
+
jsonRes(res, 200, {
|
|
445
|
+
ok: true, provider: provider, source: r.source || null,
|
|
446
|
+
options: r.ids.map((id) => ({ value: String(id), label: String(labels[id] || id) }))
|
|
447
|
+
})
|
|
448
|
+
} catch (e) {
|
|
449
|
+
jsonRes(res, 200, { ok: false, provider: provider, error: 'refreshModels threw: ' + String(e && e.message || e) })
|
|
450
|
+
}
|
|
451
|
+
}).catch((e) => jsonRes(res, 200, { ok: false, provider: '', error: String(e && e.message || e) }))
|
|
452
|
+
}
|
|
453
|
+
}, 'cli-bridge: settings models route'))
|
|
406
454
|
// agy 额度(可选增强,脚本缺失返回 { ok:false })
|
|
407
455
|
webCtx.effect(() => ws.register({
|
|
408
456
|
kind: 'exact', path: '/agy-indicator/quota',
|
|
@@ -23,7 +23,7 @@ import { PROVIDER_IDS, PRESET_DIRS } from '../../../providers/registry.mjs'
|
|
|
23
23
|
|
|
24
24
|
export const PKG_NAME = '@luchenglong/cli-bridge'
|
|
25
25
|
|
|
26
|
-
// preset 目录名映射:单一来源见 providers/registry.mjs 的 PRESET_DIRS(勿在此重复硬编码)。
|
|
26
|
+
// preset 目录名映射:单一来源见 providers/registry.mjs 的 PRESET_DIRS(勿在此重复硬编码)。
|
|
27
27
|
// 三个旧包时代的遗留布局,provider id 不带 —— 这里不映射就永远找不到 plugin-list)。
|
|
28
28
|
|
|
29
29
|
// 【成员预设】0.2.1 起 dsh-tool-subagent 的 config 不再接受 persona/toolFilter(apply()
|
package/mcp/cli-bridge-mcp.mjs
CHANGED
|
@@ -28,12 +28,12 @@ import { resolveScheduling } from '../core/scheduling.mjs'
|
|
|
28
28
|
import * as agyMcp from './providers/agy.mjs'
|
|
29
29
|
import * as codebuddyMcp from './providers/codebuddy.mjs'
|
|
30
30
|
import * as mimoMcp from './providers/mimo.mjs'
|
|
31
|
-
import * as opencodeMcp from './providers/opencode.mjs'
|
|
32
|
-
import * as claudeMcp from './providers/claude.mjs'
|
|
31
|
+
import * as opencodeMcp from './providers/opencode.mjs'
|
|
32
|
+
import * as claudeMcp from './providers/claude.mjs'
|
|
33
33
|
import * as codexMcp from './providers/codex.mjs'
|
|
34
34
|
|
|
35
35
|
const SERVER_NAME = 'cli-bridge-mcp'
|
|
36
|
-
const SERVER_VERSION = '0.2.
|
|
36
|
+
const SERVER_VERSION = '0.2.11'
|
|
37
37
|
const PROTOCOL = '2024-11-05'
|
|
38
38
|
|
|
39
39
|
const PROVIDERS = [agyMcp, codebuddyMcp, mimoMcp, opencodeMcp, claudeMcp, codexMcp]
|