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

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
WordPress大学
WordPress大学
小众软件
小众软件
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
Hugging Face - Blog
Hugging Face - Blog
美团技术团队
博客园 - 三生石上(FineUI控件)
Last Week in AI
Last Week in AI
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
Microsoft Security Blog
Microsoft Security Blog
Y
Y Combinator Blog
A
About on SuperTechFans
The GitHub Blog
The GitHub Blog
U
Unit 42
H
Hackread – Cybersecurity News, Data Breaches, AI and More
云风的 BLOG
云风的 BLOG
IT之家
IT之家
MyScale Blog
MyScale Blog
V
Visual Studio Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
I
InfoQ
博客园 - 司徒正美

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
docs: document remaining agent tool tests · openclaw/open...
steipete · 2026-06-05 · via Recent Commits to openclaw:main
Original file line numberDiff line numberDiff line change

@@ -1,3 +1,5 @@

1+

// Agent step tests cover nested session handoff, transcript bookkeeping, and

2+

// MCP runtime retirement after completed nested turns.

13

import { afterEach, describe, expect, it, vi } from "vitest";

24

import type { CallGatewayOptions } from "../../gateway/call.js";

35

import { runAgentStep, testing } from "./agent-step.js";

@@ -26,6 +28,8 @@ describe("runAgentStep", () => {

2628

});

2729
2830

