mirror of
https://github.com/sipeed/picoclaw.git
synced 2026-06-12 18:08:54 +00:00
92 lines
3.4 KiB
Go
92 lines
3.4 KiB
Go
// PicoClaw - Ultra-lightweight personal AI agent
|
|
// Inspired by and based on nanobot: https://github.com/HKUDS/nanobot
|
|
// License: MIT
|
|
//
|
|
// Copyright (c) 2026 PicoClaw contributors
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/spf13/cobra"
|
|
|
|
"github.com/sipeed/picoclaw/cmd/picoclaw/internal"
|
|
"github.com/sipeed/picoclaw/cmd/picoclaw/internal/agent"
|
|
"github.com/sipeed/picoclaw/cmd/picoclaw/internal/auth"
|
|
"github.com/sipeed/picoclaw/cmd/picoclaw/internal/cron"
|
|
"github.com/sipeed/picoclaw/cmd/picoclaw/internal/gateway"
|
|
"github.com/sipeed/picoclaw/cmd/picoclaw/internal/migrate"
|
|
"github.com/sipeed/picoclaw/cmd/picoclaw/internal/model"
|
|
"github.com/sipeed/picoclaw/cmd/picoclaw/internal/onboard"
|
|
"github.com/sipeed/picoclaw/cmd/picoclaw/internal/skills"
|
|
"github.com/sipeed/picoclaw/cmd/picoclaw/internal/status"
|
|
"github.com/sipeed/picoclaw/cmd/picoclaw/internal/version"
|
|
"github.com/sipeed/picoclaw/pkg/config"
|
|
"github.com/sipeed/picoclaw/pkg/updater"
|
|
)
|
|
|
|
func NewPicoclawCommand() *cobra.Command {
|
|
short := fmt.Sprintf("%s picoclaw - Personal AI Assistant %s\n\n", internal.Logo, config.GetVersion())
|
|
|
|
cmd := &cobra.Command{
|
|
Use: "picoclaw",
|
|
Short: short,
|
|
Example: "picoclaw version",
|
|
}
|
|
|
|
cmd.AddCommand(
|
|
onboard.NewOnboardCommand(),
|
|
agent.NewAgentCommand(),
|
|
auth.NewAuthCommand(),
|
|
gateway.NewGatewayCommand(),
|
|
status.NewStatusCommand(),
|
|
cron.NewCronCommand(),
|
|
migrate.NewMigrateCommand(),
|
|
skills.NewSkillsCommand(),
|
|
model.NewModelCommand(),
|
|
updater.NewUpdateCommand("picoclaw"),
|
|
version.NewVersionCommand(),
|
|
)
|
|
|
|
return cmd
|
|
}
|
|
|
|
const (
|
|
colorBlue = "\033[1;38;2;62;93;185m"
|
|
colorRed = "\033[1;38;2;213;70;70m"
|
|
banner = "\r\n" +
|
|
colorBlue + "██████╗ ██╗ ██████╗ ██████╗ " + colorRed + " ██████╗██╗ █████╗ ██╗ ██╗\n" +
|
|
colorBlue + "██╔══██╗██║██╔════╝██╔═══██╗" + colorRed + "██╔════╝██║ ██╔══██╗██║ ██║\n" +
|
|
colorBlue + "██████╔╝██║██║ ██║ ██║" + colorRed + "██║ ██║ ███████║██║ █╗ ██║\n" +
|
|
colorBlue + "██╔═══╝ ██║██║ ██║ ██║" + colorRed + "██║ ██║ ██╔══██║██║███╗██║\n" +
|
|
colorBlue + "██║ ██║╚██████╗╚██████╔╝" + colorRed + "╚██████╗███████╗██║ ██║╚███╔███╔╝\n" +
|
|
colorBlue + "╚═╝ ╚═╝ ╚═════╝ ╚═════╝ " + colorRed + " ╚═════╝╚══════╝╚═╝ ╚═╝ ╚══╝╚══╝\n " +
|
|
"\033[0m\r\n"
|
|
)
|
|
|
|
func main() {
|
|
fmt.Printf("%s", banner)
|
|
|
|
tz_env := os.Getenv("TZ")
|
|
if tz_env != "" {
|
|
fmt.Println("TZ environment:", tz_env)
|
|
zoneinfo_env := os.Getenv("ZONEINFO")
|
|
fmt.Println("ZONEINFO environment:", zoneinfo_env)
|
|
loc, err := time.LoadLocation(tz_env)
|
|
if err != nil {
|
|
fmt.Println("Error loading time zone:", err)
|
|
} else {
|
|
fmt.Println("Time zone loaded successfully:", loc)
|
|
time.Local = loc //nolint:gosmopolitan // We intentionally set local timezone from TZ env
|
|
}
|
|
}
|
|
|
|
cmd := NewPicoclawCommand()
|
|
if err := cmd.Execute(); err != nil {
|
|
os.Exit(1)
|
|
}
|
|
}
|