Commit Graph
5078 Commits
Author SHA1 Message Date
ephraimduncan d98bedd8fc fix(coding-agent): treat startup metadata as a non-conversation new session
The plan.defaultOnStartup gate keyed off getEntries().length === 0, but
createAgentSession appends startup metadata (model_change / thinking_level_change
/ service_tier_change) for a brand-new session before InteractiveMode.init()
runs. So a genuinely new session reached the guard with entries already present
and never entered plan mode (the unit harness bypassed the SDK path, hiding it).

Gate on the absence of conversation messages (entry.type === "message") instead.
A fresh session — including a --continue/auto-resume that created one — carries
only metadata and still honors the default; a session with restored conversation
keeps its reconciled mode. Added a regression test seeding model/thinking-level
metadata.
2026-06-05 11:22:49 +00:00
ephraimduncan df114ae042 fix(coding-agent): gate plan.defaultOnStartup on empty session history
The startup plan-mode auto-entry gated on the CLI-derived `resuming` flag
(continue || resume || fork). But `omp --continue` with no recent session
calls SessionManager.continueRecent(), which creates a fresh, empty session
while `resuming` stays true — so the new setting was skipped on what is really
a brand-new session.

Gate on the actual signal instead: this.sessionManager.getEntries().length === 0,
the same "has prior history" check the auto-resume path already uses. A session
that opens empty (new, or a continue/auto-resume that found nothing) honors the
default; one with restored history keeps its reconciled mode. Removed the now-dead
`resuming` InteractiveModeInitOptions field and its init() argument (the runtime
flag is still used for setup-scene selection). Updated the regression test to
seed real history and corrected the CHANGELOG wording.
2026-06-05 10:59:21 +00:00
ephraimduncan 8eea28dddc refactor(coding-agent): simplified default-plan-mode startup guard per review
Dropped the redundant !planModeEnabled / !planModePaused / !goalModeEnabled / !goalModePaused checks from the init() startup guard. On a non-resumed init those flags are always false (the reconciler sets no mode on a fresh session), and #enterPlanMode already self-guards against an active plan/goal mode, so the duplication added no behavior. The guard now keeps only the two meaningful conditions (plan.defaultOnStartup + plan.enabled, the latter not checked by #enterPlanMode). No behavior change; all 4 startup tests still pass.
2026-06-05 07:42:49 +00:00
ephraimduncan fca5c0adf1 feat(coding-agent): added plan.defaultOnStartup to launch new sessions in plan mode
New boolean setting (Tasks tab, default off) that auto-enters plan mode at the start of every new interactive session. Scoped to launch via the existing resuming flag, so resumed/continued/forked sessions keep their reconciled mode and the plan-approval -> execution handoff clear is never dragged back into plan mode. Silent no-op when plan.enabled is off or another mode is active; hidden in the settings UI behind a planModeEnabled condition.
2026-06-04 21:37:33 +00:00
can1357 9da448f01d chore: bump version to 15.9.1 2026-06-04 18:46:52 +02:00
can1357 bfbb2464bb fix(coding-agent/modes): recomputed prior live block on live-to-frozen transition
- Tracked the previous live child in TranscriptContainer and forced a one-off recompute when a block leaves live status.
- Skipped snapshot reuse for that transitioning block so coalesced finalize-and-append frames seal transcript blocks at their final content.
- Added a regression test covering the stale-prefix freeze case on ED3-risk terminals and confirming the frozen block stays unchanged until thaw.
2026-06-04 18:46:16 +02:00
can1357 b454d9b508 fix(coding-agent): preserved stdin for protocol mode startup
- Skipped piped-input read in rpc/rpc-ui/acp modes so JSON-RPC frames aren't consumed before transports start.
- Awaited completion script write before exiting `omp completions`.
2026-06-04 18:34:44 +02:00
can1357 c4c2e43f35 chore: reformat 2026-06-04 18:33:36 +02:00
roboompandcan1357 18338e2088 fix(acp): refused dismissed plan approval
#requestAcpPlanApprovalChoice returned 'value !== REFINE_OPTION' which
treats any non-refine outcome — explicit dismissal, transport failure,
abort, or timeout — as approval. That meant closing the elicitation
dialog (or the request failing) granted the agent write access without
explicit user consent.

Tighten to 'value === APPROVE_OPTION' so only the explicit approve
selection passes the gate. Refine, dismissal, and every other outcome
fall through to refine semantics: the caller keeps plan mode active and
returns guidance text instead of renaming the plan and exiting.

