Skip to content

fix(quick-commands): save agent prompts whole, bounded by what a chat message carries - #24488

Merged
brennanb2025 merged 10 commits into
mainfrom
brennanb2025/fix-quick-command-paste
Oct 16, 2026
Merged

brennanb2025 merged 10 commits into
mainfrom
brennanb2025/fix-quick-command-paste

Conversation

@brennanb2025

@brennanb2025 brennanb2025 commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

ELI5

A 7,008-character prompt pasted into an agent quick command looked intact, but saving and reopening kept only its first 6,000 characters. Quick-command storage now preserves the whole prompt and visibly refuses a save it cannot store.

What Changed

Agent prompts save and reopen whole on desktop, phone, and current paired hosts. Settings normalization no longer slices them, and the phone field no longer cuts off pasted prompt text. The existing trailing-whitespace normalization remains.

A prompt is bounded by what one chat message carries: 256 KiB of JSON-escaped text blocks, measured on its actual bytes. The complete saved list must also fit one paired reply. The host and desktop store check before writing; oversized drafts stay intact with Save disabled and an explanation. Terminal commands retain their existing 4,000-character storage bound, but desktop now refuses an oversized command instead of silently saving a trimmed copy.

While a desktop save is pending, editing, Save, Cancel, Escape, and outside dismissal are disabled. Success closes the editor; refusal restores the intact draft so it can be edited or cancelled. This prevents a delayed save from discarding newer edits or closing an editor reopened before the earlier save finished.

Current hosts withhold prompts over 6,000 characters from older clients that would reject the entire list. Older clients can still change their visible commands without deleting the hidden long prompts. An editor connected to an older host shows that host’s 6,000-character bound and update instruction.

Why

The old 6,000-character prompt cap came from a Windows launch threshold, which chooses how a command is delivered rather than what can be saved. A silent storage slice loses user text. Measuring the actual message bytes preserves ordinary prompts while respecting existing transport bounds; refusing a save keeps the original draft available.

The editor now treats submission as one immutable form operation, using the common pattern. Keyboard events consumed by a selector or originating in its popup do not also submit the form. It avoids tracking a second draft version solely to decide which later edits a callback may close.

Linked Issue

Reported directly by the maintainer; no separate issue.

Visual Proof

Earlier branch evidence: paste a 6,984-character prompt ending FINAL LINE - if you can read this, nothing was cut., save, reopen, and scroll to the end.

Main: reopened at 6,000 characters Earlier branch: reopened at 6,984 characters
Before: prompt truncated After: full prompt retained

These screenshots predate the review fixes. They show the storage result, not current-head pending-save behavior. Current-head remote comparison remains incomplete. Windows setup and native dependencies now build successfully, but repeated resource checks refused app launch. The Codex driver checkpointed this QA attempt as blocked. No fresh screenshots are claimed.

Testing

  • Current-head remote Electron comparison on main and branch, including surrounding quick-command flows and the delayed-save interaction.
  • Automated storage, message-budget, compatibility, and editor coverage added/updated.
  • Before the import-only main integration, the focused desktop dialog suite passed all 10 tests, including a 100,000-character prompt, refusal/edit/retry after a delayed save, disabled dismissal, oversized input, accessible error text, and real dropdown trigger/portalled-option keyboard handling. The dropdown regression fails on the prior source and passes with the correction.
  • The credential-retention regression fails on the old source; the corrected focused Windows suite passes all 8 tests. The two-file correction was committed normally and pushed as 0e301f0bfaee2c6f687987d227336a977839066f.
  • Historical full PR workflow passed on b2e62b901c5ac55fc4630de9b54b34b6ecb30b3d: lint, typecheck, all five test shards, relay and cross-version contracts, packaging, selected end-to-end checks, test-selection evidence, and the final aggregate job. Other current-head checks passed or were skipped by their workflow conditions.

The earlier branch reported broader desktop/mobile suites and scoped static checks passing. Those runs are historical evidence, not a current-head validation claim.

AI Disclosure

Review

Four review rounds and independent architecture decisions corrected pending-save ownership, dropdown interaction, and credential-retention ordering. Refusing an oversized settings batch now leaves retained encrypted credentials intact. Nine obsolete delivery threads were resolved; the unexpected save-callback rejection was deferred after a bounded production trace found no concrete failing input. CI is running on current head 0e301f0bfaee2c6f687987d227336a977839066f. Required remote Electron QA and fresh screenshots remain incomplete, so this PR is not ready to merge.

Agent skill upstream boundary

  • Not applicable; no agent skill code changes.

Notes

This PR changes storage only. Launch delivery remains out of scope. The launch work in #24257 and #23962 merged; #24080 and #24081 were closed by the maintainer, so there is no merge-order dependency on them.

Windows has a known existing launch limitation: it still carries the prompt on the launch line, and commands above 6,000 characters use the existing stdin delivery path. Agent launch already accepts unbounded prompts from every entry point. The roughly 7,000-character multiline launch remains unverified. Windows dependency setup and the native build now succeed. The Codex driver completed an independent source check and checkpointed its rendered QA attempt as blocked. Both Windows hosts repeatedly remained below the required 30% free memory; the M4Air load exceeded 260. No test renderer or fresh screenshot exists yet. A launch failure, once verified, is to be reported without expanding this storage PR into delivery work.

The report that the dialog flashes on reopening has not been reproduced and is not claimed fixed. The existing whitespace normalization, transport-derived refusal, terminal-command refusal, and pending-form behavior are intended differences. Withholding incompatible rows from older clients and showing older-host limits are temporary compatibility behavior until supported releases update.

Checklist

  • Storage scope, user-facing before/after, mechanism, and choice of approach explained.
  • Historical before/after screenshots retained and labelled accurately.
  • Execution-host, folder-workspace, mobile, and mixed-version behavior considered.
  • Final integration source verification and previous-head full PR workflow complete.
  • Full PR workflow green on the current correction commit.
  • Remote Electron QA, fresh screenshots, and Windows multiline launch verification complete.

