Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
6fd3227
feat(vscode): add file search API plumbing for @ mention feature
iscekic Feb 17, 2026
7725520
feat(vscode): implement @ file mention with dropdown and file chips
iscekic Feb 17, 2026
eee4cf1
feat(vscode): use FileIcon component for @ mention dropdown and file …
iscekic Feb 17, 2026
ba5a16d
fix(vscode): inline SVG sprite to avoid cross-origin webview error
iscekic Feb 17, 2026
813b8b0
fix(vscode): address bot review comments on @ file mention
iscekic Feb 17, 2026
69a3eb4
refactor(vscode): use kilo-ui Icon and IconButton in PromptInput
iscekic Feb 17, 2026
75de389
refactor(vscode): extract useFileMention hook from PromptInput
iscekic Feb 17, 2026
b6ba06b
fix(vscode): prevent race condition in file search debounce counter
iscekic Feb 17, 2026
4c492f6
fix(vscode): sync text signal when file mention replaces @query
iscekic Feb 17, 2026
9d9b1e3
fix(vscode): remove unused onInput return value
iscekic Feb 17, 2026
9805982
fix(vscode): scroll active file mention item into view on keyboard na…
iscekic Feb 17, 2026
a0aae38
fix(vscode): require at least 1 character after @ before triggering f…
iscekic Feb 17, 2026
7f869a4
fix(vscode): improve @ file mention UX
iscekic Feb 17, 2026
79aef43
fix(vscode): use querySelectorAll for dropdown scroll into view
iscekic Feb 17, 2026
ae2a510
debug(vscode): add logging to diagnose dropdown scroll issue
iscekic Feb 17, 2026
bcc2a4c
fix(vscode): scroll dropdown active item via handleKeyDown instead of…
iscekic Feb 17, 2026
e38ac99
debug(vscode): add logging to scrollToActiveItem
iscekic Feb 17, 2026
143f222
debug(vscode): add logging to handleKeyDown
iscekic Feb 17, 2026
ac20f76
debug(vscode): add component render log
iscekic Feb 17, 2026
22006f6
chore(vscode): remove debug logging from PromptInput
iscekic Feb 17, 2026
e2caa75
Merge branch 'dev' into feature/vscode-at-file-mention
iscekic Feb 18, 2026
aa287f2
feat(vscode): inline @file mention with highlight overlay instead of …
iscekic Feb 18, 2026
d4e0c4d
fix(vscode): position file mention dropdown absolutely above input
iscekic Feb 18, 2026
5ebec98
fix(vscode): suppress ghost text and autocomplete while mention dropd…
iscekic Feb 18, 2026
05522f4
fix(vscode): adjust textarea height after file mention selection
iscekic Feb 18, 2026
e714e5f
fix(vscode): invalidate in-flight autocomplete request on send
iscekic Feb 18, 2026
315c0fa
fix(vscode): construct valid file:// URL from relative paths using wo…
iscekic Feb 18, 2026
78579ca
fix(vscode): address review feedback on @ file mention
iscekic Feb 18, 2026
847367b
Merge branch 'dev' into feature/vscode-at-file-mention
iscekic Feb 18, 2026
7ee51be
fix(vscode): normalize Windows paths in file mention URL construction
iscekic Feb 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions packages/kilo-vscode/esbuild.js
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,33 @@ const pierreWorkerStubPlugin = {
},
}

const svgSpritePlugin = {
name: "svg-sprite-inline",
setup(build) {
build.onLoad({ filter: /sprite\.svg$/ }, (args) => {
const content = require("fs").readFileSync(args.path, "utf8")
return {
contents: `
const svg = ${JSON.stringify(content)};
const inject = () => {
if (!document.getElementById("kilo-sprite")) {
const el = document.createElement("div");
el.id = "kilo-sprite";
el.style.display = "none";
el.innerHTML = svg;
document.body.appendChild(el);
}
};
if (document.body) inject();
else document.addEventListener("DOMContentLoaded", inject);
export default "";
`,
loader: "js",
}
})
},
}

const cssPackageResolvePlugin = {
name: "css-package-resolve",
setup(build) {
Expand Down Expand Up @@ -147,6 +174,7 @@ async function main() {
plugins: [
solidDedupePlugin,
pierreWorkerStubPlugin,
svgSpritePlugin,
cssPackageResolvePlugin,
solidPlugin(),
esbuildProblemMatcherPlugin,
Expand All @@ -172,6 +200,7 @@ async function main() {
plugins: [
solidDedupePlugin,
pierreWorkerStubPlugin,
svgSpritePlugin,
cssPackageResolvePlugin,
solidPlugin(),
esbuildProblemMatcherPlugin,
Expand Down
18 changes: 18 additions & 0 deletions packages/kilo-vscode/src/KiloProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,24 @@ export class KiloProvider implements vscode.WebviewViewProvider {
this.connectionService,
)
break
case "requestFileSearch": {
const client = this.httpClient
if (client) {
const dir = this.getWorkspaceDirectory()
void client
.findFiles(message.query, dir)
.then((paths) => {
this.postMessage({ type: "fileSearchResult", paths, dir, requestId: message.requestId })
})
.catch((error) => {
console.error("[Kilo New] File search failed:", error)
this.postMessage({ type: "fileSearchResult", paths: [], dir, requestId: message.requestId })
})
} else {
this.postMessage({ type: "fileSearchResult", paths: [], dir: "", requestId: message.requestId })
}
break
}
case "chatCompletionAccepted":
handleChatCompletionAccepted({ type: "chatCompletionAccepted", suggestionLength: message.suggestionLength })
break
Expand Down
9 changes: 9 additions & 0 deletions packages/kilo-vscode/src/services/cli-backend/http-client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -460,6 +460,15 @@ export class HttpClient {
return this.request<boolean>("POST", `/provider/${providerId}/oauth/callback`, { method }, { directory })
}

// ============================================
// File Search Methods
// ============================================

async findFiles(query: string, directory: string): Promise<string[]> {
const params = new URLSearchParams({ query, dirs: "false", limit: "10" })
return this.request<string[]>("GET", `/find/file?${params.toString()}`, undefined, { directory })
}

// ============================================
// MCP Methods
// ============================================
Expand Down
Loading
Loading