Commit Graph

3849 Commits

Author SHA1 Message Date
Cristina Poncela Cubeiro
b9c19135d9 cleanup 2026-05-04 17:10:44 +02:00
Cristina Poncela Cubeiro
63c61aac6f feat: image models 2026-05-04 17:07:02 +02:00
Cristina Poncela Cubeiro
d9adc536f5 feat: openrouter images 2026-05-04 17:00:58 +02:00
Cristina Poncela Cubeiro
e9b0af0a11 feat: images stream 2026-05-04 16:46:20 +02:00
Cristina Poncela Cubeiro
62d9132648 feat: images registry 2026-05-04 16:43:51 +02:00
Cristina Poncela Cubeiro
e3d066daa0 feat: images api types 2026-05-04 16:39:38 +02:00
Cristina Poncela Cubeiro
cbf3c333ef revert 2026-05-04 15:43:45 +02:00
Cristina Poncela Cubeiro
59a89e0c1c fix: modalities from openrouter 2026-04-29 09:51:57 +02:00
Cristina Poncela Cubeiro
e9414b0500 fix 2026-04-29 09:49:09 +02:00
Cristina Poncela Cubeiro
364ac0f3ab fix: test (openRouterImageGeneration) 2026-04-28 14:40:13 +02:00
Cristina Poncela Cubeiro
c3c10737d8 feat: image content 2026-04-28 13:43:28 +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
github-actions[bot]
d2f8bd6deb chore: approve contributor pidalf 2026-04-25 20:59:54 +00:00
anirudhmarc
5a07d946ef fix(bedrock): check model.name for prompt caching and adaptive thinking (#3527)
supportsPromptCaching, supportsAdaptiveThinking, supportsThinkingSignature,
and the Claude detection in streamSimpleBedrock/buildAdditionalModelRequestFields
all check model.id for Claude model name patterns. Application inference profile
ARNs are opaque and do not contain the model name, so these checks silently fail.

Fix by also checking model.name (user-controlled via models.json or
registerProvider) as a fallback in all affected functions. Added a shared
isAnthropicClaudeModel helper for the common Claude detection pattern.

Fixes #2925

Co-authored-by: Your Name <you@example.com>
2026-04-25 19:58:17 +02:00
Mario Zechner
c19e64a444 fix(coding-agent): refresh title after extension session rename
closes #3686
2026-04-25 17:20:26 +02:00
Mario Zechner
a363b668ac fix(coding-agent): clear tree navigation compaction state
closes #3688
2026-04-25 17:03:09 +02:00
Mario Zechner
3e7ffff184 fix(ai): ignore unknown anthropic sse events
closes #3708
2026-04-25 16:57:03 +02:00