Commit Graph

3854 Commits

Author SHA1 Message Date
Mario Zechner
84b3aa5efc Updated model defs 2026-04-29 22:58:56 +02:00
Mario Zechner
bc668826ed fix(tui): handle Thai Sara Am width
closes #3904
2026-04-29 22:58:19 +02:00
Mario Zechner
ae81deb4c3 fix(ai): correct DeepSeek V4 pricing metadata
closes #3910
2026-04-29 22:58:19 +02:00
github-actions[bot]
43848e74ff chore: approve contributor Phoen1xCode 2026-04-29 20:54:27 +00:00
Mario Zechner
c84cfc77e6 fix(coding-agent): update sandbox lodash lockfile
closes #3901
2026-04-29 22:52:01 +02:00
Mario Zechner
d935a0f4f8 Closes #3900 2026-04-29 22:44:02 +02:00
Mario Zechner
fc3cbedc6c fix(ai): track DeepSeek prompt cache hits
closes #3880
2026-04-29 16:37:39 +02:00
Mario Zechner
fe1381389d Add [Unreleased] section for next cycle 2026-04-28 19:34:40 +02:00
Mario Zechner
6b48e4ac6b Release v0.70.6 2026-04-28 19:33:29 +02:00
Mario Zechner
8732e28a37 docs: audit unreleased changelogs 2026-04-28 19:32:15 +02:00
Armin Ronacher
3edb8b5cb7 fix(agent): support fdfind as fd fallback 2026-04-28 17:52:14 +02:00
Armin Ronacher
c745efc0d0 feat: Update check against pi.dev (#3877) 2026-04-28 12:48:27 +02:00
Armin Ronacher
4166cfa921 docs(coding-agent): reorganize session docs 2026-04-28 12:06:21 +02:00
Armin Ronacher
f5477a4ff3 docs(coding-agent): add quickstart guide 2026-04-28 12:06:21 +02:00
Justin Barnett
57787b6557 fix(coding-agent): escape exported session metadata (#3883) 2026-04-28 11:46:42 +02:00
Armin Ronacher
ed4bc73080 fix(ai): normalize Bedrock model names for profiles 2026-04-28 11:23:31 +02:00
Armin Ronacher
9848b3145a fix(coding-agent): fix Windows self-update
Fixes #3857
2026-04-28 10:03:00 +02:00
Yves Jutard
946bee1946 doc(README): update "quick start" (#3740) 2026-04-28 08:48:21 +02:00
George Hilliard
c241c6d6d0 fix(coding-agent): use alternate logic to find Bun's node_modules (#3861)
When `"npmCommand": ["bun"]` is configured in settings.json, pi fails to
start because it invokes `bun root -g`, which doesn't exist:

    error: Failed to run bun root -g: error: Script not found "root"

Add a check for the Bun runtime using the logic already used elsewhere,
and build the relative path starting from Bun's bin directory.
2026-04-28 08:28:37 +02:00
Mario Zechner
fbb5eed191 fix: honor telemetry for Cloudflare attribution headers 2026-04-27 23:49:14 +02:00
MC
d6e08b3da0 feat(ai): add Cloudflare Workers AI as a provider (#3851)
* feat(ai): add Cloudflare Workers AI as a provider

Cloudflare Workers AI hosts open-weight LLMs (Kimi K2.6, GPT-OSS,
GLM-4.7, Llama 4, Gemma 4, Nemotron 3) on Cloudflare's GPU network with
an OpenAI-compatible endpoint. Reuses the openai-completions API
protocol; the per-account URL contains a {CLOUDFLARE_ACCOUNT_ID}
placeholder resolved at request time by a small helper.

Pi automatically sets x-session-affinity for prefix caching:
https://developers.cloudflare.com/workers-ai/features/prompt-caching/

Auth: CLOUDFLARE_API_KEY (matches pi's *_API_KEY convention) +
CLOUDFLARE_ACCOUNT_ID. The User-Agent identifies traffic as
'pi-coding-agent' in Cloudflare analytics.

Verified end-to-end against a real Cloudflare account: 17 e2e tests
pass across stream/empty/tokens/unicode/tool-call-without-result/
total-tokens against @cf/moonshotai/kimi-k2.6.

Cloudflare AI Gateway is a separate, larger change (it requires routing
through provider-specific subpaths with the matching API protocol per
upstream) and will land in a follow-up PR.

* refactor(ai): move Cloudflare User-Agent and session-affinity flag to per-model metadata

Instead of conditionally setting them in openai-completions.ts based on
provider detection, declare them as model-level fields in the catalog
(headers + compat). This is consistent with how the github-copilot and
kimi-coding entries already declare their static headers.

  packages/ai/scripts/generate-models.ts: emit headers and compat fields
  on each cloudflare-workers-ai entry (CLOUDFLARE_STATIC_HEADERS).
  packages/ai/src/providers/openai-completions.ts: drop the
  isCloudflareProvider conditional that injected User-Agent and the
  isCloudflareWorkersAI override of sendSessionAffinityHeaders.
  packages/ai/src/models.generated.ts: re-spliced 8 cloudflare-workers-ai
  entries with headers + compat.

Behavior is unchanged - verified via fetch interceptor that User-Agent
and x-session-affinity / session_id / x-client-request-id are still sent
on outbound requests. 5/5 e2e tests pass.
2026-04-27 23:41:54 +02:00
github-actions[bot]
31b48dec23 chore: approve contributor mchenco 2026-04-27 21:23:54 +00:00
Justin Barnett
7617c1ad92 fix(coding-agent): escape exported image data (#3819)
Fixes #3811
2026-04-27 23:22:06 +02:00
Aliou Diallo
13610d3893 fix(coding-agent): show item count instead of line count in config scroll indicator (#3820) 2026-04-27 23:21:32 +02:00
Mario Zechner
084aa2b54d Add [Unreleased] section for next cycle 2026-04-27 21:51:29 +02:00
Mario Zechner
3e40429b09 Release v0.70.5 2026-04-27 21:50:31 +02:00
Mario Zechner
01e2536879 fix(coding-agent): prevent wrapped padding in HTML export 2026-04-27 21:49:46 +02:00
Mario Zechner
2dd6399b71 Add [Unreleased] section for next cycle 2026-04-27 21:45:48 +02:00
Mario Zechner
0ec122f5da Release v0.70.4 2026-04-27 21:44:48 +02:00
Mario Zechner
2c08775ee7 fix(coding-agent): fix packaged session selector import 2026-04-27 21:44:00 +02:00
Mario Zechner
bd55c7a728 Add [Unreleased] section for next cycle 2026-04-27 21:29:40 +02:00
Mario Zechner
65fc803671 fix(ai): refresh generated model catalog for release 2026-04-27 21:28:21 +02:00
Mario Zechner
24321b47c9 Release v0.70.3 2026-04-27 21:27:16 +02:00
Mario Zechner
69206f5390 chore: audit unreleased changelogs 2026-04-27 21:25:57 +02:00
Mario Zechner
b8238a77a5 fix(coding-agent): tighten HTML export tool spacing 2026-04-27 21:18:34 +02:00
Mario Zechner
bdb416cbc0 fix(tui): deduplicate kitty printable input
closes #3780
2026-04-27 21:02:40 +02:00
Mario Zechner
27c0c2ec13 chore(ai): format bedrock thinking payload test 2026-04-27 21:02:11 +02:00
Mario Zechner
ea90a6783d fix(coding-agent): disable undici body/headers idle timeouts on global dispatcher
Long local-LLM SSE streams (e.g. vLLM buffering large tool calls) exceeded
undici's default 300s bodyTimeout and aborted with UND_ERR_BODY_TIMEOUT.
retry.provider.timeoutMs cannot lift this cap because it controls the
provider SDK's AbortController deadline, not undici's per-socket idle timer.

Pass { bodyTimeout: 0, headersTimeout: 0 } to EnvHttpProxyAgent. Provider
SDKs still enforce their own timeouts via retry.provider.timeoutMs.

closes #3715
2026-04-27 20:42:37 +02:00
github-actions[bot]
61fa49dd97 chore: approve contributor LooSik 2026-04-27 18:42:26 +00:00
Mario Zechner
aefb0fedfe feat(coding-agent): add warnings.anthropicExtraUsage opt-out
closes #3808
2026-04-27 20:36:00 +02:00
Mario Zechner
e4f847ff68 fix(coding-agent): close bash executor temp streams
closes #3786
2026-04-27 20:36:00 +02:00
github-actions[bot]
a0d4087037 chore: approve contributor cristinaponcela 2026-04-27 18:12:11 +00:00
marcbloech
9dcde1e3fa add cognitive services implementation (#3799) 2026-04-27 18:38:03 +02:00
mdsjip
5b8deef2f9 fix(coding-agent,ai): fallback to /proc/self/environ in Bun sandbox (#3801)
Bun compiled binaries have an empty process.env when running inside
sandbox environments (e.g. nono on Linux/macOS). This broke API key
detection and model discovery because all process.env.* lookups returned
undefined.

- Add restoreSandboxEnv() helper that reads /proc/self/environ when Bun
  is detected and process.env is empty, populating process.env before
  any other code runs (coding-agent/src/bun/cli.ts entry point)
- Add getProcEnv() fallback in env-api-keys.ts for direct @mariozechner/pi-ai
  consumers that may not go through the coding-agent entry point
- Add unit tests for restoreSandboxEnv
2026-04-27 18:36:53 +02:00
mdsjip
cbe421f877 fix(coding-agent): work around Bun empty process.env inside sandbox (#3807)
Bun bug oven-sh/bun#27802 causes process.env to be empty when running inside a Linux sandbox (Landlock/seccomp).
This breaks npm resolution because PATH is missing, crashing pi on startup with:

  Failed to run npm root -g: Executable not found in $PATH: "npm"

Add getSandboxEnv() to read /proc/self/environ as a fallback on Linux when process.env has zero keys.
Pass this env to all spawn calls in package-manager.ts.
Also fix runCommandSync error handling: check result.error in addition to result.status, and include result.error?.message in the error text so spawn failures (e.g. ENOENT) produce useful diagnostics instead of "null".

Fixes #3806
2026-04-27 18:34:20 +02:00
Aliou Diallo
10425abb87 fix(coding-agent): dedupe symlinked resources (#3818)
* fix(coding-agent): dedupe symlinked resources

Fixes #3767

* refactor(coding-agent): extract canonicalizePath util for symlink resolution
2026-04-27 18:33:10 +02:00
github-actions[bot]
6a10c17219 chore: approve contributor justinpbarnett 2026-04-27 16:27:32 +00:00
github-actions[bot]
dd3de4b49b chore: approve contributor thirtythreeforty 2026-04-27 16:25:42 +00:00
github-actions[bot]
2a7e82d3ef chore: approve contributor injaneity 2026-04-27 08:53:06 +00:00
pidalf
05f79b0851 docs: explain issue triage policy (#3725)
* docs: explain issue triage policy

* docs: clarify issue triage wording
2026-04-25 23:02:17 +02:00