Commit graph

540 commits

Author SHA1 Message Date
Mario Zechner
76a6a74517 feat(coding-agent): merge custom models with built-ins by id 2026-02-06 19:15:26 +01:00
Mario Zechner
ddd5a65c7e fix(coding-agent): handle compromised auth lock without crashing
closes #1322
2026-02-06 19:15:26 +01:00
Mario Zechner
2f1ab3641f fix(coding-agent): document modelOverrides and harden override merging fixes #1062 2026-02-06 18:54:29 +01:00
Charles Cooper
2cd55b2d35 feat(coding-agent): support per-model overrides in models.json
Add modelOverrides field to provider config that allows customizing
individual built-in models without replacing the entire provider.

Example:
  {
    "providers": {
      "openrouter": {
        "modelOverrides": {
          "anthropic/claude-sonnet-4": {
            "compat": { "openRouterRouting": { "only": ["amazon-bedrock"] } }
          }
        }
      }
    }
  }

Overrides are deep-merged with built-in model definitions. Supports:
- name, reasoning, input, contextWindow, maxTokens
- Partial cost overrides (e.g. only change input cost)
- headers (merged with existing)
- compat settings (merged with existing)

Works alongside baseUrl overrides on the same provider.

closes #1062
2026-02-06 18:54:29 +01:00
Mario Zechner
6822691a81 fix(coding-agent): tighten session_before emit typing and test env filtering 2026-02-06 11:59:25 +01:00
Mario Zechner
2668326e05 fix(coding-agent): chain tool_result extension patches
fixes #1280
2026-02-06 11:49:08 +01:00
Mario Zechner
b050c582a1 fix(agent,coding-agent): resume queued messages after auto-compaction 2026-02-06 11:36:19 +01:00
Mario Zechner
703ee26625 refactor(coding-agent): narrow ExtensionRunner emit event type 2026-02-06 11:23:24 +01:00
Mario Zechner
6b0f1fefdb fix(coding-agent): centralize package source normalization and local path parsing fixes #1304 2026-02-06 00:20:52 +01:00
Mario Zechner
8792ee2a66 fix(coding-agent): add /quit autocomplete and remove /exit fixes #1303 2026-02-06 00:16:56 +01:00
Mario Zechner
5f5cd080b9 fix(coding-agent): respect package.json pi.extensions manifest in settings extensions paths
collectAutoExtensionEntries now checks if the directory itself has a
package.json with pi.extensions (or index.ts) before scanning children.
This fixes duplicate extension loading when a manifest-aware directory
is specified directly in settings.json extensions array.

