From 2df8789be080b6f76a9d38221d65fcb0566ae5db Mon Sep 17 00:00:00 2001 From: "kiloconnect[bot]" <240665456+kiloconnect[bot]@users.noreply.github.com> Date: Fri, 27 Feb 2026 15:38:11 +0000 Subject: [PATCH 01/16] fix: add flexShrink={0} to prompt border box to prevent shrinking --- packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx b/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx index 643cd286db7..8713dcd6b89 100644 --- a/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx @@ -1034,6 +1034,7 @@ export function Prompt(props: PromptProps) { Date: Thu, 5 Mar 2026 20:38:25 +0800 Subject: [PATCH 02/16] remove references to 'kilo web' in documentation --- CONTRIBUTING.md | 2 -- packages/kilo-docs/pages/code-with-ai/platforms/cli.md | 1 - 2 files changed, 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ed0cb83d8af..2a435ddc5ab 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -62,12 +62,10 @@ During development, `bun dev` is the local equivalent of the built `kilo` comman # Development (from project root) bun dev --help # Show all available commands bun dev serve # Start headless API server -bun dev web # Start server + open web interface # Production kilo --help # Show all available commands kilo serve # Start headless API server -kilo web # Start server + open web interface ``` ### Pull Request Expectations diff --git a/packages/kilo-docs/pages/code-with-ai/platforms/cli.md b/packages/kilo-docs/pages/code-with-ai/platforms/cli.md index 6adbb9d608b..a8251f1499c 100644 --- a/packages/kilo-docs/pages/code-with-ai/platforms/cli.md +++ b/packages/kilo-docs/pages/code-with-ai/platforms/cli.md @@ -66,7 +66,6 @@ Or use npm: | `kilo run [message..]` | Run with a message (non-interactive mode) | | `kilo attach ` | Attach to a running kilo server | | `kilo serve` | Start a headless server | -| `kilo web` | Start server and open web interface | | `kilo auth` | Manage credentials (login, logout, list) | | `kilo agent` | Manage agents (create, list) | | `kilo mcp` | Manage MCP servers (list, add, auth) | From bd0295b5e242fa0d7363d996b6e97f98dc48d2f6 Mon Sep 17 00:00:00 2001 From: "kiloconnect[bot]" <240665456+kiloconnect[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 11:08:59 +0000 Subject: [PATCH 03/16] feat(vscode): add calculated permissions display to agent details Show the resolved permission ruleset for each agent in the Agent Behaviour settings tab. The section is collapsed by default and expands to show an effective-action summary plus the full ordered rule table (last match wins). Changes: - Forward all agents (including subagents) with their CLI-calculated permission rulesets to the webview via a new allAgents field - Add collapsible PermissionRuleset component in ModeEditView - Show subagents in the Agent Behaviour agent list with a badge - Add PermissionRuleItem type mirroring the backend PermissionNext.Rule Ref: https://github.com/Kilo-Org/kilocode/issues/8331 --- packages/kilo-vscode/src/KiloProvider.ts | 22 ++- .../components/settings/AgentBehaviourTab.tsx | 19 +- .../src/components/settings/ModeEditView.tsx | 187 +++++++++++++++++- .../webview-ui/src/context/session.tsx | 4 + .../kilo-vscode/webview-ui/src/i18n/en.ts | 9 + .../webview-ui/src/types/messages.ts | 9 + 6 files changed, 235 insertions(+), 15 deletions(-) diff --git a/packages/kilo-vscode/src/KiloProvider.ts b/packages/kilo-vscode/src/KiloProvider.ts index 6888caf5d19..9a25e3e1b38 100644 --- a/packages/kilo-vscode/src/KiloProvider.ts +++ b/packages/kilo-vscode/src/KiloProvider.ts @@ -1623,17 +1623,21 @@ export class KiloProvider implements vscode.WebviewViewProvider, TelemetryProper const { visible, defaultAgent } = filterVisibleAgents(agents) + const mapAgent = (a: (typeof agents)[number]) => ({ + name: a.name, + displayName: a.displayName, + description: a.description, + mode: a.mode, + native: a.native, + color: a.color, + deprecated: a.deprecated, + permission: a.permission, + }) + const message = { type: "agentsLoaded", - agents: visible.map((a) => ({ - name: a.name, - displayName: a.displayName, - description: a.description, - mode: a.mode, - native: a.native, - color: a.color, - deprecated: a.deprecated, - })), + agents: visible.map(mapAgent), + allAgents: agents.map(mapAgent), defaultAgent, } this.cachedAgentsMessage = message 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 5349789bae3..722021f8007 100644 --- a/packages/kilo-vscode/webview-ui/src/components/settings/AgentBehaviourTab.tsx +++ b/packages/kilo-vscode/webview-ui/src/components/settings/AgentBehaviourTab.tsx @@ -82,7 +82,7 @@ const AgentBehaviourTab: Component = () => { }) const agentNames = createMemo(() => { - const names = session.agents().map((a) => a.name) + const names = session.allAgents().map((a) => a.name) // Also include any agents from config that might not be in the agent list const agents = Object.keys(config().agent ?? {}) for (const name of agents) { @@ -185,7 +185,7 @@ const AgentBehaviourTab: Component = () => { )) } - const removableModes = createMemo(() => session.agents().filter((a) => !a.native)) + const removableModes = createMemo(() => session.allAgents().filter((a) => !a.native)) const confirmRemoveMode = (agent: AgentInfo) => { dialog.show(() => ( @@ -354,7 +354,7 @@ const AgentBehaviourTab: Component = () => { {(name, index) => { - const agent = () => session.agents().find((a) => a.name === name) + const agent = () => session.allAgents().find((a) => a.name === name) const isCustom = () => !agent()?.native const agentCfg = () => config().agent?.[name] ?? {} const disabled = () => agentCfg().disable ?? false @@ -396,6 +396,19 @@ const AgentBehaviourTab: Component = () => { custom + + + {language.t("settings.agentBehaviour.badge.subagent")} + + = (props) => { // agent() may be undefined for modes that only exist in the config draft (just // created, not yet saved). This is fine — native defaults to false (correct for // custom modes) and all fields read from cfg() which comes from config context. - const agent = () => session.agents().find((a) => a.name === props.name) + const agent = () => session.allAgents().find((a) => a.name === props.name) const native = () => agent()?.native ?? false + const [expanded, setExpanded] = createSignal(false) const cfg = createMemo(() => config().agent?.[props.name] ?? {}) @@ -230,6 +231,11 @@ const ModeEditView: Component = (props) => { + {/* Calculated permissions (read-only, collapsible) */} + + setExpanded((v) => !v)} /> + +