fix: Reject chained commands in permission gate auto-allow
Without this, "jj log && rm -rf /" passes the jj auto-allow check.

Assisted-by: Claude Opus 4 via pi
change vwsyvpoyzxxowtyxmuylwynrlyrmtyxo
commit 48c8062e24c3f38b73ce304e0df94b124dea36df
author Alpha Chen <alpha@kejadlen.dev>
date
parent nsvospxx
diff --git a/.pi/agent/extensions/permission-gate.ts b/.pi/agent/extensions/permission-gate.ts
index afbd7166..5d41675c 100644
--- a/.pi/agent/extensions/permission-gate.ts
+++ b/.pi/agent/extensions/permission-gate.ts
@@ -79,6 +79,7 @@ function isAllowed(toolName: string, input: Record<string, unknown>, ctx: Extens
 
   if (toolName === "bash") {
     const cmd = stripCdToCwd(String(input.command ?? "").trimStart(), ctx.cwd);
+    if (cmd.includes("&&") || cmd.includes(";")) return false;
     if (cmd.startsWith("jj ")) {
       const subcommand = cmd.slice(3).trimStart().split(/\s/)[0];
       return ALLOWED_JJ_SUBCOMMANDS.includes(subcommand);