Show new worktrees in the sidebar immediately after creation with a
spinner icon, allowing users to switch to other worktrees while the
setup script runs instead of being blocked by a full-screen overlay.
- Add worktreeId to worktreeSetup messages so the webview can track
which worktree each setup event belongs to
- Push state to sidebar immediately after git worktree creation so the
entry appears before the setup script runs
- Replace separate deletingWorktrees/settingUpWorktrees signals with a
unified busyWorktrees map (WorktreeBusyState with reason field) for
consistent loading behavior across setup and deletion
- Scope the setup overlay to only show when the setting-up worktree is
selected; switching away hides it, switching back restores it
- Hide the delete button on busy worktrees instead of showing a second
spinner
- Ensure failed session creation cleans up stale sidebar entries via
pushState() after removeWorktree()
* 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