First Release of Claw3D (#11)
Co-authored-by: iamlukethedev <iamlukethedev@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
import {
|
||||
isPermissionsCustom,
|
||||
resolveAgentPermissionsDraft,
|
||||
resolveCommandModeFromRole,
|
||||
resolvePresetDefaultsForRole,
|
||||
resolveRoleForCommandMode,
|
||||
resolveToolGroupOverrides,
|
||||
resolveToolGroupStateFromConfigEntry,
|
||||
} from "@/features/agents/operations/agentPermissionsOperation";
|
||||
|
||||
describe("agentPermissionsOperation", () => {
|
||||
it("maps command mode and preset role in both directions", () => {
|
||||
expect(resolveRoleForCommandMode("off")).toBe("conservative");
|
||||
expect(resolveRoleForCommandMode("ask")).toBe("collaborative");
|
||||
expect(resolveRoleForCommandMode("auto")).toBe("autonomous");
|
||||
|
||||
expect(resolveCommandModeFromRole("conservative")).toBe("off");
|
||||
expect(resolveCommandModeFromRole("collaborative")).toBe("ask");
|
||||
expect(resolveCommandModeFromRole("autonomous")).toBe("auto");
|
||||
});
|
||||
|
||||
it("resolves autonomous preset defaults to permissive capabilities", () => {
|
||||
expect(resolvePresetDefaultsForRole("autonomous")).toEqual({
|
||||
commandMode: "auto",
|
||||
webAccess: true,
|
||||
fileTools: true,
|
||||
});
|
||||
});
|
||||
|
||||
it("derives tool-group state from allow and deny with deny precedence", () => {
|
||||
const state = resolveToolGroupStateFromConfigEntry({
|
||||
allow: ["group:web", "group:runtime"],
|
||||
deny: ["group:web"],
|
||||
});
|
||||
|
||||
expect(state.usesAllow).toBe(true);
|
||||
expect(state.runtime).toBe(true);
|
||||
expect(state.web).toBe(false);
|
||||
expect(state.fs).toBeNull();
|
||||
});
|
||||
|
||||
it("merges group toggles while preserving allow mode", () => {
|
||||
const overrides = resolveToolGroupOverrides({
|
||||
existingTools: {
|
||||
allow: ["group:web", "custom:tool"],
|
||||
deny: ["group:runtime", "group:fs"],
|
||||
},
|
||||
runtimeEnabled: true,
|
||||
webEnabled: false,
|
||||
fsEnabled: true,
|
||||
});
|
||||
|
||||
expect(overrides.tools.allow).toEqual(
|
||||
expect.arrayContaining(["custom:tool", "group:runtime", "group:fs"])
|
||||
);
|
||||
expect(overrides.tools.allow).not.toEqual(expect.arrayContaining(["group:web"]));
|
||||
expect(overrides.tools.deny).toEqual(expect.arrayContaining(["group:web"]));
|
||||
expect(overrides.tools.deny).not.toEqual(
|
||||
expect.arrayContaining(["group:runtime", "group:fs"])
|
||||
);
|
||||
});
|
||||
|
||||
it("merges group toggles while preserving alsoAllow mode", () => {
|
||||
const overrides = resolveToolGroupOverrides({
|
||||
existingTools: {
|
||||
alsoAllow: ["group:web"],
|
||||
deny: [],
|
||||
},
|
||||
runtimeEnabled: true,
|
||||
webEnabled: true,
|
||||
fsEnabled: false,
|
||||
});
|
||||
|
||||
expect(overrides.tools).not.toHaveProperty("allow");
|
||||
expect(overrides.tools.alsoAllow).toEqual(
|
||||
expect.arrayContaining(["group:web", "group:runtime"])
|
||||
);
|
||||
expect(overrides.tools.deny).toEqual(expect.arrayContaining(["group:fs"]));
|
||||
});
|
||||
|
||||
it("resolves draft from session role and config group overrides", () => {
|
||||
const draft = resolveAgentPermissionsDraft({
|
||||
agent: {
|
||||
sessionExecSecurity: "allowlist",
|
||||
sessionExecAsk: "always",
|
||||
},
|
||||
existingTools: {
|
||||
allow: ["group:web"],
|
||||
deny: ["group:fs"],
|
||||
},
|
||||
});
|
||||
|
||||
expect(draft).toEqual({
|
||||
commandMode: "ask",
|
||||
webAccess: true,
|
||||
fileTools: false,
|
||||
});
|
||||
});
|
||||
|
||||
it("flags custom draft when advanced values diverge from preset baseline", () => {
|
||||
expect(
|
||||
isPermissionsCustom({
|
||||
role: "autonomous",
|
||||
draft: {
|
||||
commandMode: "auto",
|
||||
webAccess: false,
|
||||
fileTools: true,
|
||||
},
|
||||
})
|
||||
).toBe(true);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user