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

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
Cisco Talos Blog
Cisco Talos Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
V2EX
博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
D
Docker
S
SegmentFault 最新的问题
博客园 - 聂微东
美团技术团队
Apple Machine Learning Research
Apple Machine Learning Research
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI
M
MIT News - Artificial intelligence
F
Fortinet All Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The GitHub Blog
The GitHub Blog
GbyAI
GbyAI
L
LangChain Blog
Vercel News
Vercel News
博客园 - 叶小钗
MongoDB | Blog
MongoDB | Blog
Stack Overflow Blog
Stack Overflow Blog
H
Help Net Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
Engineering at Meta
Engineering at Meta
T
Threat Research - Cisco Blogs
T
Threatpost
Scott Helme
Scott Helme
T
Tailwind CSS Blog
Latest news
Latest news
Stack Overflow Blog
Stack Overflow Blog
Blog — PlanetScale
Blog — PlanetScale
The Register - Security
The Register - Security
罗磊的独立博客
P
Proofpoint News Feed
腾讯CDC
S
Schneier on Security
雷峰网
雷峰网
A
About on SuperTechFans
T
Tenable Blog
F
Full Disclosure
Cyberwarzone
Cyberwarzone
博客园_首页
有赞技术团队
有赞技术团队
K
Kaspersky official blog

Recent Commits to openclaw:main

