From 52325adb97800e830a6348fff9b532601b8d2352 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Mon, 24 Nov 2025 19:32:55 +0100 Subject: [PATCH] Release v0.9.2 --- package-lock.json | 14 ++--- packages/agent/package.json | 6 +-- packages/ai/package.json | 2 +- packages/ai/src/models.generated.ts | 68 ++++++++++++------------- packages/coding-agent/CHANGELOG.md | 6 +++ packages/coding-agent/package.json | 8 +-- packages/coding-agent/src/tools/edit.ts | 20 +++++++- packages/pods/package.json | 4 +- packages/proxy/package.json | 2 +- packages/tui/package.json | 2 +- packages/web-ui/package.json | 6 +-- 11 files changed, 80 insertions(+), 58 deletions(-) diff --git a/package-lock.json b/package-lock.json index c2242dc6..8aab95a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3847,7 +3847,7 @@ }, "packages/agent": { "name": "@mariozechner/pi-agent-core", - "version": "0.9.1", + "version": "0.9.2", "license": "MIT", "dependencies": { "@mariozechner/pi-ai": "^0.9.1", @@ -3881,7 +3881,7 @@ }, "packages/ai": { "name": "@mariozechner/pi-ai", - "version": "0.9.1", + "version": "0.9.2", "license": "MIT", "dependencies": { "@anthropic-ai/sdk": "^0.61.0", @@ -3922,7 +3922,7 @@ }, "packages/coding-agent": { "name": "@mariozechner/pi-coding-agent", - "version": "0.9.1", + "version": "0.9.2", "license": "MIT", "dependencies": { "@mariozechner/pi-agent-core": "^0.9.1", @@ -3964,7 +3964,7 @@ }, "packages/pods": { "name": "@mariozechner/pi", - "version": "0.9.1", + "version": "0.9.2", "license": "MIT", "dependencies": { "@mariozechner/pi-agent-core": "^0.9.1", @@ -3980,7 +3980,7 @@ }, "packages/proxy": { "name": "@mariozechner/pi-proxy", - "version": "0.9.1", + "version": "0.9.2", "dependencies": { "@hono/node-server": "^1.14.0", "hono": "^4.6.16" @@ -3996,7 +3996,7 @@ }, "packages/tui": { "name": "@mariozechner/pi-tui", - "version": "0.9.1", + "version": "0.9.2", "license": "MIT", "dependencies": { "@types/mime-types": "^2.1.4", @@ -4031,7 +4031,7 @@ }, "packages/web-ui": { "name": "@mariozechner/pi-web-ui", - "version": "0.9.1", + "version": "0.9.2", "license": "MIT", "dependencies": { "@lmstudio/sdk": "^1.5.0", diff --git a/packages/agent/package.json b/packages/agent/package.json index b6a3935b..a779bb69 100644 --- a/packages/agent/package.json +++ b/packages/agent/package.json @@ -1,6 +1,6 @@ { "name": "@mariozechner/pi-agent-core", - "version": "0.9.1", + "version": "0.9.2", "description": "General-purpose agent with transport abstraction, state management, and attachment support", "type": "module", "main": "./dist/index.js", @@ -18,8 +18,8 @@ "prepublishOnly": "npm run clean && npm run build" }, "dependencies": { - "@mariozechner/pi-ai": "^0.9.1", - "@mariozechner/pi-tui": "^0.9.1" + "@mariozechner/pi-ai": "^0.9.2", + "@mariozechner/pi-tui": "^0.9.2" }, "keywords": [ "ai", diff --git a/packages/ai/package.json b/packages/ai/package.json index bcfe1c21..27dcac7d 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@mariozechner/pi-ai", - "version": "0.9.1", + "version": "0.9.2", "description": "Unified LLM API with automatic model discovery and provider configuration", "type": "module", "main": "./dist/index.js", diff --git a/packages/ai/src/models.generated.ts b/packages/ai/src/models.generated.ts index 8efb1009..60ffc53c 100644 --- a/packages/ai/src/models.generated.ts +++ b/packages/ai/src/models.generated.ts @@ -5085,23 +5085,6 @@ export const MODELS = { contextWindow: 128000, maxTokens: 16384, } satisfies Model<"openai-completions">, - "meta-llama/llama-3.1-70b-instruct": { - id: "meta-llama/llama-3.1-70b-instruct", - name: "Meta: Llama 3.1 70B Instruct", - api: "openai-completions", - provider: "openrouter", - baseUrl: "https://openrouter.ai/api/v1", - reasoning: false, - input: ["text"], - cost: { - input: 0.39999999999999997, - output: 0.39999999999999997, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 131072, - maxTokens: 4096, - } satisfies Model<"openai-completions">, "meta-llama/llama-3.1-8b-instruct": { id: "meta-llama/llama-3.1-8b-instruct", name: "Meta: Llama 3.1 8B Instruct", @@ -5136,6 +5119,23 @@ export const MODELS = { contextWindow: 130815, maxTokens: 4096, } satisfies Model<"openai-completions">, + "meta-llama/llama-3.1-70b-instruct": { + id: "meta-llama/llama-3.1-70b-instruct", + name: "Meta: Llama 3.1 70B Instruct", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.39999999999999997, + output: 0.39999999999999997, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 4096, + } satisfies Model<"openai-completions">, "mistralai/mistral-nemo": { id: "mistralai/mistral-nemo", name: "Mistral: Mistral Nemo", @@ -5442,23 +5442,6 @@ export const MODELS = { contextWindow: 128000, maxTokens: 4096, } satisfies Model<"openai-completions">, - "openai/gpt-4-turbo-preview": { - id: "openai/gpt-4-turbo-preview", - name: "OpenAI: GPT-4 Turbo Preview", - api: "openai-completions", - provider: "openrouter", - baseUrl: "https://openrouter.ai/api/v1", - reasoning: false, - input: ["text"], - cost: { - input: 10, - output: 30, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 4096, - } satisfies Model<"openai-completions">, "openai/gpt-3.5-turbo-0613": { id: "openai/gpt-3.5-turbo-0613", name: "OpenAI: GPT-3.5 Turbo (older v0613)", @@ -5476,6 +5459,23 @@ export const MODELS = { contextWindow: 4095, maxTokens: 4096, } satisfies Model<"openai-completions">, + "openai/gpt-4-turbo-preview": { + id: "openai/gpt-4-turbo-preview", + name: "OpenAI: GPT-4 Turbo Preview", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 10, + output: 30, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4096, + } satisfies Model<"openai-completions">, "mistralai/mistral-small": { id: "mistralai/mistral-small", name: "Mistral Small", diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index 7ba851ec..cb2deb7a 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## [0.9.2] - 2025-11-24 + +### Fixed + +- **Edit Tool Dollar Sign Bug**: Fixed critical bug in the `edit` tool where `String.replace()` was interpreting `$` as a special replacement pattern (e.g., `$$`, `$&`, `$'`). When trying to insert `$` into code (like adding a dollar sign to a template literal), the replacement would silently fail and produce unchanged content, but the tool would incorrectly report success. Now uses `indexOf` + `substring` for raw string replacement without special character interpretation. Also added verification that content actually changed, rejecting with a clear error if the replacement produces identical content. ([#53](https://github.com/badlogic/pi-mono/issues/53)) + ## [0.9.0] - 2025-11-21 ### Added diff --git a/packages/coding-agent/package.json b/packages/coding-agent/package.json index 14a1eeea..6b611d09 100644 --- a/packages/coding-agent/package.json +++ b/packages/coding-agent/package.json @@ -1,6 +1,6 @@ { "name": "@mariozechner/pi-coding-agent", - "version": "0.9.1", + "version": "0.9.2", "description": "Coding agent CLI with read, bash, edit, write tools and session management", "type": "module", "bin": { @@ -22,9 +22,9 @@ "prepublishOnly": "npm run clean && npm run build" }, "dependencies": { - "@mariozechner/pi-agent-core": "^0.9.1", - "@mariozechner/pi-ai": "^0.9.1", - "@mariozechner/pi-tui": "^0.9.1", + "@mariozechner/pi-agent-core": "^0.9.2", + "@mariozechner/pi-ai": "^0.9.2", + "@mariozechner/pi-tui": "^0.9.2", "chalk": "^5.5.0", "diff": "^8.0.2", "glob": "^11.0.3" diff --git a/packages/coding-agent/src/tools/edit.ts b/packages/coding-agent/src/tools/edit.ts index ac390b57..f33f7b38 100644 --- a/packages/coding-agent/src/tools/edit.ts +++ b/packages/coding-agent/src/tools/edit.ts @@ -213,8 +213,24 @@ export const editTool: AgentTool = { return; } - // Perform replacement - const newContent = content.replace(oldText, newText); + // Perform replacement using indexOf + substring (raw string replace, no special character interpretation) + // String.replace() interprets $ in the replacement string, so we do manual replacement + const index = content.indexOf(oldText); + const newContent = content.substring(0, index) + newText + content.substring(index + oldText.length); + + // Verify the replacement actually changed something + if (content === newContent) { + if (signal) { + signal.removeEventListener("abort", onAbort); + } + reject( + new Error( + `No changes made to ${path}. The replacement produced identical content. This might indicate an issue with special characters or the text not existing as expected.`, + ), + ); + return; + } + await writeFile(absolutePath, newContent, "utf-8"); // Check if aborted after writing diff --git a/packages/pods/package.json b/packages/pods/package.json index 5134c9d0..52378b04 100644 --- a/packages/pods/package.json +++ b/packages/pods/package.json @@ -1,6 +1,6 @@ { "name": "@mariozechner/pi", - "version": "0.9.1", + "version": "0.9.2", "description": "CLI tool for managing vLLM deployments on GPU pods", "type": "module", "bin": { @@ -34,7 +34,7 @@ "node": ">=20.0.0" }, "dependencies": { - "@mariozechner/pi-agent-core": "^0.9.1", + "@mariozechner/pi-agent-core": "^0.9.2", "chalk": "^5.5.0" }, "devDependencies": {} diff --git a/packages/proxy/package.json b/packages/proxy/package.json index 4d940814..07735db7 100644 --- a/packages/proxy/package.json +++ b/packages/proxy/package.json @@ -1,6 +1,6 @@ { "name": "@mariozechner/pi-proxy", - "version": "0.9.1", + "version": "0.9.2", "type": "module", "description": "CORS and authentication proxy for pi-ai", "main": "dist/index.js", diff --git a/packages/tui/package.json b/packages/tui/package.json index b9e0afa6..ee5c345e 100644 --- a/packages/tui/package.json +++ b/packages/tui/package.json @@ -1,6 +1,6 @@ { "name": "@mariozechner/pi-tui", - "version": "0.9.1", + "version": "0.9.2", "description": "Terminal User Interface library with differential rendering for efficient text-based applications", "type": "module", "main": "dist/index.js", diff --git a/packages/web-ui/package.json b/packages/web-ui/package.json index 7377f679..cf09484a 100644 --- a/packages/web-ui/package.json +++ b/packages/web-ui/package.json @@ -1,6 +1,6 @@ { "name": "@mariozechner/pi-web-ui", - "version": "0.9.1", + "version": "0.9.2", "description": "Reusable web UI components for AI chat interfaces powered by @mariozechner/pi-ai", "type": "module", "main": "dist/index.js", @@ -18,8 +18,8 @@ }, "dependencies": { "@lmstudio/sdk": "^1.5.0", - "@mariozechner/pi-ai": "^0.9.1", - "@mariozechner/pi-tui": "^0.9.1", + "@mariozechner/pi-ai": "^0.9.2", + "@mariozechner/pi-tui": "^0.9.2", "docx-preview": "^0.3.7", "jszip": "^3.10.1", "lucide": "^0.544.0",