@greptile-apps

greptile-apps Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

RetriggerConfidence Score: 1/5

[High risk] Extends quick-command prompt storage and delivery across the system.

The PR does not appear safe to merge while four previously reported agent-launch and prompt-delivery failures remain outstanding.

Findings

  1. P1 Oversized drafts reject agent creation ▶
  2. P1 Draft fit check misses limits ▶
  3. P1 Auto-submit prompt stays unsubmitted ▶
  4. P1 Missing tab hides prompt failure ▶

Summary

The PR preserves longer quick-command prompts and adds host-aware delivery when a prompt cannot fit on an agent’s launch command. Since the previous review, it also adds a terminal-exit check intended to prevent deferred prompts from being sent to an exited agent.

  • Storage and editor limits are raised, with compatibility handling for older paired clients and hosts.
  • Local and paired launches can defer oversized prompts to a host-owned delivery path.
Diagram
%%{init: {'theme': 'neutral'}}%%
flowchart TD
  A[Save quick command] --> B[Host validates prompt and list size]
  B --> C[Launch agent]
  C --> D{Launch command carries prompt?}
  D -->|Yes| E[Start with prompt inline]
  D -->|No| F[Start agent without prompt]
  F --> G[Wait for live composer]
  G --> H{Agent still running?}
  H -->|Yes| I[Deliver prompt through host]
  H -->|No| J[Report not delivered]
Loading

Reviews (6) · Last reviewed commit: "fix(agent-launch): never paste a launch ..."

Comment thread src/main/runtime/rpc/methods/client-ui.ts
Comment thread src/renderer/src/lib/launch-agent-startup-prompt-plan.ts Outdated

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ No new issues found.

