ref: d3de5ed8b865e4675dbe167e8b8b80fda9dfb6a9
parent: 07f47299051fec1a83d14bb024dfab182b4fc18f
author: sirjofri <sirjofri@sirjofri.de>
date: Tue Feb 24 14:45:47 EST 2026
adds trusted mode for toolcalls, adds generic ask questions for tool calls (default untrusted mode)
--- a/oai.c
+++ b/oai.c
@@ -12,14 +12,58 @@
exits("usage");}
+static int trusted = 0;
+static int quiet = 0;
+
+static int
+allowed(OToolcall toolcall)
+{+ JSON *j;
+ char buf[3];
+ int n;
+
+ fprint(2, "Attempt to call command: %s\n", toolcall.name);
+ j = jsonparse(toolcall.arguments);
+ if (j) {+ fprint(2, "%J\n", j);
+ jsonfree(j);
+ }
+
+ if (trusted)
+ return 1;
+Again:
+ fprint(2, "Continue? (y/n) ");
+ n = read(0, buf, 3);
+ if (n < 0)
+ sysfatal("lost connection");+ if (!n)
+ goto Again;
+ switch (buf[0]) {+ case 'y':
+ return 1;
+ case 'n':
+ return 0;
+ }
+ goto Again;
+}
+
static char*
-list_files(OToolcall, void*)
+abortcall(OToolcall tc)
{+ return smprint("%s request aborted by user!", tc.name);+}
+
+static char*
+list_files(OToolcall tc, void*)
+{String *str;
int n, i, fd;
Dir *dirbuf;
char *s;
+ if (!allowed(tc))
+ return abortcall(tc);
+
fd = open(".", OREAD);if (fd < 0)
return strdup("");@@ -47,6 +91,9 @@
Biobuf *io;
char *s;
+ if (!allowed(toolcall))
+ return abortcall(toolcall);
+
j = jsonparse(toolcall.arguments);
fj = jsonbyname(j, "file");
if (!fj) {@@ -100,11 +147,12 @@
{Biobuf *bin;
char *s;
- int quiet = 0;
ORequest req;
OResult res;
char *sysprompt;
+ int bflag = 0;
+
char *url = nil;
char *key = nil;
@@ -142,7 +190,13 @@
case 'd':
oaidebug++;
break;
+ case 'b':
+ bflag++;
+ break;
}ARGEND;
+
+ if (bflag > 1)
+ trusted = 1;
if (!initoai(url, key))
usage();
--
⑨