Commit Graph

180 Commits

Author SHA1 Message Date
can1357 21af96d890 fix: added Cursor OAuth provider and fixed authentication flow race conditions
- Added Cursor OAuth provider support to CLI authentication flow.
- Fixed race conditions in OAuth callback handling and session picker cleanup.
- Improved JWT token parsing and error handling across OAuth providers.
- Replaced Bun.sleep() with abortable sleep for proper cancellation support.
- Enhanced process execution with concurrent stream reading and better timeout handling.
- Added cache cleanup mechanism for auth storage with 5-minute intervals.
2026-01-20 19:50:50 +01:00
can1357 b2c94bef1a refactor(deps): restructured codebase to use centralized pi-utils package
- Created new @oh-my-pi/pi-utils workspace package with shared utilities for logging, process management, stream handling, and temporary directory management.
- Migrated all packages to use centralized logger from @oh-my-pi/pi-utils instead of local winston implementations.
- Replaced custom process spawning and stream reading implementations with standardized cspawn and readLines utilities across all modules.
- Converted synchronous file operations and process spawning to async patterns using Bun shell syntax and fs/promises.
- Added streaming edit abort functionality with configurable setting to abort on patch preview failures.
- Updated test framework from vitest to bun:test across all test suites.
2026-01-20 05:33:21 +01:00
can1357 d620f07c1e feat(coding-agent/core): added Python gateway coordinator with shared resource management
- Added shared Python gateway coordinator with file locking and automatic resource management.
- Added comprehensive Git helpers and line-based operations to Python prelude.
- Enhanced /status command to display Python gateway, LSP servers, and MCP connections.
- Changed default Python tool mode from ipy-only to both for shell execution support.
- Fixed Python tool proxy execution and signal handling in worker processes.
2026-01-18 19:54:35 +01:00
can1357 ac151519c1 feat: port upstream changes from pi-mono (72047c05..55769e75)
AI provider fixes:
- Fixed Claude tool prefix matching and Gemini 3 unsigned tool handling
- Added Bedrock thinking budget guardrails and tool id sanitization
- Added tool argument coercion and Codex response retry logic

TUI improvements:
- Improved Kitty key handling and editor behavior (scrolling, padding, kill ring)

Coding agent changes:
- Added extension input interception, compaction helpers, and UI updates
- Added session forking prompt for cross-project sessions
- Added APPEND_SYSTEM discovery, piped stdin print mode, and key hint exports

Docs:
- Updated pi-mono sync point
2026-01-18 17:52:58 +01:00
can1357 f1d71fbd9d feat: implemented Emacs-style kill ring with Alt+D and Ctrl+Y bindings
- Added automatic retry logic for OpenAI Codex responses with configurable delay and max retries.
- Added input event handlers for extensions to intercept user input and argument completion support.
- Added Emacs-style kill ring for text deletion operations with Alt+D and Ctrl+Y keybindings.
- Added configurable editor padding via editorPaddingX theme option and setMaxHeight() method.
- Fixed tool prefix handling in Claude provider to use case-insensitive comparison.
- Enhanced Kitty keyboard protocol support for better key detection and shifted symbol handling.
2026-01-18 17:12:18 +01:00
can1357 591c17e645 chore(coding-agent): set initial terminal title to π 2026-01-14 08:56:49 +01:00
can1357 976acd10bf feat(coding-agent/core): added multi-part questions support and improved cursor behavior in ask tool
- Added multi-part questions support to ask tool via questions array parameter for asking multiple related questions in sequence.
- Updated multi-select cursor behavior in ask tool to stay on toggled option instead of jumping to top.
- Added initialIndex parameter to ExtensionUIDialogOptions interface for controlling initial cursor position in select dialogs.
- Extracted question selection logic into askSingleQuestion helper function with UIContext interface.
- Added formatQuestionResult helper function and QuestionResult interface for multi-part question results.
- Updated ask tool prompt documentation with multi-part questions examples and Other option guidance.
2026-01-12 08:39:27 +01:00
can1357 66ea245f2d fix(tui): reload todos when switching sessions or navigating tree 2026-01-12 07:15:39 +01:00
can1357 7f459214c1 fix(tui): align todo list 'more' indicator with item indentation 2026-01-12 07:09:12 +01:00
can1357 741ab06ed2 feat: port upstream improvements from pi-mono (f1b64b9d..6730b4fa)
TUI:
- Add fuzzy matching module (moved from coding-agent)
- Remove Kitty protocol query timeout (fixes shift+enter delays)
- Add bracketed paste check for key release/repeat detection
- Rendering optimizations (only re-render changed lines)
- Add backslash+enter newline fallback, getExpandedText()
- Refactor input.ts to use keybindings manager

