diff --git a/.dockerignore b/.dockerignore index d632da5ea..4346959de 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,7 +1,7 @@ .git .gitignore build/ -.picoclaw/ +.jane-ai/ config/ .env .env.example diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index dadbed212..f654244cc 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -10,7 +10,7 @@ on: env: GHCR_REGISTRY: ghcr.io - GHCR_IMAGE_NAME: ${{ github.repository_owner }}/picoclaw + GHCR_IMAGE_NAME: ${{ github.repository_owner }}/jane-ai DOCKERHUB_REGISTRY: docker.io DOCKERHUB_IMAGE_NAME: ${{ vars.DOCKERHUB_REPOSITORY }} diff --git a/.gitignore b/.gitignore index 31aad5599..617c43f09 100644 --- a/.gitignore +++ b/.gitignore @@ -8,14 +8,14 @@ build/ *.dylib *.test *.out -/picoclaw -/picoclaw-test +/jane-ai +/jane-ai-test cmd/**/workspace # Picoclaw specific -# PicoClaw -.picoclaw/ +# Jane AI +.jane-ai/ config.json sessions/ build/ diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 622cf054b..4e8a76554 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -6,22 +6,23 @@ before: hooks: - go mod tidy - go generate ./... - - sh -c 'cd web/frontend && pnpm install && pnpm build:backend' + - sh -c 'cd web/frontend && bun install && bun run build:backend' - go install github.com/tc-hib/go-winres@latest - go-winres make --in web/backend/winres/winres.json --out web/backend/rsrc --product-version={{ .Version }} --file-version={{ .Version }} builds: - - id: picoclaw + - id: jane-ai + binary: jane-ai env: - CGO_ENABLED=0 tags: - stdjson ldflags: - -s -w - - -X github.com/sipeed/picoclaw/pkg/config.Version={{ .Version }} - - -X github.com/sipeed/picoclaw/pkg/config.GitCommit={{ .ShortCommit }} - - -X github.com/sipeed/picoclaw/pkg/config.BuildTime={{ .Date }} - - -X github.com/sipeed/picoclaw/pkg/config.GoVersion={{ .Env.GOVERSION }} + - -X jane/pkg/config.Version={{ .Version }} + - -X jane/pkg/config.GitCommit={{ .ShortCommit }} + - -X jane/pkg/config.BuildTime={{ .Date }} + - -X jane/pkg/config.GoVersion={{ .Env.GOVERSION }} goos: - linux - windows @@ -45,8 +46,8 @@ builds: - goos: windows goarch: arm - - id: picoclaw-launcher - binary: picoclaw-launcher + - id: jane-ai-launcher + binary: jane-ai-launcher env: - CGO_ENABLED=0 tags: @@ -76,8 +77,8 @@ builds: - goos: windows goarch: arm - - id: picoclaw-launcher-tui - binary: picoclaw-launcher-tui + - id: jane-ai-launcher-tui + binary: jane-ai-launcher-tui env: - CGO_ENABLED=0 tags: @@ -108,14 +109,14 @@ builds: goarch: arm dockers_v2: - - id: picoclaw + - id: jane-ai dockerfile: docker/Dockerfile.goreleaser extra_files: - docker/entrypoint.sh ids: - - picoclaw + - jane-ai images: - - "ghcr.io/{{ .Env.GITHUB_REPOSITORY_OWNER }}/picoclaw" + - "ghcr.io/{{ .Env.GITHUB_REPOSITORY_OWNER }}/jane-ai" - 'docker.io/{{ .Env.DOCKERHUB_IMAGE_NAME }}' tags: - '{{ if isEnvSet "NIGHTLY_BUILD" }}nightly{{ else }}{{ .Tag }}{{ end }}' @@ -125,14 +126,14 @@ dockers_v2: - linux/arm64 - linux/riscv64 - - id: picoclaw-launcher + - id: jane-ai-launcher dockerfile: docker/Dockerfile.goreleaser.launcher ids: - - picoclaw - - picoclaw-launcher - - picoclaw-launcher-tui + - jane-ai + - jane-ai-launcher + - jane-ai-launcher-tui images: - - "ghcr.io/{{ .Env.GITHUB_REPOSITORY_OWNER }}/picoclaw" + - "ghcr.io/{{ .Env.GITHUB_REPOSITORY_OWNER }}/jane-ai" - 'docker.io/{{ .Env.DOCKERHUB_IMAGE_NAME }}' tags: - '{{ if isEnvSet "NIGHTLY_BUILD" }}nightly-launcher{{ else }}{{ .Tag }}-launcher{{ end }}' @@ -146,9 +147,9 @@ notarize: macos: - enabled: '{{ isEnvSet "MACOS_SIGN_P12" }}' ids: - - picoclaw - - picoclaw-launcher - - picoclaw-launcher-tui + - jane-ai + - jane-ai-launcher + - jane-ai-launcher-tui sign: certificate: "{{.Env.MACOS_SIGN_P12}}" password: "{{.Env.MACOS_SIGN_PASSWORD}}" @@ -175,32 +176,32 @@ archives: formats: [zip] nfpms: - - id: picoclaw + - id: jane-ai ids: - - picoclaw - - picoclaw-launcher - - picoclaw-launcher-tui - package_name: picoclaw + - jane-ai + - jane-ai-launcher + - jane-ai-launcher-tui + package_name: jane-ai file_name_template: >- {{ .PackageName }}_ {{- if eq .Arch "amd64" }}x86_64 {{- else if eq .Arch "arm64" }}aarch64 {{- else if eq .Arch "arm" }}armv{{ .Arm }} {{- else }}{{ .Arch }}{{ end }} - vendor: picoclaw - homepage: https://github.com/{{ .Env.GITHUB_REPOSITORY_OWNER }}/picoclaw - maintainer: picoclaw contributors - description: picoclaw - a tool for managing and running tasks + vendor: jane-ai + homepage: https://github.com/{{ .Env.GITHUB_REPOSITORY_OWNER }}/jane-ai + maintainer: jane-ai contributors + description: jane-ai - a tool for managing and running tasks license: MIT formats: - rpm - deb bindir: /usr/bin contents: - - src: web/picoclaw-launcher.desktop - dst: /usr/share/applications/picoclaw-launcher.desktop - - src: web/picoclaw-launcher.png - dst: /usr/share/icons/hicolor/512x512/apps/picoclaw-launcher.png + - src: web/jane-ai-launcher.desktop + dst: /usr/share/applications/jane-ai-launcher.desktop + - src: web/jane-ai-launcher.png + dst: /usr/share/icons/hicolor/512x512/apps/jane-ai-launcher.png changelog: sort: asc diff --git a/Makefile b/Makefile index 98642703f..72311d6ae 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,9 @@ .PHONY: all build install uninstall clean help test # Build variables -BINARY_NAME=picoclaw +BINARY_NAME=jane-ai BUILD_DIR=build -CMD_DIR=cmd/$(BINARY_NAME) +CMD_DIR=cmd/picoclaw MAIN_GO=$(CMD_DIR)/main.go # Version @@ -11,7 +11,7 @@ VERSION?=$(shell git describe --tags --always --dirty 2>/dev/null || echo "dev") GIT_COMMIT=$(shell git rev-parse --short=8 HEAD 2>/dev/null || echo "dev") BUILD_TIME=$(shell date +%FT%T%z) GO_VERSION=$(shell $(GO) version | awk '{print $$3}') -CONFIG_PKG=github.com/sipeed/picoclaw/pkg/config +CONFIG_PKG=jane/pkg/config LDFLAGS=-ldflags "-X $(CONFIG_PKG).Version=$(VERSION) -X $(CONFIG_PKG).GitCommit=$(GIT_COMMIT) -X $(CONFIG_PKG).BuildTime=$(BUILD_TIME) -X $(CONFIG_PKG).GoVersion=$(GO_VERSION) -s -w" # Go variables @@ -50,8 +50,8 @@ INSTALL_MAN_DIR=$(INSTALL_PREFIX)/share/man/man1 INSTALL_TMP_SUFFIX=.new # Workspace and Skills -PICOCLAW_HOME?=$(HOME)/.picoclaw -WORKSPACE_DIR?=$(PICOCLAW_HOME)/workspace +JANE_AI_HOME?=$(HOME)/.jane-ai +WORKSPACE_DIR?=$(JANE_AI_HOME)/workspace WORKSPACE_SKILLS_DIR=$(WORKSPACE_DIR)/skills BUILTIN_SKILLS_DIR=$(CURDIR)/skills @@ -103,7 +103,7 @@ generate: @$(GO) generate ./... @echo "Run generate complete" -## build: Build the picoclaw binary for current platform +## build: Build the jane-ai binary for current platform build: generate @echo "Building $(BINARY_NAME) for $(PLATFORM)/$(ARCH)..." @mkdir -p $(BUILD_DIR) @@ -111,17 +111,17 @@ build: generate @echo "Build complete: $(BINARY_PATH)" @ln -sf $(BINARY_NAME)-$(PLATFORM)-$(ARCH) $(BUILD_DIR)/$(BINARY_NAME) -## build-launcher: Build the picoclaw-launcher (web console) binary +## build-launcher: Build the jane-ai-launcher (web console) binary build-launcher: - @echo "Building picoclaw-launcher for $(PLATFORM)/$(ARCH)..." + @echo "Building jane-ai-launcher for $(PLATFORM)/$(ARCH)..." @mkdir -p $(BUILD_DIR) @if [ ! -f web/backend/dist/index.html ]; then \ echo "Building frontend..."; \ - cd web/frontend && pnpm install && pnpm build:backend; \ + cd web/frontend && bun install && bun run build:backend; \ fi - @$(GO) build $(GOFLAGS) -o $(BUILD_DIR)/picoclaw-launcher-$(PLATFORM)-$(ARCH) ./web/backend - @ln -sf picoclaw-launcher-$(PLATFORM)-$(ARCH) $(BUILD_DIR)/picoclaw-launcher - @echo "Build complete: $(BUILD_DIR)/picoclaw-launcher" + @$(GO) build $(GOFLAGS) -o $(BUILD_DIR)/jane-ai-launcher-$(PLATFORM)-$(ARCH) ./web/backend + @ln -sf jane-ai-launcher-$(PLATFORM)-$(ARCH) $(BUILD_DIR)/jane-ai-launcher + @echo "Build complete: $(BUILD_DIR)/jane-ai-launcher" ## build-whatsapp-native: Build with WhatsApp native (whatsmeow) support; larger binary build-whatsapp-native: generate @@ -167,7 +167,7 @@ build-linux-mipsle: generate build-pi-zero: build-linux-arm build-linux-arm64 @echo "Pi Zero 2 W builds: $(BUILD_DIR)/$(BINARY_NAME)-linux-arm (32-bit), $(BUILD_DIR)/$(BINARY_NAME)-linux-arm64 (64-bit)" -## build-all: Build picoclaw for all platforms +## build-all: Build jane-ai for all platforms build-all: generate @echo "Building for multiple platforms..." @mkdir -p $(BUILD_DIR) @@ -183,7 +183,7 @@ build-all: generate GOOS=windows GOARCH=amd64 $(GO) build $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-windows-amd64.exe ./$(CMD_DIR) @echo "All builds complete" -## install: Install picoclaw to system and copy builtin skills +## install: Install jane-ai to system and copy builtin skills install: build @echo "Installing $(BINARY_NAME)..." @mkdir -p $(INSTALL_BIN_DIR) @@ -194,7 +194,7 @@ install: build @echo "Installed binary to $(INSTALL_BIN_DIR)/$(BINARY_NAME)" @echo "Installation complete!" -## uninstall: Remove picoclaw from system +## uninstall: Remove jane-ai from system uninstall: @echo "Uninstalling $(BINARY_NAME)..." @rm -f $(INSTALL_BIN_DIR)/$(BINARY_NAME) @@ -202,11 +202,11 @@ uninstall: @echo "Note: Only the executable file has been deleted." @echo "If you need to delete all configurations (config.json, workspace, etc.), run 'make uninstall-all'" -## uninstall-all: Remove picoclaw and all data +## uninstall-all: Remove jane-ai and all data uninstall-all: @echo "Removing workspace and skills..." - @rm -rf $(PICOCLAW_HOME) - @echo "Removed workspace: $(PICOCLAW_HOME)" + @rm -rf $(JANE_AI_HOME) + @echo "Removed workspace: $(JANE_AI_HOME)" @echo "Complete uninstallation done!" ## clean: Remove build artifacts @@ -248,7 +248,7 @@ update-deps: ## check: Run vet, fmt, and verify dependencies check: deps fmt vet test -## run: Build and run picoclaw +## run: Build and run jane-ai run: build @$(BUILD_DIR)/$(BINARY_NAME) $(ARGS) @@ -268,19 +268,19 @@ docker-test: @chmod +x scripts/test-docker-mcp.sh @./scripts/test-docker-mcp.sh -## docker-run: Run picoclaw gateway in Docker (Alpine-based) +## docker-run: Run jane-ai gateway in Docker (Alpine-based) docker-run: docker compose -f docker/docker-compose.yml --profile gateway up -## docker-run-full: Run picoclaw gateway in Docker (full-featured) +## docker-run-full: Run jane-ai gateway in Docker (full-featured) docker-run-full: docker compose -f docker/docker-compose.full.yml --profile gateway up -## docker-run-agent: Run picoclaw agent in Docker (interactive, Alpine-based) +## docker-run-agent: Run jane-ai agent in Docker (interactive, Alpine-based) docker-run-agent: docker compose -f docker/docker-compose.yml run --rm picoclaw-agent -## docker-run-agent-full: Run picoclaw agent in Docker (interactive, full-featured) +## docker-run-agent-full: Run jane-ai agent in Docker (interactive, full-featured) docker-run-agent-full: docker compose -f docker/docker-compose.full.yml run --rm picoclaw-agent @@ -288,11 +288,11 @@ docker-run-agent-full: docker-clean: docker compose -f docker/docker-compose.yml down -v docker compose -f docker/docker-compose.full.yml down -v - docker rmi picoclaw:latest picoclaw:full 2>/dev/null || true + docker rmi jane-ai:latest jane-ai:full 2>/dev/null || true ## help: Show this help message help: - @echo "picoclaw Makefile" + @echo "jane-ai Makefile" @echo "" @echo "Usage:" @echo " make [target]" @@ -310,7 +310,7 @@ help: @echo "" @echo "Environment Variables:" @echo " INSTALL_PREFIX # Installation prefix (default: ~/.local)" - @echo " WORKSPACE_DIR # Workspace directory (default: ~/.picoclaw/workspace)" + @echo " WORKSPACE_DIR # Workspace directory (default: ~/.jane-ai/workspace)" @echo " VERSION # Version string (default: git describe)" @echo "" @echo "Current Configuration:" diff --git a/docker/Dockerfile b/docker/Dockerfile index 1d91e581c..0e4bf3658 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,5 +1,5 @@ # ============================================================ -# Stage 1: Build the picoclaw binary +# Stage 1: Build the jane-ai binary # ============================================================ FROM golang:1.25-alpine AS builder @@ -27,17 +27,17 @@ HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD wget -q --spider http://localhost:18790/health || exit 1 # Copy binary -COPY --from=builder /src/build/picoclaw /usr/local/bin/picoclaw +COPY --from=builder /src/build/jane-ai /usr/local/bin/jane-ai # Create non-root user and group -RUN addgroup -g 1000 picoclaw && \ - adduser -D -u 1000 -G picoclaw picoclaw +RUN addgroup -g 1000 jane-ai && \ + adduser -D -u 1000 -G jane-ai jane-ai # Switch to non-root user -USER picoclaw +USER jane-ai # Run onboard to create initial directories and config -RUN /usr/local/bin/picoclaw onboard +RUN /usr/local/bin/jane-ai onboard -ENTRYPOINT ["picoclaw"] +ENTRYPOINT ["jane-ai"] CMD ["gateway"] diff --git a/docker/Dockerfile.full b/docker/Dockerfile.full index a59c3607f..69134d800 100644 --- a/docker/Dockerfile.full +++ b/docker/Dockerfile.full @@ -1,5 +1,5 @@ # ============================================================ -# Stage 1: Build the picoclaw binary +# Stage 1: Build the jane-ai binary # ============================================================ FROM golang:1.26.0-alpine AS builder @@ -35,10 +35,10 @@ RUN curl -LsSf https://astral.sh/uv/install.sh | sh && \ uv --version # Copy binary -COPY --from=builder /src/build/picoclaw /usr/local/bin/picoclaw +COPY --from=builder /src/build/jane-ai /usr/local/bin/jane-ai -# Create picoclaw home directory -RUN /usr/local/bin/picoclaw onboard +# Create jane-ai home directory +RUN /usr/local/bin/jane-ai onboard -ENTRYPOINT ["picoclaw"] +ENTRYPOINT ["jane-ai"] CMD ["gateway"] diff --git a/docker/Dockerfile.goreleaser b/docker/Dockerfile.goreleaser index 68a02aae8..1086004d6 100644 --- a/docker/Dockerfile.goreleaser +++ b/docker/Dockerfile.goreleaser @@ -4,7 +4,7 @@ ARG TARGETPLATFORM RUN apk add --no-cache ca-certificates tzdata -COPY $TARGETPLATFORM/picoclaw /usr/local/bin/picoclaw +COPY $TARGETPLATFORM/jane-ai /usr/local/bin/jane-ai COPY docker/entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh diff --git a/docker/Dockerfile.goreleaser.launcher b/docker/Dockerfile.goreleaser.launcher index 5d65576f7..b9088af19 100644 --- a/docker/Dockerfile.goreleaser.launcher +++ b/docker/Dockerfile.goreleaser.launcher @@ -4,9 +4,9 @@ ARG TARGETPLATFORM RUN apk add --no-cache ca-certificates tzdata -COPY $TARGETPLATFORM/picoclaw /usr/local/bin/picoclaw -COPY $TARGETPLATFORM/picoclaw-launcher /usr/local/bin/picoclaw-launcher -COPY $TARGETPLATFORM/picoclaw-launcher-tui /usr/local/bin/picoclaw-launcher-tui +COPY $TARGETPLATFORM/jane-ai /usr/local/bin/jane-ai +COPY $TARGETPLATFORM/jane-ai-launcher /usr/local/bin/jane-ai-launcher +COPY $TARGETPLATFORM/jane-ai-launcher-tui /usr/local/bin/jane-ai-launcher-tui -ENTRYPOINT ["picoclaw-launcher"] +ENTRYPOINT ["jane-ai-launcher"] CMD ["-public", "-no-browser"] diff --git a/docker/Dockerfile.launcher.local b/docker/Dockerfile.launcher.local index d77794efc..20a366753 100644 --- a/docker/Dockerfile.launcher.local +++ b/docker/Dockerfile.launcher.local @@ -16,7 +16,7 @@ RUN go mod tidy && make build && make build-launcher FROM alpine:3.23 RUN apk add --no-cache ca-certificates tzdata -COPY --from=builder /src/build/picoclaw /usr/local/bin/picoclaw -COPY --from=builder /src/build/picoclaw-launcher /usr/local/bin/picoclaw-launcher -ENTRYPOINT ["picoclaw-launcher"] +COPY --from=builder /src/build/jane-ai /usr/local/bin/jane-ai +COPY --from=builder /src/build/jane-ai-launcher /usr/local/bin/jane-ai-launcher +ENTRYPOINT ["jane-ai-launcher"] CMD ["-public", "-no-browser"] diff --git a/web/backend/.gitignore b/web/backend/.gitignore index 509042171..92a76805b 100644 --- a/web/backend/.gitignore +++ b/web/backend/.gitignore @@ -5,7 +5,7 @@ *.dylib *.test *.out -picoclaw-web +jane-ai-web # Frontend build artifacts (embedded by Go) dist/* @@ -16,4 +16,4 @@ dist/* # Editors .vscode/ -.idea/ \ No newline at end of file +.idea/ diff --git a/web/backend/api/gateway.go b/web/backend/api/gateway.go index 0c8ea31f4..0e0e31d90 100644 --- a/web/backend/api/gateway.go +++ b/web/backend/api/gateway.go @@ -133,7 +133,7 @@ func isCmdProcessAliveLocked(cmd *exec.Cmd) bool { } func (h *Handler) startGatewayLocked() (int, error) { - // Locate the picoclaw executable + // Locate the Jane AI executable execPath := utils.FindPicoclawBinary() cmd := exec.Command(execPath, "gateway") @@ -173,7 +173,7 @@ func (h *Handler) startGatewayLocked() (int, error) { gateway.cmd = cmd pid := cmd.Process.Pid - logger.InfoCF("gateway", "Started picoclaw gateway", map[string]any{"pid": pid, "execPath": execPath}) + logger.InfoCF("gateway", "Started Jane AI gateway", map[string]any{"pid": pid, "execPath": execPath}) // Broadcast starting event gateway.events.Broadcast(GatewayEvent{Status: "starting", PID: pid}) @@ -235,7 +235,7 @@ func (h *Handler) startGatewayLocked() (int, error) { return pid, nil } -// handleGatewayStart starts the picoclaw gateway subprocess. +// handleGatewayStart starts the Jane AI gateway subprocess. // // POST /api/gateway/start func (h *Handler) handleGatewayStart(w http.ResponseWriter, r *http.Request) { diff --git a/web/backend/api/oauth.go b/web/backend/api/oauth.go index 319b7fae4..fbbbb0f9c 100644 --- a/web/backend/api/oauth.go +++ b/web/backend/api/oauth.go @@ -492,7 +492,7 @@ func (h *Handler) handleOAuthLogout(w http.ResponseWriter, r *http.Request) { func renderOAuthCallbackPage(w http.ResponseWriter, flowID, status, title, errMsg string) { payload := map[string]string{ - "type": "picoclaw-oauth-result", + "type": "jane-ai-oauth-result", "flowId": flowID, "status": status, } @@ -515,7 +515,7 @@ func renderOAuthCallbackPage(w http.ResponseWriter, flowID, status, title, errMs _, _ = fmt.Fprintf( w, - "PicoClaw OAuth

