Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 31 additions & 2 deletions BitFun-Installer/src/data/modelProviders.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,20 @@ export const PROVIDER_TEMPLATES: Record<string, ProviderTemplate> = {
descriptionKey: 'model.providers.minimax.description',
baseUrl: 'https://api.minimaxi.com/anthropic',
format: 'anthropic',
models: ['MiniMax-M2.1', 'MiniMax-M2.1-lightning', 'MiniMax-M2'],
models: ['MiniMax-M2.5', 'MiniMax-M2.1', 'MiniMax-M2.1-lightning', 'MiniMax-M2'],
helpUrl: 'https://platform.minimax.io/',
baseUrlOptions: [
{
url: 'https://api.minimaxi.com/anthropic',
format: 'anthropic',
noteKey: 'model.providers.minimax.urlOptions.default',
},
{
url: 'https://api.minimaxi.com/v1',
format: 'openai',
noteKey: 'model.providers.minimax.urlOptions.openai',
},
],
},
moonshot: {
id: 'moonshot',
Expand Down Expand Up @@ -98,8 +110,25 @@ export const PROVIDER_TEMPLATES: Record<string, ProviderTemplate> = {
descriptionKey: 'model.providers.qwen.description',
baseUrl: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
format: 'openai',
models: ['qwen3-max', 'qwen3-coder-plus', 'qwen3-coder-flash'],
models: ['qwen3.5-plus', 'glm-5', 'kimi-k2.5', 'MiniMax-M2.5', 'qwen3-max', 'qwen3-coder-plus', 'qwen3-coder-flash'],
helpUrl: 'https://dashscope.console.aliyun.com/apiKey',
baseUrlOptions: [
{
url: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
format: 'openai',
noteKey: 'model.providers.qwen.urlOptions.default',
},
{
url: 'https://coding.dashscope.aliyuncs.com/v1',
format: 'openai',
noteKey: 'model.providers.qwen.urlOptions.codingPlan',
},
{
url: 'https://coding.dashscope.aliyuncs.com/apps/anthropic',
format: 'anthropic',
noteKey: 'model.providers.qwen.urlOptions.codingPlanAnthropic',
},
],
},
volcengine: {
id: 'volcengine',
Expand Down
13 changes: 11 additions & 2 deletions BitFun-Installer/src/i18n/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,11 @@
},
"minimax": {
"name": "MiniMax",
"description": "MiniMax M2 series large language models"
"description": "MiniMax M2 series large language models",
"urlOptions": {
"default": "Anthropic Format - Default",
"openai": "OpenAI Compatible Format"
}
},
"moonshot": {
"name": "Moonshot AI",
Expand All @@ -86,7 +90,12 @@
},
"qwen": {
"name": "Qwen",
"description": "Alibaba Cloud Qwen3 series models"
"description": "Alibaba Cloud Qwen3 series models",
"urlOptions": {
"default": "OpenAI Format - Default",
"codingPlan": "OpenAI Format - Coding Plan",
"codingPlanAnthropic": "Anthropic Format - Coding Plan"
}
},
"volcengine": {
"name": "Volcano Engine",
Expand Down
13 changes: 11 additions & 2 deletions BitFun-Installer/src/i18n/locales/zh.json
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,11 @@
},
"minimax": {
"name": "MiniMax",
"description": "MiniMax M2 系列大语言模型"
"description": "MiniMax M2 系列大语言模型",
"urlOptions": {
"default": "Anthropic格式-默认",
"openai": "OpenAI兼容格式"
}
},
"moonshot": {
"name": "月之暗面",
Expand All @@ -86,7 +90,12 @@
},
"qwen": {
"name": "通义千问",
"description": "阿里云通义千问 Qwen3 系列模型"
"description": "阿里云通义千问 Qwen3 系列模型",
"urlOptions": {
"default": "OpenAI格式-默认",
"codingPlan": "OpenAI格式-Coding Plan",
"codingPlanAnthropic": "Anthropic格式-Coding Plan"
}
},
"volcengine": {
"name": "火山引擎",
Expand Down
55 changes: 7 additions & 48 deletions src/apps/desktop/src/logging.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ use tauri_plugin_log::{fern, Target, TargetKind};

const SESSION_DIR_PATTERN: &str = r"^\d{8}T\d{6}$";
const MAX_LOG_SESSIONS: usize = 50;
const LOG_RETENTION_DAYS: i64 = 7;
static SESSION_LOG_DIR: OnceLock<PathBuf> = OnceLock::new();
static CURRENT_LOG_LEVEL: AtomicU8 = AtomicU8::new(level_filter_to_u8(log::LevelFilter::Info));
// Default to Debug in early development for easier diagnostics
static CURRENT_LOG_LEVEL: AtomicU8 = AtomicU8::new(level_filter_to_u8(log::LevelFilter::Debug));

fn get_thread_id() -> u64 {
let thread_id = thread::current().id();
Expand Down Expand Up @@ -71,27 +71,9 @@ const fn u8_to_level_filter(value: u8) -> log::LevelFilter {
}
}

fn resolve_default_level(is_debug: bool) -> log::LevelFilter {
match std::env::var("BITFUN_LOG_LEVEL") {
Ok(val) => parse_log_level(&val).unwrap_or_else(|| {
eprintln!(
"Warning: Invalid BITFUN_LOG_LEVEL '{}', falling back to default",
val
);
if is_debug {
log::LevelFilter::Debug
} else {
log::LevelFilter::Info
}
}),
Err(_) => {
if is_debug {
log::LevelFilter::Debug
} else {
log::LevelFilter::Info
}
}
}
// Default to Debug in early development for easier diagnostics
fn resolve_default_level(_is_debug: bool) -> log::LevelFilter {
log::LevelFilter::Debug
}

pub fn parse_log_level(value: &str) -> Option<log::LevelFilter> {
Expand Down Expand Up @@ -287,10 +269,6 @@ fn format_log_plain(
))
}

fn parse_session_timestamp(name: &str) -> Option<chrono::NaiveDateTime> {
chrono::NaiveDateTime::parse_from_str(name, "%Y%m%dT%H%M%S").ok()
}

pub async fn cleanup_old_log_sessions() {
tokio::time::sleep(tokio::time::Duration::from_secs(10)).await;

Expand Down Expand Up @@ -333,29 +311,10 @@ async fn do_cleanup_log_sessions(
return Ok(());
}

let now = Local::now().naive_local();
let retention_threshold = now - chrono::Duration::days(LOG_RETENTION_DAYS);

let excess_count = session_dirs.len() - max_sessions;
let to_delete: Vec<_> = session_dirs
.into_iter()
.take(excess_count)
.filter(|name| {
parse_session_timestamp(name)
.map(|ts| ts < retention_threshold)
.unwrap_or(false)
})
.collect();

if to_delete.is_empty() {
return Ok(());
}
let to_delete: Vec<_> = session_dirs.into_iter().take(excess_count).collect();

log::info!(
"Cleaning up {} old log session(s) older than {} days",
to_delete.len(),
LOG_RETENTION_DAYS
);
log::info!("Cleaning up {} old log session(s)", to_delete.len());

for session_name in to_delete {
let session_path = logs_root.join(&session_name);
Expand Down
1 change: 1 addition & 0 deletions src/crates/core/src/agentic/agents/agentic_mode.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ impl AgenticMode {
"Skill".to_string(),
"AskUserQuestion".to_string(),
"Git".to_string(),
"TerminalControl".to_string(),
],
}
}
Expand Down
1 change: 1 addition & 0 deletions src/crates/core/src/agentic/agents/cowork_mode.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ impl CoworkMode {
"ReadLints".to_string(),
"Git".to_string(),
"Bash".to_string(),
"TerminalControl".to_string(),
"WebFetch".to_string(),
"WebSearch".to_string(),
],
Expand Down
1 change: 1 addition & 0 deletions src/crates/core/src/agentic/agents/debug_mode.rs
Original file line number Diff line number Diff line change
Expand Up @@ -364,6 +364,7 @@ Below is a snapshot of the current workspace's file structure.
"MermaidInteractive".to_string(),
"Log".to_string(),
"ReadLints".to_string(),
"TerminalControl".to_string(),
]
}

Expand Down
Loading