Reviewed changes — reviewed the complete 42-file diff (1 commit) that removes the 6,000-character agent-prompt cap from quick commands and moves the length constraint to launch time.

  • Storage: normalizeTerminalQuickCommands, the settings.updateTerminalQuickCommands schema, and the mobile agentPrompt launch param no longer cap agent prompts. MAX_QUICK_COMMAND_AGENT_PROMPT_LENGTH becomes LEGACY_MAX_QUICK_COMMAND_AGENT_PROMPT_LENGTH, used only when talking to pre-long-prompt builds.
  • Launch: planLaunchAgentStartupPrompt checks the built launch command with agentLaunchCommandFitsPlatform (the renamed draft limit, now also covering Linux/macOS's 128 KB per-argument bound) and falls back to paste-after-ready with auto-submit when it will not fit. launch-agent-in-new-tab suppresses command-code's inline initialAgentStatus when the prompt is pasted instead of riding the command.
  • Host / mixed versions: new terminal.quick-commands.long-prompts.v1 capability, advertised by hosts (RUNTIME_CAPABILITIES) and by every client (remoteRuntimeClientCapabilities). projectTerminalQuickCommandsForClient withholds over-cap commands from clients that do not advertise it, on both the read and update replies, so an older client never rejects the whole list.
  • Mobile: host-built mobile launches now refuse a prompt the host command line cannot carry; editors read the target host's capability to decide whether to cap and refuse rather than trim.
  • Desktop editors: the dialog shows a character counter near a cap and blocks Save over an older host's cap; no cap means no counter and no limit.

I verified the capability is present in both the host and client capability lists, that only upsert/delete mutations exist (so a withheld command cannot be overwritten by an older client's later save), that SettingsUpdate cannot carry quick commands, and that the mobile client capability count stays under the host's 64-entry parse limit. The focused suites for the launch planner, host withholding, editor refusal, and host prompt limit all pass.

Pullfrog  | View workflow run | Using deepseek-v4.1-flash (free via Pullfrog for OSS) | 𝕏

@coderabbitai

coderabbitai Bot commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Quick Command prompts now use host-specific limits, preserve full trimmed text, and validate storage size. Capability negotiation filters long prompts for older clients. Editors show over-limit feedback and prevent invalid saves. Agent launch planning checks platform command limits and can defer oversized prompts. Deferred prompts receive host or client delivery through new runtime, RPC, IPC, and web-runtime paths.

Priority: ➖ Normal

Merge Risk: 🟡 Moderate · up to 86969

Resolve the launch-size and retained-secret risks before merging. Failed prompt delivery can also miss its notice, and an exited terminal can leave delivery pending for several minutes.

Security architecture risk: 🟡 Moderate · up to 86969

Long text now arrives automatically after startup. Existing identity checks limit exposure, but ownership enforcement and safety when the receiving program changes remain incompletely established. Rejected settings edits also have a supported risk of leaving secret-retention state inconsistent.

Retained concerns

  • Medium · security · inferred: The new launch-prompt IPC route does not apply the explicit mobile-driver gate used by ordinary renderer writes before delegating to the runtime writer. Whether lower-level admission preserves that ownership boundary remains unresolved; sender authentication alone does not establish equivalent terminal-input authority.
  • Medium · security · inferred: Deferred delivery separates readiness from automatic paste and submission. Stable handle and PTY-generation checks protect against terminal reincarnation, but the inspected path does not establish that the intended program remains the consumer through the write and submission stages. A return to a shell within the same terminal is therefore an unresolved security-relevant transition, not a verified command-execution finding.
  • Medium · reliability · inferred: A combined settings update can clear protected-secret retention state before the newly added quick-command storability assertion rejects the update. Settings assignment and save scheduling occur later, so rejection leaves settings and immediate disk state unchanged while the retention maps have already changed. This breaks rollback consistency across settings and secret-state ownership; permanent secret loss was not established.
Security review details

Security Blast Radius

  • inferred — The new desktop operation accepts caller-selected text and a PTY identifier from the authenticated main window, then resolves a runtime terminal handle. Potential exposure is bounded by runtime-resolvable terminals and downstream write admission; cross-driver and paired-environment scope remains incompletely established.

Security Findings and Attack Paths

  • inferred — A caller already able to invoke main-window IPC could request automatic text delivery to a runtime-resolved terminal through a path different from ordinary writes. A mobile-ownership bypass or write into a replacement foreground program was not verified; both remain decision-relevant boundary questions rather than established exploits.

Trust Boundaries and Controls

  • observed — The route preserves main-window sender authentication and resolves terminal identity before delivery. The writer fences terminal generation and permission transitions. The unanswered-startup-dialog test shows no prompt send, providing direct counterevidence against blindly pasting into a known dialog.

Resilience and Maintainability Implications

  • inferred — Duplicate suppression reduces accidental repeated submission, but rejected settings updates have a separate rollback inconsistency affecting protected-secret retention. Immediate disk mutation is counterevidenced by later save scheduling; subsequent persistence consequences remain unverified.

Hardening Proposals

  • proposed — Make deferred-launch admission explicitly bind the allowed input owner and intended consuming program through submission. Stage protected-secret retention changes until all settings validation succeeds, or provide rollback for a rejected transaction.
Pre-merge checks: Passed 4 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 36.36% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 110 functions across 99 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 4 passed
Check name Status Explanation
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Title check Passed The title clearly identifies the main change: preserving agent prompts while enforcing the applicable message-size bound.
Description check Passed The description is detailed and covers the required explanation, changes, rationale, testing, visual evidence, review notes, compatibility considerations, and checklist. The Linked Issue section has n…
  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Commit to this branch
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Autopilot is currently an internal CodeRabbit preview.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3


ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Advanced

Run ID: 6fdbb4ee-1e99-42b7-8ada-a54eae52ac03

📥 Commits

Reviewing files that changed from the base of the PR and between 0d2300c and 56ae836.

📒 Files selected for processing (42)
  • mobile/src/session/MobileSessionSheets.tsx
  • mobile/src/session/QuickCommandEditorForm.tsx
  • mobile/src/session/QuickCommandsSheet.test.ts
  • mobile/src/session/QuickCommandsSheet.tsx
  • mobile/src/session/quick-command-draft.test.ts
  • mobile/src/session/quick-command-draft.ts
  • mobile/src/session/use-mobile-session-feedback-capabilities.ts
  • mobile/src/session/use-mobile-session-tab-reconciliation.ts
  • mobile/src/terminal/quick-commands.ts
  • src/cli/runtime/websocket-transport.test.ts
  • src/main/runtime/orca-runtime-resolve-mobile-session-terminal-command.ts
  • src/main/runtime/orca-runtime-tests/mobile-session-tabs-part-11.spec.ts
  • src/main/runtime/rpc/methods/client-ui.test.ts
  • src/main/runtime/rpc/methods/client-ui.ts
  • src/main/runtime/rpc/methods/terminal-quick-command-long-prompt-capability.test.ts
  • src/main/runtime/rpc/methods/terminal-quick-command-long-prompt-capability.ts
  • src/renderer/src/components/settings/QuickCommandsPane.tsx
  • src/renderer/src/components/tab-bar/TabBarQuickCommandsButton.tsx
  • src/renderer/src/components/terminal-pane/TerminalQuickCommandEditorDialog.tsx
  • src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandContentSection.tsx
  • src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandDialog.test.tsx
  • src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandDialog.tsx
  • src/renderer/src/hooks/use-terminal-quick-command-hosts.test.ts
  • src/renderer/src/i18n/locales/en.json
  • src/renderer/src/lib/launch-agent-in-new-tab.ts
  • src/renderer/src/lib/launch-agent-startup-prompt-plan.test.ts
  • src/renderer/src/lib/launch-agent-startup-prompt-plan.ts
  • src/renderer/src/lib/terminal-quick-command-host-prompt-limit.ts
  • src/renderer/src/store/slices/terminal-quick-command-hosts.test.ts
  • src/renderer/src/store/slices/terminal-quick-command-hosts.ts
  • src/renderer/src/web/web-runtime-client.test.ts
  • src/renderer/src/web/web-runtime-connection-frame-router.ts
  • src/shared/agent-draft-platform-limit.ts
  • src/shared/agent-launch-command-platform-limit.ts
  • src/shared/protocol-version.ts
  • src/shared/remote-runtime-client-capabilities.ts
  • src/shared/rpc-contract/session-tabs-schemas-params.ts
  • src/shared/rpc-contract/terminal-quick-command-params.ts
  • src/shared/terminal-quick-command-capabilities.ts
  • src/shared/terminal-quick-commands.test.ts
  • src/shared/terminal-quick-commands.ts
  • src/shared/tui-agent-startup.ts
💤 Files with no reviewable changes (3)
  • src/shared/agent-draft-platform-limit.ts
  • src/main/runtime/rpc/methods/client-ui.test.ts
  • src/shared/rpc-contract/session-tabs-schemas-params.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 5 remain after this review.

Comment thread src/renderer/src/lib/launch-agent-startup-prompt-plan.ts Outdated
Comment thread src/shared/agent-launch-command-platform-limit.ts Outdated
Comment thread src/shared/agent-launch-command-platform-limit.ts Outdated
Comment thread src/renderer/src/runtime/web-runtime-agent-session-create-params.ts Outdated
Comment thread src/shared/terminal-quick-commands.ts Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Advanced

Run ID: abf4fe28-a491-44df-9931-814049cfe908

📥 Commits

Reviewing files that changed from the base of the PR and between 56ae836 and ce5c070.

📒 Files selected for processing (83)
  • mobile/src/session/MobileSessionSheets.tsx
  • mobile/src/session/QuickCommandEditorForm.tsx
  • mobile/src/session/QuickCommandsSheet.test.ts
  • mobile/src/session/QuickCommandsSheet.tsx
  • mobile/src/session/quick-command-draft.test.ts
  • mobile/src/session/quick-command-draft.ts
  • mobile/src/session/use-mobile-session-feedback-capabilities.ts
  • mobile/src/session/use-mobile-session-tab-reconciliation.ts
  • mobile/src/terminal/quick-commands.ts
  • src/main/agent-launch/agent-launch-executor.test.ts
  • src/main/agent-launch/agent-launch-executor.ts
  • src/main/agent-launch/agent-launch-prompt-delivery.ts
  • src/main/agent-launch/agent-launch-surface-factories.ts
  • src/main/ipc/pty/ipc/write-launch-prompt.test.ts
  • src/main/ipc/pty/ipc/write.ts
  • src/main/ipc/pty/register-handlers.ts
  • src/main/persistence/applying-settings/settings-update-terminal-quick-commands.test.ts
  • src/main/persistence/applying-settings/settings-update.ts
  • src/main/providers/windows-shell-args.ts
  • src/main/runtime/agent-terminal-startup-prompt.test.ts
  • src/main/runtime/orca-runtime-agent-session-oversized-prompt.test.ts
  • src/main/runtime/orca-runtime-create-agent-session.ts
  • src/main/runtime/orca-runtime-create-terminal-desktop.ts
  • src/main/runtime/orca-runtime-create-terminal.ts
  • src/main/runtime/orca-runtime-resolve-worktree-removal-target.ts
  • src/main/runtime/orca-runtime-stop-exact-terminals-for-worktree.ts
  • src/main/runtime/rpc/methods/agent-launch-surfaces.ts
  • src/main/runtime/rpc/methods/terminal/terminal-launch-prompt-send.ts
  • src/main/runtime/rpc/methods/terminal/terminal-send-method.ts
  • src/main/runtime/rpc/terminal-launch-prompt-send.test.ts
  • src/main/runtime/runtime-terminal-contracts.ts
  • src/main/runtime/terminal-run-facts-input.test.ts
  • src/preload/api/pty-api.ts
  • src/preload/api/pty-bridge-session-control.ts
  • src/renderer/src/components/settings/QuickCommandsPane.tsx
  • src/renderer/src/components/tab-bar/TabBarQuickCommandsButton.tsx
  • src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandContentSection.tsx
  • src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandDialog.test.tsx
  • src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandDialog.tsx
  • src/renderer/src/i18n/locales/en.json
  • src/renderer/src/i18n/locales/fr.json
  • src/renderer/src/i18n/locales/ja.json
  • src/renderer/src/i18n/locales/ko.json
  • src/renderer/src/i18n/locales/zh.json
  • src/renderer/src/lib/agent-launch-prompt-delivery.test.ts
  • src/renderer/src/lib/agent-launch-prompt-delivery.ts
  • src/renderer/src/lib/agent-launch-prompt-host-delivery.test.ts
  • src/renderer/src/lib/agent-launch-prompt-host-delivery.ts
  • src/renderer/src/lib/launch-agent-in-new-tab-web-runtime.test.ts
  • src/renderer/src/lib/launch-agent-in-new-tab-windows-quoting.test.ts
  • src/renderer/src/lib/launch-agent-in-new-tab.ts
  • src/renderer/src/lib/launch-agent-paste-timeout-notice.ts
  • src/renderer/src/lib/launch-agent-startup-prompt-plan.test.ts
  • src/renderer/src/lib/launch-agent-startup-prompt-plan.ts
  • src/renderer/src/lib/launch-agent-web-host-tab.ts
  • src/renderer/src/lib/terminal-quick-command-host-prompt-limit.ts
  • src/renderer/src/lib/terminal-quick-command-search.test.ts
  • src/renderer/src/lib/terminal-quick-command-search.ts
  • src/renderer/src/runtime/web-runtime-agent-session-create-params.ts
  • src/renderer/src/runtime/web-runtime-session-terminal-deferred-prompt.test.ts
  • src/renderer/src/runtime/web-runtime-session-types.ts
  • src/renderer/src/runtime/web-runtime-session.ts
  • src/renderer/src/runtime/web-runtime-terminal-create-operation.ts
  • src/renderer/src/runtime/web-runtime-terminal-creation.ts
  • src/renderer/src/runtime/web-runtime-terminal-identity.ts
  • src/renderer/src/store/slices/terminal-quick-command-hosts.ts
  • src/renderer/src/web/preload-api/web-terminal-api.ts
  • src/shared/agent-launch-command-line-budget.test.ts
  • src/shared/agent-launch-command-line-budget.ts
  • src/shared/agent-session-host-authority.ts
  • src/shared/hermes-startup-query.ts
  • src/shared/hermes-startup-query.windows.test.ts
  • src/shared/protocol-version.ts
  • src/shared/rpc-contract/agent-session-params.ts
  • src/shared/rpc-contract/session-tabs-schemas-params.ts
  • src/shared/rpc-contract/terminal-quick-command-params.ts
  • src/shared/rpc-contract/terminal-unary-params.ts
  • src/shared/runtime-terminal-contracts.ts
  • src/shared/runtime-terminal-create-contract.ts
  • src/shared/terminal-quick-command-capabilities.ts
  • src/shared/terminal-quick-commands.ts
  • src/shared/tui-agent-startup-oversized-prompt.test.ts
  • src/shared/tui-agent-startup.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/renderer/src/i18n/locales/en.json

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 2 remain after this review.

Comment thread src/main/persistence/applying-settings/settings-update.ts

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ No critical issues — a couple of minor suggestions inline.

Reviewed changes — re-reviewed the delta since the prior pullfrog review (56ae836): commits c81b438 (host-side deferred launch-prompt delivery) and ce5c070 (100,000-char cap plus host-derived editor cap), with 772b696 bringing origin/main in.

  • Deferred prompt delivery rework: the runtime create now reports startupPromptDeferred and each caller delivers the text through the host's agent-prompt writer instead of refusing the launch. Adds a deferOversizedPrompt opt-in to terminal.createAgentSession, a terminal.send { launchPrompt: true } delivery, and a local pty:deliverAgentLaunchPrompt IPC.
  • Launch budget: agentLaunchCommandFitsPlatform becomes launchCommandFits in agent-launch-command-line-budget.ts; Windows is judged against cmd.exe (each "/\ weighted twice, plus a shim-prefix reserve) and POSIX against a 128 KiB per-argument limit.
  • Storage cap: agent prompts are capped at 100,000 characters and the whole list is given a serialized byte budget, both enforced once in updateSettings; saves are refused rather than trimmed.
  • Host cap negotiation: editors derive each host's cap from runtime status capabilities, dropping the separate acceptsLongPrompts probe; over-cap refusals are static alert text with a separate live count.
  • Legacy mobile path restored: agentPrompt is back to its 6,000-character cap and the host-built mobile refusal is gone.

Pullfrog  | Fix all ➔ | Fix 👍s ➔ | View workflow run | Using deepseek-v4.1-flash (free via Pullfrog for OSS) | 𝕏

Comment thread src/shared/terminal-quick-commands.ts Outdated
Comment thread src/renderer/src/lib/launch-agent-in-new-tab.ts Outdated
Comment thread src/main/runtime/host-launch-prompt-deliveries.ts Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2


ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Advanced

Run ID: d10cb423-c489-4b21-876b-e9271bb1c75a

📥 Commits

Reviewing files that changed from the base of the PR and between ce5c070 and 1e18fb5.

📒 Files selected for processing (41)
  • src/main/ipc/pty/ipc/write-launch-prompt.test.ts
  • src/main/ipc/pty/ipc/write.ts
  • src/main/persistence/applying-settings/settings-update-terminal-quick-commands.test.ts
  • src/main/runtime/agent-session-create-launch-plan.ts
  • src/main/runtime/host-launch-prompt-deliveries.ts
  • src/main/runtime/orca-runtime-agent-session-oversized-prompt.test.ts
  • src/main/runtime/orca-runtime-create-agent-session.ts
  • src/main/runtime/orca-runtime-create-terminal-dependencies.ts
  • src/main/runtime/rpc/methods/terminal/terminal-lifecycle-methods.ts
  • src/main/runtime/runtime-terminal-contracts.ts
  • src/main/runtime/terminal-run-facts-input.test.ts
  • src/preload/api/pty-api.ts
  • src/preload/api/pty-bridge-session-control.ts
  • src/renderer/src/components/settings/QuickCommandsPane.tsx
  • src/renderer/src/components/tab-bar/TabBarQuickCommandsButton.tsx
  • src/renderer/src/components/terminal-pane/TerminalQuickCommandEditorDialog.tsx
  • src/renderer/src/components/terminal-pane/use-terminal-pane-startup-actions.ts
  • src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandDialog.test.tsx
  • src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandDialog.tsx
  • src/renderer/src/lib/agent-launch-prompt-host-delivery.test.ts
  • src/renderer/src/lib/agent-launch-prompt-host-delivery.ts
  • src/renderer/src/lib/launch-agent-in-new-tab-web-runtime.test.ts
  • src/renderer/src/lib/launch-agent-in-new-tab.ts
  • src/renderer/src/lib/launch-agent-startup-prompt-plan.ts
  • src/renderer/src/lib/launch-agent-web-host-tab.ts
  • src/renderer/src/lib/paired-host-long-prompt-compat.ts
  • src/renderer/src/lib/terminal-quick-command-host-prompt-limit.test.ts
  • src/renderer/src/runtime/web-runtime-agent-session-create-params.ts
  • src/renderer/src/runtime/web-runtime-session-terminal-deferred-prompt.test.ts
  • src/renderer/src/runtime/web-runtime-session-types.ts
  • src/renderer/src/runtime/web-runtime-terminal-create-operation.ts
  • src/renderer/src/runtime/web-runtime-terminal-creation.ts
  • src/renderer/src/runtime/web-runtime-terminal-identity.ts
  • src/renderer/src/store/slices/settings-terminal-quick-commands.test.ts
  • src/renderer/src/store/slices/settings.ts
  • src/renderer/src/web/preload-api/web-terminal-api.ts
  • src/shared/agent-session-host-authority.ts
  • src/shared/rpc-contract/terminal-unary-params.ts
  • src/shared/runtime-terminal-contracts.ts
  • src/shared/runtime-terminal-create-contract.ts
  • src/shared/terminal-quick-commands.ts
💤 Files with no reviewable changes (1)
  • src/shared/runtime-terminal-create-contract.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 1 remain after this review.

Comment thread src/renderer/src/runtime/web-runtime-terminal-creation.ts Outdated
Comment thread src/main/runtime/agent-session-create-launch-plan.ts Outdated
Comment thread src/shared/agent-launch-command-line-budget.ts Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Advanced

Run ID: 65f0ebb6-dd6e-40b1-967f-a800dd4332cf

📥 Commits

Reviewing files that changed from the base of the PR and between 1e18fb5 and 8bd86d9.

📒 Files selected for processing (17)
  • src/main/runtime/agent-session-create-launch-plan.ts
  • src/main/runtime/orca-runtime-agent-session-oversized-prompt.test.ts
  • src/main/runtime/orca-runtime-create-agent-session.ts
  • src/main/runtime/runtime-terminal-contracts.ts
  • src/renderer/src/lib/launch-agent-in-new-tab.ts
  • src/renderer/src/lib/launch-agent-startup-prompt-plan.ts
  • src/renderer/src/lib/launch-agent-web-host-tab.ts
  • src/renderer/src/lib/paired-host-long-prompt-compat.ts
  • src/renderer/src/runtime/web-runtime-agent-session-create-params.ts
  • src/renderer/src/runtime/web-runtime-session-terminal-deferred-prompt.test.ts
  • src/renderer/src/runtime/web-runtime-terminal-creation.ts
  • src/renderer/src/runtime/web-runtime-terminal-identity.ts
  • src/shared/agent-launch-command-line-budget.test.ts
  • src/shared/agent-launch-command-line-budget.ts
  • src/shared/agent-session-host-authority.ts
  • src/shared/tui-agent-startup-oversized-prompt.test.ts
  • src/shared/tui-agent-startup.ts
💤 Files with no reviewable changes (1)
  • src/main/runtime/runtime-terminal-contracts.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 0 remain after this review.

Comment thread src/renderer/src/lib/launch-agent-startup-prompt-plan.ts Outdated
Comment thread src/renderer/src/lib/paired-host-long-prompt-compat.ts Outdated
Comment thread src/renderer/src/lib/launch-agent-web-host-tab.ts Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
src/renderer/src/runtime/web-runtime-terminal-creation.ts (1)

56-69: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Catch a rejected client paste so promptDelivered resolves to false.

deliverLaunchPromptToAgentTab rethrows when the paste rejects. launchAgentInWebHostTab awaits promptDelivered and does not catch the error. The user then gets no notifyPromptNotSent notice. An auto-submit launch also leaves the rejection unhandled. Add a .catch that returns false.

Proposed fix
-          })
+          }).catch((error) => {
+            console.error('Prompt delivery failed after launch', error)
+            return false
+          })

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Advanced

