Add DiffView, ConfirmDialog, ErrorDialog, and Progress components for enhanced terminal UI interactions.
20 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[0.12.0] - 2025-12-01 - TUI Advanced
Added
-
DiffView Component (0.12.1)
- Inline diff display with green (added) and red (removed) highlighting
- Header with file path and line range:
┌─── path (lines X-Y) ───┐ - Line numbers with proper padding
- Stats footer showing additions and deletions count
-
ConfirmDialog Component (0.12.2)
- Confirmation dialog with [Y] Apply / [N] Cancel / [E] Edit options
- Optional diff preview integration
- Keyboard input handling (Y/N/E keys, Escape)
- Visual selection feedback
-
ErrorDialog Component (0.12.3)
- Error dialog with [R] Retry / [S] Skip / [A] Abort options
- Recoverable vs non-recoverable error handling
- Disabled buttons for non-recoverable errors
- Keyboard input with Escape support
-
Progress Component (0.12.4)
- Progress bar display:
[=====> ] 45% (120/267 files) - Color-coded progress (cyan < 50%, yellow < 100%, green = 100%)
- Configurable width
- Label support for context
- Progress bar display:
Changed
- Total tests: 1254 (unchanged - TUI components excluded from coverage)
- TUI layer now has 8 components + 2 hooks
- All v0.12.0 roadmap items complete
[0.11.0] - 2025-12-01 - TUI Basic
Added
-
TUI Types (0.11.0)
TuiStatus: Status type for TUI display (ready, thinking, tool_call, awaiting_confirmation, error)BranchInfo: Git branch information (name, isDetached)AppProps: Main app component propsStatusBarData: Status bar display data
-
App Shell (0.11.1)
- Main TUI App component with React/Ink
- Session initialization and state management
- Loading and error screens
- Hotkey integration (Ctrl+C, Ctrl+D, Ctrl+Z)
- Session time tracking
-
StatusBar Component (0.11.2)
- Displays:
[ipuaro] [ctx: 12%] [project] [branch] [time] status - Context usage with color warning at >80%
- Git branch with detached HEAD support
- Status indicator with colors (ready=green, thinking=yellow, error=red)
- Displays:
-
Chat Component (0.11.3)
- Message history display with role-based styling
- User messages (green), Assistant messages (cyan), System messages (gray)
- Tool call display with parameters
- Response stats: time, tokens, tool calls
- Thinking indicator during LLM processing
-
Input Component (0.11.4)
- Prompt with
>prefix - History navigation with ↑/↓ arrow keys
- Saved input restoration when navigating past history
- Disabled state during processing
- Custom placeholder support
- Prompt with
-
useSession Hook (0.11.5)
- Session state management with React hooks
- Message handling integration
- Status tracking (ready, thinking, tool_call, error)
- Undo support
- Clear history functionality
- Abort/interrupt support
-
useHotkeys Hook (0.11.6)
- Ctrl+C: Interrupt (1st), Exit (2nd within 1s)
- Ctrl+D: Exit with session save
- Ctrl+Z: Undo last change
Changed
- Total tests: 1254 (was 1174)
- Coverage: 97.75% lines, 92.22% branches
- TUI layer now has 4 components + 2 hooks
- TUI excluded from coverage thresholds (requires React testing setup)
[0.10.0] - 2025-12-01 - Session Management
Added
-
ISessionStorage (0.10.1)
- Session storage service interface
- Methods: saveSession, loadSession, deleteSession, listSessions
- Undo stack management: pushUndoEntry, popUndoEntry, getUndoStack
- Session lifecycle: getLatestSession, sessionExists, touchSession
-
RedisSessionStorage (0.10.2)
- Redis implementation of ISessionStorage
- Session data in Redis hashes (project, history, context, stats)
- Undo stack in Redis lists (max 10 entries)
- Sessions list for project-wide queries
- 22 unit tests
-
ContextManager (0.10.3)
- Manages context window token budget
- File context tracking with addToContext/removeFromContext
- Usage monitoring: getUsage, getAvailableTokens, getRemainingTokens
- Auto-compression at 80% threshold via LLM summarization
- Context state export for session persistence
- 23 unit tests
-
StartSession (0.10.4)
- Use case for session initialization
- Creates new session or loads latest for project
- Optional sessionId for specific session loading
- forceNew option to always create fresh session
- 10 unit tests
-
HandleMessage (0.10.5)
- Main orchestrator use case for message handling
- LLM interaction with tool calling support
- Edit confirmation flow with diff preview
- Error handling with retry/skip/abort choices
- Status tracking: ready, thinking, tool_call, awaiting_confirmation, error
- Event callbacks: onMessage, onToolCall, onToolResult, onConfirmation, onError
- 21 unit tests
-
UndoChange (0.10.6)
- Use case for reverting file changes
- Validates file hasn't changed since edit
- Restores original content from undo entry
- Updates storage after successful undo
- 12 unit tests
Changed
- Total tests: 1174 (was 1086)
- Coverage: 97.73% lines, 92.21% branches
- Application layer now has 4 use cases implemented
- All planned session management features complete
[0.9.0] - 2025-12-01 - Git & Run Tools
Added
-
GitStatusTool (0.9.1)
git_status(): Get current git repository status- Returns branch name, tracking branch, ahead/behind counts
- Lists staged, modified, untracked, and conflicted files
- Detects detached HEAD state
- 29 unit tests
-
GitDiffTool (0.9.2)
git_diff(path?, staged?): Get uncommitted changes- Returns file-by-file diff summary with insertions/deletions
- Full diff text output
- Optional path filter for specific files/directories
- Staged-only mode (
--cached) - Handles binary files
- 25 unit tests
-
GitCommitTool (0.9.3)
git_commit(message, files?): Create a git commit- Requires user confirmation before commit
- Optional file staging before commit
- Returns commit hash, summary, author info
- Validates staged files exist
- 26 unit tests
-
CommandSecurity
- Security module for shell command validation
- Blacklist: dangerous commands always blocked (rm -rf, sudo, git push --force, etc.)
- Whitelist: safe commands allowed without confirmation (npm, node, git status, etc.)
- Classification:
allowed,blocked,requires_confirmation - Git subcommand awareness (safe read operations vs write operations)
- Extensible via
addToBlacklist()andaddToWhitelist() - 65 unit tests
-
RunCommandTool (0.9.4)
run_command(command, timeout?): Execute shell commands- Security-first design with blacklist/whitelist checks
- Blocked commands rejected immediately
- Unknown commands require user confirmation
- Configurable timeout (default 30s, max 10min)
- Output truncation for large outputs
- Returns stdout, stderr, exit code, duration
- 40 unit tests
-
RunTestsTool (0.9.5)
run_tests(path?, filter?, watch?): Run project tests- Auto-detects test runner: vitest, jest, mocha, npm test
- Detects by config files and package.json dependencies
- Path filtering for specific test files/directories
- Name pattern filtering (
-t/--grep) - Watch mode support
- Returns pass/fail status, exit code, output
- 48 unit tests
Changed
- Total tests: 1086 (was 853)
- Coverage: 98.08% lines, 92.21% branches
- Git tools category now fully implemented (3/3 tools)
- Run tools category now fully implemented (2/2 tools)
- All 18 planned tools now implemented
[0.8.0] - 2025-12-01 - Analysis Tools
Added
-
GetDependenciesTool (0.8.1)
get_dependencies(path): Get files that a specific file imports- Returns internal dependencies resolved to file paths
- Includes metadata: exists, isHub, isEntryPoint, fileType
- Sorted by path for consistent output
- 23 unit tests
-
GetDependentsTool (0.8.2)
get_dependents(path): Get files that import a specific file- Shows hub status for the analyzed file
- Includes metadata: isHub, isEntryPoint, fileType, complexityScore
- Sorted by path for consistent output
- 24 unit tests
-
GetComplexityTool (0.8.3)
get_complexity(path?, limit?): Get complexity metrics for files- Returns LOC, nesting depth, cyclomatic complexity, and overall score
- Summary statistics: high/medium/low complexity counts
- Average score calculation
- Sorted by complexity score descending
- Default limit of 20 files
- 31 unit tests
-
GetTodosTool (0.8.4)
get_todos(path?, type?): Find TODO/FIXME/HACK/XXX/BUG/NOTE comments- Supports multiple comment styles:
//,/* */,# - Filter by type (case-insensitive)
- Counts by type
- Includes line context
- 42 unit tests
Changed
- Total tests: 853 (was 733)
- Coverage: 97.91% lines, 92.32% branches
- Analysis tools category now fully implemented (4/4 tools)
[0.7.0] - 2025-12-01 - Search Tools
Added
-
FindReferencesTool (0.7.1)
find_references(symbol, path?): Find all usages of a symbol across the codebase- Word boundary matching with support for special characters (e.g.,
$value) - Context lines around each reference (1 line before/after)
- Marks definition vs usage references
- Optional path filter for scoped searches
- Returns: path, line, column, context, isDefinition
- 37 unit tests
-
FindDefinitionTool (0.7.2)
find_definition(symbol): Find where a symbol is defined- Uses SymbolIndex for fast lookups
- Returns multiple definitions (for overloads/re-exports)
- Suggests similar symbols when not found (Levenshtein distance)
- Context lines around definition (2 lines before/after)
- Returns: path, line, type, context
- 32 unit tests
Changed
- Total tests: 733 (was 664)
- Coverage: 97.71% lines, 91.84% branches
- Search tools category now fully implemented (2/2 tools)
[0.6.0] - 2025-12-01 - Edit Tools
Added
-
EditLinesTool (0.6.1)
edit_lines(path, start, end, content): Replace lines in a file- Hash conflict detection (prevents editing externally modified files)
- Confirmation required with diff preview
- Automatic storage update after edit
- 35 unit tests
-
CreateFileTool (0.6.2)
create_file(path, content): Create new file with content- Automatic directory creation if needed
- Path validation (must be within project root)
- Prevents overwriting existing files
- Confirmation required before creation
- 26 unit tests
-
DeleteFileTool (0.6.3)
delete_file(path): Delete file from filesystem and storage- Removes file data, AST, and meta from Redis
- Confirmation required with file content preview
- 20 unit tests
Changed
- Total tests: 664 (was 540)
- Coverage: 97.71% lines, 91.89% branches
- Coverage thresholds: 95% lines/functions/statements, 90% branches
[0.5.0] - 2025-12-01 - Read Tools
Added
-
ToolRegistry (0.5.1)
IToolRegistryimplementation for managing tool lifecycle- Methods:
register(),unregister(),get(),getAll(),getByCategory(),has() execute(): Tool execution with validation and confirmation flowgetToolDefinitions(): Convert tools to LLM-compatible JSON Schema format- Helper methods:
getConfirmationTools(),getSafeTools(),getNames(),clear() - 34 unit tests
-
GetLinesTool (0.5.2)
get_lines(path, start?, end?): Read file lines with line numbers- Reads from Redis storage or filesystem fallback
- Line number formatting with proper padding
- Path validation (must be within project root)
- 25 unit tests
-
GetFunctionTool (0.5.3)
get_function(path, name): Get function source by name- Uses AST to find exact line range
- Returns metadata: isAsync, isExported, params, returnType
- Lists available functions if target not found
- 20 unit tests
-
GetClassTool (0.5.4)
get_class(path, name): Get class source by name- Uses AST to find exact line range
- Returns metadata: isAbstract, extends, implements, methods, properties
- Lists available classes if target not found
- 19 unit tests
-
GetStructureTool (0.5.5)
get_structure(path?, depth?): Get directory tree- ASCII tree output with 📁/📄 icons
- Filters: node_modules, .git, dist, coverage, etc.
- Directories sorted before files
- Stats: directory and file counts
- 23 unit tests
Changed
- Total tests: 540 (was 419)
- Coverage: 96%+
[0.4.0] - 2025-11-30 - LLM Integration
Added
-
OllamaClient (0.4.1)
- Full
ILLMClientimplementation for Ollama SDK - Chat completion with tool/function calling support
- Token counting via estimation (Ollama has no tokenizer API)
- Model management:
pullModel(),hasModel(),listModels() - Connection status check:
isAvailable() - Request abortion support:
abort() - Error handling with
IpuaroErrorfor connection and model errors - 21 unit tests
- Full
-
System Prompt & Context Builder (0.4.2)
SYSTEM_PROMPT: Comprehensive agent instructions with tool descriptionsbuildInitialContext(): Generates compact project overview from structure and ASTsbuildFileContext(): Detailed file context with imports, exports, functions, classestruncateContext(): Token-aware context truncation- Hub/entry point/complexity flags in file summaries
- 17 unit tests
-
Tool Definitions (0.4.3)
- 18 tool definitions across 6 categories:
- Read:
get_lines,get_function,get_class,get_structure - Edit:
edit_lines,create_file,delete_file - Search:
find_references,find_definition - Analysis:
get_dependencies,get_dependents,get_complexity,get_todos - Git:
git_status,git_diff,git_commit - Run:
run_command,run_tests
- Read:
- Category groupings:
READ_TOOLS,EDIT_TOOLS, etc. CONFIRMATION_TOOLSset for tools requiring user approval- Helper functions:
requiresConfirmation(),getToolDef(),getToolsByCategory() - 39 unit tests
- 18 tool definitions across 6 categories:
-
Response Parser (0.4.4)
- XML tool call parsing:
<tool_call name="...">...</tool_call> - Parameter extraction from XML elements
- Type coercion: boolean, number, null, JSON arrays/objects
extractThinking(): Extracts<thinking>...</thinking>blockshasToolCalls(): Quick check for tool call presencevalidateToolCallParams(): Parameter validation against required listformatToolCallsAsXml(): Tool calls to XML for prompt injection- 21 unit tests
- XML tool call parsing:
Changed
- Total tests: 419 (was 321)
- Coverage: 96.38%
[0.3.1] - 2025-11-30
Added
- VERSION export - Package version is now exported from index.ts, automatically read from package.json via
createRequire
Changed
- 🔄 Refactored ASTParser - Reduced complexity and nesting depth:
- Extracted
extractClassHeritage(),parseHeritageClause(),findTypeIdentifier(),collectImplements()helper methods - Max nesting depth reduced from 5 to 4
- Extracted
- 🔄 Refactored RedisStorage - Removed unnecessary type parameter from
parseJSON()method
Quality
- ✅ Zero lint warnings - All ESLint warnings resolved
- ✅ All 321 tests pass
[0.3.0] - 2025-11-30 - Indexer
Added
-
FileScanner (0.3.1)
- Recursive directory scanning with async generator
.gitignoresupport viaglobby(replacedignorepackage for ESM compatibility)- Filters: binary files, node_modules, dist, default ignore patterns
- Progress callback for UI integration
isTextFile()andreadFileContent()static utilities- 22 unit tests
-
ASTParser (0.3.2)
- Tree-sitter based parsing for TS, TSX, JS, JSX
- Extracts: imports, exports, functions, classes, interfaces, type aliases
- Import classification: internal, external, builtin (using
node:modulebuiltinModules) - Graceful error handling with partial AST on syntax errors
- 30 unit tests
-
MetaAnalyzer (0.3.3)
- Complexity metrics: LOC (excluding comments), nesting depth, cyclomatic complexity, overall score
- Dependency resolution: internal imports resolved to absolute file paths
- Dependents calculation: reverse dependency lookup across all project files
- File type classification: source, test, config, types, unknown
- Entry point detection: index files, main/app/cli/server patterns, files with no dependents
- Hub detection: files with >5 dependents
- Batch analysis via
analyzeAll()method - 54 unit tests
-
IndexBuilder (0.3.4)
- SymbolIndex: maps symbol names to locations for quick lookup (functions, classes, interfaces, types, variables)
- Qualified names for class methods:
ClassName.methodName - DepsGraph: bidirectional import mapping (
importsandimportedBy) - Import resolution: handles
.js→.ts, index.ts, directory imports findSymbol(): exact symbol lookupsearchSymbols(): regex-based symbol searchfindCircularDependencies(): detect import cyclesgetStats(): comprehensive index statistics (symbols by type, hubs, orphans)- 35 unit tests
-
Watchdog (0.3.5)
- File watching with chokidar (native events + polling fallback)
- Debounced change handling (configurable, default 500ms)
- Event types: add, change, unlink
- Extension filtering (default: SUPPORTED_EXTENSIONS)
- Ignore patterns (default: DEFAULT_IGNORE_PATTERNS)
- Multiple callback support
flushAll()for immediate processing- Silent error handling for stability
- 21 unit tests
-
Infrastructure Constants
tree-sitter-types.ts: NodeType and FieldName constants for tree-sitter- Eliminates magic strings in ASTParser
-
Dependencies
- Added
globbyfor ESM-native file globbing - Removed
ignorepackage (CJS incompatibility with nodenext)
- Added
Changed
- Refactored ASTParser to use constants instead of magic strings
- Total tests: 321
- Coverage: 96.43%
[0.2.0] - 2025-01-30
Added
-
Redis Storage (0.2.x milestone)
- RedisClient: connection wrapper with AOF persistence configuration
- RedisStorage: full IStorage implementation with Redis hashes
- Redis key schema: project files, AST, meta, indexes, config
- Session keys schema: data, undo stack, sessions list
generateProjectName()utility for consistent project naming
-
Infrastructure Layer
src/infrastructure/storage/module- Exports via
src/infrastructure/index.ts
-
Testing
- 68 new unit tests for Redis module
- 159 total tests
- 99% code coverage maintained
Changed
- Updated ESLint config:
@typescript-eslint/no-unnecessary-type-parametersset to warn
Notes
Redis Storage milestone complete. Next: 0.3.0 - Indexer (FileScanner, AST Parser, Watchdog)
[0.1.0] - 2025-01-29
Added
-
Project Setup
- package.json with all dependencies (ink, ioredis, tree-sitter, ollama, etc.)
- tsconfig.json for ESM + React JSX
- tsup.config.ts for bundling
- vitest.config.ts with 80% coverage threshold
- CLI entry point (bin/ipuaro.js)
-
Domain Layer
- Entities: Session, Project
- Value Objects: FileData, FileAST, FileMeta, ChatMessage, ToolCall, ToolResult, UndoEntry
- Service Interfaces: IStorage, ILLMClient, ITool, IIndexer
- Constants: supported extensions, ignore patterns, context limits
-
Application Layer
- IToolRegistry interface
- Placeholder structure for use cases and DTOs
-
Shared Module
- Config schema with Zod validation
- Config loader (default.json + .ipuaro.json)
- IpuaroError class with typed errors
- Utility functions: md5 hash, token estimation
- Result type for error handling
-
CLI
- Basic commands: start, init, index (placeholders)
- Commander.js integration
-
Testing
- 91 unit tests
- 100% code coverage
Notes
This is the foundation release. The following features are planned for upcoming versions:
- 0.2.0: Redis Storage
- 0.3.0: Indexer
- 0.4.0: LLM Integration
- 0.5.0+: Tools implementation
- 0.10.0+: TUI and session management