

























@@ -21,31 +21,38 @@ describe("resolveCrestodianRescuePolicy", () => {
2121crestodian: { rescue: { enabled: true } },
2222agents: { defaults: { sandbox: { mode: "all" } } },
2323});
24-expect(decision).toMatchObject({
25-allowed: false,
26-reason: "sandbox-active",
27-});
24+expect(decision.allowed).toBe(false);
25+if (decision.allowed) {
26+throw new Error("expected rescue to be denied");
27+}
28+expect(decision.reason).toBe("sandbox-active");
2829});
29303031it("keeps auto rescue closed outside YOLO host posture", () => {
3132const decision = decide({
3233tools: { exec: { security: "allowlist", ask: "on-miss" } },
3334});
34-expect(decision).toMatchObject({
35-allowed: false,
36-reason: "disabled",
37-});
35+expect(decision.allowed).toBe(false);
36+if (decision.allowed) {
37+throw new Error("expected rescue to be denied");
38+}
39+expect(decision.reason).toBe("disabled");
3840});
39414042it("requires owner identity and direct messages by default", () => {
41-expect(decide({}, { senderIsOwner: false })).toMatchObject({
42-allowed: false,
43-reason: "not-owner",
44-});
45-expect(decide({}, { isDirectMessage: false })).toMatchObject({
46-allowed: false,
47-reason: "not-direct-message",
48-});
43+const notOwnerDecision = decide({}, { senderIsOwner: false });
44+expect(notOwnerDecision.allowed).toBe(false);
45+if (notOwnerDecision.allowed) {
46+throw new Error("expected non-owner rescue to be denied");
47+}
48+expect(notOwnerDecision.reason).toBe("not-owner");
49+50+const notDirectMessageDecision = decide({}, { isDirectMessage: false });
51+expect(notDirectMessageDecision.allowed).toBe(false);
52+if (notDirectMessageDecision.allowed) {
53+throw new Error("expected non-DM rescue to be denied");
54+}
55+expect(notDirectMessageDecision.reason).toBe("not-direct-message");
4956});
50575158it("allows explicit group rescue when ownerDmOnly is disabled", () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。