Commit Graph

687 Commits

Author SHA1 Message Date
can1357 fd0dd40083 refactor(coding-agent): improved detection of reflowing markdown
- Replaced regex-based markdown detection with a stateful parser in `detectLiveReflowingMarkdown`.
- Correctly ignore table delimiters and mermaid markers when they appear inside fenced code blocks.
- Added tests to verify that code blocks containing markdown-like syntax do not prevent commit stability.
2026-06-19 16:11:40 +02:00
can1357 865694df7e fix: resolved streaming stability and reference isolation issues
- Prevent object reference sharing between agent snapshots and stream events by deep-cloning tool-call arguments.
- Stabilize GFM tables and Mermaid diagrams during streaming by delaying transcript block commits until content finalization.
- Implement session resume safety to prevent crashes when working directories are missing.
- Add comprehensive test suites to verify streaming commit stability and immutable snapshot isolation.
2026-06-19 16:09:00 +02:00
can1357 30c2c35c88 feat(coding-agent/modes): implemented weighted selection for welcome tips
- Added weighted selection logic to bias discovery toward "[NEW]" tips.
- Updated the tip marker regex to allow trailing whitespace.
- Migrated tip selection to use the new biased distribution algorithm.
2026-06-19 16:06:17 +02:00
can1357 9f30e241b5 feat(coding-agent/modes): added animated "NEW!" rainbow tag to tips
- Introduced a "[NEW]" marker in tip text that triggers an animated rainbow-colored tag in the welcome component.
- Implemented `renderNewTag` to calculate cyclic HSL hue offsets based on render timing.
- Updated `renderWelcomeTip` to intelligently wrap the tag at the end of the last line or on a new line to prevent layout overflow.
2026-06-19 16:06:17 +02:00
can1357 29221ae202 Merge remote-tracking branch 'origin/farm/e2ad9334/gate-advisor-sub-options' 2026-06-19 09:02:29 +02:00
can1357 3c90f3bdd1 feat(coding-agent): ignored cache invalidation false positives for implicit providers
- Add a check requiring `cacheWrite > 0` to identify meaningful cache invalidation.
- Prevent false positives for providers with implicit caching that intermittently report zero reads without a fresh cache write.
- Add regression test case to verify implicit providers are not flagged as invalidations.
2026-06-19 09:02:22 +02:00
roboomp ffcbc5f876 fix(ux): gated advisor dependent settings
Added an advisorEnabled visibility predicate and wired the advisor dependent settings through it so the Model Advisor sub-options hide unless Enable Advisor is active. Added regression coverage for the settings UI adapter.\n\nFixes #3027
2026-06-19 06:39:24 +00:00
can1357 b877464575 refactor(coding-agent): migrated UI chrome to rounded box corners
- Switch all UI components and tests from sharp box corners (`boxSharp`) to rounded ones (`boxRound`).
- Update `Theme` to re-export sharp junction symbols (tees and cross) under `boxRound` to ensure consistent divider rendering in rounded boxes.
- Remove outdated architectural notes regarding forced tool-choice queues in documentation.
2026-06-19 07:57:15 +02:00
can1357 a9c493db13 feat(coding-agent): added toggleable prompt cache miss markers
- Added `display.cacheMissMarker` setting to enable visual indicators for prompt cache invalidation in assistant messages.
- Included updated theme symbols to represent cache misses across supported icon sets.
- Configured the selector controller to rebuild the chat display when the marker visibility setting is toggled.
2026-06-19 07:54:32 +02:00
can1357 5e507b0165 feat(coding-agent): implemented detectCacheInvalidation to identify
- Implemented `detectCacheInvalidation` to identify when model requests lose their prompt cache.
- Added `CacheInvalidationMarkerComponent` to display a slim notice above affected assistant turns.
- Updated `ChatTranscriptBuilder` and `EventController` to track session usage and inject markers dynamically.
- Included comprehensive test coverage for invalidation detection logic and UI rendering.
2026-06-19 07:49:53 +02:00
can1357 63b2c9603a refactor(snapcompact): replaced legacy frame pinning with full text-sourced re-rendering
- Removed legacy `pinnedFrames` logic and state, simplifying compaction to unconditionally re-render from the full source archive.
- Updated `historyBlocks` to reliably order archive regions (text head, imaged middle, text tail) based on the re-rendered state.
- Updated documentation and summary templates to reflect the transition to text-first compaction and the use of the new `FILES` section.
2026-06-19 07:48:46 +02:00
can1357 64b81c3b8f feat(coding-agent): standardized message card styling
- Refreshed all injected message frames with a consistent rounded-outline card design.
- Implemented icon-tagged headers for hooks, local skill invocations, and generic custom messages.
- Updated skill invocation cards with home-shortened paths, dynamic line count units, and compact invocation argument display.
- Unified branch summary styling with compaction banners to provide a consistent visual language for history collapse points.
- Removed leaked absolute home directory paths from skill metadata displays.
2026-06-19 07:41:23 +02:00
can1357 3998d95088 feat: standardized tab expansion to fixed width
- Removed configurable tab width support and the `display.tabWidth` setting across all packages.
- Deleted obsolete utility functions `getIndentation`, `getIndentationNoescape`, and `setDefaultTabWidth`.
- Standardized tab expansion logic to use a fixed `DEFAULT_TAB_WIDTH` globally.
- Cleaned up related configuration schemas, test suites, and internal API signatures to remove path-dependency.
2026-06-19 04:48:41 +02:00
can1357 c224ef4df5 feat: standardized elision markers and improve transcript viewer robustness
- Standardized elision markers across all tool outputs and filters to use cohesive `[...N [type] elided...]`, `[...Nln elided...]`, and `[...xB elided...]` syntax.
- Updated documentation, prompts, and test expectations to reflect the unified elision format.
- Improved transcript viewer robustness by preventing content aliasing through path-inclusive signature hashing.
- Added logic to clear stale transcript content when associated session files are deleted, accompanied by verifying test cases.
2026-06-19 04:35:18 +02:00
can1357 b33a4b80df fix(coding-agent): aligned transcript viewer body with header
- Fixed an alignment issue where the transcript body was incorrectly offset by an extra gutter column relative to the "Agent Hub" title.
- Updated the transcript renderer to omit the redundant outer gutter and ensure file-mention rows include the standard 1-column left pad.
- Added regression tests to verify consistent gutter alignment and correct scroll behavior.
2026-06-19 04:29:49 +02:00
can1357 280492a605 feat(coding-agent): migrated agent transcripts to fullscreen overlay
- Replaced inline chat view with a dedicated fullscreen `AgentTranscriptViewer` overlay.
- Introduced `ChatTranscriptBuilder` to enable non-incremental, full-history transcript rendering.
- Implemented robust state management for thinking blocks, message history, and transcript disposal.
- Added support for auto-reloading local session files and sync for remote transcript data.
2026-06-19 04:13:10 +02:00
can1357 29d250fae2 feat(coding-agent): supported advisor transcript persistence
- Implemented `AdvisorTranscriptRecorder` to persist advisor sessions to append-only `__advisor.jsonl` files.
- Integrated transcript recording into agent sessions with managed flushing, atomic file switching, and synthetic turn attribution.
- Restricted advisor-kind agents by excluding them from rosters, history protocols, messaging, and interactive agent commands.
- Reserved the `__advisor` filename stem across the output manager and task registry to prevent task ID collisions.
2026-06-19 03:50:00 +02:00
can1357 7a819bba16 Merge PR #2906: fix(login): honor disabledProviders in /login provider list (@dipunj) 2026-06-18 23:32:53 +02:00
Dipunj ca4c5463d9 fix(login): hide alias logins when their credential provider is disabled
A login entry can store credentials under a different provider id via
storeCredentialsAs (e.g. openai-codex-device => openai-codex). Filtering
only on provider.id left such alias logins visible after disabling the
underlying model provider. Surface storeCredentialsAs on OAuthProviderInfo
and hide a login entry when either its own id or its storeCredentialsAs
target is in disabledProviders.

