Commit graph

2697 commits

Author SHA1 Message Date
Mario Zechner
5d6a7d6c34 Better skill dir resolution, closes #1171 2026-02-02 00:33:51 +01:00
Mario Zechner
0a26db53ef fix(coding-agent): align ToolDefinition.execute signature with AgentTool
BREAKING CHANGE: ToolDefinition.execute parameter order changed from
(id, params, onUpdate, ctx, signal) to (id, params, signal, onUpdate, ctx).

This aligns with AgentTool.execute so wrapping built-in tools no longer
requires parameter reordering. Update extensions by swapping signal and
onUpdate parameters.
2026-02-02 00:29:47 +01:00
Mario Zechner
287a0b606d fix(coding-agent): guard clipboard native load 2026-02-02 00:23:12 +01:00
Mario Zechner
ad8026f821 docs(coding-agent): add Termux setup guide and changelog audit
- Add comprehensive Termux (Android) setup documentation
- Add Termux platform detection in tools-manager for fd/rg
- Add New Features entries for Android/Termux, bash spawn hook, Linux ARM64 musl
- Add missing changelog entry for clipboard dependency update
2026-02-02 00:09:17 +01:00
Aliou Diallo
fe1d0ae7f3
fix(coding-agent): preserve editor content during tree navigation summarization (#1169)
Do not overwrite editor text with the rewound user message after
navigateTree completes if the user has already typed something during
the summarization wait. Applies to both the /tree selector and the
extension-driven navigateTree handler.

docs: update changelog for PR #1169
2026-02-01 23:30:50 +01:00
Mario Zechner
86b43c8eac feat(coding-agent): add bash spawn hook 2026-02-01 23:17:51 +01:00
Mario Zechner
25fa1fafde docs(coding-agent): add Android/Termux changelog entry 2026-02-01 22:59:39 +01:00
Mario Zechner
cb850676e7 feat(coding-agent): add Android/Termux support
- Make @mariozechner/clipboard an optional dependency
- Lazy-load clipboard module with graceful fallback
- Add Termux clipboard support via termux-clipboard-set
- Skip image clipboard on Termux (not supported)

fixes #1164
2026-02-01 22:59:11 +01:00
Aliou Diallo
bc3fda518d fix(coding-agent): only update extension in scope it's in
update(source) unconditionally called updateSourceForScope for both
user and project scopes, creating a local install even when the source
was only registered globally. Unify into a single code path that
iterates settings per scope, filtering by identity when a source is
provided.
2026-02-01 22:43:11 +01:00
Aliou Diallo
7f78c383c9 test(coding-agent): fix git-update tests to use setPackages
Tests used setExtensionPaths but update() iterates packages, not
extensions. All 5 non-pinned tests were silently passing as no-ops.

Also add regression test for scope-aware update behavior.
2026-02-01 22:42:58 +01:00
Mario Zechner
cafe12b79e docs(coding-agent): add missing changelog entries and New Features section
- Add New Features section highlighting PI_PACKAGE_DIR, named session filter,
  typed tool call events, and Extension UI Protocol
- Add missing fix: tree selector focus behavior (#1142)
- Cross-package: cacheRetention passthrough fix (#1154)
- Cross-package: OAuth proxy support fix (#1132)
2026-02-01 22:26:03 +01:00
Mario Zechner
b10a1743f9
Fix Discord link 2026-02-01 22:25:07 +01:00
Mario Zechner
ce607fc343 feat(coding-agent): type ToolCallEvent.input per tool (#1147) 2026-02-01 19:13:55 +01:00
G
a8a0f4b9fb feat(coding-agent): type ToolCallEvent.input per tool
Matches ToolResultEvent pattern with typed inputs via discriminated union.

- Export *ToolInput types from tool schemas
- Add *ToolCallEvent interfaces for each built-in tool
- Add isToolCallEventType() guard with overloads for built-ins

Direct narrowing (event.toolName === "bash") doesn't work due to
CustomToolCallEvent.toolName: string overlapping with literals.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 19:13:52 +01:00
Mario Zechner
469fb5d27c fix(ai): OAuth login/refresh now respects HTTP proxy env vars
Extracted HTTP proxy setup to shared module and imported it from both
stream.ts and oauth/index.ts. This ensures fetch() calls during OAuth
flows (token exchange, refresh, project discovery) go through the proxy.

fixes #1132
2026-02-01 19:08:13 +01:00
Mario Zechner
73839f876e feat(coding-agent): add named-only filter toggle to /resume picker (#1128)
Adds Ctrl+N toggle to filter sessions by named-only vs all in the /resume picker.

- Add NameFilter type and filtering logic to session-selector-search.ts
- Add toggleSessionNamedFilter app keybinding (default: ctrl+n)
- Show Name: All/Named state in header
- Empty state mentions toggle keybinding as escape hatch
- Export hasSessionName() to avoid duplication

Co-authored-by: warren <warren.winter@gmail.com>
2026-02-01 19:03:38 +01:00
Uria Franko
507639c760
chore(agent): rename package references from pi-agent to pi-agent-core (#1149)
Update all documentation and changelog references to use the new
package name @mariozechner/pi-agent-core.

https://claude.ai/code/session_019KyWMa1gGypeHxM4N3eu44

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-01 18:35:06 +01:00
Daniel M. Drucker, Ph.D.
5893cd092c
openclaw renaming (#1145) 2026-02-01 18:32:44 +01:00
Mario Zechner
47308d3f4f Update @mariozechner/clipboard to 0.3.2 (adds linux-arm64-musl support) 2026-02-01 18:23:23 +01:00
Mario Zechner
3c687b427e fix(skills): add path resolution guidance to skills preamble
Models were resolving relative paths in skill files from cwd instead of
the skill directory. Added explicit instruction that relative paths are
resolved from the skill directory (parent of the location path).

Fixes #1136
2026-02-01 18:06:13 +01:00
Mario Zechner
67dbe7c6b7 docs(coding-agent): add PI_PACKAGE_DIR to changelog and documentation
Adds changelog entry, README env var table entry, and CLI help text for
the PI_PACKAGE_DIR environment variable added in #1153.
2026-02-01 18:03:42 +01:00
George Zhang
0e49235af0
feat(config): add PI_PACKAGE_DIR env var to override package path (#1153) 2026-02-01 17:52:44 +01:00
Mario Zechner
8306b3bc20 docs(coding-agent): improve models.md with minimal example and defaults
- Add minimal example showing only required fields for local models
- Rename 'Basic Example' to 'Full Example' showing all fields
- Add 'Default' column to model configuration table
- Clarify that apiKey is required but ignored by Ollama
2026-02-01 17:51:24 +01:00
Mario Zechner
c8b8f043a7 fix(coding-agent): make models.json model fields optional with defaults
Model definitions now only require 'id'. All other fields have sensible
defaults for local models (Ollama, LM Studio, etc.):
- name: defaults to id
- reasoning: defaults to false
- input: defaults to ["text"]
- cost: defaults to {input: 0, output: 0, cacheRead: 0, cacheWrite: 0}
- contextWindow: defaults to 128000
- maxTokens: defaults to 16384

Existing configs that specify all fields continue to work unchanged.

Fixes #1146
2026-02-01 17:49:19 +01:00
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