%s

%s

You can close this window.

", + "Jane AI OAuth

%s

%s

You can close this window.

", string(payloadJSON), html.EscapeString(title), html.EscapeString(message), diff --git a/web/backend/api/startup.go b/web/backend/api/startup.go index 1c685bc90..ec0cabcc4 100644 --- a/web/backend/api/startup.go +++ b/web/backend/api/startup.go @@ -14,8 +14,8 @@ import ( ) const ( - autoStartEntryName = "PicoClawLauncher" - launchAgentLabel = "io.picoclaw.launcher" + autoStartEntryName = "JaneAILauncher" + launchAgentLabel = "io.jane-ai.launcher" ) type autoStartRequest struct { @@ -215,7 +215,7 @@ func buildDarwinPlist(exePath string, args []string) string { func linuxAutoStartPath() string { home, _ := os.UserHomeDir() - return filepath.Join(home, ".config", "autostart", "picoclaw-web.desktop") + return filepath.Join(home, ".config", "autostart", "jane-ai-web.desktop") } func shellQuote(s string) string { @@ -247,8 +247,8 @@ func setLinuxAutoStart(enabled bool, exePath string, args []string) error { "[Desktop Entry]", "Type=Application", "Version=1.0", - "Name=PicoClaw Web", - "Comment=Start PicoClaw Web on login", + "Name=Jane AI Web", + "Comment=Start Jane AI Web on login", "Exec=" + buildLinuxExecLine(exePath, args), "Terminal=false", "X-GNOME-Autostart-enabled=true", diff --git a/web/picoclaw-launcher.desktop b/web/jane-ai-launcher.desktop similarity index 100% rename from web/picoclaw-launcher.desktop rename to web/jane-ai-launcher.desktop diff --git a/web/picoclaw-launcher.png b/web/jane-ai-launcher.png similarity index 100% rename from web/picoclaw-launcher.png rename to web/jane-ai-launcher.png