diff --git a/package-lock.json b/package-lock.json index 3186ef0e3..39716fc5a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "paseo", - "version": "0.4.0-beta.1", + "version": "0.4.0-beta.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "paseo", - "version": "0.4.0-beta.1", + "version": "0.4.0-beta.2", "hasInstallScript": true, "license": "AGPL-3.0-or-later", "workspaces": [ @@ -36091,7 +36091,7 @@ }, "packages/app": { "name": "@getpaseo/app", - "version": "0.4.0-beta.1", + "version": "0.4.0-beta.2", "dependencies": { "@codemirror/commands": "6.10.4", "@codemirror/language": "6.12.4", @@ -37139,12 +37139,12 @@ }, "packages/cli": { "name": "@getpaseo/cli", - "version": "0.4.0-beta.1", + "version": "0.4.0-beta.2", "dependencies": { "@clack/prompts": "^1.0.0", - "@getpaseo/client": "0.4.0-beta.1", - "@getpaseo/protocol": "0.4.0-beta.1", - "@getpaseo/server": "0.4.0-beta.1", + "@getpaseo/client": "0.4.0-beta.2", + "@getpaseo/protocol": "0.4.0-beta.2", + "@getpaseo/server": "0.4.0-beta.2", "chalk": "^5.3.0", "commander": "^12.0.0", "mime-types": "^2.1.35", @@ -37391,10 +37391,10 @@ }, "packages/client": { "name": "@getpaseo/client", - "version": "0.4.0-beta.1", + "version": "0.4.0-beta.2", "dependencies": { - "@getpaseo/protocol": "0.4.0-beta.1", - "@getpaseo/relay": "0.4.0-beta.1", + "@getpaseo/protocol": "0.4.0-beta.2", + "@getpaseo/relay": "0.4.0-beta.2", "zod": "^4.4.3" }, "devDependencies": { @@ -37405,7 +37405,7 @@ }, "packages/desktop": { "name": "@getpaseo/desktop", - "version": "0.4.0-beta.1", + "version": "0.4.0-beta.2", "license": "AGPL-3.0-or-later", "dependencies": { "@getpaseo/cli": "*", @@ -37648,7 +37648,7 @@ }, "packages/expo-two-way-audio": { "name": "@getpaseo/expo-two-way-audio", - "version": "0.4.0-beta.1", + "version": "0.4.0-beta.2", "license": "MIT", "devDependencies": { "@types/jest": "^29.5.14", @@ -38544,7 +38544,7 @@ }, "packages/highlight": { "name": "@getpaseo/highlight", - "version": "0.4.0-beta.1", + "version": "0.4.0-beta.2", "dependencies": { "@codemirror/language": "6.12.4", "@codemirror/legacy-modes": "^6.5.3", @@ -38573,7 +38573,7 @@ }, "packages/protocol": { "name": "@getpaseo/protocol", - "version": "0.4.0-beta.1", + "version": "0.4.0-beta.2", "dependencies": { "zod": "^4.4.3" }, @@ -38586,7 +38586,7 @@ }, "packages/relay": { "name": "@getpaseo/relay", - "version": "0.4.0-beta.1", + "version": "0.4.0-beta.2", "dependencies": { "base64-js": "^1.5.1", "tweetnacl": "^1.0.3", @@ -38804,15 +38804,15 @@ }, "packages/server": { "name": "@getpaseo/server", - "version": "0.4.0-beta.1", + "version": "0.4.0-beta.2", "dependencies": { "@agentclientprotocol/sdk": "^0.17.1", "@anthropic-ai/claude-agent-sdk": "^0.3.220", "@anthropic-ai/sdk": "^0.104.2", - "@getpaseo/client": "0.4.0-beta.1", - "@getpaseo/highlight": "0.4.0-beta.1", - "@getpaseo/protocol": "0.4.0-beta.1", - "@getpaseo/relay": "0.4.0-beta.1", + "@getpaseo/client": "0.4.0-beta.2", + "@getpaseo/highlight": "0.4.0-beta.2", + "@getpaseo/protocol": "0.4.0-beta.2", + "@getpaseo/relay": "0.4.0-beta.2", "@isaacs/ttlcache": "^2.1.4", "@modelcontextprotocol/sdk": "^1.20.1", "@opencode-ai/sdk": "1.14.46", @@ -39360,7 +39360,7 @@ }, "packages/website": { "name": "@getpaseo/website", - "version": "0.4.0-beta.1", + "version": "0.4.0-beta.2", "dependencies": { "@cloudflare/vite-plugin": "^1.29.1", "@cloudflare/workers-types": "^4.20260317.1", diff --git a/package.json b/package.json index 50b1fbb07..a503d49c9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "paseo", - "version": "0.4.0-beta.1", + "version": "0.4.0-beta.2", "private": true, "description": "Paseo: voice-controlled development environment for local AI coding agents", "keywords": [ diff --git a/packages/app/package.json b/packages/app/package.json index 5aa48ecdd..33aeec069 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "@getpaseo/app", - "version": "0.4.0-beta.1", + "version": "0.4.0-beta.2", "private": true, "main": "index.ts", "scripts": { diff --git a/packages/app/src/runtime/replica-cache/index.test.ts b/packages/app/src/runtime/replica-cache/index.test.ts index 8149032f3..f97b63ef7 100644 --- a/packages/app/src/runtime/replica-cache/index.test.ts +++ b/packages/app/src/runtime/replica-cache/index.test.ts @@ -25,6 +25,10 @@ class MemoryStorage implements ReplicaCacheStorage { this.writes += 1; this.values.set(key, value); } + + async removeItem(key: string): Promise { + this.values.delete(key); + } } function workspace( @@ -226,6 +230,38 @@ describe("ReplicaCache", () => { }); }); + it("clears a cache containing a timeline row that fails its schema", async () => { + const storage = new MemoryStorage(); + const writer = new ReplicaCache(storage); + writer.setHosts([SERVER_ID]); + seedSession(); + await writer.flush(); + + const payload = JSON.parse(storage.values.get("@paseo:replica-cache") ?? "null") as { + hosts: Array<{ timeline: { items: unknown[] } | null }>; + }; + const timeline = payload.hosts[0]?.timeline; + if (!timeline) throw new Error("Expected cached timeline"); + timeline.items = [ + { + kind: "todo_list", + id: "legacy-todo", + timestamp: { __paseoDate: "2026-08-11T08:02:00.000Z" }, + provider: "codex", + items: [{ text: "Ship it", completed: false }], + }, + ]; + storage.values.set("@paseo:replica-cache", JSON.stringify(payload)); + useSessionStore.getState().clearSession(SERVER_ID); + + const reader = new ReplicaCache(storage); + reader.setHosts([SERVER_ID]); + await reader.restore(); + + expect(storage.values.has("@paseo:replica-cache")).toBe(false); + expect(useSessionStore.getState().sessions[SERVER_ID]).toBeUndefined(); + }); + it("persists only the focused agent view with a short timeline tail", async () => { const storage = new MemoryStorage(); const cache = new ReplicaCache(storage); diff --git a/packages/cli/package.json b/packages/cli/package.json index c29944630..3277a6253 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@getpaseo/cli", - "version": "0.4.0-beta.1", + "version": "0.4.0-beta.2", "description": "Paseo CLI - control your AI coding agents from the command line", "bin": { "paseo": "bin/paseo" @@ -28,9 +28,9 @@ }, "dependencies": { "@clack/prompts": "^1.0.0", - "@getpaseo/client": "0.4.0-beta.1", - "@getpaseo/protocol": "0.4.0-beta.1", - "@getpaseo/server": "0.4.0-beta.1", + "@getpaseo/client": "0.4.0-beta.2", + "@getpaseo/protocol": "0.4.0-beta.2", + "@getpaseo/server": "0.4.0-beta.2", "chalk": "^5.3.0", "commander": "^12.0.0", "mime-types": "^2.1.35", diff --git a/packages/client/package.json b/packages/client/package.json index e483b7be2..c63f1f08e 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@getpaseo/client", - "version": "0.4.0-beta.1", + "version": "0.4.0-beta.2", "description": "Paseo client SDK package", "files": [ "dist", @@ -39,8 +39,8 @@ "test": "vitest run" }, "dependencies": { - "@getpaseo/protocol": "0.4.0-beta.1", - "@getpaseo/relay": "0.4.0-beta.1", + "@getpaseo/protocol": "0.4.0-beta.2", + "@getpaseo/relay": "0.4.0-beta.2", "zod": "^4.4.3" }, "devDependencies": { diff --git a/packages/desktop/package.json b/packages/desktop/package.json index 9a1c59d1b..0bb283d30 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,6 +1,6 @@ { "name": "@getpaseo/desktop", - "version": "0.4.0-beta.1", + "version": "0.4.0-beta.2", "private": true, "description": "Paseo desktop app (Electron wrapper)", "homepage": "https://paseo.sh", diff --git a/packages/expo-two-way-audio/package.json b/packages/expo-two-way-audio/package.json index f4e15ece1..f3d6aed8e 100644 --- a/packages/expo-two-way-audio/package.json +++ b/packages/expo-two-way-audio/package.json @@ -1,6 +1,6 @@ { "name": "@getpaseo/expo-two-way-audio", - "version": "0.4.0-beta.1", + "version": "0.4.0-beta.2", "description": "Native module for two way audio streaming", "keywords": [ "ExpoTwoWayAudio", diff --git a/packages/highlight/package.json b/packages/highlight/package.json index 2e2ad2652..81982b00c 100644 --- a/packages/highlight/package.json +++ b/packages/highlight/package.json @@ -1,6 +1,6 @@ { "name": "@getpaseo/highlight", - "version": "0.4.0-beta.1", + "version": "0.4.0-beta.2", "files": [ "dist", "!dist/**/*.map" diff --git a/packages/protocol/package.json b/packages/protocol/package.json index 85b177e22..865ff1e6e 100644 --- a/packages/protocol/package.json +++ b/packages/protocol/package.json @@ -1,6 +1,6 @@ { "name": "@getpaseo/protocol", - "version": "0.4.0-beta.1", + "version": "0.4.0-beta.2", "description": "Paseo shared protocol schemas and wire types", "files": [ "dist", diff --git a/packages/relay/package.json b/packages/relay/package.json index fded01645..7f8822a6f 100644 --- a/packages/relay/package.json +++ b/packages/relay/package.json @@ -1,6 +1,6 @@ { "name": "@getpaseo/relay", - "version": "0.4.0-beta.1", + "version": "0.4.0-beta.2", "description": "Paseo relay for bridging daemon and client connections", "files": [ "dist", diff --git a/packages/server/package.json b/packages/server/package.json index 2cc571a27..c3881672d 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,6 +1,6 @@ { "name": "@getpaseo/server", - "version": "0.4.0-beta.1", + "version": "0.4.0-beta.2", "description": "Paseo backend server", "files": [ "dist/server", @@ -71,10 +71,10 @@ "@agentclientprotocol/sdk": "^0.17.1", "@anthropic-ai/claude-agent-sdk": "^0.3.220", "@anthropic-ai/sdk": "^0.104.2", - "@getpaseo/client": "0.4.0-beta.1", - "@getpaseo/highlight": "0.4.0-beta.1", - "@getpaseo/protocol": "0.4.0-beta.1", - "@getpaseo/relay": "0.4.0-beta.1", + "@getpaseo/client": "0.4.0-beta.2", + "@getpaseo/highlight": "0.4.0-beta.2", + "@getpaseo/protocol": "0.4.0-beta.2", + "@getpaseo/relay": "0.4.0-beta.2", "@isaacs/ttlcache": "^2.1.4", "@modelcontextprotocol/sdk": "^1.20.1", "@opencode-ai/sdk": "1.14.46", diff --git a/packages/website/package.json b/packages/website/package.json index 980ac8f11..63e60738e 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -1,6 +1,6 @@ { "name": "@getpaseo/website", - "version": "0.4.0-beta.1", + "version": "0.4.0-beta.2", "private": true, "type": "module", "scripts": {