Commit Graph
821 Commits
Author SHA1 Message Date
can1357 60c9c80e53 fix(coding-agent): allowed multiline replace.with values and preserved signatures
- Removed the newline guard for `replace.with` in atom edit parsing so multiline replacement text is accepted.
- Updated atom tests to assert replacing a matching line with multiline content now succeeds.
- Stopped clearing `optimisticUserMessageSignature` during session-context rendering so interactive status preserves in-progress signatures.
2026-04-28 05:23:26 +02:00
can1357 a3f8f122cc feat(coding-agent): renamed grep to search in runtime mappings
- Renamed the built-in `grep` content-search tool to `search` across settings, schemas, and SDK exports.
- Switched execution wiring so `Task`, `Plan`, cursor, and shell mapping now invoke `search` instead of `grep`.
- Updated prompts, plan-mode docs, and example tool lists to replace `grep`/`ls` references with `search` guidance.
- Aligned `Grep*`/`grep` event, renderer, and hook types to `Search*`/`search` across runtime and tests.
- Documented and fixed `search` result rendering budget behavior and added internal-URL/path-list transcript notes.
2026-04-27 21:55:31 +02:00
can1357 697e4aa543 feat(coding-agent/session): added IRC relay forwarding for main session transcript
- Added agent identity and registry fields to session configuration and session creation, enabling relay routing metadata for agent sessions.
- Implemented non-persistent IRC relay emission to forward incoming and reply observations from non-main agents into the main session UI.
- Updated IRC UI rendering to support `irc:relay` messages with participant-aware arrow formatting and body display.
2026-04-27 14:32:13 +02:00
can1357 2b53492c2f feat(coding-agent): added IRC message event handling and chat rendering
- Added an `irc_message` session event carrying custom IRC messages and emitted it when IRC records are created.
- Registered an IRC message handler in EventController that skips duplicate messages by role, custom type, and timestamp.
- The handler now appends IRC messages to chat, resets read grouping, and triggers a UI render.
2026-04-27 02:44:58 +02:00
can1357 37a8203f94 refactor(coding-agent): standardized tool intent handling via unified intent option
- Replaced `AgentTool` `nointent` and `deriveIntent` with a unified `intent` option that supports `omit`, `optional`, `require`, or a callback function.
- Updated agent tool schema injection and execution paths to inject `_i` as required/optional/omitted and to derive intent through the new `intent` callback.
- Aligned atom-edit tests with the updated default sed behavior (`g` now off by default and explicit `g: true` for global replacement).
2026-04-26 14:54:53 +02:00
can1357 18085ac704 feat(coding-agent): added optional tool intent derivation and opt-out support
- Added `nointent` and `deriveIntent` to `AgentTool`, and made intent-schema injection honor `PI_NO_INTENT` plus per-tool opt-outs.
- Updated tool execution and streaming UI handling to derive a fallback intent when `_i` is absent, without aborting on derivation failures.
- Marked several coding tools as `nointent` and added `deriveIntent` callbacks where needed, then relaxed prompt language to indicate intent is present on most tools.
2026-04-26 14:22:26 +02:00
Can BölükandGitHub 497cbe4a3a Merge pull request #604 from Clarity-89/fix/status-line-branch-overflow
fix: shrink path segment before dropping branch from status line
2026-04-26 13:42:24 +02:00
can1357 fe36c93300 fix(coding-agent): sanitized edit and diff text before rendering
- Added sanitizeText to edit renderer previews and diff rendering before line processing.
- Passed filePath into replaceTabs calls across edit previews, errors, and diff visualization paths.
2026-04-26 13:01:42 +02:00
can1357 2e3e032645 fix(coding-agent): preserve editor draft on optimistic user message_start
Fixes #783
2026-04-26 13:00:00 +02:00
can1357 9dea505c97 feat(session-observer): left/right cycle agents and auto-scroll to bottom 2026-04-26 12:13:39 +02:00
Can BölükandGitHub 94d3c05519 Merge pull request #743 from DamanHanzo/feat/session-observer-enhancements
feat(session-observer): full-screen viewer with scrolling, expand/collapse, markdown, and agent cycling
2026-04-26 12:11:42 +02:00
Can BölükandGitHub 39e0cbe4f9 Merge pull request #712 from mouyase/feat/searxng-search-provider
feat(search): add SearXNG support to web_search tool
2026-04-26 12:10:29 +02:00
Can BölükandGitHub d52b3acd15 Merge pull request #796 from apoc/feat/drop-command
feat(coding-agent): add /drop command to delete current session and start fresh
2026-04-26 12:06:46 +02:00
can1357 fe25549d1f refactor(coding-agent): updated hashline/grep anchors to * and |-separated output
- Updated `formatMatchLine` to emit `*` for matched lines, a leading space for context, and a `|` anchor/content separator.
- Revised grep/hashline mismatch messages and prompts to describe the new marker and separator format.
- Aligned affected atom and hashline tests with the updated match-line prefixes and separators.
2026-04-26 10:41:07 +02:00
Miroslav Drbal 4ad7a9d754 fix(coding-agent): address /drop reviewer findings
- dropSession: close persist writer before deletion to prevent EPERM
  on Windows where an open file handle blocks unlink
