Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
Binary file removed .beads/beads.db-shm
Binary file not shown.
Binary file removed .beads/beads.db-wal
Binary file not shown.
12 changes: 12 additions & 0 deletions .changeset/slash-command-enhancements.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
"kilo-code": minor
---

feat: Enhance slash command menu with type indicators, source badges, skill invocation, and argument hints

- Add type badges (command, mode, workflow, skill) with distinct colors to the "/" slash command dropdown
- Add source labels (project, global, organization) for non-built-in items
- Add skills to the "/" slash command menu, allowing discovery and invocation of installed skills
- Color-code slash command highlights in the text input to match their type
- Support Claude Code's `argument-hint` SKILL.md frontmatter field (from the Agent Skills specification), displayed as ghost text in the input after selecting a skill command to guide usage (e.g. `[-a] [-x] <task description>`)
- Parse and propagate `argument-hint` from skill frontmatter through the full data pipeline (SkillsManager → ExtensionStateContext → SlashCommand)
1 change: 0 additions & 1 deletion cli/src/constants/providers/labels.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ export const PROVIDER_LABELS: Record<ProviderName, string> = {
synthetic: "Synthetic",
"sap-ai-core": "SAP AI Core",
baseten: "BaseTen",
apertis: "Apertis", // kilocode_change
corethink: "Corethink",
}
Comment on lines 52 to 56
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

6. Cli maps missing apertis 🐞 Bug ✓ Correctness

The PR removes the apertis entries from CLI provider label/default-model/required-fields maps, but
ProviderName still includes apertis. This likely causes TypeScript errors for
Record<ProviderName, ...> (missing key) and/or breaks CLI behavior for the apertis provider.
Agent Prompt
### Issue description
CLI provider constants no longer define `apertis`, but the shared `ProviderName` still includes it. This breaks type completeness and can break runtime selection.

### Issue Context
`PROVIDER_LABELS`, `PROVIDER_DEFAULT_MODELS`, and `PROVIDER_REQUIRED_FIELDS` are typed as `Record<ProviderName, ...>`.

### Fix Focus Areas
- cli/src/constants/providers/labels.ts[1-56]
- cli/src/constants/providers/settings.ts[1095-1114]
- cli/src/constants/providers/validation.ts[40-57]
- packages/types/src/provider-settings.ts[48-62]

### Implementation sketch
Option A (likely intended): add back `apertis` entries in all three CLI maps:
- label: "Apertis"
- default model: align with shared defaults (e.g. `claude-sonnet-4-20250514`)
- required fields: align with provider settings schema (e.g. `apertisApiKey`, `apertisModelId`)

Option B (if deprecating apertis): remove `apertis` from shared ProviderName/provider lists and all extension/api handlers accordingly (larger change).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Expand Down
1 change: 0 additions & 1 deletion cli/src/constants/providers/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1110,7 +1110,6 @@ export const PROVIDER_DEFAULT_MODELS: Record<ProviderName, string> = {
synthetic: "synthetic-model",
"sap-ai-core": "gpt-4o",
baseten: "zai-org/GLM-4.6",
apertis: "claude-sonnet-4-20250514", // kilocode_change
corethink: "corethink",
}

