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

推荐订阅源

博客园 - 三生石上(FineUI控件)
T
Threat Research - Cisco Blogs
月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
爱范儿
爱范儿
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
云风的 BLOG
云风的 BLOG
D
Docker
罗磊的独立博客
U
Unit 42
博客园 - 聂微东
人人都是产品经理
人人都是产品经理
P
Proofpoint News Feed
博客园 - Franky
Apple Machine Learning Research
Apple Machine Learning Research
MyScale Blog
MyScale Blog
B
Blog RSS Feed
美团技术团队
J
Java Code Geeks
S
Securelist
Cyberwarzone
Cyberwarzone
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
NISL@THU
NISL@THU
Security Latest
Security Latest
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Recorded Future
Recorded Future
Hacker News - Newest:
Hacker News - Newest: "LLM"
L
LINUX DO - 热门话题
Recent Announcements
Recent Announcements
Last Week in AI
Last Week in AI
A
About on SuperTechFans
MongoDB | Blog
MongoDB | Blog
Spread Privacy
Spread Privacy
T
Tenable Blog
I
Intezer
N
News | PayPal Newsroom
大猫的无限游戏
大猫的无限游戏
A
Arctic Wolf
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
V2EX - 技术
S
Schneier on Security
S
SegmentFault 最新的问题
Latest news
Latest news
宝玉的分享
宝玉的分享
V
Visual Studio Blog
V
V2EX
T
Tor Project blog
C
Comments on: Blog

Recent Commits to openclaw:main