it("retires bundle MCP runtime after successful nested agent steps", async () => {

31+

// Nested steps disable automatic delivery and carry provenance so the reply

32+

// returns through the message tool path instead of the channel.

2933

const gatewayCalls: CallGatewayOptions[] = [];

3034

testing.setDepsForTest({

3135

callGateway: async <T = unknown>(opts: CallGatewayOptions): Promise<T> => {

Original file line numberDiff line numberDiff line change

@@ -1,3 +1,5 @@

1+

// Cron tool tests cover schedule guidance, scoped job operations, delivery

2+

// context inheritance, session routing, and agent id ownership.

13

import { beforeEach, describe, expect, it, vi } from "vitest";

24
35

const { callGatewayMock, extractDeliveryInfoMock } = vi.hoisted(() => ({

@@ -177,6 +179,8 @@ describe("cron tool", () => {

177179

});

178180
179181

it("allows scoped isolated cron runs to remove the current job", async () => {

182+

// Self-removal scope lets a cron-triggered run clean up its own schedule

183+

// without granting broad cron mutation access.

180184

const tool = createTestCronTool({ selfRemoveOnlyJobId: "job-current" });

181185
182186

await tool.execute("call-self-remove", {

Original file line numberDiff line numberDiff line change

@@ -1,3 +1,5 @@

1+

// Music background tests cover task-run creation, progress recording, and

2+

// completion delivery through announcement agents or direct fallback sends.

13

import { beforeEach, describe, expect, it, vi } from "vitest";

24

import { MUSIC_GENERATION_TASK_KIND } from "../music-generation-task-status.js";

35

import {

@@ -22,6 +24,8 @@ const {

2224

} = await import("./music-generate-background.js");

2325
2426

function getDeliveredInternalEvents(): Array<Record<string, unknown>> {

27+

// Completion agents receive internal events; tests inspect them to keep the

28+

// visible-reply media contract explicit.

2529

const params = announceDeliveryMocks.deliverSubagentAnnouncement.mock.calls.at(0)?.[0] as

2630

| { internalEvents?: unknown }

2731

| undefined;

Original file line numberDiff line numberDiff line change

@@ -1,3 +1,5 @@

1+

// Music generation tool tests cover provider selection, task lifecycle updates,

2+

// duplicate guards, media persistence, and result delivery metadata.

13

import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";

24

import type { OpenClawConfig } from "../../config/config.js";

35

import * as mediaStore from "../../media/store.js";

@@ -41,6 +43,8 @@ const musicGenerationRuntimeMocks = vi.hoisted(() => ({

4143

}));

4244
4345

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

46+

// Mirror the background lifecycle contract so tool tests can assert task-run

47+

// effects without spawning detached completion workers.

4448

musicGenerationTaskLifecycle: {

4549

createTaskRun: (

4650

params: Parameters<typeof musicGenerateBackground.createMusicGenerationTaskRun>[0],

Original file line numberDiff line numberDiff line change

@@ -1,3 +1,5 @@

1+

// Nodes tool tests cover gateway-scoped node actions, media payload writing,

2+

// numeric schema guardrails, and pairing approval scopes.

13

import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest";

24
35

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

@@ -68,6 +70,8 @@ function mockNodePairApproveFlow(pendingRequest: {

6870

requiredApproveScopes?: string[];

6971

commands?: string[];

7072

}): void {

73+

// Pairing approval is two-step by design: list pending requests under the

74+

// operator scope, then approve with the request's required scopes.

7175

gatewayMocks.callGatewayTool.mockImplementation(async (method, _opts, params, extra) => {

7276

if (method === "node.pair.list") {

7377

return {

Original file line numberDiff line numberDiff line change

@@ -1,3 +1,5 @@

1+

// TTS tool tests cover guidance, speech runtime arguments, delivery metadata,

2+

// timeout validation, and reply-directive defusing.

13

import { beforeEach, describe, expect, it, vi } from "vitest";

24

import * as ttsRuntime from "../../tts/tts.js";

35

import { createTtsTool } from "./tts-tool.js";

@@ -12,6 +14,8 @@ function requireRecord(value: unknown, label: string): Record<string, unknown> {

1214

}

1315
1416

function latestTextToSpeechArgs(): Record<string, unknown> {

17+

// Speech runtime args are the public handoff between the model-facing tool

18+

// and provider-specific synthesis backends.

1519

return requireRecord(textToSpeechSpy.mock.calls.at(-1)?.[0], "text-to-speech args");

1620

}

1721
Original file line numberDiff line numberDiff line change

@@ -1,3 +1,5 @@

1+

// Web search tests cover model-facing schema limits, provider-specific time

2+

// filters, unsupported filter errors, and scoped provider config merging.

13

import { describe, expect, it } from "vitest";

24

import {

35

MAX_SEARCH_COUNT,

@@ -202,6 +204,8 @@ describe("web_search scoped config merge", () => {

202204
203205

expect(merged?.brave).toEqual({ apiKey: "brave-test-key" });

204206

expect(merged?.apiKey).toBe("brave-test-key");

207+

// Injected provider detail is available to runtime validation but hidden

208+

// from ordinary config serialization.

205209

expect(Object.keys(merged ?? {})).toEqual(["provider", "apiKey"]);

206210

expect(Object.getOwnPropertyDescriptor(merged, "brave")?.enumerable).toBe(false);

207211

});

Original file line numberDiff line numberDiff line change

@@ -1,3 +1,5 @@

1+

// Web tool runtime-context tests cover late-bound config snapshots and

2+

// plugin-owner lookups for search/fetch provider selection.

13

import { beforeEach, describe, expect, it, vi } from "vitest";

24

import {

35

resolveWebFetchToolRuntimeContext,

@@ -23,6 +25,8 @@ vi.mock("../../secrets/runtime-state.js", () => ({

2325

}));

2426
2527

function latestOwnerLookupParams(): Record<string, unknown> {

28+

// Owner lookups are the evidence for whether runtime providers stay enabled

29+

// or a configured plugin takes over the tool call.

2630

const params = mocks.resolveManifestContractOwnerPluginId.mock.calls.at(-1)?.[0];

2731

if (!params || typeof params !== "object") {

2832

throw new Error("expected owner lookup params");

Original file line numberDiff line numberDiff line change

@@ -1,3 +1,5 @@

1+

// Web readability tests cover plugin extractor dispatch, per-config resolver

2+

// caching, and loader/extractor failure fallback.

13

import { beforeEach, describe, expect, it, vi } from "vitest";

24
35

const { resolvePluginWebContentExtractorsMock } = vi.hoisted(() => ({

@@ -40,6 +42,8 @@ describe("web fetch readability", () => {

4042

});

4143
4244

it("reuses extractor resolution for repeated calls with the same config object", async () => {

45+

// Extractor manifests are process-stable for a config snapshot; repeated

46+

// reads should not re-run plugin discovery on the fetch hot path.

4347

const config = {};

4448

resolvePluginWebContentExtractorsMock.mockReturnValue([

4549

{