























@@ -14,6 +14,18 @@ struct MacNodeRuntimeTests {
1414}
1515}
161617+actor ExecEventProbe {
18+private var captured: [(event: String, json: String)] = []
19+20+func append(event: String, json: String?) {
21+self.captured.append((event: event, json: json ?? ""))
22+}
23+24+func events() -> [(event: String, json: String)] {
25+self.captured
26+}
27+}
28+1729@Test func `handle invoke rejects unknown command`() async {
1830let runtime = MacNodeRuntime()
1931let response = await runtime.handleInvoke(
@@ -45,6 +57,40 @@ struct MacNodeRuntimeTests {
4557 #expect(response.ok == false)
4658}
475960+@Test func `system run denied event preserves gateway run id`() async throws {
61+let stateDir = FileManager().temporaryDirectory
62+.appendingPathComponent("openclaw-state-\(UUID().uuidString)", isDirectory: true)
63+defer { try? FileManager().removeItem(at: stateDir) }
64+65+try await TestIsolation.withEnvValues(["OPENCLAW_STATE_DIR": stateDir.path]) {
66+let probe = ExecEventProbe()
67+let runtime = MacNodeRuntime()
68+await runtime.setEventSender { event, json in
69+await probe.append(event: event, json: json)
70+}
71+let params = OpenClawSystemRunParams(
72+ command: ["/bin/sh", "-lc", "printf ok"],
73+ sessionKey: "agent:main:main",
74+ runId: "gateway-run-1")
75+let json = try String(data: JSONEncoder().encode(params), encoding: .utf8)
76+let response = await runtime.handleInvoke(
77+BridgeInvokeRequest(
78+ id: "req-run-id",
79+ command: OpenClawSystemCommand.run.rawValue,
80+ paramsJSON: json))
81+82+ #expect(response.ok == false)
83+let denied = try #require((await probe.events()).first { $0.event == "exec.denied" })
84+struct Payload: Decodable {
85+var sessionKey: String
86+var runId: String
87+}
88+let payload = try JSONDecoder().decode(Payload.self, from: Data(denied.json.utf8))
89+ #expect(payload.sessionKey == "agent:main:main")
90+ #expect(payload.runId == "gateway-run-1")
91+}
92+}
93+4894@Test func `handle invoke rejects blocked system run env override before execution`() async throws {
4995let runtime = MacNodeRuntime()
5096let params = OpenClawSystemRunParams(
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。