diff --git a/packages/kilo-vscode/src/KiloProvider.ts b/packages/kilo-vscode/src/KiloProvider.ts index 5f5d6f3aeaf..fe9143a3f09 100644 --- a/packages/kilo-vscode/src/KiloProvider.ts +++ b/packages/kilo-vscode/src/KiloProvider.ts @@ -429,6 +429,11 @@ export class KiloProvider implements vscode.WebviewViewProvider, TelemetryProper case "requestSkills": this.fetchAndSendSkills().catch((e) => console.error("[Kilo New] fetchAndSendSkills failed:", e)) break + case "removeSkill": + this.handleRemoveSkill(message.location).catch((e) => + console.error("[Kilo New] handleRemoveSkill failed:", e), + ) + break case "questionReply": await this.handleQuestionReply(message.requestID, message.answers) break @@ -1127,6 +1132,21 @@ export class KiloProvider implements vscode.WebviewViewProvider, TelemetryProper } } + /** + * Remove a skill by deleting its directory from disk, then refresh the skills list. + * The location is the path to the SKILL.md file; the skill directory is its parent. + */ + private async handleRemoveSkill(location: string): Promise { + const dir = path.dirname(location) + try { + await vscode.workspace.fs.delete(vscode.Uri.file(dir), { recursive: true }) + } catch (error) { + console.error("[Kilo New] KiloProvider: Failed to delete skill directory:", dir, error) + } + this.cachedSkillsMessage = null + await this.fetchAndSendSkills() + } + /** * Fetch backend config and send to webview. */ diff --git a/packages/kilo-vscode/webview-ui/src/components/settings/AgentBehaviourTab.tsx b/packages/kilo-vscode/webview-ui/src/components/settings/AgentBehaviourTab.tsx index 2ce51e38c23..3b0d278b92e 100644 --- a/packages/kilo-vscode/webview-ui/src/components/settings/AgentBehaviourTab.tsx +++ b/packages/kilo-vscode/webview-ui/src/components/settings/AgentBehaviourTab.tsx @@ -4,6 +4,8 @@ import { TextField } from "@kilocode/kilo-ui/text-field" import { Card } from "@kilocode/kilo-ui/card" import { Button } from "@kilocode/kilo-ui/button" import { IconButton } from "@kilocode/kilo-ui/icon-button" +import { Dialog } from "@kilocode/kilo-ui/dialog" +import { useDialog } from "@kilocode/kilo-ui/context/dialog" import { useConfig } from "../../context/config" import { useSession } from "../../context/session" @@ -53,6 +55,7 @@ const AgentBehaviourTab: Component = () => { const { config, updateConfig } = useConfig() const session = useSession() const vscode = useVSCode() + const dialog = useDialog() const [activeSubtab, setActiveSubtab] = createSignal("agents") const [selectedAgent, setSelectedAgent] = createSignal("") const [newSkillPath, setNewSkillPath] = createSignal("") @@ -179,6 +182,35 @@ const AgentBehaviourTab: Component = () => { updateConfig({ skills: { ...config().skills, urls: current } }) } + const removeSkill = (skill: SkillInfo) => { + vscode.postMessage({ type: "removeSkill", location: skill.location }) + } + + const confirmRemoveSkill = (skill: SkillInfo) => { + dialog.show(() => ( + +
+ {language.t("settings.agentBehaviour.removeSkill.confirm", { name: skill.name })} +
+ + +
+
+
+ )) + } + const renderAgentsSubtab = () => (
{/* Default agent */} @@ -410,24 +442,30 @@ const AgentBehaviourTab: Component = () => { {(skill, index) => (
-
- {skill.name} -
-
-
{skill.description}
-
{skill.location}
+
+
+ {skill.name} +
+
+
{skill.description}
+
{skill.location}
+
+ confirmRemoveSkill(skill)} />
)} diff --git a/packages/kilo-vscode/webview-ui/src/i18n/en.ts b/packages/kilo-vscode/webview-ui/src/i18n/en.ts index cffafc12273..1582971d356 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/en.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/en.ts @@ -971,6 +971,9 @@ export const dict = { "No skills discovered. Add skill folder paths or URLs below to make skills available.", "settings.agentBehaviour.skillPaths": "Skill Folder Paths", "settings.agentBehaviour.skillUrls": "Skill URLs", + "settings.agentBehaviour.removeSkill.title": "Remove skill", + "settings.agentBehaviour.removeSkill.confirm": 'Remove skill "{{name}}"? This will delete the skill files from disk.', + "settings.agentBehaviour.removeSkill.button": "Remove", "settings.agentBehaviour.instructionFiles": "Additional Instruction Files", "settings.agentBehaviour.instructionFiles.description": "Paths to additional instruction files that are included in the system prompt", diff --git a/packages/kilo-vscode/webview-ui/src/types/messages.ts b/packages/kilo-vscode/webview-ui/src/types/messages.ts index e9fa87dedad..e0da4d52ec2 100644 --- a/packages/kilo-vscode/webview-ui/src/types/messages.ts +++ b/packages/kilo-vscode/webview-ui/src/types/messages.ts @@ -1248,6 +1248,11 @@ export interface RequestSkillsMessage { type: "requestSkills" } +export interface RemoveSkillMessage { + type: "removeSkill" + location: string +} + export interface SetLanguageRequest { type: "setLanguage" locale: string @@ -1628,6 +1633,7 @@ export type WebviewMessage = | CompactRequest | RequestAgentsMessage | RequestSkillsMessage + | RemoveSkillMessage | SetLanguageRequest | QuestionReplyRequest | QuestionRejectRequest