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

推荐订阅源

博客园_首页
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
博客园 - 三生石上(FineUI控件)
量子位
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research
爱范儿
爱范儿
V
Visual Studio Blog
雷峰网
雷峰网
T
Tailwind CSS Blog
宝玉的分享
宝玉的分享
Blog — PlanetScale
Blog — PlanetScale
有赞技术团队
有赞技术团队
博客园 - 叶小钗
Microsoft Azure Blog
Microsoft Azure Blog
T
The Blog of Author Tim Ferriss
U
Unit 42
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
小众软件
小众软件
阮一峰的网络日志
阮一峰的网络日志
Y
Y Combinator Blog

Recent Commits to openclaw:main

test: merge chat side-result checks · openclaw/openclaw@ddd2c2a test: merge cron history checks · openclaw/openclaw@f7eb746 test: merge responsive navigation shell checks · openclaw/openclaw@c2e4b47 docs(changelog): add codex oauth fixes · openclaw/openclaw@628e6cd test: merge navigation routing cases · openclaw/openclaw@5d8cecb Tests: mock channel registry bundled fallback · openclaw/openclaw@2b08233 Secrets: avoid broad web search discovery for single plugin config · openclaw/openclaw@a464f59 test: merge config view browser checks · openclaw/openclaw@20cf511 fix(status): align oauth health with runtime · openclaw/openclaw@eed7116 feat: add macOS screen snapshots for monitor preview (#67954) thanks … · openclaw/openclaw@f377db1 fix: report shared auth scopes in hello-ok (#67810) thanks @BunsDev · openclaw/openclaw@0b6c39b Auto-reply: avoid eager bundled route fallback · openclaw/openclaw@3ea1bf4 Tests: narrow session binding contract setup · openclaw/openclaw@54e4e16 fix(macOS): enable undo/redo in webchat composer text input (#34962) · openclaw/openclaw@00951dc Tests: speed up channel setup promotion · openclaw/openclaw@82b529a Docs: refresh agent instructions · openclaw/openclaw@5775fe2 fix(auth): serialize OAuth refresh across agents to fix #26322 (#67876) · openclaw/openclaw@8e79080 test: allow ollama public surface boundary test · openclaw/openclaw@7d4f1a6 Docs: add test performance guardrails · openclaw/openclaw@89706d3 Tests: restore context-engine usage proof · openclaw/openclaw@e4c4f95 Tests: slim context engine runtime coverage · openclaw/openclaw@74c198f ci: retry failed custom checkouts · openclaw/openclaw@0ee5baf test: trim duplicate provider auth onboarding cases · openclaw/openclaw@1ffc02e matrix: fix sessions_spawn --thread subagent session spawning (#67643) · openclaw/openclaw@1ce2596 test: reduce auth choice fixture churn · openclaw/openclaw@857b9cd test: mock health status config boundaries · openclaw/openclaw@9d5ab4a test: mock onboard config io boundary · openclaw/openclaw@299694d test: mock legacy state plugin boundaries · openclaw/openclaw@2713089 test: mock channel install boundaries · openclaw/openclaw@b945248 test: mock doctor preview channel boundaries · openclaw/openclaw@b1a3ad4
test: dedupe CLI attempt setup · openclaw/openclaw@fc3aa07
steipete · 2026-04-24 · via Recent Commits to openclaw:main

@@ -86,6 +86,43 @@ describe("CLI attempt execution", () => {

8686

await fs.rm(tmpDir, { recursive: true, force: true });

8787

});

888889+

async function runClaudeCliAttempt(params: {

90+

sessionKey: string;

91+

sessionEntry: SessionEntry;

92+

sessionStore: Record<string, SessionEntry>;

93+

body: string;

94+

runId: string;

95+

}) {

96+

await runAgentAttempt({

97+

providerOverride: "claude-cli",

98+

modelOverride: "opus",

99+

cfg: {} as OpenClawConfig,

100+

sessionEntry: params.sessionEntry,

101+

sessionId: params.sessionEntry.sessionId,

102+

sessionKey: params.sessionKey,

103+

sessionAgentId: "main",

104+

sessionFile: path.join(tmpDir, "session.jsonl"),

105+

workspaceDir: tmpDir,

106+

body: params.body,

107+

isFallbackRetry: false,

108+

resolvedThinkLevel: "medium",

109+

timeoutMs: 1_000,

110+

runId: params.runId,

111+

opts: { senderIsOwner: false } as Parameters<typeof runAgentAttempt>[0]["opts"],

112+

runContext: {} as Parameters<typeof runAgentAttempt>[0]["runContext"],

113+

spawnedBy: undefined,

114+

messageChannel: undefined,

115+

skillsSnapshot: undefined,

116+

resolvedVerboseLevel: undefined,

117+

agentDir: tmpDir,

118+

onAgentEvent: vi.fn(),

119+

authProfileProvider: "claude-cli",

120+

sessionStore: params.sessionStore,

121+

storePath,

122+

sessionHasHistory: false,

123+

});

124+

}

125+89126

it("clears stale Claude CLI session IDs before retrying after session expiration", async () => {

90127

const sessionKey = "agent:main:subagent:cli-expired";

91128

const homeDir = path.join(tmpDir, "home");

@@ -183,33 +220,12 @@ describe("CLI attempt execution", () => {

183220

await fs.writeFile(storePath, JSON.stringify(sessionStore, null, 2), "utf-8");

184221

runCliAgentMock.mockResolvedValueOnce(makeCliResult("fresh cli response"));

185222186-

await runAgentAttempt({

187-

providerOverride: "claude-cli",

188-

modelOverride: "opus",

189-

cfg: {} as OpenClawConfig,

190-

sessionEntry,

191-

sessionId: sessionEntry.sessionId,

223+

await runClaudeCliAttempt({

192224

sessionKey,

193-

sessionAgentId: "main",

194-

sessionFile: path.join(tmpDir, "session.jsonl"),

195-

workspaceDir: tmpDir,

225+

sessionEntry,

226+

sessionStore,

196227

body: "remember me",

197-

isFallbackRetry: false,

198-

resolvedThinkLevel: "medium",

199-

timeoutMs: 1_000,

200228

runId: "run-cli-missing-transcript",

201-

opts: { senderIsOwner: false } as Parameters<typeof runAgentAttempt>[0]["opts"],

202-

runContext: {} as Parameters<typeof runAgentAttempt>[0]["runContext"],

203-

spawnedBy: undefined,

204-

messageChannel: undefined,

205-

skillsSnapshot: undefined,

206-

resolvedVerboseLevel: undefined,

207-

agentDir: tmpDir,

208-

onAgentEvent: vi.fn(),

209-

authProfileProvider: "claude-cli",

210-

sessionStore,

211-

storePath,

212-

sessionHasHistory: false,

213229

});

214230215231

expect(runCliAgentMock).toHaveBeenCalledTimes(1);

@@ -262,33 +278,12 @@ describe("CLI attempt execution", () => {

262278

await fs.writeFile(storePath, JSON.stringify(sessionStore, null, 2), "utf-8");

263279

runCliAgentMock.mockResolvedValueOnce(makeCliResult("resumed cli response"));

264280265-

await runAgentAttempt({

266-

providerOverride: "claude-cli",

267-

modelOverride: "opus",

268-

cfg: {} as OpenClawConfig,

269-

sessionEntry,

270-

sessionId: sessionEntry.sessionId,

281+

await runClaudeCliAttempt({

271282

sessionKey,

272-

sessionAgentId: "main",

273-

sessionFile: path.join(tmpDir, "session.jsonl"),

274-

workspaceDir: tmpDir,

283+

sessionEntry,

284+

sessionStore,

275285

body: "continue",

276-

isFallbackRetry: false,

277-

resolvedThinkLevel: "medium",

278-

timeoutMs: 1_000,

279286

runId: "run-cli-transcript-present",

280-

opts: { senderIsOwner: false } as Parameters<typeof runAgentAttempt>[0]["opts"],

281-

runContext: {} as Parameters<typeof runAgentAttempt>[0]["runContext"],

282-

spawnedBy: undefined,

283-

messageChannel: undefined,

284-

skillsSnapshot: undefined,

285-

resolvedVerboseLevel: undefined,

286-

agentDir: tmpDir,

287-

onAgentEvent: vi.fn(),

288-

authProfileProvider: "claude-cli",

289-

sessionStore,

290-

storePath,

291-

sessionHasHistory: false,

292287

});

293288294289

expect(runCliAgentMock).toHaveBeenCalledTimes(1);