Commit Graph
1628 Commits
Author SHA1 Message Date
Mario Zechner 7fcddc6132 Merge branch 'main' into fix/gemini-3-flash-tool-result-format 2025-12-18 15:06:02 +01:00
theBucky e4277bab19 fix(ai): pass baseUrl to Google GenAI SDK via httpOptions
Previously, when using 'google-generative-ai' API with a custom baseUrl
in models.json, the baseUrl was ignored and requests always went to the
default Google endpoint.

Now the provider correctly passes model.baseUrl to the SDK's
httpOptions.baseUrl, enabling use of custom endpoints or API proxies.

Fixes #216
2025-12-18 22:03:43 +08:00
Mario Zechner e71c3d8d6e Update tsgo, switch to tsc for agent package, as tsgo hangs on Alpine in Docker x86 2025-12-18 15:02:03 +01:00
Mario Zechner 2704ac8ca7 fix(ai): correct Gemini tool result format and improve type safety
- Fix tool result format for Gemini 3 Flash Preview compatibility
  - Use 'output' key for successful results (not 'result')
  - Use 'error' key for error results (not 'isError')
  - Per Google SDK documentation for FunctionResponse.response

- Improve type safety in google.ts provider
  - Add ImageContent import and use proper type guards
  - Replace 'as any' casts with proper typing
  - Import and use Schema type for tool parameters
  - Add proper typing for index deletion in error handler

- Add comprehensive test for Gemini 3 Flash tool calling
  - Tests successful tool call and result handling
  - Tests error tool result handling
  - Verifies fix for issue #213

