feat: implement hooks, plugins, session forks, and vim motions

Add 4 major features to codetyper-cli:

- Hooks System: Lifecycle hooks (PreToolUse, PostToolUse, SessionStart,
  SessionEnd, UserPromptSubmit, Stop) with exit code control flow
- Plugin System: Custom tools, commands, and hooks via plugin manifest
- Session Forking: Snapshots, rewind, fork, and switch between branches
- Vim Motions: Normal/Insert/Command/Visual modes with keyboard navigation

New files:
- src/types/{hooks,plugin,session-fork,vim}.ts
- src/constants/{hooks,plugin,session-fork,vim}.ts
- src/services/{hooks-service,plugin-loader,plugin-service,session-fork-service}.ts
- src/stores/vim-store.ts (vanilla)
- src/tui/hooks/{useVimMode,useVimStore,useTodoStore,useThemeStore}.ts
- src/tui/components/VimStatusLine.tsx

Modified:
- src/services/agent.ts (hook integration)
- src/tools/index.ts (plugin tool registration)
- src/stores/{todo-store,theme-store}.ts (converted to vanilla)
- TUI components (updated hook imports)
This commit is contained in:
2026-01-31 22:22:04 -05:00
parent 37d4a43154
commit a3c407d89a
56 changed files with 7507 additions and 90 deletions

View File

@@ -9,6 +9,38 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added
- **Hooks System**: Lifecycle hooks for extensibility
- 6 hook events: PreToolUse, PostToolUse, SessionStart, SessionEnd, UserPromptSubmit, Stop
- Exit code control flow (0=allow, 1=warn, 2=block)
- JSON input/output via stdin/stdout
- Modified arguments via `updatedInput`
- Global + local configuration support
- Configurable timeout per hook
- **Plugin System**: Custom tools, commands, and hooks
- Plugin manifest with version and capabilities
- Custom tool definitions via TypeScript
- Custom slash commands via Markdown with frontmatter
- Plugin-specific hooks
- Global (~/.config/codetyper/plugins/) + local (.codetyper/plugins/)
- Dynamic tool/command registration
- **Session Forking/Rewind**: Branch and time-travel session history
- Named snapshots at any point in conversation
- Rewind to any snapshot by name or index
- Fork branches from any snapshot
- Switch between forks
- Suggested commit messages based on session content
- Commands: /snapshot, /rewind, /fork, /forks, /switch
- **Vim Motions**: Vim-style keyboard navigation
- 4 modes: Normal, Insert, Command, Visual
- Scroll navigation (j/k, gg/G, Ctrl+d/u)
- Search with highlighting (/, n/N)
- Command mode (:q, :w, :wq, :nohl)
- Mode indicator in status line
- Configurable via settings.json
- **Home Screen**: New welcome screen with centered gradient logo
- Displays version, provider, and model info
- Transitions to session view on first message