From b96ec59ffc5d384f92a0b6befa69cb1e1bd8c3e0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 23 Oct 2026 04:55:43 +0000 Subject: [PATCH 1/2] chore(deps): update actions/stale action to v11 --- .github/workflows/stale.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 2d795379e0..099e9fe570 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -33,7 +33,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Mark Stale Issues - uses: actions/stale@v10 + uses: actions/stale@v11 with: stale-issue-label: 'state: inactive' stale-pr-label: 'state: inactive' From 24fd1ff1fe97f0e0c4449f97898a3c64d86aa76e Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Fri, 23 Oct 2026 04:58:56 +0000 Subject: [PATCH 2/2] [autofix.ci] apply automated fixes --- crates/forge_app/src/dto/openai/request.rs | 7 ++++--- crates/forge_app/src/orch_spec/orch_runner.rs | 3 ++- crates/forge_app/src/orch_spec/orch_spec.rs | 11 ++++++----- crates/forge_domain/src/auth/credentials.rs | 3 ++- crates/forge_domain/src/result_stream_ext.rs | 6 ++++-- crates/forge_infra/src/forge_infra.rs | 4 ++-- .../src/conversation/conversation_record.rs | 3 ++- crates/forge_select/src/preview.rs | 7 ++++--- crates/forge_services/src/app_config.rs | 3 ++- crates/forge_services/src/mcp/manager.rs | 3 ++- 10 files changed, 30 insertions(+), 20 deletions(-) diff --git a/crates/forge_app/src/dto/openai/request.rs b/crates/forge_app/src/dto/openai/request.rs index 65784dcb60..e40ab38621 100644 --- a/crates/forge_app/src/dto/openai/request.rs +++ b/crates/forge_app/src/dto/openai/request.rs @@ -39,7 +39,8 @@ pub struct Message { pub reasoning_text: Option, #[serde(skip_serializing_if = "Option::is_none")] pub reasoning_opaque: Option, - // kimi_k2 uses reasoning_content as flat string (similar to reasoning_text but aliased) + // kimi_k2 uses reasoning_content as flat string (similar to reasoning_text + // but aliased) #[serde(skip_serializing_if = "Option::is_none", rename = "reasoning_content")] pub reasoning_content: Option, #[serde(skip_serializing_if = "Option::is_none")] @@ -395,8 +396,8 @@ impl From for Request { min_p: Default::default(), top_a: Default::default(), prediction: Default::default(), - // Since compaction is support on the client we don't need middle-out transforms any - // more + // Since compaction is support on the client we don't need + // middle-out transforms any more transforms: Default::default(), models: Default::default(), route: Default::default(), diff --git a/crates/forge_app/src/orch_spec/orch_runner.rs b/crates/forge_app/src/orch_spec/orch_runner.rs index c33c8349b3..3ff1a5f487 100644 --- a/crates/forge_app/src/orch_spec/orch_runner.rs +++ b/crates/forge_app/src/orch_spec/orch_runner.rs @@ -33,7 +33,8 @@ pub struct Runner { // Tool call requests and the mock responses test_tool_calls: Mutex>, - // Mock completions from the LLM (Each value is produced as an event in the stream) + // Mock completions from the LLM (Each value is produced as an event in the + // stream) test_completions: Mutex>, // Mock shell command outputs diff --git a/crates/forge_app/src/orch_spec/orch_spec.rs b/crates/forge_app/src/orch_spec/orch_spec.rs index c1e9fc8da9..fd54297541 100644 --- a/crates/forge_app/src/orch_spec/orch_spec.rs +++ b/crates/forge_app/src/orch_spec/orch_spec.rs @@ -385,8 +385,8 @@ async fn test_multiple_consecutive_tool_calls() { ChatCompletionMessage::assistant("Reading 3").add_tool_call(tool_call.clone()), ChatCompletionMessage::assistant("Reading 4").add_tool_call(tool_call.clone()), ChatCompletionMessage::assistant("Completing Task").finish_reason(FinishReason::Stop), - // Extra responses for doom loop reminder iterations (detector triggers on each request - // after 4th tool call) + // Extra responses for doom loop reminder iterations (detector + // triggers on each request after 4th tool call) ChatCompletionMessage::assistant("Acknowledged").finish_reason(FinishReason::Stop), ChatCompletionMessage::assistant("Task complete").finish_reason(FinishReason::Stop), ]); @@ -423,8 +423,8 @@ async fn test_doom_loop_detection_adds_user_reminder_after_repeated_calls_on_nex ChatCompletionMessage::assistant("Call 3").add_tool_call(tool_call.clone()), ChatCompletionMessage::assistant("Call 4").add_tool_call(tool_call.clone()), ChatCompletionMessage::assistant("Done").finish_reason(FinishReason::Stop), - // Extra responses for doom loop reminder iterations (detector triggers on each request - // after 4th tool call) + // Extra responses for doom loop reminder iterations (detector + // triggers on each request after 4th tool call) ChatCompletionMessage::assistant("Noted").finish_reason(FinishReason::Stop), ChatCompletionMessage::assistant("Actually done now").finish_reason(FinishReason::Stop), ]); @@ -614,7 +614,8 @@ async fn test_todo_enforcement_injects_reminder() { let mut ctx = TestContext::default() .mock_assistant_responses(vec![ - // LLM tries to finish but has pending todos - reminder will be injected + // LLM tries to finish but has pending todos - reminder will be + // injected ChatCompletionMessage::assistant(Content::full("Task is done")) .finish_reason(FinishReason::Stop), // Second response after the first reminder is injected diff --git a/crates/forge_domain/src/auth/credentials.rs b/crates/forge_domain/src/auth/credentials.rs index 15b5494855..1dc3bbde08 100644 --- a/crates/forge_domain/src/auth/credentials.rs +++ b/crates/forge_domain/src/auth/credentials.rs @@ -63,7 +63,8 @@ impl AuthCredential { AuthDetails::ApiKey(_) => false, // AWS Profile credentials are managed by the AWS SDK internally AuthDetails::AwsProfile(_) => false, - // Google ADC tokens are short-lived (1 hour) and should always be checked/refreshed + // Google ADC tokens are short-lived (1 hour) and should always be + // checked/refreshed AuthDetails::GoogleAdc(_) => true, AuthDetails::OAuth { tokens, .. } | AuthDetails::OAuthWithApiKey { tokens, .. } => { tokens.needs_refresh(buffer) diff --git a/crates/forge_domain/src/result_stream_ext.rs b/crates/forge_domain/src/result_stream_ext.rs index 29c990ae1e..a9ff98a0d3 100644 --- a/crates/forge_domain/src/result_stream_ext.rs +++ b/crates/forge_domain/src/result_stream_ext.rs @@ -926,7 +926,8 @@ mod tests { let messages = vec![ Ok(ChatCompletionMessage::default().content(Content::part(&xml_content[0..30]))), Ok(ChatCompletionMessage::default().content(Content::part(&xml_content[30..]))), - // These messages come after tool interruption but contain usage updates + // These messages come after tool interruption but contain usage + // updates Ok(ChatCompletionMessage::default().content(Content::part(" ignored content"))), // Final message with the actual usage - this is always sent last Ok(ChatCompletionMessage::default().usage(Usage { @@ -1161,7 +1162,8 @@ mod tests { let messages = vec![ Ok(ChatCompletionMessage::default().content(Content::part(xml_content))), - // After interruption - content should be ignored but usage should be captured + // After interruption - content should be ignored but usage should + // be captured Ok(ChatCompletionMessage::default() .content(Content::part("This content should be ignored"))), Ok(ChatCompletionMessage::default() diff --git a/crates/forge_infra/src/forge_infra.rs b/crates/forge_infra/src/forge_infra.rs index 31f5cb63e5..61145e6a1f 100644 --- a/crates/forge_infra/src/forge_infra.rs +++ b/crates/forge_infra/src/forge_infra.rs @@ -35,8 +35,8 @@ use crate::walker::ForgeWalkerService; #[derive(Clone)] pub struct ForgeInfra { - // TODO: Drop the "Service" suffix. Use names like ForgeFileReader, ForgeFileWriter, - // ForgeHttpClient etc. + // TODO: Drop the "Service" suffix. Use names like ForgeFileReader, + // ForgeFileWriter, ForgeHttpClient etc. file_read_service: Arc, file_write_service: Arc, file_remove_service: Arc, diff --git a/crates/forge_repo/src/conversation/conversation_record.rs b/crates/forge_repo/src/conversation/conversation_record.rs index 7df99bf5a3..77642bbe4d 100644 --- a/crates/forge_repo/src/conversation/conversation_record.rs +++ b/crates/forge_repo/src/conversation/conversation_record.rs @@ -901,7 +901,8 @@ impl From for forge_domain::Metrics { .into_iter() .filter_map(|(path, file_record)| { let operation = match file_record { - // If it's an array, take the last operation (most recent) + // If it's an array, take the last operation (most + // recent) FileOperationOrArray::Array(mut arr) if !arr.is_empty() => { arr.pop().unwrap().into() } diff --git a/crates/forge_select/src/preview.rs b/crates/forge_select/src/preview.rs index 85061dbecf..4aa90d3a1f 100644 --- a/crates/forge_select/src/preview.rs +++ b/crates/forge_select/src/preview.rs @@ -436,10 +436,11 @@ fn run_select_ui_values(options: SelectUiOptions) -> anyhow::Result {} Event::Key(key) => { match handle_key_event( diff --git a/crates/forge_services/src/app_config.rs b/crates/forge_services/src/app_config.rs index 8a0b259c8e..1142f159b7 100644 --- a/crates/forge_services/src/app_config.rs +++ b/crates/forge_services/src/app_config.rs @@ -78,7 +78,8 @@ mod tests { use std::sync::Mutex; use forge_config::{ForgeConfig, ModelConfig}; - // Alias to avoid collision with forge_config::ModelConfig used in test fixtures + // Alias to avoid collision with forge_config::ModelConfig used in test + // fixtures use forge_domain::ModelConfig as DomainModelConfig; use forge_domain::{ AnyProvider, ChatRepository, ConfigOperation, Environment, InputModality, MigrationResult, diff --git a/crates/forge_services/src/mcp/manager.rs b/crates/forge_services/src/mcp/manager.rs index ef34ee062b..dbd32d94a4 100644 --- a/crates/forge_services/src/mcp/manager.rs +++ b/crates/forge_services/src/mcp/manager.rs @@ -146,7 +146,8 @@ where // Read and merge all configurations (original behavior) let env = self.infra.get_environment(); let paths = vec![ - // Configs at lower levels take precedence, so we read them in reverse order. + // Configs at lower levels take precedence, so we read them + // in reverse order. env.mcp_user_config().as_path().to_path_buf(), env.mcp_local_config().as_path().to_path_buf(), ];