fix(slack): avoid forced threads for replyToMode off fix(macos): prevent duplicate menu bar icons · openclaw/openclaw@e18099b perf(agents): avoid full setup registry for runtime aliases · openclaw/openclaw@a52c4d1 fix(agents): prevent embedded runtime shadowing · openclaw/openclaw@4ef141d fix(outbound): route source replies through configured channels · openclaw/openclaw@1955f42 refactor(cron): split tool and doctor repair helpers · openclaw/openclaw@cd3b467 perf: reduce tui refresh work feat: default exec shell snapshots fix(ui): keep chat usable during session loading fix(cron): guard flat atMs canonicalization refactor(cron): keep runtime on canonical sqlite rows fix(codex): restore bounded recovery continuity · openclaw/openclaw@827ceb5 refactor: clean up ACP package metadata and helpers (#88659) · openclaw/openclaw@7b78941 fix(discord): ping mention-bearing final replies · openclaw/openclaw@a5d8f09 fix(telegram): preserve usage footer for tool-only replies · openclaw/openclaw@8f941ea fix(agents): avoid alias setup load for matching refs · openclaw/openclaw@b334e7e chore(ui): translate thinking default label fix(agents): preserve runtime tools in lean mode (#88381) fix(messages): use best-effort for implicit tool-only source replies … docs: raise bulk PR close threshold · openclaw/openclaw@66775c0 feat: add exec shell snapshot cache · openclaw/openclaw@c389839 fix: use typed tui empty session defaults · openclaw/openclaw@50c6519 perf: speed up tui session refresh · openclaw/openclaw@18dc6e5 fix(ci): align agent thinking default surfaces · openclaw/openclaw@9a4b631 docs: require live batch issue verification · openclaw/openclaw@832b648 ci(release): extend QA runtime parity timeout · openclaw/openclaw@d689893 ci: stabilize Testbox changed checks · openclaw/openclaw@d1bec46 fix(agents): report stale session locks without cleanup · openclaw/openclaw@7ca7712 fix(gateway): reject stale lifecycle session updates · openclaw/openclaw@fb7e217 docs(agents): require typed presentation actions · openclaw/openclaw@88c99dd fix(models): keep auth login out of main config · openclaw/openclaw@1bfae9d fix: guard stale lifecycle snapshots (#88583) fix(gateway): reject pre-reset run lifecycle events from clobbering r… · openclaw/openclaw@613f51a fix: apply ACP spawn model defaults · openclaw/openclaw@ff22b1e fix(agents): accept disabled thinking params fix(gateway): expose agent thinking defaults · openclaw/openclaw@f8f5259 ci: use normal node_modules for Blacksmith Testbox · openclaw/openclaw@d99934a fix(agents): inherit subagent thinking defaults fix(plugins): scope tool callbacks during materialization · openclaw/openclaw@643633c fix(plugins): remove redundant proxy assertion · openclaw/openclaw@82a0ba8 fix(agents): keep async media starts nonterminal · openclaw/openclaw@3ebbf9a fix(plugins): preserve wrapped tool descriptors · openclaw/openclaw@f62a22c fix(codex): let async media coexist with terminal batches fix(plugins): delegate wrapped tool properties · openclaw/openclaw@d99c824 fix(codex): clear completed dynamic tool release blockers fix(gateway): enforce OpenAI tool_choice contracts feat: add MCP code-mode namespace (#88636) fix(agents): avoid synthetic tool results during parallel races · openclaw/openclaw@44c65de fix(e2e): show plugins docker sweep progress · openclaw/openclaw@0833c68 docs: require gh comment drafts · openclaw/openclaw@f2ace9f docs: require codex source citations · openclaw/openclaw@036acbd fix(agents): release session lock on manual abort · openclaw/openclaw@95890fe docs: clarify autoreview refactor follow-up · openclaw/openclaw@a7075f3 fix(agents): scope timeout cooldowns by model · openclaw/openclaw@582fea9 test(discord): drive application id retry timer · openclaw/openclaw@d927e73 docs: strengthen review dependency inspection rules refactor: expand acp core package (#88618) · openclaw/openclaw@7dea283 fix(doctor): diagnose malformed provider catalogs · openclaw/openclaw@cc29005 fix(agents): normalize prefixed Anthropic model ids (#88587) · openclaw/openclaw@826b378 chore: bump OpenClaw version to 2026.5.31 · openclaw/openclaw@0d17623 feat(codex): add portable Codex command pickers (#82224) fix(tui): preserve pending local runs during session sync (#87959) · openclaw/openclaw@5a0e677 docs: clarify inline code comments · openclaw/openclaw@85beee6 fix(auto-reply): warn on substantive private message-tool finals · openclaw/openclaw@75e0053 fix(tui): use middle truncation for paths and commands in tool displa… · openclaw/openclaw@81b9da0 fix(webchat): suppress stale active session rows (#87962) · openclaw/openclaw@e452d16 fix(tui): skip history reload when final event has displayable output… · openclaw/openclaw@9a1b95c test(discord): isolate timer-sensitive request tests · openclaw/openclaw@5dc4531 fix(e2e): heartbeat resource-sampled docker lanes fix(auth): coerce persisted device auth tokens refactor: unify subagent handoffs into agent steering queue fix(tasks): reclaim ACP zombie runs blocking gateway restart (#88281) · openclaw/openclaw@02c7b5b test(release): wait for bundled runtime commands · openclaw/openclaw@100dd79 fix(hooks): isolate slug-generator auth failures · openclaw/openclaw@318cae1 docs: require issue summaries in agent replies · openclaw/openclaw@17c8602 docs: clarify agent workflow rules refactor(openai): confine legacy codex repair to doctor · openclaw/openclaw@7423e9c fix(auto-reply): honor per-model thinking params · openclaw/openclaw@2f7e6ec refactor(cron): keep legacy notify migration in doctor · openclaw/openclaw@b222b5f fix(exec): allow predicate shell builtins in allowlist mode · openclaw/openclaw@2fe019c test(voice-call): drive Twilio stream failure timers · openclaw/openclaw@657a668 fix(diagnostics): surface Bonjour state in support exports · openclaw/openclaw@c797f02 perf(cli): narrow gateway dispatch startup · openclaw/openclaw@32c0279 docs: tighten refactor storage policy · openclaw/openclaw@44512b5 docs: require PR review transparency · openclaw/openclaw@f1fc204 docs: clarify runtime migration boundary fix(agents): preserve reasoning replay from model metadata · openclaw/openclaw@cf315dd test(release): harden beta validation gates fix(exec): allow known safe shell builtins in allowlist mode · openclaw/openclaw@fee4e52 docs: explain per-agent model params refactor: move plugin state stores to sqlite (#88609) fix: preserve discord policy close narrowing · openclaw/openclaw@fd88f34 fix: queue subagent completion handoffs (#88613) docs(codex): clarify first-party plugin marketplaces · openclaw/openclaw@729712d docs: tighten env surface policy · openclaw/openclaw@97a97ad docs: tighten config surface policy · openclaw/openclaw@2e25400 fix(devices): refresh paired device last-seen metadata · openclaw/openclaw@703fae1 fix(agents): classify expired thinking signatures (#88340) · openclaw/openclaw@fdf8ddd fix(browser): document stable tab references (#88393) · openclaw/openclaw@3a88142 fix(discord): log gateway websocket close details · openclaw/openclaw@94b1427
perf: trim tui startup and refresh work · openclaw/openclaw@b9dc3c3
steipete · 2026-05-31 · via Recent Commits to openclaw:main

@@ -29,7 +29,6 @@ import {

2929

import { getSlashCommands } from "./commands.js";

3030

import { ChatLog } from "./components/chat-log.js";

3131

import { CustomEditor } from "./components/custom-editor.js";

32-

import { GatewayChatClient } from "./gateway-chat.js";

3332

import { resolveLocalRunShutdownGraceMs } from "./local-run-shutdown.js";

3433

import { editorTheme, theme } from "./theme/theme.js";

3534

import type { TuiBackend } from "./tui-backend.js";

@@ -522,6 +521,8 @@ export async function runTui(opts: RunTuiOptions): Promise<TuiResult> {

522521

let dynamicSlashCommandsKey: string | null = null;

523522

let dynamicSlashCommandsInFlightKey: string | null = null;

524523

let dynamicSlashCommandsRequestId = 0;

524+

let dynamicSlashCommandsReady = false;

525+

let dynamicSlashCommandsRefreshTimer: ReturnType<typeof setTimeout> | null = null;

525526

let lastCtrlCAt = 0;

526527

let exitRequested = false;

527528

let exitResult: TuiResult = { exitReason: "exit" };

@@ -714,6 +715,7 @@ export async function runTui(opts: RunTuiOptions): Promise<TuiResult> {

714715

const { EmbeddedTuiBackend } = await import("./embedded-backend.js");

715716

client = new EmbeddedTuiBackend();

716717

} else {

718+

const { GatewayChatClient } = await import("./gateway-chat.js");

717719

client = await GatewayChatClient.connect({

718720

url: opts.url,

719721

token: opts.token,

@@ -769,9 +771,19 @@ export async function runTui(opts: RunTuiOptions): Promise<TuiResult> {

769771

);

770772

};

771773774+

const clearDynamicSlashCommandsRefreshTimer = () => {

775+

if (!dynamicSlashCommandsRefreshTimer) {

776+

return;

777+

}

778+

clearTimeout(dynamicSlashCommandsRefreshTimer);

779+

dynamicSlashCommandsRefreshTimer = null;

780+

};

781+772782

const refreshDynamicSlashCommands = () => {

783+

clearDynamicSlashCommandsRefreshTimer();

773784

const key = resolveDynamicSlashCommandsKey();

774785

if (

786+

!dynamicSlashCommandsReady ||

775787

!isConnected ||

776788

!client.listCommands ||

777789

dynamicSlashCommandsKey === key ||

@@ -807,9 +819,21 @@ export async function runTui(opts: RunTuiOptions): Promise<TuiResult> {

807819

});

808820

};

809821822+

const scheduleDynamicSlashCommandsRefresh = () => {

823+

if (

824+

!dynamicSlashCommandsReady ||

825+

dynamicSlashCommandsRefreshTimer ||

826+

dynamicSlashCommandsKey === resolveDynamicSlashCommandsKey()

827+

) {

828+

return;

829+

}

830+

dynamicSlashCommandsRefreshTimer = setTimeout(refreshDynamicSlashCommands, 0);

831+

dynamicSlashCommandsRefreshTimer.unref?.();

832+

};

833+810834

const updateAutocompleteProvider = () => {

811835

applyAutocompleteProvider();

812-

refreshDynamicSlashCommands();

836+

scheduleDynamicSlashCommandsRefresh();

813837

};

814838815839

tui.addChild(root);

@@ -1474,6 +1498,8 @@ export async function runTui(opts: RunTuiOptions): Promise<TuiResult> {

14741498

4000,

14751499

);

14761500

tui.requestRender();

1501+

dynamicSlashCommandsReady = true;

1502+

scheduleDynamicSlashCommandsRefresh();

14771503

if (!autoMessageSent && autoMessage) {

14781504

autoMessageSent = true;

14791505

await sendMessage(autoMessage);

@@ -1494,6 +1520,8 @@ export async function runTui(opts: RunTuiOptions): Promise<TuiResult> {

14941520

dynamicSlashCommands = [];

14951521

dynamicSlashCommandsKey = null;

14961522

dynamicSlashCommandsInFlightKey = null;

1523+

dynamicSlashCommandsReady = false;

1524+

clearDynamicSlashCommandsRefreshTimer();

14971525

dynamicSlashCommandsRequestId += 1;

14981526

updateAutocompleteProvider();

14991527

pauseStreamingWatchdog();