summaryrefslogtreecommitdiff
path: root/pi/agent/extensions/ask-mode/utils.ts
diff options
context:
space:
mode:
Diffstat (limited to 'pi/agent/extensions/ask-mode/utils.ts')
-rw-r--r--pi/agent/extensions/ask-mode/utils.ts25
1 files changed, 25 insertions, 0 deletions
diff --git a/pi/agent/extensions/ask-mode/utils.ts b/pi/agent/extensions/ask-mode/utils.ts
index db8c889..835549e 100644
--- a/pi/agent/extensions/ask-mode/utils.ts
+++ b/pi/agent/extensions/ask-mode/utils.ts
@@ -87,7 +87,32 @@ const SAFE_PATTERNS = [
/^\s*exa\b/,
];
+const MUTATING_ASK_PATTERNS = [
+ /\badd\b/i,
+ /\bannotate\b/i,
+ /\bappend\b/i,
+ /\bdelete\b/i,
+ /\bdenotate\b/i,
+ /\bdone\b/i,
+ /\blog\b/i,
+ /\bmodify\b/i,
+ /\bprepend\b/i,
+ /\bstart\b/i,
+ /\bstop\b/i,
+ /\bundo\b/i,
+ /\bpriority\b/i,
+ /\btag\b/i,
+];
+
+function isReadOnlyAskCommand(command: string): boolean {
+ const trimmed = command.trim();
+ if (!trimmed.startsWith("ask ") && trimmed !== "ask") return false;
+ if (/[;&]/.test(trimmed) || /(^|[^|])\|([^|]|$)/.test(trimmed)) return false;
+ return !MUTATING_ASK_PATTERNS.some((pattern) => pattern.test(trimmed));
+}
+
export function isSafeAskModeCommand(command: string): boolean {
+ if (isReadOnlyAskCommand(command)) return true;
const isDestructive = DESTRUCTIVE_PATTERNS.some((pattern) => pattern.test(command));
const isSafe = SAFE_PATTERNS.some((pattern) => pattern.test(command));
return !isDestructive && isSafe;