dsh-bundle-antigravity-host 0.1.29 → 0.1.31
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/README.md +4 -4
- package/dist/adapter/antigravity-adapter.d.ts +7 -3
- package/dist/adapter/antigravity-adapter.js +74 -37
- package/dist/adapter/antigravity-adapter.js.map +1 -1
- package/dist/adapter/model-settings.d.ts +48 -0
- package/dist/adapter/model-settings.js +74 -0
- package/dist/adapter/model-settings.js.map +1 -0
- package/dist/bridge/mcp-bridge.d.ts +9 -0
- package/dist/bridge/mcp-bridge.js +19 -2
- package/dist/bridge/mcp-bridge.js.map +1 -1
- package/dist/client.js +157 -21
- package/dist/index.js +44 -9
- package/dist/index.js.map +1 -1
- package/dist/pool/pooled-adapter.js +6 -5
- package/dist/pool/pooled-adapter.js.map +1 -1
- package/dist/protocol/agent-link.d.ts +13 -2
- package/dist/protocol/agent-link.js +59 -5
- package/dist/protocol/agent-link.js.map +1 -1
- package/dist/runtime/binary.d.ts +20 -1
- package/dist/runtime/binary.js +58 -6
- package/dist/runtime/binary.js.map +1 -1
- package/dist/runtime/proxied-fetch.js +9 -1
- package/dist/runtime/proxied-fetch.js.map +1 -1
- package/dist/runtime/quota.d.ts +19 -1
- package/dist/runtime/quota.js +97 -22
- package/dist/runtime/quota.js.map +1 -1
- package/dist/runtime/session-map.d.ts +7 -0
- package/dist/runtime/session-map.js +11 -0
- package/dist/runtime/session-map.js.map +1 -1
- package/dist/settings.d.ts +19 -6
- package/dist/settings.js +21 -4
- package/dist/settings.js.map +1 -1
- package/docs/changelog.md +23 -1
- package/docs/configuration.md +10 -6
- package/docs/development.md +8 -7
- package/docs/reference.md +11 -8
- package/package.json +1 -1
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
const EFFORTS = ['low', 'medium', 'high'];
|
|
2
|
+
function isEffort(value) {
|
|
3
|
+
return typeof value === 'string' && EFFORTS.includes(value);
|
|
4
|
+
}
|
|
5
|
+
function text(value) {
|
|
6
|
+
return typeof value === 'string' ? value.trim() : '';
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* 把配置里的原始记录收敛成可用设置:非法档位、空串与非对象条目一律丢弃,
|
|
10
|
+
* 不让一份手写配置让整个目录失败。
|
|
11
|
+
*/
|
|
12
|
+
export function normalizeModelSettings(input) {
|
|
13
|
+
const settings = new Map();
|
|
14
|
+
if (!input || typeof input !== 'object' || Array.isArray(input))
|
|
15
|
+
return settings;
|
|
16
|
+
for (const [rawId, row] of Object.entries(input)) {
|
|
17
|
+
const id = text(rawId);
|
|
18
|
+
if (!id || !row || typeof row !== 'object' || Array.isArray(row))
|
|
19
|
+
continue;
|
|
20
|
+
const record = row;
|
|
21
|
+
const name = text(record.name);
|
|
22
|
+
const target = text(record.target);
|
|
23
|
+
settings.set(id, {
|
|
24
|
+
enabled: record.enabled !== false,
|
|
25
|
+
...(isEffort(record.effort) ? { effort: record.effort } : {}),
|
|
26
|
+
...(name === '' ? {} : { name }),
|
|
27
|
+
...(target === '' ? {} : { target }),
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
return settings;
|
|
31
|
+
}
|
|
32
|
+
/** 该模型的显示设置;未配置时返回启用且不带覆盖项。 */
|
|
33
|
+
export function modelSettingFor(settings, id) {
|
|
34
|
+
return settings.get(id) ?? { enabled: true };
|
|
35
|
+
}
|
|
36
|
+
/** 是否列入 DSH 模型选择器。 */
|
|
37
|
+
export function modelVisible(settings, id) {
|
|
38
|
+
return modelSettingFor(settings, id).enabled;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 应用显示名覆盖;停用不影响调用,因此本函数只处理名称,不做过滤。
|
|
42
|
+
*/
|
|
43
|
+
export function modelDisplayName(settings, id, fallback) {
|
|
44
|
+
const name = modelSettingFor(settings, id).name;
|
|
45
|
+
return name === undefined ? fallback : name;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 决定写入 ACP 的官方模型 ID。
|
|
49
|
+
*
|
|
50
|
+
* 顺序:显式 `target` 映射 → 家族 + 档位路由(`route` 回调)。
|
|
51
|
+
* 档位取「本次显式选择」优先,其次该模型的默认档位,最后交给路由回调决定默认。
|
|
52
|
+
*/
|
|
53
|
+
export function resolveModelTarget(options) {
|
|
54
|
+
const setting = modelSettingFor(options.settings, options.model);
|
|
55
|
+
if (setting.target !== undefined)
|
|
56
|
+
return setting.target;
|
|
57
|
+
return options.route(options.effort ?? setting.effort);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 折叠后的目录条目套用用户设置:显示名覆盖 + 隐藏停用项。
|
|
61
|
+
*
|
|
62
|
+
* 停用的条目仍然参与家族档位折叠(在调用方完成),这里只决定最终列表。
|
|
63
|
+
*/
|
|
64
|
+
export function applyModelSettings(settings, rows) {
|
|
65
|
+
const result = [];
|
|
66
|
+
for (const row of rows) {
|
|
67
|
+
const setting = modelSettingFor(settings, row.id);
|
|
68
|
+
if (!setting.enabled)
|
|
69
|
+
continue;
|
|
70
|
+
result.push(setting.name === undefined ? row : { ...row, name: setting.name });
|
|
71
|
+
}
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=model-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-settings.js","sourceRoot":"","sources":["../../src/adapter/model-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,15 @@ export declare const BRIDGE_MCP_SERVER_NAME = "dsh-tools";
|
|
|
25
25
|
export declare const BRIDGE_AUTH_HEADER = "authorization";
|
|
26
26
|
/** MCP Streamable HTTP 规范的会话头名(客户端 initialize 之后必须回带)。 */
|
|
27
27
|
export declare const BRIDGE_SESSION_HEADER = "mcp-session-id";
|
|
28
|
+
/**
|
|
29
|
+
* 常数时间比较 Bearer 头与桥 token。
|
|
30
|
+
*
|
|
31
|
+
* 桥绑定 loopback、token 为 32 字节随机值,普通字符串比较的实际风险极低;
|
|
32
|
+
* 这里仍用 `timingSafeEqual` 作为纵深防御,代价是一次 Buffer 分配。
|
|
33
|
+
* 长度不同直接返回 false(`timingSafeEqual` 对不等长会抛错),长度差异本身
|
|
34
|
+
* 不构成可利用信息——token 长度是固定且公开的。
|
|
35
|
+
*/
|
|
36
|
+
export declare function matchesBridgeToken(header: string | string[] | undefined, token: string): boolean;
|
|
28
37
|
/** 一次被 park 的 `tools/call`。 */
|
|
29
38
|
export interface BridgeParkedCall {
|
|
30
39
|
/** MCP 层生成的请求 id;DSH 侧以它作为 tool-call id 回喂。 */
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* 测试友好性:`attach(transport)` 接受任意 MCP Transport,因此测试用 SDK 自带
|
|
22
22
|
* 的 `InMemoryTransport.createLinkedPair()` 在进程内直连,不占端口。
|
|
23
23
|
*/
|
|
24
|
-
import { randomBytes, randomUUID } from 'node:crypto';
|
|
24
|
+
import { randomBytes, randomUUID, timingSafeEqual } from 'node:crypto';
|
|
25
25
|
import { createServer } from 'node:http';
|
|
26
26
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
27
27
|
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
@@ -50,6 +50,23 @@ export const BRIDGE_MCP_SERVER_NAME = 'dsh-tools';
|
|
|
50
50
|
export const BRIDGE_AUTH_HEADER = 'authorization';
|
|
51
51
|
/** MCP Streamable HTTP 规范的会话头名(客户端 initialize 之后必须回带)。 */
|
|
52
52
|
export const BRIDGE_SESSION_HEADER = 'mcp-session-id';
|
|
53
|
+
/**
|
|
54
|
+
* 常数时间比较 Bearer 头与桥 token。
|
|
55
|
+
*
|
|
56
|
+
* 桥绑定 loopback、token 为 32 字节随机值,普通字符串比较的实际风险极低;
|
|
57
|
+
* 这里仍用 `timingSafeEqual` 作为纵深防御,代价是一次 Buffer 分配。
|
|
58
|
+
* 长度不同直接返回 false(`timingSafeEqual` 对不等长会抛错),长度差异本身
|
|
59
|
+
* 不构成可利用信息——token 长度是固定且公开的。
|
|
60
|
+
*/
|
|
61
|
+
export function matchesBridgeToken(header, token) {
|
|
62
|
+
if (typeof header !== 'string')
|
|
63
|
+
return false;
|
|
64
|
+
const expected = Buffer.from(`Bearer ${token}`, 'utf8');
|
|
65
|
+
const actual = Buffer.from(header, 'utf8');
|
|
66
|
+
if (actual.length !== expected.length)
|
|
67
|
+
return false;
|
|
68
|
+
return timingSafeEqual(actual, expected);
|
|
69
|
+
}
|
|
53
70
|
/**
|
|
54
71
|
* 进程内 MCP 工具桥。一个 adapter 实例持有一个桥,跨 ACP 回合与 ACP 会话复用;
|
|
55
72
|
* 每回合通过 `publishTools` 更新工具列表、`resetPending` 清空未回喂的 park。
|
|
@@ -283,7 +300,7 @@ export class McpToolBridge {
|
|
|
283
300
|
}
|
|
284
301
|
async #handleHttp(req, res) {
|
|
285
302
|
// 鉴权先于任何 MCP 处理:随机 token 是唯一凭证,且地址只对 loopback 开放。
|
|
286
|
-
if (req.headers[BRIDGE_AUTH_HEADER]
|
|
303
|
+
if (!matchesBridgeToken(req.headers[BRIDGE_AUTH_HEADER], this.#token)) {
|
|
287
304
|
res.statusCode = 401;
|
|
288
305
|
res.setHeader('content-type', 'application/json');
|
|
289
306
|
res.end(JSON.stringify({ jsonrpc: '2.0', error: { code: -32001, message: AGY_BRIDGE_ERROR.UNAUTHORIZED }, id: null }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-bridge.js","sourceRoot":"","sources":["../../src/bridge/mcp-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAGxC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAA;AAClG,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAA;AAKlG,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEzH,8BAA8B;AAC9B,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,wCAAwC;IACxC,aAAa,EAAE,0BAA0B;IACzC,gCAAgC;IAChC,YAAY,EAAE,yBAAyB;IACvC,8BAA8B;IAC9B,YAAY,EAAE,yBAAyB;IACvC,4BAA4B;IAC5B,MAAM,EAAE,mBAAmB;IAC3B,yCAAyC;IACzC,eAAe,EAAE,4BAA4B;IAC7C,mCAAmC;IACnC,gBAAgB,EAAE,6BAA6B;IAC/C,0DAA0D;IAC1D,iBAAiB,EAAE,8BAA8B;CACzC,CAAA;AAEV,4CAA4C;AAC5C,MAAM,CAAC,MAAM,sBAAsB,GAAG,WAAW,CAAA;AACjD,wCAAwC;AACxC,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAA;AACjD,0DAA0D;AAC1D,MAAM,CAAC,MAAM,qBAAqB,GAAG,gBAAgB,CAAA;AA4DrD;;;;GAIG;AACH,MAAM,OAAO,aAAa;IACxB,MAAM,CAAQ;IACd,WAAW,GAAG,CAAC,CAAA;IACf,+CAA+C;IAC/C,MAAM,CAAoB;IACjB,cAAc,CAAQ;IACtB,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAA;IAC1C,UAAU,GAAG,IAAI,GAAG,EAAoC,CAAA;IACjE,yDAAyD;IAChD,SAAS,GAAG,IAAI,GAAG,EAAuB,CAAA;IACnD,iDAAiD;IACjD,SAAS,CAA2B;IACpC,MAAM,GAA0B,EAAE,CAAA;IAClC,KAAK,CAAoB;IACzB,MAAM,GAAG,KAAK,CAAA;IACd,OAAO,GAAG,KAAK,CAAA;IACf,QAAQ,CAAoB;IAC5B,QAAQ,GAAG,CAAC,CAAA;IACZ,4DAA4D;IAC5D,UAAU,CAAmB;IACpB,sBAAsB,CAA+C;IAE9E,YAAY,UAAgC,EAAE;QAC5C,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC9D,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAA;QACvC,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAA;IAC7D,CAAC;IAED,uEAAuE;IACvE,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED,yCAAyC;IACzC,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,iDAAiD;IACjD,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED,yCAAyC;IACzC,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,UAAU,CAAA;IACxB,CAAC;IAED,yBAAyB;IACzB,QAAQ,CAAC,QAA0C;QACjD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC7B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAClC,CAAC,CAAA;IACH,CAAC;IAED,+CAA+C;IAC/C,YAAY,CAAC,KAA4B;QACvC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,yCAAyC;IACzC,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,KAA4B,EAAE,KAAc;QACrD,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAA;QAClC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;QACxB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,0CAA0C;QAC1C,8CAA8C;QAC9C,uDAAuD;QACvD,gBAAgB;QAChB,IAAI,CAAC,qBAAqB,EAAE,CAAA;IAC9B,CAAC;IAED,4CAA4C;IAC5C,eAAe,CAAC,MAAc;QAC5B,IAAI,CAAC,WAAW,IAAI,CAAC,CAAA;QACrB,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC7C,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;QAChB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA;QACvB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;IAED,+CAA+C;IAC/C,qBAAqB;QACnB,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAClD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;YAChC,KAAK,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;YACrD,KAAK,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;QACpD,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7C,CAAC;IAED,0CAA0C;IAC1C,WAAW;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;IACzB,CAAC;IAED,+DAA+D;IAC/D,eAAe;QACb,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAA;QAC7B,OAAO;YACL;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,sBAAsB;gBAC5B,GAAG,EAAE,IAAI,CAAC,QAAQ;gBAClB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;aACxE;SACF,CAAA;IACH,CAAC;IAED,mCAAmC;IACnC,cAAc;QACZ,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IAClC,CAAC;IAED,gCAAgC;IAChC,UAAU,CAAC,MAAc;QACvB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAClC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc,CAAC,OAAoC;QACvD,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,gBAAgB,CAAC,MAAM,qBAAqB,CAAC,CAAA;QAClF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAC9C,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,gBAAgB,CAAC,YAAY,kBAAkB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;YAC9F,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACnC,KAAK,CAAC,MAAM,CAAC;gBACX,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;gBAChE,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,MAAc;QACzB,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtC,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5E,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;IACvB,CAAC;IAED,0DAA0D;IAC1D,KAAK,CAAC,MAAM,CAAC,SAAoB;QAC/B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,GAAG,gBAAgB,CAAC,gBAAgB,8CAA8C,CAAC,CAAA;QACrG,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACnC,MAAM,OAAO,GAAkB,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;QACpD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAA;QACxB,SAAS,CAAC,OAAO,GAAG,GAAG,EAAE;YACvB,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO;gBAAE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;YAC1D,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;QAC5C,CAAC,CAAA;QACD,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAC/B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;IACpB,CAAC;IAED,uDAAuD;IACvD,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,MAAM;YAAE,OAAM;QACvB,qDAAqD;QACrD,wDAAwD;QACxD,8DAA8D;QAC9D,+BAA+B;QAC/B,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,GAAoB,EAAE,GAAmB,EAAE,EAAE;YACtE,0DAA0D;YAC1D,qCAAqC;YACrC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBACpC,IAAI,CAAC,GAAG,CAAC,WAAW;oBAAE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAA;gBAC1C,IAAI,CAAC,GAAG,CAAC,aAAa;oBAAE,GAAG,CAAC,GAAG,EAAE,CAAA;YACnC,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QACF,oDAAoD;QACpD,8BAA8B;QAC9B,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;YAChC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAA;QACzB,CAAC,CAAC,CAAA;QACF,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;YAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,EAAE,GAAG,EAAE;gBACjD,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;gBACpC,OAAO,EAAE,CAAA;YACX,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QACjB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAwB,CAAA;QACpD,IAAI,CAAC,QAAQ,GAAG,oBAAoB,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,cAAc,MAAM,CAAA;QAC9E,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;IACpB,CAAC;IAED,2CAA2C;IAC3C,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,OAAO;YAAE,OAAM;QACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnB,IAAI,CAAC,YAAY,CAAC,GAAG,gBAAgB,CAAC,MAAM,uBAAuB,CAAC,CAAA;QACpE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAA;QACvB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAA;QACtB,IAAI,IAAI,EAAE,CAAC;YACT,8CAA8C;YAC9C,0BAA0B;YAC1B,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBAClC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;gBAC3B,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAA;gBAC7B,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAA;YAC9B,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,0CAA0C;QAC1C,MAAM,QAAQ,GAAoB,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAA;QAC9D,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;QACtB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC5B,CAAC;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAC9F,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAC3F,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAA;QACzB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;IACrB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,GAAoB,EAAE,GAAmB;QACzD,kDAAkD;QAClD,IAAI,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAChE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAA;YACpB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAA;YACjD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,gBAAgB,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;YACtH,OAAM;QACR,CAAC;QACD,IAAI,OAAgC,CAAA;QACpC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAA;QACpD,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1D,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YACvC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,kDAAkD;gBAClD,GAAG,CAAC,UAAU,GAAG,GAAG,CAAA;gBACpB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAA;gBACjD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;oBACrB,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAC,eAAe,cAAc,EAAE;oBACnF,EAAE,EAAE,IAAI;iBACT,CAAC,CAAC,CAAA;gBACH,OAAM;YACR,CAAC;QACH,CAAC;aAAM,CAAC;YACN,uDAAuD;YACvD,0CAA0C;YAC1C,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAA;QAC3C,CAAC;QACD,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,iCAAiC;YACjC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBACrB,GAAG,CAAC,UAAU,GAAG,GAAG,CAAA;gBACpB,GAAG,CAAC,GAAG,EAAE,CAAA;YACX,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,oDAAoD;YACpD,kDAAkD;YAClD,gDAAgD;YAChD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;gBACjC,MAAM,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;YACxD,CAAC;QACH,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,KAAK,CAAC,kBAAkB;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACnC,IAAI,OAAgC,CAAA;QACpC,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC;YAClD,kBAAkB,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE;YACtC,oBAAoB,EAAE,CAAC,SAAS,EAAE,EAAE;gBAClC,IAAI,OAAO;oBAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YACrD,CAAC;SACF,CAAC,CAAA;QACF,OAAO,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;QAC/B,iDAAiD;QACjD,4CAA4C;QAC5C,SAAS,CAAC,OAAO,GAAG,GAAG,EAAE;YACvB,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAA;YACpC,IAAI,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,OAAO;gBAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACzF,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;QAC5C,CAAC,CAAA;QACD,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAC/B,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;;;OAIG;IACH,aAAa;QACX,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAA;QACnC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;QACjH,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QACnI,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAA;QAC9I,OAAO,MAAM,CAAA;IACf,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAChC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,UAAiC;SACpD,CAAC,CAAC,CAAA;IACL,CAAC;IAED,SAAS,CAAC,IAAY,EAAE,IAAyC,EAAE,UAAkB;QACnF,6CAA6C;QAC7C,IAAI,IAAI,CAAC,OAAO,IAAI,UAAU,KAAK,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACvG,OAAO,OAAO,CAAC,OAAO,CAAC;gBACrB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,YAAY,KAAK,IAAI,EAAE,EAAE,CAAC;gBACvH,OAAO,EAAE,IAAI;aACd,CAAC,CAAA;QACJ,CAAC;QACD,oCAAoC;QACpC,4CAA4C;QAC5C,iCAAiC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;QAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;QACrG,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,sBAAsB,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;QAC1F,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;QAC7F,IAAI,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,OAAO,CAAC,OAAO,CAAC;gBACrB,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,GAAG,gBAAgB,CAAC,iBAAiB,KAAK,IAAI,WAAW,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,mBAAmB,CAAC,IAAI,CAAC,YAAY;qBAC9I,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC,CAAA;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,sBAAsB,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAA;QAC7D,MAAM,IAAI,GAAqB,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAA;QAChG,OAAO,IAAI,OAAO,CAAiB,CAAC,OAAO,EAAE,EAAE;YAC7C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;YACpD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU;gBAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;QACxD,CAAC,CAAC,CAAA;IACJ,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"mcp-bridge.js","sourceRoot":"","sources":["../../src/bridge/mcp-bridge.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -29,7 +29,6 @@ window.__ModuleLoader__.load({
|
|
|
29
29
|
const FIELDS = [
|
|
30
30
|
{ key: 'autoWarmup', group: 'general', checkbox: true, defaultChecked: true, label: '启动时自动预热', hint: '提前启动并保留连接,不发送模型消息。保存后下次启用插件生效;本次可点击“立即预热”。' },
|
|
31
31
|
{ key: 'reuseSessions', group: 'general', checkbox: true, defaultChecked: true, label: '复用 ACP 会话(增量发送)', hint: '校验历史与实际输出后只发新增消息;变化的上下文仍发送,不一致时自动重建。' },
|
|
32
|
-
{ key: 'preferredModel', group: 'model', label: '默认 / 自定义模型 ID', placeholder: '选择目录中的模型,或输入自定义 ID', hint: '保存后优先列出此模型;目录之外的 ID 标为自定义、未验证。不会替换当前会话已选模型。留空不指定默认项。' },
|
|
33
32
|
{ key: 'proxyUrl', group: 'network', label: '出网代理', placeholder: 'http://127.0.0.1:7890', hint: '此处配置优先;留空则继承宿主代理环境变量,宿主也未配置时才直连。支持 HTTP、HTTPS 与 SOCKS5。' },
|
|
34
33
|
{ key: 'proxyBypass', group: 'network', label: '代理排除列表', placeholder: '*.internal,example.internal', hint: '逗号分隔,支持域名与通配后缀,不支持 CIDR。localhost/127.0.0.1/::1 始终自动排除(私有 MCP 桥在 loopback)。' },
|
|
35
34
|
{ key: 'agyCliPath', group: 'network', label: '官方 CLI 路径(可选)', placeholder: '留空自动查找 agy', hint: '用于模型目录、套餐额度和 AI Credits。自定义安装位置可填写完整可执行文件路径;CLI 登录与 ACP 登录独立。' },
|
|
@@ -39,6 +38,57 @@ window.__ModuleLoader__.load({
|
|
|
39
38
|
{ key: 'idleRecycleMs', group: 'advanced', numeric: true, defaultValue: 300000, min: 0, max: 3600000, label: '进程空闲回收(毫秒)', hint: '默认 300000(5 分钟),0 禁用。聊天、预热、目录发现结束后统一计时;等待工具不算空闲。' },
|
|
40
39
|
]
|
|
41
40
|
|
|
41
|
+
/** 逐模型设置:键是 DSH 选择器里的模型 ID,值是开关、默认档位、显示名与官方 ID 映射。 */
|
|
42
|
+
const OVERRIDES_KEY = 'modelOverrides'
|
|
43
|
+
const OVERRIDES_LABEL = '模型列表设置'
|
|
44
|
+
const EFFORT_OPTIONS = [
|
|
45
|
+
{ value: '', label: '跟随官方' },
|
|
46
|
+
{ value: 'low', label: '低' },
|
|
47
|
+
{ value: 'medium', label: '中' },
|
|
48
|
+
{ value: 'high', label: '高' },
|
|
49
|
+
]
|
|
50
|
+
const EFFORT_IDS = new Set(EFFORT_OPTIONS.map((entry) => entry.value).filter(Boolean))
|
|
51
|
+
const MODALITY_LABELS = { text: '文本', image: '图片', audio: '音频', video: '视频', file: '文件' }
|
|
52
|
+
|
|
53
|
+
/** 只保留有意义的字段:启用是默认值,空串等于未设置。 */
|
|
54
|
+
function canonicalOverride(row) {
|
|
55
|
+
const source = row && typeof row === 'object' ? row : {}
|
|
56
|
+
const result = {}
|
|
57
|
+
if (source.enabled === false) result.enabled = false
|
|
58
|
+
if (EFFORT_IDS.has(source.effort)) result.effort = source.effort
|
|
59
|
+
const name = typeof source.name === 'string' ? source.name.trim() : ''
|
|
60
|
+
if (name) result.name = name
|
|
61
|
+
const target = typeof source.target === 'string' ? source.target.trim() : ''
|
|
62
|
+
if (target) result.target = target
|
|
63
|
+
return result
|
|
64
|
+
}
|
|
65
|
+
/** 稳定序列化:键序不影响脏值判断。 */
|
|
66
|
+
function canonicalOverrides(value) {
|
|
67
|
+
const source = value && typeof value === 'object' && !Array.isArray(value) ? value : {}
|
|
68
|
+
const result = {}
|
|
69
|
+
for (const key of Object.keys(source).sort()) {
|
|
70
|
+
const row = canonicalOverride(source[key])
|
|
71
|
+
if (Object.keys(row).length > 0) result[key] = row
|
|
72
|
+
}
|
|
73
|
+
return result
|
|
74
|
+
}
|
|
75
|
+
function sameOverrides(a, b) {
|
|
76
|
+
return JSON.stringify(canonicalOverrides(a)) === JSON.stringify(canonicalOverrides(b))
|
|
77
|
+
}
|
|
78
|
+
function overrideFor(overrides, id) {
|
|
79
|
+
const row = overrides && typeof overrides === 'object' ? overrides[id] : undefined
|
|
80
|
+
return row && typeof row === 'object' ? row : {}
|
|
81
|
+
}
|
|
82
|
+
/** 目录条目 + 已配置但当前目录没有的 ID,都要能在此编辑。 */
|
|
83
|
+
function modelRows(models, overrides) {
|
|
84
|
+
const rows = models.map((model) => ({ id: model.id, name: model.name, inputModalities: model.inputModalities, inCatalog: true }))
|
|
85
|
+
const known = new Set(rows.map((row) => row.id))
|
|
86
|
+
for (const id of Object.keys(canonicalOverrides(overrides))) {
|
|
87
|
+
if (!known.has(id)) rows.push({ id, name: id, inCatalog: false })
|
|
88
|
+
}
|
|
89
|
+
return rows
|
|
90
|
+
}
|
|
91
|
+
|
|
42
92
|
function unwrap(result) {
|
|
43
93
|
if (result && typeof result === 'object' && 'ok' in result) {
|
|
44
94
|
if (result.ok) return result.value
|
|
@@ -157,6 +207,69 @@ window.__ModuleLoader__.load({
|
|
|
157
207
|
}))
|
|
158
208
|
}
|
|
159
209
|
|
|
210
|
+
/** 单行:显示开关 + 默认思考档位 + 显示名 + 官方 ID 映射。 */
|
|
211
|
+
function ModelOverrideRow({ row, override, disabled, onEdit }) {
|
|
212
|
+
const enabled = override.enabled !== false
|
|
213
|
+
const inputId = 'agy-model-' + row.id.replace(/[^\w.-]/g, '_')
|
|
214
|
+
const labelStyle = { fontSize: '11px', opacity: .6 }
|
|
215
|
+
const inputStyle = { ...ACTION, width: '100%', minWidth: 0, boxSizing: 'border-box', background: 'rgba(128,128,128,.035)', cursor: disabled ? 'not-allowed' : 'text' }
|
|
216
|
+
return h('div', { style: { display: 'grid', gap: '8px', padding: '12px', borderRadius: '10px', border: '1px solid rgba(128,128,128,.16)', opacity: enabled ? 1 : .62 } },
|
|
217
|
+
h('div', { style: { display: 'flex', alignItems: 'flex-start', gap: '10px' } },
|
|
218
|
+
h('label', { style: { display: 'flex', alignItems: 'flex-start', gap: '8px', flex: 1, minWidth: 0, cursor: disabled ? 'default' : 'pointer' } },
|
|
219
|
+
h('input', { name: 'model-enabled-' + row.id, type: 'checkbox', checked: enabled, disabled,
|
|
220
|
+
onChange: (event) => onEdit(row.id, { enabled: event.target.checked }),
|
|
221
|
+
style: { width: '15px', height: '15px', flex: '0 0 auto', margin: '2px 0 0', accentColor: '#177c55', cursor: disabled ? 'not-allowed' : 'pointer' } }),
|
|
222
|
+
h('span', { style: { display: 'grid', gap: '2px', minWidth: 0 } },
|
|
223
|
+
h('span', { style: { fontSize: '12px', fontWeight: 600, overflowWrap: 'anywhere' } }, row.name),
|
|
224
|
+
h('code', { style: { fontSize: '11px', opacity: .55, overflowWrap: 'anywhere' } }, row.id))),
|
|
225
|
+
row.inCatalog
|
|
226
|
+
? (Array.isArray(row.inputModalities) && row.inputModalities.length
|
|
227
|
+
? h('span', { style: { flex: '0 0 auto', fontSize: '10px', padding: '2px 7px', borderRadius: '99px', background: TRACK } }, row.inputModalities.map((modality) => MODALITY_LABELS[modality] ?? modality).join('、'))
|
|
228
|
+
: null)
|
|
229
|
+
: h('span', { title: '该 ID 来自已保存的设置,当前目录里没有;仍然可以修改或清除', style: { flex: '0 0 auto', fontSize: '10px', padding: '2px 7px', borderRadius: '99px', color: '#946200', background: 'rgba(217,155,40,.12)' } }, '不在当前目录')),
|
|
230
|
+
h('div', { style: { display: 'grid', gap: '6px', gridTemplateColumns: 'minmax(120px, 160px) minmax(0, 1fr)' } },
|
|
231
|
+
h('div', { style: { display: 'grid', gap: '4px', minWidth: 0 } },
|
|
232
|
+
h('label', { htmlFor: inputId + '-effort', style: labelStyle }, '默认思考档位'),
|
|
233
|
+
h('select', { id: inputId + '-effort', name: 'model-effort-' + row.id, disabled, value: EFFORT_IDS.has(override.effort) ? override.effort : '',
|
|
234
|
+
onChange: (event) => onEdit(row.id, { effort: event.target.value }),
|
|
235
|
+
style: { ...inputStyle, cursor: disabled ? 'not-allowed' : 'pointer' } },
|
|
236
|
+
...EFFORT_OPTIONS.map((option) => h('option', { key: option.value, value: option.value }, option.label)))),
|
|
237
|
+
h('div', { style: { display: 'grid', gap: '4px', minWidth: 0 } },
|
|
238
|
+
h('label', { htmlFor: inputId + '-target', style: labelStyle }, '映射到官方模型 ID'),
|
|
239
|
+
h('input', { id: inputId + '-target', name: 'model-target-' + row.id, type: 'text', disabled, value: override.target ?? '',
|
|
240
|
+
placeholder: '留空按家族 + 档位自动路由', onChange: (event) => onEdit(row.id, { target: event.target.value }), style: inputStyle }))),
|
|
241
|
+
h('div', { style: { display: 'grid', gap: '4px' } },
|
|
242
|
+
h('label', { htmlFor: inputId + '-name', style: labelStyle }, '显示名'),
|
|
243
|
+
h('input', { id: inputId + '-name', name: 'model-name-' + row.id, type: 'text', disabled, value: override.name ?? '',
|
|
244
|
+
placeholder: row.inCatalog ? '留空使用「' + row.name + '」' : '留空显示模型 ID', onChange: (event) => onEdit(row.id, { name: event.target.value }), style: inputStyle })))
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* 模型列表:一次列出目录中的每个模型,改动在保存时合并成一份
|
|
249
|
+
* `modelOverrides` 提交,空项自动清除,不留空壳配置。
|
|
250
|
+
*/
|
|
251
|
+
function ModelOverrideList({ rows, overrides, disabled, onEdit }) {
|
|
252
|
+
if (rows.length === 0) {
|
|
253
|
+
return h('p', { style: { margin: 0, fontSize: '12px', lineHeight: 1.6, opacity: .6 } },
|
|
254
|
+
'还没有模型目录。连接 / 登录 ACP 或刷新模型目录后,可在此逐项设置显示开关、默认思考档位与映射。')
|
|
255
|
+
}
|
|
256
|
+
const hidden = rows.filter((row) => overrideFor(overrides, row.id).enabled === false).length
|
|
257
|
+
return h('div', { style: { display: 'grid', gap: '10px' } },
|
|
258
|
+
h('div', { style: { display: 'flex', flexWrap: 'wrap', gap: '4px 12px', fontSize: '11px', opacity: .62 } },
|
|
259
|
+
h('span', null, rows.length + ' 个模型'),
|
|
260
|
+
hidden ? h('span', null, hidden + ' 个已从选择器隐藏') : null,
|
|
261
|
+
h('span', null, '映射与显示名保存后生效;当前会话已选模型不变')),
|
|
262
|
+
// 全部停用时本 provider 会从 DSH 选择器里消失,这里必须说清原因。
|
|
263
|
+
hidden === rows.length
|
|
264
|
+
? h('p', { role: 'status', style: { margin: 0, fontSize: '11px', lineHeight: 1.6, color: '#946200' } },
|
|
265
|
+
'所有模型都已隐藏:保存后 Antigravity 将不出现在 DSH 模型选择器中,重新启用任一项即可恢复。')
|
|
266
|
+
: null,
|
|
267
|
+
...rows.map((row) => h(ModelOverrideRow, {
|
|
268
|
+
key: row.id, row, override: overrideFor(overrides, row.id), disabled,
|
|
269
|
+
onEdit: (id, patch) => onEdit(id, patch),
|
|
270
|
+
})))
|
|
271
|
+
}
|
|
272
|
+
|
|
160
273
|
function AntigravitySettingsCard(props) {
|
|
161
274
|
const remote = props.remote
|
|
162
275
|
const [account, setAccount] = React.useState(undefined)
|
|
@@ -239,6 +352,27 @@ window.__ModuleLoader__.load({
|
|
|
239
352
|
setDraft(next)
|
|
240
353
|
}, [])
|
|
241
354
|
|
|
355
|
+
/**
|
|
356
|
+
* 单条模型设置:合并成整份 modelOverrides 再交给通用编辑路径,
|
|
357
|
+
* 这样草稿、冲突与只提交改动项的行为和其它字段完全一致。
|
|
358
|
+
*/
|
|
359
|
+
const editOverride = React.useCallback((id, patch) => {
|
|
360
|
+
if (savingRef.current) return
|
|
361
|
+
const current = overrideFor(draftRef.current[OVERRIDES_KEY], id)
|
|
362
|
+
const merged = canonicalOverride({ ...current, ...patch })
|
|
363
|
+
const overrides = canonicalOverrides(draftRef.current[OVERRIDES_KEY])
|
|
364
|
+
if (Object.keys(merged).length === 0) delete overrides[id]
|
|
365
|
+
else overrides[id] = merged
|
|
366
|
+
const value = overrides
|
|
367
|
+
const next = { ...draftRef.current, [OVERRIDES_KEY]: value }
|
|
368
|
+
draftRef.current = next
|
|
369
|
+
if (sameOverrides(value, baseline.current[OVERRIDES_KEY])) dirty.current.delete(OVERRIDES_KEY)
|
|
370
|
+
else dirty.current.add(OVERRIDES_KEY)
|
|
371
|
+
setDirtyKeys([...dirty.current])
|
|
372
|
+
setConflicts((previous) => previous.filter((field) => field !== OVERRIDES_KEY))
|
|
373
|
+
setDraft(next)
|
|
374
|
+
}, [])
|
|
375
|
+
|
|
242
376
|
const reload = React.useCallback(async (preserveStatus = false) => {
|
|
243
377
|
const version = ++settingsVersion.current
|
|
244
378
|
// 同步段整体兜底:remote.<ns> 是代理属性,缺 inject 时连「读属性」都会抛;
|
|
@@ -264,13 +398,22 @@ window.__ModuleLoader__.load({
|
|
|
264
398
|
setView(found ?? null)
|
|
265
399
|
const current = found?.value && typeof found.value === 'object' ? found.value : {}
|
|
266
400
|
const server = Object.fromEntries(FIELDS.map((field) => [field.key, field.checkbox ? (field.defaultChecked ? current[field.key] !== false : current[field.key] === true) : current[field.key] ?? field.defaultValue ?? '']))
|
|
401
|
+
// 整份 map 作为一个字段参与脏值比较;规范化后再比,避免键序或
|
|
402
|
+
// 「显式写回默认值」被误判为未保存修改。
|
|
403
|
+
server[OVERRIDES_KEY] = canonicalOverrides(current[OVERRIDES_KEY])
|
|
267
404
|
const changed = []
|
|
268
405
|
const next = { ...server }
|
|
269
406
|
for (const key of dirty.current) {
|
|
270
|
-
|
|
407
|
+
const same = key === OVERRIDES_KEY
|
|
408
|
+
? sameOverrides(draftRef.current[key], server[key])
|
|
409
|
+
: draftRef.current[key] === server[key]
|
|
410
|
+
if (same) dirty.current.delete(key)
|
|
271
411
|
else {
|
|
272
412
|
next[key] = draftRef.current[key]
|
|
273
|
-
|
|
413
|
+
const beforeSame = key === OVERRIDES_KEY
|
|
414
|
+
? sameOverrides(baseline.current[key], server[key])
|
|
415
|
+
: baseline.current[key] === server[key]
|
|
416
|
+
if (!beforeSame) changed.push(key)
|
|
274
417
|
}
|
|
275
418
|
}
|
|
276
419
|
baseline.current = server
|
|
@@ -301,7 +444,10 @@ window.__ModuleLoader__.load({
|
|
|
301
444
|
setSaving(true)
|
|
302
445
|
setStatus({ kind: 'busy', text: '保存中…' })
|
|
303
446
|
// 只提交用户改动过的字段,空串也是有效改动;未编辑字段遵循最新服务端值。
|
|
304
|
-
|
|
447
|
+
// modelOverrides 是整份 map 一个字段,按同样方式提交。
|
|
448
|
+
const ops = [...FIELDS.map((field) => field.key), OVERRIDES_KEY]
|
|
449
|
+
.filter((key) => dirty.current.has(key))
|
|
450
|
+
.map((key) => ({ op: 'set', path: [key], value: draftRef.current[key] }))
|
|
305
451
|
try {
|
|
306
452
|
unwrap(await remote.settings.mutate(ENTRY_ID, ops, view.revision))
|
|
307
453
|
if (!alive.current) return
|
|
@@ -341,9 +487,8 @@ window.__ModuleLoader__.load({
|
|
|
341
487
|
}
|
|
342
488
|
}, [reload, remote])
|
|
343
489
|
|
|
344
|
-
|
|
345
|
-
const
|
|
346
|
-
const selectedModalities = selectedModel?.inputModalities
|
|
490
|
+
// 目录条目 + 已配置但目录里暂时没有的 ID:正在编辑的映射不能因为目录刷新而消失。
|
|
491
|
+
const rows = modelRows(models, draft[OVERRIDES_KEY])
|
|
347
492
|
const editingDisabled = loading || saving || !view || !writable
|
|
348
493
|
const discardDraft = () => {
|
|
349
494
|
if (savingRef.current) return
|
|
@@ -388,20 +533,11 @@ window.__ModuleLoader__.load({
|
|
|
388
533
|
['connecting', 'cancelling'].includes(account?.state) ? h('button', { type: 'button', style: ACTION, disabled: account?.state === 'cancelling', onClick: () => accountAction('cancel') }, account?.state === 'cancelling' ? '正在取消…' : '取消连接') : null),
|
|
389
534
|
h('p', { style: { opacity: .55, fontSize: '11px', lineHeight: 1.6, margin: '10px 0 0' } }, '预热不会发送聊天消息。仅在需要登录时打开官方授权页面;思考强度仍由会话菜单设置。')),
|
|
390
535
|
|
|
391
|
-
h('section', { style: PANEL, 'aria-label': '
|
|
392
|
-
h(SectionHeading, { eyebrow: '02 · 模型', title: '
|
|
536
|
+
h('section', { style: PANEL, 'aria-label': '模型列表' },
|
|
537
|
+
h(SectionHeading, { eyebrow: '02 · 模型', title: '模型列表', description: '目录中的模型是否出现在 DSH 选择器,以及各自的默认思考档位与官方 ID 映射。',
|
|
393
538
|
action: h('button', { type: 'button', title: '从官方 CLI 或 ACP 会话重新读取模型目录', 'aria-busy': modelBusy || undefined, style: { ...ACTION, flex: '0 0 auto', whiteSpace: 'nowrap' }, disabled: modelBusy || !props.control, onClick: () => pullModels(true) }, modelBusy ? '正在刷新…' : '刷新模型目录') }),
|
|
394
|
-
h(
|
|
395
|
-
|
|
396
|
-
h('select', { 'aria-label': '从目录选择默认模型', disabled: editingDisabled, value: models.some((m) => m.id === draft.preferredModel) ? draft.preferredModel : '', onChange: (event) => { if (event.target.value) editField('preferredModel', event.target.value) }, style: { ...ACTION, width: '100%', boxSizing: 'border-box', background: 'rgba(128,128,128,.035)' } },
|
|
397
|
-
h('option', { value: '' }, models.length ? '选择一个模型,或在下方输入 ID' : '暂无目录,可手动输入模型 ID'),
|
|
398
|
-
...models.map((model) => h('option', { key: model.id, value: model.id }, model.name + ' · ' + model.id)))),
|
|
399
|
-
h(SettingsFields, { ...fieldProps, fields: fieldsFor('model') })),
|
|
400
|
-
h('div', { style: { display: 'flex', flexWrap: 'wrap', gap: '5px 10px', marginTop: '10px', fontSize: '11px', opacity: .6 } },
|
|
401
|
-
h('span', null, models.length + ' 个模型'),
|
|
402
|
-
Array.isArray(selectedModalities) && selectedModalities.length ? h('span', null, '支持输入:' + selectedModalities.map((modality) => modalityLabels[modality] ?? modality).join('、')) : null,
|
|
403
|
-
draft.preferredModel && !selectedModel ? h('span', null, '自定义 ID · 尚未验证') : null),
|
|
404
|
-
modelMessage ? h('p', { role: 'status', style: { fontSize: '11px', lineHeight: 1.6, opacity: .65, margin: '8px 0 0', overflowWrap: 'anywhere' } }, modelMessage) : null),
|
|
539
|
+
h(ModelOverrideList, { rows: rows, overrides: draft[OVERRIDES_KEY], disabled: editingDisabled, onEdit: editOverride }),
|
|
540
|
+
modelMessage ? h('p', { role: 'status', style: { fontSize: '11px', lineHeight: 1.6, opacity: .65, margin: '10px 0 0', overflowWrap: 'anywhere' } }, modelMessage) : null),
|
|
405
541
|
|
|
406
542
|
h('section', { style: PANEL, 'aria-label': '常用设置' },
|
|
407
543
|
h(SectionHeading, { eyebrow: '03 · 偏好', title: '常用设置', description: '适合大多数使用场景;其它选项保持默认即可。' }),
|
|
@@ -426,7 +562,7 @@ window.__ModuleLoader__.load({
|
|
|
426
562
|
account?.runtime ? RuntimeDetails({ runtime: account.runtime }) : h('p', { style: { margin: 0, fontSize: '12px', opacity: .6 } }, '连接后显示生命周期、并发容量与分阶段耗时。'))),
|
|
427
563
|
|
|
428
564
|
h('footer', { style: { display: 'grid', gap: '10px', padding: '4px 2px 0' } },
|
|
429
|
-
conflicts.length ? h('p', { role: 'alert', style: { margin: 0, fontSize: '12px', lineHeight: 1.6, color: '#946200' } }, '其他位置更新了以下设置,已保留你的输入:' + conflicts.map((key) => FIELDS.find((field) => field.key === key)?.label ?? key).join('、') + '。请核对后再保存。') : null,
|
|
565
|
+
conflicts.length ? h('p', { role: 'alert', style: { margin: 0, fontSize: '12px', lineHeight: 1.6, color: '#946200' } }, '其他位置更新了以下设置,已保留你的输入:' + conflicts.map((key) => key === OVERRIDES_KEY ? OVERRIDES_LABEL : FIELDS.find((field) => field.key === key)?.label ?? key).join('、') + '。请核对后再保存。') : null,
|
|
430
566
|
h(StatusNotice, { status }),
|
|
431
567
|
h('div', { style: { display: 'flex', flexWrap: 'wrap', gap: '8px', alignItems: 'center' } },
|
|
432
568
|
h('button', { type: 'button', onClick: save, disabled: editingDisabled || dirtyKeys.length === 0, style: PRIMARY }, saving ? '保存中…' : '保存'),
|
package/dist/index.js
CHANGED
|
@@ -14,7 +14,7 @@ import { AntigravityAcpAdapter, AGY_PROVIDER_ID } from './adapter/antigravity-ad
|
|
|
14
14
|
import { PooledAcpAdapter } from './pool/pooled-adapter.js';
|
|
15
15
|
import { AgentLink, agentStreamFromSubprocess, AGY_CLIENT_INFO, AGY_LINK_ERROR, launchAcpAgent } from './protocol/agent-link.js';
|
|
16
16
|
import { AGY_BINARY_ERROR, cleanupStaleRuntimeDirectories, cleanupStaleStagingDirs, DEFAULT_ACP_SERVER_VERSION, ensureAgentBinary, resolveCacheDir, resolveInstallRoot, createRuntimeDirectory, releaseRuntimeDirectory, defaultAgentArgs, } from './runtime/binary.js';
|
|
17
|
-
import { resolveProxy } from './runtime/proxy-env.js';
|
|
17
|
+
import { ProxyConfigError, resolveProxy } from './runtime/proxy-env.js';
|
|
18
18
|
import { createLiveProxiedFetch, createProxiedFetch } from './runtime/proxied-fetch.js';
|
|
19
19
|
import { ensureAcpCredentials } from './runtime/credentials.js';
|
|
20
20
|
import { describeLowIntegrity, isLowIntegrityTarget } from './runtime/integrity.js';
|
|
@@ -125,7 +125,7 @@ export async function ensureAcpRuntime(ctx, config, handlers, active, deps = {})
|
|
|
125
125
|
active.lifecycle?.reused();
|
|
126
126
|
return active.link;
|
|
127
127
|
}
|
|
128
|
-
//
|
|
128
|
+
// 链路自己关了(对端断流 / 流读取失败 / 回收中途失败)但子进程可能仍活着、
|
|
129
129
|
// handle.done 不会触发:不能把这条死链永久交给调用方,否则之后每个回合都会
|
|
130
130
|
// 在 session/new 上报「ACP 链路已关闭」直到重启。终止旧进程并全新启动。
|
|
131
131
|
}
|
|
@@ -169,7 +169,18 @@ async function startAcpRuntime(ctx, config, handlers, active, deps) {
|
|
|
169
169
|
}
|
|
170
170
|
const subprocess = ctx.subprocess;
|
|
171
171
|
active.abort ??= new AbortController();
|
|
172
|
-
|
|
172
|
+
// 非法代理在启动这一层转成带 AGY_ 前缀的 LlmError:既给出可行动文案,也不会
|
|
173
|
+
// 命中宿主的默认可重试词表(整步重放会重复 spawn 与 OAuth)。
|
|
174
|
+
const downloadProxy = (() => {
|
|
175
|
+
try {
|
|
176
|
+
return resolveProxy({ url: config.proxyUrl, bypass: config.proxyBypass });
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
if (!(error instanceof ProxyConfigError))
|
|
180
|
+
throw error;
|
|
181
|
+
throw new LlmError(`代理配置无效,无法启动 ACP:${error.message}`, 'AGY_INVALID_PROXY');
|
|
182
|
+
}
|
|
183
|
+
})();
|
|
173
184
|
const startupSignal = AbortSignal.any([active.abort.signal, ...(deps.signal ? [deps.signal] : [])]);
|
|
174
185
|
startupSignal.throwIfAborted();
|
|
175
186
|
const ownedFetch = deps.fetchImpl ? undefined : createProxiedFetch(downloadProxy);
|
|
@@ -391,12 +402,35 @@ export function apply(ctx, input) {
|
|
|
391
402
|
// 代理规则与官方 ACP 进程一致:**配置的 proxyUrl 优先,其次宿主环境自身导出的
|
|
392
403
|
// 代理**。CLI 每次启动都会做登录/配置刷新,缺代理会一直挂在网络上(实测),
|
|
393
404
|
// 表现为额度药丸永远停在「额度…」。地址非法时以 AGY_INVALID_PROXY 明确失败。
|
|
405
|
+
// 代理地址非法时不能让整个插件装载失败:设置卡片本身由本插件贡献,装载一失败,
|
|
406
|
+
// 用户就没有任何界面修正这个值,只能去翻宿主配置文件。这里只告警、留痕,真正的
|
|
407
|
+
// 非法地址在每次使用代理的操作里各自失败(连不上 / ProxyConfigError),并在设置页
|
|
408
|
+
// 保持可编辑。已经带 userinfo 的地址不回显,只报可行动原因。
|
|
409
|
+
const validateInitialProxy = () => {
|
|
410
|
+
try {
|
|
411
|
+
resolveProxy({ url: config.proxyUrl, bypass: config.proxyBypass });
|
|
412
|
+
}
|
|
413
|
+
catch (error) {
|
|
414
|
+
if (!(error instanceof ProxyConfigError))
|
|
415
|
+
throw error;
|
|
416
|
+
ctx.logger?.warn?.(`antigravity-acp: 代理配置无效,插件已加载但不会使用该代理(请到设置页修正后重载宿主):${error.message}`);
|
|
417
|
+
}
|
|
418
|
+
};
|
|
419
|
+
validateInitialProxy();
|
|
394
420
|
const readProxy = () => resolveProxy({ url: config.proxyUrl, bypass: config.proxyBypass });
|
|
395
|
-
// Validate the initial route before registering resources. Subsequent operations
|
|
396
|
-
// capture the latest settings; existing ACP processes keep their launch env.
|
|
397
|
-
readProxy();
|
|
398
421
|
const pluginFetch = createLiveProxiedFetch(readProxy);
|
|
399
|
-
|
|
422
|
+
// 代理地址可能刚被改坏:按 Promise 契约返回 rejected,让调用方各自的
|
|
423
|
+
// 「取数失败折叠成可读错误」路径生效,而不是同步抛进调度器。
|
|
424
|
+
const cliRun = (request) => {
|
|
425
|
+
let proxy;
|
|
426
|
+
try {
|
|
427
|
+
proxy = readProxy();
|
|
428
|
+
}
|
|
429
|
+
catch (error) {
|
|
430
|
+
return Promise.reject(error);
|
|
431
|
+
}
|
|
432
|
+
return createSubprocessCliRun(ctx.subprocess, proxy)(request);
|
|
433
|
+
};
|
|
400
434
|
const findCli = () => agyCliCandidates(process.env, undefined, config.agyCliPath).find((candidate) => existsSync(candidate));
|
|
401
435
|
let modelCatalogRevision = 0;
|
|
402
436
|
const catalogChanged = () => {
|
|
@@ -408,7 +442,8 @@ export function apply(ctx, input) {
|
|
|
408
442
|
catch { /* Observers cannot veto catalog updates. */ }
|
|
409
443
|
};
|
|
410
444
|
ctx.on('loader/volatile-update', (paths) => {
|
|
411
|
-
|
|
445
|
+
// 模型显示开关、默认档位与映射都会改变选择器与路由,需要通知宿主刷新目录。
|
|
446
|
+
if (paths.some(([key]) => key === 'modelOverrides'))
|
|
412
447
|
catalogChanged();
|
|
413
448
|
});
|
|
414
449
|
let attachmentStore;
|
|
@@ -479,7 +514,7 @@ export function apply(ctx, input) {
|
|
|
479
514
|
},
|
|
480
515
|
promptTimeoutMs: config.promptTimeoutMs,
|
|
481
516
|
parkSettleMs: config.bridgeParkSettleMs,
|
|
482
|
-
|
|
517
|
+
modelOverrides: config.modelOverrides,
|
|
483
518
|
readSettings: () => ({ ...config, sessionStore: config.resumeSessions ? sessionStore : undefined }),
|
|
484
519
|
// ACP 会话复用:同一条 DSH 对话的后续回合只发增量;重启恢复默认关闭。
|
|
485
520
|
reuseSessions: config.reuseSessions,
|