* fix(vscode): prevent UI blocking when switching sessions rapidly
- Show loading spinner in MessageList during session switch instead of blank screen
- Fire handleLoadMessages without await so rapid switches aren't serialized
- Abort stale getMessages requests via AbortController when switching away
- Scope error messages with sessionID so stale 404s don't clear wrong session's loading state
- Silence expected 404s on cross-worktree getSession calls via silent HTTP option
* fix: replace empty catch block with warning log for getSession errors
The loading skeleton gates (worktreesLoaded && sessionsLoaded) could
permanently block the Agent Manager UI. initializeState() called
refreshSessions() which sent sessionsLoaded before the webview's
onMount handlers registered, so the signal was lost. Since sessions
were already populated, the MessageList backup effect never triggered
a retry.
Add refreshSessions() to the requestState handler which fires from
the webview's onMount, guaranteeing all message listeners are ready.
The agent-manager-arch test enforces that all CSS class selectors in
agent-manager.css use the am- prefix. The NewWorktreeDialog was reusing
unprefixed prompt-input-* classes from the sidebar chat CSS, which
violated this rule and broke the test-vscode CI pipeline.
Kobalte modal dropdowns set pointer-events:none and overflow:hidden on
document.body. When the user opens the setup script editor from the
settings dropdown, VS Code steals focus before the dropdown cleanup
runs, leaving the body permanently unclickable. Clear these stale
styles in the existing window focus handler so the UI recovers when
the user returns to the agent manager tab.
When the Agent Manager opens in a non-git folder, initializeState()
returned early without pushing state to the webview, leaving the
skeleton loader spinning forever. Now pushes empty state with
isGitRepo: false so the UI can display a clear message and hide
worktree action buttons.
- Fix quoted button label in br, pl, ru, zht to match their allowAlways values
- Add permission-hint to both permission prompt locations in message-part.tsx
Clarifies that 'Allow always' only applies for the duration of the current
session, not globally. Adds translated hint text below the permission
action buttons in all supported locales.
Add a Keyboard Shortcuts item to the settings gear dropdown in the
Agent Manager sidebar. Opens a kilo-ui Dialog showing all available
shortcuts grouped by category (Sidebar, Tabs, Terminal, Global) with
platform-appropriate key rendering (Mac symbols / Windows key names).
Also exposes the global agentManagerOpen keybinding so it appears in
the dialog alongside the agent-manager-scoped shortcuts.
Make the SESSIONS header in the Agent Manager sidebar clickable to
collapse/expand the session list. When collapsed, the worktrees section
takes the full vertical space. The collapsed state is persisted to
.kilocode/agent-manager.json so it survives VS Code restarts.
The catch block in runSetupScriptForWorktree only logged to the output
channel but never posted a status error to the webview. Since the setup
overlay only dismisses on ready or error status, any exception during
script execution left the overlay covering the entire UI permanently.
* fix(vscode): route focusChatInput (Cmd+Shift+A) to active panel
The focusChatInput command was hardcoded to always target the sidebar
KiloProvider. When the Agent Manager panel was focused, the shortcut
had no effect. Now the command checks which panel is active at
invocation time and routes the message accordingly.
* fix(vscode): route addToContext setChatBoxMessage through target() too
Both setChatBoxMessage and focusInput in the addToContext handler now
use target() so the context text and focus always go to the same panel.
* feat: add loading skeletons for agent manager sessions and worktrees
Add skeleton loading states to the Agent Manager sidebar so users see
pulsing placeholders while worktrees and sessions load from the backend.
- Track worktreesLoaded/sessionsLoaded signals in the webview
- Add agentManager.requestState message so the webview can pull state
on mount (fixes race where initial pushState fires before mount)
- Await stateReady in the extension before responding to requestState
(ensures JSON is loaded from disk before sending data)
- Mark sessions loaded from both agentManager.state and sessionsLoaded
message paths for consistent behavior
- Add skeleton CSS with staggered pulse animations
* fix: gate worktree list on sessionsLoaded to prevent branch name flash
The worktreeLabel() function falls back to wt.branch (e.g. kilo-...)
when session data hasn't arrived yet. Gate the worktree list render
on both worktreesLoaded and sessionsLoaded so the skeleton stays
visible until session titles are available.
- Listen for sessionsLoaded message directly instead of watching
session.sessions() length (handles empty session lists too)
- Remove premature sessionsLoaded=true from agentManager.state handler
since that message only carries IDs, not session titles
* fix: make skeleton shapes match actual worktree/session item layout
Worktree skeleton: single row with branch icon placeholder + text bar,
matching the .am-worktree-item padding (10px) and gap (8px).
Session skeleton: title bar + timestamp bar on the right, matching
the .am-item layout with justify-content: space-between, padding
(6px 10px), and smaller font size for the time placeholder.
* fix: add .catch() to requestState handler to prevent unhandled rejection
If initializeState() rejects, pushState() still fires with whatever
state is available (empty arrays), so skeletons resolve to the empty
state instead of loading forever.
* fix: log error in requestState catch handler per style guide
* feat(agent-manager): add keyboard shortcut tooltips and worktree hover cards
- Add TooltipKeybind to all agent manager buttons (tabs, new session,
close tab, terminal, new worktree, delete worktree, promote to worktree)
- Add HoverCard popovers on worktree items showing branch name, base
branch, session count, creation date, and navigation shortcut hint
- Show directional keybind hints only for directly adjacent items
(tabs: ⌘←/⌘→, worktrees: ⌘↑/⌘↓)
- Resolve keybindings from package.json at runtime per platform
(Mac symbols vs Windows/Linux Ctrl+key format)
- Send resolved keybindings from extension to webview via new
agentManager.keybindings message instead of hardcoding shortcuts
- Prevent multiple HoverCards from appearing simultaneously via
shared hover state lifted above the For loop
- Suppress HoverCard when hovering the delete button
* refactor: extract formatKeybinding and adjacentHint into testable modules
- Extract formatKeybinding into format-keybinding.ts (pure function,
no vscode dependency, takes mac boolean parameter)
- Extract adjacentHint into navigate.ts as a reusable pure function
for computing directional keybind hints
- Add tests for adjacentHint (12 cases) and formatKeybinding (13 cases)
- Simplify tab/worktree direction logic in AgentManagerApp to use
adjacentHint instead of inline index arithmetic