Extract the open-tab enumeration into a shared private async helper
getOpenTabPaths(dir) that:
- uses the cached FileIgnoreController (same instance as gatherEditorContext)
- filters tabs through validateAccess so .kilocodeignore is respected
- returns a Set<string> of workspace-relative forward-slash paths
Both the requestFileSearch handler and gatherEditorContext now call this
helper, eliminating the duplicated loop and ensuring the file search
prioritization respects .kilocodeignore the same way the agent context does.
fileName() and dirName() were not stripping trailing slashes before
splitting, so directory paths like 'src/components/' produced an empty
filename (split('/').pop() returns '' on a trailing slash) and an
incorrect dirName. Strip trailing slashes first so both functions work
correctly for files and directories.
The SDK call to find.files was not passing dirs=false, so the CLI
defaulted kind to 'all'. With an empty query and kind='all', File.search()
returns directories (with trailing slashes) instead of files. The trailing
slash caused fileName() to return an empty string, producing blank entries
in the dropdown.
Passing dirs='false' restricts results to files only, which is the correct
behavior for the @ file mention feature.
These markers are only needed in shared upstream opencode files to prevent
merge conflicts. In kilo-specific packages (kilocode/, kilo-gateway/,
kilo-ui/, kilo-i18n/, kilo-vscode/, etc.) they serve no purpose.
The QuestionDock component uses [data-component='question-prompt'] but the
upstream kilo-ui interactive styles (cursor, hover, picked state, checkbox/radio
visuals) are scoped under [data-component='dock-prompt'][data-kind='question'].
This adds the missing interactive button styles to the VS Code CSS overrides:
- cursor: pointer and hover/active/disabled states on question-option
- checkbox/radio visual styles (question-option-box, question-option-check)
- picked state colors (surface-interactive-weak, icon-interactive-base)
- option-main, option-label, option-description layout and typography
- custom option overflow handling
Replace hardcoded dark-only colors in the announcement banner with
CSS custom variables (--bg-secondary, --text-color, --border-color,
--accent-color, --accent-hover) that automatically adapt to the
site's light and dark themes.
Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>
When the user types @<query> in the chat input, files currently open
in VS Code editor tabs are now sorted to the top of the autocomplete
suggestions. The CLI fuzzy-sort still runs over all files; results are
then partitioned in the extension host into open-tab matches (first)
and the rest, matching the behavior of the old extension.
Closes#6560
Questions with a tool context (messageID + callID) now render inline
after the assistant message parts instead of in the bottom dock.
- ChatView: filter !q.tool for bottom dock questions (same as permissions)
- AssistantMessage: match questions to message by messageID, render
QuestionDock inline after the last part
- Added InlineQuestion storybook story with Dutch name options
- StoryProviders: support mock questions prop
devices['Desktop Chrome'] includes viewport: 1280x720 which overrides
the global use.viewport setting. Explicitly set 420x720 in the project
config to match VS Code sidebar width.
VS Code sidebar is typically 350-450px wide. Set viewport to 420x720
and use fullscreen layout so stories fill the width naturally, matching
the real sidebar appearance.
Add Storybook + Playwright visual regression testing for the VS Code
extension's composite webview UI. This tests the full composition of
kilo-ui components with extension-specific contexts and styles.
- .storybook/ config with kilo-vscode theme defaults
- StoryProviders mock wrapper for DataProvider, SessionContext, etc.
- 7 composite stories: tool+permission, permission dock, tool cards,
chat idle/busy, multi-tool assistant message
- Playwright config on port 6007 with auto-discovery
- CI workflow updated with parallel kilo-vscode visual regression job
- Exported SessionContext and LanguageContext for story use
The upstream kilo-ui already registers proper renderers for these tools
that show subtitle and args (e.g. pattern=**/*.md). The override was
replacing them with a simpler version.
The upstream app groups these tools in a 'Gathered context' section that
computes title/subtitle/args from the tool input. The VS Code extension
renders them individually, but was falling through to GenericTool which
only shows the tool name.
Added ContextToolRenderer that computes trigger info (title, subtitle,
args like pattern=**/*.md) from tool input, matching the upstream
contextToolTrigger logic. Now tools show their parameters in all states
including pending (permission request).
Display the permission's patterns (file globs, paths, commands) in the
inline permission area so users can see what's being accessed. Uses the
same permission-dock-patterns styling as the bottom dock.
Wrap Part + permission in a tool-part-wrapper so the permission prompt
appears visually inside the same card as the tool call. Inner Part's
border is removed via CSS nesting to prevent double borders. A top
border separates the permission buttons from the tool content.