Skip to content

Commit f592d57

Browse files
committed
chore: merge main into the local-first storage epic
Three conflicts, all from both sides touching the same files. The provider hook was rewritten on this branch to read and write through the server, so its side stands. Main's contribution to that file, saveProvider resolving with the row that actually persisted, is already carried here from the previous sync, and the first-run setup screen depends on it. The app manifest takes main's dependency bumps alongside this branch's react-query-kit, and the lockfile was reconciled by reinstalling rather than merged by hand. This also collapses the diff against main. The earlier sync was squash merged, so main was never recorded as an ancestor and the comparison was still made from the original divergence point, which showed this branch as reverting twenty files main had changed since.
2 parents 3676630 + 16706b3 commit f592d57

20 files changed

Lines changed: 388 additions & 839 deletions

File tree

.github/workflows/claude.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ jobs:
3535

3636
- name: Run Claude Code
3737
id: claude
38-
uses: anthropics/claude-code-action@v1.0.182
38+
uses: anthropics/claude-code-action@v1.0.210
3939
with:
4040
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
4141
additional_permissions: |

.github/workflows/test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ jobs:
9090
if: matrix.needs_rust == true
9191
# Pinned so the clippy lint set is deterministic and matches local dev;
9292
# a floating `stable` silently changes which lints fire across runs.
93-
uses: dtolnay/rust-toolchain@1.95.0
93+
uses: dtolnay/rust-toolchain@1.98.0
9494
with:
9595
components: clippy,rustfmt
9696

.github/workflows/turbo-cache-warm.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ jobs:
7777
- name: Setup Rust
7878
# Pinned to match the Tests workflow. A different toolchain hashes into
7979
# a different cache key, which would warm a cache nothing else reads.
80-
uses: dtolnay/rust-toolchain@1.95.0
80+
uses: dtolnay/rust-toolchain@1.98.0
8181
with:
8282
components: clippy,rustfmt
8383

