fix(ask): preserved null timeout when user disables ask timeout setting
The nullish coalescing operator (??) was treating null as a fallback trigger, causing getAskTimeout()'s null return value (meaning 'disabled') to be replaced with DEFAULT_ASK_TIMEOUT_MS (30000ms). Now explicitly checks for undefined to distinguish between: - undefined: settingsManager unavailable → use default - null: user explicitly disabled timeout → preserve null - number: user-set timeout → use that value
This commit is contained in:
@@ -87,12 +87,9 @@ impl AnsiCodeTracker {
|
||||
let parts: Vec<&str> = params.split(';').collect();
|
||||
let mut i = 0;
|
||||
while i < parts.len() {
|
||||
let code = match parts[i].parse::<u32>() {
|
||||
Ok(value) => value,
|
||||
Err(_) => {
|
||||
i += 1;
|
||||
continue;
|
||||
},
|
||||
let Ok(code) = parts[i].parse::<u32>() else {
|
||||
i += 1;
|
||||
continue;
|
||||
};
|
||||
|
||||
if code == 38 || code == 48 {
|
||||
@@ -265,7 +262,7 @@ pub fn visible_width(text: &str) -> usize {
|
||||
|
||||
let is_pure_ascii = text
|
||||
.bytes()
|
||||
.all(|byte| byte >= 0x20 && byte <= 0x7e);
|
||||
.all(|byte| (0x20..=0x7e).contains(&byte));
|
||||
if is_pure_ascii {
|
||||
return text.len();
|
||||
}
|
||||
@@ -343,7 +340,7 @@ pub fn truncate_to_width(text: &str, max_width: usize, ellipsis: &str, pad: bool
|
||||
current_width += width;
|
||||
}
|
||||
|
||||
let mut truncated = format!("{}\x1b[0m{}", result, ellipsis);
|
||||
let mut truncated = format!("{result}\x1b[0m{ellipsis}");
|
||||
if pad {
|
||||
let truncated_width = visible_width(&truncated);
|
||||
if truncated_width < max_width {
|
||||
|
||||
@@ -304,7 +304,10 @@ export class AskTool implements AgentTool<typeof askSchema, AskToolDetails> {
|
||||
|
||||
// Determine timeout based on settings and plan mode
|
||||
const planModeEnabled = this.session.getPlanModeState?.()?.enabled ?? false;
|
||||
const settingsTimeout = this.session.settingsManager?.getAskTimeout() ?? DEFAULT_ASK_TIMEOUT_MS;
|
||||
// getAskTimeout returns: number (ms), null (disabled), or undefined (no settingsManager)
|
||||
// Only fall back to default if undefined; preserve null as "disabled"
|
||||
const rawTimeout = this.session.settingsManager?.getAskTimeout();
|
||||
const settingsTimeout = rawTimeout === undefined ? DEFAULT_ASK_TIMEOUT_MS : rawTimeout;
|
||||
const timeout = planModeEnabled ? null : settingsTimeout;
|
||||
|
||||
// Send notification if waiting and not suppressed
|
||||
|
||||
Reference in New Issue
Block a user