Commit Graph
7010 Commits
Author SHA1 Message Date
can1357 40ba8c19cf fix(tui): preserved bottom-anchored viewport during offscreen shrink
- Added cursor remapping support to deferredMutation intents and emitted cursor positions when deferring offscreen mutations.
- Introduced planDeferredShrink to defer bottom-anchored offscreen deletions only when displayed rows were byte-identical, otherwise repainted the viewport.
- Added regression tests covering unknown-win32 offscreen middle-shrink behavior, including cursor-only moves and tail-content-change cases.
2026-06-04 05:41:08 +02:00
can1357 b5c82a9274 fix(ai): handle MiniMax object-shaped tool-call arguments
- Held streamed object `function.arguments` directly instead of coercing to `[object Object]`.
- Preserved JSON-string delta assembly for standard hosts.
- Added regression test for object and string tool-call streams.

Fixes #1776.
2026-06-04 05:41:08 +02:00
Can BölükandGitHub a72011267b Merge pull request #1797 from cgreeno/feat/otel-otlp-export
feat(coding-agent): env-driven OTLP trace export for headless hosts
2026-06-04 06:40:02 +03:00
Can BölükandGitHub af32512564 Merge branch 'main' into feat/otel-otlp-export 2026-06-04 06:39:07 +03:00
Can BölükandGitHub 18a7cb7277 Merge pull request #1715 from paweljw/fix/session-accent-light-contrast
fix(tui): cap session accent luminance on light themes
2026-06-04 06:28:29 +03:00
Can BölükandGitHub a6997b1b7f Merge branch 'main' into fix/session-accent-light-contrast 2026-06-04 06:28:21 +03:00
can1357 1379772628 refactor(utils): consolidate color utilities into pi-utils
Move the color math added for the session-accent fix into the shared
@oh-my-pi/pi-utils color module instead of a coding-agent-local file:

- colorLuma, relativeLuminance, and hslToHex now live in
  packages/utils/src/color.ts (hslToHex lifted out of session-color.ts).
- Drop the duplicate hex parser: toRgb reuses the existing hexToRgb and
  paletteToRgb returns the shared RGB type, so hex parsing lives once.
- Delete packages/coding-agent/src/utils/color.ts; theme.ts and
  session-color.ts import from @oh-my-pi/pi-utils.
- Move the color unit test into the utils package; repoint session-color
  test imports.

