























@@ -62,6 +62,7 @@ type AttemptSpawnWorkspaceHoisted = {
6262ensureGlobalUndiciEnvProxyDispatcherMock: UnknownMock;
6363ensureGlobalUndiciStreamTimeoutsMock: UnknownMock;
6464buildEmbeddedMessageActionDiscoveryInputMock: UnknownMock;
65+createOpenClawCodingToolsMock: UnknownMock;
6566subscribeEmbeddedPiSessionMock: Mock<SubscribeEmbeddedPiSessionFn>;
6667acquireSessionWriteLockMock: Mock<AcquireSessionWriteLockFn>;
6768installToolResultContextGuardMock: UnknownMock;
@@ -121,6 +122,7 @@ const hoisted = vi.hoisted((): AttemptSpawnWorkspaceHoisted => {
121122const ensureGlobalUndiciEnvProxyDispatcherMock = vi.fn();
122123const ensureGlobalUndiciStreamTimeoutsMock = vi.fn();
123124const buildEmbeddedMessageActionDiscoveryInputMock = vi.fn((params: unknown) => params);
125+const createOpenClawCodingToolsMock = vi.fn(() => []);
124126const installToolResultContextGuardMock = vi.fn(() => () => {});
125127const installContextEngineLoopHookMock = vi.fn(() => () => {});
126128const flushPendingToolResultsAfterIdleMock = vi.fn(async () => {});
@@ -170,6 +172,7 @@ const hoisted = vi.hoisted((): AttemptSpawnWorkspaceHoisted => {
170172 ensureGlobalUndiciEnvProxyDispatcherMock,
171173 ensureGlobalUndiciStreamTimeoutsMock,
172174 buildEmbeddedMessageActionDiscoveryInputMock,
175+ createOpenClawCodingToolsMock,
173176 subscribeEmbeddedPiSessionMock,
174177 acquireSessionWriteLockMock,
175178 installToolResultContextGuardMock,
@@ -427,26 +430,8 @@ vi.mock("../../cache-trace.js", () => ({
427430}));
428431429432vi.mock("../../pi-tools.js", () => ({
430-createOpenClawCodingTools: (options?: { workspaceDir?: string; spawnWorkspaceDir?: string }) => [
431-{
432-name: "sessions_spawn",
433-execute: async (
434-_callId: string,
435-input: { task?: string },
436-_session?: unknown,
437-_abortSignal?: unknown,
438-_ctx?: unknown,
439-) =>
440-await hoisted.spawnSubagentDirectMock(
441-{
442-task: input.task ?? "",
443-},
444-{
445-workspaceDir: options?.spawnWorkspaceDir ?? options?.workspaceDir,
446-},
447-),
448-},
449-],
433+createOpenClawCodingTools: (options?: { workspaceDir?: string; spawnWorkspaceDir?: string }) =>
434+hoisted.createOpenClawCodingToolsMock(options),
450435resolveToolLoopDetectionConfig: () => undefined,
451436}));
452437@@ -526,6 +511,9 @@ vi.mock("../../tool-call-id.js", async (importOriginal) => {
526511});
527512528513vi.mock("../../tool-fs-policy.js", () => ({
514+createToolFsPolicy: (params: { workspaceOnly?: boolean }) => ({
515+workspaceOnly: params.workspaceOnly === true,
516+}),
529517resolveEffectiveToolFsWorkspaceOnly: () => false,
530518}));
531519@@ -767,6 +755,34 @@ export function resetEmbeddedAttemptHarness(
767755hoisted.buildEmbeddedMessageActionDiscoveryInputMock
768756.mockReset()
769757.mockImplementation((params) => params);
758+hoisted.createOpenClawCodingToolsMock.mockReset().mockImplementation((...args: unknown[]) => {
759+const options = args[0] as
760+| {
761+workspaceDir?: string;
762+spawnWorkspaceDir?: string;
763+}
764+| undefined;
765+return [
766+{
767+name: "sessions_spawn",
768+execute: async (
769+_callId: string,
770+input: { task?: string },
771+_session?: unknown,
772+_abortSignal?: unknown,
773+_ctx?: unknown,
774+) =>
775+await hoisted.spawnSubagentDirectMock(
776+{
777+task: input.task ?? "",
778+},
779+{
780+workspaceDir: options?.spawnWorkspaceDir ?? options?.workspaceDir,
781+},
782+),
783+},
784+];
785+});
770786hoisted.subscribeEmbeddedPiSessionMock
771787.mockReset()
772788.mockImplementation(() => createSubscriptionMock());
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。