|
|
@@ -446,3 +446,66 @@ test("legacy tools config maps write/edit/patch/multiedit to edit permission", a
|
|
|
},
|
|
|
})
|
|
|
})
|
|
|
+
|
|
|
+test("Truncate.DIR is allowed even when user denies external_directory globally", async () => {
|
|
|
+ const { Truncate } = await import("../../src/tool/truncation")
|
|
|
+ await using tmp = await tmpdir({
|
|
|
+ config: {
|
|
|
+ permission: {
|
|
|
+ external_directory: "deny",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ })
|
|
|
+ await Instance.provide({
|
|
|
+ directory: tmp.path,
|
|
|
+ fn: async () => {
|
|
|
+ const build = await Agent.get("build")
|
|
|
+ expect(PermissionNext.evaluate("external_directory", Truncate.DIR, build!.permission).action).toBe("allow")
|
|
|
+ expect(PermissionNext.evaluate("external_directory", "/some/other/path", build!.permission).action).toBe("deny")
|
|
|
+ },
|
|
|
+ })
|
|
|
+})
|
|
|
+
|
|
|
+test("Truncate.DIR is allowed even when user denies external_directory per-agent", async () => {
|
|
|
+ const { Truncate } = await import("../../src/tool/truncation")
|
|
|
+ await using tmp = await tmpdir({
|
|
|
+ config: {
|
|
|
+ agent: {
|
|
|
+ build: {
|
|
|
+ permission: {
|
|
|
+ external_directory: "deny",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ })
|
|
|
+ await Instance.provide({
|
|
|
+ directory: tmp.path,
|
|
|
+ fn: async () => {
|
|
|
+ const build = await Agent.get("build")
|
|
|
+ expect(PermissionNext.evaluate("external_directory", Truncate.DIR, build!.permission).action).toBe("allow")
|
|
|
+ expect(PermissionNext.evaluate("external_directory", "/some/other/path", build!.permission).action).toBe("deny")
|
|
|
+ },
|
|
|
+ })
|
|
|
+})
|
|
|
+
|
|
|
+test("explicit Truncate.DIR deny is respected", async () => {
|
|
|
+ const { Truncate } = await import("../../src/tool/truncation")
|
|
|
+ await using tmp = await tmpdir({
|
|
|
+ config: {
|
|
|
+ permission: {
|
|
|
+ external_directory: {
|
|
|
+ "*": "deny",
|
|
|
+ [Truncate.DIR]: "deny",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ })
|
|
|
+ await Instance.provide({
|
|
|
+ directory: tmp.path,
|
|
|
+ fn: async () => {
|
|
|
+ const build = await Agent.get("build")
|
|
|
+ expect(PermissionNext.evaluate("external_directory", Truncate.DIR, build!.permission).action).toBe("deny")
|
|
|
+ },
|
|
|
+ })
|
|
|
+})
|