Tags: aohoyd/aku
Tags
feat(notify): toast notifications with variable-size rendering Add the in-app notifications system and its toast overlay: - internal/notify: bounded, mutex-guarded message store backing both the toast overlay and the aku-messages synthetic resource. Add dispatches its send callback on its own goroutine so it NEVER blocks the Bubble Tea Update loop (the unbuffered-channel deadlock fix). - internal/plugins/notifications: aku-messages resource plugin. - internal/ui/toaststack: top-right toast stack. Toasts shrink to fit their text up to min(40% cols, 60) wide, word-wrap onto up to min(30% rows, 6) lines, and truncate with an ellipsis beyond that; caps are terminal-proportional and computed per render. Tiny terminals render no toast rather than overflow. - config: notifications block (buffer size, max_visible, per-level timeouts); wiring in cmd/root.go; supporting msgs/statusbar changes. Includes comprehensive toaststack tests (shrink-to-fit, wrap, hard-break, height floor/ceiling/exact-boundary, proportional caps, size guards) and a regression guard that Add never blocks. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat(terminal): graceful remote shell termination on pane close Add Terminal.TerminateGracefully: best-effort coax the remote shell to exit on its own (Ctrl-C then a burst of Ctrl-D to peel nested shells) before the hard Close(), so pane-close/quit doesn't orphan the shell. Exposes DefaultGraceTimeout for callers and covers the race with a concurrent Close(). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat: pane UX fixes — scroll, split placement, move-pane, focus Four independent fixes in the TUI table/layout layer: - table: rewrite MoveUp/MoveDown around a minimal-scroll helper (scrollToCursor) so the viewport only scrolls when the cursor leaves the visible window — pressing up on the last visible row (or down on the first) no longer hides that row. Symmetric for both directions. - layout: AddSplit inserts the new pane at focusIdx+1 instead of appending, so a new split lands directly below the focused pane (vertical) or to its right (horizontal). - layout/commands: add MoveFocusedSplit reorder primitive and orientation-aware alt+shift+<arrow> move-pane bindings (vertical uses up/down, horizontal uses left/right; perpendicular axis is a no-op). MoveFocusedSplit releases detail-panel focus like FocusNext/FocusPrev. - layout: FocusNext/FocusPrev release detail-panel focus before moving split focus, so shift+up/down no longer highlights both borders. Adds unit tests across internal/table, internal/layout, internal/app, and documents the move-pane binding in README. Build, vet, and the full test suite pass. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
fix: address code review findings - Clear pendingRestart/pendingRestartGVR on ctrl+w overlay dismiss and reloadAll so a stale rollout-restart pending state cannot mis-route a later ConfirmResultMsg into the restart branch. - Surface a status-bar error when rollout-restart is invoked without a k8s client, matching edit/scale/exec. - Tighten restart_test.go: validate restartedAt with time.Parse instead of a "20" prefix, surface NestedStringMap errors, and add an empty- targets contract test. - Strengthen confirm-dispatch tests to assert against the message actually stored on the dialog (new ConfirmDialog.Message accessor), exercise the cmd returned from ConfirmYes end-to-end against a fake dynamic client, verify ClearSelection on ConfirmForce, and add no- focused-split / no-objects coverage. - Cover helm N=1 failure and N=2 partial-failure paths plus the portforward unknown-id case in TestExecuteDelete. - Add buildRestartConfirmMessage coverage for statefulsets/daemonsets and trie-scope coverage that R resolves to rollout-restart on deployments/statefulsets/daemonsets. - README operations bullet now reflects deployments/statefulsets/ daemonsets and multi-select for rollout restart. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
PreviousNext