No behavior change to accent luminance capping.
2026-06-04 05:27:11 +02:00
can1357 db0f396601 feat(tui): added terminal cursor mode synced to hardware cursor pref
- Added Input setUseTerminalCursor to render terminal or software cursor.
- Synced focused component cursor mode on focus and preference changes.
- Fixed wrapTextWithAnsi infinite loop on BEL-terminated string escapes.
2026-06-04 05:21:35 +02:00
Can BölükandGitHub 5217e14d53 Merge pull request #1762 from can1357/farm/a3a27476/bound-broad-find-scans
fix(natives): bound sorted glob scans
2026-06-04 06:21:27 +03:00
Can BölükandGitHub 9f7c36c36b Merge pull request #1702 from basedcorp99/feat/cmux-terminal-id
Add cmux terminal surface detection to getTerminalId
2026-06-04 06:13:25 +03:00
Can BölükandGitHub 35b86492d0 Merge pull request #1685 from daandden/fix-web-search-tui-providers
Fix web search provider TUI options
2026-06-04 06:12:58 +03:00
Can BölükandGitHub b64ff4752c Merge pull request #1726 from WodenJay/fix/swarm-authstorage-identity-1472
fix(swarm): remove redundant authStorage discovery from swarm pipeline (#1472)
2026-06-04 06:10:34 +03:00
Can BölükandGitHub 1ca92c929f Merge pull request #1754 from daandden/fix-opus-priority
Fix slow agent Opus priority
2026-06-04 06:09:19 +03:00
Can BölükandGitHub b4b11f8f92 Merge pull request #1783 from VoidChecksum/fix/stdio-async-epipe-request
fix(coding-agent/mcp): handle async broken-pipe rejections in stdio transport
2026-06-04 06:09:09 +03:00
Can BölükandGitHub 8d6771490a Merge pull request #1803 from fabkho/fix/agent-skills-spec-compat
fix: recognize disable-model-invocation from Agent Skills spec
2026-06-04 06:07:43 +03:00
Can BölükandGitHub 8596f08af0 Merge pull request #1808 from GratefulDave/fix/search-optional-paths
fix(search): default paths to workspace root instead of hard-failing
2026-06-04 06:07:03 +03:00
can1357 efd66d9e98 perf(tui): cached scrollback history text to avoid O(n²) re-reads
- Memoized committed row text keyed by offset, invalidated on resize/recreate.
- Replaced subprocess stdin pipe with Blob input in stress harness.
- Rejected stress batch on first error so killed siblings cannot mask it.
2026-06-04 05:02:07 +02:00
can1357 29a24da3c5 fix(text): treated BEL-terminated APC as zero-width in wrapping
- Recognized BEL as a string-sequence terminator so the TUI cursor marker measures zero width.
- Advanced past unclassifiable ESC bytes to stop break_long_word spinning forever.
2026-06-04 04:59:33 +02:00
can1357 46b6de2dda fix(tui): repainted shrunk eager viewport even when it now fits
- Painted bottom-anchored tail on collapse, not just on overflow.
- Prevented UI freeze on stale rows during eager streaming (#1682).
2026-06-04 04:12:27 +02:00
can1357 3f22f939a2 feat(coding-agent/plan-mode): shared approved plan context with spawned subagents
- Added `loadOverallPlanReference` to resolve a session plan reference from local storage and skip empty or missing files.
- Updated task execution to read the active plan reference (except in plan mode) and pass it into each spawned subagent.
- Extended the subagent system prompt and session SDK/tools plumbing so subagents receive and render the approved plan path and contents.
2026-06-04 04:10:53 +02:00
can1357 a5a983c26b test(tui): migrated VirtualTerminal to ghostty-web VT engine
- Replaced @xterm/headless backing with libghostty-vt WASM for grapheme-aware widths.
- Removed legacy/modern width-model split now that the terminal matches the renderer.
- Reframed width-disagreement regressions around Ghostty row containment.
- Added non-destructive in-band resize handling and regression coverage.
2026-06-04 04:03:20 +02:00
can1357 b0cf24ca0d feat(coding-agent): froze offscreen transcript blocks on ED3-risk terms
- Added TranscriptContainer that snapshots non-live blocks to avoid stale scrollback duplicates.
- Thawed snapshots at prompt-submit checkpoints for reconciliation.
- Repainted eager streaming tail on overflowing shrink to unfreeze UI (issue #1682).
2026-06-04 03:48:12 +02:00
can1357 7f271f9b9d feat(coding-agent): added native selection markers to ask dialogs
- Added `selectionMarker`, `checkedIndices`, and `markableCount` options to render radio/checkbox glyphs per row.
- Moved checkbox rendering from inline label prefixes into the selector component.
- Kept trailing control rows like "Other"/"Done" on the plain cursor.
2026-06-04 03:43:17 +02:00
can1357 7530832b42 fix(tui): always repaint viewport on eager ED3-risk shrink
- Removed deferredMutation no-op that drifted the live tail upward.
- Repaint emits no ED3 and keeps tail-followers off stale tool previews.
- Preserved scrollback cleanup via nativeScrollbackDirty checkpoint.
2026-06-04 03:41:44 +02:00
can1357 bc5eeef398 feat(coding-agent): tagged read-only agents in task tool description
- Added `isReadOnlyAgent` and `READ_ONLY_TOOL_NAMES` to classify agents.
- Marked read-only agents and forbade edits, commands, and reasoning offload.
- Added tests for capability classification and description rendering.
2026-06-04 03:24:41 +02:00
David Andrews (LexGenius.ai)andClaude Opus 4.8 89a60a6613 fix(search): default paths to workspace root instead of hard-failing
The `search` tool required `paths` via a strict `union([string,
array.min(1)])`, so any call that omitted `paths` (or passed an empty
array) was rejected at schema validation with `paths: Invalid input`
and never ran — turning a recoverable "no scope given" into a fatal
tool-call failure.

Make `paths` optional and default an omitted/empty value to the
workspace root (`.`), matching the documented prompt contract. Behavior
is unchanged when paths are supplied. Adds regression coverage for the
omitted and empty-array cases.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 20:59:43 -04:00
can1357 dc4aeb7b88 refactor(coding-agent): renamed todo_write tool to todo
- Renamed `TodoWriteTool` to `TodoTool` and its source/prompt files.
- Updated tool registration, schema, renderers, and gating to `todo`.
- Adjusted cursor provider native tool names and tests to match.
- Renamed strike-animation constants and `todo-error-reminder` type.
2026-06-04 02:45:30 +02:00
can1357 67ed82f024 refactor(coding-agent): restructured plan prompts with plan tags
- Wrapped plan content in `` tags for subagent handoff.
- Instructed agent never to read the plan path since content is inlined.
- Replaced collapsible details block in plan reference prompt.
2026-06-04 02:35:39 +02:00
can1357 5757ed2e6a fix(ai/providers): removed hardcoded 32k max token cap
- Updated GitLab Duo and OpenAI Anthropic stream options to default to model.maxTokens instead of Math.min(model.maxTokens, 32000).
- Changed stream option mapping to use nullish coalescing, preserving explicit maxTokens values such as 0.
2026-06-04 02:27:23 +02:00
can1357 b9c204c69e feat(session): added indexed async session backends and removed synchronous read APIs
- Added `IndexedSessionStorage` with `SessionStorageBackend` for index-based storage reads.
- Removed `readTextSync` from the public `SessionStorage` API and sync backends.
- Changed Redis and SQL backends to warm `{size, mtimeMs}` metadata and read via `readTextSlices`.
- Added per-path write queues and `drain()` to serialize operations and surface first failures.
2026-06-04 02:27:06 +02:00
can1357 debd90656c fix(ai): fixed CCA schema stripping for properties named properties
- Updated `normalizeSchemaNode` to keep `insideProperties` active only when entering an outer `properties` map, not when the key appears within an existing properties object.
- Added a regression test for `google-tool-schema` ensuring `propertyNames` and `additionalProperties` are removed from a schema property literally named `properties`.
2026-06-04 02:24:41 +02:00
can1357 542ea6c930 fix(tui): parked cursor at content bottom to stop scrollback dupes
- Moved hardware cursor up to the real content bottom instead of the padded viewport bottom.
- Prevented terminal height shrinks from scrolling live rows into scrollback and duplicating them per resize step.
- Kept relative rowDelta math correct so IME cursor still lands right after height-grow resizes.
2026-06-04 02:17:12 +02:00
can1357 b478e5f34a fix(tui): suppressed redundant DECRPM resets and unchanged resizes
- Treated DECRPM status 4 (permanently reset) as disabled, not enabled.
- Skipped resize handler when in-band report leaves geometry unchanged.
2026-06-04 02:09:53 +02:00
can1357 5e17edf1ec refactor(coding-agent): restructured session text slicing to use unified head/tail reads
- Replaced SessionStorage readTextPrefix/readTextSuffix with readTextSlices.
- Added peekFileEnds utility to read bounded file head/tail in one handle.
- Updated session-manager list/recent reads to consume unified head/tail slices.
- Expanded storage tests for head/tail and UTF-8-boundary slice extraction.
2026-06-04 02:07:34 +02:00
can1357 e6716d086d feat(coding-agent): added lifecycle status to session picker
- Classified each session's final message as done, interrupted, aborted, error, or pending from a 32 KiB tail read.
- Rendered the status as a colored segment on the session metadata line.
- Added `peekFileTail` and `readTextSuffix` across storage backends to read file tails in one pass.
- Simplified `MemorySessionStorage` to a string array mirror with a sidecar mtime map.
2026-06-04 01:58:25 +02:00
can1357 b1b4b0c0ed feat(coding-agent/tools): allowed .. aliases for line range selectors
- Extended line selector parsing in path-utils to accept `..` as a forgiving alias for `-`, with `..` normalized during chunk parsing.
- Updated selector-matching regexes for file selectors and internal URL selectors to recognize alias-style ranges in single chunks and comma-separated lists.
- Added tests covering `N..M`, `N..`, mixed separators, inverted-range errors, and path-splitting behavior with `:N..M` selectors and `foo:../bar.ts` paths.
2026-06-04 01:35:39 +02:00
can1357 51ffdc20d8 fix(coding-agent/tools): merged ask tool answer rendering into the original question form
- Added a shared `renderAnswerOptions` helper that redrew answered options with markers, custom input, and cancellation state in-place.
- Set `mergeCallAndResult` to true so ask prompts now keep their question form visible while showing the final selection.
- Kept selection rendering consistent by preserving markers and option ordering while reusing the same layout for completed answers.
2026-06-04 01:34:13 +02:00
can1357 53aaced81f feat: enabled text-sizing and fixed OSC66 and DECCARA rendering behavior
- Added `textSizing` terminal capability and `tui.textSizing` setting for Kitty OSC66 scaling.
- Updated OSC66 range and visible-width handling to preserve grapheme slice behavior.
- Updated markdown rendering to apply heading text sizing only when enabled.
- Fixed DECCARA trailing-background fill tracking and DECRPM status 3/4 recognition.
2026-06-04 01:33:48 +02:00
can1357 ea105b4211 refactor(packages/coding-agent): reorganized notification flow and tests
- Updated completion and ask notifications to pass structured payloads.
- Updated completion and ask notifications to include explicit message metadata fields.
- Adjusted abort-guard and retry-capability tests for the new notification/options behavior.
2026-06-04 00:59:59 +02:00
can1357 48017b5f67 feat(packages/coding-agent): added terminal protocol debug diagnostics
- Added debug menu options for terminal state and protocol checks with new handlers.
- Added terminal diagnostics models and collectors to report geometry, protocol flags, and multiplexer data.
- Added protocol-probe utilities to encode RGB PNGs, generate sample content, and render test panels.
- Added support components for verbatim line rendering and OSC66-scaled text rows.
- Added tests validating image encoding, OSC66 output, and terminal state formatting.
2026-06-04 00:50:46 +02:00
can1357 cb6ca2115b feat(packages/tui): enabled OSC99 and Kitty notification probe support
- Enabled OSC99 probe parsing and title advertisement checks before using rich output.
- Enabled Kitty probe negotiation on startup and switched transmission to temp-file on OK replies.
- Enabled direct-mode fallback when Kitty probes return non-OK or unsupported responses.
2026-06-04 00:50:46 +02:00
can1357 b77e3ab5d5 fix(packages/tui): resolved viewport clear and DECCARA fill rendering
- Added non-destructive viewport clear behavior to emit CSI22J then 2J+H without 3J.
- Preserved destructive clear path to keep sending 2J+H+3J when clearScrollback is enabled.
- Adjusted DECCARA fill offsets and fallback rendering to preserve row fills after scrolling overflow.
- Added terminal write capture helpers and DECCARA parity tests, including deterministic fuzz checks.
2026-06-04 00:50:46 +02:00
can1357 33077363f9 feat(packages/tui): added kitty placeholder image and temp-file flow caps
- Added kitty-graphics module with Unicode placeholder and temp-file APIs.
- Refined terminal image handling to use rendered placeholder lines and detect placeholder output.
- Raised the max inline-image default from 3 to 8 in schema and image constants.
- Refined terminal capability flow for Kitty support, including screen-to-scrollback and text-sizing handling.
- Added integration tests for kitty placeholders, virtual placement, and temp-file rendering.
2026-06-04 00:50:46 +02:00
can1357 fe6a94cb2a feat(packages/tui): added OSC 66 text sizing for markdown headings
- Added OSC 66 text-sizing utilities and `encodeTextSized` for safe, width-aware span emission.
- Enabled scale-2 OSC 66 output for H1 headings when text sizing is enabled and width permits.
- Handled OSC 66 heading rows as raw output, skipping wrap/background and preserving the reserved blank row.
- Mapped inline heading tokens to plain text to gate OSC 66 heading rendering by measured width.
2026-06-04 00:50:46 +02:00
can1357 86c56d6472 feat(tui): added DECCARA fill optimizer with OSC 66 and DEC 2026/2048
- Added a Kitty-only DECCARA optimizer painting solid bg panels as rectangles, with `PI_NO_DECCARA` kill switch.
- Added OSC 66 text-sizing width handling to slicing, truncation, and wrapping.
- Added DECRQM probes for DEC 2026 sync output and 2048 in-band resize.
- Added structured OSC 99 notification formatting.
2026-06-04 00:27:20 +02:00
can1357 2f9deba2fb fix(poll): treated /dev/null as ready to avoid infinite poll on macOS
- Short-circuited poll for the null device, which never reports readable on macOS/BSD.
- Prevented `read` with no `-t` deadline from spinning forever on `/dev/null`.
- Added tests verifying null-device readiness and detection specificity.
2026-06-04 00:27:20 +02:00
can1357 ead9e72602 feat(ai): classified account rate limits as quota exhaustion
- Added account rate-limit pattern matching for QUOTA_EXHAUSTED.
- Treated account rate limits as credential-rotatable usage limits.
2026-06-03 23:08:58 +02:00
can1357 b97ddeac94 feat(tui): added inline-image budget capping live graphics
- Added `ImageBudget` keeping only N recent images live, demoting older ones to text via a full redraw plus Kitty graphics purge.
- Changed Kitty images to transmit-once + placement, so repaints re-send only tiny placement sequences instead of base64.
- Added `tui.maxInlineImages` setting (default 3, 0 disables) wired through the coding-agent renderers.
2026-06-03 23:03:54 +02:00
can1357 8647ab6883 fix(fetch): repaired collapsed URL scheme from path normalization
- Restored `https:/` → `https://` before URL parsing and detection.
- Prevented path-normalized URLs from falling through to filesystem lookup.
2026-06-03 23:03:44 +02:00
can1357 13d116bf15 fix(hashline): treated empty replace hunks as deletes
- Updated the grammar to parse replace hunks with zero body lines.
- Changed empty replace execution to emit delete edits across the target range.
- Updated tests to verify empty replace syntax deletes lines while empty inserts still throw errors.
2026-06-03 22:53:19 +02:00