Expand Down
1 change: 0 additions & 1 deletion cli/src/constants/providers/validation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,5 @@ export const PROVIDER_REQUIRED_FIELDS: Record<ProviderName, string[]> = {
"virtual-quota-fallback": [], // Has array validation
minimax: ["minimaxBaseUrl", "minimaxApiKey", "apiModelId"],
baseten: ["basetenApiKey", "apiModelId"],
apertis: ["apertisApiKey", "apertisModelId"], // kilocode_change
corethink: ["corethinkApiKey", "corethinkModelId"],
}
4 changes: 2 additions & 2 deletions packages/types/src/providers/fireworks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ export const fireworksModels = {
supportsImages: false,
supportsPromptCache: false,
supportsNativeTools: true,
defaultToolProtocol: "native",
defaultToolProtocol: "native",
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

4. fireworks.ts missing marker 📘 Rule violation ⛯ Reliability

A change was made in an upstream-shared packages/ file without adding any kilocode_change
marker. This can create avoidable conflicts when syncing with upstream.
Agent Prompt
## Issue description
`packages/types/src/providers/fireworks.ts` was modified without `kilocode_change` markers even though `packages/` is upstream-shared per policy.

## Issue Context
If the change is purely formatting, consider reverting it to avoid touching upstream-shared code. If it must remain, add a marker (inline or block start/end) around the changed lines.

## Fix Focus Areas
- packages/types/src/providers/fireworks.ts[206-247]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

inputPrice: 0.22,
outputPrice: 0.88,
displayName: "GLM-4.5 Air",
Expand Down Expand Up @@ -243,7 +243,7 @@ export const fireworksModels = {
supportsImages: false,
supportsPromptCache: true,
supportsNativeTools: true,
defaultToolProtocol: "native",
defaultToolProtocol: "native",
inputPrice: 0.05,
outputPrice: 0.2,
cacheReadsPrice: 0.04,
Expand Down
18 changes: 18 additions & 0 deletions src/core/slash-commands/kilo.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// kilocode_change whole file

import { ClineRulesToggles } from "../../shared/cline-rules"
import { SkillMetadata } from "../../shared/skills"
import fs from "fs/promises"
import path from "path"
import {
Expand All @@ -27,6 +28,7 @@ export async function parseKiloSlashCommands(
text: string,
localWorkflowToggles: ClineRulesToggles,
globalWorkflowToggles: ClineRulesToggles,
skills: SkillMetadata[] = [],
): Promise<{ processedText: string; needsRulesFileCheck: boolean }> {
const condenseAliases = condenseToolResponse

Expand Down Expand Up @@ -75,6 +77,22 @@ export async function parseKiloSlashCommands(
console.error(`Error reading workflow file ${matchingWorkflow.fullPath}: ${error}`)
}
}

// Check for matching skill
const matchingSkill = skills.find((skill) => skill.name === commandName)
if (matchingSkill) {
try {
const skillContent = (await fs.readFile(matchingSkill.path, "utf8")).trim()

const processedText =
`<explicit_instructions type="${matchingSkill.name}">\n${skillContent}\n</explicit_instructions>\n` +
textWithoutSlashCommand

return { processedText, needsRulesFileCheck: false }
} catch (error) {
console.error(`Error reading skill file ${matchingSkill.path}: ${error}`)
}
}
}

// if no supported commands are found, return the original text
Expand Down
4 changes: 4 additions & 0 deletions src/core/task/Task.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4124,10 +4124,14 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
)

// when parsing slash commands, we still want to allow the user to provide their desired context
const currentMode = await this.getTaskMode()
const skillsForMode =
this.providerRef.deref()?.getSkillsManager()?.getSkillsForMode(currentMode) ?? []
const { processedText, needsRulesFileCheck: needsCheck } = await parseKiloSlashCommands(
parsedText.text,
localWorkflowToggles,
globalWorkflowToggles,
skillsForMode,
Comment on lines +4127 to +4134
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

2. task.ts missing kilocode_change 📘 Rule violation ⛯ Reliability

New logic to fetch skillsForMode and pass it into parseKiloSlashCommands was added in an
upstream-shared src/ file without surrounding kilocode_change markers. This increases the risk
of merge conflicts during upstream syncs.
Agent Prompt
## Issue description
`src/core/task/Task.ts` was modified to include skills in slash-command parsing, but the new block is not marked with `kilocode_change` markers as required for upstream-shared files.

## Issue Context
This file is under `src/` (non-exempt) and must clearly mark Kilo-specific deltas to reduce upstream merge conflicts.

## Fix Focus Areas
- src/core/task/Task.ts[4127-4134]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

)
Comment on lines +4127 to 4135
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

5. Skills not passed to parser 🐞 Bug ✓ Correctness

Skill support was added to parseKiloSlashCommands, but the main request-time pipeline still calls
parseKiloSlashCommands without providing skills, so skills defaults to an empty array and /skill
never matches. Users can see skills in the UI but the backend won’t inject SKILL.md content for
slash-invocation.
Agent Prompt
### Issue description
Skill slash commands rely on `parseKiloSlashCommands(..., skills)` but the main request-time pipeline does not pass skills, so `/skill` is never recognized.

### Issue Context
- `parseKiloSlashCommands` now supports `skills: SkillMetadata[]`.
- The main Task path uses `processKiloUserContentMentions`, which calls `parseKiloSlashCommands` without that argument.

### Fix Focus Areas
- src/core/task/Task.ts[2835-2861]
- src/core/mentions/processKiloUserContentMentions.ts[45-72]
- src/core/slash-commands/kilo.ts[27-95]

### Implementation sketch
1) In `Task.ts`, compute `currentMode` and `skillsForMode` (via `getSkillsManager().getSkillsForMode(currentMode)`), and pass them into `processKiloUserContentMentions`.
2) Extend `processKiloUserContentMentions` signature to accept `skills?: SkillMetadata[]` and forward it into `parseKiloSlashCommands`.
3) Add/adjust a unit test to cover `/some-skill` being expanded into `<explicit_instructions>` when skills are provided.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


