Browse Source

Merge branch 'main' into 5318_kilocode_cli_write_to_file_twice

marius-kilocode 3 weeks ago
parent
commit
de7e17dcdb
29 changed files with 312 additions and 114 deletions
  1. 0 5
      .changeset/agent-manager-api-request-spinner.md
  2. 5 0
      .changeset/agent-manager-larger-prompt-input.md
  3. 0 10
      .changeset/agent-manager-mode-selection.md
  4. 0 5
      .changeset/agent-manager-session-persistence.md
  5. 0 5
      .changeset/agent-runtime-temp-storage.md
  6. 5 0
      .changeset/cli-processing-indicator.md
  7. 0 5
      .changeset/fix-cli-partial-tool-messages.md
  8. 0 5
      .changeset/fix-model-selection-resumed-sessions.md
  9. 0 5
      .changeset/green-ducks-laugh.md
  10. 0 5
      .changeset/loud-melons-destroy.md
  11. 0 5
      .changeset/reasoning-block-agent-manager.md
  12. 0 5
      .changeset/remove-mcp-top-bar-button.md
  13. 0 5
      .changeset/skills-tab-agent-behaviour.md
  14. 0 5
      .changeset/small-worktree-indicator.md
  15. 0 5
      .changeset/smart-shirts-pull.md
  16. 0 5
      .changeset/twelve-yaks-tease.md
  17. 35 0
      CHANGELOG.md
  18. 70 3
      apps/kilocode-docs/docs/advanced-usage/cloud-agent.md
  19. 8 0
      cli/CHANGELOG.md
  20. 1 1
      cli/package.dist.json
  21. 1 1
      cli/package.json
  22. 51 0
      cli/src/state/atoms/ui.ts
  23. 5 2
      cli/src/ui/components/StatusIndicator.tsx
  24. 127 0
      cli/src/ui/components/__tests__/StatusIndicator.test.tsx
  25. 0 19
      jetbrains/plugin/src/main/kotlin/ai/kilocode/jetbrains/actions/VSCodeCommandActions.kt
  26. 0 9
      jetbrains/plugin/src/main/resources/META-INF/plugin.xml.template
  27. 1 1
      src/package.json
  28. 1 1
      webview-ui/src/kilocode/agent-manager/components/AgentManagerApp.css
  29. 2 2
      webview-ui/src/kilocode/agent-manager/components/SessionDetail.tsx

+ 0 - 5
.changeset/agent-manager-api-request-spinner.md

@@ -1,5 +0,0 @@
----
-"kilo-code": patch
----
-
-Add loading spinner to agent manager API request messages

+ 5 - 0
.changeset/agent-manager-larger-prompt-input.md

@@ -0,0 +1,5 @@
+---
+"kilo-code": patch
+---
+
+Increased Agent Manager initial prompt input size for easier editing of longer prompts

+ 0 - 10
.changeset/agent-manager-mode-selection.md

@@ -1,10 +0,0 @@
----
-"kilo-code": minor
----
-
-Add mode selection to Agent Manager for CLI sessions
-
-- Mode selector in new agent form allows selecting mode (code, architect, debug, etc.) when starting sessions
-- Mode selector in session header allows switching modes during running sessions via CLI JSON-IO API
-- Modes are fetched from extension and synced with CLI sessions
-- Model selector moved below textarea in new agent form for better layout

+ 0 - 5
.changeset/agent-manager-session-persistence.md

@@ -1,5 +0,0 @@
----
-"kilo-code": patch
----
-
-Add session persistence for Agent Manager worktrees

+ 0 - 5
.changeset/agent-runtime-temp-storage.md

@@ -1,5 +0,0 @@
----
-"kilo-code": patch
----
-
-Fixed agent-manager mode creating `.kilocode-agent` directory in user workspaces. Agent storage now uses OS temp directory instead, keeping workspaces clean.

+ 5 - 0
.changeset/cli-processing-indicator.md

@@ -0,0 +1,5 @@
+---
+"@kilocode/cli": patch
+---
+
+Keep "Thinking..." indicator visible in CLI after checkpoint saves and API calls complete

+ 0 - 5
.changeset/fix-cli-partial-tool-messages.md

