* update(procmon): fix windowed table follow-scroll & row sizing`
* Update plugin.toml
* Update README.md
* fix(procmon): always render list body as scroll to stop bottom clipping
0-result search switched the body from ui.scroll to a bare ui.row; when
results returned the row->scroll switch left the flexGrow viewport stuck
short, clipping bottom rows. Use ui.scroll with a shared key in both
branches so the tree keeps one stable scroll node.
* feat(plugin): OpenCode Companion beta.8 upgrade + streaming/overflow
fixes
Upgrade to plugin API 21 and reverse the chat so the newest message sits
at the bottom with auto-scroll:
- panel: reverse message list to oldest-first; pin the scroll to the
bottom via stickToBottom, jump there on open and session switch via
scrollToBottomRev, and clear the stick flag in onScroll when the user
scrolls away so reading history doesn't yank them down.
- composer: enable submitOnEnter so Enter sends and Shift+Enter inserts
a
newline; update en/vi placeholder and send-tooltip strings.
- panel: render assistant replies as markdown (headings, lists, tables),
keeping user messages as plain labels.
Fix runtime errors surfaced during use:
- panel: pin markdown width to WRAP — ui.markdown has no maxWidth prop,
so
a bare flexGrow left it unconstrained and single-line text overflowed.
- panel: wrap fenced code blocks in monospace labels with a maxWidth —
noctalia's MarkdownView never wraps code, so long bash/code lines
spilled outside the panel. Text outside code fences stays markdown.
- panel: coerce onScroll(offset, maxOffset) args with tonumber — the
reconciler passes them as strings, raising "attempt to compare number
<= string".
- service: handle message.part.updated / message.updated streaming via
throttled reload; acknowledge message.part.delta without reloading
(the
server emits one per token, and reloading on each decodes the whole
history and blows the async callback CPU budget in json.decode).
- service: handle session.updated / session.diff with a throttled
session
reload so auto-generated titles stay current in the chooser.
Verified with luac syntax checks and a standalone split_markdown test
(5 cases) and JSON validation of the translation files.
* update version to 0.2.0
* Add procmon plugin with live process panel
New Noctalia plugin: bar widget shows CPU/RAM usage and process
count; floating panel has a sortable, searchable process table
with per-process kill. Background service samples ps and /proc
stats and publishes via plugin state.
* Throttle data-driven panel renders
Rebuild table at most every 500ms to stay within the panel update
CPU budget. User interactions still render immediately; only state
watches and the tick go through maybeRender().
* Update procmon deps and fix timestamp precision
Document head, grep, and cat as required commands. Correct refresh
interval default to 1000 ms. Sample refreshedAtMs in milliseconds.
* Add keyboard navigation and reduce CPU sampling
- Panel: arrow keys move cursor, Ctrl+D kills selected, Ctrl+F focuses
filter
- Service: sample /proc stats every 1s, ps every 2s; 2s render floor
- Widget: handle vertical bars, truncate text, use valid theme color
- Bump version to 0.4.0, plugin_api 13
* Add OpenCode Panel plugin
Introduce initial implementation of the OpenCode Panel plugin.
This commit includes:
- Bar widget for status and quick actions.
- Chat panel with session selection, message history, and input.
- Background service for OpenCode server management, SSE event
handling, and state persistence.
- Plugin configuration, documentation, and internationalization.
* Refine session chooser UI layout
Remove an unnecessary spacer and apply top-justification to improve
vertical alignment. Add a subtle background fill to the session list.
* Introduce session search in chooser
Enable live filtering of sessions in the chooser. Matches against
title, slug, ID, and directory. Search is case-insensitive.
* Support multi-question agent requests and clear composer
Implement multi-question agent replies by accumulating choices locally.
A "Submit" button becomes enabled only after all questions are answered.
The chat composer clears its text after sending by updating its key,
forcing the UI to re-render an empty input field.
Updated translations for send hints and question submit button.
* Add UI mode setting for compact layout
Introduce a `ui_mode` setting (Full/Compact) that dynamically adjusts
panel
layout. Compact mode reduces padding, font sizes, and gaps, hiding some
secondary details to minimize the panel footprint. Layout metrics
recompute on every render based on this setting.
* Delete opencode-panel
* Update thumbnail.webp
* Render chat messages newest-first
Newest message shows at top. Scrolling down reveals older messages.
This avoids scroll offset resets on re-mount in older shell APIs.
Thinking bubble now appears above the newest message.
* FEAT: Add panel layout setting
Provide option for panel to fill right side or appear compact near
click.
Introduces a new panel entry for the "fill right" mode.
* Rename plugin to OpenCode Companion
Update plugin ID, panel entries, IPC commands, and state paths.
* Only send model override when known
Stale default_model now falls back to no override instead of failing
every turn. Warn when configured default unavailable.
* Update service.luau
* fix(opencode-companion): secure terminal open, publish MCP status,
respect auto_start
- Shell-quote host and session id in the "open in terminal" command so a
crafted server_host cannot inject extra shell commands
- Publish opencode.mcp_status and render it as a collapsible footer
(previously declared but never observable)
- Honor auto_start: skip managed-server start on load when set to false
- Fix broken thumbnail link in README (assets/thumbnail.webp ->
thumbnail.webp)
* fix Terminal command injection,MCP status publication and UI
* Add procmon plugin with live process panel
New Noctalia plugin: bar widget shows CPU/RAM usage and process
count; floating panel has a sortable, searchable process table
with per-process kill. Background service samples ps and /proc
stats and publishes via plugin state.
* Throttle data-driven panel renders
Rebuild table at most every 500ms to stay within the panel update
CPU budget. User interactions still render immediately; only state
watches and the tick go through maybeRender().
* Update procmon deps and fix timestamp precision
Document head, grep, and cat as required commands. Correct refresh
interval default to 1000 ms. Sample refreshedAtMs in milliseconds.
* Add 9Router panel plugin
This commit introduces the initial version of the 9Router panel plugin.
It provides a Noctalia panel to manage 9Router model combos directly
from the bar, without requiring the web dashboard.
Key features:
- List, create, rename, and delete model combos.
- Reorder models within a combo via drag-and-drop.
- Change combo routing kind (fallback, round-robin, fusion).
- Search and filter combos.
- Supports 9Router dashboard authentication via CLI token or password.
Includes a bar widget showing connection status, a full UI panel,
and a background service to interact with the 9Router REST API.
Translations for English and Vietnamese are included.
* Rename 9Router Panel to 9Router Control
Update plugin IDs, IPC commands, and internal references.
* Quote shell args in service commands
Add shell_quote() for URLs, bodies, and file paths passed to
noctalia.runAsync. Declare required external commands in plugin.toml
and document them in the README.
* Add Quick Shell plugin for launcher commands
Introduces `/qs` launcher prefix to run shell commands in an interactive
terminal. Features dynamic shell completions (Fish/Bash), command
history, user snippets, and directory navigation.
* Rename quick-shell plugin to shell command plugin
* Update thumbnail.webp
* Document shell dependencies and filter completions by current word
Filter bash compgen completions to the current word being typed. Declare
`sh`, `ls`, `fish`, and `bash` as plugin dependencies.