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:
can1357
2026-01-29 10:48:49 +01:00
parent 8ef11355e7
commit 961539aae2
2 changed files with 9 additions and 9 deletions
+5 -8
View File
@@ -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 {
+4 -1
View File
@@ -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