Adds a regression test that drives a form-capable harness with a
cancelled elicitation and asserts the plan file is preserved, plan
mode/handler stay active, plan reference stays unset, and no mode-exit
notifications are emitted.
2026-06-04 18:30:22 +02:00
can1357 434b188a71 fix(tui): fixed streamed row reflow to stay committed in native scrollback
- Removed the AssistantMessageComponent completion flag and its stable-line counting helpers.
- Added a TUI regression test validating that reflowed streaming rows leaving the viewport are preserved in native scrollback and remain reachable.
- Removed changelog notes for obsolete stable-prefix scrollback APIs.
2026-06-04 17:51:15 +02:00
can1357 9115fc4bd2 docs(coding-agent/prompts): updated system prompt to defer cleanup planning until completion
- Inserted guidance to plan only request-critical work and defer changelog, test, and documentation tasks.
- Added a dedicated cleanup phase requiring tests, docs, changelogs, and scaffold removal after smoke-test verification.
- Ensured cleanup work is treated as mandatory finalization rather than part of upfront planning.
2026-06-04 17:49:32 +02:00
can1357 5038ad7855 tests: delete/adjust brittle tests 2026-06-04 17:46:00 +02:00
can1357 239ad877c4 Merge remote-tracking branch 'origin/farm/a70af80d/plan-accept-not-appearing-in-zed-using-a' 2026-06-04 17:42:26 +02:00
can1357 4a9ee14e33 feat(coding-agent): wrapped mid-turn steers in wire-only envelope
- Marked steering user messages and wrapped them pre-LLM so the model sees a `` envelope.
- Kept transcripts and persisted history with the user's original raw text.
- Restored `AssistantMessageComponent` stable-prefix completion API.
2026-06-04 17:41:56 +02:00
can1357 c8b4bf09c7 prompts: undo experiment, update system 2026-06-04 17:41:10 +02:00
roboomp 493f743958 fix(acp): synced config option after plan approval
ACP plan approval exited plan mode internally and emitted the current-mode
notification, but it did not push the matching mode config-option update.
Clients that cache or render the config selector could therefore keep
showing mode=plan after approval switched the session back to default.

The approval path now emits the same config_option_update used by other
mode transitions, and the regression test asserts that the approval-driven
exit updates both current_mode_update and the mode config option.
2026-06-04 15:37:38 +00:00
roboomp 3aa7be9777 style: bun run fix 2026-06-04 15:30:58 +00:00
roboomp fdb6077b7b fix(acp): wired plan-mode standing resolve handler
ACP plan mode set the plan-mode state but never installed the standing
resolve handler that interactive mode wires in #enterPlanMode. The agent
in plan mode dutifully called resolve { action: 'apply', extra.title }
to submit its plan; ResolveTool.execute then consulted
peekQueueInvoker() ?? peekStandingResolveHandler(), found neither, and
threw 'No pending action to resolve. Nothing to apply or discard.' —
stranding the agent with no path out of plan mode in Zed (and any other
ACP client).

#applyModeChange now registers a standing handler when entering
mode: 'plan' and clears it when leaving. The handler:
 - validates the plan file exists at the configured '/data/workspaces/can1357__oh-my-pi__1869/.omp-session/2026-06-04T15-12-15-302Z_019e9331-31c6-7000-9bce-6be119505a1d/local' path,
 - normalizes the agent-supplied title to a safe filename stem,
 - asks the ACP client to confirm via unstable_createElicitation when
   the client advertises elicitation.form (auto-approves otherwise so
   the agent never gets stuck on a client without the surface),
 - renames the plan to '/data/workspaces/can1357__oh-my-pi__1869/.omp-session/2026-06-04T15-12-15-302Z_019e9331-31c6-7000-9bce-6be119505a1d/local/<title>.md,'
 - sets the plan reference path so the next turn injects the plan as
   context, then clears the standing handler + plan-mode state and
   emits current_mode_update so the client UI reflects the exit.

Refinement (user picks 'Refine plan') returns guidance text and leaves
plan mode active so the agent can iterate.

