Skip to content

Commit 9280a32

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 ec5f8ad commit 9280a32

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;
@@ -3071,53 +3072,6 @@ impl SuggestedNextStepsPayload {
30713072
}
30723073
}
30733074

3074-
fn legacy_suggested_next_steps(
3075-
suggested_next_commit_step: Option<String>,
3076-
suggested_next_note_step: Option<String>,
3077-
) -> Vec<SuggestedNextStep> {
3078-
let mut steps = Vec::new();
3079-
if let Some(prompt) = non_empty_suggested_step_prompt(suggested_next_commit_step) {
3080-
steps.push(SuggestedNextStep::Implementation {
3081-
prompt,
3082-
expected_multiple_commits: false,
3083-
});
3084-
}
3085-
if let Some(prompt) = non_empty_suggested_step_prompt(suggested_next_note_step) {
3086-
steps.push(SuggestedNextStep::Note { prompt });
3087-
}
3088-
steps
3089-
}
3090-
3091-
fn sanitize_suggested_next_steps(steps: Vec<SuggestedNextStep>) -> Vec<SuggestedNextStep> {
3092-
steps
3093-
.into_iter()
3094-
.filter_map(|step| match step {
3095-
SuggestedNextStep::Implementation {
3096-
prompt,
3097-
expected_multiple_commits,
3098-
} => non_empty_suggested_step_prompt(Some(prompt)).map(|prompt| {
3099-
SuggestedNextStep::Implementation {
3100-
prompt,
3101-
expected_multiple_commits,
3102-
}
3103-
}),
3104-
SuggestedNextStep::Note { prompt } => non_empty_suggested_step_prompt(Some(prompt))
3105-
.map(|prompt| SuggestedNextStep::Note { prompt }),
3106-
})
3107-
.take(4)
3108-
.collect()
3109-
}
3110-
3111-
fn non_empty_suggested_step_prompt(prompt: Option<String>) -> Option<String> {
3112-
let prompt = prompt?;
3113-
let trimmed = prompt.trim();
3114-
if trimmed.is_empty() {
3115-
None
3116-
} else {
3117-
Some(trimmed.to_string())
3118-
}
3119-
}
3120-
31213075
/// Extract suggested next steps from assistant output.
31223076
///
31233077
/// 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)