dsh-agy-link 0.4.78 → 0.4.79
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 +14 -0
- package/dist/index.js +16 -16
- package/docs/KNOWN-GAPS.md +3 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.4.79 (2026-10-29)
|
|
4
|
+
|
|
5
|
+
### English
|
|
6
|
+
|
|
7
|
+
- **Fix(mcp): never silently drop tools whose names collide after MCP normalization.**
|
|
8
|
+
- `toMcpName()` maps any non-`[A-Za-z0-9_-]` character to `_`, so distinct DSH tools like `a.b` and `a_b` normalized to the same MCP name and the second was silently removed from `/tools` — hiding a real, possibly allowlisted, tool from the agent. Colliding names are now disambiguated with a stable `__<n>` suffix; `bridge.mjs` still calls back by the exact `_dshName`, so execution is unaffected. Adds a regression test.
|
|
9
|
+
|
|
10
|
+
### 中文
|
|
11
|
+
|
|
12
|
+
- **修复(mcp):名称经 MCP 归一化后撞名的工具不再被静默丢弃。**
|
|
13
|
+
- `toMcpName()` 会把非 `[A-Za-z0-9_-]` 字符替换成 `_`,于是 `a.b` 与 `a_b` 这类不同工具会归一化成同一个 MCP 名,第二个被从 `/tools` 静默删除,导致一个真实(且可能已加入 allowlist 的)工具对 agent 不可见。现在撞名会加稳定的 `__<n>` 后缀消歧;`bridge.mjs` 仍按精确 `_dshName` 回调,执行不受影响。补充回归测试。
|
|
14
|
+
|
|
15
|
+
**Full Changelog**: https://github.com/amlyczz/dsh-agy-link/compare/v0.4.78...v0.4.79
|
|
16
|
+
|
|
3
17
|
## 0.4.78 (2026-10-29)
|
|
4
18
|
|
|
5
19
|
### English
|
package/dist/index.js
CHANGED
|
@@ -34773,22 +34773,22 @@ function startMcpBridge(opts) {
|
|
|
34773
34773
|
}
|
|
34774
34774
|
const allow = opts.allowlist().split(",").map((s) => s.trim()).filter(Boolean);
|
|
34775
34775
|
const allowSet = new Set(allow);
|
|
34776
|
-
const
|
|
34777
|
-
sendJson(res, 200, { tools: svc.schemas().filter((t) => allow.length === 0 || allowSet.has(t.name)).filter((t) => {
|
|
34778
|
-
|
|
34779
|
-
|
|
34780
|
-
|
|
34781
|
-
|
|
34782
|
-
return
|
|
34783
|
-
|
|
34784
|
-
|
|
34785
|
-
|
|
34786
|
-
|
|
34787
|
-
|
|
34788
|
-
|
|
34789
|
-
|
|
34790
|
-
}
|
|
34791
|
-
})
|
|
34776
|
+
const used = /* @__PURE__ */ new Set();
|
|
34777
|
+
sendJson(res, 200, { tools: svc.schemas().filter((t) => allow.length === 0 || allowSet.has(t.name)).filter((t) => !INTERNAL_TOOL_NAMES.has(t.name)).map((t) => {
|
|
34778
|
+
const base = toMcpName(t.name);
|
|
34779
|
+
let name = base;
|
|
34780
|
+
for (let i = 2; used.has(name); i++) name = base + "__" + i;
|
|
34781
|
+
used.add(name);
|
|
34782
|
+
return {
|
|
34783
|
+
name,
|
|
34784
|
+
dshName: t.name,
|
|
34785
|
+
description: t.description,
|
|
34786
|
+
inputSchema: {
|
|
34787
|
+
type: "object",
|
|
34788
|
+
...t.parameters
|
|
34789
|
+
}
|
|
34790
|
+
};
|
|
34791
|
+
}) });
|
|
34792
34792
|
return;
|
|
34793
34793
|
}
|
|
34794
34794
|
if (req.method === "POST" && (url === "/call" || url === "/mcp/call")) {
|
package/docs/KNOWN-GAPS.md
CHANGED
|
@@ -120,6 +120,9 @@ reference-counted slot is the strongest isolation the plugin can provide.
|
|
|
120
120
|
loopback endpoint also caps request bodies (8 MiB → HTTP 413) and compares the
|
|
121
121
|
bearer token in constant time, so a token-holding but prompt-injected child
|
|
122
122
|
cannot OOM the host with an unbounded body or probe the token via timing.
|
|
123
|
+
Distinct DSH tool names that normalize to the same MCP name (e.g. `a.b`
|
|
124
|
+
and `a_b`) are disambiguated with a stable suffix instead of being silently
|
|
125
|
+
dropped, so every real tool stays reachable.
|
|
123
126
|
Every bridged call is audit-logged as `mcp call <tool> [<outcome>] <ms>` with
|
|
124
127
|
the caller class and the failure text (never the arguments), so a failed run
|
|
125
128
|
is visible in journald instead of only in transcripts.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-agy-link",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.79",
|
|
4
4
|
"description": "Google Antigravity (agy CLI) models for DeepSeek Harness — stream Gemini/Claude/GPT-OSS subscriptions into DSH with thinking, tool activity, token usage and in-GUI Google OAuth login.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|