My agentic slop goes here. Not intended for anyone else!
at main 3.0 kB view raw
1open Eio.Std 2 3let src = Logs.Src.create "test_permissions" ~doc:"Permission callback test" 4module Log = (val Logs.src_log src : Logs.LOG) 5 6(* Simple auto-allow permission callback *) 7let auto_allow_callback ~tool_name ~input:_ ~context:_ = 8 Log.app (fun m -> m "✅ Auto-allowing tool: %s" tool_name); 9 Claude.Permissions.Result.allow () 10 11let run_test ~sw ~env = 12 Log.app (fun m -> m "🧪 Testing Permission Callbacks"); 13 Log.app (fun m -> m "================================"); 14 15 (* Create options with custom permission callback *) 16 let options = Claude.Options.create 17 ~model:(Claude.Model.of_string "sonnet") 18 ~permission_callback:auto_allow_callback 19 () in 20 21 Log.app (fun m -> m "Creating client with permission callback..."); 22 let client = Claude.Client.create ~options ~sw 23 ~process_mgr:env#process_mgr 24 () in 25 26 (* Simple query that will trigger tool use *) 27 Log.app (fun m -> m "\n📤 Sending test query..."); 28 Claude.Client.query client 29 "What is 2 + 2? Just give me the number."; 30 31 (* Process response *) 32 let messages = Claude.Client.receive_all client in 33 Log.app (fun m -> m "\n📨 Received %d messages" (List.length messages)); 34 35 List.iter (fun msg -> 36 match msg with 37 | Claude.Message.Assistant msg -> 38 List.iter (function 39 | Claude.Content_block.Text t -> 40 let text = Claude.Content_block.Text.text t in 41 Log.app (fun m -> m "Claude: %s" text) 42 | Claude.Content_block.Tool_use t -> 43 Log.app (fun m -> m "🔧 Tool use: %s" 44 (Claude.Content_block.Tool_use.name t)) 45 | _ -> () 46 ) (Claude.Message.Assistant.content msg) 47 | Claude.Message.Result msg -> 48 if Claude.Message.Result.is_error msg then 49 Log.err (fun m -> m "❌ Error occurred!") 50 else 51 Log.app (fun m -> m "✅ Success!"); 52 Log.app (fun m -> m "Duration: %dms" 53 (Claude.Message.Result.duration_ms msg)) 54 | _ -> () 55 ) messages; 56 57 Log.app (fun m -> m "\n================================"); 58 Log.app (fun m -> m "✨ Test complete!") 59 60let main ~env = 61 Switch.run @@ fun sw -> 62 run_test ~sw ~env 63 64(* Command-line interface *) 65open Cmdliner 66 67let main_term env = 68 let setup_log style_renderer level = 69 Fmt_tty.setup_std_outputs ?style_renderer (); 70 Logs.set_level level; 71 Logs.set_reporter (Logs_fmt.reporter ()); 72 if level = None then Logs.set_level (Some Logs.App); 73 match level with 74 | Some Logs.Info | Some Logs.Debug -> 75 Logs.Src.set_level Claude.Client.src (Some Logs.Info) 76 | _ -> () 77 in 78 let run style level = 79 setup_log style level; 80 main ~env 81 in 82 Term.(const run $ Fmt_cli.style_renderer () $ Logs_cli.level ()) 83 84let cmd env = 85 let doc = "Test permission callback functionality" in 86 let info = Cmd.info "test_permissions" ~version:"1.0" ~doc in 87 Cmd.v info (main_term env) 88 89let () = 90 Eio_main.run @@ fun env -> 91 exit (Cmd.eval (cmd env))