- #runNewSessionFlow: guard UI reset on newSession return value;
  session_before_switch hook cancellation now prevents chat state
  being cleared and success banner being shown
2026-04-26 10:36:38 +02:00
can1357 413e517c5e feat(coding-agent): added AgentRegistry for IRC session peer lookup
- Added `AgentRegistry` singleton with session registration/unregistration and IRC routing metadata for peer lookups.
- Added IRC messaging prompts and tooling with `irc.enabled` setting, `list/send` tool paths, and peer roster rendering.
- Changed `/btw` to session-side `runEphemeralTurn`, added background IRC exchange flushing, and fixed empty-input checks.
- Added unit tests for IRC tool and BtwController ephemeral behavior, including disabled, busy, not-found, and abort cases.
2026-04-26 10:28:22 +02:00
Miroslav Drbal d9d870bab4 feat(coding-agent): add /drop command to delete current session and start fresh
/drop works like /new but permanently deletes the current session file
and artifacts instead of flushing (saving) it. Useful when the session
should not be kept.

- add drop?: boolean to NewSessionOptions
- branch in AgentSession.newSession(): skip flush, delete via
  FileSessionStorage.deleteSessionWithArtifacts when drop=true;
  deletion failure is non-fatal (logged, new session still starts)
- wire handleDropCommand() through InteractiveModeContext interface,
  InteractiveMode delegation, and CommandController implementation
