Commit Graph
7539 Commits
Author SHA1 Message Date
can1357 b4d845b2ef chore: bump models 2026-06-08 01:41:06 +02:00
can1357 854c854033 fix(natives): kept Linux clipboard alive to preserve X11 selection ownership
- Reworked Linux clipboard writes to use a shared `OnceLock<Mutex<Option<Clipboard>>>` so a `Clipboard` instance persists for the process and keeps X11 ownership alive.
- Updated `copy_to_clipboard` to route Linux calls through the persistent helper while macOS and Windows keep transient on-thread writes.
- Added changelog entries for the native X11 clipboard fix and the AI default Anthropic model note.

Fixes #2075
2026-06-08 01:39:48 +02:00
Can BölükandGitHub 200e1721a0 Merge pull request #2033 from WodenJay/fix/proxy-stream-disconnect
fix(proxy): throw error when server disconnects without terminal event
2026-06-08 01:36:45 +02:00
can1357 caa9c69309 feat(coding-agent): added provider-priority model selection and refined fallback ordering
- Added first-party-first provider priority defaults for model ranking.
- Consolidated model resolution to use getModelMatchPreferences from session settings.
- Prioritized providerPriorityRank ahead of usage rank when picking preferred models.
- Added second-pass fallback to default-model or API-key-valid matching order.
2026-06-08 01:32:39 +02:00
can1357 e1840cde00 feat(coding-agent/modes): displayed auto-selected role defaults as [ROLE auto] badges
- Tracked each role assignment with an `autoSelected` flag to distinguish inferred defaults from configured models.
- Resolved unconfigured known roles from `pi/{role}` candidates in `#loadRoleModels` and marked them as auto-selected defaults.
- Added a selector test verifying unconfigured models render `[SMOL auto]` and `[SLOW auto]` badges.
2026-06-08 01:22:36 +02:00
can1357 a89bb76444 fix(tui): preserved visible ANSI content when truncating terminal rows
- Replaced the TUI row truncation path with per-character and ANSI-sequence iteration that tracks visible cells before clipping output.
- Added ANSI helpers to parse sequence boundaries and preserve OSC66 visible payloads while enforcing max source length during truncation.
- Added natives regression coverage for Ghostty super+alt backspace key matching and parsing.
2026-06-08 01:22:26 +02:00
can1357 d930f4c82d feat(packages/ai): added credential origin to provider auth
- Added `getCredentialOrigin` and `getEnvApiKeyName` to classify auth source.
- Surfaced provenance tags in the `/login` and `/logout` provider picker.
- Made the picker search filter match credential origin and env var name.
- Added coverage for credential-origin precedence and env naming.
2026-06-08 01:16:37 +02:00
can1357 b2e7cd2634 fix(packages/ai): resolved tool-call duplicate IDs for OpenAI/Mistral
- Adjusted deduplicateToolCallIds in transform-messages.ts to enforce max tool-call ID length.
- Updated convertMessages in openai-completions.ts to pass provider-specific ID limits and suffix settings.
- Added regression coverage for duplicate tool IDs on OpenAI and Mistral truncation paths.
2026-06-08 01:09:47 +02:00
can1357 403ce587df fix(packages/coding-agent): resolved missing source cwd for local resumes
- Handled local resumes with missing source CWD by prompting to move and reopening sessions.
- Shared missing-CWD relocation logic between local and global resumes for consistency.
- Added regression test for local explicit-session-dir resumes and session-header cwd updates.
2026-06-08 01:09:47 +02:00
can1357 41aa4de9b2 fix(packages/coding-agent): resolved OSC5522 BEL and metadata behavior
- Tracked kitty-dot payload listings to emit BEL-terminated OSC5522 responses.
- Updated non-kitty-dot writes to include mime in metadata and drop ST terminator.
- Adjusted enhanced-paste tests to assert BEL terminator and metadata formatting.
2026-06-08 01:09:47 +02:00
can1357 d6830b4b8b fix(packages/tui): resolved width-based truncation with issue-2045 test
- Switched long-row truncation to visible-cell width, preserving suffixes after zero-width prefixes.
- Added issue-2045 regression test in issue-2045-repro.test.ts for combining-prefix truncation.
2026-06-08 01:09:47 +02:00
can1357 d3476c6664 chore: fix changelogs 2026-06-08 00:58:40 +02:00
can1357 5be2600b92 fix(coding-agent): normalized relative --cwd flag before downstream use
- Updated startup handling so `applyStartupCwd` now re-syncs `parsed.cwd` to the resolved absolute project directory after `setProjectDir` runs.
- Adjusted the CLI cwd tests to verify a relative `--cwd` argument is normalized to an absolute path and does not double-resolve against the new process cwd.
2026-06-08 00:58:22 +02:00
Can BölükandGitHub 70b9203ce4 Merge pull request #1997 from WodenJay/fix/1492-hashline-bare-body-prefix
fix(hashline): strip N: line-number prefix from auto-piped bare body rows
2026-06-08 00:58:16 +02:00
Can BölükandGitHub 77c19d43cf Merge branch 'main' into fix/1492-hashline-bare-body-prefix 2026-06-08 00:58:09 +02:00
can1357 1e163e4c80 fix(hashline): strip bare-row N: prefixes only when every bare row carries one
Defer read-output line-number stripping from #handleRaw to #flushPending and
gate it on uniformity: a bare "N:text" row is only a pasted-snapshot artifact
when *every* bare body row in the hunk carries the prefix. A mixed set (e.g.
"3:keep" next to "plain") is treated as genuine content and left intact,
avoiding silent corruption of bodies that legitimately start with "digits:".
Removes at most one prefix per row; "+"-prefixed literal rows stay untouched.