Addresses Codex review on #2906.
2026-06-18 15:56:43 -04:00
can1357 ad14074701 feat: updated conversation rendering and tool result formatting
- Implemented structured markdown role headings and tool result merging to improve conversation readability.
- Added explicit `<out>` tags for tool result wrapping and enhanced rendering for thinking blocks.
- Refactored authentication snapshot validation to use manual structural checks instead of schema dependencies.
- Fixed instability in settings overlay scrolling and addressed assistant message splitting issues.
2026-06-18 19:54:01 +02:00
can1357 1e747280f5 release(coding-agent): updated changelog for hashline rendering fix
- Documented a fix for hashline edit mode rendering in the TUI.
2026-06-18 03:19:26 +02:00
can1357 e8bb956b7a fix(coding-agent/modes): prevented tight layout for tool block cards
- Enabled padding preservation for tool execution blocks by ignoring tight layout settings.
- Ensured tool blocks remain visually distinct through consistent horizontal spacing.
2026-06-18 03:10:59 +02:00
can1357 44c7c6a3f2 fix(coding-agent): prevented terminal layout corruption from multiline content
- Sanitized newlines from agent hub display text to ensure single-line output.
- Enforced line clamping during render to prevent terminal wrapping.
- Added test coverage to verify output truncation and newline removal.
2026-06-18 03:09:29 +02:00
can1357 4a1f3483c7 feat(coding-agent): promote completed /btw answers into branches (#2894) 2026-06-18 02:50:23 +02:00
can1357 9382439b52 feat(cli): add retry keybinding (#2899) 2026-06-18 02:48:29 +02:00
can1357 66bbd004fc fix(coding-agent): prevented post-disposal state updates and callbacks
- Prevented updating the default branch and triggering callbacks after the component is disposed.
2026-06-18 01:57:28 +02:00
can1357 93347438ed fix(coding-agent): prevented async leaks and state pollution on disposal
- Added `#disposed` flags and guards to `StatusLineComponent` to stop async callbacks running post-dispose.
- Updated `onThemeChange` to return an unsubscribe function and registered it in `InteractiveMode`.
- Fixed schema validation for `spinnerFramesSchema` to narrower types instead of dynamic or-validation.
- Resolved settings leaks by saving and restoring `tuiTight` state in tests.
- Added regression tests verifying that pending async microtasks do not trigger updates after disposal.
2026-06-18 01:57:23 +02:00
Dipunj d23774663e fix(login): honor disabledProviders in /login provider list
The /login selector listed every OAuth-capable provider regardless of the
disabledProviders setting, so providers hidden from the model picker still
appeared as login targets. Filter them out in login mode (logout stays
unfiltered so stored credentials of a now-disabled provider can still be
removed).
2026-06-17 16:14:03 -04:00
KamijoToma b526132b5d fix(coding-agent): preserve copy-prompt retry collision 2026-06-18 02:54:22 +08:00
KamijoToma 3dd95e081e fix(coding-agent): preserve retry shortcut precedence 2026-06-18 02:43:09 +08:00
KamijoToma 6116b97a54 Add retry keybinding 2026-06-18 01:51:11 +08:00
can1357 3588fd30f2 feat(coding-agent/tui): adjusted tool output rendering to use terminal content width
- Introduced a WidthAwareText component that formatted fallback content during render using the computed content width.
- Updated ToolExecutionComponent to use WidthAwareText and invalidate cached text instead of a fixed-width Text path.
- Reworked generic tool output formatting to derive inline and output truncation budgets from terminal width rather than hard-coded 70/80 columns.
2026-06-17 19:14:28 +02:00
KamijoToma 52b3155cbd feat(coding-agent): branch completed btw answers 2026-06-18 00:58:23 +08:00
can1357 9f16ca4797 feat(tui): enabled tight layout mode with optional 1-char padding reduction
- Added new `tui.tight` setting with default `false` and documented behavior.
- Added global tight-mode APIs and `setIgnoreTight` propagation across Box, Text, and Markdown.
- Handled `tui.tight` updates to refresh UI borders and trigger rerendering.
- Updated key message components to ignore tight mode selectively and preserve intended spacing.
2026-06-17 15:09:55 +02:00
can1357 409196bf2e fix(coding-agent/session): fixed context usage breakdown to prefer completed in-turn anchors
- Fixed context breakdown to anchor estimates on the latest completed assistant usage message after compaction.
- Adjusted pending-context usage selection to prefer an in-turn provider anchor when available at/after cutoff.
- Added a contextUsageRevision cache token so status-line context memo invalidates after snapshot clear.
2026-06-17 12:24:20 +02:00
can1357 48decd15d7 fix(coding-agent): fixed context usage tracking to keep status and selector totals in sync
- Added context snapshot metadata to AssistantMessage for prompt and non-message token history.
- Anchored context usage calculations on assistant snapshots and computed percent numerically.
- Updated status-line, /context, selector, and interactive mode flows to share session usage totals.
- Extended status-line cache fingerprinting and invalidation for assistant usage and prompt/tool/skill changes.
2026-06-17 12:24:20 +02:00
can1357 be734240ce ux(coding-agent): added line-number gutters to read tool code cells
- Read tool result details now include optional per-line number arrays so displayed content can retain original line mappings.
- Read tool group and renderer now forward code start-line and line-number metadata into code-cell rendering.
- Code cell rendering now draws aligned line-number gutters and pads hidden-line hints to keep gutter alignment.
2026-06-17 12:24:19 +02:00
roboomp 2254da9fc0 fix(tui): skipped git watcher for custom status lines
Skipped status-line git watcher setup when neither git nor pr segments are configured, including after status-line settings updates.

Fixes #2847
2026-06-17 12:24:18 +02:00
roboomp 944b9ea73f fix(tui): gated git status line work
Added a git.enabled setting and skipped footer/status-line git probes when integration is disabled or no git-backed status segment is rendered.

Fixes #2847
2026-06-17 12:24:18 +02:00
can1357 8443a42d25 ux(coding-agent/modes): added troubleshooting tip for PI_DIALECT tool-calling fallback
- Updated the coding-agent modes tips to mention PI_DIALECT for providers that mis-handle native tool calls.
- Clarified a troubleshooting option for restoring behavior when inference providers cannot parse tool-call payloads.
2026-06-17 09:43:45 +02:00
can1357 37646a4a14 fix(coding-agent): refined STT warmup and mechanical space-hold handling
- Reworked space-bar hold detection to require sustained mechanical gaps.
- Implemented per-model STT dependency tracking with background warmup and deferred setup.
- Tightened Whisper cache validation to require both encoder and decoder models.
- Caught STT request promise rejections to avoid unhandled rejection noise.
2026-06-17 01:57:14 +02:00
can1357 ea1a4edb4e Merge PR #1890: feat(coding-agent): add plan.defaultOnStartup to launch new sessions in plan mode 2026-06-15 19:46:13 +02:00
can1357 9622da4597 Merge PR #2400: feat(tui): Zellij and WezTerm pane fallbacks for terminal session continuity 2026-06-15 19:46:12 +02:00
can1357 ecccff62f3 fix(coding-agent/advisor): fixed collapsed advisor notes to wrap instead of two-line truncation
- Removed the collapsed-mode truncation branch that forced advisor message cards to restrict bodies to two lines.
- Added a regression test covering long collapsed advisor notes to ensure they wrap at narrow widths instead of being cut short.
- Updated the package changelog to document the collapsed advisor note wrapping fix.
2026-06-15 16:54:20 +02:00
can1357 37ecd3e73a feat(advisor): added advisor agent for passive code review with severity-tagged advice
- Created AdvisorRuntime and AdviseTool to drive a read-only advisor agent that delivers severity-tagged advice (nit, concern, blocker) with interruption policy and transcript delta rendering.
- Added /advisor slash command with on/off/status/dump subcommands to control advisor lifecycle and inspect advisor metrics (model, messages, tokens, cost).
- Added advisor.enabled and advisor.subagents settings to enable passive advisor review on main agent and spawned task/eval subagents.
- Implemented advisor message rendering with severity-color badges (blocker=error, concern=warning, nit=muted) in chat log and status line indicator (++ badge).
- Extended yield-queue and session-history-format to support advisor batching and optional thinking block inclusion.
2026-06-15 16:32:13 +02:00
can1357 0b05911d11 ux(coding-agent/modes): updated assistant thinking pulse glyphs
- Updated the assistant-message thinking animation to cycle through rising block glyph frames.
- Updated the accompanying comment to describe the new block-based pulse motion.
2026-06-15 16:31:24 +02:00
can1357 6b1ba425df feat(coding-agent): animated thinking pulse for hidden thinking blocks
Render a breathing dots pulse (·‥…‥) in place of a hidden thinking block while the model is actively reasoning, so streaming progress is visible with hideThinkingBlock enabled. The pulse shows only while the block is live (not finalized), thinking is hidden, no tool call has started, and the tail block is thinking; it yields to streamed text and is removed when the block is sealed.
2026-06-15 13:44:44 +02:00
can1357 e8ef706abf fix: filtered out whitespace-only assistant and thinking blocks from output
- Canonicalized assistant and thinking messages by trimming and collapsing dot text.
- Skipped rendering assistant and thinking blocks when canonicalized content was empty.
- Filtered ACP thinking notifications and session outputs to ignore placeholder content.
- Added canonicalizeMessage tests for undefined, blank, whitespace, and dot-only inputs.
2026-06-15 12:40:00 +02:00
can1357 2a7cb56abd feat(agent): rendered conversation logs with preferred tool syntax
- Updated compaction, branch summarization, and session dump formatting to pass preferred model tool syntax into conversation serialization.
- Enhanced shared serializers to render assistant tool calls and tool results through grammar envelopes when syntax is available, with the prior compact format as fallback.
- Aligned prompt, preview, and test fixtures to the new transcript tags: `[Think]`, `[Tool Call]`, and `[Tool Result]`.
2026-06-15 12:32:47 +02:00
can1357 2de2926320 feat: added Gemini and Gemma in-band tool syntax support in runtime
- Added Gemini and Gemma syntax routing by model family and owned syntax env values.
- Added Gemini and Gemma in-band parsers for tool_code and token-based tool_call streams.
- Added rendering support for Gemini fenced tool_code/tool_outputs and Gemma tool tokens.
- Fixed parsing edge cases for comments, string escapes, nested args, and truncated blocks.
2026-06-15 11:40:55 +02:00