- guard: shows error if session has not been saved yet (no file to drop)
- register /drop in builtin-registry adjacent to /new
2026-04-26 10:00:48 +02:00
can1357 0d75c582dd feat(coding-agent): added todo note operations to coding-agent todo-write
- Added `note` support to todo-write with `op: "note"` and required `text` input.
- Added optional `notes: string[]` to todo models and preserved notes in cloning and session task mapping.
- Implemented `op: "note"` append flow and markdown `>` block serialization/parsing for todo import/export.
- Updated HUD todo rendering to append superscript `+N` note markers and show in-progress note bodies.
- Documented note operation, required text field, and note rendering rules in todo-write docs and changelog.
2026-04-26 09:05:42 +02:00
can1357 fc4ffb2f88 feat(coding-agent/modes): added /todo export and import command support
- Added /todo export and /todo import commands to write/read markdown todos, defaulting to TODO.md.
- Changed /todo append from JSON payloads to tokenized [<phase>] <task...> input with quoted tokens.
- Changed /todo start/done/drop/rm matching to fuzzy-resolve task or phase names in TodoCommandController.
- Removed /todo replace from todo-command builtins in CHANGELOG and command registry.
2026-04-26 08:45:17 +02:00
can1357 17c0303a98 feat(coding-agent/edit): added multi-file streaming diff previews for edit tools
- Grouped streaming edit strategies by file path and generated diff previews for each file, with a five-file preview cap.
- Updated patch and hashline preview generation to return per-file preview arrays instead of only the first file.
- Rendered multi-file streaming diffs with file headers in the edit tool UI and stored them when more than one preview is present.
2026-04-26 08:38:55 +02:00
can1357 07cb2cecdf fix(coding-agent/modes): used latest session entries for /todo phase reads
- Added a private #currentPhases helper that reads todo phases from the latest session entries.
- Updated /todo handlers to use #currentPhases so existing todo states are loaded from entries when available.
- Added a fallback to session.getTodoPhases when no entry-derived phases exist.
2026-04-26 08:35:01 +02:00
can1357 9ca2d2e4cf feat(coding-agent): added /todo slash command actions in interactive-mode
- Added `/todo` slash command with edit, copy, start, done, drop, rm, append, and replace actions.
- Added InteractiveMode context/controller wiring to dispatch `/todo` commands through session runtime.
- Added todo controller parsing, editor-assisted edits, and commit syncing for session, UI, and storage updates.
- Changed todo persistence/restoration behavior, restored grep defaults, and removed chunk read mode and `pi-natives` references.
2026-04-26 08:32:20 +02:00
can1357 5ea1d55e56 feat: removed chunk-mode modules and read/edit entrypoints from pi-natives
- Removed `pi-natives` chunk language classifier modules and all core chunk subsystems (kind, state, render, edit, resolve).
- Removed chunk-mode CLI/read/edit entrypoints, including `read` command and chunk mode registration/prompt tooling.
- Removed chunk selectors from `read` and `grep` tools, switching behavior to raw/L-range handling.
- Fixed poll wait parsing to keep defaulting to `30s` when the provided value is empty.
2026-04-26 08:19:02 +02:00
can1357 5de4774f16 fix: session listing
- Session metadata now stores on-disk size bytes, populated from file stats when collecting sessions.
- The session selector metadata line now renders file size using formatBytes instead of message counts.
- Session test fixtures were updated with the new size property so they match the revised SessionInfo shape.
2026-04-26 06:59:47 +02:00
can1357 e3f7496deb feat(coding-agent): added ordered todo_write ops and sequential execution
- Changed `todo_write` to an ordered `op`-array model with `replace`, `start`, `done`, `rm`, `drop`, `append`.
- Removed legacy multi-field todo payloads and updated tests/fixtures to use ordered `{op, task?, phase?, items?}[]` args.
- Reworked todo operation execution to apply entries sequentially and validate missing or unknown task/phase IDs.
- Updated todo rendering to use `todo.content` only and changed bash artifact labels from `full result` to `raw output`.
2026-04-26 05:00:54 +02:00
can1357 44ea247cf8 fix(coding-agent/tools): corrected json-tree inline arg truncation logic
- Updated inline argument formatting in formatArgsInline to truncate key/value pairs by width and show ellipsis when values overflow.
- Fixed JSON-tree output to hide harness-internal INTENT_FIELD and __partialJson keys from top-level tool argument rendering.
- Fixed multiline scalar rendering and empty-structure display paths in renderJsonTreeLines after tree-prefix traversal changes.
2026-04-26 04:32:27 +02:00
can1357 cfaee4c0dc fix(coding-agent/modes): added checks to skip writing error messages to
- Added checks to skip writing error messages to stderr when stopReason is 'error' or 'aborted', as these cases already handle error output separately.
- This prevents duplicate error reporting in print mode when the assistant encounters terminal error conditions.
2026-04-26 03:44:56 +02:00
can1357 9a6116bb85 fix(ai): resolved strict tool fallback in AI streaming providers
- Added `examples` option to `StringEnum` so generated schemas include examples metadata.
- Added session-state tracking and strict-tools fallback flags for Anthropic and OpenAI streaming providers.
- Added first-token retry fallback from strict to non-strict for Anthropic/OpenRouter 400 compiled-grammar errors.
- Added strict tool-schema normalization, stripping unsupported fields, capping strict tools, and nullable conversion.
- Added assistant `errorMessage` rendering in print mode and assistant message components.
- Added tests for strict retries, grammar-error handling, and strict-schema alignment behavior.
2026-04-26 03:36:21 +02:00
can1357 17411f3a4b fix(coding-agent): fixed tool validation and branch-cache fallback handling
- Added a regression test for tool argument coercion that preserves quoted edit arrays while stripping optional null fields.
- Updated footer branch-watcher initialization to clear cached branch state when resolving git head fails.
- Set the report_tool_issue tool definition to non-strict mode for looser argument handling.
2026-04-26 03:20:43 +02:00
can1357 4f85ebe472 fix(coding-agent): corrected gutter marker alignment in diff rendering
- Added `CodeFrameMarker` and `formatCodeFrameLine()` to centralize code-frame gutter formatting.
- Extended diff rendering to preserve `|` and `│` separators, aligning gutter markers and line numbers.
- Reworked AST, grep, hashline, Vim, and diff renderers to use shared line formatting with computed `lineNumberWidth`.
- Updated atom editing flow and tests, including `resolveAtomEntryPaths` migration and new loc-based/edge-case coverage.
- Adjusted benchmark runner early-stop configuration by passing `buildEarlyStop` through prompt collection.
2026-04-26 03:00:51 +02:00
can1357 f101cdd5e2 feat(coding-agent): added openai image-gen support
- Added `openai` and `openai-codex` as image providers and let `providers.image=auto` prefer GPT images.
- Updated settings, selector, and SDK wiring so OpenAI image providers pass through `setPreferredImageProvider`.
- Replaced Gemini-only image tooling with `image-gen` and added OpenAI/Codex hosted-image execution with SSE parsing.
- Added image-gen and handoff tests, including final-yield no-compaction regression and OpenAI payload/header assertions.
2026-04-26 02:46:46 +02:00
can1357 cb45cba98e feat: implemented LINEID hashline parsing/output with pre/post atom ops
- Expanded hashline and chunk bigram tables to 647 entries and moved chunk checksums to a 40-item namespace.
- Changed hashline anchors from `LINE#ID`/`:` to concatenated `LINEID`\t forms across parsing and tool outputs.
- Removed line-number padding and routed diff/read/grep/renderer output through raw numbers, tabs, and `toDisplayLine` formatting.
- Renamed atom ops to `pre`/`post`, removed `ins`, and updated schemas, prompts, and tests for new insertion behavior.
2026-04-26 02:18:32 +02:00
Daman Singh b9af1f20b1 fix(session-observer): restore plugin cache closure and fix oversized entry scroll
Two regressions from 33dfce738:

