zames_pro 2.82.58 → 2.82.60
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/commands.js +4 -1
- package/dist/permissions.js +10 -2
- 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.60] - 2026-10-23
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **permissions:** scan nested path arguments for every tool, not only MCP
|
|
15
|
+
|
|
16
|
+
## [2.82.59] - 2026-10-23
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- **commands:** /diffstat hides the padded no-output sentinel
|
|
21
|
+
|
|
10
22
|
## [2.82.58] - 2026-10-23
|
|
11
23
|
|
|
12
24
|
### Fixed
|
package/dist/commands.js
CHANGED
|
@@ -46,7 +46,10 @@ export function formatDiffStat(statText, opts = {}, t = translate('en')) {
|
|
|
46
46
|
.split(CR + NL)
|
|
47
47
|
.join(NL)
|
|
48
48
|
.trimEnd();
|
|
49
|
-
|
|
49
|
+
// Compare the TRIMMED text: the runner's sentinel reaches this function
|
|
50
|
+
// with its own padding, and a raw comparison then printed the internal
|
|
51
|
+
// marker to the operator (formatDiff already trims).
|
|
52
|
+
if (!trimmed || trimmed.trim() === '(command produced no output)') {
|
|
50
53
|
return t('diff.no_changes');
|
|
51
54
|
}
|
|
52
55
|
const lines = trimmed.split(NL);
|
package/dist/permissions.js
CHANGED
|
@@ -123,7 +123,13 @@ export function collectPathCandidates(tool, args) {
|
|
|
123
123
|
// free to nest (`{file: {path}}`) or take `argv: ['cat', '/etc/x']`. Only
|
|
124
124
|
// values that clearly look like paths are taken (depth-bounded to avoid a
|
|
125
125
|
// pathological payload).
|
|
126
|
-
|
|
126
|
+
//
|
|
127
|
+
// This runs for EVERY tool, not only MCP ones: a model that invents an
|
|
128
|
+
// argument shape (`{file: {path}}`, `{files: [...]}`) on a built-in tool
|
|
129
|
+
// used to slip past a `path` deny rule, silently widening the operator's
|
|
130
|
+
// policy. Path-looking values of a built-in's own arguments are exactly what
|
|
131
|
+
// such a rule is meant to match.
|
|
132
|
+
{
|
|
127
133
|
const walk = (v, depth) => {
|
|
128
134
|
if (depth > 4 || v === null || v === undefined)
|
|
129
135
|
return;
|
|
@@ -146,7 +152,9 @@ export function collectPathCandidates(tool, args) {
|
|
|
146
152
|
for (const v of Object.values(a))
|
|
147
153
|
walk(v, 0);
|
|
148
154
|
}
|
|
149
|
-
|
|
155
|
+
// De-duplicate: a known key (`path`) is now also reached by the generic
|
|
156
|
+
// nested walk, and callers compare the candidate LIST (`deepEqual`).
|
|
157
|
+
return Array.from(new Set(out));
|
|
150
158
|
}
|
|
151
159
|
export function decidePermission(policy, tool, args) {
|
|
152
160
|
if (!policy)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zames_pro",
|
|
3
|
-
"version": "2.82.
|
|
3
|
+
"version": "2.82.60",
|
|
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": {
|