* At-mention picker: show "Searching..." instead of misleading "No results found"
When the @-mention picker fires its initial empty-query searchFiles, slow
workspaces (e.g. network mounts) leave the call in flight for several
seconds. Three small UX bugs combined to make this look broken:
1. The 500ms delayed-loading effect was gated on `searchQuery` being
non-empty, so the spinner never appeared during the initial open —
the user just saw "No results found" forever.
2. While loading, the spinner row stacked above the "No results found"
row, claiming both states at once.
3. The spinner also stacked above the static root-menu items
("Paste URL", "Problems", "Git Commits", "Add File", "Add Folder")
when the picker first opens with empty input, even though those
items are already actionable.
Fixes:
- Drop the `&& searchQuery` guard so the loading effect arms on empty
queries too.
- In `filteredOptions`, strip the lone `NoResults` entry while
`showDelayedLoading` is true — searching is not the same as nothing
matched.
- Render the spinner only when `filteredOptions.length === 0`, so it
never stacks above existing options.
The 500ms delay before the spinner appears is preserved, so fast
searches stay visually quiet.
* fixes
* Drop stale @-mention searchFiles responses to fix "No results" flash
* Track in-flight searches with a monotonic latestSearchTokenRef in
ChatTextArea; resolve/error handlers bail when their captured token
is no longer the latest.
* Send the token as mentionsRequestId; proto already supports it.
* Drop the never-read currentSearchQueryRef scaffold.
* Fixes the cancel-then-re-pick race (Add File → cancel → Add Folder)
reported in CLINE-1814.
* feat: wire up globalSkills consumption from remote config
The remote config schema already includes globalSkills (merged in #10236).
The dashboard can save skills to remote config. This PR wires up the
extension to read and use them.
## Changes
### State storage (Layer 1)
- Add remoteGlobalSkills to REMOTE_CONFIG_EXTRA_FIELDS
- Add remoteSkillsToggles to GLOBAL_STATE_FIELDS
### Remote config transform/apply/clear (Layer 2)
- Map globalSkills → remoteGlobalSkills in transformRemoteConfigToStateShape
- Sync remoteSkillsToggles in applyRemoteConfig using frontmatter.name
as the identity key (not entry.name)
- Clear remoteSkillsToggles in clearRemoteConfig
### Skill discovery (Layer 3)
- discoverSkills accepts optional remoteSkillEntries parameter (pure
utility, no StateManager coupling)
- getSkillContent accepts optional remoteSkillEntries parameter for
remote content loading without disk I/O
- Precedence: remote (enterprise) > disk-global (user) > project
### refreshSkills (Layer 3b)
- Reads remote entries from controller.stateManager, parses frontmatter,
builds SkillInfo entries with alwaysEnabled field
### UseSkillToolHandler (Layer 4)
- Toggle filter checks remoteSkillsToggles for remote: prefixed skills
- Directory note omitted for remote skills
- Passes remoteSkillEntries to both discoverSkills and getSkillContent
### toggleSkill
- Routes remote: prefixed paths to remoteSkillsToggles keyed by name
### Proto + webview
- Added always_enabled field to SkillInfo proto message
- Modal passes isRemote + alwaysEnabled to RuleRow for remote skills
- Uses skill.name as display label for remote skills
## Design decisions
- frontmatter.name is the sole identity for remote skills (entry.name
is ignored). This matches how local skills work.
- remote: path prefix distinguishes remote from disk skills in toggle
stores and content loading.
- skills.ts remains a pure utility module with zero StateManager coupling.
Callers inject remote entries as parameters.
- 42 unit tests covering discovery, precedence, content loading, toggle
sync, and frontmatter parsing.
* fix: enforce alwaysEnabled in toggle sync to prevent stale false overrides
When applyRemoteConfig syncs skill toggles, synchronizeRemoteRuleToggles
preserves existing toggle values — including false. If an admin later
sets alwaysEnabled: true on a skill that a user had previously disabled,
the stale false toggle would survive the sync. The UI would show the
skill as locked-on (via the alwaysEnabled check in refreshSkills), but
UseSkillToolHandler's filter would see false in the toggle store and
exclude it, causing a 'Skill not found' error for a skill the user can
see is active.
Fix: after synchronizeRemoteRuleToggles, force any alwaysEnabled entry
with a false toggle back to true. This makes the toggle store the single
source of truth — both UI and handler now agree.
Adds 4 tests covering the alwaysEnabled enforcement edge cases.
* fix: deduplicate remote skill parsing, add drift validation, and fix architectural gaps
1. Extract shared parseRemoteSkillEntries utility (skills.ts)
- Single validation point for remote skill entries, replacing duplicated
frontmatter parsing in skills.ts, refreshSkills.ts, and remote-config/utils.ts
- Enforces entry.name === frontmatter.name to catch drift between the
dashboard and SKILL.md content (rejects with warning on mismatch)
2. Eliminate redundant frontmatter re-parsing in getSkillContent
- Was re-parsing every entry's frontmatter to find a match by name
- Now uses entry.name for lookup since drift validation guarantees equality
3. Enforce alwaysEnabled in UseSkillToolHandler
- The toggle filter was missing the alwaysEnabled check, so a stale false
toggle could hide an admin-locked skill from the model
- Now matches the logic in refreshSkills.ts
4. Add remote_skills_toggles to SkillsToggles proto
- toggleSkill now returns remoteSkillsToggles in the response, matching
how remote rules/workflows already work
5. Separate Enterprise Skills section in UI
- Remote skills now render under their own "Enterprise Skills" header,
consistent with how rules and workflows display remote entries
6. Update tests for new validation behavior
- Tests now use entry.name matching frontmatter.name (was deliberately
mismatched before); added drift rejection tests
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: enable viewing remote skills and fix tooltip text in RuleRow
- openRemoteFile now handles remote://skill/{name} URIs (was only
rule and workflow), looking up content from remoteGlobalSkills
- RuleRow's handleEditClick builds the correct URI type for skills
(was falling through to "rule")
- Tooltip text now uses ruleType ("View skill file") instead of
hardcoded "View rule file" for all remote entries
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: soften drift validation to warn-not-reject, fix content lookup fallback
The strict entry.name !== frontmatter.name rejection was silently hiding
org-configured skills when the dashboard's entry.name didn't match the
SKILL.md frontmatter name.
- parseRemoteSkillEntries now warns on drift but uses frontmatter.name as
the canonical identity instead of rejecting the entry
- getSkillContent falls back to frontmatter match when entry.name lookup
misses (handles drift for content loading)
- openRemoteFile falls back to frontmatter match for skill view (same
reason)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: include remote skills in system prompt and fix remote config race
The system prompt generation called discoverSkills() without passing
remoteSkillEntries, so the model never learned about remote skills and
never invoked use_skill for them. This was the actual cause of remote
skills being invisible to the model despite showing in the UI.
Also fixes a race condition in applyRemoteConfig where clearRemoteConfig()
wiped the in-memory cache before repopulating it field-by-field. Any
concurrent reader (e.g., UseSkillToolHandler) during that window would
see an empty cache. Replaced with atomic replaceRemoteConfig() that
builds the new cache and swaps it in a single assignment.
- task/index.ts: pass remoteSkillEntries to discoverSkills, add
remoteSkillsToggles + alwaysEnabled filtering (matching handler)
- StateManager: add replaceRemoteConfig() for atomic cache swap
- remote-config/utils.ts: use replaceRemoteConfig instead of
clearRemoteConfig + setRemoteConfigField loop
- Remove debug logging from parseRemoteSkillEntries and handler
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: include remote skills in subagent path
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(models): prepare Claude Opus 4.7 provider support
* remove deprecated params for opus 4.7
- opus 4.7 doesn't accept params like temperature, top_p, top_k anymore.
This commit removes those params only for opus 4.7
* Agent hill climb fixes
* Anthropic adaptive thinking
* Removing 1m context switcher
* Removing 1m models fully
* Restore Anthropic 1M variants and context switchers
* Adding 1m
* remove changeset
* fix Opus 4.5 adaptive thinking detection
---------
Co-authored-by: Max Paulus 🥪 <max@cline.bot>
Co-authored-by: Arafatkatze <arafat.da.khan@gmail.com>
* feat(chat): add SpendLimitError UI for SPEND_LIMIT_EXCEEDED (429)
When the Cline backend returns a 429 with code SPEND_LIMIT_EXCEEDED (org
budget cap hit), the chat error flow now shows a dedicated SpendLimitError
component instead of falling through to the generic rate-limit message.
Changes:
- proto/cline/account.proto: add submitLimitIncreaseRequest RPC +
SubmitLimitIncreaseResponse message
- src/services/error/ClineError.ts: add SpendLimit error type; detect
SPEND_LIMIT_EXCEEDED before the generic rate-limit pattern check
- src/services/account/ClineAccountService.ts: add
submitLimitIncreaseRequestRPC() calling POST /api/v1/users/me/budget/request
- src/core/controller/account/submitLimitIncreaseRequest.ts: new gRPC
handler wired automatically by npm run protos
- webview-ui/src/components/chat/SpendLimitError.tsx: new card component
mirroring CreditLimitError; shows spent/limit amounts, resets_at, org
attribution, and a Request Increase button with 5-min localSto
When the Cline backend returns a 429 with code SPEND_LIMIT_EXCEEDED (org
budgetrors to
SpendLbudget cap hit), the chat budget_period,limit_usd,spent_usd,resets_at}
- component instead of falling through to the generic rate-limnd Limit
Reac
Changes:
- proto/cline/account.p
* Update webview-ui/src/components/chat/SpendLimitError.tsx
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
* chore: shorten spend limit error message verbiage
* fix(storybook): align spend limit story messages with component output
---------
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Surface the actual read_file line window in chat summaries so users can see what context was added, while keeping manual approval and repeated same-file reads rendered accurately.
VSCode's webview doesn't reliably play VP9/WebM, while JetBrains'
JCEF lacks H.264 decoding. Restore the original H.264/MP4 video and
use HTML5 <source> elements with explicit MIME types so each platform
picks the format it supports:
<source src=... type="video/mp4" /> <!-- VSCode -->
<source src=... type="video/webm" /> <!-- JetBrains -->
Also:
- Restore .mp4 Git LFS tracking in .gitattributes
- Update CI LFS verification to check both files
- Add webm to JetBrains MIME type map (BrowserRequestHandler)
JetBrains IDEs use JCEF (Chromium Embedded Framework) for webviews,
which often does not include H.264 decoding due to licensing
restrictions. This causes the kanban demo video to fail to play.
Transcode the video from H.264/MP4 to VP9/WebM, which is a royalty-free
codec universally supported in Chromium derivatives. This also reduces
the file size from 3.6MB to ~900KB.
Updated all references:
- Source component import (ClineKanbanLaunchModal.tsx)
- Git LFS tracking (.gitattributes)
- CI workflow LFS checks (publish.yml, publish-nightly.yml)
* feat: add feature tips tooltip during thinking state
Show rotating feature tips below the Thinking indicator to keep users engaged and educate them on features like Double-Check Completion, .clinerules, Plan Mode, MCP Servers, checkpoints, and more.
- New FeatureTip component with 12 curated tips
- 2s delayed appearance, 8s cycling with fade transitions
- Visible throughout entire thinking/reasoning phase
- Proper timer cleanup on unmount
* Update webview-ui/src/components/chat/FeatureTip.tsx
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
* Update webview-ui/src/components/chat/FeatureTip.tsx
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
* Update webview-ui/src/components/chat/ChatRow.tsx
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
* fix: remove unused useMemo import from FeatureTip
* fix: increase test delays in QuitCommand.test.tsx for Windows CI reliability
* Update webview-ui/src/components/chat/FeatureTip.tsx
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
* fix: add smooth fade-in for first tooltip appearance
The first tooltip was appearing abruptly because the element went from
not-in-DOM (return null) to opacity-100 instantly. Added hasFadedIn state
with requestAnimationFrame to ensure the CSS transition applies on initial
render, giving the first tip a smooth 300ms fade-in.
---------
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
* Fix issue with Windows notification
Fix Windows proto tooling
Fix Windows unit test path normalization
Revert "Fix Windows unit test path normalization"
This reverts commit 73400a3ca6f0300d009f7c8238a016d769186f3a.
Remove package-lock.json changes
* Remove unnecessary changes
* Use command approval string for notifications
* Address PR feedback on Windows notifications
* Fix Windows protoc path for CI
* Polish notification safety and test coverage
* Fix unfound tests in CI
* Harden Windows notifications and protoc execution
* Fix Windows path normalization in glob test
* Fix as per Greptile feedback
* feat(wandb): add W&B Inference by CoreWeave provider
Adds support for W&B Inference as an API provider using a W&B API key.
Implements a provider handler with OpenAI-compatible streaming and a static
model catalog, and wires the provider through the API layer, configuration
schema, storage, CLI model picker, and settings UI.
* Updated input/output price of NVIDIA-Nemotron
* Updated helpText
* handle reasoning tokens in streaming respons
* Added clarifying comment on how W&B token usage is reported and why cached tokens
* fix: restore proto field numbers changed by generation script
* Update src/core/api/providers/wandb.ts
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
---------
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
* Add an UsafeImage handler that asks for consent before loading specific images
* Fix div as child of p
* Render self-contained images without consent
* Render alt conditionally and store approved src
* use a block span
* Add implementation plan doc
* feat(hooks): reintroduce runtime hooks feature toggle
* fix: thread effective hooks toggle through hook execution
* test: cover hooks feature toggle visibility and settings wiring
* Remove implementation plan doc
* Move Hooks toggle to Advanced section in Feature Settings
* Fixes as per PR feedback
* Clarifying hooksEnabled
* Make hooksEnabled true by default
* Further fixes as per Greptile feedback
* Further fixes as per Greptile feedback
* Fix failing tests
* fix: stop infinite getLatestMcpServers RPC loop when opening MCP servers panel
The ServersToggleModal useEffect had setMcpServers in its dependency array,
but the context provided an unstable inline wrapper around the useState setter,
creating a new function reference on every render. This caused the effect to
re-fire on every context re-render while the modal was visible, producing 14+
RPC calls in ~15ms.
- Remove setMcpServers from useEffect deps in ServersToggleModal (the effect
should only fire when visibility changes)
- Replace inline arrow wrappers in ExtensionStateContext with direct references
to the stable useState setters (setMcpServers, setRequestyModels,
setHuggingFaceModels, setMcpMarketplaceCatalog)
* address review feedback: add setMcpServers back to deps, use property shorthand
- Add setMcpServers back to useEffect deps in ServersToggleModal now that the
context passes the stable useState setter directly (per Copilot review)
- Remove eslint-disable comment since it's no longer needed
- Use property shorthand for setGroqModels and setBasetenModels in context value
* feat(hooks): add Windows hook execution via PowerShell
* chore(changeset): add release note for Windows hooks
* Get hooks working on Windows
Remove changeset file (we no longer use changeset files)
feat(hooks): support Windows PowerShell hook resolution and management
feat(hooks): complete windows powershell hook support and tests
Detect linux-style hooks only on macOS and linux and detect PowerShell-style hooks only on Windows
Fixes for failing unit tests on Windows in CI
Fix failing unit tests on Windows in CI
Fix unit tests for hooks on Windows
Be clear about .ps1 file extension for hooks in PowerShell vs. bash/binary for linux-style hooks
Remove separate test suite step
Reapply hooks-specific test suite
Fix failing hooks tests
* Harden Windows hook PowerShell runtime and test coverage
* test: centralize hook test env and platform overrides
---------
Co-authored-by: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com>
* Adding 1m
* fix: wire cline model proto fields for api config
* fix: wire cline picker to shared recommended model logic
* fix: address Cline model picker parity and startup model-info sync
* remove OpenRouter preset model ID support
* rename Cline endpoint feature flag
* Fixing stuff
* Fixing stuff
* Fixing stuff
* refactor: gate cline models endpoint behind feature flag
- Update refreshClineModels to use the EXTENSION_CLINE_MODELS_ENDPOINT feature flag instead of a hardcoded boolean, allowing controlled rollouts of the endpoint source.
- Remove recommended/free models fallback logic, featured model cards, and the initialTab property from OpenRouterModelPicker to simplify the UI component.
* feat: add MiniMax M2.5 model to MiniMax provider
- Add MiniMax-M2.5 to minimaxModels with 192K context, 128K max tokens,
prompt caching, and reasoning/thinking support
- Update minimaxDefaultModelId to MiniMax-M2.5
- Add minimax/minimax-m2.5 to OpenRouter prompt caching switch
Closes#9391
* fix: add temperature: 1 to MiniMax M2.5 for reasoning support
* docs: update MiniMax provider docs with M2.5 model
* feat: wire up thinking/reasoning support for MiniMax M2.5
- Pass thinkingBudgetTokens from factory to MinimaxHandler
- Use thinking param in API call when reasoning is enabled
- Disable temperature and forced tool_choice when thinking is on
- Add ThinkingBudgetSlider to MiniMaxProvider UI for M2.5
* Add MiniMax-M2.5-highspeed
* Add thinking for highspeed
* Refactor thinking logic
---------
Co-authored-by: BarreiroT <tomasmbarreiroi@gmail.com>
Co-authored-by: Tomás Barreiro <52393857+BarreiroT@users.noreply.github.com>
- Update model ID and name from gpt-5.2-codex to gpt-5.3-codex
- Change tag from "HOT" to "NEW" for the updated model
- Add What's New banner entry promoting Codex 5.3 availability
* chore: replace baseUrl with explicit relative paths in tsconfig files
Remove `baseUrl: "."` from tsconfig configurations and update all path aliases to use explicit relative paths (e.g., `./src/*` instead of `src/*`). This makes path resolution more explicit and avoids potential ambiguity in module resolution across the main project and webview-ui configurations.
* update package-lock.json
* Release V3.67.0
Bump version from 3.66.0 to 3.67.0 in package.json and
package-lock.json. Add changelog entry for v3.67.0 covering new
features (subagent skills, AgentConfigLoader, Responses API, websocket
preconnect, CLI /q command), bug fixes (reasoning delta crash, OpenAI
tool ID, auth checks, Gemini 3.1 Pro), and other changes. Update
WhatsNewItems fallback banners to reflect current promotions.
* Fixing stuff
* feat(cli): fetch featured models from backend with local fallback
- Add async getFeaturedModelsForCline() to fetch models via controller
- Load featured models dynamically in AuthView with useEffect
- Update FeaturedModelPicker to accept featuredModels as optional prop
- Refactor helper functions to accept models parameter for flexibility
- Keep local hardcoded models as fallback when backend fetch fails
* Fixing stuff
* Fixing stuff
* Fixing stuff
* refactor: centralize tool handler registration and filter by allowed tools
- Create centralized toolHandlersMap for all tool handler instantiation
- Add registerToolHandlers method to register only allowed tools from config
- Filter subagent tools to only include allowed tools from allowedTools config
- Remove scattered tool handler registration logic in favor of single source of truth
- Improve maintainability by consolidating tool handler creation in one place
This refactoring ensures subagents only have access to explicitly allowed tools
and makes the tool registration process more maintainable and consistent.
It also improves separation of concerns by having the coordinator manage all tool handler registration, while the executor focuses on orchestration. The allowedTools parameter enables runtime filtering of available tools for different contexts.
Also update PromptRegistry to load synchronous and simplify variant lookup
- Convert async load() to synchronous, called in constructor as both loadVariants and loadComponents are not async functions
- Remove health check logic and loaded state tracking
- Extract getVariant() method with proper generic fallback
- Add getComponents() accessor and simplify component loading
- Convert variant/component loaders from async to synchronous
- Remove unnecessary await calls throughout the codebase
- Add PromptRegistry tests for variant resolution and components
* fix test
* feat: add AgentConfigLoader for file-based agent configs
Add AgentConfigLoader singleton to manage agent configurations loaded from
YAML files in the agents directory. Supports hot-reloading via file watcher,
validates config schema with Zod, and integrates with extension lifecycle
(StateManager initialization and tearDown disposal).
* add tests
* add missing export
* update tests
* feat(tools): implement dynamic tool registration for subagents
Updates the tool system to support dynamically registered subagents as individual tools.
- Modifies `ClineToolSet` to generate specific tool definitions for configured subagents via `AgentConfigLoader`.
- Updates `parseAssistantMessageV2` to use `getToolUseNames()` instead of a static list, enabling the parser to recognize dynamic tool tags.
- Replaces the generic `USE_SUBAGENTS` tool with specific subagent instances when available in the system prompt context.
* update config path and refine tool descriptions
- Relocate the subagent configuration directory from `~/.cline/data/agents` to `~/Documents/Cline/Agents` to improve user accessibility.
- Update subagent tool descriptions and parameter instructions in the system prompt to be more descriptive and helpful for the model.
* revert unrelated changes
* revert unrelated changes
* update unit test
* fix: await AgentConfigLoader initialization before StateManager completes
Ensure agent configs are fully loaded during StateManager initialization
by awaiting the `ready()` promise. Previously, `AgentConfigLoader` was
instantiated without waiting for the initial load to complete, causing
potential race conditions where configs might not be available when
needed.
- Add `initialLoadPromise` field to track the async initial load
- Expose a `ready()` method to allow callers to await initialization
- Await `AgentConfigLoader.getInstance().ready()` in StateManager
* set previousRequestTotalTokens
* fix: openai native provider token usage mapping
- Add `store` parameter support to OpenAI native provider options to allow persisting completions.
- Fix incorrect mapping of `cached_tokens` and `reasoning_tokens` in usage statistics.
- Include `thoughtsTokenCount` in the final usage report to track reasoning model performance and costs.
* feat: add websocket support for OpenAI Responses API
This commit introduces WebSocket support for the OpenAI Native provider's Responses API, providing an alternative to the standard HTTP streaming.
- Implement `createResponseStreamWebsocket` in `OpenAiNativeHandler` with a fallback to HTTP on failure.
- Refactor `OpenAiNativeHandler` to modularize tool mapping and parameter construction for the Responses API.
- Update `OcaHandler` to explicitly disable `previousResponseId` when using the Responses API and add validation for model information.
- Integrate `undici` WebSocket for better compatibility in the extension environment.
* disablePreviousResponseId
* feat: add timestamp to conversation messages for response chaining
Add `ts` field to `ClineStorageMessage` to track when messages were
created. Use this timestamp to enforce a 23-hour validity window when
chaining OpenAI responses via `previousResponseId`, since the API only
retains responses for 24 hours. Also fix non-null assertion operators
in tests to use optional chaining for safer access.
* add OpenAI Responses Websocket Mode ApiFormat support
- Add `OPENAI_RESPONSES_WEBSOCKET_MODE` to the `ApiFormat` enum in proto definitions.
- Update `OpenAiNativeHandler` to use the new API format for determining when to use websocket mode, replacing previous environment-based logic.
- Refactor tool mapping for OpenAI Responses to support strict mode and correctly handle null parameters.
- Ensure the `store` option is disabled when `previous_response_id` is present in websocket mode.
- Bump version to 2.4.1 and update package dependencies.
* use abortController
* add support for websocket mode to openai-codex
* set behind feature flag
* fix: inline focus-chain slider within its feature row
Moves the focus-chain reminder interval `SettingsSlider` from a
standalone element rendered after all experimental feature rows to
being rendered directly beneath the focus-chain `FeatureRow`. The
slider now renders conditionally when `feature.id === "focus-chain"`
and the feature is enabled, improving UI cohesion and making the
relationship between the toggle and its configuration more explicit.
Additionally:
- Relocates focus-chain from `experimentalFeatures` to `agentFeatures`
- Removes the `isExperimental` prop and "Experimental:" label badge
from `FeatureRow` and related feature toggle definitions
- Simplifies `SettingsSlider` markup by removing the wrapper card
styling, making it suitable for inline embedding
- Removes unused line from common.ts
* nestedKey
Handle plain Cmd/Ctrl+A directly in `ChatTextArea` keydown to force
textarea-wide selection via `setSelectionRange`, while preventing default
and propagation. This avoids intermittent failures caused by global shortcut
listener races, and keeps Cmd/Ctrl+Shift+A behavior unchanged.fix(chat): make Cmd/Ctrl+A select-all deterministic
Handle plain Cmd/Ctrl+A directly in `ChatTextArea` keydown to force
textarea-wide selection via `setSelectionRange`, while preventing default
and propagation. This avoids intermittent failures caused by global shortcut
listener races, and keeps Cmd/Ctrl+Shift+A behavior unchanged.
* fix: flaky Cancel behavior by preventing duplicate cancel actions
This PR fixes chat cancel behavior where users sometimes had to click Cancel multiple times, and repeated clicks could accidentally transition into Resume/restart behavior.
* move to finally
* feat: add welcome banner support from backend
* make DB banner format conform with existing banners
* add support for welcome banner actions
* remove debugging helper that bypass dismissal, dismissal should work again
* undo changes to make welcome banner always appear during debugging
* remove console logs for debugging
* clean up bannerservice
* clean up welcomesection.tsx
* add new tests for ide type filtering
* add welcome banner own feature flag and conditionally display between hard coded welcome banner and DB backed ones
* turn on welcome banner flag locally by default
* close welcome banners when clicking on actions
* apply bot review suggestion, fix memory leak
* address feedback: use p without span
* split welcome banners into a seperate component to keep whatsnewmodal clean
* get action through api schema instead of extractin it from rules_json
* use only bannerWaitTimeoutRef, remove waitingForBannersRef
* resolve new merge conflict
* linter
* cerebra
- Remove `auto_condense_threshold` from `Settings` and `UpdateSettingsRequest` in `state.proto`.
- Remove `autoCondenseThreshold` from `ApiProviderInfo` interface.
- Update `generate-state-proto.mjs` to remove double field handling and improve integer parsing.
- Add error handling to `ContextManager` when parsing previous request JSON to prevent crashes on malformed data.