Skip to content

Commit 360c760

Browse files
matt2eclaude
andcommitted
refactor: share suggested-next-steps sanitizers between store and runner
The sanitize/legacy-fallback/non-empty-prompt helpers were duplicated between store/models.rs and session_runner.rs, so the 4-item cap and trim rules had to be kept in sync by hand. Make the models.rs versions pub and use them from session_runner. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Matt Toohey <contact@matttoohey.com>
1 parent 5afa53a commit 360c760

2 files changed

Lines changed: 6 additions & 52 deletions

File tree

apps/staged/src-tauri/src/session_runner.rs

Lines changed: 4 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,10 @@ use crate::agent::{AcpDriver, AgentDriver, MessageWriter};
5252
use crate::git::Span;
5353
use crate::shell_env::ShellEnvCache;
5454
use crate::store::{
55-
AcpConfigSelection, Comment, CommentAuthor, CommentType, CompletionReason, FailureStrategy,
56-
MessageRole, PipelineExecution, PipelineKind, PipelineStep, SessionMessage, SessionStatus,
57-
StepStatus, StepType, Store, SuggestedNextStep,
55+
legacy_suggested_next_steps, sanitize_suggested_next_steps, AcpConfigSelection, Comment,
56+
CommentAuthor, CommentType, CompletionReason, FailureStrategy, MessageRole, PipelineExecution,
57+
PipelineKind, PipelineStep, SessionMessage, SessionStatus, StepStatus, StepType, Store,
58+
SuggestedNextStep,
5859
};
5960

6061
const PIPELINE_STEP_PROMPT_OUTPUT_MAX_CHARS: usize = 30_000;
@@ -3053,53 +3054,6 @@ impl SuggestedNextStepsPayload {
30533054
}
30543055
}
30553056

3056-
fn legacy_suggested_next_steps(
3057-
suggested_next_commit_step: Option<String>,
3058-
suggested_next_note_step: Option<String>,
3059-
) -> Vec<SuggestedNextStep> {
3060-
let mut steps = Vec::new();
3061-
if let Some(prompt) = non_empty_suggested_step_prompt(suggested_next_commit_step) {
3062-
steps.push(SuggestedNextStep::Implementation {
3063-
prompt,
3064-
expected_multiple_commits: false,
3065-
});
3066-
}
3067-
if let Some(prompt) = non_empty_suggested_step_prompt(suggested_next_note_step) {
3068-
steps.push(SuggestedNextStep::Note { prompt });
3069-
}
3070-
steps
3071-
}
3072-
3073-
fn sanitize_suggested_next_steps(steps: Vec<SuggestedNextStep>) -> Vec<SuggestedNextStep> {
3074-
steps
3075-
.into_iter()
3076-
.filter_map(|step| match step {
3077-
SuggestedNextStep::Implementation {
3078-
prompt,
3079-
expected_multiple_commits,
3080-
} => non_empty_suggested_step_prompt(Some(prompt)).map(|prompt| {
3081-
SuggestedNextStep::Implementation {
3082-
prompt,
3083-
expected_multiple_commits,
3084-
}
3085-
}),
3086-
SuggestedNextStep::Note { prompt } => non_empty_suggested_step_prompt(Some(prompt))
3087-
.map(|prompt| SuggestedNextStep::Note { prompt }),
3088-
})
3089-
.take(4)
3090-
.collect()
3091-
}
3092-
3093-
fn non_empty_suggested_step_prompt(prompt: Option<String>) -> Option<String> {
3094-
let prompt = prompt?;
3095-
let trimmed = prompt.trim();
3096-
if trimmed.is_empty() {
3097-
None
3098-
} else {
3099-
Some(trimmed.to_string())
3100-
}
3101-
}
3102-
31033057
/// Extract suggested next steps from assistant output.
31043058
///
31053059
/// Prefer the terminal ```suggested-next-steps fenced block used by the current

apps/staged/src-tauri/src/store/models.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -909,7 +909,7 @@ pub fn suggested_next_steps_legacy_note_step(steps: &[SuggestedNextStep]) -> Opt
909909
})
910910
}
911911

912-
fn legacy_suggested_next_steps(
912+
pub fn legacy_suggested_next_steps(
913913
legacy_commit_step: Option<String>,
914914
legacy_note_step: Option<String>,
915915
) -> Vec<SuggestedNextStep> {
@@ -926,7 +926,7 @@ fn legacy_suggested_next_steps(
926926
steps
927927
}
928928

929-
fn sanitize_suggested_next_steps(steps: Vec<SuggestedNextStep>) -> Vec<SuggestedNextStep> {
929+
pub fn sanitize_suggested_next_steps(steps: Vec<SuggestedNextStep>) -> Vec<SuggestedNextStep> {
930930
steps
931931
.into_iter()
932932
.filter_map(|step| match step {

0 commit comments

Comments
 (0)