Commit Graph
839 Commits
Author SHA1 Message Date
can1357 fd44728d6e fix(coding-agent/session): resolved local:// files for streaming edit cache operations
- Added a shared session path resolver that maps local:// URLs through local-protocol options, skips other internal schemes, and returns an absolute filesystem path for real files.
- Updated streaming-edit pre-cache and post-edit cache invalidation to use the shared resolver, preventing internal-scheme assertions while keeping filesystem-based flow for local plan files.
- Extended streaming-edit tests to confirm local:// plan edits complete without panicking and that auto-generated checks receive resolved absolute paths.
2026-04-30 03:48:36 +02:00
can1357 90fabf6d4f feat(coding-agent): added batch PR handling to pr_view and pr_diff
- Added support for batch PR operations by accepting `pr` as string or array and dropping `worktree` input.
- Updated `pr_view` and `pr_diff` to normalize PR IDs, process multiple PRs in parallel, and emit combined summaries.
- Refactored checkout into `checkoutPullRequest`, added repo-locking, fixed worktree paths, and summary metadata outputs.
- Updated `remote.add` handling with URL-aware idempotency and per-repo queueing for serialized git mutations.
- Added temp-home test scaffolding and expanded tests for batched PR flows and remote add conflict/no-op cases.
2026-04-30 03:48:25 +02:00
Can BölükandGitHub 55aab2815a Merge pull request #821 from metaphorics/perf/sessiontree-dedupe-context-build
perf(coding-agent): dedupe buildSessionContext walk on session-tree navigation
2026-04-30 03:40:20 +02:00
Can BölükandGitHub 57e912e462 Merge pull request #822 from metaphorics/perf/markdown-global-render-cache
perf(tui): module-level LRU for Markdown render cache
2026-04-30 03:39:59 +02:00
Can BölükandGitHub 103baacb7d Merge pull request #824 from mouyase/feat/searxng-basic-auth
feat(coding-agent/web): support SearXNG Basic auth
2026-04-30 03:35:00 +02:00
can1357 f8be2ceda5 feat(coding-agent): added /context command flow for interactive dispatch
- Added a `/context` slash command flow from registry to interactive-mode command dispatch.
- Added `handleContextCommand()` to the mode context interface and command-controller wiring.
- Added context usage breakdown utilities, cell allocation, and 20x10 usage rendering for token categories.
- Reworked compaction token estimation to use tokenizer counts, role aggregation, image token estimates, and fallback handling.
- Exported `resolveThresholdTokens()` as a public compaction helper.
2026-04-30 02:26:04 +02:00
can1357 0b3c03189b feat(coding-agent/modes): enabled /loop to use the next user prompt for repeating iterations
- Updated loop command handling to toggle `/loop` without a prompt argument and prompt for the next user input to start repeating.
- Stored each user-submitted prompt as the active loop prompt while loop mode is enabled so iterations auto-resubmit that input after each yield.
- Introduced `pauseLoop` behavior to clear the captured loop prompt and cancel pending auto-submit when Escape is pressed, while `handleLoopCommand` now no longer disables mode automatically with arguments.
2026-04-29 21:42:03 +02:00
can1357 65507f343e fix(coding-agent/modes): preserved editor drafts for local message_start deliveries
- Tracked locally submitted user signatures for both optimistic and streamed-queue submissions in interactive-mode context state.
- Updated user message_start handling to avoid re-clearing the editor and re-adding chat for locally originated messages.
- Cleared consumed local signatures on queued-message restore and added tests for queued, external, and optimistic message_start editor behavior.
2026-04-29 19:39:26 +02:00
can1357 2965efac70 feat(coding-agent): added configurable loop mode actions for /loop iterations
- Added a new `loop.mode` enum setting and UI option entries for prompt, compact, and reset behaviors.
- Updated interactive mode's loop auto-submit flow to execute selected compact or reset actions before re-submitting the prompt.
- Registered a new `just.enabled` setting in the tools settings schema.
2026-04-29 18:55:03 +02:00
can1357 4f45cf1fb4 feat(coding-agent/modes): added loop mode command and status-line mode segment support
- Added loop-mode command handling in interactive mode, including enable/disable toggling, repeated auto-submission scheduling, and Escape-based cancellation.
- Propagated loop mode state to the status line via a renamed `mode` segment that now renders plan or loop status, and updated presets/theme assets for the new loop icon.
- Migrated persisted status-line segment usage from `plan_mode` to `mode` in configuration defaults and normalization so legacy settings continue to load.
2026-04-29 16:55:14 +02:00
Can BölükandGitHub 95c4d21882 Merge branch 'main' into fix-ctrl-enter 2026-04-29 16:46:38 +02:00
cognitive 7830c73b72 fix(theme): use reference-equality for getMarkdownTheme memo
The string key $\{currentThemeName\}\0${colorBlind}\0${symbolPreset} missed
two theme-swap paths: previewTheme() (line 1844) and custom-theme file-
watcher reloads (line 2005) both reassign `theme` without updating those
state vars. After either path, getMarkdownTheme() returned a stale object
with symbols from the prior theme until a key-changing setting was toggled.

