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

推荐订阅源

博客园 - 三生石上(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

refactor: extract ACP turn runner · openclaw/openclaw@faae752 fix(agents): sanitize raw HTTP 401 provider errors · openclaw/openclaw@01ef169 fix(memory-core): preserve phase signals on read errors · openclaw/openclaw@a88e4fb refactor: extract ACP runtime resume state · openclaw/openclaw@90329e2 test(gateway): align startup refactor expectations · openclaw/openclaw@454a69a fix(discord): bound REST entity cache growth test(gateway): refresh startup assertions · openclaw/openclaw@3613981 fix(gateway): guard direct session display names · openclaw/openclaw@a129b91 refactor: extract ACP runtime handle ensure flow · openclaw/openclaw@2a30b93 fix(auth): add force re-login recovery and fallback auth skips · openclaw/openclaw@0ff5fe3 perf(scripts): parallelize remote core oxlint shards · openclaw/openclaw@db0209a fix(codex): stream final answer partials (#88730) · openclaw/openclaw@3bac0bc fix(approvals): interpolate request id in fallback command chore(lint): fix rebased lint violations chore(lint): enable stricter oxlint rules · openclaw/openclaw@304e2c8 docs: clarify superseded PR close policy fix(memory): serialize qmd writes across processes (#85931) test(extensions): update pairing challenge assertions fix(docker): refresh Node base image digests (#84988) · openclaw/openclaw@d88767e fix(daemon): detect system-scope systemd gateway units on Linux Add changelog for text document media sends Restrict plain text media sends to txt docs: clarify host-local text media boundary Fix explicit text alias extension check docs: update host-local media text policy docs: mention markdown host-local media sends (#79658) · openclaw/openclaw@e014145 Allow validated text document media sends Remove changelog entry from text media PR feat(plugin-sdk): add typed presentation command actions (#88721) docs: harden Codex dependency review gate refactor: extract ACP manager runtime handle cache fix(agents): prefer real tool results over repair synthetics docs: require deeper PR review evidence · openclaw/openclaw@05b3f1c fix(session-store): rewrite generated transcript paths on rollover fix: persist ACP metadata in SQLite (#88724) · openclaw/openclaw@db40fde docs: note OpenAI Codex canonical provider fix(ui): improve danger callout contrast test: harden release CI ordering · openclaw/openclaw@bb5b6f3 test(vitest): classify Crabbox shared dependencies · openclaw/openclaw@a3fa5b6 docs: raise bulk close confirmation threshold · openclaw/openclaw@7061c1e docs: require external api proof search · openclaw/openclaw@af58ed9 refactor: make Telegram message cache SQLite-only · openclaw/openclaw@090ca19 fix(auth): skip Anthropic API keys for usage status · openclaw/openclaw@b6e9473 docs: require fresh autoreview before landing code · openclaw/openclaw@fbc611a test(msteams): add keyed store to file consent runtime stub · openclaw/openclaw@2b4f3e4 refactor: extract ACP translator session updates · openclaw/openclaw@1a65425 fix(agents): validate context engine assemble result shape · openclaw/openclaw@301f17f docs: require best-fix PR review judgment · openclaw/openclaw@86ff92e fix(doctor): detect stale gateway service version metadata · openclaw/openclaw@6c5cd71 fix(gateway): track plugin subagent runs in agent handler · openclaw/openclaw@6f2fbaa chore: stop tracking package dist output · openclaw/openclaw@21dcf2d fix(agents): count stream deltas incrementally · openclaw/openclaw@938841c test: align release CI expectations · openclaw/openclaw@a053ae5 refactor: move plugin state slices to sqlite · openclaw/openclaw@33c246d perf(plugins): avoid duplicate provider hook load probes · openclaw/openclaw@12d4dda refactor: clean up ACP translator and manager tests (#88677) · openclaw/openclaw@f80a1e9 fix(telegram): handle ENOENT race in spool drain recovery rename · openclaw/openclaw@66bbcfd fix: extend CA bundle auto-injection to all 8 Node version managers · openclaw/openclaw@3ceaafb test(discord): fast-forward voice fallback timers · openclaw/openclaw@01a5e49 fix: handle iOS global agent transcripts fix(agents): avoid full stream replay on text deltas (#88252) fix(cli): extend holiday tagline dates through 2030 · openclaw/openclaw@723d09f plugin: gate Feishu bitable tools by config · openclaw/openclaw@5cfb578 fix: preserve explicit Feishu bitable gates fix(feishu): enforce bitable account gates · openclaw/openclaw@0ee5f47 feat: add typed MCP code-mode API (#88678) · openclaw/openclaw@4150c6f fix: remove webchat config surface · openclaw/openclaw@d1b514a fix(plugins): reuse current metadata snapshot in provider hot paths fix(auto-reply): track memory flush failure exhaustion docs(agents): require related issue search refactor: move delivery queues to SQLite (#88665) fix(ollama): yield during dense stream processing (#87818) fix(agents): resolve Codex static-catalog cold start · openclaw/openclaw@be29096 feat(deepseek): show provider balance in usage status fix(secrets): treat Codex app-server marker as non-secret perf(scripts): parallelize startup metadata help rendering · openclaw/openclaw@dd79c88 fix: inset iOS onboarding action buttons ci: add crabbox prewarm jobs · openclaw/openclaw@d76627f fix(whatsapp): suppress silent-run typing indicators · openclaw/openclaw@5152d8b fix(ios): update group chats in realtime · openclaw/openclaw@a6ee3db fix(doctor): repair stale session snapshot paths · openclaw/openclaw@4ab2eb4 fix(agents): release abandoned provider streams chore(plugin-sdk): refresh API baseline · openclaw/openclaw@31c83c6 fix(agents): use static shell snapshot temp prefix fix(slack): keep progress drafts in one message (#85612) · openclaw/openclaw@63d0c1d ci: narrow legacy webchat migration value · openclaw/openclaw@71a516d fix(discord): route thread bindings to plugin owners · openclaw/openclaw@63621ee feat(github-copilot): add Claude Opus 4.8 to default model catalog · openclaw/openclaw@fbb776d ci: fix acp spawn defaults lint · openclaw/openclaw@6f4ba7c fix: route iMessage DM media through attachment handoff (#87904) · openclaw/openclaw@044f7f3 fix: retire webchat channel config · openclaw/openclaw@d07f508 fix(tlon): avoid bundling native skill packages · openclaw/openclaw@e5097b3 fix(terminal): clamp wide graphemes in narrow table cells fix(memory-core): reclaim orphaned dreaming sessions · openclaw/openclaw@2870a28 test(doctor): cache default command in e2e · openclaw/openclaw@9850ee6 ci: mark browser redactor as UI entry · openclaw/openclaw@d1c4c33 test: add ACP spawn defaults live Docker test · openclaw/openclaw@a3c6164 fix(googlechat): preserve thread for message tool replies (#80996) test(ui): narrow vite resolve hook in config test fix(agents): retry transient stale session locks · openclaw/openclaw@210adf1
fix(cli): avoid catalog validation in agents add (#88314) · openclaw/openclaw@2fbddce
zhangguiping · 2026-06-01 · via Recent Commits to openclaw:main

@@ -12,6 +12,12 @@ const writeConfigFileMock = vi.hoisted(() => vi.fn().mockResolvedValue(undefined

1212

const replaceConfigFileMock = vi.hoisted(() =>

1313

vi.fn(async (params: { nextConfig: unknown }) => await writeConfigFileMock(params.nextConfig)),

1414

);

15+

const commitConfigWithPendingPluginInstallsMock = vi.hoisted(() =>

16+

vi.fn(async (params: { nextConfig: Record<string, unknown> }) => {

17+

await writeConfigFileMock(params.nextConfig);

18+

return { config: params.nextConfig };

19+

}),

20+

);

1521

const transformConfigWithPendingPluginInstallsMock = vi.hoisted(() =>

1622

vi.fn(

1723

async (params: {

@@ -56,6 +62,16 @@ const transformConfigWithPendingPluginInstallsMock = vi.hoisted(() =>

5662

const wizardMocks = vi.hoisted(() => ({

5763

createClackPrompter: vi.fn(),

5864

}));

65+

const authChoiceMocks = vi.hoisted(() => ({

66+

applyAuthChoice: vi.fn(),

67+

warnIfModelConfigLooksOff: vi.fn(async () => {}),

68+

}));

69+

const onboardChannelsMocks = vi.hoisted(() => ({

70+

setupChannels: vi.fn(async (config: Record<string, unknown>) => config),

71+

}));

72+

const onboardHelpersMocks = vi.hoisted(() => ({

73+

ensureWorkspaceAndSessions: vi.fn(async () => {}),

74+

}));

59756076

vi.mock("../config/config.js", async () => ({

6177

...(await vi.importActual<typeof import("../config/config.js")>("../config/config.js")),

@@ -68,13 +84,27 @@ vi.mock("../cli/plugins-install-record-commit.js", async () => ({

6884

...(await vi.importActual<typeof import("../cli/plugins-install-record-commit.js")>(

6985

"../cli/plugins-install-record-commit.js",

7086

)),

87+

commitConfigWithPendingPluginInstalls: commitConfigWithPendingPluginInstallsMock,

7188

transformConfigWithPendingPluginInstalls: transformConfigWithPendingPluginInstallsMock,

7289

}));

73907491

vi.mock("../wizard/clack-prompter.js", () => ({

7592

createClackPrompter: wizardMocks.createClackPrompter,

7693

}));

779495+

vi.mock("./auth-choice.js", () => ({

96+

applyAuthChoice: authChoiceMocks.applyAuthChoice,

97+

warnIfModelConfigLooksOff: authChoiceMocks.warnIfModelConfigLooksOff,

98+

}));

99+100+

vi.mock("./onboard-channels.js", () => ({

101+

setupChannels: onboardChannelsMocks.setupChannels,

102+

}));

103+104+

vi.mock("./onboard-helpers.js", () => ({

105+

ensureWorkspaceAndSessions: onboardHelpersMocks.ensureWorkspaceAndSessions,

106+

}));

107+78108

import { WizardCancelledError } from "../wizard/prompts.js";

79109

import { agentsAddCommand, testing } from "./agents.commands.add.js";

80110

@@ -85,8 +115,13 @@ describe("agents add command", () => {

85115

readConfigFileSnapshotMock.mockClear();

86116

writeConfigFileMock.mockClear();

87117

replaceConfigFileMock.mockClear();

118+

commitConfigWithPendingPluginInstallsMock.mockClear();

88119

transformConfigWithPendingPluginInstallsMock.mockClear();

89120

wizardMocks.createClackPrompter.mockClear();

121+

authChoiceMocks.applyAuthChoice.mockClear();

122+

authChoiceMocks.warnIfModelConfigLooksOff.mockClear();

123+

onboardChannelsMocks.setupChannels.mockClear();

124+

onboardHelpersMocks.ensureWorkspaceAndSessions.mockClear();

90125

runtime.log.mockClear();

91126

runtime.error.mockClear();

92127

runtime.exit.mockClear();

@@ -136,6 +171,33 @@ describe("agents add command", () => {

136171

expect(writeConfigFileMock).not.toHaveBeenCalled();

137172

});

138173174+

it("skips catalog validation when checking the interactive wizard model config", async () => {

175+

readConfigFileSnapshotMock.mockResolvedValue({

176+

...baseConfigSnapshot,

177+

config: { agents: { list: [] } },

178+

sourceConfig: { agents: { list: [] } },

179+

});

180+

wizardMocks.createClackPrompter.mockReturnValue({

181+

intro: vi.fn(),

182+

text: vi.fn().mockResolvedValueOnce("Jon").mockResolvedValueOnce("/tmp/openclaw-jon"),

183+

confirm: vi.fn().mockResolvedValue(false),

184+

note: vi.fn(),

185+

outro: vi.fn(),

186+

});

187+188+

await agentsAddCommand({}, runtime);

189+190+

expect(authChoiceMocks.warnIfModelConfigLooksOff).toHaveBeenCalledOnce();

191+

expect(authChoiceMocks.warnIfModelConfigLooksOff).toHaveBeenCalledWith(

192+

expect.objectContaining({ agents: expect.any(Object) }),

193+

expect.any(Object),

194+

expect.objectContaining({

195+

agentId: "jon",

196+

validateCatalog: false,

197+

}),

198+

);

199+

});

200+139201

it("copies only portable auth profiles when seeding a new agent store", async () => {

140202

const root = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-agents-add-auth-copy-"));

141203

try {