Fixes #1869
2026-06-04 15:30:27 +00:00
can1357 7124dbae93 fix(coding-agent): fixed session resume to reconcile modes and preserve model state
- Registered and triggered a session-switch reconciler during init and after switch.
- Rebuilt resume flow to restore plan/goal mode state and clear stale mode flags.
- Marked fallback and context-promotion model switches ephemeral and skipped them on restore.
- Added regression tests for temporary model ordering, fallback precedence, and mode cleanup.
2026-06-04 17:22:19 +02:00
can1357 7a7479f7e3 feat(coding-agent/modes): added arrow-key tab switching to dashboards
- Mapped left/right arrows to switch tabs in the extension dashboard.
- Updated agent and extension dashboard footers to show arrow controls.
- Reformatted HTTP transport assignment and reordered an import.
2026-06-04 16:37:50 +02:00
can1357 51865fc1ea test(coding-agent): updated assertions for condensed prompt wording
- Aligned handoff, reminder, and system-prompt expectations with shortened copy.
- Added HTTP transport test for required initialize failures.
- Guarded SSE startup timeout against stale connection races.
2026-06-04 16:35:45 +02:00
can1357 457fe9eb26 feat(coding-agent/prompts): routed parallel requests to task subagents
- Added system-prompt rule mapping user `parallel`/`parallelize` requests to `task` subagent fan-out.
- Clarified that parallel tool calls alone do not satisfy the request.
2026-06-04 16:35:15 +02:00
can1357 829b999dc1 feat(coding-agent/modes): added arrow-key based tab switching in the agent dashboard
- Mapped the right arrow key to advance tabs in the agent dashboard.
- Mapped the left arrow key to reverse tabs alongside shift+tab.
- Kept existing tab and shift+tab handling intact for backward-compatible navigation.
2026-06-04 16:32:17 +02:00
can1357 8709f7a7e6 fix(coding-agent): fixed terminal UIs to resize with rows and avoid extra OSC11 polling
- Adjusted session and dashboard renderers to derive heights from live terminal rows.
- Propagated terminal-row callbacks through picker/controller wiring and session selectors.
- Reworked list visibility and page navigation to honor row-based budgets and footer lines.
- Added DECRQM 2031 startup probing and stopped OSC11 polling once support was confirmed.
2026-06-04 16:29:37 +02:00
can1357 4cf112d92a feat(web/search): expanded Perplexity defaults and related questions
- Raised default search results to 20 and context size to high.
- Added related questions parsing and return_related_questions request flag.
- Added API-key request-shape tests covering defaults and parsing.
2026-06-04 16:28:59 +02:00
can1357 7d0931585b Merge remote-tracking branch 'origin/farm/a8fe8732/fix-acp-plan-local-write' 2026-06-04 16:03:00 +02:00
can1357 c4cc7b2326 Merge remote-tracking branch 'origin/farm/7f3f40ca/restore-exa-mcp-fallback' 2026-06-04 16:02:58 +02:00
can1357 53c09417b4 feat(modes/components): added tokenized matching and selection navigation
- Added token-aware query matching so highlights mirror `HistoryStorage.search` tokenization.
- Added token highlighting, compact relative timestamps, and selected-row styling in results.
- Added PageUp/PageDown and Home/End selection shortcuts in `HistorySearchComponent`.
- Added selector matchers for `tui.select.pageUp` and `tui.select.pageDown`.
- Changed empty-result messaging to distinguish `No history yet` from `No matching history`.
- Added tests for page/home/end navigation and token-highlighting result rendering.
2026-06-04 16:02:34 +02:00
can1357 a3fec0b978 feat(modes/components): implemented agent creation multiline editor flow
- Replaced the single-line description Input with Editor in agent-dashboard.ts for multiline entry.
- Added Enter-newline and Ctrl+Enter submit handling to the create-agent editor flow.
- Updated agent-creation-architect.md guidance for concise single-sentence whenToUse output.
- Added integration tests for multiline editor rendering and Ctrl+Enter submission.
2026-06-04 16:02:34 +02:00
can1357 2bd77f14f5 test(modes/components): added regression tests for assistant line counts
- Added tests covering stable line count behavior for streamed assistant messages.
2026-06-04 16:02:34 +02:00
can1357 cbdff129b6 feat(tui): enabled stable-prefix scrollback commits for streaming assistant output
- Added assistant-message completion state and stable-line count reporting.
- Added transcript stable-row aggregation and snapshot replay to keep unstable rows out of scrollback.
- Added TUI stable scrollback boundary APIs and stable-prefix commit path.
- Added regression tests proving unstable rows stay out of scrollback until stabilized.
2026-06-04 16:00:50 +02:00
roboomp f0f3c4cbd8 fix(coding-agent): kept local plan writes off acp bridge
Route '/data/workspaces/can1357__oh-my-pi__1863/.omp-session/2026-06-04T13-36-11-717Z_019e92d9-3fc5-7000-a66f-15cad94b7e75/local' plan artifacts through OMP's session-local storage instead of the editor writeTextFile bridge, preserving ACP bridge routing for regular editor-visible files.