Fixes #213
2025-12-18 13:43:39 +00:00
Aliou DialloandGitHub 916d0fd68d fix(coding-agent): support symlinked tools and hooks in discovery (#219) 2025-12-18 13:07:30 +01:00
Markus YlisiurunenandGitHub 6fdd429584 Fix Gemini 3 Flash Preview thinking levels (#212)
* use the correct Gemini 3 Flash Preview thinking levels

* fix a build error

* add changelog entry

* regenerate models

* make less assumptions about future models
2025-12-18 13:03:28 +01:00
Mario Zechner 7fe0d601d0 Remove coding-agent section from AGENTS.md 2025-12-18 11:51:27 +00:00
Sergii Kozak d8a28b86f1 Add syntax highlighting to markdown code blocks 2025-12-17 20:15:44 -08:00
Mario Zechner f55fbc4f52 Update coding-agent DEVELOPMENT.md to reflect current codebase
- Fix external dependency name (pi-agent-core -> pi-agent)
- Add missing files: hooks/, custom-tools/, skills.ts, github-copilot.ts
- Update components list with all 18 current components
- Add Key Abstractions sections for hooks, custom tools, skills
- Add 'Adding a New Hook Event' to development guide
- Move config.ts to correct location in directory tree
2025-12-17 22:41:17 +01:00
Mario Zechner c4129699fa Add Unreleased section to CHANGELOG 2025-12-17 22:31:18 +01:00
Mario Zechner 93542615f7 Release v0.23.3 2025-12-17 22:29:46 +01:00
Mario Zechner a3dc8b7e46 Check for compaction before prompt submission, not just after agent turn 2025-12-17 22:25:20 +01:00
Mario Zechner 05501329ff Improve documentation: README settings table, philosophy section, custom-tools intro, rpc hook_error event, hooks import aliases 2025-12-17 22:04:28 +01:00
Mario Zechner eea76250b8 Improve system prompt docs, clean up theme/skills/hooks docs, fix toolResults type
- System prompt: clearer pointers to specific doc files
- theme.md: added thinkingXhigh, bashMode tokens, fixed Theme class methods
- skills.md: rewrote with better framing, examples, and skill repositories
- hooks.md: fixed timeout/error handling docs, added custom tool interception note
- Breaking: turn_end event toolResults changed from AppMessage[] to ToolResultMessage[]
2025-12-17 21:27:28 +01:00
Mario Zechner c1aea4539e Include examples/ folder in binary release archives 2025-12-17 21:27:07 +01:00
Mario Zechner bae9e4ae46 Pin Bun to 1.3.4 for cross-compile compatibility 2025-12-17 18:45:14 +01:00
Mario Zechner 301fd9df86 Fix build-binaries workflow: use latest Bun version 2025-12-17 18:40:52 +01:00
Mario Zechner 973d93ca54 Fix build: pin Bun to 1.2.20 for cross-compilation support 2025-12-17 18:40:19 +01:00
Mario Zechner e39479f7f8 Release v0.23.2
Fixed Claude models via GitHub Copilot re-answering all previous prompts.

fixes #209
2025-12-17 17:56:00 +01:00
Mario Zechner 206f5b1757 Add changelog entry for markdown table fix 2025-12-17 17:14:12 +01:00
Ahmed KamalandGitHub 17ea0b2a78 Fix markdown tables overflowing/wrapping in TUI (width-aware rendering) (#206)
Fix markdown tables overflowing/wrapping in TUI
2025-12-17 17:13:27 +01:00
916101edcf fix(coding-agent): detect image MIME via file-type (#205)
Co-authored-by: Mario Zechner <badlogicgames@gmail.com>
2025-12-17 17:11:56 +01:00
Mario Zechner 226a47821f Release v0.23.1 2025-12-17 16:43:09 +01:00
Mario Zechner cf073c23d8 Add available imports section to custom tools docs 2025-12-17 16:41:55 +01:00
Mario Zechner a63b6ab241 Fix TUI performance regression: add caching to Box, use Text directly for built-in tools 2025-12-17 16:39:23 +01:00
Mario Zechner 11c0230cbb Add [Unreleased] section to changelog 2025-12-17 16:14:36 +01:00
Mario Zechner f55d406370 Release v0.23.0 2025-12-17 16:13:32 +01:00
Mario Zechner 98685149f8 Re-export Type from typebox, update examples to import from pi-coding-agent 2025-12-17 16:10:01 +01:00
Mario Zechner cd323f6bc2 Add .opencode to gitignore 2025-12-17 16:06:53 +01:00
Mario Zechner e32daf0e71 Add file-trigger hook example 2025-12-17 16:06:30 +01:00
Mario Zechner 99877a8398 Custom tools with session lifecycle, examples for hooks and tools
- Custom tools: TypeScript modules that extend pi with new tools
  - Custom TUI rendering via renderCall/renderResult
  - User interaction via pi.ui (select, confirm, input, notify)
  - Session lifecycle via onSession callback for state reconstruction
  - Examples: todo.ts, question.ts, hello.ts

- Hook examples: permission-gate, git-checkpoint, protected-paths

- Session lifecycle centralized in AgentSession
  - Works across all modes (interactive, print, RPC)
  - Unified session event for hooks (replaces session_start/session_switch)

- Box component added to pi-tui

- Examples bundled in npm and binary releases

Fixes #190
2025-12-17 16:03:23 +01:00
Mario Zechner 4d9da4e4f8 Release v0.22.5 2025-12-17 01:22:13 +01:00
Mario Zechner aaef167279 v86.md describing how we could possibly ship a minimal alpine container with mom by default 2025-12-17 01:05:04 +01:00
Mario Zechner 6af0e57db5 Add [Unreleased] section to changelog 2025-12-17 00:40:15 +01:00
Mario Zechner 7e78ef9bb2 Release v0.22.4
- Add --list-models CLI flag for listing/finding models with fuzzy search

fixes #203
2025-12-17 00:39:14 +01:00
Mario Zechner 9aca4ec0aa Fix image limits test to use realistic payload sizes
Previous test used compressed 8k images (0.01MB) which was meaningless.
Now tests with actual large noise images that don't compress.

Realistic payload limits discovered:
- Anthropic: 6 x 3MB = ~18MB total (not 32MB as documented)
- OpenAI: 2 x 15MB = ~30MB total
- Gemini: 10 x 20MB = ~200MB total (very permissive)
- Mistral: 4 x 10MB = ~40MB total
- xAI: 1 x 20MB (strict request size limit)
- Groq: 5 x 5760px images (5 image + pixel limit)
- zAI: 2 x 15MB = ~30MB (50MB request limit)
- OpenRouter: 2 x 5MB = ~10MB total

Also fixed GEMINI_API_KEY env var (was GOOGLE_API_KEY).

Related to #120
2025-12-16 23:48:59 +01:00
Mario Zechner da45a6f95a Update image limits test with comprehensive 8k stress test results
Tested max 8kx8k images per provider:
- Anthropic: 100 (explicit limit, fails at 101)
- OpenAI: 100-200 (100 works, 200 times out)
- Mistral: 8 (explicit limit, fails at 9)
- xAI: 100-150 (100 works, 150 times out)
- Groq: 0 (8k exceeds 33M pixel limit)
- zAI: 400 (context window limited at 500)
- OpenRouter: 40 (context window limited at 50)
- Gemini: untested (no API key in test env)

Key finding: Anthropic's 'many images' rule does NOT cause API errors.
100 x 8kx8k images work fine. Anthropic likely auto-resizes internally.

Related to #120
2025-12-16 23:01:46 +01:00
Mario Zechner e7740b94d9 Add comprehensive image limits test suite for all vision-capable providers
Tests max image count, size, dimensions, and 8k stress test for:
- Anthropic, OpenAI, Gemini, Mistral, OpenRouter, xAI, Groq, zAI

Key finding: Anthropic's 'many images' rule (>20 images = 2000px max)
does NOT cause API errors. 100 x 8k images work fine. Anthropic likely
auto-resizes internally.

Related to #120
2025-12-16 22:21:48 +01:00
Markus YlisiurunenandGitHub 40a2eac8a4 add new getCursor and getLines methods to editor (#201) 2025-12-16 20:13:43 +01:00
Mario Zechner 6388cd61ac Release v0.22.3 2025-12-16 20:06:05 +01:00
Mario Zechner ea1375c567 ai: add image limits test suite
Tests provider-specific image limitations across all supported providers:
- Maximum number of images in context
- Maximum image size (bytes)
- Maximum image dimensions

Discovered limits (Dec 2025):
- Anthropic: 100 images, 5MB per image, 8000px max dimension
- OpenAI: 500 images, >=25MB per image
- Gemini: ~2500 images, >=40MB per image
- Mistral: 8 images, ~15MB per image
- OpenRouter: ~40 images (context limited), ~15MB per image
2025-12-16 20:04:34 +01:00
Mario Zechner 94092ec0a8 Fix editor text clearing during compaction, fixes #179 2025-12-16 15:15:37 +01:00
Mario Zechner 75aaa9b4fa Add tool result streaming
- Add AgentToolUpdateCallback type and optional onUpdate callback to AgentTool.execute()
- Add tool_execution_update event with toolCallId, toolName, args, partialResult
- Normalize tool_execution_end to always use AgentToolResult (no more string fallback)
- Bash tool streams truncated rolling buffer output during execution
- ToolExecutionComponent shows last N lines when collapsed (not first N)
- Interactive mode handles tool_execution_update events
- Update RPC docs and ai/agent READMEs

fixes #44
2025-12-16 14:53:17 +01:00
Mario Zechner be46df3f76 Add changelog entries for X-Initiator header support (#200) 2025-12-16 14:34:56 +01:00
Ahmed KamalandGitHub c7b8f8a7db Add X-Initiator header for GitHub Copilot (#200) 2025-12-16 14:05:22 +01:00
Markus YlisiurunenandGitHub 17b4cfe6aa Fix double new line issues in markdown rendering (#199)
* prevent double blank lines after markdown elements

* prevent double blank lines after markdown elements
2025-12-16 00:25:06 +01:00
Mario Zechner 5994e1eed1 Fix ANSI styles not preserved across newlines in text wrapping
wrapTextWithAnsi() was processing each line independently after splitting
on newlines, losing ANSI state. When styled text contained embedded newlines
(e.g. from markdown paragraphs), subsequent lines would lose their styling.

Fixed by tracking ANSI state across lines and prepending active codes to
lines after the first.

Fixes #197
2025-12-15 23:00:25 +01:00
Mario Zechner 263864cc0b Fix reasoning disabled by default for all providers
Previously, when reasoning was not specified, some providers like Gemini
with 'dynamic thinking' enabled by default would still use thinking.
Now explicitly sets thinkingEnabled: false (Anthropic) and
thinking: { enabled: false } (Google) when reasoning is undefined.

Closes #180
2025-12-15 22:42:08 +01:00
Mario Zechner de55b4a824 Fix RGB to 256-color mapping for non-truecolor terminals 2025-12-15 22:32:23 +01:00
Mario Zechner d5ebe1dc48 Release v0.22.2 2025-12-15 22:09:14 +01:00