cmd/sketch: move NewSessionID function
diff --git a/cmd/sketch/main.go b/cmd/sketch/main.go
index 2936bf9..4a18e51 100644
--- a/cmd/sketch/main.go
+++ b/cmd/sketch/main.go
@@ -6,7 +6,6 @@
 	"flag"
 	"fmt"
 	"log/slog"
-	"math/rand/v2"
 	"net"
 	"net/http"
 	"os"
@@ -21,7 +20,6 @@
 	"sketch.dev/llm/gem"
 	"sketch.dev/llm/oai"
 
-	"github.com/richardlehane/crock32"
 	"sketch.dev/browser"
 	"sketch.dev/dockerimg"
 	"sketch.dev/httprr"
@@ -202,7 +200,7 @@
 	// Flags geared towards sketch developers or sketch internals:
 	flag.StringVar(&flags.gitUsername, "git-username", "", "(internal) username for git commits")
 	flag.StringVar(&flags.gitEmail, "git-email", "", "(internal) email for git commits")
-	flag.StringVar(&flags.sessionID, "session-id", newSessionID(), "(internal) unique session-id for a sketch process")
+	flag.StringVar(&flags.sessionID, "session-id", skabandclient.NewSessionID(), "(internal) unique session-id for a sketch process")
 	flag.BoolVar(&flags.record, "httprecord", true, "(debugging) Record trace (if httprr is set)")
 	flag.BoolVar(&flags.noCleanup, "nocleanup", false, "(debugging) do not clean up docker containers on exit")
 	flag.StringVar(&flags.containerLogDest, "save-container-logs", "", "(debugging) host path to save container logs to on exit")
@@ -568,16 +566,6 @@
 	return slogHandler, logFile, nil
 }
 
-// newSessionID generates a new 10-byte random Session ID.
-func newSessionID() string {
-	u1, u2 := rand.Uint64(), rand.Uint64N(1<<16)
-	s := crock32.Encode(u1) + crock32.Encode(uint64(u2))
-	if len(s) < 16 {
-		s += strings.Repeat("0", 16-len(s))
-	}
-	return s[0:4] + "-" + s[4:8] + "-" + s[8:12] + "-" + s[12:16]
-}
-
 func getHostname() string {
 	hostname, err := os.Hostname()
 	if err != nil {
diff --git a/skabandclient/skabandclient.go b/skabandclient/skabandclient.go
index cea4fbe..39efb52 100644
--- a/skabandclient/skabandclient.go
+++ b/skabandclient/skabandclient.go
@@ -14,6 +14,7 @@
 	"fmt"
 	"io"
 	"log/slog"
+	"math/rand/v2"
 	"net"
 	"net/http"
 	"net/url"
@@ -23,6 +24,7 @@
 	"sync/atomic"
 	"time"
 
+	"github.com/richardlehane/crock32"
 	"golang.org/x/net/http2"
 )
 
@@ -264,3 +266,13 @@
 	}
 	return skabandURL, nil
 }
+
+// NewSessionID generates a new 10-byte random Session ID.
+func NewSessionID() string {
+	u1, u2 := rand.Uint64(), rand.Uint64N(1<<16)
+	s := crock32.Encode(u1) + crock32.Encode(uint64(u2))
+	if len(s) < 16 {
+		s += strings.Repeat("0", 16-len(s))
+	}
+	return s[0:4] + "-" + s[4:8] + "-" + s[8:12] + "-" + s[12:16]
+}