Fixes #1274
2026-02-05 22:32:12 +01:00
Mario Zechner
712d0c6ada fix(ai,coding-agent): fix Bedrock Opus 4.6 model IDs, cache pricing, and add EU profile
- Remove :0 suffix from Opus 4.6 Bedrock model IDs (not valid for this model)
- Fix us/eu Opus 4.6 cache pricing (0.5/6.25 instead of 1.5/18.75)
- Add missing eu.anthropic.claude-opus-4-6-v1 inference profile
- Fix coding-agent default Bedrock model ID to match catalog
2026-02-05 22:21:22 +01:00
Mario Zechner
028fff13ab feat(coding-agent): update default models to Opus 4.6 and GPT-5.3 Codex
- anthropic: claude-opus-4-5 → claude-opus-4-6
- openai-codex: gpt-5.2-codex → gpt-5.3-codex
- amazon-bedrock: us.anthropic.claude-opus-4-20250514-v1:0 → us.anthropic.claude-opus-4-6-v1:0
- vercel-ai-gateway: anthropic/claude-opus-4.5 → anthropic/claude-opus-4-6
- opencode: claude-opus-4-5 → claude-opus-4-6
2026-02-05 21:19:46 +01:00
Mario Zechner
f89b49baeb fix(coding-agent): respect ignore files in skill loader 2026-02-05 20:24:15 +01:00
Mario Zechner
1614e95eca fix(coding-agent): guard malformed tool args in renderers (fixes #1259) 2026-02-05 18:34:24 +01:00
Mario Zechner
6c6d937b2d
Merge pull request #1287 from markusn/feature/ssh-git-packages
feat(coding-agent): add SSH URL support for git packages
2026-02-05 17:09:28 +01:00
Markus Ekholm
fba9a8aece
feat(coding-agent): add SSH URL support for git packages
Use hosted-git-info library for robust parsing of SSH URLs (git@host:path
and ssh://) in addition to HTTPS. SSH and HTTPS URLs for the same repo
are now properly deduplicated.
2026-02-05 16:48:10 +01:00
Mario Zechner
2f18057ac2
Merge branch 'main' into fix/export-ansi-indentation 2026-02-05 03:13:32 +01:00
Aliou Diallo
b315abf998 fix(coding-agent): forward images through steer/followUp during streaming
prompt() computed currentImages but never passed them to _queueSteer()
or _queueFollowUp() in the streaming branch. Both methods only accepted
text and built content as [{ type: 'text', text }], dropping images.

- _queueSteer/_queueFollowUp now accept optional ImageContent[]
- streaming branch in prompt() passes currentImages through
- public steer()/followUp() accept and forward optional images
- RPC types, handler, and client updated for steer/follow_up images
- rpc.md: document images on steer/follow_up, fix ImageContent examples
2026-02-05 02:37:42 +01:00
Aliou Diallo
dc5a0b582d fix(coding-agent): preserve indentation in ANSI-rendered HTML export
HTML div elements collapse whitespace by default, stripping leading
spaces from ANSI-rendered tool output (e.g. JSON code blocks).
Added white-space: pre-wrap to .ansi-line class.
2026-02-05 02:10:05 +01:00
Mario Zechner
9cf5758b68 feat(coding-agent): support shell commands and env vars in auth.json API keys
API keys in auth.json now support the same resolution as models.json:
- Shell command: "\!command" executes and uses stdout (cached)
- Environment variable: uses the value of the named variable
- Literal value: used directly

Extracted shared resolveConfigValue() to new resolve-config-value.ts module.
2026-02-04 23:02:00 +01:00
Mario Zechner
d0679dcfc0 fix(coding-agent): ignore unknown skill frontmatter fields 2026-02-04 14:20:24 +01:00
Mario Zechner
fcfbc82ec2 fix(coding-agent): reload global settings fixes #1241 2026-02-04 14:14:52 +01:00
Juan Ibiapina
b80762966a
feat(coding-agent): add resume as configurable keybinding action (#1249)
feat(coding-agent): add resume as configurable keybinding action

Allow users to bind a key to open the session resume selector, matching the pattern of newSession, tree, and fork actions.
2026-02-04 13:43:51 +01:00
Mario Zechner
b5be54b8ef fix(coding-agent): persist user message after fork
When hasAssistant guard returns early, set flushed=false so
the next persist (after assistant arrives) writes all entries
including the user message.
2026-02-04 13:35:45 +01:00
Mario Zechner
13ac63c3cd fix(coding-agent): fork writes to new session file, not parent (fixes #1242)
- Store previousSessionFile before creating branched session
- Update sessionFile after writing new branch file
- Pass parentSession when forking from first message
- Add --local to git config in tests to prevent repo escape
2026-02-04 13:22:43 +01:00
Mario Zechner
1fe73ad423 Revert "fix(coding-agent): handle npm on Windows with shell fallback fixes #1220"
This reverts commit 895b85636a.
2026-02-04 02:22:37 +01:00
Mario Zechner
895b85636a fix(coding-agent): handle npm on Windows with shell fallback fixes #1220 2026-02-04 02:21:06 +01:00
badlogic
ffb647cece fix(coding-agent): use shell execution for spawn on Windows
fixes #1220
2026-02-04 02:15:22 +01:00
Mario Zechner
e1e4e593c0 fix(coding-agent): persist thinking level defaults 2026-02-03 17:17:38 +01:00
Mario Zechner
8a7a761deb fix(coding-agent): resolve npm.cmd on Windows
closes #1220
2026-02-03 17:04:22 +01:00
Mario Zechner
2f5235b966 fix(coding-agent): support local install paths relative to settings files closes #1216 2026-02-03 12:58:34 +01:00
Mario Zechner
e54dff7efb fix(coding-agent): rename SlashCommandSource "template" to "prompt" for consistency
BREAKING CHANGE: RPC get_commands response and SlashCommandSource type
now use "prompt" instead of "template" to match the rest of the codebase.
2026-02-03 12:27:45 +01:00
warren
2613754c47 feat(coding-agent): add ExtensionAPI.getCommands() 2026-02-03 12:18:52 +01:00
Mario Zechner
7a9c668357
Merge pull request #1196 from haoqixu/fix-commands-conflict
fix(coding-agent): filter out commands conflict with builtins
2026-02-03 01:22:29 +01:00
Mario Zechner
6909f61884
Merge pull request #1199 from academo/academo/implement-set-expand-tool-api
feat: add setToolsExpanded and getToolsExpanded to ExtensionsUIContext
2026-02-03 01:16:04 +01:00
Mario Zechner
c9a20a3aa4 fix(coding-agent): normalize @ path prefixes closes #1206 2026-02-02 23:56:20 +01:00
Esteban Beltran
ca62c44775
feat: add setToolsExpanded and getToolsExpanded to ExtensionsUIContext 2026-02-02 19:25:00 +01:00
haoqixu
29e2997f41 fix(coding-agent): filter out commands conflict with builtins 2026-02-03 01:23:49 +08:00
Michael Renner
f7c03ef6a2
fix(coding-agent): handle scoped models after logout (#1194) 2026-02-02 18:05:15 +01:00
Juan Ibiapina
d0228412d6
feat(coding-agent): add switchSession to Extension API (#1191)
Allows extension commands to programmatically switch to a different session file via ctx.switchSession(sessionPath).

fixes #1187
2026-02-02 18:03:26 +01:00
Mario Zechner
0925fafe3b fix(tui): reduce unnecessary full redraws for better performance
- Remove height change detection (only width changes trigger full redraw)
- Change clearOnShrink default to false (use PI_CLEAR_ON_SHRINK=1 to enable)
- Fix viewport check to use previousLines.length instead of maxLinesRendered
  (prevents false positive redraws when appending lines after content shrunk)
- Add clearOnShrink setting to /settings in coding-agent
- Remove line truncation in custom message component (always show full content)
2026-02-02 08:10:08 +01:00
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
86b43c8eac feat(coding-agent): add bash spawn hook 2026-02-01 23:17:51 +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
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
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
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
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