SAMURAI 4.4
Released July 1, 2026.
Features
- API: register gated /api/devices/:id/terminal WS route
- Changes: collapse long “Seen on” list behind a Show-more toggle
- Connectors: Discord incoming-webhook client
- Forensics: animate result row expand/collapse (Collapse height-glide + rotating chevron)
- Forensics: EOF-framed per-command SSH collector + classify
- Forensics: gated Forensics tab — collect, view, download bundle
- Forensics: persist job across refresh + confirm dialog on collect
- Forensics: platform-aware command descriptor + output classifier
- Forensics: start/status/bundle routes (gated) + collect+download audits + TTL sweeper
- Forensics: transient in-memory job store (owner-bound, TTL)
- Forensics: zip bundle + manifest with per-file + overall SHA-256
- Frontend: add gated Terminal tab to router/switch panels
- Frontend: xterm.js read-only device terminal component
- HA: /api/cluster status + promote endpoints
- HA: add cluster.manage permission
- HA: cluster models + collection registration
- HA: cluster service — role derivation + heartbeat/refresh loops
- HA: cluster store (seed/heartbeat/list/set-active)
- HA: gate background sync/compliance/monitor loops on cluster.IsActive
- HA: global passive-mode banner
- HA: High Availability tab cards default collapsed
- Handlers: read-only live SSH terminal WebSocket handler
- HA: read NODE_ID (hostname fallback)
- HA: remove-node button + DELETE /api/cluster/nodes/:id
- HA: RequireActive guard on on-demand device-data writes
- HA: Settings High Availability tab (roster + promote)
- HA: useCluster status/promote hook
- Integrations: add Jira + custom authenticated callback sinks
- Integrations: disable config inputs while an integration is off
- Integrations: Discord sink with severity-colored embed
- Integrations: event spine — domain/events + Sink registry + dispatcher
- Integrations: Microsoft Teams notification channel via MessageCard
- Integrations: move Email/Telegram transport into Integrations tab
- Integrations: phase 1 — route change-email through the event bus
- Integrations: phase 2 — Telegram outbound rebuild + unified change producer
- Integrations: phase 2 (cont.) — Telegram outbound rebuild + unified producer
- Integrations: phase 3 — merge Notifications into Integrations
- Integrations: phase 3 (cont.) — Integrations cards + remove Notifications tab
- Integrations: register Discord in catalog/settings/allsinks
- Integrations: Settings Integrations tab — Slack/TheHive + on-demand trigger
- Integrations: show “Configured / Not set” status for secret fields
- Integrations: Slack + TheHive connectors/sinks + REST + on-demand trigger
- Notifications: add custom notification hook + banner
- Notifications: move Custom-notification enable toggle into the card header
- Notifications: unified in-flow banner stack + Settings card
- Rbac: add device.forensics permission (admin-only, secret trust)
- Rbac: add device.terminal permission for live SSH terminal
- Settings: animate Integrations rows + a11y-correct trigger + tests
- Settings: apply claude.ai/design polish to Integrations tab
- Settings: brand logos on Integrations tab cards
- Settings: consolidate proxy sections into one Outbound proxy card
- Settings: Discord integration logo + status label
- Settings: lift section primary controls into card headers
- Settings: move LDAP enable toggle into the card header
- Settings: redesign Integrations tab as collapsible grouped list
- Settings: restyle TabSaveBar to the design mockup floating glass pill
- Settings: roll collapsible card design out to General/Sync/Logging
- Settings: roll collapsible card design out to License + Access
- Settings: roll Integrations card design out to Network & Security
- Settings: Sync tab snapshot retention in days, not count
- Settings: Users table — email column + sortable headers
- SSH: persistent read-only terminal session primitive
- Sync: add snapshotCutoff helper for time-based retention
- Sync: default snapshot_retention_days to 180
- Sync: time-based snapshot retention with always-keep-latest floor
- Terminal: adopt usePanelTerminal in router/switch panels
- Terminal: compact minimized pill + confirm-on-close for floating window
- Terminal: confirm dialog on open (no auto-connect) + align Forensics tab design
- Terminal: floating-window geometry helpers + tests
- Terminal: FloatingWindow + placement-aware DeviceTerminal + usePanelTerminal host
- Terminal: full-height layout, font-size dropdown (persisted), copy + download
- Terminal: list candidates on ambiguous Tab via ? fallback
- Terminal: polish UI (toolbar, status, history) + fix arrow-key input corruption
- Terminal: pop-out / floating window — PanelTerminal component
- Terminal: proper Ctrl+C, empty-Enter, copy/paste handling
- Terminal: server-mediated Tab completion probe
- Terminal: show-prefix guard + replay-based completion parser
- Terminal: Tab key requests device completion + applies result
- Terminal: WriteRaw primitive + completer capture coordinator
- VMware vCenter: attribute changes via event-type allowlist classifier; drop privilege-check recovery
- VMware vCenter: Changes tab ‘Changed by’ summary from per-item stamps, not transaction firehose
- VMware vCenter: gate raw audit_admin_batches behind include_audit
- VMware vCenter: recover actor from privilege-check audit events when stamping changes
- VMware vCenter: remove top ‘Changed by’ summary block, match Palo/all vendors
Bug Fixes
- A11y: darken light-mode —muted-foreground to meet WCAG AA contrast
- Changes: reliable keyframe collapse animation + default-collapsed + per-card consistency
- Ci: restore linux optional deps in frontend lockfile (#756 recurrence)
- Cisco FMC: show “any” for empty networks instead of injected 0.0.0.0/0
- Forensics: don’t evict running jobs; bind bundle/status to job’s device; doc ctx choice
- Forensics: hard per-command wall-clock cap so tech-support can’t hang
- Forensics: isolated SSH connection per command (IOS-XE closes conn on exit)
- Forensics: surface read truncation so partial captures aren’t certified complete
- HA: gate cluster status polling on cluster.manage to avoid 403 spam
- Infra: point nginx SPA root to the D: build path
- Integrations: don’t leak Teams webhook URL into logs on delivery failure
- Integrations: use official full-colour Teams logo in card header
- Integrations: use the sticky save bar like every other Settings tab
- Settings: collapse every settings card by default
- Settings: collapse/expand animation via grid-rows + forceMount
- Settings: collapsed-card-shaped loading skeleton
- Settings: harden save-bar fill chain to pure flex-grow
- Settings: Integrations loading skeleton matches the redesigned layout
- Settings: keep save bar Discard/Save visible (disabled) when clean
- Settings: lighten card-header icon-box border
- Settings: make About section content full width
- Settings: make card-header edges clickable for expand/collapse
- Settings: make integration card expand/collapse actually animate
- Settings: make the floating save bar always visible again
- Settings: match collapsible section title size to Integrations
- Settings: match Integrations card geometry + convert all proxy sections
- Settings: normalize two spacing drifts
- Settings: pin the save bar to the page bottom on short tabs
- Settings: render header-action dialogs outside the collapsible body
- Settings: show syslog listener confirm dialog when card collapsed
- Settings: soften field labels to muted color
- Settings: space the info tooltip from the header action control
- Settings: use the shared Collapse component for card animation
- Switch: harden parseVRFNames against device command echo
- Terminal: absorb device Ctrl+U redraw so completion isn’t clobbered
- Terminal: app-level GlobalTerminalHost so floating survives tab switches
- Terminal: cursor-aware line editing — Left/Right/Home/End + mid-line insert
- Terminal: explicit own-or-default credential handling + clear no-creds error
- Terminal: explicit preventDefault on Tab to block browser focus-traversal
- Terminal: nginx WS proxy location for /api/devices/<id>/terminal
- Terminal: strip device prompt prefix from completion redraw
- Terminal: strip device-echoed command from output stream, backend-side
- Terminal: Vite dev proxy ws:true for /api/devices/<id>/terminal
- Terminal: write geometry refs in effects, not during render
- UI: lighten light-theme —input border to match design weight
- VMware vCenter: derive timeline header from item stamps, not audit batches[0]
- VMware vCenter: explicit audit actor wins over recovered denial actor when stamping
Last updated on