





















@@ -1,27 +1,48 @@
1-import { describe, expect, it } from "vitest";
1+import { beforeEach, describe, expect, it, vi } from "vitest";
22import type { OpenClawConfig } from "../config/config.js";
33import { DEFAULT_AGENT_ID } from "../routing/session-key.js";
4-import {
5-collectExecPolicyScopeSnapshots,
6-resolveExecPolicyScopeSummary,
7-} from "./exec-approvals-effective.js";
84import {
95makeMockCommandResolution,
106makeMockExecutableResolution,
117} from "./exec-approvals-test-helpers.js";
12-import {
13-evaluateExecAllowlist,
14-hasDurableExecApproval,
15-maxAsk,
16-minSecurity,
17-requireValidExecTarget,
18-type ExecApprovalsFile,
19-normalizeExecAsk,
20-normalizeExecHost,
21-normalizeExecTarget,
22-normalizeExecSecurity,
23-requiresExecApproval,
24-} from "./exec-approvals.js";
8+import type { ExecApprovalsFile } from "./exec-approvals.js";
9+10+vi.unmock("./exec-approvals.js");
11+vi.unmock("./exec-approvals-effective.js");
12+13+let collectExecPolicyScopeSnapshots: typeof import("./exec-approvals-effective.js").collectExecPolicyScopeSnapshots;
14+let resolveExecPolicyScopeSummary: typeof import("./exec-approvals-effective.js").resolveExecPolicyScopeSummary;
15+let evaluateExecAllowlist: typeof import("./exec-approvals.js").evaluateExecAllowlist;
16+let hasDurableExecApproval: typeof import("./exec-approvals.js").hasDurableExecApproval;
17+let maxAsk: typeof import("./exec-approvals.js").maxAsk;
18+let minSecurity: typeof import("./exec-approvals.js").minSecurity;
19+let requireValidExecTarget: typeof import("./exec-approvals.js").requireValidExecTarget;
20+let normalizeExecAsk: typeof import("./exec-approvals.js").normalizeExecAsk;
21+let normalizeExecHost: typeof import("./exec-approvals.js").normalizeExecHost;
22+let normalizeExecTarget: typeof import("./exec-approvals.js").normalizeExecTarget;
23+let normalizeExecSecurity: typeof import("./exec-approvals.js").normalizeExecSecurity;
24+let requiresExecApproval: typeof import("./exec-approvals.js").requiresExecApproval;
25+26+async function loadActualExecApprovalModules(): Promise<void> {
27+vi.resetModules();
28+const execApprovals =
29+await vi.importActual<typeof import("./exec-approvals.js")>("./exec-approvals.js");
30+const effective = await vi.importActual<typeof import("./exec-approvals-effective.js")>(
31+"./exec-approvals-effective.js",
32+);
33+collectExecPolicyScopeSnapshots = effective.collectExecPolicyScopeSnapshots;
34+resolveExecPolicyScopeSummary = effective.resolveExecPolicyScopeSummary;
35+evaluateExecAllowlist = execApprovals.evaluateExecAllowlist;
36+hasDurableExecApproval = execApprovals.hasDurableExecApproval;
37+maxAsk = execApprovals.maxAsk;
38+minSecurity = execApprovals.minSecurity;
39+requireValidExecTarget = execApprovals.requireValidExecTarget;
40+normalizeExecAsk = execApprovals.normalizeExecAsk;
41+normalizeExecHost = execApprovals.normalizeExecHost;
42+normalizeExecTarget = execApprovals.normalizeExecTarget;
43+normalizeExecSecurity = execApprovals.normalizeExecSecurity;
44+requiresExecApproval = execApprovals.requiresExecApproval;
45+}
25462647function expectFields(value: unknown, expected: Record<string, unknown>): void {
2748if (!value || typeof value !== "object") {
@@ -65,6 +86,10 @@ function expectMalformedAgentAskUsesDefaults(agentAsk: unknown): void {
6586}
66876788describe("exec approvals policy helpers", () => {
89+beforeEach(async () => {
90+await loadActualExecApprovalModules();
91+});
92+6893it.each([
6994{ raw: " gateway ", expected: "gateway" },
7095{ raw: "NODE", expected: "node" },
@@ -217,6 +242,7 @@ describe("exec approvals policy helpers", () => {
217242const executable = makeMockExecutableResolution({
218243rawExecutable: "/usr/bin/echo",
219244resolvedPath: "/usr/bin/echo",
245+resolvedRealPath: "/usr/bin/echo",
220246executableName: "echo",
221247});
222248const result = evaluateExecAllowlist({
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。