aboutsummaryrefslogtreecommitdiff
path: root/src/app/api/panes.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-07-19 23:52:20 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-07-19 23:56:07 +0300
commit3f80947678a9723434aa7fddfe23750b5393e24c (patch)
tree6f463797132acfc51dfb6e135820a052954b4f13 /src/app/api/panes.rs
parentf76f895efe5b9f19aa9db909354c6c0f2195630b (diff)
feat: make agent automation a first-class cli primitive
Diffstat (limited to 'src/app/api/panes.rs')
-rw-r--r--src/app/api/panes.rs33
1 files changed, 17 insertions, 16 deletions
diff --git a/src/app/api/panes.rs b/src/app/api/panes.rs
index 6a5b41fe..483d73a5 100644
--- a/src/app/api/panes.rs
+++ b/src/app/api/panes.rs
@@ -11,7 +11,7 @@ use crate::api::schema::{
PaneReportMetadataParams, PaneResizeParams, PaneResizeReason, PaneResizeResult,
PaneSendInputParams, PaneSendKeysParams, PaneSendTextParams, PaneSplitParams, PaneSwapParams,
PaneSwapReason, PaneSwapResult, PaneTarget, PaneZoomMode, PaneZoomParams, PaneZoomReason,
- PaneZoomResult, ReadFormat, ReadSource, ResponseResult,
+ PaneZoomResult, ResponseResult,
};
use crate::app::actions::{PaneZoomCommand, PaneZoomNoopReason};
use crate::app::App;
@@ -1179,21 +1179,12 @@ impl App {
else {
return pane_not_found(id, &params.pane_id);
};
- let requested_lines = params.lines.unwrap_or(80).min(1000) as usize;
- let text = match params.format {
- ReadFormat::Text => match params.source {
- ReadSource::Visible => pane.visible_text(),
- ReadSource::Recent => pane.recent_text(requested_lines),
- ReadSource::RecentUnwrapped => pane.recent_unwrapped_text(requested_lines),
- ReadSource::Detection => pane.detection_text(),
- },
- ReadFormat::Ansi => match params.source {
- ReadSource::Visible => pane.visible_ansi(),
- ReadSource::Recent => pane.recent_ansi(requested_lines),
- ReadSource::RecentUnwrapped => pane.recent_unwrapped_ansi(requested_lines),
- ReadSource::Detection => pane.detection_text(),
- },
- };
+ let text = crate::app::api_helpers::read_terminal_snapshot(
+ pane,
+ params.source,
+ params.format,
+ params.lines,
+ );
encode_success(
id,
@@ -2591,6 +2582,11 @@ mod tests {
.clone();
let target = app.state.workspaces[1].tabs[0].root_pane;
seed_terminal_states(&mut app);
+ app.state
+ .terminals
+ .get_mut(&source_terminal)
+ .unwrap()
+ .set_detected_state(Some(Agent::Pi), AgentState::Idle);
let previous_pane_id = app.public_pane_id(0, source).unwrap();
let previous_workspace_id = app.public_workspace_id(0);
let target_workspace_id = app.public_workspace_id(1);
@@ -2633,6 +2629,11 @@ mod tests {
Some(&source_terminal)
);
assert_eq!(app.parse_pane_id(&previous_pane_id), Some((0, source)));
+ assert!(matches!(
+ app.resolve_agent_target(&previous_pane_id),
+ Err(crate::app::terminal_targets::TerminalTargetError::NotFound { .. })
+ ));
+ assert!(app.resolve_agent_target(&move_result.pane.pane_id).is_ok());
}
#[test]