Commit Graph
2890 Commits
Author SHA1 Message Date
roboomp dc2235fa9c fix(tui): preserved plan review scroll position
Retained relative body progress across transient non-scrollable render frames and added regression coverage for terminal-height changes.

Fixes #5232
2026-07-14 17:16:12 +00:00
roboomp 9ef5538f5c fix(rpc): tolerated malformed stdin lines instead of crashing
RPC mode iterated readJsonl(Bun.stdin.stream()), where JSON parsing runs
inside the generator. A parse error thrown from the generator escaped the
frame loop's try/catch (which only wrapped dispatch), unwound runRpcMode,
and exited the process on any non-JSON stdin line.

Read raw lines via readLines and JSON.parse each inside the existing
try/catch so a malformed line emits a Failed to parse command error frame
and the loop keeps running. Shared readJsonl stays strict for session-file
reads.

Fixes #5194
2026-07-14 17:11:48 +00:00
roboomp 2d519d8f89 fix(tui): guard plugin tool renderer components against render crashes
Plugin/custom tool renderers can return a component whose render() throws
(e.g. a plugin styling its header off an object without a bold method,
producing TypeError: th.bold is not a function). ToolExecutionComponent only
caught the renderCall/renderResult factory, not the child component's later
render() pass, so the exception escaped and crashed the transcript.

Wrap every renderer-returned call/result component in SafeToolRendererComponent,
which catches render() errors and falls back to the tool label (call) or raw
result text (result), logging once per component.

Fixes #4978
2026-07-14 16:59:00 +00:00
can1357 a572448306 Merge PR #5297: fix(coding-agent): respect role thinking for temporary model picks (@roboomp)
# Conflicts:
#	packages/coding-agent/src/modes/controllers/selector-controller.ts
2026-07-14 18:47:28 +02:00
can1357 ba7bcf4cd1 fix(prompting): ignore code symbol magic keywords 2026-07-14 18:45:23 +02:00
can1357 334050d509 Merge PR #4968: fix(prompting): allow magic keywords beside punctuation (@roboomp) 2026-07-14 18:45:22 +02:00
can1357 67d0e35728 Merge PR #4906: fix(cli): show progress for print mode prompts (@roboomp)
# Conflicts:
#	packages/coding-agent/src/prompts/system/workflow-notice.md
2026-07-14 18:45:15 +02:00
can1357 583963150d fix(rpc): retain malformed frame errors 2026-07-14 18:39:26 +02:00
can1357 3539403e3c Merge PR #5156: fix(rpc): prevent rpc-ui extension UI response deadlock (@roboomp) 2026-07-14 18:39:26 +02:00
can1357 d1c88dd89c fix(tui): reserve mixed assistant segments safely 2026-07-14 18:38:07 +02:00
can1357 f13164e464 Merge PR #5158: fix(tui): display Cursor final answers after tool output (@roboomp)
# Conflicts:
#	packages/coding-agent/src/modes/controllers/event-controller.ts
2026-07-14 18:37:31 +02:00
roboomp d3f4830ceb fix(tui): deferred command output during streaming
- Queued transcript command panels until the active agent turn ends.

- Added regression coverage for slash-command output mounting exactly once.

Fixes #4806
2026-07-14 16:35:18 +00:00
can1357 353bb5c8e1 Merge PR #5239: fix(tui): compact transcript retention without losing resize history (@RensTillmann) 2026-07-14 18:34:14 +02:00
can1357 7f9a2777f9 Merge PR #5170: fix(ai): scope Anthropic credential identity by organization, not just email (@chan1103) 2026-07-14 18:29:14 +02:00
roboomp 0eda288b99 fix(tui): updated nerd session icon codepoint
Replaced the removed Nerd Fonts v2 Material Design glyph with its Nerd Fonts v3 mapping and covered the preset contract.

Fixes #4795
2026-07-14 16:22:55 +00:00
roboomp 953859d956 fix(acp): awaited teardown on stdio disconnect
Registered ACP session disposal with postmortem and replaced the hard EOF exit with the awaited graceful shutdown path.

Classified stdio-write EPIPE separately from worker IPC EPIPE so ACP peer loss exits successfully after cleanup.