@@ -1,5 +0,0 @@
----
-"@kilocode/cli": patch
----
-
-Fix intermittent issue where list_files and search_files tools show "Total: 0 items" or "Found: 0 matches"

+ 0 - 5
.changeset/fix-model-selection-resumed-sessions.md

@@ -1,5 +0,0 @@
----
-"kilo-code": patch
----
-
-Fix model selection not showing in resumed sessions in Agent Manager

+ 0 - 5
.changeset/green-ducks-laugh.md

@@ -1,5 +0,0 @@
----
-"kilo-code": patch
----
-
-Fix parallel mode completion messaging when commits fail.

+ 0 - 5
.changeset/loud-melons-destroy.md

@@ -1,5 +0,0 @@
----
-"kilo-code": patch
----
-
-Fix: Check that `model_info` field exists before attempting to call Object.keys() on it.

+ 0 - 5
.changeset/reasoning-block-agent-manager.md

@@ -1,5 +0,0 @@
----
-"kilo-code": patch
----
-
-Display reasoning as collapsible block in Agent Manager instead of plain text

+ 0 - 5
.changeset/remove-mcp-top-bar-button.md

@@ -1,5 +0,0 @@
----
-"kilo-code": minor
----
-
-Centralize Agent behaviour settings by removing the top bar MCP button and moving Mode, MCP, Rules, and Workflows configuration into the Agent Behaviour area.

+ 0 - 5
.changeset/skills-tab-agent-behaviour.md

@@ -1,5 +0,0 @@
----
-"kilo-code": patch
----
-
-Add Skills tab to Agent Behaviour settings for viewing and managing installed skills

+ 0 - 5
.changeset/small-worktree-indicator.md

@@ -1,5 +0,0 @@
----
-"@kilocode/cli": patch
----
-
-Replace verbose "(git worktree)" indicator with compact "⎇" symbol in CLI status bar and terminal title

+ 0 - 5
.changeset/smart-shirts-pull.md

@@ -1,5 +0,0 @@
----
-"kilo-code": patch
----
-
-feat(mcp): implement oauth 2.1 authorization for http transports

+ 0 - 5
.changeset/twelve-yaks-tease.md

@@ -1,5 +0,0 @@
----
-"kilo-code": patch
----
-
-Force tool use when using Haiku with the Anthropic provider

+ 35 - 0
CHANGELOG.md

@@ -1,5 +1,40 @@
 # kilo-code
 