1. selector-controller.ts imported nonexistent clearPluginRootsAndCaches
   (was clearClaudePluginRootsCache). The previous commit collapsed the
   inline closure that invalidated fs caches for plugin JSON files into
   a direct function reference that doesn't exist. Restored the original
   closure with its fs cache invalidation logic.

2. scrollToSelectedEntry() snapped oversized entries back to their top
   on every PgDn/PgUp, defeating the line-scroll fallback. The condition
   'entryTop < scrollOffset' fires whenever the user pages down within
   a tall entry. Fixed: only snap when the viewport has no overlap with
   the entry (completely above or completely below it).
2026-04-25 17:50:52 -05:00
Daman Singh 1cf488ec2f fix(session-observer): systematic TUI sanitization via sanitizeLine helper
- Add sanitizeLine() helper that composes replaceTabs + truncateToWidth,
  eliminating ad-hoc sanitization across render paths
- Add contentWidth() helper for consistent viewport width computation
- Replace all direct replaceTabs/truncateToWidth calls in lines.push
  with sanitizeLine: collapsed thinking, collapsed response, tool intent,
  tool args, tool error lines, tool result lines, collapsed user preview
- Replace ad-hoc magic numbers with TRUNCATE_LENGTHS and PREVIEW_LIMITS
  constants from render-utils (60->TITLE, 100->LONG, 4/5->COLLAPSED_LINES,
  15->EXPANDED_LINES, 2->COLLAPSED_LINES, 30->EXPANDED_LINES, 3->OUTPUT_COLLAPSED)
