From 52f1a8cb31b771a6da7b9fff8a58318f920a03d8 Mon Sep 17 00:00:00 2001 From: badlogic Date: Sat, 6 Dec 2025 22:42:47 +0100 Subject: [PATCH] Fix Windows binary detection for Bun compiled executables - Updated isBunBinary detection to check for %7EBUN (URL-encoded ~BUN) - Simplified build:binary script to remove Unix-specific shell syntax - Binary now correctly locates supporting files next to executable on Windows --- package-lock.json | 36 +++++++----- packages/ai/src/models.generated.ts | 90 ++++++++++++++--------------- packages/coding-agent/CHANGELOG.md | 4 ++ packages/coding-agent/package.json | 2 +- packages/coding-agent/src/config.ts | 5 +- 5 files changed, 74 insertions(+), 63 deletions(-) diff --git a/package-lock.json b/package-lock.json index 758de6c1..b34f9112 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3661,6 +3661,7 @@ "resolved": "https://registry.npmjs.org/hono/-/hono-4.10.7.tgz", "integrity": "sha512-icXIITfw/07Q88nLSkB9aiUrd8rYzSweK681Kjo/TSggaGbOX4RRyxxm71v+3PC8C/j+4rlxGeoTRxQDkaJkUw==", "license": "MIT", + "peer": true, "engines": { "node": ">=16.9.0" } @@ -3921,12 +3922,12 @@ } }, "node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", "license": "MIT", "dependencies": { - "jwa": "^2.0.0", + "jwa": "^2.0.1", "safe-buffer": "^5.0.1" } }, @@ -4218,6 +4219,7 @@ "resolved": "https://registry.npmjs.org/lit/-/lit-3.3.1.tgz", "integrity": "sha512-Ksr/8L3PTapbdXJCk+EJVB78jDodUMaP54gD24W186zGRARvwrsPfS60wae/SSCTCNZVPd1chXqio1qHQmu4NA==", "license": "BSD-3-Clause", + "peer": true, "dependencies": { "@lit/reactive-element": "^2.1.0", "lit-element": "^4.2.0", @@ -5282,6 +5284,7 @@ "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.4.0.tgz", "integrity": "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==", "license": "MIT", + "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/dcastil" @@ -5310,7 +5313,8 @@ "version": "4.1.17", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.17.tgz", "integrity": "sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/tapable": { "version": "2.3.0", @@ -5518,6 +5522,7 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.4.tgz", "integrity": "sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==", "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -5960,6 +5965,7 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -5978,8 +5984,8 @@ "version": "0.12.15", "license": "MIT", "dependencies": { - "@mariozechner/pi-ai": "^0.12.14", - "@mariozechner/pi-tui": "^0.12.14" + "@mariozechner/pi-ai": "^0.12.15", + "@mariozechner/pi-tui": "^0.12.15" }, "devDependencies": { "@types/node": "^24.3.0", @@ -6053,9 +6059,9 @@ "version": "0.12.15", "license": "MIT", "dependencies": { - "@mariozechner/pi-agent-core": "^0.12.14", - "@mariozechner/pi-ai": "^0.12.14", - "@mariozechner/pi-tui": "^0.12.14", + "@mariozechner/pi-agent-core": "^0.12.15", + "@mariozechner/pi-ai": "^0.12.15", + "@mariozechner/pi-tui": "^0.12.15", "chalk": "^5.5.0", "diff": "^8.0.2", "glob": "^11.0.3" @@ -6096,8 +6102,8 @@ "license": "MIT", "dependencies": { "@anthropic-ai/sandbox-runtime": "^0.0.16", - "@mariozechner/pi-agent-core": "^0.12.14", - "@mariozechner/pi-ai": "^0.12.14", + "@mariozechner/pi-agent-core": "^0.12.15", + "@mariozechner/pi-ai": "^0.12.15", "@sinclair/typebox": "^0.34.0", "@slack/socket-mode": "^2.0.0", "@slack/web-api": "^7.0.0", @@ -6138,7 +6144,7 @@ "version": "0.12.15", "license": "MIT", "dependencies": { - "@mariozechner/pi-agent-core": "^0.12.14", + "@mariozechner/pi-agent-core": "^0.12.15", "chalk": "^5.5.0" }, "bin": { @@ -6215,8 +6221,8 @@ "license": "MIT", "dependencies": { "@lmstudio/sdk": "^1.5.0", - "@mariozechner/pi-ai": "^0.12.14", - "@mariozechner/pi-tui": "^0.12.14", + "@mariozechner/pi-ai": "^0.12.15", + "@mariozechner/pi-tui": "^0.12.15", "docx-preview": "^0.3.7", "jszip": "^3.10.1", "lucide": "^0.544.0", diff --git a/packages/ai/src/models.generated.ts b/packages/ai/src/models.generated.ts index 9a570e4a..4e8b0b84 100644 --- a/packages/ai/src/models.generated.ts +++ b/packages/ai/src/models.generated.ts @@ -2227,7 +2227,7 @@ export const MODELS = { cacheWrite: 6.25, }, contextWindow: 200000, - maxTokens: 64000, + maxTokens: 32000, } satisfies Model<"openai-completions">, "allenai/olmo-3-7b-instruct": { id: "allenai/olmo-3-7b-instruct", @@ -3241,13 +3241,13 @@ export const MODELS = { reasoning: true, input: ["text"], cost: { - input: 0.19999999999999998, - output: 0.7999999999999999, + input: 0, + output: 0, cacheRead: 0, cacheWrite: 0, }, - contextWindow: 163840, - maxTokens: 163840, + contextWindow: 131072, + maxTokens: 131072, } satisfies Model<"openai-completions">, "openai/gpt-4o-audio-preview": { id: "openai/gpt-4o-audio-preview", @@ -4983,9 +4983,9 @@ export const MODELS = { contextWindow: 32768, maxTokens: 4096, } satisfies Model<"openai-completions">, - "anthropic/claude-3.5-haiku": { - id: "anthropic/claude-3.5-haiku", - name: "Anthropic: Claude 3.5 Haiku", + "anthropic/claude-3.5-haiku-20241022": { + id: "anthropic/claude-3.5-haiku-20241022", + name: "Anthropic: Claude 3.5 Haiku (2024-10-22)", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", @@ -5000,9 +5000,9 @@ export const MODELS = { contextWindow: 200000, maxTokens: 8192, } satisfies Model<"openai-completions">, - "anthropic/claude-3.5-haiku-20241022": { - id: "anthropic/claude-3.5-haiku-20241022", - name: "Anthropic: Claude 3.5 Haiku (2024-10-22)", + "anthropic/claude-3.5-haiku": { + id: "anthropic/claude-3.5-haiku", + name: "Anthropic: Claude 3.5 Haiku", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", @@ -5153,23 +5153,6 @@ export const MODELS = { contextWindow: 32768, maxTokens: 4096, } satisfies Model<"openai-completions">, - "cohere/command-r-plus-08-2024": { - id: "cohere/command-r-plus-08-2024", - name: "Cohere: Command R+ (08-2024)", - api: "openai-completions", - provider: "openrouter", - baseUrl: "https://openrouter.ai/api/v1", - reasoning: false, - input: ["text"], - cost: { - input: 2.5, - output: 10, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 4000, - } satisfies Model<"openai-completions">, "cohere/command-r-08-2024": { id: "cohere/command-r-08-2024", name: "Cohere: Command R (08-2024)", @@ -5187,6 +5170,23 @@ export const MODELS = { contextWindow: 128000, maxTokens: 4000, } satisfies Model<"openai-completions">, + "cohere/command-r-plus-08-2024": { + id: "cohere/command-r-plus-08-2024", + name: "Cohere: Command R+ (08-2024)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 2.5, + output: 10, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4000, + } satisfies Model<"openai-completions">, "sao10k/l3.1-euryale-70b": { id: "sao10k/l3.1-euryale-70b", name: "Sao10K: Llama 3.1 Euryale 70B v2.2", @@ -5238,23 +5238,6 @@ export const MODELS = { contextWindow: 128000, maxTokens: 16384, } satisfies Model<"openai-completions">, - "meta-llama/llama-3.1-405b-instruct": { - id: "meta-llama/llama-3.1-405b-instruct", - name: "Meta: Llama 3.1 405B Instruct", - api: "openai-completions", - provider: "openrouter", - baseUrl: "https://openrouter.ai/api/v1", - reasoning: false, - input: ["text"], - cost: { - input: 3.5, - output: 3.5, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 130815, - 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", @@ -5272,6 +5255,23 @@ export const MODELS = { contextWindow: 131072, maxTokens: 16384, } satisfies Model<"openai-completions">, + "meta-llama/llama-3.1-405b-instruct": { + id: "meta-llama/llama-3.1-405b-instruct", + name: "Meta: Llama 3.1 405B Instruct", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 3.5, + output: 3.5, + cacheRead: 0, + cacheWrite: 0, + }, + 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", diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index 93a15b8b..60844cfd 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Fixed + +- **Windows binary detection**: Fixed Bun compiled binary detection on Windows by checking for URL-encoded `%7EBUN` in addition to `$bunfs` and `~BUN` in `import.meta.url`. This ensures the binary correctly locates supporting files (package.json, themes, etc.) next to the executable. + ## [0.12.15] - 2025-12-06 ### Fixed diff --git a/packages/coding-agent/package.json b/packages/coding-agent/package.json index 7a48cc76..f651cce4 100644 --- a/packages/coding-agent/package.json +++ b/packages/coding-agent/package.json @@ -19,7 +19,7 @@ "scripts": { "clean": "rm -rf dist", "build": "tsgo -p tsconfig.build.json && chmod +x dist/cli.js && npm run copy-assets", - "build:binary": "command -v bun >/dev/null 2>&1 || { echo 'Error: Bun is required for building the binary. Install it from https://bun.sh'; exit 1; } && npm run build && bun build --compile ./dist/cli.js --outfile dist/pi && npm run copy-binary-assets", + "build:binary": "npm run build && bun build --compile ./dist/cli.js --outfile dist/pi && npm run copy-binary-assets", "copy-assets": "cp src/theme/*.json dist/theme/", "copy-binary-assets": "cp package.json dist/ && cp README.md dist/ && cp CHANGELOG.md dist/", "dev": "tsgo -p tsconfig.build.json --watch --preserveWatchOutput", diff --git a/packages/coding-agent/src/config.ts b/packages/coding-agent/src/config.ts index bcb5f711..0a7bd7a9 100644 --- a/packages/coding-agent/src/config.ts +++ b/packages/coding-agent/src/config.ts @@ -12,9 +12,10 @@ const __dirname = dirname(__filename); /** * Detect if we're running as a Bun compiled binary. - * Bun binaries have import.meta.url containing "$bunfs" (Bun's virtual filesystem path) + * Bun binaries have import.meta.url containing "$bunfs", "~BUN", or "%7EBUN" (Bun's virtual filesystem path) */ -export const isBunBinary = import.meta.url.includes("$bunfs"); +export const isBunBinary = + import.meta.url.includes("$bunfs") || import.meta.url.includes("~BUN") || import.meta.url.includes("%7EBUN"); // ============================================================================= // Package Asset Paths (shipped with executable)