// Copyright 2017-2025 WIT.COM Inc. All rights reserved. // Use of this source code is governed by the GPL 3.0 package main // An app to submit patches for the 30 GO GUI repos import ( "embed" "os" "path/filepath" "strconv" "strings" "github.com/google/uuid" "go.wit.com/dev/alexflint/arg" "go.wit.com/gui" "go.wit.com/lib/protobuf/chatpb" "go.wit.com/log" ) // sent via -ldflags var VERSION string var BUILDTIME string // this optionally can store the GUI plugins // //go:embed resources/* var resources embed.FS // used for shell auto completion var ARGNAME string = "regex" // using this for now. triggers config save var configSave bool func main() { // f, _ := os.OpenFile("/tmp/regex.secret.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) // log.CaptureMode(f) me = new(mainType) gui.InitArg() me.pp = arg.MustParse(&argv) if argv.Bash { argv.doBash() os.Exit(0) } if len(argv.BashAuto) != 0 { argv.doBashAuto() os.Exit(0) } // load the default chat protobuf me.chats = chatpb.NewChats() if err := me.chats.ConfigLoad(); err != nil { badExit(err) } // verify all the chats have Uuid's if verifyUuids(me.chats) { me.chats.ConfigSave() } aiClient, err := doConnect() if err != nil { badExit(err) } _ = aiClient if argv.JsonFile != "" { // now try to Marshal() into a protobuf pb, err := parsePB(argv.JsonFile) if err != nil { badExit(err) } log.Info("GeminiContent pb.Marshal() worked pb.Contents len =", len(pb.Contents)) _, filename := filepath.Split(argv.JsonFile) parts := strings.Split(filename, ".") if len(parts) == 5 { uuid := parts[1] num, _ := strconv.Atoi(parts[3]) log.Info(uuid, parts) if chat := me.chats.FindByUuid(uuid); chat != nil { log.Info("FOUND CHAT", uuid, num) newEntry := new(chatpb.ChatEntry) newEntry.GeminiRequest = pb newEntry.ContentFile = filename newEntry.RequestCounter = int32(num) chat.AppendEntry(newEntry) me.chats.ConfigSave() } } else { } okExit("") } if argv.Interact != nil { log.Info("testing AI client with simpleHello()") err = simpleHello(aiClient) if err != nil { badExit(err) } doInteract() okExit("") } if argv.Stats != "" { doStats() okExit("") } if argv.NewChat != nil { doNewChat() okExit("") } if argv.Playback != nil { if argv.Uuid != "" { showChat(argv.Uuid) } else { doPlayback() } okExit("") } // doGui() // by default, start interacting with gemini-cli me.pp.WriteHelp(os.Stdout) okExit("") } func verifyUuids(chats *chatpb.Chats) bool { var changed bool for _, chat := range chats.GetChats() { if chat.GetUuid() == "" { chat.Uuid = uuid.New().String() changed = true } for _, entry := range chat.GetEntries() { if entry.GetUuid() == "" { entry.Uuid = uuid.New().String() changed = true } } } return changed }