Run ID: 4ee1e4ca-3db3-4673-ba9f-77bd903199e2

📥 Commits

Reviewing files that changed from the base of the PR and between 8bd86d9 and 869697d.

📒 Files selected for processing (36)
  • src/cli/handlers/terminal.ts
  • src/cli/terminal-format.ts
  • src/main/agent-launch/agent-launch-executor.test.ts
  • src/main/agent-launch/agent-launch-executor.ts
  • src/main/agent-launch/agent-launch-prompt-delivery.ts
  • src/main/agent-launch/agent-launch-surface-factories.ts
  • src/main/ipc/pty/ipc/write-launch-prompt.test.ts
  • src/main/ipc/pty/ipc/write.ts
  • src/main/runtime/host-launch-prompt-deliveries.ts
  • src/main/runtime/launch-prompt-startup-dialog-transcript.test.ts
  • src/main/runtime/orca-runtime-agent-session-oversized-prompt.test.ts
  • src/main/runtime/orca-runtime-create-agent-session.ts
  • src/main/runtime/rpc/methods/agent-launch-surfaces-terminal-prompt.test.ts
  • src/main/runtime/rpc/methods/agent-launch-surfaces.ts
  • src/main/runtime/rpc/methods/agent-launch-terminal-prompt.ts
  • src/main/runtime/rpc/methods/terminal/terminal-lifecycle-methods.ts
  • src/preload/api/pty-api.ts
  • src/preload/api/pty-bridge-session-control.ts
  • src/renderer/src/lib/launch-agent-in-new-tab-web-runtime.test.ts
  • src/renderer/src/lib/launch-agent-in-new-tab.ts
  • src/renderer/src/lib/launch-agent-web-host-tab.ts
  • src/renderer/src/lib/paired-host-long-prompt-compat.ts
  • src/renderer/src/runtime/web-runtime-agent-session-create-params.ts
  • src/renderer/src/runtime/web-runtime-session-terminal-deferred-prompt.test.ts
  • src/renderer/src/runtime/web-runtime-session-terminal-host-authority.test.ts
  • src/renderer/src/runtime/web-runtime-session-types.ts
  • src/renderer/src/runtime/web-runtime-terminal-create-operation.ts
  • src/renderer/src/runtime/web-runtime-terminal-creation.ts
  • src/renderer/src/runtime/web-runtime-terminal-identity.ts
  • src/shared/agent-launch-command-line-budget.ts
  • src/shared/agent-launch-intent.ts
  • src/shared/agent-session-host-authority.ts
  • src/shared/host-launch-prompt-budget.ts
  • src/shared/runtime-terminal-contracts.ts
  • src/shared/runtime-types.ts
  • src/shared/terminal-quick-command-capabilities.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 2 remain after this review.