Fixes #4788
2026-07-14 16:20:48 +00:00
roboomp b6b947bdbe fix(openai): rendered native response images
- Normalized completed image_generation_call results into assistant image blocks.
- Persisted image bytes through the session blob store and rendered them in live, replay, ACP, proxy, telemetry, and HTML paths.
- Added response normalization, persistence, and TUI rendering regressions.

Fixes #4768
2026-07-14 16:15:53 +00:00
roboomp 43a89d20bd fix(editor): accepted upstream-pi editor constructor in CustomEditor
Plugins subclass CustomEditor/Editor and forward the upstream-pi
super(tui, theme, keybindings) constructor, which is the arg order
setEditorComponent's factory contract advertises. omp's base
constructor is constructor(theme), so the TUI landed in the theme
slot and every render threw
"undefined is not an object (evaluating 'this.#theme.symbols.boxRound')".

CustomEditor now resolves the real EditorTheme by shape rather than
position and captures a leading TUI so plugin overrides calling
this.tui.requestRender() keep working.

Fixes #4766
2026-07-14 16:03:44 +00:00
roboomp e9dc1616b7 fix(tui): anchored IME cursors in interactive inputs
Preserved the editor cursor marker under autocomplete and forwarded dialog focus into Other-response editors.

Fixes #4760
2026-07-14 16:01:09 +00:00
DarkPhilosophy 05d1e43308 fix(advisor): optional-chain getAdvisorStatusOverview for session double compatibility 2026-07-14 04:36:20 +03:00
DarkPhilosophy 6e8a7620de fix(advisor): add getAdvisorStatusOverview mock to status-line component test 2026-07-14 04:01:44 +03:00
DarkPhilosophy fb971d2493 Merge remote-tracking branch 'can1357/main' into feat/advisor-per-agent-toggle 2026-07-14 03:45:44 +03:00
Mathews-Tom 37cc50f2a2 Merge remote-tracking branch 'upstream/main' into feat/error-notify 2026-07-14 05:18:35 +05:30
can1357 da24614d5a feat: added scrollback rebuild controls and prewalk status-line visibility
- Added `tui.scrollbackRebuild` configuration with interactive startup/controller wiring to apply `setScrollbackRebuild`.
- Exposed prewalk session state in `SegmentContext` and rendered a dedicated prewalk segment/icon in the status line.
- Added divergence-aware TUI full-paint logic that enables scrollback erase-and-replay rebuilds for non-multiplexer divergence cases.
- Updated rendering and streaming tests to verify rebuild behavior (`3J`) and eliminate stale marker expectations under drift scenarios.
2026-07-14 00:39:34 +02:00
Mathews-Tom b72a320d2d Merge remote-tracking branch 'upstream/main' into feat/error-notify
# Conflicts:
#	packages/coding-agent/src/session/agent-session.ts
2026-07-14 03:12:29 +05:30
DarkPhilosophy b85d64f9cd Revert "fix(coding-agent): use ctx.settings instead of global settings proxy in renderInitialMessages"
This reverts commit b096de735d.
2026-07-14 00:28:13 +03:00
DarkPhilosophy cc2831e0f0 fix(advisor): signal-based quota retry + bare-model provider resolution
- onTurnError returns Promise<boolean|undefined> signaling credential switch
- agent-session returns markUsageLimitReached().switched from the hook
- runtime retries once when switched===true, otherwise preserves quota pause
- advisor-config uses liveStat model provider for bare (slash-less) selectors
- 2 regression tests: switched=true (retry succeeds) and switched=false (pause)
2026-07-14 00:13:55 +03:00
DarkPhilosophy b096de735d fix(coding-agent): use ctx.settings instead of global settings proxy in renderInitialMessages
Global settings proxy throws "Settings not initialized" when accessed
without Settings.init(), which breaks interactive-mode-status tests
under certain test ordering. Use this.ctx.settings like all other
access points in the method.
2026-07-14 00:01:54 +03:00
DarkPhilosophy 4db2d9617b Merge remote-tracking branch 'can1357/main' into feat/advisor-per-agent-toggle 2026-07-13 23:16:26 +03:00
can1357 59ecd2a4d8 refactor(coding-agent/modes): added ACP type guards for elicitation narrowing
- Added `isAcceptedElicitation` in the ACP agent to narrow accepted elicitations before accessing response content.
- Added `isFormElicitation` in ACP tests and used it to narrow form-mode requests before assertions.
2026-07-13 18:53:19 +02:00
can1357 017fd641d4 feat(harbor-manager): added support for apple-container backend
- Added an environment configuration option to choose between docker and apple-container backends.
- Updated the server to default to apple-container when the container CLI is detected.
- Removed unused auto_compaction_end event handling in the coding-agent print mode.
2026-07-13 15:28:03 +02:00
can1357 64dfb98c23 feat: stabilized runner lifecycle and output processing for agent operations
- Sanitized CLI JSON output by stripping sensitive payload data and implementing incremental delta extraction.
- Optimized log parsing in the harbor-manager by using tail-scanning and streaming file handles to prevent OOM errors.
- Enhanced process management to support persistent runs across manager restarts and improved orphan process handling.
- Added incremental cost probing for live trials and verified status transitions for runner lifecycle events.
2026-07-13 15:24:19 +02:00
can1357 f405525bf4 feat: removed boomerang feature and associated validation workflows
- Removed the `downshift.boomerang` feature, including CLI flags, configuration schema settings, and internal session state logic.
- Deleted the associated prompt definition file and all unit tests related to the boomerang validation flow.
- Cleaned up frontend forms and server request handling in the harbor-manager package to reflect the feature removal.
- Updated the downshift planning prompt instructions to maintain continuity in task creation.
2026-07-13 14:15:54 +02:00
can1357 95ecc61bc9 feat(coding-agent): implemented downshift boomerang flow for context handoff
- Introduced `--downshift-boomerang` CLI flag and `downshift.boomerang` configuration setting.
- Integrated boomerang validation hand-back logic and context cutting within the agent session.
- Added system prompt templates and runtime checks to facilitate message handling for boomerang transitions.
- Included unit tests to verify context management and validation pass requirements during the boomerang process.
2026-07-13 10:37:20 +02:00
can1357 0a98aa252b feat(coding-agent/modes): hardened tan fork isolation and session sync
- Clear inherited todo list state and persist empty edit at fork creation to prevent parent task reminders from affecting the tangential session.
- Re-inject the fork notice after each auto-compaction event to ensure the boundary between the parent and child session survives history summarization.
- Align the provider cache key with the parent's actual pinned key to correctly mirror cached session context.
- Update `AgentSession` to perform a full entry rewrite during tool result pruning to ensure session files match pruned state for reliable resuming and branching.
2026-07-13 06:00:30 +02:00
can1357 e770cdc4d9 fix(coding-agent): unified tool renderer and clarified launch diagnostics
- Implemented a consolidated TUI renderer for launch tool operations to unify status headers and metadata.
- Added tracking for unfulfilled readiness conditions to distinguish between timeout causes and daemon states.
- Enhanced timeout reporting to explicitly surface specific unmet log or port conditions.
- Included comprehensive unit and regression tests for tool rendering and start-timeout diagnostics.
2026-07-13 05:16:36 +02:00
can1357 eb52f6ea25 feat(coding-agent): injected context-switch instructions into tangential agent forks
- Added a system prompt to define boundaries for tangential agent forks.
- Injected the context-switch notice into new clones to prevent task leakage from parent sessions.
2026-07-13 04:26:44 +02:00
can1357 af7345e87e feat(coding-agent): implemented role switching and filtering in model picker
- Added support for role switching via `@` search prefix in the model picker.
- Implemented `quickRoles` configuration and logic to handle role-specific selections via the session API.
- Updated the model browser to support preserving query order and custom label coloring for improved navigation.
- Integrated role cycle tracking and updated UI hints to support the new role-browsing workflow.
2026-07-13 04:21:54 +02:00
can1357 42d81f189f feat(coding-agent): redesigned agent hub layout for task clarity
- Redesigned agent hub entries as two-line cards, separating identity and status from task descriptions.
- Added explicit model and thinking level badges to agent status information.
- Updated agent hub rendering to support multi-line entries and adaptive vertical scrolling based on row height.
- Simplified status display by using glyphs instead of redundant status labels.
- Adjusted rendering logic to prioritize displaying agent task summaries on an independent indented line.
2026-07-13 03:03:26 +02:00
can1357 aa52fa4231 feat(session): enabled visibility for elided tool calls in transcripts
- Added `StrippedToolCallsMarker` to identify assistant messages with dangling tool calls that were removed during context building.
- Updated `buildSessionContext` to preserve turn entries in transcripts even when all content is stripped, marking them with the count of elided calls.
- Updated `UiHelpers` to render a dim, italicized placeholder in the TUI when an assistant message has elided tool calls, preventing silent activity gaps.
2026-07-13 01:40:15 +02:00
can1357 4903a13511 feat(session): implemented automated recovery and status reporting
- Added `warning` field to `CompactionEntry` and `CompactionSummaryMessage` to persist dead-end status in session history.
- Introduced a multi-tier rescue mechanism in `AgentSession` that automatically performs `elide` and `dropImages` passes when maintenance fails to recover sufficient headroom.
- Integrated visual indicators for dead-ends into the `CompactionSummaryMessageComponent`, surfacing warnings directly on the compaction divider and detail block.
- Updated `AgentSession` logic to re-evaluate progress after each rescue tier and emit recovery notices, ensuring transparent reporting of automated history rewrites.
2026-07-13 01:40:14 +02:00
can1357 711fa43123 feat(snapcompact): switched to compact scope markers for archived transcripts
- Replaced markdown-style headings with concise `¶user:`, `¶think:`, `¶ai:`, and `¶call:` scope markers.
- Updated the serializer to merge consecutive messages or blocks of the same type under a shared prefix.
- Updated the documentation prompt to reflect the new compact formatting and scope rules.
- Added regression tests verifying scope merging and correct formatting of tool calls and intents.
2026-07-13 01:35:40 +02:00
can1357 585b9e437e ux(mode): enabled user control over compacted transcript session collapse
- Updated transcript session context to use display.collapseCompacted setting instead of a hardcoded boolean.
- Enabled user-defined control over whether compacted history is collapsed during live rendering sessions.
2026-07-13 01:29:55 +02:00
can1357 5c2bae47ac feat(mode): enabled conditional transcript compaction logic
- Introduced conditional scrollback clearing during UI renders when transcript compaction is enabled.
- Updated `CommandController` and `EventController` to respect the `display.collapseCompacted` setting.
- Configured `SelectorController` to trigger a chat rebuild and UI reset when the compaction setting changes.
- Updated `InteractiveMode` to dynamically toggle between collapsed and full inline history based on user settings.
2026-07-13 01:29:53 +02:00
can1357 46ed33f27b feat(coding-agent): initialized session metadata during tan creation
- Initialized session metadata including system prompt, task, and toolset within the controller.
- Added session initialization tracking to the clone creation flow to ensure session state visibility.
- Updated unit tests to verify that session initialization data is correctly appended when a tan is created.
2026-07-13 01:09:42 +02:00
can1357 87a64b2f6a feat(coding-agent): improved background job lifecycle and display
- Stop propagating real-time updates for backgrounded Bash jobs to avoid UI flickering once a job enters the background.
- Refine background task tracking in `EventController` to distinguish between persistent background tasks and transient backgrounded Bash commands.
- Update UI rendering to display cleaner background job metadata in the footer instead of inline text notices.
2026-07-13 00:54:51 +02:00
can1357 8dbc43b6e8 feat(coding-agent-modes): implemented floating model selection system
- Introduced ModelPickerComponent to enable temporary, floating model selection overlays.
- Centralized role management logic using a new resolveRoleAssignments function in the browser.
- Streamlined model hub by removing legacy pick-mode logic and defaulting to fullscreen views.
- Synchronized model picker state with the registry to ensure accurate offline refreshes.
2026-07-13 00:13:04 +02:00
Rens Tillmann 2a09b22d9c Merge upstream main into fix/issue-4820-replay-safe-retention 2026-07-12 21:15:53 +00:00
T.C. FergusonandRens Tillmann 26792f7b55 fix(tui): skip sparse compacted segments in isBlockUncommitted
After #5239 compaction, a later render only fills segments from
#compactedChildStart, leaving undefined holes in the prefix. Iterating
those entries crashed when retiring IRC/ephemeral cards
(`segment2.component`). Guard undefined segment slots and cover the
sparse-hole path with a red/green regression.
2026-07-12 21:09:19 +00:00
roboomp 9bda84b685 fix(coding-agent): respected role thinking for temp picks
Applied explicit thinking suffixes from matching configured model roles when the temporary model picker switches the session model.

Added regression coverage for the Alt+P temporary picker resolution path.

Fixes #5290
2026-07-12 19:01:05 +00:00