packages/browseros-agent/apps/app-onboard/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,19 @@
2323
"motion": "^12.0.0",
2424
"react": "^19.2.8",
2525
"react-dom": "^19.2.8",
26-
"react-hook-form": "^7.85.0",
27-
"react-router": "^7.18.2",
26+
"react-hook-form": "^7.86.0",
27+
"react-router": "^7.18.3",
2828
"tailwind-merge": "^3.6.0",
2929
"tailwind-scrollbar-hide": "^4.0.0",
3030
"tw-animate-css": "^1.4.0"
3131
},
3232
"devDependencies": {
3333
"@tailwindcss/typography": "^0.5.20",
3434
"@tailwindcss/vite": "^4.3.3",
35-
"@types/bun": "^1.3.14",
35+
"@types/bun": "^1.4.0",
3636
"@types/node": "^24.13.3",
3737
"@types/react": "^19.2.18",
38-
"@types/react-dom": "^19.2.4",
38+
"@types/react-dom": "^19.2.5",
3939
"@vitejs/plugin-react": "^5.0.0",
4040
"tailwindcss": "^4.1.17",
4141
"vite": "^7.3.6"

packages/browseros-agent/apps/app/modules/agents/agents.hooks.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,13 @@ function agentsClient(baseUrl: string) {
3333
return hc<AgentRoutes>(`${baseUrl}/agents`)
3434
}
3535

36-
async function agentRequestError(response: Response): Promise<Error> {
36+
// Accept the minimal shape this reads rather than the full `Response`: the Hono
37+
// client returns a `ClientResponse`, which is not structurally the global
38+
// `Response` under the current lib types.
39+
async function agentRequestError(response: {
40+
status: number
41+
json: () => Promise<unknown>
42+
}): Promise<Error> {
3743
const body = (await response.json().catch(() => ({}))) as { error?: string }
3844
return new Error(
3945
body.error ?? `Request failed with status ${response.status}`,

packages/browseros-agent/apps/app/package.json

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@
2020
"codegen:watch": "graphql-codegen --config codegen.ts --watch"
2121
},
2222
"dependencies": {
23-
"@ai-sdk/react": "^4.0.0",
23+
"@ai-sdk/react": "^4.0.87",
2424
"@browseros/server": "workspace:*",
2525
"@browseros/shared": "workspace:*",
26-
"@hookform/resolvers": "^5.9.0",
26+
"@hookform/resolvers": "^5.9.1",
2727
"@lobehub/icons": "^2.48.0",
28-
"@mdxeditor/editor": "^4.2.0",
29-
"@posthog/react": "^1.10.3",
28+
"@mdxeditor/editor": "^4.2.3",
29+
"@posthog/react": "^1.10.5",
3030
"@radix-ui/react-alert-dialog": "^1.1.23",
3131
"@radix-ui/react-checkbox": "^1.3.11",
3232
"@radix-ui/react-collapsible": "^1.1.20",
@@ -45,71 +45,71 @@
4545
"@radix-ui/react-tooltip": "^1.2.16",
4646
"@radix-ui/react-use-controllable-state": "^1.2.3",
4747
"@ricky0123/vad-web": "^0.0.17",
48-
"@sentry/react": "^10.70.0",
48+
"@sentry/react": "^10.72.0",
4949
"@sentry/vite-plugin": "^4.9.1",
50-
"@tanstack/query-async-storage-persister": "^5.101.4",
51-
"@tanstack/react-query": "^5.101.4",
52-
"@tanstack/react-query-persist-client": "^5.101.4",
50+
"@tanstack/query-async-storage-persister": "^5.102.8",
51+
"@tanstack/react-query": "^5.102.8",
52+
"@tanstack/react-query-persist-client": "^5.102.8",
5353
"@webext-core/messaging": "^2.3.0",
5454
"@wxt-dev/storage": "^1.2.9",
5555
"@xstate/store": "^3.10.0",
56-
"@xyflow/react": "^12.11.3",
56+
"@xyflow/react": "^12.11.5",
5757
"ai": "^7.0.0",
58-
"better-auth": "^1.6.29",
58+
"better-auth": "^1.7.2",
5959
"canvas-confetti": "^1.9.4",
6060
"class-variance-authority": "^0.7.1",
6161
"clsx": "^2.1.1",
6262
"cmdk": "^1.1.1",
63-
"dayjs": "^1.11.21",
63+
"dayjs": "^1.11.23",
6464
"embla-carousel-react": "^8.6.0",
65-
"es-toolkit": "^1.50.0",
65+
"es-toolkit": "^1.52.0",
6666
"eventsource-parser": "^3.1.1",
6767
"fuse.js": "^7.5.0",
6868
"graphql": "^16.14.2",
69-
"hono": "^4.13.1",
69+
"hono": "^4.13.5",
7070
"idb-keyval": "^6.3.0",
7171
"lucide-react": "^0.577.0",
7272
"motion": "^12.43.0",
7373
"nanoid": "^5.1.16",
7474
"next-themes": "^0.4.6",
75-
"onnxruntime-web": "^1.19.2",
76-
"posthog-js": "^1.417.1",
75+
"onnxruntime-web": "^1.29.0",
76+
"posthog-js": "^1.422.5",
7777
"react": "^19.2.8",
7878
"react-dom": "^19.2.8",
79-
"react-hook-form": "^7.85.0",
79+
"react-hook-form": "^7.86.0",
8080
"react-query-kit": "^3.3.4",
81-
"react-resizable-panels": "^4.12.2",
82-
"react-router": "^7.18.2",
81+
"react-resizable-panels": "^4.12.3",
82+
"react-router": "^7.18.3",
8383
"shiki": "^3.23.0",
8484
"sonner": "^2.0.8",
85-
"streamdown": "^2.5.0",
85+
"streamdown": "^2.6.0",
8686
"swr": "^2.5.1",
8787
"tailwind-merge": "^3.6.0",
8888
"tailwind-scrollbar-hide": "^4.0.0",
8989
"tokenlens": "^1.3.1",
9090
"tw-animate-css": "^1.4.0",
9191
"use-deep-compare-effect": "^1.8.1",
9292
"use-stick-to-bottom": "^1.1.6",
93-
"zod": "^4.4.3"
93+
"zod": "^4.5.2"
9494
},
9595
"devDependencies": {
96-
"@0no-co/graphqlsp": "^1.17.3",
96+
"@0no-co/graphqlsp": "^1.17.5",
9797
"@eslint/compat": "^2.1.0",
98-
"@graphql-codegen/cli": "^7.2.0",
98+
"@graphql-codegen/cli": "^7.3.1",
9999
"@graphql-codegen/client-preset": "^6.1.3",
100100
"@graphql-codegen/schema-ast": "^6.0.1",
101101
"@graphql-typed-document-node/core": "^3.2.0",
102102
"@tailwindcss/typography": "^0.5.20",
103103
"@tailwindcss/vite": "^4.3.3",
104-
"@types/bun": "^1.3.14",
104+
"@types/bun": "^1.4.0",
105105
"@types/canvas-confetti": "^1.9.0",
106-
"@types/chrome": "^0.2.6",
106+
"@types/chrome": "^0.2.7",
107107
"@types/cytoscape-dagre": "^2.3.4",
108108
"@types/dagre": "^0.7.54",
109109
"@types/react": "^19.2.18",
110-
"@types/react-dom": "^19.2.4",
110+
"@types/react-dom": "^19.2.5",
111111
"@wxt-dev/module-react": "^1.2.2",
112-
"lefthook": "^2.1.10",
112+
"lefthook": "^2.1.12",
113113
"serve": "^14.2.6",
114114
"tailwindcss": "^4.3.1",
115115
"web-ext": "^9.2.0",

packages/browseros-agent/apps/claw-app/package.json

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,18 @@
2525
"@fontsource-variable/jetbrains-mono": "^5.3.0",
2626
"@fontsource-variable/schibsted-grotesk": "^5.3.0",
2727
"@fontsource/newsreader": "^5.3.0",
28-
"@hookform/resolvers": "^5.9.0",
28+
"@hookform/resolvers": "^5.9.1",
2929
"@radix-ui/react-slot": "^1.2.4",
3030
"@radix-ui/react-use-controllable-state": "^1.2.3",
31-
"@rive-app/react-webgl2": "^4.31.0",
31+
"@rive-app/react-webgl2": "^4.33.0",
3232
"@streamdown/cjk": "^1.0.3",
3333
"@streamdown/code": "^1.1.1",
3434
"@streamdown/math": "^1.0.2",
3535
"@streamdown/mermaid": "^1.0.2",
3636
"@tabler/icons-react": "^3.46.0",
37-
"@tanstack/react-query": "^5.101.4",
37+
"@tanstack/react-query": "^5.102.8",
3838
"@tanstack/react-table": "^8.21.3",
39-
"@xyflow/react": "^12.11.3",
39+
"@xyflow/react": "^12.11.5",
4040
"ai": "^7.0.0",
4141
"ansi-to-react": "^6.2.6",
4242
"class-variance-authority": "^0.7.1",
@@ -48,28 +48,28 @@
4848
"motion": "^12.43.0",
4949
"nanoid": "^5.1.16",
5050
"next-themes": "^0.4.6",
51-
"posthog-js": "^1.417.1",
51+
"posthog-js": "^1.422.5",
5252
"react": "^19.2.8",
5353
"react-dom": "^19.2.8",
54-
"react-hook-form": "~7.85.0",
54+
"react-hook-form": "~7.86.0",
5555
"react-jsx-parser": "^2.4.1",
5656
"react-query-kit": "^3.3.1",
57-
"react-router": "^7.18.2",
57+
"react-router": "^7.18.3",
5858
"rrweb": "2.1.1",
5959
"rrweb-player": "2.1.1",
6060
"shiki": "^4.2.0",
6161
"sonner": "^2.0.8",
62-
"streamdown": "^2.5.0",
62+
"streamdown": "^2.6.0",
6363
"tailwind-merge": "^3.4.0",
6464
"tokenlens": "^1.3.1",
6565
"use-stick-to-bottom": "^1.1.6",
66-
"zod": "^4.4.3"
66+
"zod": "^4.5.2"
6767
},
6868
"devDependencies": {
6969
"@tailwindcss/vite": "^4.3.3",
70-
"@types/chrome": "^0.2.6",
70+
"@types/chrome": "^0.2.7",
7171
"@types/react": "^19.2.18",
72-
"@types/react-dom": "^19.2.4",
72+
"@types/react-dom": "^19.2.5",
7373
"@wxt-dev/module-react": "^1.2.2",
7474
"linkedom": "^0.18.13",
7575
"serve": "^14.2.6",

packages/browseros-agent/apps/claw-onboard/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,16 @@
2323
"lucide-react": "^0.577.0",
2424
"react": "^19.2.8",
2525
"react-dom": "^19.2.8",
26-
"react-hook-form": "~7.85.0",
27-
"react-router": "^7.18.2",
26+
"react-hook-form": "~7.86.0",
27+
"react-router": "^7.18.3",
2828
"tailwind-merge": "^3.4.0"
2929
},
3030
"devDependencies": {
3131
"@tailwindcss/vite": "^4.3.3",
32-
"@types/bun": "^1.3.14",
32+
"@types/bun": "^1.4.0",
3333
"@types/node": "^24.13.3",
3434
"@types/react": "^19.2.18",
35-
"@types/react-dom": "^19.2.4",
35+
"@types/react-dom": "^19.2.5",
3636
"@vitejs/plugin-react": "^5.0.0",
3737
"tailwindcss": "^4.1.17",
3838
"vite": "^7.3.6"

packages/browseros-agent/apps/server/package.json

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,14 @@
6161
}
6262
},
6363
"dependencies": {
64-
"@ai-sdk/amazon-bedrock": "^5.0.0",
64+
"@ai-sdk/amazon-bedrock": "^5.0.67",
6565
"@ai-sdk/anthropic": "^4.0.0",
66-
"@ai-sdk/azure": "^4.0.0",
67-
"@ai-sdk/devtools": "^1.0.0",
68-
"@ai-sdk/google": "^4.0.0",
66+
"@ai-sdk/azure": "^4.0.53",
67+
"@ai-sdk/devtools": "^1.0.13",
68+
"@ai-sdk/google": "^4.0.57",
6969
"@ai-sdk/mcp": "^2.0.0",
7070
"@ai-sdk/openai": "^4.0.0",
71-
"@ai-sdk/openai-compatible": "^3.0.0",
71+
"@ai-sdk/openai-compatible": "^3.0.40",
7272
"@ai-sdk/provider": "^4.0.0",
7373
"@browseros/acpx-ai-provider": "workspace:*",
7474
"@browseros/agent-mcp-manager": "workspace:*",
@@ -81,29 +81,29 @@
8181
"@modelcontextprotocol/hono": "^2.0.0",
8282
"@modelcontextprotocol/server": "^2.0.0",
8383
"@openrouter/ai-sdk-provider": "^3.0.0",
84-
"@sentry/bun": "^10.70.0",
84+
"@sentry/bun": "^10.72.0",
8585
"acp-probe": "^0.0.2",
86-
"acpx": "^0.13.0",
86+
"acpx": "^0.13.2",
8787
"ai": "^7.0.0",
8888
"commander": "^14.0.3",
8989
"core-js": "3.50.0",
9090
"drizzle-orm": "^0.45.2",
91-
"hono": "^4.13.1",
91+
"hono": "^4.13.5",
9292
"jimp": "^1.6.1",
9393
"jsonc-parser": "^3.3.1",
9494
"pino": "^9.14.0",
9595
"posthog-node": "^4.18.0",
96-
"zod": "^3.25.76",
96+
"zod": "^4.5.2",
9797
"zod-to-json-schema": "^3.25.2"
9898
},
9999
"devDependencies": {
100100
"@modelcontextprotocol/sdk": "^1.30.0",
101-
"@types/bun": "1.3.5",
101+
"@types/bun": "1.4.0",
102102
"@types/node": "^24.13.3",
103103
"async-mutex": "^0.5.0",
104104
"drizzle-kit": "^0.31.10",
105105
"pino-pretty": "^13.1.3",
106-
"puppeteer": "^25.7.0"
106+
"puppeteer": "^25.9.0"
107107
},
108108
"license": "AGPL-3.0-or-later"
109109
}

packages/browseros-agent/apps/server/src/api/services/klavis/tool-adapters.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import type { CallToolResult } from '@modelcontextprotocol/client'
99
import { fromJsonSchema, type McpServer } from '@modelcontextprotocol/server'
1010
import { jsonSchema, type ToolSet } from 'ai'
1111
import { z } from 'zod'
12-
import { zodToJsonSchema } from 'zod-to-json-schema'
1312
import { logger } from '../../../lib/logger'
1413
import { metrics } from '../../../lib/metrics'
1514
import { findConnector, getConnectorCatalogDescription } from './catalog'
@@ -240,17 +239,18 @@ export function buildKlavisToolSet(deps: KlavisToolAdapterDeps): ToolSet {
240239
return toolSet
241240
}
242241

243-
// Bridge a locally hand-built Zod v3 shape (the connector tool's schema) into a
244-
// v2 registerTool input schema. v2 derives a tools/list JSON schema only from
245-
// Zod v4, so convert the v3 shape to JSON Schema first, then wrap it. Remote
246-
// Strata tools do NOT use this path: their JSON schema goes straight to
247-
// fromJsonSchema (round-tripping through Zod drops every property under v3).
242+
// Bridge the locally hand-built Zod shape (the connector tool's schema) into a
243+
// v2 registerTool input schema. v2 derives a tools/list JSON schema from the
244+
// JSON Schema, so convert the object first, then wrap it. Remote Strata tools do
245+
// NOT use this path: their JSON schema goes straight to fromJsonSchema.
248246
function toV2InputSchema(rawShape: z.ZodRawShape) {
249247
// The bridged value is a StandardSchemaWithJSON; type it as a raw shape so
250248
// registerTool's overload and handler typing resolve as before. At runtime
251-
// v2 accepts the real object via the Standard Schema path.
249+
// v2 accepts the real object via the Standard Schema path. Use Zod's native
250+
// JSON Schema converter: the object is a Zod 4 schema, which the external
251+
// zod-to-json-schema (v3-only) silently converts to an empty schema.
252252
return fromJsonSchema(
253-
zodToJsonSchema(z.object(rawShape)) as never,
253+
z.toJSONSchema(z.object(rawShape)) as never,
254254
) as unknown as Record<string, never>
255255
}
256256

0 commit comments

Comments
 (0)