Releases: SquirrelRat/OpenCode-SideChat
Releases · SquirrelRat/OpenCode-SideChat
v1.2.0 — History, alignment, clickable UI, and 18 bug fixes
[1.2.0] — 2026-05-20
Added
- History persistence system — side sessions saved to
~/.local/share/opencode-sidechat/history.json(50-entry FIFO) - History viewer —
Alt+Htoggles history list with date-grouped entries; click to view read-only transcript - Inline tool-call rendering — collapsible one-liners (emoji + tool name + title + status + duration) expandable to show params and truncated output
- Panel position config —
positionoption insidechat.jsonc:"bottom-right"(default),"bottom-left","top-left","top-right" - All footer items clickable — Clear, Thinking, Model, History, Back, and Delete now respond to mouse clicks
- Delete keybind —
Alt+Ddeletes the currently viewed history entry (replaces non-functionalDel) - Empty
<text>placeholders replaced with non-breaking spaces to preserve layout
Fixed
- Session destroyed on panel toggle close — now preserved across open/close cycles; only explicit
Alt+Cor plugin dispose destroys it - Session leak on rapid
Alt+Cspam — addedclearingguard flag preventing concurrent clear execution - Duplicate history entries on repeated toggle —
saveEntrynow updates in-place by session ID and preserves originalcreatedtimestamp [object Object]instead of typed message —ContentChangeEventwas an empty object; switched to reading.valuefrom the input ref directly- Input not growing with new lines — fixed by the same
ContentChangeEventfix; textarea now correctly counts\nfor height - Panel height frozen on terminal resize —
terminalHeightandpanelMaxHeightconverted fromconsttocreateMemo()for reactivity - Theme frozen on swap —
themeconverted tocreateMemo()so it reacts to theme changes - History selector unresponsive —
onMouseDownmoved from<text>(not handled by OpenTUI) to parent<box> - Input handling — reverted multi-line textarea to single-line
<input>for reliable Enter-to-send behavior - History entry selection on click — changed from non-functional
onClicktoonMouseDownon<box> - Session re-open after close —
sessionInitPromisenow reset on session destroy so next open creates a fresh session - All
as anycasts in tool-call state processing — replaced with properRichToolStatetype with single boundary assertion inputValuenot reactive — converted from mutableletto SolidcreateSignal- Stale
historyMode,historyEntries,selectedHistoryIdfields inSideDialogStatetype — removed (managed as separate signals) providerfield always empty in history entries — removed unused parameter and field fromHistoryEntry- History file I/O blocking TUI —
loadHistory,saveEntry,deleteEntrymigrated fromfs.*Synctofs.promises - Empty
catch {}ingetAvailableToolIDs— now logsconsole.warn - Default model tied to one provider — changed from
"opencode/deepseek-v4-flash-free"tonull renderThinkingreturn typed asany— changed to explicitJSX.Element- Magic number
6in history title truncation — extracted to namedHISTORY_TITLE_PADDINGconstant - Cached tool IDs never invalidated — cleared on
handleClearto reflect runtime tool changes - History footer displayed
alt+hinstead ofAlt+H— now usesformatKeybind()consistently - History footer showed hardcoded
"Del"— now usesformatKeybind(deleteKeybind)matching actual keybind
Changed
- SideChat.tsx reduced from 758 to 507 lines — extracted
RenderMarkdown,renderInlineMarkdown,searchSpecialCharto newMarkdown.tsx; extractedRenderHistoryDetailandformatTimeto newHistoryDetail.tsx - All keybind labels use
formatKeybind()for consistent display formatting handleToggleHistoryno longer loads history when exiting history mode (correct direction check)handleClearnow invalidatescachedToolIDsandcachedPromptResultOverlayStatewidened —onSelectHistoryEntryacceptsstring | undefinedfor deselection
Config
- New
positionoption —"bottom-right"/"bottom-left"/"top-left"/"top-right" - Default
modelchanged tonull(was"opencode/deepseek-v4-flash-free")