When a subagent (task tool) runs, it creates a child session. Permission
requests and questions from child sessions were invisible because
ChatView filtered them to only show the current session's requests.
This caused the subagent to appear stuck/crashed when it was actually
waiting for a permission response that the user never saw.
Changes:
- Show ALL pending permissions/questions in the bottom dock, not just
those from the current session
- Block the prompt input when any permission or question is pending
(from any tracked session, including child sessions)
- Add '(subagent)' indicator to permission subtitle when it comes from
a child session
- Priority ordering: prefer current-session non-tool permissions first,
then fall back to any pending permission
The .selected state on mode-switcher-item and thinking-selector-item set
background to --vscode-list-activeSelectionBackground (a strong blue in
light themes) but never set a foreground color. Text inherited dark
colors from the parent, producing unreadable dark-on-blue text in light
VSCode themes.
- Add color using --text-on-interactive-base / --vscode-list-activeSelectionForeground
to .mode-switcher-item.selected and .thinking-selector-item.selected
- Move description text color to :not(.selected) so it inherits the
correct foreground when selected
- Add missing --surface-interactive-active token to vscode-bridge.css
Settings and Profile always open as editor panels now, so the back
button is unnecessary (users close the tab) and panelMode detection
is redundant. Cleaned up dead code across App.tsx, Settings, ProfileView,
SettingsEditorProvider, and stories.
- Fix fallback defaults to match backend (agent.ts): global default is
'allow', doom_loop and external_directory default to 'ask'
- Fix removeException to use correct per-tool default instead of 'ask'
- Fix grouped tool rows to show most restrictive level across all IDs
instead of reading only the first tool's value
- Add missing i18n keys (description, wildcardLabel, exceptions,
addCommand, addPath, placeholder, todoreadwrite, websearchcodesearch)
to all 15 non-English locales
Redesign the Auto-Approve tab in VS Code extension settings to display
and edit granular pattern-based permission rules (object syntax).
- Add PermissionRule type to support nested objects (e.g. { bash: { "*": "deny", "git *": "allow" } })
- Granular tools (external_directory, bash, read, edit) show wildcard row, exceptions list with per-pattern dropdowns, delete buttons, and inline add input
- Simple tools show single Ask/Allow/Deny dropdown
- Group todoread/todowrite and websearch/codesearch into combined rows
- Remove "Set all permissions" card, add description subtitle
- Truncate long patterns with ellipsis and title tooltip
- Two-phase config update for exception deletion to work with patchJsonc
Add Bedrock to the list of supported BYOK providers and document
the AWS-specific credential format (JSON with accessKeyId,
secretAccessKey, and region) and required IAM permissions.
Replace plain Unicode ↓ character with the proper <Icon name="arrow-down-to-line" />
component from kilo-ui, matching the desktop app's implementation.
All 15 non-English locales in packages/app/src/i18n/ were missing 5 keys:
- dialog.model.manage.provider.toggle
- session.modeSwitch.switching
- session.modeSwitch.waiting
- session.modeSwitch.notAvailable
- session.modeSwitch.fallback
Also removes stale desktop.* keys from packages/kilo-i18n/src/bs.ts that
belong in packages/desktop/src/i18n/bs.ts (where they already exist).
The mockSessionValue in StoryProviders.tsx was missing the
respondingPermissions field added in the permission hang fix.
Components now call session.respondingPermissions() so the missing
field caused a runtime error in stories, breaking the visual regression
snapshot for bash-with-permission.
- Handle permission.replied SSE events: map them to permissionResolved
messages so cascaded and server-resolved permissions clear the webview
prompt without user action
- Remove optimistic permission removal: replace with a respondingPermissions
Set that disables buttons while awaiting server confirmation, then the
SSE-driven permissionResolved clears the prompt
- Notify webview on HTTP failure: handlePermissionResponse now posts
permissionError to re-enable buttons and show a toast instead of
silently swallowing the error
- Migrate from deprecated permission.respond to permission.reply endpoint,
fixing a missing await bug in the legacy server handler
- Recover missed permissions on reconnect and session load: new
fetchAndSendPendingPermissions() calls GET /permission after SSE
reconnects and after loadMessages, so events lost during reconnection
or while the webview was not ready are replayed
Move Settings and Profile views from the sidebar into VS Code editor
tabs so the chat sidebar remains visible and undisturbed when the user
opens either view.
- Add SettingsEditorProvider that creates singleton WebviewPanels for
settings and profile, each backed by a dedicated KiloProvider instance
- Update settingsButtonClicked/profileButtonClicked commands to open
editor panels via SettingsEditorProvider instead of posting action
messages to the sidebar webview
- Add panel mode detection in App.tsx so the back button closes the
editor panel rather than navigating to the chat view
* feat(vscode): open sidebar changes in diff tab
* fix(vscode): stabilize sidebar changes review tab
* chore: update kilo-vscode visual regression baselines
* fix(vscode): harden sidebar changes tab messaging
* refactor(vscode): share review tab helpers
* fix(vscode): clear empty changes loading state
* fix(vscode): correct session state initialization
* fix(vscode): use getVSCodeAPI singleton in diff-viewer to prevent double acquireVsCodeApi call
* fix(vscode): ensure CLI connection before diff fetch and include content in diff hash
- Call connectionService.connect() in DiffViewerProvider.initialFetch() so
the panel works even if opened before any other Kilo view
- Include full diff content in hashFileDiffs instead of just after.length
to detect in-place edits that don't change line counts
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>