@@ -90,6 +90,7 @@ func readMultilineInput(cmd *cobra.Command, scanner *bufio.Scanner) (string, err
9090func generateInteractiveWithReadline (cmd * cobra.Command , desktopClient * desktop.Client , model string ) error {
9191 usage := func () {
9292 fmt .Fprintln (os .Stderr , "Available Commands:" )
93+ fmt .Fprintln (os .Stderr , " /set system Set or update the system message" )
9394 fmt .Fprintln (os .Stderr , " /bye Exit" )
9495 fmt .Fprintln (os .Stderr , " /?, /help Help for a command" )
9596 fmt .Fprintln (os .Stderr , " /? shortcuts Help for keyboard shortcuts" )
@@ -154,6 +155,7 @@ func generateInteractiveWithReadline(cmd *cobra.Command, desktopClient *desktop.
154155 var sb strings.Builder
155156 var multiline bool
156157 var conversationHistory []desktop.OpenAIChatMessage
158+ var systemPrompt string
157159
158160 // Add a helper function to handle file inclusion when @ is pressed
159161 // We'll implement a basic version here that shows a message when @ is pressed
@@ -217,6 +219,16 @@ func generateInteractiveWithReadline(cmd *cobra.Command, desktopClient *desktop.
217219 usage ()
218220 }
219221 continue
222+ case strings .HasPrefix (line , "/set system " ) || line == "/set system" :
223+ // Extract the system prompt text after "/set system "
224+ systemPrompt = strings .TrimPrefix (line , "/set system " )
225+ systemPrompt = strings .TrimSpace (systemPrompt )
226+ if systemPrompt == "" {
227+ fmt .Fprintln (os .Stderr , "Cleared system message." )
228+ } else {
229+ fmt .Fprintln (os .Stderr , "Set system message." )
230+ }
231+ continue
220232 case strings .HasPrefix (line , "/exit" ), strings .HasPrefix (line , "/bye" ):
221233 return nil
222234 case strings .HasPrefix (line , "/" ):
@@ -245,7 +257,20 @@ func generateInteractiveWithReadline(cmd *cobra.Command, desktopClient *desktop.
245257 }
246258 }()
247259
248- assistantResponse , processedUserMessage , err := chatWithMarkdownContext (chatCtx , cmd , desktopClient , model , userInput , conversationHistory )
260+ // Build message history with system prompt prepended if set
261+ var messagesWithSystem []desktop.OpenAIChatMessage
262+ if systemPrompt == "" {
263+ messagesWithSystem = conversationHistory
264+ } else {
265+ messagesWithSystem = make ([]desktop.OpenAIChatMessage , 1 , 1 + len (conversationHistory ))
266+ messagesWithSystem [0 ] = desktop.OpenAIChatMessage {
267+ Role : "system" ,
268+ Content : systemPrompt ,
269+ }
270+ messagesWithSystem = append (messagesWithSystem , conversationHistory ... )
271+ }
272+
273+ assistantResponse , processedUserMessage , err := chatWithMarkdownContext (chatCtx , cmd , desktopClient , model , userInput , messagesWithSystem )
249274
250275 // Clean up signal handler
251276 signal .Stop (sigChan )
0 commit comments