Fixes #1863
2026-06-04 13:43:17 +00:00
can1357 d7eee460d2 fix(coding-agent): sorted ctrl+r search results by recency
- Removed early FTS-only return so prefix and substring matches merge.
- Sorted merged results globally by prompt recency before limiting.
- Added /force, /copy, and /shake tips.
2026-06-04 15:40:37 +02:00
can1357 d32a33a4da docs(coding-agent): added ctrl+r prompt history search tip 2026-06-04 15:37:11 +02:00
roboomp aacf29e1de fix(coding-agent): kept exa mcp fallback out of auto chain
Reviewer noted that an unconditional ExaProvider.isAvailable steered the auto chain into the public MCP fallback before any later-configured provider could run. Restored the credential-gated isAvailable, then split out isExplicitlyAvailable so resolveProviderChain still routes an explicit Exa selection through MCP without affecting other providers.\n\nRefs #1860
2026-06-04 13:28:14 +00:00
can1357 4d067ad512 Merge remote-tracking branch 'origin/farm/7f3f40ca/restore-exa-mcp-fallback' 2026-06-04 15:25:09 +02:00
can1357 e495f073da feat(coding-agent): deferred session titling past greetings
- Skipped titling for greeting/filler/empty first messages deterministically, retrying on later user messages.
- Let capable title models decline taskless input via a "none" sentinel.
- Guarded against clobbering a name set by a concurrent attempt.
2026-06-04 15:24:53 +02:00
roboomp cb2d5b859a fix(coding-agent): restored exa mcp fallback
Restored Exa's unauthenticated MCP fallback when neither auth storage nor EXA_API_KEY provides credentials. Preserved API-key search ordering and bounded the MCP request with the web-search hard timeout. Updated provider copy and regression coverage for the no-key path.\n\nFixes #1860
2026-06-04 13:18:08 +00:00
can1357 482c95d375 chore: update chanelogs 2026-06-04 14:53:20 +02:00
can1357 06f9123b55 Merge remote-tracking branch 'origin/farm/8cadad3a/sync-natives-on-update' 2026-06-04 14:52:58 +02:00
can1357 7ed34f885a Merge remote-tracking branch 'origin/farm/3c94a6e9/fix-tsc-noemit-coding-agent' 2026-06-04 14:52:43 +02:00
can1357 13b518d845 Merge remote-tracking branch 'origin/farm/e2beffcf/ssh-render-multiline-command-block' 2026-06-04 14:52:23 +02:00
can1357 50b3075d80 Merge remote-tracking branch 'origin/farm/ace3249a/fix-mnemopi-embeddings-never-populated' 2026-06-04 14:52:13 +02:00
can1357 fe3f0024ea Merge remote-tracking branch 'origin/farm/8333346d/tui-plugin-settings-show-marketplace' 2026-06-04 14:51:25 +02:00
can1357 f48ed8b301 Merge remote-tracking branch 'origin/farm/f67b9118/anthropic-cache-control-compat' 2026-06-04 14:51:19 +02:00
can1357 876c9a9b21 Merge remote-tracking branch 'origin/farm/c2f776eb/mcp-results-status-icon' 2026-06-04 14:50:59 +02:00
can1357 f44b805d02 Merge remote-tracking branch 'origin/farm/2dde13da/appendonlycontext-sglang-auto' 2026-06-04 14:50:54 +02:00
can1357 95defa712b docs(compaction): rewrote prompts in terse scratchpad style
- Converted compaction, branch, and handoff prompts to fragment voice.
- Replaced "You MUST" phrasing with bare "MUST" directives.
- Applied same rewrite to autoresearch and turn-aborted prompts.
2026-06-04 14:49:45 +02:00
can1357 f3bbc9f069 docs(coding-agent): rewrote communication style guidelines
- Replaced concise-correctness rules with scratchpad-style reasoning format.
- Added Need/Check/Risk/Decision phrasing patterns and examples.
- Specified Problem/Decision/Keep/Why/Risk/Check/Next structure.
2026-06-04 14:49:45 +02:00
roboomp cf33b64033 fix(mcp): updated completed tool status icons
MCP tool renderers now merge call and result components so completed blocks replace the pending call header with success or error status.

MCP protocol errors now preserve top-level isError so downstream render state can use the error status consistently.

Added renderer coverage for completed MCP success and error blocks.

Fixes #1855
2026-06-04 12:14:57 +00:00