diff --git a/README.md b/README.md index 680e823a..0acfc265 100644 --- a/README.md +++ b/README.md @@ -56,9 +56,39 @@ These commands: ### Publishing -```bash -npm run publish # Publish all packages to npm -``` +Complete release process: + +1. **Update CHANGELOG.md** (for coding-agent releases): + ```bash + # Add your changes to the [Unreleased] section in packages/coding-agent/CHANGELOG.md + ``` + +2. **Bump version** (all packages): + ```bash + npm run version:patch # For bug fixes + npm run version:minor # For new features + npm run version:major # For breaking changes + ``` + +3. **Update CHANGELOG.md version** (for coding-agent): + ```bash + # Move the [Unreleased] section to the new version number with today's date + # e.g., ## [0.7.16] - 2025-11-17 + ``` + +4. **Commit and tag**: + ```bash + git add . + git commit -m "Release v0.7.16" + git tag v0.7.16 + git push origin main + git push origin v0.7.16 + ``` + +5. **Publish to npm**: + ```bash + npm run publish # Publish all packages to npm + ``` ## License diff --git a/package-lock.json b/package-lock.json index f2ef5c05..b203572f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3193,7 +3193,7 @@ }, "packages/agent": { "name": "@mariozechner/pi-agent", - "version": "0.7.15", + "version": "0.7.16", "license": "MIT", "dependencies": { "@mariozechner/pi-ai": "^0.7.15", @@ -3223,7 +3223,7 @@ }, "packages/ai": { "name": "@mariozechner/pi-ai", - "version": "0.7.15", + "version": "0.7.16", "license": "MIT", "dependencies": { "@anthropic-ai/sdk": "^0.61.0", @@ -3270,7 +3270,7 @@ }, "packages/coding-agent": { "name": "@mariozechner/pi-coding-agent", - "version": "0.7.15", + "version": "0.7.16", "license": "MIT", "dependencies": { "@mariozechner/pi-agent": "^0.7.15", @@ -3317,7 +3317,7 @@ }, "packages/pods": { "name": "@mariozechner/pi", - "version": "0.7.15", + "version": "0.7.16", "license": "MIT", "dependencies": { "@mariozechner/pi-agent": "^0.7.15", @@ -3343,7 +3343,7 @@ }, "packages/proxy": { "name": "@mariozechner/pi-proxy", - "version": "0.7.15", + "version": "0.7.16", "dependencies": { "@hono/node-server": "^1.14.0", "hono": "^4.6.16" @@ -3359,7 +3359,7 @@ }, "packages/tui": { "name": "@mariozechner/pi-tui", - "version": "0.7.15", + "version": "0.7.16", "license": "MIT", "dependencies": { "@types/mime-types": "^2.1.4", @@ -3398,7 +3398,7 @@ }, "packages/web-ui": { "name": "@mariozechner/pi-web-ui", - "version": "0.7.15", + "version": "0.7.16", "license": "MIT", "dependencies": { "@lmstudio/sdk": "^1.5.0", diff --git a/packages/agent/package.json b/packages/agent/package.json index 8c310349..3a1e2fd3 100644 --- a/packages/agent/package.json +++ b/packages/agent/package.json @@ -1,6 +1,6 @@ { "name": "@mariozechner/pi-agent", - "version": "0.7.15", + "version": "0.7.16", "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.7.15", - "@mariozechner/pi-tui": "^0.7.15" + "@mariozechner/pi-ai": "^0.7.16", + "@mariozechner/pi-tui": "^0.7.16" }, "keywords": [ "ai", diff --git a/packages/ai/package.json b/packages/ai/package.json index 5a544e5a..cf232bb1 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@mariozechner/pi-ai", - "version": "0.7.15", + "version": "0.7.16", "description": "Unified LLM API with automatic model discovery and provider configuration", "type": "module", "main": "./dist/index.js", diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index 02064f70..2209cd1b 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -2,6 +2,12 @@ ## [Unreleased] +## [0.7.16] - 2025-11-17 + +### Fixed + +- **Tool Error Display**: Fixed edit tool (and all other tools) not showing error state correctly in TUI. Failed tool executions now properly display with red background and show the error message. Previously, the `isError` flag from tool execution events was not being passed to the UI component, causing all tool results to show with green (success) background regardless of whether they succeeded or failed. + ## [0.7.15] - 2025-11-17 ### Fixed diff --git a/packages/coding-agent/package.json b/packages/coding-agent/package.json index c525b834..cd3139db 100644 --- a/packages/coding-agent/package.json +++ b/packages/coding-agent/package.json @@ -1,6 +1,6 @@ { "name": "@mariozechner/pi-coding-agent", - "version": "0.7.15", + "version": "0.7.16", "description": "Coding agent CLI with read, bash, edit, write tools and session management", "type": "module", "bin": { @@ -21,8 +21,8 @@ "prepublishOnly": "npm run clean && npm run build" }, "dependencies": { - "@mariozechner/pi-agent": "^0.7.15", - "@mariozechner/pi-ai": "^0.7.15", + "@mariozechner/pi-agent": "^0.7.16", + "@mariozechner/pi-ai": "^0.7.16", "chalk": "^5.5.0", "diff": "^8.0.2", "glob": "^11.0.3" diff --git a/packages/coding-agent/src/tui/tool-execution.ts b/packages/coding-agent/src/tui/tool-execution.ts index 232c9cdb..095b8ad9 100644 --- a/packages/coding-agent/src/tui/tool-execution.ts +++ b/packages/coding-agent/src/tui/tool-execution.ts @@ -251,20 +251,27 @@ export class ToolExecutionComponent extends Container { const path = shortenPath(this.args?.file_path || this.args?.path || ""); text = chalk.bold("edit") + " " + (path ? chalk.cyan(path) : chalk.dim("...")); - // Show diff if available - if (this.result?.details?.diff) { - // Parse the diff string and apply colors - const diffLines = this.result.details.diff.split("\n"); - const coloredLines = diffLines.map((line: string) => { - if (line.startsWith("+")) { - return chalk.green(line); - } else if (line.startsWith("-")) { - return chalk.red(line); - } else { - return chalk.dim(line); + if (this.result) { + // Show error message if it's an error + if (this.result.isError) { + const errorText = this.getTextOutput(); + if (errorText) { + text += "\n\n" + chalk.red(errorText); } - }); - text += "\n\n" + coloredLines.join("\n"); + } else if (this.result.details?.diff) { + // Show diff if available + const diffLines = this.result.details.diff.split("\n"); + const coloredLines = diffLines.map((line: string) => { + if (line.startsWith("+")) { + return chalk.green(line); + } else if (line.startsWith("-")) { + return chalk.red(line); + } else { + return chalk.dim(line); + } + }); + text += "\n\n" + coloredLines.join("\n"); + } } } else { // Generic tool diff --git a/packages/coding-agent/src/tui/tui-renderer.ts b/packages/coding-agent/src/tui/tui-renderer.ts index cfb220f6..6925cb55 100644 --- a/packages/coding-agent/src/tui/tui-renderer.ts +++ b/packages/coding-agent/src/tui/tui-renderer.ts @@ -376,7 +376,20 @@ export class TuiRenderer { // Update the existing tool component with the result const component = this.pendingTools.get(event.toolCallId); if (component) { - component.updateResult(event.result); + // Convert result to the format expected by updateResult + const resultData = + typeof event.result === "string" + ? { + content: [{ type: "text" as const, text: event.result }], + details: undefined, + isError: event.isError, + } + : { + content: event.result.content, + details: event.result.details, + isError: event.isError, + }; + component.updateResult(resultData); this.pendingTools.delete(event.toolCallId); this.ui.requestRender(); } diff --git a/packages/pods/package.json b/packages/pods/package.json index b6c2eb48..df32f5f1 100644 --- a/packages/pods/package.json +++ b/packages/pods/package.json @@ -1,6 +1,6 @@ { "name": "@mariozechner/pi", - "version": "0.7.15", + "version": "0.7.16", "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": "^0.7.15", + "@mariozechner/pi-agent": "^0.7.16", "chalk": "^5.5.0" }, "devDependencies": {} diff --git a/packages/proxy/package.json b/packages/proxy/package.json index 22cb3cbb..ac8a5ea7 100644 --- a/packages/proxy/package.json +++ b/packages/proxy/package.json @@ -1,6 +1,6 @@ { "name": "@mariozechner/pi-proxy", - "version": "0.7.15", + "version": "0.7.16", "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 ccb584fd..425cec42 100644 --- a/packages/tui/package.json +++ b/packages/tui/package.json @@ -1,6 +1,6 @@ { "name": "@mariozechner/pi-tui", - "version": "0.7.15", + "version": "0.7.16", "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 2aaf32d8..6e1facf2 100644 --- a/packages/web-ui/package.json +++ b/packages/web-ui/package.json @@ -1,6 +1,6 @@ { "name": "@mariozechner/pi-web-ui", - "version": "0.7.15", + "version": "0.7.16", "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.7.15", - "@mariozechner/pi-tui": "^0.7.15", + "@mariozechner/pi-ai": "^0.7.16", + "@mariozechner/pi-tui": "^0.7.16", "docx-preview": "^0.3.7", "jszip": "^3.10.1", "lucide": "^0.544.0",