Skip to content

Release 0.1.34: Kubernetes panel, server monitor, network discovery, import expansion#59

Merged
thangnm93 merged 18 commits into
masterfrom
develop
Jun 9, 2026
Merged

Release 0.1.34: Kubernetes panel, server monitor, network discovery, import expansion#59
thangnm93 merged 18 commits into
masterfrom
develop

Conversation

@thangnm93

@thangnm93 thangnm93 commented Jun 9, 2026

Copy link
Copy Markdown
Collaborator

Summary

Release PR rolling up the unreleased develop work into master as v0.1.34.

Features shipped in this release

DevOps / Infra tooling

  • Kubernetes panelKubernetesPanel widget in the DevOps plugin: context switcher, streamed kubectl logs -f, and 1-click kubectl port-forward via a new ContainerService.execStream persistent exec channel. The K8s tab in ContainersScreen now delegates fully to this widget.
  • Server monitor panel — per-host live dashboard (CPU / memory / disk / uptime / listening ports / firewall status) in a draggable bottom sheet; polled every 5 s via a single SSH exec with sentinel markers; FirewallStatusService auto-detects ufw / iptables / nftables.
  • onOpenBrowser DevOps callbackDevOpsPluginConfig gains onOpenBrowser so the host app handles in-app browser navigation from DevOps tools without a hard dependency on the WebTools plugin.

Terminal UX

  • Keyword highlighting — user-defined regex rules tint matching terminal output at paint time in the xterm fork; defaults: Error/Warning/Fail (red/yellow/cyan); toggle + rule list + add/edit dialog + color picker in Settings → Terminal and the terminal config side panel.

Host management

  • Network discovery — scan the local network for SSH/RDP hosts: mDNS (_ssh._tcp, _rdp._tcp) + configurable TCP subnet scan; results in a bottom sheet with one-tap Add Host.
  • Import sources expansion — 9 import formats with a source-picker grid UI; new formats: PuTTY .reg, MobaXterm .mxtsessions, SecureCRT XML, Ansible INI, WinSCP .ini, Termius JSON, SSH URI (one ssh:// per line).
  • Known hosts import — import ~/.ssh/known_hosts into the app store; skips duplicates and hashed entries.

Host panel

  • Password prefill — password field now pre-populated (obscured) when editing an existing password host; previously always appeared empty.

Performance / memory

  • K8s forwardContainerService.startPodPortForward listener early-returns after Forwarding from is matched, stopping unbounded log-line accumulation for long-lived forwards.
  • Hosts dashboard — memoize sort via _memoSortedHosts (identical-element guard); prune stale selections via a Set lookup. O(n log n) per keystroke → amortized O(1) for unchanged inputs.
  • External editExternalEditService._startWatcher cancels any existing watcher for the same (host, remote path) before creating a new one, preventing duplicate poll timers on re-open.

Test fixes

  • Fixed 19 pre-existing test failures: the five host_detail_panel_* harnesses never provided Provider<SshService>, which _loadExistingPassword reads in a post-frame callback. Added the provider to each harness.
  • Added coverage for the external-edit watcher dedupe and the K8s changes.

Docs / assets

  • CHANGELOG, README, and roadmap bumped to 0.1.34.
  • K8s panel design + implementation plan docs.
  • Feature screenshots grouped by section + integration test.
  • App icon assets refreshed.

Verification

  • flutter analyze → clean
  • flutter test+1337 all passing (was 1318 pass / 19 fail before the harness fix)

🤖 Generated with Claude Code

thangnm93 added 17 commits June 8, 2026 22:48
…ration test

- Add integration_test/feature_screenshots_test.dart: captures all
  major UI screens from the Flutter render tree (no Screen Recording
  permission needed); backs up and restores user prefs around the run
- Add 14 new screenshots organised into subfolders by feature group
  (terminal-ssh, sftp, port-forwarding, credentials-security,
  settings, plugins, audit-recording)
- Reorganise README Screenshots section by feature group with HTML
  tables; retain legacy flat screenshots for features requiring live
  connections (SSH terminal, DevOps, Web Tools, RDP workspace)
- Add .claude/skills/yourssh-screenshots skill for repeatable
  screenshot refresh workflow
Password field was always initialized empty, causing users to think
their saved password was lost on every edit. Now loads the stored
password from Keychain after the first frame so the field shows it
is set (obscured), without requiring the user to re-enter it.
- Add _stopped flag to guard against concurrent stop() calls
- Wrap cleanup sequence in nested try-finally to ensure all steps run
  even if an earlier step throws (order: _serverSub → _server → _closers → _kubectlSub)
Adds context optional param to listPods, streamLogs (kubectl logs -f via
execStream), startPodPortForward (kubectl port-forward + local ServerSocket
piped through SSH), and _pipeK8s helper. Also fixes K8sForwardHandle
constructor to use public named params for cross-library construction.
Replace inline K8s pod list, namespace controls, and execPod logic with
KubernetesPanel; add onOpenBrowser param to ContainersScreen.
- container: stop accumulating kubectl port-forward log lines once the
  forward is confirmed. `lines` is read only for the pre-ready error
  message, so appending after `ready` completed grew the buffer
  unbounded for the lifetime of a long-lived forward.
- hosts dashboard: memoize the sort and filter the sorted result, so each
  search keystroke is an O(n) filter instead of an O(n log n) re-sort
  (sortHosts is a total order, so filter-after-sort is equivalent). Prune
  stale selections via a Set lookup instead of O(selected * hosts).
- external edit: dedupe watchers per (host, remote path) so re-opening a
  file replaces its watcher instead of stacking a duplicate mtime-poll
  timer for the lifetime of the screen.
HostDetailPanel._loadExistingPassword reads context.read<SshService>()
in a post-frame callback when editing an existing password host. The
five host_detail_panel_* test harnesses never provided the service, so
every test that opened an existing host threw ProviderNotFoundException
(19 failures). Production always supplies it via main.dart. Add a
Provider<SshService> to each harness.
- CHANGELOG: add Kubernetes panel, onOpenBrowser DevOps callback, and
  perf fixes (sort memo, watcher dedup, k8s log accumulation) to 0.1.34
- README: add keyword highlighting, server monitor panel, network
  discovery, import sources (9 formats), known hosts import, K8s panel;
  check off Docker/K8s exec in roadmap phase list
- Roadmap: bump current version 0.1.33 → 0.1.34; replace (develop)
  labels with (0.1.34); add Kubernetes panel to shipped; retire P0
- App icon assets updated
@thangnm93 thangnm93 changed the title Release: Kubernetes panel, perf/memory fixes, test harness fixes Release 0.1.34: Kubernetes panel, server monitor, network discovery, import expansion Jun 9, 2026
- add app/assets/logo.png (2048px master) and logo-readme.png (256px, ~23KB)
- point README header at logo-readme.png at width 120 for fast page load
- remove rolled-back feature bullets and uncheck Phase 4 Docker/K8s item
@thangnm93 thangnm93 added enhancement New feature or request documentation Improvements or additions to documentation labels Jun 9, 2026
@thangnm93 thangnm93 self-assigned this Jun 9, 2026
@thangnm93 thangnm93 merged commit 30436d4 into master Jun 9, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant