* 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
* 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>
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>
* 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>
* 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>
* 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>
## 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
* 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
* 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
* 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>
* 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>
* 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>
* feat: show scheduled tasks tab if job runs are empty
* chore: switch tabs after creating new tasks
* feat: provide option to cancel and retry scheduled tasks
* feat: provide option to retry and cancel jobs on the popups
* chore: fix minor race condition between window cleanup and job status
update
* feat: created auth client
* feat: created login page for testing auth
* feat: setup logout page
* feat: setup graphql codegen
* feat: setup graphql + react query utils
* feat: setup queryprovider with localforage
* feat: created auth provider
* feat: update claude.md
* feat: documents for bulk conversation upload
* chore: install missing package
* fix: setup codegen to scan for .ts files
* chore: setup check conversation query
* feat: upload conversation by profileId
* chore: upload messages in batches
* feat: account for edge cases in conversation upload
* feat: delete uploaded conversations from localstorage
* feat: load conversation history from api
* feat: implement delete conversation using graphql
* feat: delete confirmation for conversation history
* fix: issue with clearing conversations after upload
* feat: implement pagination for graphql chat history
* chore: update CLAUDE.md
* chore: update claude.md
* feat: save conversations to server
* fix: handle streaming check on remote conversation save
* feat: restore conversation from graphql
* fix: timestamp issue on the chat history page
* feat: sync llm providers from background script
* feat: update llm providers on change via background script
* chore: added a try catch block
* feat: display incomplete providers in separate UI
* feat: delete provider on server when initiated by user
* feat: setup scheduled tasks storage to sync to graphql
* feat: auto run sync in background script
* fix: sync all keys of scheduled tasks based on updatedAt timestamp
* feat: added login dropdown on the sidebar
* feat: simplify sidenav header
* feat: update header design after login
* feat: setup profile page
* feat: added back button to profile page
* fix: scrollbar flash in profile page
* feat: finish login handshake
* feat: clear storage on logout
* fix: logout page style
* feat: added tooltip to encourage user to sign in
* feat: added back button to login page
* fix: upload logic for profile picture
* feat: account for profile name in sidebar branding
* chore: set file upload url from backend request
* chore: remove default placeholder from profile component
* chore: sync with main
* Revert "chore: sync with main"
This reverts commit 77e06b894ce30235d1bfa31c8e2699b34df423a5.
* Reapply "chore: sync with main"
This reverts commit dd921d97cc9794d1872e13689c881f68e4dfee47.
* chore: updated lock file
* fix: run codegen before build:ext
* fix: run codegen before build:gent
* fix: remove hardcoded localhost header in magic link
---------
Co-authored-by: Nikhil Sonti <nikhilsv92@gmail.com>
* fix: move suspense boundary closer to corresponding pages
* fix: pre-resolve the client via singleton to speed up the clientPromise
* feat: apply theme background faster with plain script
* chore: update biome version
* feat: make rpc client persist promise with useMemo and remove loading
text
* fix: replace dvh with vh
* fix: replace dvh with vh in create graph