Commit Graph
145 Commits
Author SHA1 Message Date
can1357 42dec91f2a feat(coding-agent): implemented width-aware text truncation and render caching across tool renderers
- Implemented width-aware text truncation across all tool renderers to respect terminal width constraints and prevent output overflow.
- Enhanced render caching to include width parameter for cache invalidation when terminal width changes, improving cache accuracy.
- Migrated truncateToWidth function imports from render-utils to centralized tui module for better code organization.
- Introduced Hasher utility for generating width-aware cache keys in calculator, find, grep, todo-write, and write tools.
- Optimized box component rendering to only truncate lines that exceed content width, reducing unnecessary truncation operations.
2026-02-06 03:07:30 +01:00
can1357 43473e3b0e perf(coding-agent): optimized tool rendering with caching, improved tool grouping, and enhanced string preview formatting
- Implemented caching for tool output block rendering to avoid redundant computations on re-renders.
- Enhanced read tool grouping to prevent coalescing across narrative boundaries (text/thinking blocks between tool calls).
- Improved string preview formatting to detect multi-line strings and display line counts with ellipsis indicators.
- Refactored tool execution component to use reactive render state tracking for better state management.
- Enhanced error handling in tool renderers with logging for failures.
- Fixed truncation indicator to use ellipsis character instead of verbose suffix.
2026-02-06 02:47:59 +01:00
can1357 09225bc491 feat: refactored text truncation API to use string type and hardcoded ellipsis
- Changed TextInput type parameter to string in truncateToWidth(), visibleWidth(), sliceWithWidth(), and extractSegments() functions in native bindings.
- Removed TextInput type export from public API of pi-natives package.
- Removed format.ellipsis symbol from theme configuration, replacing all theme-based ellipsis references with hardcoded Unicode ellipsis character (...).
- Removed ellipsis property from SymbolTheme interface in pi-tui package.
- Removed truncateToWidth, sliceWithWidth, and extractSegments wrapper functions from pi-tui public API, now re-exporting directly from pi-natives.
- Added early return optimizations in truncateToWidth() and sliceWithWidth() native functions to skip native calls when possible.
2026-02-01 10:01:56 +01:00
can1357 cc90ed37f8 refactor: extracted padding logic into reusable utility function with optimized buffer allocation
- Extracted manual space padding logic into a reusable `padding()` utility function across all UI components and utilities.
- Optimized padding operations by introducing a pre-allocated 512-space buffer in the `padding()` function to reduce repeated string allocations.
- Updated all imports across 30 files to use the new `padding()` function from pi-tui instead of inline `' '.repeat()` calls.
- Renamed local variables from `padding` to `pad`, `padSize`, `indent`, or `linePad` to avoid naming conflicts with the imported `padding()` function.
- Exported the `padding()` utility function from the tui package index for public use.
2026-01-31 13:36:54 +01:00
can1357 2ae12a7cee fix(tui): split multi-line strings in renderOutputBlock to prevent width overflow
Multi-line bash commands (e.g., for loops with newlines) were being passed
as single "lines" to renderOutputBlock. Since visibleWidth() treats newlines
as width 0, truncateToWidth() calculated incorrect truncation points. The
result was rendered lines with embedded newlines that exceeded terminal width,
causing "Rendered line N exceeds terminal width" crashes.

Split section lines by newlines before processing so each line gets properly
truncated and wrapped with box borders.
2026-01-29 11:19:33 +01:00
can1357 c96481b446 refactor(coding-agent): enhanced tool rendering and patch application
- Added request parameter tracking to LSP tool rendering for better diagnostics visibility.
- Enhanced tool execution rendering with async diff computation and Kitty protocol support.
- Refactored patch applicator with 7-pass fuzzy matching and indentation adjustment.
- Added inline rendering flag to bash and fetch tool renderers.
- Fixed output block border rendering and added background control parameter.
- Extracted constants for preview formatting to improve maintainability.
2026-01-25 06:52:16 +01:00
can1357 779ca4872b style(deps): migrated from Prettier to Biome and updated formatting rules
- Removed Prettier configuration files (.prettierignore and .prettierrc) and migrated formatting to Biome.
- Updated Biome configuration from version 2.3.11 to 2.3.12 and changed arrowParentheses rule from 'always' to 'asNeeded'.
- Pinned @biomejs/biome dependency to exact version 2.3.12 in package.json and bun.lock.
- Applied consistent arrow function formatting across 489 files by removing unnecessary parentheses around single parameters.
- Removed blank lines after comment blocks and reorganized imports for consistency across the codebase.
2026-01-24 04:20:19 +01:00
can1357 f66e5dba9b build(config): refactored build and TypeScript configuration with Bun loaders
- Removed WASM generation script; use Bun `wasm?raw` loader for imports.
- Added bunfig.toml with loaders for `.md`, `.py`, and `.wasm?raw` text imports.
- Added types/assets/index.d.ts for global TypeScript module declarations.
- Unified TypeScript configuration with tsgo-based checking across monorepo.
- Removed build and WASM steps from install and publish pipelines.
2026-01-24 00:03:52 +01:00
can1357 fcbfab765b refactor: consolidated module import paths
- Removed custom TypeScript path aliases and the associated transformation script.
- Replaced aliased imports with direct `@oh-my-pi` package imports for improved clarity.
- Simplified internal module references by removing explicit `/index` suffixes.
2026-01-23 21:01:13 +01:00
can1357 0fe761dc4b build(deps): refactored TypeScript and package configuration across monorepo
- Added tsconfig.publish.json files to all packages with optimized publish-time configuration.
- Updated all package.json scripts with prepublishOnly hooks for correct type checking during publish.
- Added @oh-my-pi/omp-stats path mappings to root tsconfig.json for consistent imports.
- Added WASM generation script for photon module and integrated into install:dev script.
2026-01-23 13:46:06 +01:00
can1357 682308cc56 fix(coding-agent/tui): added nullish coalescing for undefined code parameter
- Prevents errors when code is not provided to the code cell renderer.
2026-01-23 13:46:06 +01:00
can1357 357df166ae style(coding-agent): normalized code formatting across tool renderers
- Fixed indentation and line breaks in nested code blocks (lsp/render.ts, patch/shared.ts).
- Collapsed overlong function arguments and ternary expressions to standard line length.
- Reorganized import statements for consistency (ask.ts).
- Improved readability of conditional expressions (output-block.ts, web/search/render.ts, python.ts).
2026-01-23 13:46:06 +01:00
can1357 ab869e7828 refactor(coding-agent): Standardized tool output rendering with centralized TUI components
- Output block border color now reflects state (error, success, warning) for visual feedback.
- Tools use renderStatusLine, renderTreeList, renderFileList, renderCodeCell for unified formatting.
- Write tool shows streaming preview of content being written with syntax highlighting.
- Read tool displays resolved path information when reading from URLs or symlinks.
- Calculator shows expression and output (e.g., `2+2 = 4`) instead of just the result.
- Empty and error states render consistently with status headers across Find, Grep, Ls, Notebook, Ask.
2026-01-23 13:46:06 +01:00
can1357 763faa1615 refactor(coding-agent): migrated tool rendering to declarative TUI component APIs
- Created new TUI component library with renderStatusLine, renderOutputBlock, renderCodeCell, renderFileList, and renderTreeList utilities for consistent tool output rendering.
- Refactored 13+ tools to use centralized TUI components, replacing inline theme formatting and ToolUIKit class usage with declarative component APIs.
- Moved tree rendering utilities (getTreeBranch, getTreeContinuePrefix) from tool render-utils to TUI module for improved code organization.
- Streamlined render function return types across tools from Text to Component objects with render/invalidate methods for better state management.
2026-01-23 13:46:06 +01:00
Mario Zechner 350196694d Remove old implementation files (main.ts, cli.ts, tui-renderer.ts), rename new files 2025-12-09 01:21:28 +01:00
Mario Zechner 58828adf76 Reorganize file structure: core/, utils/, modes/interactive/components/, modes/interactive/theme/ 2025-12-09 00:51:33 +01:00
Markus YlisiurunenandGitHub aaafc8627d use only model id for fuzzy filtering in model selector (#151) 2025-12-08 23:35:31 +01:00
Mario Zechner 5677715707 Fix crash when bash mode outputs binary data
Sanitize shell output by removing Unicode Format characters and lone
surrogates that crash string-width. This fixes crashes when running
commands like curl that download binary files.
2025-12-08 23:26:58 +01:00
Mario Zechner a4c6b47f85 Add green borders around bash execution component 2025-12-08 22:45:05 +01:00
Mario ZechnerandMarkus Ylisiurunen 570ebebbc3 Add bash mode for executing shell commands
- Add ! prefix in TUI editor to execute shell commands directly
- Output streams in real-time and is added to LLM context
- Supports multiline commands, cancellation (Escape), truncation
- Preview mode shows last 20 lines, Ctrl+O expands full output
- Commands persist in session history as bashExecution messages
- Add bash command to RPC mode via {type:'bash',command:'...'}
- Add RPC tests for bash command execution and context inclusion
- Update docs: rpc.md, session.md, README.md, CHANGELOG.md

Closes #112

Co-authored-by: Markus Ylisiurunen <markus.ylisiurunen@gmail.com>
2025-12-08 22:40:32 +01:00
Mario Zechner 69bce12613 Merge main into bash-mode 2025-12-08 21:39:01 +01:00
Mario Zechner 18df11d10e Add xhigh thinking level for OpenAI codex-max models
- Add 'xhigh' to ThinkingLevel type in ai and agent packages
- Map xhigh to reasoning_effort: 'max' for OpenAI providers
- Add thinkingXhigh color token to theme schema and built-in themes
- Show xhigh option only when using codex-max models
- Update CHANGELOG for both ai and coding-agent packages

closes #143
2025-12-08 21:12:54 +01:00
Mario Zechner 8158b6fa0e Restore TUI warning notices for truncated tool output
Warnings now shown at bottom of tool execution (outside collapsed area)
so users can see truncation occurred even when content is collapsed.
2025-12-07 01:14:57 +01:00
Mario Zechner 62f1c815de Implement tool result truncation with actionable notices (#134)
- read: actionable notices with offset for continuation
  - First line > 30KB: return empty + bash command suggestion
  - Hit limit: '[Showing lines X-Y of Z. Use offset=N to continue]'

- bash: tail truncation with temp file
  - Notice includes line range + temp file path
  - Edge case: last line > 30KB shows partial

- grep: pre-truncate match lines to 500 chars
  - '[... truncated]' suffix on long lines
  - Notice for match limit and line truncation

- find/ls: result/entry limit notices
  - '[N results limit reached. Use limit=M for more]'

- All notices now in text content (LLM sees them)
- TUI simplified (notices render as part of output)
- Never return partial lines (except bash edge case)
2025-12-07 01:11:31 +01:00
Mario Zechner ceb79820fe Add tool output truncation with line/byte limits
- Add truncate.ts utility with truncateHead/truncateTail functions
- Both respect 2000 line and 30KB limits (whichever hits first)
- read: head truncation, returns truncation info in details
- bash: tail truncation, writes full output to temp file if large
- grep: head truncation + 100 match limit
- find: head truncation + 1000 result limit
- ls: head truncation + 500 entry limit
- tool-execution.ts displays truncation notices in warning color
- All tools return clean output + structured truncation in details
2025-12-07 00:03:16 +01:00
Mario Zechner e20b345051 Release v0.12.14 2025-12-06 00:46:57 +01:00
Mario Zechner b31077f252 Run version check in parallel with TUI startup
Instead of blocking startup for up to 1 second waiting for the version check,
run it in the background and insert the notification into chat when it completes.
2025-12-05 23:36:06 +01:00
Mario Zechner b10fa86ff9 Merge branch 'feat/resume-slash-command' 2025-12-05 22:54:03 +01:00
Mario Zechner 3be445de80 feat(coding-agent): add /resume command to switch sessions mid-conversation
- Opens interactive session selector
- Properly aborts in-flight agent turns before switching
- Restores model and thinking level from resumed session
- Clears UI state (queued messages, pending tools, etc.)

closes #117
2025-12-05 22:53:51 +01:00
Mario Zechner a6867016df Merge feat/scroll-previous-prompts with history load on resume 2025-12-05 22:02:16 +01:00
Mario Zechner 13e3f8d935 feat(tui): add prompt history navigation with Up/Down arrows
- Browse previously submitted prompts using Up/Down arrow keys
- History is session-scoped and stores up to 100 entries
- Load history from session on continue/resume
- Includes 15 tests for history navigation

fixes #121
2025-12-05 22:00:23 +01:00
Markus YlisiurunenandGitHub 3ca9d6f70a Implement fuzzy search for model/session selector and improve Input multi-key sequence handling (#122)
* implement fuzzy search and filtering for tui selectors

* update changelog and readme

* add correct pr to changelog
2025-12-05 20:33:04 +01:00
Nico Bailon b9525642cf feat(tui): add prompt history navigation with Up/Down arrows
Browse previously submitted prompts using Up/Down arrow keys, similar to
shell history and Claude Code's prompt history feature.

- Up arrow when editor is empty: browse to older prompts
- Down arrow when browsing: return to newer prompts or clear editor
- Cursor movement within multi-line history entries supported
- History is session-scoped, stores up to 100 entries
- Consecutive duplicates are not added to history

Includes 15 new tests for history navigation behavior.
2025-12-05 07:57:42 -08:00
Mario Zechner 73baa40d9c fix: make footer token counts more compact
- Use M suffix for millions (e.g., 10.2M instead of 10184k)
- Change '% of' to '%/' for context display
2025-12-05 12:21:44 +01:00
Mario Zechner 39b434c801 fix: footer overflow crash on narrow terminals
Footer stats line now truncates gracefully when terminal width is too
narrow to fit all stats, instead of overflowing and crashing the TUI.
2025-12-05 12:17:56 +01:00
Mario Zechner bf2c8aae44 fix: strip remaining escape sequences from bash output
stripAnsi misses some escape sequences like standalone ESC \ (String
Terminator) which caused rendering issues when displaying captured TUI
output. Now also removes any remaining ESC+char sequences and control
characters after stripAnsi processing.
2025-12-05 12:13:33 +01:00
Mario Zechner 4e1bcd616d fix: TUI crash with Unicode characters in branch selector
- Use truncateToWidth instead of substring in user-message-selector.ts
- Fix truncateToWidth to use Intl.Segmenter for proper grapheme handling
- Add tests for Unicode truncation behavior
2025-12-05 11:59:39 +01:00
Hew Li Yang 787706a487 wip: add /resume slash command 2025-12-05 18:49:24 +08:00
Mario Zechner 6de565595a Improve compaction UI styling
- Simplified collapsed state: warning-colored text instead of styled banner
- Shows token count inline: 'Earlier messages compacted from X tokens'
- Removed redundant success message after compaction
- Cleaner vertical spacing using paddingY instead of explicit Spacers

Fixes #108
2025-12-05 11:05:04 +01:00
Mario Zechner 4473d5aca3 Fix spacer after hidden thinking block, add contributor link to CHANGELOG 2025-12-05 10:48:28 +01:00
Markus Ylisiurunen 11bda7ffd9 add ctrl+t shortcut to toggle llm thinking block visibility 2025-12-05 09:48:35 +02:00
Markus Ylisiurunen 9e60b41077 allow toggling visibility of the assistant's thinking block 2025-12-05 09:43:09 +02:00
Markus YlisiurunenandGitHub 2583d8701c improve readability of context usage display calculation (#111) 2025-12-05 01:38:31 +01:00
Markus Ylisiurunen 64240d9a46 reduce child process stdout and stderr buffer limits in tui renderer 2025-12-04 20:29:29 +02:00
Markus Ylisiurunen 10b854e2db extract shell config logic and add bash command cancellation in tui 2025-12-04 20:24:26 +02:00
Markus Ylisiurunen 00530a8223 add support for running bash commands via '!' in the tui editor 2025-12-04 20:06:12 +02:00
Markus Ylisiurunen 673858dc7f add cross-platform clipboard support and /copy command 2025-12-04 09:16:11 +02:00
Mario Zechner 5622cbd0cc Release v0.12.8 2025-12-04 03:59:20 +01:00
Mario Zechner 8f193790fb docs(coding-agent): add /compact, /autocompact commands and Context Compaction section
- Add /compact and /autocompact slash command documentation
- Add Context Compaction section explaining how it works, manual/auto modes, configuration
- Update /autocompact output to match thinking level toggle style (dimmed text)
- Remove Planned Features section (auto-compaction now implemented)
2025-12-04 02:56:03 +01:00
Mario Zechner b6a4b05796 perf(coding-agent): avoid loading session file for auto-compaction check
Use agent.state.messages instead of loading entries from disk
2025-12-04 02:42:43 +01:00