惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

aimingoo的专栏
aimingoo的专栏
量子位
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
Schneier on Security
Cisco Talos Blog
Cisco Talos Blog
T
ThreatConnect
J
Java Code Geeks
博客园 - 司徒正美
A
Arctic Wolf
T
True Tiger Recordings
C
Cybersecurity and Infrastructure Security Agency CISA
Cyberwarzone
Cyberwarzone
Know Your Adversary
Know Your Adversary
T
Threat Research - Cisco Blogs
V
Vulnerabilities – Threatpost
Recorded Future
Recorded Future
P
Palo Alto Networks Blog
The Hacker News
The Hacker News
The Register - Security
The Register - Security
S
Securelist
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
CXSECURITY Database RSS Feed - CXSecurity.com
Application and Cybersecurity Blog
Application and Cybersecurity Blog
I
Intezer
P
Privacy & Cybersecurity Law Blog
Scott Helme
Scott Helme
K
Kaspersky official blog
博客园 - 聂微东
Last Week in AI
Last Week in AI
V
V2EX
小众软件
小众软件
F
Fox-IT International blog
Martin Fowler
Martin Fowler
Apple Machine Learning Research
Apple Machine Learning Research
T
Tenable Blog
F
Future of Privacy Forum
Microsoft Security Blog
Microsoft Security Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
腾讯CDC
Stack Overflow Blog
Stack Overflow Blog
C
Check Point Blog
阮一峰的网络日志
阮一峰的网络日志
GbyAI
GbyAI
T
Threatpost
I
InfoQ
P
Proofpoint News Feed
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
T
Tor Project blog
G
GRAHAM CLULEY
D
DataBreaches.Net

Recent Commits to openclaw:main