Comment thread src/main/runtime/rpc/methods/agent-launch-terminal-prompt.ts Outdated
@brennanb2025 brennanb2025 changed the title fix(quick-commands): save and run agent prompts of any length fix(quick-commands): save agent prompts up to 40,000 characters and paste the ones a command line can't carry Oct 2, 2026
@brennanb2025

Copy link
Copy Markdown
Contributor Author

Review status: ready for a final look. Not merged; merging is Brennan's call.

The problem. Agent quick-command prompts were silently cut to 6,000 characters on save. A 7,008-character review prompt reopened ending mid-sentence ("…and the fixer"), with no warning. The 6,000 was a Windows launch speed threshold that had been read as a hard limit.

What changes for you.

  • Saving: prompts up to 40,000 characters save and reopen whole, on desktop and mobile. Above that, the editor shows the count and refuses to save; it never trims. A refused save keeps the dialog open with your text.
  • Running: a prompt that fits the agent's start-up command rides it, as before. One that doesn't fit (in practice, Windows prompts over about 7,650 characters) starts the agent clean. The machine running the agent then pastes and submits the prompt once the agent is ready. If the agent opens with a start-up question such as folder trust, it waits for you to answer, up to 5 minutes, and never types into the question.
  • Older Orca on either end: older hosts get a 6,000 cap in the editor, and the desktop pastes for them. Older clients don't see long commands until they update.

