* 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
* fix: invalid check in getWarningThreshold
* fix: invalid status
* feat: use dbus events instead of polling
* fix: invalid status again
* fix: dump version and set valid plugin API
* fix: add commandExists check
* fix: getColor function (warning color when not charging)
* feat: use upower instead of cat /sys
* feat: notify on error
* fix: cleaner code
* fix: use noctalia.tr for notification (not logs, intended)
* feat: migrate from dbus-monitor to gdbus (everything in one line)
* feat: use gdbus to init and update, parse only when needed
* feat: add label_content and optimisations
* fix: remove multiple commands check not needed anymore
* fix: update README and dump version
* fix: default data, warning_threshold check, floor percent
* Add Mihomo Control plugin
Monitor and control a Mihomo (Clash Meta) external controller from the
bar: live traffic graph, proxy mode, proxy-group management with latency
tests, and core restart. Works locally (127.0.0.1) or remotely via
host/port/secret settings.
* Add Chinese (Simplified) translation
* Add test-all latency button
Adds a Test all button next to the Proxy groups heading that runs latency
tests on every group sequentially, with a single summary notification.
* Unify traffic and proxy groups section styles
Give both sections the same card look: muted medium-weight heading on the
left, secondary info on the right, and proxy-group cards restyled as
bordered sub-cards inside the section.
* Polish proxy group cards
Show the selected proxy next to the bold group name (ECS > ecs-proxy),
move the expand chevron to the type/members row where the list opens,
and drop the list glyph from the card header.
* Decouple heights of paired group cards
Keep each card in a two-column row at its natural height instead of
stretching the neighbor when one is expanded.
* Use thumbnail generator to generate thumbnail
* mihomo-control: theme-aware panel colors
Use theme roles for traffic and latency colors so they stay readable in
light mode, and keep the status chip's green/amber/red identity with
darker light-mode shades.
* pulsar-mouse: make the per-state widget colors configurable
Both widgets hardcoded their state colors: error for a fault, secondary
while charging, error at the mouse's low-power threshold. The desktop
widget's one `color` setting only covered the normal state, and the bar
widget had no color setting at all.
Expose all four states (normal/charging/low/error) as `type = "color"`
settings on each widget, in the same shape battery-widget uses. Defaults
reproduce exactly what was hardcoded, so an existing install renders
identically until someone changes one.
The new settings are `advanced`; the desktop widget's pre-existing
`color` stays where it was so it does not disappear behind the toggle
for anyone already using it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* pulsar-mouse: rename the bar's normal-state key to normal_color
A bar widget's plugin settings share one TOML table with Noctalia's own
per-widget presentation settings, where `color` already exists ("Color
role for this widget's icon and label"). A plugin declaring `color`
there does not shadow it, it aliases it - one `color = "primary"` under
[widget.<id>] drove both pickers at once, so setting either silently
moved the other.
Renamed to `normal_color`, which also makes the retest unambiguous: the
glyph follows the plugin setting while Presentation's own Color picker
stays on Default.
The desktop widget keeps plain `color` - no clash there, and renaming it
would break existing configs.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
* feat(panel): remove full mode, rename compact to standard
- Remove panel-full entry (660×340) and all full-mode code paths
- Rename compact → standard across panel, settings, translations
- Restrict tile hover/click to icon+label only (no border hover)
- Shrink close button to 24×24 with 12px glyph
- Reduce standard section vertical padding to 4px
- Standard panel height: 290 → 260 (matches legacy at 260)
- Fix widget/shortcut/service toggle to respect panel-mode setting
- Update README with correct sizes and behavior
* added new thumbnail.webp
---------
Co-authored-by: Ahmed5Emad <ahmed5emad@users.noreply.github.com>
* gamer-mode: 0.7.0
Adds a monitor bar widget that renders live readings the way the shell's own
sysmon widgets do, with a flame band beneath them while gamer mode runs.
- Readings warm toward the highlight colour over the shell's own activity and
critical thresholds, so a monitor sitting beside a sysmon capsule group warms
in step with it.
- The flame is advected along a wandering wind and sharpened so it reads as
tongues rather than a smudge; the flare ignites and decays on an ease-out.
- The band's slot is reserved on each side of the readings, so toggling gamer
mode never moves a digit and the readings stay centred in the pill.
- Panel readings outrank their captions, progress fills warm at the same
thresholds, and the mark carries a load-reactive halo with a soft ember under
the header while the mode runs.
- The mark is redrawn and ships a dark and a light ramp.
* gamer-mode: tighten the README prose
* Add umedbazarov/ruh-vpn: VPN/proxy manager for sing-box
New community plugin: bar widget, panel, service and control-center
shortcut for managing SSH, VLESS, VMess, Shadowsocks and SOCKS5
connections through sing-box, with routing presets, custom rules,
system-proxy/TUN modes and a kill switch. The bundled Python backend
serves a loopback control API protected by a per-launch bearer token.
* Address review: sanitize kill-switch ruleset, scope TUN capability, fix mux error path, disclose DNS
- kill switch: only pre-resolved, canonicalized literal IPs enter the nft
ruleset; domains are resolved first and anything unparseable is dropped,
so subscription-supplied addresses can no longer inject nft syntax
- TUN: CAP_NET_ADMIN is granted to a plugin-private copy of sing-box in a
0700 directory instead of the shared system binary; the copy is refreshed
(clearing the cap) when the system binary changes, and the legacy grant
on the shared binary is removed in the same polkit prompt
- fix NameError in the mux startup failure path (undefined mux_name) that
hid the log tail and skipped teardown
- README: disclose plain-UDP DNS endpoints (8.8.8.8 via tunnel, 223.5.5.5
direct in rules mode) alongside the TUN DoH endpoint
---------
Co-authored-by: Umedjon Bazarov <170195993+UmedjonBA@users.noreply.github.com>
* 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 nilsonlinux/link-ip-monitor v1.0.0
* Add nilsonlinux/link-ip-monitor v1.0.0
* Update plugin ID in README.md
* Rename project to link-ip-monitor and update ID
Updated the project name and ID in the README.
* Update plugin ID and command syntax in README