shithub: oai

Download patch

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();
--