feat: standalone binary support with Bun

- Add build:binary script for Bun compilation
- Add paths.ts for cross-platform asset resolution (npm/bun/tsx)
- Add GitHub Actions workflow for automated binary releases
- Update README with installation options

Based on #89 by @steipete
This commit is contained in:
Mario Zechner 2025-12-02 12:18:42 +01:00
parent 4a60bffe3b
commit c4a65ad8b9
17 changed files with 626 additions and 65 deletions

380
package-lock.json generated
View file

@ -6074,11 +6074,11 @@
},
"packages/agent": {
"name": "@mariozechner/pi-agent-core",
"version": "0.11.6",
"version": "0.12.0",
"license": "MIT",
"dependencies": {
"@mariozechner/pi-ai": "^0.11.5",
"@mariozechner/pi-tui": "^0.11.5"
"@mariozechner/pi-ai": "^0.11.6",
"@mariozechner/pi-tui": "^0.11.6"
},
"devDependencies": {
"@types/node": "^24.3.0",
@ -6089,6 +6089,42 @@
"node": ">=20.0.0"
}
},
"packages/agent/node_modules/@mariozechner/pi-ai": {
"version": "0.11.6",
"resolved": "https://registry.npmjs.org/@mariozechner/pi-ai/-/pi-ai-0.11.6.tgz",
"integrity": "sha512-E96GATRiarbLtvukx69VruA8E2szGkmNbT86SHTFnOg1Nl1Y78hVcYggUFhTTHuuOZznbwG68iBzK6roKybysw==",
"license": "MIT",
"dependencies": {
"@anthropic-ai/sdk": "^0.61.0",
"@google/genai": "^1.30.0",
"@sinclair/typebox": "^0.34.41",
"ajv": "^8.17.1",
"ajv-formats": "^3.0.1",
"chalk": "^5.6.2",
"openai": "5.21.0",
"partial-json": "^0.1.7",
"zod-to-json-schema": "^3.24.6"
},
"engines": {
"node": ">=20.0.0"
}
},
"packages/agent/node_modules/@mariozechner/pi-tui": {
"version": "0.11.6",
"resolved": "https://registry.npmjs.org/@mariozechner/pi-tui/-/pi-tui-0.11.6.tgz",
"integrity": "sha512-tiYPbZ3ZlGYDqZk9nZ/pckFGbUfhfc35O/933QxX11ObPOgGFuj92pDFrPACfPX6rYvG909p1CBvZeGS7Szd+w==",
"license": "MIT",
"dependencies": {
"@types/mime-types": "^2.1.4",
"chalk": "^5.5.0",
"marked": "^15.0.12",
"mime-types": "^3.0.1",
"string-width": "^8.1.0"
},
"engines": {
"node": ">=20.0.0"
}
},
"packages/agent/node_modules/@types/node": {
"version": "24.10.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz",
@ -6099,6 +6135,31 @@
"undici-types": "~7.16.0"
}
},
"packages/agent/node_modules/mime-db": {
"version": "1.54.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
"integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"packages/agent/node_modules/mime-types": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz",
"integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==",
"license": "MIT",
"dependencies": {
"mime-db": "^1.54.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"packages/agent/node_modules/undici-types": {
"version": "7.16.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
@ -6108,7 +6169,7 @@
},
"packages/ai": {
"name": "@mariozechner/pi-ai",
"version": "0.11.6",
"version": "0.12.0",
"license": "MIT",
"dependencies": {
"@anthropic-ai/sdk": "^0.61.0",
@ -6149,12 +6210,12 @@
},
"packages/coding-agent": {
"name": "@mariozechner/pi-coding-agent",
"version": "0.11.6",
"version": "0.12.0",
"license": "MIT",
"dependencies": {
"@mariozechner/pi-agent-core": "^0.11.5",
"@mariozechner/pi-ai": "^0.11.5",
"@mariozechner/pi-tui": "^0.11.5",
"@mariozechner/pi-agent-core": "^0.11.6",
"@mariozechner/pi-ai": "^0.11.6",
"@mariozechner/pi-tui": "^0.11.6",
"chalk": "^5.5.0",
"diff": "^8.0.2",
"glob": "^11.0.3"
@ -6172,6 +6233,55 @@
"node": ">=20.0.0"
}
},
"packages/coding-agent/node_modules/@mariozechner/pi-agent-core": {
"version": "0.11.6",
"resolved": "https://registry.npmjs.org/@mariozechner/pi-agent-core/-/pi-agent-core-0.11.6.tgz",
"integrity": "sha512-NnfZlEyXBitBVzyRsakOfvRcI0AoIpInADDUWgtGefrf/9Vv3QAmN7oDd7Zq5rZUbfMY5rVHUuogvEyZBMpwxQ==",
"license": "MIT",
"dependencies": {
"@mariozechner/pi-ai": "^0.11.6",
"@mariozechner/pi-tui": "^0.11.6"
},
"engines": {
"node": ">=20.0.0"
}
},
"packages/coding-agent/node_modules/@mariozechner/pi-ai": {
"version": "0.11.6",
"resolved": "https://registry.npmjs.org/@mariozechner/pi-ai/-/pi-ai-0.11.6.tgz",
"integrity": "sha512-E96GATRiarbLtvukx69VruA8E2szGkmNbT86SHTFnOg1Nl1Y78hVcYggUFhTTHuuOZznbwG68iBzK6roKybysw==",
"license": "MIT",
"dependencies": {
"@anthropic-ai/sdk": "^0.61.0",
"@google/genai": "^1.30.0",
"@sinclair/typebox": "^0.34.41",
"ajv": "^8.17.1",
"ajv-formats": "^3.0.1",
"chalk": "^5.6.2",
"openai": "5.21.0",
"partial-json": "^0.1.7",
"zod-to-json-schema": "^3.24.6"
},
"engines": {
"node": ">=20.0.0"
}
},
"packages/coding-agent/node_modules/@mariozechner/pi-tui": {
"version": "0.11.6",
"resolved": "https://registry.npmjs.org/@mariozechner/pi-tui/-/pi-tui-0.11.6.tgz",
"integrity": "sha512-tiYPbZ3ZlGYDqZk9nZ/pckFGbUfhfc35O/933QxX11ObPOgGFuj92pDFrPACfPX6rYvG909p1CBvZeGS7Szd+w==",
"license": "MIT",
"dependencies": {
"@types/mime-types": "^2.1.4",
"chalk": "^5.5.0",
"marked": "^15.0.12",
"mime-types": "^3.0.1",
"string-width": "^8.1.0"
},
"engines": {
"node": ">=20.0.0"
}
},
"packages/coding-agent/node_modules/@types/node": {
"version": "24.10.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz",
@ -6182,6 +6292,31 @@
"undici-types": "~7.16.0"
}
},
"packages/coding-agent/node_modules/mime-db": {
"version": "1.54.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
"integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"packages/coding-agent/node_modules/mime-types": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz",
"integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==",
"license": "MIT",
"dependencies": {
"mime-db": "^1.54.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"packages/coding-agent/node_modules/undici-types": {
"version": "7.16.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
@ -6191,12 +6326,12 @@
},
"packages/mom": {
"name": "@mariozechner/pi-mom",
"version": "0.11.6",
"version": "0.12.0",
"license": "MIT",
"dependencies": {
"@anthropic-ai/sandbox-runtime": "^0.0.16",
"@mariozechner/pi-agent-core": "^0.11.5",
"@mariozechner/pi-ai": "^0.11.5",
"@mariozechner/pi-agent-core": "^0.11.6",
"@mariozechner/pi-ai": "^0.11.6",
"@sinclair/typebox": "^0.34.0",
"@slack/socket-mode": "^2.0.0",
"@slack/web-api": "^7.0.0",
@ -6215,6 +6350,55 @@
"node": ">=20.0.0"
}
},
"packages/mom/node_modules/@mariozechner/pi-agent-core": {
"version": "0.11.6",
"resolved": "https://registry.npmjs.org/@mariozechner/pi-agent-core/-/pi-agent-core-0.11.6.tgz",
"integrity": "sha512-NnfZlEyXBitBVzyRsakOfvRcI0AoIpInADDUWgtGefrf/9Vv3QAmN7oDd7Zq5rZUbfMY5rVHUuogvEyZBMpwxQ==",
"license": "MIT",
"dependencies": {
"@mariozechner/pi-ai": "^0.11.6",
"@mariozechner/pi-tui": "^0.11.6"
},
"engines": {
"node": ">=20.0.0"
}
},
"packages/mom/node_modules/@mariozechner/pi-ai": {
"version": "0.11.6",
"resolved": "https://registry.npmjs.org/@mariozechner/pi-ai/-/pi-ai-0.11.6.tgz",
"integrity": "sha512-E96GATRiarbLtvukx69VruA8E2szGkmNbT86SHTFnOg1Nl1Y78hVcYggUFhTTHuuOZznbwG68iBzK6roKybysw==",
"license": "MIT",
"dependencies": {
"@anthropic-ai/sdk": "^0.61.0",
"@google/genai": "^1.30.0",
"@sinclair/typebox": "^0.34.41",
"ajv": "^8.17.1",
"ajv-formats": "^3.0.1",
"chalk": "^5.6.2",
"openai": "5.21.0",
"partial-json": "^0.1.7",
"zod-to-json-schema": "^3.24.6"
},
"engines": {
"node": ">=20.0.0"
}
},
"packages/mom/node_modules/@mariozechner/pi-tui": {
"version": "0.11.6",
"resolved": "https://registry.npmjs.org/@mariozechner/pi-tui/-/pi-tui-0.11.6.tgz",
"integrity": "sha512-tiYPbZ3ZlGYDqZk9nZ/pckFGbUfhfc35O/933QxX11ObPOgGFuj92pDFrPACfPX6rYvG909p1CBvZeGS7Szd+w==",
"license": "MIT",
"dependencies": {
"@types/mime-types": "^2.1.4",
"chalk": "^5.5.0",
"marked": "^15.0.12",
"mime-types": "^3.0.1",
"string-width": "^8.1.0"
},
"engines": {
"node": ">=20.0.0"
}
},
"packages/mom/node_modules/@types/node": {
"version": "24.10.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz",
@ -6225,6 +6409,31 @@
"undici-types": "~7.16.0"
}
},
"packages/mom/node_modules/mime-db": {
"version": "1.54.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
"integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"packages/mom/node_modules/mime-types": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz",
"integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==",
"license": "MIT",
"dependencies": {
"mime-db": "^1.54.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"packages/mom/node_modules/undici-types": {
"version": "7.16.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
@ -6234,10 +6443,10 @@
},
"packages/pods": {
"name": "@mariozechner/pi",
"version": "0.11.6",
"version": "0.12.0",
"license": "MIT",
"dependencies": {
"@mariozechner/pi-agent-core": "^0.11.5",
"@mariozechner/pi-agent-core": "^0.11.6",
"chalk": "^5.5.0"
},
"bin": {
@ -6248,9 +6457,83 @@
"node": ">=20.0.0"
}
},
"packages/pods/node_modules/@mariozechner/pi-agent-core": {
"version": "0.11.6",
"resolved": "https://registry.npmjs.org/@mariozechner/pi-agent-core/-/pi-agent-core-0.11.6.tgz",
"integrity": "sha512-NnfZlEyXBitBVzyRsakOfvRcI0AoIpInADDUWgtGefrf/9Vv3QAmN7oDd7Zq5rZUbfMY5rVHUuogvEyZBMpwxQ==",
"license": "MIT",
"dependencies": {
"@mariozechner/pi-ai": "^0.11.6",
"@mariozechner/pi-tui": "^0.11.6"
},
"engines": {
"node": ">=20.0.0"
}
},
"packages/pods/node_modules/@mariozechner/pi-ai": {
"version": "0.11.6",
"resolved": "https://registry.npmjs.org/@mariozechner/pi-ai/-/pi-ai-0.11.6.tgz",
"integrity": "sha512-E96GATRiarbLtvukx69VruA8E2szGkmNbT86SHTFnOg1Nl1Y78hVcYggUFhTTHuuOZznbwG68iBzK6roKybysw==",
"license": "MIT",
"dependencies": {
"@anthropic-ai/sdk": "^0.61.0",
"@google/genai": "^1.30.0",
"@sinclair/typebox": "^0.34.41",
"ajv": "^8.17.1",
"ajv-formats": "^3.0.1",
"chalk": "^5.6.2",
"openai": "5.21.0",
"partial-json": "^0.1.7",
"zod-to-json-schema": "^3.24.6"
},
"engines": {
"node": ">=20.0.0"
}
},
"packages/pods/node_modules/@mariozechner/pi-tui": {
"version": "0.11.6",
"resolved": "https://registry.npmjs.org/@mariozechner/pi-tui/-/pi-tui-0.11.6.tgz",
"integrity": "sha512-tiYPbZ3ZlGYDqZk9nZ/pckFGbUfhfc35O/933QxX11ObPOgGFuj92pDFrPACfPX6rYvG909p1CBvZeGS7Szd+w==",
"license": "MIT",
"dependencies": {
"@types/mime-types": "^2.1.4",
"chalk": "^5.5.0",
"marked": "^15.0.12",
"mime-types": "^3.0.1",
"string-width": "^8.1.0"
},
"engines": {
"node": ">=20.0.0"
}
},
"packages/pods/node_modules/mime-db": {
"version": "1.54.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
"integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"packages/pods/node_modules/mime-types": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz",
"integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==",
"license": "MIT",
"dependencies": {
"mime-db": "^1.54.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"packages/proxy": {
"name": "@mariozechner/pi-proxy",
"version": "0.11.6",
"version": "0.12.0",
"dependencies": {
"@hono/node-server": "^1.14.0",
"hono": "^4.6.16"
@ -6266,7 +6549,7 @@
},
"packages/tui": {
"name": "@mariozechner/pi-tui",
"version": "0.11.6",
"version": "0.12.0",
"license": "MIT",
"dependencies": {
"@types/mime-types": "^2.1.4",
@ -6310,12 +6593,12 @@
},
"packages/web-ui": {
"name": "@mariozechner/pi-web-ui",
"version": "0.11.6",
"version": "0.12.0",
"license": "MIT",
"dependencies": {
"@lmstudio/sdk": "^1.5.0",
"@mariozechner/pi-ai": "^0.11.5",
"@mariozechner/pi-tui": "^0.11.5",
"@mariozechner/pi-ai": "^0.11.6",
"@mariozechner/pi-tui": "^0.11.6",
"docx-preview": "^0.3.7",
"jszip": "^3.10.1",
"lucide": "^0.544.0",
@ -6333,6 +6616,67 @@
"@mariozechner/mini-lit": "^0.2.0",
"lit": "^3.3.1"
}
},
"packages/web-ui/node_modules/@mariozechner/pi-ai": {
"version": "0.11.6",
"resolved": "https://registry.npmjs.org/@mariozechner/pi-ai/-/pi-ai-0.11.6.tgz",
"integrity": "sha512-E96GATRiarbLtvukx69VruA8E2szGkmNbT86SHTFnOg1Nl1Y78hVcYggUFhTTHuuOZznbwG68iBzK6roKybysw==",
"license": "MIT",
"dependencies": {
"@anthropic-ai/sdk": "^0.61.0",
"@google/genai": "^1.30.0",
"@sinclair/typebox": "^0.34.41",
"ajv": "^8.17.1",
"ajv-formats": "^3.0.1",
"chalk": "^5.6.2",
"openai": "5.21.0",
"partial-json": "^0.1.7",
"zod-to-json-schema": "^3.24.6"
},
"engines": {
"node": ">=20.0.0"
}
},
"packages/web-ui/node_modules/@mariozechner/pi-tui": {
"version": "0.11.6",
"resolved": "https://registry.npmjs.org/@mariozechner/pi-tui/-/pi-tui-0.11.6.tgz",
"integrity": "sha512-tiYPbZ3ZlGYDqZk9nZ/pckFGbUfhfc35O/933QxX11ObPOgGFuj92pDFrPACfPX6rYvG909p1CBvZeGS7Szd+w==",
"license": "MIT",
"dependencies": {
"@types/mime-types": "^2.1.4",
"chalk": "^5.5.0",
"marked": "^15.0.12",
"mime-types": "^3.0.1",
"string-width": "^8.1.0"
},
"engines": {
"node": ">=20.0.0"
}
},
"packages/web-ui/node_modules/mime-db": {
"version": "1.54.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
"integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"packages/web-ui/node_modules/mime-types": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz",
"integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==",
"license": "MIT",
"dependencies": {
"mime-db": "^1.54.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
}
}
}