Commit graph

1845 commits

Author SHA1 Message Date
Mario Zechner
66cbcee347 docs(coding-agent): simplify --no-tools description 2026-01-08 18:52:33 +01:00
Mario Zechner
4a6c32c142 docs(coding-agent): clarify tool override doesn't require --no-tools 2026-01-08 18:52:33 +01:00
Mario Zechner
e3dd4f21d1 feat(coding-agent): add tool override support via extensions
- Add setActiveTools() to ExtensionAPI for dynamic tool management
- Extensions can now override, wrap, or disable built-in tools
- Add tool-override.ts example demonstrating the pattern
- Update documentation for tool override capabilities
2026-01-08 18:52:33 +01:00
Mario Zechner
7a2c19cdf0
Merge pull request #568 from tmustier/gemini-raw-stream
fix: restore ESC interrupt after auto-retry and correct retry abort messaging
2026-01-08 18:50:47 +01:00
Mario Zechner
2d4fa997bc
Merge pull request #567 from ferologics/feat/bun-update-notification
fix(coding-agent): show release URL for bun binary updates
2026-01-08 14:51:29 +01:00
ferologics
9073111cb0 fix(coding-agent): show release URL for bun binary updates
For bun binary installs, show 'Download from: <releases URL>' instead of 'npm install -g' since npm doesn't apply to standalone binaries.
2026-01-08 14:50:50 +01:00
Thomas Mustier
01f15fcbd2 fix: show retry attempt count when aborting during retry
When aborting a retry attempt, surface the retry-aware abort message
in the assistant output and tool results instead of a generic "Aborted".

- Set errorMessage for aborted streaming messages
- Render abort message without forcing a leading newline when no content
2026-01-08 12:36:46 +00:00
Thomas Mustier
a65da1c14b fix: ESC key not interrupting during Working... state
Three related fixes:

1. google-gemini-cli: Handle abort signal in stream reading loop
   - Add abort event listener to cancel reader immediately when signal fires
   - Fix AbortError detection in retry catch block (fetch throws AbortError,
     not our custom message)
   - Swallow reader.cancel() rejection to avoid unhandled promise

2. agent-session: Fix retry attempt counter showing 0 on cancel
   - abortRetry() was resetting _retryAttempt before the catch block could
     read it for the error message

3. interactive-mode: Restore main escape handler on agent_start
   - When auto-retry starts, onEscape is replaced with retry-specific handler
   - auto_retry_end (which restores it) fires on turn_end, after streaming begins
   - Now restore immediately on agent_start if retry handler is still active

Amended: suppress reader.cancel() rejection on abort.
2026-01-08 12:35:34 +00:00
Mario Zechner
7f38dbfba9
Merge pull request #557 from cv/feat/no-tools-flag
feat(coding-agent): add --no-tools flag to disable built-in tools
2026-01-08 12:52:42 +01:00
Mario Zechner
6c3f82a696 fix(ci): update clipboard bindings to @mariozechner/clipboard fork
fixes #556
2026-01-08 12:21:26 +01:00
Carlos Villela
8f5523ed56
feat(coding-agent): add --no-tools flag to disable built-in tools
Add --no-tools flag that allows starting pi without any built-in tools,
enabling extension-only tool setups (e.g., pi-ssh-remote).

- Add --no-tools flag to CLI args parsing
- Handle --tools '' (empty string) as equivalent to no tools
- Fix system prompt to not show READ-ONLY mode when no tools (extensions may provide write capabilities)
- Add tests for new flag and system prompt behavior

fixes #555
2026-01-07 23:10:58 -08:00
Mario Zechner
cfa63c255d Add [Unreleased] section for next cycle 2026-01-08 04:53:51 +01:00
Mario Zechner
4b084d0f9d Release v0.38.0 2026-01-08 04:52:55 +01:00
Mario Zechner
bf9a415541 Switch to @mariozechner/clipboard fork with musl support
fixes #533
2026-01-08 04:50:37 +01:00
Mario Zechner
b1fb910625 refactor(coding-agent): unify tool and event handler context creation
Tools now use ExtensionRunner.createContext() instead of a separate
inline context factory. This ensures tools and event handlers share
the same context, fixing ctx.shutdown() and other context methods.