How the review went. Four review rounds, plus an architecture challenge in round 1 and again after each redesign. The first version's save fix was right, but its launch half was in the wrong place, so it was largely rebuilt:

  • Phone launches: a long prompt went onto the agent's start-up command unchecked, through a path the first version's refusal didn't cover. Fixed: the host decides and pastes.
  • Windows: the first version's 24,000-character check ignored cmd.exe's 8,191 limit. Fixed: one worst-case Windows rule.
  • No real cap: "no limit" really meant hidden connection limits. One oversized list dropped the whole paired session, and a large save disconnected. Fixed: a declared 40,000 cap, derived from the tightest real limit, plus a size budget for the whole list.
  • Paired hosts: the desktop drove the paste in a second step, so a dropped connection lost the prompt silently and a retry could paste twice. Fixed: the host owns the delivery and replies straight away. The desktop only reads the outcome, using the same outcome words agent.launch already reports.
  • Smaller fixes:
    • a draft regression on paired Windows hosts (drafts are now exactly as on main);
    • start-up questions ending delivery early;
    • an exited agent read as ready;
    • a false "update the host" refusal;
    • accessibility of the refusal message;
    • translations.

Deferred (each listed as temporary in the PR body, with its follow-up):

  • Make "paste when it doesn't fit" a required choice for all 21 launch-plan callers, and move the remaining writers onto the host writer. This includes agent.launch's new-worktree branch, opencode, and background and source-control launches.
  • Give agent.launch the same start-up-question wait. Its receipt contract is unchanged in this PR.
  • Retire the older-version compatibility once no supported release lacks terminal.quick-commands.long-prompts.v1.

