Add support for passing prompt without -one-shot
Added `-prompt` option
diff --git a/cmd/sketch/main.go b/cmd/sketch/main.go
index ae029f9..3809701 100644
--- a/cmd/sketch/main.go
+++ b/cmd/sketch/main.go
@@ -44,7 +44,8 @@
maxIterations := flag.Uint64("max-iterations", 0, "maximum number of iterations the agent should perform per turn, 0 to disable limit")
maxWallTime := flag.Duration("max-wall-time", 0, "maximum time the agent should run per turn, 0 to disable limit")
maxDollars := flag.Float64("max-dollars", 5.0, "maximum dollars the agent should spend per turn, 0 to disable limit")
- oneShot := flag.String("one-shot", "", "run a single iteration with the given prompt and exit without termui")
+ oneShot := flag.Bool("one-shot", false, "exit after the first turn without termui")
+ prompt := flag.String("prompt", "", "prompt to send to sketch")
verbose := flag.Bool("verbose", false, "enable verbose output")
version := flag.Bool("version", false, "print the version and exit")
workingDir := flag.String("C", "", "when set, change to this directory before running")
@@ -80,7 +81,7 @@
var slogHandler slog.Handler
var err error
var logFile *os.File
- if *oneShot == "" && !*verbose {
+ if !*oneShot && !*verbose {
// Log to a file
logFile, err = os.CreateTemp("", "sketch-cli-log-*")
if err != nil {
@@ -199,6 +200,7 @@
OutsideOS: runtime.GOOS,
OutsideWorkingDir: cwd,
OneShot: *oneShot,
+ Prompt: *prompt,
}
if err := dockerimg.LaunchContainer(ctx, stdout, stderr, config); err != nil {
if *verbose {
@@ -291,8 +293,9 @@
}
}
- if *oneShot != "" {
- agent.UserMessage(ctx, *oneShot)
+ // Use prompt if provided
+ if *prompt != "" {
+ agent.UserMessage(ctx, *prompt)
}
// Open the web UI URL in the system browser if requested
@@ -317,7 +320,7 @@
go skabandclient.DialAndServeLoop(ctx, *skabandAddr, *sessionID, pubKey, srv, connectFn)
}
- if *oneShot != "" {
+ if *oneShot {
for {
m := agent.WaitForMessage(ctx)
if m.Content != "" {
diff --git a/dockerimg/dockerimg.go b/dockerimg/dockerimg.go
index e40a77b..1d6237b 100644
--- a/dockerimg/dockerimg.go
+++ b/dockerimg/dockerimg.go
@@ -77,8 +77,11 @@
OutsideOS string
OutsideWorkingDir string
- // If not empty, handle this message and exit
- OneShot string
+ // If true, exit after the first turn
+ OneShot bool
+
+ // Initial prompt
+ Prompt string
}
// LaunchContainer creates a docker container for a project, installs sketch and opens a connection to it.
@@ -442,8 +445,11 @@
if config.SkabandAddr != "" {
cmdArgs = append(cmdArgs, "-skaband-addr="+config.SkabandAddr)
}
- if config.OneShot != "" {
- cmdArgs = append(cmdArgs, "-one-shot", config.OneShot)
+ if config.Prompt != "" {
+ cmdArgs = append(cmdArgs, "-prompt", config.Prompt)
+ }
+ if config.OneShot {
+ cmdArgs = append(cmdArgs, "-one-shot")
}
if out, err := combinedOutput(ctx, "docker", cmdArgs...); err != nil {
return fmt.Errorf("docker create: %s, %w", out, err)