v2.18.0
Changed
- Web UI completely redesigned with OpenCode manpage design system — The Memory Explorer dashboard has been rebuilt from the ground up. The previous Matrix/CRT-terminal aesthetic (green-on-black,
#00ff00phosphor, ASCII box-drawing titles┌─ ─┐) has been replaced with a warm, readable manpage design system derived from the OpenCode brand identity. All colors, spacing, radius, and typography are now CSS custom properties (:roottokens) instyles.css, making the design system easy to extend without hardcoding hex values. Key changes:- styles.css — Full rewrite (~1842 → ~1050 lines). Warm cream canvas (
#fdfcfc), near-black ink (#201d1d), JetBrains Mono / Berkeley Mono font stack, 4px radius on interactive elements, 0px on containers, hairline borders (rgba(15,0,0,0.12)), no shadows or gradients. Apple Human Interface Guidelines semantic ramp (accent#007aff, danger#ff3b30, warning#ff9f0a, success#30d158) used for in-product interactive states. - index.html — Rewritten SPA shell with clean title (no ASCII box-drawing),
[+]bracket markers in section headers, grouped header actions, clean tab layout with underline-on-active. All ~70 element IDs preserved (app.js binding contract). - app.js — Radar chart hardcoded colors (
#ccc,#3b82f6,#666) replaced with DESIGN.md tokens (#9a9898ash,#007affaccent,#646262mute).updateSectionTitle()box-drawing chars replaced with[+]bracket markers. Application logic unchanged. - i18n.js — Six box-drawing strings (English + Chinese) replaced with
[+]bracket markers. No ASCII box-drawing characters remain. - src/web/AGENTS.md — Updated to document the design system, token convention, and the
[+]/[-]/[x]bracket-marker usage. - Fixed latent bug: timeline section CSS used undefined custom properties (
--text-color,--border-color,--primary-color,--bg-color,--card-bg) that were never declared, causing broken/inherit styling. Now uses proper DESIGN.md tokens.
- styles.css — Full rewrite (~1842 → ~1050 lines). Warm cream canvas (
Contributors
No community contributors for this release. All work by @ZeR020.
Fixed
- API add-memory bypassed dedup and conflict detection (#feature-9-10) —
handleAddMemory(the web API POST/api/memoriespath) re-implemented the embedding/insert orchestration instead of delegating tomemoryClient.addMemory, so memories added via the Web UI or REST API skipped ingest-time deduplication (checkDuplicateAtIngest) and conflict detection (detectConflicts) that the in-agentmemorytool gets. Two near-identical memories added via the API would both be stored; the same content added via the tool would merge. Fixed by routinghandleAddMemorythroughmemoryClient.addMemory, deleting ~45 lines of duplicated orchestration. The API path now returns{ duplicate: true }when a near-duplicate is merged, matching the tool path's contract. - Conflict heuristic missed substitution-based contradictions (#feature-9) —
checkContradictionHeuristiconly triggered on negation patterns (not,never,removed,disabled,un-, etc.). Statements like "Authentication uses JWT tokens instead of session cookies" never reached the LLM contradiction check because "instead of" is not a negation word. AddedSUBSTITUTION_PATTERNS(instead of,replaced by,rather than,switched to/from,migrated to/from,no longer,moved to/from) totext-analysis.ts; the heuristic now opens the LLM gate when one memory has a substitution phrase and the other shares >30% key-word overlap. - Web UI crashes completely if a vendor script fails to load —
app.jscalledmarked.setOptions()at top-level script execution (before any function is defined) andlucide.createIcons()insiderenderMemories()/DOMContentLoaded. If any vendored library (lucide,marked,DOMPurify,jsonrepair) failed to load — missing file, stale install, network race — theReferenceErrorkilled the entire script: no functions defined, no event handlers attached, no API calls made. The UI froze at its initial HTML state ("Initializing...", "Total: 0", all tabs unresponsive). Fixed by guarding all top-level and call-site library accesses (typeof marked !== "undefined",safeCreateIcons()wrapper for all 8lucide.createIcons()call sites,renderMarkdownfalls back toescapeHtmlwhenmarked/DOMPurifyare missing). The UI now degrades gracefully: memories and transcripts load and display as plain text, tabs work, even without the vendor scripts.
Contributors
No community contributors for this release. All work by @ZeR020.
Full Changelog: v2.17.5...v2.18.0