Commit Graph

165 Commits

Author SHA1 Message Date
Nikhil
3e23796724 fix: auto-focus chat input when side panel opens (#465)
Add window focus listener in ChatFooter that focuses the textarea when
the side panel receives focus. Handles both initial open (via
document.hasFocus check on mount) and re-focus scenarios (via window
focus event). Guards against stealing focus from other interactive
elements.

Companion Chromium fix: side_panel_coordinator.cc now always calls
RequestFocus() in PopulateSidePanel(), not just when there's no
previous entry — ensuring the side panel WebContents receives focus
on every open/toggle.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 17:29:15 -07:00
Dani Akash
f35ac0ddd3 feat: new onboarding tools (#385)
* feat: new tools for breadcrumbs

* feat: setup scheduled task card

* feat: added dismiss cooldown

* chore: update prompt

* fix: support api key tool

* fix: prompt text to limit nudges

* fix: scheduled tasks card

* fix: update nudges prompt

* feat: skip nudges when user dismisses nudge

* fix: ensure nudges only show if they are not dismissed

* Revert "fix: ensure nudges only show if they are not dismissed"

This reverts commit d825254698829b8e9941aae7873bd440027d0c74.

* Revert "feat: skip nudges when user dismisses nudge"

This reverts commit 12b552b454d10ec4209b88668fc48681423ff6fc.

* Revert "fix: update nudges prompt"

This reverts commit 80b7520b953b4d3cbed2ed477b9e508e39938dca.

* feat: update agent with mcp when new mcp connection is added

* feat: created connect apps option as a blocking card system

* feat: schedule tasks passive without dismiss

* fix: nudges and prompt texts

* fix: biome lint errors

* fix: review comments

* fix: resolve comments

* fix: review comments

* fix: review comments

* fix: auto resolve state

* fix: eliminate the race where the async delete could resolve after the
new session

* feat: track ignored apps list

* fix: empty response text object on message reply

* feat: sync previously connected mcps

* feat: sync integrations with klavis

* feat: account for unauthenticated connections

* fix: analytics events

* fix: typescript issues

* fix: klavis client issue

* fix: invalid mcps causing entire responses from failing

* fix: prompt with card for integrations when the integration fails

* fix: prompt structure to support declined apps

* fix: refresh session on mcp changes
2026-03-10 17:44:10 +05:30
shivammittal274
b6b45404ee feat: add agent skills system with catalog, loader, and UI (#450)
* feat: add agent skills system with catalog, loader, and UI

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: return 500 for server errors in PUT/DELETE skill routes

Previously both handlers returned 404 for all errors, masking filesystem
failures (disk full, permission denied) as "not found". Now only
"not found" errors return 404; everything else returns 500.

* fix: align SKILL.md format with agentskills.io spec

- Move `enabled` and `version` into `metadata` field (spec only allows
  name, description, license, compatibility, metadata, allowed-tools)
- Frontmatter `name` now matches directory name (lowercase kebab-case)
- Human-readable name stored in `metadata.display-name`
- Add index signature to SkillMetadata for arbitrary string keys
- Validate frontmatter with type guard in getSkill (remove unsafe cast)
- updateSkill now preserves existing frontmatter fields (license, etc.)
- Tighten buildSkillMd param from Record<string, unknown> to SkillFrontmatter

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 17:24:05 +05:30
Felarof
eb208b0515 feat: update new tab placeholder copy (#441)
* feat: update new tab placeholder copy

* fix: simplify new tab placeholder logic
2026-03-08 11:06:41 -07:00
Felarof
60a4167a0e fix: update Kimi K2.5 context window from 128K to 256K (#440)
The Kimi K2.5 model supports a 256,000 token context window, not
128,000. Updated the provider template and model config to reflect
the correct value.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 17:58:52 -08:00
Nikhil
db3d38ae3c feat: gate Moonshot AI provider behind Kimi launch flag (#432)
* feat: gate Moonshot AI provider behind VITE_PUBLIC_KIMI_LAUNCH flag

Hide all Moonshot/Kimi provider UI when the launch flag is off:
- Filter moonshot from provider templates and type dropdown
- Gate Kimi flare badges in HubProviderRow
- Gate Kimi auto-insertion in LLM hub storage
- Add analytics events for Kimi API key configuration and guide clicks

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: allow editing existing moonshot providers when launch flag is off

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 14:21:34 -08:00
Nikhil
dafad1dd14 feat: add vertical tabs customization toggle (#430) 2026-03-06 12:44:10 -08:00
Nikhil
fb2ad66c91 feat: add search provider settings page (#429)
* feat: add search provider settings page with 5 engine options

Allow users to select their preferred search engine (Google, DuckDuckGo,
Bing, Brave Search, Yahoo) from a new settings page. The selected provider
drives search suggestions, search URL navigation, placeholder text, and
analytics tracking. Replaces all hardcoded Google references with the
stored preference. Adds Brave Search support, replacing Yandex.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: add error handling for search provider storage writes

Write to storage before updating React state so UI never diverges from
persisted value on failure. Add try/catch in the settings page to show
an error toast if the write fails.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 12:08:39 -08:00
shivammittal274
9b0c484d06 fix: migrate stale 400k context window for browseros provider (#427)
* fix: migrate stale 400k context window for browseros provider

Existing installations cached the old 400k default in extension storage.
Always normalize the browseros provider's contextWindow to 200k on load,
matching the current default and preventing compaction from failing.

* fix: add browseros-auto model with 200k context length

* fix: setup migrations using the migrations api for context window size

---------

Co-authored-by: Dani Akash <DaniAkash@users.noreply.github.com>
2026-03-06 18:58:23 +05:30
Nikhil
c56186111e fix: avoid CSP-unsafe MCP SDK usage in settings (#423)
* fix: avoid CSP-unsafe MCP SDK usage in settings

* fix: handle paginated MCP tool listings

* fix: restore MCP SDK tool listing for settings
2026-03-05 16:40:57 -08:00
Felarof
2b605bdaa3 feat: add inline chat experience to new tab page (#418)
* feat: add inline chat experience to new tab page

Bring the full sidepanel chat experience to the new tab page. When
users select an AI suggestion from the search bar, the page transitions
inline to a full chat view instead of opening the sidepanel.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: remove unnecessary comments from NewTab.tsx

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: address PR review comments

- Move NEWTAB_CHAT_STARTED_EVENT tracking to startInlineChat where it
  actually fires (was dead code in NewTabChat handleSubmit)
- Add NEWTAB_CHAT_RESET_EVENT tracking to handleNewConversation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: gate newtab chat behind NEWTAB_CHAT_SUPPORT feature flag

When the flag is off (BrowserOS < 0.40.0), falls back to opening the
sidepanel via openSidePanelWithSearch (previous behavior). In dev mode
all features are enabled, so inline chat works during development.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: add newtab origin context to chat system prompt

When chatting from the new tab page, the AI is instructed to open
content in new tabs rather than navigating the current tab, keeping
the user's new tab page accessible.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 12:02:39 -08:00
Dani Akash
915ab12c40 fix: prevent sending multiple messages when chat is running (#409) 2026-03-05 21:01:57 +05:30
Nikhil
2bc5d6f5e4 fix: gate Soul page behind server version 0.0.67 (#407)
Add SOUL_SUPPORT feature flag to capabilities system requiring
minServerVersion 0.0.67. Hides "Agent Soul" nav item in settings
sidebar for older servers that lack the /soul endpoint.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 18:20:40 -08:00
Felarof
a21efd7325 feat(agent): update kimi launch provider branding 2026-03-04 18:16:42 -08:00
Felarof
609341a445 feat: add Kimi/Moonshot partnership branding with feature flag
## Summary
- Add `VITE_PUBLIC_KIMI_LAUNCH` feature flag controlling Kimi partnership branding
- BrowserOS provider card shows "Powered by Kimi K2.5 from Moonshot AI" badge and "Extended usage limits for the next 2 weeks!" when flag is on
- Moonshot/Kimi highlighted as "Recommended" in provider templates
- LLM Hub defaults to Kimi, ChatGPT, Claude, Gemini (with legacy defaults migration)
- Kimi hub row shows "Powered by Moonshot AI" flare
- Model selector locked to kimi-k2.5
- "How to get a Kimi API key" link in provider dialog
- Moonshot provider fully integrated across frontend and backend
2026-03-04 17:55:40 -08:00
Felarof
51505e1de6 feat: add "don't show again" checkbox to survey popup (#404)
* feat: add "don't show again" checkbox to JTBD survey popup

Mirrors the ImportDataHint pattern — adds a checkbox that permanently
suppresses the survey popup when checked and dismissed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: persist dontShowAgain when user clicks Take Survey

Addresses Greptile review — if the checkbox is checked and the user
clicks "Take Survey", persist the flag before opening the survey so
the popup won't reappear if the survey tab is closed without starting.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: show "don't show again" only after 2nd popup, increase interval to 10 msgs

- Track shownCount in storage, only show checkbox on 3rd+ appearance
- Increase MESSAGE_THRESHOLD from 5 to 10 messages between popups
- Add DONT_SHOW_AGAIN_AFTER constant (2) for configurability
- Pass showDontShowAgain through the component chain

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: thread dontShowAgain through onTakeSurvey to avoid duplicate analytics

Addresses Greptile review — previously clicking "Take Survey" with the
checkbox checked would fire both dismissed and clicked events. Now the
dontShowAgain flag is threaded through onTakeSurvey, which persists it
without firing a dismiss event.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 11:20:55 -08:00
Nikhil
acb7dfc624 fix: pass user data dir to WXT when using dev:watch --new (#403)
The --new flag creates a fresh temp profile directory but WXT's
chromiumProfile was hardcoded to /tmp/browseros-dev, ignoring it.
Pass BROWSEROS_USER_DATA_DIR env var from the Go dev tool and read
it in web-ext.config.ts.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 10:58:43 -08:00
Nikhil
92c20eef73 fix: filter empty-parts messages to prevent follow-up conversation crash (#402)
* fix: filter out messages with empty parts to prevent follow-up crash

When an assistant response is interrupted or errors before producing content,
a UIMessage with empty parts remains in the chat state. On the next send, the
AI SDK validates all messages and rejects the empty-parts message with
"Message must contain at least one part". This filters them out when not
streaming and adds a safety guard in formatConversationHistory.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: filter empty-parts messages before persisting to storage

Addresses race condition where the save effect could persist messages
with empty parts before the cleanup effect's state update applies.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 10:20:36 -08:00
Dani Akash
52f9dfb2e4 feat: soul and memory (#401)
* feat: install fuse.js

* feat: implement soul and basic memory system

* fix: memory recall

* fix: memory search pattern

* feat: create soul.md file progressively

* fix: soul vs core memory

* fix: provide a soul read tool

* feat: display soul on settings page

* feat: refresh soul document

* fix: chat mode avoids memory and soul tools

* fix: date construction on memory cleanup

* fix: atomicity of write operation

* chore: upgrade biome
2026-03-04 19:12:47 +05:30
Nikhil
6d736e9158 fix: gate previousConversation array format for older servers (#400)
* fix: gate previousConversation array format behind BrowserOS 0.41.0.0

Older servers reject the array format for previousConversation with a
ZodError ("Expected string, received array"). Gate the feature behind
BrowserOS >= 0.41.0.0 which bundles server >= 0.0.64 that accepts both
array and string formats.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: use minServerVersion 0.0.64 for previousConversation gate

Server version is the direct indicator of schema support, more accurate
than using BrowserOS version as a proxy.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: fall back to string format for previousConversation on old servers

Instead of omitting previousConversation entirely on servers < 0.0.64,
serialize the conversation history as a "role: content" string which
old servers accept via their z.string() schema.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 15:58:59 -08:00
shivammittal274
de52afbc55 feat: generalized compaction prompts with split turn handling (#391)
* feat: generalized compaction prompts with split turn handling

Replace browser-specific XML prompts with domain-agnostic markdown format.
Add split turn detection and parallel summarization for large single-turn
conversations. Switch compaction from generateText to streamText for
Fireworks API compatibility. Add comprehensive unit and E2E tests (84 total).

* fix: address code review issues for compaction (PR #391)

Enforce COMPACTION_MAX_SUMMARIZATION_INPUT cap, extract shared
callSummarizer helper, add runtime type guard for experimental_context,
move magic constants to AGENT_LIMITS, and remove dead constants.

* fix: cap truncatedTurnPrefix input to maxSummarizationInput

Apply the same sliding window cap to turn prefix messages that was
already applied to toSummarize, preventing unbounded LLM input for
long single-turn conversations with many tool calls.

* fix: reduce browseros-auto default context window to 200K

The 400K setting caused compaction to trigger at ~383K, but the actual
model limit is 262K. Conversations hit the hard limit before compaction
could kick in.
2026-03-03 17:20:18 +05:30
Nikhil
793d35c5e5 fix: create default tab which is browseros tab in onboarding (#387) 2026-03-02 15:13:18 -08:00
Dani Akash
61cd98cbd6 feat: update wxt version (#382) 2026-03-02 13:37:01 +05:30
Dani Akash
80fe2493e7 fix: resolve all bun audit vulnerabilities with package overrides (#338)
* fix: resolve all bun audit vulnerabilities with package overrides

Add overrides for 8 vulnerable transitive dependencies: qs, markdown-it,
lodash-es, @modelcontextprotocol/sdk, axios, diff, @isaacs/brace-expansion,
and hono. This resolves 11 security vulnerabilities including DoS, ReDoS,
prototype pollution, XSS, and data leak issues.

https://claude.ai/code/session_01D3vmc2S4564FJSFqsRaTfM

* fix: vulnerabilites

* fix: remove overrides

* fix: vulnerable versions

* fix: versions

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-03-02 13:30:14 +05:30
Dani Akash
8f01c614dd feat: simplified onboarding (#381)
* feat: new onboarding flow

* feat: co-ordinate the sign in and import hints

* fix: ux on step one

* fix: make custom option friendlier

* feat: added required fields

* feat: setup step two redirection

* fix: remove copy url button

* feat: store profile info from onboarding

* feat: sync onboarding profile to api

* feat: show confetti when the onboarding completes

* fix: change the options in onboarding demo

* feat: setup missing analytics events

* fix: lint issues

* ci: fix typescript error

* fix: sign in hint
2026-03-02 12:59:02 +05:30
Nikhil
a3cbcb16df fix: restore glow overlay for CDP-based tools (#375)
* fix: restore glow overlay for CDP-based tools

After migrating to CDP tools, glow broke because the hook looked for
input.tabId (controller tools) while CDP tools use input.page (pageId).

- Server: add getTabIdForPage() to Browser, include tabId in tool output
- Client: extract tabId from output, fall back to active Chrome tab

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor: use ToolResultMetadata for tabId resolution

Move tabId resolution from tool-adapter into the framework layer:
- response.ts: add ToolResultMetadata interface with tabId field
- framework.ts: auto-resolve pageId→tabId after tool execution
- tool-adapter.ts: just forward metadata (no domain logic)

This makes metadata available to all ToolResult consumers, not just
the AI SDK adapter, and the metadata bag is extensible for future fields.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: add todo

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 10:16:06 -08:00
Dani Akash
5d082deca3 fix: typescript checks in ci (#364)
* feat: setup schema file as fallback for codegen

* ci: included codegen build script

* fix: biome lint issues

* ci: fix heap memory
2026-02-27 00:22:59 +05:30
Dani Akash
1322638681 feat: update scheduled tasks to run in background (#359)
* feat: ensure scheduled tasks open in hidden tab

* fix: update scheduled task result in the UI

* fix: remove unnecessary useEffect

* fix: race condition with deleteSession
2026-02-24 18:31:00 +05:30
Nikhil
cb8aa6c60e feat: fix new cdp tests for tools (#358)
* feat: new tools tests

* fix: lint warnings by disabling or TODO

* fix: minore update to branch cleaner
2026-02-23 16:08:34 -08:00
Nikhil Sonti
d9ac4b24c5 Revert "fix: update to using browseros cdp port arg"
This reverts commit 9bcf54c5c1.
2026-02-23 12:33:23 -08:00
Nikhil Sonti
9bcf54c5c1 fix: update to using browseros cdp port arg 2026-02-23 12:32:12 -08:00
Dani Akash
16eaa90932 feat: ToolLoopAgent (#354)
* fix: lint issues

* chore: upgrade ai sdk

* fix: typescript errors

* feat: created tool loop agent route

* feat: session store

* feat: agent compaction logic

* feat: make chat use the new endpoint

* chore: pulled main

* chore: refactor chat v2 route with toolloop agent (#348)

* chore: refactor chat v2 route with toolloop agent

* refactor: move agent runtime files into agent/tool-loop module

---------

Co-authored-by: Dani Akash <DaniAkash@users.noreply.github.com>

* feat: added support for filesystem tools (#352)

* feat: tool adapter

* chore: error handling and log metrics

* fix: tool adapter format

* feat: install pi agent

* feat: setup filesystem tools

* fix: types in pi-tool-adapter

* feat: update adapter for new cdp tools

* chore: use old chat endpoint

* chore: eliminate dead code

---------

Co-authored-by: shivammittal274 <mittal.shivam103@gmail.com>
Co-authored-by: shivammittal274 <56757235+shivammittal274@users.noreply.github.com>
2026-02-23 10:36:08 -08:00
Nikhil
81a6d20fe8 feat: cdp tools (#353)
* feat: unified CDP + controller tools architecture

Merge CDP and controller tools into a single Browser abstraction with
backend-agnostic tool definitions. Replaces old separate cdp/controller
tool registries with unified registry, adds new tools (bookmarks,
tab-groups, history, keyboard, mouse, snapshot, content-markdown).

* feat: fix bookmarks and history, move browseros-info tool

* chore: bump server version

* fix: increase console truncate limit

* fix: previous conversation fix

* chore: bump server version

* fix: tab-group cdp

* fix: update types based on pdl

* fix: enable tab grouping

* fix: prompt enable tab grouping

* chore: bump server version
2026-02-23 07:28:45 -08:00
Felarof
0b38310ae0 feat: assign daily limit survey users to random experiment buckets (#350)
Instead of a hardcoded experimentId=daily_limit, randomly assign users
to one of four survey direction buckets (competitor, switching, workflow,
activation) matching the round 2 survey pattern.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 16:41:54 -08:00
Felarof
38471f6b6a fix: resume conversation (#346) 2026-02-20 16:23:15 -08:00
Felarof
1204697873 fix: minor text change 2026-02-20 07:45:00 -08:00
Felarof
2e1fc2e8f9 feat: add API key auth flow for Klavis MCP servers (#343)
* feat: update to support more klavis MCP servers

* fix: minor icon fix

* fix: normalize klavis mcp auth flow compatibility

* feat: add API key auth flow for Klavis MCP servers

Servers that use API key authentication (Stripe, Cloudflare, Brave
Search, Exa, Mem0, Resend, Mixpanel, PostHog, Postman, Zendesk,
Intercom) were failing with "Failed to add app" because the frontend
only handled OAuth flows. This adds the complete API key auth path:

- Backend: apiKeyUrls in StrataCreateResponse, submitApiKey() method,
  /servers/submit-api-key route
- Frontend: ApiKeyDialog component, useSubmitApiKey hook, ConnectMCP
  updated to show dialog for API-key servers instead of opening OAuth

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: remove broken success check in Klavis submitApiKey

The Klavis /mcp-server/instance/set-auth endpoint returns
{ message: "Authentication updated successfully." } without a
success field. Our code checked `data.success` which was always
undefined, causing API key auth to fail even when Klavis accepted
the key. The request() method already throws on non-2xx responses,
so the explicit check was redundant and incorrect.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 19:31:59 +05:30
Felarof
d775cadc17 feat: move connect apps into main sidebar (#344) 2026-02-19 18:35:31 -08:00
Felarof
a169f74d11 feat: add Round 2 direction parameter to JTBD survey (#342)
* feat: add Round 2 direction parameter to JTBD survey frontend

Thread direction parameter from popup trigger through URL params to the
survey chat API. Randomly assign one of 4 investigation directions
(competitor, switching, workflow, activation) when the in-app popup
triggers, encoding it as experimentId=r2_{direction} for analytics.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor: remove direction param, encode in experimentId instead

Direction is now encoded entirely in experimentId (e.g., "r2_competitor").
Remove the separate direction URL param and prop threading — the backend
derives direction from experimentId. Simplifies the frontend to only
set experimentId with a random direction on popup trigger.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 18:27:32 -08:00
Felarof
5e4187a294 feat: collapse workflow generation tidbits in place (#341)
* fix: setup

* fix: compact workflow tidbits within streamed assistant parts

feat: collapse workflow tidbit status messages in graph chat

* Revert "fix: compact workflow tidbits within streamed assistant parts"

This reverts commit f5fa6d6b7a480dfc001ede6de7949f45c7777f37.

* fix: collapse workflow tidbit status messages in graph chat

Tidbit messages (jokes/status ending with ...) during workflow execution
now replace each other in place instead of stacking as separate chat
bubbles. Handles both consecutive tidbit messages and multiple tidbit
text parts within a single streamed message.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: compact multi-line tidbits within a single text part

Tidbits arrive as text-deltas accumulated into a single text part
(e.g. "Generating workflow…\nReticulating splines…\n..."). The previous
fix only handled separate parts and separate messages but not multiple
tidbit lines within one part. Added compactTidbitLinesInPart to trim
multi-line tidbit text to just the last line.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 17:42:10 -08:00
Nikhil
f35ed67617 fix: add scroll support to dialog when content overflows (#340)
Added max-h-[85vh] and overflow-y-auto to DialogContent component
to enable scrolling when dialog content exceeds viewport height.
This fixes the scheduled task dialog not showing scroll when
content is too long.

https://claude.ai/code/session_01CP8aUnunJpW9mYwTbt3gpt

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-16 10:44:31 -08:00
Nikhil
3b393f0639 feat: increase tips show probability to 0.3 (#336)
https://claude.ai/code/session_01EwJaviDJJM3jugajAff4Y4

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-16 08:45:21 -08:00
shivammittal274
c7a72b5164 fix: resolve stale closure bug in LLM Hub provider management (#333)
* chore: baseline setup

* fix: resolve stale closure bug in LLM Hub provider management

saveProvider and deleteProvider were wrapped in useCallback with
[providers] dependency, building updated arrays from the closure-captured
providers state. When adding a provider then deleting another, the delete
callback could have a stale providers array that didn't include the newly
added one — causing the new provider to be lost when written to storage.

Fix: read current state from persistent storage via loadProviders()
before every mutation, matching the pattern used in useLlmProviders.ts.
Remove useCallback wrappers since they no longer depend on providers state.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: inject stop button to pages controlled by agent (#334)

* chore: baseline setup

* feat(agent): When the agent is running, right now we inject an orange glow. See the `apps/age

Task ID: TOiaMuDz

* fix: clean up agent storage

* fix: improve the stop button style

* fix: type issues with stopAgentStorage

---------

Co-authored-by: BrowserOS Coding Agent <coding-agent@browseros.com>
Co-authored-by: Dani Akash <DaniAkash@users.noreply.github.com>

* fix: resolve stale closure bug in LLM Hub provider management

saveProvider and deleteProvider were wrapped in useCallback with
[providers] dependency, building updated arrays from the closure-captured
providers state. When adding a provider then deleting another, the delete
callback could have a stale providers array that didn't include the newly
added one — causing the new provider to be lost when written to storage.

Fix: read current state from persistent storage via loadProviders()
before every mutation, matching the pattern used in useLlmProviders.ts.
Remove useCallback wrappers since they no longer depend on providers state.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: BrowserOS Coding Agent <coding-agent@browseros.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Dani Akash <DaniAkash@users.noreply.github.com>
2026-02-16 18:34:05 +05:30
shivammittal274
2c8c6f6120 feat: inject stop button to pages controlled by agent (#334)
* chore: baseline setup

* feat(agent): When the agent is running, right now we inject an orange glow. See the `apps/age

Task ID: TOiaMuDz

* fix: clean up agent storage

* fix: improve the stop button style

* fix: type issues with stopAgentStorage

---------

Co-authored-by: BrowserOS Coding Agent <coding-agent@browseros.com>
Co-authored-by: Dani Akash <DaniAkash@users.noreply.github.com>
2026-02-16 17:42:32 +05:30
Felarof
509451ac2f fix: hub provider list goes stale after add then delete (#331)
saveProvider and deleteProvider used useCallback with [providers]
dependency, causing a stale closure bug. When adding a new provider
then deleting another, the delete callback still referenced the old
providers array (before the add), losing the newly added provider.

Now reads current state from storage before each mutation, matching
the pattern used in useLlmProviders. Also removes unnecessary
useCallback wrappers per project conventions.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 12:03:17 -08:00
Nikhil Sonti
d6b02703df fix: minor fixes to tips 2026-02-11 10:58:32 -08:00
Nikhil Sonti
27c9a9748e fix: dismiss duration 7 days 2026-02-11 10:52:58 -08:00
Dani Akash
be4ab73d61 fix: adds a don't ask again option for sync prompt (#326) 2026-02-11 18:49:36 +05:30
Dani Akash
f4f92053f7 feat: enable posthog app connection support (#313)
* fix: dev scripts

* feat: setup posthog mcp

* feat: api auth UI

* chore: remove agent command

* feat: setup posthog connection

* fix: better error handling

* chore: refactor to use llm proxy

* feat: auto update authenticate status for posthog

* feat: integrate posthog to the app selector

* feat: update biome

* chore: update server restart

* chore: update codegen process

* feat: install klavis in server project

* feat: update posthog icon

* fix: updated review comment

* feat: address code reviews
2026-02-11 18:28:45 +05:30
Nikhil
9f3562eb85 feat: new tab tips section (#304)
* fix: tips

* fix: show tips only 1/5 times

* fix: guard against empty tips array in getRandomTip

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: biome exhaustive deps in SurveyChat voice effect

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-05 15:04:08 -08:00