Commit Graph
3029 Commits
Author SHA1 Message Date
can1357 fa375d6eaa refactor: restructured chunk region notation from @head/@body/@tail/@decl to ^/~ suffix format
- Simplified chunk region notation from @head/@body/@tail/@decl to ^/~ suffix format across all modules.
- Removed ChunkRegion::Tail and ChunkRegion::Decl enum variants and updated region matching logic accordingly.
- Added call-with-callback pattern detection via try_promote_call_with_callback() and trailing_callback_body() functions.
- Updated documentation and test fixtures to reflect new region selector syntax throughout codebase.
2026-04-10 17:27:49 +02:00
can1357 4a1ca64a7b docs(chunk): documented chunk-edit region semantics with table format and examples
- Restructured chunk-edit region documentation into table format for clarity and scannability.
- Clarified region semantics with concrete examples and consolidated redundant explanations.
2026-04-10 16:24:55 +02:00
can1357 bb550efc6b chore: cleaned up documentation, test infrastructure, and dependencies across tooling
- Enhanced chunk-edit tool documentation with clarifications on @decl region behavior and guidance for attribute/decorator modifications.
- Improved chunk edit implementation to handle @body region scanning and markdown blank-line preservation with additional test coverage.
- Added oracle model review synthesis to rate-edit-tool.py for aggregating findings across multiple model reviews.
- Updated test infrastructure to run TypeScript and Rust tests in parallel using cargo nextest with improved logging control.
- Updated TypeScript dependencies including @typescript/native-preview and typescript to latest versions.
2026-04-10 15:53:41 +02:00
can1357 476a689c6f refactor(coding-agent): migrated session cleanup to async iterator pattern
- Extracted `raceWithAbort()` utility to pi-utils package for reuse across projects.
- Replaced local `raceAbort()` implementation with imported `raceWithAbort()` from pi-utils.
- Refactored cleanup timer to use async iterator pattern with `timers.setInterval()` instead of callback-based `setInterval()`.
- Converted `#cleanupIdleSessions()` and `#disposeSession()` from async to synchronous methods with async cleanup loop delegated to `#runCleanupLoop()`.
2026-04-10 15:04:46 +02:00
can1357 f4b6b32262 refactor(modes): restructured event controller into dedicated handler methods for type safety
- Extracted large switch statement into 16 dedicated event handler methods for improved maintainability and type safety.
- Introduced AgentSessionEventHandlers type and handler dispatch map to enable compile-time verification of event coverage.
2026-04-10 14:49:06 +02:00
can1357 d60ee622a4 refactor: restructured hash API and cache tracking across TypeScript and Rust
- Migrated hash API calls from Bun.hash.xxHash64() to Bun.hash() across TypeScript packages for simplified hash generation.
- Consolidated mermaid cache failure tracking by replacing separate failed Set with null values in cache Map.
- Refactored schema-based child extraction in Rust by introducing promotion_fields tracking and schema_wrapper_child() helper function.
- Updated TypeScript configuration files with reformatted arrays and added compiler options for consistency.
2026-04-10 14:26:06 +02:00
can1357 b60c0cc3ce refactor: migrated tab width resolution to pi-utils with EditorConfig caching
- Extracted tab width resolution from pi-natives to pi-utils with EditorConfig caching support.
- Made tabWidth parameter required in native text functions (visibleWidth, truncateToWidth, wrapTextWithAnsi, sliceWithWidth, extractSegments).
- Removed process-wide tab width state management from pi-natives text module.
- Consolidated wrapper node promotion logic in chunk classification with abbreviated string representations.
- Removed path-clean and pathdiff dependencies from pi-natives.
- Updated all consuming packages to import tab width functions from pi-utils and pass explicit tabWidth parameters.
2026-04-10 14:18:36 +02:00
can1357 0e5dfd542b chore: bump version to 14.0.4 2026-04-10 13:34:27 +02:00
can1357 6bf09bedb0 refactor(chunk): restructured language classifiers to declarative rule tables
- Migrated language classifiers from imperative methods to declarative semantic rule tables with ClassifierTables and StructuralOverrides.
- Extracted node shape analysis into dedicated shape module with field priority constants and helper functions for AST traversal.
- Added schema module with language-aware node metadata and thread-local language context management.
- Centralized environment variable parsing across codebase using $flag(), $envpos(), and isBunTestRuntime() utilities.
- Added PI_CHUNK_AUTOINDENT configuration to control indentation normalization in chunk read/edit operations.
- Enhanced system prompt with instruction priority, output contract, tool persistence, and completeness guidelines.
2026-04-10 13:33:00 +02:00
can1357 55e27e842e refactor(coding-agent): extracted language detection into dedicated module
- Extracted language detection logic into dedicated module for reusability across LSP and theme subsystems.
- Unified extension-to-language mapping with dual identifiers (highlight and LSP) to eliminate duplication.
- Consolidated detectLanguageId and getLanguageFromPath into single source of truth in lang-from-path module.
2026-04-10 10:42:50 +02:00
can1357 5fb98634b1 feat: implemented merge conflict detection and resolution API for chunk state
- Added merge conflict detection and resolution API with hasConflicts() and conflictCount() methods to ChunkState.
- Implemented conflict marker parsing supporting standard and diff3-style formats with accept_ours() resolution.
- Extended ChunkKind enum with Hunk, Conflict, Ours, and Theirs variants for diff and merge conflict representation.
- Added virtual_content field to ChunkNode for rendering conflict branches and improved diff parsing with block-level file chunk handling.
- Implemented conflict metadata tracking across edits with validation preventing direct modifications to virtual conflict branches.
2026-04-10 07:44:12 +02:00
can1357 e102958f06 fix(edit): corrected hashlineParseText to handle undefined values
- Extended hashlineParseText to accept undefined in addition to null, preventing type errors when undefined is passed.
- Updated null check to use loose equality (==) to handle both null and undefined cases.
2026-04-09 20:13:58 +02:00
can1357 fa12644267 chore: bump version to 14.0.3 2026-04-09 20:03:21 +02:00
can1357 5d48656544 revert: restructured indentation from tab-based to space-based representation
This reverts commit 29376dac2b.
2026-04-09 20:02:57 +02:00
Can BölükandGitHub 77075ca406 Merge pull request #649 from bobags2/fix/ollama-use-openai-responses-api
fix: use OpenAI Responses API for Ollama instead of Completions
2026-04-09 19:27:17 +02:00
can1357 c0ba48cb68 fix(coding-agent): normalize cached Ollama discovery transport 2026-04-09 18:57:52 +02:00
can1357 a9e0f02657 refactor(review): render extra instructions from template 2026-04-09 18:57:51 +02:00
bobags2andcan1357 ff3cf964e8 fix: use OpenAI Responses API for Ollama instead of Completions
Ollama has supported the OpenAI Responses API since v0.6+. The Completions
stream is prone to stalling errors ("OpenAI completions stream stalled while
waiting for the next event"), especially with tool calls. The Responses API
is more robust and supports the same features.

Changes:
- pi-ai/openai-compat.ts: Changed ollamaModelManagerOptions() and
  fetchOllamaNativeModels() to use api: "openai-responses" instead
  of "openai-completions"
- coding-agent/model-registry.ts: Changed implicit ollama discovery
  provider from "openai-completions" to "openai-responses"

Users with existing model caches should clear them after upgrading
(e.g. delete the ollama entry from ~/.omp/agent/models.db).
2026-04-09 18:47:09 +02:00
Miroslav Drbalandcan1357 93f7953603 feat(review): support inline custom instructions in /review command
Pass args directly to /review to append them as additional instructions
to the generated prompt for all structured review modes (PR-style,
uncommitted, specific commit). When inline args are present, option 4
(custom editor) is suppressed from the menu. The no-UI (Task tool) path
forwards args as a focus hint.

Adds appendInstructions() helper to centralize the prompt append format.
2026-04-09 18:47:08 +02:00
Can BölükandGitHub d6993d0029 Merge pull request #648 from sundbp/session-observer-tmux-fix
fix(coding-agent): stop repetitive scrolling in session observer viewer
2026-04-09 18:44:38 +02:00
Can BölükandGitHub 1aa21a368a Merge pull request #646 from Blues-star/fix/windows-lsp-local-bin-detection
fix: TypeScript LSP detection on Windows
2026-04-09 18:44:30 +02:00
Patrik Sundberg bb5f332eca fix(coding-agent): stop repetitive scrolling in session observer viewer
Move live stats (tokens, tools, duration) from the header — which scrolls
above the TUI viewport for long transcripts — to a stable Text component
placed after the viewerContainer. Stats are updated in-place via setText()
so the diff algorithm sees changes near the bottom of rendered output,
avoiding the fullRender(true) trigger when firstChanged < viewportTop.

Previously every ~150ms progress update changed the header stats line,
which sat above the viewport for large transcripts. The TUI's safety
check (firstChanged < previousContentViewportTop) forced a full screen
clear and re-render each cycle. In multiplexers (tmux/zellij) this
produced visible repetitive scrolling because scrollback is preserved
across clears.
2026-04-09 02:19:41 +01:00
can1357 a4e44208da chore: bump version to 14.0.2 2026-04-09 02:35:59 +02:00
can1357 300a8e2ea3 refactor(chunk): restructured anchor markers from +++ syntax to [< >] format
- Changed anchor marker format from `+++`/`---` to `[<`/`>]` syntax in chunk rendering and documentation.
- Refactored render_i() to accept marker tuple (open, close) instead of single string for symmetric anchor pairs.
- Updated 94 lines of prompt documentation to reflect new anchor syntax in examples and instructions.
2026-04-09 02:35:32 +02:00
can1357 fd57247a6d fix(chunk): corrected markdown spacing to preserve blank lines between sections
- Corrected markdown section spacing logic to preserve blank lines between inserted sections and following headings.
- Added markdown-aware spacing detection to handle FirstChild, LastChild, Before, and After insert positions correctly.
- Added two test cases validating blank line preservation in markdown After and Append operations.
- Reformatted doc comments in RenderParams and ReadRenderParams for line length compliance.
2026-04-08 23:26:30 +02:00
can1357 ea9c46262f feat(coding-agent): introduced /force command and ToolChoiceQueue for directive management
- Added `/force` slash command and `ToolChoiceQueue` system for managing tool-choice directives with lifecycle callbacks and requeue semantics.
- Added `setForcedToolChoice()`, `peekQueueInvoker()`, `buildToolChoice()`, `steer()`, and `getToolChoiceQueue()` methods to AgentSession and ToolSession APIs.
- Refactored tool-choice override mechanism from simple override to queue-based system with generator directives, lifecycle callbacks, and requeue preservation.
- Removed `PendingActionStore` class and replaced with `ToolChoiceQueue`; updated `ResolveTool` and custom tool loader to use queue invokers.
- Fixed tool-choice queue cleanup on agent loop abort and requeue semantics to preserve callbacks across abort cycles.
2026-04-08 22:10:37 +02:00
can1357 f49098eb76 config: configured PI_STRICT_EDIT_MODE for model-specific edit behavior
- Added PI_STRICT_EDIT_MODE environment variable to control model-specific edit mode defaults.
- Wrapped model-specific edit mode logic behind PI_STRICT_EDIT_MODE condition for conditional behavior.
- Replaced Bun.env direct access with $env utility for consistent environment variable handling.
- Updated rate-edit-tool and typescript-edit-benchmark to set PI_STRICT_EDIT_MODE in test environments.
2026-04-08 21:30:52 +02:00
can1357 ad9bc6943a feat(slash-commands): enabled slash commands to return remaining text as prompt input
- Enhanced slash command handlers to return remaining text as prompt input instead of consuming input entirely.
- Updated slash command parser to recognize both whitespace and colon (`:`) as command argument separators.
- Modified executeBuiltinSlashCommand return type to support string (remaining text) or boolean (consumed/not matched).
- Updated input controller to handle remaining text from slash commands and use it as prompt input.
2026-04-08 20:57:25 +02:00
can1357 29376dac2b refactor: restructured indentation from tab-based to space-based representation
- Renamed indent normalization functions from tab-based to space-based naming (normalize_to_tabs -> compact_indent, denormalize_from_tabs -> expand_indent).
- Changed canonical indentation representation from tab characters to single leading spaces per indent level across chunk rendering and editing.
- Updated documentation and type annotations to reflect space-based indentation convention in chunk edit tool and native bindings.
- Simplified indent expansion logic to count whitespace characters instead of parsing individual characters.
2026-04-08 20:56:25 +02:00
can1357 9bb1683445 feat(coding-agent): added URL selectors with :raw and line range syntax to read command
- Added support for embedded URL selectors with `:raw` and `:L#-L#` line range syntax in read command.
- Implemented `parseReadUrlTarget()` function to parse and validate URL read targets with line range support.
- Updated read CLI to delegate URL inputs through read tool pipeline instead of treating as local file paths.
- Added comprehensive test coverage for URL selector parsing and CLI URL delegation.
- Refactored URL handling in read tool to use structured `ParsedReadUrlTarget` object.
2026-04-08 19:47:51 +02:00
can1357 3cf7d1adc8 feat(coding-agent): added model-specific edit mode resolution for Claude variants
- Added model-specific edit mode resolution for Anthropic Claude variants (spark, nano, mini, haiku, flash) to default to replace mode.
2026-04-08 19:33:22 +02:00
can1357 25efae9ae9 fix natives loading in keybinding tests 2026-04-08 18:52:42 +02:00
can1357 9f9e0938e5 feat: introduced @decl chunk region selector for semantic declarations
- Added `@decl` chunk region selector for targeting semantic declarations without leading trivia.
- Updated chunk edit documentation with visual region boundary diagram and critical narrowest-region requirement warning.
- Implemented `Decl` variant across Rust types, NAPI bindings, and TypeScript definitions with full region range logic.
- Added inline hunks emission for effectively-leaf chunks to preserve hunks when children are filtered by focus.
- Improved type safety in LSP startup test by replacing truthy check with explicit function type check.
2026-04-08 17:49:39 +02:00
can1357 41fff9e0ca refactor(chunk): restructured tree formatting logic for hierarchical chunk error hints
- Extracted chunk tree formatting logic into dedicated `format_selector_tree()` function for reuse across error handling.
- Refactored error messages to display chunk children as hierarchical tree structure with line numbers and signatures instead of comma-separated lists.
- Removed `format_chunk_ref()` helper and consolidated formatting logic into tree-based error hint generation.
- Updated test assertions to validate tree-formatted output with regex patterns matching branch symbols and structure.
2026-04-08 17:23:04 +02:00
can1357 683dac0dda test(coding-agent): mocked process I/O to prevent escape sequences during LSP startup
- Added mocks for process I/O operations to prevent terminal escape sequences during LSP startup test.
- Reordered cleanup in afterEach to stop mode before restoring mocks, ensuring proper teardown sequence.
2026-04-08 17:13:18 +02:00
can1357 52719d1a7c refactor: restructured monorepo TypeScript config and build tasks for unified setup
- Migrated all package tsconfig files to extend tsconfig.workspace.json for unified TypeScript configuration across monorepo.
- Consolidated build and check scripts across 10+ packages to use biome for linting/formatting with separate type checking via tsgo.
- Renamed build scripts from build:native and build:binary to build for simplified command naming across packages/natives and packages/coding-agent.
- Refactored CI workflow to invoke bun tasks instead of inline shell scripts, reducing workflow complexity by 40+ lines.
- Removed sync-exports.ts and repro-stuck.ts scripts; deleted path aliases from tsconfig.base.json in favor of workspace-based configuration.
- Updated turbo.json with new task definitions (check:types, lint, fmt, fix) and removed build:native/embed:native tasks.
2026-04-08 17:05:20 +02:00
can1357 7a3dc2963a test(coding-agent): restructured streaming abort tests with timing control for isolation
- Refactored test suite to use top-level hooks instead of describe block for improved test isolation.
- Enhanced streaming mock to support delayed delta emission via waitBeforeFirstDelta promise.
- Improved auto-generated file abort test with precise timing control to verify abort occurs before delta updates.
2026-04-08 15:28:08 +02:00
can1357 f2fceb27ad chore: bump version to 14.0.1 2026-04-08 15:07:01 +02:00
can1357 3f4384f6b1 fix(auto-generated-guard): corrected file not found handling in marker detection
- Fixed file not found error handling in auto-generated marker detection to gracefully return undefined instead of propagating errors.
- Made assertEditableFileContent function synchronous to simplify API and improve error handling consistency.
- Updated test assertions to match synchronous function behavior using toThrow instead of rejects patterns.
- Removed obsolete test case for doc comment preservation during replace operations.
2026-04-08 15:06:47 +02:00
can1357 4ca9bd9c78 refactor: migrated cloning logic to centralized utility for consistency
- Extracted `structuredCloneJSON()` utility to centralized package for consistent deep cloning with JSON fallback.
- Consolidated duplicate cloning logic across openai-responses, openai-responses-shared, and validation modules.
- Added resilience to message cloning in extension runner with try-catch fallback for non-cloneable objects.
- Optimized context emission in extension runner by skipping message cloning when no handlers exist.
- Added optional `contentIndex` field to AssistantMessageEvent variants for type consistency.
2026-04-08 14:51:35 +02:00
can1357 757bdca7a1 feat: added assistant message event interception for streaming edit abort control
- Added `onAssistantMessageEvent` callback to Agent API for inspecting and aborting assistant streaming events.
- Added `setAssistantMessageEventInterceptor()` method to dynamically update assistant message event handlers.
- Converted `checkAutoGeneratedFileContent()` from async to synchronous for improved streaming edit abort detection performance.
- Implemented LRU caching in auto-generated file detection with early path-based checks to prevent unnecessary edits.
- Refactored streaming edit pre-caching to use assistant message event interception for real-time abort capability.
- Extracted `peekFile()` utility for efficient file prefix reading with pooled buffer reuse strategy.
2026-04-08 14:51:15 +02:00
can1357 211e5369a0 refactor(coding-agent): migrated image utilities to shared pi-utils package
- Extracted image metadata detection and MIME type utilities to @oh-my-pi/pi-utils package for shared use across projects.
- Consolidated image-input.ts and mime.ts modules into image-loading.ts with simplified API removing redundant metadata parameters.
- Updated all import paths across coding-agent to use readImageMetadata from @oh-my-pi/pi-utils instead of local utilities.
- Added peek-file utility module to @oh-my-pi/pi-utils with buffer pooling for efficient file header reading.
2026-04-08 14:42:51 +02:00
can1357 78428b58b4 docs(chunk): clarified region selection guidance to prevent attribute loss
- Enhanced chunk-edit documentation with guidance on selecting narrowest regions to prevent accidental attribute/decorator loss.
2026-04-08 13:34:32 +02:00
can1357 2bdc80eedc fix: AsyncDrain double-allocation bug and history test singleton isolation 2026-04-08 12:52:32 +02:00
can1357 468601935c fix(test): use awaitable add() in history storage compat test 2026-04-08 12:43:36 +02:00
can1357 88595b541c fix(test): use setImmediate drain instead of sleep for history insert timing 2026-04-08 12:30:12 +02:00
can1357 edab058993 refactor: remove pi-ref lazy barrel import, fix test mocks for Bun 1.3.11
- Remove pi-ref.ts deferred barrel import (no longer needed after circular dep fix)
- Update extension/hook/custom-tool/custom-command loaders to use direct imports
- Fix warmPythonEnvironment mock return type in python tool tests (add docs field)
2026-04-08 12:21:17 +02:00
can1357 003eccce52 fix: remove unused type alias and fix test compatibility with Bun 1.3.11
- Remove unused ParsedChunkTarget type alias (lint error)
- Increase setImmediate timing in history storage compat test
- Mock warmPythonEnvironment in python tool tests
- Fix tlaplus LSP test to spy on $which instead of Bun.which
2026-04-08 12:17:37 +02:00
can1357 99fac3419b chore: bump version to 14.0.0 2026-04-08 11:51:59 +02:00
can1357 26d7783370 fix(chunk): corrected chunk boundary calculations to prevent out-of-range violations
- Added bounds clamping to prologue and epilogue byte calculations to prevent out-of-range boundary violations.
- Extended chunk boundaries for indent-based languages when epilogue exceeds calculated range with trailing newline.
- Added comprehensive test coverage for Python chunk editing operations including body/head replacement and indentation preservation.
- Extracted working directory formatting logic into reusable utility function and applied tab sanitization to bash command previews.
2026-04-08 11:50:42 +02:00