This release adds 2 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
+14 more
Summary
AI summaryFixed JSON extraction bugs in facts and summary paths for reasoning models on local sidecar setups.
Full changelog
Hotfix for v0.5.3 — facts and summary extraction broken on thinking models
Three bugs in the OpenCode plugin's JSON extraction logic. All three only manifested with reasoning/thinking models on local sidecar setups.
What was broken
Bug 1 — Facts extraction silently failing on every exchange (latent since v0.4.8). The facts extraction path used a greedy regex that swallowed trailing markdown code fences. Models that wrap JSON in ```json ... ``` blocks broke JSON.parse() with Unrecognized token '\``'. Errors were logged as non-fatal so it was silently invisible — no facts ever landed in memory for fence-wrapping models.
Bug 2 — Summary/scoring path nested-brace fragility (latent). The summary path used a non-greedy single-match regex which stops at the first }. On responses with nested memory_scores: {...} objects or strings containing }, it captured a fragment and JSON.parse() failed with Expected '}'. Latent until per-memory scoring started returning nested objects in real exchanges.
Bug 3 — max_tokens too low for verbose reasoning models. Scoring max_tokens=2000 was sometimes insufficient for verbose summaries — output got truncated mid-string with no closing brace anywhere for any regex to find.
Fix
- New
extractJson()helper in the plugin — tries whole-text parse → greedy match → non-greedy multi-match validation. Handles backtick fences, nested objects, embedded brace characters in one place. - Both lanes (scoring + facts) refactored onto the helper.
max_tokensbumped: scoring 2000 → 4000, facts 1000 → 2000.
Verified end-to-end
Manual testing with a thinking sidecar model on LM Studio confirmed multiple consecutive exchanges with SUCCESS + SUMMARY stored + FACTS extracted + per-memory scoring, zero JSON Parse errors.
Sidecar model recommendation
Prefer a non-thinking sidecar model. Reasoning-by-default models emit their chain-of-thought into a separate reasoning_content field while the structured answer goes in content. With longer summaries the model sometimes runs over its token budget mid-reason, leaving content truncated or empty. The hotfix gives thinking models more room to finish and the parser recovers from most partial outputs — but model-side truncation ultimately can't be fixed in the plugin. Pick a non-thinking model in roampal sidecar setup to eliminate this class of failure entirely.
Plus: CI test isolation cleanup
Bundled with this release: a separate test-only commit consolidating Linux + Python 3.10 isolation fixes — XDG_CONFIG_HOME env-var leakage in cli tests, and a skipif for one async dedup test that hangs only on Linux + Python 3.10 (unrelated asyncio quirk; production code unchanged).
Migration
None required. Just pip install --upgrade roampal==0.5.3.1 and restart any running OpenCode session so the plugin reloads.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About roampal-ai/roampal-core
Outcome-based persistent memory for AI coding tools. Memories that help get promoted, memories that mislead get demoted. Works with Claude Code and OpenCode via hooks + MCP.
Related context
Beta — feedback welcome: [email protected]