zames_pro 2.82.121 → 2.82.123
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 +12 -0
- package/dist/context.js +5 -1
- package/dist/mcp.js +10 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [2.82.123] - 2026-10-24
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **mcp:** a duplicate tool rename does not steal a later tool name
|
|
15
|
+
|
|
16
|
+
## [2.82.122] - 2026-10-24
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- **context:** a file that does not fit the pool does not drop the rest
|
|
21
|
+
|
|
10
22
|
## [2.82.121] - 2026-10-24
|
|
11
23
|
|
|
12
24
|
### Fixed
|
package/dist/context.js
CHANGED
|
@@ -584,8 +584,12 @@ export async function loadProjectContext(workdir, touchPaths = []) {
|
|
|
584
584
|
let used = 0;
|
|
585
585
|
const kept = [];
|
|
586
586
|
for (const f of files) {
|
|
587
|
+
// SKIP a file that does not fit the remaining pool, do NOT end the
|
|
588
|
+
// chain: the chain runs global -> root -> ... -> workdir, so one large
|
|
589
|
+
// file used to drop every SMALLER, MORE SPECIFIC file after it — the
|
|
590
|
+
// most specific instructions are exactly the ones lost.
|
|
587
591
|
if (used + f.content.length > total)
|
|
588
|
-
|
|
592
|
+
continue;
|
|
589
593
|
used += f.content.length;
|
|
590
594
|
kept.push(f);
|
|
591
595
|
}
|
package/dist/mcp.js
CHANGED
|
@@ -337,6 +337,11 @@ export function qualifyToolName(server, tool) {
|
|
|
337
337
|
// qualifier is not injective (see the call site), hence this guard. Pure;
|
|
338
338
|
// exported for tests.
|
|
339
339
|
export function dedupeToolNames(tools) {
|
|
340
|
+
// The rename must avoid EVERY name in the list, not only the ones already
|
|
341
|
+
// visited: a later tool that already owns `<name>_2` (a server's own `x_2`
|
|
342
|
+
// tool) was renamed itself, and the model's call to `x_2` then reached the
|
|
343
|
+
// RENAMED DUPLICATE — the wrong tool.
|
|
344
|
+
const all = new Set(tools.map((t) => t.name));
|
|
340
345
|
const seen = new Set();
|
|
341
346
|
for (const t of tools) {
|
|
342
347
|
if (!seen.has(t.name)) {
|
|
@@ -345,12 +350,16 @@ export function dedupeToolNames(tools) {
|
|
|
345
350
|
}
|
|
346
351
|
let n = 2;
|
|
347
352
|
let candidate = `${t.name}_${n}`;
|
|
348
|
-
while (seen.has(candidate)) {
|
|
353
|
+
while (seen.has(candidate) || all.has(candidate)) {
|
|
349
354
|
n++;
|
|
350
355
|
candidate = `${t.name}_${n}`;
|
|
351
356
|
}
|
|
357
|
+
// The duplicate leaves the pool of ORIGINAL names: its old name belongs to
|
|
358
|
+
// the first tool of that name.
|
|
359
|
+
all.delete(t.name);
|
|
352
360
|
t.name = candidate;
|
|
353
361
|
seen.add(candidate);
|
|
362
|
+
all.add(candidate);
|
|
354
363
|
}
|
|
355
364
|
}
|
|
356
365
|
// Connect to ONE server and return a ready connection (or an error).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zames_pro",
|
|
3
|
-
"version": "2.82.
|
|
3
|
+
"version": "2.82.123",
|
|
4
4
|
"description": "Terminal coding agent that drives a real browser to chat with DeepSeek, Qwen and other web LLMs — no API key required. Reads and edits files, runs commands, commits to git, like Claude Code / Codex CLI.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|