Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
fac223f
fix(server): steer ACP agents to browseros, not a co-installed browse…
DaniAkash Sep 2, 2026
192409e
refactor(server): slim the agent system prompt and move tool guidance…
DaniAkash Sep 2, 2026
379f384
feat(app): give first-run its own setup step instead of the settings …
DaniAkash Sep 2, 2026
96b0657
chore: browseros-claw update
shadowfax92 Sep 2, 2026
ba1594e
chore: bump version
shadowfax92 Sep 2, 2026
e56efca
chore: bump app onboarding version to 0.0.1 (#2524)
github-actions[bot] Sep 2, 2026
1c9bf11
chore(release): snapshot browseros server alpha v0.0.152
github-actions[bot] Sep 2, 2026
8b5511c
chore: bump server version to 0.0.152 (#2526)
github-actions[bot] Sep 2, 2026
8ce223b
chore(release): update extension alpha feeds to 0.0.146.0
github-actions[bot] Sep 2, 2026
5ea943a
chore: bump agent extension version to 0.0.146.0 (#2528)
github-actions[bot] Sep 2, 2026
a29358b
chore: sync internal-docs submodule (#2529)
shadowfax92 Sep 2, 2026
16afe60
feat: unify product installation identity (#2530)
shadowfax92 Sep 2, 2026
7d84824
feat: agents never steal focus in BrowserClaw (#2531)
shadowfax92 Sep 2, 2026
8afd28c
chore: bump version
shadowfax92 Sep 2, 2026
54021c3
ci: grant nightly call sites the permissions their workflows declare …
shadowfax92 Sep 2, 2026
704e732
ci: cover the permissions the nightly's build and OTA callees declare…
shadowfax92 Sep 2, 2026
22a6d7e
chore: sync internal-docs submodule (#2535)
shadowfax92 Sep 3, 2026
4ff77c6
chore: merge main into the local-first storage epic
DaniAkash Sep 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ jobs:
uses: ./.github/workflows/release-claw-server.yml
permissions:
contents: write
pull-requests: write
with:
mode: build
defer_finalize: true
Expand Down Expand Up @@ -181,6 +182,8 @@ jobs:
name: Build signed BrowserOS nightly
needs: [transaction, verify-components]
uses: ./.github/workflows/nightly-macos-product.yml
permissions:
contents: read
with:
product: browseros
state_ref: ${{ needs.transaction.outputs.state_ref }}
Expand All @@ -196,6 +199,8 @@ jobs:
name: Build signed BrowserOS neo nightly
needs: [transaction, verify-components]
uses: ./.github/workflows/nightly-macos-product.yml
permissions:
contents: read
with:
product: browserclaw
state_ref: ${{ needs.transaction.outputs.state_ref }}
Expand Down Expand Up @@ -228,6 +233,7 @@ jobs:
uses: ./.github/workflows/release-claw-server.yml
permissions:
contents: write
pull-requests: write
with:
mode: finalize
state_owner: suite
Expand Down Expand Up @@ -273,7 +279,8 @@ jobs:
needs: [transaction, finalize-server]
uses: ./.github/workflows/publish-server-ota.yml
permissions:
contents: read
contents: write
pull-requests: write
with:
product: browseros
version: ${{ needs.transaction.outputs.server_version }}
Expand All @@ -287,7 +294,8 @@ jobs:
needs: [transaction, finalize-claw-server]
uses: ./.github/workflows/publish-server-ota.yml
permissions:
contents: read
contents: write
pull-requests: write
with:
product: browserclaw
version: ${{ needs.transaction.outputs.claw_server_version }}
Expand Down
2 changes: 1 addition & 1 deletion packages/browseros-agent/apps/app-onboard/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "@browseros/app-onboard",
"type": "module",
"private": true,
"version": "0.0.0",
"version": "0.0.1",
"description": "Standalone Vite app for the BrowserOS onboarding flow (app theme, base-ui).",
"scripts": {
"dev": "vite",
Expand Down
8 changes: 8 additions & 0 deletions packages/browseros-agent/apps/app/entrypoints/app/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import { MCPSettingsPage } from '@/screens/mcp-settings/MCPSettingsPage'
import { NewTabChat } from '@/screens/newtab/index/NewTabChat'
import { NewTabLayout } from '@/screens/newtab/layout/NewTabLayout'
import { Personalize } from '@/screens/newtab/personalize/Personalize'
import { OnboardingAiPage } from '@/screens/onboarding-ai/OnboardingAiPage'
import { ProfilePage } from '@/screens/profile/ProfilePage'
import { ScheduledTasksPage } from '@/screens/scheduled-tasks/ScheduledTasksPage'
import { UsagePage } from '@/screens/usage/UsagePage'
Expand Down Expand Up @@ -89,6 +90,13 @@ export const App: FC = () => {

<Route path="features" element={<FeaturesPage />} />

{/* First-run setup, opened by the native onboarding on completion.
Outside every layout route on purpose: no sidebar, no chrome. */}
<Route path="onboarding">
<Route path="ai" element={<OnboardingAiPage />} />
<Route index element={<Navigate to="/onboarding/ai" replace />} />
</Route>

<Route path="/" element={<Navigate to="/home" replace />} />
<Route
path="/personalize"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,12 @@ export interface UseLlmProvidersReturn {
* offering to set up a first provider and saying the list is unavailable.
*/
isUnavailable: boolean
saveProvider: (provider: LlmProviderConfig) => Promise<void>
/**
* Resolves with the row that was actually written. A single-instance save
* keeps the existing provider's id, so the caller must not assume the id it
* passed in is the one that persisted.
*/
saveProvider: (provider: LlmProviderConfig) => Promise<LlmProviderConfig>
setDefaultProvider: (providerId: string) => Promise<void>
deleteProvider: (providerId: string) => Promise<void>
}
Expand Down Expand Up @@ -88,6 +93,10 @@ export function useLlmProviders(): UseLlmProvidersReturn {
const { saved, removedIds } = planProviderSave(providers, provider)
await putProvider(saved)
for (const id of removedIds) await deleteProviderRow(id)
// The row that persisted, which is not always the one passed in: a
// single-instance save keeps the earlier provider's id, and that is the
// id chat target selection has to reference.
return saved
},
onSuccess: invalidate,
})
Expand Down Expand Up @@ -130,9 +139,7 @@ export function useLlmProviders(): UseLlmProvidersReturn {
selectedProvider: resolveSelectedProvider(providers, defaultProviderId),
isLoading: providersQuery.isPending,
isUnavailable: providersQuery.isError,
saveProvider: async (provider) => {
await saveMutation.mutateAsync(provider)
},
saveProvider: (provider) => saveMutation.mutateAsync(provider),
setDefaultProvider,
deleteProvider: async (providerId) => {
await deleteMutation.mutateAsync(providerId)
Expand Down
2 changes: 1 addition & 1 deletion packages/browseros-agent/apps/app/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "@browseros/app",
"description": "manifest.json description",
"private": true,
"version": "0.0.145",
"version": "0.0.146",
"type": "module",
"scripts": {
"dev": "test -d generated/graphql || bun run codegen; bun --env-file=../../.env.development wxt",
Expand Down
Loading
Loading