Verified

  • Live QA, macOS (hidden isolated dev copy):
    • a 7,000-character prompt saves, reopens and survives a restart, with the same hash, from both editors;
    • the counter appears near the cap; at 45,000 the refusal shows, nothing is trimmed, and Save is disabled;
    • running it hands the whole prompt to the agent as one argument (checked against a stand-in that records its arguments).
  • Automated: 51 targeted test files (1,977 tests). Each new test was checked by disabling its part of the fix. Cross-version wire suites pass. The node, web, CLI and mobile typechecks are clean. A readiness checklist found no blocking issues.

Not verified

  • A real agent receiving a pasted prompt on any OS. The start-up-question wait is tested against captured agent screens, not a live agent.
  • Windows.
  • Real older builds.
  • The phone editor with a long paste: the emulator's typing tool drops keystrokes on long text.
  • A real connection drop during delivery.

CI. static analysis fails on three lint errors in tests/e2e/helpers/terminal-pty-write-spy.unit.test.ts. That file came from main in #24556, which merged before its own check ran, and it's byte-identical to main's copy; none of the errors are in this PR's code. Because static analysis failed, CI skipped the test, package and e2e jobs, so the full CI suite has not run on this head yet. The local targeted suites and typechecks above are the evidence so far. Once main's lint errors are fixed, merging main here will let the full suite run.

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ No new issues found.

