* refactor discord thread bindings to idle and max-age lifecycle * fix: migrate legacy thread binding expiry and reduce hot-path disk writes * refactor: remove remaining thread-binding ttl legacy paths * fix: harden thread-binding lifecycle persistence * Discord: fix thread binding types in message/reply paths * Infra: handle win32 unknown inode in file identity checks * Infra: relax win32 guarded-open identity checks * Config: migrate threadBindings ttlHours to idleHours * Revert "Infra: relax win32 guarded-open identity checks" This reverts commit de94126771db072ecda6a014e80700310e76df61. * Revert "Infra: handle win32 unknown inode in file identity checks" This reverts commit 96fc5ddfb39762aa078d70dd4b4d3754e49a159b. * Discord: re-read live binding state before sweep unbind * fix: add changelog note for thread binding lifecycle update (#27845) (thanks @osolmaz) --------- Co-authored-by: Onur Solmaz <onur@textcortex.com>
40 lines
1.4 KiB
TypeScript
40 lines
1.4 KiB
TypeScript
import {
|
|
resolveThreadBindingIdleTimeoutMs,
|
|
resolveThreadBindingMaxAgeMs,
|
|
resolveThreadBindingsEnabled,
|
|
} from "../../channels/thread-bindings-policy.js";
|
|
import type { OpenClawConfig } from "../../config/config.js";
|
|
import { normalizeAccountId } from "../../routing/session-key.js";
|
|
|
|
export {
|
|
resolveThreadBindingIdleTimeoutMs,
|
|
resolveThreadBindingMaxAgeMs,
|
|
resolveThreadBindingsEnabled,
|
|
};
|
|
|
|
export function resolveDiscordThreadBindingIdleTimeoutMs(params: {
|
|
cfg: OpenClawConfig;
|
|
accountId?: string;
|
|
}): number {
|
|
const accountId = normalizeAccountId(params.accountId);
|
|
const root = params.cfg.channels?.discord?.threadBindings;
|
|
const account = params.cfg.channels?.discord?.accounts?.[accountId]?.threadBindings;
|
|
return resolveThreadBindingIdleTimeoutMs({
|
|
channelIdleHoursRaw: account?.idleHours ?? root?.idleHours,
|
|
sessionIdleHoursRaw: params.cfg.session?.threadBindings?.idleHours,
|
|
});
|
|
}
|
|
|
|
export function resolveDiscordThreadBindingMaxAgeMs(params: {
|
|
cfg: OpenClawConfig;
|
|
accountId?: string;
|
|
}): number {
|
|
const accountId = normalizeAccountId(params.accountId);
|
|
const root = params.cfg.channels?.discord?.threadBindings;
|
|
const account = params.cfg.channels?.discord?.accounts?.[accountId]?.threadBindings;
|
|
return resolveThreadBindingMaxAgeMs({
|
|
channelMaxAgeHoursRaw: account?.maxAgeHours ?? root?.maxAgeHours,
|
|
sessionMaxAgeHoursRaw: params.cfg.session?.threadBindings?.maxAgeHours,
|
|
});
|
|
}
|