From 4a30a78061de52c8eca683364d063ed4af68d559 Mon Sep 17 00:00:00 2001 From: geobelsky Date: Thu, 25 Jun 2026 08:59:36 +0000 Subject: [PATCH] release: CLI v0.6.3 + extension v0.1.8 CLI: bumps 0.6.2 -> 0.6.3. Reliability release for the save-tool write path. Ships the axme_save_memory / axme_save_decision empty-args mitigations from PR #155: custom required-field error messages, hardened tool descriptions (anti-batch + worked example), and a clarified SAVE-TOOL RULE in the server instructions (parallelism is for read tools only). No schema loosening, no behavior change for valid calls. 613/613 tests. Extension: bumps 0.1.7 -> 0.1.8. Tracks the new CLI version (the fix is in server.ts, which the extension bundles). --- CHANGELOG.md | 11 +++++++++++ extension/package.json | 2 +- package.json | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 611eaaf..691cf10 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,17 @@ ## [Unreleased] +## [0.6.3] - 2026-06-25 + +Reliability release for the `axme_save_memory` / `axme_save_decision` write tools, driven by two independent agent sessions that hit the same failure mode in production. + +### Fixed + +- **`axme_save_memory` (and `axme_save_decision`) repeatedly failed with `"expected string, received undefined"` on every required field** (#155). Two agent sessions independently hit this; the args object arrived empty (`{}`). Controlled testing confirmed it is **not** a server/handler/schema defect — every call whose arguments actually reached the server persisted correctly, and `axme_save_decision` worked in the same session with the same client. Root cause is a client-side generative slip: the agent emits the tool-call shell while deferring the heavy free-text fields, and the fill never happens. `axme_save_memory` is uniquely prone because it combines the heaviest required surface among the axme tools (enum `type` + two large free-text fields) with an over-generalized "batch axme calls in parallel" habit inherited from the read-tool instructions. The MCP SDK validates against the zod schema **before** the handler runs, so an empty payload never reaches our code and echoing the received keys would require loosening the advertised schema (which would worsen the root cause by hiding the required fields from the model). Three text-only mitigations instead, no schema loosening and no behavior change for valid calls: + - Custom zod v4 `{ error }` messages on the required fields of `axme_save_memory` (`type`/`title`/`description`) and `axme_save_decision` (`title`/`decision`/`reasoning`). Instead of a bland "received undefined" (which the first agent misread as "the server lost my arguments" and retried 9× before filing a server-bug report), each field now states it is REQUIRED, must be composed in the same call, and that an empty/deferred emission is the usual cause. + - Hardened tool descriptions: explicit "call standalone, not in a parallel batch; include all required fields in the same call" plus a worked example arguments object for `axme_save_memory`. + - Clarified server instructions: parallelism is for the READ tools (`axme_oracle`/`axme_decisions`/`axme_memories`) only; a new SAVE-TOOL RULE states `axme_save_memory`/`axme_save_decision`/`axme_update_safety` are called one at a time with all required fields composed in that same call. + ## [0.6.2] - 2026-06-11 Hotfix release on top of v0.6.1, driven by the full functional QA pass of extension 0.1.6 on Cursor/Linux (23 of 25 executable checks passed; this release fixes the one real bug found). diff --git a/extension/package.json b/extension/package.json index 4c529f1..9228691 100644 --- a/extension/package.json +++ b/extension/package.json @@ -2,7 +2,7 @@ "name": "axme-code", "displayName": "AXME Code", "description": "Persistent memory, decisions, and safety guardrails for Cursor, GitHub Copilot, Cline, Continue, Roo Code, Windsurf, and VS Code chat agents", - "version": "0.1.7", + "version": "0.1.8", "publisher": "AxmeAI", "repository": { "type": "git", diff --git a/package.json b/package.json index 37a5d1a..a654b98 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@axme/code", - "version": "0.6.2", + "version": "0.6.3", "description": "Persistent memory, decisions, and safety guardrails for Claude Code", "type": "module", "main": "./dist/server.js",