zames_pro 2.82.89 → 2.82.91

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 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.91] - 2026-10-24
11
+
12
+ ### Fixed
13
+
14
+ - **goal:** a goal cannot inject a second Current task section
15
+
16
+ ## [2.82.90] - 2026-10-24
17
+
18
+ ### Fixed
19
+
20
+ - **commands:** a dynamic hint name is normalized to a slash command
21
+
10
22
  ## [2.82.89] - 2026-10-24
11
23
 
12
24
  ### Fixed
package/dist/commands.js CHANGED
@@ -709,9 +709,13 @@ export function withGoal(goal, task) {
709
709
  if (!g)
710
710
  return task;
711
711
  const NL = String.fromCharCode(10);
712
+ // The goal is operator text and may itself contain a `Current task:` heading
713
+ // (a pasted prompt). That produced TWO sections and the model worked on the
714
+ // INJECTED task; re-indent such a heading so only OUR line is structural.
715
+ const safeGoal = g.replace(/^(\s*)Current task:/gim, '$1Session goal (continued):');
712
716
  return ('Session goal (long-lived — keep it in mind for this and every following task):' +
713
717
  NL +
714
- g +
718
+ safeGoal +
715
719
  NL +
716
720
  NL +
717
721
  'Current task:' +
@@ -1213,15 +1217,23 @@ export function buildSlashCommandHints(opts) {
1213
1217
  .filter((c) => !(hideModel && c.name === '/model'))
1214
1218
  .map((c) => ({ name: c.name, description: t(c.key) }));
1215
1219
  const known = new Set(base.map((c) => c.name.toLowerCase()));
1216
- for (const d of opts.dynamic ?? []) {
1217
- if (known.has(d.name.toLowerCase()))
1220
+ for (const raw of opts.dynamic ?? []) {
1221
+ // A slash hint must BE a slash command: a custom command whose name
1222
+ // omitted the leading `/` showed up as a bare word (`nosl`) that no
1223
+ // `/nosl` invocation ever matched, and an EMPTY name produced a blank row.
1224
+ const trimmed = String(raw.name ?? '').trim();
1225
+ if (!trimmed)
1226
+ continue;
1227
+ const name = trimmed.startsWith('/') ? trimmed : '/' + trimmed;
1228
+ const key = name.toLowerCase();
1229
+ if (known.has(key))
1218
1230
  continue;
1219
1231
  // Remember the DYNAMIC name too: two entries that differ only by case
1220
1232
  // (`/foo` and `/FOO`) were both added, so the operator saw the same
1221
1233
  // command twice and the second was unreachable (a slash command is
1222
1234
  // resolved case-insensitively).
1223
- known.add(d.name.toLowerCase());
1224
- base.push(d);
1235
+ known.add(key);
1236
+ base.push({ ...raw, name });
1225
1237
  }
1226
1238
  return base;
1227
1239
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zames_pro",
3
- "version": "2.82.89",
3
+ "version": "2.82.91",
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": {