chore(lint): enable readability lint rules · openclaw/openclaw@deb7bc6 fix(ci): restore main validation · openclaw/openclaw@0211a3a fix(slack): keep DM thread turns out of active steering · openclaw/openclaw@f1cb9f2 fix(commands): make /skill load workspace skills · openclaw/openclaw@667393b fix(telegram): align DM topic session routing · openclaw/openclaw@72c61bc test: keep timeout clamp checks under one second · openclaw/openclaw@b372af6 test: keep vitest cases under one second test: restore marketplace cleanup coverage · openclaw/openclaw@9f99acf fix(shared): restore number coercion barrel fix: clarify generated media reply prompts (#88458) · openclaw/openclaw@8a46790 fix(qa): clamp transport wait intervals fix(qa): clamp gateway restart polling fix(channels): clamp typing timers · openclaw/openclaw@92f1d90 fix(agents): clamp embedded run drain polling fix(sqlite): clamp WAL checkpoint intervals · openclaw/openclaw@287f531 fix(onboard): clamp gateway reachability polling · openclaw/openclaw@bb680a8 fix(feishu): clamp sequential queue timeouts · openclaw/openclaw@fab8d29 fix(nostr): bound seen tracker capacity · openclaw/openclaw@5b0036f fix(agents): clamp session suspension TTLs · openclaw/openclaw@11c050d fix(memory): clamp batch timeout minutes · openclaw/openclaw@84061c1 fix(gateway): clamp auth limiter prune intervals · openclaw/openclaw@a1d7a75 fix(memory): clamp sync interval timers · openclaw/openclaw@5c38c0c fix(channels): clamp draft stream throttles fix(gateway): clamp auth limiter durations fix(clickclack): normalize reconnect intervals fix(qa): clamp cron run poll intervals · openclaw/openclaw@83597b7 fix(gateway): bound health monitor intervals fix(auth): bound profile usage window expiries fix(auto-reply): clamp typing timers · openclaw/openclaw@db94eac fix(openai): convert realtime secret expiry · openclaw/openclaw@dca53af fix(heartbeat): advance stale scheduler deferrals · openclaw/openclaw@bbc4bee fix(build): preserve fresh startup metadata across rebuilds perf: cache log timestamp formatters fix(ui): localize tool error card label fix(e2e): preflight openai chat tools auth · openclaw/openclaw@e1a9817 fix(release): tolerate npm README metadata lag · openclaw/openclaw@4dad7bd fix(codex): preserve public OpenAI app-server provider · openclaw/openclaw@26913e6 fix: keep tool card actions inline · openclaw/openclaw@5c5711f fix: label collapsed tool cards by tool · openclaw/openclaw@1e3542b fix: share skill workshop prompt with codex · openclaw/openclaw@9a00d74 fix: isolate dev source plugin aliases fix: prefer source plugins in dev runs · openclaw/openclaw@ae800e1 chore(release): refresh plugin sdk api baseline fix(qa): use auth credential type for OpenAI live model selection · openclaw/openclaw@dd72b10 fix(webchat): fetch full sidebar content for truncated history · openclaw/openclaw@199a1b9 refactor: extract normalization core package · openclaw/openclaw@00d8d7e fix(qa): restore OpenAI OAuth release contracts · openclaw/openclaw@94814f3 fix(ui): satisfy vite alias lint guard · openclaw/openclaw@9caefea fix(release): align prerelease contracts after provider rename · openclaw/openclaw@16bae70 fix(e2e): prove gateway health after websocket connect · openclaw/openclaw@6270d53 fix: resolve root aliases in ui dev fix: vertically center tool summary labels fix(release): repair 2026.5.30 beta prerelease gates · openclaw/openclaw@ab35dcd refactor: unify OpenAI provider identity (#88451) · openclaw/openclaw@4c33aaa feat: move workboard to relational sqlite · openclaw/openclaw@8d6a6e9 fix(scripts): assert lifecycle inspect output · openclaw/openclaw@7fc02d3 refactor: route browser screenshot vision through shared media unders… · openclaw/openclaw@7920af0 fix(release): harden beta doctor and RTT credential deadlines feat: improve MCP operator workflows · openclaw/openclaw@38d3d11 fix(browser): allow inbound media uploads · openclaw/openclaw@8be581c fix(feishu): use full gateway channel runtime · openclaw/openclaw@d05e4a4 fix(scripts): fail gauntlet on missing qa summaries · openclaw/openclaw@0b0edcd chore: remove more unused internal helpers · openclaw/openclaw@57c88dd perf: skip idle channel shutdown enumeration perf(scripts): prebuild qa runtime assets · openclaw/openclaw@ee2b90b fix(gateway): strip spurious tool calls on non-tool stops fix(ci): ignore fenced headings in proof parser (#87390) · openclaw/openclaw@1cab722 chore: remove old unused helpers fix(cron): preserve plugin delivery targets · openclaw/openclaw@2442e9c Refactor cron migrations under doctor (#88455) · openclaw/openclaw@0ac6107 docs(changelog): refresh 2026.5.30 notes fix subagent dm completion delivery (#88182) fix(codex-supervisor): satisfy release lint test(wizard): include tokenjuice optional plugin fix(agents): preserve generated media fallback routing · openclaw/openclaw@2d23519 fix: show chat errors as visible messages fix(ui): add agent selector to dreaming tab (#78748) · openclaw/openclaw@cd3d960 perf: cache validated session prompt blobs · openclaw/openclaw@d93394e docs: trim release performance report tail · openclaw/openclaw@83dff58 chore: remove unused infra helpers · openclaw/openclaw@3402477 perf: cache serialized session prompt refs · openclaw/openclaw@71b3bc8 chore: remove unused agent helpers · openclaw/openclaw@0be3ef5 feat: add internal code mode namespaces (#88043) · openclaw/openclaw@287687d chore(release): update appcast for 2026.5.28 · openclaw/openclaw@22e4289 fix(scripts): accept forwarded otel smoke args · openclaw/openclaw@5367ef7 chore: remove unused changelog helper · openclaw/openclaw@598e177 docs: refresh release performance sweep for 2026.5.28 · openclaw/openclaw@0ed9fb4 fix: promote serialized tool calls via repair package · openclaw/openclaw@3ea9115 fix(slack): preserve assistant DM root thread context (#63840) · openclaw/openclaw@4432554 fix(scripts): accept forwarded watch regression args · openclaw/openclaw@7dde396 feat: pass structured provider error signals to hooks · openclaw/openclaw@89975ee fix(ui): filter sidebar recent sessions by selected agent ci: update remaining Testbox actions refactor: simplify sqlite cron persistence · openclaw/openclaw@a825b55 Fix /acp spawn cwd inheritance for target agent workspaces (#82415) perf(build): skip dts for runtime build profiles build: classify release dependency ownership refactor: source model catalog types from core fix(tui): surface terminal lifecycle errors · openclaw/openclaw@6532929 perf: cache manifest model suppression resolver · openclaw/openclaw@3f50485
perf: prewarm gateway runtime plugins · openclaw/openclaw@ade6e77
steipete · 2026-05-31 · via Recent Commits to openclaw:main

@@ -47,6 +47,7 @@ const hoisted = vi.hoisted(() => {

4747

inCatalog: true,

4848

}));

4949

const ensureOpenClawModelsJson = vi.fn(async () => {});

50+

const ensureRuntimePluginsLoaded = vi.fn();

5051

const clearCurrentProviderAuthState = vi.fn();

5152