- Remove unused MAX_TOOL_RESULT_LINES_COLLAPSED/EXPANDED constants
2026-04-25 17:35:14 -05:00
Daman Singh 33dfce7388 fix(session-observer): remove type indirection and fix collapsed user preview sanitization
- Replace `ReturnType<typeof this.ctx.ui.showOverlay>` with concrete
  `OverlayHandle` type from @oh-my-pi/pi-tui
- Remove `as any` casts and redundant `as SessionMessageEntry` in
  #loadTranscript; discriminated union narrowing on `entry.type` and
  `msg.role` is sufficient
- Add missing `replaceTabs()` on collapsed user/developer preview text,
  matching every other collapsed render path
2026-04-25 17:19:09 -05:00
can1357 d82377cda8 revert: "read-to-open"
This reverts commit c48d2e6080.
2026-04-24 22:36:44 +02:00
can1357 e3ca350f95 fix(coding-agent): added partial JSON path extraction for streamed edit calls
- Added helper utilities in the edit renderer to parse partial JSON fragments and extract the `path` field.
- Used the extracted path as a fallback when resolving the edit target file, enabling partial streamed edit calls to show the path.
- Built and stored the render context before call rendering, and added a test covering partial JSON edit path rendering.
2026-04-24 19:38:38 +02:00
can1357 c48d2e6080 feat(coding-agent): implemented read-to-open tool aliasing in runtime
- Canonicalized file and CLI defaults from `read` to `open` across tool registration and prompts.
- Added `resolveToolAlias()` and applied alias-normalized tool selection so legacy `read` maps to `open`.
- Updated runtime, UI, and export layers to treat `open` as first-class while preserving `read` compatibility.
- Renamed read prompt docs to `open.md`/`open-chunk.md` and refreshed system guidance to recommend `open`.
- Updated tool-related tests and expectations from `read` to `open` (including test fixtures and aliases).
2026-04-24 19:13:11 +02:00
can1357 4f8697234a chore: reformat 2026-04-24 14:04:56 +02:00
can1357 ec8405bb2c fix(pi-natives/shell): resolved shell minimizer bypass for compound/piped
- Updated minimizer mode selection so `Compound`, `Piped`, and `Unsupported` plans now skip minimization.
- Removed `MarkedCommands` mode and marker-stripping paths from shell minimizer and buffering flow.
- Updated minimizer tests and changelog to document compound/piped commands bypassing minimization.
- Deleted marker metadata and helper infrastructure (`markers.rs` types/helpers) and related imports.
2026-04-24 14:00:04 +02:00
can1357 f772dd9f6a feat(coding-agent/modes): implemented ACP extension methods for session and extension endpoints
- Added cached retrieval of all sessions in AcpAgent with a 60s TTL, in-flight deduplication, and cache invalidation when creating a session.
- Implemented `extMethod` handlers for `omp/sessions/listAll`, `omp/projects/list`, `omp/chats/byCwd`, `omp/usage`, and `omp/extensions` to return sorted/bounded session and project data.
- Added extension toggling through `omp/extensions/toggle` using stored disabled provider IDs and capability enable/disable functions.
2026-04-24 13:52:21 +02:00
can1357 57b5a7e8cb fix(coding-agent/modes): used expanded editor text for input handling when available
- Updated input handling to call getExpandedText when available and fall back to getText.
2026-04-24 09:54:10 +02:00
can1357 21d50d5703 feat(coding-agent): added mode-aware streaming preview for edit outputs
- Added mode-aware streaming mode resolution and strategy registration in tool execution flow.
- Changed edit rendering to propagate mode and file-scoped diff previews across edit/vim tool outputs.
- Added chunk-mode streaming helpers (`loadChunkSource`, `computeChunkDiff`, `dropIncompleteLastEdit`) with abort-aware error fallbacks.
- Added strategy-specific streaming preview support for replace, patch, hashline, apply_patch, and vim modes.
- Fixed streaming previews by dropping incomplete trailing edits and handling invalid chunk or aborted inputs.
- Expanded streaming and chunk-diff tests for partial JSON, open edits, empty paths, abort signals, and file loading checks.
2026-04-24 08:24:30 +02:00
Vu Anh Nguyenandcan1357 81fd90ecc0 Fix Mermaid markdown rendering on non-image terminals 2026-04-24 06:47:56 +02:00
can1357 601c029c20 fix: stabilize apply_patch custom tool integration 2026-04-24 00:25:21 +02:00
Hans Josephsenandcan1357 2a367bf043 feat(coding-agent/edit): add codex apply_patch as a new edit mode
Slots a new "apply_patch" variant alongside the existing edit modes
(replace, patch, hashline, chunk, vim). The mode accepts a single input
string containing a Codex *** Begin Patch / *** End Patch envelope,
parses it with a new lenient parser (heredoc-tolerant), and fans each
file-op out to the existing executePatchSingle so LSP writethrough,
plan-mode guards, fs-cache invalidation and diagnostics are shared
with the patch mode.

