From 6f2255946a834f2458613450533cd2906eb31e7d Mon Sep 17 00:00:00 2001 From: Agando Date: Tue, 27 Oct 2026 14:59:06 +0100 Subject: fix(newos4): bound one turn's tool context, honest skill-create, quarantine a corrupt memory graph MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The three items the last review and probes left open, each with a test that is red on HEAD. - MAINT-023 (module-aiassist.js): one agentic turn grew without limit — every role:'tool' body was pushed verbatim and only this.context was trimmed BETWEEN turns (measured 6 -> 112 705 tokens across 8 model calls against maxContextTokens 12 000). Observations are now clipped to maxToolResultChars (6 000) with a note saying how much was withheld and to re-read with offset/limit, and _boundToolContext() elides the oldest tool bodies once the running total passes toolContextBudgetChars (24 000), always keeping the newest 4 verbatim. The ceiling is turn-independent: the same ~26 k chars at 8 turns and at 20. - MAINT-024 (modules/ext/skill-pack-core.js): the command printed "✅ Skill created" with fs.writeFile()'s boolean discarded (probe: fresh VFS, success printed, no file), stripped invalid characters instead of rejecting the name (My-Skill -> y-kill, DevOps_Thing -> evpshing), and treated an unreadable /path argument as the skill body. Now: kebab-case is validated (uppercase normalises and the final name is reported; anything else is refused), /skills is created on first use, the write and index results are checked, and an unreadable body path is an error. - MAINT-003 (module-memory-graph.js): a corrupt store looked exactly like a fresh install — fsReadJSON returns null on a parse failure, so 85 nodes could vanish with no warning and no copy. The probe confirmed the loss: seed 6 nodes, truncate nodes.json and export.json, reload -> 1 node, no message, nothing in .trash. _quarantineCorrupt() now keeps the unreadable file as .corrupt, warns, and then loads from whatever remains. Tests: test-tool-context-bound.js (11), test-skill-create.js (16), test-memory-graph-recovery.js (8). RED on HEAD: tool-context crashes on _clipToolResult (exit 1), skill-create 16 assertions fail on the missing file/index, memory-graph B1/B2/C1 fail (no warning, no .corrupt copy). Suite now 13/13 files green; maintain --fix reports "node tests 13/13 pass". Live on v4.6.107: skill-create My-Skill -> ✅ "my-skill"; DevOps_Thing -> Invalid skill name; /does/not/exist.md -> Cannot read skill body; only my-skill in the index. --- main.html | 6 +- modules/core/core-bundle.js | 69 +++++++++++++++++++- modules/core/module-aiassist.js | 44 ++++++++++++- modules/core/module-loader.js | 2 +- modules/core/module-memory-graph.js | 25 ++++++++ modules/ext/skill-pack-core.js | 37 ++++++++--- modules/test/test-memory-graph-recovery.js | 90 ++++++++++++++++++++++++++ modules/test/test-skill-create.js | 100 +++++++++++++++++++++++++++++ modules/test/test-tool-context-bound.js | 93 +++++++++++++++++++++++++++ 9 files changed, 450 insertions(+), 16 deletions(-) create mode 100644 modules/test/test-memory-graph-recovery.js create mode 100644 modules/test/test-skill-create.js create mode 100644 modules/test/test-tool-context-bound.js diff --git a/main.html b/main.html index a7c7b04..cf782e4 100644 --- a/main.html +++ b/main.html @@ -1349,13 +1349,13 @@ - + - + - +