Coding-agent:
- Add /skill:name slash commands with enableSkillCommands setting
- Add cwd to SessionInfo for session list display
- Improve tree selector with custom summarization instructions
- Add dequeue (Alt+Up) to restore all queued messages at once
- Add shutdown request handling for extensions
- Component invalidate() fixes for theme changes
2026-01-12 03:18:30 +01:00
can1357 03876d0360 feat(coding-agent): added todo_write tool, persistent todo panel, grouped Read display, and refactored prompts
- Added todo_write tool for creating and managing structured task lists during coding sessions.
- Added persistent todo panel above the editor that displays task progress with Ctrl+T toggle.
- Added grouped display for consecutive Read tool calls in a compact tree view.
- Changed system prompt to use more direct, field-oriented language with emphasis on verification and assumptions.
- Changed Ctrl+Enter to insert newline when not streaming, and Ctrl+T from toggling thinking blocks to toggling todo list.
- Replaced yaml package dependency with Bun's built-in YAML parser and extracted frontmatter parsing to dedicated module.
2026-01-11 23:33:27 +01:00
can1357 c11b2f9058 feat(coding-agent): added grouped display and compact tree view for consecutive Read tool calls
- Added grouped display for consecutive Read tool calls, showing multiple file reads in a compact tree view.
- Changed Read tool result display to hide content by default, showing only file path and status.
- Changed expand hint text from 'Ctrl+O to expand' to 'Ctrl+O for more'.
- Added ReadToolGroupComponent class to group multiple Read tool executions together in a single display.
- Renamed getStyledStatusIcon to formatStatusIcon for consistency with other format functions.
- Refactored formatExpandHint function signature to put theme parameter first and make expanded/hasMore optional.
2026-01-11 16:23:42 +01:00
can1357 e6d33e0a48 feat(coding-agent): converted capability loading and discovery providers to async APIs with caching fs layer
- Converted SettingsManager.create(), loadSettings(), discoverSkills(), loadSlashCommands(), buildSystemPrompt(), loadSkills(), loadProjectContextFiles(), and getShellConfig() from synchronous to asynchronous APIs.
- Changed capability provider load() method from supporting both sync and async to async-only by removing loadSync().
- Removed fs property from LoadContext interface in capability types.
- Added new fs.ts module with caching layer for filesystem operations using readFile, readDirEntries, readDir, walkUp, and cache management functions.
- Refactored all discovery providers (builtin, claude, cline, codex, cursor, gemini, github, mcp-json, ssh, vscode, windsurf) to use async file operations with Promise.all for parallel loading.
2026-01-11 04:26:43 +01:00
can1357 0729d340b7 fix(coding-agent): repaired autocomplete cancel redraw 2026-01-11 00:50:48 +01:00
can1357 1c93809f59 feat(coding-agent): added /dump command for clipboard transcript export
- Added new `/dump` slash command to copy full session transcript to clipboard.
- Separated `/export` and `/dump` commands with distinct responsibilities, removing clipboard copy functionality from `/export`.
- Implemented handleDumpCommand() method in command controller to manage clipboard operations independently.
2026-01-11 00:31:23 +01:00
can1357 24f0e41db7 refactor(interactive): restructured interactive-mode.ts into separate controller and utility classes
- Extracted CommandController class handling slash commands and user-initiated actions from interactive-mode.ts.
- Extracted EventController class handling AgentSessionEvent processing from interactive-mode.ts.
- Extracted ExtensionUiController class managing TUI-based UI context for extensions and hooks from interactive-mode.ts.
- Extracted InputController class handling keyboard input and editor interactions from interactive-mode.ts.
- Extracted SelectorController class managing UI selector components from interactive-mode.ts.
- Extracted UiHelpers and VoiceManager utility classes from interactive-mode.ts.
2026-01-11 00:05:34 +01:00
can1357 6797ad08cd feat(coding-agent): added custom share script support, renamed Glob to Find, improved prompts and docs
- Added custom share script support at ~/.omp/agent/share.ts to replace default GitHub Gist sharing.
- Renamed Glob tool to Find tool throughout prompts and documentation.
- Updated project context formatting to use XML-style tags for clearer structure.
- Refined bash tool guidance to prefer dedicated tools over bash for file operations.
- Updated system prompt with clearer tone guidelines emphasizing directness and conciseness.
- Enhanced verification guidance to prefer external feedback loops like tests and linters.
2026-01-10 23:04:38 +01:00
can1357 691b65d953 feat(coding-agent): added persistent prompt history with SQLite FTS5 storage and Ctrl+R search
- Added persistent prompt history with SQLite-backed storage using FTS5 for efficient text searching.
- Added Ctrl+R keybinding to search through prompt history in interactive mode.
- Added HistoryStorage class with singleton pattern, deduplication, and prepared statements for database operations.
- Added HistorySearchComponent with scrollable results list, keyboard navigation, and selection highlighting.
- Added setHistoryStorage() method to Editor class for saving and restoring history across sessions.
2026-01-10 18:48:17 +01:00
can1357 48a9900784 feat: added extension UI customization APIs, SDK exports, CLI flags, and fixed clipboard/resize bugs
- Added setFooter(), setHeader(), and setEditorComponent() methods to ExtensionUIContext for custom UI components.
- Exported InteractiveModeOptions type and numerous UI components for programmatic SDK usage.
- Added --no-tools flag to disable all built-in tools and --no-extensions flag to disable extension discovery.
- Changed bash tool output truncation to recalculate on terminal resize instead of using cached width.
- Fixed Wayland clipboard copy (wl-copy) no longer blocking when the process doesn't exit promptly.
- Updated model pricing and renamed nex-agi/deepseek-v3.1-nex-n1 model removing :free suffix.
2026-01-10 07:11:01 +01:00
can1357 100061accb chore: merged in upstream changes
- Added ExtensionRuntime shared state with async extension factory support
- Introduced pluggable tool operations (BashOperations, FileOperations, etc.) for remote execution
- Added new CLI flags: --no-tools, --no-extensions, --no-skills
- Added login dialog, countdown timer, and component barrel export
- Added blockImages and thinkingBudgets settings
- Refactored stdin handling with StdinBuffer for improved key parsing
- Updated DEVELOPMENT.md with new architecture documentation
2026-01-10 06:32:51 +01:00
can1357 020beb5616 feat(coding-agent): added calc tool, multi-credential round-robin, auth.json file locking, clickable OAuth URLs
- Added calc tool supporting basic mathematical calculations with arithmetic operators, parentheses, and hex/binary/octal literals.
- Added support for multiple API credentials per provider with round-robin distribution across sessions.
- Added file locking on auth.json to prevent concurrent write corruption.
- Added clickable OAuth login URL display in terminal with plain text fallback.
- Updated ask tool prompt to emphasize exhausting other options before asking users.
- Refactored OAuth credential storage to append new credentials instead of replacing existing ones.
2026-01-10 03:36:25 +01:00
can1357 f8775c4b0a fix(coding-agent): fixed completion notification to only send when interactive mode is in foreground
- Fixed completion notification to only send when interactive mode is in foreground.
- Improved completion notification message to include session title when available.
2026-01-10 02:21:54 +01:00
can1357 6e7ca2fc14 feat(coding-agent): added retry logic with exponential backoff
- Added retry logic with exponential backoff and model fallback for auto-compaction failures.
- Added support for pi/<role> model aliases and automatic model inheritance for subtasks.
- Enhanced error messages with retry-after timing from rate limit headers across all providers.
- Fixed image attachments being dropped when steering messages are queued during streaming.
- Changed edit tool to merge call and result displays into single block.
- Changed model override behavior to persist in settings when explicitly set via CLI.
2026-01-10 00:43:56 +01:00
can1357 86ef2bd34b chore: bump version to 3.34.0 2026-01-09 12:17:04 +01:00
can1357 5a63120dd3 feat(ai): add @oh-my-pi/pi-ai package with tool name prefixing
- Port pi-ai from upstream with Bun-first approach (source files, no dist)
- Add cli_ prefix to tool names in OAuth mode to avoid collisions
- Improve beta header handling with proper deduplication
- Convert codex-instructions.md to Bun text embed
- Strip .js extensions from all imports
2026-01-09 12:10:03 +01:00
can1357 7740b3ad47 feat(coding-agent): added env vars, file mention validation, and model fallback logic
- Added environment variable management via settings.json with applyEnvironmentVariables() and related methods.
- Enhanced file mentions to support directories, validate boundaries, and truncate large files.
- Added fallback model candidate logic in title generator to retry on model failures.
- Fixed bash output preview to minify JSON content and skip structural-only lines.
- Added Cerebras provider support with thinking block filtering and zai-glm-4.6 model priority.
- Refactored tree rendering to use consistent theme.tree properties instead of boxSharp.
2026-01-08 14:10:01 +01:00
can1357 8aeabdc797 feat(coding-agent): added LSP warmup timeout and bundled /init command
- Added progress indicator callback when starting LSP servers at session startup.
- Added bundled /init slash command available by default without requiring user configuration.
- Added 5-second timeout for LSP server warmup with lazy initialization fallback.
- Added configurable timeout parameters to LSP client initialization and request methods.
- Refactored slash command loading to use parseCommandTemplate helper and merge embedded commands.
2026-01-08 06:49:18 +01:00
can1357 d11ccd2e93 feat(coding-agent): added temp model controls and auto-chdir 2026-01-08 02:51:29 +01:00
can1357 02cae69bb5 feat: added session storage abstraction and configurable bash interceptor rules
- Added in-memory session storage abstraction with SessionStorage interface and MemorySessionStorage implementation.
- Added configurable bash interceptor rules with pattern-based command interception settings.
- Added AbortSignal support to 80+ web scrapers for request cancellation.
- Changed task tool to require explicit task `id` field and single `agent` parameter at top level.
- Removed `submit_review` tool - reviewers now use `complete` tool with structured output.
- Replaced Date.now() and crypto.randomUUID() with nanoid() for unique ID generation throughout codebase.
2026-01-07 23:17:09 +01:00
can1357 5919b0df94 refactor: switched to upstream @mariozechner/pi-ai and removed unused packages
- Replaced local @oh-my-pi/pi-ai with upstream @mariozechner/pi-ai@0.37.4
- Added sessionId support to agent for provider caching (OpenAI Codex)
- Deleted packages/ai (now using upstream)
- Deleted packages/mom (unused)
- Deleted packages/web-ui (unused)
2026-01-06 22:25:24 +00:00
can1357 6f128238f3 feat(coding-agent): added configurable sub-providers and fixed a few
- Added webSearchProvider, imageProvider, and git.enabled settings for configurable provider selection and feature toggles.
- Added offset and limit parameters to Output tool for paginated reading of large outputs.
- Added provider fallback chain for web search with WebSearchProviderError class for graceful degradation.
- Changed generate_image tool to save images to temp files instead of inline base64 to reduce context bloat.
- Changed web search default model from claude-sonnet-4-5-20250514 to claude-haiku-4-5.
- Added git command interception in bash to redirect to dedicated git tool when enabled.
2026-01-06 22:16:24 +00:00
can1357 ca03a5e075 feat(coding-agent): added ImageMagick fallback for image ops when sharp unavailable
- Added ImageMagick fallback for image processing when sharp is unavailable.
- Added image-magick utility module with detection, conversion, and resize functions.
- Changed web_fetch tool label from 'web_fetch' to 'Web Fetch'.
- Updated image-convert and image-resize to use ImageMagick fallback instead of failing or returning original.
2026-01-06 22:04:24 +00:00
can1357 3536e2aaaa feat(coding-agent): added branch summaries setting to disable prompt
Branch summary prompts when navigating away from a branch are now
controlled by a setting (disabled by default). Enable in Settings →
Config → "Branch summaries" to restore the previous prompting behavior.
2026-01-06 21:58:24 +00:00
can1357 15fbe228b3 feat(monorepo): merged codex providers and extensions 2026-01-05 15:37:44 +01:00
can1357 44b10b12d5 feat(coding-agent): added background execution with terminal notifications
- Added /background (or /bg) command to detach UI and continue agent execution in background.
- Added completion notification system with configurable methods (bell, osc99, osc9, auto, off).
- Added completionNotification setting and OMP_NOTIFICATIONS environment variable for notification control.
- Added terminal-notify module with protocol detection for terminal emulator notifications.
2026-01-05 15:37:44 +01:00
can1357 2baae16a34 fix(coding-agent): made browser opening cross-platform and non-failing
- Windows uses cmd /c start instead of raw start (shell builtin)
- macOS uses open, Linux uses xdg-open
- Wrapped in try-catch to fail silently when unavailable
2026-01-05 15:37:44 +01:00
can1357 8b38705146 feat(coding-agent): implemented OpenAI Realtime API voice mode
- Added VoiceSupervisor and VoiceController classes for realtime voice mode using OpenAI Realtime API.
- Added echo suppression, noise floor filtering, and fallback transcript handling for voice input.
- Changed voice mode toggle from Caps Lock to Ctrl+Y with auto-send on silence behavior.
- Changed default TTS model from gpt-4o-mini-tts to tts-1.
- Added kwaipilot/kat-coder-pro model and removed deprecated OpenRouter models.
2026-01-05 15:11:28 +01:00
can1357 f5251cce30 refactor(coding-agent): removed pendingVoiceResponses counter
- Removed pendingVoiceResponses counter to simplify voice response handling logic.
2026-01-05 08:12:58 +01:00
can1357 40586a8919 feat: added voice mode with push-to-talk for hands-free interaction
- Added voice mode with Caps Lock push-to-talk for speech-to-text and text-to-speech using OpenAI APIs.
- Added voice settings configuration for transcription model, TTS model, voice selection, and audio format.
- Added description field to task tool for user-facing progress summaries in subagent spawning.
- Added isCapsLock helper function to tui package for Kitty protocol key detection.
- Added getApiKeyForProvider() method to ModelRegistry for retrieving API keys by provider name.
2026-01-05 08:11:18 +01:00
can1357 36db3ff6fc feat(tui): added hardware cursor support for native terminal blinking
- Added terminal cursor mode support to Editor component with setUseTerminalCursor() and getCursorPosition() methods.
- Added getCursorPosition() method to Component interface and Container class for cursor position aggregation.
- Added hardware cursor positioning and visibility management to TUI class with change detection.
- Enabled terminal cursor mode in HookEditorComponent and CustomEditor for proper cursor blinking.
2026-01-05 05:16:39 +01:00
can1357 7f68705afa fix(coding-agent): corrected bash spinner syntax and removed redundant metadata
- Fixed string interpolation syntax error in bash execution spinner text.
- Removed redundant line count display from file read tool output metadata.
2026-01-05 04:32:22 +01:00
can1357 fa726683b1 fix(coding-agent): used theme ellipsis in loading animation text
Replaced hardcoded "..." with theme.format.ellipsis in the "Working..."
loading message for consistent styling. Fixed template literal syntax.
2026-01-05 04:23:15 +01:00
can1357 f3bc4db78a feat(coding-agent): registered session flush in async cleanup registry
InteractiveMode now registers sessionManager.flush() with the async cleanup
registry, ensuring pending writes are flushed on SIGINT/SIGTERM/SIGHUP.
2026-01-05 04:22:00 +01:00
can1357 fd67003028 feat(coding-agent): added streaming persistence with backpressure control
- Added streaming NDJSON writer with backpressure handling for session persistence.
- Added SessionManager.flush() method for explicit write synchronization before session operations.
- Added content truncation for oversized blocks (500K char limit) to prevent memory exhaustion.
- Replaced synchronous file appends with streaming NDJSON writer in session persistence.
2026-01-05 02:23:36 +01:00
can1357 f693c285ef feat(coding-agent): added /exit command for interactive mode termination
- Added /exit slash command to exit the application from interactive mode.
2026-01-05 02:20:46 +01:00
can1357 9b7596c4aa feat(coding-agent): added theme system with 30+ presets and status line editor
- Added 30+ built-in color themes and comprehensive symbol customization via theme presets and overrides.
- Added status line segment editor with presets, separators, and customizable left/right segments.
- Added Biome CLI-based linter client as alternative to LSP for diagnostics and formatting.
- Added 20MB file size limit for image files to prevent memory issues during serialization.
- Replaced hardcoded Unicode symbols throughout codebase with theme-configurable symbol system.
2026-01-05 00:57:16 +01:00
can1357 b0ce4696ae fix(coding-agent): resolved status line not updating after new session
- Fixed status line not updating token counts and cost after starting a new session.
2026-01-04 16:12:01 +01:00
can1357 eba38cfa6e feat(coding-agent): introduced powerline status bar with git integration
- Replaced FooterComponent with new StatusLineComponent featuring powerline-style segments and Nerd Font icons.
- Added git branch detection with file watching and status tracking with 1-second TTL cache.
- Added setTopBorder() method to Editor component for custom status content in top border.
- Changed Editor component to use rounded box-drawing characters for borders.
- Renamed footer theme properties to statusLine prefix across dark and light themes.
2026-01-04 15:24:39 +01:00
can1357 c711092c6f feat(coding-agent): added auto-open browser for HTML export and Gist sharing
- Added automatic browser opening after exporting session to HTML.
- Added automatic browser opening after sharing session as a Gist.
- Extracted browser-opening logic into reusable openInBrowser method.
2026-01-04 14:20:47 +01:00
can1357 47837a0fa7 feat(coding-agent): introduced LSP writethrough for unified file operations
- Added createLspWritethrough factory for unified LSP-aware file write operations with formatting and diagnostics.
- Added syncContent and notifySaved LSP client methods for in-memory content synchronization.
- Added EditMatchError class and utils module with once and untilAborted helper functions.
- Changed FileDiagnosticsResult interface: renamed diagnostics->messages, hasErrors->errored, serverName->server.
- Changed session title generation to trigger before first message instead of after agent work begins.
- Simplified edit and write tools by delegating to writethrough callback and removing manual abort handling.
2026-01-04 02:23:00 +01:00