if (needsCheck) {
Expand Down
1 change: 1 addition & 0 deletions src/core/webview/webviewMessageHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -527,6 +527,7 @@ export const webviewMessageHandler = async (

provider.postStateToWebview()
provider.postRulesDataToWebview() // kilocode_change: send workflows and rules immediately
provider.postSkillsDataToWebview() // kilocode_change: send skills data for slash command dropdown
provider.workspaceTracker?.initializeFilePaths() // Don't await.

getTheme().then((theme) => provider.postMessageToWebview({ type: "theme", text: JSON.stringify(theme) }))
Expand Down
4 changes: 3 additions & 1 deletion src/services/autocomplete/AutocompleteServiceManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,9 @@ export class AutocompleteServiceManager {

constructor(context: vscode.ExtensionContext, cline: ClineProvider) {
if (AutocompleteServiceManager._instance) {
throw new Error("AutocompleteServiceManager is a singleton. Use AutocompleteServiceManager.getInstance() instead.")
throw new Error(
"AutocompleteServiceManager is a singleton. Use AutocompleteServiceManager.getInstance() instead.",
)
}

this.context = context
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,11 @@ export type { HoleFillerAutocompletePrompt, FillInAtCursorSuggestion, ChatComple
* Parse the response - only handles responses with <COMPLETION> tags
* Returns a FillInAtCursorSuggestion with the extracted text, or an empty string if nothing found
*/
export function parseAutocompleteResponse(fullResponse: string, prefix: string, suffix: string): FillInAtCursorSuggestion {
export function parseAutocompleteResponse(
fullResponse: string,
prefix: string,
suffix: string,
): FillInAtCursorSuggestion {
let fimText: string = ""

// Match content strictly between <COMPLETION> and </COMPLETION> tags
Expand Down
5 changes: 5 additions & 0 deletions src/services/skills/SkillsManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,10 @@ export class SkillsManager {
return
}

// Extract optional argument-hint from frontmatter
const argumentHint =
typeof frontmatter["argument-hint"] === "string" ? frontmatter["argument-hint"].trim() : undefined

// Create unique key combining name, source, and mode for override resolution
const skillKey = this.getSkillKey(effectiveSkillName, source, mode)

Expand All @@ -174,6 +178,7 @@ export class SkillsManager {
path: skillMdPath,
source,
mode, // undefined for generic skills, string for mode-specific
...(argumentHint && { argumentHint }),
})
} catch (error) {
console.error(`Failed to load skill at ${skillDir}:`, error)
Expand Down
1 change: 1 addition & 0 deletions src/shared/skills.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ export interface SkillMetadata {
path: string // Absolute path to SKILL.md
source: "global" | "project" // Where the skill was discovered
mode?: string // If set, skill is only available in this mode
argumentHint?: string // Optional: usage hint shown after command selection (from frontmatter argument-hint)
}

/**
Expand Down
4 changes: 3 additions & 1 deletion src/test-llm-autocompletion/mock-context-provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,9 @@ export function createProviderForTesting(
costTrackingCallback: CostTrackingCallback = () => {},
getSettings: () => AutocompleteServiceSettings | null = () => null,
): AutocompleteInlineCompletionProvider {
const instance = Object.create(AutocompleteInlineCompletionProvider.prototype) as AutocompleteInlineCompletionProvider
const instance = Object.create(
AutocompleteInlineCompletionProvider.prototype,
) as AutocompleteInlineCompletionProvider
// Initialize private fields using Object.assign to bypass TypeScript private access
Object.assign(instance, {
suggestionsHistory: [],
Expand Down
42 changes: 36 additions & 6 deletions webview-ui/src/components/chat/ChatTextArea.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ import {
shouldShowSlashCommandsMenu,
getMatchingSlashCommands,
insertSlashCommand,
validateSlashCommand,
findSlashCommand,
} from "@/utils/slash-commands"
// kilocode_change end

Expand Down Expand Up @@ -159,6 +159,7 @@ export const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
togglePinnedApiConfig,
localWorkflows, // kilocode_change
globalWorkflows, // kilocode_change
skills, // kilocode_change
taskHistoryVersion, // kilocode_change
clineMessages,
ghostServiceSettings, // kilocode_change
Expand Down Expand Up @@ -691,6 +692,7 @@ export const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
customModes,
localWorkflows,
globalWorkflows,
skills,
) // kilocode_change

if (commands.length === 0) {
Expand All @@ -710,6 +712,7 @@ export const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
customModes,
localWorkflows,
globalWorkflows,
skills,
)
if (commands.length > 0) {
handleSlashCommandsSelect(commands[selectedSlashCommandsIndex])
Expand Down Expand Up @@ -886,6 +889,7 @@ export const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
showSlashCommandsMenu, // kilocode_change start
localWorkflows,
globalWorkflows,
skills,
customModes,
handleSlashCommandsSelect,
selectedSlashCommandsIndex,
Expand Down Expand Up @@ -949,6 +953,7 @@ export const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
customModes,
localWorkflows,
globalWorkflows,
skills,
)
// kilocode_change end

Expand Down Expand Up @@ -1024,10 +1029,11 @@ export const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
}
},
[
// kilocode_change start: workflow toggles dependencies
// kilocode_change start: workflow toggles and skills dependencies
customModes,
localWorkflows,
globalWorkflows,
skills,
// kilocode_change end
setInputValue,
setSearchRequestId,
Expand Down Expand Up @@ -1187,12 +1193,27 @@ export const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(

// extract and validate the exact command text
const commandText = processedText.substring(slashIndex + 1, endIndex)
const isValidCommand = validateSlashCommand(commandText, customModes)
const matchedCommand = findSlashCommand(
commandText,
customModes,
localWorkflows,
globalWorkflows,
skills,
)

if (isValidCommand) {
if (matchedCommand) {
const fullCommand = processedText.substring(slashIndex, endIndex) // includes slash
const typeClass = matchedCommand.type ? ` slash-command-type-${matchedCommand.type}` : ""

let highlighted = `<mark class="slash-command-match-textarea-highlight${typeClass}">${fullCommand}</mark>`

// Show argument hint as ghost text when command has one and user hasn't typed args yet
// Skip if FIM autocomplete ghost text is active to avoid overlapping hints
const textAfterCommand = processedText.substring(endIndex).trim()
if (matchedCommand.argumentHint && !textAfterCommand && !autocompleteText) {
highlighted += ` <span class="slash-command-argument-hint">${escapeHtml(matchedCommand.argumentHint)}</span>`
}

const highlighted = `<mark class="slash-command-match-textarea-highlight">${fullCommand}</mark>`
processedText =
processedText.substring(0, slashIndex) + highlighted + processedText.substring(endIndex)
}
Expand Down Expand Up @@ -1225,7 +1246,16 @@ export const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
highlightLayerRef.current.innerHTML = processedText
highlightLayerRef.current.scrollTop = textAreaRef.current.scrollTop
highlightLayerRef.current.scrollLeft = textAreaRef.current.scrollLeft
}, [customModes, autocompleteText, inputValue, isRecording, previewRanges]) // kilocode_change - merged dependencies
}, [
customModes,
localWorkflows,
globalWorkflows,
skills,
autocompleteText,
inputValue,
isRecording,
previewRanges,
]) // kilocode_change - merged dependencies

useLayoutEffect(() => {
updateHighlights()
Expand Down
56 changes: 51 additions & 5 deletions webview-ui/src/components/chat/SlashCommandMenu.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React, { useCallback, useRef, useEffect } from "react"
import { SlashCommand, getMatchingSlashCommands } from "@/utils/slash-commands"
import { SlashCommand, SlashCommandSource, SlashCommandType, getMatchingSlashCommands } from "@/utils/slash-commands"
import { useExtensionState } from "@/context/ExtensionStateContext" // kilocode_change

interface SlashCommandMenuProps {
Expand All @@ -11,6 +11,33 @@ interface SlashCommandMenuProps {
customModes?: any[]
}

const typeBadgeColors: Record<string, { bg: string; text: string }> = {
command: { bg: "rgba(58, 150, 221, 0.15)", text: "rgba(58, 150, 221, 0.9)" },
mode: { bg: "rgba(160, 100, 230, 0.15)", text: "rgba(160, 100, 230, 0.9)" },
workflow: { bg: "rgba(80, 180, 100, 0.15)", text: "rgba(80, 180, 100, 0.9)" },
skill: { bg: "rgba(220, 160, 50, 0.15)", text: "rgba(220, 160, 50, 0.9)" },
}

const defaultBadgeColors = { bg: "rgba(128, 128, 128, 0.15)", text: "var(--vscode-descriptionForeground)" }

function getTypeBadgeColors(type?: SlashCommandType): { bg: string; text: string } {
return (type && typeBadgeColors[type]) || defaultBadgeColors
}

function getSourceLabel(source?: SlashCommandSource): string | null {
switch (source) {
case "project":
return "project"
case "global":
return "global"
case "organization":
return "org"
case "built-in":
default:
return null
}
}

Comment on lines +14 to +40
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

3. slashcommandmenu unmarked additions 📘 Rule violation ⛯ Reliability

New helper/constants for slash command type/source badges were added in an upstream-shared
webview-ui/ file without kilocode_change markers. This makes future upstream merges more
conflict-prone.
Agent Prompt
## Issue description
`webview-ui/src/components/chat/SlashCommandMenu.tsx` adds new type/source badge helper logic without `kilocode_change` markers, even though `webview-ui/` is upstream-shared.

## Issue Context
Marking Kilo-specific changes reduces merge conflicts during upstream sync.

## Fix Focus Areas
- webview-ui/src/components/chat/SlashCommandMenu.tsx[14-40]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

const SlashCommandMenu: React.FC<SlashCommandMenuProps> = ({
onSelect,
selectedIndex,
Expand All @@ -19,7 +46,7 @@ const SlashCommandMenu: React.FC<SlashCommandMenuProps> = ({
query,
customModes,
}) => {
const { localWorkflows, globalWorkflows } = useExtensionState() // kilocode_change
const { localWorkflows, globalWorkflows, skills } = useExtensionState() // kilocode_change
const menuRef = useRef<HTMLDivElement>(null)

const handleClick = useCallback(
Expand Down Expand Up @@ -47,7 +74,7 @@ const SlashCommandMenu: React.FC<SlashCommandMenuProps> = ({
}, [selectedIndex])

// Filter commands based on query
const filteredCommands = getMatchingSlashCommands(query, customModes, localWorkflows, globalWorkflows) // kilocode_change
const filteredCommands = getMatchingSlashCommands(query, customModes, localWorkflows, globalWorkflows, skills) // kilocode_change

return (
<div
Expand All @@ -69,8 +96,27 @@ const SlashCommandMenu: React.FC<SlashCommandMenuProps> = ({
} hover:bg-[var(--vscode-list-hoverBackground)]`}
onClick={() => handleClick(command)}
onMouseEnter={() => setSelectedIndex(index)}>
<div className="font-bold whitespace-nowrap overflow-hidden text-ellipsis">
/{command.name}
<div className="flex items-center justify-between gap-2">
<div className="font-bold whitespace-nowrap overflow-hidden text-ellipsis">
/{command.name}
</div>
<div className="flex items-center gap-1 shrink-0">
{command.type && (
<span
className="text-[0.7em] px-1.5 py-0.5 rounded-sm leading-none"
style={{
backgroundColor: getTypeBadgeColors(command.type).bg,
color: getTypeBadgeColors(command.type).text,
}}>
Comment on lines +105 to +110
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

1. slashcommandmenu inline style prop 📘 Rule violation ✓ Correctness

New webview markup introduces an inline style={{ ... }} object for the type badge colors instead
of using Tailwind/CSS classes. This violates the repo requirement and can lead to inconsistent
styling patterns and theme compatibility issues.
Agent Prompt
## Issue description
New UI markup in `SlashCommandMenu` uses an inline `style={{ ... }}` object to color the type badge, but the repo requires using Tailwind classes (or established CSS classes) instead.

## Issue Context
The badge color is derived from `command.type`. You can keep dynamic behavior by mapping `SlashCommandType` to class strings (including Tailwind arbitrary values) or by defining CSS classes (e.g., `.slash-command-type-badge-command`) and applying them via `className`.

## Fix Focus Areas
- webview-ui/src/components/chat/SlashCommandMenu.tsx[105-110]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

{command.type}
</span>
)}
{getSourceLabel(command.source) && (
<span className="text-[0.65em] text-[var(--vscode-descriptionForeground)] opacity-70 leading-none">
{getSourceLabel(command.source)}
</span>
)}
</div>
</div>
<div className="text-[0.85em] text-[var(--vscode-descriptionForeground)] whitespace-normal overflow-hidden text-ellipsis">
{command.description}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,10 @@ export function useChatAutocompleteText({
// 2. The cursor is at the end of the text
// 3. We have saved autocomplete text that matches the current prefix
const shouldShowAutocompleteText =
isFocusedRef.current && isCursorAtEnd && savedAutocompleteTextRef.current && currentText === savedPrefixRef.current
isFocusedRef.current &&
isCursorAtEnd &&
savedAutocompleteTextRef.current &&
currentText === savedPrefixRef.current

if (shouldShowAutocompleteText) {
setAutocompleteText(savedAutocompleteTextRef.current)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -371,7 +371,7 @@ export const getOptionsForProvider = (provider: ProviderName, apiConfiguration?:
isChina:
apiConfiguration?.zaiApiLine === "china_coding" || apiConfiguration?.zaiApiLine === "china_api",
}
// kilocode_change end
// kilocode_change end
default:
return {}
}
Expand Down
Loading
Loading