Reverts the now-orphaned stripLeadingHashlinePrefixes export back to private.
2026-06-08 00:56:05 +02:00
can1357 181419b65b fix(coding-agent/modes): fixed Esc interrupt acknowledgement to update loader immediately
- Added an interrupt state in EventController to switch the working label to `Interrupting...` and suspend intent-driven updates until the turn resets.
- Called `notifyInterrupting()` from streaming-interrupt paths in InputController and exposed it on InteractiveModeContext so Esc acknowledgement shows immediately while tools tear down.
- Added tests to verify loader acknowledgement, freeze of late intent updates during interruption, and label updates resuming on the next agent start.
2026-06-08 00:54:54 +02:00
Can BölükandGitHub 94b00883cf Merge pull request #2066 from DarkPhilosophy/fix/parse-cwd-flag
fix(coding-agent): parse --cwd launch flag
2026-06-08 00:54:49 +02:00
Can BölükandGitHub cab7eb920c Merge branch 'main' into fix/parse-cwd-flag 2026-06-08 00:54:38 +02:00
Can BölükandGitHub c29c2aec44 Merge pull request #2067 from tycronk20/fix/session-resume-after-worktree-move
Fix session resume after moving a worktree
2026-06-08 00:48:36 +02:00
Can BölükandGitHub bf4f675298 Merge branch 'main' into fix/session-resume-after-worktree-move 2026-06-08 00:48:29 +02:00
can1357 ba4abb7e2f fix(coding-agent): excluded cwd-less legacy sessions from relocation guard
- Guard now skips sessions with empty cwd, not just undefined.
- Prevents path.resolve("") collision from hijacking a moved session.
2026-06-08 00:47:39 +02:00
Can BölükandGitHub f93359ebae Merge pull request #2065 from can1357/farm/9483b02b/fix-alt-backspace-kitty-ghostty
fix(tui): recognized Ghostty's super+alt+backspace as word delete
2026-06-08 00:45:30 +02:00
Can BölükandGitHub 6ef7548fcb Merge branch 'main' into farm/9483b02b/fix-alt-backspace-kitty-ghostty 2026-06-08 00:45:21 +02:00
can1357 bad1e2acd6 fix: restricted GitHub Copilot auth to COPILOT_GITHUB_TOKEN
- Changed the `github-copilot` service provider to resolve credentials only from `COPILOT_GITHUB_TOKEN`.
- Updated CLI extra help text to document `COPILOT_GITHUB_TOKEN` as the GitHub Copilot environment variable.
- Reworded environment variable docs to reflect the revised Copilot/GitHub token usage and order.
2026-06-08 00:42:23 +02:00
bling cfa9a2d53e fix(coding-agent): resume sessions after a worktree move/rename
When a session's working directory is moved or renamed (e.g. `git worktree
move`), the session file stays under the old cwd-encoded bucket while the new
directory is empty. Resuming was lossy:

- `--continue` rejected the terminal breadcrumb purely on cwd mismatch and then
  found nothing in the new bucket, silently starting a fresh empty session.
- cross-project `--resume <id>` only offered to *fork* (duplicate) the session
  into the new directory, forcing manual id selection and leaving a stale copy.

Detect relocation via the strong, low-false-positive signal "recorded cwd no
longer exists on disk" and re-root in place with the existing `moveTo()`:

- `continueRecent` re-roots the terminal's last session into the current
  directory when its recorded cwd is gone and the new location has no sessions
  of its own (otherwise behavior is unchanged). `readTerminalBreadcrumb` is
  refactored into `readTerminalBreadcrumbEntry` returning the raw cwd +
  session file so callers can interpret a cwd mismatch.
- cross-project `--resume <id>` offers "Move (re-root)" instead of fork when the
  source directory is gone; a still-existing different project still forks.

Tests: continue-relocation (re-root on move, no-hijack on plain cd, prefer
local recent) and cross-project move-vs-fork routing.
2026-06-07 18:34:51 -04:00
can1357 5ddae194b4 test(ai): cover impersonated_service_account ADC Vertex auth flow
Add unit and E2E coverage for the impersonated_service_account ADC path:
RS256 JWT-signed service_account sources, IAM URL reconstruction, delegate
forwarding, and end-to-end routing so the impersonated token (not the
source token) authorizes the Vertex request. Reflow google-auth.ts to match.
2026-06-08 00:33:42 +02:00
can1357 7ffec14863 ci: force JavaScript actions to run on Node 24 2026-06-08 00:32:47 +02:00
can1357 4f085de299 Merge remote-tracking branch 'origin/farm/cc1fae18/chunk-large-writes-conpty' 2026-06-08 00:30:45 +02:00
can1357 72be2a54e7 Merge remote-tracking branch 'origin/farm/1f3e0007/fix-ctrl-z-suspend' 2026-06-08 00:30:27 +02:00
can1357 988b51ffad Merge remote-tracking branch 'origin/farm/da3d94d7/fix-deferred-shrink-viewport-clears' 2026-06-08 00:30:11 +02:00
can1357 d3290c3ee5 Merge remote-tracking branch 'origin/farm/e60e06f3/bound-tui-line-fitting' 2026-06-08 00:29:59 +02:00
can1357 4a0eba8092 Merge remote-tracking branch 'origin/farm/8b6c0673/fix-follow-up-goal-command' 2026-06-08 00:29:53 +02:00
can1357 d0c449b9d2 Merge remote-tracking branch 'origin/farm/acd9c8d1/fix-kitty-da1-ordering' 2026-06-08 00:29:41 +02:00
can1357 51e6f69c21 Merge remote-tracking branch 'origin/farm/07513181/parse-minimax-think-tags' 2026-06-08 00:29:35 +02:00
can1357 248f14cc3b Merge remote-tracking branch 'origin/farm/e318626d/retry-generic-upstream-error' 2026-06-08 00:29:12 +02:00
can1357 674b5ab70b Merge remote-tracking branch 'origin/farm/b3104955/dedupe-tool-call-ids' 2026-06-08 00:29:06 +02:00
can1357 ae420d49f0 Merge remote-tracking branch 'origin/farm/915457a5/fix-kitty-osc-5522-mime-listing' 2026-06-08 00:28:41 +02:00
Can BölükandGitHub 84ddda3c1b Merge pull request #2060 from Null3rror/fix/mcp-tool-approval-tier
fix(mcp): declare approval tier for MCP tools to prevent hangs in non-yolo mode
2026-06-08 00:26:25 +02:00
Can BölükandGitHub 9caaf46080 Merge pull request #2059 from schmidtmarek/fix-vertex-impersonation
fix(ai): support impersonated service account ADC for vertex
2026-06-08 00:25:26 +02:00
Can BölükandGitHub 8e5f77b173 Merge pull request #1978 from tycronk20/docs/port-pi-extension-drift
docs: document Pi extension export drift in porting guide
2026-06-08 00:21:05 +02:00
Can BölükandGitHub 0aa22b7120 Merge pull request #1947 from DarkPhilosophy/fix/empty-stop-guard-tooluse
fix(coding-agent): retry orphaned toolUse stops to prevent history corruption
2026-06-08 00:20:54 +02:00
Can BölükandGitHub e9e2d02223 Merge pull request #1982 from AsafMah/fix/js-eval-worker-init-flake
fix(eval): floor JS worker init timeout to stop terminate-mid-init CI flake
2026-06-08 00:19:33 +02:00
Can BölükandGitHub 375ed75788 Merge pull request #2071 from can1357/farm/c41f02bb/fix-reviewer-findings-injection-schema
fix(coding-agent): suppressed reviewer findings injection when schema rejects it
2026-06-08 00:13:40 +02:00
roboomp 0f243f4505 style: bun run fix 2026-06-07 21:07:48 +00:00
roboomp dd8b50649a fix(coding-agent): suppressed reviewer findings injection when schema rejects it
`finalizeSubprocessOutput` always spliced collected `report_finding`
entries onto a top-level `findings` array regardless of the active output
schema. A caller-supplied schema with `additionalProperties: false` and
no `findings` property would accept the raw payload in-tool (via the
`yield` validator, which only sees the pre-injection data) but then fail
post-mortem validation — emitting `schema_violation: findings: must not
be present` and propagating as a fatal `RuntimeError` through
`agent-bridge.ts` and the eval Python/JS preludes, collapsing the entire
workflow cell along with any prior successful subagent work.

`normalizeCompleteData` now takes the resolved validator and only
performs the injection when the augmented candidate validates. When the
schema rejects it, the raw payload is returned instead — which the in-
tool yield validator already accepted, so the lockstep guarantee
documented at the top of `output-schema-validator.ts` is honored.
Findings remain visible via the agent progress stream and JSONL
artifact, so no information is dropped when injection is suppressed.

Both finalize call paths (yield-success and no-yield fallback) now share
the single validator build instead of constructing it twice, and the
yield-path schema_violation branch is now reached only via the
explicit malformed-schema check, never via spurious findings rejection.

Fixes #2070
2026-06-07 21:07:43 +00:00
DarkPhilosophy 60dde9d33f fix(coding-agent): isolate startup cwd helper 2026-06-07 21:12:41 +03:00
DarkPhilosophy 5f7db97560 fix(coding-agent): apply cwd before startup discovery 2026-06-07 21:06:02 +03:00
DarkPhilosophy a58f0bcbeb fix(coding-agent): parse launch cwd flag 2026-06-07 20:57:14 +03:00
roboomp 5bfad210a6 fix(tui): recognized Ghostty's super+alt+backspace as word delete
Ghostty on macOS reports Option+Backspace as kitty modifier 11
(wire) = 10 (mask) = super(8) | alt(2). The native key matcher only
recognised shift/ctrl/alt, so:

- format_kitty_key in crates/pi-natives/src/keys.rs rejected any
  sequence whose effective modifier had bits beyond shift/ctrl/alt
  set; parseKey returned undefined for \x1b[127;11u.
- parse_key_id recognised only those three modifiers, so even an
  explicit 'super+alt+backspace' degraded to 'alt+backspace' and
  could not match an actual super+alt encoded press.
- The editor's matchesKey(data, 'alt+backspace') branch was never
  reached and Option+Backspace either no-op'd or fell through to
  single-character delete.

Added a MOD_SUPER constant, taught parse_key_id, format_with_mods,
and format_kitty_key about the super bit, added super+alt+backspace
(and super+alt+delete / super+alt+d) to tui.editor.deleteWord*
defaults, and broadened the editor's direct matchesKey calls to
accept the super+alt variants. Existing alt+backspace / alt+d /
alt+delete paths are untouched, so the legacy ESC+DEL workaround
keeps working too.

Added Rust unit tests for the super modifier (positive and
negative for hyper/meta sequences we still drop) and TS
regressions in keys.test.ts and editor.test.ts that exercise
\x1b[127;11u end-to-end.

Fixes #2064
2026-06-07 16:17:29 +00:00