Commit graph

2673 commits

Author SHA1 Message Date
Mario Zechner
3830d74d22 fix(coding-agent): export discoverAndLoadExtensions from package
closes #1148
2026-02-01 17:47:01 +01:00
Mario Zechner
bd00d2fbca fix(coding-agent): pi update not updating packages without args
fixes #1151
2026-02-01 17:41:36 +01:00
Mario Zechner
8f7ef85833 fix(ai): pass through cacheRetention in buildBaseOptions
fixes #1154
2026-02-01 17:37:45 +01:00
github-actions[bot]
96dc80bc1f chore: approve contributor michaelpersonal 2026-02-01 16:34:42 +00:00
Mario Zechner
b86fae351a Update Discord link 2026-02-01 17:04:02 +01:00
github-actions[bot]
3c01c3a9ab chore: approve contributor giuseppeg 2026-02-01 12:33:11 +00:00
Aliou Diallo
7feae0d5c2
docs(coding-agent): document extension UI protocol in RPC docs, add examples (#1144) 2026-02-01 13:25:18 +01:00
Sviatoslav Abakumov
4ca7bbe450
Fix tree selector focus behavior (#1142)
* fix(coding-agent): tree selector focuses nearest visible ancestor

When the selected entry is not visible (filtered out by mode change or a
metadata entry like model_change), walk up the parent chain to find the
nearest visible ancestor instead of jumping to the last item.

Fixes selection behavior for:

- Initial selection when currentLeafId is a metadata entry
- Filter switching, e.g. Ctrl+U for user-only mode

* fix(coding-agent): tree selector preserves selection through empty filters

When switching to a filter with no results, e.g. labeled-only with no
labels and back, the cursor would reset to the first message instead of
the original selection.

Track lastSelectedId as a class member and only update it when
filteredNodes is non-empty, preserving the selection across empty filter
results.

* test(coding-agent): add tree selector filter and selection tests

- Test metadata entry handling (model_change, thinking_level_change)
- Test filter switching with parent traversal (default ↔ user-only)
- Test empty filter preservation (labeled-only with no labels)
2026-02-01 13:23:52 +01:00
Mario Zechner
43be54c237 Add [Unreleased] section for next cycle 2026-02-01 09:36:24 +01:00
Mario Zechner
7678b075fb Release v0.50.9 2026-02-01 09:35:42 +01:00
Mario Zechner
55ce7e84ef chore: Fix import order 2026-02-01 09:34:44 +01:00
Mario Zechner
b0e1672da2 docs(coding-agent): add cacheRetention changelog 2026-02-01 09:33:43 +01:00
Mario Zechner
abfd04b5c5 feat(ai): add cacheRetention stream option 2026-02-01 09:32:10 +01:00
Mario Zechner
e9ca0be769 feat(ai): add PI_AI_ANTIGRAVITY_VERSION env var override
Allows users to override the Antigravity User-Agent version when Google
updates their version requirements, avoiding the need to wait for a
package release.

Fixes #1129
2026-02-01 09:32:10 +01:00
scutifer
71d7a14b18
feat(coding-agent): add a spinner extension (#1131)
When the agent is running, we prefix an animated braille spinner to the title to show busy state.
Its cleared when the agent is done
2026-02-01 09:20:58 +01:00
Mario Zechner
aa83170e0f Add [Unreleased] section for next cycle 2026-02-01 02:34:06 +01:00
Mario Zechner
4baa42cb6d Release v0.50.8 2026-02-01 02:33:23 +01:00
Mario Zechner
025b7bec7a fix(coding-agent): add spacer before context output 2026-02-01 02:24:51 +01:00
Mario Zechner
3b8d0a8921 feat(coding-agent): add resources_discover hook 2026-02-01 02:20:35 +01:00
Mario Zechner
6b6030d549 chore: audit changelog entries 2026-02-01 02:20:35 +01:00
github-actions[bot]
4a53f47f91 chore: approve contributor odysseus0 2026-02-01 01:00:31 +00:00
Mario Zechner
39d69f42fd Merge branch 'merge/pr-940' 2026-02-01 01:53:26 +01:00
Mario Zechner
7d632ba1c3 chore: update changelog and docs for qwen extension 2026-02-01 01:52:53 +01:00
4h9fbZ
993c45a059 feat(coding-agent): add Qwen CLI OAuth provider 2026-02-01 01:51:55 +01:00
Mario Zechner
c27168840c test(tui): cover non-qwerty kitty base layout fallback 2026-02-01 01:33:28 +01:00
Ryota
5bb3700717 fix(tui): prevent Kitty protocol base layout key from causing false shortcut matches
With the Kitty keyboard protocol (flag 4), terminals report both the
logical key codepoint and the physical base layout key (PC-101 QWERTY
position). The key matching logic in matchesKittySequence matched
against both unconditionally, which caused a single keypress to match
multiple shortcuts on remapped keyboard layouts.

For example, on a Dvorak layout with xremap, pressing Ctrl+K sends
CSI 107::118;5u (codepoint=107 'k', base layout=118 'v'). The
unconditional base layout match made this also match Ctrl+V, which is
bound to pasteImage. Since CustomEditor checks app-level keybindings
(pasteImage) before editor keybindings (deleteToLineEnd), Ctrl+K was
silently intercepted by the paste image handler instead of deleting
to end of line. The same issue affects symbol keys, as Dvorak also
remaps symbols to different physical positions (e.g., '/' sits where
'[' is on QWERTY).

The fix restricts base layout key matching to cases where the codepoint
is not a recognized Latin letter (a-z) or symbol (/, -, [, ;, etc.).
When the codepoint is already a recognized key, it is authoritative and
the base layout key is ignored. This preserves non-Latin layout support
(Ctrl+К on a Russian layout still matches Ctrl+K via base layout key
107) while preventing false matches from differing physical key
positions on remapped layouts.

Both matchesKittySequence and parseKey are updated with the same logic.
2026-02-01 01:25:00 +01:00
Mario Zechner
6e4508f129 feat(coding-agent): threaded sort mode and compact format for /resume (#1124)
Adds 'Threaded' as a new sort mode (now default) that displays sessions
in a tree structure based on parent-child relationships. Compact one-line
format with message count and age right-aligned for clean title alignment.

Closes #1108
2026-02-01 01:10:58 +01:00
Mario Zechner
2a631a2488 feat(coding-agent): threaded sort mode and compact format for /resume
Adds 'Threaded' as a new sort mode (now default) that displays sessions
in a tree structure based on parent-child relationships. Compact one-line
format with message count and age right-aligned for clean title alignment.

Closes #1108
2026-02-01 01:10:36 +01:00
Mario Zechner
030a61d88c feat: add maxDelayMs setting to cap server-requested retry delays
When a provider (e.g., Google Gemini CLI) requests a retry delay longer
than maxDelayMs (default: 60s), the request fails immediately with an
informative error instead of waiting silently for hours.

The error is then handled by agent-level auto-retry, which shows the
delay to the user and allows aborting with Escape.

- Add maxRetryDelayMs to StreamOptions (packages/ai)
- Add maxRetryDelayMs to AgentOptions (packages/agent)
- Add retry.maxDelayMs to settings (packages/coding-agent)
- Update _isRetryableError to match 'retry delay' errors

fixes #1123
2026-02-01 00:50:41 +01:00
Mario Zechner
1bd68327f3 fix: make pre-commit hook fail on lint warnings, fix template literal warnings
- Add --error-on-warnings to biome check in root and web-ui package.json
- Convert string concatenation to template literals in daxnuts.ts
- Convert string concatenation to template literals in test file

Fixes #1103
2026-02-01 00:25:57 +01:00
Mario Zechner
7eae0a7d30 fix(coding-agent): make setThinkingLevel idempotent
switchSession() was appending spurious thinking_level_change entries
to session log on resume because setThinkingLevel() unconditionally
persisted. Now only persists if the level actually changes.

fixes #1118
2026-02-01 00:14:49 +01:00
Mario Zechner
c9fa28e626 fix: override fast-xml-parser to 5.3.4 to resolve CVE 2026-01-31 23:48:22 +01:00
Petr Baudis
178e1e11c1 feat(coding-agent): compact one-line format for /resume session list
- One line per session instead of multi-line (message + metadata + blank)
- Age shown in compact format (now, 5m, 2h, 3d, 2w, 1mo, 1y)
- Message count on the left side
- Current session highlighted in accent color
- Selected row has background highlight
- Increased maxVisible from 5 to 10 sessions
2026-01-31 23:40:02 +01:00
Mario Zechner
0ece01b51e chore(coding-agent): add dev script for watch mode 2026-01-31 23:24:18 +01:00
Mario Zechner
38ed9e86f8 fix(coding-agent): convert clipboard BMP images to PNG on paste
WSL2/WSLg often provides clipboard images as image/bmp only.
Previously this resulted in invalid PNG files being written.

Now readClipboardImage() converts unsupported formats to PNG
via Photon before returning.

Closes #1109

Based on #1112 by @lightningRalf
2026-01-31 23:24:10 +01:00
Petr Baudis
42d54e0d1c feat(coding-agent): add threaded sort mode to /resume with tree display
Adds 'Threaded' as a new sort mode (now default) that displays sessions
in a tree structure based on parent-child relationships. The tree is
sorted by root session's modified date. Other sort modes (Recent, Fuzzy)
continue to show flat lists.

Sort mode cycles: Threaded -> Recent -> Fuzzy -> Threaded
2026-01-31 23:17:05 +01:00
Juan Ibiapina
6f2d066342 feat(coding-agent): add keybinding actions for /tree, /fork, and /new
Add newSession, tree, and fork as configurable keybinding actions.
All unbound by default. Users can configure in keybindings.json.

Closes #1088
2026-01-31 23:09:22 +01:00
Sviatoslav Abakumov
d075291b08
feat(tui): add sticky column for vertical cursor navigation (#1120)
When moving up/down through lines of varying lengths, the editor now
remembers the original column position and restores it when reaching a
line long enough to accommodate it.

Example: cursor at column 10, move up to a shorter line (cursor clamps
to end), move up again to a longer line - cursor returns to column 10.

Implementation:

- Add preferredVisualCol instance property (nullable)
- Set it when moving to a shorter line during vertical navigation
- Clear it when arriving at a line that fits the preferred column
- Clear it on any horizontal movement or editing via setCursorCol()
- Detect line rewrap by checking if cursor is in middle of line
- When pressing right at end of prompt, set preferredVisualCol so
  subsequent up/down navigation uses that column position
2026-01-31 22:52:47 +01:00
github-actions[bot]
675136f009 chore: approve contributor pasky 2026-01-31 19:08:17 +00:00
github-actions[bot]
7a5052619f chore: approve contributor liby 2026-01-31 19:06:20 +00:00
Mario Zechner
f0eda2dfda Add [Unreleased] section for next cycle 2026-01-31 01:09:12 +01:00
Mario Zechner
c50a0b8b6d Release v0.50.7 2026-01-31 01:08:29 +01:00
Mario Zechner
ed80ab2129 fix(coding-agent): multi-file extensions in packages now discovered correctly
Package resolution now uses the same discovery logic as local extensions:
only index.ts (or manifest-declared entries) are loaded from subdirectories,
not helper modules.

fixes #1102
2026-01-31 01:07:33 +01:00
Mario Zechner
022b20f364 Add [Unreleased] section for next cycle 2026-01-30 22:03:55 +01:00
Mario Zechner
f8d43ce02c Release v0.50.6 2026-01-30 22:03:14 +01:00
Mario Zechner
d91cdc5f0c docs: add missing changelog entries for v0.50.5..HEAD
- tui: add #1095 content shrink fix (by @marckrenn)
- tui: add isImageLine perf optimization
- coding-agent: cross-package duplication for #1095, #1099
2026-01-30 22:02:17 +01:00
Marc Krenn
39c898d7c9
fix(tui): auto-clear empty rows when content shrinks (#1095)
- Add height change detection (analogous to existing width detection)
- Auto-detect when content shrinks below maxLinesRendered and trigger
  full re-render to clear leftover empty rows
- Only triggers when no overlays are active (overlays need padding)

Fixes empty rows appearing below footer when:
- Closing /tree or other selectors
- Clearing multi-line editor content
- Any component shrinking

Also adds regression tests for resize handling and content shrinkage.
2026-01-30 20:45:34 +01:00
github-actions[bot]
bb0c2bf77a chore: approve contributor juanibiapina 2026-01-30 17:20:29 +00:00
Mario Zechner
836e852af1 Fixes #1099 2026-01-30 18:19:16 +01:00
Mario Zechner
99281e5913 feat(coding-agent): add ctx.getSystemPrompt() to extension context
Adds a method to access the effective system prompt (after any per-turn
extension modifications) from the extension context.

Implementation:
- Add systemPrompt getter to AgentSession reading from agent.state.systemPrompt
- Wire getSystemPrompt through ExtensionContextActions to ExtensionRunner
- Add getSystemPrompt to interactive-mode's shortcut context
- Update docs with ctx.getSystemPrompt() section
- Add system-prompt-header.ts example
- Add example to docs reference table

Closes #1098
2026-01-30 17:44:25 +01:00