+## 4.152.0
+
+### Minor Changes
+
+- [#5211](https://github.com/Kilo-Org/kilocode/pull/5211) [`a94f8f0`](https://github.com/Kilo-Org/kilocode/commit/a94f8f06c561027158356858bf6642927794b2a9) Thanks [@marius-kilocode](https://github.com/marius-kilocode)! - Add mode selection to Agent Manager for CLI sessions
+
+    - Mode selector in new agent form allows selecting mode (code, architect, debug, etc.) when starting sessions
+    - Mode selector in session header allows switching modes during running sessions via CLI JSON-IO API
+    - Modes are fetched from extension and synced with CLI sessions
+    - Model selector moved below textarea in new agent form for better layout
+
+- [#5264](https://github.com/Kilo-Org/kilocode/pull/5264) [`61af1e7`](https://github.com/Kilo-Org/kilocode/commit/61af1e74c24e8a2af99b218da69d51b3000d2f0f) Thanks [@markijbema](https://github.com/markijbema)! - Centralize Agent behaviour settings by removing the top bar MCP button and moving Mode, MCP, Rules, and Workflows configuration into the Agent Behaviour area.
+
+### Patch Changes
+
+- [#5312](https://github.com/Kilo-Org/kilocode/pull/5312) [`322d891`](https://github.com/Kilo-Org/kilocode/commit/322d891c5461deada1cc1c5057bde5cf7eb774d1) Thanks [@marius-kilocode](https://github.com/marius-kilocode)! - Add loading spinner to agent manager API request messages
+
+- [#5233](https://github.com/Kilo-Org/kilocode/pull/5233) [`86bcfee`](https://github.com/Kilo-Org/kilocode/commit/86bcfee20a672d9e06a86b86c7d7cec28d0a8913) Thanks [@marius-kilocode](https://github.com/marius-kilocode)! - Add session persistence for Agent Manager worktrees
+
+- [#5313](https://github.com/Kilo-Org/kilocode/pull/5313) [`c882b95`](https://github.com/Kilo-Org/kilocode/commit/c882b9558c39abffbdced575939be7b2125be0e2) Thanks [@marius-kilocode](https://github.com/marius-kilocode)! - Fixed agent-manager mode creating `.kilocode-agent` directory in user workspaces. Agent storage now uses OS temp directory instead, keeping workspaces clean.
+
+- [#5315](https://github.com/Kilo-Org/kilocode/pull/5315) [`f0a9036`](https://github.com/Kilo-Org/kilocode/commit/f0a9036b766ab8a0b1158be804bdeb256f476596) Thanks [@marius-kilocode](https://github.com/marius-kilocode)! - Fix model selection not showing in resumed sessions in Agent Manager
+
+- [#5232](https://github.com/Kilo-Org/kilocode/pull/5232) [`cc04a57`](https://github.com/Kilo-Org/kilocode/commit/cc04a5719ca5b457e38b7bacdab2c6dac92cf297) Thanks [@marius-kilocode](https://github.com/marius-kilocode)! - Fix parallel mode completion messaging when commits fail.
+
+- [#5151](https://github.com/Kilo-Org/kilocode/pull/5151) [`5565a7c`](https://github.com/Kilo-Org/kilocode/commit/5565a7c15544630b11297f40f4e948588943b893) Thanks [@Senneseph](https://github.com/Senneseph)! - Fix: Check that `model_info` field exists before attempting to call Object.keys() on it.
+
+- [#5314](https://github.com/Kilo-Org/kilocode/pull/5314) [`f202bd5`](https://github.com/Kilo-Org/kilocode/commit/f202bd55756a0382dc6abb619ddbb1e7451343b5) Thanks [@marius-kilocode](https://github.com/marius-kilocode)! - Display reasoning as collapsible block in Agent Manager instead of plain text
+
+- [#5287](https://github.com/Kilo-Org/kilocode/pull/5287) [`4662b02`](https://github.com/Kilo-Org/kilocode/commit/4662b02f0a8fa2b5cb95120c6c1ef7984508d0f3) Thanks [@markijbema](https://github.com/markijbema)! - Add Skills tab to Agent Behaviour settings for viewing and managing installed skills
+
+- [#5297](https://github.com/Kilo-Org/kilocode/pull/5297) [`f6badf7`](https://github.com/Kilo-Org/kilocode/commit/f6badf709982890fca245b1e079d041efddbfc26) Thanks [@jrf0110](https://github.com/jrf0110)! - feat(mcp): implement oauth 2.1 authorization for http transports
+
+- [#5254](https://github.com/Kilo-Org/kilocode/pull/5254) [`9348a3d`](https://github.com/Kilo-Org/kilocode/commit/9348a3d33d68ff61340e90a2647c1026752ea66a) Thanks [@chrarnoldus](https://github.com/chrarnoldus)! - Force tool use when using Haiku with the Anthropic provider
+
 ## 4.151.0
 
 ### Minor Changes

+ 70 - 3
apps/kilocode-docs/docs/advanced-usage/cloud-agent.md

@@ -71,9 +71,21 @@ Your work is always pushed to GitHub, ensuring nothing is lost.
 
 ---
 
-## Environment Variables & Startup Commands
+## Agent Environment Profiles
 
-You can customize each Cloud Agent session by defining:
+Agent environment profiles are reusable bundles of environment settings for cloud-agent sessions. A profile can include:
+
+- Environment variables (plaintext)
+- Secrets (encrypted at rest; decrypted only by the cloud agent)
+- Setup commands (which Cloud Agent will execute before starting a session)
+
+Profiles are owned by either a user or an organization. Names are unique per owner, and each owner can have a single default profile. This lets teams share standard environment setups across multiple sessions and triggers.
+
+---
+
+## Environment Variables & Secrets & Startup Commands
+
+You can customize each Cloud Agent session by also defining env vars and startup commands on the fly. These will override any Agent Environment Profile you've selected:
 
 ### Environment Variables
 
@@ -113,7 +125,62 @@ Cloud Agents are great for:
 
 ---
 
-## Limitations and Guidance
+## Webhook Triggers
+
+Webhook triggers allow you to initiate cloud agent sessions via HTTP requests. This enables integration with external services and automation workflows.
+
+:::note
+Webhook triggers are currently in beta and subject to change.
+:::
+
+### Accessing Webhooks
+
+Webhook triggers are accessible from the main sidebar with an entry named **Webhook** and link to [https://app.kilo.ai/cloud/webhooks](https://app.kilo.ai/cloud/webhooks) for personal accounts. Organization-level webhook configurations are available through your organization's sidebar.
+
+### Configuration
+
+Webhook triggers utilize [agent environment profiles](#agent-environment-profiles) to configure the execution environment for triggered sessions. The agent resolves the profile at runtime, so profile updates apply automatically to future executions. Profiles referenced by triggers cannot be deleted until those triggers are updated or removed.
+
+Webhook triggers do not support manual env var or setup command overrides at this time.
+
+### Trigger Limits and Guidance
+
+Webhook triggers are designed for low-volume invocations from trusted sources and are best suited for short-lived tasks.
+
+- **Personal webhooks**: Execute in the same sandbox container as a user's Cloud Agent sessions. You can view/join invocations live.
+- **Organization webhooks**: Execute in dedicated compute resources as a bot user, similar to Code Review sessions. You can share/fork the sessions when they're complete.
+
+Additional limits:
+
+- **Payload size**: max **256 KB** per request body (larger payloads return `413`)
+- **Content types**: binary and multipart payloads are rejected (`415`) such as `multipart/*`, `application/octet-stream`, `image/*`, `audio/*`, `video/*`, `application/pdf`, `application/zip`
+- **Retention**: only the **most recent 100 requests per trigger** are retained
+- **In-flight cap**: at most **20 requests per trigger** can be in `captured` or `inprogress` at once (returns `429`)
+
+The webhook endpoint will return rate limit responses when the number of queued or processing requests exceeds system capacity.
+
+### Webhook Prompt Template Variables
+
+You can reference request data in a trigger’s prompt template using these placeholders:
+
+- `{{body}}` - raw request body (string)
+- `{{bodyJson}}` - pretty-printed JSON if parseable, otherwise raw body
+- `{{method}}` - HTTP method (GET, POST, etc.)
+- `{{path}}` - request path
+- `{{headers}}` - JSON-formatted request headers
+- `{{query}}` - query string without leading `?` (empty if none)
+- `{{sourceIp}}` - client IP if provided (falls back to `unknown`)
+- `{{timestamp}}` - capture timestamp (ISO string)
+
+### Security Considerations
+
+:::warning
+Care should be taken when deciding to use webhooks as they are susceptible to prompt injection attacks. Especially in scenarios where webhook payloads may contain untrusted input. At this time we recommend using webhooks only for trusted sources.
+:::
+
+---
+
+## General Cloud Agent Limitations and Guidance
 
 - Each message can run for **up to 15 minutes**.
   Break large tasks into smaller steps; use a `plan.md` or `todo.md` file to keep scope clear.

+ 8 - 0
cli/CHANGELOG.md

@@ -1,5 +1,13 @@
 # @kilocode/cli
 
+## 0.25.1
+
+### Patch Changes
+
+- [#5250](https://github.com/Kilo-Org/kilocode/pull/5250) [`96c2b39`](https://github.com/Kilo-Org/kilocode/commit/96c2b391744beb5b1a1665638587cc67706f6773) Thanks [@marius-kilocode](https://github.com/marius-kilocode)! - Fix intermittent issue where list_files and search_files tools show "Total: 0 items" or "Found: 0 matches"
+
+- [#5227](https://github.com/Kilo-Org/kilocode/pull/5227) [`12d96fa`](https://github.com/Kilo-Org/kilocode/commit/12d96fa41da4ce1ae3dce03d7180f59f1e154ff8) Thanks [@marius-kilocode](https://github.com/marius-kilocode)! - Replace verbose "(git worktree)" indicator with compact "⎇" symbol in CLI status bar and terminal title
+
 ## 0.25.0
 
 ### Minor Changes

+ 1 - 1
cli/package.dist.json

@@ -1,6 +1,6 @@
 {
 	"name": "@kilocode/cli",
-	"version": "0.25.0",
+	"version": "0.25.1",
 	"description": "Terminal User Interface for Kilo Code",
 	"type": "module",
 	"main": "index.js",

+ 1 - 1
cli/package.json

@@ -1,6 +1,6 @@
 {
 	"name": "@kilocode/cli",
-	"version": "0.25.0",
+	"version": "0.25.1",
 	"description": "Terminal User Interface for Kilo Code",
 	"type": "module",
 	"main": "dist/index.js",

+ 51 - 0
cli/src/state/atoms/ui.ts

@@ -17,6 +17,7 @@ import { chatMessagesAtom } from "./extension.js"
 import { splitMessages } from "../../ui/messages/utils/messageCompletion.js"
 import { textBufferStringAtom, textBufferCursorAtom, setTextAtom, clearTextAtom } from "./textBuffer.js"
 import { commitCompletionTimeout } from "../../parallel/parallel.js"
+import { logs } from "../../services/logs.js"
 
 /**
  * Unified message type that can represent both CLI and extension messages
@@ -143,6 +144,56 @@ export const isStreamingAtom = atom<boolean>((get) => {
  */
 export const isCancellingAtom = atom<boolean>(false)
 
+/**
+ * Derived atom to check if the task is actively processing but not streaming.
+ * This fills the gap when isStreamingAtom returns false but the task is still running.
+ *
+ * Returns true when:
+ * - The last message is `checkpoint_saved` (task just saved a checkpoint, will continue)
+ * - OR the last message is `api_req_started` with a cost (API call finished, task will continue)
+ *
+ * This is more precise than checking for "any non-completion message" because it only
+ * triggers for specific messages that indicate the task is actively processing.
+ */
+export const isProcessingAtom = atom<boolean>((get) => {
+	const messages = get(chatMessagesAtom)
+
+	if (messages.length === 0) {
+		return false
+	}
+
+	const lastMessage = messages[messages.length - 1]
+	if (!lastMessage) {
+		return false
+	}
+
+	// If streaming, let isStreamingAtom handle it
+	const isStreaming = get(isStreamingAtom)
+	if (isStreaming) {
+		return false
+	}
+
+	// After checkpoint_saved, the task is still running
+	if (lastMessage.say === "checkpoint_saved") {
+		return true
+	}
+
+	// After api_req_started with cost (finished API call), the task is processing the response
+	if (lastMessage.say === "api_req_started" && lastMessage.text) {
+		try {
+			const apiReqInfo = JSON.parse(lastMessage.text)
+			// If there's a cost, the API call has finished and the task is processing
+			if (apiReqInfo.cost !== undefined && apiReqInfo.cost > 0) {
+				return true
+			}
+		} catch (error) {
+			logs.debug("Failed to parse api_req_started message in isProcessingAtom", "UIAtoms", { error })
+		}
+	}
+
+	return false
+})
+
 // ============================================================================
 // Input Mode System
 // ============================================================================

+ 5 - 2
cli/src/ui/components/StatusIndicator.tsx

@@ -10,7 +10,7 @@ import { useTheme } from "../../state/hooks/useTheme.js"
 import { HotkeyBadge } from "./HotkeyBadge.js"
 import { ThinkingAnimation } from "./ThinkingAnimation.js"
 import { useAtomValue, useSetAtom } from "jotai"
-import { isStreamingAtom, isCancellingAtom } from "../../state/atoms/ui.js"
+import { isStreamingAtom, isCancellingAtom, isProcessingAtom } from "../../state/atoms/ui.js"
 import { hasResumeTaskAtom } from "../../state/atoms/extension.js"
 import { exitPromptVisibleAtom, pendingImagePastesAtom, pendingTextPastesAtom } from "../../state/atoms/keyboard.js"
 import { useEffect } from "react"
@@ -38,6 +38,7 @@ export const StatusIndicator: React.FC<StatusIndicatorProps> = ({ disabled = fal
 	const theme = useTheme()
 	const { hotkeys, shouldShow } = useHotkeys()
 	const isStreaming = useAtomValue(isStreamingAtom)
+	const isProcessing = useAtomValue(isProcessingAtom)
 	const isCancelling = useAtomValue(isCancellingAtom)
 	const setIsCancelling = useSetAtom(isCancellingAtom)
 	const hasResumeTask = useAtomValue(hasResumeTaskAtom)
@@ -84,7 +85,9 @@ export const StatusIndicator: React.FC<StatusIndicatorProps> = ({ disabled = fal
 						{isCancelling && !isPastingImage && !isPastingText && (
 							<ThinkingAnimation text="Cancelling..." />
 						)}
-						{isStreaming && !isCancelling && !isPastingImage && !isPastingText && <ThinkingAnimation />}
+						{(isStreaming || isProcessing) && !isCancelling && !isPastingImage && !isPastingText && (
+							<ThinkingAnimation />
+						)}
 						{hasResumeTask && !isPastingImage && !isPastingText && (
 							<Text color={theme.ui.text.dimmed}>Task ready to resume</Text>
 						)}

+ 127 - 0
cli/src/ui/components/__tests__/StatusIndicator.test.tsx

@@ -216,4 +216,131 @@ describe("StatusIndicator", () => {
 		expect(output).toContain("Cancelling...")
 		expect(output).not.toContain("Thinking...")
 	})
+
+	it("should show indicator after checkpoint_saved when task is still running", () => {
+		// This reproduces the bug from issue #5251
+		// After a checkpoint is saved, the indicator disappears because:
+		// 1. The checkpoint_saved message is not partial
+		// 2. The previous api_req_started has a cost (finished)
+		// 3. The next api_req_started hasn't been sent yet
+		// But the task is still running, so we should show an indicator
+
+		const messages: ExtensionChatMessage[] = [
+			// User started a task
+			{
+				type: "say",
+				say: "text",
+				ts: 1000,
+				text: "Starting task...",
+				partial: false,
+			},
+			// API request completed (has cost)
+			{
+				type: "say",
+				say: "api_req_started",
+				ts: 2000,
+				text: JSON.stringify({ cost: 0.001, tokensIn: 100, tokensOut: 50 }),
+				partial: false,
+			},
+			// Checkpoint was saved - this is the last message
+			{
+				type: "say",
+				say: "checkpoint_saved",
+				ts: 3000,
+				text: "abc123",
+				partial: false,
+			},
+		]
+		store.set(chatMessagesAtom, messages)
+
+		const { lastFrame } = render(
+			<JotaiProvider store={store}>
+				<StatusIndicator disabled={false} />
+			</JotaiProvider>,
+		)
+
+		const output = lastFrame()
+		// The task is still running (no completion_result), so we should show an indicator
+		// Currently this fails because isStreamingAtom returns false
+		expect(output).toMatch(/(?:Thinking|Processing)\.\.\./)
+	})
+
+	it("should NOT show indicator after completion_result", () => {
+		// When the task is complete, we should NOT show any indicator
+		const messages: ExtensionChatMessage[] = [
+			{
+				type: "say",
+				say: "text",
+				ts: 1000,
+				text: "Starting task...",
+				partial: false,
+			},
+			{
+				type: "say",
+				say: "api_req_started",
+				ts: 2000,
+				text: JSON.stringify({ cost: 0.001, tokensIn: 100, tokensOut: 50 }),
+				partial: false,
+			},
+			{
+				type: "say",
+				say: "completion_result",
+				ts: 3000,
+				text: "Task completed successfully",
+				partial: false,
+			},
+		]
+		store.set(chatMessagesAtom, messages)
+
+		const { lastFrame } = render(
+			<JotaiProvider store={store}>
+				<StatusIndicator disabled={false} />
+			</JotaiProvider>,
+		)
+
+		const output = lastFrame()
+		// Task is complete, should NOT show Thinking or Processing
+		expect(output).not.toContain("Thinking...")
+		expect(output).not.toContain("Processing...")
+	})
+
+	it("should NOT show indicator when waiting for tool approval", () => {
+		// When waiting for user to approve a tool, we should NOT show indicator
+		const messages: ExtensionChatMessage[] = [
+			{
+				type: "say",
+				say: "text",
+				ts: 1000,
+				text: "Starting task...",
+				partial: false,
+			},
+			{
+				type: "say",
+				say: "api_req_started",
+				ts: 2000,
+				text: JSON.stringify({ cost: 0.001, tokensIn: 100, tokensOut: 50 }),
+				partial: false,
+			},
+			// Tool asking for approval
+			{
+				type: "ask",
+				ask: "tool",
+				ts: 3000,
+				text: JSON.stringify({ tool: "write_to_file", path: "test.txt" }),
+				partial: false,
+			},
+		]
+		store.set(chatMessagesAtom, messages)
+
+		const { lastFrame } = render(
+			<JotaiProvider store={store}>
+				<StatusIndicator disabled={false} />
+			</JotaiProvider>,
+		)
+
+		const output = lastFrame()
+		// Waiting for approval, should NOT show Thinking or Processing
+		expect(output).not.toContain("Thinking...")
+		expect(output).not.toContain("Processing...")
+	})
 })

+ 0 - 19
jetbrains/plugin/src/main/kotlin/ai/kilocode/jetbrains/actions/VSCodeCommandActions.kt

@@ -61,25 +61,6 @@ class PromptsButtonClickAction : AnAction() {
     }
 }
 
-/**
- * Action that handles clicks on the MCP button in the UI.
- * Executes the corresponding VSCode command when triggered.
- */
-class MCPButtonClickAction : AnAction() {
-    private val logger: Logger = Logger.getInstance(MCPButtonClickAction::class.java)
-    private val commandId: String = "kilo-code.mcpButtonClicked"
-
-    /**
-     * Performs the action when the MCP button is clicked.
-     *
-     * @param e The action event containing context information
-     */
-    override fun actionPerformed(e: AnActionEvent) {
-        logger.info("MCP button clicked")
-        executeCommand(commandId, e.project)
-    }
-}
-
 /**
  * Action that handles clicks on the History button in the UI.
  * Executes the corresponding VSCode command when triggered.

+ 0 - 9
jetbrains/plugin/src/main/resources/META-INF/plugin.xml.template

@@ -72,14 +72,6 @@ SPDX-License-Identifier: Apache-2.0
             <override-text place="GoToAction" text="New Task" />
         </action>
 
-        <action id="kilocode.mcpButtonClicked"
-                icon="AllIcons.Webreferences.Server"
-                class="ai.kilocode.jetbrains.actions.MCPButtonClickAction"
-                text="MCP Server"
-                description="MCP server">
-            <override-text place="GoToAction" text="MCP Server" />
-        </action>
-
         <action id="kilocode.historyButtonClicked"
                 icon="AllIcons.Vcs.History"
                 class="ai.kilocode.jetbrains.actions.HistoryButtonClickAction"
@@ -114,7 +106,6 @@ SPDX-License-Identifier: Apache-2.0
 
         <group id="WecoderToolbarGroup">
             <reference ref="kilocode.plusButtonClicked" />
-            <reference ref="kilocode.mcpButtonClicked" />
             <reference ref="kilocode.historyButtonClicked" />
             <reference ref="kilocode.profileButtonClicked" />
             <reference ref="kilocode.settingsButtonClicked" />

+ 1 - 1
src/package.json

@@ -3,7 +3,7 @@
 	"displayName": "%extension.displayName%",
 	"description": "%extension.description%",
 	"publisher": "kilocode",
-	"version": "4.151.0",
+	"version": "4.152.0",
 	"icon": "assets/icons/logo-outline-black.png",
 	"galleryBanner": {
 		"color": "#FFFFFF",

+ 1 - 1
webview-ui/src/kilocode/agent-manager/components/AgentManagerApp.css

@@ -559,7 +559,7 @@
 	height: 100%;
 	padding: 20px;
 	width: 100%;
-	max-width: 560px;
+	max-width: 800px;
 	margin: 0 auto;
 	text-align: center;
 }

+ 2 - 2
webview-ui/src/kilocode/agent-manager/components/SessionDetail.tsx

@@ -406,8 +406,8 @@ function NewAgentForm() {
 						aria-label={t("sessionDetail.startNewAgent")}
 						disabled={isStarting}
 						placeholder={t("sessionDetail.placeholderTask")}
-						minRows={5}
-						maxRows={12}
+						minRows={8}
+						maxRows={20}
 						style={{
 							paddingTop: "12px",
 							// Add extra padding when images are present to make room for the image row