- Made ExtensionRunner.createContext() public
- Changed wrapRegisteredTools to accept ExtensionRunner instead of getContext callback
- Create ExtensionRunner when SDK custom tools are present (not just extensions)
- Removed redundant inline context factory from sdk.ts
2026-01-08 03:45:39 +01:00
Mario Zechner
cf0466d96c fix(coding-agent): make ctx.shutdown() work from extension tools
The tool execution context was created with a no-op shutdown handler.
Now it delegates to ExtensionRunner.shutdown() which uses the handler
set by the mode via initialize().
2026-01-08 03:40:09 +01:00
Mario Zechner
baf6fe4b39 fix(coding-agent): add PR attribution to ctx.shutdown() changelog, fix example comments 2026-01-08 03:31:55 +01:00
Kao Félix
6845c4b85e
feat(coding-agent): make ctx.shutdown() available for extensions (#542) 2026-01-08 03:30:48 +01:00
Mario Zechner
7f3fa417c4 feat(coding-agent): add --no-extensions flag to disable extension discovery
Adds --no-extensions CLI flag that skips automatic extension discovery
while still allowing explicit -e paths. Three modes now available:

1. Default: auto-discover + any -e additions
2. --no-extensions: no extensions at all
3. --no-extensions -e foo.js: only load explicit extensions

Useful for debugging or running subagent instances without auto-discovered
extensions.

closes #524
2026-01-08 03:22:38 +01:00
Mario Zechner
0b680c67fb docs(coding-agent): add overflow changelog entry 2026-01-08 03:19:00 +01:00
Mario Zechner
6bcce1914a Merge branch 'codex-error-details-clean' 2026-01-08 03:17:33 +01:00
Mario Zechner
946efe4b45 fix(ai): detect context_length_exceeded overflow 2026-01-08 03:16:59 +01:00
Mario Zechner
b1f32b9c8d fix(coding-agent): update test expectation for extension loader error message 2026-01-08 03:11:10 +01:00
Mario Zechner
f97dcbf92f Merge branch 'feat/custom-thinking-budgets'
feat: add thinkingBudgets setting to customize token budgets per thinking level

Allows users to override default token budgets for minimal/low/medium/high
thinking levels via settings.json. Useful for token-based providers.

closes #529

Co-authored-by: Melih Mucuk <melih@monkeysteam.com>
2026-01-08 03:02:08 +01:00
Mario Zechner
c5a930fbd2 docs(coding-agent): add cross-package changelog entries
- OpenAI Codex model aliases removed (breaking, from @ghoulr #536)
- OpenAI Codex context window fix (from @ghoulr #536)
- SSH input batching fix (#538)
2026-01-08 02:56:55 +01:00
Mario Zechner
c8460dec7e docs(coding-agent): restore SDK breaking changes to changelog
ExtensionRunner and LoadExtensionsResult API changes affect SDK users.
2026-01-08 02:55:05 +01:00
Mario Zechner
e671f63c5d docs(coding-agent): add missing changelog entries for SDK changes
- LoadedExtension -> Extension type rename (breaking)
- Run mode exports for custom SDK usage
2026-01-08 02:49:14 +01:00
Mario Zechner
8045b3c7ec docs(coding-agent): clean up changelog, add missing contributor entries
- Remove verbose internal type export noise
- Add missing entries for #513 (@austinm911), #535 (@mitsuhiko)
- Add PR links to existing entries #522, #527, #540
2026-01-08 02:38:59 +01:00
Mario Zechner
696e1b51d3 refactor(coding-agent): revert preloadedExtensionsResult back to preloadedExtensions
The rename was unnecessary.
2026-01-08 02:35:37 +01:00
Mario Zechner
6f726a2178 feat(coding-agent): add PI_SKIP_VERSION_CHECK env variable
Skip new version check at startup when set. Useful for Nix or other
package manager installs where npm install is not used.

Also documents PI_CODING_AGENT_DIR and other environment variables
in the README.

closes #549

Co-authored-by: Aos Dabbagh <25783780+aos@users.noreply.github.com>
2026-01-08 02:29:51 +01:00
Mario Zechner
e483521075 feat(coding-agent): export run mode utilities with options interfaces
- Add PrintModeOptions interface, update runPrintMode signature
- Export InteractiveMode, InteractiveModeOptions, runPrintMode, PrintModeOptions, runRpcMode from main package
- Document run modes in docs/sdk.md with usage examples
- Update CHANGELOG
2026-01-08 01:53:24 +01:00
Mario Zechner
5d39074a35 refactor(coding-agent): simplify InteractiveMode API
- Replace 11-param runInteractiveMode with InteractiveModeOptions
- Add InteractiveMode.run() that handles init, warnings, prompts, and loop
- Move version check, changelog loading, fdPath discovery inside InteractiveMode
- Detect resumed sessions via session.state.messages.length
- Export InteractiveModeOptions from modes/index.ts
2026-01-08 01:38:12 +01:00
Mario Zechner
cb3ac0ba9e refactor(coding-agent): simplify extension runtime architecture
- Replace per-extension closures with shared ExtensionRuntime
- Split context actions: ExtensionContextActions (required) + ExtensionCommandContextActions (optional)
- Rename LoadedExtension to Extension, remove setter methods
- Change runner.initialize() from options object to positional params
- Derive hasUI from uiContext presence (no separate param)
- Add warning when extensions override built-in tools
- RPC and print modes now provide full command context actions

BREAKING CHANGE: Extension system types and initialization API changed.
See CHANGELOG.md for migration details.
2026-01-07 23:50:18 +01:00
Thomas Mustier
6052453f4f fix(ai): improve codex stream error details 2026-01-07 22:44:22 +00:00
Melih Mucuk
d311978dfd Merge branch 'main' into feat/custom-thinking-budgets 2026-01-08 00:39:11 +03:00
Mario Zechner
faa26ffbf9 Merge PR #536: align openai-codex models list and context window size to codex defaults
closes #536
2026-01-07 20:39:55 +01:00
Mario Zechner
39fa25eb67 fix(ai): clean up openai-codex models and token limits
- Remove model aliases (gpt-5, gpt-5-mini, gpt-5-nano, codex-mini-latest, gpt-5-codex, gpt-5.1-codex, gpt-5.1-chat-latest)
- Fix context window from 400k to 272k tokens to match Codex CLI defaults
- Keep maxTokens at 128k (original value)
- Simplify reasoning effort clamping

closes #536
2026-01-07 20:39:46 +01:00
Mario Zechner
8bf2b975a5 docs: add changelog citation format check to PR review prompt 2026-01-07 20:20:48 +01:00
Fero
7042a5f61d
docs: add changelog entry for settings preservation fix (#527) (#541) 2026-01-07 18:15:12 +01:00
Fero
cbd3a8cb87
fix: use defaultThinkingLevel from settings when enabledModels lacks explicit suffix (#540)
When enabledModels is configured without thinking level suffixes (e.g.,
'claude-opus-4-5' instead of 'claude-opus-4-5:high'), the scoped model's
default 'off' thinking level was overriding defaultThinkingLevel from
settings.

Now thinkingLevel in ScopedModel is optional (undefined means 'not
explicitly specified'). When passing to SDK, undefined values are filled
with defaultThinkingLevel from settings.
2026-01-07 18:11:03 +01:00
Mario Zechner
f3b7b0b179 fix(tui): handle batched input over SSH with StdinBuffer
Adds StdinBuffer class (adapted from OpenTUI, MIT license) to split
batched stdin into individual sequences before they reach components.

This fixes key presses being dropped when batched with release events,
which commonly occurs over SSH due to network buffering.

- Each handleInput() call now receives a single event
- matchesKey() and isKeyRelease() work correctly without batching awareness
- Properly buffers incomplete escape sequences across chunks
- Handles bracketed paste mode

Addresses #538
2026-01-07 17:50:06 +01:00
Armin Ronacher
615ed0ae2e
Fix compaction UX oddities when model switching (#535) 2026-01-07 16:50:18 +01:00
Mario Zechner
09471ebc7d feat(coding-agent): add ctx.ui.setEditorComponent() extension API
- Add setEditorComponent() to ctx.ui for custom editor components
- Add CustomEditor base class for extensions (handles app keybindings)
- Add keybindings parameter to ctx.ui.custom() factory (breaking change)
- Add modal-editor.ts example (vim-like modes)
- Add rainbow-editor.ts example (animated text highlighting)
- Update docs: extensions.md, tui.md Pattern 7
- Clean up terminal on TUI render errors
2026-01-07 16:11:49 +01:00
Zhou Rui
d893ba7f20
fix(ai): clean up openai-codex models and token limits 2026-01-07 23:09:20 +08:00
Melih Mucuk
acec56c6b5 feat: add customizable thinking budgets for token-based providers
Fixes #521
2026-01-07 15:17:18 +03:00
Melih Mucuk
0f27eae77e feat: add thinkingBudgets option to customize token budgets 2026-01-07 15:13:26 +03:00
Carlos Villela
893e00579d
Merge remote-tracking branch 'origin/main' into feat/no-extensions-flag 2026-01-07 03:20:09 -08:00
Mario Zechner
10e651f99b
Merge pull request #513 from austinm911/fix/async-extension-factories
feat(extensions): support async extension factory functions
2026-01-07 11:48:33 +01:00
Mario Zechner
9dfe5bf895
Merge pull request #527 from ferologics/fix/preserve-settings-on-save
fix: preserve externally-added settings when saving
2026-01-07 11:44:14 +01:00
ferologics
e0dbdc56d6 fix: preserve externally-added settings when saving
When a user edits settings.json while pi is running (e.g., adding
enabledModels), those settings would be lost when pi saved other
changes (e.g., changing thinking level via Shift+Tab).

The fix re-reads the file before saving and merges the current file
contents with in-memory changes, so external edits are preserved.

Adds test coverage for SettingsManager.
2026-01-07 11:31:14 +01:00