This repository has been archived on 2026-08-16. You can view files and clone it, but cannot push or open issues or pull requests.
ollie-core/internal/tui/interrupt_commands.go

51 lines
1.3 KiB
Go

package tui
import (
"fmt"
"strconv"
"strings"
)
const interruptCommandUsage = "/interrupt <prompt>"
func parseInterruptCommandLine(input string) (prompt string, ok bool, err error) {
input = strings.TrimSpace(input)
if !strings.HasPrefix(input, "/") {
return "", false, nil
}
name, args, _ := strings.Cut(input[1:], " ")
if name != "interrupt" {
return "", false, nil
}
prompt, err = parseInterruptCommandArgs(args)
return prompt, true, err
}
func parseInterruptCommandArgs(args string) (string, error) {
prompt := strings.TrimSpace(args)
if prompt == "" {
return "", fmt.Errorf("usage: %s", interruptCommandUsage)
}
if unquoted, err := strconv.Unquote(prompt); err == nil {
prompt = strings.TrimSpace(unquoted)
} else if len(prompt) >= 2 && prompt[0] == '\'' && prompt[len(prompt)-1] == '\'' {
prompt = strings.TrimSpace(prompt[1 : len(prompt)-1])
}
if prompt == "" {
return "", fmt.Errorf("usage: %s", interruptCommandUsage)
}
return prompt, nil
}
func interruptQueuedMessage(prompt string) string {
return "◇ interrupt queued: " + prompt
}
func interruptExpiredMessage(count int) string {
return fmt.Sprintf("◇ %d interrupt(s) expired (turn ended)", count)
}
func interruptQueueFullMessage() string {
return "Interrupt queue is full."
}