From 200a6e80706b46accd4f5d42a22f9d5511a6f792 Mon Sep 17 00:00:00 2001 From: Heng Liu Date: Fri, 23 Oct 2026 20:49:02 +0000 Subject: [PATCH 1/3] fix(cli-agent): keep Kiro multiline input visible --- app/src/terminal/cli_agent.rs | 3 +- app/src/terminal/cli_agent_tests.rs | 1 + .../view/use_agent_footer/mod_tests.rs | 45 ++ .../kiro-multiline-input-scroll.html | 637 ++++++++++++++++++ 4 files changed, 685 insertions(+), 1 deletion(-) create mode 100644 review_artifacts/kiro-multiline-input-scroll.html diff --git a/app/src/terminal/cli_agent.rs b/app/src/terminal/cli_agent.rs index fc2d34c7b5e..bb45d308325 100644 --- a/app/src/terminal/cli_agent.rs +++ b/app/src/terminal/cli_agent.rs @@ -402,7 +402,8 @@ impl CLIAgent { /// Whether Warp should show its CLI-agent footer for this agent. pub(crate) fn supports_cli_agent_footer(&self) -> bool { - !matches!(self, CLIAgent::WarpTui) + // Kiro's live prompt grows to the terminal bottom, so reserving footer rows can hide its cursor. + !matches!(self, CLIAgent::Kiro | CLIAgent::WarpTui) } /// Returns the brand color for this CLI agent, or `None` for unknown/custom agents. diff --git a/app/src/terminal/cli_agent_tests.rs b/app/src/terminal/cli_agent_tests.rs index 9f4e4b81bb6..f7d6140f4b2 100644 --- a/app/src/terminal/cli_agent_tests.rs +++ b/app/src/terminal/cli_agent_tests.rs @@ -665,6 +665,7 @@ fn test_warp_tui_does_not_match_other_commands() { #[test] fn test_warp_tui_variant_properties() { assert!(CLIAgent::Claude.supports_cli_agent_footer()); + assert!(!CLIAgent::Kiro.supports_cli_agent_footer()); assert_eq!(CLIAgent::WarpTui.command_prefix(), "warp"); assert_eq!( CLIAgent::WarpTui.command_prefixes(), diff --git a/app/src/terminal/view/use_agent_footer/mod_tests.rs b/app/src/terminal/view/use_agent_footer/mod_tests.rs index 6506267731c..cd4dd6921eb 100644 --- a/app/src/terminal/view/use_agent_footer/mod_tests.rs +++ b/app/src/terminal/view/use_agent_footer/mod_tests.rs @@ -393,6 +393,51 @@ fn cli_agent_footer_renders_for_viewer_of_shared_cloud_agent_session() { }) } +#[test] +fn cli_agent_footer_does_not_render_for_kiro_session() { + App::test((), |mut app| async move { + initialize_app_for_terminal_view(&mut app); + + let terminal = add_window_with_terminal(&mut app, None); + + terminal.update(&mut app, |view, ctx| { + simulate_user_started_long_running_command(view); + + CLIAgentSessionsModel::handle(ctx).update(ctx, |sessions, ctx| { + sessions.set_session( + view.id(), + CLIAgentSession { + agent: CLIAgent::Kiro, + status: CLIAgentSessionStatus::InProgress, + session_context: CLIAgentSessionContext::default(), + input_state: CLIAgentInputState::Closed, + listener: None, + plugin_version: None, + remote_host: None, + draft_text: None, + custom_command_prefix: None, + received_rich_notification: false, + should_auto_toggle_input: false, + }, + ctx, + ); + }); + + view.maybe_show_use_agent_footer_in_blocklist(ctx); + + let model = view.model.lock(); + assert!(!view.should_render_use_agent_footer(&model, ctx)); + let active_block_index = model.block_list().active_block_index(); + assert!( + model + .block_list() + .last_non_hidden_rich_content_block_after_block(Some(active_block_index)) + .is_none() + ); + }); + }) +} + #[test] fn cli_agent_footer_does_not_render_for_warp_tui_session() { App::test((), |mut app| async move { diff --git a/review_artifacts/kiro-multiline-input-scroll.html b/review_artifacts/kiro-multiline-input-scroll.html new file mode 100644 index 00000000000..4d2bd9f4f16 --- /dev/null +++ b/review_artifacts/kiro-multiline-input-scroll.html @@ -0,0 +1,637 @@ + + + + + + Kiro multiline input remains visible in Warp + + + + +
+ + +
+
+

Kiro keeps every multiline prompt row visible

+

+ Warp no longer reserves its coding-agent footer rows for Kiro sessions. Kiro remains + detected and branded, while its self-rendered V3 prompt owns the terminal viewport. +

+
+ + + +
+
+

At a glance

+
+
+
+
Before
+
+ Detecting Kiro enabled Warp's footer rich content. On the reported macOS build, + repeated Shift+Enter input descended behind that footer. +
+
+
+
After
+
+ Kiro opts out of the outer footer, so its growing prompt can scroll and keep the + cursor line visible. +
+
+
+
Unchanged
+
+ Kiro command detection, branding, telemetry, terminal key decoding, and footer + support for other compatible CLI agents. +
+
+
+

+ Review limit: the original macOS failure is directly visible in the + reporter's recording, but the after-fix client was exercised on Linux/X11. A local + macOS after-fix run was unavailable. +

+
+
+ +
+

Why this is needed

+
+

+ Warp first added Kiro as a first-class coding agent in October 2026. That integration + caused Kiro to inherit the coding-agent footer even though the integration PR recorded + that authenticated multiline delivery and macOS behavior were not exercised. +

+

+ Kiro V3 renders a live prompt that grows toward the bottom edge. Its own decoder + already accepts Ctrl+J, CSI-u Shift+Enter, xterm modifyOtherKeys, and ESC-prefixed + Enter. The failure starts when Warp adds a second owner for those bottom rows. +

+

+ History: + Warp Kiro integration PR #16243 + · + Kiro CSI-u handling PR #3616. +

+
+
+ +
+

Decisions

+
+

Model footer compatibility as an agent capability

+

+ The fix changes CLIAgent::supports_cli_agent_footer() for Kiro. It does + not inspect the host terminal, rewrite input bytes, or special-case Warp versions. + The accepted cost is that Kiro sessions temporarily lose Warp's footer toolbar. +

+
+ Alternatives actually checked +

+ A Kiro input-height or key-decoding fix was rejected after the exact nightly and + current Kiro tests handled every relevant sequence in Linux PTYs and in real Warp. + A broad footer disable was rejected because other CLI agents use bounded composers + and existing footer behavior remains valid for them. +

+
+
+
+ +
+

Key areas and invariants

+
+

Narrow compatibility boundary

+

+ The exception is attached to the Kiro agent variant, not to macOS, Warp Terminal + detection, or a global rendering switch. Other terminals are unaffected because this + code runs inside Warp; other Warp CLI-agent sessions retain their existing footer. +

+

Detection remains intact

+

+ Kiro still matches its command prefixes and remains available for brand color, + session tracking, and telemetry. Only footer insertion is suppressed. +

+
+
+ +
+

Implementation walkthrough

+
+
+
+

Before

+
    +
  1. Warp recognizes a long-running Kiro command.
  2. +
  3. supports_cli_agent_footer() returns true.
  4. +
  5. Warp appends footer rich content below the active block.
  6. +
  7. Kiro's live prompt and Warp's footer compete for bottom rows.
  8. +
+
+
+

After

+
    +
  1. Warp recognizes the same Kiro command.
  2. +
  3. supports_cli_agent_footer() returns false.
  4. +
  5. The existing render guard exits before inserting rich content.
  6. +
  7. Kiro owns the full viewport and scrolls its prompt normally.
  8. +
+
+
+
pub(crate) fn supports_cli_agent_footer(&self) -> bool {
+    !matches!(self, CLIAgent::Kiro | CLIAgent::WarpTui)
+}
+

+ Source: + footer capability + · + regression test. +

+
+
+ +
+

Testing and confidence

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Observed validation on the proposed source candidate +
CheckResultWhat it establishes
Regression test on baseline logicFailed as expectedThe test detects the Kiro footer insertion.
Regression test with fixPassedNo footer render state or rich-content block remains for Kiro.
CLI-agent property testPassedKiro opts out while Claude remains footer-capable.
cargo clippy -p warp --lib --tests -- -D warningsPassedThe affected library and tests are warning-free.
Locally built Warp OSS + exact Kiro nightlyPassedReported journey plus 24 extra newlines keeps the final marker visible.
+

+ Evidence: + 16-second E2E recording + · + representative multiline frame. +

+

+ Blind spots: Linux did not reproduce the overlapping footer failure + on released builds, so the macOS-specific rendering surface is inferred from the + reporter's direct recording and the integration boundary. The repository has no + pr-check:quick command; targeted tests, Clippy, the formatter, and an OSS + build were used instead. +

+
+
+
+ +
+

An account of the authored change. Independent code review and CI still apply.

+
+
+
+ + From 81a213173ce16b5cf33b478ead06c157e3edb641 Mon Sep 17 00:00:00 2001 From: Heng Liu Date: Fri, 23 Oct 2026 20:54:15 +0000 Subject: [PATCH 2/3] docs(review): link published Kiro evidence --- review_artifacts/kiro-multiline-input-scroll.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/review_artifacts/kiro-multiline-input-scroll.html b/review_artifacts/kiro-multiline-input-scroll.html index 4d2bd9f4f16..147dd78c32d 100644 --- a/review_artifacts/kiro-multiline-input-scroll.html +++ b/review_artifacts/kiro-multiline-input-scroll.html @@ -604,14 +604,14 @@

Testing and confidence

Evidence: 16-second E2E recording · representative multiline frame Date: Fri, 23 Oct 2026 21:01:09 +0000 Subject: [PATCH 3/3] docs(review): keep evidence outside upstream source --- .../kiro-multiline-input-scroll.html | 637 ------------------ 1 file changed, 637 deletions(-) delete mode 100644 review_artifacts/kiro-multiline-input-scroll.html diff --git a/review_artifacts/kiro-multiline-input-scroll.html b/review_artifacts/kiro-multiline-input-scroll.html deleted file mode 100644 index 147dd78c32d..00000000000 --- a/review_artifacts/kiro-multiline-input-scroll.html +++ /dev/null @@ -1,637 +0,0 @@ - - - - - - Kiro multiline input remains visible in Warp - - - - -

- - -
-
-

Kiro keeps every multiline prompt row visible

-

- Warp no longer reserves its coding-agent footer rows for Kiro sessions. Kiro remains - detected and branded, while its self-rendered V3 prompt owns the terminal viewport. -

-
- - - -
-
-

At a glance

-
-
-
-
Before
-
- Detecting Kiro enabled Warp's footer rich content. On the reported macOS build, - repeated Shift+Enter input descended behind that footer. -
-
-
-
After
-
- Kiro opts out of the outer footer, so its growing prompt can scroll and keep the - cursor line visible. -
-
-
-
Unchanged
-
- Kiro command detection, branding, telemetry, terminal key decoding, and footer - support for other compatible CLI agents. -
-
-
-

- Review limit: the original macOS failure is directly visible in the - reporter's recording, but the after-fix client was exercised on Linux/X11. A local - macOS after-fix run was unavailable. -

-
-
- -
-

Why this is needed

-
-

- Warp first added Kiro as a first-class coding agent in October 2026. That integration - caused Kiro to inherit the coding-agent footer even though the integration PR recorded - that authenticated multiline delivery and macOS behavior were not exercised. -

-

- Kiro V3 renders a live prompt that grows toward the bottom edge. Its own decoder - already accepts Ctrl+J, CSI-u Shift+Enter, xterm modifyOtherKeys, and ESC-prefixed - Enter. The failure starts when Warp adds a second owner for those bottom rows. -

-

- History: - Warp Kiro integration PR #16243 - · - Kiro CSI-u handling PR #3616. -

-
-
- -
-

Decisions

-
-

Model footer compatibility as an agent capability

-

- The fix changes CLIAgent::supports_cli_agent_footer() for Kiro. It does - not inspect the host terminal, rewrite input bytes, or special-case Warp versions. - The accepted cost is that Kiro sessions temporarily lose Warp's footer toolbar. -

-
- Alternatives actually checked -

- A Kiro input-height or key-decoding fix was rejected after the exact nightly and - current Kiro tests handled every relevant sequence in Linux PTYs and in real Warp. - A broad footer disable was rejected because other CLI agents use bounded composers - and existing footer behavior remains valid for them. -

-
-
-
- -
-

Key areas and invariants

-
-

Narrow compatibility boundary

-

- The exception is attached to the Kiro agent variant, not to macOS, Warp Terminal - detection, or a global rendering switch. Other terminals are unaffected because this - code runs inside Warp; other Warp CLI-agent sessions retain their existing footer. -

-

Detection remains intact

-

- Kiro still matches its command prefixes and remains available for brand color, - session tracking, and telemetry. Only footer insertion is suppressed. -

-
-
- -
-

Implementation walkthrough

-
-
-
-

Before

-
    -
  1. Warp recognizes a long-running Kiro command.
  2. -
  3. supports_cli_agent_footer() returns true.
  4. -
  5. Warp appends footer rich content below the active block.
  6. -
  7. Kiro's live prompt and Warp's footer compete for bottom rows.
  8. -
-
-
-

After

-
    -
  1. Warp recognizes the same Kiro command.
  2. -
  3. supports_cli_agent_footer() returns false.
  4. -
  5. The existing render guard exits before inserting rich content.
  6. -
  7. Kiro owns the full viewport and scrolls its prompt normally.
  8. -
-
-
-
pub(crate) fn supports_cli_agent_footer(&self) -> bool {
-    !matches!(self, CLIAgent::Kiro | CLIAgent::WarpTui)
-}
-

- Source: - footer capability - · - regression test. -

-
-
- -
-

Testing and confidence

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Observed validation on the proposed source candidate -
CheckResultWhat it establishes
Regression test on baseline logicFailed as expectedThe test detects the Kiro footer insertion.
Regression test with fixPassedNo footer render state or rich-content block remains for Kiro.
CLI-agent property testPassedKiro opts out while Claude remains footer-capable.
cargo clippy -p warp --lib --tests -- -D warningsPassedThe affected library and tests are warning-free.
Locally built Warp OSS + exact Kiro nightlyPassedReported journey plus 24 extra newlines keeps the final marker visible.
-

- Evidence: - 16-second E2E recording - · - representative multiline frame. -

-

- Blind spots: Linux did not reproduce the overlapping footer failure - on released builds, so the macOS-specific rendering surface is inferred from the - reporter's direct recording and the integration boundary. The repository has no - pr-check:quick command; targeted tests, Clippy, the formatter, and an OSS - build were used instead. -

-
-
-
- - -
-
- -