Exposes both tool shapes from the spec: the JSON function-tool variant
(§1.2, {input: string}) and the OpenAI custom-tool / Lark-grammar
"freeform" variant (§1.1, raw patch string). The edit tool advertises
a Lark grammar via customFormat and a wire name via customWireName;
openai-responses emits it as a grammar-constrained custom tool when a
model opts in with applyPatchToolType: "freeform" in models.json.
custom_tool_call / custom_tool_call_output are plumbed end-to-end
through the shared responses code (emission, streaming, history
replay), and the agent-loop dispatcher matches tool calls by either
name or customWireName so returned calls route correctly.

Also threads preview/diff rendering for apply_patch through the TUI
(tool-execution + edit renderer) so streaming patches show per-file
diffs like the other edit modes.

Default edit mode is unchanged (hashline); opt in via edit.mode or
PI_EDIT_VARIANT=apply_patch.
2026-04-24 00:15:17 +02:00
can1357 d24d11a274 fix: resolved AI/OAuth helper duplication via shared modules
- Standardized missing-file read errors and now return `File not found: <path>` for absent edit targets.
- Centralized AI provider, usage, and OAuth helpers into shared modules to remove duplicated logic.
- Migrated OAuth/API-key login flows to shared factory helpers and removed inline prompt/token-exchange code.
- Reused shared tools and formatter utilities for discovery, stream tails, LSP batching, and source formatting.
- Consolidated repeated test helpers and fixtures into shared modules, replacing inline helper duplicates.
2026-04-23 21:02:14 +02:00
can1357 7453c10801 feat(coding-agent): added optional inline read preview toggle
- Added a new read.toolResultPreview boolean setting defaulting to false to control inline read result rendering.
- Updated read tool group rendering to show inline previews only when enabled and to hide duplicate summary rows for previewed entries.
- Passed the setting through event and UI helper constructors and added tests for default-off behavior and the duplicate-preview summary case.
2026-04-18 23:37:47 +02:00
can1357 23c66791bc fix: stabilize merged review follow-ups 2026-04-18 23:24:00 +02:00
can1357 c3524ea98e merge: PR #719 2026-04-18 23:22:54 +02:00