const warmCurrentProviderAuthStateOffMainThread = vi.fn(

5253

async (_cfg?: unknown, _options?: unknown) => {},

@@ -82,6 +83,7 @@ const hoisted = vi.hoisted(() => {

8283

loadModelCatalog,

8384

getModelRefStatus,

8485

ensureOpenClawModelsJson,

86+

ensureRuntimePluginsLoaded,

8587

clearCurrentProviderAuthState,

8688

warmCurrentProviderAuthStateOffMainThread,

8789

setAuthProfileFailureHook,

@@ -179,6 +181,10 @@ vi.mock("../agents/models-config.js", () => ({

179181

ensureOpenClawModelsJson: hoisted.ensureOpenClawModelsJson,

180182

}));

181183184+

vi.mock("../agents/runtime-plugins.js", () => ({

185+

ensureRuntimePluginsLoaded: hoisted.ensureRuntimePluginsLoaded,

186+

}));

187+182188

vi.mock("../agents/model-provider-auth.js", () => ({

183189

clearCurrentProviderAuthState: hoisted.clearCurrentProviderAuthState,

184190

warmCurrentProviderAuthStateOffMainThread: hoisted.warmCurrentProviderAuthStateOffMainThread,

@@ -294,6 +300,7 @@ describe("startGatewayPostAttachRuntime", () => {

294300

});

295301

hoisted.ensureOpenClawModelsJson.mockReset();

296302

hoisted.ensureOpenClawModelsJson.mockResolvedValue(undefined);

303+

hoisted.ensureRuntimePluginsLoaded.mockReset();

297304

hoisted.clearCurrentProviderAuthState.mockClear();

298305

hoisted.warmCurrentProviderAuthStateOffMainThread.mockReset();

299306

hoisted.warmCurrentProviderAuthStateOffMainThread.mockResolvedValue(undefined);

@@ -926,7 +933,7 @@ describe("startGatewayPostAttachRuntime", () => {

926933

await vi.advanceTimersToNextTimerAsync();

927934

expect(postReadyRequestTurn).toHaveBeenCalledTimes(1);

928935

expect(onPostReadySidecars.mock.calls[0]?.[0]).toHaveLength(0);

929-

expect(onGatewayLifetimeSidecars.mock.calls[0]?.[0]).toHaveLength(1);

936+

expect(onGatewayLifetimeSidecars.mock.calls[0]?.[0]).toHaveLength(2);

930937

await vi.dynamicImportSettled();

931938

await vi.waitFor(() => {

932939

expect(hoisted.setAuthProfileFailureHook).toHaveBeenCalledTimes(1);

@@ -942,6 +949,34 @@ describe("startGatewayPostAttachRuntime", () => {

942949

}

943950

});

944951952+

it("uses current config when agent runtime plugin prewarm runs", async () => {

953+

const startupConfig = { marker: "startup" } as never;

954+

const currentConfig = { marker: "current" } as never;

955+956+

await startGatewayPostAttachRuntime({

957+

...createPostAttachParams({

958+

gatewayPluginConfigAtStart: startupConfig,

959+

}),

960+

providerAuthPrewarm: { enabled: false },

961+

agentRuntimePluginPrewarm: {

962+

enabled: true,

963+

delayMs: 0,

964+

getConfig: () => currentConfig,

965+

},

966+

});

967+968+

await vi.waitFor(() => {

969+

expect(hoisted.ensureRuntimePluginsLoaded).toHaveBeenCalledWith({

970+

config: currentConfig,

971+

workspaceDir: "/tmp/openclaw-workspace",

972+

allowGatewaySubagentBinding: true,

973+

});

974+

});

975+

expect(hoisted.ensureRuntimePluginsLoaded).not.toHaveBeenCalledWith(

976+

expect.objectContaining({ config: startupConfig }),

977+

);

978+

});

979+945980

it("keeps provider auth prewarm alive when Gmail post-ready sidecars stop", async () => {

946981

vi.useFakeTimers();

947982

const onPostReadySidecars = vi.fn();

@@ -985,7 +1020,7 @@ describe("startGatewayPostAttachRuntime", () => {

9851020

| { stop: () => void }[]

9861021

| undefined;

9871022

expect(gmailSidecars).toHaveLength(1);

988-

expect(lifetimeSidecars).toHaveLength(1);

1023+

expect(lifetimeSidecars).toHaveLength(2);

98910249901025

for (const sidecar of gmailSidecars ?? []) {

9911026

sidecar.stop();

@@ -1045,7 +1080,7 @@ describe("startGatewayPostAttachRuntime", () => {

10451080

| Array<{ stop: () => Promise<void> | void }>

10461081

| undefined;

10471082

expect(gmailSidecars).toHaveLength(1);

1048-

expect(lifetimeSidecars).toHaveLength(1);

1083+

expect(lifetimeSidecars).toHaveLength(2);

1049108410501085

await vi.waitFor(() => {

10511086

expect(hoisted.transcriptsAutoStartService.start).toHaveBeenCalledTimes(1);

@@ -1056,7 +1091,9 @@ describe("startGatewayPostAttachRuntime", () => {

10561091

}

10571092

expect(hoisted.transcriptsAutoStartService.stop).not.toHaveBeenCalled();

105810931059-

await lifetimeSidecars?.[0]?.stop();

1094+

for (const sidecar of lifetimeSidecars ?? []) {

1095+

await sidecar.stop();

1096+

}

10601097

expect(hoisted.transcriptsAutoStartService.stop).toHaveBeenCalledTimes(1);

10611098

});

10621099

@@ -1440,7 +1477,7 @@ describe("startGatewayPostAttachRuntime", () => {

14401477

name: "sidecars.ready",

14411478

metrics: [

14421479

["loadedPluginCount", 2],

1443-

["postReadySidecarCount", 0],

1480+

["postReadySidecarCount", 1],

14441481

],

14451482

});

14461483

});