Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions cmd/agent_chat.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (
func agentChatCmd() *cobra.Command {
var (
agentName string
userID string
message string
sessionKey string
)
Expand All @@ -30,18 +31,19 @@ Examples:
goclaw agent chat -m "What time is it?" # One-shot message
goclaw agent chat -s my-session # Continue a session`,
Run: func(cmd *cobra.Command, args []string) {
runAgentChat(agentName, message, sessionKey)
runAgentChat(agentName, message, sessionKey, userID)
},
}

cmd.Flags().StringVarP(&agentName, "name", "n", "default", "agent name")
cmd.Flags().StringVarP(&message, "message", "m", "", "one-shot message (omit for interactive mode)")
cmd.Flags().StringVarP(&sessionKey, "session", "s", "", "session key (default: auto-generated)")
cmd.Flags().StringVarP(&userID, "user", "u", "", "user ID for authentication")

return cmd
}

func runAgentChat(agentName, message, sessionKey string) {
func runAgentChat(agentName, message, sessionKey, userID string) {
cfgPath := resolveConfigPath()
cfg, err := config.Load(cfgPath)
if err != nil {
Expand All @@ -68,7 +70,7 @@ func runAgentChat(agentName, message, sessionKey string) {
}

fmt.Fprintf(os.Stderr, "Connected to gateway at %s\n", addr)
runClientMode(cfg, addr, agentName, message, sessionKey)
runClientMode(cfg, addr, agentName, message, sessionKey, userID)
}

// --- Gateway detection ---
Expand Down
9 changes: 6 additions & 3 deletions cmd/agent_chat_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import (
"github.com/nextlevelbuilder/goclaw/pkg/protocol"
)

func runClientMode(cfg *config.Config, addr, agentName, message, sessionKey string) {
func runClientMode(cfg *config.Config, addr, agentName, message, sessionKey, userID string) {
wsURL := fmt.Sprintf("ws://%s/ws", addr)

conn, _, err := websocket.DefaultDialer.Dial(wsURL, nil)
Expand All @@ -26,7 +26,7 @@ func runClientMode(cfg *config.Config, addr, agentName, message, sessionKey stri
defer conn.Close()

// Authenticate
if err := wsConnect(conn, cfg.Gateway.Token); err != nil {
if err := wsConnect(conn, cfg.Gateway.Token, userID); err != nil {
fmt.Fprintf(os.Stderr, "Gateway auth failed: %v\n", err)
os.Exit(1)
}
Expand Down Expand Up @@ -79,11 +79,14 @@ func runClientMode(cfg *config.Config, addr, agentName, message, sessionKey stri
}

// wsConnect sends the connect RPC and waits for auth response.
func wsConnect(conn *websocket.Conn, token string) error {
func wsConnect(conn *websocket.Conn, token, userID string) error {
params := map[string]string{}
if token != "" {
params["token"] = token
}
if userID != "" {
params["user_id"] = userID
}
paramsJSON, _ := json.Marshal(params)

reqFrame := protocol.RequestFrame{
Expand Down