security: secret egress redaction in tool results

ober

70f1a9d7fff6352041a6d6f02939920d9e8c8c2e

diff --git a/src/jcode/core/agent.ss b/src/jcode/core/agent.ss
index ecf09e2..883d9bb 100644
--- a/src/jcode/core/agent.ss
+++ b/src/jcode/core/agent.ss
@@ -1781,6 +1781,21 @@ Be concise. Prefer edit over write for modifying existing files.
          (model (auto-swap-incompatible-model provider-name configured)))
     (make-provider provider-name api-key model)))
 
+(def (maybe-redact-secrets s)
+  (if (or (not (string? s)) (< (string-length s) 10))
+    s
+    (if (or (string-contains s "sk-or-")
+            (string-contains s "sk-ant-")
+            (string-contains s "sk-")
+            (string-contains s "AIza")
+            (string-contains s "ghp_")
+            (string-contains s "github_pat_")
+            (string-contains s "xoxb-")
+            (string-contains s "xoxp-")
+            (string-contains s "xoxa-"))
+      "[redacted — possible secret detected]"
+      s)))
+
 (def (agent-chat user-input)
   (reset-turn-tool-calls!)
   (let ((provider (get-current-provider)))