Reviewed changes — re-reviewed the delta since the prior pullfrog review (ce5c0707), which is seven authored commits (the served incremental only covered the final push, so this covers the whole unreviewed span) that move the delivery of a launch prompt the host command line cannot carry onto the host, plus the quick-command cap change.

  • Host-owned deferral: agent-session-create-launch-plan.ts now plans every terminal.createAgentSession with deferral; orca-runtime-create-agent-session.ts starts the write itself and replies launchPrompt: { outcome: 'pending' }. The deferOversizedPrompt request field and its schema entry are gone.
  • Per-runtime record: host-launch-prompt-deliveries.ts keys one delivery per terminal handle on the runtime that writes it, deduping retried and reclaimed creates.
  • Observation, not a second send: clients read the outcome through terminal.wait { for: 'launch-prompt' }; the terminal.send { launchPrompt: true } path (terminal-launch-prompt-send.ts) is deleted.
  • Startup dialogs and exited panes: waitForLaunchComposer re-arms through a dialog up to a 5-minute deadline and refuses to paste into a terminal that exited.
  • Paired older hosts: paired-host-long-prompt-compat.ts makes the client paste a long prompt after ready when the host lacks terminal.quick-commands.long-prompts.v1, and the legacy create route runs a clean launch.
  • Local desktop: pty:deliverAgentLaunchPrompt shares the host record and deadline and now returns the disposal.
  • Cap: MAX_QUICK_COMMAND_AGENT_PROMPT_LENGTH is 40,000 (down from the branch's 100,000) so a saved prompt fits the tightest path, and a refused save keeps the dialog open.
  • Types: LaunchPromptWritingRuntime names the registry owner; the ledger test reads through a typed subclass instead of Reflect.get.

Both prior inline threads (mixed-version paired launch; aggregate budget invisible to the editor) are addressed and were resolved.

Pullfrog  | View workflow run | Using deepseek-v4.1-flash (free via Pullfrog for OSS) | 𝕏

… message carries

Agent quick-command prompts were silently cut to 6,000 characters on save:
the editor accepted a long paste, settings normalization trimmed it, and
reopening showed the shortened copy. The 6,000 was a Windows launch speed
threshold, not a limit on prompts.

- Storage no longer trims. A save is refused, never trimmed, when a prompt's
  chat text block is over 256 KiB of JSON (measured on its real escaped size,
  the measure the chat send schema applies) or the list is too large for one
  paired reply. Host and desktop store both check before writing.
- The editor shows the size against the limit and blocks Save past it, and
  stays open with the text when the host refuses the save.
- terminal.quick-commands.long-prompts.v1: hosts withhold prompts over 6,000
  characters from clients that do not advertise it (older clients reject a
  whole list holding one); editors keep an older host's 6,000 cap.
- The phone editor no longer drops pasted text past 6,000 via maxLength.

Launch delivery of long prompts is left to the launch-prompt series
(#24257, #23962, #24080); this branch's earlier paste-after-ready delivery
duplicated it and is removed.
@brennanb2025
brennanb2025 force-pushed the brennanb2025/fix-quick-command-paste branch from f98b149 to 602d1a7 Compare October 3, 2026 00:24
@brennanb2025 brennanb2025 changed the title fix(quick-commands): save agent prompts up to 40,000 characters and paste the ones a command line can't carry fix(quick-commands): save agent prompts whole, bounded by what a chat message carries Oct 3, 2026
@brennanb2025

Copy link
Copy Markdown
Contributor Author

Reworked; the review status above is out of date.

This PR is now only the storage fix: quick-command prompts save whole, bounded by what one chat message carries (256 KB, measured on the prompt's actual size) instead of a fixed 6,000 or 40,000 characters.

The launch-delivery code this branch had grown (pasting a prompt too long for the command line once the agent is ready) duplicated the launch-prompt series and is removed. #24080 already covers quick commands: the prompt rides the command line, or a launch file when the line can't carry it.

Merge order: after #24080. The previous head was f98b1491a40.

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ No critical issues — one trivial nit below.

Reviewed changes — re-reviewed the delta since the prior pullfrog review (f98b1491): the branch was rebased onto main and squashed, dropping its own launch-prompt delivery and re-scoping the save bound.

  • Launch delivery removed: the host-owned deferral, paired-host paste-after-ready, PendingLaunchPrompt outcome, and command-line budget are gone; those files are back to main. A long saved prompt now launches through the existing path, which the PR documents as merge-order-after-#24080.
  • Byte-based storage bound: normalizeTerminalQuickCommands no longer trims agent prompts; assertTerminalQuickCommandsStorable refuses a prompt whose single-text-block JSON exceeds 256 KiB, or a list over 4 MiB − 128 KiB, at both the host settings update and the desktop store.
  • Capability + withholding: terminal.quick-commands.long-prompts.v1 is advertised by the host and every remote client; projectTerminalQuickCommandsForClient omits over-6,000-char prompts from clients that do not advertise it, on reads and update replies.
  • Editors: the desktop dialog and mobile form show a KB/character count near the limit, refuse instead of trimming, and await onSave so a host refusal keeps the text.
  • Search: long prompt bodies are normalized once via a WeakMap, not per keystroke.

The two prior inline threads (mixed-version paired launch, aggregate-budget visibility) are moot or resolved — the launch path they discussed was removed, and saveDraft now awaits onSave.

ℹ️ Nitpicks

  • mobile/src/session/QuickCommandEditorForm.tsx:26 — duplicate doc comment: /** The host's agent-prompt cap. */ immediately precedes the accurate /** An older host's agent-prompt character cap; null means none. */. Drop the first.

Pullfrog  | Fix it ➔ | View workflow run | Using deepseek-v4.1-flash (free via Pullfrog for OSS) | 𝕏

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ No new issues found.

Reviewed changes — re-reviewed the delta since the prior pullfrog review (602d1a7): two authored commits on top of a merge of main at a154562.

  • Desktop own-host capability parity: DESKTOP_RENDERER_RUNTIME_CLIENT_CAPABILITIES now advertises terminal.quick-commands.long-prompts.v1, so the desktop renderer's own main process does not withhold over-6,000-character prompts from it. This also restores the invariant pinned by desktop-renderer-runtime-capabilities.test.ts, which the capability's addition to the shared remote base set had broken (it was in missingFrom(PAIRED_HOST_RECEIVES, DESKTOP…) without a recorded decision).
  • Merge of main: main had moved the browser capability list into web-runtime-client-capabilities.ts; the merge resolution re-added the long-prompts capability there, with web-runtime-client.test.ts updated to match.
  • Prior nit removed: dropped the stale /** The host's agent-prompt cap. */ duplicate above agentPromptMaxLength.

I confirmed the capability reaches every client path that reads quick commands: the paired-host proxy wraps the bare Electron list via remoteRuntimeClientCapabilities in remote-runtime-request-socket.ts:67 and remote-runtime-request-connection.ts:240, web and desktop-own-host now list it explicitly, and mobile/CLI inherit it from the shared base.

Pullfrog  | View workflow run | Using deepseek-v4.1-flash (free via Pullfrog for OSS) | 𝕏

…k-command-paste

# Conflicts:
#	src/cli/runtime/websocket-transport.test.ts
#	src/main/ipc/desktop-renderer-runtime-capabilities.ts
#	src/main/runtime/rpc/methods/client-ui.ts
#	src/main/runtime/rpc/ws-transport.ts
#	src/shared/protocol-version.ts
#	src/shared/remote-runtime-client-capabilities.ts
@brennanb2025

brennanb2025 commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor Author

Saving and reopening a 7,008-character agent quick command used to keep only its first 6,000 characters because storage reused a launch threshold. This PR preserves the whole prompt, or visibly refuses a save that exceeds the existing message and reply budgets. Launch delivery stays outside this PR.

Four review rounds corrected pending-save editing and dismissal, dropdown keyboard handling, and a credential-retention ordering bug. A rejected settings batch could discard recoverable encrypted credentials before validation finished; commit 0e301f0bfaee2c6f687987d227336a977839066f moves those removals after acceptance. The existing refusal regression fails on the old code because both credentials are removed, and all 8 tests in the focused Windows suite pass with the fix. The earlier focused dialog suite passed all 10 tests and its dropdown regression failed on the prior source.

The 11 remaining review threads were resolved: nine concerned delivery changes absent from the final diff, one is fixed by the credential correction, and the unexpected save-callback rejection remains a deferred concern after tracing production error handling without finding a concrete failing input. A reconnect during saving can leave the editor open without feedback; that source-only observation is deferred. The settings handler's existing theme side effect remains outside this narrow fix; this does not make the whole settings API transactional.

Not ready to merge. CI is running for current head 0e301f0bfaee2c6f687987d227336a977839066f; the previous head's successful workflow is historical evidence. Required remote Electron comparison and fresh screenshots remain incomplete. Windows setup and the native dependency build now succeed. The Codex driver completed the source verification and checkpointed its UI QA attempt as blocked. Repeated launch checks safely refused to start because free memory on both Windows hosts stayed below the required 30%. A fresh M4Air check found a load average above 260, so no app was launched there either. No test renderer was launched. The roughly 7,000-character multiline Windows launch remains unverified and any delivery failure will be reported without widening this storage change.

Terminal commands retain their 4,000-character bound; visible refusal replaces silent trimming intentionally. Older-client filtering and older-host limits are temporary compatibility behavior. The reopening flash was not reproduced and is not claimed fixed. No merge or auto-merge was performed.

@brennanb2025
brennanb2025 merged commit 7c23f79 into main Oct 16, 2026
50 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants