Commit Graph

2746 Commits

  • docs: rewrite opening paragraph with clearer value proposition
    - Change title from package name to 'pi'
    - Emphasize: radically simple, multi-model support, mid-session switching
    - Highlight: CLI for headless tasks, creature comforts
    - More concise and compelling
  • docs: add real-world example linking to exa-search tools
    - Reference exa-search repo as concrete example
    - Shows web search capability via simple tool pattern
    - Demonstrates how easy it is to extend pi with custom tools
  • docs: add Background Bash section before Planned Features
    - Clear stance: no background bash execution
    - Alternative: use tmux or tterminal-cp
    - Link to tterminal-cp repo
    - Rationale: long-running commands need proper terminal sessions
  • docs: clarify auto-compaction options and fix flicker claim
    - Expanded auto-compaction: switch to bigger model and either continue or summarize
    - Fixed planned feature: MORE flicker than Claude Code (not less)
  • docs: add Planning section and improve auto-compaction note
    Planning:
    - Clear stance: no built-in planning mode
    - Alternative: write plans to PLAN.md files
    - Persists across sessions, can be versioned
    - Example provided showing structured approach
    
    Auto-compaction:
    - Added alternative: switch to bigger context model (Gemini)
    - Can summarize session with larger model mid-session
  • docs: add To-Dos section explaining no built-in support
    - Clear stance: no built-in to-dos
    - Rationale: they confuse models more than help
    - Alternative: stateful TODO.md file with checkboxes
    - Simple example provided
    - Agent can read/update file as needed
  • docs: add Sub-Agents and Planned Features sections
    Sub-Agents:
    - Clear stance: not supported as built-in feature
    - Agent can spawn itself via CLI or write custom tools
    - Rationale: poor context transfer between agents
    - Manual orchestration recommended for parallel work
    
    Planned Features:
    - Custom/local models (Ollama, llama.cpp, vLLM, SGLang, LM Studio)
    - Auto-compaction (current mitigation documented)
    - Message queuing (core supports, UI needs wiring)
    - Better RPC mode docs
    - Less flicker than Claude Code
  • feat: support file paths for --system-prompt option
    - Check if --system-prompt argument is a valid file path
    - Load file contents if it exists, otherwise use as literal text
    - Works in both interactive and single-shot modes
    - Project context and datetime still appended automatically
    - Document in README with examples
  • refactor: rename package to @mariozechner/pi-coding-agent
    - Changed package name from @mariozechner/coding-agent to @mariozechner/pi-coding-agent
    - Updated README installation command
    - Binary name 'pi' remains the same
    - Avoids conflict with existing @mariozechner/pi (pods package)
  • docs: simplify MCP section with clear stance and minimal example
    - State upfront: pi does not support MCP
    - Provide minimal working example (README + bash script)
    - Show simple usage pattern
    - Remove verbose explanations
    
    fix(tui): don't show duplicate URL when link text equals href
  • docs: restructure tools section and add MCP alternatives
    - Rename 'Available Tools' to 'Tools' with 'Built-in Tools' subsection
    - Add 'MCP & Adding Your Own Tools' section
    - Explain bash/code approach vs MCP servers
    - Highlight token efficiency and composability benefits
    - Link to blog post for detailed examples
  • docs: add Security (YOLO Mode) section to README
    - Document unrestricted filesystem and command access
    - Explain no permission checks or safety rails
    - Warn about prompt injection risks
    - Provide mitigation suggestions
    - Clear about design philosophy and use at own risk
  • fix: render edit tool diffs in HTML export
    - Use result.details.diff from tool execution (same as TUI)
    - Apply proper color coding for added/removed/context lines
    - Remove unused generateDiff function
    - Match TUI's diff rendering approach
  • feat: add /session command to show session info and stats
    - Shows session file path and ID
    - Displays message counts (user, assistant, total)
    - Shows token usage (input, output, cache read/write, total)
    - Displays total cost if available
    - Reuses same calculation logic as footer component
  • fix: don't clear loading animation when Ctrl+C clears editor
    - Remove statusContainer.clear() from clearEditor()
    - Loading animation should only be removed when agent finishes
    - Ctrl+C once should only clear editor text, not status
  • refactor: move context files to system prompt instead of user messages
    - Context files now appended to system prompt
    - Added current date/time to system prompt
    - Added current working directory to system prompt
    - Date/time and cwd placed at end of system prompt
    - Updated README to reflect system prompt integration
  • feat: hierarchical context file loading for monorepos
    - Walk up parent directories to load all AGENT.md/CLAUDE.md files
    - Load global context from ~/.pi/agent/AGENT.md or CLAUDE.md
    - Load order: global → top-most parent → ... → cwd
    - Prefer AGENT.md over CLAUDE.md in each directory
    - Each context file injected as separate message
    - Updated README with detailed documentation
  • feat: defer session creation until first user+assistant message exchange
    - Sessions are no longer created immediately on startup
    - Session files only created after at least 1 user message and 1 assistant response
    - Prevents empty session files when agent is launched and immediately quit
    - Messages are queued until session is initialized
    - Continue/resume modes properly mark sessions as already initialized
  • Remove event logging from session files - only save messages and state changes
    Session reconstruction only needs:
    - type: 'session' - session metadata
    - type: 'message' - conversation history
    - type: 'thinking_level_change' - thinking level changes
    - type: 'model_change' - model changes
    
    Events like agent_start/end, tool_execution_start/end are not needed for
    session reconstruction and only added bloat. This reduces session file size
    significantly and speeds up writes.
  • Add --mode flag for CLI output control (text/json/rpc)
    - text mode: only outputs final assistant message text (default)
    - json mode: streams all events as JSON (same as session manager writes)
    - rpc mode: JSON output + listens for JSON input on stdin for headless operation
    - Suppress informational messages in json/rpc modes
  • Improve edit tool diff display with context-aware rendering
    - Add generateDiffString() function in edit tool to create unified diffs with line numbers and 4 lines of context
    - Store only the formatted diff string in tool result details instead of full file contents
    - Update tool-execution renderer to parse and colorize the diff string
    - Filter out message_update events from session saving to prevent verbose session files
    - Add markdown nested list and table rendering tests
  • Add proper truncation notices and comprehensive tests for read tool
    **Improved output messages:**
    1. File fits within limits: Just outputs content (no notices)
    2. Lines get truncated: Shows "Some lines were truncated to 2000 characters for display"
    3. File doesn't fit limit: Shows "N more lines not shown. Use offset=X to continue reading"
    4. Offset beyond file: Shows "Error: Offset X is beyond end of file (N lines total)"
    5. Both truncations: Combines both notices with ". " separator
    
    **Comprehensive test coverage:**
    - Files within limits (no notices)
    - Large files (line truncation)
    - Long lines (character truncation)
    - Offset parameter
    - Limit parameter
    - Offset + limit together
    - Invalid offset (out of bounds)
    - Combined truncations (both notices)
    
    All 17 tests passing ✓
  • Add line limits and truncation to read tool
    - Default limit of 2000 lines per read
    - Maximum line length of 2000 characters (truncates longer lines)
    - Add optional offset and limit parameters for pagination
    - Show truncation notice with instruction to continue reading
    - Plain text output (no line numbers)
    
    Examples:
    - `read path/to/file` - reads first 2000 lines
    - `read path/to/file offset=2001` - continues from line 2001
    - `read path/to/file limit=100` - reads only 100 lines
    
    This prevents extremely large files from overwhelming context.
  • Match export output style to thinking level display
    Changed export success/error messages to match the style used for thinking level changes:
    - Use Spacer(1) instead of empty Text for proper blank line spacing
    - Use chalk.dim() for success message instead of chalk.green()
    - Add left padding (1, 0) to match other system messages
    - Removed checkmark/x symbols for cleaner look
    
    Now "Session exported to: filename.html" appears dimmed with proper spacing, just like "Thinking level: off"
  • Make HTML export header minimal and stack info vertically
    **Header improvements:**
    - Changed title from "pi coding-agent session" to "pi v{version}"
    - Smaller, more compact header (16px instead of 20px)
    - Info items now stack vertically with consistent labels (80px width)
    - Reduced padding and spacing for cleaner look
    - Labels aligned to left, values aligned to baseline
    
    The header is now much less cramped and easier to read.
  • Add click-to-expand and system prompt display to HTML export
    **Click-to-expand functionality:**
    - Truncated tool outputs are now clickable to show full content
    - Works for bash (>5 lines), read (>10 lines), write (>10 lines)
    - Displays "... (N more lines) - click to expand" hint in cyan
    - Smooth toggle between preview and full output
    - Cursor changes to pointer on hover
    
    **System prompt and tools display:**
    - Added system prompt section with yellow header on dark brownish background
    - Shows all available tools with names and descriptions
    - Both sections appear before messages for context
    - Subtle yellow/brown theme (rgb(60, 55, 40)) that's not too bright
    
    The HTML export now provides better interactivity for large outputs and gives full context about the agent's configuration.
  • Rewrite HTML export to match TUI visual style exactly
    Complete overhaul of export-html.ts to replicate the TUI renderer's visual design:
    
    **Exact TUI color matching:**
    - User messages: rgb(52, 53, 65) dark slate background
    - Tool pending: rgb(40, 40, 50) dark blue-gray
    - Tool success: rgb(40, 50, 40) dark green
    - Tool error: rgb(60, 40, 40) dark red
    - Body background: rgb(24, 24, 30) very dark
    - Text colors matching chalk: cyan for paths, dimmed gray for output
    
    **Tool formatting (matching ToolExecutionComponent):**
    - bash: Bold `$ command`, dimmed output (max 5 lines)
    - write: Bold header with cyan path, line count, content preview (max 10 lines)
    - read: Bold header with cyan path, content preview (max 10 lines)
    - edit: Bold header with cyan path, unified diff with line numbers
    - All tools show "... (N more lines)" indicators
    
    **Additional improvements:**
    - Use session filename + .html for default output
    - Shorten paths with tilde notation (~)
    - Replace tabs with 3 spaces
    - Monospace font matching terminal aesthetic
    - Minimal, clean design with no borders/boxes
    - Print-friendly styles
    
    The HTML export now looks identical to the TUI version.
  • Add /export command to export sessions as self-contained HTML
    - Add exportSessionToHtml function that generates beautifully formatted HTML exports
    - HTML includes session metadata, all messages, tool calls, tool results, thinking blocks, and images
    - Support for ANSI color codes in tool output (converted to HTML)
    - Self-contained with inline CSS (dark theme, responsive design, print-friendly)
    - Add /export slash command to TUI with optional filename parameter
    - Add agent and coding-agent to dev script for watch mode
    - Increment coding-agent version to 0.6.1
    
    Usage: /export [optional-filename.html]
  • Handle FinishReason.NO_IMAGE and fix optional chaining
    - Add NO_IMAGE to error finish reasons in Google provider
    - Fix non-null assertion after optional chaining in Anthropic provider
    - Migrate biome config to 2.3.5
    - Ignore Tailwind CSS file from biome checks
    - Bump all packages to version 0.6.0
  • Fix coding agent tools to return error content instead of throwing
    Tools now resolve with error messages in content blocks rather than
    rejecting the promise. This matches the expected behavior where tools
    always return a result, with errors indicated in the text content.
    
    - read: Return error content for missing files
    - edit: Return error content for missing files, text not found, multiple matches
    - bash: Return error content for command failures, timeouts, and aborts
    - All tools now include required details field in error results
  • Add image support in tool results across all providers
    Tool results now use content blocks and can include both text and images.
    All providers (Anthropic, Google, OpenAI Completions, OpenAI Responses)
    correctly pass images from tool results to LLMs.
    
    - Update ToolResultMessage type to use content blocks
    - Add placeholder text for image-only tool results in Google/Anthropic
    - OpenAI providers send tool result + follow-up user message with images
    - Fix Anthropic JSON parsing for empty tool arguments
    - Add comprehensive tests for image-only and text+image tool results
    - Update README with tool result content blocks API
  • Search through all messages in session, not just first message
    - SessionManager now collects text from all user and assistant messages
    - Added allMessagesText field containing concatenated message text
    - Search now matches against all messages in a session
    - More powerful session discovery (e.g., search "write file" finds any session discussing file writing)
  • Add search, scrolling, spacing, and Ctrl+C exit to session selector
    - Add search input at top - filters sessions as you type
    - Add scrolling with max 5 visible sessions at a time
    - Add scroll indicator showing position (e.g., (3/15))
    - Add blank line spacing between session items
    - Ctrl+C now exits process (process.exit(0)) instead of canceling
    - Escape still cancels and returns to main menu
    - Enter in search box selects current session
  • Redesign session selector with multi-line layout
    - Custom SessionList component with 2 lines per item
    - First line: message text (bold when selected)
    - Second line: metadata (time · message count) in dim
    - Blue › cursor for selected item
    - Added "Resume Session" header
    - Handle Ctrl+C (‹x03›) in SelectList for consistency
    - Improved date formatting (38 minutes ago, 8 hours ago, etc.)
  • Fix session selector: handle Ctrl+C and viewport width
    - Add SIGINT handler to allow Ctrl+C to exit during session selection
    - Remove hardcoded 60-char truncation, let SelectList handle dynamic truncation
    - Simplify date format (5m, 2h, 3d instead of "5m ago")
    - Make metadata more compact (5msg instead of "5 msgs")
  • Add --resume flag with session selector
    - New SessionSelectorComponent to browse and select sessions
    - Lists sessions sorted by last modified date
    - Shows first message, created/modified dates, message count
    - Automatically truncates long messages and formats dates
    - Adds --resume/-r flag to CLI
    - Session selector integrates with main flow