Since every theme mutation reassigns the module-level `theme` binding,
`_markdownThemeRef === theme` is a strict superset of the old key check.
Drop the string entirely: no template-literal allocation, no key-variable
maintenance, correct against all 8 mutation sites including preview/reload.
2026-04-28 12:23:58 +00:00
cognitive e9d70260f4 fix(tui/markdown): invalidate L2 cache on theme change
The L2 render cache used objectId(this.#theme) as part of the key.
After setTheme(), the same Markdown instance still holds the old
theme reference (same objectId) but the closures now read a different
palette — so the cache returned pre-switch styled lines (F3).

Export clearRenderCache() from markdown.ts and call it from the
onThemeChange handler in interactive-mode.ts so all L2 entries are
dropped on every theme switch, forcing a clean re-render.
2026-04-28 11:40:42 +00:00
cognitive f8281914bf fix(theme): memoize getMarkdownTheme per theme config
Each call previously allocated a fresh MarkdownTheme object, so two
Markdown instances rendering the same content got different objectIds
and always missed the L2 module-level cache (F4).

Memoize the result keyed on (currentThemeName, colorBlindMode,
symbolPreset). All instances within the same theme config now share
one object identity, enabling cross-instance L2 cache hits.
2026-04-28 11:40:35 +00:00
cognitiveandGitHub 92688728ab Merge branch 'can1357:main' into perf/sessiontree-dedupe-context-build 2026-04-28 19:12:25 +09:00
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
Patrik Sundberg 915e04300c fix(tui): accept NumLock Ctrl+Enter variants
Some keyboards lack a physical NumLock and it's inconvenient for this to
block hitting Ctrl+Enter.
2026-04-27 18:21:45 +01: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
某亚瑟 4b1012b55a feat(coding-agent/web): support SearXNG Basic auth
Add explicit Basic auth credentials for SearXNG while preserving Bearer token fallback.

Keep optional SearXNG settings out of the TUI and allow empty RFC 7617 username/password fields.
2026-04-27 16:48:25 +08:00
cognitive 68baba82d2 perf(coding-agent): dedupe buildSessionContext walk on session-tree navigation
Before this change, every navigateTree → renderInitialMessages call path
performed two independent O(N) session-tree walks:

  1. agent-session.ts:6586  buildDisplaySessionContext()   [inside navigateTree]
  2. ui-helpers.ts:402      sessionManager.buildSessionContext()  [inside renderInitialMessages]

Changes:
- agent-session.ts: navigateTree() now calls sessionManager.buildSessionContext()
  once, derives the display (deobfuscated) context from the raw result, and
  returns the raw SessionContext in the result object.
- ui-helpers.ts: renderInitialMessages() accepts an optional prebuiltContext
  parameter; reuses it when provided, falls back to buildSessionContext() otherwise.
- interactive-mode.ts: forwards prebuiltContext through the wrapper.
- modes/types.ts: updates InteractiveModeContext interface to match.
- selector-controller.ts: passes result.sessionContext from navigateTree into
  renderInitialMessages(), closing the deduplication loop.

Bench (100-msg session, 200 iterations):
  two walks [BEFORE]: 0.0702ms/op
  one walk  [AFTER]:  0.0298ms/op
  Saved: 0.0404ms/navigation (57.5% reduction per navigate)

Tests: render-initial-messages-dedupe.test.ts asserts buildSessionContext is
called 0 times when a prebuilt context is passed, 1 time as fallback.
2026-04-27 03:55:14 +00: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