fix(security): audit Claude permission overrides under YOLO (#86557) fix(qa): harden restart inflight Windows scenario · openclaw/openclaw@3eb06e3 Recover Codex context overflow prompt errors (#85542) · openclaw/openclaw@5cfa577 docs: update changelog for #70473 · openclaw/openclaw@d967760 fix(agents): derive overflow budgets from provider errors · openclaw/openclaw@d5b0174 fix(plugins): only memoize complete metadata snapshots · openclaw/openclaw@3137622 docs: update changelog for media wake fallback (#85489) · openclaw/openclaw@a11d4e6 fix: fallback after active media wake failure (#85489) · openclaw/openclaw@1b64ccb perf(plugins): reuse derived metadata snapshots · openclaw/openclaw@159e440 docs: require maintainer-editable PR branches · openclaw/openclaw@f271f00 fix: scan OpenClaw sessions in agent transcript finder · openclaw/openclaw@4012ae4 docs: note agent transcript OpenClaw session scan · openclaw/openclaw@dd375f9 docs: require generic local fixes · openclaw/openclaw@fc93af5 fix: broaden leading voice wake fuzzing · openclaw/openclaw@a9c91ca test(agents): preserve provider hook mock exports (#86523) · openclaw/openclaw@657b246 Policy: add agent-scoped policy overlays (#85817) · openclaw/openclaw@fbb6340 fix(kilocode): normalize string stop param to array in stream wrapper… · openclaw/openclaw@abe9923 Doctor: expose shell completion health findings (#85566) · openclaw/openclaw@dc17412 fix(agents): honor effective exec policy for Claude live Bash (#86330) fix(test): stabilize e2e runtime imports fix(test): clean plugin gauntlet temp roots · openclaw/openclaw@633e4b8 perf: cache plugin package realpaths (#86517) · openclaw/openclaw@69d728a fix(qa): settle restart races with live budget · openclaw/openclaw@2cac9e5 fix(crabbox): sync full sparse lease runs · openclaw/openclaw@e97e831 fix(qa): extend config mutation Windows budget fix(qa): extend config cleanup Windows budget · openclaw/openclaw@8a93851 test(crabbox): tolerate Windows shell capture · openclaw/openclaw@50d6611 fix(sessions): stop doctor OOM on large session stores and reclaim st… · openclaw/openclaw@89aea9b fix(ollama): strip inline kimi cloud reasoning leak (#86515) fix(discord): merge media captions into one message (#86487) · openclaw/openclaw@bc10fad fix(utils): clamp fetch timeout timers (#85985) fix(ui): preserve user code block rendering (#85942) fix(memory): prevent silent vector index degradation when embedding p… docs: clarify agent transcript placeholders · openclaw/openclaw@8da8bc4 test(qa): annotate live transport RTT measurements · openclaw/openclaw@bb6f37e fix(qqbot): derive outbound watchdog from configured timeouts (#85267… · openclaw/openclaw@aa702cf fix(test): clean kitchen sink rpc temp state · openclaw/openclaw@6f695c1 fix: quiet missing daily memory reads fix: tighten empty plugin registry reuse · openclaw/openclaw@026cfb6 perf: speed up agent transcript lookup · openclaw/openclaw@e7ad116 fix: guard QMD session stem fallback (#86482) · openclaw/openclaw@2e3b59b Guard OpenAI chat payload turns (#86497) · openclaw/openclaw@489e415 fix(gateway): keep session tool mirrors under pressure · openclaw/openclaw@459e89a docs: route github creation through agent transcript test(tools): add unmocked image custom-provider auth regression (#85733) · openclaw/openclaw@f0bfb3f refactor(plugin-sdk): rename plain text tool-call compat wrapper docs(skills): defer private release locators · openclaw/openclaw@23d38e4 Replace Sharp image backend with Photon (#86437) · openclaw/openclaw@b9f975b fix(agents): release embedded-attempt session lock on every exit path… · openclaw/openclaw@32ddfc2 fix: accept OpenClaw voice wake confusions (#86507) fix(crabbox): bootstrap macos js toolchain chore: add agent transcript skill · openclaw/openclaw@d63e8d4 fix(gateway): dedupe session tool fanout · openclaw/openclaw@89a21db fix: Hook ingress token unlocks password-mode gateway auth (#86453) · openclaw/openclaw@d51f268 fix #86077: keep fallback errors candidate scoped (#86134) · openclaw/openclaw@d6b7fe8 fix(diagnostics): reclaim wedged session lanes with a stale leaked ac… · openclaw/openclaw@6f76d9f fix: derive plugin media trust from metadata (#86410) · openclaw/openclaw@e761eb8 fix(media-understanding): normalize HEIC before image descriptions (#… · openclaw/openclaw@75c7236 fix: accept leading fuzzy Discord voice wake names (#86484) · openclaw/openclaw@8fe4f34 feat: promote provider tool call stream wrapper (#86489) fix(test): dedupe kitchen sink command assertions test: derive deprecated sdk usage guard (#86403) fix(qa): extend memory fallback Windows budget fix(ui): move control ui chunking helper out of runtime source · openclaw/openclaw@968c87d fix: quiet retained lost task noise (#86475) fix(build): keep control ui chunking out of deadcode · openclaw/openclaw@dc26069 fix: rotate realtime voice sessions on max duration · openclaw/openclaw@dc2c4aa fix(test): stream bundled plugin sweep logs · openclaw/openclaw@fc3cd49 docs: add bugfix changelog credits · openclaw/openclaw@2e7e4bc fix(models): show oauth marker auth status (#86378) · openclaw/openclaw@a6df39d fix: seed cron task progress summaries (#86313) · openclaw/openclaw@92afd8b fix(update): exclude prerelease tags from stable git channel (#86260) · openclaw/openclaw@28f169b fix(doctor): warn and continue when cron job store is unreadable (#86… fix(gateway): clear runtime config snapshot before in-process restart… · openclaw/openclaw@90caa3b fix(scripts): restore sparse crabbox changed gates · openclaw/openclaw@d270879 fix(build): support Windows UI builds · openclaw/openclaw@0bb9b42 Fix local embedding worker safety (#85348) · openclaw/openclaw@7ff29a9 fix(ui): scope chat session picker to active agent (#85965) · openclaw/openclaw@70c7d6f [codex] improve iOS realtime talk mode (#86355) · openclaw/openclaw@9ca52ce fix(scripts): dedupe docker lane resources · openclaw/openclaw@5e94469 docs: add code size guidance · openclaw/openclaw@9a60fcf fix(test): avoid source gateway import in rpc walk · openclaw/openclaw@e9b8a6e docs: add bugfix changelog entries · openclaw/openclaw@f950132 Fix heartbeat response loop guard (#86324) (#86357) · openclaw/openclaw@e2c174e fix(memory-core): filter REM dreaming candidates to light-staged entr… · openclaw/openclaw@8b42771 fix(telegram): propagate forum topic names into agent context (#86299) fix(slack): keep downloaded files out of reply media (#86318) · openclaw/openclaw@2fcd481 fix(cron): accept plus durations for one-shot jobs (#86341) · openclaw/openclaw@9239f94 fix(plugins): clear metadata memo at lifecycle boundaries · openclaw/openclaw@e7c696a chore(skills): normalize release skill routing · openclaw/openclaw@4737e19 docs(release): require early performance regression check · openclaw/openclaw@0336938 fix(qa): capture Windows gateway metrics · openclaw/openclaw@9afbfc1 feat(qa): add coverage scenario matching · openclaw/openclaw@a1fe86a fix(perf): avoid duplicate docker package ui build build: enable modern TypeScript module syntax · openclaw/openclaw@bbc1772 ci: include performance evidence in release validation fix(providers): stream ordinary tool-like prose promptly fix(perf): harden gateway restart bench exits · openclaw/openclaw@82bbcf6 fix(gateway): gate talk secret bootstrap handoff (#85690) · openclaw/openclaw@c791e42 fix: suppress async media incomplete-turn errors (#85933) · openclaw/openclaw@35dcd42
fix: speed up Discord voice wake consults · openclaw/openclaw@5ae91f0
steipete · 2026-05-26 · via Recent Commits to openclaw:main

@@ -58,6 +58,7 @@ const DISCORD_REALTIME_FALLBACK_TEXT = "I hit an error while checking that. Plea

5858

const DISCORD_REALTIME_PENDING_SPEAKER_CONTEXT_LIMIT = 32;

5959

const DISCORD_REALTIME_RECENT_AGENT_PROXY_CONSULT_LIMIT = 16;

6060

const DISCORD_REALTIME_RECENT_AGENT_PROXY_CONSULT_TTL_MS = 15_000;

61+

const DISCORD_REALTIME_IGNORED_WAKE_NAME_CONTEXT_TTL_MS = 10_000;

6162

const DISCORD_REALTIME_LOG_PREVIEW_CHARS = 500;

6263

const DISCORD_REALTIME_DEFAULT_MIN_BARGE_IN_AUDIO_END_MS = 250;

6364

const DISCORD_REALTIME_FORCED_CONSULT_FALLBACK_DELAY_MS = 200;

@@ -140,6 +141,11 @@ type RecentAgentProxyConsultContext = {

140141

result?: RecentAgentProxyConsultResult;

141142

};

142143144+

type RecentIgnoredWakeNameSpeakerContext = {

145+

context: DiscordRealtimeSpeakerContext;

146+

createdAt: number;

147+

};

148+143149

function formatRealtimeLogPreview(text: string): string {

144150

const oneLine = text.replace(/\s+/g, " ").trim();

145151

if (oneLine.length <= DISCORD_REALTIME_LOG_PREVIEW_CHARS) {

@@ -636,6 +642,7 @@ export class DiscordRealtimeVoiceSession implements VoiceRealtimeSession {

636642

private wakeNames: string[] = [];

637643

private pendingAgentProxyConsultContexts: PendingAgentProxyConsultContext[] = [];

638644

private recentAgentProxyConsultContexts: RecentAgentProxyConsultContext[] = [];

645+

private recentIgnoredWakeNameSpeakerContext: RecentIgnoredWakeNameSpeakerContext | undefined;

639646

private readonly pendingSpeakerTurns: PendingSpeakerTurn[] = [];

640647

private outputAudioTimestampMs = 0;

641648

private outputAudioDiscordBytes = 0;

@@ -832,6 +839,7 @@ export class DiscordRealtimeVoiceSession implements VoiceRealtimeSession {

832839

this.clearForcedConsultTimers();

833840

this.pendingAgentProxyConsultContexts = [];

834841

this.recentAgentProxyConsultContexts = [];

842+

this.recentIgnoredWakeNameSpeakerContext = undefined;

835843

this.pendingSpeakerTurns.length = 0;

836844

this.queuedExactSpeechMessages = [];

837845

this.exactSpeechResponseActive = false;

@@ -1424,10 +1432,10 @@ export class DiscordRealtimeVoiceSession implements VoiceRealtimeSession {

14241432

this.recordMeetingNotesUtterance(trimmed, meetingNotesTurn);

14251433

const wakeNameResult = this.resolveWakeNameTranscript(trimmed);

14261434

if (!wakeNameResult.allowed) {

1435+

this.rememberIgnoredWakeNameSpeakerContext(this.consumePendingSpeakerContext());

14271436

logger.info(

14281437

`discord voice: realtime wake-name gate ignored transcript chars=${trimmed.length} voiceSession=${this.params.entry.voiceSessionKey} agent=${this.params.entry.route.agentId} wakeNames=${this.wakeNames.join(",") || "none"}`,

14291438

);

1430-

this.consumePendingSpeakerContext();

14311439

return;

14321440

}

14331441

const acceptedText = wakeNameResult.text || trimmed;

@@ -1540,14 +1548,18 @@ export class DiscordRealtimeVoiceSession implements VoiceRealtimeSession {

15401548

if (!question) {

15411549

return undefined;

15421550

}

1543-

const context = this.consumePendingSpeakerContext();

15441551

const skipReason = classifySkippableForcedAgentProxyTranscript(question);

15451552

if (skipReason) {

1553+

const context = this.consumePendingSpeakerContext();

15461554

logger.info(

15471555

`discord voice: realtime forced agent consult skipped reason=${skipReason} chars=${question.length} speaker=${context?.speakerLabel ?? "unknown"} transcript=${formatRealtimeLogPreview(question)}`,

15481556

);

15491557

return undefined;

15501558

}

1559+

let context = this.consumePendingSpeakerContext();

1560+

if (!context) {

1561+

context = this.consumeRecentIgnoredWakeNameSpeakerContext();

1562+

}

15511563

if (!context) {

15521564

const recent = this.findRecentAgentProxyConsultContext(question);

15531565

if (recent) {

@@ -1681,6 +1693,30 @@ export class DiscordRealtimeVoiceSession implements VoiceRealtimeSession {

16811693

return turn?.context;

16821694

}

168316951696+

private rememberIgnoredWakeNameSpeakerContext(

1697+

context: DiscordRealtimeSpeakerContext | undefined,

1698+

): void {

1699+

if (!context) {

1700+

return;

1701+

}

1702+

this.recentIgnoredWakeNameSpeakerContext = {

1703+

context,

1704+

createdAt: Date.now(),

1705+

};

1706+

}

1707+1708+

private consumeRecentIgnoredWakeNameSpeakerContext(): DiscordRealtimeSpeakerContext | undefined {

1709+

const recent = this.recentIgnoredWakeNameSpeakerContext;

1710+

this.recentIgnoredWakeNameSpeakerContext = undefined;

1711+

if (

1712+

!recent ||

1713+

Date.now() - recent.createdAt > DISCORD_REALTIME_IGNORED_WAKE_NAME_CONTEXT_TTL_MS

1714+

) {

1715+

return undefined;

1716+

}

1717+

return recent.context;

1718+

}

1719+16841720

private peekPendingSpeakerTurn(): PendingSpeakerTurn | undefined {

16851721

this.prunePendingSpeakerTurns();

16861722

this.expireClosedSpeakerTurnsBeforeLaterAudio();