diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 4be385b22..e4ac0a661 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -10,7 +10,7 @@ assignees: '' ## Quick Summary ## Environment & Tools -- **PicoClaw Version:** (e.g., v0.1.2 or commit hash) +- **Piconomous Version:** (e.g., v0.1.2 or commit hash) - **Go Version:** (e.g., go 1.22) - **AI Model & Provider:** (e.g., GPT-4o via OpenAI / DeepSeek via SiliconFlow) - **Operating System:** (e.g., Ubuntu 22.04 / macOS / Android Termux) diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 784c404a6..dc3d212a9 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 }}/piconomous DOCKERHUB_REGISTRY: docker.io DOCKERHUB_IMAGE_NAME: ${{ vars.DOCKERHUB_REPOSITORY }} diff --git a/.github/workflows/upload-tos.yml b/.github/workflows/upload-tos.yml index 6d3916d53..749a86c43 100644 --- a/.github/workflows/upload-tos.yml +++ b/.github/workflows/upload-tos.yml @@ -41,9 +41,9 @@ jobs: aws configure set default.s3.addressing_style virtual TOS_ENDPOINT="https://tos-s3-cn-beijing.volces.com" # Upload to versioned directory - aws s3 sync artifacts/ "s3://picoclaw-downloads/${{ inputs.tag }}/" \ + aws s3 sync artifacts/ "s3://piconomous-downloads/${{ inputs.tag }}/" \ --endpoint-url "$TOS_ENDPOINT" # Upload to latest (overwrite) - aws s3 sync artifacts/ "s3://picoclaw-downloads/latest/" \ + aws s3 sync artifacts/ "s3://piconomous-downloads/latest/" \ --endpoint-url "$TOS_ENDPOINT" \ --delete diff --git a/.goreleaser.yaml b/.goreleaser.yaml index a73f87f30..53a6f0762 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -11,17 +11,17 @@ before: - go-winres make --in web/backend/winres/winres.json --out web/backend/rsrc --product-version={{ .Version }} --file-version={{ .Version }} builds: - - id: picoclaw + - id: piconomous 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 github.com/sipeed/piconomous/pkg/config.Version={{ .Version }} + - -X github.com/sipeed/piconomous/pkg/config.GitCommit={{ .ShortCommit }} + - -X github.com/sipeed/piconomous/pkg/config.BuildTime={{ .Date }} + - -X github.com/sipeed/piconomous/pkg/config.GoVersion={{ .Env.GOVERSION }} goos: - linux - windows @@ -41,7 +41,7 @@ builds: - "7" gomips: - softfloat - main: ./cmd/picoclaw + main: ./cmd/piconomous ignore: - goos: windows goarch: arm @@ -52,8 +52,8 @@ builds: - goos: netbsd goarch: arm - - id: picoclaw-launcher - binary: picoclaw-launcher + - id: piconomous-launcher + binary: piconomous-launcher env: - CGO_ENABLED=0 tags: @@ -90,8 +90,8 @@ builds: - goos: netbsd goarch: arm - - id: picoclaw-launcher-tui - binary: picoclaw-launcher-tui + - id: piconomous-launcher-tui + binary: piconomous-launcher-tui env: - CGO_ENABLED=0 tags: @@ -117,7 +117,7 @@ builds: - "7" gomips: - softfloat - main: ./cmd/picoclaw-launcher-tui + main: ./cmd/piconomous-launcher-tui ignore: - goos: windows goarch: arm @@ -129,14 +129,14 @@ builds: goarch: arm dockers_v2: - - id: picoclaw + - id: piconomous dockerfile: docker/Dockerfile.goreleaser extra_files: - docker/entrypoint.sh ids: - - picoclaw + - piconomous images: - - "ghcr.io/{{ .Env.GITHUB_REPOSITORY_OWNER }}/picoclaw" + - "ghcr.io/{{ .Env.GITHUB_REPOSITORY_OWNER }}/piconomous" - 'docker.io/{{ .Env.DOCKERHUB_IMAGE_NAME }}' tags: - '{{ if isEnvSet "NIGHTLY_BUILD" }}nightly{{ else }}{{ .Tag }}{{ end }}' @@ -146,14 +146,14 @@ dockers_v2: - linux/arm64 - linux/riscv64 - - id: picoclaw-launcher + - id: piconomous-launcher dockerfile: docker/Dockerfile.goreleaser.launcher ids: - - picoclaw - - picoclaw-launcher - - picoclaw-launcher-tui + - piconomous + - piconomous-launcher + - piconomous-launcher-tui images: - - "ghcr.io/{{ .Env.GITHUB_REPOSITORY_OWNER }}/picoclaw" + - "ghcr.io/{{ .Env.GITHUB_REPOSITORY_OWNER }}/piconomous" - 'docker.io/{{ .Env.DOCKERHUB_IMAGE_NAME }}' tags: - '{{ if isEnvSet "NIGHTLY_BUILD" }}nightly-launcher{{ else }}{{ .Tag }}-launcher{{ end }}' @@ -167,9 +167,9 @@ notarize: macos: - enabled: '{{ isEnvSet "MACOS_SIGN_P12" }}' ids: - - picoclaw - - picoclaw-launcher - - picoclaw-launcher-tui + - piconomous + - piconomous-launcher + - piconomous-launcher-tui sign: certificate: "{{.Env.MACOS_SIGN_P12}}" password: "{{.Env.MACOS_SIGN_PASSWORD}}" @@ -196,32 +196,32 @@ archives: formats: [zip] nfpms: - - id: picoclaw + - id: piconomous ids: - - picoclaw - - picoclaw-launcher - - picoclaw-launcher-tui - package_name: picoclaw + - piconomous + - piconomous-launcher + - piconomous-launcher-tui + package_name: piconomous 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: piconomous + homepage: https://github.com/{{ .Env.GITHUB_REPOSITORY_OWNER }}/piconomous + maintainer: piconomous contributors + description: piconomous - 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/piconomous-launcher.desktop + dst: /usr/share/applications/piconomous-launcher.desktop + - src: web/piconomous-launcher.png + dst: /usr/share/icons/hicolor/512x512/apps/piconomous-launcher.png changelog: sort: asc diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ceff723d2..63dcdfd05 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,8 +1,8 @@ -# Contributing to PicoClaw +# Contributing to Piconomous -Thank you for your interest in contributing to PicoClaw! This project is a community-driven effort to build the lightweight and versatile personal AI assistant. We welcome contributions of all kinds: bug fixes, features, documentation, translations, and testing. +Thank you for your interest in contributing to Piconomous! This project is a community-driven effort to build the lightweight and versatile personal AI assistant. We welcome contributions of all kinds: bug fixes, features, documentation, translations, and testing. -PicoClaw itself was substantially developed with AI assistance — we embrace this approach and have built our contribution process around it. +Piconomous itself was substantially developed with AI assistance — we embrace this approach and have built our contribution process around it. ## Table of Contents @@ -31,7 +31,7 @@ We are committed to maintaining a welcoming and respectful community. Be kind, c - **Feature requests** — Open an issue using the feature request template; discuss before implementing. - **Code** — Fix bugs or implement features. See the workflow below. - **Documentation** — Improve READMEs, docs, inline comments, or translations. -- **Testing** — Run PicoClaw on new hardware, channels, or LLM providers and report your results. +- **Testing** — Run Piconomous on new hardware, channels, or LLM providers and report your results. For substantial new features, please open an issue first to discuss the design before writing code. This prevents wasted effort and ensures alignment with the project's direction. @@ -42,12 +42,12 @@ For substantial new features, please open an issue first to discuss the design b 1. **Fork** the repository on GitHub. 2. **Clone** your fork locally: ```bash - git clone https://github.com//picoclaw.git - cd picoclaw + git clone https://github.com//piconomous.git + cd piconomous ``` 3. Add the upstream remote: ```bash - git remote add upstream https://github.com/sipeed/picoclaw.git + git remote add upstream https://github.com/sipeed/piconomous.git ``` --- @@ -123,7 +123,7 @@ git rebase upstream/main ## AI-Assisted Contributions -PicoClaw was built with substantial AI assistance, and we fully embrace AI-assisted development. However, contributors must understand their responsibilities when using AI tools. +Piconomous was built with substantial AI assistance, and we fully embrace AI-assisted development. However, contributors must understand their responsibilities when using AI tools. ### Disclosure Is Required @@ -295,7 +295,7 @@ When in doubt, open an issue before writing code. It costs little and prevents w ## A Note on the Project's AI-Driven Origin -PicoClaw's architecture was substantially designed and implemented with AI assistance, guided by human oversight. If you find something that looks odd or over-engineered, it may be an artifact of that process — opening an issue to discuss it is always welcome. +Piconomous's architecture was substantially designed and implemented with AI assistance, guided by human oversight. If you find something that looks odd or over-engineered, it may be an artifact of that process — opening an issue to discuss it is always welcome. We believe AI-assisted development done responsibly produces great results. We also believe humans must remain accountable for what they ship. These two beliefs are not in conflict. diff --git a/CONTRIBUTING.zh.md b/CONTRIBUTING.zh.md index 196aecc65..86740b616 100644 --- a/CONTRIBUTING.zh.md +++ b/CONTRIBUTING.zh.md @@ -1,8 +1,8 @@ -# 参与贡献 PicoClaw +# 参与贡献 Piconomous -感谢你对 PicoClaw 的关注!本项目是一个社区驱动的开源项目,目标是构建 轻量灵活,人人可用 的个人AI助手。我们欢迎一切形式的贡献:Bug 修复、新功能、文档、翻译和测试。 +感谢你对 Piconomous 的关注!本项目是一个社区驱动的开源项目,目标是构建 轻量灵活,人人可用 的个人AI助手。我们欢迎一切形式的贡献:Bug 修复、新功能、文档、翻译和测试。 -PicoClaw 本身在很大程度上是借助 AI 辅助开发的——我们拥抱这种方式,并围绕它构建了贡献流程。 +Piconomous 本身在很大程度上是借助 AI 辅助开发的——我们拥抱这种方式,并围绕它构建了贡献流程。 ## 目录 @@ -31,7 +31,7 @@ PicoClaw 本身在很大程度上是借助 AI 辅助开发的——我们拥抱 - **功能建议** — 使用功能请求模板提交 Issue,建议在开始实现前先进行讨论。 - **代码贡献** — 修复 Bug 或实现新功能,参见下方工作流程。 - **文档改进** — 完善 README、文档、代码注释或翻译。 -- **测试与验证** — 在新硬件、新渠道或新 LLM 提供商上运行 PicoClaw 并反馈结果。 +- **测试与验证** — 在新硬件、新渠道或新 LLM 提供商上运行 Piconomous 并反馈结果。 对于较大的新功能,请先提交 Issue 讨论设计方案,再动手写代码。这能避免无效投入,也确保与项目方向保持一致。 @@ -42,12 +42,12 @@ PicoClaw 本身在很大程度上是借助 AI 辅助开发的——我们拥抱 1. 在 GitHub 上 **Fork** 本仓库。 2. 将你的 Fork **克隆**到本地: ```bash - git clone https://github.com/<你的用户名>/picoclaw.git - cd picoclaw + git clone https://github.com/<你的用户名>/piconomous.git + cd piconomous ``` 3. 添加上游远程仓库: ```bash - git remote add upstream https://github.com/sipeed/picoclaw.git + git remote add upstream https://github.com/sipeed/piconomous.git ``` --- @@ -123,7 +123,7 @@ git rebase upstream/main ## AI 辅助贡献 -PicoClaw 在很大程度上借助 AI 辅助开发,我们完全拥抱这种开发方式。但贡献者必须清楚地了解自己在使用 AI 工具时所承担的责任。 +Piconomous 在很大程度上借助 AI 辅助开发,我们完全拥抱这种开发方式。但贡献者必须清楚地了解自己在使用 AI 工具时所承担的责任。 ### 必须披露 AI 使用情况 @@ -296,7 +296,7 @@ Release 分支的保护级别高于 `main`,在任何情况下均不允许直 ## 关于本项目的 AI 驱动起源 -PicoClaw 的架构在人工监督下,经由 AI 辅助完成了大量设计和实现工作。如果你发现某处看起来奇怪或过度设计,这可能是该过程留下的痕迹——欢迎提 Issue 讨论。 +Piconomous 的架构在人工监督下,经由 AI 辅助完成了大量设计和实现工作。如果你发现某处看起来奇怪或过度设计,这可能是该过程留下的痕迹——欢迎提 Issue 讨论。 我们相信,负责任地使用 AI 辅助开发能产生优秀的成果。我们同样相信,人类必须对自己提交的内容负责。这两点并不矛盾。 diff --git a/Makefile b/Makefile index 411cd9dc5..1a1d6e945 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ .PHONY: all build install uninstall clean help test # Build variables -BINARY_NAME=picoclaw +BINARY_NAME=piconomous BUILD_DIR=build CMD_DIR=cmd/$(BINARY_NAME) MAIN_GO=$(CMD_DIR)/main.go @@ -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=github.com/sipeed/piconomous/pkg/config 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 @@ -51,8 +51,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 +PICONOMOUS_HOME?=$(HOME)/.piconomous +WORKSPACE_DIR?=$(PICONOMOUS_HOME)/workspace WORKSPACE_SKILLS_DIR=$(WORKSPACE_DIR)/skills BUILTIN_SKILLS_DIR=$(CURDIR)/skills @@ -105,7 +105,7 @@ generate: @$(GO) generate ./... @echo "Run generate complete" -## build: Build the picoclaw binary for current platform +## build: Build the piconomous binary for current platform build: generate @echo "Building $(BINARY_NAME) for $(PLATFORM)/$(ARCH)..." @mkdir -p $(BUILD_DIR) @@ -113,17 +113,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 piconomous-launcher (web console) binary build-launcher: - @echo "Building picoclaw-launcher for $(PLATFORM)/$(ARCH)..." + @echo "Building piconomous-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; \ fi - @$(WEB_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" + @$(WEB_GO) build $(GOFLAGS) -o $(BUILD_DIR)/piconomous-launcher-$(PLATFORM)-$(ARCH) ./web/backend + @ln -sf piconomous-launcher-$(PLATFORM)-$(ARCH) $(BUILD_DIR)/piconomous-launcher + @echo "Build complete: $(BUILD_DIR)/piconomous-launcher" ## build-whatsapp-native: Build with WhatsApp native (whatsmeow) support; larger binary build-whatsapp-native: generate @@ -169,7 +169,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 piconomous for all platforms build-all: generate @echo "Building for multiple platforms..." @mkdir -p $(BUILD_DIR) @@ -187,7 +187,7 @@ build-all: generate GOOS=netbsd GOARCH=arm64 $(GO) build -ldflags "$(LDFLAGS)" -o $(BUILD_DIR)/$(BINARY_NAME)-netbsd-arm64 ./$(CMD_DIR) @echo "All builds complete" -## install: Install picoclaw to system and copy builtin skills +## install: Install piconomous to system and copy builtin skills install: build @echo "Installing $(BINARY_NAME)..." @mkdir -p $(INSTALL_BIN_DIR) @@ -198,7 +198,7 @@ install: build @echo "Installed binary to $(INSTALL_BIN_DIR)/$(BINARY_NAME)" @echo "Installation complete!" -## uninstall: Remove picoclaw from system +## uninstall: Remove piconomous from system uninstall: @echo "Uninstalling $(BINARY_NAME)..." @rm -f $(INSTALL_BIN_DIR)/$(BINARY_NAME) @@ -206,11 +206,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 piconomous and all data uninstall-all: @echo "Removing workspace and skills..." - @rm -rf $(PICOCLAW_HOME) - @echo "Removed workspace: $(PICOCLAW_HOME)" + @rm -rf $(PICONOMOUS_HOME) + @echo "Removed workspace: $(PICONOMOUS_HOME)" @echo "Complete uninstallation done!" ## clean: Remove build artifacts @@ -222,12 +222,12 @@ clean: ## vet: Run go vet for static analysis vet: generate @packages="$$(go list ./...)" && \ - $(GO) vet $$(printf '%s\n' "$$packages" | grep -v '^github.com/sipeed/picoclaw/web/') + $(GO) vet $$(printf '%s\n' "$$packages" | grep -v '^github.com/sipeed/piconomous/web/') @cd web/backend && $(WEB_GO) vet ./... ## test: Test Go code test: generate - @$(GO) test $$(go list ./... | grep -v github.com/sipeed/picoclaw/web/) + @$(GO) test $$(go list ./... | grep -v github.com/sipeed/piconomous/web/) @cd web && make test ## fmt: Format Go code @@ -255,19 +255,19 @@ update-deps: ## check: Run vet, fmt, and verify dependencies check: deps fmt vet test -## run: Build and run picoclaw +## run: Build and run piconomous run: build @$(BUILD_DIR)/$(BINARY_NAME) $(ARGS) ## docker-build: Build Docker image (minimal Alpine-based) docker-build: @echo "Building minimal Docker image (Alpine-based)..." - docker compose -f docker/docker-compose.yml build picoclaw-agent picoclaw-gateway + docker compose -f docker/docker-compose.yml build piconomous-agent piconomous-gateway ## docker-build-full: Build Docker image with full MCP support (Node.js 24) docker-build-full: @echo "Building full-featured Docker image (Node.js 24)..." - docker compose -f docker/docker-compose.full.yml build picoclaw-agent picoclaw-gateway + docker compose -f docker/docker-compose.full.yml build piconomous-agent piconomous-gateway ## docker-test: Test MCP tools in Docker container docker-test: @@ -275,30 +275,30 @@ 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 piconomous 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 piconomous 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 piconomous agent in Docker (interactive, Alpine-based) docker-run-agent: - docker compose -f docker/docker-compose.yml run --rm picoclaw-agent + docker compose -f docker/docker-compose.yml run --rm piconomous-agent -## docker-run-agent-full: Run picoclaw agent in Docker (interactive, full-featured) +## docker-run-agent-full: Run piconomous agent in Docker (interactive, full-featured) docker-run-agent-full: - docker compose -f docker/docker-compose.full.yml run --rm picoclaw-agent + docker compose -f docker/docker-compose.full.yml run --rm piconomous-agent ## docker-clean: Clean Docker images and volumes 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 piconomous:latest piconomous:full 2>/dev/null || true -## build-macos-app: Build PicoClaw macOS .app bundle (no terminal window) +## build-macos-app: Build Piconomous macOS .app bundle (no terminal window) build-macos-app: @echo "Building macOS .app bundle..." @if [ "$(UNAME_S)" != "Darwin" ]; then \ @@ -307,11 +307,11 @@ build-macos-app: fi @cd web && $(MAKE) build && cd .. @./scripts/build-macos-app.sh $(BINARY_NAME)-$(PLATFORM)-$(ARCH) - @echo "macOS .app bundle created: $(BUILD_DIR)/PicoClaw.app" + @echo "macOS .app bundle created: $(BUILD_DIR)/Piconomous.app" ## help: Show this help message help: - @echo "picoclaw Makefile" + @echo "piconomous Makefile" @echo "" @echo "Usage:" @echo " make [target]" @@ -329,7 +329,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: ~/.piconomous/workspace)" @echo " VERSION # Version string (default: git describe)" @echo "" @echo "Current Configuration:" diff --git a/README.fr.md b/README.fr.md index cbaffc2d1..0dbac0f3a 100644 --- a/README.fr.md +++ b/README.fr.md @@ -1,7 +1,7 @@
- PicoClaw + Piconomous -

PicoClaw : Assistant IA Ultra-Efficace en Go

+

Piconomous : Assistant IA Ultra-Efficace en Go

Matériel à $10 · <10 Mo de RAM · Démarrage en <1s · 皮皮虾,我们走!

@@ -9,9 +9,9 @@ Hardware License
- Website - Docs - Wiki + Website + Docs + Wiki
Twitter @@ -24,9 +24,9 @@ --- -> **PicoClaw** est un projet open-source indépendant initié par [Sipeed](https://sipeed.com). Il est entièrement écrit en **Go** — ce n'est pas un fork d'OpenClaw, de NanoBot ou de tout autre projet. +> **Piconomous** est un projet open-source indépendant initié par [Sipeed](https://sipeed.com). Il est entièrement écrit en **Go** — ce n'est pas un fork d'OpenClaw, de NanoBot ou de tout autre projet. -🦐 **PicoClaw** est un assistant personnel IA ultra-léger inspiré de [NanoBot](https://github.com/HKUDS/nanobot), entièrement réécrit en **Go** via un processus d'auto-amorçage (self-bootstrapping) — où l'agent IA lui-même a piloté l'intégralité de la migration architecturale et de l'optimisation du code. +🦐 **Piconomous** est un assistant personnel IA ultra-léger inspiré de [NanoBot](https://github.com/HKUDS/nanobot), entièrement réécrit en **Go** via un processus d'auto-amorçage (self-bootstrapping) — où l'agent IA lui-même a piloté l'intégralité de la migration architecturale et de l'optimisation du code. ⚡️ **Extrêmement léger :** Fonctionne sur du matériel à seulement **$10** avec **<10 Mo** de RAM. C'est 99% de mémoire en moins qu'OpenClaw et 98% moins cher qu'un Mac mini ! @@ -34,7 +34,7 @@

- +

@@ -48,31 +48,31 @@ > [!CAUTION] > **🚨 SÉCURITÉ & CANAUX OFFICIELS** > -> * **PAS DE CRYPTO :** PicoClaw n'a **AUCUN** token/jeton officiel. Toute annonce sur `pump.fun` ou d'autres plateformes de trading est une **ARNAQUE**. +> * **PAS DE CRYPTO :** Piconomous n'a **AUCUN** token/jeton officiel. Toute annonce sur `pump.fun` ou d'autres plateformes de trading est une **ARNAQUE**. > -> * **DOMAINE OFFICIEL :** Le **SEUL** site officiel est **[picoclaw.io](https://picoclaw.io)**, et le site de l'entreprise est **[sipeed.com](https://sipeed.com)**. +> * **DOMAINE OFFICIEL :** Le **SEUL** site officiel est **[piconomous.io](https://piconomous.io)**, et le site de l'entreprise est **[sipeed.com](https://sipeed.com)**. > * **Attention :** De nombreux domaines `.ai/.org/.com/.net/...` sont enregistrés par des tiers. -> * **Attention :** PicoClaw est en phase de développement précoce et peut présenter des problèmes de sécurité réseau non résolus. Ne déployez pas en environnement de production avant la version v1.0. -> * **Note :** PicoClaw a récemment fusionné de nombreuses PR, ce qui peut entraîner une empreinte mémoire plus importante (10–20 Mo) dans les dernières versions. Nous prévoyons de prioriser l'optimisation des ressources dès que l'ensemble des fonctionnalités sera stabilisé. +> * **Attention :** Piconomous est en phase de développement précoce et peut présenter des problèmes de sécurité réseau non résolus. Ne déployez pas en environnement de production avant la version v1.0. +> * **Note :** Piconomous a récemment fusionné de nombreuses PR, ce qui peut entraîner une empreinte mémoire plus importante (10–20 Mo) dans les dernières versions. Nous prévoyons de prioriser l'optimisation des ressources dès que l'ensemble des fonctionnalités sera stabilisé. ## 📢 Actualités -2026-03-17 🚀 **v0.2.3 publié !** Interface système tray (Windows & Linux), suivi de statut des sous-agents (`spawn_status`), rechargement à chaud expérimental du gateway, portes de sécurité cron, et 2 correctifs de sécurité. PicoClaw atteint **25K ⭐** ! +2026-03-17 🚀 **v0.2.3 publié !** Interface système tray (Windows & Linux), suivi de statut des sous-agents (`spawn_status`), rechargement à chaud expérimental du gateway, portes de sécurité cron, et 2 correctifs de sécurité. Piconomous atteint **25K ⭐** ! 2026-03-09 🎉 **v0.2.1 — Plus grande mise à jour !** Support du protocole MCP, 4 nouveaux canaux (Matrix/IRC/WeCom/Discord Proxy), 3 nouveaux fournisseurs (Kimi/Minimax/Avian), pipeline de vision, stockage mémoire JSONL, et routage de modèles. 2026-02-28 📦 **v0.2.0** publié avec support Docker Compose et lanceur Web UI. -2026-02-26 🎉 PicoClaw a atteint **20K étoiles** en seulement 17 jours ! L'orchestration automatique des canaux et les interfaces de capacités sont arrivées. +2026-02-26 🎉 Piconomous a atteint **20K étoiles** en seulement 17 jours ! L'orchestration automatique des canaux et les interfaces de capacités sont arrivées.
Actualités précédentes... -2026-02-16 🎉 PicoClaw a atteint 12K étoiles en une semaine ! Les rôles de mainteneurs communautaires et la [feuille de route](ROADMAP.md) sont officiellement publiés. +2026-02-16 🎉 Piconomous a atteint 12K étoiles en une semaine ! Les rôles de mainteneurs communautaires et la [feuille de route](ROADMAP.md) sont officiellement publiés. -2026-02-13 🎉 PicoClaw a atteint 5000 étoiles en 4 jours ! La Feuille de Route du Projet et le Groupe de Développeurs sont en cours de mise en place. +2026-02-13 🎉 Piconomous a atteint 5000 étoiles en 4 jours ! La Feuille de Route du Projet et le Groupe de Développeurs sont en cours de mise en place. -2026-02-09 🎉 **PicoClaw est lancé !** Construit en 1 jour pour apporter les Agents IA au matériel à $10 avec <10 Mo de RAM. 🦐 PicoClaw, c'est parti ! +2026-02-09 🎉 **Piconomous est lancé !** Construit en 1 jour pour apporter les Agents IA au matériel à $10 avec <10 Mo de RAM. 🦐 Piconomous, c'est parti !
@@ -96,14 +96,14 @@ _*Les versions récentes peuvent utiliser 10–20 Mo en raison des fusions rapides de fonctionnalités. L'optimisation des ressources est prévue. La comparaison de démarrage est basée sur des benchmarks à cœur unique 0,8 GHz (voir tableau ci-dessous)._ -| | OpenClaw | NanoBot | **PicoClaw** | +| | OpenClaw | NanoBot | **Piconomous** | | ----------------------------- | ------------- | ------------------------ | ----------------------------------------- | | **Langage** | TypeScript | Python | **Go** | | **RAM** | >1 Go | >100 Mo | **< 10 Mo*** | | **Démarrage**
(cœur 0,8 GHz) | >500s | >30s | **<1s** | | **Coût** | Mac Mini $599 | La plupart des SBC Linux
~$50 | **N'importe quelle carte Linux**
**À partir de $10** | -PicoClaw +Piconomous > 📋 **[Liste de Compatibilité Matérielle](docs/hardware-compatibility.md)** — Voir toutes les cartes testées, du RISC-V à $5 au Raspberry Pi en passant par les téléphones Android. Votre carte n'est pas listée ? Soumettez une PR ! @@ -118,9 +118,9 @@ _*Les versions récentes peuvent utiliser 10–20 Mo en raison des fusions rapid

🔎 Recherche Web & Apprentissage

-

-

-

+

+

+

Développer • Déployer • Mettre à l'échelle @@ -131,26 +131,26 @@ _*Les versions récentes peuvent utiliser 10–20 Mo en raison des fusions rapid ### 📱 Utiliser sur d'anciens téléphones Android -Donnez une seconde vie à votre téléphone d'il y a dix ans ! Transformez-le en assistant IA intelligent avec PicoClaw. Démarrage rapide : +Donnez une seconde vie à votre téléphone d'il y a dix ans ! Transformez-le en assistant IA intelligent avec Piconomous. Démarrage rapide : 1. **Installez [Termux](https://github.com/termux/termux-app)** (Téléchargez depuis [GitHub Releases](https://github.com/termux/termux-app/releases), ou recherchez sur F-Droid / Google Play). 2. **Exécutez les commandes** ```bash -# Téléchargez la dernière version depuis https://github.com/sipeed/picoclaw/releases -wget https://github.com/sipeed/picoclaw/releases/latest/download/picoclaw_Linux_arm64.tar.gz -tar xzf picoclaw_Linux_arm64.tar.gz +# Téléchargez la dernière version depuis https://github.com/sipeed/piconomous/releases +wget https://github.com/sipeed/piconomous/releases/latest/download/piconomous_Linux_arm64.tar.gz +tar xzf piconomous_Linux_arm64.tar.gz pkg install proot -termux-chroot ./picoclaw onboard # chroot fournit une disposition standard du système de fichiers Linux +termux-chroot ./piconomous onboard # chroot fournit une disposition standard du système de fichiers Linux ``` Puis suivez les instructions de la section « Démarrage Rapide » pour terminer la configuration ! -PicoClaw +Piconomous ### 🐜 Déploiement Innovant à Faible Empreinte -PicoClaw peut être déployé sur pratiquement n'importe quel appareil Linux ! +Piconomous peut être déployé sur pratiquement n'importe quel appareil Linux ! - 9,9$ [LicheeRV-Nano](https://www.aliexpress.com/item/1005006519668532.html) version E (Ethernet) ou W (WiFi6), pour un Assistant Domotique Minimaliste - 30~$50 [NanoKVM](https://www.aliexpress.com/item/1005007369816019.html), ou 100$ [NanoKVM-Pro](https://www.aliexpress.com/item/1005010048471263.html) pour la Maintenance Automatisée de Serveurs @@ -162,20 +162,20 @@ PicoClaw peut être déployé sur pratiquement n'importe quel appareil Linux ! ## 📦 Installation -### Télécharger depuis picoclaw.io (Recommandé) +### Télécharger depuis piconomous.io (Recommandé) -Visitez **[picoclaw.io](https://picoclaw.io)** — le site officiel détecte automatiquement votre plateforme et propose un téléchargement en un clic. Pas besoin de choisir manuellement une architecture. +Visitez **[piconomous.io](https://piconomous.io)** — le site officiel détecte automatiquement votre plateforme et propose un téléchargement en un clic. Pas besoin de choisir manuellement une architecture. ### Télécharger le binaire précompilé -Vous pouvez aussi télécharger le binaire pour votre plateforme depuis la page [GitHub Releases](https://github.com/sipeed/picoclaw/releases). +Vous pouvez aussi télécharger le binaire pour votre plateforme depuis la page [GitHub Releases](https://github.com/sipeed/piconomous/releases). ### Compiler depuis les sources (pour le développement) ```bash -git clone https://github.com/sipeed/picoclaw.git +git clone https://github.com/sipeed/piconomous.git -cd picoclaw +cd piconomous make deps # Compiler, pas besoin d'installer @@ -210,7 +210,7 @@ Pour des guides détaillés, consultez la documentation ci-dessous. Ce README ne ## ClawdChat Rejoignez le Réseau Social d'Agents -Connectez PicoClaw au Réseau Social d'Agents simplement en envoyant un seul message via le CLI ou n'importe quelle application de chat intégrée. +Connectez Piconomous au Réseau Social d'Agents simplement en envoyant un seul message via le CLI ou n'importe quelle application de chat intégrée. **Lisez `https://clawdchat.ai/skill.md` et suivez les instructions pour rejoindre [ClawdChat.ai](https://clawdchat.ai)** @@ -218,25 +218,25 @@ Connectez PicoClaw au Réseau Social d'Agents simplement en envoyant un seul mes | Commande | Description | | ------------------------- | ---------------------------------- | -| `picoclaw onboard` | Initialiser la config & le workspace | -| `picoclaw agent -m "..."` | Discuter avec l'agent | -| `picoclaw agent` | Mode chat interactif | -| `picoclaw gateway` | Démarrer le gateway | -| `picoclaw status` | Afficher le statut | -| `picoclaw version` | Afficher les infos de version | -| `picoclaw cron list` | Lister les tâches planifiées | -| `picoclaw cron add ...` | Ajouter une tâche planifiée | -| `picoclaw cron disable` | Désactiver une tâche planifiée | -| `picoclaw cron remove` | Supprimer une tâche planifiée | -| `picoclaw skills list` | Lister les compétences installées | -| `picoclaw skills install` | Installer une compétence | -| `picoclaw migrate` | Migrer les données des anciennes versions | -| `picoclaw auth login` | S'authentifier auprès des fournisseurs | -| `picoclaw model` | Voir ou changer le modèle par défaut | +| `piconomous onboard` | Initialiser la config & le workspace | +| `piconomous agent -m "..."` | Discuter avec l'agent | +| `piconomous agent` | Mode chat interactif | +| `piconomous gateway` | Démarrer le gateway | +| `piconomous status` | Afficher le statut | +| `piconomous version` | Afficher les infos de version | +| `piconomous cron list` | Lister les tâches planifiées | +| `piconomous cron add ...` | Ajouter une tâche planifiée | +| `piconomous cron disable` | Désactiver une tâche planifiée | +| `piconomous cron remove` | Supprimer une tâche planifiée | +| `piconomous skills list` | Lister les compétences installées | +| `piconomous skills install` | Installer une compétence | +| `piconomous migrate` | Migrer les données des anciennes versions | +| `piconomous auth login` | S'authentifier auprès des fournisseurs | +| `piconomous model` | Voir ou changer le modèle par défaut | ### Tâches Planifiées / Rappels -PicoClaw prend en charge les rappels planifiés et les tâches récurrentes via l'outil `cron` : +Piconomous prend en charge les rappels planifiés et les tâches récurrentes via l'outil `cron` : * **Rappels ponctuels** : « Rappelle-moi dans 10 minutes » → se déclenche une fois après 10 min * **Tâches récurrentes** : « Rappelle-moi toutes les 2 heures » → se déclenche toutes les 2 heures @@ -246,7 +246,7 @@ PicoClaw prend en charge les rappels planifiés et les tâches récurrentes via Les PR sont les bienvenues ! Le code est intentionnellement petit et lisible. 🤗 -Consultez notre [Feuille de Route Communautaire](https://github.com/sipeed/picoclaw/blob/main/ROADMAP.md) complète. +Consultez notre [Feuille de Route Communautaire](https://github.com/sipeed/piconomous/blob/main/ROADMAP.md) complète. Groupe de développeurs en construction, rejoignez-nous après votre première PR fusionnée ! @@ -254,4 +254,4 @@ Groupes d'utilisateurs : discord : -PicoClaw +Piconomous diff --git a/README.id.md b/README.id.md index 3f462981c..072029915 100644 --- a/README.id.md +++ b/README.id.md @@ -1,7 +1,7 @@
- PicoClaw + Piconomous -

PicoClaw: Asisten AI Super Ringan berbasis Go

+

Piconomous: Asisten AI Super Ringan berbasis Go

Perangkat Keras $10 · RAM <10MB · Boot <1 Detik · Ayo, Berangkat!

@@ -9,9 +9,9 @@ Hardware License
- Website - Docs - Wiki + Website + Docs + Wiki
Twitter @@ -24,9 +24,9 @@ --- -> **PicoClaw** adalah proyek open-source independen yang diinisiasi oleh [Sipeed](https://sipeed.com). Ditulis sepenuhnya dalam **Go** — bukan fork dari OpenClaw, NanoBot, atau proyek lainnya. +> **Piconomous** adalah proyek open-source independen yang diinisiasi oleh [Sipeed](https://sipeed.com). Ditulis sepenuhnya dalam **Go** — bukan fork dari OpenClaw, NanoBot, atau proyek lainnya. -🦐 PicoClaw adalah asisten AI pribadi yang super ringan, terinspirasi dari [NanoBot](https://github.com/HKUDS/nanobot), ditulis ulang sepenuhnya dalam Go melalui proses "self-bootstrapping" — di mana AI Agent itu sendiri yang memandu seluruh migrasi arsitektur dan optimasi kode. +🦐 Piconomous adalah asisten AI pribadi yang super ringan, terinspirasi dari [NanoBot](https://github.com/HKUDS/nanobot), ditulis ulang sepenuhnya dalam Go melalui proses "self-bootstrapping" — di mana AI Agent itu sendiri yang memandu seluruh migrasi arsitektur dan optimasi kode. ⚡️ Berjalan di perangkat keras $10 dengan RAM <10MB: Hemat 99% memori dibanding OpenClaw dan 98% lebih murah dibanding Mac mini! @@ -34,7 +34,7 @@

- +

@@ -48,31 +48,31 @@ > [!CAUTION] > **🚨 KEAMANAN & SALURAN RESMI** > -> * **TANPA KRIPTO:** PicoClaw **TIDAK** memiliki token/koin resmi. Semua klaim di `pump.fun` atau platform trading lainnya adalah **PENIPUAN**. +> * **TANPA KRIPTO:** Piconomous **TIDAK** memiliki token/koin resmi. Semua klaim di `pump.fun` atau platform trading lainnya adalah **PENIPUAN**. > -> * **DOMAIN RESMI:** Satu-satunya website resmi adalah **[picoclaw.io](https://picoclaw.io)**, dan website perusahaan adalah **[sipeed.com](https://sipeed.com)** +> * **DOMAIN RESMI:** Satu-satunya website resmi adalah **[piconomous.io](https://piconomous.io)**, dan website perusahaan adalah **[sipeed.com](https://sipeed.com)** > * **Peringatan:** Banyak domain `.ai/.org/.com/.net/...` yang didaftarkan oleh pihak ketiga. -> * **Peringatan:** PicoClaw masih dalam tahap pengembangan awal dan mungkin memiliki masalah keamanan jaringan yang belum teratasi. Jangan deploy ke lingkungan produksi sebelum rilis v1.0. -> * **Catatan:** PicoClaw baru-baru ini menggabungkan banyak PR, yang mungkin mengakibatkan penggunaan memori lebih besar (10–20MB) pada versi terbaru. Kami berencana untuk memprioritaskan optimasi sumber daya segera setelah fitur saat ini mencapai kondisi stabil. +> * **Peringatan:** Piconomous masih dalam tahap pengembangan awal dan mungkin memiliki masalah keamanan jaringan yang belum teratasi. Jangan deploy ke lingkungan produksi sebelum rilis v1.0. +> * **Catatan:** Piconomous baru-baru ini menggabungkan banyak PR, yang mungkin mengakibatkan penggunaan memori lebih besar (10–20MB) pada versi terbaru. Kami berencana untuk memprioritaskan optimasi sumber daya segera setelah fitur saat ini mencapai kondisi stabil. ## 📢 Berita -2026-03-17 🚀 **v0.2.3 Dirilis!** UI system tray (Windows & Linux), pelacakan status sub-agent (`spawn_status`), eksperimental gateway hot-reload, gerbang keamanan cron, dan 2 perbaikan keamanan. PicoClaw kini di **25K ⭐**! +2026-03-17 🚀 **v0.2.3 Dirilis!** UI system tray (Windows & Linux), pelacakan status sub-agent (`spawn_status`), eksperimental gateway hot-reload, gerbang keamanan cron, dan 2 perbaikan keamanan. Piconomous kini di **25K ⭐**! 2026-03-09 🎉 **v0.2.1 — Update terbesar!** Dukungan protokol MCP, 4 channel baru (Matrix/IRC/WeCom/Discord Proxy), 3 provider baru (Kimi/Minimax/Avian), pipeline vision, penyimpanan memori JSONL, dan routing model. 2026-02-28 📦 **v0.2.0** dirilis dengan dukungan Docker Compose dan launcher Web UI. -2026-02-26 🎉 PicoClaw mencapai **20K bintang** hanya dalam 17 hari! Orkestrasi channel otomatis dan antarmuka kapabilitas diluncurkan. +2026-02-26 🎉 Piconomous mencapai **20K bintang** hanya dalam 17 hari! Orkestrasi channel otomatis dan antarmuka kapabilitas diluncurkan.
Berita lama... -2026-02-16 🎉 PicoClaw mencapai 12K bintang dalam satu minggu! Peran maintainer komunitas dan [roadmap](ROADMAP.md) resmi diposting. +2026-02-16 🎉 Piconomous mencapai 12K bintang dalam satu minggu! Peran maintainer komunitas dan [roadmap](ROADMAP.md) resmi diposting. -2026-02-13 🎉 PicoClaw mencapai 5000 bintang dalam 4 hari! Roadmap Proyek dan pengaturan Grup Pengembang sedang berjalan. +2026-02-13 🎉 Piconomous mencapai 5000 bintang dalam 4 hari! Roadmap Proyek dan pengaturan Grup Pengembang sedang berjalan. -2026-02-09 🎉 **PicoClaw Diluncurkan!** Dibangun dalam 1 hari untuk menghadirkan AI Agent ke perangkat keras $10 dengan RAM <10MB. 🦐 PicoClaw, Ayo Berangkat! +2026-02-09 🎉 **Piconomous Diluncurkan!** Dibangun dalam 1 hari untuk menghadirkan AI Agent ke perangkat keras $10 dengan RAM <10MB. 🦐 Piconomous, Ayo Berangkat!
@@ -96,14 +96,14 @@ _*Versi terbaru mungkin menggunakan 10–20MB karena penggabungan fitur yang cepat. Optimasi sumber daya direncanakan. Perbandingan startup berdasarkan benchmark prosesor single-core 0,8GHz (lihat tabel di bawah)._ -| | OpenClaw | NanoBot | **PicoClaw** | +| | OpenClaw | NanoBot | **Piconomous** | | ----------------------------- | ------------- | ------------------------ | ----------------------------------------- | | **Bahasa** | TypeScript | Python | **Go** | | **RAM** | >1GB | >100MB | **< 10MB*** | | **Startup**
(0,8GHz core) | >500d | >30d | **<1d** | | **Biaya** | Mac Mini $599 | Kebanyakan Linux SBC
~$50 | **Semua Board Linux**
**Mulai dari $10** | -PicoClaw +Piconomous ## 🦾 Demonstrasi @@ -116,9 +116,9 @@ _*Versi terbaru mungkin menggunakan 10–20MB karena penggabungan fitur yang cep

🔎 Pencarian Web & Pembelajaran

-

-

-

+

+

+

Develop • Deploy • Scale @@ -129,26 +129,26 @@ _*Versi terbaru mungkin menggunakan 10–20MB karena penggabungan fitur yang cep ### 📱 Jalankan di HP Android Lama -Berikan kehidupan kedua untuk HP lama Anda! Ubah menjadi Asisten AI pintar dengan PicoClaw. Panduan Cepat: +Berikan kehidupan kedua untuk HP lama Anda! Ubah menjadi Asisten AI pintar dengan Piconomous. Panduan Cepat: 1. **Instal [Termux](https://github.com/termux/termux-app)** (Unduh dari [GitHub Releases](https://github.com/termux/termux-app/releases), atau cari di F-Droid / Google Play). 2. **Jalankan perintah** ```bash -# Unduh rilis terbaru dari https://github.com/sipeed/picoclaw/releases -wget https://github.com/sipeed/picoclaw/releases/latest/download/picoclaw_Linux_arm64.tar.gz -tar xzf picoclaw_Linux_arm64.tar.gz +# Unduh rilis terbaru dari https://github.com/sipeed/piconomous/releases +wget https://github.com/sipeed/piconomous/releases/latest/download/piconomous_Linux_arm64.tar.gz +tar xzf piconomous_Linux_arm64.tar.gz pkg install proot -termux-chroot ./picoclaw onboard +termux-chroot ./piconomous onboard ``` Kemudian ikuti instruksi di bagian "Panduan Cepat" untuk menyelesaikan konfigurasi! -PicoClaw +Piconomous ### 🐜 Deploy Inovatif dengan Footprint Rendah -PicoClaw dapat di-deploy di hampir semua perangkat Linux! +Piconomous dapat di-deploy di hampir semua perangkat Linux! - $9,9 [LicheeRV-Nano](https://www.aliexpress.com/item/1005006519668532.html) versi E(Ethernet) atau W(WiFi6), untuk Home Assistant Minimal - $30~50 [NanoKVM](https://www.aliexpress.com/item/1005007369816019.html), atau $100 [NanoKVM-Pro](https://www.aliexpress.com/item/1005010048471263.html) untuk Pemeliharaan Server Otomatis @@ -162,14 +162,14 @@ PicoClaw dapat di-deploy di hampir semua perangkat Linux! ### Instal dengan binary yang sudah dikompilasi -Unduh binary untuk platform Anda dari halaman [Releases](https://github.com/sipeed/picoclaw/releases). +Unduh binary untuk platform Anda dari halaman [Releases](https://github.com/sipeed/piconomous/releases). ### Instal dari source (fitur terbaru, disarankan untuk pengembangan) ```bash -git clone https://github.com/sipeed/picoclaw.git +git clone https://github.com/sipeed/piconomous.git -cd picoclaw +cd piconomous make deps # Build, tidak perlu instal @@ -211,24 +211,24 @@ Hubungkan Picoclaw ke Jaringan Sosial Agent hanya dengan mengirim satu pesan mel | Perintah | Deskripsi | | ------------------------- | -------------------------------- | -| `picoclaw onboard` | Inisialisasi konfigurasi & workspace | -| `picoclaw agent -m "..."` | Chat dengan agent | -| `picoclaw agent` | Mode chat interaktif | -| `picoclaw gateway` | Mulai gateway | -| `picoclaw status` | Tampilkan status | -| `picoclaw version` | Tampilkan info versi | -| `picoclaw cron list` | Daftar semua tugas terjadwal | -| `picoclaw cron add ...` | Tambah tugas terjadwal | -| `picoclaw cron disable` | Nonaktifkan tugas terjadwal | -| `picoclaw cron remove` | Hapus tugas terjadwal | -| `picoclaw skills list` | Daftar skill yang terinstal | -| `picoclaw skills install` | Instal skill | -| `picoclaw migrate` | Migrasi data dari versi lama | -| `picoclaw auth login` | Autentikasi dengan provider | +| `piconomous onboard` | Inisialisasi konfigurasi & workspace | +| `piconomous agent -m "..."` | Chat dengan agent | +| `piconomous agent` | Mode chat interaktif | +| `piconomous gateway` | Mulai gateway | +| `piconomous status` | Tampilkan status | +| `piconomous version` | Tampilkan info versi | +| `piconomous cron list` | Daftar semua tugas terjadwal | +| `piconomous cron add ...` | Tambah tugas terjadwal | +| `piconomous cron disable` | Nonaktifkan tugas terjadwal | +| `piconomous cron remove` | Hapus tugas terjadwal | +| `piconomous skills list` | Daftar skill yang terinstal | +| `piconomous skills install` | Instal skill | +| `piconomous migrate` | Migrasi data dari versi lama | +| `piconomous auth login` | Autentikasi dengan provider | ### Tugas Terjadwal / Pengingat -PicoClaw mendukung pengingat terjadwal dan tugas berulang melalui tool `cron`: +Piconomous mendukung pengingat terjadwal dan tugas berulang melalui tool `cron`: * **Pengingat satu kali**: "Ingatkan saya dalam 10 menit" → terpicu sekali setelah 10 menit * **Tugas berulang**: "Ingatkan saya setiap 2 jam" → terpicu setiap 2 jam @@ -238,7 +238,7 @@ PicoClaw mendukung pengingat terjadwal dan tugas berulang melalui tool `cron`: PR sangat diterima! Codebase sengaja dibuat kecil dan mudah dibaca. 🤗 -Lihat [Roadmap Komunitas](https://github.com/sipeed/picoclaw/blob/main/ROADMAP.md) lengkap kami. +Lihat [Roadmap Komunitas](https://github.com/sipeed/piconomous/blob/main/ROADMAP.md) lengkap kami. Grup pengembang sedang dibangun, bergabunglah setelah PR pertama Anda di-merge! @@ -246,4 +246,4 @@ Grup Pengguna: discord: -PicoClaw +Piconomous diff --git a/README.it.md b/README.it.md index 27027d95f..3f54d33c8 100644 --- a/README.it.md +++ b/README.it.md @@ -1,7 +1,7 @@
- PicoClaw + Piconomous -

PicoClaw: Assistente IA Ultra-Efficiente in Go

+

Piconomous: Assistente IA Ultra-Efficiente in Go

Hardware da $10 · <10MB RAM · Boot in <1s · 皮皮虾,我们走!

@@ -9,9 +9,9 @@ Hardware License
- Website - Docs - Wiki + Website + Docs + Wiki
Twitter @@ -24,9 +24,9 @@ --- -> **PicoClaw** è un progetto open-source indipendente avviato da [Sipeed](https://sipeed.com). È scritto interamente in **Go** — non è un fork di OpenClaw, NanoBot o di qualsiasi altro progetto. +> **Piconomous** è un progetto open-source indipendente avviato da [Sipeed](https://sipeed.com). È scritto interamente in **Go** — non è un fork di OpenClaw, NanoBot o di qualsiasi altro progetto. -🦐 PicoClaw è un assistente IA personale ultra-leggero ispirato a [NanoBot](https://github.com/HKUDS/nanobot), riscritto da zero in Go attraverso un processo di auto-bootstrapping, in cui l'agente IA stesso ha guidato l'intera migrazione architetturale e l'ottimizzazione del codice. +🦐 Piconomous è un assistente IA personale ultra-leggero ispirato a [NanoBot](https://github.com/HKUDS/nanobot), riscritto da zero in Go attraverso un processo di auto-bootstrapping, in cui l'agente IA stesso ha guidato l'intera migrazione architetturale e l'ottimizzazione del codice. ⚡️ Funziona su hardware da $10 con meno di 10MB di RAM: il 99% di memoria in meno rispetto a OpenClaw e il 98% più economico di un Mac mini! @@ -34,7 +34,7 @@

- +

@@ -48,31 +48,31 @@ > [!CAUTION] > **🚨 SICUREZZA & CANALI UFFICIALI** > -> * **NESSUNA CRYPTO:** PicoClaw non ha **NESSUN** token/coin ufficiale. Qualsiasi annuncio su `pump.fun` o altre piattaforme di trading è una **TRUFFA**. +> * **NESSUNA CRYPTO:** Piconomous non ha **NESSUN** token/coin ufficiale. Qualsiasi annuncio su `pump.fun` o altre piattaforme di trading è una **TRUFFA**. > -> * **DOMINIO UFFICIALE:** L'**UNICO** sito ufficiale è **[picoclaw.io](https://picoclaw.io)**, e il sito aziendale è **[sipeed.com](https://sipeed.com)**. +> * **DOMINIO UFFICIALE:** L'**UNICO** sito ufficiale è **[piconomous.io](https://piconomous.io)**, e il sito aziendale è **[sipeed.com](https://sipeed.com)**. > * **Attenzione:** Molti domini `.ai/.org/.com/.net/...` sono registrati da terze parti. -> * **Attenzione:** PicoClaw è in fase di sviluppo iniziale e potrebbe avere problemi di sicurezza di rete non risolti. Non distribuire in ambienti di produzione prima della release v1.0. -> * **Nota:** PicoClaw ha recentemente unito molte PR, il che potrebbe comportare un'impronta di memoria maggiore (10–20MB) nelle ultime versioni. Prevediamo di dare priorità all'ottimizzazione delle risorse non appena il set di funzionalità corrente raggiungerà uno stato stabile. +> * **Attenzione:** Piconomous è in fase di sviluppo iniziale e potrebbe avere problemi di sicurezza di rete non risolti. Non distribuire in ambienti di produzione prima della release v1.0. +> * **Nota:** Piconomous ha recentemente unito molte PR, il che potrebbe comportare un'impronta di memoria maggiore (10–20MB) nelle ultime versioni. Prevediamo di dare priorità all'ottimizzazione delle risorse non appena il set di funzionalità corrente raggiungerà uno stato stabile. ## 📢 Novità -2026-03-17 🚀 **v0.2.3 rilasciata!** Interfaccia system tray (Windows & Linux), tracciamento dello stato dei sub-agent (`spawn_status`), hot-reload sperimentale del gateway, gate di sicurezza per cron e 2 correzioni di sicurezza. PicoClaw raggiunge **25K ⭐**! +2026-03-17 🚀 **v0.2.3 rilasciata!** Interfaccia system tray (Windows & Linux), tracciamento dello stato dei sub-agent (`spawn_status`), hot-reload sperimentale del gateway, gate di sicurezza per cron e 2 correzioni di sicurezza. Piconomous raggiunge **25K ⭐**! 2026-03-09 🎉 **v0.2.1 — Il più grande aggiornamento di sempre!** Supporto al protocollo MCP, 4 nuovi canali (Matrix/IRC/WeCom/Discord Proxy), 3 nuovi provider (Kimi/Minimax/Avian), pipeline di visione, store di memoria JSONL e routing dei modelli. 2026-02-28 📦 **v0.2.0** rilasciata con supporto Docker Compose e launcher Web UI. -2026-02-26 🎉 PicoClaw ha raggiunto **20K stelle** in soli 17 giorni! Arrivate l'orchestrazione automatica dei canali e le interfacce di capacità. +2026-02-26 🎉 Piconomous ha raggiunto **20K stelle** in soli 17 giorni! Arrivate l'orchestrazione automatica dei canali e le interfacce di capacità.
Notizie precedenti... -2026-02-16 🎉 PicoClaw ha raggiunto 12K stelle in una settimana! Ruoli di maintainer della community e [roadmap](ROADMAP.md) pubblicati ufficialmente. +2026-02-16 🎉 Piconomous ha raggiunto 12K stelle in una settimana! Ruoli di maintainer della community e [roadmap](ROADMAP.md) pubblicati ufficialmente. -2026-02-13 🎉 PicoClaw ha raggiunto 5000 stelle in 4 giorni! Roadmap del progetto e gruppo sviluppatori in fase di avvio. +2026-02-13 🎉 Piconomous ha raggiunto 5000 stelle in 4 giorni! Roadmap del progetto e gruppo sviluppatori in fase di avvio. -2026-02-09 🎉 **PicoClaw lanciato!** Costruito in 1 giorno per portare gli agenti IA su hardware da $10 con <10MB di RAM. 🦐 PicoClaw, andiamo! +2026-02-09 🎉 **Piconomous lanciato!** Costruito in 1 giorno per portare gli agenti IA su hardware da $10 con <10MB di RAM. 🦐 Piconomous, andiamo!
@@ -96,14 +96,14 @@ _*Le versioni recenti potrebbero usare 10–20MB a causa delle fusioni rapide di funzionalità. L'ottimizzazione delle risorse è pianificata. Il confronto dell'avvio è basato su benchmark con singolo core a 0,8 GHz (vedi tabella sotto)._ -| | OpenClaw | NanoBot | **PicoClaw** | +| | OpenClaw | NanoBot | **Piconomous** | | ----------------------------- | ------------- | ------------------------ | ----------------------------------------- | | **Linguaggio** | TypeScript | Python | **Go** | | **RAM** | >1GB | >100MB | **< 10MB*** | | **Avvio**
(core 0,8 GHz) | >500s | >30s | **<1s** | | **Costo** | Mac Mini $599 | La maggior parte degli SBC Linux
~$50 | **Qualsiasi scheda Linux**
**A partire da $10** | -PicoClaw +Piconomous ## 🦾 Dimostrazione @@ -116,9 +116,9 @@ _*Le versioni recenti potrebbero usare 10–20MB a causa delle fusioni rapide di

🔎 Ricerca Web & Apprendimento

-

-

-

+

+

+

Sviluppa • Distribuisci • Scala @@ -129,26 +129,26 @@ _*Le versioni recenti potrebbero usare 10–20MB a causa delle fusioni rapide di ### 📱 Usa su vecchi telefoni Android -Dai una seconda vita al tuo telefono di dieci anni fa! Trasformalo in un assistente IA intelligente con PicoClaw. Avvio rapido: +Dai una seconda vita al tuo telefono di dieci anni fa! Trasformalo in un assistente IA intelligente con Piconomous. Avvio rapido: 1. **Installa [Termux](https://github.com/termux/termux-app)** (Scarica da [GitHub Releases](https://github.com/termux/termux-app/releases), o cerca su F-Droid / Google Play). 2. **Esegui i comandi** ```bash -# Scarica l'ultima release da https://github.com/sipeed/picoclaw/releases -wget https://github.com/sipeed/picoclaw/releases/latest/download/picoclaw_Linux_arm64.tar.gz -tar xzf picoclaw_Linux_arm64.tar.gz +# Scarica l'ultima release da https://github.com/sipeed/piconomous/releases +wget https://github.com/sipeed/piconomous/releases/latest/download/piconomous_Linux_arm64.tar.gz +tar xzf piconomous_Linux_arm64.tar.gz pkg install proot -termux-chroot ./picoclaw onboard +termux-chroot ./piconomous onboard ``` Poi segui le istruzioni nella sezione "Avvio Rapido" per completare la configurazione! -PicoClaw +Piconomous ### 🐜 Deploy Innovativo a Bassa Impronta -PicoClaw può essere distribuito su quasi qualsiasi dispositivo Linux! +Piconomous può essere distribuito su quasi qualsiasi dispositivo Linux! - $9,9 [LicheeRV-Nano](https://www.aliexpress.com/item/1005006519668532.html) versione E (Ethernet) o W (WiFi6), per un Assistente Domotico Minimale - $30~50 [NanoKVM](https://www.aliexpress.com/item/1005007369816019.html), o $100 [NanoKVM-Pro](https://www.aliexpress.com/item/1005010048471263.html) per la Manutenzione Automatizzata dei Server @@ -162,14 +162,14 @@ PicoClaw può essere distribuito su quasi qualsiasi dispositivo Linux! ### Installa con binario precompilato -Scarica il binario per la tua piattaforma dalla pagina delle [Releases](https://github.com/sipeed/picoclaw/releases). +Scarica il binario per la tua piattaforma dalla pagina delle [Releases](https://github.com/sipeed/piconomous/releases). ### Installa dai sorgenti (ultime funzionalità, consigliato per lo sviluppo) ```bash -git clone https://github.com/sipeed/picoclaw.git +git clone https://github.com/sipeed/piconomous.git -cd picoclaw +cd piconomous make deps # Compila, senza installare @@ -203,7 +203,7 @@ Per guide dettagliate, consulta la documentazione qui sotto. Il README copre sol ## ClawdChat Unisciti al Social Network degli Agent -Connetti PicoClaw al Social Network degli Agent semplicemente inviando un singolo messaggio tramite CLI o qualsiasi app di chat integrata. +Connetti Piconomous al Social Network degli Agent semplicemente inviando un singolo messaggio tramite CLI o qualsiasi app di chat integrata. **Leggi `https://clawdchat.ai/skill.md` e segui le istruzioni per unirti a [ClawdChat.ai](https://clawdchat.ai)** @@ -211,24 +211,24 @@ Connetti PicoClaw al Social Network degli Agent semplicemente inviando un singol | Comando | Descrizione | | ------------------------- | ---------------------------------- | -| `picoclaw onboard` | Inizializza config & workspace | -| `picoclaw agent -m "..."` | Chatta con l'agent | -| `picoclaw agent` | Modalità chat interattiva | -| `picoclaw gateway` | Avvia il gateway | -| `picoclaw status` | Mostra lo stato | -| `picoclaw version` | Mostra le info sulla versione | -| `picoclaw cron list` | Elenca tutti i job pianificati | -| `picoclaw cron add ...` | Aggiunge un job pianificato | -| `picoclaw cron disable` | Disabilita un job pianificato | -| `picoclaw cron remove` | Rimuove un job pianificato | -| `picoclaw skills list` | Elenca le skill installate | -| `picoclaw skills install` | Installa una skill | -| `picoclaw migrate` | Migra i dati dalle versioni precedenti | -| `picoclaw auth login` | Autenticazione con i provider | +| `piconomous onboard` | Inizializza config & workspace | +| `piconomous agent -m "..."` | Chatta con l'agent | +| `piconomous agent` | Modalità chat interattiva | +| `piconomous gateway` | Avvia il gateway | +| `piconomous status` | Mostra lo stato | +| `piconomous version` | Mostra le info sulla versione | +| `piconomous cron list` | Elenca tutti i job pianificati | +| `piconomous cron add ...` | Aggiunge un job pianificato | +| `piconomous cron disable` | Disabilita un job pianificato | +| `piconomous cron remove` | Rimuove un job pianificato | +| `piconomous skills list` | Elenca le skill installate | +| `piconomous skills install` | Installa una skill | +| `piconomous migrate` | Migra i dati dalle versioni precedenti | +| `piconomous auth login` | Autenticazione con i provider | ### Task Pianificati / Promemoria -PicoClaw supporta promemoria pianificati e task ricorrenti tramite lo strumento `cron`: +Piconomous supporta promemoria pianificati e task ricorrenti tramite lo strumento `cron`: * **Promemoria una tantum**: "Ricordami tra 10 minuti" → si attiva una volta dopo 10 min * **Task ricorrenti**: "Ricordami ogni 2 ore" → si attiva ogni 2 ore @@ -238,7 +238,7 @@ PicoClaw supporta promemoria pianificati e task ricorrenti tramite lo strumento Le PR sono benvenute! Il codice è volutamente piccolo e leggibile. 🤗 -Consulta la nostra [Roadmap della Community](https://github.com/sipeed/picoclaw/blob/main/ROADMAP.md) completa. +Consulta la nostra [Roadmap della Community](https://github.com/sipeed/piconomous/blob/main/ROADMAP.md) completa. Gruppo sviluppatori in costruzione, unisciti dopo la tua prima PR accettata! @@ -246,4 +246,4 @@ Gruppi utenti: discord: -PicoClaw +Piconomous diff --git a/README.ja.md b/README.ja.md index e5a927505..b336f04f9 100644 --- a/README.ja.md +++ b/README.ja.md @@ -1,7 +1,7 @@
- PicoClaw + Piconomous -

PicoClaw: Go で書かれた超効率 AI アシスタント

+

Piconomous: Go で書かれた超効率 AI アシスタント

$10 ハードウェア · <10MB RAM · <1秒起動 · 行くぜ、シャコ!

@@ -9,9 +9,9 @@ Hardware License
- Website - Docs - Wiki + Website + Docs + Wiki
Twitter @@ -24,9 +24,9 @@ --- -> **PicoClaw** は [Sipeed](https://sipeed.com) が立ち上げた独立したオープンソースプロジェクトです。完全に **Go 言語**で一から書かれており、OpenClaw、NanoBot、その他のプロジェクトのフォークではありません。 +> **Piconomous** は [Sipeed](https://sipeed.com) が立ち上げた独立したオープンソースプロジェクトです。完全に **Go 言語**で一から書かれており、OpenClaw、NanoBot、その他のプロジェクトのフォークではありません。 -🦐 PicoClaw は [NanoBot](https://github.com/HKUDS/nanobot) にインスパイアされた超軽量パーソナル AI アシスタントです。Go でゼロからリファクタリングされ、AI エージェント自身がアーキテクチャの移行とコード最適化を推進するセルフブートストラッピングプロセスで構築されました。 +🦐 Piconomous は [NanoBot](https://github.com/HKUDS/nanobot) にインスパイアされた超軽量パーソナル AI アシスタントです。Go でゼロからリファクタリングされ、AI エージェント自身がアーキテクチャの移行とコード最適化を推進するセルフブートストラッピングプロセスで構築されました。 ⚡️ $10 のハードウェアで 10MB 未満の RAM で動作:OpenClaw より 99% 少ないメモリ、Mac mini より 98% 安い! @@ -34,7 +34,7 @@

- +

@@ -48,31 +48,31 @@ > [!CAUTION] > **🚨 セキュリティ&公式チャンネル** > -> * **暗号通貨なし:** PicoClaw には公式トークン/コインは**一切ありません**。`pump.fun` やその他の取引プラットフォームでの主張はすべて**詐欺**です。 +> * **暗号通貨なし:** Piconomous には公式トークン/コインは**一切ありません**。`pump.fun` やその他の取引プラットフォームでの主張はすべて**詐欺**です。 > -> * **公式ドメイン:** **唯一**の公式サイトは **[picoclaw.io](https://picoclaw.io)**、企業サイトは **[sipeed.com](https://sipeed.com)** です。 +> * **公式ドメイン:** **唯一**の公式サイトは **[piconomous.io](https://piconomous.io)**、企業サイトは **[sipeed.com](https://sipeed.com)** です。 > * **注意:** 多くの `.ai/.org/.com/.net/...` ドメインは第三者によって登録されています。 -> * **注意:** PicoClaw は初期開発段階にあり、未解決のネットワークセキュリティ問題がある可能性があります。v1.0 リリース前に本番環境へのデプロイは避けてください。 -> * **注記:** PicoClaw は最近多くの PR をマージしており、最新バージョンではメモリフットプリントが大きくなる場合があります(10〜20MB)。機能セットが安定次第、リソース最適化を優先する予定です。 +> * **注意:** Piconomous は初期開発段階にあり、未解決のネットワークセキュリティ問題がある可能性があります。v1.0 リリース前に本番環境へのデプロイは避けてください。 +> * **注記:** Piconomous は最近多くの PR をマージしており、最新バージョンではメモリフットプリントが大きくなる場合があります(10〜20MB)。機能セットが安定次第、リソース最適化を優先する予定です。 ## 📢 ニュース -2026-03-17 🚀 **v0.2.3 リリース!** システムトレイ UI(Windows & Linux)、サブエージェントステータス追跡(`spawn_status`)、実験的ゲートウェイホットリロード、cron セキュリティゲート、セキュリティ修正 2 件。PicoClaw **25K ⭐** 達成! +2026-03-17 🚀 **v0.2.3 リリース!** システムトレイ UI(Windows & Linux)、サブエージェントステータス追跡(`spawn_status`)、実験的ゲートウェイホットリロード、cron セキュリティゲート、セキュリティ修正 2 件。Piconomous **25K ⭐** 達成! 2026-03-09 🎉 **v0.2.1 — 史上最大のアップデート!** MCP プロトコル対応、4 つの新チャネル(Matrix/IRC/WeCom/Discord Proxy)、3 つの新プロバイダー(Kimi/Minimax/Avian)、ビジョンパイプライン、JSONL メモリストア、モデルルーティング。 2026-02-28 📦 **v0.2.0** リリース — Docker Compose 対応と Web UI ランチャー。 -2026-02-26 🎉 PicoClaw がわずか 17 日で **20K スター** 達成!チャネル自動オーケストレーションとケイパビリティインターフェースが実装されました。 +2026-02-26 🎉 Piconomous がわずか 17 日で **20K スター** 達成!チャネル自動オーケストレーションとケイパビリティインターフェースが実装されました。
過去のニュース... -2026-02-16 🎉 PicoClaw が 1 週間で 12K スター達成!コミュニティメンテナーの役割と[ロードマップ](ROADMAP.md)が正式に公開されました。 +2026-02-16 🎉 Piconomous が 1 週間で 12K スター達成!コミュニティメンテナーの役割と[ロードマップ](ROADMAP.md)が正式に公開されました。 -2026-02-13 🎉 PicoClaw が 4 日間で 5000 スター達成!プロジェクトロードマップと開発者グループの準備が進行中。 +2026-02-13 🎉 Piconomous が 4 日間で 5000 スター達成!プロジェクトロードマップと開発者グループの準備が進行中。 -2026-02-09 🎉 **PicoClaw リリース!** $10 ハードウェアで 10MB 未満の RAM で動く AI エージェントを 1 日で構築。🦐 行くぜ、シャコ! +2026-02-09 🎉 **Piconomous リリース!** $10 ハードウェアで 10MB 未満の RAM で動く AI エージェントを 1 日で構築。🦐 行くぜ、シャコ!
@@ -96,14 +96,14 @@ _*最近のバージョンでは急速な機能マージにより 10〜20MB になる場合があります。リソース最適化は計画中です。起動時間の比較は 0.8GHz シングルコアベンチマークに基づいています(下表参照)。_ -| | OpenClaw | NanoBot | **PicoClaw** | +| | OpenClaw | NanoBot | **Piconomous** | | ----------------------------- | ------------- | ------------------------ | ----------------------------------------- | | **言語** | TypeScript | Python | **Go** | | **RAM** | >1GB | >100MB | **< 10MB*** | | **起動時間**
(0.8GHz コア) | >500秒 | >30秒 | **<1秒** | | **コスト** | Mac Mini $599 | 大半の Linux SBC
~$50 | **あらゆる Linux ボード**
**最安 $10** | -PicoClaw +Piconomous > 📋 **[ハードウェア互換性リスト](docs/hardware-compatibility.md)** — テスト済みの全ボード一覧($5 RISC-V から Raspberry Pi、Android スマートフォンまで)。お使いのボードが未掲載?PR を送ってください! @@ -118,9 +118,9 @@ _*最近のバージョンでは急速な機能マージにより 10〜20MB に

🔎 Web 検索&学習

-

-

-

+

+

+

開発 · デプロイ · スケール @@ -131,26 +131,26 @@ _*最近のバージョンでは急速な機能マージにより 10〜20MB に ### 📱 古い Android スマホで動かす -10 年前のスマホに第二の人生を!PicoClaw でスマート AI アシスタントに変身させましょう。クイックスタート: +10 年前のスマホに第二の人生を!Piconomous でスマート AI アシスタントに変身させましょう。クイックスタート: 1. **[Termux](https://github.com/termux/termux-app) をインストール**([GitHub Releases](https://github.com/termux/termux-app/releases) からダウンロード、または F-Droid / Google Play で検索)。 2. **コマンドを実行** ```bash -# https://github.com/sipeed/picoclaw/releases から最新リリースをダウンロード -wget https://github.com/sipeed/picoclaw/releases/latest/download/picoclaw_Linux_arm64.tar.gz -tar xzf picoclaw_Linux_arm64.tar.gz +# https://github.com/sipeed/piconomous/releases から最新リリースをダウンロード +wget https://github.com/sipeed/piconomous/releases/latest/download/piconomous_Linux_arm64.tar.gz +tar xzf piconomous_Linux_arm64.tar.gz pkg install proot -termux-chroot ./picoclaw onboard # chroot で標準的な Linux ファイルシステムレイアウトを提供 +termux-chroot ./piconomous onboard # chroot で標準的な Linux ファイルシステムレイアウトを提供 ``` その後「クイックスタート」セクションの手順に従って設定を完了してください! -PicoClaw +Piconomous ### 🐜 革新的な省フットプリントデプロイ -PicoClaw はほぼすべての Linux デバイスにデプロイできます! +Piconomous はほぼすべての Linux デバイスにデプロイできます! - $9.9 [LicheeRV-Nano](https://www.aliexpress.com/item/1005006519668532.html) E(Ethernet) または W(WiFi6) バージョン、最小ホームアシスタントに - $30~50 [NanoKVM](https://www.aliexpress.com/item/1005007369816019.html) または $100 [NanoKVM-Pro](https://www.aliexpress.com/item/1005010048471263.html) サーバー自動メンテナンスに @@ -162,20 +162,20 @@ PicoClaw はほぼすべての Linux デバイスにデプロイできます! ## 📦 インストール -### picoclaw.io からダウンロード(推奨) +### piconomous.io からダウンロード(推奨) -**[picoclaw.io](https://picoclaw.io)** にアクセス — 公式サイトがプラットフォームを自動検出し、ワンクリックでダウンロードできます。アーキテクチャを手動で選ぶ必要はありません。 +**[piconomous.io](https://piconomous.io)** にアクセス — 公式サイトがプラットフォームを自動検出し、ワンクリックでダウンロードできます。アーキテクチャを手動で選ぶ必要はありません。 ### プリコンパイル済みバイナリをダウンロード -または、[GitHub Releases](https://github.com/sipeed/picoclaw/releases) ページからプラットフォームに合ったバイナリをダウンロードしてください。 +または、[GitHub Releases](https://github.com/sipeed/piconomous/releases) ページからプラットフォームに合ったバイナリをダウンロードしてください。 ### ソースからビルド(開発用) ```bash -git clone https://github.com/sipeed/picoclaw.git +git clone https://github.com/sipeed/piconomous.git -cd picoclaw +cd piconomous make deps # ビルド(インストール不要) @@ -210,7 +210,7 @@ make install ## ClawdChat エージェントソーシャルネットワークに参加 -CLI または統合チャットアプリからメッセージを 1 つ送るだけで、PicoClaw をエージェントソーシャルネットワークに接続できます。 +CLI または統合チャットアプリからメッセージを 1 つ送るだけで、Piconomous をエージェントソーシャルネットワークに接続できます。 **`https://clawdchat.ai/skill.md` を読み、指示に従って [ClawdChat.ai](https://clawdchat.ai) に参加してください** @@ -218,25 +218,25 @@ CLI または統合チャットアプリからメッセージを 1 つ送るだ | コマンド | 説明 | | ------------------------- | ------------------------------ | -| `picoclaw onboard` | 設定&ワークスペースの初期化 | -| `picoclaw agent -m "..."` | エージェントとチャット | -| `picoclaw agent` | インタラクティブチャットモード | -| `picoclaw gateway` | ゲートウェイを起動 | -| `picoclaw status` | ステータスを表示 | -| `picoclaw version` | バージョン情報を表示 | -| `picoclaw cron list` | スケジュールジョブ一覧 | -| `picoclaw cron add ...` | スケジュールジョブを追加 | -| `picoclaw cron disable` | スケジュールジョブを無効化 | -| `picoclaw cron remove` | スケジュールジョブを削除 | -| `picoclaw skills list` | インストール済みスキル一覧 | -| `picoclaw skills install` | スキルをインストール | -| `picoclaw migrate` | 旧バージョンからデータを移行 | -| `picoclaw auth login` | プロバイダーへの認証 | -| `picoclaw model` | デフォルトモデルの表示・切替 | +| `piconomous onboard` | 設定&ワークスペースの初期化 | +| `piconomous agent -m "..."` | エージェントとチャット | +| `piconomous agent` | インタラクティブチャットモード | +| `piconomous gateway` | ゲートウェイを起動 | +| `piconomous status` | ステータスを表示 | +| `piconomous version` | バージョン情報を表示 | +| `piconomous cron list` | スケジュールジョブ一覧 | +| `piconomous cron add ...` | スケジュールジョブを追加 | +| `piconomous cron disable` | スケジュールジョブを無効化 | +| `piconomous cron remove` | スケジュールジョブを削除 | +| `piconomous skills list` | インストール済みスキル一覧 | +| `piconomous skills install` | スキルをインストール | +| `piconomous migrate` | 旧バージョンからデータを移行 | +| `piconomous auth login` | プロバイダーへの認証 | +| `piconomous model` | デフォルトモデルの表示・切替 | ### スケジュールタスク / リマインダー -PicoClaw は `cron` ツールによるスケジュールリマインダーと定期タスクをサポートしています: +Piconomous は `cron` ツールによるスケジュールリマインダーと定期タスクをサポートしています: * **ワンタイムリマインダー**: 「10分後にリマインド」→ 10分後に1回トリガー * **定期タスク**: 「2時間ごとにリマインド」→ 2時間ごとにトリガー @@ -246,7 +246,7 @@ PicoClaw は `cron` ツールによるスケジュールリマインダーと定 PR 歓迎!コードベースは意図的に小さく読みやすくしています。🤗 -完全な[コミュニティロードマップ](https://github.com/sipeed/picoclaw/blob/main/ROADMAP.md)をご覧ください。 +完全な[コミュニティロードマップ](https://github.com/sipeed/piconomous/blob/main/ROADMAP.md)をご覧ください。 開発者グループ構築中、最初の PR がマージされたら参加できます! @@ -254,4 +254,4 @@ PR 歓迎!コードベースは意図的に小さく読みやすくしてい discord: -PicoClaw +Piconomous diff --git a/README.md b/README.md index 652792d83..5907bdece 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@
- PicoClaw + Piconomous -

PicoClaw: Ultra-Efficient AI Assistant in Go

+

Piconomous: Ultra-Efficient AI Assistant in Go

$10 Hardware · <10MB RAM · <1s Boot · 皮皮虾,我们走!

@@ -9,9 +9,9 @@ Hardware License
- Website - Docs - Wiki + Website + Docs + Wiki
Twitter @@ -24,9 +24,9 @@ --- -> **PicoClaw** is an independent open-source project initiated by [Sipeed](https://sipeed.com). It is written entirely in **Go** — not a fork of OpenClaw, NanoBot, or any other project. +> **Piconomous** is an independent open-source project initiated by [Sipeed](https://sipeed.com). It is written entirely in **Go** — not a fork of OpenClaw, NanoBot, or any other project. -🦐 PicoClaw is an ultra-lightweight personal AI Assistant inspired by [NanoBot](https://github.com/HKUDS/nanobot), refactored from the ground up in Go through a self-bootstrapping process, where the AI agent itself drove the entire architectural migration and code optimization. +🦐 Piconomous is an ultra-lightweight personal AI Assistant inspired by [NanoBot](https://github.com/HKUDS/nanobot), refactored from the ground up in Go through a self-bootstrapping process, where the AI agent itself drove the entire architectural migration and code optimization. ⚡️ Runs on $10 hardware with <10MB RAM: That's 99% less memory than OpenClaw and 98% cheaper than a Mac mini! @@ -34,7 +34,7 @@

- +

@@ -48,31 +48,31 @@ > [!CAUTION] > **🚨 SECURITY & OFFICIAL CHANNELS / 安全声明** > -> * **NO CRYPTO:** PicoClaw has **NO** official token/coin. All claims on `pump.fun` or other trading platforms are **SCAMS**. +> * **NO CRYPTO:** Piconomous has **NO** official token/coin. All claims on `pump.fun` or other trading platforms are **SCAMS**. > -> * **OFFICIAL DOMAIN:** The **ONLY** official website is **[picoclaw.io](https://picoclaw.io)**, and company website is **[sipeed.com](https://sipeed.com)** +> * **OFFICIAL DOMAIN:** The **ONLY** official website is **[piconomous.io](https://piconomous.io)**, and company website is **[sipeed.com](https://sipeed.com)** > * **Warning:** Many `.ai/.org/.com/.net/...` domains are registered by third parties. -> * **Warning:** picoclaw is in early development now and may have unresolved network security issues. Do not deploy to production environments before the v1.0 release. -> * **Note:** picoclaw has recently merged a lot of PRs, which may result in a larger memory footprint (10–20MB) in the latest versions. We plan to prioritize resource optimization as soon as the current feature set reaches a stable state. +> * **Warning:** piconomous is in early development now and may have unresolved network security issues. Do not deploy to production environments before the v1.0 release. +> * **Note:** piconomous has recently merged a lot of PRs, which may result in a larger memory footprint (10–20MB) in the latest versions. We plan to prioritize resource optimization as soon as the current feature set reaches a stable state. ## 📢 News -2026-03-17 🚀 **v0.2.3 Released!** System tray UI (Windows & Linux), sub-agent status tracking (`spawn_status`), experimental gateway hot-reload, cron security gates, and 2 security fixes. PicoClaw now at **25K ⭐**! +2026-03-17 🚀 **v0.2.3 Released!** System tray UI (Windows & Linux), sub-agent status tracking (`spawn_status`), experimental gateway hot-reload, cron security gates, and 2 security fixes. Piconomous now at **25K ⭐**! 2026-03-09 🎉 **v0.2.1 — Biggest update yet!** MCP protocol support, 4 new channels (Matrix/IRC/WeCom/Discord Proxy), 3 new providers (Kimi/Minimax/Avian), vision pipeline, JSONL memory store, and model routing. 2026-02-28 📦 **v0.2.0** released with Docker Compose support and Web UI launcher. -2026-02-26 🎉 PicoClaw hit **20K stars** in just 17 days! Channel auto-orchestration and capability interfaces landed. +2026-02-26 🎉 Piconomous hit **20K stars** in just 17 days! Channel auto-orchestration and capability interfaces landed.
Older news... -2026-02-16 🎉 PicoClaw hit 12K stars in one week! Community maintainer roles and [roadmap](ROADMAP.md) officially posted. +2026-02-16 🎉 Piconomous hit 12K stars in one week! Community maintainer roles and [roadmap](ROADMAP.md) officially posted. -2026-02-13 🎉 PicoClaw hit 5000 stars in 4 days! Project Roadmap and Developer Group setup underway. +2026-02-13 🎉 Piconomous hit 5000 stars in 4 days! Project Roadmap and Developer Group setup underway. -2026-02-09 🎉 **PicoClaw Launched!** Built in 1 day to bring AI Agents to $10 hardware with <10MB RAM. 🦐 PicoClaw,Let's Go! +2026-02-09 🎉 **Piconomous Launched!** Built in 1 day to bring AI Agents to $10 hardware with <10MB RAM. 🦐 Piconomous,Let's Go!
@@ -96,14 +96,14 @@ _*Recent versions may use 10–20MB due to rapid feature merges. Resource optimization is planned. Startup comparison based on 0.8GHz single-core benchmarks (see table below)._ -| | OpenClaw | NanoBot | **PicoClaw** | +| | OpenClaw | NanoBot | **Piconomous** | | ----------------------------- | ------------- | ------------------------ | ----------------------------------------- | | **Language** | TypeScript | Python | **Go** | | **RAM** | >1GB | >100MB | **< 10MB*** | | **Startup**
(0.8GHz core) | >500s | >30s | **<1s** | | **Cost** | Mac Mini $599 | Most Linux SBC
~$50 | **Any Linux Board**
**As low as $10** | -PicoClaw +Piconomous > 📋 **[Hardware Compatibility List](docs/hardware-compatibility.md)** — See all tested boards, from $5 RISC-V to Raspberry Pi to Android phones. Your board not listed? Submit a PR! @@ -118,9 +118,9 @@ _*Recent versions may use 10–20MB due to rapid feature merges. Resource optimi

🔎 Web Search & Learning

-

-

-

+

+

+

Develop • Deploy • Scale @@ -131,26 +131,26 @@ _*Recent versions may use 10–20MB due to rapid feature merges. Resource optimi ### 📱 Run on old Android Phones -Give your decade-old phone a second life! Turn it into a smart AI Assistant with PicoClaw. Quick Start: +Give your decade-old phone a second life! Turn it into a smart AI Assistant with Piconomous. Quick Start: 1. **Install [Termux](https://github.com/termux/termux-app)** (Download from [GitHub Releases](https://github.com/termux/termux-app/releases), or search in F-Droid / Google Play). 2. **Execute cmds** ```bash -# Download the latest release from https://github.com/sipeed/picoclaw/releases -wget https://github.com/sipeed/picoclaw/releases/latest/download/picoclaw_Linux_arm64.tar.gz -tar xzf picoclaw_Linux_arm64.tar.gz +# Download the latest release from https://github.com/sipeed/piconomous/releases +wget https://github.com/sipeed/piconomous/releases/latest/download/piconomous_Linux_arm64.tar.gz +tar xzf piconomous_Linux_arm64.tar.gz pkg install proot -termux-chroot ./picoclaw onboard # chroot provides a standard Linux filesystem layout +termux-chroot ./piconomous onboard # chroot provides a standard Linux filesystem layout ``` And then follow the instructions in the "Quick Start" section to complete the configuration! -PicoClaw +Piconomous ### 🐜 Innovative Low-Footprint Deploy -PicoClaw can be deployed on almost any Linux device! +Piconomous can be deployed on almost any Linux device! - $9.9 [LicheeRV-Nano](https://www.aliexpress.com/item/1005006519668532.html) E(Ethernet) or W(WiFi6) version, for Minimal Home Assistant - $30~50 [NanoKVM](https://www.aliexpress.com/item/1005007369816019.html), or $100 [NanoKVM-Pro](https://www.aliexpress.com/item/1005010048471263.html) for Automated Server Maintenance @@ -162,20 +162,20 @@ PicoClaw can be deployed on almost any Linux device! ## 📦 Install -### Download from picoclaw.io (Recommended) +### Download from piconomous.io (Recommended) -Visit **[picoclaw.io](https://picoclaw.io)** — the official website auto-detects your platform and provides one-click download. No need to manually pick an architecture. +Visit **[piconomous.io](https://piconomous.io)** — the official website auto-detects your platform and provides one-click download. No need to manually pick an architecture. ### Download precompiled binary -Alternatively, download the binary for your platform from the [GitHub Releases](https://github.com/sipeed/picoclaw/releases) page. +Alternatively, download the binary for your platform from the [GitHub Releases](https://github.com/sipeed/piconomous/releases) page. ### Build from source (for development) ```bash -git clone https://github.com/sipeed/picoclaw.git +git clone https://github.com/sipeed/piconomous.git -cd picoclaw +cd piconomous make deps # Build, no need to install @@ -199,8 +199,8 @@ For detailed guides, see the docs below. The README covers quick start only. ```bash # 1. Clone this repo -git clone https://github.com/sipeed/picoclaw.git -cd picoclaw +git clone https://github.com/sipeed/piconomous.git +cd piconomous # 2. First run — auto-generates docker/data/config.json then exits docker compose -f docker/docker-compose.yml --profile gateway up @@ -214,11 +214,11 @@ docker compose -f docker/docker-compose.yml --profile gateway up -d ``` > [!TIP] -> **Docker Users**: By default, the Gateway listens on `127.0.0.1` which is not accessible from the host. If you need to access the health endpoints or expose ports, set `PICOCLAW_GATEWAY_HOST=0.0.0.0` in your environment or update `config.json`. +> **Docker Users**: By default, the Gateway listens on `127.0.0.1` which is not accessible from the host. If you need to access the health endpoints or expose ports, set `PICONOMOUS_GATEWAY_HOST=0.0.0.0` in your environment or update `config.json`. ```bash # 5. Check logs -docker compose -f docker/docker-compose.yml logs -f picoclaw-gateway +docker compose -f docker/docker-compose.yml logs -f piconomous-gateway # 6. Stop docker compose -f docker/docker-compose.yml --profile gateway down @@ -226,7 +226,7 @@ docker compose -f docker/docker-compose.yml --profile gateway down ### Launcher Mode (Web Console) -The `launcher` image includes all three binaries (`picoclaw`, `picoclaw-launcher`, `picoclaw-launcher-tui`) and starts the web console by default, which provides a browser-based UI for configuration and chat. +The `launcher` image includes all three binaries (`piconomous`, `piconomous-launcher`, `piconomous-launcher-tui`) and starts the web console by default, which provides a browser-based UI for configuration and chat. ```bash docker compose -f docker/docker-compose.yml --profile launcher up -d @@ -241,10 +241,10 @@ Open http://localhost:18800 in your browser. The launcher manages the gateway pr ```bash # Ask a question -docker compose -f docker/docker-compose.yml run --rm picoclaw-agent -m "What is 2+2?" +docker compose -f docker/docker-compose.yml run --rm piconomous-agent -m "What is 2+2?" # Interactive mode -docker compose -f docker/docker-compose.yml run --rm picoclaw-agent +docker compose -f docker/docker-compose.yml run --rm piconomous-agent ``` ### Update @@ -257,21 +257,21 @@ docker compose -f docker/docker-compose.yml --profile gateway up -d ### 🚀 Quick Start > [!TIP] -> Set your API Key in `~/.picoclaw/config.json`. Get API Keys: [Volcengine (CodingPlan)](https://console.volcengine.com) (LLM) · [OpenRouter](https://openrouter.ai/keys) (LLM) · [Zhipu](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys) (LLM). Web search is optional — get a free [Tavily API](https://tavily.com) (1000 free queries/month) or [Brave Search API](https://brave.com/search/api) (2000 free queries/month). +> Set your API Key in `~/.piconomous/config.json`. Get API Keys: [Volcengine (CodingPlan)](https://console.volcengine.com) (LLM) · [OpenRouter](https://openrouter.ai/keys) (LLM) · [Zhipu](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys) (LLM). Web search is optional — get a free [Tavily API](https://tavily.com) (1000 free queries/month) or [Brave Search API](https://brave.com/search/api) (2000 free queries/month). **1. Initialize** ```bash -picoclaw onboard +piconomous onboard ``` -**2. Configure** (`~/.picoclaw/config.json`) +**2. Configure** (`~/.piconomous/config.json`) ```json { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "model_name": "gpt-5.4", "max_tokens": 8192, "temperature": 0.7, @@ -328,7 +328,7 @@ picoclaw onboard ``` > **New**: The `model_list` configuration format allows zero-code provider addition. See [Model Configuration](#model-configuration-model_list) for details. -> `request_timeout` is optional and uses seconds. If omitted or set to `<= 0`, PicoClaw uses the default timeout (120s). +> `request_timeout` is optional and uses seconds. If omitted or set to `<= 0`, Piconomous uses the default timeout (120s). **3. Get API Keys** @@ -345,7 +345,7 @@ picoclaw onboard **4. Chat** ```bash -picoclaw agent -m "What is 2+2?" +piconomous agent -m "What is 2+2?" ``` That's it! You have a working AI assistant in 2 minutes. @@ -354,7 +354,7 @@ That's it! You have a working AI assistant in 2 minutes. ## 💬 Chat Apps -Talk to your picoclaw through Telegram, Discord, WhatsApp, Matrix, QQ, DingTalk, LINE, or WeCom +Talk to your piconomous through Telegram, Discord, WhatsApp, Matrix, QQ, DingTalk, LINE, or WeCom > **Note**: All webhook-based channels (LINE, WeCom, etc.) are served on a single shared Gateway HTTP server (`gateway.host`:`gateway.port`, default `127.0.0.1:18790`). There are no per-channel ports to configure. Note: Feishu uses WebSocket/SDK mode and does not use the shared HTTP webhook server. @@ -397,15 +397,15 @@ Talk to your picoclaw through Telegram, Discord, WhatsApp, Matrix, QQ, DingTalk, **3. Run** ```bash -picoclaw gateway +piconomous gateway ``` **4. Telegram command menu (auto-registered at startup)** -PicoClaw now keeps command definitions in one shared registry. On startup, Telegram will automatically register supported bot commands (for example `/start`, `/help`, `/show`, `/list`) so command menu and runtime behavior stay in sync. +Piconomous now keeps command definitions in one shared registry. On startup, Telegram will automatically register supported bot commands (for example `/start`, `/help`, `/show`, `/list`) so command menu and runtime behavior stay in sync. Telegram command menu registration remains channel-local discovery UX; generic command execution is handled centrally in the agent loop via the commands executor. -If command registration fails (network/API transient errors), the channel still starts and PicoClaw retries registration in the background. +If command registration fails (network/API transient errors), the channel still starts and Piconomous retries registration in the background. @@ -477,7 +477,7 @@ You can also trigger by keyword prefixes (e.g. `!bot`): **6. Run** ```bash -picoclaw gateway +piconomous gateway ``` @@ -485,7 +485,7 @@ picoclaw gateway
WhatsApp (native via whatsmeow) -PicoClaw can connect to WhatsApp in two ways: +Piconomous can connect to WhatsApp in two ways: - **Native (recommended):** In-process using [whatsmeow](https://github.com/tulir/whatsmeow). No separate bridge. Set `"use_native": true` and leave `bridge_url` empty. On first run, scan the QR code with WhatsApp (Linked Devices). Session is stored under your workspace (e.g. `workspace/whatsapp/`). The native channel is **optional** to keep the default binary small; build with `-tags whatsapp_native` (e.g. `make build-whatsapp-native` or `go build -tags whatsapp_native ./cmd/...`). - **Bridge:** Connect to an external WebSocket bridge. Set `bridge_url` (e.g. `ws://localhost:3001`) and keep `use_native` false. @@ -505,7 +505,7 @@ PicoClaw can connect to WhatsApp in two ways: } ``` -If `session_store_path` is empty, the session is stored in `<workspace>/whatsapp/`. Run `picoclaw gateway`; on first run, scan the QR code printed in the terminal with WhatsApp → Linked Devices. +If `session_store_path` is empty, the session is stored in `<workspace>/whatsapp/`. Run `piconomous gateway`; on first run, scan the QR code printed in the terminal with WhatsApp → Linked Devices.
@@ -537,7 +537,7 @@ If `session_store_path` is empty, the session is stored in `<workspace>/wh **3. Run** ```bash -picoclaw gateway +piconomous gateway ``` @@ -571,7 +571,7 @@ picoclaw gateway **3. Run** ```bash -picoclaw gateway +piconomous gateway ``` @@ -602,7 +602,7 @@ picoclaw gateway **3. Run** ```bash -picoclaw gateway +piconomous gateway ``` For full options (`device_id`, `join_on_invite`, `group_trigger`, `placeholder`, `reasoning_channel_id`), see [Matrix Channel Configuration Guide](docs/channels/matrix/README.md). @@ -650,7 +650,7 @@ Then set the Webhook URL in LINE Developers Console to `https://your-domain/webh **4. Run** ```bash -picoclaw gateway +piconomous gateway ``` > In group chats, the bot responds only when @mentioned. Replies quote the original message. @@ -660,7 +660,7 @@ picoclaw gateway
WeCom (企业微信) -PicoClaw supports three types of WeCom integration: +Piconomous supports three types of WeCom integration: **Option 1: WeCom Bot (Bot)** - Easier setup, supports group chats **Option 2: WeCom App (Custom App)** - More features, proactive messaging, private chat only @@ -695,7 +695,7 @@ See [WeCom AI Bot Configuration Guide](docs/channels/wecom/wecom_aibot/README.zh **3. Run** ```bash -picoclaw gateway +piconomous gateway ``` > **Note**: WeCom AI Bot uses streaming pull protocol — no reply timeout concerns. Long tasks (>30 seconds) automatically switch to `response_url` push delivery. @@ -712,24 +712,24 @@ Connect Picoclaw to the Agent Social Network simply by sending a single message | Command | Description | | ------------------------- | ----------------------------- | -| `picoclaw onboard` | Initialize config & workspace | -| `picoclaw agent -m "..."` | Chat with the agent | -| `picoclaw agent` | Interactive chat mode | -| `picoclaw gateway` | Start the gateway | -| `picoclaw status` | Show status | -| `picoclaw version` | Show version info | -| `picoclaw cron list` | List all scheduled jobs | -| `picoclaw cron add ...` | Add a scheduled job | -| `picoclaw cron disable` | Disable a scheduled job | -| `picoclaw cron remove` | Remove a scheduled job | -| `picoclaw skills list` | List installed skills | -| `picoclaw skills install` | Install a skill | -| `picoclaw migrate` | Migrate data from older versions | -| `picoclaw auth login` | Authenticate with providers | +| `piconomous onboard` | Initialize config & workspace | +| `piconomous agent -m "..."` | Chat with the agent | +| `piconomous agent` | Interactive chat mode | +| `piconomous gateway` | Start the gateway | +| `piconomous status` | Show status | +| `piconomous version` | Show version info | +| `piconomous cron list` | List all scheduled jobs | +| `piconomous cron add ...` | Add a scheduled job | +| `piconomous cron disable` | Disable a scheduled job | +| `piconomous cron remove` | Remove a scheduled job | +| `piconomous skills list` | List installed skills | +| `piconomous skills install` | Install a skill | +| `piconomous migrate` | Migrate data from older versions | +| `piconomous auth login` | Authenticate with providers | ### Scheduled Tasks / Reminders -PicoClaw supports scheduled reminders and recurring tasks through the `cron` tool: +Piconomous supports scheduled reminders and recurring tasks through the `cron` tool: * **One-time reminders**: "Remind me in 10 minutes" → triggers once after 10min * **Recurring tasks**: "Remind me every 2 hours" → triggers every 2 hours @@ -739,7 +739,7 @@ PicoClaw supports scheduled reminders and recurring tasks through the `cron` too PRs welcome! The codebase is intentionally small and readable. 🤗 -See our full [Community Roadmap](https://github.com/sipeed/picoclaw/blob/main/ROADMAP.md). +See our full [Community Roadmap](https://github.com/sipeed/piconomous/blob/main/ROADMAP.md). Developer group building, join after your first merged PR! @@ -747,10 +747,10 @@ User Groups: discord: -PicoClaw center"> - PicoClaw +Piconomous center"> + Piconomous -

PicoClaw: Ultra-Efficient AI Assistant in Go

+

Piconomous: Ultra-Efficient AI Assistant in Go

$10 Hardware · <10MB RAM · <1s Boot · 皮皮虾,我们走!

@@ -758,9 +758,9 @@ discord: Hardware License
- Website - Docs - Wiki + Website + Docs + Wiki
Twitter @@ -773,9 +773,9 @@ discord: --- -> **PicoClaw** is an independent open-source project initiated by [Sipeed](https://sipeed.com). It is written entirely in **Go** — not a fork of OpenClaw, NanoBot, or any other project. +> **Piconomous** is an independent open-source project initiated by [Sipeed](https://sipeed.com). It is written entirely in **Go** — not a fork of OpenClaw, NanoBot, or any other project. -🦐 PicoClaw is an ultra-lightweight personal AI Assistant inspired by [NanoBot](https://github.com/HKUDS/nanobot), refactored from the ground up in Go through a self-bootstrapping process, where the AI agent itself drove the entire architectural migration and code optimization. +🦐 Piconomous is an ultra-lightweight personal AI Assistant inspired by [NanoBot](https://github.com/HKUDS/nanobot), refactored from the ground up in Go through a self-bootstrapping process, where the AI agent itself drove the entire architectural migration and code optimization. ⚡️ Runs on $10 hardware with <10MB RAM: That's 99% less memory than OpenClaw and 98% cheaper than a Mac mini! @@ -783,7 +783,7 @@ discord:

- +

@@ -797,31 +797,31 @@ discord: > [!CAUTION] > **🚨 SECURITY & OFFICIAL CHANNELS / 安全声明** > -> * **NO CRYPTO:** PicoClaw has **NO** official token/coin. All claims on `pump.fun` or other trading platforms are **SCAMS**. +> * **NO CRYPTO:** Piconomous has **NO** official token/coin. All claims on `pump.fun` or other trading platforms are **SCAMS**. > -> * **OFFICIAL DOMAIN:** The **ONLY** official website is **[picoclaw.io](https://picoclaw.io)**, and company website is **[sipeed.com](https://sipeed.com)** +> * **OFFICIAL DOMAIN:** The **ONLY** official website is **[piconomous.io](https://piconomous.io)**, and company website is **[sipeed.com](https://sipeed.com)** > * **Warning:** Many `.ai/.org/.com/.net/...` domains are registered by third parties. -> * **Warning:** picoclaw is in early development now and may have unresolved network security issues. Do not deploy to production environments before the v1.0 release. -> * **Note:** picoclaw has recently merged a lot of PRs, which may result in a larger memory footprint (10–20MB) in the latest versions. We plan to prioritize resource optimization as soon as the current feature set reaches a stable state. +> * **Warning:** piconomous is in early development now and may have unresolved network security issues. Do not deploy to production environments before the v1.0 release. +> * **Note:** piconomous has recently merged a lot of PRs, which may result in a larger memory footprint (10–20MB) in the latest versions. We plan to prioritize resource optimization as soon as the current feature set reaches a stable state. ## 📢 News -2026-03-17 🚀 **v0.2.3 Released!** System tray UI (Windows & Linux), sub-agent status tracking (`spawn_status`), experimental gateway hot-reload, cron security gates, and 2 security fixes. PicoClaw now at **25K ⭐**! +2026-03-17 🚀 **v0.2.3 Released!** System tray UI (Windows & Linux), sub-agent status tracking (`spawn_status`), experimental gateway hot-reload, cron security gates, and 2 security fixes. Piconomous now at **25K ⭐**! 2026-03-09 🎉 **v0.2.1 — Biggest update yet!** MCP protocol support, 4 new channels (Matrix/IRC/WeCom/Discord Proxy), 3 new providers (Kimi/Minimax/Avian), vision pipeline, JSONL memory store, and model routing. 2026-02-28 📦 **v0.2.0** released with Docker Compose support and Web UI launcher. -2026-02-26 🎉 PicoClaw hit **20K stars** in just 17 days! Channel auto-orchestration and capability interfaces landed. +2026-02-26 🎉 Piconomous hit **20K stars** in just 17 days! Channel auto-orchestration and capability interfaces landed.
Older news... -2026-02-16 🎉 PicoClaw hit 12K stars in one week! Community maintainer roles and [roadmap](ROADMAP.md) officially posted. +2026-02-16 🎉 Piconomous hit 12K stars in one week! Community maintainer roles and [roadmap](ROADMAP.md) officially posted. -2026-02-13 🎉 PicoClaw hit 5000 stars in 4 days! Project Roadmap and Developer Group setup underway. +2026-02-13 🎉 Piconomous hit 5000 stars in 4 days! Project Roadmap and Developer Group setup underway. -2026-02-09 🎉 **PicoClaw Launched!** Built in 1 day to bring AI Agents to $10 hardware with <10MB RAM. 🦐 PicoClaw,Let's Go! +2026-02-09 🎉 **Piconomous Launched!** Built in 1 day to bring AI Agents to $10 hardware with <10MB RAM. 🦐 Piconomous,Let's Go!
@@ -845,14 +845,14 @@ discord: _*Recent versions may use 10–20MB due to rapid feature merges. Resource optimization is planned. Startup comparison based on 0.8GHz single-core benchmarks (see table below)._ -| | OpenClaw | NanoBot | **PicoClaw** | +| | OpenClaw | NanoBot | **Piconomous** | | ----------------------------- | ------------- | ------------------------ | ----------------------------------------- | | **Language** | TypeScript | Python | **Go** | | **RAM** | >1GB | >100MB | **< 10MB*** | | **Startup**
(0.8GHz core) | >500s | >30s | **<1s** | | **Cost** | Mac Mini $599 | Most Linux SBC
~$50 | **Any Linux Board**
**As low as $10** | -PicoClaw +Piconomous > 📋 **[Hardware Compatibility List](docs/hardware-compatibility.md)** — See all tested boards, from $5 RISC-V to Raspberry Pi to Android phones. Your board not listed? Submit a PR! @@ -867,9 +867,9 @@ _*Recent versions may use 10–20MB due to rapid feature merges. Resource optimi

🔎 Web Search & Learning

-

-

-

+

+

+

Develop • Deploy • Scale @@ -880,26 +880,26 @@ _*Recent versions may use 10–20MB due to rapid feature merges. Resource optimi ### 📱 Run on old Android Phones -Give your decade-old phone a second life! Turn it into a smart AI Assistant with PicoClaw. Quick Start: +Give your decade-old phone a second life! Turn it into a smart AI Assistant with Piconomous. Quick Start: 1. **Install [Termux](https://github.com/termux/termux-app)** (Download from [GitHub Releases](https://github.com/termux/termux-app/releases), or search in F-Droid / Google Play). 2. **Execute cmds** ```bash -# Download the latest release from https://github.com/sipeed/picoclaw/releases -wget https://github.com/sipeed/picoclaw/releases/latest/download/picoclaw_Linux_arm64.tar.gz -tar xzf picoclaw_Linux_arm64.tar.gz +# Download the latest release from https://github.com/sipeed/piconomous/releases +wget https://github.com/sipeed/piconomous/releases/latest/download/piconomous_Linux_arm64.tar.gz +tar xzf piconomous_Linux_arm64.tar.gz pkg install proot -termux-chroot ./picoclaw onboard +termux-chroot ./piconomous onboard ``` And then follow the instructions in the "Quick Start" section to complete the configuration! -PicoClaw +Piconomous ### 🐜 Innovative Low-Footprint Deploy -PicoClaw can be deployed on almost any Linux device! +Piconomous can be deployed on almost any Linux device! - $9.9 [LicheeRV-Nano](https://www.aliexpress.com/item/1005006519668532.html) E(Ethernet) or W(WiFi6) version, for Minimal Home Assistant - $30~50 [NanoKVM](https://www.aliexpress.com/item/1005007369816019.html), or $100 [NanoKVM-Pro](https://www.aliexpress.com/item/1005010048471263.html) for Automated Server Maintenance @@ -913,14 +913,14 @@ PicoClaw can be deployed on almost any Linux device! ### Install with precompiled binary -Download the binary for your platform from the [Releases](https://github.com/sipeed/picoclaw/releases) page. +Download the binary for your platform from the [Releases](https://github.com/sipeed/piconomous/releases) page. ### Install from source (latest features, recommended for development) ```bash -git clone https://github.com/sipeed/picoclaw.git +git clone https://github.com/sipeed/piconomous.git -cd picoclaw +cd piconomous make deps # Build, no need to install @@ -944,8 +944,8 @@ For detailed guides, see the docs below. The README covers quick start only. ```bash # 1. Clone this repo -git clone https://github.com/sipeed/picoclaw.git -cd picoclaw +git clone https://github.com/sipeed/piconomous.git +cd piconomous # 2. First run — auto-generates docker/data/config.json then exits docker compose -f docker/docker-compose.yml --profile gateway up @@ -959,11 +959,11 @@ docker compose -f docker/docker-compose.yml --profile gateway up -d ``` > [!TIP] -> **Docker Users**: By default, the Gateway listens on `127.0.0.1` which is not accessible from the host. If you need to access the health endpoints or expose ports, set `PICOCLAW_GATEWAY_HOST=0.0.0.0` in your environment or update `config.json`. +> **Docker Users**: By default, the Gateway listens on `127.0.0.1` which is not accessible from the host. If you need to access the health endpoints or expose ports, set `PICONOMOUS_GATEWAY_HOST=0.0.0.0` in your environment or update `config.json`. ```bash # 5. Check logs -docker compose -f docker/docker-compose.yml logs -f picoclaw-gateway +docker compose -f docker/docker-compose.yml logs -f piconomous-gateway # 6. Stop docker compose -f docker/docker-compose.yml --profile gateway down @@ -971,7 +971,7 @@ docker compose -f docker/docker-compose.yml --profile gateway down ### Launcher Mode (Web Console) -The `launcher` image includes all three binaries (`picoclaw`, `picoclaw-launcher`, `picoclaw-launcher-tui`) and starts the web console by default, which provides a browser-based UI for configuration and chat. +The `launcher` image includes all three binaries (`piconomous`, `piconomous-launcher`, `piconomous-launcher-tui`) and starts the web console by default, which provides a browser-based UI for configuration and chat. ```bash docker compose -f docker/docker-compose.yml --profile launcher up -d @@ -986,10 +986,10 @@ Open http://localhost:18800 in your browser. The launcher manages the gateway pr ```bash # Ask a question -docker compose -f docker/docker-compose.yml run --rm picoclaw-agent -m "What is 2+2?" +docker compose -f docker/docker-compose.yml run --rm piconomous-agent -m "What is 2+2?" # Interactive mode -docker compose -f docker/docker-compose.yml run --rm picoclaw-agent +docker compose -f docker/docker-compose.yml run --rm piconomous-agent ``` ### Update @@ -1002,21 +1002,21 @@ docker compose -f docker/docker-compose.yml --profile gateway up -d ### 🚀 Quick Start > [!TIP] -> Set your API Key in `~/.picoclaw/config.json`. Get API Keys: [Volcengine (CodingPlan)](https://console.volcengine.com) (LLM) · [OpenRouter](https://openrouter.ai/keys) (LLM) · [Zhipu](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys) (LLM). Web search is optional — get a free [Tavily API](https://tavily.com) (1000 free queries/month) or [Brave Search API](https://brave.com/search/api) (2000 free queries/month). +> Set your API Key in `~/.piconomous/config.json`. Get API Keys: [Volcengine (CodingPlan)](https://console.volcengine.com) (LLM) · [OpenRouter](https://openrouter.ai/keys) (LLM) · [Zhipu](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys) (LLM). Web search is optional — get a free [Tavily API](https://tavily.com) (1000 free queries/month) or [Brave Search API](https://brave.com/search/api) (2000 free queries/month). **1. Initialize** ```bash -picoclaw onboard +piconomous onboard ``` -**2. Configure** (`~/.picoclaw/config.json`) +**2. Configure** (`~/.piconomous/config.json`) ```json { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "model_name": "gpt-5.4", "max_tokens": 8192, "temperature": 0.7, @@ -1073,7 +1073,7 @@ picoclaw onboard ``` > **New**: The `model_list` configuration format allows zero-code provider addition. See [Model Configuration](#model-configuration-model_list) for details. -> `request_timeout` is optional and uses seconds. If omitted or set to `<= 0`, PicoClaw uses the default timeout (120s). +> `request_timeout` is optional and uses seconds. If omitted or set to `<= 0`, Piconomous uses the default timeout (120s). **3. Get API Keys** @@ -1090,7 +1090,7 @@ picoclaw onboard **4. Chat** ```bash -picoclaw agent -m "What is 2+2?" +piconomous agent -m "What is 2+2?" ``` That's it! You have a working AI assistant in 2 minutes. @@ -1099,7 +1099,7 @@ That's it! You have a working AI assistant in 2 minutes. ## 💬 Chat Apps -Talk to your picoclaw through Telegram, Discord, WhatsApp, Matrix, QQ, DingTalk, LINE, or WeCom +Talk to your piconomous through Telegram, Discord, WhatsApp, Matrix, QQ, DingTalk, LINE, or WeCom > **Note**: All webhook-based channels (LINE, WeCom, etc.) are served on a single shared Gateway HTTP server (`gateway.host`:`gateway.port`, default `127.0.0.1:18790`). There are no per-channel ports to configure. Note: Feishu uses WebSocket/SDK mode and does not use the shared HTTP webhook server. @@ -1142,15 +1142,15 @@ Talk to your picoclaw through Telegram, Discord, WhatsApp, Matrix, QQ, DingTalk, **3. Run** ```bash -picoclaw gateway +piconomous gateway ``` **4. Telegram command menu (auto-registered at startup)** -PicoClaw now keeps command definitions in one shared registry. On startup, Telegram will automatically register supported bot commands (for example `/start`, `/help`, `/show`, `/list`) so command menu and runtime behavior stay in sync. +Piconomous now keeps command definitions in one shared registry. On startup, Telegram will automatically register supported bot commands (for example `/start`, `/help`, `/show`, `/list`) so command menu and runtime behavior stay in sync. Telegram command menu registration remains channel-local discovery UX; generic command execution is handled centrally in the agent loop via the commands executor. -If command registration fails (network/API transient errors), the channel still starts and PicoClaw retries registration in the background. +If command registration fails (network/API transient errors), the channel still starts and Piconomous retries registration in the background.
@@ -1222,7 +1222,7 @@ You can also trigger by keyword prefixes (e.g. `!bot`): **6. Run** ```bash -picoclaw gateway +piconomous gateway ``` @@ -1230,7 +1230,7 @@ picoclaw gateway
WhatsApp (native via whatsmeow) -PicoClaw can connect to WhatsApp in two ways: +Piconomous can connect to WhatsApp in two ways: - **Native (recommended):** In-process using [whatsmeow](https://github.com/tulir/whatsmeow). No separate bridge. Set `"use_native": true` and leave `bridge_url` empty. On first run, scan the QR code with WhatsApp (Linked Devices). Session is stored under your workspace (e.g. `workspace/whatsapp/`). The native channel is **optional** to keep the default binary small; build with `-tags whatsapp_native` (e.g. `make build-whatsapp-native` or `go build -tags whatsapp_native ./cmd/...`). - **Bridge:** Connect to an external WebSocket bridge. Set `bridge_url` (e.g. `ws://localhost:3001`) and keep `use_native` false. @@ -1250,7 +1250,7 @@ PicoClaw can connect to WhatsApp in two ways: } ``` -If `session_store_path` is empty, the session is stored in `<workspace>/whatsapp/`. Run `picoclaw gateway`; on first run, scan the QR code printed in the terminal with WhatsApp → Linked Devices. +If `session_store_path` is empty, the session is stored in `<workspace>/whatsapp/`. Run `piconomous gateway`; on first run, scan the QR code printed in the terminal with WhatsApp → Linked Devices.
@@ -1282,7 +1282,7 @@ If `session_store_path` is empty, the session is stored in `<workspace>/wh **3. Run** ```bash -picoclaw gateway +piconomous gateway ``` @@ -1316,7 +1316,7 @@ picoclaw gateway **3. Run** ```bash -picoclaw gateway +piconomous gateway ``` @@ -1347,7 +1347,7 @@ picoclaw gateway **3. Run** ```bash -picoclaw gateway +piconomous gateway ``` For full options (`device_id`, `join_on_invite`, `group_trigger`, `placeholder`, `reasoning_channel_id`), see [Matrix Channel Configuration Guide](docs/channels/matrix/README.md). @@ -1395,7 +1395,7 @@ Then set the Webhook URL in LINE Developers Console to `https://your-domain/webh **4. Run** ```bash -picoclaw gateway +piconomous gateway ``` > In group chats, the bot responds only when @mentioned. Replies quote the original message. @@ -1405,7 +1405,7 @@ picoclaw gateway
WeCom (企业微信) -PicoClaw supports three types of WeCom integration: +Piconomous supports three types of WeCom integration: **Option 1: WeCom Bot (Bot)** - Easier setup, supports group chats **Option 2: WeCom App (Custom App)** - More features, proactive messaging, private chat only @@ -1440,7 +1440,7 @@ See [WeCom AI Bot Configuration Guide](docs/channels/wecom/wecom_aibot/README.zh **3. Run** ```bash -picoclaw gateway +piconomous gateway ``` > **Note**: WeCom AI Bot uses streaming pull protocol — no reply timeout concerns. Long tasks (>30 seconds) automatically switch to `response_url` push delivery. @@ -1457,24 +1457,24 @@ Connect Picoclaw to the Agent Social Network simply by sending a single message | Command | Description | | ------------------------- | ----------------------------- | -| `picoclaw onboard` | Initialize config & workspace | -| `picoclaw agent -m "..."` | Chat with the agent | -| `picoclaw agent` | Interactive chat mode | -| `picoclaw gateway` | Start the gateway | -| `picoclaw status` | Show status | -| `picoclaw version` | Show version info | -| `picoclaw cron list` | List all scheduled jobs | -| `picoclaw cron add ...` | Add a scheduled job | -| `picoclaw cron disable` | Disable a scheduled job | -| `picoclaw cron remove` | Remove a scheduled job | -| `picoclaw skills list` | List installed skills | -| `picoclaw skills install` | Install a skill | -| `picoclaw migrate` | Migrate data from older versions | -| `picoclaw auth login` | Authenticate with providers | +| `piconomous onboard` | Initialize config & workspace | +| `piconomous agent -m "..."` | Chat with the agent | +| `piconomous agent` | Interactive chat mode | +| `piconomous gateway` | Start the gateway | +| `piconomous status` | Show status | +| `piconomous version` | Show version info | +| `piconomous cron list` | List all scheduled jobs | +| `piconomous cron add ...` | Add a scheduled job | +| `piconomous cron disable` | Disable a scheduled job | +| `piconomous cron remove` | Remove a scheduled job | +| `piconomous skills list` | List installed skills | +| `piconomous skills install` | Install a skill | +| `piconomous migrate` | Migrate data from older versions | +| `piconomous auth login` | Authenticate with providers | ### Scheduled Tasks / Reminders -PicoClaw supports scheduled reminders and recurring tasks through the `cron` tool: +Piconomous supports scheduled reminders and recurring tasks through the `cron` tool: * **One-time reminders**: "Remind me in 10 minutes" → triggers once after 10min * **Recurring tasks**: "Remind me every 2 hours" → triggers every 2 hours @@ -1484,7 +1484,7 @@ PicoClaw supports scheduled reminders and recurring tasks through the `cron` too PRs welcome! The codebase is intentionally small and readable. 🤗 -See our full [Community Roadmap](https://github.com/sipeed/picoclaw/blob/main/ROADMAP.md). +See our full [Community Roadmap](https://github.com/sipeed/piconomous/blob/main/ROADMAP.md). Developer group building, join after your first merged PR! @@ -1492,7 +1492,7 @@ User Groups: discord: -PicoClaw +Piconomous ## ClawdChat Join the Agent Social Network @@ -1504,25 +1504,25 @@ Connect Picoclaw to the Agent Social Network simply by sending a single message | Command | Description | | ------------------------- | ----------------------------- | -| `picoclaw onboard` | Initialize config & workspace | -| `picoclaw agent -m "..."` | Chat with the agent | -| `picoclaw agent` | Interactive chat mode | -| `picoclaw gateway` | Start the gateway | -| `picoclaw status` | Show status | -| `picoclaw version` | Show version info | -| `picoclaw cron list` | List all scheduled jobs | -| `picoclaw cron add ...` | Add a scheduled job | -| `picoclaw cron disable` | Disable a scheduled job | -| `picoclaw cron remove` | Remove a scheduled job | -| `picoclaw skills list` | List installed skills | -| `picoclaw skills install` | Install a skill | -| `picoclaw migrate` | Migrate data from older versions | -| `picoclaw auth login` | Authenticate with providers | -| `picoclaw model` | View or switch the default model | +| `piconomous onboard` | Initialize config & workspace | +| `piconomous agent -m "..."` | Chat with the agent | +| `piconomous agent` | Interactive chat mode | +| `piconomous gateway` | Start the gateway | +| `piconomous status` | Show status | +| `piconomous version` | Show version info | +| `piconomous cron list` | List all scheduled jobs | +| `piconomous cron add ...` | Add a scheduled job | +| `piconomous cron disable` | Disable a scheduled job | +| `piconomous cron remove` | Remove a scheduled job | +| `piconomous skills list` | List installed skills | +| `piconomous skills install` | Install a skill | +| `piconomous migrate` | Migrate data from older versions | +| `piconomous auth login` | Authenticate with providers | +| `piconomous model` | View or switch the default model | ### Scheduled Tasks / Reminders -PicoClaw supports scheduled reminders and recurring tasks through the `cron` tool: +Piconomous supports scheduled reminders and recurring tasks through the `cron` tool: * **One-time reminders**: "Remind me in 10 minutes" → triggers once after 10min * **Recurring tasks**: "Remind me every 2 hours" → triggers every 2 hours @@ -1532,7 +1532,7 @@ PicoClaw supports scheduled reminders and recurring tasks through the `cron` too PRs welcome! The codebase is intentionally small and readable. 🤗 -See our full [Community Roadmap](https://github.com/sipeed/picoclaw/blob/main/ROADMAP.md). +See our full [Community Roadmap](https://github.com/sipeed/piconomous/blob/main/ROADMAP.md). Developer group building, join after your first merged PR! @@ -1540,4 +1540,4 @@ User Groups: discord: -PicoClaw +Piconomous diff --git a/README.pt-br.md b/README.pt-br.md index c1df570a5..3da02c7be 100644 --- a/README.pt-br.md +++ b/README.pt-br.md @@ -1,7 +1,7 @@
- PicoClaw + Piconomous -

PicoClaw: Assistente de IA Ultra-Eficiente em Go

+

Piconomous: Assistente de IA Ultra-Eficiente em Go

Hardware de $10 · <10MB de RAM · Boot em <1s · 皮皮虾,我们走!

@@ -9,9 +9,9 @@ Hardware License
- Website - Docs - Wiki + Website + Docs + Wiki
Twitter @@ -24,9 +24,9 @@ --- -> **PicoClaw** é um projeto open-source independente iniciado pela [Sipeed](https://sipeed.com). É escrito inteiramente em **Go** — não é um fork do OpenClaw, NanoBot ou qualquer outro projeto. +> **Piconomous** é um projeto open-source independente iniciado pela [Sipeed](https://sipeed.com). É escrito inteiramente em **Go** — não é um fork do OpenClaw, NanoBot ou qualquer outro projeto. -🦐 PicoClaw é um assistente pessoal de IA ultra-leve inspirado no [NanoBot](https://github.com/HKUDS/nanobot), reescrito do zero em Go por meio de um processo de auto-inicialização (self-bootstrapping), onde o próprio agente de IA conduziu toda a migração de arquitetura e otimização de código. +🦐 Piconomous é um assistente pessoal de IA ultra-leve inspirado no [NanoBot](https://github.com/HKUDS/nanobot), reescrito do zero em Go por meio de um processo de auto-inicialização (self-bootstrapping), onde o próprio agente de IA conduziu toda a migração de arquitetura e otimização de código. ⚡️ Roda em hardware de $10 com <10MB de RAM: Isso é 99% menos memória que o OpenClaw e 98% mais barato que um Mac mini! @@ -34,7 +34,7 @@

- +

@@ -48,31 +48,31 @@ > [!CAUTION] > **🚨 DECLARAÇÃO DE SEGURANÇA & CANAIS OFICIAIS** > -> * **SEM CRIPTOMOEDAS:** O PicoClaw **NÃO** possui nenhum token/moeda oficial. Todas as alegações no `pump.fun` ou outras plataformas de negociação são **GOLPES**. +> * **SEM CRIPTOMOEDAS:** O Piconomous **NÃO** possui nenhum token/moeda oficial. Todas as alegações no `pump.fun` ou outras plataformas de negociação são **GOLPES**. > -> * **DOMÍNIO OFICIAL:** O **ÚNICO** site oficial é o **[picoclaw.io](https://picoclaw.io)**, e o site da empresa é o **[sipeed.com](https://sipeed.com)** +> * **DOMÍNIO OFICIAL:** O **ÚNICO** site oficial é o **[piconomous.io](https://piconomous.io)**, e o site da empresa é o **[sipeed.com](https://sipeed.com)** > * **Aviso:** Muitos domínios `.ai/.org/.com/.net/...` foram registrados por terceiros. -> * **Aviso:** O PicoClaw está em fase inicial de desenvolvimento e pode ter problemas de segurança de rede não resolvidos. Não implante em ambientes de produção antes da versão v1.0. -> * **Nota:** O PicoClaw recentemente fez merge de muitos PRs, o que pode resultar em maior consumo de memória (10–20MB) nas versões mais recentes. Planejamos priorizar a otimização de recursos assim que o conjunto de funcionalidades estiver estável. +> * **Aviso:** O Piconomous está em fase inicial de desenvolvimento e pode ter problemas de segurança de rede não resolvidos. Não implante em ambientes de produção antes da versão v1.0. +> * **Nota:** O Piconomous recentemente fez merge de muitos PRs, o que pode resultar em maior consumo de memória (10–20MB) nas versões mais recentes. Planejamos priorizar a otimização de recursos assim que o conjunto de funcionalidades estiver estável. ## 📢 Novidades -2026-03-17 🚀 **v0.2.3 Lançado!** Interface de bandeja do sistema (Windows & Linux), rastreamento de status de sub-agentes (`spawn_status`), hot-reload experimental do gateway, portões de segurança para cron e 2 correções de segurança. PicoClaw agora com **25K ⭐**! +2026-03-17 🚀 **v0.2.3 Lançado!** Interface de bandeja do sistema (Windows & Linux), rastreamento de status de sub-agentes (`spawn_status`), hot-reload experimental do gateway, portões de segurança para cron e 2 correções de segurança. Piconomous agora com **25K ⭐**! 2026-03-09 🎉 **v0.2.1 — Maior atualização até agora!** Suporte ao protocolo MCP, 4 novos canais (Matrix/IRC/WeCom/Discord Proxy), 3 novos provedores (Kimi/Minimax/Avian), pipeline de visão, armazenamento de memória JSONL e roteamento de modelos. 2026-02-28 📦 **v0.2.0** lançado com suporte a Docker Compose e launcher Web UI. -2026-02-26 🎉 PicoClaw atingiu **20K stars** em apenas 17 dias! Orquestração automática de canais e interfaces de capacidade implementadas. +2026-02-26 🎉 Piconomous atingiu **20K stars** em apenas 17 dias! Orquestração automática de canais e interfaces de capacidade implementadas.
Novidades anteriores... -2026-02-16 🎉 PicoClaw atingiu 12K stars em uma semana! Papéis de maintainers da comunidade e [roadmap](ROADMAP.md) publicados oficialmente. +2026-02-16 🎉 Piconomous atingiu 12K stars em uma semana! Papéis de maintainers da comunidade e [roadmap](ROADMAP.md) publicados oficialmente. -2026-02-13 🎉 PicoClaw atingiu 5000 stars em 4 dias! Roadmap do Projeto e Grupo de Desenvolvedores em preparação. +2026-02-13 🎉 Piconomous atingiu 5000 stars em 4 dias! Roadmap do Projeto e Grupo de Desenvolvedores em preparação. -2026-02-09 🎉 **PicoClaw Lançado!** Construído em 1 dia para trazer Agentes de IA para hardware de $10 com <10MB de RAM. 🦐 PicoClaw, Partiu! +2026-02-09 🎉 **Piconomous Lançado!** Construído em 1 dia para trazer Agentes de IA para hardware de $10 com <10MB de RAM. 🦐 Piconomous, Partiu!
@@ -96,14 +96,14 @@ _*Versões recentes podem usar 10–20MB devido a merges rápidos de funcionalidades. Otimização de recursos está planejada. Comparação de inicialização baseada em benchmarks de single-core a 0.8GHz (veja tabela abaixo)._ -| | OpenClaw | NanoBot | **PicoClaw** | +| | OpenClaw | NanoBot | **Piconomous** | | ----------------------------- | ------------- | ------------------------ | ----------------------------------------- | | **Linguagem** | TypeScript | Python | **Go** | | **RAM** | >1GB | >100MB | **< 10MB*** | | **Inicialização**
(CPU 0.8GHz) | >500s | >30s | **<1s** | | **Custo** | Mac Mini $599 | Maioria dos SBC Linux
~$50 | **Qualquer placa Linux**
**A partir de $10** | -PicoClaw +Piconomous > 📋 **[Lista de Compatibilidade de Hardware](docs/hardware-compatibility.md)** — Veja todas as placas testadas, de RISC-V de $5 a Raspberry Pi e telefones Android. Sua placa não está listada? Envie um PR! @@ -118,9 +118,9 @@ _*Versões recentes podem usar 10–20MB devido a merges rápidos de funcionalid

🔎 Busca Web & Aprendizado

-

-

-

+

+

+

Desenvolver • Implantar • Escalar @@ -131,26 +131,26 @@ _*Versões recentes podem usar 10–20MB devido a merges rápidos de funcionalid ### 📱 Rode em celulares Android antigos -Dê uma segunda vida ao seu celular de dez anos atrás! Transforme-o em um assistente de IA inteligente com o PicoClaw. Início rápido: +Dê uma segunda vida ao seu celular de dez anos atrás! Transforme-o em um assistente de IA inteligente com o Piconomous. Início rápido: 1. **Instale o [Termux](https://github.com/termux/termux-app)** (Baixe em [GitHub Releases](https://github.com/termux/termux-app/releases), ou busque no F-Droid / Google Play). 2. **Execute os comandos** ```bash -# Baixe a versão mais recente em https://github.com/sipeed/picoclaw/releases -wget https://github.com/sipeed/picoclaw/releases/latest/download/picoclaw_Linux_arm64.tar.gz -tar xzf picoclaw_Linux_arm64.tar.gz +# Baixe a versão mais recente em https://github.com/sipeed/piconomous/releases +wget https://github.com/sipeed/piconomous/releases/latest/download/piconomous_Linux_arm64.tar.gz +tar xzf piconomous_Linux_arm64.tar.gz pkg install proot -termux-chroot ./picoclaw onboard # chroot fornece um layout padrão do sistema de arquivos Linux +termux-chroot ./piconomous onboard # chroot fornece um layout padrão do sistema de arquivos Linux ``` Depois siga as instruções na seção "Início Rápido" para completar a configuração! -PicoClaw +Piconomous ### 🐜 Implantação Inovadora com Baixo Consumo -O PicoClaw pode ser implantado em praticamente qualquer dispositivo Linux! +O Piconomous pode ser implantado em praticamente qualquer dispositivo Linux! - $9.9 [LicheeRV-Nano](https://www.aliexpress.com/item/1005006519668532.html) versão E(Ethernet) ou W(WiFi6), para Assistente Doméstico Minimalista - $30~50 [NanoKVM](https://www.aliexpress.com/item/1005007369816019.html), ou $100 [NanoKVM-Pro](https://www.aliexpress.com/item/1005010048471263.html) para Manutenção Automatizada de Servidores @@ -162,20 +162,20 @@ O PicoClaw pode ser implantado em praticamente qualquer dispositivo Linux! ## 📦 Instalação -### Baixar de picoclaw.io (Recomendado) +### Baixar de piconomous.io (Recomendado) -Visite **[picoclaw.io](https://picoclaw.io)** — o site oficial detecta automaticamente sua plataforma e oferece download com um clique. Sem necessidade de escolher manualmente a arquitetura. +Visite **[piconomous.io](https://piconomous.io)** — o site oficial detecta automaticamente sua plataforma e oferece download com um clique. Sem necessidade de escolher manualmente a arquitetura. ### Baixar binário pré-compilado -Alternativamente, baixe o binário para sua plataforma na página de [GitHub Releases](https://github.com/sipeed/picoclaw/releases). +Alternativamente, baixe o binário para sua plataforma na página de [GitHub Releases](https://github.com/sipeed/piconomous/releases). ### Compilar a partir do código-fonte (para desenvolvimento) ```bash -git clone https://github.com/sipeed/picoclaw.git +git clone https://github.com/sipeed/piconomous.git -cd picoclaw +cd piconomous make deps # Build, sem necessidade de instalar @@ -210,7 +210,7 @@ Para guias detalhados, consulte a documentação abaixo. Este README cobre apena ## ClawdChat Junte-se à Rede Social de Agentes -Conecte o PicoClaw à Rede Social de Agentes simplesmente enviando uma única mensagem via CLI ou qualquer App de Chat integrado. +Conecte o Piconomous à Rede Social de Agentes simplesmente enviando uma única mensagem via CLI ou qualquer App de Chat integrado. **Leia `https://clawdchat.ai/skill.md` e siga as instruções para entrar no [ClawdChat.ai](https://clawdchat.ai)** @@ -218,25 +218,25 @@ Conecte o PicoClaw à Rede Social de Agentes simplesmente enviando uma única me | Comando | Descrição | | ------------------------- | ----------------------------- | -| `picoclaw onboard` | Inicializar configuração & workspace | -| `picoclaw agent -m "..."` | Conversar com o agente | -| `picoclaw agent` | Modo de chat interativo | -| `picoclaw gateway` | Iniciar o gateway | -| `picoclaw status` | Mostrar status | -| `picoclaw version` | Mostrar informações de versão | -| `picoclaw cron list` | Listar todas as tarefas agendadas | -| `picoclaw cron add ...` | Adicionar uma tarefa agendada | -| `picoclaw cron disable` | Desabilitar uma tarefa agendada | -| `picoclaw cron remove` | Remover uma tarefa agendada | -| `picoclaw skills list` | Listar skills instaladas | -| `picoclaw skills install` | Instalar uma skill | -| `picoclaw migrate` | Migrar dados de versões anteriores | -| `picoclaw auth login` | Autenticar com provedores | -| `picoclaw model` | Ver ou trocar o modelo padrão | +| `piconomous onboard` | Inicializar configuração & workspace | +| `piconomous agent -m "..."` | Conversar com o agente | +| `piconomous agent` | Modo de chat interativo | +| `piconomous gateway` | Iniciar o gateway | +| `piconomous status` | Mostrar status | +| `piconomous version` | Mostrar informações de versão | +| `piconomous cron list` | Listar todas as tarefas agendadas | +| `piconomous cron add ...` | Adicionar uma tarefa agendada | +| `piconomous cron disable` | Desabilitar uma tarefa agendada | +| `piconomous cron remove` | Remover uma tarefa agendada | +| `piconomous skills list` | Listar skills instaladas | +| `piconomous skills install` | Instalar uma skill | +| `piconomous migrate` | Migrar dados de versões anteriores | +| `piconomous auth login` | Autenticar com provedores | +| `piconomous model` | Ver ou trocar o modelo padrão | ### Tarefas Agendadas / Lembretes -O PicoClaw suporta lembretes agendados e tarefas recorrentes por meio da ferramenta `cron`: +O Piconomous suporta lembretes agendados e tarefas recorrentes por meio da ferramenta `cron`: * **Lembretes únicos**: "Me lembre em 10 minutos" → dispara uma vez após 10min * **Tarefas recorrentes**: "Me lembre a cada 2 horas" → dispara a cada 2 horas @@ -246,7 +246,7 @@ O PicoClaw suporta lembretes agendados e tarefas recorrentes por meio da ferrame PRs são bem-vindos! O código-fonte é intencionalmente pequeno e legível. 🤗 -Veja nosso [Roadmap da Comunidade](https://github.com/sipeed/picoclaw/blob/main/ROADMAP.md) completo. +Veja nosso [Roadmap da Comunidade](https://github.com/sipeed/piconomous/blob/main/ROADMAP.md) completo. Grupo de desenvolvedores em formação. Junte-se após seu primeiro PR com merge! @@ -254,4 +254,4 @@ Grupos de usuários: discord: -PicoClaw +Piconomous diff --git a/README.vi.md b/README.vi.md index cd65ac526..dae63bdc0 100644 --- a/README.vi.md +++ b/README.vi.md @@ -1,7 +1,7 @@
- PicoClaw + Piconomous -

PicoClaw: Trợ lý AI Siêu Nhẹ viết bằng Go

+

Piconomous: Trợ lý AI Siêu Nhẹ viết bằng Go

Phần cứng $10 · <10MB RAM · Khởi động <1 giây · Nào, xuất phát!

@@ -9,9 +9,9 @@ Hardware License
- Website - Docs - Wiki + Website + Docs + Wiki
Twitter @@ -24,9 +24,9 @@ --- -> **PicoClaw** là dự án mã nguồn mở độc lập được khởi xướng bởi [Sipeed](https://sipeed.com). Được viết hoàn toàn bằng **Go** — không phải là bản fork của OpenClaw, NanoBot hay bất kỳ dự án nào khác. +> **Piconomous** là dự án mã nguồn mở độc lập được khởi xướng bởi [Sipeed](https://sipeed.com). Được viết hoàn toàn bằng **Go** — không phải là bản fork của OpenClaw, NanoBot hay bất kỳ dự án nào khác. -🦐 PicoClaw là trợ lý AI cá nhân siêu nhẹ, lấy cảm hứng từ [NanoBot](https://github.com/HKUDS/nanobot), được viết lại hoàn toàn bằng Go thông qua quá trình "tự khởi tạo" (self-bootstrapping) — nơi chính AI Agent đã tự dẫn dắt toàn bộ quá trình chuyển đổi kiến trúc và tối ưu hóa mã nguồn. +🦐 Piconomous là trợ lý AI cá nhân siêu nhẹ, lấy cảm hứng từ [NanoBot](https://github.com/HKUDS/nanobot), được viết lại hoàn toàn bằng Go thông qua quá trình "tự khởi tạo" (self-bootstrapping) — nơi chính AI Agent đã tự dẫn dắt toàn bộ quá trình chuyển đổi kiến trúc và tối ưu hóa mã nguồn. ⚡️ Chạy trên phần cứng chỉ $10 với RAM <10MB: Tiết kiệm 99% bộ nhớ so với OpenClaw và rẻ hơn 98% so với Mac mini! @@ -34,7 +34,7 @@

- +

@@ -48,31 +48,31 @@ > [!CAUTION] > **🚨 TUYÊN BỐ BẢO MẬT & KÊNH CHÍNH THỨC** > -> * **KHÔNG CÓ CRYPTO:** PicoClaw **KHÔNG** có bất kỳ token/coin chính thức nào. Mọi thông tin trên `pump.fun` hoặc các sàn giao dịch khác đều là **LỪA ĐẢO**. +> * **KHÔNG CÓ CRYPTO:** Piconomous **KHÔNG** có bất kỳ token/coin chính thức nào. Mọi thông tin trên `pump.fun` hoặc các sàn giao dịch khác đều là **LỪA ĐẢO**. > -> * **DOMAIN CHÍNH THỨC:** Website chính thức **DUY NHẤT** là **[picoclaw.io](https://picoclaw.io)**, website công ty là **[sipeed.com](https://sipeed.com)** +> * **DOMAIN CHÍNH THỨC:** Website chính thức **DUY NHẤT** là **[piconomous.io](https://piconomous.io)**, website công ty là **[sipeed.com](https://sipeed.com)** > * **Cảnh báo:** Nhiều tên miền `.ai/.org/.com/.net/...` đã bị bên thứ ba đăng ký. -> * **Cảnh báo:** PicoClaw đang trong giai đoạn phát triển sớm và có thể còn các vấn đề bảo mật mạng chưa được giải quyết. Không nên triển khai lên môi trường production trước phiên bản v1.0. -> * **Lưu ý:** PicoClaw gần đây đã merge nhiều PR, dẫn đến bộ nhớ sử dụng có thể lớn hơn (10–20MB) ở các phiên bản mới nhất. Chúng tôi sẽ ưu tiên tối ưu tài nguyên khi bộ tính năng đã ổn định. +> * **Cảnh báo:** Piconomous đang trong giai đoạn phát triển sớm và có thể còn các vấn đề bảo mật mạng chưa được giải quyết. Không nên triển khai lên môi trường production trước phiên bản v1.0. +> * **Lưu ý:** Piconomous gần đây đã merge nhiều PR, dẫn đến bộ nhớ sử dụng có thể lớn hơn (10–20MB) ở các phiên bản mới nhất. Chúng tôi sẽ ưu tiên tối ưu tài nguyên khi bộ tính năng đã ổn định. ## 📢 Tin tức -2026-03-17 🚀 **v0.2.3 Phát hành!** Giao diện khay hệ thống (Windows & Linux), theo dõi trạng thái sub-agent (`spawn_status`), hot-reload gateway thử nghiệm, cổng bảo mật cron và 2 bản vá bảo mật. PicoClaw đạt **25K ⭐**! +2026-03-17 🚀 **v0.2.3 Phát hành!** Giao diện khay hệ thống (Windows & Linux), theo dõi trạng thái sub-agent (`spawn_status`), hot-reload gateway thử nghiệm, cổng bảo mật cron và 2 bản vá bảo mật. Piconomous đạt **25K ⭐**! 2026-03-09 🎉 **v0.2.1 — Bản cập nhật lớn nhất!** Hỗ trợ giao thức MCP, 4 kênh mới (Matrix/IRC/WeCom/Discord Proxy), 3 nhà cung cấp mới (Kimi/Minimax/Avian), pipeline xử lý hình ảnh, bộ nhớ JSONL và định tuyến mô hình. 2026-02-28 📦 **v0.2.0** phát hành với hỗ trợ Docker Compose và launcher Web UI. -2026-02-26 🎉 PicoClaw đạt **20K stars** chỉ trong 17 ngày! Tự động điều phối kênh và giao diện năng lực đã được triển khai. +2026-02-26 🎉 Piconomous đạt **20K stars** chỉ trong 17 ngày! Tự động điều phối kênh và giao diện năng lực đã được triển khai.
Tin tức cũ hơn... -2026-02-16 🎉 PicoClaw đạt 12K stars chỉ trong một tuần! Vai trò maintainer cộng đồng và [roadmap](ROADMAP.md) đã được công bố chính thức. +2026-02-16 🎉 Piconomous đạt 12K stars chỉ trong một tuần! Vai trò maintainer cộng đồng và [roadmap](ROADMAP.md) đã được công bố chính thức. -2026-02-13 🎉 PicoClaw đạt 5000 stars trong 4 ngày! Lộ trình dự án và Nhóm phát triển đang được thiết lập. +2026-02-13 🎉 Piconomous đạt 5000 stars trong 4 ngày! Lộ trình dự án và Nhóm phát triển đang được thiết lập. -2026-02-09 🎉 **PicoClaw chính thức ra mắt!** Được xây dựng trong 1 ngày để mang AI Agent đến phần cứng $10 với RAM <10MB. 🦐 PicoClaw, Lên Đường! +2026-02-09 🎉 **Piconomous chính thức ra mắt!** Được xây dựng trong 1 ngày để mang AI Agent đến phần cứng $10 với RAM <10MB. 🦐 Piconomous, Lên Đường!
@@ -96,14 +96,14 @@ _*Các phiên bản gần đây có thể sử dụng 10–20MB do merge tính năng nhanh chóng. Tối ưu tài nguyên đang được lên kế hoạch. So sánh thời gian khởi động dựa trên benchmark đơn nhân 0.8GHz (xem bảng bên dưới)._ -| | OpenClaw | NanoBot | **PicoClaw** | +| | OpenClaw | NanoBot | **Piconomous** | | ----------------------------- | ------------- | ------------------------ | ----------------------------------------- | | **Ngôn ngữ** | TypeScript | Python | **Go** | | **RAM** | >1GB | >100MB | **< 10MB*** | | **Thời gian khởi động**
(CPU 0.8GHz) | >500s | >30s | **<1s** | | **Chi phí** | Mac Mini $599 | Hầu hết SBC Linux ~$50 | **Mọi bo mạch Linux**
**Chỉ từ $10** | -PicoClaw +Piconomous > 📋 **[Danh Sách Tương Thích Phần Cứng](docs/hardware-compatibility.md)** — Xem tất cả các board đã được kiểm tra, từ RISC-V $5 đến Raspberry Pi và điện thoại Android. Board của bạn chưa có? Gửi PR! @@ -118,9 +118,9 @@ _*Các phiên bản gần đây có thể sử dụng 10–20MB do merge tính n

🔎 Tìm kiếm Web & Học hỏi

-

-

-

+

+

+

Phát triển • Triển khai • Mở rộng @@ -131,26 +131,26 @@ _*Các phiên bản gần đây có thể sử dụng 10–20MB do merge tính n ### 📱 Chạy trên điện thoại Android cũ -Hãy cho chiếc điện thoại cũ một cuộc sống mới! Biến nó thành trợ lý AI thông minh với PicoClaw. Bắt đầu nhanh: +Hãy cho chiếc điện thoại cũ một cuộc sống mới! Biến nó thành trợ lý AI thông minh với Piconomous. Bắt đầu nhanh: 1. **Cài đặt [Termux](https://github.com/termux/termux-app)** (Tải từ [GitHub Releases](https://github.com/termux/termux-app/releases), hoặc tìm trên F-Droid / Google Play). 2. **Chạy các lệnh** ```bash -# Tải phiên bản mới nhất từ https://github.com/sipeed/picoclaw/releases -wget https://github.com/sipeed/picoclaw/releases/latest/download/picoclaw_Linux_arm64.tar.gz -tar xzf picoclaw_Linux_arm64.tar.gz +# Tải phiên bản mới nhất từ https://github.com/sipeed/piconomous/releases +wget https://github.com/sipeed/piconomous/releases/latest/download/piconomous_Linux_arm64.tar.gz +tar xzf piconomous_Linux_arm64.tar.gz pkg install proot -termux-chroot ./picoclaw onboard # chroot cung cấp bố cục hệ thống tệp Linux tiêu chuẩn +termux-chroot ./piconomous onboard # chroot cung cấp bố cục hệ thống tệp Linux tiêu chuẩn ``` Sau đó làm theo hướng dẫn trong phần "Bắt đầu nhanh" để hoàn tất cấu hình! -PicoClaw +Piconomous ### 🐜 Triển khai sáng tạo trên phần cứng tối thiểu -PicoClaw có thể triển khai trên hầu hết mọi thiết bị Linux! +Piconomous có thể triển khai trên hầu hết mọi thiết bị Linux! - $9.9 [LicheeRV-Nano](https://www.aliexpress.com/item/1005006519668532.html) phiên bản E(Ethernet) hoặc W(WiFi6), dùng làm Trợ lý Gia đình tối giản - $30~50 [NanoKVM](https://www.aliexpress.com/item/1005007369816019.html), hoặc $100 [NanoKVM-Pro](https://www.aliexpress.com/item/1005010048471263.html) dùng cho quản trị Server tự động @@ -162,20 +162,20 @@ PicoClaw có thể triển khai trên hầu hết mọi thiết bị Linux! ## 📦 Cài đặt -### Tải từ picoclaw.io (Khuyến nghị) +### Tải từ piconomous.io (Khuyến nghị) -Truy cập **[picoclaw.io](https://picoclaw.io)** — trang web chính thức tự động phát hiện nền tảng của bạn và cung cấp tải xuống một cú nhấp. Không cần chọn kiến trúc thủ công. +Truy cập **[piconomous.io](https://piconomous.io)** — trang web chính thức tự động phát hiện nền tảng của bạn và cung cấp tải xuống một cú nhấp. Không cần chọn kiến trúc thủ công. ### Tải binary đã biên dịch sẵn -Hoặc tải binary cho nền tảng của bạn từ trang [GitHub Releases](https://github.com/sipeed/picoclaw/releases). +Hoặc tải binary cho nền tảng của bạn từ trang [GitHub Releases](https://github.com/sipeed/piconomous/releases). ### Biên dịch từ mã nguồn (cho phát triển) ```bash -git clone https://github.com/sipeed/picoclaw.git +git clone https://github.com/sipeed/piconomous.git -cd picoclaw +cd piconomous make deps # Build (không cần cài đặt) @@ -210,7 +210,7 @@ make install ## ClawdChat Tham gia Mạng xã hội Agent -Kết nối PicoClaw với Mạng xã hội Agent chỉ bằng cách gửi một tin nhắn qua CLI hoặc bất kỳ ứng dụng Chat nào đã tích hợp. +Kết nối Piconomous với Mạng xã hội Agent chỉ bằng cách gửi một tin nhắn qua CLI hoặc bất kỳ ứng dụng Chat nào đã tích hợp. **Đọc `https://clawdchat.ai/skill.md` và làm theo hướng dẫn để tham gia [ClawdChat.ai](https://clawdchat.ai)** @@ -218,25 +218,25 @@ Kết nối PicoClaw với Mạng xã hội Agent chỉ bằng cách gửi một | Lệnh | Mô tả | | -------------------------- | ------------------------------ | -| `picoclaw onboard` | Khởi tạo cấu hình & workspace | -| `picoclaw agent -m "..."` | Trò chuyện với agent | -| `picoclaw agent` | Chế độ chat tương tác | -| `picoclaw gateway` | Khởi động gateway | -| `picoclaw status` | Hiển thị trạng thái | -| `picoclaw version` | Hiển thị thông tin phiên bản | -| `picoclaw cron list` | Liệt kê tất cả tác vụ định kỳ | -| `picoclaw cron add ...` | Thêm tác vụ định kỳ | -| `picoclaw cron disable` | Tắt tác vụ định kỳ | -| `picoclaw cron remove` | Xóa tác vụ định kỳ | -| `picoclaw skills list` | Liệt kê các skill đã cài | -| `picoclaw skills install` | Cài đặt một skill | -| `picoclaw migrate` | Di chuyển dữ liệu từ phiên bản cũ | -| `picoclaw auth login` | Xác thực với nhà cung cấp | -| `picoclaw model` | Xem hoặc chuyển đổi model mặc định | +| `piconomous onboard` | Khởi tạo cấu hình & workspace | +| `piconomous agent -m "..."` | Trò chuyện với agent | +| `piconomous agent` | Chế độ chat tương tác | +| `piconomous gateway` | Khởi động gateway | +| `piconomous status` | Hiển thị trạng thái | +| `piconomous version` | Hiển thị thông tin phiên bản | +| `piconomous cron list` | Liệt kê tất cả tác vụ định kỳ | +| `piconomous cron add ...` | Thêm tác vụ định kỳ | +| `piconomous cron disable` | Tắt tác vụ định kỳ | +| `piconomous cron remove` | Xóa tác vụ định kỳ | +| `piconomous skills list` | Liệt kê các skill đã cài | +| `piconomous skills install` | Cài đặt một skill | +| `piconomous migrate` | Di chuyển dữ liệu từ phiên bản cũ | +| `piconomous auth login` | Xác thực với nhà cung cấp | +| `piconomous model` | Xem hoặc chuyển đổi model mặc định | ### Tác vụ định kỳ / Nhắc nhở -PicoClaw hỗ trợ nhắc nhở theo lịch và tác vụ lặp lại thông qua công cụ `cron`: +Piconomous hỗ trợ nhắc nhở theo lịch và tác vụ lặp lại thông qua công cụ `cron`: * **Nhắc nhở một lần**: "Nhắc tôi sau 10 phút" → kích hoạt một lần sau 10 phút * **Tác vụ lặp lại**: "Nhắc tôi mỗi 2 giờ" → kích hoạt mỗi 2 giờ @@ -246,7 +246,7 @@ PicoClaw hỗ trợ nhắc nhở theo lịch và tác vụ lặp lại thông qu Chào đón mọi PR! Mã nguồn được thiết kế nhỏ gọn và dễ đọc. 🤗 -Xem [Lộ trình Cộng đồng](https://github.com/sipeed/picoclaw/blob/main/ROADMAP.md) đầy đủ. +Xem [Lộ trình Cộng đồng](https://github.com/sipeed/piconomous/blob/main/ROADMAP.md) đầy đủ. Nhóm phát triển đang được xây dựng. Tham gia sau khi có PR đầu tiên được merge! @@ -254,4 +254,4 @@ Nhóm người dùng: discord: -PicoClaw +Piconomous diff --git a/README.zh.md b/README.zh.md index db34f57da..47c6f049b 100644 --- a/README.zh.md +++ b/README.zh.md @@ -1,7 +1,7 @@
-PicoClaw +Piconomous -

PicoClaw: 基于Go语言的超高效 AI 助手

+

Piconomous: 基于Go语言的超高效 AI 助手

$10 硬件 · <10MB 内存 · <1s 启动 · 皮皮虾,我们走!

@@ -9,9 +9,9 @@ Hardware License
- Website - Docs - Wiki + Website + Docs + Wiki
Twitter @@ -24,9 +24,9 @@ --- -> **PicoClaw** 是由 [矽速科技 (Sipeed)](https://sipeed.com) 发起的独立开源项目,完全使用 **Go 语言**从零编写——不是 OpenClaw、NanoBot 或其他项目的分支。 +> **Piconomous** 是由 [矽速科技 (Sipeed)](https://sipeed.com) 发起的独立开源项目,完全使用 **Go 语言**从零编写——不是 OpenClaw、NanoBot 或其他项目的分支。 -🦐 **PicoClaw** 是一个受 [NanoBot](https://github.com/HKUDS/nanobot) 启发的超轻量级个人 AI 助手。它采用 **Go 语言** 从零重构,经历了一个"自举"过程——即由 AI Agent 自身驱动了整个架构迁移和代码优化。 +🦐 **Piconomous** 是一个受 [NanoBot](https://github.com/HKUDS/nanobot) 启发的超轻量级个人 AI 助手。它采用 **Go 语言** 从零重构,经历了一个"自举"过程——即由 AI Agent 自身驱动了整个架构迁移和代码优化。 ⚡️ **极致轻量**:可在 **10 美元** 的硬件上运行,内存占用 **<10MB**。这意味着比 OpenClaw 节省 99% 的内存,比 Mac mini 便宜 98%! @@ -34,7 +34,7 @@

- +

@@ -48,30 +48,30 @@ > [!CAUTION] > **🚨 安全声明** > -> - **无加密货币 (NO CRYPTO):** PicoClaw **没有** 发行任何官方代币、Token 或虚拟货币。所有在 `pump.fun` 或其他交易平台上的相关声称均为 **诈骗**。 -> - **官方域名:** 唯一的官方网站是 **[picoclaw.io](https://picoclaw.io)**,公司官网是 **[sipeed.com](https://sipeed.com)**。 +> - **无加密货币 (NO CRYPTO):** Piconomous **没有** 发行任何官方代币、Token 或虚拟货币。所有在 `pump.fun` 或其他交易平台上的相关声称均为 **诈骗**。 +> - **官方域名:** 唯一的官方网站是 **[piconomous.io](https://piconomous.io)**,公司官网是 **[sipeed.com](https://sipeed.com)**。 > - **警惕:** 许多 `.ai/.org/.com/.net/...` 后缀的域名被第三方抢注,请勿轻信。 -> - **注意:** PicoClaw 正在初期的快速功能开发阶段,可能有尚未修复的网络安全问题,在 1.0 正式版发布前,请不要将其部署到生产环境中。 -> - **注意:** PicoClaw 最近合并了大量 PR,近期版本可能内存占用较大 (10~20MB),我们将在功能较为收敛后进行资源占用优化。 +> - **注意:** Piconomous 正在初期的快速功能开发阶段,可能有尚未修复的网络安全问题,在 1.0 正式版发布前,请不要将其部署到生产环境中。 +> - **注意:** Piconomous 最近合并了大量 PR,近期版本可能内存占用较大 (10~20MB),我们将在功能较为收敛后进行资源占用优化。 ## 📢 新闻 -2026-03-17 🚀 **v0.2.3 发布!** 系统托盘 UI(Windows & Linux)、子 Agent 状态查询 (`spawn_status`)、实验性 Gateway 热重载、Cron 安全门控,以及 2 项安全修复。PicoClaw 已达 **25K ⭐**! +2026-03-17 🚀 **v0.2.3 发布!** 系统托盘 UI(Windows & Linux)、子 Agent 状态查询 (`spawn_status`)、实验性 Gateway 热重载、Cron 安全门控,以及 2 项安全修复。Piconomous 已达 **25K ⭐**! 2026-03-09 🎉 **v0.2.1 — 史上最大更新!** MCP 协议支持、4 个新频道 (Matrix/IRC/WeCom/Discord Proxy)、3 个新 Provider (Kimi/Minimax/Avian)、视觉管线、JSONL 记忆存储、模型路由。 2026-02-28 📦 **v0.2.0** 发布,支持 Docker Compose 和 Web UI 启动器。 -2026-02-26 🎉 PicoClaw 仅 17 天突破 **20K Stars**!频道自动编排和能力接口上线。 +2026-02-26 🎉 Piconomous 仅 17 天突破 **20K Stars**!频道自动编排和能力接口上线。
更早的新闻... -2026-02-16 🎉 PicoClaw 一周内突破 12K Stars!社区维护者角色和 [路线图](ROADMAP.md) 正式发布。 +2026-02-16 🎉 Piconomous 一周内突破 12K Stars!社区维护者角色和 [路线图](ROADMAP.md) 正式发布。 -2026-02-13 🎉 PicoClaw 4 天内突破 5000 Stars!项目路线图和开发者群组筹建中。 +2026-02-13 🎉 Piconomous 4 天内突破 5000 Stars!项目路线图和开发者群组筹建中。 -2026-02-09 🎉 **PicoClaw 正式发布!** 仅用 1 天构建,将 AI Agent 带入 $10 硬件与 <10MB 内存的世界。🦐 皮皮虾,我们走! +2026-02-09 🎉 **Piconomous 正式发布!** 仅用 1 天构建,将 AI Agent 带入 $10 硬件与 <10MB 内存的世界。🦐 皮皮虾,我们走!
@@ -95,14 +95,14 @@ _*近期版本因快速合并 PR 可能占用 10–20MB,资源优化已列入计划。启动速度对比基于 0.8GHz 单核实测(见下方对比表)。_ -| | OpenClaw | NanoBot | **PicoClaw** | +| | OpenClaw | NanoBot | **Piconomous** | | ------------------------------ | ------------- | ------------------------ | -------------------------------------- | | **语言** | TypeScript | Python | **Go** | | **RAM** | >1GB | >100MB | **< 10MB*** | | **启动时间**
(0.8GHz core) | >500s | >30s | **<1s** | | **成本** | Mac Mini $599 | 大多数 Linux 开发板 ~$50 | **任意 Linux 开发板**
**低至 $10** | -PicoClaw +Piconomous > 📋 **[硬件兼容列表](docs/hardware-compatibility.md)** — 查看所有已测试的板卡,从 $5 RISC-V 到树莓派到安卓手机。你的板卡没在列表中?欢迎提交 PR! @@ -117,9 +117,9 @@ _*近期版本因快速合并 PR 可能占用 10–20MB,资源优化已列入

🔎 网络搜索与学习

-

-

-

+

+

+

开发 • 部署 • 扩展 @@ -130,26 +130,26 @@ _*近期版本因快速合并 PR 可能占用 10–20MB,资源优化已列入 ### 📱 在手机上轻松运行 -PicoClaw 可以将你 10 年前的老旧手机废物利用,变身成为你的 AI 助理!快速指南: +Piconomous 可以将你 10 年前的老旧手机废物利用,变身成为你的 AI 助理!快速指南: 1. 安装 [Termux](https://github.com/termux/termux-app)(可从 [GitHub Releases](https://github.com/termux/termux-app/releases) 下载,或在 F-Droid 等应用商店搜索) 2. 打开后执行指令 ```bash # 从 Release 页面下载最新版本 -wget https://github.com/sipeed/picoclaw/releases/latest/download/picoclaw_Linux_arm64.tar.gz -tar xzf picoclaw_Linux_arm64.tar.gz +wget https://github.com/sipeed/piconomous/releases/latest/download/piconomous_Linux_arm64.tar.gz +tar xzf piconomous_Linux_arm64.tar.gz pkg install proot -termux-chroot ./picoclaw onboard # chroot 提供标准 Linux 文件系统布局 +termux-chroot ./piconomous onboard # chroot 提供标准 Linux 文件系统布局 ``` -然后跟随下面的"快速开始"章节继续配置 PicoClaw 即可使用! +然后跟随下面的"快速开始"章节继续配置 Piconomous 即可使用! -PicoClaw +Piconomous ### 🐜 创新的低占用部署 -PicoClaw 几乎可以部署在任何 Linux 设备上! +Piconomous 几乎可以部署在任何 Linux 设备上! - $9.9 [LicheeRV-Nano](https://www.aliexpress.com/item/1005006519668532.html) E(网口) 或 W(WiFi6) 版本,用于极简家庭助手 - $30~50 [NanoKVM](https://www.aliexpress.com/item/1005007369816019.html),或 $100 [NanoKVM-Pro](https://www.aliexpress.com/item/1005010048471263.html),用于自动化服务器运维 @@ -161,20 +161,20 @@ PicoClaw 几乎可以部署在任何 Linux 设备上! ## 📦 安装 -### 从 picoclaw.io 下载(推荐) +### 从 piconomous.io 下载(推荐) -访问 **[picoclaw.io](https://picoclaw.io)** — 官网自动检测你的平台,提供一键下载,无需手动选择架构。 +访问 **[piconomous.io](https://piconomous.io)** — 官网自动检测你的平台,提供一键下载,无需手动选择架构。 ### 下载预编译二进制文件 -也可以从 [GitHub Releases](https://github.com/sipeed/picoclaw/releases) 页面手动下载对应平台的二进制文件。 +也可以从 [GitHub Releases](https://github.com/sipeed/piconomous/releases) 页面手动下载对应平台的二进制文件。 ### 从源码构建(开发用) ```bash -git clone https://github.com/sipeed/picoclaw.git +git clone https://github.com/sipeed/piconomous.git -cd picoclaw +cd piconomous make deps # 构建(无需安装) @@ -209,7 +209,7 @@ make install ## ClawdChat 加入 Agent 社交网络 -通过 CLI 或任何已集成的聊天应用发送一条消息,即可将 PicoClaw 连接到 Agent 社交网络。 +通过 CLI 或任何已集成的聊天应用发送一条消息,即可将 Piconomous 连接到 Agent 社交网络。 **阅读 `https://clawdchat.ai/skill.md` 并按照说明加入 [ClawdChat.ai](https://clawdchat.ai)** @@ -217,25 +217,25 @@ make install | 命令 | 说明 | | ------------------------- | ---------------------- | -| `picoclaw onboard` | 初始化配置与工作区 | -| `picoclaw agent -m "..."` | 与 Agent 对话 | -| `picoclaw agent` | 交互式对话模式 | -| `picoclaw gateway` | 启动网关 | -| `picoclaw status` | 查看状态 | -| `picoclaw version` | 查看版本信息 | -| `picoclaw cron list` | 列出所有定时任务 | -| `picoclaw cron add ...` | 添加定时任务 | -| `picoclaw cron disable` | 禁用定时任务 | -| `picoclaw cron remove` | 删除定时任务 | -| `picoclaw skills list` | 列出已安装技能 | -| `picoclaw skills install` | 安装技能 | -| `picoclaw migrate` | 从旧版本迁移数据 | -| `picoclaw auth login` | 认证提供商 | -| `picoclaw model` | 查看或切换默认模型 | +| `piconomous onboard` | 初始化配置与工作区 | +| `piconomous agent -m "..."` | 与 Agent 对话 | +| `piconomous agent` | 交互式对话模式 | +| `piconomous gateway` | 启动网关 | +| `piconomous status` | 查看状态 | +| `piconomous version` | 查看版本信息 | +| `piconomous cron list` | 列出所有定时任务 | +| `piconomous cron add ...` | 添加定时任务 | +| `piconomous cron disable` | 禁用定时任务 | +| `piconomous cron remove` | 删除定时任务 | +| `piconomous skills list` | 列出已安装技能 | +| `piconomous skills install` | 安装技能 | +| `piconomous migrate` | 从旧版本迁移数据 | +| `piconomous auth login` | 认证提供商 | +| `piconomous model` | 查看或切换默认模型 | ### 定时任务 / 提醒 -PicoClaw 通过 `cron` 工具支持定时提醒和重复任务: +Piconomous 通过 `cron` 工具支持定时提醒和重复任务: * **一次性提醒**: "10分钟后提醒我" → 10分钟后触发一次 * **重复任务**: "每2小时提醒我" → 每2小时触发 @@ -245,7 +245,7 @@ PicoClaw 通过 `cron` 工具支持定时提醒和重复任务: 欢迎提交 PR!代码库刻意保持小巧和可读。🤗 -查看完整的 [社区路线图](https://github.com/sipeed/picoclaw/blob/main/ROADMAP.md)。 +查看完整的 [社区路线图](https://github.com/sipeed/piconomous/blob/main/ROADMAP.md)。 开发者群组正在组建中,入群门槛:至少合并过 1 个 PR。 @@ -253,4 +253,4 @@ PicoClaw 通过 `cron` 工具支持定时提醒和重复任务: Discord: -PicoClaw +Piconomous diff --git a/ROADMAP.md b/ROADMAP.md index 8c5c0e252..916e3e7e0 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,5 +1,5 @@ -# 🦐 PicoClaw Roadmap +# 🦐 Piconomous Roadmap > **Vision**: To build the ultimate lightweight, secure, and fully autonomous AI Agent infrastructure.automate the mundane, unleash your creativity @@ -7,9 +7,9 @@ ## 🚀 1. Core Optimization: Extreme Lightweight -*Our defining characteristic. We fight software bloat to ensure PicoClaw runs smoothly on the smallest embedded devices.* +*Our defining characteristic. We fight software bloat to ensure Piconomous runs smoothly on the smallest embedded devices.* -* [**Memory Footprint Reduction**](https://github.com/sipeed/picoclaw/issues/346) +* [**Memory Footprint Reduction**](https://github.com/sipeed/piconomous/issues/346) * **Goal**: Run smoothly on 64MB RAM embedded boards (e.g., low-end RISC-V SBCs) with the core process consuming < 20MB. * **Context**: RAM is expensive and scarce on edge devices. Memory optimization takes precedence over storage size. * **Action**: Analyze memory growth between releases, remove redundant dependencies, and optimize data structures. @@ -42,7 +42,7 @@ *Connect every model, reach every platform.* * **Provider** - * [**Architecture Upgrade**](https://github.com/sipeed/picoclaw/issues/283): Refactor from "Vendor-based" to "Protocol-based" classification (e.g., OpenAI-compatible, Ollama-compatible). *(Status: In progress by @Daming, ETA 5 days)* + * [**Architecture Upgrade**](https://github.com/sipeed/piconomous/issues/283): Refactor from "Vendor-based" to "Protocol-based" classification (e.g., OpenAI-compatible, Ollama-compatible). *(Status: In progress by @Daming, ETA 5 days)* * **Local Models**: Deep integration with **Ollama**, **vLLM**, **LM Studio**, and **Mistral** (local inference). * **Online Models**: Continued support for frontier closed-source models. @@ -50,11 +50,11 @@ * **Channel** * **IM Matrix**: QQ, WeChat (Work), DingTalk, Feishu (Lark), Telegram, Discord, WhatsApp, LINE, Slack, Email, KOOK, Signal, ... * **Standards**: Support for the **OneBot** protocol. - * [**attachment**](https://github.com/sipeed/picoclaw/issues/348): Native handling of images, audio, and video attachments. + * [**attachment**](https://github.com/sipeed/piconomous/issues/348): Native handling of images, audio, and video attachments. * **Skill Marketplace** - * [**Discovery skills**](https://github.com/sipeed/picoclaw/issues/287): Implement `find_skill` to automatically discover and install skills from the [GitHub Skills Repo] or other registries. + * [**Discovery skills**](https://github.com/sipeed/piconomous/issues/287): Implement `find_skill` to automatically discover and install skills from the [GitHub Skills Repo] or other registries. @@ -63,16 +63,16 @@ *Beyond conversation—focusing on action and collaboration.* * **Operations** - * [**MCP Support**](https://github.com/sipeed/picoclaw/issues/290): Native support for the **Model Context Protocol (MCP)**. - * [**Browser Automation**](https://github.com/sipeed/picoclaw/issues/293): Headless browser control via CDP (Chrome DevTools Protocol) or ActionBook. - * [**Mobile Operation**](https://github.com/sipeed/picoclaw/issues/292): Android device control (similar to BotDrop). + * [**MCP Support**](https://github.com/sipeed/piconomous/issues/290): Native support for the **Model Context Protocol (MCP)**. + * [**Browser Automation**](https://github.com/sipeed/piconomous/issues/293): Headless browser control via CDP (Chrome DevTools Protocol) or ActionBook. + * [**Mobile Operation**](https://github.com/sipeed/piconomous/issues/292): Android device control (similar to BotDrop). * **Multi-Agent Collaboration** - * [**Basic Multi-Agent**](https://github.com/sipeed/picoclaw/issues/294) implement - * [**Model Routing**](https://github.com/sipeed/picoclaw/issues/295): "Smart Routing" — dispatch simple tasks to small/local models (fast/cheap) and complex tasks to SOTA models (smart). - * [**Swarm Mode**](https://github.com/sipeed/picoclaw/issues/284): Collaboration between multiple PicoClaw instances on the same network. - * [**AIEOS**](https://github.com/sipeed/picoclaw/issues/296): Exploring AI-Native Operating System interaction paradigms. + * [**Basic Multi-Agent**](https://github.com/sipeed/piconomous/issues/294) implement + * [**Model Routing**](https://github.com/sipeed/piconomous/issues/295): "Smart Routing" — dispatch simple tasks to small/local models (fast/cheap) and complex tasks to SOTA models (smart). + * [**Swarm Mode**](https://github.com/sipeed/piconomous/issues/284): Collaboration between multiple Piconomous instances on the same network. + * [**AIEOS**](https://github.com/sipeed/piconomous/issues/296): Exploring AI-Native Operating System interaction paradigms. @@ -80,7 +80,7 @@ *Lowering the barrier to entry so anyone can deploy in minutes.* -* [**QuickGuide (Zero-Config Start)**](https://github.com/sipeed/picoclaw/issues/350) +* [**QuickGuide (Zero-Config Start)**](https://github.com/sipeed/piconomous/issues/350) * Interactive CLI Wizard: If launched without config, automatically detect the environment and guide the user through Token/Network setup step-by-step. @@ -104,7 +104,7 @@ ## 🎨 7. Brand & Community -* [**Logo Design**](https://github.com/sipeed/picoclaw/issues/297): We are looking for a **Mantis Shrimp (Stomatopoda)** logo design! +* [**Logo Design**](https://github.com/sipeed/piconomous/issues/297): We are looking for a **Mantis Shrimp (Stomatopoda)** logo design! * *Concept*: Needs to reflect "Small but Mighty" and "Lightning Fast Strikes." diff --git a/assets/picoclaw_code.gif b/assets/piconomous_code.gif similarity index 100% rename from assets/picoclaw_code.gif rename to assets/piconomous_code.gif diff --git a/assets/picoclaw_mem.gif b/assets/piconomous_mem.gif similarity index 100% rename from assets/picoclaw_mem.gif rename to assets/piconomous_mem.gif diff --git a/assets/picoclaw_memory.gif b/assets/piconomous_memory.gif similarity index 100% rename from assets/picoclaw_memory.gif rename to assets/piconomous_memory.gif diff --git a/assets/picoclaw_scedule.gif b/assets/piconomous_scedule.gif similarity index 100% rename from assets/picoclaw_scedule.gif rename to assets/piconomous_scedule.gif diff --git a/assets/picoclaw_search.gif b/assets/piconomous_search.gif similarity index 100% rename from assets/picoclaw_search.gif rename to assets/piconomous_search.gif diff --git a/cmd/picoclaw-launcher-tui/config/config.go b/cmd/piconomous-launcher-tui/config/config.go similarity index 92% rename from cmd/picoclaw-launcher-tui/config/config.go rename to cmd/piconomous-launcher-tui/config/config.go index 227b9fa3d..b4b1f7a69 100644 --- a/cmd/picoclaw-launcher-tui/config/config.go +++ b/cmd/piconomous-launcher-tui/config/config.go @@ -1,9 +1,9 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors -// Package config provides types and I/O for ~/.picoclaw/tui.toml. +// Package config provides types and I/O for ~/.piconomous/tui.toml. package config import ( @@ -15,7 +15,7 @@ import ( "github.com/BurntSushi/toml" - "github.com/sipeed/picoclaw/pkg/fileutil" + "github.com/sipeed/piconomous/pkg/fileutil" ) // DefaultConfigPath returns the default path to the tui.toml config file. @@ -24,10 +24,10 @@ func DefaultConfigPath() string { if err != nil { home = "." } - return filepath.Join(home, ".picoclaw", "tui.toml") + return filepath.Join(home, ".piconomous", "tui.toml") } -// TUIConfig is the top-level structure of ~/.picoclaw/tui.toml. +// TUIConfig is the top-level structure of ~/.piconomous/tui.toml. type TUIConfig struct { Version string `toml:"version"` Model Model `toml:"model"` @@ -151,7 +151,7 @@ func (p *Provider) UsersForScheme(schemeName string) []User { return out } -// SyncSelectedModelToMainConfig syncs the currently selected model to ~/.picoclaw/config.json +// SyncSelectedModelToMainConfig syncs the currently selected model to ~/.piconomous/config.json // Adds/replaces a "tui-prefer" model entry and sets it as the default model. // Preserves all other existing fields in the config file unchanged. func SyncSelectedModelToMainConfig(scheme Scheme, user User, modelID string) error { @@ -159,7 +159,7 @@ func SyncSelectedModelToMainConfig(scheme Scheme, user User, modelID string) err if err != nil { home = "." } - mainConfigPath := filepath.Join(home, ".picoclaw", "config.json") + mainConfigPath := filepath.Join(home, ".piconomous", "config.json") var cfg map[string]any if data, readErr := os.ReadFile(mainConfigPath); readErr == nil { diff --git a/cmd/picoclaw-launcher-tui/main.go b/cmd/piconomous-launcher-tui/main.go similarity index 64% rename from cmd/picoclaw-launcher-tui/main.go rename to cmd/piconomous-launcher-tui/main.go index 3cb7110c1..cb0626e2e 100644 --- a/cmd/picoclaw-launcher-tui/main.go +++ b/cmd/piconomous-launcher-tui/main.go @@ -1,7 +1,7 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package main @@ -11,8 +11,8 @@ import ( "os/exec" "path/filepath" - tuicfg "github.com/sipeed/picoclaw/cmd/picoclaw-launcher-tui/config" - "github.com/sipeed/picoclaw/cmd/picoclaw-launcher-tui/ui" + tuicfg "github.com/sipeed/piconomous/cmd/piconomous-launcher-tui/config" + "github.com/sipeed/piconomous/cmd/piconomous-launcher-tui/ui" ) func main() { @@ -23,7 +23,7 @@ func main() { configDir := filepath.Dir(configPath) if _, err := os.Stat(configDir); os.IsNotExist(err) { - cmd := exec.Command("picoclaw", "onboard") + cmd := exec.Command("piconomous", "onboard") cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr @@ -32,7 +32,7 @@ func main() { cfg, err := tuicfg.Load(configPath) if err != nil { - fmt.Fprintf(os.Stderr, "picoclaw-launcher-tui: %v\n", err) + fmt.Fprintf(os.Stderr, "piconomous-launcher-tui: %v\n", err) os.Exit(1) } @@ -42,7 +42,7 @@ func main() { _ = tuicfg.SyncSelectedModelToMainConfig(scheme, user, modelID) } if err := app.Run(); err != nil { - fmt.Fprintf(os.Stderr, "picoclaw-launcher-tui: %v\n", err) + fmt.Fprintf(os.Stderr, "piconomous-launcher-tui: %v\n", err) os.Exit(1) } } diff --git a/cmd/picoclaw-launcher-tui/ui/app.go b/cmd/piconomous-launcher-tui/ui/app.go similarity index 97% rename from cmd/picoclaw-launcher-tui/ui/app.go rename to cmd/piconomous-launcher-tui/ui/app.go index a65693b01..b9000ebcd 100644 --- a/cmd/picoclaw-launcher-tui/ui/app.go +++ b/cmd/piconomous-launcher-tui/ui/app.go @@ -1,7 +1,7 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package ui @@ -12,7 +12,7 @@ import ( "github.com/gdamore/tcell/v2" "github.com/rivo/tview" - tuicfg "github.com/sipeed/picoclaw/cmd/picoclaw-launcher-tui/config" + tuicfg "github.com/sipeed/piconomous/cmd/piconomous-launcher-tui/config" ) // App is the root TUI application. @@ -271,7 +271,7 @@ func (a *App) buildShell(pageID string, content tview.Primitive, hint string) tv } headerLeft := tview.NewTextView(). - SetText(" [#ff00ff::b]///[#00f0ff] PICOCLAW LAUNCHER [#ff00ff]///"). + SetText(" [#ff00ff::b]///[#00f0ff] PICONOMOUS LAUNCHER [#ff00ff]///"). SetDynamicColors(true). SetBackgroundColor(tcell.NewHexColor(0x050510)) diff --git a/cmd/picoclaw-launcher-tui/ui/channels.go b/cmd/piconomous-launcher-tui/ui/channels.go similarity index 96% rename from cmd/picoclaw-launcher-tui/ui/channels.go rename to cmd/piconomous-launcher-tui/ui/channels.go index c976f1fcd..8cb16b8d1 100644 --- a/cmd/picoclaw-launcher-tui/ui/channels.go +++ b/cmd/piconomous-launcher-tui/ui/channels.go @@ -1,7 +1,7 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package ui @@ -39,7 +39,7 @@ func (a *App) newChannelsPage() tview.Primitive { if err != nil { home = "." } - configPath := filepath.Join(home, ".picoclaw", "config.json") + configPath := filepath.Join(home, ".piconomous", "config.json") var cfg map[string]any if data, err := os.ReadFile(configPath); err == nil { diff --git a/cmd/picoclaw-launcher-tui/ui/gateway.go b/cmd/piconomous-launcher-tui/ui/gateway.go similarity index 93% rename from cmd/picoclaw-launcher-tui/ui/gateway.go rename to cmd/piconomous-launcher-tui/ui/gateway.go index 1138c12db..cccc62c54 100644 --- a/cmd/picoclaw-launcher-tui/ui/gateway.go +++ b/cmd/piconomous-launcher-tui/ui/gateway.go @@ -1,7 +1,7 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package ui @@ -31,7 +31,7 @@ func getPidPath() string { if err != nil { home = "." } - return filepath.Join(home, ".picoclaw", pidFileName) + return filepath.Join(home, ".piconomous", pidFileName) } func isProcessRunning(pid int) bool { @@ -85,9 +85,9 @@ func startGateway() error { var cmd *exec.Cmd if runtime.GOOS == "windows" { - cmd = exec.Command("cmd", "/C", "start /B picoclaw gateway > NUL 2>&1") + cmd = exec.Command("cmd", "/C", "start /B piconomous gateway > NUL 2>&1") } else { - cmd = exec.Command("sh", "-c", "nohup picoclaw gateway > /dev/null 2>&1 & echo $! > "+pidPath) + cmd = exec.Command("sh", "-c", "nohup piconomous gateway > /dev/null 2>&1 & echo $! > "+pidPath) } err := cmd.Start() @@ -102,7 +102,7 @@ func startGateway() error { "wmic", "process", "where", - "name='picoclaw.exe' and commandline like '%gateway%'", + "name='piconomous.exe' and commandline like '%gateway%'", "get", "processid", ) diff --git a/cmd/picoclaw-launcher-tui/ui/home.go b/cmd/piconomous-launcher-tui/ui/home.go similarity index 83% rename from cmd/picoclaw-launcher-tui/ui/home.go rename to cmd/piconomous-launcher-tui/ui/home.go index 74a7769cf..424172876 100644 --- a/cmd/picoclaw-launcher-tui/ui/home.go +++ b/cmd/piconomous-launcher-tui/ui/home.go @@ -1,7 +1,7 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package ui @@ -41,19 +41,19 @@ func (a *App) newHomePage() tview.Primitive { a.navigateTo("channels", a.newChannelsPage()) }, ) - list.AddItem("GATEWAY MANAGEMENT", "Manage PicoClaw gateway daemon", 'g', func() { + list.AddItem("GATEWAY MANAGEMENT", "Manage Piconomous gateway daemon", 'g', func() { a.navigateTo("gateway", a.newGatewayPage()) }) list.AddItem("CHAT: Start AI agent chat", "Launch interactive chat session", 'c', func() { a.tapp.Suspend(func() { - cmd := exec.Command("picoclaw", "agent") + cmd := exec.Command("piconomous", "agent") cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr _ = cmd.Run() }) }) - list.AddItem("QUIT SYSTEM", "Exit PicoClaw Launcher", 'q', func() { a.tapp.Stop() }) + list.AddItem("QUIT SYSTEM", "Exit Piconomous Launcher", 'q', func() { a.tapp.Stop() }) if sel >= 0 && sel < list.GetItemCount() { list.SetCurrentItem(sel) } diff --git a/cmd/picoclaw-launcher-tui/ui/models.go b/cmd/piconomous-launcher-tui/ui/models.go similarity index 96% rename from cmd/picoclaw-launcher-tui/ui/models.go rename to cmd/piconomous-launcher-tui/ui/models.go index 20e5f0182..f98ed4556 100644 --- a/cmd/picoclaw-launcher-tui/ui/models.go +++ b/cmd/piconomous-launcher-tui/ui/models.go @@ -1,7 +1,7 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package ui @@ -16,7 +16,7 @@ import ( "github.com/gdamore/tcell/v2" "github.com/rivo/tview" - tuicfg "github.com/sipeed/picoclaw/cmd/picoclaw-launcher-tui/config" + tuicfg "github.com/sipeed/piconomous/cmd/piconomous-launcher-tui/config" ) type modelsAPIResponse struct { diff --git a/cmd/picoclaw-launcher-tui/ui/schemes.go b/cmd/piconomous-launcher-tui/ui/schemes.go similarity index 97% rename from cmd/picoclaw-launcher-tui/ui/schemes.go rename to cmd/piconomous-launcher-tui/ui/schemes.go index e38d7fa86..a10b3ff88 100644 --- a/cmd/picoclaw-launcher-tui/ui/schemes.go +++ b/cmd/piconomous-launcher-tui/ui/schemes.go @@ -1,7 +1,7 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package ui @@ -11,7 +11,7 @@ import ( "github.com/gdamore/tcell/v2" "github.com/rivo/tview" - tuicfg "github.com/sipeed/picoclaw/cmd/picoclaw-launcher-tui/config" + tuicfg "github.com/sipeed/piconomous/cmd/piconomous-launcher-tui/config" ) func (a *App) newSchemesPage() tview.Primitive { diff --git a/cmd/picoclaw-launcher-tui/ui/users.go b/cmd/piconomous-launcher-tui/ui/users.go similarity index 97% rename from cmd/picoclaw-launcher-tui/ui/users.go rename to cmd/piconomous-launcher-tui/ui/users.go index b00fc8982..95ed1eceb 100644 --- a/cmd/picoclaw-launcher-tui/ui/users.go +++ b/cmd/piconomous-launcher-tui/ui/users.go @@ -1,7 +1,7 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package ui @@ -11,7 +11,7 @@ import ( "github.com/gdamore/tcell/v2" "github.com/rivo/tview" - tuicfg "github.com/sipeed/picoclaw/cmd/picoclaw-launcher-tui/config" + tuicfg "github.com/sipeed/piconomous/cmd/piconomous-launcher-tui/config" ) func (a *App) newUsersPage(schemeName string) tview.Primitive { diff --git a/cmd/picoclaw/dns_noresolv.go b/cmd/piconomous/dns_noresolv.go similarity index 92% rename from cmd/picoclaw/dns_noresolv.go rename to cmd/piconomous/dns_noresolv.go index ba4ae1f4f..571cac393 100644 --- a/cmd/picoclaw/dns_noresolv.go +++ b/cmd/piconomous/dns_noresolv.go @@ -17,8 +17,8 @@ func init() { } // 从环境变量获取 DNS server 列表,多个用 ; 隔开 - // 例如: PICOCLAW_DNS_SERVER="8.8.8.8:53;1.1.1.1:53;223.5.5.5:53" - dnsEnv := os.Getenv("PICOCLAW_DNS_SERVER") + // 例如: PICONOMOUS_DNS_SERVER="8.8.8.8:53;1.1.1.1:53;223.5.5.5:53" + dnsEnv := os.Getenv("PICONOMOUS_DNS_SERVER") if dnsEnv == "" { dnsEnv = "8.8.8.8:53;1.1.1.1:53" } diff --git a/cmd/picoclaw/internal/agent/command.go b/cmd/piconomous/internal/agent/command.go similarity index 100% rename from cmd/picoclaw/internal/agent/command.go rename to cmd/piconomous/internal/agent/command.go diff --git a/cmd/picoclaw/internal/agent/command_test.go b/cmd/piconomous/internal/agent/command_test.go similarity index 100% rename from cmd/picoclaw/internal/agent/command_test.go rename to cmd/piconomous/internal/agent/command_test.go diff --git a/cmd/picoclaw/internal/agent/helpers.go b/cmd/piconomous/internal/agent/helpers.go similarity index 92% rename from cmd/picoclaw/internal/agent/helpers.go rename to cmd/piconomous/internal/agent/helpers.go index c3ddbb77f..9ecfdad1c 100644 --- a/cmd/picoclaw/internal/agent/helpers.go +++ b/cmd/piconomous/internal/agent/helpers.go @@ -11,11 +11,11 @@ import ( "github.com/ergochat/readline" - "github.com/sipeed/picoclaw/cmd/picoclaw/internal" - "github.com/sipeed/picoclaw/pkg/agent" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/sipeed/piconomous/cmd/piconomous/internal" + "github.com/sipeed/piconomous/pkg/agent" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/providers" ) func agentCmd(message, sessionKey, model string, debug bool) error { @@ -82,7 +82,7 @@ func interactiveMode(agentLoop *agent.AgentLoop, sessionKey string) { rl, err := readline.NewEx(&readline.Config{ Prompt: prompt, - HistoryFile: filepath.Join(os.TempDir(), ".picoclaw_history"), + HistoryFile: filepath.Join(os.TempDir(), ".piconomous_history"), HistoryLimit: 100, InterruptPrompt: "^C", EOFPrompt: "exit", diff --git a/cmd/picoclaw/internal/auth/command.go b/cmd/piconomous/internal/auth/command.go similarity index 100% rename from cmd/picoclaw/internal/auth/command.go rename to cmd/piconomous/internal/auth/command.go diff --git a/cmd/picoclaw/internal/auth/command_test.go b/cmd/piconomous/internal/auth/command_test.go similarity index 100% rename from cmd/picoclaw/internal/auth/command_test.go rename to cmd/piconomous/internal/auth/command_test.go diff --git a/cmd/picoclaw/internal/auth/helpers.go b/cmd/piconomous/internal/auth/helpers.go similarity index 97% rename from cmd/picoclaw/internal/auth/helpers.go rename to cmd/piconomous/internal/auth/helpers.go index 4bf132685..b4c6dfaa7 100644 --- a/cmd/picoclaw/internal/auth/helpers.go +++ b/cmd/piconomous/internal/auth/helpers.go @@ -10,10 +10,10 @@ import ( "strings" "time" - "github.com/sipeed/picoclaw/cmd/picoclaw/internal" - "github.com/sipeed/picoclaw/pkg/auth" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/sipeed/piconomous/cmd/piconomous/internal" + "github.com/sipeed/piconomous/pkg/auth" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/providers" ) const ( @@ -162,7 +162,7 @@ func authLoginGoogleAntigravity() error { fmt.Println("\n✓ Google Antigravity login successful!") fmt.Println("Default model set to: gemini-flash") - fmt.Println("Try it: picoclaw agent -m \"Hello world\"") + fmt.Println("Try it: piconomous agent -m \"Hello world\"") return nil } @@ -412,7 +412,7 @@ func authStatusCmd() error { if len(store.Credentials) == 0 { fmt.Println("No authenticated providers.") - fmt.Println("Run: picoclaw auth login --provider ") + fmt.Println("Run: piconomous auth login --provider ") return nil } @@ -460,7 +460,7 @@ func authModelsCmd() error { cred, err := auth.GetCredential("google-antigravity") if err != nil || cred == nil { return fmt.Errorf( - "not logged in to Google Antigravity.\nrun: picoclaw auth login --provider google-antigravity", + "not logged in to Google Antigravity.\nrun: piconomous auth login --provider google-antigravity", ) } diff --git a/cmd/picoclaw/internal/auth/login.go b/cmd/piconomous/internal/auth/login.go similarity index 100% rename from cmd/picoclaw/internal/auth/login.go rename to cmd/piconomous/internal/auth/login.go diff --git a/cmd/picoclaw/internal/auth/login_test.go b/cmd/piconomous/internal/auth/login_test.go similarity index 100% rename from cmd/picoclaw/internal/auth/login_test.go rename to cmd/piconomous/internal/auth/login_test.go diff --git a/cmd/picoclaw/internal/auth/logout.go b/cmd/piconomous/internal/auth/logout.go similarity index 100% rename from cmd/picoclaw/internal/auth/logout.go rename to cmd/piconomous/internal/auth/logout.go diff --git a/cmd/picoclaw/internal/auth/logout_test.go b/cmd/piconomous/internal/auth/logout_test.go similarity index 100% rename from cmd/picoclaw/internal/auth/logout_test.go rename to cmd/piconomous/internal/auth/logout_test.go diff --git a/cmd/picoclaw/internal/auth/models.go b/cmd/piconomous/internal/auth/models.go similarity index 100% rename from cmd/picoclaw/internal/auth/models.go rename to cmd/piconomous/internal/auth/models.go diff --git a/cmd/picoclaw/internal/auth/models_test.go b/cmd/piconomous/internal/auth/models_test.go similarity index 100% rename from cmd/picoclaw/internal/auth/models_test.go rename to cmd/piconomous/internal/auth/models_test.go diff --git a/cmd/picoclaw/internal/auth/status.go b/cmd/piconomous/internal/auth/status.go similarity index 100% rename from cmd/picoclaw/internal/auth/status.go rename to cmd/piconomous/internal/auth/status.go diff --git a/cmd/picoclaw/internal/auth/status_test.go b/cmd/piconomous/internal/auth/status_test.go similarity index 100% rename from cmd/picoclaw/internal/auth/status_test.go rename to cmd/piconomous/internal/auth/status_test.go diff --git a/cmd/picoclaw/internal/cron/add.go b/cmd/piconomous/internal/cron/add.go similarity index 97% rename from cmd/picoclaw/internal/cron/add.go rename to cmd/piconomous/internal/cron/add.go index 947557d5a..e20a70c9e 100644 --- a/cmd/picoclaw/internal/cron/add.go +++ b/cmd/piconomous/internal/cron/add.go @@ -5,7 +5,7 @@ import ( "github.com/spf13/cobra" - "github.com/sipeed/picoclaw/pkg/cron" + "github.com/sipeed/piconomous/pkg/cron" ) func newAddCommand(storePath func() string) *cobra.Command { diff --git a/cmd/picoclaw/internal/cron/add_test.go b/cmd/piconomous/internal/cron/add_test.go similarity index 100% rename from cmd/picoclaw/internal/cron/add_test.go rename to cmd/piconomous/internal/cron/add_test.go diff --git a/cmd/picoclaw/internal/cron/command.go b/cmd/piconomous/internal/cron/command.go similarity index 94% rename from cmd/picoclaw/internal/cron/command.go rename to cmd/piconomous/internal/cron/command.go index 39f8ccf28..cd8a4f7d9 100644 --- a/cmd/picoclaw/internal/cron/command.go +++ b/cmd/piconomous/internal/cron/command.go @@ -6,7 +6,7 @@ import ( "github.com/spf13/cobra" - "github.com/sipeed/picoclaw/cmd/picoclaw/internal" + "github.com/sipeed/piconomous/cmd/piconomous/internal" ) func NewCronCommand() *cobra.Command { diff --git a/cmd/picoclaw/internal/cron/command_test.go b/cmd/piconomous/internal/cron/command_test.go similarity index 100% rename from cmd/picoclaw/internal/cron/command_test.go rename to cmd/piconomous/internal/cron/command_test.go diff --git a/cmd/picoclaw/internal/cron/disable.go b/cmd/piconomous/internal/cron/disable.go similarity index 89% rename from cmd/picoclaw/internal/cron/disable.go rename to cmd/piconomous/internal/cron/disable.go index a3670fd50..9133627b7 100644 --- a/cmd/picoclaw/internal/cron/disable.go +++ b/cmd/piconomous/internal/cron/disable.go @@ -7,7 +7,7 @@ func newDisableCommand(storePath func() string) *cobra.Command { Use: "disable", Short: "Disable a job", Args: cobra.ExactArgs(1), - Example: `picoclaw cron disable 1`, + Example: `piconomous cron disable 1`, RunE: func(_ *cobra.Command, args []string) error { cronSetJobEnabled(storePath(), args[0], false) return nil diff --git a/cmd/picoclaw/internal/cron/disable_test.go b/cmd/piconomous/internal/cron/disable_test.go similarity index 100% rename from cmd/picoclaw/internal/cron/disable_test.go rename to cmd/piconomous/internal/cron/disable_test.go diff --git a/cmd/picoclaw/internal/cron/enable.go b/cmd/piconomous/internal/cron/enable.go similarity index 89% rename from cmd/picoclaw/internal/cron/enable.go rename to cmd/piconomous/internal/cron/enable.go index 7f8b05233..bc9cb6859 100644 --- a/cmd/picoclaw/internal/cron/enable.go +++ b/cmd/piconomous/internal/cron/enable.go @@ -7,7 +7,7 @@ func newEnableCommand(storePath func() string) *cobra.Command { Use: "enable", Short: "Enable a job", Args: cobra.ExactArgs(1), - Example: `picoclaw cron enable 1`, + Example: `piconomous cron enable 1`, RunE: func(_ *cobra.Command, args []string) error { cronSetJobEnabled(storePath(), args[0], true) return nil diff --git a/cmd/picoclaw/internal/cron/enable_test.go b/cmd/piconomous/internal/cron/enable_test.go similarity index 100% rename from cmd/picoclaw/internal/cron/enable_test.go rename to cmd/piconomous/internal/cron/enable_test.go diff --git a/cmd/picoclaw/internal/cron/helpers.go b/cmd/piconomous/internal/cron/helpers.go similarity index 97% rename from cmd/picoclaw/internal/cron/helpers.go rename to cmd/piconomous/internal/cron/helpers.go index 88bdf1bf7..52a0c9e8a 100644 --- a/cmd/picoclaw/internal/cron/helpers.go +++ b/cmd/piconomous/internal/cron/helpers.go @@ -4,7 +4,7 @@ import ( "fmt" "time" - "github.com/sipeed/picoclaw/pkg/cron" + "github.com/sipeed/piconomous/pkg/cron" ) func cronListCmd(storePath string) { diff --git a/cmd/picoclaw/internal/cron/list.go b/cmd/piconomous/internal/cron/list.go similarity index 100% rename from cmd/picoclaw/internal/cron/list.go rename to cmd/piconomous/internal/cron/list.go diff --git a/cmd/picoclaw/internal/cron/list_test.go b/cmd/piconomous/internal/cron/list_test.go similarity index 100% rename from cmd/picoclaw/internal/cron/list_test.go rename to cmd/piconomous/internal/cron/list_test.go diff --git a/cmd/picoclaw/internal/cron/remove.go b/cmd/piconomous/internal/cron/remove.go similarity index 89% rename from cmd/picoclaw/internal/cron/remove.go rename to cmd/piconomous/internal/cron/remove.go index 5f1d1a04b..d7aed1fef 100644 --- a/cmd/picoclaw/internal/cron/remove.go +++ b/cmd/piconomous/internal/cron/remove.go @@ -7,7 +7,7 @@ func newRemoveCommand(storePath func() string) *cobra.Command { Use: "remove", Short: "Remove a job by ID", Args: cobra.ExactArgs(1), - Example: `picoclaw cron remove 1`, + Example: `piconomous cron remove 1`, RunE: func(_ *cobra.Command, args []string) error { cronRemoveCmd(storePath(), args[0]) return nil diff --git a/cmd/picoclaw/internal/cron/remove_test.go b/cmd/piconomous/internal/cron/remove_test.go similarity index 100% rename from cmd/picoclaw/internal/cron/remove_test.go rename to cmd/piconomous/internal/cron/remove_test.go diff --git a/cmd/picoclaw/internal/gateway/command.go b/cmd/piconomous/internal/gateway/command.go similarity index 82% rename from cmd/picoclaw/internal/gateway/command.go rename to cmd/piconomous/internal/gateway/command.go index 4812f1bee..448fca898 100644 --- a/cmd/picoclaw/internal/gateway/command.go +++ b/cmd/piconomous/internal/gateway/command.go @@ -5,10 +5,10 @@ import ( "github.com/spf13/cobra" - "github.com/sipeed/picoclaw/cmd/picoclaw/internal" - "github.com/sipeed/picoclaw/pkg/gateway" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/cmd/piconomous/internal" + "github.com/sipeed/piconomous/pkg/gateway" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/utils" ) func NewGatewayCommand() *cobra.Command { @@ -19,7 +19,7 @@ func NewGatewayCommand() *cobra.Command { cmd := &cobra.Command{ Use: "gateway", Aliases: []string{"g"}, - Short: "Start picoclaw gateway", + Short: "Start piconomous gateway", Args: cobra.NoArgs, PreRunE: func(_ *cobra.Command, _ []string) error { if noTruncate && !debug { diff --git a/cmd/picoclaw/internal/gateway/command_test.go b/cmd/piconomous/internal/gateway/command_test.go similarity index 91% rename from cmd/picoclaw/internal/gateway/command_test.go rename to cmd/piconomous/internal/gateway/command_test.go index 839a7315a..e26dc0fc6 100644 --- a/cmd/picoclaw/internal/gateway/command_test.go +++ b/cmd/piconomous/internal/gateway/command_test.go @@ -13,7 +13,7 @@ func TestNewGatewayCommand(t *testing.T) { require.NotNil(t, cmd) assert.Equal(t, "gateway", cmd.Use) - assert.Equal(t, "Start picoclaw gateway", cmd.Short) + assert.Equal(t, "Start piconomous gateway", cmd.Short) assert.Len(t, cmd.Aliases, 1) assert.True(t, cmd.HasAlias("g")) diff --git a/cmd/picoclaw/internal/helpers.go b/cmd/piconomous/internal/helpers.go similarity index 84% rename from cmd/picoclaw/internal/helpers.go rename to cmd/piconomous/internal/helpers.go index 6b2d65c91..d9490e20e 100644 --- a/cmd/picoclaw/internal/helpers.go +++ b/cmd/piconomous/internal/helpers.go @@ -4,19 +4,19 @@ import ( "os" "path/filepath" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/config" ) const Logo = "🦞" -// GetPicoclawHome returns the picoclaw home directory. -// Priority: $PICOCLAW_HOME > ~/.picoclaw +// GetPicoclawHome returns the piconomous home directory. +// Priority: $PICONOMOUS_HOME > ~/.piconomous func GetPicoclawHome() string { if home := os.Getenv(config.EnvHome); home != "" { return home } home, _ := os.UserHomeDir() - return filepath.Join(home, ".picoclaw") + return filepath.Join(home, ".piconomous") } func GetConfigPath() string { diff --git a/cmd/picoclaw/internal/helpers_test.go b/cmd/piconomous/internal/helpers_test.go similarity index 63% rename from cmd/picoclaw/internal/helpers_test.go rename to cmd/piconomous/internal/helpers_test.go index 583751781..edcee04b5 100644 --- a/cmd/picoclaw/internal/helpers_test.go +++ b/cmd/piconomous/internal/helpers_test.go @@ -14,24 +14,24 @@ func TestGetConfigPath(t *testing.T) { t.Setenv("HOME", "/tmp/home") got := GetConfigPath() - want := filepath.Join("/tmp/home", ".picoclaw", "config.json") + want := filepath.Join("/tmp/home", ".piconomous", "config.json") assert.Equal(t, want, got) } -func TestGetConfigPath_WithPICOCLAW_HOME(t *testing.T) { - t.Setenv("PICOCLAW_HOME", "/custom/picoclaw") +func TestGetConfigPath_WithPICONOMOUS_HOME(t *testing.T) { + t.Setenv("PICONOMOUS_HOME", "/custom/piconomous") t.Setenv("HOME", "/tmp/home") got := GetConfigPath() - want := filepath.Join("/custom/picoclaw", "config.json") + want := filepath.Join("/custom/piconomous", "config.json") assert.Equal(t, want, got) } -func TestGetConfigPath_WithPICOCLAW_CONFIG(t *testing.T) { - t.Setenv("PICOCLAW_CONFIG", "/custom/config.json") - t.Setenv("PICOCLAW_HOME", "/custom/picoclaw") +func TestGetConfigPath_WithPICONOMOUS_CONFIG(t *testing.T) { + t.Setenv("PICONOMOUS_CONFIG", "/custom/config.json") + t.Setenv("PICONOMOUS_HOME", "/custom/piconomous") t.Setenv("HOME", "/tmp/home") got := GetConfigPath() @@ -49,7 +49,7 @@ func TestGetConfigPath_Windows(t *testing.T) { t.Setenv("USERPROFILE", testUserProfilePath) got := GetConfigPath() - want := filepath.Join(testUserProfilePath, ".picoclaw", "config.json") + want := filepath.Join(testUserProfilePath, ".piconomous", "config.json") require.True(t, strings.EqualFold(got, want), "GetConfigPath() = %q, want %q", got, want) } diff --git a/cmd/picoclaw/internal/migrate/command.go b/cmd/piconomous/internal/migrate/command.go similarity index 79% rename from cmd/picoclaw/internal/migrate/command.go rename to cmd/piconomous/internal/migrate/command.go index 76352c9db..d4d785c97 100644 --- a/cmd/picoclaw/internal/migrate/command.go +++ b/cmd/piconomous/internal/migrate/command.go @@ -3,7 +3,7 @@ package migrate import ( "github.com/spf13/cobra" - "github.com/sipeed/picoclaw/pkg/migrate" + "github.com/sipeed/piconomous/pkg/migrate" ) func NewMigrateCommand() *cobra.Command { @@ -11,13 +11,13 @@ func NewMigrateCommand() *cobra.Command { cmd := &cobra.Command{ Use: "migrate", - Short: "Migrate from xxxclaw(openclaw, etc.) to picoclaw", + Short: "Migrate from xxxclaw(openclaw, etc.) to piconomous", Args: cobra.NoArgs, - Example: ` picoclaw migrate - picoclaw migrate --from openclaw - picoclaw migrate --dry-run - picoclaw migrate --refresh - picoclaw migrate --force`, + Example: ` piconomous migrate + piconomous migrate --from openclaw + piconomous migrate --dry-run + piconomous migrate --refresh + piconomous migrate --force`, RunE: func(cmd *cobra.Command, _ []string) error { m := migrate.NewMigrateInstance(opts) result, err := m.Run(opts) @@ -46,7 +46,7 @@ func NewMigrateCommand() *cobra.Command { cmd.Flags().StringVar(&opts.SourceHome, "source-home", "", "Override source home directory (default: ~/.openclaw)") cmd.Flags().StringVar(&opts.TargetHome, "target-home", "", - "Override target home directory (default: ~/.picoclaw)") + "Override target home directory (default: ~/.piconomous)") return cmd } diff --git a/cmd/picoclaw/internal/migrate/command_test.go b/cmd/piconomous/internal/migrate/command_test.go similarity index 91% rename from cmd/picoclaw/internal/migrate/command_test.go rename to cmd/piconomous/internal/migrate/command_test.go index 5110249a2..1254870aa 100644 --- a/cmd/picoclaw/internal/migrate/command_test.go +++ b/cmd/piconomous/internal/migrate/command_test.go @@ -13,7 +13,7 @@ func TestNewMigrateCommand(t *testing.T) { require.NotNil(t, cmd) assert.Equal(t, "migrate", cmd.Use) - assert.Equal(t, "Migrate from xxxclaw(openclaw, etc.) to picoclaw", cmd.Short) + assert.Equal(t, "Migrate from xxxclaw(openclaw, etc.) to piconomous", cmd.Short) assert.Len(t, cmd.Aliases, 0) diff --git a/cmd/picoclaw/internal/model/command.go b/cmd/piconomous/internal/model/command.go similarity index 89% rename from cmd/picoclaw/internal/model/command.go rename to cmd/piconomous/internal/model/command.go index cad106fd5..b06fdbeb4 100644 --- a/cmd/picoclaw/internal/model/command.go +++ b/cmd/piconomous/internal/model/command.go @@ -5,8 +5,8 @@ import ( "github.com/spf13/cobra" - "github.com/sipeed/picoclaw/cmd/picoclaw/internal" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/cmd/piconomous/internal" + "github.com/sipeed/piconomous/pkg/config" ) // LocalModel is a special model name that indicates that the model is local and with or without api_key. @@ -22,10 +22,10 @@ If no argument is provided, shows the current default model. If a model name is provided, sets it as the default model. Examples: - picoclaw model # Show current default model - picoclaw model gpt-5.2 # Set gpt-5.2 as default - picoclaw model claude-sonnet-4.6 # Set claude-sonnet-4.6 as default - picoclaw model local-model # Set local VLLM server as default + piconomous model # Show current default model + piconomous model gpt-5.2 # Set gpt-5.2 as default + piconomous model claude-sonnet-4.6 # Set claude-sonnet-4.6 as default + piconomous model local-model # Set local VLLM server as default Note: 'local-model' is a special value for using a local VLLM server (running at localhost:8000 by default) which does not require an API key.`, diff --git a/cmd/picoclaw/internal/model/command_test.go b/cmd/piconomous/internal/model/command_test.go similarity index 98% rename from cmd/picoclaw/internal/model/command_test.go rename to cmd/piconomous/internal/model/command_test.go index 82943e4a6..7757d4bbf 100644 --- a/cmd/picoclaw/internal/model/command_test.go +++ b/cmd/piconomous/internal/model/command_test.go @@ -10,7 +10,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/config" ) var configPath = "" @@ -18,7 +18,7 @@ var configPath = "" func initTest(t *testing.T) { tmpDir := t.TempDir() configPath = filepath.Join(tmpDir, "config.json") - _ = os.Setenv("PICOCLAW_CONFIG", configPath) + _ = os.Setenv("PICONOMOUS_CONFIG", configPath) } // captureStdout captures stdout during the execution of fn and returns the captured output diff --git a/cmd/picoclaw/internal/onboard/command.go b/cmd/piconomous/internal/onboard/command.go similarity index 88% rename from cmd/picoclaw/internal/onboard/command.go rename to cmd/piconomous/internal/onboard/command.go index 9f8b288c6..26cf8f431 100644 --- a/cmd/picoclaw/internal/onboard/command.go +++ b/cmd/piconomous/internal/onboard/command.go @@ -16,7 +16,7 @@ func NewOnboardCommand() *cobra.Command { cmd := &cobra.Command{ Use: "onboard", Aliases: []string{"o"}, - Short: "Initialize picoclaw configuration and workspace", + Short: "Initialize piconomous configuration and workspace", Run: func(cmd *cobra.Command, args []string) { onboard(encrypt) }, diff --git a/cmd/picoclaw/internal/onboard/command_test.go b/cmd/piconomous/internal/onboard/command_test.go similarity index 89% rename from cmd/picoclaw/internal/onboard/command_test.go rename to cmd/piconomous/internal/onboard/command_test.go index 56936190b..759098691 100644 --- a/cmd/picoclaw/internal/onboard/command_test.go +++ b/cmd/piconomous/internal/onboard/command_test.go @@ -13,7 +13,7 @@ func TestNewOnboardCommand(t *testing.T) { require.NotNil(t, cmd) assert.Equal(t, "onboard", cmd.Use) - assert.Equal(t, "Initialize picoclaw configuration and workspace", cmd.Short) + assert.Equal(t, "Initialize piconomous configuration and workspace", cmd.Short) assert.Len(t, cmd.Aliases, 1) assert.True(t, cmd.HasAlias("o")) diff --git a/cmd/picoclaw/internal/onboard/helpers.go b/cmd/piconomous/internal/onboard/helpers.go similarity index 91% rename from cmd/picoclaw/internal/onboard/helpers.go rename to cmd/piconomous/internal/onboard/helpers.go index 6f1d4bdd7..d466b752a 100644 --- a/cmd/picoclaw/internal/onboard/helpers.go +++ b/cmd/piconomous/internal/onboard/helpers.go @@ -8,9 +8,9 @@ import ( "golang.org/x/term" - "github.com/sipeed/picoclaw/cmd/picoclaw/internal" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/credential" + "github.com/sipeed/piconomous/cmd/piconomous/internal" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/credential" ) func onboard(encrypt bool) { @@ -79,12 +79,12 @@ func onboard(encrypt bool) { workspace := cfg.WorkspacePath() createWorkspaceTemplates(workspace) - fmt.Printf("\n%s picoclaw is ready!\n", internal.Logo) + fmt.Printf("\n%s piconomous is ready!\n", internal.Logo) fmt.Println("\nNext steps:") if encrypt { - fmt.Println(" 1. Set your encryption passphrase before starting picoclaw:") - fmt.Println(" export PICOCLAW_KEY_PASSPHRASE= # Linux/macOS") - fmt.Println(" set PICOCLAW_KEY_PASSPHRASE= # Windows cmd") + fmt.Println(" 1. Set your encryption passphrase before starting piconomous:") + fmt.Println(" export PICONOMOUS_KEY_PASSPHRASE= # Linux/macOS") + fmt.Println(" set PICONOMOUS_KEY_PASSPHRASE= # Windows cmd") fmt.Println("") fmt.Println(" 2. Add your API key to", configPath) } else { @@ -97,7 +97,7 @@ func onboard(encrypt bool) { fmt.Println("") fmt.Println(" See README.md for 17+ supported providers.") fmt.Println("") - fmt.Println(" 3. Chat: picoclaw agent -m \"Hello!\"") + fmt.Println(" 3. Chat: piconomous agent -m \"Hello!\"") } // promptPassphrase reads the encryption passphrase twice from the terminal @@ -127,7 +127,7 @@ func promptPassphrase() (string, error) { return string(p1), nil } -// setupSSHKey generates the picoclaw-specific SSH key at ~/.ssh/picoclaw_ed25519.key. +// setupSSHKey generates the piconomous-specific SSH key at ~/.ssh/piconomous_ed25519.key. // If the key already exists the user is warned and asked to confirm overwrite. // Answering anything other than "y" keeps the existing key (not an error). func setupSSHKey() error { diff --git a/cmd/picoclaw/internal/onboard/helpers_test.go b/cmd/piconomous/internal/onboard/helpers_test.go similarity index 100% rename from cmd/picoclaw/internal/onboard/helpers_test.go rename to cmd/piconomous/internal/onboard/helpers_test.go diff --git a/cmd/picoclaw/internal/skills/command.go b/cmd/piconomous/internal/skills/command.go similarity index 91% rename from cmd/picoclaw/internal/skills/command.go rename to cmd/piconomous/internal/skills/command.go index 8c666b810..fe9f75038 100644 --- a/cmd/picoclaw/internal/skills/command.go +++ b/cmd/piconomous/internal/skills/command.go @@ -6,8 +6,8 @@ import ( "github.com/spf13/cobra" - "github.com/sipeed/picoclaw/cmd/picoclaw/internal" - "github.com/sipeed/picoclaw/pkg/skills" + "github.com/sipeed/piconomous/cmd/piconomous/internal" + "github.com/sipeed/piconomous/pkg/skills" ) type deps struct { @@ -42,7 +42,7 @@ func NewSkillsCommand() *cobra.Command { // get global config directory and builtin skills directory globalDir := filepath.Dir(internal.GetConfigPath()) globalSkillsDir := filepath.Join(globalDir, "skills") - builtinSkillsDir := filepath.Join(globalDir, "picoclaw", "skills") + builtinSkillsDir := filepath.Join(globalDir, "piconomous", "skills") d.skillsLoader = skills.NewSkillsLoader(d.workspace, globalSkillsDir, builtinSkillsDir) return nil diff --git a/cmd/picoclaw/internal/skills/command_test.go b/cmd/piconomous/internal/skills/command_test.go similarity index 100% rename from cmd/picoclaw/internal/skills/command_test.go rename to cmd/piconomous/internal/skills/command_test.go diff --git a/cmd/picoclaw/internal/skills/helpers.go b/cmd/piconomous/internal/skills/helpers.go similarity index 96% rename from cmd/picoclaw/internal/skills/helpers.go rename to cmd/piconomous/internal/skills/helpers.go index a59a2013a..e9b2f6709 100644 --- a/cmd/picoclaw/internal/skills/helpers.go +++ b/cmd/piconomous/internal/skills/helpers.go @@ -9,10 +9,10 @@ import ( "strings" "time" - "github.com/sipeed/picoclaw/cmd/picoclaw/internal" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/skills" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/cmd/piconomous/internal" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/skills" + "github.com/sipeed/piconomous/pkg/utils" ) const skillsSearchMaxResults = 20 @@ -130,7 +130,7 @@ func skillsRemoveCmd(installer *skills.SkillInstaller, skillName string) { } func skillsInstallBuiltinCmd(workspace string) { - builtinSkillsDir := "./picoclaw/skills" + builtinSkillsDir := "./piconomous/skills" workspaceSkillsDir := filepath.Join(workspace, "skills") fmt.Printf("Copying builtin skills to workspace...\n") @@ -171,7 +171,7 @@ func skillsListBuiltinCmd() { fmt.Printf("Error loading config: %v\n", err) return } - builtinSkillsDir := filepath.Join(filepath.Dir(cfg.WorkspacePath()), "picoclaw", "skills") + builtinSkillsDir := filepath.Join(filepath.Dir(cfg.WorkspacePath()), "piconomous", "skills") fmt.Println("\nAvailable Builtin Skills:") fmt.Println("-----------------------") diff --git a/cmd/picoclaw/internal/skills/install.go b/cmd/piconomous/internal/skills/install.go similarity index 83% rename from cmd/picoclaw/internal/skills/install.go rename to cmd/piconomous/internal/skills/install.go index 78bc421db..666967d69 100644 --- a/cmd/picoclaw/internal/skills/install.go +++ b/cmd/piconomous/internal/skills/install.go @@ -5,8 +5,8 @@ import ( "github.com/spf13/cobra" - "github.com/sipeed/picoclaw/cmd/picoclaw/internal" - "github.com/sipeed/picoclaw/pkg/skills" + "github.com/sipeed/piconomous/cmd/piconomous/internal" + "github.com/sipeed/piconomous/pkg/skills" ) func newInstallCommand(installerFn func() (*skills.SkillInstaller, error)) *cobra.Command { @@ -16,8 +16,8 @@ func newInstallCommand(installerFn func() (*skills.SkillInstaller, error)) *cobr Use: "install", Short: "Install skill from GitHub", Example: ` -picoclaw skills install sipeed/picoclaw-skills/weather -picoclaw skills install --registry clawhub github +piconomous skills install sipeed/piconomous-skills/weather +piconomous skills install --registry clawhub github `, Args: func(cmd *cobra.Command, args []string) error { if registry != "" { diff --git a/cmd/picoclaw/internal/skills/install_test.go b/cmd/piconomous/internal/skills/install_test.go similarity index 97% rename from cmd/picoclaw/internal/skills/install_test.go rename to cmd/piconomous/internal/skills/install_test.go index 6b362822d..b4fcb616c 100644 --- a/cmd/picoclaw/internal/skills/install_test.go +++ b/cmd/piconomous/internal/skills/install_test.go @@ -37,7 +37,7 @@ func TestInstallCommandArgs(t *testing.T) { }{ { name: "no registry, one arg", - args: []string{"sipeed/picoclaw-skills/weather"}, + args: []string{"sipeed/piconomous-skills/weather"}, registry: "", expectError: false, }, diff --git a/cmd/picoclaw/internal/skills/installbuiltin.go b/cmd/piconomous/internal/skills/installbuiltin.go similarity index 90% rename from cmd/picoclaw/internal/skills/installbuiltin.go rename to cmd/piconomous/internal/skills/installbuiltin.go index d4b7c6a9f..8a49f23ad 100644 --- a/cmd/picoclaw/internal/skills/installbuiltin.go +++ b/cmd/piconomous/internal/skills/installbuiltin.go @@ -6,7 +6,7 @@ func newInstallBuiltinCommand(workspaceFn func() (string, error)) *cobra.Command cmd := &cobra.Command{ Use: "install-builtin", Short: "Install all builtin skills to workspace", - Example: `picoclaw skills install-builtin`, + Example: `piconomous skills install-builtin`, RunE: func(_ *cobra.Command, _ []string) error { workspace, err := workspaceFn() if err != nil { diff --git a/cmd/picoclaw/internal/skills/installbuiltin_test.go b/cmd/piconomous/internal/skills/installbuiltin_test.go similarity index 100% rename from cmd/picoclaw/internal/skills/installbuiltin_test.go rename to cmd/piconomous/internal/skills/installbuiltin_test.go diff --git a/cmd/picoclaw/internal/skills/list.go b/cmd/piconomous/internal/skills/list.go similarity index 83% rename from cmd/picoclaw/internal/skills/list.go rename to cmd/piconomous/internal/skills/list.go index 7d89ff8ed..377cd4937 100644 --- a/cmd/picoclaw/internal/skills/list.go +++ b/cmd/piconomous/internal/skills/list.go @@ -3,14 +3,14 @@ package skills import ( "github.com/spf13/cobra" - "github.com/sipeed/picoclaw/pkg/skills" + "github.com/sipeed/piconomous/pkg/skills" ) func newListCommand(loaderFn func() (*skills.SkillsLoader, error)) *cobra.Command { cmd := &cobra.Command{ Use: "list", Short: "List installed skills", - Example: `picoclaw skills list`, + Example: `piconomous skills list`, RunE: func(_ *cobra.Command, _ []string) error { loader, err := loaderFn() if err != nil { diff --git a/cmd/picoclaw/internal/skills/list_test.go b/cmd/piconomous/internal/skills/list_test.go similarity index 100% rename from cmd/picoclaw/internal/skills/list_test.go rename to cmd/piconomous/internal/skills/list_test.go diff --git a/cmd/picoclaw/internal/skills/listbuiltin.go b/cmd/piconomous/internal/skills/listbuiltin.go similarity index 86% rename from cmd/picoclaw/internal/skills/listbuiltin.go rename to cmd/piconomous/internal/skills/listbuiltin.go index a3efb8d83..19592118c 100644 --- a/cmd/picoclaw/internal/skills/listbuiltin.go +++ b/cmd/piconomous/internal/skills/listbuiltin.go @@ -6,7 +6,7 @@ func newListBuiltinCommand() *cobra.Command { cmd := &cobra.Command{ Use: "list-builtin", Short: "List available builtin skills", - Example: `picoclaw skills list-builtin`, + Example: `piconomous skills list-builtin`, Run: func(_ *cobra.Command, _ []string) { skillsListBuiltinCmd() }, diff --git a/cmd/picoclaw/internal/skills/listbuiltin_test.go b/cmd/piconomous/internal/skills/listbuiltin_test.go similarity index 100% rename from cmd/picoclaw/internal/skills/listbuiltin_test.go rename to cmd/piconomous/internal/skills/listbuiltin_test.go diff --git a/cmd/picoclaw/internal/skills/remove.go b/cmd/piconomous/internal/skills/remove.go similarity index 84% rename from cmd/picoclaw/internal/skills/remove.go rename to cmd/piconomous/internal/skills/remove.go index cd7d3a8b4..bce8b7879 100644 --- a/cmd/picoclaw/internal/skills/remove.go +++ b/cmd/piconomous/internal/skills/remove.go @@ -3,7 +3,7 @@ package skills import ( "github.com/spf13/cobra" - "github.com/sipeed/picoclaw/pkg/skills" + "github.com/sipeed/piconomous/pkg/skills" ) func newRemoveCommand(installerFn func() (*skills.SkillInstaller, error)) *cobra.Command { @@ -12,7 +12,7 @@ func newRemoveCommand(installerFn func() (*skills.SkillInstaller, error)) *cobra Aliases: []string{"rm", "uninstall"}, Short: "Remove installed skill", Args: cobra.ExactArgs(1), - Example: `picoclaw skills remove weather`, + Example: `piconomous skills remove weather`, RunE: func(_ *cobra.Command, args []string) error { installer, err := installerFn() if err != nil { diff --git a/cmd/picoclaw/internal/skills/remove_test.go b/cmd/piconomous/internal/skills/remove_test.go similarity index 100% rename from cmd/picoclaw/internal/skills/remove_test.go rename to cmd/piconomous/internal/skills/remove_test.go diff --git a/cmd/picoclaw/internal/skills/search.go b/cmd/piconomous/internal/skills/search.go similarity index 100% rename from cmd/picoclaw/internal/skills/search.go rename to cmd/piconomous/internal/skills/search.go diff --git a/cmd/picoclaw/internal/skills/search_test.go b/cmd/piconomous/internal/skills/search_test.go similarity index 100% rename from cmd/picoclaw/internal/skills/search_test.go rename to cmd/piconomous/internal/skills/search_test.go diff --git a/cmd/picoclaw/internal/skills/show.go b/cmd/piconomous/internal/skills/show.go similarity index 83% rename from cmd/picoclaw/internal/skills/show.go rename to cmd/piconomous/internal/skills/show.go index e484f3f28..c5c16474d 100644 --- a/cmd/picoclaw/internal/skills/show.go +++ b/cmd/piconomous/internal/skills/show.go @@ -3,7 +3,7 @@ package skills import ( "github.com/spf13/cobra" - "github.com/sipeed/picoclaw/pkg/skills" + "github.com/sipeed/piconomous/pkg/skills" ) func newShowCommand(loaderFn func() (*skills.SkillsLoader, error)) *cobra.Command { @@ -11,7 +11,7 @@ func newShowCommand(loaderFn func() (*skills.SkillsLoader, error)) *cobra.Comman Use: "show", Short: "Show skill details", Args: cobra.ExactArgs(1), - Example: `picoclaw skills show weather`, + Example: `piconomous skills show weather`, RunE: func(_ *cobra.Command, args []string) error { loader, err := loaderFn() if err != nil { diff --git a/cmd/picoclaw/internal/skills/show_test.go b/cmd/piconomous/internal/skills/show_test.go similarity index 100% rename from cmd/picoclaw/internal/skills/show_test.go rename to cmd/piconomous/internal/skills/show_test.go diff --git a/cmd/picoclaw/internal/status/command.go b/cmd/piconomous/internal/status/command.go similarity index 87% rename from cmd/picoclaw/internal/status/command.go rename to cmd/piconomous/internal/status/command.go index 9303ae2ec..36e260547 100644 --- a/cmd/picoclaw/internal/status/command.go +++ b/cmd/piconomous/internal/status/command.go @@ -8,7 +8,7 @@ func NewStatusCommand() *cobra.Command { cmd := &cobra.Command{ Use: "status", Aliases: []string{"s"}, - Short: "Show picoclaw status", + Short: "Show piconomous status", Run: func(cmd *cobra.Command, args []string) { statusCmd() }, diff --git a/cmd/picoclaw/internal/status/command_test.go b/cmd/piconomous/internal/status/command_test.go similarity index 90% rename from cmd/picoclaw/internal/status/command_test.go rename to cmd/piconomous/internal/status/command_test.go index 974b4ea3d..aebb8264c 100644 --- a/cmd/picoclaw/internal/status/command_test.go +++ b/cmd/piconomous/internal/status/command_test.go @@ -17,7 +17,7 @@ func TestNewStatusCommand(t *testing.T) { assert.Len(t, cmd.Aliases, 1) assert.True(t, cmd.HasAlias("s")) - assert.Equal(t, "Show picoclaw status", cmd.Short) + assert.Equal(t, "Show piconomous status", cmd.Short) assert.False(t, cmd.HasSubCommands()) diff --git a/cmd/picoclaw/internal/status/helpers.go b/cmd/piconomous/internal/status/helpers.go similarity index 93% rename from cmd/picoclaw/internal/status/helpers.go rename to cmd/piconomous/internal/status/helpers.go index dd7063fe6..5b3fed158 100644 --- a/cmd/picoclaw/internal/status/helpers.go +++ b/cmd/piconomous/internal/status/helpers.go @@ -4,9 +4,9 @@ import ( "fmt" "os" - "github.com/sipeed/picoclaw/cmd/picoclaw/internal" - "github.com/sipeed/picoclaw/pkg/auth" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/cmd/piconomous/internal" + "github.com/sipeed/piconomous/pkg/auth" + "github.com/sipeed/piconomous/pkg/config" ) func statusCmd() { @@ -18,7 +18,7 @@ func statusCmd() { configPath := internal.GetConfigPath() - fmt.Printf("%s picoclaw Status\n", internal.Logo) + fmt.Printf("%s piconomous Status\n", internal.Logo) fmt.Printf("Version: %s\n", config.FormatVersion()) build, _ := config.FormatBuildInfo() if build != "" { diff --git a/cmd/picoclaw/internal/version/command.go b/cmd/piconomous/internal/version/command.go similarity index 73% rename from cmd/picoclaw/internal/version/command.go rename to cmd/piconomous/internal/version/command.go index 71c7dd2f8..85aac341f 100644 --- a/cmd/picoclaw/internal/version/command.go +++ b/cmd/piconomous/internal/version/command.go @@ -5,8 +5,8 @@ import ( "github.com/spf13/cobra" - "github.com/sipeed/picoclaw/cmd/picoclaw/internal" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/cmd/piconomous/internal" + "github.com/sipeed/piconomous/pkg/config" ) func NewVersionCommand() *cobra.Command { @@ -23,7 +23,7 @@ func NewVersionCommand() *cobra.Command { } func printVersion() { - fmt.Printf("%s picoclaw %s\n", internal.Logo, config.FormatVersion()) + fmt.Printf("%s piconomous %s\n", internal.Logo, config.FormatVersion()) build, goVer := config.FormatBuildInfo() if build != "" { fmt.Printf(" Build: %s\n", build) diff --git a/cmd/picoclaw/internal/version/command_test.go b/cmd/piconomous/internal/version/command_test.go similarity index 100% rename from cmd/picoclaw/internal/version/command_test.go rename to cmd/piconomous/internal/version/command_test.go diff --git a/cmd/picoclaw/main.go b/cmd/piconomous/main.go similarity index 66% rename from cmd/picoclaw/main.go rename to cmd/piconomous/main.go index bf9c0389f..9c9c37e1b 100644 --- a/cmd/picoclaw/main.go +++ b/cmd/piconomous/main.go @@ -1,8 +1,8 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // Inspired by and based on nanobot: https://github.com/HKUDS/nanobot // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package main @@ -12,27 +12,27 @@ import ( "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/piconomous/cmd/piconomous/internal" + "github.com/sipeed/piconomous/cmd/piconomous/internal/agent" + "github.com/sipeed/piconomous/cmd/piconomous/internal/auth" + "github.com/sipeed/piconomous/cmd/piconomous/internal/cron" + "github.com/sipeed/piconomous/cmd/piconomous/internal/gateway" + "github.com/sipeed/piconomous/cmd/piconomous/internal/migrate" + "github.com/sipeed/piconomous/cmd/piconomous/internal/model" + "github.com/sipeed/piconomous/cmd/piconomous/internal/onboard" + "github.com/sipeed/piconomous/cmd/piconomous/internal/skills" + "github.com/sipeed/piconomous/cmd/piconomous/internal/status" + "github.com/sipeed/piconomous/cmd/piconomous/internal/version" + "github.com/sipeed/piconomous/pkg/config" ) func NewPicoclawCommand() *cobra.Command { - short := fmt.Sprintf("%s picoclaw - Personal AI Assistant v%s\n\n", internal.Logo, config.GetVersion()) + short := fmt.Sprintf("%s piconomous - Personal AI Assistant v%s\n\n", internal.Logo, config.GetVersion()) cmd := &cobra.Command{ - Use: "picoclaw", + Use: "piconomous", Short: short, - Example: "picoclaw version", + Example: "piconomous version", } cmd.AddCommand( diff --git a/cmd/picoclaw/main_test.go b/cmd/piconomous/main_test.go similarity index 79% rename from cmd/picoclaw/main_test.go rename to cmd/piconomous/main_test.go index ad18cb330..15ae5e568 100644 --- a/cmd/picoclaw/main_test.go +++ b/cmd/piconomous/main_test.go @@ -8,8 +8,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/sipeed/picoclaw/cmd/picoclaw/internal" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/cmd/piconomous/internal" + "github.com/sipeed/piconomous/pkg/config" ) func TestNewPicoclawCommand(t *testing.T) { @@ -17,9 +17,9 @@ func TestNewPicoclawCommand(t *testing.T) { require.NotNil(t, cmd) - short := fmt.Sprintf("%s picoclaw - Personal AI Assistant v%s\n\n", internal.Logo, config.GetVersion()) + short := fmt.Sprintf("%s piconomous - Personal AI Assistant v%s\n\n", internal.Logo, config.GetVersion()) - assert.Equal(t, "picoclaw", cmd.Use) + assert.Equal(t, "piconomous", cmd.Use) assert.Equal(t, short, cmd.Short) assert.True(t, cmd.HasSubCommands()) diff --git a/config/config.example.json b/config/config.example.json index 81c9014ec..9bdb60021 100644 --- a/config/config.example.json +++ b/config/config.example.json @@ -1,7 +1,7 @@ { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "restrict_to_workspace": true, "model_name": "gpt-5.4", "max_tokens": 8192, diff --git a/docker/docker-compose.full.yml b/docker/docker-compose.full.yml index 6f34448c4..6a541cb40 100644 --- a/docker/docker-compose.full.yml +++ b/docker/docker-compose.full.yml @@ -1,44 +1,44 @@ services: # ───────────────────────────────────────────── - # PicoClaw Agent (one-shot query) - Full MCP Support - # docker compose -f docker/docker-compose.full.yml run --rm picoclaw-agent -m "Hello" + # Piconomous Agent (one-shot query) - Full MCP Support + # docker compose -f docker/docker-compose.full.yml run --rm piconomous-agent -m "Hello" # ───────────────────────────────────────────── - picoclaw-agent: + piconomous-agent: build: context: .. dockerfile: docker/Dockerfile.full - container_name: picoclaw-agent-full + container_name: piconomous-agent-full profiles: - agent volumes: - - ../config/config.json:/root/.picoclaw/config.json:ro - - picoclaw-workspace:/root/.picoclaw/workspace - - picoclaw-npm-cache:/root/.npm # npm cache for faster MCP server installs - entrypoint: ["picoclaw", "agent"] + - ../config/config.json:/root/.piconomous/config.json:ro + - piconomous-workspace:/root/.piconomous/workspace + - piconomous-npm-cache:/root/.npm # npm cache for faster MCP server installs + entrypoint: ["piconomous", "agent"] stdin_open: true tty: true # ───────────────────────────────────────────── - # PicoClaw Gateway (Long-running Bot) - Full MCP Support + # Piconomous Gateway (Long-running Bot) - Full MCP Support # docker compose -f docker/docker-compose.full.yml --profile gateway up # ───────────────────────────────────────────── - picoclaw-gateway: + piconomous-gateway: build: context: .. dockerfile: docker/Dockerfile.full - container_name: picoclaw-gateway-full + container_name: piconomous-gateway-full restart: unless-stopped profiles: - gateway volumes: # Configuration file - - ../config/config.json:/root/.picoclaw/config.json:ro + - ../config/config.json:/root/.piconomous/config.json:ro # Persistent workspace (sessions, memory, logs) - - picoclaw-workspace:/root/.picoclaw/workspace + - piconomous-workspace:/root/.piconomous/workspace # NPM cache for faster MCP server installs - - picoclaw-npm-cache:/root/.npm + - piconomous-npm-cache:/root/.npm command: ["gateway"] volumes: - picoclaw-workspace: - picoclaw-npm-cache: # Cache npm packages to speed up MCP server installations + piconomous-workspace: + piconomous-npm-cache: # Cache npm packages to speed up MCP server installations diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index b26cf4199..e3f7cc6c5 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -1,29 +1,29 @@ services: # ───────────────────────────────────────────── - # PicoClaw Agent (one-shot query) - # docker compose -f docker/docker-compose.yml run --rm picoclaw-agent -m "Hello" + # Piconomous Agent (one-shot query) + # docker compose -f docker/docker-compose.yml run --rm piconomous-agent -m "Hello" # ───────────────────────────────────────────── - picoclaw-agent: - image: docker.io/sipeed/picoclaw:latest - container_name: picoclaw-agent + piconomous-agent: + image: docker.io/sipeed/piconomous:latest + container_name: piconomous-agent profiles: - agent # Uncomment to access host network; leave commented unless needed. #extra_hosts: # - "host.docker.internal:host-gateway" volumes: - - ./data:/root/.picoclaw - entrypoint: ["picoclaw", "agent"] + - ./data:/root/.piconomous + entrypoint: ["piconomous", "agent"] stdin_open: true tty: true # ───────────────────────────────────────────── - # PicoClaw Gateway (Long-running Bot) + # Piconomous Gateway (Long-running Bot) # docker compose -f docker/docker-compose.yml --profile gateway up # ───────────────────────────────────────────── - picoclaw-gateway: - image: docker.io/sipeed/picoclaw:latest - container_name: picoclaw-gateway + piconomous-gateway: + image: docker.io/sipeed/piconomous:latest + container_name: piconomous-gateway restart: on-failure profiles: - gateway @@ -31,22 +31,22 @@ services: #extra_hosts: # - "host.docker.internal:host-gateway" volumes: - - ./data:/root/.picoclaw + - ./data:/root/.piconomous # ───────────────────────────────────────────── - # PicoClaw Launcher (Web Console + Gateway) + # Piconomous Launcher (Web Console + Gateway) # docker compose -f docker/docker-compose.yml --profile launcher up # ───────────────────────────────────────────── - picoclaw-launcher: - image: docker.io/sipeed/picoclaw:launcher - container_name: picoclaw-launcher + piconomous-launcher: + image: docker.io/sipeed/piconomous:launcher + container_name: piconomous-launcher restart: on-failure profiles: - launcher environment: - - PICOCLAW_GATEWAY_HOST=0.0.0.0 + - PICONOMOUS_GATEWAY_HOST=0.0.0.0 ports: - "127.0.0.1:18800:18800" - "127.0.0.1:18790:18790" volumes: - - ./data:/root/.picoclaw + - ./data:/root/.piconomous diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index b6fc724b5..31acd2031 100644 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -4,12 +4,12 @@ set -e # First-run: neither config nor workspace exists. # If config.json is already mounted but workspace is missing we skip onboard to # avoid the interactive "Overwrite? (y/n)" prompt hanging in a non-TTY container. -if [ ! -d "${HOME}/.picoclaw/workspace" ] && [ ! -f "${HOME}/.picoclaw/config.json" ]; then - picoclaw onboard +if [ ! -d "${HOME}/.piconomous/workspace" ] && [ ! -f "${HOME}/.piconomous/config.json" ]; then + piconomous onboard echo "" echo "First-run setup complete." - echo "Edit ${HOME}/.picoclaw/config.json (add your API key, etc.) then restart the container." + echo "Edit ${HOME}/.piconomous/config.json (add your API key, etc.) then restart the container." exit 0 fi -exec picoclaw gateway "$@" +exec piconomous gateway "$@" diff --git a/docs/ANTIGRAVITY_AUTH.md b/docs/ANTIGRAVITY_AUTH.md index d88d73c8d..94311353c 100644 --- a/docs/ANTIGRAVITY_AUTH.md +++ b/docs/ANTIGRAVITY_AUTH.md @@ -2,7 +2,7 @@ ## Overview -**Antigravity** (Google Cloud Code Assist) is a Google-backed AI model provider that offers access to models like Claude Opus 4.6 and Gemini through Google's Cloud infrastructure. This document provides a complete guide on how authentication works, how to fetch models, and how to implement a new provider in PicoClaw. +**Antigravity** (Google Cloud Code Assist) is a Google-backed AI model provider that offers access to models like Claude Opus 4.6 and Gemini through Google's Cloud infrastructure. This document provides a complete guide on how authentication works, how to fetch models, and how to implement a new provider in Piconomous. --- @@ -17,7 +17,7 @@ 7. [Integration Requirements](#integration-requirements) 8. [API Endpoints](#api-endpoints) 9. [Configuration](#configuration) -10. [Creating a New Provider in PicoClaw](#creating-a-new-provider-in-picoclaw) +10. [Creating a New Provider in Piconomous](#creating-a-new-provider-in-piconomous) --- @@ -378,7 +378,7 @@ const antigravityPlugin = { description: "OAuth flow for Google Antigravity (Cloud Code Assist)", configSchema: emptyPluginConfigSchema(), - register(api: PicoClawPluginApi) { + register(api: PiconomousPluginApi) { api.registerProvider({ id: "google-antigravity", label: "Google Antigravity", @@ -405,7 +405,7 @@ const antigravityPlugin = { ```typescript type ProviderAuthContext = { - config: PicoClawConfig; + config: PiconomousConfig; agentDir?: string; workspaceDir?: string; prompter: WizardPrompter; // UI prompts/notifications @@ -426,7 +426,7 @@ type ProviderAuthResult = { profileId: string; credential: AuthProfileCredential; }>; - configPatch?: Partial; + configPatch?: Partial; defaultModel?: string; notes?: string[]; }; @@ -439,7 +439,7 @@ type ProviderAuthResult = { ### 1. Required Environment/Dependencies - Go ≥ 1.25 -- PicoClaw codebase (`pkg/providers/` and `pkg/auth/`) +- Piconomous codebase (`pkg/providers/` and `pkg/auth/`) - `crypto` and `net/http` standard library packages ### 2. Required Headers for API Calls @@ -592,7 +592,7 @@ Each SSE message (`data: {...}`) is wrapped in a `response` field: ### Auth Profile Storage -Auth profiles are stored in `~/.picoclaw/auth.json`: +Auth profiles are stored in `~/.piconomous/auth.json`: ```json { @@ -612,9 +612,9 @@ Auth profiles are stored in `~/.picoclaw/auth.json`: --- -## Creating a New Provider in PicoClaw +## Creating a New Provider in Piconomous -PicoClaw providers are implemented as Go packages under `pkg/providers/`. To add a new provider: +Piconomous providers are implemented as Go packages under `pkg/providers/`. To add a new provider: ### Step-by-Step Implementation @@ -674,7 +674,7 @@ Add a default entry in `pkg/config/defaults.go`: #### 5. Add Auth Support (Optional) -If your provider requires OAuth or special authentication, add a case to `cmd/picoclaw/internal/auth/helpers.go`: +If your provider requires OAuth or special authentication, add a case to `cmd/piconomous/internal/auth/helpers.go`: ```go case "your-provider": @@ -704,26 +704,26 @@ case "your-provider": ```bash # Authenticate with a provider -picoclaw auth login --provider your-provider +piconomous auth login --provider your-provider # List models (for Antigravity) -picoclaw auth models +piconomous auth models # Start the gateway -picoclaw gateway +piconomous gateway # Run an agent with a specific model -picoclaw agent -m "Hello" --model your-model +piconomous agent -m "Hello" --model your-model ``` ### Environment Variables for Testing ```bash # Override default model -export PICOCLAW_AGENTS_DEFAULTS_MODEL=your-model +export PICONOMOUS_AGENTS_DEFAULTS_MODEL=your-model # Override provider settings -export PICOCLAW_MODEL_LIST='[{"model_name":"your-model","model":"your-provider/model-name","api_key":"..."}]' +export PICONOMOUS_MODEL_LIST='[{"model_name":"your-model","model":"your-provider/model-name","api_key":"..."}]' ``` --- @@ -733,10 +733,10 @@ export PICOCLAW_MODEL_LIST='[{"model_name":"your-model","model":"your-provider/m - **Source Files:** - `pkg/providers/antigravity_provider.go` - Antigravity provider implementation - `pkg/auth/oauth.go` - OAuth flow implementation - - `pkg/auth/store.go` - Auth credential storage (`~/.picoclaw/auth.json`) + - `pkg/auth/store.go` - Auth credential storage (`~/.piconomous/auth.json`) - `pkg/providers/factory.go` - Provider factory and protocol routing - `pkg/providers/types.go` - Provider interface definitions - - `cmd/picoclaw/internal/auth/helpers.go` - Auth CLI commands + - `cmd/piconomous/internal/auth/helpers.go` - Auth CLI commands - **Documentation:** - `docs/ANTIGRAVITY_USAGE.md` - Antigravity usage guide @@ -792,7 +792,7 @@ Some models might show up in the available models list but return an empty respo ## Troubleshooting ### "Token expired" -- Refresh OAuth tokens: `picoclaw auth login --provider antigravity` +- Refresh OAuth tokens: `piconomous auth login --provider antigravity` ### "Gemini for Google Cloud is not enabled" - Enable the API in your Google Cloud Console @@ -803,5 +803,5 @@ Some models might show up in the available models list but return an empty respo ### Models not appearing in list - Verify OAuth authentication completed successfully -- Check auth profile storage: `~/.picoclaw/auth.json` -- Re-run `picoclaw auth login --provider antigravity` +- Check auth profile storage: `~/.piconomous/auth.json` +- Re-run `piconomous auth login --provider antigravity` diff --git a/docs/ANTIGRAVITY_USAGE.md b/docs/ANTIGRAVITY_USAGE.md index e8194b6bc..b358c0f3f 100644 --- a/docs/ANTIGRAVITY_USAGE.md +++ b/docs/ANTIGRAVITY_USAGE.md @@ -1,6 +1,6 @@ -# Using Antigravity Provider in PicoClaw +# Using Antigravity Provider in Piconomous -This guide explains how to set up and use the **Antigravity** (Google Cloud Code Assist) provider in PicoClaw. +This guide explains how to set up and use the **Antigravity** (Google Cloud Code Assist) provider in Piconomous. ## Prerequisites @@ -12,7 +12,7 @@ This guide explains how to set up and use the **Antigravity** (Google Cloud Code To authenticate with Antigravity, run the following command: ```bash -picoclaw auth login --provider antigravity +piconomous auth login --provider antigravity ``` ### Manual Authentication (Headless/VPS) @@ -22,9 +22,9 @@ If you are running on a server (Coolify/Docker) and cannot reach `localhost`, fo 3. Complete the login. 4. Your browser will redirect to a `localhost:51121` URL (which will fail to load). 5. **Copy that final URL** from your browser's address bar. -6. **Paste it back into the terminal** where PicoClaw is waiting. +6. **Paste it back into the terminal** where Piconomous is waiting. -PicoClaw will extract the authorization code and complete the process automatically. +Piconomous will extract the authorization code and complete the process automatically. ## 2. Managing Models @@ -32,15 +32,15 @@ PicoClaw will extract the authorization code and complete the process automatica To see which models your project has access to and check their quotas: ```bash -picoclaw auth models +piconomous auth models ``` ### Switch Models -You can change the default model in `~/.picoclaw/config.json` or override it via the CLI: +You can change the default model in `~/.piconomous/config.json` or override it via the CLI: ```bash # Override for a single command -picoclaw agent -m "Hello" --model claude-opus-4-6-thinking +piconomous agent -m "Hello" --model claude-opus-4-6-thinking ``` ## 3. Real-world Usage (Coolify/Docker) @@ -48,19 +48,19 @@ picoclaw agent -m "Hello" --model claude-opus-4-6-thinking If you are deploying via Coolify or Docker, follow these steps to test: 1. **Environment Variables**: - * `PICOCLAW_AGENTS_DEFAULTS_MODEL=gemini-flash` + * `PICONOMOUS_AGENTS_DEFAULTS_MODEL=gemini-flash` 2. **Authentication persistence**: If you've logged in locally, you can copy your credentials to the server: ```bash - scp ~/.picoclaw/auth.json user@your-server:~/.picoclaw/ + scp ~/.piconomous/auth.json user@your-server:~/.piconomous/ ``` *Alternatively*, run the `auth login` command once on the server if you have terminal access. ## 4. Troubleshooting * **Empty Response**: If a model returns an empty reply, it may be restricted for your project. Try `gemini-3-flash` or `claude-opus-4-6-thinking`. -* **429 Rate Limit**: Antigravity has strict quotas. PicoClaw will display the "reset time" in the error message if you hit a limit. -* **404 Not Found**: Ensure you are using a model ID from the `picoclaw auth models` list. Use the short ID (e.g., `gemini-3-flash`) not the full path. +* **429 Rate Limit**: Antigravity has strict quotas. Piconomous will display the "reset time" in the error message if you hit a limit. +* **404 Not Found**: Ensure you are using a model ID from the `piconomous auth models` list. Use the short ID (e.g., `gemini-3-flash`) not the full path. ## 5. Summary of Working Models diff --git a/docs/channels/discord/README.fr.md b/docs/channels/discord/README.fr.md index 61c34abb9..c3a639571 100644 --- a/docs/channels/discord/README.fr.md +++ b/docs/channels/discord/README.fr.md @@ -2,7 +2,7 @@ # Discord -Discord est une application gratuite de chat vocal, vidéo et textuel conçue pour les communautés. PicoClaw se connecte aux serveurs Discord via l'API Bot Discord, avec prise en charge de la réception et de l'envoi de messages. +Discord est une application gratuite de chat vocal, vidéo et textuel conçue pour les communautés. Piconomous se connecte aux serveurs Discord via l'API Bot Discord, avec prise en charge de la réception et de l'envoi de messages. ## Configuration diff --git a/docs/channels/discord/README.ja.md b/docs/channels/discord/README.ja.md index ecce30059..71e767b46 100644 --- a/docs/channels/discord/README.ja.md +++ b/docs/channels/discord/README.ja.md @@ -2,7 +2,7 @@ # Discord -Discord はコミュニティ向けに設計された無料の音声・ビデオ・テキストチャットアプリケーションです。PicoClaw は Discord Bot API を通じて Discord サーバーに接続し、メッセージの受信と送信をサポートします。 +Discord はコミュニティ向けに設計された無料の音声・ビデオ・テキストチャットアプリケーションです。Piconomous は Discord Bot API を通じて Discord サーバーに接続し、メッセージの受信と送信をサポートします。 ## 設定 diff --git a/docs/channels/discord/README.md b/docs/channels/discord/README.md index e1ce7ab06..64a8f9a01 100644 --- a/docs/channels/discord/README.md +++ b/docs/channels/discord/README.md @@ -2,7 +2,7 @@ # Discord -Discord is a free voice, video, and text chat application designed for communities. PicoClaw connects to Discord servers via the Discord Bot API, supporting both receiving and sending messages. +Discord is a free voice, video, and text chat application designed for communities. Piconomous connects to Discord servers via the Discord Bot API, supporting both receiving and sending messages. ## Configuration diff --git a/docs/channels/discord/README.pt-br.md b/docs/channels/discord/README.pt-br.md index c9ed2809b..6af4f36a7 100644 --- a/docs/channels/discord/README.pt-br.md +++ b/docs/channels/discord/README.pt-br.md @@ -2,7 +2,7 @@ # Discord -Discord é um aplicativo gratuito de chat de voz, vídeo e texto projetado para comunidades. O PicoClaw se conecta a servidores Discord via Discord Bot API, com suporte para receber e enviar mensagens. +Discord é um aplicativo gratuito de chat de voz, vídeo e texto projetado para comunidades. O Piconomous se conecta a servidores Discord via Discord Bot API, com suporte para receber e enviar mensagens. ## Configuração diff --git a/docs/channels/discord/README.vi.md b/docs/channels/discord/README.vi.md index 7073b04f1..45c4c77c1 100644 --- a/docs/channels/discord/README.vi.md +++ b/docs/channels/discord/README.vi.md @@ -2,7 +2,7 @@ # Discord -Discord là ứng dụng chat thoại, video và văn bản miễn phí được thiết kế cho cộng đồng. PicoClaw kết nối với máy chủ Discord qua Discord Bot API, hỗ trợ nhận và gửi tin nhắn. +Discord là ứng dụng chat thoại, video và văn bản miễn phí được thiết kế cho cộng đồng. Piconomous kết nối với máy chủ Discord qua Discord Bot API, hỗ trợ nhận và gửi tin nhắn. ## Cấu hình diff --git a/docs/channels/discord/README.zh.md b/docs/channels/discord/README.zh.md index 673af4854..50eff52ba 100644 --- a/docs/channels/discord/README.zh.md +++ b/docs/channels/discord/README.zh.md @@ -2,7 +2,7 @@ # Discord -Discord 是一个专为社区设计的免费语音、视频和文本聊天应用。PicoClaw 通过 Discord Bot API 连接到 Discord 服务器,支持接收和发送消息。 +Discord 是一个专为社区设计的免费语音、视频和文本聊天应用。Piconomous 通过 Discord Bot API 连接到 Discord 服务器,支持接收和发送消息。 ## 配置 diff --git a/docs/channels/feishu/README.fr.md b/docs/channels/feishu/README.fr.md index f1ff26480..59722f13d 100644 --- a/docs/channels/feishu/README.fr.md +++ b/docs/channels/feishu/README.fr.md @@ -37,11 +37,11 @@ Feishu (nom international : Lark) est une plateforme de collaboration d'entrepri 2. Activer la capacité **Bot** dans les paramètres de l'application 3. Créer une version et publier l'application (la configuration prend effet après la publication) 4. Obtenir l'**App ID** (commence par `cli_`) et l'**App Secret** -5. Renseigner l'App ID et l'App Secret dans le fichier de configuration PicoClaw -6. Exécuter `picoclaw gateway` pour démarrer le service +5. Renseigner l'App ID et l'App Secret dans le fichier de configuration Piconomous +6. Exécuter `piconomous gateway` pour démarrer le service 7. Rechercher le nom du bot dans Feishu et commencer une conversation -> PicoClaw se connecte à Feishu en mode WebSocket/SDK — aucune adresse de callback publique ni URL Webhook n'est requise. +> Piconomous se connecte à Feishu en mode WebSocket/SDK — aucune adresse de callback publique ni URL Webhook n'est requise. > > `encrypt_key` et `verification_token` sont optionnels ; l'activation du chiffrement des événements est recommandée pour les environnements de production. > diff --git a/docs/channels/feishu/README.ja.md b/docs/channels/feishu/README.ja.md index 4bb75a734..0fe516818 100644 --- a/docs/channels/feishu/README.ja.md +++ b/docs/channels/feishu/README.ja.md @@ -37,11 +37,11 @@ 2. アプリケーション設定で**ボット**機能を有効にする 3. バージョンを作成してアプリケーションを公開する(公開後に設定が有効になる) 4. **App ID**(`cli_` で始まる)と **App Secret** を取得する -5. PicoClaw 設定ファイルに App ID と App Secret を入力する -6. `picoclaw gateway` を実行してサービスを起動する +5. Piconomous 設定ファイルに App ID と App Secret を入力する +6. `piconomous gateway` を実行してサービスを起動する 7. 飛書でボット名を検索して会話を始める -> PicoClaw は WebSocket/SDK モードで飛書に接続するため、公開コールバックアドレスや Webhook URL の設定は不要です。 +> Piconomous は WebSocket/SDK モードで飛書に接続するため、公開コールバックアドレスや Webhook URL の設定は不要です。 > > `encrypt_key` と `verification_token` はオプションですが、本番環境ではイベント暗号化を有効にすることを推奨します。 > diff --git a/docs/channels/feishu/README.md b/docs/channels/feishu/README.md index 2aeaa31cb..c355d9fa8 100644 --- a/docs/channels/feishu/README.md +++ b/docs/channels/feishu/README.md @@ -37,11 +37,11 @@ Feishu (international name: Lark) is an enterprise collaboration platform by Byt 2. Enable the **Bot** capability in the application settings 3. Create a version and publish the application (configuration takes effect only after publishing) 4. Obtain the **App ID** (starts with `cli_`) and **App Secret** -5. Fill in the App ID and App Secret in the PicoClaw configuration file -6. Run `picoclaw gateway` to start the service +5. Fill in the App ID and App Secret in the Piconomous configuration file +6. Run `piconomous gateway` to start the service 7. Search for the bot name in Feishu and start a conversation -> PicoClaw connects to Feishu using WebSocket/SDK mode — no public callback address or Webhook URL is required. +> Piconomous connects to Feishu using WebSocket/SDK mode — no public callback address or Webhook URL is required. > > `encrypt_key` and `verification_token` are optional; enabling event encryption is recommended for production environments. > diff --git a/docs/channels/feishu/README.pt-br.md b/docs/channels/feishu/README.pt-br.md index 5b5fcaf68..8cc47e81d 100644 --- a/docs/channels/feishu/README.pt-br.md +++ b/docs/channels/feishu/README.pt-br.md @@ -37,11 +37,11 @@ Feishu (nome internacional: Lark) é uma plataforma de colaboração empresarial 2. Habilite a capacidade de **Bot** nas configurações da aplicação 3. Crie uma versão e publique a aplicação (a configuração entra em vigor após a publicação) 4. Obtenha o **App ID** (começa com `cli_`) e o **App Secret** -5. Preencha o App ID e o App Secret no arquivo de configuração do PicoClaw -6. Execute `picoclaw gateway` para iniciar o serviço +5. Preencha o App ID e o App Secret no arquivo de configuração do Piconomous +6. Execute `piconomous gateway` para iniciar o serviço 7. Pesquise o nome do bot no Feishu e inicie uma conversa -> O PicoClaw se conecta ao Feishu usando o modo WebSocket/SDK — nenhum endereço de callback público ou URL de Webhook é necessário. +> O Piconomous se conecta ao Feishu usando o modo WebSocket/SDK — nenhum endereço de callback público ou URL de Webhook é necessário. > > `encrypt_key` e `verification_token` são opcionais; recomenda-se habilitar a criptografia de eventos em ambientes de produção. > diff --git a/docs/channels/feishu/README.vi.md b/docs/channels/feishu/README.vi.md index e704b7794..80bfab717 100644 --- a/docs/channels/feishu/README.vi.md +++ b/docs/channels/feishu/README.vi.md @@ -37,11 +37,11 @@ Feishu (tên quốc tế: Lark) là nền tảng cộng tác doanh nghiệp củ 2. Bật khả năng **Bot** trong cài đặt ứng dụng 3. Tạo phiên bản và xuất bản ứng dụng (cấu hình có hiệu lực sau khi xuất bản) 4. Lấy **App ID** (bắt đầu bằng `cli_`) và **App Secret** -5. Điền App ID và App Secret vào file cấu hình PicoClaw -6. Chạy `picoclaw gateway` để khởi động dịch vụ +5. Điền App ID và App Secret vào file cấu hình Piconomous +6. Chạy `piconomous gateway` để khởi động dịch vụ 7. Tìm kiếm tên bot trong Feishu và bắt đầu trò chuyện -> PicoClaw kết nối với Feishu bằng chế độ WebSocket/SDK — không cần cấu hình địa chỉ callback công khai hay Webhook URL. +> Piconomous kết nối với Feishu bằng chế độ WebSocket/SDK — không cần cấu hình địa chỉ callback công khai hay Webhook URL. > > `encrypt_key` và `verification_token` là tùy chọn; nên bật mã hóa sự kiện trong môi trường sản xuất. > diff --git a/docs/channels/feishu/README.zh.md b/docs/channels/feishu/README.zh.md index 6e2829547..5720e52f5 100644 --- a/docs/channels/feishu/README.zh.md +++ b/docs/channels/feishu/README.zh.md @@ -40,7 +40,7 @@ 3. 配置事件订阅和Webhook URL 4. 设置加密(可选,生产环境建议启用) 5. 将 App ID、App Secret、Encrypt Key 和 Verification Token(如果启用加密) 填入配置文件中 -6. 自定义你希望 PicoClaw react 你消息时的表情(可选, Reference URL: [Feishu Emoji List](https://open.larkoffice.com/document/server-docs/im-v1/message-reaction/emojis-introduce)) +6. 自定义你希望 Piconomous react 你消息时的表情(可选, Reference URL: [Feishu Emoji List](https://open.larkoffice.com/document/server-docs/im-v1/message-reaction/emojis-introduce)) ## 平台限制 diff --git a/docs/channels/line/README.fr.md b/docs/channels/line/README.fr.md index 10bdf3e58..1d34caecb 100644 --- a/docs/channels/line/README.fr.md +++ b/docs/channels/line/README.fr.md @@ -2,7 +2,7 @@ # Line -PicoClaw prend en charge LINE via l'API LINE Messaging avec des callbacks webhook. +Piconomous prend en charge LINE via l'API LINE Messaging avec des callbacks webhook. ## Configuration @@ -34,7 +34,7 @@ PicoClaw prend en charge LINE via l'API LINE Messaging avec des callbacks webhoo 2. Obtenez le Channel Secret et le Channel Access Token 3. Configurez le webhook : - LINE exige que les webhooks utilisent HTTPS. Vous devez donc déployer un serveur compatible HTTPS ou utiliser un outil de proxy inverse comme ngrok pour exposer votre serveur local sur Internet - - PicoClaw utilise un serveur HTTP Gateway partagé pour recevoir les callbacks webhook de tous les canaux, écoutant par défaut sur 127.0.0.1:18790 + - Piconomous utilise un serveur HTTP Gateway partagé pour recevoir les callbacks webhook de tous les canaux, écoutant par défaut sur 127.0.0.1:18790 - Définissez l'URL du webhook sur `https://your-domain.com/webhook/line`, puis configurez un proxy inverse de votre domaine externe vers le Gateway local (port par défaut 18790) - Activez le webhook et vérifiez l'URL 4. Renseignez le Channel Secret et le Channel Access Token dans le fichier de configuration diff --git a/docs/channels/line/README.ja.md b/docs/channels/line/README.ja.md index 0e559093a..379c415f3 100644 --- a/docs/channels/line/README.ja.md +++ b/docs/channels/line/README.ja.md @@ -2,7 +2,7 @@ # Line -PicoClaw は LINE Messaging API と Webhook コールバックを通じて LINE をサポートします。 +Piconomous は LINE Messaging API と Webhook コールバックを通じて LINE をサポートします。 ## 設定 @@ -34,7 +34,7 @@ PicoClaw は LINE Messaging API と Webhook コールバックを通じて LINE 2. Channel Secret と Channel Access Token を取得する 3. Webhook を設定する: - LINE は Webhook に HTTPS が必要なため、HTTPS 対応サーバーをデプロイするか、ngrok などのリバースプロキシツールを使用してローカルサーバーをインターネットに公開する必要があります - - PicoClaw は共有の Gateway HTTP サーバーを使用してすべてのチャンネルの Webhook コールバックを受信します。デフォルトのリッスンアドレスは 127.0.0.1:18790 です + - Piconomous は共有の Gateway HTTP サーバーを使用してすべてのチャンネルの Webhook コールバックを受信します。デフォルトのリッスンアドレスは 127.0.0.1:18790 です - Webhook URL を `https://your-domain.com/webhook/line` に設定し、外部ドメインをローカルの Gateway(デフォルトポート 18790)にリバースプロキシする - Webhook を有効にして URL を検証する 4. Channel Secret と Channel Access Token を設定ファイルに入力する diff --git a/docs/channels/line/README.md b/docs/channels/line/README.md index 1aad18eee..88d09896c 100644 --- a/docs/channels/line/README.md +++ b/docs/channels/line/README.md @@ -2,7 +2,7 @@ # Line -PicoClaw supports LINE through the LINE Messaging API with webhook callbacks. +Piconomous supports LINE through the LINE Messaging API with webhook callbacks. ## Configuration @@ -34,7 +34,7 @@ PicoClaw supports LINE through the LINE Messaging API with webhook callbacks. 2. Obtain the Channel Secret and Channel Access Token 3. Configure the webhook: - LINE requires webhooks to use HTTPS, so you need to deploy a server with HTTPS support, or use a reverse proxy tool like ngrok to expose your local server to the internet - - PicoClaw uses a shared Gateway HTTP server to receive webhook callbacks for all channels, listening on 127.0.0.1:18790 by default + - Piconomous uses a shared Gateway HTTP server to receive webhook callbacks for all channels, listening on 127.0.0.1:18790 by default - Set the Webhook URL to `https://your-domain.com/webhook/line`, then reverse-proxy your external domain to the local Gateway (default port 18790) - Enable the webhook and verify the URL 4. Fill in the Channel Secret and Channel Access Token in the configuration file diff --git a/docs/channels/line/README.pt-br.md b/docs/channels/line/README.pt-br.md index b3334461f..8ba6d0393 100644 --- a/docs/channels/line/README.pt-br.md +++ b/docs/channels/line/README.pt-br.md @@ -2,7 +2,7 @@ # Line -O PicoClaw suporta o LINE por meio da LINE Messaging API com callbacks de webhook. +O Piconomous suporta o LINE por meio da LINE Messaging API com callbacks de webhook. ## Configuração @@ -34,7 +34,7 @@ O PicoClaw suporta o LINE por meio da LINE Messaging API com callbacks de webhoo 2. Obtenha o Channel Secret e o Channel Access Token 3. Configure o webhook: - O LINE exige que os webhooks usem HTTPS, portanto é necessário implantar um servidor com suporte a HTTPS ou usar uma ferramenta de proxy reverso como o ngrok para expor seu servidor local à internet - - O PicoClaw usa um servidor HTTP Gateway compartilhado para receber callbacks de webhook de todos os canais, escutando em 127.0.0.1:18790 por padrão + - O Piconomous usa um servidor HTTP Gateway compartilhado para receber callbacks de webhook de todos os canais, escutando em 127.0.0.1:18790 por padrão - Defina a URL do webhook como `https://your-domain.com/webhook/line` e configure um proxy reverso do seu domínio externo para o Gateway local (porta padrão 18790) - Ative o webhook e verifique a URL 4. Preencha o Channel Secret e o Channel Access Token no arquivo de configuração diff --git a/docs/channels/line/README.vi.md b/docs/channels/line/README.vi.md index 3e5511a84..e25940d2e 100644 --- a/docs/channels/line/README.vi.md +++ b/docs/channels/line/README.vi.md @@ -2,7 +2,7 @@ # Line -PicoClaw hỗ trợ LINE thông qua LINE Messaging API kết hợp với webhook callback. +Piconomous hỗ trợ LINE thông qua LINE Messaging API kết hợp với webhook callback. ## Cấu hình @@ -34,7 +34,7 @@ PicoClaw hỗ trợ LINE thông qua LINE Messaging API kết hợp với webhook 2. Lấy Channel Secret và Channel Access Token 3. Cấu hình webhook: - LINE yêu cầu webhook phải sử dụng HTTPS, vì vậy bạn cần triển khai máy chủ hỗ trợ HTTPS hoặc dùng công cụ reverse proxy như ngrok để expose máy chủ cục bộ ra internet - - PicoClaw sử dụng máy chủ HTTP Gateway dùng chung để nhận webhook callback cho tất cả các kênh, mặc định lắng nghe tại 127.0.0.1:18790 + - Piconomous sử dụng máy chủ HTTP Gateway dùng chung để nhận webhook callback cho tất cả các kênh, mặc định lắng nghe tại 127.0.0.1:18790 - Đặt Webhook URL thành `https://your-domain.com/webhook/line`, sau đó reverse proxy tên miền bên ngoài về Gateway cục bộ (cổng mặc định 18790) - Bật webhook và xác minh URL 4. Điền Channel Secret và Channel Access Token vào file cấu hình diff --git a/docs/channels/line/README.zh.md b/docs/channels/line/README.zh.md index 0f7dd0cd8..882174dcc 100644 --- a/docs/channels/line/README.zh.md +++ b/docs/channels/line/README.zh.md @@ -2,7 +2,7 @@ # Line -PicoClaw 通过 LINE Messaging API 配合 Webhook 回调功能实现对 LINE 的支持。 +Piconomous 通过 LINE Messaging API 配合 Webhook 回调功能实现对 LINE 的支持。 ## 配置 @@ -34,7 +34,7 @@ PicoClaw 通过 LINE Messaging API 配合 Webhook 回调功能实现对 LINE 的 2. 获取 Channel Secret 和 Channel Access Token 3. 配置Webhook: - LINE 要求 Webhook 必须使用 HTTPS 协议,因此需要部署一个支持 HTTPS 的服务器,或者使用反向代理工具如 ngrok 将本地服务器暴露到公网 - - PicoClaw 现在使用共享的 Gateway HTTP 服务器来接收所有渠道的 webhook 回调,默认监听地址为 127.0.0.1:18790 + - Piconomous 现在使用共享的 Gateway HTTP 服务器来接收所有渠道的 webhook 回调,默认监听地址为 127.0.0.1:18790 - 将 Webhook URL 设置为 `https://your-domain.com/webhook/line`,然后将外部域名反向代理到本机的 Gateway(默认端口 18790) - 启用 Webhook 并验证 URL 4. 将 Channel Secret 和 Channel Access Token 填入配置文件中 diff --git a/docs/channels/maixcam/README.fr.md b/docs/channels/maixcam/README.fr.md index 8fddb203a..f0fdfa45e 100644 --- a/docs/channels/maixcam/README.fr.md +++ b/docs/channels/maixcam/README.fr.md @@ -28,8 +28,8 @@ MaixCam est un canal dédié à la connexion aux caméras AI Sipeed MaixCAM et M ## Cas d'utilisation -Le canal MaixCam permet à PicoClaw de fonctionner comme backend IA pour les appareils en périphérie : +Le canal MaixCam permet à Piconomous de fonctionner comme backend IA pour les appareils en périphérie : -- **Surveillance intelligente** : MaixCAM envoie des images ; PicoClaw les analyse via des modèles de vision -- **Contrôle IoT** : Les appareils envoient des données de capteurs ; PicoClaw coordonne les réponses -- **IA hors ligne** : Déployer PicoClaw sur un réseau local pour une inférence à faible latence +- **Surveillance intelligente** : MaixCAM envoie des images ; Piconomous les analyse via des modèles de vision +- **Contrôle IoT** : Les appareils envoient des données de capteurs ; Piconomous coordonne les réponses +- **IA hors ligne** : Déployer Piconomous sur un réseau local pour une inférence à faible latence diff --git a/docs/channels/maixcam/README.ja.md b/docs/channels/maixcam/README.ja.md index 0a5f27baa..80e6c521f 100644 --- a/docs/channels/maixcam/README.ja.md +++ b/docs/channels/maixcam/README.ja.md @@ -28,8 +28,8 @@ MaixCam は、Sipeed MaixCAM および MaixCAM2 AI カメラデバイスへの ## ユースケース -MaixCam チャンネルにより、PicoClaw はエッジデバイスの AI バックエンドとして機能できます: +MaixCam チャンネルにより、Piconomous はエッジデバイスの AI バックエンドとして機能できます: -- **スマート監視**:MaixCAM が画像フレームを送信し、PicoClaw がビジョンモデルで分析する -- **IoT 制御**:デバイスがセンサーデータを送信し、PicoClaw がレスポンスを調整する -- **オフライン AI**:ローカルネットワークに PicoClaw をデプロイして低遅延推論を実現する +- **スマート監視**:MaixCAM が画像フレームを送信し、Piconomous がビジョンモデルで分析する +- **IoT 制御**:デバイスがセンサーデータを送信し、Piconomous がレスポンスを調整する +- **オフライン AI**:ローカルネットワークに Piconomous をデプロイして低遅延推論を実現する diff --git a/docs/channels/maixcam/README.md b/docs/channels/maixcam/README.md index c22c9236f..7c6c6fa76 100644 --- a/docs/channels/maixcam/README.md +++ b/docs/channels/maixcam/README.md @@ -28,8 +28,8 @@ MaixCam is a dedicated channel for connecting to Sipeed MaixCAM and MaixCAM2 AI ## Use Cases -The MaixCam channel enables PicoClaw to act as an AI backend for edge devices: +The MaixCam channel enables Piconomous to act as an AI backend for edge devices: -- **Smart Surveillance**: MaixCAM sends image frames; PicoClaw analyzes them using vision models -- **IoT Control**: Devices send sensor data; PicoClaw coordinates responses -- **Offline AI**: Deploy PicoClaw on a local network for low-latency inference +- **Smart Surveillance**: MaixCAM sends image frames; Piconomous analyzes them using vision models +- **IoT Control**: Devices send sensor data; Piconomous coordinates responses +- **Offline AI**: Deploy Piconomous on a local network for low-latency inference diff --git a/docs/channels/maixcam/README.pt-br.md b/docs/channels/maixcam/README.pt-br.md index 81a1f3f00..da143dedf 100644 --- a/docs/channels/maixcam/README.pt-br.md +++ b/docs/channels/maixcam/README.pt-br.md @@ -28,8 +28,8 @@ MaixCam é um canal dedicado para conectar dispositivos de câmera AI Sipeed Mai ## Casos de uso -O canal MaixCam permite que o PicoClaw atue como backend de IA para dispositivos de borda: +O canal MaixCam permite que o Piconomous atue como backend de IA para dispositivos de borda: -- **Vigilância inteligente**: MaixCAM envia quadros de imagem; PicoClaw os analisa usando modelos de visão -- **Controle IoT**: Dispositivos enviam dados de sensores; PicoClaw coordena as respostas -- **IA offline**: Implante o PicoClaw em uma rede local para inferência de baixa latência +- **Vigilância inteligente**: MaixCAM envia quadros de imagem; Piconomous os analisa usando modelos de visão +- **Controle IoT**: Dispositivos enviam dados de sensores; Piconomous coordena as respostas +- **IA offline**: Implante o Piconomous em uma rede local para inferência de baixa latência diff --git a/docs/channels/maixcam/README.vi.md b/docs/channels/maixcam/README.vi.md index 8955bae86..a42b71080 100644 --- a/docs/channels/maixcam/README.vi.md +++ b/docs/channels/maixcam/README.vi.md @@ -28,8 +28,8 @@ MaixCam là kênh chuyên dụng để kết nối với các thiết bị camer ## Trường hợp sử dụng -Kênh MaixCam cho phép PicoClaw hoạt động như backend AI cho các thiết bị biên: +Kênh MaixCam cho phép Piconomous hoạt động như backend AI cho các thiết bị biên: -- **Giám sát thông minh**: MaixCAM gửi khung hình ảnh; PicoClaw phân tích bằng mô hình thị giác -- **Điều khiển IoT**: Thiết bị gửi dữ liệu cảm biến; PicoClaw điều phối phản hồi -- **AI ngoại tuyến**: Triển khai PicoClaw trên mạng nội bộ để suy luận độ trễ thấp +- **Giám sát thông minh**: MaixCAM gửi khung hình ảnh; Piconomous phân tích bằng mô hình thị giác +- **Điều khiển IoT**: Thiết bị gửi dữ liệu cảm biến; Piconomous điều phối phản hồi +- **AI ngoại tuyến**: Triển khai Piconomous trên mạng nội bộ để suy luận độ trễ thấp diff --git a/docs/channels/maixcam/README.zh.md b/docs/channels/maixcam/README.zh.md index b0d58e733..e0d0d845f 100644 --- a/docs/channels/maixcam/README.zh.md +++ b/docs/channels/maixcam/README.zh.md @@ -28,8 +28,8 @@ MaixCam 是专用于连接矽速科技 MaixCAM 与 MaixCAM2 AI 摄像设备的 ## 使用场景 -MaixCam 通道使 PicoClaw 能够作为边缘设备的 AI 后端运行: +MaixCam 通道使 Piconomous 能够作为边缘设备的 AI 后端运行: -- **智能监控** :MaixCAM 发送图像帧,PicoClaw 通过视觉模型进行分析 -- **物联网控制** :设备发送传感器数据,PicoClaw 协调响应 -- **离线AI** :在本地网络部署 PicoClaw 实现低延迟推理 +- **智能监控** :MaixCAM 发送图像帧,Piconomous 通过视觉模型进行分析 +- **物联网控制** :设备发送传感器数据,Piconomous 协调响应 +- **离线AI** :在本地网络部署 Piconomous 实现低延迟推理 diff --git a/docs/channels/qq/README.fr.md b/docs/channels/qq/README.fr.md index 38de1b751..1653f50e1 100644 --- a/docs/channels/qq/README.fr.md +++ b/docs/channels/qq/README.fr.md @@ -2,7 +2,7 @@ # QQ -PicoClaw prend en charge QQ via l'API Bot officielle de la plateforme ouverte QQ. +Piconomous prend en charge QQ via l'API Bot officielle de la plateforme ouverte QQ. ## Configuration @@ -34,8 +34,8 @@ La plateforme ouverte QQ propose une entrée de création en un clic : 1. Ouvrir [QQ Bot Quick Create](https://q.qq.com/qqbot/openclaw/index.html) et se connecter en scannant le QR code 2. Le système crée automatiquement un bot — copier l'**App ID** et l'**App Secret** -3. Renseigner les identifiants dans le fichier de configuration PicoClaw -4. Exécuter `picoclaw gateway` pour démarrer le service +3. Renseigner les identifiants dans le fichier de configuration Piconomous +4. Exécuter `piconomous gateway` pour démarrer le service 5. Ouvrir QQ et commencer à discuter avec le bot > L'App Secret n'est affiché qu'une seule fois — sauvegardez-le immédiatement. Le consulter à nouveau forcera une réinitialisation. @@ -47,8 +47,8 @@ La plateforme ouverte QQ propose une entrée de création en un clic : 1. Se connecter à la [plateforme ouverte QQ](https://q.qq.com/) avec son compte QQ et s'inscrire en tant que développeur 2. Créer un bot QQ et personnaliser son avatar et son nom 3. Obtenir l'**App ID** et l'**App Secret** dans les paramètres du bot -4. Renseigner les identifiants dans le fichier de configuration PicoClaw -5. Exécuter `picoclaw gateway` pour démarrer le service +4. Renseigner les identifiants dans le fichier de configuration Piconomous +5. Exécuter `piconomous gateway` pour démarrer le service 6. Rechercher votre bot dans QQ et commencer à discuter > Pendant le développement, il est recommandé d'activer le mode sandbox et d'y ajouter les utilisateurs et groupes de test pour le débogage. diff --git a/docs/channels/qq/README.ja.md b/docs/channels/qq/README.ja.md index 2990f9622..c6edc682a 100644 --- a/docs/channels/qq/README.ja.md +++ b/docs/channels/qq/README.ja.md @@ -2,7 +2,7 @@ # QQ -PicoClaw は QQ オープンプラットフォームの公式 Bot API を通じて QQ をサポートします。 +Piconomous は QQ オープンプラットフォームの公式 Bot API を通じて QQ をサポートします。 ## 設定 @@ -34,8 +34,8 @@ QQ オープンプラットフォームにはワンクリック作成エント 1. [QQ ボットクイック作成](https://q.qq.com/qqbot/openclaw/index.html) を開き、QR コードをスキャンしてログインする 2. システムが自動的にボットを作成するので、**App ID** と **App Secret** をコピーする -3. PicoClaw 設定ファイルに認証情報を入力する -4. `picoclaw gateway` を実行してサービスを起動する +3. Piconomous 設定ファイルに認証情報を入力する +4. `piconomous gateway` を実行してサービスを起動する 5. QQ を開いてボットとの会話を始める > App Secret は一度しか表示されません。すぐに保存してください。再度表示しようとすると強制的にリセットされます。 @@ -47,8 +47,8 @@ QQ オープンプラットフォームにはワンクリック作成エント 1. QQ アカウントで [QQ オープンプラットフォーム](https://q.qq.com/) にログインし、開発者アカウントを登録する 2. QQ ボットを作成し、アバターと名前をカスタマイズする 3. ボット設定から **App ID** と **App Secret** を取得する -4. PicoClaw 設定ファイルに認証情報を入力する -5. `picoclaw gateway` を実行してサービスを起動する +4. Piconomous 設定ファイルに認証情報を入力する +5. `piconomous gateway` を実行してサービスを起動する 6. QQ でボットを検索して会話を始める > 開発段階ではサンドボックスモードを有効にし、テストユーザーとグループをサンドボックスに追加してデバッグすることを推奨します。 diff --git a/docs/channels/qq/README.md b/docs/channels/qq/README.md index 35e4a769c..e780fcce7 100644 --- a/docs/channels/qq/README.md +++ b/docs/channels/qq/README.md @@ -2,7 +2,7 @@ # QQ -PicoClaw provides QQ support via the official Bot API from the QQ Open Platform. +Piconomous provides QQ support via the official Bot API from the QQ Open Platform. ## Configuration @@ -34,8 +34,8 @@ The QQ Open Platform provides a one-click creation entry: 1. Open [QQ Bot Quick Create](https://q.qq.com/qqbot/openclaw/index.html) and log in by scanning the QR code 2. The system automatically creates a bot — copy the **App ID** and **App Secret** -3. Fill in the credentials in the PicoClaw configuration file -4. Run `picoclaw gateway` to start the service +3. Fill in the credentials in the Piconomous configuration file +4. Run `piconomous gateway` to start the service 5. Open QQ and start chatting with the bot > The App Secret is only shown once — save it immediately. Viewing it again will force a reset. @@ -47,8 +47,8 @@ The QQ Open Platform provides a one-click creation entry: 1. Log in to the [QQ Open Platform](https://q.qq.com/) with your QQ account and register as a developer 2. Create a QQ bot and customize its avatar and name 3. Obtain the **App ID** and **App Secret** from the bot settings -4. Fill in the credentials in the PicoClaw configuration file -5. Run `picoclaw gateway` to start the service +4. Fill in the credentials in the Piconomous configuration file +5. Run `piconomous gateway` to start the service 6. Search for your bot in QQ and start chatting > During development, it is recommended to enable sandbox mode and add test users and groups to the sandbox for debugging. diff --git a/docs/channels/qq/README.pt-br.md b/docs/channels/qq/README.pt-br.md index 507df7f7e..4b1dcd884 100644 --- a/docs/channels/qq/README.pt-br.md +++ b/docs/channels/qq/README.pt-br.md @@ -2,7 +2,7 @@ # QQ -O PicoClaw oferece suporte ao QQ via API Bot oficial da Plataforma Aberta QQ. +O Piconomous oferece suporte ao QQ via API Bot oficial da Plataforma Aberta QQ. ## Configuração @@ -34,8 +34,8 @@ A Plataforma Aberta QQ oferece uma entrada de criação com um clique: 1. Abra o [QQ Bot Quick Create](https://q.qq.com/qqbot/openclaw/index.html) e faça login escaneando o QR code 2. O sistema cria o bot automaticamente — copie o **App ID** e o **App Secret** -3. Preencha as credenciais no arquivo de configuração do PicoClaw -4. Execute `picoclaw gateway` para iniciar o serviço +3. Preencha as credenciais no arquivo de configuração do Piconomous +4. Execute `piconomous gateway` para iniciar o serviço 5. Abra o QQ e comece a conversar com o bot > O App Secret é exibido apenas uma vez — salve-o imediatamente. Visualizá-lo novamente forçará uma redefinição. @@ -47,8 +47,8 @@ A Plataforma Aberta QQ oferece uma entrada de criação com um clique: 1. Faça login na [Plataforma Aberta QQ](https://q.qq.com/) com sua conta QQ e registre-se como desenvolvedor 2. Crie um bot QQ e personalize seu avatar e nome 3. Obtenha o **App ID** e o **App Secret** nas configurações do bot -4. Preencha as credenciais no arquivo de configuração do PicoClaw -5. Execute `picoclaw gateway` para iniciar o serviço +4. Preencha as credenciais no arquivo de configuração do Piconomous +5. Execute `piconomous gateway` para iniciar o serviço 6. Pesquise seu bot no QQ e comece a conversar > Durante o desenvolvimento, recomenda-se habilitar o modo sandbox e adicionar usuários e grupos de teste ao sandbox para depuração. diff --git a/docs/channels/qq/README.vi.md b/docs/channels/qq/README.vi.md index 1f3eb89da..60f29f572 100644 --- a/docs/channels/qq/README.vi.md +++ b/docs/channels/qq/README.vi.md @@ -2,7 +2,7 @@ # QQ -PicoClaw hỗ trợ QQ thông qua API Bot chính thức của Nền tảng Mở QQ. +Piconomous hỗ trợ QQ thông qua API Bot chính thức của Nền tảng Mở QQ. ## Cấu hình @@ -34,8 +34,8 @@ Nền tảng Mở QQ cung cấp lối vào tạo bot một chạm: 1. Mở [QQ Bot Quick Create](https://q.qq.com/qqbot/openclaw/index.html) và đăng nhập bằng cách quét mã QR 2. Hệ thống tự động tạo bot — sao chép **App ID** và **App Secret** -3. Điền thông tin xác thực vào file cấu hình PicoClaw -4. Chạy `picoclaw gateway` để khởi động dịch vụ +3. Điền thông tin xác thực vào file cấu hình Piconomous +4. Chạy `piconomous gateway` để khởi động dịch vụ 5. Mở QQ và bắt đầu trò chuyện với bot > App Secret chỉ hiển thị một lần — hãy lưu lại ngay. Xem lại sẽ buộc phải đặt lại. @@ -47,8 +47,8 @@ Nền tảng Mở QQ cung cấp lối vào tạo bot một chạm: 1. Đăng nhập vào [Nền tảng Mở QQ](https://q.qq.com/) bằng tài khoản QQ và đăng ký tài khoản nhà phát triển 2. Tạo bot QQ, tùy chỉnh ảnh đại diện và tên 3. Lấy **App ID** và **App Secret** trong cài đặt bot -4. Điền thông tin xác thực vào file cấu hình PicoClaw -5. Chạy `picoclaw gateway` để khởi động dịch vụ +4. Điền thông tin xác thực vào file cấu hình Piconomous +5. Chạy `piconomous gateway` để khởi động dịch vụ 6. Tìm kiếm bot của bạn trong QQ và bắt đầu trò chuyện > Trong giai đoạn phát triển, nên bật chế độ sandbox và thêm người dùng, nhóm thử nghiệm vào sandbox để gỡ lỗi. diff --git a/docs/channels/qq/README.zh.md b/docs/channels/qq/README.zh.md index e7f6d2050..3ca90299c 100644 --- a/docs/channels/qq/README.zh.md +++ b/docs/channels/qq/README.zh.md @@ -2,7 +2,7 @@ # QQ -PicoClaw 通过 QQ 开放平台的官方机器人 API 提供对 QQ 的支持。 +Piconomous 通过 QQ 开放平台的官方机器人 API 提供对 QQ 的支持。 ## 配置 @@ -36,8 +36,8 @@ QQ 开放平台提供了一键创建入口: 1. 打开 [QQ 机器人快速创建](https://q.qq.com/qqbot/openclaw/index.html),扫码登录 2. 系统自动创建机器人,复制 **App ID** 和 **App Secret** -3. 将凭证填入 PicoClaw 配置文件 -4. 运行 `picoclaw gateway` 启动服务 +3. 将凭证填入 Piconomous 配置文件 +4. 运行 `piconomous gateway` 启动服务 5. 打开 QQ,与机器人开始对话 > App Secret 仅显示一次,请立即保存。再次查看将强制重置。 @@ -49,8 +49,8 @@ QQ 开放平台提供了一键创建入口: 1. 使用 QQ 账号登录 [QQ 开放平台](https://q.qq.com/),注册开发者账号 2. 创建 QQ 机器人,自定义头像和名称 3. 在机器人设置中获取 **App ID** 和 **App Secret** -4. 将凭证填入 PicoClaw 配置文件 -5. 运行 `picoclaw gateway` 启动服务 +4. 将凭证填入 Piconomous 配置文件 +5. 运行 `piconomous gateway` 启动服务 6. 在 QQ 中搜索你的机器人,开始对话 > 开发阶段建议开启沙箱模式,将测试用户和群添加到沙箱中进行调试。 diff --git a/docs/channels/slack/README.fr.md b/docs/channels/slack/README.fr.md index 81dcebdec..2aeaea020 100644 --- a/docs/channels/slack/README.fr.md +++ b/docs/channels/slack/README.fr.md @@ -2,7 +2,7 @@ # Slack -Slack est l'une des principales plateformes de messagerie instantanée pour les entreprises. PicoClaw utilise le Socket Mode de Slack pour une communication bidirectionnelle en temps réel, sans nécessiter la configuration d'un endpoint webhook public. +Slack est l'une des principales plateformes de messagerie instantanée pour les entreprises. Piconomous utilise le Socket Mode de Slack pour une communication bidirectionnelle en temps réel, sans nécessiter la configuration d'un endpoint webhook public. ## Configuration diff --git a/docs/channels/slack/README.ja.md b/docs/channels/slack/README.ja.md index c8d268b9c..45ae3e937 100644 --- a/docs/channels/slack/README.ja.md +++ b/docs/channels/slack/README.ja.md @@ -2,7 +2,7 @@ # Slack -Slack は世界をリードする企業向けインスタントメッセージングプラットフォームです。PicoClaw は Slack の Socket Mode を使用してリアルタイムの双方向通信を実現しており、公開 Webhook エンドポイントの設定は不要です。 +Slack は世界をリードする企業向けインスタントメッセージングプラットフォームです。Piconomous は Slack の Socket Mode を使用してリアルタイムの双方向通信を実現しており、公開 Webhook エンドポイントの設定は不要です。 ## 設定 diff --git a/docs/channels/slack/README.md b/docs/channels/slack/README.md index 9d5aafab9..f2ed8b9bc 100644 --- a/docs/channels/slack/README.md +++ b/docs/channels/slack/README.md @@ -2,7 +2,7 @@ # Slack -Slack is a leading enterprise instant messaging platform. PicoClaw uses Slack's Socket Mode for real-time bidirectional communication, with no need to configure a public webhook endpoint. +Slack is a leading enterprise instant messaging platform. Piconomous uses Slack's Socket Mode for real-time bidirectional communication, with no need to configure a public webhook endpoint. ## Configuration diff --git a/docs/channels/slack/README.pt-br.md b/docs/channels/slack/README.pt-br.md index ea8a6c0fc..d1b0a9267 100644 --- a/docs/channels/slack/README.pt-br.md +++ b/docs/channels/slack/README.pt-br.md @@ -2,7 +2,7 @@ # Slack -O Slack é uma das principais plataformas de mensagens instantâneas para empresas. O PicoClaw usa o Socket Mode do Slack para comunicação bidirecional em tempo real, sem necessidade de configurar um endpoint de webhook público. +O Slack é uma das principais plataformas de mensagens instantâneas para empresas. O Piconomous usa o Socket Mode do Slack para comunicação bidirecional em tempo real, sem necessidade de configurar um endpoint de webhook público. ## Configuração diff --git a/docs/channels/slack/README.vi.md b/docs/channels/slack/README.vi.md index dae84728c..983ed63a6 100644 --- a/docs/channels/slack/README.vi.md +++ b/docs/channels/slack/README.vi.md @@ -2,7 +2,7 @@ # Slack -Slack là nền tảng nhắn tin tức thì hàng đầu dành cho doanh nghiệp. PicoClaw sử dụng Socket Mode của Slack để giao tiếp hai chiều theo thời gian thực, không cần cấu hình endpoint webhook công khai. +Slack là nền tảng nhắn tin tức thì hàng đầu dành cho doanh nghiệp. Piconomous sử dụng Socket Mode của Slack để giao tiếp hai chiều theo thời gian thực, không cần cấu hình endpoint webhook công khai. ## Cấu hình diff --git a/docs/channels/slack/README.zh.md b/docs/channels/slack/README.zh.md index 884039162..639577e71 100644 --- a/docs/channels/slack/README.zh.md +++ b/docs/channels/slack/README.zh.md @@ -2,7 +2,7 @@ # Slack -Slack 是全球领先的企业级即时通讯平台。PicoClaw 采用 Slack 的 Socket Mode 实现实时双向通信,无需配置公开的 Webhook 端点。 +Slack 是全球领先的企业级即时通讯平台。Piconomous 采用 Slack 的 Socket Mode 实现实时双向通信,无需配置公开的 Webhook 端点。 ## 配置 diff --git a/docs/channels/wecom/wecom_aibot/README.fr.md b/docs/channels/wecom/wecom_aibot/README.fr.md index 8020dd7b0..579d94b12 100644 --- a/docs/channels/wecom/wecom_aibot/README.fr.md +++ b/docs/channels/wecom/wecom_aibot/README.fr.md @@ -50,7 +50,7 @@ Le WeCom AI Bot est une méthode d'intégration de conversation IA officiellemen - **URL** : `http://:18790/webhook/wecom-aibot` - **Token** : Généré aléatoirement ou personnalisé - **EncodingAESKey** : Cliquez sur « Générer aléatoirement » pour obtenir une clé de 43 caractères -4. Saisissez le Token et l'EncodingAESKey dans le fichier de configuration PicoClaw, démarrez le service, puis revenez à la console d'administration pour enregistrer (WeCom enverra une requête de vérification) +4. Saisissez le Token et l'EncodingAESKey dans le fichier de configuration Piconomous, démarrez le service, puis revenez à la console d'administration pour enregistrer (WeCom enverra une requête de vérification) > [!TIP] > Le serveur doit être accessible par les serveurs WeCom. Si vous êtes sur un intranet ou en développement local, utilisez [ngrok](https://ngrok.com) ou frp pour le tunneling. @@ -63,7 +63,7 @@ Le WeCom AI Bot utilise un protocole de « pull en streaming », différent de l L'utilisateur envoie un message │ ▼ -PicoClaw retourne immédiatement {finish: false} (l'agent commence le traitement) +Piconomous retourne immédiatement {finish: false} (l'agent commence le traitement) │ ▼ WeCom effectue un pull environ toutes les 1 seconde avec {msgtype: "stream", stream: {id: "..."}} @@ -75,7 +75,7 @@ WeCom effectue un pull environ toutes les 1 seconde avec {msgtype: "stream", str **Gestion du timeout** (tâche dépassant 30 secondes) : -Si le traitement de l'agent dépasse environ 30 secondes (la fenêtre de polling maximale de WeCom est de 6 minutes), PicoClaw va : +Si le traitement de l'agent dépasse environ 30 secondes (la fenêtre de polling maximale de WeCom est de 6 minutes), Piconomous va : 1. Fermer immédiatement le stream et afficher à l'utilisateur : « ⏳ 正在处理中,请稍候,结果将稍后发送。 » 2. L'agent continue de s'exécuter en arrière-plan @@ -85,10 +85,10 @@ Si le traitement de l'agent dépasse environ 30 secondes (la fenêtre de polling ## Message de bienvenue -Lorsque `welcome_message` est configuré, PicoClaw répond automatiquement avec ce message lorsqu'un utilisateur ouvre la fenêtre de chat avec l'AI Bot (événement `enter_chat`). Laisser vide pour ignorer silencieusement. +Lorsque `welcome_message` est configuré, Piconomous répond automatiquement avec ce message lorsqu'un utilisateur ouvre la fenêtre de chat avec l'AI Bot (événement `enter_chat`). Laisser vide pour ignorer silencieusement. ```json -"welcome_message": "你好!我是 PicoClaw AI 助手,有什么可以帮你?" +"welcome_message": "你好!我是 Piconomous AI 助手,有什么可以帮你?" ``` ## FAQ @@ -97,7 +97,7 @@ Lorsque `welcome_message` est configuré, PicoClaw répond automatiquement avec - Vérifiez que le pare-feu du serveur autorise le port concerné (par défaut 18790) - Vérifiez que `token` et `encoding_aes_key` sont correctement renseignés -- Consultez les logs PicoClaw pour voir si une requête GET de WeCom a été reçue +- Consultez les logs Piconomous pour voir si une requête GET de WeCom a été reçue ### Les messages ne reçoivent pas de réponse diff --git a/docs/channels/wecom/wecom_aibot/README.ja.md b/docs/channels/wecom/wecom_aibot/README.ja.md index 210caffb4..40dc15509 100644 --- a/docs/channels/wecom/wecom_aibot/README.ja.md +++ b/docs/channels/wecom/wecom_aibot/README.ja.md @@ -50,7 +50,7 @@ - **URL**:`http://:18790/webhook/wecom-aibot` - **Token**:ランダム生成またはカスタム - **EncodingAESKey**:「ランダム生成」をクリックして43文字のキーを取得 -4. TokenとEncodingAESKeyをPicoClawの設定ファイルに入力し、サービスを起動してから管理コンソールに戻って保存(企業WeChatが検証リクエストを送信します) +4. TokenとEncodingAESKeyをPiconomousの設定ファイルに入力し、サービスを起動してから管理コンソールに戻って保存(企業WeChatが検証リクエストを送信します) > [!TIP] > サーバーは企業WeChatのサーバーからアクセス可能である必要があります。イントラネットやローカル開発環境の場合は、[ngrok](https://ngrok.com) またはfrpを使用してトンネリングしてください。 @@ -63,7 +63,7 @@ WeCom AIボットは「ストリーミングプル」プロトコルを使用し ユーザーがメッセージを送信 │ ▼ -PicoClawが即座に {finish: false} を返す(エージェントが処理開始) +Piconomousが即座に {finish: false} を返す(エージェントが処理開始) │ ▼ 企業WeChatが約1秒ごとに {msgtype: "stream", stream: {id: "..."}} でプル @@ -75,7 +75,7 @@ PicoClawが即座に {finish: false} を返す(エージェントが処理開 **タイムアウト処理**(タスクが30秒を超える場合): -エージェントの処理時間が約30秒を超えた場合(企業WeChatの最大ポーリングウィンドウは6分)、PicoClawは: +エージェントの処理時間が約30秒を超えた場合(企業WeChatの最大ポーリングウィンドウは6分)、Piconomousは: 1. 即座にストリームを閉じ、ユーザーに「⏳ 正在处理中,请稍候,结果将稍后发送。」と表示 2. エージェントはバックグラウンドで処理を継続 @@ -85,10 +85,10 @@ PicoClawが即座に {finish: false} を返す(エージェントが処理開 ## ウェルカムメッセージ -`welcome_message` を設定すると、ユーザーがAIボットとのチャットウィンドウを開いたとき(`enter_chat` イベント)に、PicoClawが自動的にそのメッセージを返信します。空白の場合は無視されます。 +`welcome_message` を設定すると、ユーザーがAIボットとのチャットウィンドウを開いたとき(`enter_chat` イベント)に、Piconomousが自動的にそのメッセージを返信します。空白の場合は無視されます。 ```json -"welcome_message": "你好!我是 PicoClaw AI 助手,有什么可以帮你?" +"welcome_message": "你好!我是 Piconomous AI 助手,有什么可以帮你?" ``` ## よくある質問 @@ -97,7 +97,7 @@ PicoClawが即座に {finish: false} を返す(エージェントが処理開 - サーバーのファイアウォールで該当ポートが開放されているか確認(デフォルト18790) - `token` と `encoding_aes_key` が正しく入力されているか確認 -- PicoClawのログに企業WeChatからのGETリクエストが届いているか確認 +- Piconomousのログに企業WeChatからのGETリクエストが届いているか確認 ### メッセージに返信がない diff --git a/docs/channels/wecom/wecom_aibot/README.md b/docs/channels/wecom/wecom_aibot/README.md index 31d831617..99ee8e9e8 100644 --- a/docs/channels/wecom/wecom_aibot/README.md +++ b/docs/channels/wecom/wecom_aibot/README.md @@ -50,7 +50,7 @@ The WeCom AI Bot is an official AI conversation integration provided by WeCom. I - **URL**: `http://:18790/webhook/wecom-aibot` - **Token**: Randomly generated or custom - **EncodingAESKey**: Click "Random Generate" to get a 43-character key -4. Enter the Token and EncodingAESKey into the PicoClaw config file, start the service, then return to the admin console to save (WeCom will send a verification request) +4. Enter the Token and EncodingAESKey into the Piconomous config file, start the service, then return to the admin console to save (WeCom will send a verification request) > [!TIP] > The server must be accessible by WeCom's servers. If you are on an intranet or developing locally, use [ngrok](https://ngrok.com) or frp for tunneling. @@ -63,7 +63,7 @@ WeCom AI Bot uses a "streaming pull" protocol, which differs from the one-shot r User sends a message │ ▼ -PicoClaw immediately returns {finish: false} (Agent starts processing) +Piconomous immediately returns {finish: false} (Agent starts processing) │ ▼ WeCom pulls approximately every 1 second with {msgtype: "stream", stream: {id: "..."}} @@ -75,7 +75,7 @@ WeCom pulls approximately every 1 second with {msgtype: "stream", stream: {id: " **Timeout Handling** (task exceeds 30 seconds): -If the Agent takes longer than approximately 30 seconds (WeCom's maximum polling window is 6 minutes), PicoClaw will: +If the Agent takes longer than approximately 30 seconds (WeCom's maximum polling window is 6 minutes), Piconomous will: 1. Immediately close the stream and show the user: "⏳ 正在处理中,请稍候,结果将稍后发送。" 2. The Agent continues running in the background @@ -85,10 +85,10 @@ If the Agent takes longer than approximately 30 seconds (WeCom's maximum polling ## Welcome Message -When `welcome_message` is configured, PicoClaw will automatically reply with it when a user opens the chat window with the AI Bot (`enter_chat` event). Leave it empty to silently ignore the event. +When `welcome_message` is configured, Piconomous will automatically reply with it when a user opens the chat window with the AI Bot (`enter_chat` event). Leave it empty to silently ignore the event. ```json -"welcome_message": "你好!我是 PicoClaw AI 助手,有什么可以帮你?" +"welcome_message": "你好!我是 Piconomous AI 助手,有什么可以帮你?" ``` ## FAQ @@ -97,7 +97,7 @@ When `welcome_message` is configured, PicoClaw will automatically reply with it - Confirm the server firewall has the relevant port open (default 18790) - Confirm `token` and `encoding_aes_key` are entered correctly -- Check PicoClaw logs to see if a GET request from WeCom was received +- Check Piconomous logs to see if a GET request from WeCom was received ### Messages Not Getting a Reply diff --git a/docs/channels/wecom/wecom_aibot/README.pt-br.md b/docs/channels/wecom/wecom_aibot/README.pt-br.md index 1ab735c41..a2f70861c 100644 --- a/docs/channels/wecom/wecom_aibot/README.pt-br.md +++ b/docs/channels/wecom/wecom_aibot/README.pt-br.md @@ -50,7 +50,7 @@ O WeCom AI Bot é uma forma oficial de integração de conversas com IA fornecid - **URL**: `http://:18790/webhook/wecom-aibot` - **Token**: Gerado aleatoriamente ou personalizado - **EncodingAESKey**: Clique em "Gerar Aleatoriamente" para obter uma chave de 43 caracteres -4. Insira o Token e o EncodingAESKey no arquivo de configuração do PicoClaw, inicie o serviço e volte ao console de administração para salvar (o WeCom enviará uma requisição de verificação) +4. Insira o Token e o EncodingAESKey no arquivo de configuração do Piconomous, inicie o serviço e volte ao console de administração para salvar (o WeCom enviará uma requisição de verificação) > [!TIP] > O servidor precisa ser acessível pelos servidores do WeCom. Se estiver em uma intranet ou desenvolvendo localmente, use [ngrok](https://ngrok.com) ou frp para tunelamento. @@ -63,7 +63,7 @@ O WeCom AI Bot usa um protocolo de "pull em streaming", diferente da resposta ú Usuário envia uma mensagem │ ▼ -PicoClaw retorna imediatamente {finish: false} (Agente começa a processar) +Piconomous retorna imediatamente {finish: false} (Agente começa a processar) │ ▼ WeCom faz pull aproximadamente a cada 1 segundo com {msgtype: "stream", stream: {id: "..."}} @@ -75,7 +75,7 @@ WeCom faz pull aproximadamente a cada 1 segundo com {msgtype: "stream", stream: **Tratamento de timeout** (tarefa excede 30 segundos): -Se o processamento do agente demorar mais de aproximadamente 30 segundos (a janela máxima de polling do WeCom é de 6 minutos), o PicoClaw irá: +Se o processamento do agente demorar mais de aproximadamente 30 segundos (a janela máxima de polling do WeCom é de 6 minutos), o Piconomous irá: 1. Fechar imediatamente o stream e exibir ao usuário: "⏳ 正在处理中,请稍候,结果将稍后发送。" 2. O agente continua executando em segundo plano @@ -85,10 +85,10 @@ Se o processamento do agente demorar mais de aproximadamente 30 segundos (a jane ## Mensagem de boas-vindas -Quando `welcome_message` está configurado, o PicoClaw responde automaticamente com essa mensagem quando um usuário abre a janela de chat com o AI Bot (evento `enter_chat`). Deixe vazio para ignorar silenciosamente. +Quando `welcome_message` está configurado, o Piconomous responde automaticamente com essa mensagem quando um usuário abre a janela de chat com o AI Bot (evento `enter_chat`). Deixe vazio para ignorar silenciosamente. ```json -"welcome_message": "你好!我是 PicoClaw AI 助手,有什么可以帮你?" +"welcome_message": "你好!我是 Piconomous AI 助手,有什么可以帮你?" ``` ## Perguntas frequentes @@ -97,7 +97,7 @@ Quando `welcome_message` está configurado, o PicoClaw responde automaticamente - Confirme que o firewall do servidor tem a porta correspondente aberta (padrão 18790) - Confirme que `token` e `encoding_aes_key` estão preenchidos corretamente -- Verifique os logs do PicoClaw para ver se uma requisição GET do WeCom foi recebida +- Verifique os logs do Piconomous para ver se uma requisição GET do WeCom foi recebida ### Mensagens sem resposta diff --git a/docs/channels/wecom/wecom_aibot/README.vi.md b/docs/channels/wecom/wecom_aibot/README.vi.md index cb6586e6e..dbb44e371 100644 --- a/docs/channels/wecom/wecom_aibot/README.vi.md +++ b/docs/channels/wecom/wecom_aibot/README.vi.md @@ -50,7 +50,7 @@ WeCom AI Bot là phương thức tích hợp hội thoại AI chính thức do W - **URL**: `http://:18790/webhook/wecom-aibot` - **Token**: Tạo ngẫu nhiên hoặc tùy chỉnh - **EncodingAESKey**: Nhấp "Tạo ngẫu nhiên" để lấy khóa 43 ký tự -4. Nhập Token và EncodingAESKey vào file cấu hình PicoClaw, khởi động dịch vụ rồi quay lại bảng điều khiển quản trị để lưu (WeCom sẽ gửi yêu cầu xác minh) +4. Nhập Token và EncodingAESKey vào file cấu hình Piconomous, khởi động dịch vụ rồi quay lại bảng điều khiển quản trị để lưu (WeCom sẽ gửi yêu cầu xác minh) > [!TIP] > Máy chủ cần có thể truy cập được từ các máy chủ WeCom. Nếu bạn đang ở mạng nội bộ hoặc phát triển cục bộ, hãy sử dụng [ngrok](https://ngrok.com) hoặc frp để tạo tunnel. @@ -63,7 +63,7 @@ WeCom AI Bot sử dụng giao thức "pull streaming", khác với phản hồi Người dùng gửi tin nhắn │ ▼ -PicoClaw trả về ngay {finish: false} (Agent bắt đầu xử lý) +Piconomous trả về ngay {finish: false} (Agent bắt đầu xử lý) │ ▼ WeCom pull khoảng mỗi 1 giây với {msgtype: "stream", stream: {id: "..."}} @@ -75,7 +75,7 @@ WeCom pull khoảng mỗi 1 giây với {msgtype: "stream", stream: {id: "..."}} **Xử lý timeout** (tác vụ vượt quá 30 giây): -Nếu thời gian xử lý của agent vượt quá khoảng 30 giây (cửa sổ polling tối đa của WeCom là 6 phút), PicoClaw sẽ: +Nếu thời gian xử lý của agent vượt quá khoảng 30 giây (cửa sổ polling tối đa của WeCom là 6 phút), Piconomous sẽ: 1. Đóng stream ngay lập tức và hiển thị cho người dùng: "⏳ 正在处理中,请稍候,结果将稍后发送。" 2. Agent tiếp tục chạy ở nền @@ -85,10 +85,10 @@ Nếu thời gian xử lý của agent vượt quá khoảng 30 giây (cửa s ## Tin nhắn chào mừng -Khi `welcome_message` được cấu hình, PicoClaw sẽ tự động phản hồi bằng tin nhắn đó khi người dùng mở cửa sổ chat với AI Bot (sự kiện `enter_chat`). Để trống để bỏ qua im lặng. +Khi `welcome_message` được cấu hình, Piconomous sẽ tự động phản hồi bằng tin nhắn đó khi người dùng mở cửa sổ chat với AI Bot (sự kiện `enter_chat`). Để trống để bỏ qua im lặng. ```json -"welcome_message": "你好!我是 PicoClaw AI 助手,有什么可以帮你?" +"welcome_message": "你好!我是 Piconomous AI 助手,有什么可以帮你?" ``` ## Câu hỏi thường gặp @@ -97,7 +97,7 @@ Khi `welcome_message` được cấu hình, PicoClaw sẽ tự động phản h - Xác nhận tường lửa máy chủ đã mở cổng tương ứng (mặc định 18790) - Xác nhận `token` và `encoding_aes_key` được điền đúng -- Kiểm tra log PicoClaw xem có nhận được yêu cầu GET từ WeCom không +- Kiểm tra log Piconomous xem có nhận được yêu cầu GET từ WeCom không ### Tin nhắn không nhận được phản hồi diff --git a/docs/channels/wecom/wecom_aibot/README.zh.md b/docs/channels/wecom/wecom_aibot/README.zh.md index 9da5ee1b9..7df5a4254 100644 --- a/docs/channels/wecom/wecom_aibot/README.zh.md +++ b/docs/channels/wecom/wecom_aibot/README.zh.md @@ -2,7 +2,7 @@ # 企业微信智能机器人 (AI Bot) -企业微信智能机器人(AI Bot)是企业微信官方提供的 AI 对话接入方式,支持私聊与群聊,内置流式响应协议。PicoClaw 当前同时支持两种接入模式: +企业微信智能机器人(AI Bot)是企业微信官方提供的 AI 对话接入方式,支持私聊与群聊,内置流式响应协议。Piconomous 当前同时支持两种接入模式: - WebSocket 长连接模式:使用 `bot_id` + `secret`,优先级更高,推荐使用 - Webhook 短连接模式:使用 `token` + `encoding_aes_key`,兼容传统回调,并支持超时后通过 `response_url` 主动推送最终回复 @@ -82,8 +82,8 @@ ## 模式选择 -- 当 `bot_id` 和 `secret` 同时存在时,PicoClaw 会优先使用 WebSocket 长连接模式 -- 否则,当 `token` 和 `encoding_aes_key` 同时存在时,PicoClaw 会使用 Webhook 短连接模式 +- 当 `bot_id` 和 `secret` 同时存在时,Piconomous 会优先使用 WebSocket 长连接模式 +- 否则,当 `token` 和 `encoding_aes_key` 同时存在时,Piconomous 会使用 Webhook 短连接模式 ## 设置流程 @@ -92,7 +92,7 @@ 1. 登录 [企业微信管理后台](https://work.weixin.qq.com/wework_admin) 2. 进入"应用管理" → "智能机器人",创建或选择一个 AI Bot 3. 在 AI Bot 配置页面,配置 Bot 的名称、头像等信息,获取 `Bot ID` 和 `Secret` -4. 在 PicoClaw 配置文件中添加上述配置,重启 PicoClaw +4. 在 Piconomous 配置文件中添加上述配置,重启 Piconomous ### Webhook 短连接模式 @@ -102,7 +102,7 @@ - **URL**:`http://:18790/webhook/wecom-aibot` - **Token**:随机生成或自定义 - **EncodingAESKey**:点击"随机生成",得到 43 字符密钥 -4. 将 Token 和 EncodingAESKey 填入 PicoClaw 配置文件,启动服务后回到管理后台保存 +4. 将 Token 和 EncodingAESKey 填入 Piconomous 配置文件,启动服务后回到管理后台保存 > [!TIP] > 服务器需要能被企业微信服务器访问。如在内网或本地开发,可使用 [ngrok](https://ngrok.com) 或 frp 做内网穿透。 @@ -115,7 +115,7 @@ Webhook 模式使用"流式拉取"协议,区别于普通 Webhook 的一次性 用户发消息 │ ▼ -PicoClaw 立即返回 {finish: false}(Agent 开始处理) +Piconomous 立即返回 {finish: false}(Agent 开始处理) │ ▼ 企业微信每隔约 1 秒拉取一次 {msgtype: "stream", stream: {id: "..."}} @@ -127,7 +127,7 @@ PicoClaw 立即返回 {finish: false}(Agent 开始处理) **超时处理**(任务超过约 30 秒): -若 Agent 处理时间超过轮询窗口,PicoClaw 会: +若 Agent 处理时间超过轮询窗口,Piconomous 会: 1. 立即关闭流,向用户显示 `processing_message` 提示语 2. Agent 继续在后台运行 @@ -137,7 +137,7 @@ PicoClaw 立即返回 {finish: false}(Agent 开始处理) ## 超时提示语 -配置 `processing_message` 后,当 Webhook 模式的流式轮询超时并切换到 `response_url` 主动推送模式时,PicoClaw 会先返回这段提示语来结束当前流。 +配置 `processing_message` 后,当 Webhook 模式的流式轮询超时并切换到 `response_url` 主动推送模式时,Piconomous 会先返回这段提示语来结束当前流。 ```json "processing_message": "⏳ Processing, please wait. The results will be sent shortly." @@ -145,10 +145,10 @@ PicoClaw 立即返回 {finish: false}(Agent 开始处理) ## 欢迎语 -配置 `welcome_message` 后,当用户打开与 AI Bot 的聊天窗口时(`enter_chat` 事件),PicoClaw 会自动回复该欢迎语。留空则静默忽略。 +配置 `welcome_message` 后,当用户打开与 AI Bot 的聊天窗口时(`enter_chat` 事件),Piconomous 会自动回复该欢迎语。留空则静默忽略。 ```json -"welcome_message": "你好!我是 PicoClaw AI 助手,有什么可以帮你?" +"welcome_message": "你好!我是 Piconomous AI 助手,有什么可以帮你?" ``` ## 常见问题 @@ -164,7 +164,7 @@ PicoClaw 立即返回 {finish: false}(Agent 开始处理) - 确认 `token` 与 `encoding_aes_key` 填写正确 - 确认服务器防火墙已开放对应端口 -- 检查 PicoClaw 日志是否收到了来自企业微信的验证请求 +- 检查 Piconomous 日志是否收到了来自企业微信的验证请求 ### 消息没有回复 diff --git a/docs/channels/wecom/wecom_app/README.fr.md b/docs/channels/wecom/wecom_app/README.fr.md index f95426497..217c6c668 100644 --- a/docs/channels/wecom/wecom_app/README.fr.md +++ b/docs/channels/wecom/wecom_app/README.fr.md @@ -44,4 +44,4 @@ Une application interne WeCom est une application créée par une entreprise au 5. Définissez l'URL de callback sur `http://:/webhook/wecom-app` 6. Saisissez le CorpID, le Secret, l'AgentID et les autres informations dans le fichier de configuration - Remarque : PicoClaw utilise désormais un serveur HTTP Gateway partagé pour recevoir les callbacks webhook de tous les canaux. L'adresse d'écoute par défaut est 127.0.0.1:18790. Pour recevoir des callbacks depuis l'internet public, configurez un reverse proxy de votre domaine externe vers le Gateway (port par défaut 18790). + Remarque : Piconomous utilise désormais un serveur HTTP Gateway partagé pour recevoir les callbacks webhook de tous les canaux. L'adresse d'écoute par défaut est 127.0.0.1:18790. Pour recevoir des callbacks depuis l'internet public, configurez un reverse proxy de votre domaine externe vers le Gateway (port par défaut 18790). diff --git a/docs/channels/wecom/wecom_app/README.ja.md b/docs/channels/wecom/wecom_app/README.ja.md index 4bd5a7101..ee35f7e06 100644 --- a/docs/channels/wecom/wecom_app/README.ja.md +++ b/docs/channels/wecom/wecom_app/README.ja.md @@ -44,4 +44,4 @@ 5. コールバックURLを `http://:/webhook/wecom-app` に設定 6. CorpID、Secret、AgentIDなどの情報を設定ファイルに入力 - 注意:PicoClawは現在、すべてのチャンネルのwebhookコールバックを受信するために共有のGateway HTTPサーバーを使用しています。デフォルトのリスニングアドレスは127.0.0.1:18790です。公共インターネットからコールバックを受信するには、外部ドメインをGateway(デフォルトポート18790)にリバースプロキシしてください。 + 注意:Piconomousは現在、すべてのチャンネルのwebhookコールバックを受信するために共有のGateway HTTPサーバーを使用しています。デフォルトのリスニングアドレスは127.0.0.1:18790です。公共インターネットからコールバックを受信するには、外部ドメインをGateway(デフォルトポート18790)にリバースプロキシしてください。 diff --git a/docs/channels/wecom/wecom_app/README.md b/docs/channels/wecom/wecom_app/README.md index 4397f805a..603d80a23 100644 --- a/docs/channels/wecom/wecom_app/README.md +++ b/docs/channels/wecom/wecom_app/README.md @@ -44,4 +44,4 @@ A WeCom Internal App is an application created by an enterprise within WeCom, pr 5. Set the callback URL to `http://:/webhook/wecom-app` 6. Enter the CorpID, Secret, AgentID, and other details into the config file - Note: PicoClaw now uses a shared Gateway HTTP server to receive webhook callbacks for all channels. The default listening address is 127.0.0.1:18790. To receive callbacks from the public internet, reverse-proxy your external domain to the Gateway (default port 18790). + Note: Piconomous now uses a shared Gateway HTTP server to receive webhook callbacks for all channels. The default listening address is 127.0.0.1:18790. To receive callbacks from the public internet, reverse-proxy your external domain to the Gateway (default port 18790). diff --git a/docs/channels/wecom/wecom_app/README.pt-br.md b/docs/channels/wecom/wecom_app/README.pt-br.md index bd0538ed0..77c9505cb 100644 --- a/docs/channels/wecom/wecom_app/README.pt-br.md +++ b/docs/channels/wecom/wecom_app/README.pt-br.md @@ -44,4 +44,4 @@ Um App Interno WeCom é um aplicativo criado por uma empresa dentro do WeCom, de 5. Defina a URL de callback como `http://:/webhook/wecom-app` 6. Insira o CorpID, Secret, AgentID e outras informações no arquivo de configuração - Nota: O PicoClaw agora usa um servidor HTTP Gateway compartilhado para receber callbacks de webhook de todos os canais. O endereço de escuta padrão é 127.0.0.1:18790. Para receber callbacks da internet pública, configure um reverse proxy do seu domínio externo para o Gateway (porta padrão 18790). + Nota: O Piconomous agora usa um servidor HTTP Gateway compartilhado para receber callbacks de webhook de todos os canais. O endereço de escuta padrão é 127.0.0.1:18790. Para receber callbacks da internet pública, configure um reverse proxy do seu domínio externo para o Gateway (porta padrão 18790). diff --git a/docs/channels/wecom/wecom_app/README.vi.md b/docs/channels/wecom/wecom_app/README.vi.md index f713f9501..cc1d81d2f 100644 --- a/docs/channels/wecom/wecom_app/README.vi.md +++ b/docs/channels/wecom/wecom_app/README.vi.md @@ -44,4 +44,4 @@ 5. Đặt URL callback thành `http://:/webhook/wecom-app` 6. Nhập CorpID, Secret, AgentID và các thông tin khác vào file cấu hình - Lưu ý: PicoClaw hiện sử dụng máy chủ HTTP Gateway dùng chung để nhận callback webhook cho tất cả các kênh. Địa chỉ lắng nghe mặc định là 127.0.0.1:18790. Để nhận callback từ internet công cộng, hãy cấu hình reverse proxy từ tên miền bên ngoài của bạn đến Gateway (cổng mặc định 18790). + Lưu ý: Piconomous hiện sử dụng máy chủ HTTP Gateway dùng chung để nhận callback webhook cho tất cả các kênh. Địa chỉ lắng nghe mặc định là 127.0.0.1:18790. Để nhận callback từ internet công cộng, hãy cấu hình reverse proxy từ tên miền bên ngoài của bạn đến Gateway (cổng mặc định 18790). diff --git a/docs/channels/wecom/wecom_app/README.zh.md b/docs/channels/wecom/wecom_app/README.zh.md index 81268692d..52e2da90a 100644 --- a/docs/channels/wecom/wecom_app/README.zh.md +++ b/docs/channels/wecom/wecom_app/README.zh.md @@ -44,4 +44,4 @@ 5. 设置回调 URL 为 `http://:/webhook/wecom-app` 6. 将 CorpID, Secret, AgentID 等信息填入配置文件 - 注意: PicoClaw 现在使用共享的 Gateway HTTP 服务器来接收所有渠道的 webhook 回调,默认监听地址为 127.0.0.1:18790。如需从公网接收回调,请把外部域名反向代理到 Gateway(默认端口 18790)。 + 注意: Piconomous 现在使用共享的 Gateway HTTP 服务器来接收所有渠道的 webhook 回调,默认监听地址为 127.0.0.1:18790。如需从公网接收回调,请把外部域名反向代理到 Gateway(默认端口 18790)。 diff --git a/docs/channels/wecom/wecom_bot/README.fr.md b/docs/channels/wecom/wecom_bot/README.fr.md index fa3caeb37..871ae0044 100644 --- a/docs/channels/wecom/wecom_bot/README.fr.md +++ b/docs/channels/wecom/wecom_bot/README.fr.md @@ -38,4 +38,4 @@ Le WeCom Bot est une méthode d'intégration rapide fournie par WeCom, permettan 3. (Pour recevoir des messages) Configurer l'adresse API de réception des messages (URL de callback), le Token et l'EncodingAESKey sur la page de configuration du bot 4. Saisir les informations pertinentes dans le fichier de configuration - Remarque : PicoClaw utilise désormais un serveur HTTP Gateway partagé pour recevoir les callbacks webhook de tous les canaux. L'adresse d'écoute par défaut est 127.0.0.1:18790. Pour recevoir des callbacks depuis l'internet public, configurez un reverse proxy de votre domaine externe vers le Gateway (port par défaut 18790). + Remarque : Piconomous utilise désormais un serveur HTTP Gateway partagé pour recevoir les callbacks webhook de tous les canaux. L'adresse d'écoute par défaut est 127.0.0.1:18790. Pour recevoir des callbacks depuis l'internet public, configurez un reverse proxy de votre domaine externe vers le Gateway (port par défaut 18790). diff --git a/docs/channels/wecom/wecom_bot/README.ja.md b/docs/channels/wecom/wecom_bot/README.ja.md index c932c6b4f..b88ba8869 100644 --- a/docs/channels/wecom/wecom_bot/README.ja.md +++ b/docs/channels/wecom/wecom_bot/README.ja.md @@ -38,4 +38,4 @@ 3. (メッセージを受信する場合)ボット設定ページでメッセージ受信APIアドレス(コールバックURL)、Token、EncodingAESKeyを設定 4. 関連情報を設定ファイルに入力 - 注意:PicoClawは現在、すべてのチャンネルのwebhookコールバックを受信するために共有のGateway HTTPサーバーを使用しています。デフォルトのリスニングアドレスは127.0.0.1:18790です。公共インターネットからコールバックを受信するには、外部ドメインをGateway(デフォルトポート18790)にリバースプロキシしてください。 + 注意:Piconomousは現在、すべてのチャンネルのwebhookコールバックを受信するために共有のGateway HTTPサーバーを使用しています。デフォルトのリスニングアドレスは127.0.0.1:18790です。公共インターネットからコールバックを受信するには、外部ドメインをGateway(デフォルトポート18790)にリバースプロキシしてください。 diff --git a/docs/channels/wecom/wecom_bot/README.md b/docs/channels/wecom/wecom_bot/README.md index 2600a6a6b..852f89845 100644 --- a/docs/channels/wecom/wecom_bot/README.md +++ b/docs/channels/wecom/wecom_bot/README.md @@ -38,4 +38,4 @@ WeCom Bot is a quick integration method provided by WeCom that can receive messa 3. (To receive messages) Configure the message receiving API address (callback URL), Token, and EncodingAESKey on the bot configuration page 4. Enter the relevant information into the config file - Note: PicoClaw now uses a shared Gateway HTTP server to receive webhook callbacks for all channels. The default listening address is 127.0.0.1:18790. To receive callbacks from the public internet, reverse-proxy your external domain to the Gateway (default port 18790). + Note: Piconomous now uses a shared Gateway HTTP server to receive webhook callbacks for all channels. The default listening address is 127.0.0.1:18790. To receive callbacks from the public internet, reverse-proxy your external domain to the Gateway (default port 18790). diff --git a/docs/channels/wecom/wecom_bot/README.pt-br.md b/docs/channels/wecom/wecom_bot/README.pt-br.md index 4b3af1404..9b39a2b09 100644 --- a/docs/channels/wecom/wecom_bot/README.pt-br.md +++ b/docs/channels/wecom/wecom_bot/README.pt-br.md @@ -38,4 +38,4 @@ O WeCom Bot é um método de integração rápida fornecido pelo WeCom que pode 3. (Para receber mensagens) Configure o endereço da API de recebimento de mensagens (URL de callback), Token e EncodingAESKey na página de configuração do bot 4. Insira as informações relevantes no arquivo de configuração - Nota: O PicoClaw agora usa um servidor HTTP Gateway compartilhado para receber callbacks de webhook de todos os canais. O endereço de escuta padrão é 127.0.0.1:18790. Para receber callbacks da internet pública, configure um reverse proxy do seu domínio externo para o Gateway (porta padrão 18790). + Nota: O Piconomous agora usa um servidor HTTP Gateway compartilhado para receber callbacks de webhook de todos os canais. O endereço de escuta padrão é 127.0.0.1:18790. Para receber callbacks da internet pública, configure um reverse proxy do seu domínio externo para o Gateway (porta padrão 18790). diff --git a/docs/channels/wecom/wecom_bot/README.vi.md b/docs/channels/wecom/wecom_bot/README.vi.md index aab4b46cd..4a2c2d41f 100644 --- a/docs/channels/wecom/wecom_bot/README.vi.md +++ b/docs/channels/wecom/wecom_bot/README.vi.md @@ -38,4 +38,4 @@ WeCom Bot là phương thức tích hợp nhanh do WeCom cung cấp, có thể n 3. (Để nhận tin nhắn) Cấu hình địa chỉ API nhận tin nhắn (URL callback), Token và EncodingAESKey trên trang cấu hình bot 4. Nhập thông tin liên quan vào file cấu hình - Lưu ý: PicoClaw hiện sử dụng máy chủ HTTP Gateway dùng chung để nhận callback webhook cho tất cả các kênh. Địa chỉ lắng nghe mặc định là 127.0.0.1:18790. Để nhận callback từ internet công cộng, hãy cấu hình reverse proxy từ tên miền bên ngoài của bạn đến Gateway (cổng mặc định 18790). + Lưu ý: Piconomous hiện sử dụng máy chủ HTTP Gateway dùng chung để nhận callback webhook cho tất cả các kênh. Địa chỉ lắng nghe mặc định là 127.0.0.1:18790. Để nhận callback từ internet công cộng, hãy cấu hình reverse proxy từ tên miền bên ngoài của bạn đến Gateway (cổng mặc định 18790). diff --git a/docs/channels/wecom/wecom_bot/README.zh.md b/docs/channels/wecom/wecom_bot/README.zh.md index 016fcf973..a3f2f0e7f 100644 --- a/docs/channels/wecom/wecom_bot/README.zh.md +++ b/docs/channels/wecom/wecom_bot/README.zh.md @@ -38,4 +38,4 @@ 3. (如需接收消息) 在机器人配置页面设置接收消息的 API 地址(回调地址)以及 Token 和 EncodingAESKey 4. 将相关信息填入配置文件 - 注意: PicoClaw 现在使用共享的 Gateway HTTP 服务器来接收所有渠道的 webhook 回调,默认监听地址为 127.0.0.1:18790。如需从公网接收回调,请把外部域名反向代理到 Gateway(默认端口 18790)。 + 注意: Piconomous 现在使用共享的 Gateway HTTP 服务器来接收所有渠道的 webhook 回调,默认监听地址为 127.0.0.1:18790。如需从公网接收回调,请把外部域名反向代理到 Gateway(默认端口 18790)。 diff --git a/docs/chat-apps.md b/docs/chat-apps.md index 3ed37e814..13f204e28 100644 --- a/docs/chat-apps.md +++ b/docs/chat-apps.md @@ -4,7 +4,7 @@ ## 💬 Chat Apps -Talk to your picoclaw through Telegram, Discord, WhatsApp, Matrix, QQ, DingTalk, LINE, WeCom, Feishu, Slack, IRC, OneBot, MaixCam, or Pico (native protocol) +Talk to your piconomous through Telegram, Discord, WhatsApp, Matrix, QQ, DingTalk, LINE, WeCom, Feishu, Slack, IRC, OneBot, MaixCam, or Pico (native protocol) > **Note**: All webhook-based channels (LINE, WeCom, etc.) are served on a single shared Gateway HTTP server (`gateway.host`:`gateway.port`, default `127.0.0.1:18790`). There are no per-channel ports to configure. Note: Feishu uses WebSocket/SDK mode and does not use the shared HTTP webhook server. @@ -23,7 +23,7 @@ Talk to your picoclaw through Telegram, Discord, WhatsApp, Matrix, QQ, DingTalk, | **IRC** | ⭐⭐ Medium | Server + TLS configuration | - | | **OneBot** | ⭐⭐ Medium | NapCat/Go-CQHTTP compatible, community ecosystem | [Docs](../channels/onebot/README.md) | | **MaixCam** | ⭐ Easy | Hardware integration channel for Sipeed AI cameras | [Docs](../channels/maixcam/README.md) | -| **Pico** | ⭐ Easy | Native PicoClaw protocol channel | | +| **Pico** | ⭐ Easy | Native Piconomous protocol channel | |
Telegram (Recommended) @@ -54,15 +54,15 @@ Talk to your picoclaw through Telegram, Discord, WhatsApp, Matrix, QQ, DingTalk, **3. Run** ```bash -picoclaw gateway +piconomous gateway ``` **4. Telegram command menu (auto-registered at startup)** -PicoClaw now keeps command definitions in one shared registry. On startup, Telegram will automatically register supported bot commands (for example `/start`, `/help`, `/show`, `/list`) so command menu and runtime behavior stay in sync. +Piconomous now keeps command definitions in one shared registry. On startup, Telegram will automatically register supported bot commands (for example `/start`, `/help`, `/show`, `/list`) so command menu and runtime behavior stay in sync. Telegram command menu registration remains channel-local discovery UX; generic command execution is handled centrally in the agent loop via the commands executor. -If command registration fails (network/API transient errors), the channel still starts and PicoClaw retries registration in the background. +If command registration fails (network/API transient errors), the channel still starts and Piconomous retries registration in the background. **4. Advanced Formatting** You can set use_markdown_v2: true to enable enhanced formatting options. This allows the bot to utilize the full range of Telegram MarkdownV2 features, including nested styles, spoilers, and custom fixed-width blocks. @@ -137,7 +137,7 @@ You can also trigger by keyword prefixes (e.g. `!bot`): **6. Run** ```bash -picoclaw gateway +piconomous gateway ```
@@ -145,7 +145,7 @@ picoclaw gateway
WhatsApp (native via whatsmeow) -PicoClaw can connect to WhatsApp in two ways: +Piconomous can connect to WhatsApp in two ways: - **Native (recommended):** In-process using [whatsmeow](https://github.com/tulir/whatsmeow). No separate bridge. Set `"use_native": true` and leave `bridge_url` empty. On first run, scan the QR code with WhatsApp (Linked Devices). Session is stored under your workspace (e.g. `workspace/whatsapp/`). The native channel is **optional** to keep the default binary small; build with `-tags whatsapp_native` (e.g. `make build-whatsapp-native` or `go build -tags whatsapp_native ./cmd/...`). - **Bridge:** Connect to an external WebSocket bridge. Set `bridge_url` (e.g. `ws://localhost:3001`) and keep `use_native` false. @@ -165,7 +165,7 @@ PicoClaw can connect to WhatsApp in two ways: } ``` -If `session_store_path` is empty, the session is stored in `/whatsapp/`. Run `picoclaw gateway`; on first run, scan the QR code printed in the terminal with WhatsApp → Linked Devices. +If `session_store_path` is empty, the session is stored in `/whatsapp/`. Run `piconomous gateway`; on first run, scan the QR code printed in the terminal with WhatsApp → Linked Devices.
@@ -178,7 +178,7 @@ QQ Open Platform provides a one-click setup page for OpenClaw-compatible bots: 1. Open [QQ Bot Quick Start](https://q.qq.com/qqbot/openclaw/index.html) and scan the QR code to log in 2. A bot is created automatically — copy the **App ID** and **App Secret** -3. Configure PicoClaw: +3. Configure Piconomous: ```json { @@ -193,7 +193,7 @@ QQ Open Platform provides a one-click setup page for OpenClaw-compatible bots: } ``` -4. Run `picoclaw gateway` and open QQ to chat with your bot +4. Run `piconomous gateway` and open QQ to chat with your bot > The App Secret is only shown once. Save it immediately — viewing it again will force a reset. > @@ -206,7 +206,7 @@ If you prefer to create the bot manually: * Log in at [QQ Open Platform](https://q.qq.com/) to register as a developer * Create a QQ bot — customize its avatar and name * Copy the **App ID** and **App Secret** from the bot settings -* Configure as shown above and run `picoclaw gateway` +* Configure as shown above and run `piconomous gateway`
@@ -239,7 +239,7 @@ If you prefer to create the bot manually: **3. Run** ```bash -picoclaw gateway +piconomous gateway ``` @@ -270,7 +270,7 @@ picoclaw gateway **3. Run** ```bash -picoclaw gateway +piconomous gateway ``` For full options (`device_id`, `join_on_invite`, `group_trigger`, `placeholder`, `reasoning_channel_id`), see [Matrix Channel Configuration Guide](channels/matrix/README.md). @@ -318,7 +318,7 @@ Then set the Webhook URL in LINE Developers Console to `https://your-domain/webh **4. Run** ```bash -picoclaw gateway +piconomous gateway ``` > In group chats, the bot responds only when @mentioned. Replies quote the original message. @@ -328,7 +328,7 @@ picoclaw gateway
WeCom (企业微信) -PicoClaw supports three types of WeCom integration: +Piconomous supports three types of WeCom integration: **Option 1: WeCom Bot (Bot)** - Easier setup, supports group chats **Option 2: WeCom App (Custom App)** - More features, proactive messaging, private chat only @@ -398,7 +398,7 @@ See [WeCom AI Bot Configuration Guide](channels/wecom/wecom_aibot/README.md) for **4. Run** ```bash -picoclaw gateway +piconomous gateway ``` > **Note**: WeCom webhook callbacks are served on the Gateway port (default 18790). Use a reverse proxy for HTTPS. @@ -432,7 +432,7 @@ picoclaw gateway **3. Run** ```bash -picoclaw gateway +piconomous gateway ``` > **Note**: WeCom AI Bot uses streaming pull protocol — no reply timeout concerns. Long tasks (>30 seconds) automatically switch to `response_url` push delivery. @@ -442,7 +442,7 @@ picoclaw gateway
Feishu (Lark) -PicoClaw connects to Feishu via WebSocket/SDK mode — no public webhook URL or callback server needed. +Piconomous connects to Feishu via WebSocket/SDK mode — no public webhook URL or callback server needed. **1. Create an app** @@ -471,7 +471,7 @@ Optional fields: `encrypt_key` and `verification_token` for event encryption (re **3. Run and chat** ```bash -picoclaw gateway +piconomous gateway ``` Open Feishu, search for your bot name, and start chatting. You can also add the bot to a group — use `group_trigger.mention_only: true` to only respond when @mentioned. @@ -508,7 +508,7 @@ For full options, see [Feishu Channel Configuration Guide](channels/feishu/READM **3. Run** ```bash -picoclaw gateway +piconomous gateway ```
@@ -525,7 +525,7 @@ picoclaw gateway "enabled": true, "server": "irc.libera.chat:6697", "tls": true, - "nick": "picoclaw-bot", + "nick": "piconomous-bot", "channels": ["#your-channel"], "password": "", "allow_from": [] @@ -539,7 +539,7 @@ Optional: `nickserv_password` for NickServ authentication, `sasl_user`/`sasl_pas **2. Run** ```bash -picoclaw gateway +piconomous gateway ``` The bot will connect to the IRC server and join the specified channels. @@ -549,7 +549,7 @@ The bot will connect to the IRC server and join the specified channels.
OneBot (QQ via OneBot protocol) -OneBot is an open protocol for QQ bots. PicoClaw connects to any OneBot v11 compatible implementation (e.g., [Lagrange](https://github.com/LagrangeDev/Lagrange.Core), [NapCat](https://github.com/NapNeko/NapCatQQ)) via WebSocket. +OneBot is an open protocol for QQ bots. Piconomous connects to any OneBot v11 compatible implementation (e.g., [Lagrange](https://github.com/LagrangeDev/Lagrange.Core), [NapCat](https://github.com/NapNeko/NapCatQQ)) via WebSocket. **1. Set up a OneBot implementation** @@ -579,7 +579,7 @@ Install and run a OneBot v11 compatible QQ bot framework. Enable its WebSocket s **3. Run** ```bash -picoclaw gateway +piconomous gateway ```
diff --git a/docs/configuration.md b/docs/configuration.md index b5d652a85..beb700ac1 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -4,39 +4,39 @@ ## ⚙️ Configuration -Config file: `~/.picoclaw/config.json` +Config file: `~/.piconomous/config.json` ### Environment Variables -You can override default paths using environment variables. This is useful for portable installations, containerized deployments, or running picoclaw as a system service. These variables are independent and control different paths. +You can override default paths using environment variables. This is useful for portable installations, containerized deployments, or running piconomous as a system service. These variables are independent and control different paths. | Variable | Description | Default Path | |-------------------|-----------------------------------------------------------------------------------------------------------------------------------------|---------------------------| -| `PICOCLAW_CONFIG` | Overrides the path to the configuration file. This directly tells picoclaw which `config.json` to load, ignoring all other locations. | `~/.picoclaw/config.json` | -| `PICOCLAW_HOME` | Overrides the root directory for picoclaw data. This changes the default location of the `workspace` and other data directories. | `~/.picoclaw` | +| `PICONOMOUS_CONFIG` | Overrides the path to the configuration file. This directly tells piconomous which `config.json` to load, ignoring all other locations. | `~/.piconomous/config.json` | +| `PICONOMOUS_HOME` | Overrides the root directory for piconomous data. This changes the default location of the `workspace` and other data directories. | `~/.piconomous` | **Examples:** ```bash -# Run picoclaw using a specific config file +# Run piconomous using a specific config file # The workspace path will be read from within that config file -PICOCLAW_CONFIG=/etc/picoclaw/production.json picoclaw gateway +PICONOMOUS_CONFIG=/etc/piconomous/production.json piconomous gateway -# Run picoclaw with all its data stored in /opt/picoclaw -# Config will be loaded from the default ~/.picoclaw/config.json -# Workspace will be created at /opt/picoclaw/workspace -PICOCLAW_HOME=/opt/picoclaw picoclaw agent +# Run piconomous with all its data stored in /opt/piconomous +# Config will be loaded from the default ~/.piconomous/config.json +# Workspace will be created at /opt/piconomous/workspace +PICONOMOUS_HOME=/opt/piconomous piconomous agent # Use both for a fully customized setup -PICOCLAW_HOME=/srv/picoclaw PICOCLAW_CONFIG=/srv/picoclaw/main.json picoclaw gateway +PICONOMOUS_HOME=/srv/piconomous PICONOMOUS_CONFIG=/srv/piconomous/main.json piconomous gateway ``` ### Workspace Layout -PicoClaw stores data in your configured workspace (default: `~/.picoclaw/workspace`): +Piconomous stores data in your configured workspace (default: `~/.piconomous/workspace`): ``` -~/.picoclaw/workspace/ +~/.piconomous/workspace/ ├── sessions/ # Conversation sessions and history ├── memory/ # Long-term memory (MEMORY.md) ├── state/ # Persistent state (last channel, etc.) @@ -55,14 +55,14 @@ PicoClaw stores data in your configured workspace (default: `~/.picoclaw/workspa By default, skills are loaded from: -1. `~/.picoclaw/workspace/skills` (workspace) -2. `~/.picoclaw/skills` (global) +1. `~/.piconomous/workspace/skills` (workspace) +2. `~/.piconomous/skills` (global) 3. `/skills` (builtin, set at build time) For advanced/test setups, you can override the builtin skills root with: ```bash -export PICOCLAW_BUILTIN_SKILLS=/path/to/skills +export PICONOMOUS_BUILTIN_SKILLS=/path/to/skills ``` ### Unified Command Execution Policy @@ -80,7 +80,7 @@ Use `bindings` in `config.json` to route incoming messages to different agents b { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "model_name": "gpt-4o-mini" }, "list": [ @@ -123,7 +123,7 @@ Use `bindings` in `config.json` to route incoming messages to different agents b #### Matching priority -When multiple bindings exist, PicoClaw resolves in this order: +When multiple bindings exist, Piconomous resolves in this order: 1. `peer` 2. `parent_peer` (for thread/topic parent contexts) @@ -133,11 +133,11 @@ When multiple bindings exist, PicoClaw resolves in this order: 6. channel wildcard (`account_id: "*"`) 7. default agent -If a binding points to a missing `agent_id`, PicoClaw falls back to the default agent. +If a binding points to a missing `agent_id`, Piconomous falls back to the default agent. #### How matching works (step-by-step) -1. PicoClaw first filters bindings by `match.channel` (must equal current channel). +1. Piconomous first filters bindings by `match.channel` (must equal current channel). 2. It then filters by `match.account_id`: - omitted: match only the channel's default account - `"*"`: match all accounts on this channel @@ -202,7 +202,7 @@ In other words: **channel + account form the candidate set; peer/guild/team then ### 🔒 Security Sandbox -PicoClaw runs in a sandboxed environment by default. The agent can only access files and execute commands within the configured workspace. +Piconomous runs in a sandboxed environment by default. The agent can only access files and execute commands within the configured workspace. #### Default Configuration @@ -210,7 +210,7 @@ PicoClaw runs in a sandboxed environment by default. The agent can only access f { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "restrict_to_workspace": true } } @@ -219,7 +219,7 @@ PicoClaw runs in a sandboxed environment by default. The agent can only access f | Option | Default | Description | | ----------------------- | ----------------------- | ----------------------------------------- | -| `workspace` | `~/.picoclaw/workspace` | Working directory for the agent | +| `workspace` | `~/.piconomous/workspace` | Working directory for the agent | | `restrict_to_workspace` | `true` | Restrict file/command access to workspace | #### Protected Tools @@ -266,7 +266,7 @@ Even with `restrict_to_workspace: false`, the `exec` tool blocks these dangerous #### Known Limitation: Child Processes From Build Tools -The exec safety guard only inspects the command line PicoClaw launches directly. It does not recursively inspect child +The exec safety guard only inspects the command line Piconomous launches directly. It does not recursively inspect child processes spawned by allowed developer tools such as `make`, `go run`, `cargo`, `npm run`, or custom build scripts. That means a top-level command can still compile or launch other binaries after it passes the initial guard check. In @@ -277,7 +277,7 @@ For higher-risk environments: * Review build scripts before execution. * Prefer approval/manual review for compile-and-run workflows. -* Run PicoClaw inside a container or VM if you need stronger isolation than the built-in guard provides. +* Run Piconomous inside a container or VM if you need stronger isolation than the built-in guard provides. #### Error Examples @@ -310,7 +310,7 @@ If you need the agent to access paths outside the workspace: **Method 2: Environment variable** ```bash -export PICOCLAW_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACE=false +export PICONOMOUS_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACE=false ``` > ⚠️ **Warning**: Disabling this restriction allows the agent to access any path on your system. Use with caution in controlled environments only. @@ -329,7 +329,7 @@ All paths share the same workspace restriction — there's no way to bypass the ### Heartbeat (Periodic Tasks) -PicoClaw can perform periodic tasks automatically. Create a `HEARTBEAT.md` file in your workspace: +Piconomous can perform periodic tasks automatically. Create a `HEARTBEAT.md` file in your workspace: ```markdown # Periodic Tasks diff --git a/docs/credential_encryption.md b/docs/credential_encryption.md index dde8c782c..d2b635489 100644 --- a/docs/credential_encryption.md +++ b/docs/credential_encryption.md @@ -1,6 +1,6 @@ # Credential Encryption -PicoClaw supports encrypting `api_key` values in `model_list` configuration entries. +Piconomous supports encrypting `api_key` values in `model_list` configuration entries. Encrypted keys are stored as `enc://` strings and decrypted automatically at startup. --- @@ -10,12 +10,12 @@ Encrypted keys are stored as `enc://` strings and decrypted automaticall **1. Set your passphrase** ```bash -export PICOCLAW_KEY_PASSPHRASE="your-passphrase" +export PICONOMOUS_KEY_PASSPHRASE="your-passphrase" ``` **2. Encrypt an API key** -Run `picoclaw onboard` — it prompts for your passphrase and generates the SSH key, +Run `piconomous onboard` — it prompts for your passphrase and generates the SSH key, then automatically re-encrypts any plaintext `api_key` entries in your config on the next `SaveConfig` call. The resulting `enc://` value will look like: @@ -46,7 +46,7 @@ enc://AAAA...base64... |--------|---------|-----------| | Plaintext | `sk-abc123` | Used as-is | | File reference | `file://openai.key` | Content read from the same directory as the config file | -| Encrypted | `enc://` | Decrypted at startup using `PICOCLAW_KEY_PASSPHRASE` | +| Encrypted | `enc://` | Decrypted at startup using `PICONOMOUS_KEY_PASSPHRASE` | | Empty | `""` | Passed through unchanged (used with `auth_method: oauth`) | --- @@ -60,7 +60,7 @@ Encryption uses **HKDF-SHA256** with an SSH private key as a second factor. ``` sshHash = SHA256(ssh_private_key_file_bytes) ikm = HMAC-SHA256(key=sshHash, message=passphrase) -aes_key = HKDF-SHA256(ikm, salt, info="picoclaw-credential-v1", 32 bytes) +aes_key = HKDF-SHA256(ikm, salt, info="piconomous-credential-v1", 32 bytes) ``` ### Encryption @@ -97,7 +97,7 @@ The GCM authentication tag is appended to the ciphertext automatically. Any tamp When a SSH private key is provided, breaking the encryption requires **both**: -1. The **passphrase** (`PICOCLAW_KEY_PASSPHRASE`) +1. The **passphrase** (`PICONOMOUS_KEY_PASSPHRASE`) 2. The **SSH private key file** This means a leaked config file alone is not sufficient to recover the API key, even if the passphrase is weak. The SSH key contributes 256 bits of entropy (Ed25519) regardless of passphrase strength. @@ -117,33 +117,33 @@ This means a leaked config file alone is not sufficient to recover the API key, | Variable | Required | Description | |----------|----------|-------------| -| `PICOCLAW_KEY_PASSPHRASE` | Yes (for `enc://`) | Passphrase used for key derivation | -| `PICOCLAW_SSH_KEY_PATH` | No | Path to SSH private key. If not set, auto-detects from `~/.ssh/picoclaw_ed25519.key` | +| `PICONOMOUS_KEY_PASSPHRASE` | Yes (for `enc://`) | Passphrase used for key derivation | +| `PICONOMOUS_SSH_KEY_PATH` | No | Path to SSH private key. If not set, auto-detects from `~/.ssh/piconomous_ed25519.key` | ### SSH Key Auto-Detection -If `PICOCLAW_SSH_KEY_PATH` is not set, PicoClaw looks for the picoclaw-specific key: +If `PICONOMOUS_SSH_KEY_PATH` is not set, Piconomous looks for the piconomous-specific key: ``` -~/.ssh/picoclaw_ed25519.key +~/.ssh/piconomous_ed25519.key ``` This dedicated file avoids conflicts with the user's existing SSH keys. -Run `picoclaw onboard` to generate it automatically. +Run `piconomous onboard` to generate it automatically. `os.UserHomeDir()` is used for cross-platform home directory resolution (reads `USERPROFILE` on Windows, `HOME` on Unix/macOS). -> **Note:** An SSH key file is required for credential encryption. If no key is found and `PICOCLAW_SSH_KEY_PATH` is not set, encryption/decryption will fail. Run `picoclaw onboard` to generate the key automatically. +> **Note:** An SSH key file is required for credential encryption. If no key is found and `PICONOMOUS_SSH_KEY_PATH` is not set, encryption/decryption will fail. Run `piconomous onboard` to generate the key automatically. --- ## Migration -Because the only secret material is `PICOCLAW_KEY_PASSPHRASE` and the SSH private key file, migration is straightforward: +Because the only secret material is `PICONOMOUS_KEY_PASSPHRASE` and the SSH private key file, migration is straightforward: 1. Copy the config file to the new machine. -2. Set `PICOCLAW_KEY_PASSPHRASE` to the same value. -3. Copy the SSH private key file to the same path (or set `PICOCLAW_SSH_KEY_PATH` to its new location). +2. Set `PICONOMOUS_KEY_PASSPHRASE` to the same value. +3. Copy the SSH private key file to the same path (or set `PICONOMOUS_SSH_KEY_PATH` to its new location). No re-encryption is needed. @@ -151,7 +151,7 @@ No re-encryption is needed. ## Security Considerations -- **Both passphrase and SSH key are required.** The SSH key acts as a second factor — without it, encryption/decryption will fail. Run `picoclaw onboard` to generate the key if it doesn't exist. -- **The SSH key is read-only at runtime.** PicoClaw never writes to or modifies the SSH key file. +- **Both passphrase and SSH key are required.** The SSH key acts as a second factor — without it, encryption/decryption will fail. Run `piconomous onboard` to generate the key if it doesn't exist. +- **The SSH key is read-only at runtime.** Piconomous never writes to or modifies the SSH key file. - **Plaintext keys remain supported.** Existing configs without `enc://` are unaffected. -- **The `enc://` format is versioned** via the HKDF `info` field (`picoclaw-credential-v1`), allowing future algorithm upgrades without breaking existing encrypted values. +- **The `enc://` format is versioned** via the HKDF `info` field (`piconomous-credential-v1`), allowing future algorithm upgrades without breaking existing encrypted values. diff --git a/docs/debug.md b/docs/debug.md index b9e776f0f..f09eae53f 100644 --- a/docs/debug.md +++ b/docs/debug.md @@ -1,28 +1,28 @@ -# Debugging PicoClaw +# Debugging Piconomous -PicoClaw performs multiple complex interactions under the hood for every single request it receives—from routing messages and evaluating complexity, to executing tools and adapting to model failures. Being able to see exactly what is happening is crucial, not just for troubleshooting potential issues, but also for truly understanding how the agent operates. -## Starting PicoClaw in Debug Mode +Piconomous performs multiple complex interactions under the hood for every single request it receives—from routing messages and evaluating complexity, to executing tools and adapting to model failures. Being able to see exactly what is happening is crucial, not just for troubleshooting potential issues, but also for truly understanding how the agent operates. +## Starting Piconomous in Debug Mode -To get detailed information about what the agent is doing (LLM requests, tool calls, message routing), you can start the PicoClaw gateway with the debug flag: +To get detailed information about what the agent is doing (LLM requests, tool calls, message routing), you can start the Piconomous gateway with the debug flag: ```bash -picoclaw gateway --debug +piconomous gateway --debug # or -picoclaw gateway -d +piconomous gateway -d ``` In this mode, the system will format the logs extensively and display previews of system prompts and tool execution results. ## Disabling Log Truncation (Full Logs) -By default, PicoClaw truncates very long strings (such as the *System Prompt* or large JSON output results) in the debug logs to keep the console readable. +By default, Piconomous truncates very long strings (such as the *System Prompt* or large JSON output results) in the debug logs to keep the console readable. If you need to inspect the complete output of a command or the exact payload sent to the LLM model, you can use the `--no-truncate` flag. **Note:** This flag *only* works when combined with the `--debug` mode. ```bash -picoclaw gateway --debug --no-truncate +piconomous gateway --debug --no-truncate ``` @@ -50,7 +50,7 @@ A typical synchronous tool call produces two consecutive lines in the console: ``` [...] [INFO] agent: LLM requested tool calls {tools=[web_search], count=1, iteration=1} -[...] [INFO] agent: Tool call: web_search({"query":"picoclaw release notes"}) {tool=web_search, iteration=1} +[...] [INFO] agent: Tool call: web_search({"query":"piconomous release notes"}) {tool=web_search, iteration=1} ``` The arguments preview is hard-capped at **200 characters** in the logs regardless of the `--no-truncate` flag, because it belongs to the `INFO`-level path. Use `--no-truncate` together with `--debug` to see the full `tools_json` field emitted by the `Full LLM request` DEBUG entry, which contains every tool definition sent to the model. @@ -76,7 +76,7 @@ When `enabled` is `true`, every tool call sends a short message to the chat befo ```bash 🔧 `web_search` -{"query": "picoclaw release notes"} +{"query": "piconomous release notes"} ``` @@ -92,8 +92,8 @@ When `enabled` is `true`, every tool call sends a short message to the chat befo Both fields can also be set via environment variables: ```bash -PICOCLAW_AGENTS_DEFAULTS_TOOL_FEEDBACK_ENABLED=true -PICOCLAW_AGENTS_DEFAULTS_TOOL_FEEDBACK_MAX_ARGS_LENGTH=300 +PICONOMOUS_AGENTS_DEFAULTS_TOOL_FEEDBACK_ENABLED=true +PICONOMOUS_AGENTS_DEFAULTS_TOOL_FEEDBACK_MAX_ARGS_LENGTH=300 ``` > **Note:** `tool_feedback` is independent of `--debug` mode. It works in production and does not require the gateway to be started with any special flag. diff --git a/docs/docker.md b/docs/docker.md index f868d4a42..119272831 100644 --- a/docs/docker.md +++ b/docs/docker.md @@ -4,12 +4,12 @@ ## 🐳 Docker Compose -You can also run PicoClaw using Docker Compose without installing anything locally. +You can also run Piconomous using Docker Compose without installing anything locally. ```bash # 1. Clone this repo -git clone https://github.com/sipeed/picoclaw.git -cd picoclaw +git clone https://github.com/sipeed/piconomous.git +cd piconomous # 2. First run — auto-generates docker/data/config.json then exits # (only triggers when both config.json and workspace/ are missing) @@ -24,11 +24,11 @@ docker compose -f docker/docker-compose.yml --profile gateway up -d ``` > [!TIP] -> **Docker Users**: By default, the Gateway listens on `127.0.0.1` which is not accessible from the host. If you need to access the health endpoints or expose ports, set `PICOCLAW_GATEWAY_HOST=0.0.0.0` in your environment or update `config.json`. +> **Docker Users**: By default, the Gateway listens on `127.0.0.1` which is not accessible from the host. If you need to access the health endpoints or expose ports, set `PICONOMOUS_GATEWAY_HOST=0.0.0.0` in your environment or update `config.json`. ```bash # 5. Check logs -docker compose -f docker/docker-compose.yml logs -f picoclaw-gateway +docker compose -f docker/docker-compose.yml logs -f piconomous-gateway # 6. Stop docker compose -f docker/docker-compose.yml --profile gateway down @@ -36,7 +36,7 @@ docker compose -f docker/docker-compose.yml --profile gateway down ### Launcher Mode (Web Console) -The `launcher` image includes all three binaries (`picoclaw`, `picoclaw-launcher`, `picoclaw-launcher-tui`) and starts the web console by default, which provides a browser-based UI for configuration and chat. +The `launcher` image includes all three binaries (`piconomous`, `piconomous-launcher`, `piconomous-launcher-tui`) and starts the web console by default, which provides a browser-based UI for configuration and chat. ```bash docker compose -f docker/docker-compose.yml --profile launcher up -d @@ -51,10 +51,10 @@ Open http://localhost:18800 in your browser. The launcher manages the gateway pr ```bash # Ask a question -docker compose -f docker/docker-compose.yml run --rm picoclaw-agent -m "What is 2+2?" +docker compose -f docker/docker-compose.yml run --rm piconomous-agent -m "What is 2+2?" # Interactive mode -docker compose -f docker/docker-compose.yml run --rm picoclaw-agent +docker compose -f docker/docker-compose.yml run --rm piconomous-agent ``` ### Update @@ -67,21 +67,21 @@ docker compose -f docker/docker-compose.yml --profile gateway up -d ### 🚀 Quick Start > [!TIP] -> Set your API Key in `~/.picoclaw/config.json`. Get API Keys: [Volcengine (CodingPlan)](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) (LLM) · [OpenRouter](https://openrouter.ai/keys) (LLM) · [Zhipu](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys) (LLM). Web search is optional — get a free [Tavily API](https://tavily.com) (1000 free queries/month) or [Brave Search API](https://brave.com/search/api) (2000 free queries/month). +> Set your API Key in `~/.piconomous/config.json`. Get API Keys: [Volcengine (CodingPlan)](https://www.volcengine.com/activity/codingplan?utm_campaign=Piconomous&utm_content=Piconomous&utm_medium=devrel&utm_source=OWO&utm_term=Piconomous) (LLM) · [OpenRouter](https://openrouter.ai/keys) (LLM) · [Zhipu](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys) (LLM). Web search is optional — get a free [Tavily API](https://tavily.com) (1000 free queries/month) or [Brave Search API](https://brave.com/search/api) (2000 free queries/month). **1. Initialize** ```bash -picoclaw onboard +piconomous onboard ``` -**2. Configure** (`~/.picoclaw/config.json`) +**2. Configure** (`~/.piconomous/config.json`) ```json { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "model_name": "gpt-5.4", "max_tokens": 8192, "temperature": 0.7, @@ -142,7 +142,7 @@ picoclaw onboard ``` > **New**: The `model_list` configuration format allows zero-code provider addition. See [Model Configuration](#model-configuration-model_list) for details. -> `request_timeout` is optional and uses seconds. If omitted or set to `<= 0`, PicoClaw uses the default timeout (120s). +> `request_timeout` is optional and uses seconds. If omitted or set to `<= 0`, Piconomous uses the default timeout (120s). **3. Get API Keys** @@ -159,7 +159,7 @@ picoclaw onboard **4. Chat** ```bash -picoclaw agent -m "What is 2+2?" +piconomous agent -m "What is 2+2?" ``` That's it! You have a working AI assistant in 2 minutes. diff --git a/docs/fr/ANTIGRAVITY_AUTH.md b/docs/fr/ANTIGRAVITY_AUTH.md index 6cadf5238..3923c6324 100644 --- a/docs/fr/ANTIGRAVITY_AUTH.md +++ b/docs/fr/ANTIGRAVITY_AUTH.md @@ -4,7 +4,7 @@ ## Aperçu -**Antigravity** (Google Cloud Code Assist) est un fournisseur de modèles IA soutenu par Google qui offre l'accès à des modèles tels que Claude Opus 4.6 et Gemini via l'infrastructure cloud de Google. Ce document fournit un guide complet sur le fonctionnement de l'authentification, la récupération des modèles et l'implémentation d'un nouveau fournisseur dans PicoClaw. +**Antigravity** (Google Cloud Code Assist) est un fournisseur de modèles IA soutenu par Google qui offre l'accès à des modèles tels que Claude Opus 4.6 et Gemini via l'infrastructure cloud de Google. Ce document fournit un guide complet sur le fonctionnement de l'authentification, la récupération des modèles et l'implémentation d'un nouveau fournisseur dans Piconomous. --- @@ -19,7 +19,7 @@ 7. [Exigences d'intégration](#exigences-dintégration) 8. [Points de terminaison API](#points-de-terminaison-api) 9. [Configuration](#configuration) -10. [Créer un nouveau fournisseur dans PicoClaw](#créer-un-nouveau-fournisseur-dans-picoclaw) +10. [Créer un nouveau fournisseur dans Piconomous](#créer-un-nouveau-fournisseur-dans-piconomous) --- @@ -380,7 +380,7 @@ const antigravityPlugin = { description: "OAuth flow for Google Antigravity (Cloud Code Assist)", configSchema: emptyPluginConfigSchema(), - register(api: PicoClawPluginApi) { + register(api: PiconomousPluginApi) { api.registerProvider({ id: "google-antigravity", label: "Google Antigravity", @@ -407,7 +407,7 @@ const antigravityPlugin = { ```typescript type ProviderAuthContext = { - config: PicoClawConfig; + config: PiconomousConfig; agentDir?: string; workspaceDir?: string; prompter: WizardPrompter; // Invites/notifications UI @@ -428,7 +428,7 @@ type ProviderAuthResult = { profileId: string; credential: AuthProfileCredential; }>; - configPatch?: Partial; + configPatch?: Partial; defaultModel?: string; notes?: string[]; }; @@ -441,7 +441,7 @@ type ProviderAuthResult = { ### 1. Environnement/dépendances requis - Go ≥ 1.25 -- Base de code PicoClaw (`pkg/providers/` et `pkg/auth/`) +- Base de code Piconomous (`pkg/providers/` et `pkg/auth/`) - Packages de la bibliothèque standard `crypto` et `net/http` ### 2. En-têtes requis pour les appels API @@ -594,7 +594,7 @@ Chaque message SSE (`data: {...}`) est encapsulé dans un champ `response` : ### Stockage du profil d'authentification -Les profils d'authentification sont stockés dans `~/.picoclaw/auth.json` : +Les profils d'authentification sont stockés dans `~/.piconomous/auth.json` : ```json { @@ -614,9 +614,9 @@ Les profils d'authentification sont stockés dans `~/.picoclaw/auth.json` : --- -## Créer un nouveau fournisseur dans PicoClaw +## Créer un nouveau fournisseur dans Piconomous -Les fournisseurs PicoClaw sont implémentés en tant que packages Go sous `pkg/providers/`. Pour ajouter un nouveau fournisseur : +Les fournisseurs Piconomous sont implémentés en tant que packages Go sous `pkg/providers/`. Pour ajouter un nouveau fournisseur : ### Implémentation étape par étape @@ -676,7 +676,7 @@ Ajoutez une entrée par défaut dans `pkg/config/defaults.go` : #### 5. Ajouter le support d'authentification (optionnel) -Si votre fournisseur nécessite OAuth ou une authentification spéciale, ajoutez un cas dans `cmd/picoclaw/internal/auth/helpers.go` : +Si votre fournisseur nécessite OAuth ou une authentification spéciale, ajoutez un cas dans `cmd/piconomous/internal/auth/helpers.go` : ```go case "your-provider": @@ -706,26 +706,26 @@ case "your-provider": ```bash # S'authentifier avec un fournisseur -picoclaw auth login --provider your-provider +piconomous auth login --provider your-provider # Lister les modèles (pour Antigravity) -picoclaw auth models +piconomous auth models # Démarrer la passerelle -picoclaw gateway +piconomous gateway # Exécuter un agent avec un modèle spécifique -picoclaw agent -m "Hello" --model your-model +piconomous agent -m "Hello" --model your-model ``` ### Variables d'environnement pour les tests ```bash # Remplacer le modèle par défaut -export PICOCLAW_AGENTS_DEFAULTS_MODEL=your-model +export PICONOMOUS_AGENTS_DEFAULTS_MODEL=your-model # Remplacer les paramètres du fournisseur -export PICOCLAW_MODEL_LIST='[{"model_name":"your-model","model":"your-provider/model-name","api_key":"..."}]' +export PICONOMOUS_MODEL_LIST='[{"model_name":"your-model","model":"your-provider/model-name","api_key":"..."}]' ``` --- @@ -735,10 +735,10 @@ export PICOCLAW_MODEL_LIST='[{"model_name":"your-model","model":"your-provider/m - **Fichiers source :** - `pkg/providers/antigravity_provider.go` - Implémentation du fournisseur Antigravity - `pkg/auth/oauth.go` - Implémentation du flux OAuth - - `pkg/auth/store.go` - Stockage des identifiants d'authentification (`~/.picoclaw/auth.json`) + - `pkg/auth/store.go` - Stockage des identifiants d'authentification (`~/.piconomous/auth.json`) - `pkg/providers/factory.go` - Factory des fournisseurs et routage de protocole - `pkg/providers/types.go` - Définitions de l'interface fournisseur - - `cmd/picoclaw/internal/auth/helpers.go` - Commandes CLI d'authentification + - `cmd/piconomous/internal/auth/helpers.go` - Commandes CLI d'authentification - **Documentation :** - `docs/ANTIGRAVITY_USAGE.md` - Guide d'utilisation d'Antigravity @@ -794,7 +794,7 @@ Certains modèles peuvent apparaître dans la liste des modèles disponibles mai ## Dépannage ### "Token expired" (jeton expiré) -- Rafraîchir les jetons OAuth : `picoclaw auth login --provider antigravity` +- Rafraîchir les jetons OAuth : `piconomous auth login --provider antigravity` ### "Gemini for Google Cloud is not enabled" (Gemini for Google Cloud n'est pas activé) - Activer l'API dans votre Google Cloud Console @@ -805,5 +805,5 @@ Certains modèles peuvent apparaître dans la liste des modèles disponibles mai ### Les modèles n'apparaissent pas dans la liste - Vérifier que l'authentification OAuth s'est terminée avec succès -- Vérifier le stockage du profil d'authentification : `~/.picoclaw/auth.json` -- Relancer `picoclaw auth login --provider antigravity` +- Vérifier le stockage du profil d'authentification : `~/.piconomous/auth.json` +- Relancer `piconomous auth login --provider antigravity` diff --git a/docs/fr/ANTIGRAVITY_USAGE.md b/docs/fr/ANTIGRAVITY_USAGE.md index d6d0a2bd4..792eb870a 100644 --- a/docs/fr/ANTIGRAVITY_USAGE.md +++ b/docs/fr/ANTIGRAVITY_USAGE.md @@ -1,8 +1,8 @@ > Retour au [README](../../README.fr.md) -# Utiliser le fournisseur Antigravity dans PicoClaw +# Utiliser le fournisseur Antigravity dans Piconomous -Ce guide explique comment configurer et utiliser le fournisseur **Antigravity** (Google Cloud Code Assist) dans PicoClaw. +Ce guide explique comment configurer et utiliser le fournisseur **Antigravity** (Google Cloud Code Assist) dans Piconomous. ## Prérequis @@ -14,19 +14,19 @@ Ce guide explique comment configurer et utiliser le fournisseur **Antigravity** Pour vous authentifier avec Antigravity, exécutez la commande suivante : ```bash -picoclaw auth login --provider antigravity +piconomous auth login --provider antigravity ``` ### Authentification manuelle (Headless/VPS) -Si vous exécutez PicoClaw sur un serveur (Coolify/Docker) et ne pouvez pas accéder à `localhost`, suivez ces étapes : +Si vous exécutez Piconomous sur un serveur (Coolify/Docker) et ne pouvez pas accéder à `localhost`, suivez ces étapes : 1. Exécutez la commande ci-dessus. 2. Copiez l'URL fournie et ouvrez-la dans votre navigateur local. 3. Complétez la connexion. 4. Votre navigateur sera redirigé vers une URL `localhost:51121` (qui ne se chargera pas). 5. **Copiez cette URL finale** depuis la barre d'adresse de votre navigateur. -6. **Collez-la dans le terminal** où PicoClaw attend. +6. **Collez-la dans le terminal** où Piconomous attend. -PicoClaw extraira automatiquement le code d'autorisation et terminera le processus. +Piconomous extraira automatiquement le code d'autorisation et terminera le processus. ## 2. Gestion des modèles @@ -34,15 +34,15 @@ PicoClaw extraira automatiquement le code d'autorisation et terminera le process Pour voir quels modèles sont accessibles à votre projet et vérifier leurs quotas : ```bash -picoclaw auth models +piconomous auth models ``` ### Changer de modèle -Vous pouvez modifier le modèle par défaut dans `~/.picoclaw/config.json` ou le remplacer via le CLI : +Vous pouvez modifier le modèle par défaut dans `~/.piconomous/config.json` ou le remplacer via le CLI : ```bash # Remplacer pour une seule commande -picoclaw agent -m "Hello" --model claude-opus-4-6-thinking +piconomous agent -m "Hello" --model claude-opus-4-6-thinking ``` ## 3. Utilisation en production (Coolify/Docker) @@ -50,19 +50,19 @@ picoclaw agent -m "Hello" --model claude-opus-4-6-thinking Si vous déployez via Coolify ou Docker, suivez ces étapes pour tester : 1. **Variables d'environnement** : - * `PICOCLAW_AGENTS_DEFAULTS_MODEL=gemini-flash` + * `PICONOMOUS_AGENTS_DEFAULTS_MODEL=gemini-flash` 2. **Persistance de l'authentification** : Si vous vous êtes connecté localement, vous pouvez copier vos identifiants vers le serveur : ```bash - scp ~/.picoclaw/auth.json user@your-server:~/.picoclaw/ + scp ~/.piconomous/auth.json user@your-server:~/.piconomous/ ``` *Alternativement*, exécutez la commande `auth login` une fois sur le serveur si vous avez un accès terminal. ## 4. Dépannage * **Réponse vide** : Si un modèle renvoie une réponse vide, il peut être restreint pour votre projet. Essayez `gemini-3-flash` ou `claude-opus-4-6-thinking`. -* **429 Limite de débit** : Antigravity a des quotas stricts. PicoClaw affichera le « temps de réinitialisation » dans le message d'erreur si vous atteignez une limite. -* **404 Non trouvé** : Assurez-vous d'utiliser un ID de modèle provenant de la liste `picoclaw auth models`. Utilisez l'ID court (par ex. `gemini-3-flash`) et non le chemin complet. +* **429 Limite de débit** : Antigravity a des quotas stricts. Piconomous affichera le « temps de réinitialisation » dans le message d'erreur si vous atteignez une limite. +* **404 Non trouvé** : Assurez-vous d'utiliser un ID de modèle provenant de la liste `piconomous auth models`. Utilisez l'ID court (par ex. `gemini-3-flash`) et non le chemin complet. ## 5. Résumé des modèles fonctionnels diff --git a/docs/fr/chat-apps.md b/docs/fr/chat-apps.md index 67422e0ec..2d643ebdf 100644 --- a/docs/fr/chat-apps.md +++ b/docs/fr/chat-apps.md @@ -4,7 +4,7 @@ ## 💬 Applications de Chat -Communiquez avec votre PicoClaw via Telegram, Discord, WhatsApp, Matrix, QQ, DingTalk, LINE, WeCom, Feishu, Slack, IRC, OneBot ou MaixCam. +Communiquez avec votre Piconomous via Telegram, Discord, WhatsApp, Matrix, QQ, DingTalk, LINE, WeCom, Feishu, Slack, IRC, OneBot ou MaixCam. > **Note** : Tous les canaux basés sur les webhooks (LINE, WeCom, etc.) sont servis sur un seul serveur HTTP Gateway partagé (`gateway.host`:`gateway.port`, par défaut `127.0.0.1:18790`). Il n'y a pas de ports par canal à configurer. Note : Feishu utilise le mode WebSocket/SDK et n'utilise pas le serveur HTTP webhook partagé. @@ -23,7 +23,7 @@ Communiquez avec votre PicoClaw via Telegram, Discord, WhatsApp, Matrix, QQ, Din | **IRC** | ⭐⭐ Moyen | Serveur + configuration TLS | - | | **OneBot** | ⭐⭐ Moyen | Compatible NapCat/Go-CQHTTP, écosystème communautaire | [Documentation](../channels/onebot/README.fr.md) | | **MaixCam** | ⭐ Facile | Canal d'intégration matérielle pour caméras AI Sipeed | [Documentation](../channels/maixcam/README.fr.md) | -| **Pico** | ⭐ Facile | Canal protocole natif PicoClaw | | +| **Pico** | ⭐ Facile | Canal protocole natif Piconomous | |
Telegram (Recommandé) @@ -53,15 +53,15 @@ Communiquez avec votre PicoClaw via Telegram, Discord, WhatsApp, Matrix, QQ, Din **3. Lancer** ```bash -picoclaw gateway +piconomous gateway ``` **4. Menu de commandes Telegram (enregistré automatiquement au démarrage)** -PicoClaw conserve les définitions de commandes dans un registre partagé unique. Au démarrage, Telegram enregistre automatiquement les commandes bot prises en charge (par exemple `/start`, `/help`, `/show`, `/list`) afin que le menu de commandes et le comportement à l'exécution restent synchronisés. +Piconomous conserve les définitions de commandes dans un registre partagé unique. Au démarrage, Telegram enregistre automatiquement les commandes bot prises en charge (par exemple `/start`, `/help`, `/show`, `/list`) afin que le menu de commandes et le comportement à l'exécution restent synchronisés. L'enregistrement du menu de commandes Telegram reste une découverte UX locale au canal ; l'exécution générique des commandes est gérée de manière centralisée dans la boucle agent via l'exécuteur de commandes. -Si l'enregistrement des commandes échoue (erreurs transitoires réseau/API), le canal démarre quand même et PicoClaw réessaie l'enregistrement en arrière-plan. +Si l'enregistrement des commandes échoue (erreurs transitoires réseau/API), le canal démarre quand même et Piconomous réessaie l'enregistrement en arrière-plan.
@@ -133,7 +133,7 @@ Vous pouvez également déclencher par préfixes de mots-clés (par ex. `!bot`) **6. Lancer** ```bash -picoclaw gateway +piconomous gateway ```
@@ -141,7 +141,7 @@ picoclaw gateway
WhatsApp (natif via whatsmeow) -PicoClaw peut se connecter à WhatsApp de deux manières : +Piconomous peut se connecter à WhatsApp de deux manières : - **Natif (recommandé) :** En processus via [whatsmeow](https://github.com/tulir/whatsmeow). Pas de bridge séparé. Définissez `"use_native": true` et laissez `bridge_url` vide. Au premier lancement, scannez le code QR avec WhatsApp (Appareils liés). La session est stockée dans votre workspace (par ex. `workspace/whatsapp/`). Le canal natif est **optionnel** pour garder le binaire par défaut léger ; compilez avec `-tags whatsapp_native` (par ex. `make build-whatsapp-native` ou `go build -tags whatsapp_native ./cmd/...`). - **Bridge :** Connectez-vous à un bridge WebSocket externe. Définissez `bridge_url` (par ex. `ws://localhost:3001`) et gardez `use_native` à false. @@ -161,7 +161,7 @@ PicoClaw peut se connecter à WhatsApp de deux manières : } ``` -Si `session_store_path` est vide, la session est stockée dans `/whatsapp/`. Lancez `picoclaw gateway` ; au premier lancement, scannez le code QR affiché dans le terminal avec WhatsApp → Appareils liés. +Si `session_store_path` est vide, la session est stockée dans `/whatsapp/`. Lancez `piconomous gateway` ; au premier lancement, scannez le code QR affiché dans le terminal avec WhatsApp → Appareils liés.
@@ -174,7 +174,7 @@ QQ Open Platform propose une page de configuration en un clic pour les bots comp 1. Ouvrez [QQ Bot Quick Start](https://q.qq.com/qqbot/openclaw/index.html) et scannez le QR code pour vous connecter 2. Un bot est créé automatiquement — copiez l'**App ID** et l'**App Secret** -3. Configurez PicoClaw : +3. Configurez Piconomous : ```json { @@ -189,7 +189,7 @@ QQ Open Platform propose une page de configuration en un clic pour les bots comp } ``` -4. Lancez `picoclaw gateway` et ouvrez QQ pour discuter avec votre bot +4. Lancez `piconomous gateway` et ouvrez QQ pour discuter avec votre bot > L'App Secret n'est affiché qu'une seule fois. Enregistrez-le immédiatement — le consulter à nouveau forcera une réinitialisation. > @@ -202,7 +202,7 @@ Si vous préférez créer le bot manuellement : * Connectez-vous sur [QQ Open Platform](https://q.qq.com/) pour vous inscrire en tant que développeur * Créez un bot QQ — personnalisez son avatar et son nom * Copiez l'**App ID** et l'**App Secret** depuis les paramètres du bot -* Configurez comme indiqué ci-dessus et lancez `picoclaw gateway` +* Configurez comme indiqué ci-dessus et lancez `piconomous gateway` @@ -235,7 +235,7 @@ Si vous préférez créer le bot manuellement : **3. Lancer** ```bash -picoclaw gateway +piconomous gateway ``` @@ -266,7 +266,7 @@ picoclaw gateway **3. Lancer** ```bash -picoclaw gateway +piconomous gateway ``` Pour toutes les options (`device_id`, `join_on_invite`, `group_trigger`, `placeholder`, `reasoning_channel_id`), voir le [Guide de Configuration du Canal Matrix](../channels/matrix/README.md). @@ -314,7 +314,7 @@ Puis définissez l'URL du Webhook dans la console LINE Developers à `https://yo **4. Lancer** ```bash -picoclaw gateway +piconomous gateway ``` > Dans les discussions de groupe, le bot ne répond que lorsqu'il est @mentionné. Les réponses citent le message original. @@ -324,7 +324,7 @@ picoclaw gateway
WeCom (企业微信) -PicoClaw prend en charge trois types d'intégration WeCom : +Piconomous prend en charge trois types d'intégration WeCom : **Option 1 : WeCom Bot (Bot)** - Configuration plus facile, prend en charge les discussions de groupe **Option 2 : WeCom App (Application personnalisée)** - Plus de fonctionnalités, messagerie proactive, chat privé uniquement @@ -394,7 +394,7 @@ Voir le [Guide de Configuration WeCom AI Bot](../channels/wecom/wecom_aibot/READ **4. Lancer** ```bash -picoclaw gateway +piconomous gateway ``` > **Note** : Les callbacks webhook WeCom sont servis sur le port Gateway (par défaut 18790). Utilisez un reverse proxy pour HTTPS. @@ -428,7 +428,7 @@ picoclaw gateway **3. Lancer** ```bash -picoclaw gateway +piconomous gateway ``` > **Note** : WeCom AI Bot utilise le protocole streaming pull — pas de problème de timeout de réponse. Les tâches longues (>30 secondes) basculent automatiquement vers la livraison push via `response_url`. @@ -438,7 +438,7 @@ picoclaw gateway
Feishu (飞书) -PicoClaw se connecte à Feishu via le mode WebSocket/SDK — aucune URL webhook publique ni serveur de callback nécessaire. +Piconomous se connecte à Feishu via le mode WebSocket/SDK — aucune URL webhook publique ni serveur de callback nécessaire. **1. Créer une application** @@ -467,7 +467,7 @@ Optionnel : `encrypt_key` et `verification_token` pour le chiffrement des évén **3. Lancer et discuter** ```bash -picoclaw gateway +piconomous gateway ``` Ouvrez Feishu, recherchez le nom de votre bot et commencez à discuter. Vous pouvez aussi ajouter le bot à un groupe — utilisez `group_trigger.mention_only: true` pour ne répondre que lorsqu'il est @mentionné. @@ -504,7 +504,7 @@ Pour toutes les options, voir le [Guide de Configuration du Canal Feishu](../cha **3. Lancer** ```bash -picoclaw gateway +piconomous gateway ```
@@ -521,7 +521,7 @@ picoclaw gateway "enabled": true, "server": "irc.libera.chat:6697", "tls": true, - "nick": "picoclaw-bot", + "nick": "piconomous-bot", "channels": ["#your-channel"], "password": "", "allow_from": [] @@ -535,7 +535,7 @@ Optionnel : `nickserv_password` pour l'authentification NickServ, `sasl_user`/`s **2. Lancer** ```bash -picoclaw gateway +piconomous gateway ``` Le bot se connectera au serveur IRC et rejoindra les canaux spécifiés. @@ -545,7 +545,7 @@ Le bot se connectera au serveur IRC et rejoindra les canaux spécifiés.
OneBot (QQ via protocole OneBot) -OneBot est un protocole ouvert pour les bots QQ. PicoClaw se connecte à toute implémentation compatible OneBot v11 (par ex. [Lagrange](https://github.com/LagrangeDev/Lagrange.Core), [NapCat](https://github.com/NapNeko/NapCatQQ)) via WebSocket. +OneBot est un protocole ouvert pour les bots QQ. Piconomous se connecte à toute implémentation compatible OneBot v11 (par ex. [Lagrange](https://github.com/LagrangeDev/Lagrange.Core), [NapCat](https://github.com/NapNeko/NapCatQQ)) via WebSocket. **1. Configurer une implémentation OneBot** @@ -575,7 +575,7 @@ Installez et exécutez un framework de bot QQ compatible OneBot v11. Activez son **3. Lancer** ```bash -picoclaw gateway +piconomous gateway ```
@@ -605,7 +605,7 @@ picoclaw gateway **3. Lancer** ```bash -picoclaw gateway +piconomous gateway ```
diff --git a/docs/fr/configuration.md b/docs/fr/configuration.md index d56da2cad..bab618e51 100644 --- a/docs/fr/configuration.md +++ b/docs/fr/configuration.md @@ -4,39 +4,39 @@ ## ⚙️ Configuration -Fichier de configuration : `~/.picoclaw/config.json` +Fichier de configuration : `~/.piconomous/config.json` ### Variables d'Environnement -Vous pouvez remplacer les chemins par défaut à l'aide de variables d'environnement. Ceci est utile pour les installations portables, les déploiements conteneurisés ou l'exécution de PicoClaw en tant que service système. Ces variables sont indépendantes et contrôlent des chemins différents. +Vous pouvez remplacer les chemins par défaut à l'aide de variables d'environnement. Ceci est utile pour les installations portables, les déploiements conteneurisés ou l'exécution de Piconomous en tant que service système. Ces variables sont indépendantes et contrôlent des chemins différents. | Variable | Description | Chemin par défaut | |-------------------|-----------------------------------------------------------------------------------------------------------------------------------------|---------------------------| -| `PICOCLAW_CONFIG` | Remplace le chemin vers le fichier de configuration. Indique directement à PicoClaw quel `config.json` charger, en ignorant tous les autres emplacements. | `~/.picoclaw/config.json` | -| `PICOCLAW_HOME` | Remplace le répertoire racine des données PicoClaw. Change l'emplacement par défaut du `workspace` et des autres répertoires de données. | `~/.picoclaw` | +| `PICONOMOUS_CONFIG` | Remplace le chemin vers le fichier de configuration. Indique directement à Piconomous quel `config.json` charger, en ignorant tous les autres emplacements. | `~/.piconomous/config.json` | +| `PICONOMOUS_HOME` | Remplace le répertoire racine des données Piconomous. Change l'emplacement par défaut du `workspace` et des autres répertoires de données. | `~/.piconomous` | **Exemples :** ```bash -# Run picoclaw using a specific config file +# Run piconomous using a specific config file # The workspace path will be read from within that config file -PICOCLAW_CONFIG=/etc/picoclaw/production.json picoclaw gateway +PICONOMOUS_CONFIG=/etc/piconomous/production.json piconomous gateway -# Run picoclaw with all its data stored in /opt/picoclaw -# Config will be loaded from the default ~/.picoclaw/config.json -# Workspace will be created at /opt/picoclaw/workspace -PICOCLAW_HOME=/opt/picoclaw picoclaw agent +# Run piconomous with all its data stored in /opt/piconomous +# Config will be loaded from the default ~/.piconomous/config.json +# Workspace will be created at /opt/piconomous/workspace +PICONOMOUS_HOME=/opt/piconomous piconomous agent # Use both for a fully customized setup -PICOCLAW_HOME=/srv/picoclaw PICOCLAW_CONFIG=/srv/picoclaw/main.json picoclaw gateway +PICONOMOUS_HOME=/srv/piconomous PICONOMOUS_CONFIG=/srv/piconomous/main.json piconomous gateway ``` ### Structure du Workspace -PicoClaw stocke les données dans votre workspace configuré (par défaut : `~/.picoclaw/workspace`) : +Piconomous stocke les données dans votre workspace configuré (par défaut : `~/.piconomous/workspace`) : ``` -~/.picoclaw/workspace/ +~/.piconomous/workspace/ ├── sessions/ # Sessions de conversation et historique ├── memory/ # Mémoire à long terme (MEMORY.md) ├── state/ # État persistant (dernier canal, etc.) @@ -54,14 +54,14 @@ PicoClaw stocke les données dans votre workspace configuré (par défaut : `~/. Par défaut, les compétences sont chargées depuis : -1. `~/.picoclaw/workspace/skills` (workspace) -2. `~/.picoclaw/skills` (global) +1. `~/.piconomous/workspace/skills` (workspace) +2. `~/.piconomous/skills` (global) 3. `/skills` (intégré) Pour les configurations avancées/de test, vous pouvez remplacer la racine des compétences builtin avec : ```bash -export PICOCLAW_BUILTIN_SKILLS=/path/to/skills +export PICONOMOUS_BUILTIN_SKILLS=/path/to/skills ``` ### Politique Unifiée d'Exécution des Commandes @@ -73,7 +73,7 @@ export PICOCLAW_BUILTIN_SKILLS=/path/to/skills ### 🔒 Sandbox de Sécurité -PicoClaw s'exécute dans un environnement sandboxé par défaut. L'agent ne peut accéder aux fichiers et exécuter des commandes que dans le workspace configuré. +Piconomous s'exécute dans un environnement sandboxé par défaut. L'agent ne peut accéder aux fichiers et exécuter des commandes que dans le workspace configuré. #### Configuration par Défaut @@ -81,7 +81,7 @@ PicoClaw s'exécute dans un environnement sandboxé par défaut. L'agent ne peut { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "restrict_to_workspace": true } } @@ -90,7 +90,7 @@ PicoClaw s'exécute dans un environnement sandboxé par défaut. L'agent ne peut | Option | Par défaut | Description | | ----------------------- | ----------------------- | ------------------------------------------------- | -| `workspace` | `~/.picoclaw/workspace` | Répertoire de travail de l'agent | +| `workspace` | `~/.piconomous/workspace` | Répertoire de travail de l'agent | | `restrict_to_workspace` | `true` | Restreindre l'accès fichiers/commandes au workspace | #### Outils Protégés @@ -137,7 +137,7 @@ Même avec `restrict_to_workspace: false`, l'outil `exec` bloque ces commandes d #### Limitation Connue : Processus Enfants des Outils de Build -Le garde de sécurité exec n'inspecte que la ligne de commande lancée directement par PicoClaw. Il n'inspecte pas récursivement les processus enfants générés par les outils de développement autorisés tels que `make`, `go run`, `cargo`, `npm run` ou les scripts de build personnalisés. +Le garde de sécurité exec n'inspecte que la ligne de commande lancée directement par Piconomous. Il n'inspecte pas récursivement les processus enfants générés par les outils de développement autorisés tels que `make`, `go run`, `cargo`, `npm run` ou les scripts de build personnalisés. Cela signifie qu'une commande de niveau supérieur peut toujours compiler ou lancer d'autres binaires après avoir passé la vérification initiale du garde. En pratique, traitez les scripts de build, les Makefiles, les scripts de packages et les binaires générés comme du code exécutable nécessitant le même niveau de revue qu'une commande shell directe. @@ -145,7 +145,7 @@ Pour les environnements à haut risque : * Examinez les scripts de build avant l'exécution. * Préférez l'approbation/revue manuelle pour les workflows de compilation et d'exécution. -* Exécutez PicoClaw dans un conteneur ou une VM si vous avez besoin d'une isolation plus forte que celle fournie par le garde intégré. +* Exécutez Piconomous dans un conteneur ou une VM si vous avez besoin d'une isolation plus forte que celle fournie par le garde intégré. #### Exemples d'Erreurs @@ -178,7 +178,7 @@ Si vous avez besoin que l'agent accède à des chemins en dehors du workspace : **Méthode 2 : Variable d'environnement** ```bash -export PICOCLAW_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACE=false +export PICONOMOUS_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACE=false ``` > ⚠️ **Avertissement** : Désactiver cette restriction permet à l'agent d'accéder à n'importe quel chemin sur votre système. À utiliser avec précaution dans des environnements contrôlés uniquement. @@ -197,7 +197,7 @@ Tous les chemins partagent la même restriction de workspace — il n'y a aucun ### Heartbeat (Tâches Périodiques) -PicoClaw peut effectuer des tâches périodiques automatiquement. Créez un fichier `HEARTBEAT.md` dans votre workspace : +Piconomous peut effectuer des tâches périodiques automatiquement. Créez un fichier `HEARTBEAT.md` dans votre workspace : ```markdown # Periodic Tasks diff --git a/docs/fr/credential_encryption.md b/docs/fr/credential_encryption.md index eec765039..40832b3d5 100644 --- a/docs/fr/credential_encryption.md +++ b/docs/fr/credential_encryption.md @@ -2,7 +2,7 @@ # Chiffrement des identifiants -PicoClaw prend en charge le chiffrement des valeurs `api_key` dans les entrées de configuration `model_list`. +Piconomous prend en charge le chiffrement des valeurs `api_key` dans les entrées de configuration `model_list`. Les clés chiffrées sont stockées sous forme de chaînes `enc://` et déchiffrées automatiquement au démarrage. --- @@ -12,12 +12,12 @@ Les clés chiffrées sont stockées sous forme de chaînes `enc://` et d **1. Définir votre phrase secrète** ```bash -export PICOCLAW_KEY_PASSPHRASE="your-passphrase" +export PICONOMOUS_KEY_PASSPHRASE="your-passphrase" ``` **2. Chiffrer une clé API** -Exécutez `picoclaw onboard` — il vous demande votre phrase secrète et génère la clé SSH, +Exécutez `piconomous onboard` — il vous demande votre phrase secrète et génère la clé SSH, puis re-chiffre automatiquement toutes les entrées `api_key` en clair dans votre configuration lors du prochain appel à `SaveConfig`. La valeur `enc://` résultante ressemblera à : @@ -48,7 +48,7 @@ enc://AAAA...base64... |--------|---------|--------------| | Texte clair | `sk-abc123` | Utilisé tel quel | | Référence fichier | `file://openai.key` | Contenu lu depuis le même répertoire que le fichier de configuration | -| Chiffré | `enc://` | Déchiffré au démarrage avec `PICOCLAW_KEY_PASSPHRASE` | +| Chiffré | `enc://` | Déchiffré au démarrage avec `PICONOMOUS_KEY_PASSPHRASE` | | Vide | `""` | Transmis tel quel (utilisé avec `auth_method: oauth`) | --- @@ -62,7 +62,7 @@ Le chiffrement utilise **HKDF-SHA256** avec une clé privée SSH comme second fa ``` sshHash = SHA256(ssh_private_key_file_bytes) ikm = HMAC-SHA256(key=sshHash, message=passphrase) -aes_key = HKDF-SHA256(ikm, salt, info="picoclaw-credential-v1", 32 bytes) +aes_key = HKDF-SHA256(ikm, salt, info="piconomous-credential-v1", 32 bytes) ``` ### Chiffrement @@ -99,7 +99,7 @@ Le tag d'authentification GCM est automatiquement ajouté au texte chiffré. Tou Lorsqu'une clé privée SSH est fournie, casser le chiffrement nécessite **les deux** : -1. La **phrase secrète** (`PICOCLAW_KEY_PASSPHRASE`) +1. La **phrase secrète** (`PICONOMOUS_KEY_PASSPHRASE`) 2. Le **fichier de clé privée SSH** Cela signifie qu'un fichier de configuration divulgué seul ne suffit pas pour récupérer la clé API, même si la phrase secrète est faible. La clé SSH apporte 256 bits d'entropie (Ed25519) indépendamment de la force de la phrase secrète. @@ -119,33 +119,33 @@ Cela signifie qu'un fichier de configuration divulgué seul ne suffit pas pour r | Variable | Requis | Description | |----------|--------|-------------| -| `PICOCLAW_KEY_PASSPHRASE` | Oui (pour `enc://`) | Phrase secrète utilisée pour la dérivation de clé | -| `PICOCLAW_SSH_KEY_PATH` | Non | Chemin vers la clé privée SSH. Si non défini, détection automatique depuis `~/.ssh/picoclaw_ed25519.key` | +| `PICONOMOUS_KEY_PASSPHRASE` | Oui (pour `enc://`) | Phrase secrète utilisée pour la dérivation de clé | +| `PICONOMOUS_SSH_KEY_PATH` | Non | Chemin vers la clé privée SSH. Si non défini, détection automatique depuis `~/.ssh/piconomous_ed25519.key` | ### Détection automatique de la clé SSH -Si `PICOCLAW_SSH_KEY_PATH` n'est pas défini, PicoClaw recherche la clé dédiée : +Si `PICONOMOUS_SSH_KEY_PATH` n'est pas défini, Piconomous recherche la clé dédiée : ``` -~/.ssh/picoclaw_ed25519.key +~/.ssh/piconomous_ed25519.key ``` Ce fichier dédié évite les conflits avec les clés SSH existantes de l'utilisateur. -Exécutez `picoclaw onboard` pour le générer automatiquement. +Exécutez `piconomous onboard` pour le générer automatiquement. `os.UserHomeDir()` est utilisé pour la résolution multiplateforme du répertoire personnel (lit `USERPROFILE` sous Windows, `HOME` sous Unix/macOS). -> **Remarque :** Un fichier de clé SSH est requis pour le chiffrement des identifiants. Si aucune clé n'est trouvée et que `PICOCLAW_SSH_KEY_PATH` n'est pas défini, le chiffrement/déchiffrement échouera. Exécutez `picoclaw onboard` pour générer la clé automatiquement. +> **Remarque :** Un fichier de clé SSH est requis pour le chiffrement des identifiants. Si aucune clé n'est trouvée et que `PICONOMOUS_SSH_KEY_PATH` n'est pas défini, le chiffrement/déchiffrement échouera. Exécutez `piconomous onboard` pour générer la clé automatiquement. --- ## Migration -Étant donné que les seuls éléments secrets sont `PICOCLAW_KEY_PASSPHRASE` et le fichier de clé privée SSH, la migration est simple : +Étant donné que les seuls éléments secrets sont `PICONOMOUS_KEY_PASSPHRASE` et le fichier de clé privée SSH, la migration est simple : 1. Copiez le fichier de configuration sur la nouvelle machine. -2. Définissez `PICOCLAW_KEY_PASSPHRASE` avec la même valeur. -3. Copiez le fichier de clé privée SSH au même chemin (ou définissez `PICOCLAW_SSH_KEY_PATH` vers son nouvel emplacement). +2. Définissez `PICONOMOUS_KEY_PASSPHRASE` avec la même valeur. +3. Copiez le fichier de clé privée SSH au même chemin (ou définissez `PICONOMOUS_SSH_KEY_PATH` vers son nouvel emplacement). Aucun re-chiffrement n'est nécessaire. @@ -153,7 +153,7 @@ Aucun re-chiffrement n'est nécessaire. ## Considérations de sécurité -- **La phrase secrète et la clé SSH sont toutes deux requises.** La clé SSH agit comme un second facteur — sans elle, le chiffrement/déchiffrement échouera. Exécutez `picoclaw onboard` pour générer la clé si elle n'existe pas. -- **La clé SSH est en lecture seule à l'exécution.** PicoClaw n'écrit ni ne modifie jamais le fichier de clé SSH. +- **La phrase secrète et la clé SSH sont toutes deux requises.** La clé SSH agit comme un second facteur — sans elle, le chiffrement/déchiffrement échouera. Exécutez `piconomous onboard` pour générer la clé si elle n'existe pas. +- **La clé SSH est en lecture seule à l'exécution.** Piconomous n'écrit ni ne modifie jamais le fichier de clé SSH. - **Les clés en texte clair restent prises en charge.** Les configurations existantes sans `enc://` ne sont pas affectées. -- **Le format `enc://` est versionné** via le champ `info` de HKDF (`picoclaw-credential-v1`), permettant de futures mises à niveau d'algorithme sans casser les valeurs chiffrées existantes. +- **Le format `enc://` est versionné** via le champ `info` de HKDF (`piconomous-credential-v1`), permettant de futures mises à niveau d'algorithme sans casser les valeurs chiffrées existantes. diff --git a/docs/fr/debug.md b/docs/fr/debug.md index 5753ccf8c..e6ff6e9d9 100644 --- a/docs/fr/debug.md +++ b/docs/fr/debug.md @@ -1,31 +1,31 @@ -# Débogage de PicoClaw +# Débogage de Piconomous > Retour au [README](../../README.fr.md) -PicoClaw effectue de multiples interactions complexes en arrière-plan pour chaque requête qu'il reçoit — du routage des messages et de l'évaluation de la complexité, à l'exécution des outils et à l'adaptation aux défaillances de modèle. Pouvoir voir exactement ce qui se passe est crucial, non seulement pour résoudre les problèmes potentiels, mais aussi pour véritablement comprendre le fonctionnement de l'agent. +Piconomous effectue de multiples interactions complexes en arrière-plan pour chaque requête qu'il reçoit — du routage des messages et de l'évaluation de la complexité, à l'exécution des outils et à l'adaptation aux défaillances de modèle. Pouvoir voir exactement ce qui se passe est crucial, non seulement pour résoudre les problèmes potentiels, mais aussi pour véritablement comprendre le fonctionnement de l'agent. -## Démarrer PicoClaw en mode débogage +## Démarrer Piconomous en mode débogage -Pour obtenir des informations détaillées sur ce que fait l'agent (requêtes LLM, appels d'outils, routage des messages), vous pouvez démarrer la passerelle PicoClaw avec le drapeau de débogage : +Pour obtenir des informations détaillées sur ce que fait l'agent (requêtes LLM, appels d'outils, routage des messages), vous pouvez démarrer la passerelle Piconomous avec le drapeau de débogage : ```bash -picoclaw gateway --debug +piconomous gateway --debug # or -picoclaw gateway -d +piconomous gateway -d ``` Dans ce mode, le système formate les logs de manière détaillée et affiche des aperçus des prompts système et des résultats d'exécution des outils. ## Désactiver la troncature des logs (logs complets) -Par défaut, PicoClaw tronque les chaînes très longues (comme le *Prompt Système* ou les résultats JSON volumineux) dans les logs de débogage afin de garder la console lisible. +Par défaut, Piconomous tronque les chaînes très longues (comme le *Prompt Système* ou les résultats JSON volumineux) dans les logs de débogage afin de garder la console lisible. Si vous avez besoin d'inspecter la sortie complète d'une commande ou le payload exact envoyé au modèle LLM, vous pouvez utiliser le drapeau `--no-truncate`. **Remarque :** Ce drapeau fonctionne *uniquement* en combinaison avec le mode `--debug`. ```bash -picoclaw gateway --debug --no-truncate +piconomous gateway --debug --no-truncate ``` diff --git a/docs/fr/docker.md b/docs/fr/docker.md index 432edb1b2..94d56682b 100644 --- a/docs/fr/docker.md +++ b/docs/fr/docker.md @@ -4,12 +4,12 @@ ## 🐳 Docker Compose -Vous pouvez également exécuter PicoClaw avec Docker Compose sans rien installer localement. +Vous pouvez également exécuter Piconomous avec Docker Compose sans rien installer localement. ```bash # 1. Cloner ce dépôt -git clone https://github.com/sipeed/picoclaw.git -cd picoclaw +git clone https://github.com/sipeed/piconomous.git +cd piconomous # 2. Premier lancement — génère automatiquement docker/data/config.json puis s'arrête # (se déclenche uniquement quand config.json et workspace/ sont tous deux absents) @@ -24,11 +24,11 @@ docker compose -f docker/docker-compose.yml --profile gateway up -d ``` > [!TIP] -> **Utilisateurs Docker** : Par défaut, le Gateway écoute sur `127.0.0.1`, ce qui n'est pas accessible depuis l'hôte. Si vous devez accéder aux endpoints de santé ou exposer des ports, définissez `PICOCLAW_GATEWAY_HOST=0.0.0.0` dans votre environnement ou mettez à jour `config.json`. +> **Utilisateurs Docker** : Par défaut, le Gateway écoute sur `127.0.0.1`, ce qui n'est pas accessible depuis l'hôte. Si vous devez accéder aux endpoints de santé ou exposer des ports, définissez `PICONOMOUS_GATEWAY_HOST=0.0.0.0` dans votre environnement ou mettez à jour `config.json`. ```bash # 5. Vérifier les logs -docker compose -f docker/docker-compose.yml logs -f picoclaw-gateway +docker compose -f docker/docker-compose.yml logs -f piconomous-gateway # 6. Arrêter docker compose -f docker/docker-compose.yml --profile gateway down @@ -36,7 +36,7 @@ docker compose -f docker/docker-compose.yml --profile gateway down ### Mode Launcher (Console Web) -L'image `launcher` inclut les trois binaires (`picoclaw`, `picoclaw-launcher`, `picoclaw-launcher-tui`) et démarre la console web par défaut, qui fournit une interface navigateur pour la configuration et le chat. +L'image `launcher` inclut les trois binaires (`piconomous`, `piconomous-launcher`, `piconomous-launcher-tui`) et démarre la console web par défaut, qui fournit une interface navigateur pour la configuration et le chat. ```bash docker compose -f docker/docker-compose.yml --profile launcher up -d @@ -51,10 +51,10 @@ Ouvrez http://localhost:18800 dans votre navigateur. Le launcher gère automatiq ```bash # Poser une question -docker compose -f docker/docker-compose.yml run --rm picoclaw-agent -m "What is 2+2?" +docker compose -f docker/docker-compose.yml run --rm piconomous-agent -m "What is 2+2?" # Mode interactif -docker compose -f docker/docker-compose.yml run --rm picoclaw-agent +docker compose -f docker/docker-compose.yml run --rm piconomous-agent ``` ### Mise à jour @@ -67,21 +67,21 @@ docker compose -f docker/docker-compose.yml --profile gateway up -d ### 🚀 Démarrage Rapide > [!TIP] -> Configurez votre clé API dans `~/.picoclaw/config.json`. Obtenir des clés API : [Volcengine (CodingPlan)](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) (LLM) · [OpenRouter](https://openrouter.ai/keys) (LLM) · [Zhipu](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys) (LLM). La recherche web est optionnelle — obtenez gratuitement une [API Tavily](https://tavily.com) (1000 requêtes gratuites/mois) ou une [API Brave Search](https://brave.com/search/api) (2000 requêtes gratuites/mois). +> Configurez votre clé API dans `~/.piconomous/config.json`. Obtenir des clés API : [Volcengine (CodingPlan)](https://www.volcengine.com/activity/codingplan?utm_campaign=Piconomous&utm_content=Piconomous&utm_medium=devrel&utm_source=OWO&utm_term=Piconomous) (LLM) · [OpenRouter](https://openrouter.ai/keys) (LLM) · [Zhipu](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys) (LLM). La recherche web est optionnelle — obtenez gratuitement une [API Tavily](https://tavily.com) (1000 requêtes gratuites/mois) ou une [API Brave Search](https://brave.com/search/api) (2000 requêtes gratuites/mois). **1. Initialiser** ```bash -picoclaw onboard +piconomous onboard ``` -**2. Configurer** (`~/.picoclaw/config.json`) +**2. Configurer** (`~/.piconomous/config.json`) ```json { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "model_name": "gpt-5.4", "max_tokens": 8192, "temperature": 0.7, @@ -142,7 +142,7 @@ picoclaw onboard ``` > **Nouveau** : Le format de configuration `model_list` permet l'ajout de fournisseurs sans modification de code. Voir [Configuration des Modèles](#configuration-des-modèles-model_list) pour plus de détails. -> `request_timeout` est optionnel et utilise les secondes. S'il est omis ou défini à `<= 0`, PicoClaw utilise le timeout par défaut (120s). +> `request_timeout` est optionnel et utilise les secondes. S'il est omis ou défini à `<= 0`, Piconomous utilise le timeout par défaut (120s). **3. Obtenir des clés API** @@ -159,7 +159,7 @@ picoclaw onboard **4. Discuter** ```bash -picoclaw agent -m "What is 2+2?" +piconomous agent -m "What is 2+2?" ``` C'est tout ! Vous avez un assistant IA fonctionnel en 2 minutes. diff --git a/docs/fr/hardware-compatibility.md b/docs/fr/hardware-compatibility.md index c1f397e80..55c75b3bd 100644 --- a/docs/fr/hardware-compatibility.md +++ b/docs/fr/hardware-compatibility.md @@ -1,8 +1,8 @@ > Retour au [README](../../README.fr.md) -# 🖥️ PicoClaw Liste de compatibilité matérielle +# 🖥️ Piconomous Liste de compatibilité matérielle -PicoClaw fonctionne sur pratiquement n'importe quel appareil Linux. Cette page répertorie les puces, produits et cartes de développement vérifiés. +Piconomous fonctionne sur pratiquement n'importe quel appareil Linux. Cette page répertorie les puces, produits et cartes de développement vérifiés. **Votre matériel n'est pas listé ?** Soumettez une PR pour l'ajouter ! Les fabricants de matériel sont invités à contribuer et à co-promouvoir. @@ -59,7 +59,7 @@ PicoClaw fonctionne sur pratiquement n'importe quel appareil Linux. Cette page r ## 2. Produits vérifiés (par date de sortie) -Produits grand public, routeurs et appareils industriels testés avec PicoClaw. +Produits grand public, routeurs et appareils industriels testés avec Piconomous. | Année | Produit | Arch | SoC | RAM | Catégorie | |-------|---------|------|-----|-----|-----------| @@ -97,7 +97,7 @@ Produits grand public, routeurs et appareils industriels testés avec PicoClaw. ### Téléphones Android (via Termux) -Tout téléphone Android ARM64 (2015+) avec 1 Go+ de RAM. Installez [Termux](https://github.com/termux/termux-app), utilisez `proot` pour exécuter PicoClaw. +Tout téléphone Android ARM64 (2015+) avec 1 Go+ de RAM. Installez [Termux](https://github.com/termux/termux-app), utilisez `proot` pour exécuter Piconomous. > Voir [README : Exécuter sur d'anciens téléphones Android](../../README.fr.md#-run-on-old-android-phones) pour les instructions de configuration. @@ -130,14 +130,14 @@ Tout téléphone Android ARM64 (2015+) avec 1 Go+ de RAM. Installez [Termux](htt ```bash # 1. Télécharger pour votre architecture -wget https://github.com/sipeed/picoclaw/releases/latest/download/picoclaw_Linux_arm64.tar.gz -tar xzf picoclaw_Linux_arm64.tar.gz +wget https://github.com/sipeed/piconomous/releases/latest/download/piconomous_Linux_arm64.tar.gz +tar xzf piconomous_Linux_arm64.tar.gz # 2. Initialiser -./picoclaw onboard +./piconomous onboard # 3. Tester -./picoclaw agent -m "Hello, what board am I running on?" +./piconomous agent -m "Hello, what board am I running on?" ``` Builds disponibles : `linux-amd64`, `linux-arm64`, `linux-arm`, `linux-riscv64`, `linux-loong64`, `linux-mipsle` diff --git a/docs/fr/providers.md b/docs/fr/providers.md index 39f5cf36a..a64f18d5c 100644 --- a/docs/fr/providers.md +++ b/docs/fr/providers.md @@ -11,7 +11,7 @@ | ------------ | --------------------------------------- | ------------------------------------------------------------ | | `gemini` | LLM (Gemini direct) | [aistudio.google.com](https://aistudio.google.com) | | `zhipu` | LLM (Zhipu direct) | [bigmodel.cn](https://bigmodel.cn) | -| `volcengine` | LLM (Volcengine direct) | [volcengine.com](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) | +| `volcengine` | LLM (Volcengine direct) | [volcengine.com](https://www.volcengine.com/activity/codingplan?utm_campaign=Piconomous&utm_content=Piconomous&utm_medium=devrel&utm_source=OWO&utm_term=Piconomous) | | `openrouter` | LLM (recommended, access to all models) | [openrouter.ai](https://openrouter.ai) | | `anthropic` | LLM (Claude direct) | [console.anthropic.com](https://console.anthropic.com) | | `openai` | LLM (GPT direct) | [platform.openai.com](https://platform.openai.com) | @@ -29,7 +29,7 @@ ### Configuration des Modèles (model_list) -> **Nouveauté** PicoClaw utilise désormais une approche de configuration **centrée sur le modèle**. Spécifiez simplement le format `vendor/model` (par ex. `zhipu/glm-4.7`) pour ajouter de nouveaux fournisseurs — **aucune modification de code requise !** +> **Nouveauté** Piconomous utilise désormais une approche de configuration **centrée sur le modèle**. Spécifiez simplement le format `vendor/model` (par ex. `zhipu/glm-4.7`) pour ajouter de nouveaux fournisseurs — **aucune modification de code requise !** Cette conception permet également le **support multi-agents** avec une sélection flexible de fournisseurs : @@ -56,7 +56,7 @@ Cette conception permet également le **support multi-agents** avec une sélecti | **LiteLLM Proxy** | `litellm/` | `http://localhost:4000/v1` | OpenAI | Your LiteLLM proxy key | | **VLLM** | `vllm/` | `http://localhost:8000/v1` | OpenAI | Local | | **Cerebras** | `cerebras/` | `https://api.cerebras.ai/v1` | OpenAI | [Get Key](https://cerebras.ai) | -| **VolcEngine (Doubao)** | `volcengine/` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [Get Key](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) | +| **VolcEngine (Doubao)** | `volcengine/` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [Get Key](https://www.volcengine.com/activity/codingplan?utm_campaign=Piconomous&utm_content=Piconomous&utm_medium=devrel&utm_source=OWO&utm_term=Piconomous) | | **神算云** | `shengsuanyun/` | `https://router.shengsuanyun.com/api/v1` | OpenAI | - | | **BytePlus** | `byteplus/` | `https://ark.ap-southeast.bytepluses.com/api/v3` | OpenAI | [Get Key](https://www.byteplus.com) | | **Vivgrid** | `vivgrid/` | `https://api.vivgrid.com/v1` | OpenAI | [Get Key](https://vivgrid.com) | @@ -151,7 +151,7 @@ Cette conception permet également le **support multi-agents** avec une sélecti } ``` -> Exécutez `picoclaw auth login --provider anthropic` pour coller votre token API. +> Exécutez `piconomous auth login --provider anthropic` pour coller votre token API. **API Anthropic Messages (format natif)** @@ -205,11 +205,11 @@ Pour l'accès direct à l'API Anthropic ou les endpoints personnalisés qui ne p } ``` -PicoClaw ne supprime que le préfixe externe `litellm/` avant d'envoyer la requête, donc les alias de proxy comme `litellm/lite-gpt4` envoient `lite-gpt4`, tandis que `litellm/openai/gpt-4o` envoie `openai/gpt-4o`. +Piconomous ne supprime que le préfixe externe `litellm/` avant d'envoyer la requête, donc les alias de proxy comme `litellm/lite-gpt4` envoient `lite-gpt4`, tandis que `litellm/openai/gpt-4o` envoie `openai/gpt-4o`. #### Répartition de Charge -Configurez plusieurs endpoints pour le même nom de modèle — PicoClaw effectuera automatiquement un round-robin entre eux : +Configurez plusieurs endpoints pour le même nom de modèle — Piconomous effectuera automatiquement un round-robin entre eux : ```json { @@ -276,7 +276,7 @@ Pour un guide de migration détaillé, voir [migration/model-list-migration.md]( ### Architecture des Fournisseurs -PicoClaw route les fournisseurs par famille de protocoles : +Piconomous route les fournisseurs par famille de protocoles : - Protocole compatible OpenAI : OpenRouter, passerelles compatibles OpenAI, Groq, Zhipu et endpoints de type vLLM. - Protocole Anthropic : Comportement natif de l'API Claude. @@ -297,7 +297,7 @@ Cela maintient le runtime léger tout en faisant des nouveaux backends compatibl { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "model_name": "glm-4.7", "max_tokens": 8192, "temperature": 0.7, @@ -316,7 +316,7 @@ Cela maintient le runtime léger tout en faisant des nouveaux backends compatibl **3. Lancer** ```bash -picoclaw agent -m "Hello" +piconomous agent -m "Hello" ``` @@ -429,5 +429,5 @@ picoclaw agent -m "Hello" ---
- PicoClaw Meme + Piconomous Meme
diff --git a/docs/fr/spawn-tasks.md b/docs/fr/spawn-tasks.md index 5635cd645..90c08d86b 100644 --- a/docs/fr/spawn-tasks.md +++ b/docs/fr/spawn-tasks.md @@ -57,5 +57,5 @@ Le subagent a accès aux outils (message, web_search, etc.) et peut communiquer **Variables d'environnement :** -* `PICOCLAW_HEARTBEAT_ENABLED=false` pour désactiver -* `PICOCLAW_HEARTBEAT_INTERVAL=60` pour changer l'intervalle +* `PICONOMOUS_HEARTBEAT_ENABLED=false` pour désactiver +* `PICONOMOUS_HEARTBEAT_INTERVAL=60` pour changer l'intervalle diff --git a/docs/fr/tools_configuration.md b/docs/fr/tools_configuration.md index f6e1c0374..95d9cc14b 100644 --- a/docs/fr/tools_configuration.md +++ b/docs/fr/tools_configuration.md @@ -2,7 +2,7 @@ > Retour au [README](../../README.fr.md) -La configuration des outils de PicoClaw se trouve dans le champ `tools` de `config.json`. +La configuration des outils de Piconomous se trouve dans le champ `tools` de `config.json`. ## Structure du répertoire @@ -91,7 +91,7 @@ Pour désactiver complètement l'outil `exec`, définissez `enabled` à `false` **Via la variable d'environnement :** ```bash -PICOCLAW_TOOLS_EXEC_ENABLED=false +PICONOMOUS_TOOLS_EXEC_ENABLED=false ``` > **Note :** Lorsqu'il est désactivé, l'agent ne pourra pas exécuter de commandes shell. Cela affecte également la capacité de l'outil Cron à exécuter des commandes shell planifiées. @@ -103,7 +103,7 @@ PICOCLAW_TOOLS_EXEC_ENABLED=false ### Modèles de commandes bloquées par défaut -Par défaut, PicoClaw bloque les commandes dangereuses suivantes : +Par défaut, Piconomous bloque les commandes dangereuses suivantes : - Commandes de suppression : `rm -rf`, `del /f/q`, `rmdir /s` - Opérations disque : `format`, `mkfs`, `diskpart`, `dd if=`, écriture vers `/dev/sd*` @@ -120,7 +120,7 @@ Par défaut, PicoClaw bloque les commandes dangereuses suivantes : ### Limitation architecturale connue -Le garde exec ne valide que la commande de niveau supérieur envoyée à PicoClaw. Il n'inspecte **pas** récursivement les processus enfants générés par les outils de build ou les scripts après le démarrage de cette commande. +Le garde exec ne valide que la commande de niveau supérieur envoyée à Piconomous. Il n'inspecte **pas** récursivement les processus enfants générés par les outils de build ou les scripts après le démarrage de cette commande. Exemples de workflows pouvant contourner le garde de commande directe une fois la commande initiale autorisée : @@ -347,14 +347,14 @@ L'outil skills configure la découverte et l'installation de compétences via de ## Variables d'environnement -Toutes les options de configuration peuvent être remplacées via des variables d'environnement au format `PICOCLAW_TOOLS_
_` : +Toutes les options de configuration peuvent être remplacées via des variables d'environnement au format `PICONOMOUS_TOOLS_
_` : Par exemple : -- `PICOCLAW_TOOLS_WEB_BRAVE_ENABLED=true` -- `PICOCLAW_TOOLS_EXEC_ENABLED=false` -- `PICOCLAW_TOOLS_EXEC_ENABLE_DENY_PATTERNS=false` -- `PICOCLAW_TOOLS_CRON_EXEC_TIMEOUT_MINUTES=10` -- `PICOCLAW_TOOLS_MCP_ENABLED=true` +- `PICONOMOUS_TOOLS_WEB_BRAVE_ENABLED=true` +- `PICONOMOUS_TOOLS_EXEC_ENABLED=false` +- `PICONOMOUS_TOOLS_EXEC_ENABLE_DENY_PATTERNS=false` +- `PICONOMOUS_TOOLS_CRON_EXEC_TIMEOUT_MINUTES=10` +- `PICONOMOUS_TOOLS_MCP_ENABLED=true` Note : La configuration de type map imbriquée (par exemple `tools.mcp.servers..*`) est configurée dans `config.json` plutôt que via des variables d'environnement. diff --git a/docs/fr/troubleshooting.md b/docs/fr/troubleshooting.md index d2d099ad3..3e11476f4 100644 --- a/docs/fr/troubleshooting.md +++ b/docs/fr/troubleshooting.md @@ -14,7 +14,7 @@ - **Incorrect :** `"model": "free"` → OpenRouter reçoit `free` et le rejette. - **Correct :** `"model": "openrouter/free"` → OpenRouter reçoit `openrouter/free` (routage automatique du niveau gratuit). -**Correction :** Dans `~/.picoclaw/config.json` (ou votre chemin de configuration) : +**Correction :** Dans `~/.piconomous/config.json` (ou votre chemin de configuration) : 1. **agents.defaults.model_name** doit correspondre à un `model_name` dans `model_list` (par ex. `"openrouter-free"`). 2. Le **model** de cette entrée doit être un identifiant de modèle OpenRouter valide, par exemple : diff --git a/docs/hardware-compatibility.md b/docs/hardware-compatibility.md index c11849822..b3e476f49 100644 --- a/docs/hardware-compatibility.md +++ b/docs/hardware-compatibility.md @@ -1,6 +1,6 @@ -# 🖥️ PicoClaw Hardware Compatibility List +# 🖥️ Piconomous Hardware Compatibility List -PicoClaw runs on virtually any Linux device. This page tracks verified chips, products, and development boards. +Piconomous runs on virtually any Linux device. This page tracks verified chips, products, and development boards. **Your hardware not listed?** Submit a PR to add it! Hardware vendors are welcome to contribute and co-promote. @@ -57,7 +57,7 @@ PicoClaw runs on virtually any Linux device. This page tracks verified chips, pr ## 2. Verified Products (by release date) -Consumer products, routers, and industrial devices that have been tested with PicoClaw. +Consumer products, routers, and industrial devices that have been tested with Piconomous. | Year | Product | Arch | SoC | RAM | Category | |------|---------|------|-----|-----|----------| @@ -95,7 +95,7 @@ Consumer products, routers, and industrial devices that have been tested with Pi ### Android Phones (via Termux) -Any ARM64 Android phone (2015+) with 1GB+ RAM. Install [Termux](https://github.com/termux/termux-app), use `proot` to run PicoClaw. +Any ARM64 Android phone (2015+) with 1GB+ RAM. Install [Termux](https://github.com/termux/termux-app), use `proot` to run Piconomous. > See [README: Run on old Android Phones](../README.md#-run-on-old-android-phones) for setup instructions. @@ -128,14 +128,14 @@ Any ARM64 Android phone (2015+) with 1GB+ RAM. Install [Termux](https://github.c ```bash # 1. Download for your architecture -wget https://github.com/sipeed/picoclaw/releases/latest/download/picoclaw_Linux_arm64.tar.gz -tar xzf picoclaw_Linux_arm64.tar.gz +wget https://github.com/sipeed/piconomous/releases/latest/download/piconomous_Linux_arm64.tar.gz +tar xzf piconomous_Linux_arm64.tar.gz # 2. Initialize -./picoclaw onboard +./piconomous onboard # 3. Test -./picoclaw agent -m "Hello, what board am I running on?" +./piconomous agent -m "Hello, what board am I running on?" ``` Available builds: `linux-amd64`, `linux-arm64`, `linux-arm`, `linux-riscv64`, `linux-loong64`, `linux-mipsle` diff --git a/docs/it/configuration.md b/docs/it/configuration.md index 6a79a9543..1660f7bc9 100644 --- a/docs/it/configuration.md +++ b/docs/it/configuration.md @@ -4,39 +4,39 @@ ## ⚙️ Configurazione -File di configurazione: `~/.picoclaw/config.json` +File di configurazione: `~/.piconomous/config.json` ### Variabili d'Ambiente -Puoi sovrascrivere i percorsi predefiniti usando variabili d'ambiente. Questo è utile per installazioni portatili, distribuzioni containerizzate, o per eseguire picoclaw come servizio di sistema. Queste variabili sono indipendenti e controllano percorsi diversi. +Puoi sovrascrivere i percorsi predefiniti usando variabili d'ambiente. Questo è utile per installazioni portatili, distribuzioni containerizzate, o per eseguire piconomous come servizio di sistema. Queste variabili sono indipendenti e controllano percorsi diversi. | Variabile | Descrizione | Percorso Predefinito | |-------------------|-----------------------------------------------------------------------------------------------------------------------------------------|---------------------------| -| `PICOCLAW_CONFIG` | Sovrascrive il percorso al file di configurazione. Indica direttamente a picoclaw quale `config.json` caricare, ignorando tutte le altre posizioni. | `~/.picoclaw/config.json` | -| `PICOCLAW_HOME` | Sovrascrive la directory radice per i dati di picoclaw. Modifica la posizione predefinita del `workspace` e delle altre directory dati. | `~/.picoclaw` | +| `PICONOMOUS_CONFIG` | Sovrascrive il percorso al file di configurazione. Indica direttamente a piconomous quale `config.json` caricare, ignorando tutte le altre posizioni. | `~/.piconomous/config.json` | +| `PICONOMOUS_HOME` | Sovrascrive la directory radice per i dati di piconomous. Modifica la posizione predefinita del `workspace` e delle altre directory dati. | `~/.piconomous` | **Esempi:** ```bash -# Esegui picoclaw usando un file di configurazione specifico +# Esegui piconomous usando un file di configurazione specifico # Il percorso del workspace verrà letto da quel file di configurazione -PICOCLAW_CONFIG=/etc/picoclaw/production.json picoclaw gateway +PICONOMOUS_CONFIG=/etc/piconomous/production.json piconomous gateway -# Esegui picoclaw con tutti i dati salvati in /opt/picoclaw -# La configurazione verrà caricata dal percorso predefinito ~/.picoclaw/config.json -# Il workspace verrà creato in /opt/picoclaw/workspace -PICOCLAW_HOME=/opt/picoclaw picoclaw agent +# Esegui piconomous con tutti i dati salvati in /opt/piconomous +# La configurazione verrà caricata dal percorso predefinito ~/.piconomous/config.json +# Il workspace verrà creato in /opt/piconomous/workspace +PICONOMOUS_HOME=/opt/piconomous piconomous agent # Usa entrambi per un setup completamente personalizzato -PICOCLAW_HOME=/srv/picoclaw PICOCLAW_CONFIG=/srv/picoclaw/main.json picoclaw gateway +PICONOMOUS_HOME=/srv/piconomous PICONOMOUS_CONFIG=/srv/piconomous/main.json piconomous gateway ``` ### Struttura del Workspace -PicoClaw salva i dati nel workspace configurato (predefinito: `~/.picoclaw/workspace`): +Piconomous salva i dati nel workspace configurato (predefinito: `~/.piconomous/workspace`): ``` -~/.picoclaw/workspace/ +~/.piconomous/workspace/ ├── sessions/ # Sessioni di conversazione e cronologia ├── memory/ # Memoria a lungo termine (MEMORY.md) ├── state/ # Stato persistente (ultimo canale, ecc.) @@ -55,14 +55,14 @@ PicoClaw salva i dati nel workspace configurato (predefinito: `~/.picoclaw/works Per impostazione predefinita, le skill vengono caricate da: -1. `~/.picoclaw/workspace/skills` (workspace) -2. `~/.picoclaw/skills` (globale) +1. `~/.piconomous/workspace/skills` (workspace) +2. `~/.piconomous/skills` (globale) 3. `/skills` (builtin) Per configurazioni avanzate/di test, puoi sovrascrivere la directory radice delle skill builtin con: ```bash -export PICOCLAW_BUILTIN_SKILLS=/path/to/skills +export PICONOMOUS_BUILTIN_SKILLS=/path/to/skills ``` ### Politica Unificata di Esecuzione dei Comandi @@ -74,7 +74,7 @@ export PICOCLAW_BUILTIN_SKILLS=/path/to/skills ### 🔒 Sandbox di Sicurezza -PicoClaw esegue in un ambiente sandboxed per impostazione predefinita. L'agent può accedere solo ai file ed eseguire comandi all'interno del workspace configurato. +Piconomous esegue in un ambiente sandboxed per impostazione predefinita. L'agent può accedere solo ai file ed eseguire comandi all'interno del workspace configurato. #### Configurazione Predefinita @@ -82,7 +82,7 @@ PicoClaw esegue in un ambiente sandboxed per impostazione predefinita. L'agent p { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "restrict_to_workspace": true } } @@ -91,7 +91,7 @@ PicoClaw esegue in un ambiente sandboxed per impostazione predefinita. L'agent p | Opzione | Predefinito | Descrizione | | ----------------------- | ----------------------- | ---------------------------------------------------- | -| `workspace` | `~/.picoclaw/workspace` | Directory di lavoro dell'agent | +| `workspace` | `~/.piconomous/workspace` | Directory di lavoro dell'agent | | `restrict_to_workspace` | `true` | Limita l'accesso a file/comandi al workspace | #### Strumenti Protetti @@ -138,7 +138,7 @@ Anche con `restrict_to_workspace: false`, lo strumento `exec` blocca questi coma #### Limitazione Nota: Processi Figlio degli Strumenti di Build -Il controllo di sicurezza exec ispeziona solo la riga di comando avviata direttamente da PicoClaw. Non ispeziona ricorsivamente i processi figlio generati da strumenti di sviluppo consentiti come `make`, `go run`, `cargo`, `npm run` o script di build personalizzati. +Il controllo di sicurezza exec ispeziona solo la riga di comando avviata direttamente da Piconomous. Non ispeziona ricorsivamente i processi figlio generati da strumenti di sviluppo consentiti come `make`, `go run`, `cargo`, `npm run` o script di build personalizzati. Ciò significa che un comando di primo livello può comunque compilare o avviare altri binari dopo aver superato il controllo iniziale. In pratica, tratta gli script di build, i Makefile, gli script di pacchetti e i binari generati come codice eseguibile che richiede lo stesso livello di revisione di un comando shell diretto. @@ -146,7 +146,7 @@ Per ambienti ad alto rischio: * Esamina gli script di build prima dell'esecuzione. * Preferisci l'approvazione/revisione manuale per i workflow di compilazione ed esecuzione. -* Esegui PicoClaw in un container o VM se hai bisogno di un isolamento più forte di quello fornito dal controllo integrato. +* Esegui Piconomous in un container o VM se hai bisogno di un isolamento più forte di quello fornito dal controllo integrato. #### Esempi di Errore @@ -179,7 +179,7 @@ Se hai bisogno che l'agent acceda a percorsi al di fuori del workspace: **Metodo 2: Variabile d'ambiente** ```bash -export PICOCLAW_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACE=false +export PICONOMOUS_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACE=false ``` > ⚠️ **Attenzione**: Disabilitare questa restrizione consente all'agent di accedere a qualsiasi percorso sul tuo sistema. Usare con cautela solo in ambienti controllati. @@ -198,7 +198,7 @@ Tutti i percorsi condividono la stessa restrizione del workspace — non è poss ### Heartbeat (Task Periodici) -PicoClaw può eseguire task periodici automaticamente. Crea un file `HEARTBEAT.md` nel tuo workspace: +Piconomous può eseguire task periodici automaticamente. Crea un file `HEARTBEAT.md` nel tuo workspace: ```markdown # Periodic Tasks diff --git a/docs/ja/ANTIGRAVITY_AUTH.md b/docs/ja/ANTIGRAVITY_AUTH.md index b55e4ab1b..6517d5831 100644 --- a/docs/ja/ANTIGRAVITY_AUTH.md +++ b/docs/ja/ANTIGRAVITY_AUTH.md @@ -4,7 +4,7 @@ ## 概要 -**Antigravity**(Google Cloud Code Assist)は、Google が提供する AI モデルプロバイダーで、Google のクラウドインフラストラクチャを通じて Claude Opus 4.6 や Gemini などのモデルへのアクセスを提供します。本ドキュメントでは、認証の仕組み、モデルの取得方法、PicoClaw での新しいプロバイダーの実装方法について完全なガイドを提供します。 +**Antigravity**(Google Cloud Code Assist)は、Google が提供する AI モデルプロバイダーで、Google のクラウドインフラストラクチャを通じて Claude Opus 4.6 や Gemini などのモデルへのアクセスを提供します。本ドキュメントでは、認証の仕組み、モデルの取得方法、Piconomous での新しいプロバイダーの実装方法について完全なガイドを提供します。 --- @@ -19,7 +19,7 @@ 7. [統合要件](#統合要件) 8. [API エンドポイント](#api-エンドポイント) 9. [設定](#設定) -10. [PicoClaw での新しいプロバイダーの作成](#picoclaw-での新しいプロバイダーの作成) +10. [Piconomous での新しいプロバイダーの作成](#piconomous-での新しいプロバイダーの作成) --- @@ -380,7 +380,7 @@ const antigravityPlugin = { description: "OAuth flow for Google Antigravity (Cloud Code Assist)", configSchema: emptyPluginConfigSchema(), - register(api: PicoClawPluginApi) { + register(api: PiconomousPluginApi) { api.registerProvider({ id: "google-antigravity", label: "Google Antigravity", @@ -407,7 +407,7 @@ const antigravityPlugin = { ```typescript type ProviderAuthContext = { - config: PicoClawConfig; + config: PiconomousConfig; agentDir?: string; workspaceDir?: string; prompter: WizardPrompter; // UI プロンプト/通知 @@ -428,7 +428,7 @@ type ProviderAuthResult = { profileId: string; credential: AuthProfileCredential; }>; - configPatch?: Partial; + configPatch?: Partial; defaultModel?: string; notes?: string[]; }; @@ -441,7 +441,7 @@ type ProviderAuthResult = { ### 1. 必要な環境/依存関係 - Go ≥ 1.25 -- PicoClaw コードベース(`pkg/providers/` および `pkg/auth/`) +- Piconomous コードベース(`pkg/providers/` および `pkg/auth/`) - `crypto` および `net/http` 標準ライブラリパッケージ ### 2. API 呼び出しに必要なヘッダー @@ -594,7 +594,7 @@ export function sanitizeAntigravityThinkingBlocks( ### 認証プロファイルの保存 -認証プロファイルは `~/.picoclaw/auth.json` に保存されます: +認証プロファイルは `~/.piconomous/auth.json` に保存されます: ```json { @@ -614,9 +614,9 @@ export function sanitizeAntigravityThinkingBlocks( --- -## PicoClaw での新しいプロバイダーの作成 +## Piconomous での新しいプロバイダーの作成 -PicoClaw のプロバイダーは `pkg/providers/` 配下の Go パッケージとして実装されます。新しいプロバイダーを追加するには: +Piconomous のプロバイダーは `pkg/providers/` 配下の Go パッケージとして実装されます。新しいプロバイダーを追加するには: ### ステップバイステップの実装 @@ -676,7 +676,7 @@ case "your-provider": #### 5. 認証サポートの追加(オプション) -プロバイダーが OAuth や特別な認証を必要とする場合、`cmd/picoclaw/internal/auth/helpers.go` にケースを追加します: +プロバイダーが OAuth や特別な認証を必要とする場合、`cmd/piconomous/internal/auth/helpers.go` にケースを追加します: ```go case "your-provider": @@ -706,26 +706,26 @@ case "your-provider": ```bash # プロバイダーで認証 -picoclaw auth login --provider your-provider +piconomous auth login --provider your-provider # モデルの一覧表示(Antigravity 用) -picoclaw auth models +piconomous auth models # ゲートウェイの起動 -picoclaw gateway +piconomous gateway # 特定のモデルでエージェントを実行 -picoclaw agent -m "Hello" --model your-model +piconomous agent -m "Hello" --model your-model ``` ### テスト用環境変数 ```bash # デフォルトモデルの上書き -export PICOCLAW_AGENTS_DEFAULTS_MODEL=your-model +export PICONOMOUS_AGENTS_DEFAULTS_MODEL=your-model # プロバイダー設定の上書き -export PICOCLAW_MODEL_LIST='[{"model_name":"your-model","model":"your-provider/model-name","api_key":"..."}]' +export PICONOMOUS_MODEL_LIST='[{"model_name":"your-model","model":"your-provider/model-name","api_key":"..."}]' ``` --- @@ -735,10 +735,10 @@ export PICOCLAW_MODEL_LIST='[{"model_name":"your-model","model":"your-provider/m - **ソースファイル:** - `pkg/providers/antigravity_provider.go` - Antigravity プロバイダー実装 - `pkg/auth/oauth.go` - OAuth フロー実装 - - `pkg/auth/store.go` - 認証情報ストレージ(`~/.picoclaw/auth.json`) + - `pkg/auth/store.go` - 認証情報ストレージ(`~/.piconomous/auth.json`) - `pkg/providers/factory.go` - プロバイダーファクトリーとプロトコルルーティング - `pkg/providers/types.go` - プロバイダーインターフェース定義 - - `cmd/picoclaw/internal/auth/helpers.go` - 認証 CLI コマンド + - `cmd/piconomous/internal/auth/helpers.go` - 認証 CLI コマンド - **ドキュメント:** - `docs/ANTIGRAVITY_USAGE.md` - Antigravity 使用ガイド @@ -794,7 +794,7 @@ export PICOCLAW_MODEL_LIST='[{"model_name":"your-model","model":"your-provider/m ## トラブルシューティング ### "Token expired"(トークン期限切れ) -- OAuth トークンを更新:`picoclaw auth login --provider antigravity` +- OAuth トークンを更新:`piconomous auth login --provider antigravity` ### "Gemini for Google Cloud is not enabled"(Gemini for Google Cloud が有効になっていない) - Google Cloud Console で API を有効にしてください @@ -805,5 +805,5 @@ export PICOCLAW_MODEL_LIST='[{"model_name":"your-model","model":"your-provider/m ### モデルがリストに表示されない - OAuth 認証が正常に完了したことを確認してください -- 認証プロファイルストレージを確認:`~/.picoclaw/auth.json` -- `picoclaw auth login --provider antigravity` を再実行してください +- 認証プロファイルストレージを確認:`~/.piconomous/auth.json` +- `piconomous auth login --provider antigravity` を再実行してください diff --git a/docs/ja/ANTIGRAVITY_USAGE.md b/docs/ja/ANTIGRAVITY_USAGE.md index c044c1970..17e58f9a3 100644 --- a/docs/ja/ANTIGRAVITY_USAGE.md +++ b/docs/ja/ANTIGRAVITY_USAGE.md @@ -1,8 +1,8 @@ > [README](../../README.ja.md) に戻る -# PicoClaw で Antigravity プロバイダーを使用する +# Piconomous で Antigravity プロバイダーを使用する -このガイドでは、PicoClaw で **Antigravity**(Google Cloud Code Assist)プロバイダーをセットアップして使用する方法を説明します。 +このガイドでは、Piconomous で **Antigravity**(Google Cloud Code Assist)プロバイダーをセットアップして使用する方法を説明します。 ## 前提条件 @@ -14,7 +14,7 @@ Antigravity で認証するには、以下のコマンドを実行します: ```bash -picoclaw auth login --provider antigravity +piconomous auth login --provider antigravity ``` ### 手動認証(ヘッドレス/VPS) @@ -24,9 +24,9 @@ picoclaw auth login --provider antigravity 3. ログインを完了します。 4. ブラウザが `localhost:51121` URL にリダイレクトされます(ページは読み込めません)。 5. **ブラウザのアドレスバーからその最終 URL をコピーします**。 -6. **PicoClaw が待機しているターミナルにそれを貼り付けます**。 +6. **Piconomous が待機しているターミナルにそれを貼り付けます**。 -PicoClaw が自動的に認証コードを抽出し、プロセスを完了します。 +Piconomous が自動的に認証コードを抽出し、プロセスを完了します。 ## 2. モデルの管理 @@ -34,15 +34,15 @@ PicoClaw が自動的に認証コードを抽出し、プロセスを完了し プロジェクトがアクセスできるモデルとそのクォータを確認するには: ```bash -picoclaw auth models +piconomous auth models ``` ### モデルの切り替え -`~/.picoclaw/config.json` でデフォルトモデルを変更するか、CLI でオーバーライドできます: +`~/.piconomous/config.json` でデフォルトモデルを変更するか、CLI でオーバーライドできます: ```bash # 単一コマンドでオーバーライド -picoclaw agent -m "Hello" --model claude-opus-4-6-thinking +piconomous agent -m "Hello" --model claude-opus-4-6-thinking ``` ## 3. 実際の使用方法(Coolify/Docker) @@ -50,19 +50,19 @@ picoclaw agent -m "Hello" --model claude-opus-4-6-thinking Coolify または Docker でデプロイしている場合、以下の手順でテストしてください: 1. **環境変数**: - * `PICOCLAW_AGENTS_DEFAULTS_MODEL=gemini-flash` + * `PICONOMOUS_AGENTS_DEFAULTS_MODEL=gemini-flash` 2. **認証の永続化**: ローカルでログイン済みの場合、認証情報をサーバーにコピーできます: ```bash - scp ~/.picoclaw/auth.json user@your-server:~/.picoclaw/ + scp ~/.piconomous/auth.json user@your-server:~/.piconomous/ ``` *または*、ターミナルアクセスがある場合、サーバー上で `auth login` コマンドを一度実行してください。 ## 4. トラブルシューティング * **空のレスポンス**:モデルが空の応答を返す場合、プロジェクトで制限されている可能性があります。`gemini-3-flash` または `claude-opus-4-6-thinking` を試してください。 -* **429 レート制限**:Antigravity には厳格なクォータがあります。制限に達した場合、PicoClaw はエラーメッセージに「リセット時間」を表示します。 -* **404 Not Found**:`picoclaw auth models` リストのモデル ID を使用していることを確認してください。フルパスではなく、短い ID(例:`gemini-3-flash`)を使用してください。 +* **429 レート制限**:Antigravity には厳格なクォータがあります。制限に達した場合、Piconomous はエラーメッセージに「リセット時間」を表示します。 +* **404 Not Found**:`piconomous auth models` リストのモデル ID を使用していることを確認してください。フルパスではなく、短い ID(例:`gemini-3-flash`)を使用してください。 ## 5. 動作確認済みモデルのまとめ diff --git a/docs/ja/chat-apps.md b/docs/ja/chat-apps.md index 997a064ff..d3daf8f43 100644 --- a/docs/ja/chat-apps.md +++ b/docs/ja/chat-apps.md @@ -4,7 +4,7 @@ ## 💬 チャットアプリ連携 -PicoClaw は複数のチャットプラットフォームをサポートしており、Agent をどこにでも接続できます。 +Piconomous は複数のチャットプラットフォームをサポートしており、Agent をどこにでも接続できます。 > **注意**: すべての Webhook ベースのチャネル(LINE、WeCom など)は、共有 Gateway HTTP サーバー(`gateway.host`:`gateway.port`、デフォルト `127.0.0.1:18790`)上で提供されます。チャネルごとにポートを設定する必要はありません。注意:飛書(Feishu)は WebSocket/SDK モードを使用し、共有 HTTP Webhook サーバーは使用しません。 @@ -25,7 +25,7 @@ PicoClaw は複数のチャットプラットフォームをサポートして | **IRC** | ⭐⭐ 中程度 | サーバー + TLS 設定 | - | | **OneBot** | ⭐⭐ 中程度 | NapCat/Go-CQHTTP 互換、コミュニティエコシステム充実 | [ドキュメント](../channels/onebot/README.ja.md) | | **MaixCam** | ⭐ 簡単 | Sipeed AI カメラハードウェア統合チャネル | [ドキュメント](../channels/maixcam/README.ja.md) | -| **Pico** | ⭐ 簡単 | PicoClaw ネイティブプロトコルチャネル | | +| **Pico** | ⭐ 簡単 | Piconomous ネイティブプロトコルチャネル | | --- @@ -57,12 +57,12 @@ PicoClaw は複数のチャットプラットフォームをサポートして **3. 実行** ```bash -picoclaw gateway +piconomous gateway ``` **4. Telegram コマンドメニュー(起動時に自動登録)** -PicoClaw は統一されたコマンド定義を使用します。起動時に Telegram がサポートするコマンド(例: `/start`、`/help`、`/show`、`/list`)を Bot コマンドメニューに自動登録し、メニュー表示と実際の動作を一致させます。 +Piconomous は統一されたコマンド定義を使用します。起動時に Telegram がサポートするコマンド(例: `/start`、`/help`、`/show`、`/list`)を Bot コマンドメニューに自動登録し、メニュー表示と実際の動作を一致させます。 Telegram 側はコマンドメニュー登録機能を保持し、汎用コマンドの実行は Agent Loop 内の commands executor で統一的に処理されます。 ネットワークや API の一時的なエラーで登録に失敗しても、チャネルの起動はブロックされません。システムがバックグラウンドで自動リトライします。 @@ -138,7 +138,7 @@ Telegram 側はコマンドメニュー登録機能を保持し、汎用コマ **6. 実行** ```bash -picoclaw gateway +piconomous gateway ``` @@ -146,7 +146,7 @@ picoclaw gateway
WhatsApp(ネイティブ whatsmeow) -PicoClaw は 2 つの WhatsApp 接続方式をサポートしています: +Piconomous は 2 つの WhatsApp 接続方式をサポートしています: - **ネイティブ(推奨):** プロセス内で [whatsmeow](https://github.com/tulir/whatsmeow) を使用。独立した Bridge は不要です。`"use_native": true` に設定し、`bridge_url` を空にします。初回実行時に WhatsApp で QR コードをスキャン(リンクデバイス)。セッションはワークスペース配下(例: `workspace/whatsapp/`)に保存されます。ネイティブチャネルは**オプション**ビルドで、`-tags whatsapp_native` でコンパイルします(例: `make build-whatsapp-native` または `go build -tags whatsapp_native ./cmd/...`)。 - **Bridge:** 外部 WebSocket Bridge に接続。`bridge_url`(例: `ws://localhost:3001`)を設定し、`use_native` を false のままにします。 @@ -166,7 +166,7 @@ PicoClaw は 2 つの WhatsApp 接続方式をサポートしています: } ``` -`session_store_path` が空の場合、セッションは `/whatsapp/` に保存されます。`picoclaw gateway` を実行し、初回実行時にターミナルに表示される QR コードをスキャンしてください(WhatsApp → リンクデバイス)。 +`session_store_path` が空の場合、セッションは `/whatsapp/` に保存されます。`piconomous gateway` を実行し、初回実行時にターミナルに表示される QR コードをスキャンしてください(WhatsApp → リンクデバイス)。
@@ -197,7 +197,7 @@ PicoClaw は 2 つの WhatsApp 接続方式をサポートしています: **3. 実行** ```bash -picoclaw gateway +piconomous gateway ``` すべてのオプション(`device_id`、`join_on_invite`、`group_trigger`、`placeholder`、`reasoning_channel_id`)については [Matrix チャネル設定ガイド](../channels/matrix/README.md) を参照してください。 @@ -213,7 +213,7 @@ QQ 開放プラットフォームでは、OpenClaw 互換ボットのワンク 1. [QQ Bot クイックスタート](https://q.qq.com/qqbot/openclaw/index.html) を開き、QR コードをスキャンしてログイン 2. ボットが自動的に作成されます — **App ID** と **App Secret** をコピー -3. PicoClaw を設定: +3. Piconomous を設定: ```json { @@ -228,7 +228,7 @@ QQ 開放プラットフォームでは、OpenClaw 互換ボットのワンク } ``` -4. `picoclaw gateway` を実行し、QQ を開いてボットとチャット +4. `piconomous gateway` を実行し、QQ を開いてボットとチャット > App Secret は一度しか表示されません。すぐに保存してください — 再度表示するとリセットされます。 > @@ -241,7 +241,7 @@ QQ 開放プラットフォームでは、OpenClaw 互換ボットのワンク * [QQ 開放プラットフォーム](https://q.qq.com/) にログインして開発者登録 * QQ ボットを作成 — アバターと名前をカスタマイズ * ボット設定から **App ID** と **App Secret** をコピー -* 上記の設定を行い、`picoclaw gateway` を実行 +* 上記の設定を行い、`piconomous gateway` を実行 @@ -273,7 +273,7 @@ QQ 開放プラットフォームでは、OpenClaw 互換ボットのワンク **3. 実行** ```bash -picoclaw gateway +piconomous gateway ``` @@ -290,7 +290,7 @@ picoclaw gateway "enabled": true, "server": "irc.libera.chat:6697", "tls": true, - "nick": "picoclaw-bot", + "nick": "piconomous-bot", "channels": ["#your-channel"], "password": "", "allow_from": [] @@ -304,7 +304,7 @@ picoclaw gateway **2. 実行** ```bash -picoclaw gateway +piconomous gateway ``` ボットは IRC サーバーに接続し、指定されたチャネルに参加します。 @@ -340,7 +340,7 @@ picoclaw gateway **3. 実行** ```bash -picoclaw gateway +piconomous gateway ``` @@ -386,7 +386,7 @@ LINE Developers Console で Webhook URL を `https://your-domain/webhook/line` **4. 実行** ```bash -picoclaw gateway +piconomous gateway ``` > グループチャットでは、Bot は @メンション時のみ応答します。返信は元のメッセージを引用します。 @@ -396,7 +396,7 @@ picoclaw gateway
Feishu (飛書) -PicoClaw は WebSocket/SDK モードで飛書に接続します — 公開 Webhook URL やコールバックサーバーは不要です。 +Piconomous は WebSocket/SDK モードで飛書に接続します — 公開 Webhook URL やコールバックサーバーは不要です。 **1. アプリを作成** @@ -425,7 +425,7 @@ PicoClaw は WebSocket/SDK モードで飛書に接続します — 公開 Webho **3. 実行してチャット** ```bash -picoclaw gateway +piconomous gateway ``` 飛書を開き、ボット名を検索してチャットを開始できます。ボットをグループに追加することもできます — `group_trigger.mention_only: true` を設定すると @メンション時のみ応答します。 @@ -437,7 +437,7 @@ picoclaw gateway
WeCom (企業微信) -PicoClaw は 3 種類の WeCom 統合をサポートしています: +Piconomous は 3 種類の WeCom 統合をサポートしています: **方式 1: グループ Bot (Bot)** — セットアップ簡単、グループチャット対応 **方式 2: カスタムアプリ (App)** — より多機能、プロアクティブメッセージング、プライベートチャットのみ @@ -507,7 +507,7 @@ PicoClaw は 3 種類の WeCom 統合をサポートしています: **4. 実行** ```bash -picoclaw gateway +piconomous gateway ``` > **注意**: WeCom Webhook コールバックは Gateway ポート(デフォルト 18790)で提供されます。HTTPS にはリバースプロキシを使用してください。 @@ -541,7 +541,7 @@ picoclaw gateway **3. 実行** ```bash -picoclaw gateway +piconomous gateway ``` > **注意**: WeCom AI Bot はストリーミングプルプロトコルを使用しており、返信タイムアウトの心配はありません。長時間タスク(30 秒超)は自動的に `response_url` プッシュ配信に切り替わります。 @@ -551,7 +551,7 @@ picoclaw gateway
OneBot(OneBot プロトコル経由の QQ) -OneBot は QQ ボット向けのオープンプロトコルです。PicoClaw は OneBot v11 互換の実装(例:[Lagrange](https://github.com/LagrangeDev/Lagrange.Core)、[NapCat](https://github.com/NapNeko/NapCatQQ))に WebSocket で接続します。 +OneBot は QQ ボット向けのオープンプロトコルです。Piconomous は OneBot v11 互換の実装(例:[Lagrange](https://github.com/LagrangeDev/Lagrange.Core)、[NapCat](https://github.com/NapNeko/NapCatQQ))に WebSocket で接続します。 **1. OneBot 実装をセットアップ** @@ -581,7 +581,7 @@ OneBot v11 互換の QQ ボットフレームワークをインストールし **3. 実行** ```bash -picoclaw gateway +piconomous gateway ```
@@ -602,7 +602,7 @@ Sipeed AI カメラハードウェア向けの統合チャネルです。 ``` ```bash -picoclaw gateway +piconomous gateway ```
diff --git a/docs/ja/configuration.md b/docs/ja/configuration.md index 215b35d54..516dc45aa 100644 --- a/docs/ja/configuration.md +++ b/docs/ja/configuration.md @@ -4,39 +4,39 @@ ## ⚙️ 設定詳細 -設定ファイルパス: `~/.picoclaw/config.json` +設定ファイルパス: `~/.piconomous/config.json` ### 環境変数 -環境変数を使用してデフォルトパスを上書きできます。ポータブルインストール、コンテナ化デプロイ、または picoclaw をシステムサービスとして実行する場合に便利です。これらの変数は独立しており、異なるパスを制御します。 +環境変数を使用してデフォルトパスを上書きできます。ポータブルインストール、コンテナ化デプロイ、または piconomous をシステムサービスとして実行する場合に便利です。これらの変数は独立しており、異なるパスを制御します。 | 変数 | 説明 | デフォルトパス | |-------------------|-----------------------------------------------------------------------------------------------------------------------------------------|---------------------------| -| `PICOCLAW_CONFIG` | 設定ファイルのパスを上書きします。picoclaw がどの `config.json` を読み込むかを直接指定し、他のすべての場所を無視します。 | `~/.picoclaw/config.json` | -| `PICOCLAW_HOME` | picoclaw データのルートディレクトリを上書きします。`workspace` やその他のデータディレクトリのデフォルト場所を変更します。 | `~/.picoclaw` | +| `PICONOMOUS_CONFIG` | 設定ファイルのパスを上書きします。piconomous がどの `config.json` を読み込むかを直接指定し、他のすべての場所を無視します。 | `~/.piconomous/config.json` | +| `PICONOMOUS_HOME` | piconomous データのルートディレクトリを上書きします。`workspace` やその他のデータディレクトリのデフォルト場所を変更します。 | `~/.piconomous` | **例:** ```bash -# 特定の設定ファイルで picoclaw を実行 +# 特定の設定ファイルで piconomous を実行 # ワークスペースパスはその設定ファイル内から読み込まれます -PICOCLAW_CONFIG=/etc/picoclaw/production.json picoclaw gateway +PICONOMOUS_CONFIG=/etc/piconomous/production.json piconomous gateway -# /opt/picoclaw にすべてのデータを保存して picoclaw を実行 -# 設定はデフォルトの ~/.picoclaw/config.json から読み込まれます -# ワークスペースは /opt/picoclaw/workspace に作成されます -PICOCLAW_HOME=/opt/picoclaw picoclaw agent +# /opt/piconomous にすべてのデータを保存して piconomous を実行 +# 設定はデフォルトの ~/.piconomous/config.json から読み込まれます +# ワークスペースは /opt/piconomous/workspace に作成されます +PICONOMOUS_HOME=/opt/piconomous piconomous agent # 両方を使用して完全にカスタマイズ -PICOCLAW_HOME=/srv/picoclaw PICOCLAW_CONFIG=/srv/picoclaw/main.json picoclaw gateway +PICONOMOUS_HOME=/srv/piconomous PICONOMOUS_CONFIG=/srv/piconomous/main.json piconomous gateway ``` ### ワークスペースレイアウト -PicoClaw は設定されたワークスペース(デフォルト: `~/.picoclaw/workspace`)にデータを保存します: +Piconomous は設定されたワークスペース(デフォルト: `~/.piconomous/workspace`)にデータを保存します: ``` -~/.picoclaw/workspace/ +~/.piconomous/workspace/ ├── sessions/ # 会話セッションと履歴 ├── memory/ # 長期記憶 (MEMORY.md) ├── state/ # 永続化状態 (最後のチャネルなど) @@ -55,14 +55,14 @@ PicoClaw は設定されたワークスペース(デフォルト: `~/.picoclaw デフォルトでは、スキルは以下の順序で読み込まれます: -1. `~/.picoclaw/workspace/skills`(ワークスペース) -2. `~/.picoclaw/skills`(グローバル) +1. `~/.piconomous/workspace/skills`(ワークスペース) +2. `~/.piconomous/skills`(グローバル) 3. `<ビルド時埋め込みパス>/skills`(ビルトイン) 高度な/テスト用セットアップでは、以下の環境変数でビルトインスキルのルートを上書きできます: ```bash -export PICOCLAW_BUILTIN_SKILLS=/path/to/skills +export PICONOMOUS_BUILTIN_SKILLS=/path/to/skills ``` ### 統一コマンド実行ポリシー @@ -74,7 +74,7 @@ export PICOCLAW_BUILTIN_SKILLS=/path/to/skills ### 🔒 セキュリティサンドボックス -PicoClaw はデフォルトでサンドボックス環境で実行されます。Agent は設定されたワークスペース内のファイルアクセスとコマンド実行のみが可能です。 +Piconomous はデフォルトでサンドボックス環境で実行されます。Agent は設定されたワークスペース内のファイルアクセスとコマンド実行のみが可能です。 #### デフォルト設定 @@ -82,7 +82,7 @@ PicoClaw はデフォルトでサンドボックス環境で実行されます { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "restrict_to_workspace": true } } @@ -91,7 +91,7 @@ PicoClaw はデフォルトでサンドボックス環境で実行されます | オプション | デフォルト値 | 説明 | | ----------------------- | ----------------------- | ------------------------------------- | -| `workspace` | `~/.picoclaw/workspace` | Agent の作業ディレクトリ | +| `workspace` | `~/.piconomous/workspace` | Agent の作業ディレクトリ | | `restrict_to_workspace` | `true` | ファイル/コマンドアクセスをワークスペース内に制限 | #### 保護されたツール @@ -138,7 +138,7 @@ PicoClaw はデフォルトでサンドボックス環境で実行されます #### 既知の制限:ビルドツールの子プロセス -exec セキュリティガードは PicoClaw が直接起動するコマンドラインのみを検査します。`make`、`go run`、`cargo`、`npm run`、またはカスタムビルドスクリプトなどの開発ツールが生成する子プロセスは再帰的に検査しません。 +exec セキュリティガードは Piconomous が直接起動するコマンドラインのみを検査します。`make`、`go run`、`cargo`、`npm run`、またはカスタムビルドスクリプトなどの開発ツールが生成する子プロセスは再帰的に検査しません。 つまり、トップレベルのコマンドが初期ガードチェックを通過した後、他のバイナリをコンパイルまたは起動できます。実際には、ビルドスクリプト、Makefile、パッケージスクリプト、生成されたバイナリを、直接のシェルコマンドと同等レベルの実行可能コードとしてレビューする必要があります。 @@ -146,7 +146,7 @@ exec セキュリティガードは PicoClaw が直接起動するコマンド * 実行前にビルドスクリプトをレビューしてください。 * コンパイル・実行ワークフローには承認/手動レビューを優先してください。 -* ビルトインガードより強力な分離が必要な場合は、コンテナまたは VM 内で PicoClaw を実行してください。 +* ビルトインガードより強力な分離が必要な場合は、コンテナまたは VM 内で Piconomous を実行してください。 #### エラー例 @@ -179,7 +179,7 @@ Agent がワークスペース外のパスにアクセスする必要がある **方法 2: 環境変数** ```bash -export PICOCLAW_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACE=false +export PICONOMOUS_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACE=false ``` > ⚠️ **警告**: この制限を無効にすると、Agent がシステム上の任意のパスにアクセスできるようになります。管理された環境でのみ慎重に使用してください。 @@ -198,7 +198,7 @@ export PICOCLAW_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACE=false ### ハートビート(定期タスク) -PicoClaw は定期タスクを自動実行できます。ワークスペースに `HEARTBEAT.md` ファイルを作成してください: +Piconomous は定期タスクを自動実行できます。ワークスペースに `HEARTBEAT.md` ファイルを作成してください: ```markdown # Periodic Tasks @@ -254,5 +254,5 @@ Agent は 30 分ごと(設定可能)にこのファイルを読み取り、 **環境変数:** -- `PICOCLAW_HEARTBEAT_ENABLED=false` で無効化 -- `PICOCLAW_HEARTBEAT_INTERVAL=60` で間隔を変更 +- `PICONOMOUS_HEARTBEAT_ENABLED=false` で無効化 +- `PICONOMOUS_HEARTBEAT_INTERVAL=60` で間隔を変更 diff --git a/docs/ja/credential_encryption.md b/docs/ja/credential_encryption.md index ea74b65d2..8c3b0b366 100644 --- a/docs/ja/credential_encryption.md +++ b/docs/ja/credential_encryption.md @@ -2,7 +2,7 @@ # クレデンシャル暗号化 -PicoClaw は `model_list` 設定エントリの `api_key` 値の暗号化をサポートしています。 +Piconomous は `model_list` 設定エントリの `api_key` 値の暗号化をサポートしています。 暗号化されたキーは `enc://` 文字列として保存され、起動時に自動的に復号されます。 --- @@ -12,12 +12,12 @@ PicoClaw は `model_list` 設定エントリの `api_key` 値の暗号化をサ **1. パスフレーズを設定する** ```bash -export PICOCLAW_KEY_PASSPHRASE="your-passphrase" +export PICONOMOUS_KEY_PASSPHRASE="your-passphrase" ``` **2. API キーを暗号化する** -`picoclaw onboard` を実行します — パスフレーズの入力を求められ、SSH キーが生成されます。 +`piconomous onboard` を実行します — パスフレーズの入力を求められ、SSH キーが生成されます。 その後、次の `SaveConfig` 呼び出し時に、設定内のすべての平文 `api_key` エントリが自動的に再暗号化されます。生成される `enc://` 値は以下のようになります: ``` @@ -47,7 +47,7 @@ enc://AAAA...base64... |------|---|------| | 平文 | `sk-abc123` | そのまま使用 | | ファイル参照 | `file://openai.key` | 設定ファイルと同じディレクトリから内容を読み取り | -| 暗号化 | `enc://` | 起動時に `PICOCLAW_KEY_PASSPHRASE` を使用して復号 | +| 暗号化 | `enc://` | 起動時に `PICONOMOUS_KEY_PASSPHRASE` を使用して復号 | | 空 | `""` | そのまま渡される(`auth_method: oauth` で使用) | --- @@ -61,7 +61,7 @@ enc://AAAA...base64... ``` sshHash = SHA256(ssh_private_key_file_bytes) ikm = HMAC-SHA256(key=sshHash, message=passphrase) -aes_key = HKDF-SHA256(ikm, salt, info="picoclaw-credential-v1", 32 bytes) +aes_key = HKDF-SHA256(ikm, salt, info="piconomous-credential-v1", 32 bytes) ``` ### 暗号化 @@ -98,7 +98,7 @@ GCM 認証タグは暗号文に自動的に付加されます。改ざんがあ SSH 秘密鍵が提供されている場合、暗号を破るには**両方**が必要です: -1. **パスフレーズ** (`PICOCLAW_KEY_PASSPHRASE`) +1. **パスフレーズ** (`PICONOMOUS_KEY_PASSPHRASE`) 2. **SSH 秘密鍵ファイル** これは、設定ファイルが漏洩しただけでは、パスフレーズが弱い場合でも API キーを復元できないことを意味します。SSH キーはパスフレーズの強度に関係なく、256 ビットのエントロピー(Ed25519)を提供します。 @@ -118,33 +118,33 @@ SSH 秘密鍵が提供されている場合、暗号を破るには**両方**が | 変数 | 必須 | 説明 | |------|------|------| -| `PICOCLAW_KEY_PASSPHRASE` | はい(`enc://` 使用時) | 鍵導出に使用するパスフレーズ | -| `PICOCLAW_SSH_KEY_PATH` | いいえ | SSH 秘密鍵のパス。未設定の場合、`~/.ssh/picoclaw_ed25519.key` から自動検出 | +| `PICONOMOUS_KEY_PASSPHRASE` | はい(`enc://` 使用時) | 鍵導出に使用するパスフレーズ | +| `PICONOMOUS_SSH_KEY_PATH` | いいえ | SSH 秘密鍵のパス。未設定の場合、`~/.ssh/piconomous_ed25519.key` から自動検出 | ### SSH キーの自動検出 -`PICOCLAW_SSH_KEY_PATH` が設定されていない場合、PicoClaw は専用キーを探します: +`PICONOMOUS_SSH_KEY_PATH` が設定されていない場合、Piconomous は専用キーを探します: ``` -~/.ssh/picoclaw_ed25519.key +~/.ssh/piconomous_ed25519.key ``` この専用ファイルにより、ユーザーの既存の SSH キーとの競合を回避します。 -`picoclaw onboard` を実行すると自動的に生成されます。 +`piconomous onboard` を実行すると自動的に生成されます。 `os.UserHomeDir()` はクロスプラットフォームのホームディレクトリ解決に使用されます(Windows では `USERPROFILE`、Unix/macOS では `HOME` を読み取ります)。 -> **注意:** SSH キーファイルはクレデンシャル暗号化に必須です。キーが見つからず `PICOCLAW_SSH_KEY_PATH` も設定されていない場合、暗号化/復号は失敗します。`picoclaw onboard` を実行してキーを自動生成してください。 +> **注意:** SSH キーファイルはクレデンシャル暗号化に必須です。キーが見つからず `PICONOMOUS_SSH_KEY_PATH` も設定されていない場合、暗号化/復号は失敗します。`piconomous onboard` を実行してキーを自動生成してください。 --- ## 移行 -唯一の秘密情報は `PICOCLAW_KEY_PASSPHRASE` と SSH 秘密鍵ファイルであるため、移行は簡単です: +唯一の秘密情報は `PICONOMOUS_KEY_PASSPHRASE` と SSH 秘密鍵ファイルであるため、移行は簡単です: 1. 設定ファイルを新しいマシンにコピーします。 -2. `PICOCLAW_KEY_PASSPHRASE` を同じ値に設定します。 -3. SSH 秘密鍵ファイルを同じパスにコピーします(または `PICOCLAW_SSH_KEY_PATH` を新しい場所に設定します)。 +2. `PICONOMOUS_KEY_PASSPHRASE` を同じ値に設定します。 +3. SSH 秘密鍵ファイルを同じパスにコピーします(または `PICONOMOUS_SSH_KEY_PATH` を新しい場所に設定します)。 再暗号化は不要です。 @@ -152,7 +152,7 @@ SSH 秘密鍵が提供されている場合、暗号を破るには**両方**が ## セキュリティに関する考慮事項 -- **パスフレーズと SSH キーの両方が必須です。** SSH キーは第二要素として機能します — これがなければ暗号化/復号は失敗します。キーが存在しない場合は `picoclaw onboard` を実行して生成してください。 -- **SSH キーは実行時に読み取り専用です。** PicoClaw は SSH キーファイルへの書き込みや変更を行いません。 +- **パスフレーズと SSH キーの両方が必須です。** SSH キーは第二要素として機能します — これがなければ暗号化/復号は失敗します。キーが存在しない場合は `piconomous onboard` を実行して生成してください。 +- **SSH キーは実行時に読み取り専用です。** Piconomous は SSH キーファイルへの書き込みや変更を行いません。 - **平文キーは引き続きサポートされます。** `enc://` を使用しない既存の設定は影響を受けません。 -- **`enc://` 形式はバージョン管理されています。** HKDF `info` フィールド(`picoclaw-credential-v1`)により、既存の暗号化値を壊すことなく将来のアルゴリズムアップグレードが可能です。 +- **`enc://` 形式はバージョン管理されています。** HKDF `info` フィールド(`piconomous-credential-v1`)により、既存の暗号化値を壊すことなく将来のアルゴリズムアップグレードが可能です。 diff --git a/docs/ja/debug.md b/docs/ja/debug.md index ecc52f454..1b3ea3086 100644 --- a/docs/ja/debug.md +++ b/docs/ja/debug.md @@ -1,31 +1,31 @@ -# PicoClaw のデバッグ +# Piconomous のデバッグ > [README](../../README.ja.md) に戻る -PicoClaw は、受信するすべてのリクエストに対して、メッセージのルーティングや複雑度の評価、ツールの実行、モデル障害への適応など、多くの複雑な処理をバックグラウンドで実行しています。何が起きているかを正確に把握できることは、潜在的な問題のトラブルシューティングだけでなく、エージェントの動作を真に理解するためにも非常に重要です。 +Piconomous は、受信するすべてのリクエストに対して、メッセージのルーティングや複雑度の評価、ツールの実行、モデル障害への適応など、多くの複雑な処理をバックグラウンドで実行しています。何が起きているかを正確に把握できることは、潜在的な問題のトラブルシューティングだけでなく、エージェントの動作を真に理解するためにも非常に重要です。 -## デバッグモードで PicoClaw を起動する +## デバッグモードで Piconomous を起動する -エージェントの動作に関する詳細情報(LLM リクエスト、ツール呼び出し、メッセージルーティング)を取得するには、デバッグフラグを付けて PicoClaw ゲートウェイを起動します: +エージェントの動作に関する詳細情報(LLM リクエスト、ツール呼び出し、メッセージルーティング)を取得するには、デバッグフラグを付けて Piconomous ゲートウェイを起動します: ```bash -picoclaw gateway --debug +piconomous gateway --debug # or -picoclaw gateway -d +piconomous gateway -d ``` このモードでは、システムがログを詳細にフォーマットし、システムプロンプトやツール実行結果のプレビューを表示します。 ## ログの切り詰めを無効にする(完全なログ) -デフォルトでは、PicoClaw はコンソールの可読性を保つために、デバッグログ内の非常に長い文字列(*システムプロンプト*や大きな JSON 出力結果など)を切り詰めます。 +デフォルトでは、Piconomous はコンソールの可読性を保つために、デバッグログ内の非常に長い文字列(*システムプロンプト*や大きな JSON 出力結果など)を切り詰めます。 コマンドの完全な出力や、LLM モデルに送信された正確なペイロードを確認する必要がある場合は、`--no-truncate` フラグを使用できます。 **注意:** このフラグは `--debug` モードと組み合わせた場合に*のみ*機能します。 ```bash -picoclaw gateway --debug --no-truncate +piconomous gateway --debug --no-truncate ``` diff --git a/docs/ja/docker.md b/docs/ja/docker.md index 31ed17ec5..d2383d135 100644 --- a/docs/ja/docker.md +++ b/docs/ja/docker.md @@ -4,12 +4,12 @@ ## 🐳 Docker Compose -Docker Compose を使用して PicoClaw を実行できます。ローカルに何もインストールする必要はありません。 +Docker Compose を使用して Piconomous を実行できます。ローカルに何もインストールする必要はありません。 ```bash # 1. リポジトリをクローン -git clone https://github.com/sipeed/picoclaw.git -cd picoclaw +git clone https://github.com/sipeed/piconomous.git +cd piconomous # 2. 初回実行 — docker/data/config.json を自動生成して終了 # (config.json と workspace/ の両方が存在しない場合のみ実行) @@ -24,11 +24,11 @@ docker compose -f docker/docker-compose.yml --profile gateway up -d ``` > [!TIP] -> **Docker ユーザー**: デフォルトでは Gateway は `127.0.0.1` でリッスンしており、コンテナ外からはアクセスできません。ヘルスチェックエンドポイントへのアクセスやポート公開が必要な場合は、環境変数で `PICOCLAW_GATEWAY_HOST=0.0.0.0` を設定するか、`config.json` を更新してください。 +> **Docker ユーザー**: デフォルトでは Gateway は `127.0.0.1` でリッスンしており、コンテナ外からはアクセスできません。ヘルスチェックエンドポイントへのアクセスやポート公開が必要な場合は、環境変数で `PICONOMOUS_GATEWAY_HOST=0.0.0.0` を設定するか、`config.json` を更新してください。 ```bash # 5. ログを確認 -docker compose -f docker/docker-compose.yml logs -f picoclaw-gateway +docker compose -f docker/docker-compose.yml logs -f piconomous-gateway # 6. 停止 docker compose -f docker/docker-compose.yml --profile gateway down @@ -36,7 +36,7 @@ docker compose -f docker/docker-compose.yml --profile gateway down ### Launcher モード (Web コンソール) -`launcher` イメージには 3 つのバイナリ(`picoclaw`、`picoclaw-launcher`、`picoclaw-launcher-tui`)がすべて含まれており、デフォルトで Web コンソールを起動します。ブラウザベースの設定・チャット画面を提供します。 +`launcher` イメージには 3 つのバイナリ(`piconomous`、`piconomous-launcher`、`piconomous-launcher-tui`)がすべて含まれており、デフォルトで Web コンソールを起動します。ブラウザベースの設定・チャット画面を提供します。 ```bash docker compose -f docker/docker-compose.yml --profile launcher up -d @@ -51,10 +51,10 @@ docker compose -f docker/docker-compose.yml --profile launcher up -d ```bash # 質問する -docker compose -f docker/docker-compose.yml run --rm picoclaw-agent -m "2+2は?" +docker compose -f docker/docker-compose.yml run --rm piconomous-agent -m "2+2は?" # インタラクティブモード -docker compose -f docker/docker-compose.yml run --rm picoclaw-agent +docker compose -f docker/docker-compose.yml run --rm piconomous-agent ``` ### イメージの更新 @@ -69,21 +69,21 @@ docker compose -f docker/docker-compose.yml --profile gateway up -d ## 🚀 クイックスタート > [!TIP] -> `~/.picoclaw/config.json` に API Key を設定してください。API Key の取得先: [Volcengine (CodingPlan)](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) (LLM) · [OpenRouter](https://openrouter.ai/keys) (LLM) · [Zhipu](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys) (LLM)。Web 検索は**オプション**です — 無料の [Tavily API](https://tavily.com) (月 1000 回無料) または [Brave Search API](https://brave.com/search/api) (月 2000 回無料) を取得できます。 +> `~/.piconomous/config.json` に API Key を設定してください。API Key の取得先: [Volcengine (CodingPlan)](https://www.volcengine.com/activity/codingplan?utm_campaign=Piconomous&utm_content=Piconomous&utm_medium=devrel&utm_source=OWO&utm_term=Piconomous) (LLM) · [OpenRouter](https://openrouter.ai/keys) (LLM) · [Zhipu](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys) (LLM)。Web 検索は**オプション**です — 無料の [Tavily API](https://tavily.com) (月 1000 回無料) または [Brave Search API](https://brave.com/search/api) (月 2000 回無料) を取得できます。 **1. 初期化** ```bash -picoclaw onboard +piconomous onboard ``` -**2. 設定** (`~/.picoclaw/config.json`) +**2. 設定** (`~/.piconomous/config.json`) ```json { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "model_name": "gpt-5.4", "max_tokens": 8192, "temperature": 0.7, @@ -144,7 +144,7 @@ picoclaw onboard ``` > **新機能**: `model_list` 設定形式により、コード変更なしで provider を追加できます。詳細は[モデル設定](providers.md#モデル設定-model_list)を参照してください。 -> `request_timeout` はオプションで、単位は秒です。省略または `<= 0` に設定した場合、PicoClaw はデフォルトのタイムアウト(120 秒)を使用します。 +> `request_timeout` はオプションで、単位は秒です。省略または `<= 0` に設定した場合、Piconomous はデフォルトのタイムアウト(120 秒)を使用します。 **3. API Key の取得** @@ -161,7 +161,7 @@ picoclaw onboard **4. チャット** ```bash -picoclaw agent -m "2+2は?" +piconomous agent -m "2+2は?" ``` 以上です!2 分で動作する AI アシスタントが手に入ります。 diff --git a/docs/ja/hardware-compatibility.md b/docs/ja/hardware-compatibility.md index 96ccd1cd1..5fca206ec 100644 --- a/docs/ja/hardware-compatibility.md +++ b/docs/ja/hardware-compatibility.md @@ -1,8 +1,8 @@ > [README](../../README.ja.md) に戻る -# 🖥️ PicoClaw ハードウェア互換性リスト +# 🖥️ Piconomous ハードウェア互換性リスト -PicoClaw はほぼすべての Linux デバイスで動作します。このページでは、検証済みのチップ、製品、開発ボードを記録しています。 +Piconomous はほぼすべての Linux デバイスで動作します。このページでは、検証済みのチップ、製品、開発ボードを記録しています。 **お使いのハードウェアがリストにない場合は?** PR を送信して追加してください!ハードウェアベンダーの貢献と共同プロモーションを歓迎します。 @@ -59,7 +59,7 @@ PicoClaw はほぼすべての Linux デバイスで動作します。このペ ## 2. 検証済み製品(発売日順) -PicoClaw でテスト済みのコンシューマー製品、ルーター、産業用デバイス。 +Piconomous でテスト済みのコンシューマー製品、ルーター、産業用デバイス。 | 年 | 製品 | アーキテクチャ | SoC | RAM | カテゴリ | |----|------|----------------|-----|-----|----------| @@ -97,7 +97,7 @@ PicoClaw でテスト済みのコンシューマー製品、ルーター、産 ### Android スマートフォン(Termux 経由) -1GB 以上の RAM を搭載した ARM64 Android スマートフォン(2015年以降)。[Termux](https://github.com/termux/termux-app) をインストールし、`proot` を使用して PicoClaw を実行します。 +1GB 以上の RAM を搭載した ARM64 Android スマートフォン(2015年以降)。[Termux](https://github.com/termux/termux-app) をインストールし、`proot` を使用して Piconomous を実行します。 > セットアップ手順は [README:古い Android スマートフォンで実行](../../README.ja.md#-run-on-old-android-phones) を参照してください。 @@ -130,14 +130,14 @@ PicoClaw でテスト済みのコンシューマー製品、ルーター、産 ```bash # 1. お使いのアーキテクチャ向けをダウンロード -wget https://github.com/sipeed/picoclaw/releases/latest/download/picoclaw_Linux_arm64.tar.gz -tar xzf picoclaw_Linux_arm64.tar.gz +wget https://github.com/sipeed/piconomous/releases/latest/download/piconomous_Linux_arm64.tar.gz +tar xzf piconomous_Linux_arm64.tar.gz # 2. 初期化 -./picoclaw onboard +./piconomous onboard # 3. テスト -./picoclaw agent -m "Hello, what board am I running on?" +./piconomous agent -m "Hello, what board am I running on?" ``` 利用可能なビルド:`linux-amd64`, `linux-arm64`, `linux-arm`, `linux-riscv64`, `linux-loong64`, `linux-mipsle` diff --git a/docs/ja/providers.md b/docs/ja/providers.md index 9a53a4b69..e0ab93f70 100644 --- a/docs/ja/providers.md +++ b/docs/ja/providers.md @@ -11,7 +11,7 @@ | -------------------- | ---------------------------- | -------------------------------------------------------------------- | | `gemini` | LLM (Gemini 直接接続) | [aistudio.google.com](https://aistudio.google.com) | | `zhipu` | LLM (Zhipu 直接接続) | [bigmodel.cn](https://bigmodel.cn) | -| `volcengine` | LLM (Volcengine 直接接続) | [volcengine.com](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) | +| `volcengine` | LLM (Volcengine 直接接続) | [volcengine.com](https://www.volcengine.com/activity/codingplan?utm_campaign=Piconomous&utm_content=Piconomous&utm_medium=devrel&utm_source=OWO&utm_term=Piconomous) | | `openrouter` | LLM (推奨、全モデルアクセス可) | [openrouter.ai](https://openrouter.ai) | | `anthropic` | LLM (Claude 直接接続) | [console.anthropic.com](https://console.anthropic.com) | | `openai` | LLM (GPT 直接接続) | [platform.openai.com](https://platform.openai.com) | @@ -29,7 +29,7 @@ ### モデル設定 (model_list) -> **新機能!** PicoClaw は**モデル中心**の設定方式を採用しました。`ベンダー/モデル` 形式(例: `zhipu/glm-4.7`)を指定するだけで新しい provider を追加できます——**コード変更は一切不要です!** +> **新機能!** Piconomous は**モデル中心**の設定方式を採用しました。`ベンダー/モデル` 形式(例: `zhipu/glm-4.7`)を指定するだけで新しい provider を追加できます——**コード変更は一切不要です!** この設計は**マルチ Agent シナリオ**もサポートし、柔軟な Provider 選択を提供します: @@ -56,7 +56,7 @@ | **LiteLLM Proxy** | `litellm/` | `http://localhost:4000/v1` | OpenAI | LiteLLM プロキシキー | | **VLLM** | `vllm/` | `http://localhost:8000/v1` | OpenAI | ローカル | | **Cerebras** | `cerebras/` | `https://api.cerebras.ai/v1` | OpenAI | [キーを取得](https://cerebras.ai) | -| **VolcEngine (Doubao)** | `volcengine/` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [キーを取得](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) | +| **VolcEngine (Doubao)** | `volcengine/` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [キーを取得](https://www.volcengine.com/activity/codingplan?utm_campaign=Piconomous&utm_content=Piconomous&utm_medium=devrel&utm_source=OWO&utm_term=Piconomous) | | **神算云** | `shengsuanyun/` | `https://router.shengsuanyun.com/api/v1` | OpenAI | - | | **BytePlus** | `byteplus/` | `https://ark.ap-southeast.bytepluses.com/api/v3` | OpenAI | [キーを取得](https://www.byteplus.com) | | **Vivgrid** | `vivgrid/` | `https://api.vivgrid.com/v1` | OpenAI | [キーを取得](https://vivgrid.com) | @@ -151,7 +151,7 @@ } ``` -> `picoclaw auth login --provider anthropic` を実行して API トークンを設定してください。 +> `piconomous auth login --provider anthropic` を実行して API トークンを設定してください。 **Anthropic Messages API(ネイティブ形式)** @@ -205,11 +205,11 @@ Anthropic API への直接アクセスや、Anthropic のネイティブメッ } ``` -PicoClaw はリクエスト送信前に外側の `litellm/` プレフィックスのみを除去するため、`litellm/lite-gpt4` は `lite-gpt4` を送信し、`litellm/openai/gpt-4o` は `openai/gpt-4o` を送信します。 +Piconomous はリクエスト送信前に外側の `litellm/` プレフィックスのみを除去するため、`litellm/lite-gpt4` は `lite-gpt4` を送信し、`litellm/openai/gpt-4o` は `openai/gpt-4o` を送信します。 #### ロードバランシング -同じモデル名に複数のエンドポイントを設定すると、PicoClaw が自動的にラウンドロビンで分散します: +同じモデル名に複数のエンドポイントを設定すると、Piconomous が自動的にラウンドロビンで分散します: ```json { @@ -276,7 +276,7 @@ PicoClaw はリクエスト送信前に外側の `litellm/` プレフィック ### Provider アーキテクチャ -PicoClaw はプロトコルファミリーごとに Provider をルーティングします: +Piconomous はプロトコルファミリーごとに Provider をルーティングします: - OpenAI 互換プロトコル:OpenRouter、OpenAI 互換ゲートウェイ、Groq、Zhipu、vLLM スタイルのエンドポイント。 - Anthropic プロトコル:Claude ネイティブ API 動作。 @@ -297,7 +297,7 @@ PicoClaw はプロトコルファミリーごとに Provider をルーティン { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "model_name": "glm-4.7", "max_tokens": 8192, "temperature": 0.7, @@ -316,7 +316,7 @@ PicoClaw はプロトコルファミリーごとに Provider をルーティン **3. 実行** ```bash -picoclaw agent -m "こんにちは" +piconomous agent -m "こんにちは" ```
@@ -429,5 +429,5 @@ picoclaw agent -m "こんにちは" ---
- PicoClaw Meme + Piconomous Meme
diff --git a/docs/ja/spawn-tasks.md b/docs/ja/spawn-tasks.md index a13aab9eb..35deec83f 100644 --- a/docs/ja/spawn-tasks.md +++ b/docs/ja/spawn-tasks.md @@ -64,5 +64,5 @@ HEARTBEAT_OK を応答 ユーザーが直接結果を受信 **環境変数:** -- `PICOCLAW_HEARTBEAT_ENABLED=false` で無効化 -- `PICOCLAW_HEARTBEAT_INTERVAL=60` で間隔を変更 +- `PICONOMOUS_HEARTBEAT_ENABLED=false` で無効化 +- `PICONOMOUS_HEARTBEAT_INTERVAL=60` で間隔を変更 diff --git a/docs/ja/tools_configuration.md b/docs/ja/tools_configuration.md index c40e58538..ca799f637 100644 --- a/docs/ja/tools_configuration.md +++ b/docs/ja/tools_configuration.md @@ -2,7 +2,7 @@ > [README](../../README.ja.md) に戻る -PicoClaw のツール設定は `config.json` の `tools` フィールドにあります。 +Piconomous のツール設定は `config.json` の `tools` フィールドにあります。 ## ディレクトリ構造 @@ -91,7 +91,7 @@ Exec ツールはシェルコマンドの実行に使用されます。 **環境変数経由:** ```bash -PICOCLAW_TOOLS_EXEC_ENABLED=false +PICONOMOUS_TOOLS_EXEC_ENABLED=false ``` > **注意:** 無効にすると、エージェントはシェルコマンドを実行できなくなります。これは Cron ツールがスケジュールされたシェルコマンドを実行する能力にも影響します。 @@ -103,7 +103,7 @@ PICOCLAW_TOOLS_EXEC_ENABLED=false ### デフォルトでブロックされるコマンドパターン -デフォルトで、PicoClaw は以下の危険なコマンドをブロックします: +デフォルトで、Piconomous は以下の危険なコマンドをブロックします: - 削除コマンド:`rm -rf`、`del /f/q`、`rmdir /s` - ディスク操作:`format`、`mkfs`、`diskpart`、`dd if=`、`/dev/sd*` への書き込み @@ -120,7 +120,7 @@ PICOCLAW_TOOLS_EXEC_ENABLED=false ### 既知のアーキテクチャ上の制限 -exec ガードは PicoClaw に送信されたトップレベルのコマンドのみを検証します。そのコマンドの実行開始後にビルドツールやスクリプトが生成する子プロセスを再帰的に検査することは**ありません**。 +exec ガードは Piconomous に送信されたトップレベルのコマンドのみを検証します。そのコマンドの実行開始後にビルドツールやスクリプトが生成する子プロセスを再帰的に検査することは**ありません**。 初期コマンドが許可された後、直接コマンドガードをバイパスできるワークフローの例: @@ -347,14 +347,14 @@ Skills ツールは ClawHub などのレジストリを通じたスキルの発 ## 環境変数 -すべての設定オプションは `PICOCLAW_TOOLS_
_` 形式の環境変数で上書きできます: +すべての設定オプションは `PICONOMOUS_TOOLS_
_` 形式の環境変数で上書きできます: 例: -- `PICOCLAW_TOOLS_WEB_BRAVE_ENABLED=true` -- `PICOCLAW_TOOLS_EXEC_ENABLED=false` -- `PICOCLAW_TOOLS_EXEC_ENABLE_DENY_PATTERNS=false` -- `PICOCLAW_TOOLS_CRON_EXEC_TIMEOUT_MINUTES=10` -- `PICOCLAW_TOOLS_MCP_ENABLED=true` +- `PICONOMOUS_TOOLS_WEB_BRAVE_ENABLED=true` +- `PICONOMOUS_TOOLS_EXEC_ENABLED=false` +- `PICONOMOUS_TOOLS_EXEC_ENABLE_DENY_PATTERNS=false` +- `PICONOMOUS_TOOLS_CRON_EXEC_TIMEOUT_MINUTES=10` +- `PICONOMOUS_TOOLS_MCP_ENABLED=true` 注意:ネストされたマップ形式の設定(例:`tools.mcp.servers..*`)は環境変数ではなく `config.json` で設定します。 diff --git a/docs/ja/troubleshooting.md b/docs/ja/troubleshooting.md index f18b456db..ca9623719 100644 --- a/docs/ja/troubleshooting.md +++ b/docs/ja/troubleshooting.md @@ -14,7 +14,7 @@ - **誤り:** `"model": "free"` → OpenRouter は `free` を受け取り、拒否します。 - **正しい:** `"model": "openrouter/free"` → OpenRouter は `openrouter/free` を受け取ります(自動無料枠ルーティング)。 -**修正方法:** `~/.picoclaw/config.json`(またはお使いの設定パス)で: +**修正方法:** `~/.piconomous/config.json`(またはお使いの設定パス)で: 1. **agents.defaults.model_name** は `model_list` 内の `model_name` と一致する必要があります(例:`"openrouter-free"`)。 2. そのエントリの **model** は有効な OpenRouter モデル ID である必要があります。例: diff --git a/docs/migration/model-list-migration.md b/docs/migration/model-list-migration.md index 9d05ac599..2cad23b1e 100644 --- a/docs/migration/model-list-migration.md +++ b/docs/migration/model-list-migration.md @@ -216,5 +216,5 @@ api_key or api_base is required for HTTP-based protocol "xxx" ## Need Help? -- [GitHub Issues](https://github.com/sipeed/picoclaw/issues) -- [Discussion #122](https://github.com/sipeed/picoclaw/discussions/122): Original proposal +- [GitHub Issues](https://github.com/sipeed/piconomous/issues) +- [Discussion #122](https://github.com/sipeed/piconomous/discussions/122): Original proposal diff --git a/docs/providers.md b/docs/providers.md index dde1814fb..e7dbd04f1 100644 --- a/docs/providers.md +++ b/docs/providers.md @@ -11,7 +11,7 @@ | ------------ | --------------------------------------- | ------------------------------------------------------------ | | `gemini` | LLM (Gemini direct) | [aistudio.google.com](https://aistudio.google.com) | | `zhipu` | LLM (Zhipu direct) | [bigmodel.cn](https://bigmodel.cn) | -| `volcengine` | LLM(Volcengine direct) | [volcengine.com](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) | +| `volcengine` | LLM(Volcengine direct) | [volcengine.com](https://www.volcengine.com/activity/codingplan?utm_campaign=Piconomous&utm_content=Piconomous&utm_medium=devrel&utm_source=OWO&utm_term=Piconomous) | | `openrouter` | LLM (recommended, access to all models) | [openrouter.ai](https://openrouter.ai) | | `anthropic` | LLM (Claude direct) | [console.anthropic.com](https://console.anthropic.com) | | `openai` | LLM (GPT direct) | [platform.openai.com](https://platform.openai.com) | @@ -30,7 +30,7 @@ ### Model Configuration (model_list) -> **What's New?** PicoClaw now uses a **model-centric** configuration approach. Simply specify `vendor/model` format (e.g., `zhipu/glm-4.7`) to add new providers—**zero code changes required!** +> **What's New?** Piconomous now uses a **model-centric** configuration approach. Simply specify `vendor/model` format (e.g., `zhipu/glm-4.7`) to add new providers—**zero code changes required!** This design also enables **multi-agent support** with flexible provider selection: @@ -57,7 +57,7 @@ This design also enables **multi-agent support** with flexible provider selectio | **LiteLLM Proxy** | `litellm/` | `http://localhost:4000/v1` | OpenAI | Your LiteLLM proxy key | | **VLLM** | `vllm/` | `http://localhost:8000/v1` | OpenAI | Local | | **Cerebras** | `cerebras/` | `https://api.cerebras.ai/v1` | OpenAI | [Get Key](https://cerebras.ai) | -| **VolcEngine (Doubao)** | `volcengine/` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [Get Key](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) | +| **VolcEngine (Doubao)** | `volcengine/` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [Get Key](https://www.volcengine.com/activity/codingplan?utm_campaign=Piconomous&utm_content=Piconomous&utm_medium=devrel&utm_source=OWO&utm_term=Piconomous) | | **神算云** | `shengsuanyun/` | `https://router.shengsuanyun.com/api/v1` | OpenAI | - | | **BytePlus** | `byteplus/` | `https://ark.ap-southeast.bytepluses.com/api/v3` | OpenAI | [Get Key](https://www.byteplus.com) | | **Vivgrid** | `vivgrid/` | `https://api.vivgrid.com/v1` | OpenAI | [Get Key](https://vivgrid.com) | @@ -153,7 +153,7 @@ This design also enables **multi-agent support** with flexible provider selectio } ``` -> Run `picoclaw auth login --provider anthropic` to paste your API token. +> Run `piconomous auth login --provider anthropic` to paste your API token. **Anthropic Messages API (native format)** @@ -207,11 +207,11 @@ For direct Anthropic API access or custom endpoints that only support Anthropic' } ``` -PicoClaw strips only the outer `litellm/` prefix before sending the request, so proxy aliases like `litellm/lite-gpt4` send `lite-gpt4`, while `litellm/openai/gpt-4o` sends `openai/gpt-4o`. +Piconomous strips only the outer `litellm/` prefix before sending the request, so proxy aliases like `litellm/lite-gpt4` send `lite-gpt4`, while `litellm/openai/gpt-4o` sends `openai/gpt-4o`. #### Load Balancing -Configure multiple endpoints for the same model name—PicoClaw will automatically round-robin between them: +Configure multiple endpoints for the same model name—Piconomous will automatically round-robin between them: ```json { @@ -278,7 +278,7 @@ For detailed migration guide, see [migration/model-list-migration.md](migration/ ### Provider Architecture -PicoClaw routes providers by protocol family: +Piconomous routes providers by protocol family: - OpenAI-compatible protocol: OpenRouter, OpenAI-compatible gateways, Groq, Zhipu, and vLLM-style endpoints. - Anthropic protocol: Claude-native API behavior. @@ -299,7 +299,7 @@ This keeps the runtime lightweight while making new OpenAI-compatible backends m { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "model_name": "glm-4.7", "max_tokens": 8192, "temperature": 0.7, @@ -318,7 +318,7 @@ This keeps the runtime lightweight while making new OpenAI-compatible backends m **3. Run** ```bash -picoclaw agent -m "Hello" +piconomous agent -m "Hello" ``` @@ -431,5 +431,5 @@ picoclaw agent -m "Hello" ---
- PicoClaw Meme + Piconomous Meme
diff --git a/docs/pt-br/ANTIGRAVITY_AUTH.md b/docs/pt-br/ANTIGRAVITY_AUTH.md index d243783cb..12761a99e 100644 --- a/docs/pt-br/ANTIGRAVITY_AUTH.md +++ b/docs/pt-br/ANTIGRAVITY_AUTH.md @@ -4,7 +4,7 @@ ## Visão Geral -**Antigravity** (Google Cloud Code Assist) é um provedor de modelos de IA apoiado pelo Google que oferece acesso a modelos como Claude Opus 4.6 e Gemini através da infraestrutura de nuvem do Google. Este documento fornece um guia completo sobre como a autenticação funciona, como buscar modelos e como implementar um novo provedor no PicoClaw. +**Antigravity** (Google Cloud Code Assist) é um provedor de modelos de IA apoiado pelo Google que oferece acesso a modelos como Claude Opus 4.6 e Gemini através da infraestrutura de nuvem do Google. Este documento fornece um guia completo sobre como a autenticação funciona, como buscar modelos e como implementar um novo provedor no Piconomous. --- @@ -19,7 +19,7 @@ 7. [Requisitos de Integração](#requisitos-de-integração) 8. [Endpoints da API](#endpoints-da-api) 9. [Configuração](#configuração) -10. [Criando um Novo Provedor no PicoClaw](#criando-um-novo-provedor-no-picoclaw) +10. [Criando um Novo Provedor no Piconomous](#criando-um-novo-provedor-no-piconomous) --- @@ -380,7 +380,7 @@ const antigravityPlugin = { description: "OAuth flow for Google Antigravity (Cloud Code Assist)", configSchema: emptyPluginConfigSchema(), - register(api: PicoClawPluginApi) { + register(api: PiconomousPluginApi) { api.registerProvider({ id: "google-antigravity", label: "Google Antigravity", @@ -407,7 +407,7 @@ const antigravityPlugin = { ```typescript type ProviderAuthContext = { - config: PicoClawConfig; + config: PiconomousConfig; agentDir?: string; workspaceDir?: string; prompter: WizardPrompter; // Prompts/notificações da UI @@ -428,7 +428,7 @@ type ProviderAuthResult = { profileId: string; credential: AuthProfileCredential; }>; - configPatch?: Partial; + configPatch?: Partial; defaultModel?: string; notes?: string[]; }; @@ -441,7 +441,7 @@ type ProviderAuthResult = { ### 1. Ambiente/Dependências Necessários - Go ≥ 1.25 -- Base de código do PicoClaw (`pkg/providers/` e `pkg/auth/`) +- Base de código do Piconomous (`pkg/providers/` e `pkg/auth/`) - Pacotes da biblioteca padrão `crypto` e `net/http` ### 2. Cabeçalhos Necessários para Chamadas de API @@ -594,7 +594,7 @@ Cada mensagem SSE (`data: {...}`) é encapsulada em um campo `response`: ### Armazenamento do Perfil de Autenticação -Os perfis de autenticação são armazenados em `~/.picoclaw/auth.json`: +Os perfis de autenticação são armazenados em `~/.piconomous/auth.json`: ```json { @@ -614,9 +614,9 @@ Os perfis de autenticação são armazenados em `~/.picoclaw/auth.json`: --- -## Criando um Novo Provedor no PicoClaw +## Criando um Novo Provedor no Piconomous -Os provedores do PicoClaw são implementados como pacotes Go em `pkg/providers/`. Para adicionar um novo provedor: +Os provedores do Piconomous são implementados como pacotes Go em `pkg/providers/`. Para adicionar um novo provedor: ### Implementação Passo a Passo @@ -676,7 +676,7 @@ Adicione uma entrada padrão em `pkg/config/defaults.go`: #### 5. Adicionar Suporte de Autenticação (Opcional) -Se seu provedor requer OAuth ou autenticação especial, adicione um caso em `cmd/picoclaw/internal/auth/helpers.go`: +Se seu provedor requer OAuth ou autenticação especial, adicione um caso em `cmd/piconomous/internal/auth/helpers.go`: ```go case "your-provider": @@ -706,26 +706,26 @@ case "your-provider": ```bash # Autenticar com um provedor -picoclaw auth login --provider your-provider +piconomous auth login --provider your-provider # Listar modelos (para Antigravity) -picoclaw auth models +piconomous auth models # Iniciar o gateway -picoclaw gateway +piconomous gateway # Executar um agente com um modelo específico -picoclaw agent -m "Hello" --model your-model +piconomous agent -m "Hello" --model your-model ``` ### Variáveis de Ambiente para Testes ```bash # Substituir o modelo padrão -export PICOCLAW_AGENTS_DEFAULTS_MODEL=your-model +export PICONOMOUS_AGENTS_DEFAULTS_MODEL=your-model # Substituir configurações do provedor -export PICOCLAW_MODEL_LIST='[{"model_name":"your-model","model":"your-provider/model-name","api_key":"..."}]' +export PICONOMOUS_MODEL_LIST='[{"model_name":"your-model","model":"your-provider/model-name","api_key":"..."}]' ``` --- @@ -735,10 +735,10 @@ export PICOCLAW_MODEL_LIST='[{"model_name":"your-model","model":"your-provider/m - **Arquivos Fonte:** - `pkg/providers/antigravity_provider.go` - Implementação do provedor Antigravity - `pkg/auth/oauth.go` - Implementação do fluxo OAuth - - `pkg/auth/store.go` - Armazenamento de credenciais de autenticação (`~/.picoclaw/auth.json`) + - `pkg/auth/store.go` - Armazenamento de credenciais de autenticação (`~/.piconomous/auth.json`) - `pkg/providers/factory.go` - Factory de provedores e roteamento de protocolo - `pkg/providers/types.go` - Definições da interface do provedor - - `cmd/picoclaw/internal/auth/helpers.go` - Comandos CLI de autenticação + - `cmd/piconomous/internal/auth/helpers.go` - Comandos CLI de autenticação - **Documentação:** - `docs/ANTIGRAVITY_USAGE.md` - Guia de uso do Antigravity @@ -794,7 +794,7 @@ Alguns modelos podem aparecer na lista de modelos disponíveis, mas retornar uma ## Solução de Problemas ### "Token expired" (token expirado) -- Atualizar tokens OAuth: `picoclaw auth login --provider antigravity` +- Atualizar tokens OAuth: `piconomous auth login --provider antigravity` ### "Gemini for Google Cloud is not enabled" (Gemini for Google Cloud não está habilitado) - Habilitar a API no seu Google Cloud Console @@ -805,5 +805,5 @@ Alguns modelos podem aparecer na lista de modelos disponíveis, mas retornar uma ### Modelos não aparecem na lista - Verificar se a autenticação OAuth foi concluída com sucesso -- Verificar o armazenamento do perfil de autenticação: `~/.picoclaw/auth.json` -- Executar novamente `picoclaw auth login --provider antigravity` +- Verificar o armazenamento do perfil de autenticação: `~/.piconomous/auth.json` +- Executar novamente `piconomous auth login --provider antigravity` diff --git a/docs/pt-br/ANTIGRAVITY_USAGE.md b/docs/pt-br/ANTIGRAVITY_USAGE.md index d4b681ad0..7505ada4e 100644 --- a/docs/pt-br/ANTIGRAVITY_USAGE.md +++ b/docs/pt-br/ANTIGRAVITY_USAGE.md @@ -1,8 +1,8 @@ > Voltar ao [README](../../README.pt-br.md) -# Usando o provedor Antigravity no PicoClaw +# Usando o provedor Antigravity no Piconomous -Este guia explica como configurar e usar o provedor **Antigravity** (Google Cloud Code Assist) no PicoClaw. +Este guia explica como configurar e usar o provedor **Antigravity** (Google Cloud Code Assist) no Piconomous. ## Pré-requisitos @@ -14,7 +14,7 @@ Este guia explica como configurar e usar o provedor **Antigravity** (Google Clou Para se autenticar com o Antigravity, execute o seguinte comando: ```bash -picoclaw auth login --provider antigravity +piconomous auth login --provider antigravity ``` ### Autenticação manual (Headless/VPS) @@ -24,9 +24,9 @@ Se você está executando em um servidor (Coolify/Docker) e não consegue acessa 3. Complete o login. 4. Seu navegador será redirecionado para uma URL `localhost:51121` (que não carregará). 5. **Copie essa URL final** da barra de endereços do seu navegador. -6. **Cole-a de volta no terminal** onde o PicoClaw está aguardando. +6. **Cole-a de volta no terminal** onde o Piconomous está aguardando. -O PicoClaw extrairá automaticamente o código de autorização e completará o processo. +O Piconomous extrairá automaticamente o código de autorização e completará o processo. ## 2. Gerenciando modelos @@ -34,15 +34,15 @@ O PicoClaw extrairá automaticamente o código de autorização e completará o Para ver quais modelos seu projeto tem acesso e verificar suas cotas: ```bash -picoclaw auth models +piconomous auth models ``` ### Trocar de modelo -Você pode alterar o modelo padrão em `~/.picoclaw/config.json` ou substituí-lo via CLI: +Você pode alterar o modelo padrão em `~/.piconomous/config.json` ou substituí-lo via CLI: ```bash # Substituir para um único comando -picoclaw agent -m "Hello" --model claude-opus-4-6-thinking +piconomous agent -m "Hello" --model claude-opus-4-6-thinking ``` ## 3. Uso em produção (Coolify/Docker) @@ -50,19 +50,19 @@ picoclaw agent -m "Hello" --model claude-opus-4-6-thinking Se você está implantando via Coolify ou Docker, siga estas etapas para testar: 1. **Variáveis de ambiente**: - * `PICOCLAW_AGENTS_DEFAULTS_MODEL=gemini-flash` + * `PICONOMOUS_AGENTS_DEFAULTS_MODEL=gemini-flash` 2. **Persistência da autenticação**: Se você já fez login localmente, pode copiar suas credenciais para o servidor: ```bash - scp ~/.picoclaw/auth.json user@your-server:~/.picoclaw/ + scp ~/.piconomous/auth.json user@your-server:~/.piconomous/ ``` *Alternativamente*, execute o comando `auth login` uma vez no servidor se você tiver acesso ao terminal. ## 4. Solução de problemas * **Resposta vazia**: Se um modelo retorna uma resposta vazia, ele pode estar restrito para o seu projeto. Tente `gemini-3-flash` ou `claude-opus-4-6-thinking`. -* **429 Limite de taxa**: O Antigravity possui cotas rigorosas. O PicoClaw exibirá o "tempo de redefinição" na mensagem de erro se você atingir um limite. -* **404 Não encontrado**: Certifique-se de que está usando um ID de modelo da lista `picoclaw auth models`. Use o ID curto (ex.: `gemini-3-flash`) e não o caminho completo. +* **429 Limite de taxa**: O Antigravity possui cotas rigorosas. O Piconomous exibirá o "tempo de redefinição" na mensagem de erro se você atingir um limite. +* **404 Não encontrado**: Certifique-se de que está usando um ID de modelo da lista `piconomous auth models`. Use o ID curto (ex.: `gemini-3-flash`) e não o caminho completo. ## 5. Resumo dos modelos funcionais diff --git a/docs/pt-br/chat-apps.md b/docs/pt-br/chat-apps.md index 08ef292fa..64ee2b694 100644 --- a/docs/pt-br/chat-apps.md +++ b/docs/pt-br/chat-apps.md @@ -4,7 +4,7 @@ ## 💬 Aplicativos de Chat -Converse com seu picoclaw através do Telegram, Discord, WhatsApp, Matrix, QQ, DingTalk, LINE, WeCom, Feishu, Slack, IRC, OneBot ou MaixCam +Converse com seu piconomous através do Telegram, Discord, WhatsApp, Matrix, QQ, DingTalk, LINE, WeCom, Feishu, Slack, IRC, OneBot ou MaixCam > **Nota**: Todos os canais baseados em webhook (LINE, WeCom, etc.) são servidos em um único servidor HTTP Gateway compartilhado (`gateway.host`:`gateway.port`, padrão `127.0.0.1:18790`). Não há portas por canal para configurar. Nota: Feishu usa o modo WebSocket/SDK e não utiliza o servidor HTTP webhook compartilhado. @@ -23,7 +23,7 @@ Converse com seu picoclaw através do Telegram, Discord, WhatsApp, Matrix, QQ, D | **IRC** | ⭐⭐ Médio | Servidor + configuração TLS | - | | **OneBot** | ⭐⭐ Médio | Compatível com NapCat/Go-CQHTTP, ecossistema comunitário | [Documentação](../channels/onebot/README.pt-br.md) | | **MaixCam** | ⭐ Fácil | Canal de integração de hardware para câmeras AI Sipeed | [Documentação](../channels/maixcam/README.pt-br.md) | -| **Pico** | ⭐ Fácil | Canal de protocolo nativo PicoClaw | | +| **Pico** | ⭐ Fácil | Canal de protocolo nativo Piconomous | |
Telegram (Recomendado) @@ -53,15 +53,15 @@ Converse com seu picoclaw através do Telegram, Discord, WhatsApp, Matrix, QQ, D **3. Executar** ```bash -picoclaw gateway +piconomous gateway ``` **4. Menu de comandos do Telegram (registrado automaticamente na inicialização)** -O PicoClaw agora mantém definições de comandos em um registro compartilhado. Na inicialização, o Telegram registrará automaticamente os comandos de bot suportados (por exemplo `/start`, `/help`, `/show`, `/list`) para que o menu de comandos e o comportamento em tempo de execução permaneçam sincronizados. +O Piconomous agora mantém definições de comandos em um registro compartilhado. Na inicialização, o Telegram registrará automaticamente os comandos de bot suportados (por exemplo `/start`, `/help`, `/show`, `/list`) para que o menu de comandos e o comportamento em tempo de execução permaneçam sincronizados. O registro do menu de comandos do Telegram permanece como descoberta UX local do canal; a execução genérica de comandos é tratada centralmente no loop do agente via commands executor. -Se o registro de comandos falhar (erros transitórios de rede/API), o canal ainda inicia e o PicoClaw tenta novamente o registro em segundo plano. +Se o registro de comandos falhar (erros transitórios de rede/API), o canal ainda inicia e o Piconomous tenta novamente o registro em segundo plano.
@@ -133,7 +133,7 @@ Você também pode ativar por prefixos de palavras-chave (ex.: `!bot`): **6. Executar** ```bash -picoclaw gateway +piconomous gateway ``` @@ -141,7 +141,7 @@ picoclaw gateway
WhatsApp (nativo via whatsmeow) -O PicoClaw pode se conectar ao WhatsApp de duas formas: +O Piconomous pode se conectar ao WhatsApp de duas formas: - **Nativo (recomendado):** In-process usando [whatsmeow](https://github.com/tulir/whatsmeow). Sem bridge separado. Defina `"use_native": true` e deixe `bridge_url` vazio. Na primeira execução, escaneie o QR code com o WhatsApp (Dispositivos Vinculados). A sessão é armazenada no seu workspace (ex.: `workspace/whatsapp/`). O canal nativo é **opcional** para manter o binário padrão pequeno; compile com `-tags whatsapp_native` (ex.: `make build-whatsapp-native` ou `go build -tags whatsapp_native ./cmd/...`). - **Bridge:** Conecte-se a um bridge WebSocket externo. Defina `bridge_url` (ex.: `ws://localhost:3001`) e mantenha `use_native` como false. @@ -161,7 +161,7 @@ O PicoClaw pode se conectar ao WhatsApp de duas formas: } ``` -Se `session_store_path` estiver vazio, a sessão é armazenada em `/whatsapp/`. Execute `picoclaw gateway`; na primeira execução, escaneie o QR code impresso no terminal com WhatsApp → Dispositivos Vinculados. +Se `session_store_path` estiver vazio, a sessão é armazenada em `/whatsapp/`. Execute `piconomous gateway`; na primeira execução, escaneie o QR code impresso no terminal com WhatsApp → Dispositivos Vinculados.
@@ -174,7 +174,7 @@ A QQ Open Platform oferece uma página de configuração com um clique para bots 1. Abra o [QQ Bot Quick Start](https://q.qq.com/qqbot/openclaw/index.html) e escaneie o QR code para fazer login 2. Um bot é criado automaticamente — copie o **App ID** e o **App Secret** -3. Configure o PicoClaw: +3. Configure o Piconomous: ```json { @@ -189,7 +189,7 @@ A QQ Open Platform oferece uma página de configuração com um clique para bots } ``` -4. Execute `picoclaw gateway` e abra o QQ para conversar com seu bot +4. Execute `piconomous gateway` e abra o QQ para conversar com seu bot > O App Secret é exibido apenas uma vez. Salve-o imediatamente — visualizá-lo novamente forçará uma redefinição. > @@ -202,7 +202,7 @@ Se preferir criar o bot manualmente: * Faça login na [QQ Open Platform](https://q.qq.com/) para se registrar como desenvolvedor * Crie um bot QQ — personalize seu avatar e nome * Copie o **App ID** e o **App Secret** nas configurações do bot -* Configure conforme mostrado acima e execute `picoclaw gateway` +* Configure conforme mostrado acima e execute `piconomous gateway` @@ -235,7 +235,7 @@ Se preferir criar o bot manualmente: **3. Executar** ```bash -picoclaw gateway +piconomous gateway ``` @@ -256,7 +256,7 @@ Canal de integração projetado especificamente para hardware de câmera AI Sipe ``` ```bash -picoclaw gateway +piconomous gateway ``` @@ -289,7 +289,7 @@ picoclaw gateway **3. Executar** ```bash -picoclaw gateway +piconomous gateway ``` Para opções completas (`device_id`, `join_on_invite`, `group_trigger`, `placeholder`, `reasoning_channel_id`), veja o [Guia de Configuração do Canal Matrix](../channels/matrix/README.md). @@ -337,7 +337,7 @@ Em seguida, defina a URL do Webhook no LINE Developers Console como `https://you **4. Executar** ```bash -picoclaw gateway +piconomous gateway ``` > Em chats de grupo, o bot responde apenas quando @mencionado. As respostas citam a mensagem original. @@ -347,7 +347,7 @@ picoclaw gateway
WeCom (企业微信) -O PicoClaw suporta três tipos de integração WeCom: +O Piconomous suporta três tipos de integração WeCom: **Opção 1: WeCom Bot (Bot)** - Configuração mais fácil, suporta chats de grupo **Opção 2: WeCom App (App Personalizado)** - Mais recursos, mensagens proativas, apenas chat privado @@ -417,7 +417,7 @@ Veja o [Guia de Configuração do WeCom AI Bot](../channels/wecom/wecom_aibot/RE **4. Executar** ```bash -picoclaw gateway +piconomous gateway ``` > **Nota**: Os callbacks de webhook do WeCom são servidos na porta do Gateway (padrão 18790). Use um proxy reverso para HTTPS. @@ -450,7 +450,7 @@ picoclaw gateway **3. Executar** ```bash -picoclaw gateway +piconomous gateway ``` > **Nota**: O WeCom AI Bot usa protocolo de streaming pull — sem preocupações com timeout de resposta. Tarefas longas (>30 segundos) mudam automaticamente para entrega via `response_url` push. @@ -460,7 +460,7 @@ picoclaw gateway
Feishu (Lark) -O PicoClaw se conecta ao Feishu via modo WebSocket/SDK — não é necessário URL de webhook público nem servidor de callback. +O Piconomous se conecta ao Feishu via modo WebSocket/SDK — não é necessário URL de webhook público nem servidor de callback. **1. Criar um aplicativo** @@ -489,7 +489,7 @@ Opcional: `encrypt_key` e `verification_token` para criptografia de eventos (rec **3. Executar e conversar** ```bash -picoclaw gateway +piconomous gateway ``` Abra o Feishu, pesquise o nome do seu bot e comece a conversar. Você também pode adicionar o bot a um grupo — use `group_trigger.mention_only: true` para responder apenas quando @mencionado. @@ -526,7 +526,7 @@ Para opções completas, veja o [Guia de Configuração do Canal Feishu](../chan **3. Executar** ```bash -picoclaw gateway +piconomous gateway ```
@@ -543,7 +543,7 @@ picoclaw gateway "enabled": true, "server": "irc.libera.chat:6697", "tls": true, - "nick": "picoclaw-bot", + "nick": "piconomous-bot", "channels": ["#your-channel"], "password": "", "allow_from": [] @@ -557,7 +557,7 @@ Opcional: `nickserv_password` para autenticação NickServ, `sasl_user`/`sasl_pa **2. Executar** ```bash -picoclaw gateway +piconomous gateway ``` O bot se conectará ao servidor IRC e entrará nos canais especificados. @@ -567,7 +567,7 @@ O bot se conectará ao servidor IRC e entrará nos canais especificados.
OneBot (QQ via protocolo OneBot) -OneBot é um protocolo aberto para bots QQ. O PicoClaw se conecta a qualquer implementação compatível com OneBot v11 (ex.: [Lagrange](https://github.com/LagrangeDev/Lagrange.Core), [NapCat](https://github.com/NapNeko/NapCatQQ)) via WebSocket. +OneBot é um protocolo aberto para bots QQ. O Piconomous se conecta a qualquer implementação compatível com OneBot v11 (ex.: [Lagrange](https://github.com/LagrangeDev/Lagrange.Core), [NapCat](https://github.com/NapNeko/NapCatQQ)) via WebSocket. **1. Configurar uma implementação OneBot** @@ -597,7 +597,7 @@ Instale e execute um framework de bot QQ compatível com OneBot v11. Habilite se **3. Executar** ```bash -picoclaw gateway +piconomous gateway ```
@@ -618,7 +618,7 @@ Canal de integração projetado especificamente para hardware de câmera AI Sipe ``` ```bash -picoclaw gateway +piconomous gateway ```
diff --git a/docs/pt-br/configuration.md b/docs/pt-br/configuration.md index ee14ca724..9f0ef833f 100644 --- a/docs/pt-br/configuration.md +++ b/docs/pt-br/configuration.md @@ -4,39 +4,39 @@ ## ⚙️ Configuração -Arquivo de configuração: `~/.picoclaw/config.json` +Arquivo de configuração: `~/.piconomous/config.json` ### Variáveis de Ambiente -Você pode substituir os caminhos padrão usando variáveis de ambiente. Isso é útil para instalações portáteis, implantações em contêineres ou execução do picoclaw como serviço do sistema. Essas variáveis são independentes e controlam caminhos diferentes. +Você pode substituir os caminhos padrão usando variáveis de ambiente. Isso é útil para instalações portáteis, implantações em contêineres ou execução do piconomous como serviço do sistema. Essas variáveis são independentes e controlam caminhos diferentes. | Variável | Descrição | Caminho Padrão | |-------------------|-----------------------------------------------------------------------------------------------------------------------------------------|---------------------------| -| `PICOCLAW_CONFIG` | Substitui o caminho para o arquivo de configuração. Isso indica diretamente ao picoclaw qual `config.json` carregar, ignorando todos os outros locais. | `~/.picoclaw/config.json` | -| `PICOCLAW_HOME` | Substitui o diretório raiz para dados do picoclaw. Isso altera o local padrão do `workspace` e outros diretórios de dados. | `~/.picoclaw` | +| `PICONOMOUS_CONFIG` | Substitui o caminho para o arquivo de configuração. Isso indica diretamente ao piconomous qual `config.json` carregar, ignorando todos os outros locais. | `~/.piconomous/config.json` | +| `PICONOMOUS_HOME` | Substitui o diretório raiz para dados do piconomous. Isso altera o local padrão do `workspace` e outros diretórios de dados. | `~/.piconomous` | **Exemplos:** ```bash -# Executar picoclaw usando um arquivo de configuração específico +# Executar piconomous usando um arquivo de configuração específico # O caminho do workspace será lido de dentro desse arquivo de configuração -PICOCLAW_CONFIG=/etc/picoclaw/production.json picoclaw gateway +PICONOMOUS_CONFIG=/etc/piconomous/production.json piconomous gateway -# Executar picoclaw com todos os dados armazenados em /opt/picoclaw -# A configuração será carregada do padrão ~/.picoclaw/config.json -# O workspace será criado em /opt/picoclaw/workspace -PICOCLAW_HOME=/opt/picoclaw picoclaw agent +# Executar piconomous com todos os dados armazenados em /opt/piconomous +# A configuração será carregada do padrão ~/.piconomous/config.json +# O workspace será criado em /opt/piconomous/workspace +PICONOMOUS_HOME=/opt/piconomous piconomous agent # Usar ambos para uma configuração totalmente personalizada -PICOCLAW_HOME=/srv/picoclaw PICOCLAW_CONFIG=/srv/picoclaw/main.json picoclaw gateway +PICONOMOUS_HOME=/srv/piconomous PICONOMOUS_CONFIG=/srv/piconomous/main.json piconomous gateway ``` ### Layout do Workspace -O PicoClaw armazena dados no seu workspace configurado (padrão: `~/.picoclaw/workspace`): +O Piconomous armazena dados no seu workspace configurado (padrão: `~/.piconomous/workspace`): ``` -~/.picoclaw/workspace/ +~/.piconomous/workspace/ ├── sessions/ # Sessões de conversa e histórico ├── memory/ # Memória de longo prazo (MEMORY.md) ├── state/ # Estado persistente (último canal, etc.) @@ -55,14 +55,14 @@ O PicoClaw armazena dados no seu workspace configurado (padrão: `~/.picoclaw/wo Por padrão, as skills são carregadas de: -1. `~/.picoclaw/workspace/skills` (workspace) -2. `~/.picoclaw/skills` (global) +1. `~/.piconomous/workspace/skills` (workspace) +2. `~/.piconomous/skills` (global) 3. `/skills` (embutido) Para configurações avançadas/de teste, você pode substituir o diretório raiz de skills builtin com: ```bash -export PICOCLAW_BUILTIN_SKILLS=/path/to/skills +export PICONOMOUS_BUILTIN_SKILLS=/path/to/skills ``` ### Política Unificada de Execução de Comandos @@ -74,7 +74,7 @@ export PICOCLAW_BUILTIN_SKILLS=/path/to/skills ### 🔒 Sandbox de Segurança -O PicoClaw é executado em um ambiente sandbox por padrão. O agente só pode acessar arquivos e executar comandos dentro do workspace configurado. +O Piconomous é executado em um ambiente sandbox por padrão. O agente só pode acessar arquivos e executar comandos dentro do workspace configurado. #### Configuração Padrão @@ -82,7 +82,7 @@ O PicoClaw é executado em um ambiente sandbox por padrão. O agente só pode ac { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "restrict_to_workspace": true } } @@ -91,7 +91,7 @@ O PicoClaw é executado em um ambiente sandbox por padrão. O agente só pode ac | Opção | Padrão | Descrição | | ----------------------- | ----------------------- | ----------------------------------------- | -| `workspace` | `~/.picoclaw/workspace` | Diretório de trabalho do agente | +| `workspace` | `~/.piconomous/workspace` | Diretório de trabalho do agente | | `restrict_to_workspace` | `true` | Restringir acesso a arquivos/comandos ao workspace | #### Ferramentas Protegidas @@ -138,7 +138,7 @@ Mesmo com `restrict_to_workspace: false`, a ferramenta `exec` bloqueia estes com #### Limitação Conhecida: Processos Filhos de Ferramentas de Build -O guard de segurança do exec inspeciona apenas a linha de comando que o PicoClaw executa diretamente. Ele não inspeciona recursivamente processos filhos gerados por ferramentas de desenvolvimento permitidas como `make`, `go run`, `cargo`, `npm run` ou scripts de build personalizados. +O guard de segurança do exec inspeciona apenas a linha de comando que o Piconomous executa diretamente. Ele não inspeciona recursivamente processos filhos gerados por ferramentas de desenvolvimento permitidas como `make`, `go run`, `cargo`, `npm run` ou scripts de build personalizados. Isso significa que um comando de nível superior ainda pode compilar ou executar outros binários após passar pela verificação inicial do guard. Na prática, trate scripts de build, Makefiles, scripts de pacotes e binários gerados como código executável que precisa do mesmo nível de revisão que um comando shell direto. @@ -146,7 +146,7 @@ Para ambientes de maior risco: * Revise scripts de build antes da execução. * Prefira aprovação/revisão manual para fluxos de trabalho de compilação e execução. -* Execute o PicoClaw dentro de um contêiner ou VM se precisar de isolamento mais forte do que o guard integrado oferece. +* Execute o Piconomous dentro de um contêiner ou VM se precisar de isolamento mais forte do que o guard integrado oferece. #### Exemplos de Erro @@ -179,7 +179,7 @@ Se você precisar que o agente acesse caminhos fora do workspace: **Método 2: Variável de ambiente** ```bash -export PICOCLAW_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACE=false +export PICONOMOUS_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACE=false ``` > ⚠️ **Aviso**: Desabilitar esta restrição permite que o agente acesse qualquer caminho no seu sistema. Use com cautela apenas em ambientes controlados. @@ -198,7 +198,7 @@ Todos os caminhos compartilham a mesma restrição de workspace — não há com ### Heartbeat (Tarefas Periódicas) -O PicoClaw pode executar tarefas periódicas automaticamente. Crie um arquivo `HEARTBEAT.md` no seu workspace: +O Piconomous pode executar tarefas periódicas automaticamente. Crie um arquivo `HEARTBEAT.md` no seu workspace: ```markdown # Tarefas Periódicas diff --git a/docs/pt-br/credential_encryption.md b/docs/pt-br/credential_encryption.md index 59a31e438..05fcd2a80 100644 --- a/docs/pt-br/credential_encryption.md +++ b/docs/pt-br/credential_encryption.md @@ -2,7 +2,7 @@ # Criptografia de Credenciais -O PicoClaw suporta a criptografia de valores `api_key` nas entradas de configuração `model_list`. +O Piconomous suporta a criptografia de valores `api_key` nas entradas de configuração `model_list`. As chaves criptografadas são armazenadas como strings `enc://` e descriptografadas automaticamente na inicialização. --- @@ -12,12 +12,12 @@ As chaves criptografadas são armazenadas como strings `enc://` e descri **1. Defina sua frase secreta** ```bash -export PICOCLAW_KEY_PASSPHRASE="your-passphrase" +export PICONOMOUS_KEY_PASSPHRASE="your-passphrase" ``` **2. Criptografe uma chave de API** -Execute `picoclaw onboard` — ele solicita sua frase secreta e gera a chave SSH, +Execute `piconomous onboard` — ele solicita sua frase secreta e gera a chave SSH, depois recriptografa automaticamente quaisquer entradas `api_key` em texto simples na sua configuração na próxima chamada `SaveConfig`. O valor `enc://` resultante será semelhante a: @@ -48,7 +48,7 @@ enc://AAAA...base64... |---------|---------|---------------| | Texto simples | `sk-abc123` | Usado como está | | Referência de arquivo | `file://openai.key` | Conteúdo lido do mesmo diretório do arquivo de configuração | -| Criptografado | `enc://` | Descriptografado na inicialização usando `PICOCLAW_KEY_PASSPHRASE` | +| Criptografado | `enc://` | Descriptografado na inicialização usando `PICONOMOUS_KEY_PASSPHRASE` | | Vazio | `""` | Passado sem alteração (usado com `auth_method: oauth`) | --- @@ -62,7 +62,7 @@ A criptografia utiliza **HKDF-SHA256** com uma chave privada SSH como segundo fa ``` sshHash = SHA256(ssh_private_key_file_bytes) ikm = HMAC-SHA256(key=sshHash, message=passphrase) -aes_key = HKDF-SHA256(ikm, salt, info="picoclaw-credential-v1", 32 bytes) +aes_key = HKDF-SHA256(ikm, salt, info="piconomous-credential-v1", 32 bytes) ``` ### Criptografia @@ -99,7 +99,7 @@ O tag de autenticação GCM é anexado automaticamente ao texto cifrado. Qualque Quando uma chave privada SSH é fornecida, quebrar a criptografia requer **ambos**: -1. A **frase secreta** (`PICOCLAW_KEY_PASSPHRASE`) +1. A **frase secreta** (`PICONOMOUS_KEY_PASSPHRASE`) 2. O **arquivo de chave privada SSH** Isso significa que um arquivo de configuração vazado sozinho não é suficiente para recuperar a chave de API, mesmo que a frase secreta seja fraca. A chave SSH contribui com 256 bits de entropia (Ed25519) independentemente da força da frase secreta. @@ -119,33 +119,33 @@ Isso significa que um arquivo de configuração vazado sozinho não é suficient | Variável | Obrigatório | Descrição | |----------|-------------|-----------| -| `PICOCLAW_KEY_PASSPHRASE` | Sim (para `enc://`) | Frase secreta usada para derivação de chave | -| `PICOCLAW_SSH_KEY_PATH` | Não | Caminho para a chave privada SSH. Se não definido, detecta automaticamente em `~/.ssh/picoclaw_ed25519.key` | +| `PICONOMOUS_KEY_PASSPHRASE` | Sim (para `enc://`) | Frase secreta usada para derivação de chave | +| `PICONOMOUS_SSH_KEY_PATH` | Não | Caminho para a chave privada SSH. Se não definido, detecta automaticamente em `~/.ssh/piconomous_ed25519.key` | ### Detecção Automática da Chave SSH -Se `PICOCLAW_SSH_KEY_PATH` não estiver definido, o PicoClaw procura a chave dedicada: +Se `PICONOMOUS_SSH_KEY_PATH` não estiver definido, o Piconomous procura a chave dedicada: ``` -~/.ssh/picoclaw_ed25519.key +~/.ssh/piconomous_ed25519.key ``` Este arquivo dedicado evita conflitos com as chaves SSH existentes do usuário. -Execute `picoclaw onboard` para gerá-lo automaticamente. +Execute `piconomous onboard` para gerá-lo automaticamente. `os.UserHomeDir()` é usado para resolução multiplataforma do diretório home (lê `USERPROFILE` no Windows, `HOME` no Unix/macOS). -> **Nota:** Um arquivo de chave SSH é obrigatório para a criptografia de credenciais. Se nenhuma chave for encontrada e `PICOCLAW_SSH_KEY_PATH` não estiver definido, a criptografia/descriptografia falhará. Execute `picoclaw onboard` para gerar a chave automaticamente. +> **Nota:** Um arquivo de chave SSH é obrigatório para a criptografia de credenciais. Se nenhuma chave for encontrada e `PICONOMOUS_SSH_KEY_PATH` não estiver definido, a criptografia/descriptografia falhará. Execute `piconomous onboard` para gerar a chave automaticamente. --- ## Migração -Como os únicos materiais secretos são `PICOCLAW_KEY_PASSPHRASE` e o arquivo de chave privada SSH, a migração é simples: +Como os únicos materiais secretos são `PICONOMOUS_KEY_PASSPHRASE` e o arquivo de chave privada SSH, a migração é simples: 1. Copie o arquivo de configuração para a nova máquina. -2. Defina `PICOCLAW_KEY_PASSPHRASE` com o mesmo valor. -3. Copie o arquivo de chave privada SSH para o mesmo caminho (ou defina `PICOCLAW_SSH_KEY_PATH` para sua nova localização). +2. Defina `PICONOMOUS_KEY_PASSPHRASE` com o mesmo valor. +3. Copie o arquivo de chave privada SSH para o mesmo caminho (ou defina `PICONOMOUS_SSH_KEY_PATH` para sua nova localização). Nenhuma recriptografia é necessária. @@ -153,7 +153,7 @@ Nenhuma recriptografia é necessária. ## Considerações de Segurança -- **Tanto a frase secreta quanto a chave SSH são obrigatórias.** A chave SSH atua como um segundo fator — sem ela, a criptografia/descriptografia falhará. Execute `picoclaw onboard` para gerar a chave se ela não existir. -- **A chave SSH é somente leitura em tempo de execução.** O PicoClaw nunca escreve ou modifica o arquivo de chave SSH. +- **Tanto a frase secreta quanto a chave SSH são obrigatórias.** A chave SSH atua como um segundo fator — sem ela, a criptografia/descriptografia falhará. Execute `piconomous onboard` para gerar a chave se ela não existir. +- **A chave SSH é somente leitura em tempo de execução.** O Piconomous nunca escreve ou modifica o arquivo de chave SSH. - **Chaves em texto simples continuam sendo suportadas.** Configurações existentes sem `enc://` não são afetadas. -- **O formato `enc://` é versionado** através do campo `info` do HKDF (`picoclaw-credential-v1`), permitindo futuras atualizações de algoritmo sem quebrar valores criptografados existentes. +- **O formato `enc://` é versionado** através do campo `info` do HKDF (`piconomous-credential-v1`), permitindo futuras atualizações de algoritmo sem quebrar valores criptografados existentes. diff --git a/docs/pt-br/debug.md b/docs/pt-br/debug.md index 8614cd5ed..c434b5737 100644 --- a/docs/pt-br/debug.md +++ b/docs/pt-br/debug.md @@ -1,31 +1,31 @@ -# Depuração do PicoClaw +# Depuração do Piconomous > Voltar ao [README](../../README.pt-br.md) -O PicoClaw realiza múltiplas interações complexas nos bastidores para cada requisição que recebe — desde o roteamento de mensagens e avaliação de complexidade, até a execução de ferramentas e adaptação a falhas de modelo. Poder ver exatamente o que está acontecendo é crucial, não apenas para solucionar problemas potenciais, mas também para realmente entender como o agente opera. +O Piconomous realiza múltiplas interações complexas nos bastidores para cada requisição que recebe — desde o roteamento de mensagens e avaliação de complexidade, até a execução de ferramentas e adaptação a falhas de modelo. Poder ver exatamente o que está acontecendo é crucial, não apenas para solucionar problemas potenciais, mas também para realmente entender como o agente opera. -## Iniciando o PicoClaw em modo de depuração +## Iniciando o Piconomous em modo de depuração -Para obter informações detalhadas sobre o que o agente está fazendo (requisições LLM, chamadas de ferramentas, roteamento de mensagens), você pode iniciar o gateway do PicoClaw com a flag de depuração: +Para obter informações detalhadas sobre o que o agente está fazendo (requisições LLM, chamadas de ferramentas, roteamento de mensagens), você pode iniciar o gateway do Piconomous com a flag de depuração: ```bash -picoclaw gateway --debug +piconomous gateway --debug # or -picoclaw gateway -d +piconomous gateway -d ``` Neste modo, o sistema formata os logs de forma detalhada e exibe prévias dos prompts do sistema e dos resultados de execução das ferramentas. ## Desabilitando a truncagem de logs (logs completos) -Por padrão, o PicoClaw trunca strings muito longas (como o *Prompt do Sistema* ou resultados JSON grandes) nos logs de depuração para manter o console legível. +Por padrão, o Piconomous trunca strings muito longas (como o *Prompt do Sistema* ou resultados JSON grandes) nos logs de depuração para manter o console legível. Se você precisar inspecionar a saída completa de um comando ou o payload exato enviado ao modelo LLM, pode usar a flag `--no-truncate`. **Nota:** Esta flag *só* funciona quando combinada com o modo `--debug`. ```bash -picoclaw gateway --debug --no-truncate +piconomous gateway --debug --no-truncate ``` diff --git a/docs/pt-br/docker.md b/docs/pt-br/docker.md index bac48954b..cbccb8d60 100644 --- a/docs/pt-br/docker.md +++ b/docs/pt-br/docker.md @@ -4,12 +4,12 @@ ## 🐳 Docker Compose -Você também pode executar o PicoClaw usando Docker Compose sem instalar nada localmente. +Você também pode executar o Piconomous usando Docker Compose sem instalar nada localmente. ```bash # 1. Clone este repositório -git clone https://github.com/sipeed/picoclaw.git -cd picoclaw +git clone https://github.com/sipeed/piconomous.git +cd piconomous # 2. Primeira execução — gera automaticamente docker/data/config.json e encerra # (só é acionado quando config.json e workspace/ estão ambos ausentes) @@ -24,11 +24,11 @@ docker compose -f docker/docker-compose.yml --profile gateway up -d ``` > [!TIP] -> **Usuários Docker**: Por padrão, o Gateway escuta em `127.0.0.1`, que não é acessível a partir do host. Se você precisar acessar os endpoints de saúde ou expor portas, defina `PICOCLAW_GATEWAY_HOST=0.0.0.0` no seu ambiente ou atualize o `config.json`. +> **Usuários Docker**: Por padrão, o Gateway escuta em `127.0.0.1`, que não é acessível a partir do host. Se você precisar acessar os endpoints de saúde ou expor portas, defina `PICONOMOUS_GATEWAY_HOST=0.0.0.0` no seu ambiente ou atualize o `config.json`. ```bash # 5. Verificar logs -docker compose -f docker/docker-compose.yml logs -f picoclaw-gateway +docker compose -f docker/docker-compose.yml logs -f piconomous-gateway # 6. Parar docker compose -f docker/docker-compose.yml --profile gateway down @@ -36,7 +36,7 @@ docker compose -f docker/docker-compose.yml --profile gateway down ### Modo Launcher (Console Web) -A imagem `launcher` inclui os três binários (`picoclaw`, `picoclaw-launcher`, `picoclaw-launcher-tui`) e inicia o console web por padrão, que fornece uma interface baseada em navegador para configuração e chat. +A imagem `launcher` inclui os três binários (`piconomous`, `piconomous-launcher`, `piconomous-launcher-tui`) e inicia o console web por padrão, que fornece uma interface baseada em navegador para configuração e chat. ```bash docker compose -f docker/docker-compose.yml --profile launcher up -d @@ -51,10 +51,10 @@ Abra http://localhost:18800 no seu navegador. O launcher gerencia o processo do ```bash # Fazer uma pergunta -docker compose -f docker/docker-compose.yml run --rm picoclaw-agent -m "What is 2+2?" +docker compose -f docker/docker-compose.yml run --rm piconomous-agent -m "What is 2+2?" # Modo interativo -docker compose -f docker/docker-compose.yml run --rm picoclaw-agent +docker compose -f docker/docker-compose.yml run --rm piconomous-agent ``` ### Atualização @@ -67,21 +67,21 @@ docker compose -f docker/docker-compose.yml --profile gateway up -d ### 🚀 Início Rápido > [!TIP] -> Configure sua chave de API em `~/.picoclaw/config.json`. Obtenha chaves de API: [Volcengine (CodingPlan)](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) (LLM) · [OpenRouter](https://openrouter.ai/keys) (LLM) · [Zhipu](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys) (LLM). A busca na web é opcional — obtenha gratuitamente uma [API Tavily](https://tavily.com) (1000 consultas gratuitas/mês) ou [API Brave Search](https://brave.com/search/api) (2000 consultas gratuitas/mês). +> Configure sua chave de API em `~/.piconomous/config.json`. Obtenha chaves de API: [Volcengine (CodingPlan)](https://www.volcengine.com/activity/codingplan?utm_campaign=Piconomous&utm_content=Piconomous&utm_medium=devrel&utm_source=OWO&utm_term=Piconomous) (LLM) · [OpenRouter](https://openrouter.ai/keys) (LLM) · [Zhipu](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys) (LLM). A busca na web é opcional — obtenha gratuitamente uma [API Tavily](https://tavily.com) (1000 consultas gratuitas/mês) ou [API Brave Search](https://brave.com/search/api) (2000 consultas gratuitas/mês). **1. Inicializar** ```bash -picoclaw onboard +piconomous onboard ``` -**2. Configurar** (`~/.picoclaw/config.json`) +**2. Configurar** (`~/.piconomous/config.json`) ```json { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "model_name": "gpt-5.4", "max_tokens": 8192, "temperature": 0.7, @@ -142,7 +142,7 @@ picoclaw onboard ``` > **Novo**: O formato de configuração `model_list` permite adicionar provedores sem alteração de código. Veja [Configuração de Modelos](#configuração-de-modelos-model_list) para detalhes. -> `request_timeout` é opcional e usa segundos. Se omitido ou definido como `<= 0`, o PicoClaw usa o timeout padrão (120s). +> `request_timeout` é opcional e usa segundos. Se omitido ou definido como `<= 0`, o Piconomous usa o timeout padrão (120s). **3. Obter chaves de API** @@ -159,7 +159,7 @@ picoclaw onboard **4. Conversar** ```bash -picoclaw agent -m "What is 2+2?" +piconomous agent -m "What is 2+2?" ``` Pronto! Você tem um assistente de IA funcionando em 2 minutos. diff --git a/docs/pt-br/hardware-compatibility.md b/docs/pt-br/hardware-compatibility.md index 771621014..30fcd5bc4 100644 --- a/docs/pt-br/hardware-compatibility.md +++ b/docs/pt-br/hardware-compatibility.md @@ -1,8 +1,8 @@ > Voltar ao [README](../../README.pt-br.md) -# 🖥️ PicoClaw Lista de compatibilidade de hardware +# 🖥️ Piconomous Lista de compatibilidade de hardware -O PicoClaw roda em praticamente qualquer dispositivo Linux. Esta página registra chips, produtos e placas de desenvolvimento verificados. +O Piconomous roda em praticamente qualquer dispositivo Linux. Esta página registra chips, produtos e placas de desenvolvimento verificados. **Seu hardware não está na lista?** Envie um PR para adicioná-lo! Fabricantes de hardware são bem-vindos para contribuir e co-promover. @@ -59,7 +59,7 @@ O PicoClaw roda em praticamente qualquer dispositivo Linux. Esta página registr ## 2. Produtos verificados (por data de lançamento) -Produtos de consumo, roteadores e dispositivos industriais testados com o PicoClaw. +Produtos de consumo, roteadores e dispositivos industriais testados com o Piconomous. | Ano | Produto | Arq | SoC | RAM | Categoria | |-----|---------|-----|-----|-----|-----------| @@ -97,7 +97,7 @@ Produtos de consumo, roteadores e dispositivos industriais testados com o PicoCl ### Celulares Android (via Termux) -Qualquer celular Android ARM64 (2015+) com 1GB+ de RAM. Instale o [Termux](https://github.com/termux/termux-app), use `proot` para rodar o PicoClaw. +Qualquer celular Android ARM64 (2015+) com 1GB+ de RAM. Instale o [Termux](https://github.com/termux/termux-app), use `proot` para rodar o Piconomous. > Veja [README: Rodar em celulares Android antigos](../../README.pt-br.md#-run-on-old-android-phones) para instruções de configuração. @@ -130,14 +130,14 @@ Qualquer celular Android ARM64 (2015+) com 1GB+ de RAM. Instale o [Termux](https ```bash # 1. Baixar para sua arquitetura -wget https://github.com/sipeed/picoclaw/releases/latest/download/picoclaw_Linux_arm64.tar.gz -tar xzf picoclaw_Linux_arm64.tar.gz +wget https://github.com/sipeed/piconomous/releases/latest/download/piconomous_Linux_arm64.tar.gz +tar xzf piconomous_Linux_arm64.tar.gz # 2. Inicializar -./picoclaw onboard +./piconomous onboard # 3. Testar -./picoclaw agent -m "Hello, what board am I running on?" +./piconomous agent -m "Hello, what board am I running on?" ``` Builds disponíveis: `linux-amd64`, `linux-arm64`, `linux-arm`, `linux-riscv64`, `linux-loong64`, `linux-mipsle` diff --git a/docs/pt-br/providers.md b/docs/pt-br/providers.md index 0f7a4b5a1..35510f4f2 100644 --- a/docs/pt-br/providers.md +++ b/docs/pt-br/providers.md @@ -11,7 +11,7 @@ | ------------ | --------------------------------------- | ------------------------------------------------------------ | | `gemini` | LLM (Gemini direct) | [aistudio.google.com](https://aistudio.google.com) | | `zhipu` | LLM (Zhipu direct) | [bigmodel.cn](https://bigmodel.cn) | -| `volcengine` | LLM(Volcengine direct) | [volcengine.com](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) | +| `volcengine` | LLM(Volcengine direct) | [volcengine.com](https://www.volcengine.com/activity/codingplan?utm_campaign=Piconomous&utm_content=Piconomous&utm_medium=devrel&utm_source=OWO&utm_term=Piconomous) | | `openrouter` | LLM (recommended, access to all models) | [openrouter.ai](https://openrouter.ai) | | `anthropic` | LLM (Claude direct) | [console.anthropic.com](https://console.anthropic.com) | | `openai` | LLM (GPT direct) | [platform.openai.com](https://platform.openai.com) | @@ -29,7 +29,7 @@ ### Configuração de Modelos (model_list) -> **Novidade?** O PicoClaw agora usa uma abordagem de configuração **centrada no modelo**. Basta especificar o formato `vendor/model` (ex.: `zhipu/glm-4.7`) para adicionar novos provedores — **sem necessidade de alteração de código!** +> **Novidade?** O Piconomous agora usa uma abordagem de configuração **centrada no modelo**. Basta especificar o formato `vendor/model` (ex.: `zhipu/glm-4.7`) para adicionar novos provedores — **sem necessidade de alteração de código!** Este design também permite **suporte multi-agente** com seleção flexível de provedores: @@ -56,7 +56,7 @@ Este design também permite **suporte multi-agente** com seleção flexível de | **LiteLLM Proxy** | `litellm/` | `http://localhost:4000/v1` | OpenAI | Your LiteLLM proxy key | | **VLLM** | `vllm/` | `http://localhost:8000/v1` | OpenAI | Local | | **Cerebras** | `cerebras/` | `https://api.cerebras.ai/v1` | OpenAI | [Get Key](https://cerebras.ai) | -| **VolcEngine (Doubao)** | `volcengine/` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [Get Key](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) | +| **VolcEngine (Doubao)** | `volcengine/` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [Get Key](https://www.volcengine.com/activity/codingplan?utm_campaign=Piconomous&utm_content=Piconomous&utm_medium=devrel&utm_source=OWO&utm_term=Piconomous) | | **神算云** | `shengsuanyun/` | `https://router.shengsuanyun.com/api/v1` | OpenAI | - | | **BytePlus** | `byteplus/` | `https://ark.ap-southeast.bytepluses.com/api/v3` | OpenAI | [Get Key](https://www.byteplus.com) | | **Vivgrid** | `vivgrid/` | `https://api.vivgrid.com/v1` | OpenAI | [Get Key](https://vivgrid.com) | @@ -151,7 +151,7 @@ Este design também permite **suporte multi-agente** com seleção flexível de } ``` -> Execute `picoclaw auth login --provider anthropic` para colar seu token de API. +> Execute `piconomous auth login --provider anthropic` para colar seu token de API. **Anthropic Messages API (formato nativo)** @@ -205,11 +205,11 @@ Para acesso direto à API Anthropic ou endpoints personalizados que suportam ape } ``` -O PicoClaw remove apenas o prefixo externo `litellm/` antes de enviar a requisição, então aliases de proxy como `litellm/lite-gpt4` enviam `lite-gpt4`, enquanto `litellm/openai/gpt-4o` envia `openai/gpt-4o`. +O Piconomous remove apenas o prefixo externo `litellm/` antes de enviar a requisição, então aliases de proxy como `litellm/lite-gpt4` enviam `lite-gpt4`, enquanto `litellm/openai/gpt-4o` envia `openai/gpt-4o`. #### Balanceamento de Carga -Configure múltiplos endpoints para o mesmo nome de modelo — o PicoClaw fará automaticamente round-robin entre eles: +Configure múltiplos endpoints para o mesmo nome de modelo — o Piconomous fará automaticamente round-robin entre eles: ```json { @@ -276,7 +276,7 @@ Para guia de migração detalhado, veja [migration/model-list-migration.md](../m ### Arquitetura de Provedores -O PicoClaw roteia provedores por família de protocolo: +O Piconomous roteia provedores por família de protocolo: - Protocolo compatível com OpenAI: OpenRouter, gateways compatíveis com OpenAI, Groq, Zhipu e endpoints estilo vLLM. - Protocolo Anthropic: Comportamento nativo da API Claude. @@ -297,7 +297,7 @@ Isso mantém o runtime leve enquanto torna novos backends compatíveis com OpenA { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "model_name": "glm-4.7", "max_tokens": 8192, "temperature": 0.7, @@ -316,7 +316,7 @@ Isso mantém o runtime leve enquanto torna novos backends compatíveis com OpenA **3. Executar** ```bash -picoclaw agent -m "Hello" +piconomous agent -m "Hello" ``` @@ -429,5 +429,5 @@ picoclaw agent -m "Hello" ---
- PicoClaw Meme + Piconomous Meme
diff --git a/docs/pt-br/spawn-tasks.md b/docs/pt-br/spawn-tasks.md index d6b539cb1..d6a5c6005 100644 --- a/docs/pt-br/spawn-tasks.md +++ b/docs/pt-br/spawn-tasks.md @@ -57,5 +57,5 @@ O subagente tem acesso a ferramentas (message, web_search, etc.) e pode se comun **Variáveis de ambiente:** -* `PICOCLAW_HEARTBEAT_ENABLED=false` para desabilitar -* `PICOCLAW_HEARTBEAT_INTERVAL=60` para alterar o intervalo +* `PICONOMOUS_HEARTBEAT_ENABLED=false` para desabilitar +* `PICONOMOUS_HEARTBEAT_INTERVAL=60` para alterar o intervalo diff --git a/docs/pt-br/tools_configuration.md b/docs/pt-br/tools_configuration.md index 2cc4f3999..78133d51c 100644 --- a/docs/pt-br/tools_configuration.md +++ b/docs/pt-br/tools_configuration.md @@ -2,7 +2,7 @@ > Voltar ao [README](../../README.pt-br.md) -A configuração de ferramentas do PicoClaw está localizada no campo `tools` do `config.json`. +A configuração de ferramentas do Piconomous está localizada no campo `tools` do `config.json`. ## Estrutura de diretórios @@ -91,7 +91,7 @@ Para desabilitar completamente a ferramenta `exec`, defina `enabled` como `false **Via variável de ambiente:** ```bash -PICOCLAW_TOOLS_EXEC_ENABLED=false +PICONOMOUS_TOOLS_EXEC_ENABLED=false ``` > **Nota:** Quando desabilitada, o agent não poderá executar comandos shell. Isso também afeta a capacidade da ferramenta Cron de executar comandos shell agendados. @@ -103,7 +103,7 @@ PICOCLAW_TOOLS_EXEC_ENABLED=false ### Padrões de comandos bloqueados por padrão -Por padrão, o PicoClaw bloqueia os seguintes comandos perigosos: +Por padrão, o Piconomous bloqueia os seguintes comandos perigosos: - Comandos de exclusão: `rm -rf`, `del /f/q`, `rmdir /s` - Operações de disco: `format`, `mkfs`, `diskpart`, `dd if=`, escrita em `/dev/sd*` @@ -120,7 +120,7 @@ Por padrão, o PicoClaw bloqueia os seguintes comandos perigosos: ### Limitação arquitetural conhecida -O guarda exec apenas valida o comando de nível superior enviado ao PicoClaw. Ele **não** inspeciona recursivamente processos filhos gerados por ferramentas de build ou scripts após o início desse comando. +O guarda exec apenas valida o comando de nível superior enviado ao Piconomous. Ele **não** inspeciona recursivamente processos filhos gerados por ferramentas de build ou scripts após o início desse comando. Exemplos de fluxos de trabalho que podem contornar o guarda de comando direto uma vez que o comando inicial é permitido: @@ -347,14 +347,14 @@ A ferramenta skills configura a descoberta e instalação de habilidades via reg ## Variáveis de ambiente -Todas as opções de configuração podem ser substituídas via variáveis de ambiente com o formato `PICOCLAW_TOOLS_
_`: +Todas as opções de configuração podem ser substituídas via variáveis de ambiente com o formato `PICONOMOUS_TOOLS_
_`: Por exemplo: -- `PICOCLAW_TOOLS_WEB_BRAVE_ENABLED=true` -- `PICOCLAW_TOOLS_EXEC_ENABLED=false` -- `PICOCLAW_TOOLS_EXEC_ENABLE_DENY_PATTERNS=false` -- `PICOCLAW_TOOLS_CRON_EXEC_TIMEOUT_MINUTES=10` -- `PICOCLAW_TOOLS_MCP_ENABLED=true` +- `PICONOMOUS_TOOLS_WEB_BRAVE_ENABLED=true` +- `PICONOMOUS_TOOLS_EXEC_ENABLED=false` +- `PICONOMOUS_TOOLS_EXEC_ENABLE_DENY_PATTERNS=false` +- `PICONOMOUS_TOOLS_CRON_EXEC_TIMEOUT_MINUTES=10` +- `PICONOMOUS_TOOLS_MCP_ENABLED=true` Nota: Configuração de tipo mapa aninhado (por exemplo `tools.mcp.servers..*`) é configurada no `config.json` em vez de variáveis de ambiente. diff --git a/docs/pt-br/troubleshooting.md b/docs/pt-br/troubleshooting.md index 286ad2ac8..fd856e0f1 100644 --- a/docs/pt-br/troubleshooting.md +++ b/docs/pt-br/troubleshooting.md @@ -14,7 +14,7 @@ - **Errado:** `"model": "free"` → OpenRouter recebe `free` e rejeita. - **Correto:** `"model": "openrouter/free"` → OpenRouter recebe `openrouter/free` (roteamento automático do nível gratuito). -**Correção:** Em `~/.picoclaw/config.json` (ou seu caminho de configuração): +**Correção:** Em `~/.piconomous/config.json` (ou seu caminho de configuração): 1. **agents.defaults.model_name** deve corresponder a um `model_name` em `model_list` (ex.: `"openrouter-free"`). 2. O **model** dessa entrada deve ser um ID de modelo OpenRouter válido, por exemplo: diff --git a/docs/spawn-tasks.md b/docs/spawn-tasks.md index 05a5215d2..0533c0f3e 100644 --- a/docs/spawn-tasks.md +++ b/docs/spawn-tasks.md @@ -2,7 +2,7 @@ > Back to [README](../README.md) -PicoClaw supports **asynchronous task execution** via the `spawn` tool. This is primarily used by the **Heartbeat** system to run long-running tasks without blocking the main agent loop. +Piconomous supports **asynchronous task execution** via the `spawn` tool. This is primarily used by the **Heartbeat** system to run long-running tasks without blocking the main agent loop. ## Heartbeat @@ -66,5 +66,5 @@ The subagent has access to tools (message, web_search, etc.) and can communicate **Environment variables:** -* `PICOCLAW_HEARTBEAT_ENABLED=false` to disable -* `PICOCLAW_HEARTBEAT_INTERVAL=60` to change interval +* `PICONOMOUS_HEARTBEAT_ENABLED=false` to disable +* `PICONOMOUS_HEARTBEAT_INTERVAL=60` to change interval diff --git a/docs/tools_configuration.md b/docs/tools_configuration.md index d0160050d..90556e46c 100644 --- a/docs/tools_configuration.md +++ b/docs/tools_configuration.md @@ -1,6 +1,6 @@ # Tools Configuration -PicoClaw's tools configuration is located in the `tools` field of `config.json`. +Piconomous's tools configuration is located in the `tools` field of `config.json`. ## Directory Structure @@ -125,7 +125,7 @@ To completely disable the `exec` tool, set `enabled` to `false`: **Via environment variable:** ```bash -PICOCLAW_TOOLS_EXEC_ENABLED=false +PICONOMOUS_TOOLS_EXEC_ENABLED=false ``` > **Note:** When disabled, the agent will not be able to execute shell commands. This also affects the Cron tool's ability to run scheduled shell commands. @@ -137,7 +137,7 @@ PICOCLAW_TOOLS_EXEC_ENABLED=false ### Default Blocked Command Patterns -By default, PicoClaw blocks the following dangerous commands: +By default, Piconomous blocks the following dangerous commands: - Delete commands: `rm -rf`, `del /f/q`, `rmdir /s` - Disk operations: `format`, `mkfs`, `diskpart`, `dd if=`, writing to `/dev/sd*` @@ -154,7 +154,7 @@ By default, PicoClaw blocks the following dangerous commands: ### Known Architectural Limitation -The exec guard only validates the top-level command sent to PicoClaw. It does **not** recursively inspect child +The exec guard only validates the top-level command sent to Piconomous. It does **not** recursively inspect child processes spawned by build tools or scripts after that command starts running. Examples of workflows that can bypass the direct command guard once the initial command is allowed: @@ -458,15 +458,15 @@ The skills tool configures skill discovery and installation via registries like ## Environment Variables -All configuration options can be overridden via environment variables with the format `PICOCLAW_TOOLS_
_`: +All configuration options can be overridden via environment variables with the format `PICONOMOUS_TOOLS_
_`: For example: -- `PICOCLAW_TOOLS_WEB_BRAVE_ENABLED=true` -- `PICOCLAW_TOOLS_EXEC_ENABLED=false` -- `PICOCLAW_TOOLS_EXEC_ENABLE_DENY_PATTERNS=false` -- `PICOCLAW_TOOLS_CRON_EXEC_TIMEOUT_MINUTES=10` -- `PICOCLAW_TOOLS_MCP_ENABLED=true` +- `PICONOMOUS_TOOLS_WEB_BRAVE_ENABLED=true` +- `PICONOMOUS_TOOLS_EXEC_ENABLED=false` +- `PICONOMOUS_TOOLS_EXEC_ENABLE_DENY_PATTERNS=false` +- `PICONOMOUS_TOOLS_CRON_EXEC_TIMEOUT_MINUTES=10` +- `PICONOMOUS_TOOLS_MCP_ENABLED=true` Note: Nested map-style config (for example `tools.mcp.servers..*`) is configured in `config.json` rather than environment variables. diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md index 096beec78..33123526c 100644 --- a/docs/troubleshooting.md +++ b/docs/troubleshooting.md @@ -12,7 +12,7 @@ - **Wrong:** `"model": "free"` → OpenRouter receives `free` and rejects it. - **Right:** `"model": "openrouter/free"` → OpenRouter receives `openrouter/free` (auto free-tier routing). -**Fix:** In `~/.picoclaw/config.json` (or your config path): +**Fix:** In `~/.piconomous/config.json` (or your config path): 1. **agents.defaults.model_name** must match a `model_name` in `model_list` (e.g. `"openrouter-free"`). 2. That entry’s **model** must be a valid OpenRouter model ID, for example: diff --git a/docs/vi/ANTIGRAVITY_AUTH.md b/docs/vi/ANTIGRAVITY_AUTH.md index 783dc5181..37c7f0591 100644 --- a/docs/vi/ANTIGRAVITY_AUTH.md +++ b/docs/vi/ANTIGRAVITY_AUTH.md @@ -4,7 +4,7 @@ ## Tổng quan -**Antigravity** (Google Cloud Code Assist) là nhà cung cấp mô hình AI được Google hỗ trợ, cung cấp quyền truy cập vào các mô hình như Claude Opus 4.6 và Gemini thông qua hạ tầng đám mây của Google. Tài liệu này cung cấp hướng dẫn đầy đủ về cách xác thực hoạt động, cách lấy danh sách mô hình và cách triển khai nhà cung cấp mới trong PicoClaw. +**Antigravity** (Google Cloud Code Assist) là nhà cung cấp mô hình AI được Google hỗ trợ, cung cấp quyền truy cập vào các mô hình như Claude Opus 4.6 và Gemini thông qua hạ tầng đám mây của Google. Tài liệu này cung cấp hướng dẫn đầy đủ về cách xác thực hoạt động, cách lấy danh sách mô hình và cách triển khai nhà cung cấp mới trong Piconomous. --- @@ -19,7 +19,7 @@ 7. [Yêu cầu tích hợp](#yêu-cầu-tích-hợp) 8. [Các endpoint API](#các-endpoint-api) 9. [Cấu hình](#cấu-hình) -10. [Tạo nhà cung cấp mới trong PicoClaw](#tạo-nhà-cung-cấp-mới-trong-picoclaw) +10. [Tạo nhà cung cấp mới trong Piconomous](#tạo-nhà-cung-cấp-mới-trong-piconomous) --- @@ -380,7 +380,7 @@ const antigravityPlugin = { description: "OAuth flow for Google Antigravity (Cloud Code Assist)", configSchema: emptyPluginConfigSchema(), - register(api: PicoClawPluginApi) { + register(api: PiconomousPluginApi) { api.registerProvider({ id: "google-antigravity", label: "Google Antigravity", @@ -407,7 +407,7 @@ const antigravityPlugin = { ```typescript type ProviderAuthContext = { - config: PicoClawConfig; + config: PiconomousConfig; agentDir?: string; workspaceDir?: string; prompter: WizardPrompter; // Lời nhắc/thông báo UI @@ -428,7 +428,7 @@ type ProviderAuthResult = { profileId: string; credential: AuthProfileCredential; }>; - configPatch?: Partial; + configPatch?: Partial; defaultModel?: string; notes?: string[]; }; @@ -441,7 +441,7 @@ type ProviderAuthResult = { ### 1. Môi trường/Phụ thuộc cần thiết - Go ≥ 1.25 -- Mã nguồn PicoClaw (`pkg/providers/` và `pkg/auth/`) +- Mã nguồn Piconomous (`pkg/providers/` và `pkg/auth/`) - Các gói thư viện chuẩn `crypto` và `net/http` ### 2. Các header bắt buộc cho lệnh gọi API @@ -594,7 +594,7 @@ Mỗi thông điệp SSE (`data: {...}`) được bao bọc trong trường `res ### Lưu trữ hồ sơ xác thực -Hồ sơ xác thực được lưu trữ trong `~/.picoclaw/auth.json`: +Hồ sơ xác thực được lưu trữ trong `~/.piconomous/auth.json`: ```json { @@ -614,9 +614,9 @@ Hồ sơ xác thực được lưu trữ trong `~/.picoclaw/auth.json`: --- -## Tạo nhà cung cấp mới trong PicoClaw +## Tạo nhà cung cấp mới trong Piconomous -Các nhà cung cấp PicoClaw được triển khai dưới dạng gói Go trong `pkg/providers/`. Để thêm nhà cung cấp mới: +Các nhà cung cấp Piconomous được triển khai dưới dạng gói Go trong `pkg/providers/`. Để thêm nhà cung cấp mới: ### Triển khai từng bước @@ -676,7 +676,7 @@ Thêm mục mặc định trong `pkg/config/defaults.go`: #### 5. Thêm hỗ trợ xác thực (Tùy chọn) -Nếu nhà cung cấp của bạn yêu cầu OAuth hoặc xác thực đặc biệt, thêm case vào `cmd/picoclaw/internal/auth/helpers.go`: +Nếu nhà cung cấp của bạn yêu cầu OAuth hoặc xác thực đặc biệt, thêm case vào `cmd/piconomous/internal/auth/helpers.go`: ```go case "your-provider": @@ -706,26 +706,26 @@ case "your-provider": ```bash # Xác thực với nhà cung cấp -picoclaw auth login --provider your-provider +piconomous auth login --provider your-provider # Liệt kê mô hình (cho Antigravity) -picoclaw auth models +piconomous auth models # Khởi động gateway -picoclaw gateway +piconomous gateway # Chạy agent với mô hình cụ thể -picoclaw agent -m "Hello" --model your-model +piconomous agent -m "Hello" --model your-model ``` ### Biến môi trường cho kiểm thử ```bash # Ghi đè mô hình mặc định -export PICOCLAW_AGENTS_DEFAULTS_MODEL=your-model +export PICONOMOUS_AGENTS_DEFAULTS_MODEL=your-model # Ghi đè cài đặt nhà cung cấp -export PICOCLAW_MODEL_LIST='[{"model_name":"your-model","model":"your-provider/model-name","api_key":"..."}]' +export PICONOMOUS_MODEL_LIST='[{"model_name":"your-model","model":"your-provider/model-name","api_key":"..."}]' ``` --- @@ -735,10 +735,10 @@ export PICOCLAW_MODEL_LIST='[{"model_name":"your-model","model":"your-provider/m - **File nguồn:** - `pkg/providers/antigravity_provider.go` - Triển khai nhà cung cấp Antigravity - `pkg/auth/oauth.go` - Triển khai luồng OAuth - - `pkg/auth/store.go` - Lưu trữ thông tin xác thực (`~/.picoclaw/auth.json`) + - `pkg/auth/store.go` - Lưu trữ thông tin xác thực (`~/.piconomous/auth.json`) - `pkg/providers/factory.go` - Factory nhà cung cấp và định tuyến giao thức - `pkg/providers/types.go` - Định nghĩa interface nhà cung cấp - - `cmd/picoclaw/internal/auth/helpers.go` - Lệnh CLI xác thực + - `cmd/piconomous/internal/auth/helpers.go` - Lệnh CLI xác thực - **Tài liệu:** - `docs/ANTIGRAVITY_USAGE.md` - Hướng dẫn sử dụng Antigravity @@ -792,7 +792,7 @@ Một số mô hình có thể xuất hiện trong danh sách mô hình khả d ## Khắc phục sự cố ### "Token expired" (Token đã hết hạn) -- Làm mới token OAuth: `picoclaw auth login --provider antigravity` +- Làm mới token OAuth: `piconomous auth login --provider antigravity` ### "Gemini for Google Cloud is not enabled" (Gemini for Google Cloud chưa được bật) - Bật API trong Google Cloud Console của bạn @@ -803,5 +803,5 @@ Một số mô hình có thể xuất hiện trong danh sách mô hình khả d ### Mô hình không xuất hiện trong danh sách - Xác minh xác thực OAuth đã hoàn tất thành công -- Kiểm tra lưu trữ hồ sơ xác thực: `~/.picoclaw/auth.json` -- Chạy lại `picoclaw auth login --provider antigravity` +- Kiểm tra lưu trữ hồ sơ xác thực: `~/.piconomous/auth.json` +- Chạy lại `piconomous auth login --provider antigravity` diff --git a/docs/vi/ANTIGRAVITY_USAGE.md b/docs/vi/ANTIGRAVITY_USAGE.md index 4a696f770..449d658b0 100644 --- a/docs/vi/ANTIGRAVITY_USAGE.md +++ b/docs/vi/ANTIGRAVITY_USAGE.md @@ -1,8 +1,8 @@ > Quay lại [README](../../README.vi.md) -# Sử dụng nhà cung cấp Antigravity trong PicoClaw +# Sử dụng nhà cung cấp Antigravity trong Piconomous -Hướng dẫn này giải thích cách thiết lập và sử dụng nhà cung cấp **Antigravity** (Google Cloud Code Assist) trong PicoClaw. +Hướng dẫn này giải thích cách thiết lập và sử dụng nhà cung cấp **Antigravity** (Google Cloud Code Assist) trong Piconomous. ## Điều kiện tiên quyết @@ -14,7 +14,7 @@ Hướng dẫn này giải thích cách thiết lập và sử dụng nhà cung Để xác thực với Antigravity, chạy lệnh sau: ```bash -picoclaw auth login --provider antigravity +piconomous auth login --provider antigravity ``` ### Xác thực thủ công (Headless/VPS) @@ -24,9 +24,9 @@ Nếu bạn đang chạy trên máy chủ (Coolify/Docker) và không thể truy 3. Hoàn tất đăng nhập. 4. Trình duyệt của bạn sẽ chuyển hướng đến URL `localhost:51121` (trang sẽ không tải được). 5. **Sao chép URL cuối cùng đó** từ thanh địa chỉ trình duyệt. -6. **Dán nó vào terminal** nơi PicoClaw đang chờ. +6. **Dán nó vào terminal** nơi Piconomous đang chờ. -PicoClaw sẽ tự động trích xuất mã ủy quyền và hoàn tất quy trình. +Piconomous sẽ tự động trích xuất mã ủy quyền và hoàn tất quy trình. ## 2. Quản lý mô hình @@ -34,15 +34,15 @@ PicoClaw sẽ tự động trích xuất mã ủy quyền và hoàn tất quy tr Để xem dự án của bạn có quyền truy cập vào những mô hình nào và kiểm tra hạn mức của chúng: ```bash -picoclaw auth models +piconomous auth models ``` ### Chuyển đổi mô hình -Bạn có thể thay đổi mô hình mặc định trong `~/.picoclaw/config.json` hoặc ghi đè qua CLI: +Bạn có thể thay đổi mô hình mặc định trong `~/.piconomous/config.json` hoặc ghi đè qua CLI: ```bash # Ghi đè cho một lệnh duy nhất -picoclaw agent -m "Hello" --model claude-opus-4-6-thinking +piconomous agent -m "Hello" --model claude-opus-4-6-thinking ``` ## 3. Sử dụng thực tế (Coolify/Docker) @@ -50,19 +50,19 @@ picoclaw agent -m "Hello" --model claude-opus-4-6-thinking Nếu bạn đang triển khai qua Coolify hoặc Docker, hãy làm theo các bước sau để kiểm tra: 1. **Biến môi trường**: - * `PICOCLAW_AGENTS_DEFAULTS_MODEL=gemini-flash` + * `PICONOMOUS_AGENTS_DEFAULTS_MODEL=gemini-flash` 2. **Lưu trữ xác thực**: Nếu bạn đã đăng nhập cục bộ, bạn có thể sao chép thông tin xác thực lên máy chủ: ```bash - scp ~/.picoclaw/auth.json user@your-server:~/.picoclaw/ + scp ~/.piconomous/auth.json user@your-server:~/.piconomous/ ``` *Hoặc*, chạy lệnh `auth login` một lần trên máy chủ nếu bạn có quyền truy cập terminal. ## 4. Khắc phục sự cố * **Phản hồi trống**: Nếu một mô hình trả về phản hồi trống, nó có thể bị hạn chế cho dự án của bạn. Hãy thử `gemini-3-flash` hoặc `claude-opus-4-6-thinking`. -* **429 Giới hạn tốc độ**: Antigravity có hạn mức nghiêm ngặt. PicoClaw sẽ hiển thị "thời gian đặt lại" trong thông báo lỗi nếu bạn đạt đến giới hạn. -* **404 Không tìm thấy**: Đảm bảo bạn đang sử dụng ID mô hình từ danh sách `picoclaw auth models`. Sử dụng ID ngắn (ví dụ: `gemini-3-flash`) thay vì đường dẫn đầy đủ. +* **429 Giới hạn tốc độ**: Antigravity có hạn mức nghiêm ngặt. Piconomous sẽ hiển thị "thời gian đặt lại" trong thông báo lỗi nếu bạn đạt đến giới hạn. +* **404 Không tìm thấy**: Đảm bảo bạn đang sử dụng ID mô hình từ danh sách `piconomous auth models`. Sử dụng ID ngắn (ví dụ: `gemini-3-flash`) thay vì đường dẫn đầy đủ. ## 5. Tóm tắt các mô hình hoạt động tốt diff --git a/docs/vi/chat-apps.md b/docs/vi/chat-apps.md index 3680fed69..60496555e 100644 --- a/docs/vi/chat-apps.md +++ b/docs/vi/chat-apps.md @@ -4,7 +4,7 @@ ## 💬 Ứng Dụng Chat -Trò chuyện với picoclaw của bạn qua Telegram, Discord, WhatsApp, Matrix, QQ, DingTalk, LINE, WeCom, Feishu, Slack, IRC, OneBot hoặc MaixCam +Trò chuyện với piconomous của bạn qua Telegram, Discord, WhatsApp, Matrix, QQ, DingTalk, LINE, WeCom, Feishu, Slack, IRC, OneBot hoặc MaixCam > **Lưu ý**: Tất cả các kênh dựa trên webhook (LINE, WeCom, v.v.) được phục vụ trên một máy chủ HTTP Gateway chung (`gateway.host`:`gateway.port`, mặc định `127.0.0.1:18790`). Không có port riêng cho từng kênh. Lưu ý: Feishu sử dụng chế độ WebSocket/SDK và không sử dụng máy chủ HTTP webhook chung. @@ -23,7 +23,7 @@ Trò chuyện với picoclaw của bạn qua Telegram, Discord, WhatsApp, Matrix | **IRC** | ⭐⭐ Trung bình | Máy chủ + cấu hình TLS | - | | **OneBot** | ⭐⭐ Trung bình | Tương thích NapCat/Go-CQHTTP, hệ sinh thái cộng đồng | [Tài liệu](../channels/onebot/README.vi.md) | | **MaixCam** | ⭐ Dễ | Kênh tích hợp phần cứng cho camera AI Sipeed | [Tài liệu](../channels/maixcam/README.vi.md) | -| **Pico** | ⭐ Dễ | Kênh giao thức bản địa PicoClaw | | +| **Pico** | ⭐ Dễ | Kênh giao thức bản địa Piconomous | |
Telegram (Khuyến nghị) @@ -53,15 +53,15 @@ Trò chuyện với picoclaw của bạn qua Telegram, Discord, WhatsApp, Matrix **3. Chạy** ```bash -picoclaw gateway +piconomous gateway ``` **4. Menu lệnh Telegram (tự động đăng ký khi khởi động)** -PicoClaw hiện lưu trữ định nghĩa lệnh trong một registry chung. Khi khởi động, Telegram sẽ tự động đăng ký các lệnh bot được hỗ trợ (ví dụ `/start`, `/help`, `/show`, `/list`) để menu lệnh và hành vi runtime luôn đồng bộ. +Piconomous hiện lưu trữ định nghĩa lệnh trong một registry chung. Khi khởi động, Telegram sẽ tự động đăng ký các lệnh bot được hỗ trợ (ví dụ `/start`, `/help`, `/show`, `/list`) để menu lệnh và hành vi runtime luôn đồng bộ. Đăng ký menu lệnh Telegram vẫn là UX khám phá cục bộ của kênh; thực thi lệnh chung được xử lý tập trung trong vòng lặp agent qua commands executor. -Nếu đăng ký lệnh thất bại (lỗi tạm thời mạng/API), kênh vẫn khởi động và PicoClaw thử lại đăng ký trong nền. +Nếu đăng ký lệnh thất bại (lỗi tạm thời mạng/API), kênh vẫn khởi động và Piconomous thử lại đăng ký trong nền.
@@ -133,7 +133,7 @@ Bạn cũng có thể kích hoạt bằng tiền tố từ khóa (ví dụ: `!bo **6. Chạy** ```bash -picoclaw gateway +piconomous gateway ``` @@ -141,7 +141,7 @@ picoclaw gateway
WhatsApp (native qua whatsmeow) -PicoClaw có thể kết nối WhatsApp theo hai cách: +Piconomous có thể kết nối WhatsApp theo hai cách: - **Native (khuyến nghị):** In-process sử dụng [whatsmeow](https://github.com/tulir/whatsmeow). Không cần bridge riêng. Đặt `"use_native": true` và để trống `bridge_url`. Lần chạy đầu tiên, quét mã QR bằng WhatsApp (Thiết bị liên kết). Phiên được lưu trong workspace (ví dụ: `workspace/whatsapp/`). Kênh native là **tùy chọn** để giữ binary mặc định nhỏ; build với `-tags whatsapp_native` (ví dụ: `make build-whatsapp-native` hoặc `go build -tags whatsapp_native ./cmd/...`). - **Bridge:** Kết nối đến bridge WebSocket bên ngoài. Đặt `bridge_url` (ví dụ: `ws://localhost:3001`) và giữ `use_native` là false. @@ -161,7 +161,7 @@ PicoClaw có thể kết nối WhatsApp theo hai cách: } ``` -Nếu `session_store_path` trống, phiên được lưu tại `/whatsapp/`. Chạy `picoclaw gateway`; lần chạy đầu tiên, quét mã QR hiển thị trong terminal bằng WhatsApp → Thiết bị liên kết. +Nếu `session_store_path` trống, phiên được lưu tại `/whatsapp/`. Chạy `piconomous gateway`; lần chạy đầu tiên, quét mã QR hiển thị trong terminal bằng WhatsApp → Thiết bị liên kết.
@@ -174,7 +174,7 @@ QQ Open Platform cung cấp trang thiết lập một chạm cho bot tương th 1. Mở [QQ Bot Quick Start](https://q.qq.com/qqbot/openclaw/index.html) và quét mã QR để đăng nhập 2. Bot được tạo tự động — sao chép **App ID** và **App Secret** -3. Cấu hình PicoClaw: +3. Cấu hình Piconomous: ```json { @@ -189,7 +189,7 @@ QQ Open Platform cung cấp trang thiết lập một chạm cho bot tương th } ``` -4. Chạy `picoclaw gateway` và mở QQ để trò chuyện với bot của bạn +4. Chạy `piconomous gateway` và mở QQ để trò chuyện với bot của bạn > App Secret chỉ hiển thị một lần. Lưu ngay lập tức — xem lại sẽ buộc phải đặt lại. > @@ -202,7 +202,7 @@ Nếu bạn muốn tạo bot thủ công: * Đăng nhập tại [QQ Open Platform](https://q.qq.com/) để đăng ký làm nhà phát triển * Tạo bot QQ — tùy chỉnh avatar và tên * Sao chép **App ID** và **App Secret** từ cài đặt bot -* Cấu hình như trên và chạy `picoclaw gateway` +* Cấu hình như trên và chạy `piconomous gateway` @@ -235,7 +235,7 @@ Nếu bạn muốn tạo bot thủ công: **3. Chạy** ```bash -picoclaw gateway +piconomous gateway ``` @@ -256,7 +256,7 @@ Kênh tích hợp được thiết kế đặc biệt cho phần cứng camera A ``` ```bash -picoclaw gateway +piconomous gateway ``` @@ -289,7 +289,7 @@ picoclaw gateway **3. Chạy** ```bash -picoclaw gateway +piconomous gateway ``` Để xem đầy đủ các tùy chọn (`device_id`, `join_on_invite`, `group_trigger`, `placeholder`, `reasoning_channel_id`), xem [Hướng Dẫn Cấu Hình Kênh Matrix](../channels/matrix/README.md). @@ -337,7 +337,7 @@ Sau đó đặt Webhook URL trong LINE Developers Console thành `https://your-d **4. Chạy** ```bash -picoclaw gateway +piconomous gateway ``` > Trong chat nhóm, bot chỉ phản hồi khi được @mention. Phản hồi trích dẫn tin nhắn gốc. @@ -347,7 +347,7 @@ picoclaw gateway
WeCom (企业微信) -PicoClaw hỗ trợ ba loại tích hợp WeCom: +Piconomous hỗ trợ ba loại tích hợp WeCom: **Tùy chọn 1: WeCom Bot (Bot)** - Thiết lập dễ hơn, hỗ trợ chat nhóm **Tùy chọn 2: WeCom App (App Tùy chỉnh)** - Nhiều tính năng hơn, nhắn tin chủ động, chỉ chat riêng @@ -417,7 +417,7 @@ Xem [Hướng Dẫn Cấu Hình WeCom AI Bot](../channels/wecom/wecom_aibot/READ **4. Chạy** ```bash -picoclaw gateway +piconomous gateway ``` > **Lưu ý**: Callback webhook WeCom được phục vụ trên port Gateway (mặc định 18790). Sử dụng reverse proxy cho HTTPS. @@ -451,7 +451,7 @@ picoclaw gateway **3. Chạy** ```bash -picoclaw gateway +piconomous gateway ``` > **Lưu ý**: WeCom AI Bot sử dụng giao thức streaming pull — không lo timeout phản hồi. Tác vụ dài (>30 giây) tự động chuyển sang gửi qua `response_url` push. @@ -461,7 +461,7 @@ picoclaw gateway
Feishu (Lark) -PicoClaw kết nối với Feishu qua chế độ WebSocket/SDK — không cần URL webhook công khai hay máy chủ callback. +Piconomous kết nối với Feishu qua chế độ WebSocket/SDK — không cần URL webhook công khai hay máy chủ callback. **1. Tạo ứng dụng** @@ -490,7 +490,7 @@ Tùy chọn: `encrypt_key` và `verification_token` để mã hóa sự kiện ( **3. Chạy và trò chuyện** ```bash -picoclaw gateway +piconomous gateway ``` Mở Feishu, tìm tên bot của bạn và bắt đầu trò chuyện. Bạn cũng có thể thêm bot vào nhóm — sử dụng `group_trigger.mention_only: true` để chỉ phản hồi khi được @mention. @@ -527,7 +527,7 @@ Mở Feishu, tìm tên bot của bạn và bắt đầu trò chuyện. Bạn cũ **3. Chạy** ```bash -picoclaw gateway +piconomous gateway ```
@@ -544,7 +544,7 @@ picoclaw gateway "enabled": true, "server": "irc.libera.chat:6697", "tls": true, - "nick": "picoclaw-bot", + "nick": "piconomous-bot", "channels": ["#your-channel"], "password": "", "allow_from": [] @@ -558,7 +558,7 @@ Tùy chọn: `nickserv_password` để xác thực NickServ, `sasl_user`/`sasl_p **2. Chạy** ```bash -picoclaw gateway +piconomous gateway ``` Bot sẽ kết nối đến máy chủ IRC và tham gia các kênh đã chỉ định. @@ -568,7 +568,7 @@ Bot sẽ kết nối đến máy chủ IRC và tham gia các kênh đã chỉ đ
OneBot (QQ qua giao thức OneBot) -OneBot là giao thức mở cho bot QQ. PicoClaw kết nối với bất kỳ triển khai tương thích OneBot v11 nào (ví dụ: [Lagrange](https://github.com/LagrangeDev/Lagrange.Core), [NapCat](https://github.com/NapNeko/NapCatQQ)) qua WebSocket. +OneBot là giao thức mở cho bot QQ. Piconomous kết nối với bất kỳ triển khai tương thích OneBot v11 nào (ví dụ: [Lagrange](https://github.com/LagrangeDev/Lagrange.Core), [NapCat](https://github.com/NapNeko/NapCatQQ)) qua WebSocket. **1. Thiết lập triển khai OneBot** @@ -598,7 +598,7 @@ Cài đặt và chạy framework bot QQ tương thích OneBot v11. Bật máy ch **3. Chạy** ```bash -picoclaw gateway +piconomous gateway ```
@@ -619,7 +619,7 @@ Kênh tích hợp được thiết kế đặc biệt cho phần cứng camera A ``` ```bash -picoclaw gateway +piconomous gateway ```
diff --git a/docs/vi/configuration.md b/docs/vi/configuration.md index a21929359..a1e12f534 100644 --- a/docs/vi/configuration.md +++ b/docs/vi/configuration.md @@ -4,39 +4,39 @@ ## ⚙️ Cấu Hình -File cấu hình: `~/.picoclaw/config.json` +File cấu hình: `~/.piconomous/config.json` ### Biến Môi Trường -Bạn có thể ghi đè các đường dẫn mặc định bằng biến môi trường. Điều này hữu ích cho cài đặt portable, triển khai container, hoặc chạy picoclaw như dịch vụ hệ thống. Các biến này độc lập và kiểm soát các đường dẫn khác nhau. +Bạn có thể ghi đè các đường dẫn mặc định bằng biến môi trường. Điều này hữu ích cho cài đặt portable, triển khai container, hoặc chạy piconomous như dịch vụ hệ thống. Các biến này độc lập và kiểm soát các đường dẫn khác nhau. | Biến | Mô tả | Đường Dẫn Mặc Định | |-------------------|-----------------------------------------------------------------------------------------------------------------------------------------|---------------------------| -| `PICOCLAW_CONFIG` | Ghi đè đường dẫn đến file cấu hình. Chỉ định trực tiếp cho picoclaw file `config.json` nào cần tải, bỏ qua tất cả vị trí khác. | `~/.picoclaw/config.json` | -| `PICOCLAW_HOME` | Ghi đè thư mục gốc cho dữ liệu picoclaw. Thay đổi vị trí mặc định của `workspace` và các thư mục dữ liệu khác. | `~/.picoclaw` | +| `PICONOMOUS_CONFIG` | Ghi đè đường dẫn đến file cấu hình. Chỉ định trực tiếp cho piconomous file `config.json` nào cần tải, bỏ qua tất cả vị trí khác. | `~/.piconomous/config.json` | +| `PICONOMOUS_HOME` | Ghi đè thư mục gốc cho dữ liệu piconomous. Thay đổi vị trí mặc định của `workspace` và các thư mục dữ liệu khác. | `~/.piconomous` | **Ví dụ:** ```bash -# Chạy picoclaw với file cấu hình cụ thể +# Chạy piconomous với file cấu hình cụ thể # Đường dẫn workspace sẽ được đọc từ trong file cấu hình đó -PICOCLAW_CONFIG=/etc/picoclaw/production.json picoclaw gateway +PICONOMOUS_CONFIG=/etc/piconomous/production.json piconomous gateway -# Chạy picoclaw với tất cả dữ liệu lưu tại /opt/picoclaw -# Cấu hình sẽ được tải từ mặc định ~/.picoclaw/config.json -# Workspace sẽ được tạo tại /opt/picoclaw/workspace -PICOCLAW_HOME=/opt/picoclaw picoclaw agent +# Chạy piconomous với tất cả dữ liệu lưu tại /opt/piconomous +# Cấu hình sẽ được tải từ mặc định ~/.piconomous/config.json +# Workspace sẽ được tạo tại /opt/piconomous/workspace +PICONOMOUS_HOME=/opt/piconomous piconomous agent # Sử dụng cả hai cho thiết lập tùy chỉnh hoàn toàn -PICOCLAW_HOME=/srv/picoclaw PICOCLAW_CONFIG=/srv/picoclaw/main.json picoclaw gateway +PICONOMOUS_HOME=/srv/piconomous PICONOMOUS_CONFIG=/srv/piconomous/main.json piconomous gateway ``` ### Bố Cục Workspace -PicoClaw lưu trữ dữ liệu trong workspace đã cấu hình (mặc định: `~/.picoclaw/workspace`): +Piconomous lưu trữ dữ liệu trong workspace đã cấu hình (mặc định: `~/.piconomous/workspace`): ``` -~/.picoclaw/workspace/ +~/.piconomous/workspace/ ├── sessions/ # Phiên hội thoại và lịch sử ├── memory/ # Bộ nhớ dài hạn (MEMORY.md) ├── state/ # Trạng thái bền vững (kênh cuối, v.v.) @@ -55,14 +55,14 @@ PicoClaw lưu trữ dữ liệu trong workspace đã cấu hình (mặc định: Mặc định, skill được tải từ: -1. `~/.picoclaw/workspace/skills` (workspace) -2. `~/.picoclaw/skills` (global) +1. `~/.piconomous/workspace/skills` (workspace) +2. `~/.piconomous/skills` (global) 3. `<đường-dẫn-nhúng-khi-build>/skills` (tích hợp) Cho thiết lập nâng cao/test, bạn có thể ghi đè thư mục gốc skill builtin với: ```bash -export PICOCLAW_BUILTIN_SKILLS=/path/to/skills +export PICONOMOUS_BUILTIN_SKILLS=/path/to/skills ``` ### Chính Sách Thực Thi Lệnh Thống Nhất @@ -74,7 +74,7 @@ export PICOCLAW_BUILTIN_SKILLS=/path/to/skills ### 🔒 Sandbox Bảo Mật -PicoClaw chạy trong môi trường sandbox mặc định. Agent chỉ có thể truy cập file và thực thi lệnh trong workspace đã cấu hình. +Piconomous chạy trong môi trường sandbox mặc định. Agent chỉ có thể truy cập file và thực thi lệnh trong workspace đã cấu hình. #### Cấu Hình Mặc Định @@ -82,7 +82,7 @@ PicoClaw chạy trong môi trường sandbox mặc định. Agent chỉ có th { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "restrict_to_workspace": true } } @@ -91,7 +91,7 @@ PicoClaw chạy trong môi trường sandbox mặc định. Agent chỉ có th | Tùy chọn | Mặc định | Mô tả | | ----------------------- | ----------------------- | ----------------------------------------- | -| `workspace` | `~/.picoclaw/workspace` | Thư mục làm việc của agent | +| `workspace` | `~/.piconomous/workspace` | Thư mục làm việc của agent | | `restrict_to_workspace` | `true` | Giới hạn truy cập file/lệnh trong workspace | #### Công Cụ Được Bảo Vệ @@ -138,7 +138,7 @@ Ngay cả khi `restrict_to_workspace: false`, công cụ `exec` chặn các lệ #### Hạn Chế Đã Biết: Tiến Trình Con Từ Công Cụ Build -Guard bảo mật exec chỉ kiểm tra dòng lệnh mà PicoClaw khởi chạy trực tiếp. Nó không kiểm tra đệ quy các tiến trình con được tạo bởi công cụ phát triển được phép như `make`, `go run`, `cargo`, `npm run`, hoặc script build tùy chỉnh. +Guard bảo mật exec chỉ kiểm tra dòng lệnh mà Piconomous khởi chạy trực tiếp. Nó không kiểm tra đệ quy các tiến trình con được tạo bởi công cụ phát triển được phép như `make`, `go run`, `cargo`, `npm run`, hoặc script build tùy chỉnh. Điều này có nghĩa là lệnh cấp cao nhất vẫn có thể biên dịch hoặc khởi chạy binary khác sau khi vượt qua kiểm tra guard ban đầu. Trong thực tế, hãy coi script build, Makefile, script package, và binary được tạo như mã thực thi cần cùng mức độ review như lệnh shell trực tiếp. @@ -146,7 +146,7 @@ Cho môi trường rủi ro cao hơn: * Review script build trước khi thực thi. * Ưu tiên phê duyệt/review thủ công cho quy trình biên dịch và chạy. -* Chạy PicoClaw trong container hoặc VM nếu bạn cần cách ly mạnh hơn guard tích hợp. +* Chạy Piconomous trong container hoặc VM nếu bạn cần cách ly mạnh hơn guard tích hợp. #### Ví Dụ Lỗi @@ -179,7 +179,7 @@ Nếu bạn cần agent truy cập đường dẫn ngoài workspace: **Phương pháp 2: Biến môi trường** ```bash -export PICOCLAW_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACE=false +export PICONOMOUS_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACE=false ``` > ⚠️ **Cảnh báo**: Tắt giới hạn này cho phép agent truy cập bất kỳ đường dẫn nào trên hệ thống. Chỉ sử dụng cẩn thận trong môi trường được kiểm soát. @@ -198,7 +198,7 @@ Tất cả đường dẫn chia sẻ cùng giới hạn workspace — không có ### Heartbeat (Tác Vụ Định Kỳ) -PicoClaw có thể thực hiện tác vụ định kỳ tự động. Tạo file `HEARTBEAT.md` trong workspace: +Piconomous có thể thực hiện tác vụ định kỳ tự động. Tạo file `HEARTBEAT.md` trong workspace: ```markdown # Tác Vụ Định Kỳ diff --git a/docs/vi/credential_encryption.md b/docs/vi/credential_encryption.md index 9ba24588b..6a4e6c721 100644 --- a/docs/vi/credential_encryption.md +++ b/docs/vi/credential_encryption.md @@ -2,7 +2,7 @@ # Mã hóa Thông tin Xác thực -PicoClaw hỗ trợ mã hóa các giá trị `api_key` trong các mục cấu hình `model_list`. +Piconomous hỗ trợ mã hóa các giá trị `api_key` trong các mục cấu hình `model_list`. Các khóa đã mã hóa được lưu trữ dưới dạng chuỗi `enc://` và được giải mã tự động khi khởi động. --- @@ -12,12 +12,12 @@ Các khóa đã mã hóa được lưu trữ dưới dạng chuỗi `enc://` | Giải mã khi khởi động bằng `PICOCLAW_KEY_PASSPHRASE` | +| Đã mã hóa | `enc://` | Giải mã khi khởi động bằng `PICONOMOUS_KEY_PASSPHRASE` | | Trống | `""` | Truyền qua không thay đổi (dùng với `auth_method: oauth`) | --- @@ -62,7 +62,7 @@ Mã hóa sử dụng **HKDF-SHA256** với khóa riêng SSH làm yếu tố th ``` sshHash = SHA256(ssh_private_key_file_bytes) ikm = HMAC-SHA256(key=sshHash, message=passphrase) -aes_key = HKDF-SHA256(ikm, salt, info="picoclaw-credential-v1", 32 bytes) +aes_key = HKDF-SHA256(ikm, salt, info="piconomous-credential-v1", 32 bytes) ``` ### Mã hóa @@ -99,7 +99,7 @@ Thẻ xác thực GCM được tự động nối vào bản mã. Bất kỳ s Khi khóa riêng SSH được cung cấp, việc phá vỡ mã hóa yêu cầu **cả hai**: -1. **Cụm mật khẩu** (`PICOCLAW_KEY_PASSPHRASE`) +1. **Cụm mật khẩu** (`PICONOMOUS_KEY_PASSPHRASE`) 2. **Tệp khóa riêng SSH** Điều này có nghĩa là chỉ rò rỉ tệp cấu hình không đủ để khôi phục khóa API, ngay cả khi cụm mật khẩu yếu. Khóa SSH đóng góp 256 bit entropy (Ed25519) bất kể độ mạnh của cụm mật khẩu. @@ -119,33 +119,33 @@ Khi khóa riêng SSH được cung cấp, việc phá vỡ mã hóa yêu cầu * | Biến | Bắt buộc | Mô tả | |------|----------|-------| -| `PICOCLAW_KEY_PASSPHRASE` | Có (cho `enc://`) | Cụm mật khẩu dùng để dẫn xuất khóa | -| `PICOCLAW_SSH_KEY_PATH` | Không | Đường dẫn đến khóa riêng SSH. Nếu không đặt, tự động phát hiện từ `~/.ssh/picoclaw_ed25519.key` | +| `PICONOMOUS_KEY_PASSPHRASE` | Có (cho `enc://`) | Cụm mật khẩu dùng để dẫn xuất khóa | +| `PICONOMOUS_SSH_KEY_PATH` | Không | Đường dẫn đến khóa riêng SSH. Nếu không đặt, tự động phát hiện từ `~/.ssh/piconomous_ed25519.key` | ### Tự động Phát hiện Khóa SSH -Nếu `PICOCLAW_SSH_KEY_PATH` không được đặt, PicoClaw tìm khóa chuyên dụng: +Nếu `PICONOMOUS_SSH_KEY_PATH` không được đặt, Piconomous tìm khóa chuyên dụng: ``` -~/.ssh/picoclaw_ed25519.key +~/.ssh/piconomous_ed25519.key ``` Tệp chuyên dụng này tránh xung đột với các khóa SSH hiện có của người dùng. -Chạy `picoclaw onboard` để tạo tự động. +Chạy `piconomous onboard` để tạo tự động. `os.UserHomeDir()` được sử dụng để phân giải thư mục home đa nền tảng (đọc `USERPROFILE` trên Windows, `HOME` trên Unix/macOS). -> **Lưu ý:** Tệp khóa SSH là bắt buộc cho mã hóa thông tin xác thực. Nếu không tìm thấy khóa và `PICOCLAW_SSH_KEY_PATH` không được đặt, mã hóa/giải mã sẽ thất bại. Chạy `picoclaw onboard` để tạo khóa tự động. +> **Lưu ý:** Tệp khóa SSH là bắt buộc cho mã hóa thông tin xác thực. Nếu không tìm thấy khóa và `PICONOMOUS_SSH_KEY_PATH` không được đặt, mã hóa/giải mã sẽ thất bại. Chạy `piconomous onboard` để tạo khóa tự động. --- ## Di chuyển -Vì tài liệu bí mật duy nhất là `PICOCLAW_KEY_PASSPHRASE` và tệp khóa riêng SSH, việc di chuyển rất đơn giản: +Vì tài liệu bí mật duy nhất là `PICONOMOUS_KEY_PASSPHRASE` và tệp khóa riêng SSH, việc di chuyển rất đơn giản: 1. Sao chép tệp cấu hình sang máy mới. -2. Đặt `PICOCLAW_KEY_PASSPHRASE` với cùng giá trị. -3. Sao chép tệp khóa riêng SSH đến cùng đường dẫn (hoặc đặt `PICOCLAW_SSH_KEY_PATH` đến vị trí mới). +2. Đặt `PICONOMOUS_KEY_PASSPHRASE` với cùng giá trị. +3. Sao chép tệp khóa riêng SSH đến cùng đường dẫn (hoặc đặt `PICONOMOUS_SSH_KEY_PATH` đến vị trí mới). Không cần mã hóa lại. @@ -153,7 +153,7 @@ Không cần mã hóa lại. ## Lưu ý về Bảo mật -- **Cả cụm mật khẩu và khóa SSH đều bắt buộc.** Khóa SSH đóng vai trò yếu tố thứ hai — không có nó, mã hóa/giải mã sẽ thất bại. Chạy `picoclaw onboard` để tạo khóa nếu chưa tồn tại. -- **Khóa SSH chỉ đọc khi chạy.** PicoClaw không bao giờ ghi hoặc sửa đổi tệp khóa SSH. +- **Cả cụm mật khẩu và khóa SSH đều bắt buộc.** Khóa SSH đóng vai trò yếu tố thứ hai — không có nó, mã hóa/giải mã sẽ thất bại. Chạy `piconomous onboard` để tạo khóa nếu chưa tồn tại. +- **Khóa SSH chỉ đọc khi chạy.** Piconomous không bao giờ ghi hoặc sửa đổi tệp khóa SSH. - **Khóa văn bản thuần vẫn được hỗ trợ.** Các cấu hình hiện có không dùng `enc://` không bị ảnh hưởng. -- **Định dạng `enc://` được quản lý phiên bản** thông qua trường `info` của HKDF (`picoclaw-credential-v1`), cho phép nâng cấp thuật toán trong tương lai mà không làm hỏng các giá trị đã mã hóa hiện có. +- **Định dạng `enc://` được quản lý phiên bản** thông qua trường `info` của HKDF (`piconomous-credential-v1`), cho phép nâng cấp thuật toán trong tương lai mà không làm hỏng các giá trị đã mã hóa hiện có. diff --git a/docs/vi/debug.md b/docs/vi/debug.md index 69583d486..7ee917175 100644 --- a/docs/vi/debug.md +++ b/docs/vi/debug.md @@ -1,31 +1,31 @@ -# Gỡ lỗi PicoClaw +# Gỡ lỗi Piconomous > Quay lại [README](../../README.vi.md) -PicoClaw thực hiện nhiều tương tác phức tạp ở hậu trường cho mỗi yêu cầu nhận được — từ định tuyến tin nhắn và đánh giá độ phức tạp, đến thực thi công cụ và thích ứng với lỗi mô hình. Khả năng xem chính xác những gì đang xảy ra là rất quan trọng, không chỉ để khắc phục các sự cố tiềm ẩn, mà còn để thực sự hiểu cách agent hoạt động. +Piconomous thực hiện nhiều tương tác phức tạp ở hậu trường cho mỗi yêu cầu nhận được — từ định tuyến tin nhắn và đánh giá độ phức tạp, đến thực thi công cụ và thích ứng với lỗi mô hình. Khả năng xem chính xác những gì đang xảy ra là rất quan trọng, không chỉ để khắc phục các sự cố tiềm ẩn, mà còn để thực sự hiểu cách agent hoạt động. -## Khởi động PicoClaw ở chế độ gỡ lỗi +## Khởi động Piconomous ở chế độ gỡ lỗi -Để nhận thông tin chi tiết về những gì agent đang thực hiện (yêu cầu LLM, lệnh gọi công cụ, định tuyến tin nhắn), bạn có thể khởi động gateway PicoClaw với cờ gỡ lỗi: +Để nhận thông tin chi tiết về những gì agent đang thực hiện (yêu cầu LLM, lệnh gọi công cụ, định tuyến tin nhắn), bạn có thể khởi động gateway Piconomous với cờ gỡ lỗi: ```bash -picoclaw gateway --debug +piconomous gateway --debug # or -picoclaw gateway -d +piconomous gateway -d ``` Ở chế độ này, hệ thống sẽ định dạng log chi tiết và hiển thị bản xem trước của prompt hệ thống và kết quả thực thi công cụ. ## Tắt cắt ngắn log (log đầy đủ) -Theo mặc định, PicoClaw cắt ngắn các chuỗi rất dài (như *Prompt Hệ thống* hoặc kết quả JSON lớn) trong log gỡ lỗi để giữ cho console dễ đọc. +Theo mặc định, Piconomous cắt ngắn các chuỗi rất dài (như *Prompt Hệ thống* hoặc kết quả JSON lớn) trong log gỡ lỗi để giữ cho console dễ đọc. Nếu bạn cần kiểm tra đầu ra đầy đủ của một lệnh hoặc payload chính xác được gửi đến mô hình LLM, bạn có thể sử dụng cờ `--no-truncate`. **Lưu ý:** Cờ này *chỉ* hoạt động khi kết hợp với chế độ `--debug`. ```bash -picoclaw gateway --debug --no-truncate +piconomous gateway --debug --no-truncate ``` diff --git a/docs/vi/docker.md b/docs/vi/docker.md index eddc20a75..25ac0227f 100644 --- a/docs/vi/docker.md +++ b/docs/vi/docker.md @@ -4,12 +4,12 @@ ## 🐳 Docker Compose -Bạn cũng có thể chạy PicoClaw bằng Docker Compose mà không cần cài đặt gì trên máy. +Bạn cũng có thể chạy Piconomous bằng Docker Compose mà không cần cài đặt gì trên máy. ```bash # 1. Clone repo này -git clone https://github.com/sipeed/picoclaw.git -cd picoclaw +git clone https://github.com/sipeed/piconomous.git +cd piconomous # 2. Lần chạy đầu tiên — tự động tạo docker/data/config.json rồi thoát # (chỉ kích hoạt khi cả config.json và workspace/ đều không tồn tại) @@ -24,11 +24,11 @@ docker compose -f docker/docker-compose.yml --profile gateway up -d ``` > [!TIP] -> **Người dùng Docker**: Mặc định, Gateway lắng nghe trên `127.0.0.1`, không thể truy cập từ host. Nếu bạn cần truy cập các health endpoint hoặc mở port, hãy đặt `PICOCLAW_GATEWAY_HOST=0.0.0.0` trong môi trường hoặc cập nhật `config.json`. +> **Người dùng Docker**: Mặc định, Gateway lắng nghe trên `127.0.0.1`, không thể truy cập từ host. Nếu bạn cần truy cập các health endpoint hoặc mở port, hãy đặt `PICONOMOUS_GATEWAY_HOST=0.0.0.0` trong môi trường hoặc cập nhật `config.json`. ```bash # 5. Kiểm tra log -docker compose -f docker/docker-compose.yml logs -f picoclaw-gateway +docker compose -f docker/docker-compose.yml logs -f piconomous-gateway # 6. Dừng docker compose -f docker/docker-compose.yml --profile gateway down @@ -36,7 +36,7 @@ docker compose -f docker/docker-compose.yml --profile gateway down ### Chế Độ Launcher (Web Console) -Image `launcher` bao gồm cả ba binary (`picoclaw`, `picoclaw-launcher`, `picoclaw-launcher-tui`) và khởi động web console mặc định, cung cấp giao diện trình duyệt để cấu hình và chat. +Image `launcher` bao gồm cả ba binary (`piconomous`, `piconomous-launcher`, `piconomous-launcher-tui`) và khởi động web console mặc định, cung cấp giao diện trình duyệt để cấu hình và chat. ```bash docker compose -f docker/docker-compose.yml --profile launcher up -d @@ -51,10 +51,10 @@ Mở http://localhost:18800 trong trình duyệt. Launcher tự động quản l ```bash # Đặt câu hỏi -docker compose -f docker/docker-compose.yml run --rm picoclaw-agent -m "What is 2+2?" +docker compose -f docker/docker-compose.yml run --rm piconomous-agent -m "What is 2+2?" # Chế độ tương tác -docker compose -f docker/docker-compose.yml run --rm picoclaw-agent +docker compose -f docker/docker-compose.yml run --rm piconomous-agent ``` ### Cập Nhật @@ -67,21 +67,21 @@ docker compose -f docker/docker-compose.yml --profile gateway up -d ### 🚀 Bắt Đầu Nhanh > [!TIP] -> Cấu hình API Key trong `~/.picoclaw/config.json`. Lấy API Key: [Volcengine (CodingPlan)](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) (LLM) · [OpenRouter](https://openrouter.ai/keys) (LLM) · [Zhipu](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys) (LLM). Tìm kiếm web là tùy chọn — lấy miễn phí [Tavily API](https://tavily.com) (1000 truy vấn miễn phí/tháng) hoặc [Brave Search API](https://brave.com/search/api) (2000 truy vấn miễn phí/tháng). +> Cấu hình API Key trong `~/.piconomous/config.json`. Lấy API Key: [Volcengine (CodingPlan)](https://www.volcengine.com/activity/codingplan?utm_campaign=Piconomous&utm_content=Piconomous&utm_medium=devrel&utm_source=OWO&utm_term=Piconomous) (LLM) · [OpenRouter](https://openrouter.ai/keys) (LLM) · [Zhipu](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys) (LLM). Tìm kiếm web là tùy chọn — lấy miễn phí [Tavily API](https://tavily.com) (1000 truy vấn miễn phí/tháng) hoặc [Brave Search API](https://brave.com/search/api) (2000 truy vấn miễn phí/tháng). **1. Khởi tạo** ```bash -picoclaw onboard +piconomous onboard ``` -**2. Cấu hình** (`~/.picoclaw/config.json`) +**2. Cấu hình** (`~/.piconomous/config.json`) ```json { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "model_name": "gpt-5.4", "max_tokens": 8192, "temperature": 0.7, @@ -142,7 +142,7 @@ picoclaw onboard ``` > **Mới**: Định dạng cấu hình `model_list` cho phép thêm provider mà không cần thay đổi code. Xem [Cấu Hình Mô Hình](#cấu-hình-mô-hình-model_list) để biết chi tiết. -> `request_timeout` là tùy chọn và tính bằng giây. Nếu bỏ qua hoặc đặt `<= 0`, PicoClaw sử dụng timeout mặc định (120s). +> `request_timeout` là tùy chọn và tính bằng giây. Nếu bỏ qua hoặc đặt `<= 0`, Piconomous sử dụng timeout mặc định (120s). **3. Lấy API Key** @@ -159,7 +159,7 @@ picoclaw onboard **4. Chat** ```bash -picoclaw agent -m "What is 2+2?" +piconomous agent -m "What is 2+2?" ``` Vậy là xong! Bạn có một trợ lý AI hoạt động trong 2 phút. diff --git a/docs/vi/hardware-compatibility.md b/docs/vi/hardware-compatibility.md index 8315c049e..136668c37 100644 --- a/docs/vi/hardware-compatibility.md +++ b/docs/vi/hardware-compatibility.md @@ -1,8 +1,8 @@ > Quay lại [README](../../README.vi.md) -# 🖥️ PicoClaw Danh sách tương thích phần cứng +# 🖥️ Piconomous Danh sách tương thích phần cứng -PicoClaw chạy được trên hầu hết mọi thiết bị Linux. Trang này ghi nhận các chip, sản phẩm và bo mạch phát triển đã được xác minh. +Piconomous chạy được trên hầu hết mọi thiết bị Linux. Trang này ghi nhận các chip, sản phẩm và bo mạch phát triển đã được xác minh. **Phần cứng của bạn chưa có trong danh sách?** Gửi PR để thêm vào! Các nhà sản xuất phần cứng được hoan nghênh đóng góp và đồng quảng bá. @@ -59,7 +59,7 @@ PicoClaw chạy được trên hầu hết mọi thiết bị Linux. Trang này ## 2. Sản phẩm đã xác minh (theo ngày phát hành) -Sản phẩm tiêu dùng, router và thiết bị công nghiệp đã được kiểm thử với PicoClaw. +Sản phẩm tiêu dùng, router và thiết bị công nghiệp đã được kiểm thử với Piconomous. | Năm | Sản phẩm | Kiến trúc | SoC | RAM | Danh mục | |-----|----------|-----------|-----|-----|----------| @@ -97,7 +97,7 @@ Sản phẩm tiêu dùng, router và thiết bị công nghiệp đã được k ### Điện thoại Android (qua Termux) -Bất kỳ điện thoại Android ARM64 nào (2015+) với 1GB+ RAM. Cài đặt [Termux](https://github.com/termux/termux-app), sử dụng `proot` để chạy PicoClaw. +Bất kỳ điện thoại Android ARM64 nào (2015+) với 1GB+ RAM. Cài đặt [Termux](https://github.com/termux/termux-app), sử dụng `proot` để chạy Piconomous. > Xem [README: Chạy trên điện thoại Android cũ](../../README.vi.md#-run-on-old-android-phones) để biết hướng dẫn cài đặt. @@ -130,14 +130,14 @@ Bất kỳ điện thoại Android ARM64 nào (2015+) với 1GB+ RAM. Cài đặ ```bash # 1. Tải xuống cho kiến trúc của bạn -wget https://github.com/sipeed/picoclaw/releases/latest/download/picoclaw_Linux_arm64.tar.gz -tar xzf picoclaw_Linux_arm64.tar.gz +wget https://github.com/sipeed/piconomous/releases/latest/download/piconomous_Linux_arm64.tar.gz +tar xzf piconomous_Linux_arm64.tar.gz # 2. Khởi tạo -./picoclaw onboard +./piconomous onboard # 3. Kiểm thử -./picoclaw agent -m "Hello, what board am I running on?" +./piconomous agent -m "Hello, what board am I running on?" ``` Các bản dựng có sẵn: `linux-amd64`, `linux-arm64`, `linux-arm`, `linux-riscv64`, `linux-loong64`, `linux-mipsle` diff --git a/docs/vi/providers.md b/docs/vi/providers.md index 09b51c56b..eba5d3461 100644 --- a/docs/vi/providers.md +++ b/docs/vi/providers.md @@ -11,7 +11,7 @@ | ------------ | --------------------------------------- | ------------------------------------------------------------ | | `gemini` | LLM (Gemini direct) | [aistudio.google.com](https://aistudio.google.com) | | `zhipu` | LLM (Zhipu direct) | [bigmodel.cn](https://bigmodel.cn) | -| `volcengine` | LLM(Volcengine direct) | [volcengine.com](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) | +| `volcengine` | LLM(Volcengine direct) | [volcengine.com](https://www.volcengine.com/activity/codingplan?utm_campaign=Piconomous&utm_content=Piconomous&utm_medium=devrel&utm_source=OWO&utm_term=Piconomous) | | `openrouter` | LLM (recommended, access to all models) | [openrouter.ai](https://openrouter.ai) | | `anthropic` | LLM (Claude direct) | [console.anthropic.com](https://console.anthropic.com) | | `openai` | LLM (GPT direct) | [platform.openai.com](https://platform.openai.com) | @@ -29,7 +29,7 @@ ### Cấu Hình Mô Hình (model_list) -> **Có gì mới?** PicoClaw hiện sử dụng cách tiếp cận cấu hình **tập trung vào mô hình**. Chỉ cần chỉ định định dạng `vendor/model` (ví dụ: `zhipu/glm-4.7`) để thêm provider mới — **không cần thay đổi code!** +> **Có gì mới?** Piconomous hiện sử dụng cách tiếp cận cấu hình **tập trung vào mô hình**. Chỉ cần chỉ định định dạng `vendor/model` (ví dụ: `zhipu/glm-4.7`) để thêm provider mới — **không cần thay đổi code!** Thiết kế này cũng cho phép **hỗ trợ đa agent** với lựa chọn provider linh hoạt: @@ -56,7 +56,7 @@ Thiết kế này cũng cho phép **hỗ trợ đa agent** với lựa chọn pr | **LiteLLM Proxy** | `litellm/` | `http://localhost:4000/v1` | OpenAI | Your LiteLLM proxy key | | **VLLM** | `vllm/` | `http://localhost:8000/v1` | OpenAI | Local | | **Cerebras** | `cerebras/` | `https://api.cerebras.ai/v1` | OpenAI | [Get Key](https://cerebras.ai) | -| **VolcEngine (Doubao)** | `volcengine/` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [Get Key](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) | +| **VolcEngine (Doubao)** | `volcengine/` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [Get Key](https://www.volcengine.com/activity/codingplan?utm_campaign=Piconomous&utm_content=Piconomous&utm_medium=devrel&utm_source=OWO&utm_term=Piconomous) | | **神算云** | `shengsuanyun/` | `https://router.shengsuanyun.com/api/v1` | OpenAI | - | | **BytePlus** | `byteplus/` | `https://ark.ap-southeast.bytepluses.com/api/v3` | OpenAI | [Get Key](https://www.byteplus.com) | | **Vivgrid** | `vivgrid/` | `https://api.vivgrid.com/v1` | OpenAI | [Get Key](https://vivgrid.com) | @@ -151,7 +151,7 @@ Thiết kế này cũng cho phép **hỗ trợ đa agent** với lựa chọn pr } ``` -> Chạy `picoclaw auth login --provider anthropic` để dán API token. +> Chạy `piconomous auth login --provider anthropic` để dán API token. **Anthropic Messages API (định dạng native)** @@ -205,11 +205,11 @@ Thiết kế này cũng cho phép **hỗ trợ đa agent** với lựa chọn pr } ``` -PicoClaw chỉ loại bỏ tiền tố ngoài `litellm/` trước khi gửi yêu cầu, nên alias proxy như `litellm/lite-gpt4` gửi `lite-gpt4`, trong khi `litellm/openai/gpt-4o` gửi `openai/gpt-4o`. +Piconomous chỉ loại bỏ tiền tố ngoài `litellm/` trước khi gửi yêu cầu, nên alias proxy như `litellm/lite-gpt4` gửi `lite-gpt4`, trong khi `litellm/openai/gpt-4o` gửi `openai/gpt-4o`. #### Cân Bằng Tải -Cấu hình nhiều endpoint cho cùng tên mô hình — PicoClaw sẽ tự động round-robin giữa chúng: +Cấu hình nhiều endpoint cho cùng tên mô hình — Piconomous sẽ tự động round-robin giữa chúng: ```json { @@ -276,7 +276,7 @@ Cấu hình `providers` cũ đã **ngừng hỗ trợ** nhưng vẫn được h ### Kiến Trúc Provider -PicoClaw định tuyến provider theo họ giao thức: +Piconomous định tuyến provider theo họ giao thức: - Giao thức tương thích OpenAI: OpenRouter, gateway tương thích OpenAI, Groq, Zhipu, và endpoint kiểu vLLM. - Giao thức Anthropic: Hành vi API native của Claude. @@ -297,7 +297,7 @@ PicoClaw định tuyến provider theo họ giao thức: { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "model_name": "glm-4.7", "max_tokens": 8192, "temperature": 0.7, @@ -316,7 +316,7 @@ PicoClaw định tuyến provider theo họ giao thức: **3. Chạy** ```bash -picoclaw agent -m "Hello" +piconomous agent -m "Hello" ``` @@ -429,5 +429,5 @@ picoclaw agent -m "Hello" ---
- PicoClaw Meme + Piconomous Meme
diff --git a/docs/vi/spawn-tasks.md b/docs/vi/spawn-tasks.md index 78f728040..b9e78e642 100644 --- a/docs/vi/spawn-tasks.md +++ b/docs/vi/spawn-tasks.md @@ -57,5 +57,5 @@ Subagent có quyền truy cập công cụ (message, web_search, v.v.) và có t **Biến môi trường:** -* `PICOCLAW_HEARTBEAT_ENABLED=false` để tắt -* `PICOCLAW_HEARTBEAT_INTERVAL=60` để thay đổi khoảng thời gian +* `PICONOMOUS_HEARTBEAT_ENABLED=false` để tắt +* `PICONOMOUS_HEARTBEAT_INTERVAL=60` để thay đổi khoảng thời gian diff --git a/docs/vi/tools_configuration.md b/docs/vi/tools_configuration.md index 76a336186..943c0f04e 100644 --- a/docs/vi/tools_configuration.md +++ b/docs/vi/tools_configuration.md @@ -2,7 +2,7 @@ > Quay lại [README](../../README.vi.md) -Cấu hình công cụ của PicoClaw nằm trong trường `tools` của `config.json`. +Cấu hình công cụ của Piconomous nằm trong trường `tools` của `config.json`. ## Cấu trúc thư mục @@ -91,7 +91,7 @@ Công cụ exec được sử dụng để thực thi các lệnh shell. **Qua biến môi trường:** ```bash -PICOCLAW_TOOLS_EXEC_ENABLED=false +PICONOMOUS_TOOLS_EXEC_ENABLED=false ``` > **Lưu ý:** Khi bị vô hiệu hóa, agent sẽ không thể thực thi lệnh shell. Điều này cũng ảnh hưởng đến khả năng chạy lệnh shell theo lịch của công cụ Cron. @@ -103,7 +103,7 @@ PICOCLAW_TOOLS_EXEC_ENABLED=false ### Các mẫu lệnh bị chặn mặc định -Theo mặc định, PicoClaw chặn các lệnh nguy hiểm sau: +Theo mặc định, Piconomous chặn các lệnh nguy hiểm sau: - Lệnh xóa: `rm -rf`, `del /f/q`, `rmdir /s` - Thao tác đĩa: `format`, `mkfs`, `diskpart`, `dd if=`, ghi vào `/dev/sd*` @@ -120,7 +120,7 @@ Theo mặc định, PicoClaw chặn các lệnh nguy hiểm sau: ### Hạn chế kiến trúc đã biết -Bộ bảo vệ exec chỉ xác thực lệnh cấp cao nhất được gửi đến PicoClaw. Nó **không** kiểm tra đệ quy các tiến trình con được tạo bởi các công cụ build hoặc script sau khi lệnh đó bắt đầu chạy. +Bộ bảo vệ exec chỉ xác thực lệnh cấp cao nhất được gửi đến Piconomous. Nó **không** kiểm tra đệ quy các tiến trình con được tạo bởi các công cụ build hoặc script sau khi lệnh đó bắt đầu chạy. Ví dụ về các quy trình có thể bỏ qua bộ bảo vệ lệnh trực tiếp sau khi lệnh ban đầu được cho phép: @@ -347,14 +347,14 @@ Công cụ skills cấu hình khám phá và cài đặt kỹ năng thông qua c ## Biến môi trường -Tất cả các tùy chọn cấu hình có thể được ghi đè qua biến môi trường với định dạng `PICOCLAW_TOOLS_
_`: +Tất cả các tùy chọn cấu hình có thể được ghi đè qua biến môi trường với định dạng `PICONOMOUS_TOOLS_
_`: Ví dụ: -- `PICOCLAW_TOOLS_WEB_BRAVE_ENABLED=true` -- `PICOCLAW_TOOLS_EXEC_ENABLED=false` -- `PICOCLAW_TOOLS_EXEC_ENABLE_DENY_PATTERNS=false` -- `PICOCLAW_TOOLS_CRON_EXEC_TIMEOUT_MINUTES=10` -- `PICOCLAW_TOOLS_MCP_ENABLED=true` +- `PICONOMOUS_TOOLS_WEB_BRAVE_ENABLED=true` +- `PICONOMOUS_TOOLS_EXEC_ENABLED=false` +- `PICONOMOUS_TOOLS_EXEC_ENABLE_DENY_PATTERNS=false` +- `PICONOMOUS_TOOLS_CRON_EXEC_TIMEOUT_MINUTES=10` +- `PICONOMOUS_TOOLS_MCP_ENABLED=true` Lưu ý: Cấu hình kiểu map lồng nhau (ví dụ `tools.mcp.servers..*`) được cấu hình trong `config.json` thay vì qua biến môi trường. diff --git a/docs/vi/troubleshooting.md b/docs/vi/troubleshooting.md index 961c932aa..51127dd7f 100644 --- a/docs/vi/troubleshooting.md +++ b/docs/vi/troubleshooting.md @@ -14,7 +14,7 @@ - **Sai:** `"model": "free"` → OpenRouter nhận được `free` và từ chối. - **Đúng:** `"model": "openrouter/free"` → OpenRouter nhận được `openrouter/free` (định tuyến tự động tầng miễn phí). -**Cách sửa:** Trong `~/.picoclaw/config.json` (hoặc đường dẫn cấu hình của bạn): +**Cách sửa:** Trong `~/.piconomous/config.json` (hoặc đường dẫn cấu hình của bạn): 1. **agents.defaults.model_name** phải khớp với một `model_name` trong `model_list` (ví dụ: `"openrouter-free"`). 2. **model** của mục đó phải là ID mô hình OpenRouter hợp lệ, ví dụ: diff --git a/docs/zh/ANTIGRAVITY_AUTH.md b/docs/zh/ANTIGRAVITY_AUTH.md index db7c81dea..5a7f4cd36 100644 --- a/docs/zh/ANTIGRAVITY_AUTH.md +++ b/docs/zh/ANTIGRAVITY_AUTH.md @@ -4,7 +4,7 @@ ## 概述 -**Antigravity**(Google Cloud Code Assist)是由 Google 支持的 AI 模型提供商,通过 Google 的云基础设施提供对 Claude Opus 4.6 和 Gemini 等模型的访问。本文档提供了关于认证工作原理、如何获取模型以及如何在 PicoClaw 中实现新提供商的完整指南。 +**Antigravity**(Google Cloud Code Assist)是由 Google 支持的 AI 模型提供商,通过 Google 的云基础设施提供对 Claude Opus 4.6 和 Gemini 等模型的访问。本文档提供了关于认证工作原理、如何获取模型以及如何在 Piconomous 中实现新提供商的完整指南。 --- @@ -19,7 +19,7 @@ 7. [集成要求](#集成要求) 8. [API 端点](#api-端点) 9. [配置](#配置) -10. [在 PicoClaw 中创建新提供商](#在-picoclaw-中创建新提供商) +10. [在 Piconomous 中创建新提供商](#在-piconomous-中创建新提供商) --- @@ -380,7 +380,7 @@ const antigravityPlugin = { description: "OAuth flow for Google Antigravity (Cloud Code Assist)", configSchema: emptyPluginConfigSchema(), - register(api: PicoClawPluginApi) { + register(api: PiconomousPluginApi) { api.registerProvider({ id: "google-antigravity", label: "Google Antigravity", @@ -407,7 +407,7 @@ const antigravityPlugin = { ```typescript type ProviderAuthContext = { - config: PicoClawConfig; + config: PiconomousConfig; agentDir?: string; workspaceDir?: string; prompter: WizardPrompter; // UI 提示/通知 @@ -428,7 +428,7 @@ type ProviderAuthResult = { profileId: string; credential: AuthProfileCredential; }>; - configPatch?: Partial; + configPatch?: Partial; defaultModel?: string; notes?: string[]; }; @@ -441,7 +441,7 @@ type ProviderAuthResult = { ### 1. 所需环境/依赖 - Go ≥ 1.25 -- PicoClaw 代码库(`pkg/providers/` 和 `pkg/auth/`) +- Piconomous 代码库(`pkg/providers/` 和 `pkg/auth/`) - `crypto` 和 `net/http` 标准库包 ### 2. API 调用所需的请求头 @@ -594,7 +594,7 @@ export function sanitizeAntigravityThinkingBlocks( ### 认证配置文件存储 -认证配置文件存储在 `~/.picoclaw/auth.json` 中: +认证配置文件存储在 `~/.piconomous/auth.json` 中: ```json { @@ -614,9 +614,9 @@ export function sanitizeAntigravityThinkingBlocks( --- -## 在 PicoClaw 中创建新提供商 +## 在 Piconomous 中创建新提供商 -PicoClaw 提供商以 Go 包的形式实现,位于 `pkg/providers/` 下。要添加新提供商: +Piconomous 提供商以 Go 包的形式实现,位于 `pkg/providers/` 下。要添加新提供商: ### 分步实现 @@ -676,7 +676,7 @@ case "your-provider": #### 5. 添加认证支持(可选) -如果你的提供商需要 OAuth 或特殊认证,在 `cmd/picoclaw/internal/auth/helpers.go` 中添加分支: +如果你的提供商需要 OAuth 或特殊认证,在 `cmd/piconomous/internal/auth/helpers.go` 中添加分支: ```go case "your-provider": @@ -706,26 +706,26 @@ case "your-provider": ```bash # 使用提供商进行认证 -picoclaw auth login --provider your-provider +piconomous auth login --provider your-provider # 列出模型(用于 Antigravity) -picoclaw auth models +piconomous auth models # 启动网关 -picoclaw gateway +piconomous gateway # 使用指定模型运行代理 -picoclaw agent -m "Hello" --model your-model +piconomous agent -m "Hello" --model your-model ``` ### 测试用环境变量 ```bash # 覆盖默认模型 -export PICOCLAW_AGENTS_DEFAULTS_MODEL=your-model +export PICONOMOUS_AGENTS_DEFAULTS_MODEL=your-model # 覆盖提供商设置 -export PICOCLAW_MODEL_LIST='[{"model_name":"your-model","model":"your-provider/model-name","api_key":"..."}]' +export PICONOMOUS_MODEL_LIST='[{"model_name":"your-model","model":"your-provider/model-name","api_key":"..."}]' ``` --- @@ -735,10 +735,10 @@ export PICOCLAW_MODEL_LIST='[{"model_name":"your-model","model":"your-provider/m - **源文件:** - `pkg/providers/antigravity_provider.go` - Antigravity 提供商实现 - `pkg/auth/oauth.go` - OAuth 流程实现 - - `pkg/auth/store.go` - 认证凭据存储(`~/.picoclaw/auth.json`) + - `pkg/auth/store.go` - 认证凭据存储(`~/.piconomous/auth.json`) - `pkg/providers/factory.go` - 提供商工厂和协议路由 - `pkg/providers/types.go` - 提供商接口定义 - - `cmd/picoclaw/internal/auth/helpers.go` - 认证 CLI 命令 + - `cmd/piconomous/internal/auth/helpers.go` - 认证 CLI 命令 - **文档:** - `docs/ANTIGRAVITY_USAGE.md` - Antigravity 使用指南 @@ -794,7 +794,7 @@ export PICOCLAW_MODEL_LIST='[{"model_name":"your-model","model":"your-provider/m ## 故障排除 ### "Token expired"(令牌已过期) -- 刷新 OAuth 令牌:`picoclaw auth login --provider antigravity` +- 刷新 OAuth 令牌:`piconomous auth login --provider antigravity` ### "Gemini for Google Cloud is not enabled"(Gemini for Google Cloud 未启用) - 在 Google Cloud Console 中启用该 API @@ -805,5 +805,5 @@ export PICOCLAW_MODEL_LIST='[{"model_name":"your-model","model":"your-provider/m ### 模型未出现在列表中 - 验证 OAuth 认证是否成功完成 -- 检查认证配置文件存储:`~/.picoclaw/auth.json` -- 重新运行 `picoclaw auth login --provider antigravity` +- 检查认证配置文件存储:`~/.piconomous/auth.json` +- 重新运行 `piconomous auth login --provider antigravity` diff --git a/docs/zh/ANTIGRAVITY_USAGE.md b/docs/zh/ANTIGRAVITY_USAGE.md index 2218618a9..13411c201 100644 --- a/docs/zh/ANTIGRAVITY_USAGE.md +++ b/docs/zh/ANTIGRAVITY_USAGE.md @@ -1,8 +1,8 @@ > 返回 [README](../../README.zh.md) -# 在 PicoClaw 中使用 Antigravity 提供商 +# 在 Piconomous 中使用 Antigravity 提供商 -本指南介绍如何在 PicoClaw 中设置和使用 **Antigravity**(Google Cloud Code Assist)提供商。 +本指南介绍如何在 Piconomous 中设置和使用 **Antigravity**(Google Cloud Code Assist)提供商。 ## 前提条件 @@ -14,7 +14,7 @@ 要使用 Antigravity 进行身份验证,请运行以下命令: ```bash -picoclaw auth login --provider antigravity +piconomous auth login --provider antigravity ``` ### 手动验证(无界面/VPS 环境) @@ -24,9 +24,9 @@ picoclaw auth login --provider antigravity 3. 完成登录。 4. 浏览器将重定向到 `localhost:51121` URL(页面将无法加载)。 5. **从浏览器地址栏复制该最终 URL**。 -6. **将其粘贴回 PicoClaw 正在等待的终端中**。 +6. **将其粘贴回 Piconomous 正在等待的终端中**。 -PicoClaw 将自动提取授权码并完成流程。 +Piconomous 将自动提取授权码并完成流程。 ## 2. 管理模型 @@ -34,15 +34,15 @@ PicoClaw 将自动提取授权码并完成流程。 查看你的项目可以访问哪些模型并检查其配额: ```bash -picoclaw auth models +piconomous auth models ``` ### 切换模型 -你可以在 `~/.picoclaw/config.json` 中更改默认模型,或通过 CLI 覆盖: +你可以在 `~/.piconomous/config.json` 中更改默认模型,或通过 CLI 覆盖: ```bash # 为单个命令覆盖 -picoclaw agent -m "Hello" --model claude-opus-4-6-thinking +piconomous agent -m "Hello" --model claude-opus-4-6-thinking ``` ## 3. 实际使用(Coolify/Docker) @@ -50,19 +50,19 @@ picoclaw agent -m "Hello" --model claude-opus-4-6-thinking 如果你通过 Coolify 或 Docker 部署,请按照以下步骤进行测试: 1. **环境变量**: - * `PICOCLAW_AGENTS_DEFAULTS_MODEL=gemini-flash` + * `PICONOMOUS_AGENTS_DEFAULTS_MODEL=gemini-flash` 2. **身份验证持久化**: 如果你已在本地登录,可以将凭据复制到服务器: ```bash - scp ~/.picoclaw/auth.json user@your-server:~/.picoclaw/ + scp ~/.piconomous/auth.json user@your-server:~/.piconomous/ ``` *或者*,如果你有终端访问权限,可以在服务器上运行一次 `auth login` 命令。 ## 4. 故障排除 * **空响应**:如果模型返回空回复,可能是该模型在你的项目中受到限制。请尝试 `gemini-3-flash` 或 `claude-opus-4-6-thinking`。 -* **429 速率限制**:Antigravity 有严格的配额限制。如果触发限制,PicoClaw 将在错误消息中显示"重置时间"。 -* **404 未找到**:确保你使用的是 `picoclaw auth models` 列表中的模型 ID。请使用短 ID(例如 `gemini-3-flash`),而非完整路径。 +* **429 速率限制**:Antigravity 有严格的配额限制。如果触发限制,Piconomous 将在错误消息中显示"重置时间"。 +* **404 未找到**:确保你使用的是 `piconomous auth models` 列表中的模型 ID。请使用短 ID(例如 `gemini-3-flash`),而非完整路径。 ## 5. 可用模型总结 diff --git a/docs/zh/chat-apps.md b/docs/zh/chat-apps.md index a0206a7d6..466f214af 100644 --- a/docs/zh/chat-apps.md +++ b/docs/zh/chat-apps.md @@ -4,7 +4,7 @@ ## 💬 聊天应用集成 (Chat Apps) -PicoClaw 支持多种聊天平台,使您的 Agent 能够连接到任何地方。 +Piconomous 支持多种聊天平台,使您的 Agent 能够连接到任何地方。 > **注意**: 所有 Webhook 类渠道(LINE、WeCom 等)均挂载在同一个 Gateway HTTP 服务器上(`gateway.host`:`gateway.port`,默认 `127.0.0.1:18790`),无需为每个渠道单独配置端口。注意:飞书(Feishu)使用 WebSocket/SDK 模式,不通过该共享 HTTP webhook 服务器接收消息。 @@ -25,7 +25,7 @@ PicoClaw 支持多种聊天平台,使您的 Agent 能够连接到任何地方 | **IRC** | ⭐⭐ 中等 | 服务器 + TLS 配置 | - | | **OneBot** | ⭐⭐ 中等 | 兼容 NapCat/Go-CQHTTP,社区生态丰富 | [查看文档](../channels/onebot/README.zh.md) | | **MaixCam** | ⭐ 简单 | 专为 AI 摄像头设计的硬件集成通道 | [查看文档](../channels/maixcam/README.zh.md) | -| **Pico** | ⭐ 简单 | PicoClaw 原生协议通道 | | +| **Pico** | ⭐ 简单 | Piconomous 原生协议通道 | | --- @@ -57,12 +57,12 @@ PicoClaw 支持多种聊天平台,使您的 Agent 能够连接到任何地方 **3. 运行** ```bash -picoclaw gateway +piconomous gateway ``` **4. Telegram 命令菜单(启动时自动注册)** -PicoClaw 使用统一的命令定义来源。启动时会自动将 Telegram 支持的命令(例如 `/start`、`/help`、`/show`、`/list`)注册到 Bot 命令菜单,确保菜单展示与实际行为一致。 +Piconomous 使用统一的命令定义来源。启动时会自动将 Telegram 支持的命令(例如 `/start`、`/help`、`/show`、`/list`)注册到 Bot 命令菜单,确保菜单展示与实际行为一致。 Telegram 侧保留的是命令菜单注册能力;通用命令的实际执行统一走 Agent Loop 中的 commands executor。 如果注册因网络或 API 短暂异常失败,不会阻塞 channel 启动;系统会在后台自动重试。 @@ -138,7 +138,7 @@ Telegram 侧保留的是命令菜单注册能力;通用命令的实际执行 **6. 运行** ```bash -picoclaw gateway +piconomous gateway ``` @@ -146,7 +146,7 @@ picoclaw gateway
WhatsApp(原生 whatsmeow) -PicoClaw 支持两种 WhatsApp 连接方式: +Piconomous 支持两种 WhatsApp 连接方式: - **原生(推荐):** 进程内使用 [whatsmeow](https://github.com/tulir/whatsmeow),无需独立 Bridge。设置 `"use_native": true` 并留空 `bridge_url`。首次运行时用 WhatsApp 扫描 QR 码(关联设备)。会话存储在工作区下(如 `workspace/whatsapp/`)。原生渠道为**可选**构建,使用 `-tags whatsapp_native` 编译(如 `make build-whatsapp-native` 或 `go build -tags whatsapp_native ./cmd/...`)。 - **Bridge:** 连接外部 WebSocket Bridge。设置 `bridge_url`(如 `ws://localhost:3001`),保持 `use_native` 为 false。 @@ -166,7 +166,7 @@ PicoClaw 支持两种 WhatsApp 连接方式: } ``` -如果 `session_store_path` 为空,会话存储在 `/whatsapp/`。运行 `picoclaw gateway`;首次运行时在终端扫描 QR 码(WhatsApp → 关联设备)。 +如果 `session_store_path` 为空,会话存储在 `/whatsapp/`。运行 `piconomous gateway`;首次运行时在终端扫描 QR 码(WhatsApp → 关联设备)。
@@ -197,7 +197,7 @@ PicoClaw 支持两种 WhatsApp 连接方式: **3. 运行** ```bash -picoclaw gateway +piconomous gateway ``` 完整选项(`device_id`、`join_on_invite`、`group_trigger`、`placeholder`、`reasoning_channel_id`)请参考 [Matrix 渠道配置指南](../channels/matrix/README.md)。 @@ -213,7 +213,7 @@ QQ 开放平台提供了一键创建 OpenClaw 兼容机器人的页面: 1. 打开 [QQ 机器人快速创建](https://q.qq.com/qqbot/openclaw/index.html),扫码登录 2. 机器人自动创建 — 复制 **App ID** 和 **App Secret** -3. 配置 PicoClaw: +3. 配置 Piconomous: ```json { @@ -228,7 +228,7 @@ QQ 开放平台提供了一键创建 OpenClaw 兼容机器人的页面: } ``` -4. 运行 `picoclaw gateway`,打开 QQ 与机器人聊天 +4. 运行 `piconomous gateway`,打开 QQ 与机器人聊天 > App Secret 仅显示一次,请立即保存 — 再次查看将强制重置。 > @@ -241,7 +241,7 @@ QQ 开放平台提供了一键创建 OpenClaw 兼容机器人的页面: * 登录 [QQ 开放平台](https://q.qq.com/) 注册成为开发者 * 创建 QQ 机器人 — 自定义头像和名称 * 从机器人设置中复制 **App ID** 和 **App Secret** -* 按上述方式配置并运行 `picoclaw gateway` +* 按上述方式配置并运行 `piconomous gateway` @@ -273,7 +273,7 @@ QQ 开放平台提供了一键创建 OpenClaw 兼容机器人的页面: **3. 运行** ```bash -picoclaw gateway +piconomous gateway ``` @@ -290,7 +290,7 @@ picoclaw gateway "enabled": true, "server": "irc.libera.chat:6697", "tls": true, - "nick": "picoclaw-bot", + "nick": "piconomous-bot", "channels": ["#your-channel"], "password": "", "allow_from": [] @@ -304,7 +304,7 @@ picoclaw gateway **2. 运行** ```bash -picoclaw gateway +piconomous gateway ``` Bot 将连接到 IRC 服务器并加入指定的频道。 @@ -340,7 +340,7 @@ Bot 将连接到 IRC 服务器并加入指定的频道。 **3. 运行** ```bash -picoclaw gateway +piconomous gateway ``` @@ -386,7 +386,7 @@ ngrok http 18790 **4. 运行** ```bash -picoclaw gateway +piconomous gateway ``` > 在群聊中,Bot 仅在被 @提及时回复。回复会引用原始消息。 @@ -396,7 +396,7 @@ picoclaw gateway
飞书 (Feishu) -PicoClaw 通过 WebSocket/SDK 模式连接飞书 — 无需公网 Webhook URL 或回调服务器。 +Piconomous 通过 WebSocket/SDK 模式连接飞书 — 无需公网 Webhook URL 或回调服务器。 **1. 创建应用** @@ -425,7 +425,7 @@ PicoClaw 通过 WebSocket/SDK 模式连接飞书 — 无需公网 Webhook URL **3. 运行并聊天** ```bash -picoclaw gateway +piconomous gateway ``` 打开飞书,搜索你的机器人名称即可开始聊天。也可以将机器人添加到群组 — 使用 `group_trigger.mention_only: true` 设置为仅在 @提及时回复。 @@ -437,7 +437,7 @@ picoclaw gateway
企业微信 (WeCom) -PicoClaw 支持三种企业微信集成方式: +Piconomous 支持三种企业微信集成方式: **方式 1: 群机器人 (Bot)** — 设置简单,支持群聊 **方式 2: 自建应用 (App)** — 功能更多,支持主动推送,仅私聊 @@ -507,7 +507,7 @@ PicoClaw 支持三种企业微信集成方式: **4. 运行** ```bash -picoclaw gateway +piconomous gateway ``` > **注意**: WeCom Webhook 回调挂载在 Gateway 端口(默认 18790)。使用反向代理配置 HTTPS。 @@ -541,7 +541,7 @@ picoclaw gateway **3. 运行** ```bash -picoclaw gateway +piconomous gateway ``` > **注意**: 企业微信 AI Bot 使用流式拉取协议,无回复超时问题。长任务(>30 秒)会自动切换到 `response_url` 推送投递。 @@ -551,7 +551,7 @@ picoclaw gateway
OneBot(通过 OneBot 协议连接 QQ) -OneBot 是 QQ 机器人的开放协议。PicoClaw 通过 WebSocket 连接任何 OneBot v11 兼容实现(如 [Lagrange](https://github.com/LagrangeDev/Lagrange.Core)、[NapCat](https://github.com/NapNeko/NapCatQQ))。 +OneBot 是 QQ 机器人的开放协议。Piconomous 通过 WebSocket 连接任何 OneBot v11 兼容实现(如 [Lagrange](https://github.com/LagrangeDev/Lagrange.Core)、[NapCat](https://github.com/NapNeko/NapCatQQ))。 **1. 设置 OneBot 实现** @@ -581,7 +581,7 @@ OneBot 是 QQ 机器人的开放协议。PicoClaw 通过 WebSocket 连接任何 **3. 运行** ```bash -picoclaw gateway +piconomous gateway ```
@@ -602,7 +602,7 @@ picoclaw gateway ``` ```bash -picoclaw gateway +piconomous gateway ```
diff --git a/docs/zh/configuration.md b/docs/zh/configuration.md index 68fb1fd1a..465b48b9b 100644 --- a/docs/zh/configuration.md +++ b/docs/zh/configuration.md @@ -4,39 +4,39 @@ ## ⚙️ 配置详解 -配置文件路径: `~/.picoclaw/config.json` +配置文件路径: `~/.piconomous/config.json` ### 环境变量 -你可以使用环境变量覆盖默认路径。这对于便携安装、容器化部署或将 picoclaw 作为系统服务运行非常有用。这些变量是独立的,控制不同的路径。 +你可以使用环境变量覆盖默认路径。这对于便携安装、容器化部署或将 piconomous 作为系统服务运行非常有用。这些变量是独立的,控制不同的路径。 | 变量 | 描述 | 默认路径 | |-------------------|-----------------------------------------------------------------------------------------------------------------------------------------|---------------------------| -| `PICOCLAW_CONFIG` | 覆盖配置文件的路径。这直接告诉 picoclaw 加载哪个 `config.json`,忽略所有其他位置。 | `~/.picoclaw/config.json` | -| `PICOCLAW_HOME` | 覆盖 picoclaw 数据根目录。这会更改 `workspace` 和其他数据目录的默认位置。 | `~/.picoclaw` | +| `PICONOMOUS_CONFIG` | 覆盖配置文件的路径。这直接告诉 piconomous 加载哪个 `config.json`,忽略所有其他位置。 | `~/.piconomous/config.json` | +| `PICONOMOUS_HOME` | 覆盖 piconomous 数据根目录。这会更改 `workspace` 和其他数据目录的默认位置。 | `~/.piconomous` | **示例:** ```bash -# 使用特定的配置文件运行 picoclaw +# 使用特定的配置文件运行 piconomous # 工作区路径将从该配置文件中读取 -PICOCLAW_CONFIG=/etc/picoclaw/production.json picoclaw gateway +PICONOMOUS_CONFIG=/etc/piconomous/production.json piconomous gateway -# 在 /opt/picoclaw 中存储所有数据运行 picoclaw -# 配置将从默认的 ~/.picoclaw/config.json 加载 -# 工作区将在 /opt/picoclaw/workspace 创建 -PICOCLAW_HOME=/opt/picoclaw picoclaw agent +# 在 /opt/piconomous 中存储所有数据运行 piconomous +# 配置将从默认的 ~/.piconomous/config.json 加载 +# 工作区将在 /opt/piconomous/workspace 创建 +PICONOMOUS_HOME=/opt/piconomous piconomous agent # 同时使用两者进行完全自定义设置 -PICOCLAW_HOME=/srv/picoclaw PICOCLAW_CONFIG=/srv/picoclaw/main.json picoclaw gateway +PICONOMOUS_HOME=/srv/piconomous PICONOMOUS_CONFIG=/srv/piconomous/main.json piconomous gateway ``` ### 工作区布局 (Workspace Layout) -PicoClaw 将数据存储在您配置的工作区中(默认:`~/.picoclaw/workspace`): +Piconomous 将数据存储在您配置的工作区中(默认:`~/.piconomous/workspace`): ``` -~/.picoclaw/workspace/ +~/.piconomous/workspace/ ├── sessions/ # 对话会话和历史 ├── memory/ # 长期记忆 (MEMORY.md) ├── state/ # 持久化状态 (最后一次频道等) @@ -55,14 +55,14 @@ PicoClaw 将数据存储在您配置的工作区中(默认:`~/.picoclaw/work 默认情况下,技能会按以下顺序加载: -1. `~/.picoclaw/workspace/skills`(工作区) -2. `~/.picoclaw/skills`(全局) +1. `~/.piconomous/workspace/skills`(工作区) +2. `~/.piconomous/skills`(全局) 3. `<构建时嵌入路径>/skills`(内置) 在高级/测试场景下,可通过以下环境变量覆盖内置技能目录: ```bash -export PICOCLAW_BUILTIN_SKILLS=/path/to/skills +export PICONOMOUS_BUILTIN_SKILLS=/path/to/skills ``` ### 统一命令执行策略 @@ -74,7 +74,7 @@ export PICOCLAW_BUILTIN_SKILLS=/path/to/skills ### 🔒 安全沙箱 (Security Sandbox) -PicoClaw 默认在沙箱环境中运行。Agent 只能访问配置的工作区内的文件和执行命令。 +Piconomous 默认在沙箱环境中运行。Agent 只能访问配置的工作区内的文件和执行命令。 #### 默认配置 @@ -82,7 +82,7 @@ PicoClaw 默认在沙箱环境中运行。Agent 只能访问配置的工作区 { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "restrict_to_workspace": true } } @@ -91,7 +91,7 @@ PicoClaw 默认在沙箱环境中运行。Agent 只能访问配置的工作区 | 选项 | 默认值 | 描述 | | ----------------------- | ----------------------- | ----------------------------- | -| `workspace` | `~/.picoclaw/workspace` | Agent 的工作目录 | +| `workspace` | `~/.piconomous/workspace` | Agent 的工作目录 | | `restrict_to_workspace` | `true` | 限制文件/命令访问在工作区内 | #### 受保护的工具 @@ -138,7 +138,7 @@ PicoClaw 默认在沙箱环境中运行。Agent 只能访问配置的工作区 #### 已知限制:构建工具的子进程 -exec 安全守卫仅检查 PicoClaw 直接启动的命令行。它不会递归检查由 `make`、`go run`、`cargo`、`npm run` 或自定义构建脚本等开发工具产生的子进程。 +exec 安全守卫仅检查 Piconomous 直接启动的命令行。它不会递归检查由 `make`、`go run`、`cargo`、`npm run` 或自定义构建脚本等开发工具产生的子进程。 这意味着顶层命令通过初始守卫检查后,仍可以编译或启动其他二进制文件。实际上,应将构建脚本、Makefile、包脚本和生成的二进制文件视为与直接 shell 命令同等级别的可执行代码进行审查。 @@ -146,7 +146,7 @@ exec 安全守卫仅检查 PicoClaw 直接启动的命令行。它不会递归 * 执行前审查构建脚本。 * 对编译并运行的工作流优先使用审批/手动审查。 -* 如果需要比内置守卫更强的隔离,请在容器或虚拟机中运行 PicoClaw。 +* 如果需要比内置守卫更强的隔离,请在容器或虚拟机中运行 Piconomous。 #### 错误示例 @@ -179,7 +179,7 @@ exec 安全守卫仅检查 PicoClaw 直接启动的命令行。它不会递归 **方法 2: 环境变量** ```bash -export PICOCLAW_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACE=false +export PICONOMOUS_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACE=false ``` > ⚠️ **警告**: 禁用此限制将允许 Agent 访问系统上的任何路径。仅在受控环境中谨慎使用。 @@ -198,7 +198,7 @@ export PICOCLAW_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACE=false ### 心跳 / 周期性任务 (Heartbeat) -PicoClaw 可以自动执行周期性任务。在工作区创建 `HEARTBEAT.md` 文件: +Piconomous 可以自动执行周期性任务。在工作区创建 `HEARTBEAT.md` 文件: ```markdown # Periodic Tasks @@ -254,5 +254,5 @@ Agent 将每隔 30 分钟(可配置)读取此文件,并使用可用工具 **环境变量:** -- `PICOCLAW_HEARTBEAT_ENABLED=false` 禁用 -- `PICOCLAW_HEARTBEAT_INTERVAL=60` 更改间隔 +- `PICONOMOUS_HEARTBEAT_ENABLED=false` 禁用 +- `PICONOMOUS_HEARTBEAT_INTERVAL=60` 更改间隔 diff --git a/docs/zh/credential_encryption.md b/docs/zh/credential_encryption.md index 2105e4307..ec836dbe7 100644 --- a/docs/zh/credential_encryption.md +++ b/docs/zh/credential_encryption.md @@ -2,7 +2,7 @@ # 凭据加密 -PicoClaw 支持对 `model_list` 配置条目中的 `api_key` 值进行加密。 +Piconomous 支持对 `model_list` 配置条目中的 `api_key` 值进行加密。 加密后的密钥以 `enc://` 字符串形式存储,并在启动时自动解密。 --- @@ -12,12 +12,12 @@ PicoClaw 支持对 `model_list` 配置条目中的 `api_key` 值进行加密。 **1. 设置密码短语** ```bash -export PICOCLAW_KEY_PASSPHRASE="your-passphrase" +export PICONOMOUS_KEY_PASSPHRASE="your-passphrase" ``` **2. 加密 API 密钥** -运行 `picoclaw onboard` — 它会提示你输入密码短语并生成 SSH 密钥, +运行 `piconomous onboard` — 它会提示你输入密码短语并生成 SSH 密钥, 然后在下一次 `SaveConfig` 调用时自动重新加密配置中所有明文 `api_key` 条目。生成的 `enc://` 值如下所示: ``` @@ -47,7 +47,7 @@ enc://AAAA...base64... |------|------|------| | 明文 | `sk-abc123` | 直接使用 | | 文件引用 | `file://openai.key` | 从配置文件所在目录读取内容 | -| 加密 | `enc://` | 启动时使用 `PICOCLAW_KEY_PASSPHRASE` 解密 | +| 加密 | `enc://` | 启动时使用 `PICONOMOUS_KEY_PASSPHRASE` 解密 | | 空值 | `""` | 原样传递(用于 `auth_method: oauth`) | --- @@ -61,7 +61,7 @@ enc://AAAA...base64... ``` sshHash = SHA256(ssh_private_key_file_bytes) ikm = HMAC-SHA256(key=sshHash, message=passphrase) -aes_key = HKDF-SHA256(ikm, salt, info="picoclaw-credential-v1", 32 bytes) +aes_key = HKDF-SHA256(ikm, salt, info="piconomous-credential-v1", 32 bytes) ``` ### 加密 @@ -98,7 +98,7 @@ GCM 认证标签会自动附加到密文之后。任何篡改都会导致解密 当提供 SSH 私钥时,破解加密需要**同时具备**: -1. **密码短语** (`PICOCLAW_KEY_PASSPHRASE`) +1. **密码短语** (`PICONOMOUS_KEY_PASSPHRASE`) 2. **SSH 私钥文件** 这意味着仅泄露配置文件不足以恢复 API 密钥,即使密码短语较弱也是如此。SSH 密钥贡献 256 位熵(Ed25519),与密码短语强度无关。 @@ -118,33 +118,33 @@ GCM 认证标签会自动附加到密文之后。任何篡改都会导致解密 | 变量 | 是否必需 | 描述 | |------|----------|------| -| `PICOCLAW_KEY_PASSPHRASE` | 是(用于 `enc://`) | 用于密钥派生的密码短语 | -| `PICOCLAW_SSH_KEY_PATH` | 否 | SSH 私钥路径。如未设置,自动从 `~/.ssh/picoclaw_ed25519.key` 检测 | +| `PICONOMOUS_KEY_PASSPHRASE` | 是(用于 `enc://`) | 用于密钥派生的密码短语 | +| `PICONOMOUS_SSH_KEY_PATH` | 否 | SSH 私钥路径。如未设置,自动从 `~/.ssh/piconomous_ed25519.key` 检测 | ### SSH 密钥自动检测 -如果未设置 `PICOCLAW_SSH_KEY_PATH`,PicoClaw 会查找专用密钥: +如果未设置 `PICONOMOUS_SSH_KEY_PATH`,Piconomous 会查找专用密钥: ``` -~/.ssh/picoclaw_ed25519.key +~/.ssh/piconomous_ed25519.key ``` 此专用文件避免与用户现有的 SSH 密钥冲突。 -运行 `picoclaw onboard` 可自动生成该密钥。 +运行 `piconomous onboard` 可自动生成该密钥。 `os.UserHomeDir()` 用于跨平台主目录解析(在 Windows 上读取 `USERPROFILE`,在 Unix/macOS 上读取 `HOME`)。 -> **注意:** SSH 密钥文件是凭据加密的必要条件。如果未找到密钥且未设置 `PICOCLAW_SSH_KEY_PATH`,加密/解密将失败。运行 `picoclaw onboard` 可自动生成密钥。 +> **注意:** SSH 密钥文件是凭据加密的必要条件。如果未找到密钥且未设置 `PICONOMOUS_SSH_KEY_PATH`,加密/解密将失败。运行 `piconomous onboard` 可自动生成密钥。 --- ## 迁移 -由于唯一的密钥材料是 `PICOCLAW_KEY_PASSPHRASE` 和 SSH 私钥文件,迁移非常简单: +由于唯一的密钥材料是 `PICONOMOUS_KEY_PASSPHRASE` 和 SSH 私钥文件,迁移非常简单: 1. 将配置文件复制到新机器。 -2. 将 `PICOCLAW_KEY_PASSPHRASE` 设置为相同的值。 -3. 将 SSH 私钥文件复制到相同路径(或将 `PICOCLAW_SSH_KEY_PATH` 设置为新位置)。 +2. 将 `PICONOMOUS_KEY_PASSPHRASE` 设置为相同的值。 +3. 将 SSH 私钥文件复制到相同路径(或将 `PICONOMOUS_SSH_KEY_PATH` 设置为新位置)。 无需重新加密。 @@ -152,7 +152,7 @@ GCM 认证标签会自动附加到密文之后。任何篡改都会导致解密 ## 安全注意事项 -- **密码短语和 SSH 密钥都是必需的。** SSH 密钥作为第二因子 — 没有它,加密/解密将失败。如果密钥不存在,运行 `picoclaw onboard` 生成。 -- **SSH 密钥在运行时为只读。** PicoClaw 不会写入或修改 SSH 密钥文件。 +- **密码短语和 SSH 密钥都是必需的。** SSH 密钥作为第二因子 — 没有它,加密/解密将失败。如果密钥不存在,运行 `piconomous onboard` 生成。 +- **SSH 密钥在运行时为只读。** Piconomous 不会写入或修改 SSH 密钥文件。 - **仍然支持明文密钥。** 不使用 `enc://` 的现有配置不受影响。 -- **`enc://` 格式通过版本控制**,通过 HKDF `info` 字段(`picoclaw-credential-v1`)实现,允许未来升级算法而不破坏现有加密值。 +- **`enc://` 格式通过版本控制**,通过 HKDF `info` 字段(`piconomous-credential-v1`)实现,允许未来升级算法而不破坏现有加密值。 diff --git a/docs/zh/debug.md b/docs/zh/debug.md index e7f20d777..f2f2e1ab6 100644 --- a/docs/zh/debug.md +++ b/docs/zh/debug.md @@ -1,31 +1,31 @@ -# 调试 PicoClaw +# 调试 Piconomous > 返回 [README](../../README.zh.md) -PicoClaw 在处理每一个请求时,都会在后台执行多个复杂的交互操作——从消息路由和复杂度评估,到工具执行和模型故障适配。能够准确地看到正在发生什么至关重要,这不仅有助于排查潜在问题,也有助于真正理解代理的运作方式。 +Piconomous 在处理每一个请求时,都会在后台执行多个复杂的交互操作——从消息路由和复杂度评估,到工具执行和模型故障适配。能够准确地看到正在发生什么至关重要,这不仅有助于排查潜在问题,也有助于真正理解代理的运作方式。 -## 以调试模式启动 PicoClaw +## 以调试模式启动 Piconomous -要获取代理运行的详细信息(LLM 请求、工具调用、消息路由),可以使用调试标志启动 PicoClaw 网关: +要获取代理运行的详细信息(LLM 请求、工具调用、消息路由),可以使用调试标志启动 Piconomous 网关: ```bash -picoclaw gateway --debug +piconomous gateway --debug # or -picoclaw gateway -d +piconomous gateway -d ``` 在此模式下,系统会对日志进行详细格式化,并显示系统提示词和工具执行结果的预览。 ## 禁用日志截断(完整日志) -默认情况下,PicoClaw 会在调试日志中截断过长的字符串(例如*系统提示词*或大型 JSON 输出结果),以保持控制台的可读性。 +默认情况下,Piconomous 会在调试日志中截断过长的字符串(例如*系统提示词*或大型 JSON 输出结果),以保持控制台的可读性。 如果你需要检查某个命令的完整输出,或发送给 LLM 模型的确切载荷,可以使用 `--no-truncate` 标志。 **注意:** 此标志*仅*在与 `--debug` 模式组合使用时有效。 ```bash -picoclaw gateway --debug --no-truncate +piconomous gateway --debug --no-truncate ``` diff --git a/docs/zh/docker.md b/docs/zh/docker.md index 10bc46544..a8cccf398 100644 --- a/docs/zh/docker.md +++ b/docs/zh/docker.md @@ -4,12 +4,12 @@ ## 🐳 Docker Compose -您也可以使用 Docker Compose 运行 PicoClaw,无需在本地安装任何环境。 +您也可以使用 Docker Compose 运行 Piconomous,无需在本地安装任何环境。 ```bash # 1. 克隆仓库 -git clone https://github.com/sipeed/picoclaw.git -cd picoclaw +git clone https://github.com/sipeed/piconomous.git +cd piconomous # 2. 首次运行 — 自动生成 docker/data/config.json 后退出 # (仅在 config.json 和 workspace/ 都不存在时触发) @@ -24,11 +24,11 @@ docker compose -f docker/docker-compose.yml --profile gateway up -d ``` > [!TIP] -> **Docker 用户**: 默认情况下, Gateway 监听 `127.0.0.1`,该端口不会暴露到容器外。如果需要通过端口映射访问健康检查接口,请在环境变量中设置 `PICOCLAW_GATEWAY_HOST=0.0.0.0` 或修改 `config.json`。 +> **Docker 用户**: 默认情况下, Gateway 监听 `127.0.0.1`,该端口不会暴露到容器外。如果需要通过端口映射访问健康检查接口,请在环境变量中设置 `PICONOMOUS_GATEWAY_HOST=0.0.0.0` 或修改 `config.json`。 ```bash # 5. 查看日志 -docker compose -f docker/docker-compose.yml logs -f picoclaw-gateway +docker compose -f docker/docker-compose.yml logs -f piconomous-gateway # 6. 停止 docker compose -f docker/docker-compose.yml --profile gateway down @@ -36,7 +36,7 @@ docker compose -f docker/docker-compose.yml --profile gateway down ### Launcher 模式 (Web 控制台) -`launcher` 镜像包含所有三个二进制文件(`picoclaw`、`picoclaw-launcher`、`picoclaw-launcher-tui`),默认启动 Web 控制台,提供基于浏览器的配置和聊天界面。 +`launcher` 镜像包含所有三个二进制文件(`piconomous`、`piconomous-launcher`、`piconomous-launcher-tui`),默认启动 Web 控制台,提供基于浏览器的配置和聊天界面。 ```bash docker compose -f docker/docker-compose.yml --profile launcher up -d @@ -51,10 +51,10 @@ docker compose -f docker/docker-compose.yml --profile launcher up -d ```bash # 提问 -docker compose -f docker/docker-compose.yml run --rm picoclaw-agent -m "2+2 等于几?" +docker compose -f docker/docker-compose.yml run --rm piconomous-agent -m "2+2 等于几?" # 交互模式 -docker compose -f docker/docker-compose.yml run --rm picoclaw-agent +docker compose -f docker/docker-compose.yml run --rm piconomous-agent ``` ### 更新镜像 @@ -69,21 +69,21 @@ docker compose -f docker/docker-compose.yml --profile gateway up -d ## 🚀 快速开始 > [!TIP] -> 在 `~/.picoclaw/config.json` 中设置您的 API Key。获取 API Key: [火山引擎 (CodingPlan)](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) (LLM) · [OpenRouter](https://openrouter.ai/keys) (LLM) · [Zhipu (智谱)](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys) (LLM)。网络搜索是 **可选的** — 获取免费的 [Tavily API](https://tavily.com) (每月 1000 次免费查询) 或 [Brave Search API](https://brave.com/search/api) (每月 2000 次免费查询)。 +> 在 `~/.piconomous/config.json` 中设置您的 API Key。获取 API Key: [火山引擎 (CodingPlan)](https://www.volcengine.com/activity/codingplan?utm_campaign=Piconomous&utm_content=Piconomous&utm_medium=devrel&utm_source=OWO&utm_term=Piconomous) (LLM) · [OpenRouter](https://openrouter.ai/keys) (LLM) · [Zhipu (智谱)](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys) (LLM)。网络搜索是 **可选的** — 获取免费的 [Tavily API](https://tavily.com) (每月 1000 次免费查询) 或 [Brave Search API](https://brave.com/search/api) (每月 2000 次免费查询)。 **1. 初始化 (Initialize)** ```bash -picoclaw onboard +piconomous onboard ``` -**2. 配置 (Configure)** (`~/.picoclaw/config.json`) +**2. 配置 (Configure)** (`~/.piconomous/config.json`) ```json { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "model_name": "gpt-5.4", "max_tokens": 8192, "temperature": 0.7, @@ -144,7 +144,7 @@ picoclaw onboard ``` > **新功能**: `model_list` 配置格式支持零代码添加 provider。详见[模型配置](providers.md#模型配置-model_list)章节。 -> `request_timeout` 为可选项,单位为秒。若省略或设置为 `<= 0`,PicoClaw 使用默认超时(120 秒)。 +> `request_timeout` 为可选项,单位为秒。若省略或设置为 `<= 0`,Piconomous 使用默认超时(120 秒)。 **3. 获取 API Key** @@ -161,7 +161,7 @@ picoclaw onboard **4. 对话 (Chat)** ```bash -picoclaw agent -m "2+2 等于几?" +piconomous agent -m "2+2 等于几?" ``` 就是这样!您在 2 分钟内就拥有了一个可工作的 AI 助手。 diff --git a/docs/zh/hardware-compatibility.md b/docs/zh/hardware-compatibility.md index 66bd08072..8250c551a 100644 --- a/docs/zh/hardware-compatibility.md +++ b/docs/zh/hardware-compatibility.md @@ -1,8 +1,8 @@ > 返回 [README](../../README.zh.md) -# 🖥️ PicoClaw 硬件兼容性列表 +# 🖥️ Piconomous 硬件兼容性列表 -PicoClaw 几乎可以在任何 Linux 设备上运行。本页面记录了已验证的芯片、产品和开发板。 +Piconomous 几乎可以在任何 Linux 设备上运行。本页面记录了已验证的芯片、产品和开发板。 **你的硬件不在列表中?** 提交 PR 来添加它!欢迎硬件厂商贡献和联合推广。 @@ -59,7 +59,7 @@ PicoClaw 几乎可以在任何 Linux 设备上运行。本页面记录了已验 ## 2. 已验证的产品(按发布日期排列) -已通过 PicoClaw 测试的消费产品、路由器和工业设备。 +已通过 Piconomous 测试的消费产品、路由器和工业设备。 | 年份 | 产品 | 架构 | SoC | 内存 | 类别 | |------|------|------|-----|------|------| @@ -97,7 +97,7 @@ PicoClaw 几乎可以在任何 Linux 设备上运行。本页面记录了已验 ### Android 手机(通过 Termux) -任何 ARM64 Android 手机(2015 年以后),1GB 以上内存。安装 [Termux](https://github.com/termux/termux-app),使用 `proot` 运行 PicoClaw。 +任何 ARM64 Android 手机(2015 年以后),1GB 以上内存。安装 [Termux](https://github.com/termux/termux-app),使用 `proot` 运行 Piconomous。 > 参见 [README:在旧 Android 手机上运行](../../README.zh.md#-run-on-old-android-phones) 获取设置说明。 @@ -130,14 +130,14 @@ PicoClaw 几乎可以在任何 Linux 设备上运行。本页面记录了已验 ```bash # 1. 下载适合你架构的版本 -wget https://github.com/sipeed/picoclaw/releases/latest/download/picoclaw_Linux_arm64.tar.gz -tar xzf picoclaw_Linux_arm64.tar.gz +wget https://github.com/sipeed/piconomous/releases/latest/download/piconomous_Linux_arm64.tar.gz +tar xzf piconomous_Linux_arm64.tar.gz # 2. 初始化 -./picoclaw onboard +./piconomous onboard # 3. 测试 -./picoclaw agent -m "Hello, what board am I running on?" +./piconomous agent -m "Hello, what board am I running on?" ``` 可用构建版本:`linux-amd64`, `linux-arm64`, `linux-arm`, `linux-riscv64`, `linux-loong64`, `linux-mipsle` diff --git a/docs/zh/providers.md b/docs/zh/providers.md index 9092e7dfe..2cc0c8a64 100644 --- a/docs/zh/providers.md +++ b/docs/zh/providers.md @@ -11,7 +11,7 @@ | -------------------- | ---------------------------- | -------------------------------------------------------------------- | | `gemini` | LLM (Gemini 直连) | [aistudio.google.com](https://aistudio.google.com) | | `zhipu` | LLM (智谱直连) | [bigmodel.cn](https://bigmodel.cn) | -| `volcengine` | LLM (火山引擎直连) | [volcengine.com](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) | +| `volcengine` | LLM (火山引擎直连) | [volcengine.com](https://www.volcengine.com/activity/codingplan?utm_campaign=Piconomous&utm_content=Piconomous&utm_medium=devrel&utm_source=OWO&utm_term=Piconomous) | | `openrouter` | LLM (推荐,可访问所有模型) | [openrouter.ai](https://openrouter.ai) | | `anthropic` | LLM (Claude 直连) | [console.anthropic.com](https://console.anthropic.com) | | `openai` | LLM (GPT 直连) | [platform.openai.com](https://platform.openai.com) | @@ -29,7 +29,7 @@ ### 模型配置 (model_list) -> **新功能!** PicoClaw 现在采用**以模型为中心**的配置方式。只需使用 `厂商/模型` 格式(如 `zhipu/glm-4.7`)即可添加新的 provider——**无需修改任何代码!** +> **新功能!** Piconomous 现在采用**以模型为中心**的配置方式。只需使用 `厂商/模型` 格式(如 `zhipu/glm-4.7`)即可添加新的 provider——**无需修改任何代码!** 该设计同时支持**多 Agent 场景**,提供灵活的 Provider 选择: @@ -56,7 +56,7 @@ | **LiteLLM Proxy** | `litellm/` | `http://localhost:4000/v1` | OpenAI | 你的 LiteLLM 代理密钥 | | **VLLM** | `vllm/` | `http://localhost:8000/v1` | OpenAI | 本地 | | **Cerebras** | `cerebras/` | `https://api.cerebras.ai/v1` | OpenAI | [获取密钥](https://cerebras.ai) | -| **火山引擎(Doubao)** | `volcengine/` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [获取密钥](https://www.volcengine.com/activity/codingplan?utm_campaign=PicoClaw&utm_content=PicoClaw&utm_medium=devrel&utm_source=OWO&utm_term=PicoClaw) | +| **火山引擎(Doubao)** | `volcengine/` | `https://ark.cn-beijing.volces.com/api/v3` | OpenAI | [获取密钥](https://www.volcengine.com/activity/codingplan?utm_campaign=Piconomous&utm_content=Piconomous&utm_medium=devrel&utm_source=OWO&utm_term=Piconomous) | | **神算云** | `shengsuanyun/` | `https://router.shengsuanyun.com/api/v1` | OpenAI | - | | **BytePlus** | `byteplus/` | `https://ark.ap-southeast.bytepluses.com/api/v3` | OpenAI | [获取密钥](https://www.byteplus.com) | | **Vivgrid** | `vivgrid/` | `https://api.vivgrid.com/v1` | OpenAI | [获取密钥](https://vivgrid.com) | @@ -151,7 +151,7 @@ } ``` -> 运行 `picoclaw auth login --provider anthropic` 来设置 OAuth 凭证。 +> 运行 `piconomous auth login --provider anthropic` 来设置 OAuth 凭证。 **Anthropic Messages API(原生格式)** @@ -205,11 +205,11 @@ } ``` -PicoClaw 在发送请求前仅去除外层 `litellm/` 前缀,因此 `litellm/lite-gpt4` 会发送 `lite-gpt4`,而 `litellm/openai/gpt-4o` 会发送 `openai/gpt-4o`。 +Piconomous 在发送请求前仅去除外层 `litellm/` 前缀,因此 `litellm/lite-gpt4` 会发送 `lite-gpt4`,而 `litellm/openai/gpt-4o` 会发送 `openai/gpt-4o`。 #### 负载均衡 -为同一个模型名称配置多个端点——PicoClaw 会自动在它们之间轮询: +为同一个模型名称配置多个端点——Piconomous 会自动在它们之间轮询: ```json { @@ -276,7 +276,7 @@ PicoClaw 在发送请求前仅去除外层 `litellm/` 前缀,因此 `litellm/l ### Provider 架构 -PicoClaw 按协议族路由 Provider: +Piconomous 按协议族路由 Provider: - OpenAI 兼容协议:OpenRouter、OpenAI 兼容网关、Groq、智谱、vLLM 风格端点。 - Anthropic 协议:Claude 原生 API 行为。 @@ -297,7 +297,7 @@ PicoClaw 按协议族路由 Provider: { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "model_name": "glm-4.7", "max_tokens": 8192, "temperature": 0.7, @@ -316,7 +316,7 @@ PicoClaw 按协议族路由 Provider: **3. 运行** ```bash -picoclaw agent -m "你好" +piconomous agent -m "你好" ```
diff --git a/docs/zh/spawn-tasks.md b/docs/zh/spawn-tasks.md index 781462af2..26009da6d 100644 --- a/docs/zh/spawn-tasks.md +++ b/docs/zh/spawn-tasks.md @@ -2,7 +2,7 @@ > 返回 [README](../../README.zh.md) -PicoClaw 通过 `spawn` 工具支持**异步任务执行**。主要由 **Heartbeat(心跳)** 系统使用,在不阻塞主 Agent 循环的情况下运行耗时任务。 +Piconomous 通过 `spawn` 工具支持**异步任务执行**。主要由 **Heartbeat(心跳)** 系统使用,在不阻塞主 Agent 循环的情况下运行耗时任务。 ## Heartbeat @@ -66,5 +66,5 @@ Agent 读取 HEARTBEAT.md **环境变量:** -- `PICOCLAW_HEARTBEAT_ENABLED=false` 禁用 -- `PICOCLAW_HEARTBEAT_INTERVAL=60` 更改间隔 +- `PICONOMOUS_HEARTBEAT_ENABLED=false` 禁用 +- `PICONOMOUS_HEARTBEAT_INTERVAL=60` 更改间隔 diff --git a/docs/zh/tools_configuration.md b/docs/zh/tools_configuration.md index f13448952..666dc4d7b 100644 --- a/docs/zh/tools_configuration.md +++ b/docs/zh/tools_configuration.md @@ -2,7 +2,7 @@ > 返回 [README](../../README.zh.md) -PicoClaw 的工具配置位于 `config.json` 的 `tools` 字段中。 +Piconomous 的工具配置位于 `config.json` 的 `tools` 字段中。 ## 目录结构 @@ -127,7 +127,7 @@ Exec 工具用于执行 shell 命令。 **通过环境变量:** ```bash -PICOCLAW_TOOLS_EXEC_ENABLED=false +PICONOMOUS_TOOLS_EXEC_ENABLED=false ``` > **注意:** 禁用后,代理将无法执行 shell 命令。这也会影响 Cron 工具运行计划 shell 命令的能力。 @@ -139,7 +139,7 @@ PICOCLAW_TOOLS_EXEC_ENABLED=false ### 默认拦截的命令模式 -默认情况下,PicoClaw 会拦截以下危险命令: +默认情况下,Piconomous 会拦截以下危险命令: - 删除命令:`rm -rf`、`del /f/q`、`rmdir /s` - 磁盘操作:`format`、`mkfs`、`diskpart`、`dd if=`、写入 `/dev/sd*` @@ -156,7 +156,7 @@ PICOCLAW_TOOLS_EXEC_ENABLED=false ### 已知架构限制 -exec 守卫仅验证发送给 PicoClaw 的顶层命令。它**不会**递归检查该命令启动后由构建工具或脚本生成的子进程。 +exec 守卫仅验证发送给 Piconomous 的顶层命令。它**不会**递归检查该命令启动后由构建工具或脚本生成的子进程。 以下工作流在初始命令被允许后可以绕过直接命令守卫: @@ -408,14 +408,14 @@ Skills 工具配置通过 ClawHub 等注册表进行技能发现和安装。 ## 环境变量 -所有配置选项都可以通过格式为 `PICOCLAW_TOOLS_
_` 的环境变量覆盖: +所有配置选项都可以通过格式为 `PICONOMOUS_TOOLS_
_` 的环境变量覆盖: 例如: -- `PICOCLAW_TOOLS_WEB_BRAVE_ENABLED=true` -- `PICOCLAW_TOOLS_EXEC_ENABLED=false` -- `PICOCLAW_TOOLS_EXEC_ENABLE_DENY_PATTERNS=false` -- `PICOCLAW_TOOLS_CRON_EXEC_TIMEOUT_MINUTES=10` -- `PICOCLAW_TOOLS_MCP_ENABLED=true` +- `PICONOMOUS_TOOLS_WEB_BRAVE_ENABLED=true` +- `PICONOMOUS_TOOLS_EXEC_ENABLED=false` +- `PICONOMOUS_TOOLS_EXEC_ENABLE_DENY_PATTERNS=false` +- `PICONOMOUS_TOOLS_CRON_EXEC_TIMEOUT_MINUTES=10` +- `PICONOMOUS_TOOLS_MCP_ENABLED=true` 注意:嵌套的映射式配置(例如 `tools.mcp.servers..*`)在 `config.json` 中配置,而非通过环境变量。 diff --git a/docs/zh/troubleshooting.md b/docs/zh/troubleshooting.md index be4d4f5d7..b8d73c177 100644 --- a/docs/zh/troubleshooting.md +++ b/docs/zh/troubleshooting.md @@ -14,7 +14,7 @@ - **错误:** `"model": "free"` → OpenRouter 收到 `free` 并拒绝。 - **正确:** `"model": "openrouter/free"` → OpenRouter 收到 `openrouter/free`(自动免费层路由)。 -**修复方法:** 在 `~/.picoclaw/config.json`(或你的配置路径)中: +**修复方法:** 在 `~/.piconomous/config.json`(或你的配置路径)中: 1. **agents.defaults.model_name** 必须匹配 `model_list` 中的某个 `model_name`(例如 `"openrouter-free"`)。 2. 该条目的 **model** 必须是有效的 OpenRouter 模型 ID,例如: diff --git a/examples/pico-echo-server/README.md b/examples/pico-echo-server/README.md index f6b5d8020..1a9dce81d 100644 --- a/examples/pico-echo-server/README.md +++ b/examples/pico-echo-server/README.md @@ -44,4 +44,4 @@ go run ./examples/pico-echo-server -addr :9090 -token secret } ``` -3. Start picoclaw — the client connects and you can exchange messages interactively via stdin/stdout. +3. Start piconomous — the client connects and you can exchange messages interactively via stdin/stdout. diff --git a/go.mod b/go.mod index cfc930d37..e2c92b589 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/sipeed/picoclaw +module github.com/sipeed/piconomous go 1.25.8 diff --git a/pkg/agent/context.go b/pkg/agent/context.go index 8db8f0b5e..7309c22ae 100644 --- a/pkg/agent/context.go +++ b/pkg/agent/context.go @@ -12,11 +12,11 @@ import ( "sync" "time" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/providers" - "github.com/sipeed/picoclaw/pkg/skills" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/providers" + "github.com/sipeed/piconomous/pkg/skills" + "github.com/sipeed/piconomous/pkg/utils" ) type ContextBuilder struct { @@ -59,7 +59,7 @@ func getGlobalConfigDir() string { if err != nil { return "" } - return filepath.Join(home, ".picoclaw") + return filepath.Join(home, ".piconomous") } func NewContextBuilder(workspace string) *ContextBuilder { @@ -85,9 +85,9 @@ func (cb *ContextBuilder) getIdentity() string { version := config.FormatVersion() return fmt.Sprintf( - `# picoclaw 🦞 (%s) + `# piconomous 🦞 (%s) -You are picoclaw, a helpful AI assistant. +You are piconomous, a helpful AI assistant. ## Workspace Your workspace is at: %s diff --git a/pkg/agent/context_cache_test.go b/pkg/agent/context_cache_test.go index c26976c3c..a0075a1c3 100644 --- a/pkg/agent/context_cache_test.go +++ b/pkg/agent/context_cache_test.go @@ -8,14 +8,14 @@ import ( "testing" "time" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/sipeed/piconomous/pkg/providers" ) // setupWorkspace creates a temporary workspace with standard directories and optional files. // Returns the tmpDir path; caller should defer os.RemoveAll(tmpDir). func setupWorkspace(t *testing.T, files map[string]string) string { t.Helper() - tmpDir, err := os.MkdirTemp("", "picoclaw-test-*") + tmpDir, err := os.MkdirTemp("", "piconomous-test-*") if err != nil { t.Fatal(err) } @@ -102,7 +102,7 @@ func TestSingleSystemMessage(t *testing.T) { // System message must contain identity (static) and time (dynamic) sys := msgs[0].Content - if !strings.Contains(sys, "picoclaw") { + if !strings.Contains(sys, "piconomous") { t.Error("system message missing identity") } if !strings.Contains(sys, "Current Time") { @@ -446,7 +446,7 @@ Updated content.` } // TestGlobalSkillFileContentChange verifies that modifying a global skill -// (~/.picoclaw/skills) invalidates the cached system prompt. +// (~/.piconomous/skills) invalidates the cached system prompt. func TestGlobalSkillFileContentChange(t *testing.T) { tmpHome := t.TempDir() t.Setenv("HOME", tmpHome) @@ -454,7 +454,7 @@ func TestGlobalSkillFileContentChange(t *testing.T) { tmpDir := setupWorkspace(t, nil) defer os.RemoveAll(tmpDir) - globalSkillPath := filepath.Join(tmpHome, ".picoclaw", "skills", "global-skill", "SKILL.md") + globalSkillPath := filepath.Join(tmpHome, ".piconomous", "skills", "global-skill", "SKILL.md") if err := os.MkdirAll(filepath.Dir(globalSkillPath), 0o755); err != nil { t.Fatal(err) } @@ -512,7 +512,7 @@ func TestBuiltinSkillFileContentChange(t *testing.T) { defer os.RemoveAll(tmpDir) builtinRoot := t.TempDir() - t.Setenv("PICOCLAW_BUILTIN_SKILLS", builtinRoot) + t.Setenv("PICONOMOUS_BUILTIN_SKILLS", builtinRoot) builtinSkillPath := filepath.Join(builtinRoot, "builtin-skill", "SKILL.md") if err := os.MkdirAll(filepath.Dir(builtinSkillPath), 0o755); err != nil { @@ -632,7 +632,7 @@ func TestConcurrentBuildSystemPromptWithCache(t *testing.T) { errs <- "empty prompt returned" return } - if !strings.Contains(result, "picoclaw") { + if !strings.Contains(result, "piconomous") { errs <- "prompt missing identity" return } @@ -709,7 +709,7 @@ func TestEmptyWorkspaceBaselineDetectsNewFiles(t *testing.T) { // BenchmarkBuildMessagesWithCache measures caching performance. func BenchmarkBuildMessagesWithCache(b *testing.B) { - tmpDir, _ := os.MkdirTemp("", "picoclaw-bench-*") + tmpDir, _ := os.MkdirTemp("", "piconomous-bench-*") defer os.RemoveAll(tmpDir) os.MkdirAll(filepath.Join(tmpDir, "memory"), 0o755) diff --git a/pkg/agent/context_test.go b/pkg/agent/context_test.go index 5756ed911..deab827e8 100644 --- a/pkg/agent/context_test.go +++ b/pkg/agent/context_test.go @@ -3,7 +3,7 @@ package agent import ( "testing" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/sipeed/piconomous/pkg/providers" ) func msg(role, content string) providers.Message { diff --git a/pkg/agent/instance.go b/pkg/agent/instance.go index 355e78a33..a5f47042a 100644 --- a/pkg/agent/instance.go +++ b/pkg/agent/instance.go @@ -8,14 +8,14 @@ import ( "regexp" "strings" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/media" - "github.com/sipeed/picoclaw/pkg/memory" - "github.com/sipeed/picoclaw/pkg/providers" - "github.com/sipeed/picoclaw/pkg/routing" - "github.com/sipeed/picoclaw/pkg/session" - "github.com/sipeed/picoclaw/pkg/tools" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/media" + "github.com/sipeed/piconomous/pkg/memory" + "github.com/sipeed/piconomous/pkg/providers" + "github.com/sipeed/piconomous/pkg/routing" + "github.com/sipeed/piconomous/pkg/session" + "github.com/sipeed/piconomous/pkg/tools" ) // AgentInstance represents a fully configured agent with its own workspace, @@ -202,7 +202,7 @@ func resolveAgentWorkspace(agentCfg *config.AgentConfig, defaults *config.AgentD if agentCfg != nil && strings.TrimSpace(agentCfg.Workspace) != "" { return expandHome(strings.TrimSpace(agentCfg.Workspace)) } - // Use the configured default workspace (respects PICOCLAW_HOME) + // Use the configured default workspace (respects PICONOMOUS_HOME) if agentCfg == nil || agentCfg.Default || agentCfg.ID == "" || routing.NormalizeAgentID(agentCfg.ID) == "main" { return expandHome(defaults.Workspace) } diff --git a/pkg/agent/instance_test.go b/pkg/agent/instance_test.go index b3318ad1f..41505fe17 100644 --- a/pkg/agent/instance_test.go +++ b/pkg/agent/instance_test.go @@ -7,8 +7,8 @@ import ( "strings" "testing" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/media" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/media" ) func TestNewAgentInstance_UsesDefaultsTemperatureAndMaxTokens(t *testing.T) { diff --git a/pkg/agent/loop.go b/pkg/agent/loop.go index ed5c73afc..81ab95056 100644 --- a/pkg/agent/loop.go +++ b/pkg/agent/loop.go @@ -1,8 +1,8 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // Inspired by and based on nanobot: https://github.com/HKUDS/nanobot // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package agent @@ -19,20 +19,20 @@ import ( "time" "unicode/utf8" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/commands" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/constants" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/media" - "github.com/sipeed/picoclaw/pkg/providers" - "github.com/sipeed/picoclaw/pkg/routing" - "github.com/sipeed/picoclaw/pkg/skills" - "github.com/sipeed/picoclaw/pkg/state" - "github.com/sipeed/picoclaw/pkg/tools" - "github.com/sipeed/picoclaw/pkg/utils" - "github.com/sipeed/picoclaw/pkg/voice" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/commands" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/constants" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/media" + "github.com/sipeed/piconomous/pkg/providers" + "github.com/sipeed/piconomous/pkg/routing" + "github.com/sipeed/piconomous/pkg/skills" + "github.com/sipeed/piconomous/pkg/state" + "github.com/sipeed/piconomous/pkg/tools" + "github.com/sipeed/piconomous/pkg/utils" + "github.com/sipeed/piconomous/pkg/voice" ) type AgentLoop struct { @@ -260,6 +260,13 @@ func registerSharedTools( } else if (spawnEnabled || spawnStatusEnabled) && !cfg.Tools.IsToolEnabled("subagent") { logger.WarnCF("agent", "spawn/spawn_status tools require subagent to be enabled", nil) } + + // Goal management tool — always available when autonomous mode is enabled, + // or when explicitly enabled via tools.goal config. + if cfg.Autonomous.Enabled || cfg.Tools.IsToolEnabled("goal") { + maxGoals := cfg.Autonomous.MaxGoals + agent.Tools.Register(tools.NewGoalTool(agent.Workspace, maxGoals)) + } } } diff --git a/pkg/agent/loop_mcp.go b/pkg/agent/loop_mcp.go index 97debbc33..b8b71f65c 100644 --- a/pkg/agent/loop_mcp.go +++ b/pkg/agent/loop_mcp.go @@ -1,8 +1,8 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // Inspired by and based on nanobot: https://github.com/HKUDS/nanobot // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package agent @@ -11,10 +11,10 @@ import ( "fmt" "sync" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/mcp" - "github.com/sipeed/picoclaw/pkg/tools" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/mcp" + "github.com/sipeed/piconomous/pkg/tools" ) type mcpRuntime struct { diff --git a/pkg/agent/loop_mcp_test.go b/pkg/agent/loop_mcp_test.go index 35c3e49c8..e86eaa057 100644 --- a/pkg/agent/loop_mcp_test.go +++ b/pkg/agent/loop_mcp_test.go @@ -1,15 +1,15 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // Inspired by and based on nanobot: https://github.com/HKUDS/nanobot // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package agent import ( "testing" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/config" ) func boolPtr(b bool) *bool { return &b } diff --git a/pkg/agent/loop_media.go b/pkg/agent/loop_media.go index 1380f0214..09c2f6b3b 100644 --- a/pkg/agent/loop_media.go +++ b/pkg/agent/loop_media.go @@ -1,8 +1,8 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // Inspired by and based on nanobot: https://github.com/HKUDS/nanobot // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package agent @@ -15,9 +15,9 @@ import ( "github.com/h2non/filetype" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/media" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/media" + "github.com/sipeed/piconomous/pkg/providers" ) // resolveMediaRefs resolves media:// refs in messages. diff --git a/pkg/agent/loop_test.go b/pkg/agent/loop_test.go index 28eab03db..08c272f84 100644 --- a/pkg/agent/loop_test.go +++ b/pkg/agent/loop_test.go @@ -13,13 +13,13 @@ import ( "testing" "time" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/media" - "github.com/sipeed/picoclaw/pkg/providers" - "github.com/sipeed/picoclaw/pkg/routing" - "github.com/sipeed/picoclaw/pkg/tools" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/media" + "github.com/sipeed/piconomous/pkg/providers" + "github.com/sipeed/piconomous/pkg/routing" + "github.com/sipeed/piconomous/pkg/tools" ) type fakeChannel struct{ id string } diff --git a/pkg/agent/memory.go b/pkg/agent/memory.go index 01e682f3b..7769454b5 100644 --- a/pkg/agent/memory.go +++ b/pkg/agent/memory.go @@ -1,8 +1,8 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // Inspired by and based on nanobot: https://github.com/HKUDS/nanobot // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package agent @@ -13,7 +13,7 @@ import ( "strings" "time" - "github.com/sipeed/picoclaw/pkg/fileutil" + "github.com/sipeed/piconomous/pkg/fileutil" ) // MemoryStore manages persistent memory for the agent. diff --git a/pkg/agent/mock_provider_test.go b/pkg/agent/mock_provider_test.go index 4962810dc..343d62512 100644 --- a/pkg/agent/mock_provider_test.go +++ b/pkg/agent/mock_provider_test.go @@ -3,7 +3,7 @@ package agent import ( "context" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/sipeed/piconomous/pkg/providers" ) type mockProvider struct{} diff --git a/pkg/agent/model_resolution.go b/pkg/agent/model_resolution.go index 140cff718..44ad874cc 100644 --- a/pkg/agent/model_resolution.go +++ b/pkg/agent/model_resolution.go @@ -4,8 +4,8 @@ import ( "fmt" "strings" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/providers" ) func buildModelListResolver(cfg *config.Config) func(raw string) (string, bool) { diff --git a/pkg/agent/registry.go b/pkg/agent/registry.go index 58b7ce440..ef695abeb 100644 --- a/pkg/agent/registry.go +++ b/pkg/agent/registry.go @@ -3,11 +3,11 @@ package agent import ( "sync" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/providers" - "github.com/sipeed/picoclaw/pkg/routing" - "github.com/sipeed/picoclaw/pkg/tools" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/providers" + "github.com/sipeed/piconomous/pkg/routing" + "github.com/sipeed/piconomous/pkg/tools" ) // AgentRegistry manages multiple agent instances and routes messages to them. diff --git a/pkg/agent/registry_test.go b/pkg/agent/registry_test.go index 518bb441f..c58e162cc 100644 --- a/pkg/agent/registry_test.go +++ b/pkg/agent/registry_test.go @@ -4,8 +4,8 @@ import ( "context" "testing" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/providers" ) type mockRegistryProvider struct{} @@ -28,7 +28,7 @@ func testCfg(agents []config.AgentConfig) *config.Config { return &config.Config{ Agents: config.AgentsConfig{ Defaults: config.AgentDefaults{ - Workspace: "/tmp/picoclaw-test-registry", + Workspace: "/tmp/piconomous-test-registry", Model: "gpt-4", MaxTokens: 8192, MaxToolIterations: 10, diff --git a/pkg/auth/oauth.go b/pkg/auth/oauth.go index 4667e3d81..20342f708 100644 --- a/pkg/auth/oauth.go +++ b/pkg/auth/oauth.go @@ -462,7 +462,7 @@ func buildAuthorizeURL(cfg OAuthProviderConfig, pkce PKCECodes, state, redirectU params.Set("id_token_add_organizations", "true") params.Set("codex_cli_simplified_flow", "true") if strings.Contains(strings.ToLower(cfg.Issuer), "auth.openai.com") { - params.Set("originator", "picoclaw") + params.Set("originator", "piconomous") } if cfg.Originator != "" { params.Set("originator", cfg.Originator) diff --git a/pkg/auth/store.go b/pkg/auth/store.go index f7813ca57..c8c267e99 100644 --- a/pkg/auth/store.go +++ b/pkg/auth/store.go @@ -6,8 +6,8 @@ import ( "path/filepath" "time" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/fileutil" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/fileutil" ) type AuthCredential struct { @@ -44,7 +44,7 @@ func authFilePath() string { return filepath.Join(home, "auth.json") } home, _ := os.UserHomeDir() - return filepath.Join(home, ".picoclaw", "auth.json") + return filepath.Join(home, ".piconomous", "auth.json") } func LoadStore() (*AuthStore, error) { diff --git a/pkg/auth/store_test.go b/pkg/auth/store_test.go index f6793cfce..88d6ffef9 100644 --- a/pkg/auth/store_test.go +++ b/pkg/auth/store_test.go @@ -102,7 +102,7 @@ func TestStoreFilePermissions(t *testing.T) { t.Fatalf("SetCredential() error: %v", err) } - path := filepath.Join(tmpDir, ".picoclaw", "auth.json") + path := filepath.Join(tmpDir, ".piconomous", "auth.json") info, err := os.Stat(path) if err != nil { t.Fatalf("Stat() error: %v", err) diff --git a/pkg/bus/bus.go b/pkg/bus/bus.go index 37fcb74c5..f9b190997 100644 --- a/pkg/bus/bus.go +++ b/pkg/bus/bus.go @@ -6,7 +6,7 @@ import ( "sync" "sync/atomic" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/piconomous/pkg/logger" ) // ErrBusClosed is returned when publishing to a closed MessageBus. diff --git a/pkg/channels/README.md b/pkg/channels/README.md index b7c56660b..c7c4fd2a5 100644 --- a/pkg/channels/README.md +++ b/pkg/channels/README.md @@ -1,6 +1,6 @@ -# PicoClaw Channel System: Complete Development Guide +# Piconomous Channel System: Complete Development Guide -> **Scope**: `pkg/channels/`, `pkg/bus/`, `pkg/media/`, `pkg/identity/`, `cmd/picoclaw/internal/gateway/` +> **Scope**: `pkg/channels/`, `pkg/bus/`, `pkg/media/`, `pkg/identity/`, `cmd/piconomous/internal/gateway/` --- @@ -162,19 +162,19 @@ Using Telegram as an example, the main changes are: package channels import ( - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/config" ) // New code (refactored branch) package telegram import ( - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" // Reference parent package - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/identity" // New - "github.com/sipeed/picoclaw/pkg/media" // New (if media support needed) + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" // Reference parent package + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/identity" // New + "github.com/sipeed/piconomous/pkg/media" // New (if media support needed) ) ``` @@ -321,9 +321,9 @@ Create `init.go` for your channel: package telegram import ( - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" ) func init() { @@ -336,11 +336,11 @@ func init() { **3h. Import sub-package in Gateway** ```go -// cmd/picoclaw/internal/gateway/helpers.go +// cmd/piconomous/internal/gateway/helpers.go import ( - _ "github.com/sipeed/picoclaw/pkg/channels/telegram" // Triggers init() registration - _ "github.com/sipeed/picoclaw/pkg/channels/discord" - _ "github.com/sipeed/picoclaw/pkg/channels/your_new_channel" // New addition + _ "github.com/sipeed/piconomous/pkg/channels/telegram" // Triggers init() registration + _ "github.com/sipeed/piconomous/pkg/channels/discord" + _ "github.com/sipeed/piconomous/pkg/channels/your_new_channel" // New addition ) ``` @@ -421,9 +421,9 @@ To add a new chat platform (e.g., `matrix`), you need to: package matrix import ( - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" ) func init() { @@ -442,11 +442,11 @@ import ( "context" "fmt" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/identity" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/identity" + "github.com/sipeed/piconomous/pkg/logger" ) // MatrixChannel implements channels.Channel for the Matrix protocol. @@ -810,9 +810,9 @@ if m.config.Channels.Matrix.Enabled && m.config.Channels.Matrix.Token != "" { #### Add blank import in Gateway ```go -// cmd/picoclaw/internal/gateway/helpers.go +// cmd/piconomous/internal/gateway/helpers.go import ( - _ "github.com/sipeed/picoclaw/pkg/channels/matrix" + _ "github.com/sipeed/piconomous/pkg/channels/matrix" ) ``` @@ -1373,7 +1373,7 @@ agentLoop.Stop() // Stop Agent 3. **WeCom has two factories**: `"wecom"` (Bot mode, webhook only) and `"wecom_app"` (App mode, supports MediaSender) are registered separately. Both implement `WebhookHandler` and `HealthChecker`. -4. **Pico Protocol**: `pkg/channels/pico/` implements a custom PicoClaw native protocol channel that receives messages via WebSocket webhook (`/pico/ws`). +4. **Pico Protocol**: `pkg/channels/pico/` implements a custom Piconomous native protocol channel that receives messages via WebSocket webhook (`/pico/ws`). 5. **WhatsApp has two modes**: `"whatsapp"` (Bridge mode, communicates via external bridge URL) and `"whatsapp_native"` (native whatsmeow mode, connects directly to WhatsApp). Manager selects which to initialize based on `WhatsAppConfig.UseNative`. diff --git a/pkg/channels/README.zh.md b/pkg/channels/README.zh.md index 2c5e7356e..75c4dca66 100644 --- a/pkg/channels/README.zh.md +++ b/pkg/channels/README.zh.md @@ -1,6 +1,6 @@ -# PicoClaw Channel System:完整开发指南 +# Piconomous Channel System:完整开发指南 -> **影响范围**: `pkg/channels/`, `pkg/bus/`, `pkg/media/`, `pkg/identity/`, `cmd/picoclaw/internal/gateway/` +> **影响范围**: `pkg/channels/`, `pkg/bus/`, `pkg/media/`, `pkg/identity/`, `cmd/piconomous/internal/gateway/` --- @@ -162,19 +162,19 @@ pkg/identity/ package channels import ( - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/config" ) // 新代码(重构分支) package telegram import ( - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" // 引用父包 - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/identity" // 新增 - "github.com/sipeed/picoclaw/pkg/media" // 新增(如需媒体) + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" // 引用父包 + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/identity" // 新增 + "github.com/sipeed/piconomous/pkg/media" // 新增(如需媒体) ) ``` @@ -321,9 +321,9 @@ c.HandleMessage(ctx, peer, messageID, senderID, chatID, content, mediaRefs, meta package telegram import ( - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" ) func init() { @@ -336,11 +336,11 @@ func init() { **3h. 在 Gateway 中导入子包** ```go -// cmd/picoclaw/internal/gateway/helpers.go +// cmd/piconomous/internal/gateway/helpers.go import ( - _ "github.com/sipeed/picoclaw/pkg/channels/telegram" // 触发 init() 注册 - _ "github.com/sipeed/picoclaw/pkg/channels/discord" - _ "github.com/sipeed/picoclaw/pkg/channels/your_new_channel" // 新增 + _ "github.com/sipeed/piconomous/pkg/channels/telegram" // 触发 init() 注册 + _ "github.com/sipeed/piconomous/pkg/channels/discord" + _ "github.com/sipeed/piconomous/pkg/channels/your_new_channel" // 新增 ) ``` @@ -421,9 +421,9 @@ Agent Loop 的主要变化: package matrix import ( - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" ) func init() { @@ -442,11 +442,11 @@ import ( "context" "fmt" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/identity" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/identity" + "github.com/sipeed/piconomous/pkg/logger" ) // MatrixChannel implements channels.Channel for the Matrix protocol. @@ -809,9 +809,9 @@ if m.config.Channels.Matrix.Enabled && m.config.Channels.Matrix.Token != "" { #### 在 Gateway 中添加 blank import ```go -// cmd/picoclaw/internal/gateway/helpers.go +// cmd/piconomous/internal/gateway/helpers.go import ( - _ "github.com/sipeed/picoclaw/pkg/channels/matrix" + _ "github.com/sipeed/piconomous/pkg/channels/matrix" ) ``` @@ -1372,7 +1372,7 @@ agentLoop.Stop() // 停止 Agent 3. **WeCom 有两个工厂**:`"wecom"`(Bot 模式,纯 webhook)和 `"wecom_app"`(应用模式,支持 MediaSender)分别注册。两者都实现了 `WebhookHandler` 和 `HealthChecker`。 -4. **Pico Protocol**:`pkg/channels/pico/` 实现了一个自定义的 PicoClaw 原生协议 channel,通过 WebSocket webhook (`/pico/ws`) 接收消息。 +4. **Pico Protocol**:`pkg/channels/pico/` 实现了一个自定义的 Piconomous 原生协议 channel,通过 WebSocket webhook (`/pico/ws`) 接收消息。 5. **WhatsApp 有两种模式**:`"whatsapp"`(Bridge 模式,通过外部 bridge URL 通信)和 `"whatsapp_native"`(原生 whatsmeow 模式,直接连接 WhatsApp)。Manager 根据 `WhatsAppConfig.UseNative` 决定初始化哪个。 diff --git a/pkg/channels/base.go b/pkg/channels/base.go index 882e72d08..d5917a1cc 100644 --- a/pkg/channels/base.go +++ b/pkg/channels/base.go @@ -11,11 +11,11 @@ import ( "sync/atomic" "time" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/identity" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/media" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/identity" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/media" ) var ( diff --git a/pkg/channels/base_test.go b/pkg/channels/base_test.go index 6132b8bf9..0b002c6f8 100644 --- a/pkg/channels/base_test.go +++ b/pkg/channels/base_test.go @@ -3,8 +3,8 @@ package channels import ( "testing" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/config" ) func TestBaseChannelIsAllowed(t *testing.T) { diff --git a/pkg/channels/dingtalk/dingtalk.go b/pkg/channels/dingtalk/dingtalk.go index c03122892..bddf0ec44 100644 --- a/pkg/channels/dingtalk/dingtalk.go +++ b/pkg/channels/dingtalk/dingtalk.go @@ -1,4 +1,4 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // DingTalk channel implementation using Stream Mode package dingtalk @@ -12,12 +12,12 @@ import ( "github.com/open-dingtalk/dingtalk-stream-sdk-go/client" dinglog "github.com/open-dingtalk/dingtalk-stream-sdk-go/logger" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/identity" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/identity" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/utils" ) // DingTalkChannel implements the Channel interface for DingTalk (钉钉) @@ -214,7 +214,7 @@ func (c *DingTalkChannel) SendDirectReply(ctx context.Context, sessionWebhook, c // Convert string content to []byte for the API contentBytes := []byte(content) - titleBytes := []byte("PicoClaw") + titleBytes := []byte("Piconomous") // Send markdown formatted reply err := replier.SimpleReplyMarkdown( diff --git a/pkg/channels/dingtalk/init.go b/pkg/channels/dingtalk/init.go index 5f49bce8c..f0a07b1ef 100644 --- a/pkg/channels/dingtalk/init.go +++ b/pkg/channels/dingtalk/init.go @@ -1,9 +1,9 @@ package dingtalk import ( - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" ) func init() { diff --git a/pkg/channels/discord/discord.go b/pkg/channels/discord/discord.go index 83a04907c..7432ae823 100644 --- a/pkg/channels/discord/discord.go +++ b/pkg/channels/discord/discord.go @@ -14,13 +14,13 @@ import ( "github.com/bwmarrin/discordgo" "github.com/gorilla/websocket" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/identity" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/media" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/identity" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/media" + "github.com/sipeed/piconomous/pkg/utils" ) const ( diff --git a/pkg/channels/discord/init.go b/pkg/channels/discord/init.go index 15a539804..fe6df039f 100644 --- a/pkg/channels/discord/init.go +++ b/pkg/channels/discord/init.go @@ -1,9 +1,9 @@ package discord import ( - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" ) func init() { diff --git a/pkg/channels/feishu/feishu_32.go b/pkg/channels/feishu/feishu_32.go index f5e3aa224..f0b13a7d2 100644 --- a/pkg/channels/feishu/feishu_32.go +++ b/pkg/channels/feishu/feishu_32.go @@ -6,9 +6,9 @@ import ( "context" "errors" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" ) // FeishuChannel is a stub implementation for 32-bit architectures diff --git a/pkg/channels/feishu/feishu_64.go b/pkg/channels/feishu/feishu_64.go index 37a74718a..b0569f888 100644 --- a/pkg/channels/feishu/feishu_64.go +++ b/pkg/channels/feishu/feishu_64.go @@ -21,13 +21,13 @@ import ( larkim "github.com/larksuite/oapi-sdk-go/v3/service/im/v1" larkws "github.com/larksuite/oapi-sdk-go/v3/ws" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/identity" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/media" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/identity" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/media" + "github.com/sipeed/piconomous/pkg/utils" ) // errCodeTenantTokenInvalid is the Feishu API error code for an expired/revoked @@ -695,7 +695,7 @@ func (c *FeishuChannel) downloadResource( filename += fallbackExt } - // Write to the shared picoclaw_media directory using a unique name to avoid collisions. + // Write to the shared piconomous_media directory using a unique name to avoid collisions. mediaDir := media.TempDir() if mkdirErr := os.MkdirAll(mediaDir, 0o700); mkdirErr != nil { logger.ErrorCF("feishu", "Failed to create media directory", map[string]any{ diff --git a/pkg/channels/feishu/init.go b/pkg/channels/feishu/init.go index 7e5a62dae..112d80dab 100644 --- a/pkg/channels/feishu/init.go +++ b/pkg/channels/feishu/init.go @@ -1,9 +1,9 @@ package feishu import ( - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" ) func init() { diff --git a/pkg/channels/interfaces.go b/pkg/channels/interfaces.go index 0cfd435b0..d160c54bc 100644 --- a/pkg/channels/interfaces.go +++ b/pkg/channels/interfaces.go @@ -3,8 +3,8 @@ package channels import ( "context" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/commands" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/commands" ) // TypingCapable — channels that can show a typing/thinking indicator. diff --git a/pkg/channels/interfaces_command_test.go b/pkg/channels/interfaces_command_test.go index de5502644..e2cd745a0 100644 --- a/pkg/channels/interfaces_command_test.go +++ b/pkg/channels/interfaces_command_test.go @@ -4,7 +4,7 @@ import ( "context" "testing" - "github.com/sipeed/picoclaw/pkg/commands" + "github.com/sipeed/piconomous/pkg/commands" ) type mockRegistrar struct{} diff --git a/pkg/channels/irc/handler.go b/pkg/channels/irc/handler.go index aca4ddd11..662ea3fb2 100644 --- a/pkg/channels/irc/handler.go +++ b/pkg/channels/irc/handler.go @@ -9,9 +9,9 @@ import ( "github.com/ergochat/irc-go/ircevent" "github.com/ergochat/irc-go/ircmsg" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/identity" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/identity" + "github.com/sipeed/piconomous/pkg/logger" ) // onConnect is called after a successful connection (and on reconnect). diff --git a/pkg/channels/irc/init.go b/pkg/channels/irc/init.go index 221d41b62..ca945c3a8 100644 --- a/pkg/channels/irc/init.go +++ b/pkg/channels/irc/init.go @@ -1,9 +1,9 @@ package irc import ( - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" ) func init() { diff --git a/pkg/channels/irc/irc.go b/pkg/channels/irc/irc.go index 28c59b540..47bed8f3f 100644 --- a/pkg/channels/irc/irc.go +++ b/pkg/channels/irc/irc.go @@ -9,10 +9,10 @@ import ( "github.com/ergochat/irc-go/ircevent" "github.com/ergochat/irc-go/ircmsg" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/logger" ) // IRCChannel implements the Channel interface for IRC servers. diff --git a/pkg/channels/irc/irc_test.go b/pkg/channels/irc/irc_test.go index 168252a4d..ac7f80062 100644 --- a/pkg/channels/irc/irc_test.go +++ b/pkg/channels/irc/irc_test.go @@ -3,8 +3,8 @@ package irc import ( "testing" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/config" ) func TestNewIRCChannel(t *testing.T) { diff --git a/pkg/channels/line/init.go b/pkg/channels/line/init.go index 9265575cc..7d52dfb23 100644 --- a/pkg/channels/line/init.go +++ b/pkg/channels/line/init.go @@ -1,9 +1,9 @@ package line import ( - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" ) func init() { diff --git a/pkg/channels/line/line.go b/pkg/channels/line/line.go index 56ba02183..db64a8272 100644 --- a/pkg/channels/line/line.go +++ b/pkg/channels/line/line.go @@ -14,13 +14,13 @@ import ( "sync" "time" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/identity" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/media" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/identity" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/media" + "github.com/sipeed/piconomous/pkg/utils" ) const ( diff --git a/pkg/channels/maixcam/init.go b/pkg/channels/maixcam/init.go index 5a269b22b..62197016d 100644 --- a/pkg/channels/maixcam/init.go +++ b/pkg/channels/maixcam/init.go @@ -1,9 +1,9 @@ package maixcam import ( - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" ) func init() { diff --git a/pkg/channels/maixcam/maixcam.go b/pkg/channels/maixcam/maixcam.go index ff9a3ed1a..2280cf609 100644 --- a/pkg/channels/maixcam/maixcam.go +++ b/pkg/channels/maixcam/maixcam.go @@ -8,11 +8,11 @@ import ( "sync" "time" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/identity" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/identity" + "github.com/sipeed/piconomous/pkg/logger" ) type MaixCamChannel struct { diff --git a/pkg/channels/manager.go b/pkg/channels/manager.go index ff3fa399c..ed1816278 100644 --- a/pkg/channels/manager.go +++ b/pkg/channels/manager.go @@ -1,8 +1,8 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // Inspired by and based on nanobot: https://github.com/HKUDS/nanobot // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package channels @@ -17,12 +17,12 @@ import ( "golang.org/x/time/rate" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/constants" - "github.com/sipeed/picoclaw/pkg/health" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/media" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/constants" + "github.com/sipeed/piconomous/pkg/health" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/media" ) const ( diff --git a/pkg/channels/manager_channel.go b/pkg/channels/manager_channel.go index 57cb05412..d2140ab1c 100644 --- a/pkg/channels/manager_channel.go +++ b/pkg/channels/manager_channel.go @@ -5,8 +5,8 @@ import ( "encoding/hex" "encoding/json" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/logger" ) func toChannelHashes(cfg *config.Config) map[string]string { diff --git a/pkg/channels/manager_channel_test.go b/pkg/channels/manager_channel_test.go index 651764c4f..7744f5f51 100644 --- a/pkg/channels/manager_channel_test.go +++ b/pkg/channels/manager_channel_test.go @@ -5,8 +5,8 @@ import ( "github.com/stretchr/testify/assert" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/logger" ) func TestToChannelHashes(t *testing.T) { diff --git a/pkg/channels/manager_test.go b/pkg/channels/manager_test.go index 7dfec9ebf..ffca359bd 100644 --- a/pkg/channels/manager_test.go +++ b/pkg/channels/manager_test.go @@ -11,7 +11,7 @@ import ( "golang.org/x/time/rate" - "github.com/sipeed/picoclaw/pkg/bus" + "github.com/sipeed/piconomous/pkg/bus" ) // mockChannel is a test double that delegates Send to a configurable function. diff --git a/pkg/channels/matrix/init.go b/pkg/channels/matrix/init.go index 6677f855e..28e082221 100644 --- a/pkg/channels/matrix/init.go +++ b/pkg/channels/matrix/init.go @@ -1,9 +1,9 @@ package matrix import ( - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" ) func init() { diff --git a/pkg/channels/matrix/matrix.go b/pkg/channels/matrix/matrix.go index 4cbe95c5c..77b719408 100644 --- a/pkg/channels/matrix/matrix.go +++ b/pkg/channels/matrix/matrix.go @@ -21,12 +21,12 @@ import ( "maunium.net/go/mautrix/event" "maunium.net/go/mautrix/id" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/identity" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/media" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/identity" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/media" ) const ( @@ -1123,8 +1123,8 @@ func localpartMentionRegexp(localpart string) *regexp.Regexp { } // Match Matrix mentions in plain text while avoiding false positives: - // "@picoclaw" and "@picoclaw:matrix.org" should match, - // "test@example.com" and "hellopicoclawworld" should not. + // "@piconomous" and "@piconomous:matrix.org" should match, + // "test@example.com" and "hellopiconomousworld" should not. pattern := `(?i)(^|[^[:alnum:]_])@` + regexp.QuoteMeta(localpart) + `(?::[A-Za-z0-9._:-]+)?([^[:alnum:]_]|$)` return regexp.MustCompile(pattern) } diff --git a/pkg/channels/matrix/matrix_test.go b/pkg/channels/matrix/matrix_test.go index 7484c8d87..c71c56ed6 100644 --- a/pkg/channels/matrix/matrix_test.go +++ b/pkg/channels/matrix/matrix_test.go @@ -14,21 +14,21 @@ import ( "maunium.net/go/mautrix/event" "maunium.net/go/mautrix/id" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/media" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/media" ) func TestMatrixLocalpartMentionRegexp(t *testing.T) { - re := localpartMentionRegexp("picoclaw") + re := localpartMentionRegexp("piconomous") cases := []struct { text string want bool }{ - {text: "@picoclaw hello", want: true}, - {text: "hi @picoclaw:matrix.org", want: true}, + {text: "@piconomous hello", want: true}, + {text: "hi @piconomous:matrix.org", want: true}, { - text: "\u6b22\u8fce\u4e00\u4e0bpicoclaw\u5c0f\u9f99\u867e", + text: "\u6b22\u8fce\u4e00\u4e0bpiconomous\u5c0f\u9f99\u867e", want: false, // historical false-positive case in PR #356 }, {text: "mail test@example.com", want: false}, @@ -42,14 +42,14 @@ func TestMatrixLocalpartMentionRegexp(t *testing.T) { } func TestStripUserMention(t *testing.T) { - userID := id.UserID("@picoclaw:matrix.org") + userID := id.UserID("@piconomous:matrix.org") cases := []struct { in string want string }{ - {in: "@picoclaw:matrix.org hello", want: "hello"}, - {in: "@picoclaw, hello", want: "hello"}, + {in: "@piconomous:matrix.org hello", want: "hello"}, + {in: "@piconomous, hello", want: "hello"}, {in: "no mention here", want: "no mention here"}, } @@ -63,7 +63,7 @@ func TestStripUserMention(t *testing.T) { func TestIsBotMentioned(t *testing.T) { ch := &MatrixChannel{ client: &mautrix.Client{ - UserID: id.UserID("@picoclaw:matrix.org"), + UserID: id.UserID("@piconomous:matrix.org"), }, } @@ -77,7 +77,7 @@ func TestIsBotMentioned(t *testing.T) { msg: event.MessageEventContent{ Body: "hello", Mentions: &event.Mentions{ - UserIDs: []id.UserID{id.UserID("@picoclaw:matrix.org")}, + UserIDs: []id.UserID{id.UserID("@piconomous:matrix.org")}, }, }, want: true, @@ -85,21 +85,21 @@ func TestIsBotMentioned(t *testing.T) { { name: "full user id in body", msg: event.MessageEventContent{ - Body: "@picoclaw:matrix.org hello", + Body: "@piconomous:matrix.org hello", }, want: true, }, { name: "localpart with at sign", msg: event.MessageEventContent{ - Body: "@picoclaw hello", + Body: "@piconomous hello", }, want: true, }, { name: "localpart without at sign should not match", msg: event.MessageEventContent{ - Body: "\u6b22\u8fce\u4e00\u4e0bpicoclaw\u5c0f\u9f99\u867e", + Body: "\u6b22\u8fce\u4e00\u4e0bpiconomous\u5c0f\u9f99\u867e", }, want: false, }, @@ -107,7 +107,7 @@ func TestIsBotMentioned(t *testing.T) { name: "formatted mention href matrix.to plain", msg: event.MessageEventContent{ Body: "hello bot", - FormattedBody: `PicoClaw hello`, + FormattedBody: `Piconomous hello`, }, want: true, }, @@ -115,7 +115,7 @@ func TestIsBotMentioned(t *testing.T) { name: "formatted mention href matrix.to encoded", msg: event.MessageEventContent{ Body: "hello bot", - FormattedBody: `PicoClaw hello`, + FormattedBody: `Piconomous hello`, }, want: true, }, @@ -212,7 +212,7 @@ func TestDownloadMedia_WritesResponseToTempFile(t *testing.T) { })) defer server.Close() - client, err := mautrix.NewClient(server.URL, id.UserID("@picoclaw:matrix.test"), "") + client, err := mautrix.NewClient(server.URL, id.UserID("@piconomous:matrix.test"), "") if err != nil { t.Fatalf("NewClient: %v", err) } diff --git a/pkg/channels/media.go b/pkg/channels/media.go index c645a6180..cfe139519 100644 --- a/pkg/channels/media.go +++ b/pkg/channels/media.go @@ -3,7 +3,7 @@ package channels import ( "context" - "github.com/sipeed/picoclaw/pkg/bus" + "github.com/sipeed/piconomous/pkg/bus" ) // MediaSender is an optional interface for channels that can send diff --git a/pkg/channels/onebot/init.go b/pkg/channels/onebot/init.go index 84c06dfd6..21cda807c 100644 --- a/pkg/channels/onebot/init.go +++ b/pkg/channels/onebot/init.go @@ -1,9 +1,9 @@ package onebot import ( - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" ) func init() { diff --git a/pkg/channels/onebot/onebot.go b/pkg/channels/onebot/onebot.go index 62a9eb34a..7231bd88b 100644 --- a/pkg/channels/onebot/onebot.go +++ b/pkg/channels/onebot/onebot.go @@ -12,13 +12,13 @@ import ( "github.com/gorilla/websocket" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/identity" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/media" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/identity" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/media" + "github.com/sipeed/piconomous/pkg/utils" ) type OneBotChannel struct { diff --git a/pkg/channels/pico/client.go b/pkg/channels/pico/client.go index 2c335050d..82b84777e 100644 --- a/pkg/channels/pico/client.go +++ b/pkg/channels/pico/client.go @@ -12,11 +12,11 @@ import ( "github.com/google/uuid" "github.com/gorilla/websocket" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/identity" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/identity" + "github.com/sipeed/piconomous/pkg/logger" ) // PicoClientChannel connects to a remote Pico Protocol WebSocket server. diff --git a/pkg/channels/pico/client_test.go b/pkg/channels/pico/client_test.go index 118c9abea..4d7b994e6 100644 --- a/pkg/channels/pico/client_test.go +++ b/pkg/channels/pico/client_test.go @@ -12,9 +12,9 @@ import ( "github.com/gorilla/websocket" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" ) func TestNewPicoClientChannel_MissingURL(t *testing.T) { diff --git a/pkg/channels/pico/init.go b/pkg/channels/pico/init.go index 0319279d8..576071f18 100644 --- a/pkg/channels/pico/init.go +++ b/pkg/channels/pico/init.go @@ -1,9 +1,9 @@ package pico import ( - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" ) func init() { diff --git a/pkg/channels/pico/pico.go b/pkg/channels/pico/pico.go index 77e7bbdb6..83d8e9a60 100644 --- a/pkg/channels/pico/pico.go +++ b/pkg/channels/pico/pico.go @@ -13,11 +13,11 @@ import ( "github.com/google/uuid" "github.com/gorilla/websocket" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/identity" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/identity" + "github.com/sipeed/piconomous/pkg/logger" ) // picoConn represents a single WebSocket connection. diff --git a/pkg/channels/qq/botgo_logger.go b/pkg/channels/qq/botgo_logger.go index e1d2462a3..285dba3e7 100644 --- a/pkg/channels/qq/botgo_logger.go +++ b/pkg/channels/qq/botgo_logger.go @@ -4,7 +4,7 @@ import ( "fmt" "strings" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/piconomous/pkg/logger" ) // botGoLogger preserves useful SDK info logs while demoting noisy heartbeat diff --git a/pkg/channels/qq/init.go b/pkg/channels/qq/init.go index 15b955089..0c0797e7b 100644 --- a/pkg/channels/qq/init.go +++ b/pkg/channels/qq/init.go @@ -1,9 +1,9 @@ package qq import ( - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" ) func init() { diff --git a/pkg/channels/qq/qq.go b/pkg/channels/qq/qq.go index 1a48369f8..6fd6b5c72 100644 --- a/pkg/channels/qq/qq.go +++ b/pkg/channels/qq/qq.go @@ -25,13 +25,13 @@ import ( "github.com/tencent-connect/botgo/token" "golang.org/x/oauth2" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/identity" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/media" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/identity" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/media" + "github.com/sipeed/piconomous/pkg/utils" ) const ( diff --git a/pkg/channels/qq/qq_test.go b/pkg/channels/qq/qq_test.go index 3cb3d39bd..c2e6fed82 100644 --- a/pkg/channels/qq/qq_test.go +++ b/pkg/channels/qq/qq_test.go @@ -14,10 +14,10 @@ import ( "github.com/tencent-connect/botgo/dto" "github.com/tencent-connect/botgo/openapi/options" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/media" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/media" ) func TestHandleC2CMessage_IncludesAccountIDMetadata(t *testing.T) { diff --git a/pkg/channels/registry.go b/pkg/channels/registry.go index 36a05bf3e..58fc4fd97 100644 --- a/pkg/channels/registry.go +++ b/pkg/channels/registry.go @@ -3,8 +3,8 @@ package channels import ( "sync" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/config" ) // ChannelFactory is a constructor function that creates a Channel from config and message bus. diff --git a/pkg/channels/slack/init.go b/pkg/channels/slack/init.go index c131bb291..469f4aaf9 100644 --- a/pkg/channels/slack/init.go +++ b/pkg/channels/slack/init.go @@ -1,9 +1,9 @@ package slack import ( - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" ) func init() { diff --git a/pkg/channels/slack/slack.go b/pkg/channels/slack/slack.go index 3ee849621..efbfadb93 100644 --- a/pkg/channels/slack/slack.go +++ b/pkg/channels/slack/slack.go @@ -10,13 +10,13 @@ import ( "github.com/slack-go/slack/slackevents" "github.com/slack-go/slack/socketmode" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/identity" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/media" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/identity" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/media" + "github.com/sipeed/piconomous/pkg/utils" ) type SlackChannel struct { diff --git a/pkg/channels/slack/slack_test.go b/pkg/channels/slack/slack_test.go index 30e0d2d73..f1f2f20dc 100644 --- a/pkg/channels/slack/slack_test.go +++ b/pkg/channels/slack/slack_test.go @@ -3,8 +3,8 @@ package slack import ( "testing" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/config" ) func TestParseSlackChatID(t *testing.T) { diff --git a/pkg/channels/telegram/command_registration.go b/pkg/channels/telegram/command_registration.go index d3152ec3d..046204236 100644 --- a/pkg/channels/telegram/command_registration.go +++ b/pkg/channels/telegram/command_registration.go @@ -8,8 +8,8 @@ import ( "github.com/mymmrac/telego" - "github.com/sipeed/picoclaw/pkg/commands" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/piconomous/pkg/commands" + "github.com/sipeed/piconomous/pkg/logger" ) var commandRegistrationBackoff = []time.Duration{ diff --git a/pkg/channels/telegram/command_registration_test.go b/pkg/channels/telegram/command_registration_test.go index 26f891b2e..795b86b13 100644 --- a/pkg/channels/telegram/command_registration_test.go +++ b/pkg/channels/telegram/command_registration_test.go @@ -7,7 +7,7 @@ import ( "testing" "time" - "github.com/sipeed/picoclaw/pkg/commands" + "github.com/sipeed/piconomous/pkg/commands" ) func TestStartCommandRegistration_DoesNotBlock(t *testing.T) { diff --git a/pkg/channels/telegram/init.go b/pkg/channels/telegram/init.go index ac87bb805..95c297f66 100644 --- a/pkg/channels/telegram/init.go +++ b/pkg/channels/telegram/init.go @@ -1,9 +1,9 @@ package telegram import ( - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" ) func init() { diff --git a/pkg/channels/telegram/telegram.go b/pkg/channels/telegram/telegram.go index 3eb89c636..44fb7f4fc 100644 --- a/pkg/channels/telegram/telegram.go +++ b/pkg/channels/telegram/telegram.go @@ -19,14 +19,14 @@ import ( th "github.com/mymmrac/telego/telegohandler" tu "github.com/mymmrac/telego/telegoutil" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/commands" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/identity" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/media" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/commands" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/identity" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/media" + "github.com/sipeed/piconomous/pkg/utils" ) var ( diff --git a/pkg/channels/telegram/telegram_dispatch_test.go b/pkg/channels/telegram/telegram_dispatch_test.go index 0eb1de5ea..3f59e4f27 100644 --- a/pkg/channels/telegram/telegram_dispatch_test.go +++ b/pkg/channels/telegram/telegram_dispatch_test.go @@ -6,8 +6,8 @@ import ( "github.com/mymmrac/telego" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" ) func TestHandleMessage_DoesNotConsumeGenericCommandsLocally(t *testing.T) { diff --git a/pkg/channels/telegram/telegram_group_command_filter_test.go b/pkg/channels/telegram/telegram_group_command_filter_test.go index 614b2ca7f..bd2e3dcec 100644 --- a/pkg/channels/telegram/telegram_group_command_filter_test.go +++ b/pkg/channels/telegram/telegram_group_command_filter_test.go @@ -10,9 +10,9 @@ import ( "github.com/mymmrac/telego" ta "github.com/mymmrac/telego/telegoapi" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" ) type getMeCaller struct { diff --git a/pkg/channels/telegram/telegram_test.go b/pkg/channels/telegram/telegram_test.go index 6bf1077af..4bc56eb39 100644 --- a/pkg/channels/telegram/telegram_test.go +++ b/pkg/channels/telegram/telegram_test.go @@ -15,10 +15,10 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/media" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/media" ) const testToken = "1234567890:aaaabbbbaaaabbbbaaaabbbbaaaabbbbccc" diff --git a/pkg/channels/wecom/aibot.go b/pkg/channels/wecom/aibot.go index 2264b8492..b1557d2dd 100644 --- a/pkg/channels/wecom/aibot.go +++ b/pkg/channels/wecom/aibot.go @@ -14,12 +14,12 @@ import ( "sync" "time" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/identity" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/identity" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/utils" ) // responseURLHTTPClient is a shared HTTP client for posting to WeCom response_url. diff --git a/pkg/channels/wecom/aibot_test.go b/pkg/channels/wecom/aibot_test.go index 957b51c38..bdfa2ad8f 100644 --- a/pkg/channels/wecom/aibot_test.go +++ b/pkg/channels/wecom/aibot_test.go @@ -6,9 +6,9 @@ import ( "testing" "time" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" ) // ---- Webhook mode tests ---- diff --git a/pkg/channels/wecom/aibot_ws.go b/pkg/channels/wecom/aibot_ws.go index 830e763b9..8ee5a8fd6 100644 --- a/pkg/channels/wecom/aibot_ws.go +++ b/pkg/channels/wecom/aibot_ws.go @@ -15,13 +15,13 @@ import ( "github.com/gorilla/websocket" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/identity" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/media" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/identity" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/media" + "github.com/sipeed/piconomous/pkg/utils" ) // Long-connection WebSocket endpoint. @@ -1196,7 +1196,7 @@ func (c *WeComAIBotWSChannel) storeWSMedia( // Write to a temp file. The file is owned by the MediaStore and deleted by // store.ReleaseAll — no caller-side cleanup needed. - mediaDir := filepath.Join(os.TempDir(), "picoclaw_media") + mediaDir := filepath.Join(os.TempDir(), "piconomous_media") if err = os.MkdirAll(mediaDir, 0o700); err != nil { return "", fmt.Errorf("mkdir: %w", err) } diff --git a/pkg/channels/wecom/aibot_ws_test.go b/pkg/channels/wecom/aibot_ws_test.go index 0a533da5d..e828f68d8 100644 --- a/pkg/channels/wecom/aibot_ws_test.go +++ b/pkg/channels/wecom/aibot_ws_test.go @@ -9,10 +9,10 @@ import ( "strings" "testing" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/media" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/media" ) // newTestWSChannel creates a WeComAIBotWSChannel ready for unit testing. diff --git a/pkg/channels/wecom/app.go b/pkg/channels/wecom/app.go index 2098fcd4e..4a934a976 100644 --- a/pkg/channels/wecom/app.go +++ b/pkg/channels/wecom/app.go @@ -16,12 +16,12 @@ import ( "sync" "time" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/identity" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/identity" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/utils" ) const ( diff --git a/pkg/channels/wecom/app_test.go b/pkg/channels/wecom/app_test.go index 7d07041ad..32093aecf 100644 --- a/pkg/channels/wecom/app_test.go +++ b/pkg/channels/wecom/app_test.go @@ -18,8 +18,8 @@ import ( "testing" "time" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/config" ) // generateTestAESKeyApp generates a valid test AES key for WeCom App diff --git a/pkg/channels/wecom/bot.go b/pkg/channels/wecom/bot.go index 96d5a961f..56feaef14 100644 --- a/pkg/channels/wecom/bot.go +++ b/pkg/channels/wecom/bot.go @@ -11,12 +11,12 @@ import ( "strings" "time" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/identity" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/identity" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/utils" ) // WeComBotChannel implements the Channel interface for WeCom Bot (企业微信智能机器人) diff --git a/pkg/channels/wecom/bot_test.go b/pkg/channels/wecom/bot_test.go index d223bb6b6..6f82c1b62 100644 --- a/pkg/channels/wecom/bot_test.go +++ b/pkg/channels/wecom/bot_test.go @@ -17,8 +17,8 @@ import ( "strings" "testing" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/config" ) // generateTestAESKey generates a valid test AES key diff --git a/pkg/channels/wecom/init.go b/pkg/channels/wecom/init.go index bc5a70fa3..20039948b 100644 --- a/pkg/channels/wecom/init.go +++ b/pkg/channels/wecom/init.go @@ -1,9 +1,9 @@ package wecom import ( - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" ) func init() { diff --git a/pkg/channels/whatsapp/init.go b/pkg/channels/whatsapp/init.go index d9c2669c3..085909576 100644 --- a/pkg/channels/whatsapp/init.go +++ b/pkg/channels/whatsapp/init.go @@ -1,9 +1,9 @@ package whatsapp import ( - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" ) func init() { diff --git a/pkg/channels/whatsapp/whatsapp.go b/pkg/channels/whatsapp/whatsapp.go index 70b3e02bf..52f87fadf 100644 --- a/pkg/channels/whatsapp/whatsapp.go +++ b/pkg/channels/whatsapp/whatsapp.go @@ -9,12 +9,12 @@ import ( "github.com/gorilla/websocket" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/identity" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/identity" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/utils" ) type WhatsAppChannel struct { diff --git a/pkg/channels/whatsapp/whatsapp_command_test.go b/pkg/channels/whatsapp/whatsapp_command_test.go index 2d85d74f8..6d2c79d61 100644 --- a/pkg/channels/whatsapp/whatsapp_command_test.go +++ b/pkg/channels/whatsapp/whatsapp_command_test.go @@ -4,9 +4,9 @@ import ( "context" "testing" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" ) func TestHandleIncomingMessage_DoesNotConsumeGenericCommandsLocally(t *testing.T) { diff --git a/pkg/channels/whatsapp_native/init.go b/pkg/channels/whatsapp_native/init.go index df13e8539..12d7bb488 100644 --- a/pkg/channels/whatsapp_native/init.go +++ b/pkg/channels/whatsapp_native/init.go @@ -3,9 +3,9 @@ package whatsapp import ( "path/filepath" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" ) func init() { diff --git a/pkg/channels/whatsapp_native/whatsapp_command_test.go b/pkg/channels/whatsapp_native/whatsapp_command_test.go index e51bec392..612465527 100644 --- a/pkg/channels/whatsapp_native/whatsapp_command_test.go +++ b/pkg/channels/whatsapp_native/whatsapp_command_test.go @@ -12,9 +12,9 @@ import ( "go.mau.fi/whatsmeow/types/events" "google.golang.org/protobuf/proto" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" ) func TestHandleIncoming_DoesNotConsumeGenericCommandsLocally(t *testing.T) { diff --git a/pkg/channels/whatsapp_native/whatsapp_native.go b/pkg/channels/whatsapp_native/whatsapp_native.go index 188a7c8fa..bae134b6d 100644 --- a/pkg/channels/whatsapp_native/whatsapp_native.go +++ b/pkg/channels/whatsapp_native/whatsapp_native.go @@ -1,9 +1,9 @@ //go:build whatsapp_native -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package whatsapp @@ -28,12 +28,12 @@ import ( "google.golang.org/protobuf/proto" _ "modernc.org/sqlite" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/identity" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/identity" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/utils" ) const ( diff --git a/pkg/channels/whatsapp_native/whatsapp_native_stub.go b/pkg/channels/whatsapp_native/whatsapp_native_stub.go index 984af23e7..d260b3a66 100644 --- a/pkg/channels/whatsapp_native/whatsapp_native_stub.go +++ b/pkg/channels/whatsapp_native/whatsapp_native_stub.go @@ -5,9 +5,9 @@ package whatsapp import ( "fmt" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + "github.com/sipeed/piconomous/pkg/config" ) // NewWhatsAppNativeChannel returns an error when the binary was not built with -tags whatsapp_native. diff --git a/pkg/commands/cmd_start.go b/pkg/commands/cmd_start.go index 8b500aa10..db769aebf 100644 --- a/pkg/commands/cmd_start.go +++ b/pkg/commands/cmd_start.go @@ -8,7 +8,7 @@ func startCommand() Definition { Description: "Start the bot", Usage: "/start", Handler: func(_ context.Context, req Request, _ *Runtime) error { - return req.Reply("Hello! I am PicoClaw 🦞") + return req.Reply("Hello! I am Piconomous 🦞") }, } } diff --git a/pkg/commands/runtime.go b/pkg/commands/runtime.go index 84f775808..02b788d4e 100644 --- a/pkg/commands/runtime.go +++ b/pkg/commands/runtime.go @@ -1,6 +1,6 @@ package commands -import "github.com/sipeed/picoclaw/pkg/config" +import "github.com/sipeed/piconomous/pkg/config" // Runtime provides runtime dependencies to command handlers. It is constructed // per-request by the agent loop so that per-request state (like session scope) diff --git a/pkg/config/config.go b/pkg/config/config.go index 235cb0641..716f42237 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -10,8 +10,8 @@ import ( "github.com/caarlos0/env/v11" - "github.com/sipeed/picoclaw/pkg/credential" - "github.com/sipeed/picoclaw/pkg/fileutil" + "github.com/sipeed/piconomous/pkg/credential" + "github.com/sipeed/piconomous/pkg/fileutil" ) // rrCounter is a global counter for round-robin load balancing across models. @@ -77,17 +77,18 @@ func (f *FlexibleStringSlice) UnmarshalText(text []byte) error { } type Config struct { - Agents AgentsConfig `json:"agents"` - Bindings []AgentBinding `json:"bindings,omitempty"` - Session SessionConfig `json:"session,omitempty"` - Channels ChannelsConfig `json:"channels"` - Providers ProvidersConfig `json:"providers,omitempty"` - ModelList []ModelConfig `json:"model_list"` // New model-centric provider configuration - Gateway GatewayConfig `json:"gateway"` - Tools ToolsConfig `json:"tools"` - Heartbeat HeartbeatConfig `json:"heartbeat"` - Devices DevicesConfig `json:"devices"` - Voice VoiceConfig `json:"voice"` + Agents AgentsConfig `json:"agents"` + Bindings []AgentBinding `json:"bindings,omitempty"` + Session SessionConfig `json:"session,omitempty"` + Channels ChannelsConfig `json:"channels"` + Providers ProvidersConfig `json:"providers,omitempty"` + ModelList []ModelConfig `json:"model_list"` // New model-centric provider configuration + Gateway GatewayConfig `json:"gateway"` + Tools ToolsConfig `json:"tools"` + Heartbeat HeartbeatConfig `json:"heartbeat"` + Autonomous AutonomousConfig `json:"autonomous"` + Devices DevicesConfig `json:"devices"` + Voice VoiceConfig `json:"voice"` // BuildInfo contains build-time version information BuildInfo BuildInfo `json:"build_info,omitempty"` } @@ -223,26 +224,26 @@ type RoutingConfig struct { // chat channel as real-time feedback messages. When enabled, every tool call // produces a short notification with the tool name and its parameters. type ToolFeedbackConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_AGENTS_DEFAULTS_TOOL_FEEDBACK_ENABLED"` - MaxArgsLength int `json:"max_args_length" env:"PICOCLAW_AGENTS_DEFAULTS_TOOL_FEEDBACK_MAX_ARGS_LENGTH"` + Enabled bool `json:"enabled" env:"PICONOMOUS_AGENTS_DEFAULTS_TOOL_FEEDBACK_ENABLED"` + MaxArgsLength int `json:"max_args_length" env:"PICONOMOUS_AGENTS_DEFAULTS_TOOL_FEEDBACK_MAX_ARGS_LENGTH"` } type AgentDefaults struct { - Workspace string `json:"workspace" env:"PICOCLAW_AGENTS_DEFAULTS_WORKSPACE"` - RestrictToWorkspace bool `json:"restrict_to_workspace" env:"PICOCLAW_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACE"` - AllowReadOutsideWorkspace bool `json:"allow_read_outside_workspace" env:"PICOCLAW_AGENTS_DEFAULTS_ALLOW_READ_OUTSIDE_WORKSPACE"` - Provider string `json:"provider" env:"PICOCLAW_AGENTS_DEFAULTS_PROVIDER"` - ModelName string `json:"model_name" env:"PICOCLAW_AGENTS_DEFAULTS_MODEL_NAME"` - Model string `json:"model,omitempty" env:"PICOCLAW_AGENTS_DEFAULTS_MODEL"` // Deprecated: use model_name instead + Workspace string `json:"workspace" env:"PICONOMOUS_AGENTS_DEFAULTS_WORKSPACE"` + RestrictToWorkspace bool `json:"restrict_to_workspace" env:"PICONOMOUS_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACE"` + AllowReadOutsideWorkspace bool `json:"allow_read_outside_workspace" env:"PICONOMOUS_AGENTS_DEFAULTS_ALLOW_READ_OUTSIDE_WORKSPACE"` + Provider string `json:"provider" env:"PICONOMOUS_AGENTS_DEFAULTS_PROVIDER"` + ModelName string `json:"model_name" env:"PICONOMOUS_AGENTS_DEFAULTS_MODEL_NAME"` + Model string `json:"model,omitempty" env:"PICONOMOUS_AGENTS_DEFAULTS_MODEL"` // Deprecated: use model_name instead ModelFallbacks []string `json:"model_fallbacks,omitempty"` - ImageModel string `json:"image_model,omitempty" env:"PICOCLAW_AGENTS_DEFAULTS_IMAGE_MODEL"` + ImageModel string `json:"image_model,omitempty" env:"PICONOMOUS_AGENTS_DEFAULTS_IMAGE_MODEL"` ImageModelFallbacks []string `json:"image_model_fallbacks,omitempty"` - MaxTokens int `json:"max_tokens" env:"PICOCLAW_AGENTS_DEFAULTS_MAX_TOKENS"` - Temperature *float64 `json:"temperature,omitempty" env:"PICOCLAW_AGENTS_DEFAULTS_TEMPERATURE"` - MaxToolIterations int `json:"max_tool_iterations" env:"PICOCLAW_AGENTS_DEFAULTS_MAX_TOOL_ITERATIONS"` - SummarizeMessageThreshold int `json:"summarize_message_threshold" env:"PICOCLAW_AGENTS_DEFAULTS_SUMMARIZE_MESSAGE_THRESHOLD"` - SummarizeTokenPercent int `json:"summarize_token_percent" env:"PICOCLAW_AGENTS_DEFAULTS_SUMMARIZE_TOKEN_PERCENT"` - MaxMediaSize int `json:"max_media_size,omitempty" env:"PICOCLAW_AGENTS_DEFAULTS_MAX_MEDIA_SIZE"` + MaxTokens int `json:"max_tokens" env:"PICONOMOUS_AGENTS_DEFAULTS_MAX_TOKENS"` + Temperature *float64 `json:"temperature,omitempty" env:"PICONOMOUS_AGENTS_DEFAULTS_TEMPERATURE"` + MaxToolIterations int `json:"max_tool_iterations" env:"PICONOMOUS_AGENTS_DEFAULTS_MAX_TOOL_ITERATIONS"` + SummarizeMessageThreshold int `json:"summarize_message_threshold" env:"PICONOMOUS_AGENTS_DEFAULTS_SUMMARIZE_MESSAGE_THRESHOLD"` + SummarizeTokenPercent int `json:"summarize_token_percent" env:"PICONOMOUS_AGENTS_DEFAULTS_SUMMARIZE_TOKEN_PERCENT"` + MaxMediaSize int `json:"max_media_size,omitempty" env:"PICONOMOUS_AGENTS_DEFAULTS_MAX_MEDIA_SIZE"` Routing *RoutingConfig `json:"routing,omitempty"` ToolFeedback ToolFeedbackConfig `json:"tool_feedback,omitempty"` } @@ -319,240 +320,277 @@ type PlaceholderConfig struct { } type StreamingConfig struct { - Enabled bool `json:"enabled,omitempty" env:"PICOCLAW_CHANNELS_TELEGRAM_STREAMING_ENABLED"` - ThrottleSeconds int `json:"throttle_seconds,omitempty" env:"PICOCLAW_CHANNELS_TELEGRAM_STREAMING_THROTTLE_SECONDS"` - MinGrowthChars int `json:"min_growth_chars,omitempty" env:"PICOCLAW_CHANNELS_TELEGRAM_STREAMING_MIN_GROWTH_CHARS"` + Enabled bool `json:"enabled,omitempty" env:"PICONOMOUS_CHANNELS_TELEGRAM_STREAMING_ENABLED"` + ThrottleSeconds int `json:"throttle_seconds,omitempty" env:"PICONOMOUS_CHANNELS_TELEGRAM_STREAMING_THROTTLE_SECONDS"` + MinGrowthChars int `json:"min_growth_chars,omitempty" env:"PICONOMOUS_CHANNELS_TELEGRAM_STREAMING_MIN_GROWTH_CHARS"` } type WhatsAppConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_CHANNELS_WHATSAPP_ENABLED"` - BridgeURL string `json:"bridge_url" env:"PICOCLAW_CHANNELS_WHATSAPP_BRIDGE_URL"` - UseNative bool `json:"use_native" env:"PICOCLAW_CHANNELS_WHATSAPP_USE_NATIVE"` - SessionStorePath string `json:"session_store_path" env:"PICOCLAW_CHANNELS_WHATSAPP_SESSION_STORE_PATH"` - AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICOCLAW_CHANNELS_WHATSAPP_ALLOW_FROM"` - ReasoningChannelID string `json:"reasoning_channel_id" env:"PICOCLAW_CHANNELS_WHATSAPP_REASONING_CHANNEL_ID"` + Enabled bool `json:"enabled" env:"PICONOMOUS_CHANNELS_WHATSAPP_ENABLED"` + BridgeURL string `json:"bridge_url" env:"PICONOMOUS_CHANNELS_WHATSAPP_BRIDGE_URL"` + UseNative bool `json:"use_native" env:"PICONOMOUS_CHANNELS_WHATSAPP_USE_NATIVE"` + SessionStorePath string `json:"session_store_path" env:"PICONOMOUS_CHANNELS_WHATSAPP_SESSION_STORE_PATH"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICONOMOUS_CHANNELS_WHATSAPP_ALLOW_FROM"` + ReasoningChannelID string `json:"reasoning_channel_id" env:"PICONOMOUS_CHANNELS_WHATSAPP_REASONING_CHANNEL_ID"` } type TelegramConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_CHANNELS_TELEGRAM_ENABLED"` - Token string `json:"token" env:"PICOCLAW_CHANNELS_TELEGRAM_TOKEN"` - BaseURL string `json:"base_url" env:"PICOCLAW_CHANNELS_TELEGRAM_BASE_URL"` - Proxy string `json:"proxy" env:"PICOCLAW_CHANNELS_TELEGRAM_PROXY"` - AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICOCLAW_CHANNELS_TELEGRAM_ALLOW_FROM"` + Enabled bool `json:"enabled" env:"PICONOMOUS_CHANNELS_TELEGRAM_ENABLED"` + Token string `json:"token" env:"PICONOMOUS_CHANNELS_TELEGRAM_TOKEN"` + BaseURL string `json:"base_url" env:"PICONOMOUS_CHANNELS_TELEGRAM_BASE_URL"` + Proxy string `json:"proxy" env:"PICONOMOUS_CHANNELS_TELEGRAM_PROXY"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICONOMOUS_CHANNELS_TELEGRAM_ALLOW_FROM"` GroupTrigger GroupTriggerConfig `json:"group_trigger,omitempty"` Typing TypingConfig `json:"typing,omitempty"` Placeholder PlaceholderConfig `json:"placeholder,omitempty"` Streaming StreamingConfig `json:"streaming,omitempty"` - ReasoningChannelID string `json:"reasoning_channel_id" env:"PICOCLAW_CHANNELS_TELEGRAM_REASONING_CHANNEL_ID"` - UseMarkdownV2 bool `json:"use_markdown_v2" env:"PICOCLAW_CHANNELS_TELEGRAM_USE_MARKDOWN_V2"` + ReasoningChannelID string `json:"reasoning_channel_id" env:"PICONOMOUS_CHANNELS_TELEGRAM_REASONING_CHANNEL_ID"` + UseMarkdownV2 bool `json:"use_markdown_v2" env:"PICONOMOUS_CHANNELS_TELEGRAM_USE_MARKDOWN_V2"` } type FeishuConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_CHANNELS_FEISHU_ENABLED"` - AppID string `json:"app_id" env:"PICOCLAW_CHANNELS_FEISHU_APP_ID"` - AppSecret string `json:"app_secret" env:"PICOCLAW_CHANNELS_FEISHU_APP_SECRET"` - EncryptKey string `json:"encrypt_key" env:"PICOCLAW_CHANNELS_FEISHU_ENCRYPT_KEY"` - VerificationToken string `json:"verification_token" env:"PICOCLAW_CHANNELS_FEISHU_VERIFICATION_TOKEN"` - AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICOCLAW_CHANNELS_FEISHU_ALLOW_FROM"` + Enabled bool `json:"enabled" env:"PICONOMOUS_CHANNELS_FEISHU_ENABLED"` + AppID string `json:"app_id" env:"PICONOMOUS_CHANNELS_FEISHU_APP_ID"` + AppSecret string `json:"app_secret" env:"PICONOMOUS_CHANNELS_FEISHU_APP_SECRET"` + EncryptKey string `json:"encrypt_key" env:"PICONOMOUS_CHANNELS_FEISHU_ENCRYPT_KEY"` + VerificationToken string `json:"verification_token" env:"PICONOMOUS_CHANNELS_FEISHU_VERIFICATION_TOKEN"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICONOMOUS_CHANNELS_FEISHU_ALLOW_FROM"` GroupTrigger GroupTriggerConfig `json:"group_trigger,omitempty"` Placeholder PlaceholderConfig `json:"placeholder,omitempty"` - ReasoningChannelID string `json:"reasoning_channel_id" env:"PICOCLAW_CHANNELS_FEISHU_REASONING_CHANNEL_ID"` - RandomReactionEmoji FlexibleStringSlice `json:"random_reaction_emoji" env:"PICOCLAW_CHANNELS_FEISHU_RANDOM_REACTION_EMOJI"` - IsLark bool `json:"is_lark" env:"PICOCLAW_CHANNELS_FEISHU_IS_LARK"` + ReasoningChannelID string `json:"reasoning_channel_id" env:"PICONOMOUS_CHANNELS_FEISHU_REASONING_CHANNEL_ID"` + RandomReactionEmoji FlexibleStringSlice `json:"random_reaction_emoji" env:"PICONOMOUS_CHANNELS_FEISHU_RANDOM_REACTION_EMOJI"` + IsLark bool `json:"is_lark" env:"PICONOMOUS_CHANNELS_FEISHU_IS_LARK"` } type DiscordConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_CHANNELS_DISCORD_ENABLED"` - Token string `json:"token" env:"PICOCLAW_CHANNELS_DISCORD_TOKEN"` - Proxy string `json:"proxy" env:"PICOCLAW_CHANNELS_DISCORD_PROXY"` - AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICOCLAW_CHANNELS_DISCORD_ALLOW_FROM"` - MentionOnly bool `json:"mention_only" env:"PICOCLAW_CHANNELS_DISCORD_MENTION_ONLY"` + Enabled bool `json:"enabled" env:"PICONOMOUS_CHANNELS_DISCORD_ENABLED"` + Token string `json:"token" env:"PICONOMOUS_CHANNELS_DISCORD_TOKEN"` + Proxy string `json:"proxy" env:"PICONOMOUS_CHANNELS_DISCORD_PROXY"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICONOMOUS_CHANNELS_DISCORD_ALLOW_FROM"` + MentionOnly bool `json:"mention_only" env:"PICONOMOUS_CHANNELS_DISCORD_MENTION_ONLY"` GroupTrigger GroupTriggerConfig `json:"group_trigger,omitempty"` Typing TypingConfig `json:"typing,omitempty"` Placeholder PlaceholderConfig `json:"placeholder,omitempty"` - ReasoningChannelID string `json:"reasoning_channel_id" env:"PICOCLAW_CHANNELS_DISCORD_REASONING_CHANNEL_ID"` + ReasoningChannelID string `json:"reasoning_channel_id" env:"PICONOMOUS_CHANNELS_DISCORD_REASONING_CHANNEL_ID"` } type MaixCamConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_CHANNELS_MAIXCAM_ENABLED"` - Host string `json:"host" env:"PICOCLAW_CHANNELS_MAIXCAM_HOST"` - Port int `json:"port" env:"PICOCLAW_CHANNELS_MAIXCAM_PORT"` - AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICOCLAW_CHANNELS_MAIXCAM_ALLOW_FROM"` - ReasoningChannelID string `json:"reasoning_channel_id" env:"PICOCLAW_CHANNELS_MAIXCAM_REASONING_CHANNEL_ID"` + Enabled bool `json:"enabled" env:"PICONOMOUS_CHANNELS_MAIXCAM_ENABLED"` + Host string `json:"host" env:"PICONOMOUS_CHANNELS_MAIXCAM_HOST"` + Port int `json:"port" env:"PICONOMOUS_CHANNELS_MAIXCAM_PORT"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICONOMOUS_CHANNELS_MAIXCAM_ALLOW_FROM"` + ReasoningChannelID string `json:"reasoning_channel_id" env:"PICONOMOUS_CHANNELS_MAIXCAM_REASONING_CHANNEL_ID"` } type QQConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_CHANNELS_QQ_ENABLED"` - AppID string `json:"app_id" env:"PICOCLAW_CHANNELS_QQ_APP_ID"` - AppSecret string `json:"app_secret" env:"PICOCLAW_CHANNELS_QQ_APP_SECRET"` - AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICOCLAW_CHANNELS_QQ_ALLOW_FROM"` + Enabled bool `json:"enabled" env:"PICONOMOUS_CHANNELS_QQ_ENABLED"` + AppID string `json:"app_id" env:"PICONOMOUS_CHANNELS_QQ_APP_ID"` + AppSecret string `json:"app_secret" env:"PICONOMOUS_CHANNELS_QQ_APP_SECRET"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICONOMOUS_CHANNELS_QQ_ALLOW_FROM"` GroupTrigger GroupTriggerConfig `json:"group_trigger,omitempty"` - MaxMessageLength int `json:"max_message_length" env:"PICOCLAW_CHANNELS_QQ_MAX_MESSAGE_LENGTH"` - MaxBase64FileSizeMiB int64 `json:"max_base64_file_size_mib" env:"PICOCLAW_CHANNELS_QQ_MAX_BASE64_FILE_SIZE_MIB"` - SendMarkdown bool `json:"send_markdown" env:"PICOCLAW_CHANNELS_QQ_SEND_MARKDOWN"` - ReasoningChannelID string `json:"reasoning_channel_id" env:"PICOCLAW_CHANNELS_QQ_REASONING_CHANNEL_ID"` + MaxMessageLength int `json:"max_message_length" env:"PICONOMOUS_CHANNELS_QQ_MAX_MESSAGE_LENGTH"` + MaxBase64FileSizeMiB int64 `json:"max_base64_file_size_mib" env:"PICONOMOUS_CHANNELS_QQ_MAX_BASE64_FILE_SIZE_MIB"` + SendMarkdown bool `json:"send_markdown" env:"PICONOMOUS_CHANNELS_QQ_SEND_MARKDOWN"` + ReasoningChannelID string `json:"reasoning_channel_id" env:"PICONOMOUS_CHANNELS_QQ_REASONING_CHANNEL_ID"` } type DingTalkConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_CHANNELS_DINGTALK_ENABLED"` - ClientID string `json:"client_id" env:"PICOCLAW_CHANNELS_DINGTALK_CLIENT_ID"` - ClientSecret string `json:"client_secret" env:"PICOCLAW_CHANNELS_DINGTALK_CLIENT_SECRET"` - AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICOCLAW_CHANNELS_DINGTALK_ALLOW_FROM"` + Enabled bool `json:"enabled" env:"PICONOMOUS_CHANNELS_DINGTALK_ENABLED"` + ClientID string `json:"client_id" env:"PICONOMOUS_CHANNELS_DINGTALK_CLIENT_ID"` + ClientSecret string `json:"client_secret" env:"PICONOMOUS_CHANNELS_DINGTALK_CLIENT_SECRET"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICONOMOUS_CHANNELS_DINGTALK_ALLOW_FROM"` GroupTrigger GroupTriggerConfig `json:"group_trigger,omitempty"` - ReasoningChannelID string `json:"reasoning_channel_id" env:"PICOCLAW_CHANNELS_DINGTALK_REASONING_CHANNEL_ID"` + ReasoningChannelID string `json:"reasoning_channel_id" env:"PICONOMOUS_CHANNELS_DINGTALK_REASONING_CHANNEL_ID"` } type SlackConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_CHANNELS_SLACK_ENABLED"` - BotToken string `json:"bot_token" env:"PICOCLAW_CHANNELS_SLACK_BOT_TOKEN"` - AppToken string `json:"app_token" env:"PICOCLAW_CHANNELS_SLACK_APP_TOKEN"` - AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICOCLAW_CHANNELS_SLACK_ALLOW_FROM"` + Enabled bool `json:"enabled" env:"PICONOMOUS_CHANNELS_SLACK_ENABLED"` + BotToken string `json:"bot_token" env:"PICONOMOUS_CHANNELS_SLACK_BOT_TOKEN"` + AppToken string `json:"app_token" env:"PICONOMOUS_CHANNELS_SLACK_APP_TOKEN"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICONOMOUS_CHANNELS_SLACK_ALLOW_FROM"` GroupTrigger GroupTriggerConfig `json:"group_trigger,omitempty"` Typing TypingConfig `json:"typing,omitempty"` Placeholder PlaceholderConfig `json:"placeholder,omitempty"` - ReasoningChannelID string `json:"reasoning_channel_id" env:"PICOCLAW_CHANNELS_SLACK_REASONING_CHANNEL_ID"` + ReasoningChannelID string `json:"reasoning_channel_id" env:"PICONOMOUS_CHANNELS_SLACK_REASONING_CHANNEL_ID"` } type MatrixConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_CHANNELS_MATRIX_ENABLED"` - Homeserver string `json:"homeserver" env:"PICOCLAW_CHANNELS_MATRIX_HOMESERVER"` - UserID string `json:"user_id" env:"PICOCLAW_CHANNELS_MATRIX_USER_ID"` - AccessToken string `json:"access_token" env:"PICOCLAW_CHANNELS_MATRIX_ACCESS_TOKEN"` - DeviceID string `json:"device_id,omitempty" env:"PICOCLAW_CHANNELS_MATRIX_DEVICE_ID"` - JoinOnInvite bool `json:"join_on_invite" env:"PICOCLAW_CHANNELS_MATRIX_JOIN_ON_INVITE"` - MessageFormat string `json:"message_format,omitempty" env:"PICOCLAW_CHANNELS_MATRIX_MESSAGE_FORMAT"` - AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICOCLAW_CHANNELS_MATRIX_ALLOW_FROM"` + Enabled bool `json:"enabled" env:"PICONOMOUS_CHANNELS_MATRIX_ENABLED"` + Homeserver string `json:"homeserver" env:"PICONOMOUS_CHANNELS_MATRIX_HOMESERVER"` + UserID string `json:"user_id" env:"PICONOMOUS_CHANNELS_MATRIX_USER_ID"` + AccessToken string `json:"access_token" env:"PICONOMOUS_CHANNELS_MATRIX_ACCESS_TOKEN"` + DeviceID string `json:"device_id,omitempty" env:"PICONOMOUS_CHANNELS_MATRIX_DEVICE_ID"` + JoinOnInvite bool `json:"join_on_invite" env:"PICONOMOUS_CHANNELS_MATRIX_JOIN_ON_INVITE"` + MessageFormat string `json:"message_format,omitempty" env:"PICONOMOUS_CHANNELS_MATRIX_MESSAGE_FORMAT"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICONOMOUS_CHANNELS_MATRIX_ALLOW_FROM"` GroupTrigger GroupTriggerConfig `json:"group_trigger,omitempty"` Placeholder PlaceholderConfig `json:"placeholder,omitempty"` - ReasoningChannelID string `json:"reasoning_channel_id" env:"PICOCLAW_CHANNELS_MATRIX_REASONING_CHANNEL_ID"` + ReasoningChannelID string `json:"reasoning_channel_id" env:"PICONOMOUS_CHANNELS_MATRIX_REASONING_CHANNEL_ID"` } type LINEConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_CHANNELS_LINE_ENABLED"` - ChannelSecret string `json:"channel_secret" env:"PICOCLAW_CHANNELS_LINE_CHANNEL_SECRET"` - ChannelAccessToken string `json:"channel_access_token" env:"PICOCLAW_CHANNELS_LINE_CHANNEL_ACCESS_TOKEN"` - WebhookHost string `json:"webhook_host" env:"PICOCLAW_CHANNELS_LINE_WEBHOOK_HOST"` - WebhookPort int `json:"webhook_port" env:"PICOCLAW_CHANNELS_LINE_WEBHOOK_PORT"` - WebhookPath string `json:"webhook_path" env:"PICOCLAW_CHANNELS_LINE_WEBHOOK_PATH"` - AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICOCLAW_CHANNELS_LINE_ALLOW_FROM"` + Enabled bool `json:"enabled" env:"PICONOMOUS_CHANNELS_LINE_ENABLED"` + ChannelSecret string `json:"channel_secret" env:"PICONOMOUS_CHANNELS_LINE_CHANNEL_SECRET"` + ChannelAccessToken string `json:"channel_access_token" env:"PICONOMOUS_CHANNELS_LINE_CHANNEL_ACCESS_TOKEN"` + WebhookHost string `json:"webhook_host" env:"PICONOMOUS_CHANNELS_LINE_WEBHOOK_HOST"` + WebhookPort int `json:"webhook_port" env:"PICONOMOUS_CHANNELS_LINE_WEBHOOK_PORT"` + WebhookPath string `json:"webhook_path" env:"PICONOMOUS_CHANNELS_LINE_WEBHOOK_PATH"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICONOMOUS_CHANNELS_LINE_ALLOW_FROM"` GroupTrigger GroupTriggerConfig `json:"group_trigger,omitempty"` Typing TypingConfig `json:"typing,omitempty"` Placeholder PlaceholderConfig `json:"placeholder,omitempty"` - ReasoningChannelID string `json:"reasoning_channel_id" env:"PICOCLAW_CHANNELS_LINE_REASONING_CHANNEL_ID"` + ReasoningChannelID string `json:"reasoning_channel_id" env:"PICONOMOUS_CHANNELS_LINE_REASONING_CHANNEL_ID"` } type OneBotConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_CHANNELS_ONEBOT_ENABLED"` - WSUrl string `json:"ws_url" env:"PICOCLAW_CHANNELS_ONEBOT_WS_URL"` - AccessToken string `json:"access_token" env:"PICOCLAW_CHANNELS_ONEBOT_ACCESS_TOKEN"` - ReconnectInterval int `json:"reconnect_interval" env:"PICOCLAW_CHANNELS_ONEBOT_RECONNECT_INTERVAL"` - GroupTriggerPrefix []string `json:"group_trigger_prefix" env:"PICOCLAW_CHANNELS_ONEBOT_GROUP_TRIGGER_PREFIX"` - AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICOCLAW_CHANNELS_ONEBOT_ALLOW_FROM"` + Enabled bool `json:"enabled" env:"PICONOMOUS_CHANNELS_ONEBOT_ENABLED"` + WSUrl string `json:"ws_url" env:"PICONOMOUS_CHANNELS_ONEBOT_WS_URL"` + AccessToken string `json:"access_token" env:"PICONOMOUS_CHANNELS_ONEBOT_ACCESS_TOKEN"` + ReconnectInterval int `json:"reconnect_interval" env:"PICONOMOUS_CHANNELS_ONEBOT_RECONNECT_INTERVAL"` + GroupTriggerPrefix []string `json:"group_trigger_prefix" env:"PICONOMOUS_CHANNELS_ONEBOT_GROUP_TRIGGER_PREFIX"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICONOMOUS_CHANNELS_ONEBOT_ALLOW_FROM"` GroupTrigger GroupTriggerConfig `json:"group_trigger,omitempty"` Typing TypingConfig `json:"typing,omitempty"` Placeholder PlaceholderConfig `json:"placeholder,omitempty"` - ReasoningChannelID string `json:"reasoning_channel_id" env:"PICOCLAW_CHANNELS_ONEBOT_REASONING_CHANNEL_ID"` + ReasoningChannelID string `json:"reasoning_channel_id" env:"PICONOMOUS_CHANNELS_ONEBOT_REASONING_CHANNEL_ID"` } type WeComConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_CHANNELS_WECOM_ENABLED"` - Token string `json:"token" env:"PICOCLAW_CHANNELS_WECOM_TOKEN"` - EncodingAESKey string `json:"encoding_aes_key" env:"PICOCLAW_CHANNELS_WECOM_ENCODING_AES_KEY"` - WebhookURL string `json:"webhook_url" env:"PICOCLAW_CHANNELS_WECOM_WEBHOOK_URL"` - WebhookHost string `json:"webhook_host" env:"PICOCLAW_CHANNELS_WECOM_WEBHOOK_HOST"` - WebhookPort int `json:"webhook_port" env:"PICOCLAW_CHANNELS_WECOM_WEBHOOK_PORT"` - WebhookPath string `json:"webhook_path" env:"PICOCLAW_CHANNELS_WECOM_WEBHOOK_PATH"` - AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICOCLAW_CHANNELS_WECOM_ALLOW_FROM"` - ReplyTimeout int `json:"reply_timeout" env:"PICOCLAW_CHANNELS_WECOM_REPLY_TIMEOUT"` + Enabled bool `json:"enabled" env:"PICONOMOUS_CHANNELS_WECOM_ENABLED"` + Token string `json:"token" env:"PICONOMOUS_CHANNELS_WECOM_TOKEN"` + EncodingAESKey string `json:"encoding_aes_key" env:"PICONOMOUS_CHANNELS_WECOM_ENCODING_AES_KEY"` + WebhookURL string `json:"webhook_url" env:"PICONOMOUS_CHANNELS_WECOM_WEBHOOK_URL"` + WebhookHost string `json:"webhook_host" env:"PICONOMOUS_CHANNELS_WECOM_WEBHOOK_HOST"` + WebhookPort int `json:"webhook_port" env:"PICONOMOUS_CHANNELS_WECOM_WEBHOOK_PORT"` + WebhookPath string `json:"webhook_path" env:"PICONOMOUS_CHANNELS_WECOM_WEBHOOK_PATH"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICONOMOUS_CHANNELS_WECOM_ALLOW_FROM"` + ReplyTimeout int `json:"reply_timeout" env:"PICONOMOUS_CHANNELS_WECOM_REPLY_TIMEOUT"` GroupTrigger GroupTriggerConfig `json:"group_trigger,omitempty"` - ReasoningChannelID string `json:"reasoning_channel_id" env:"PICOCLAW_CHANNELS_WECOM_REASONING_CHANNEL_ID"` + ReasoningChannelID string `json:"reasoning_channel_id" env:"PICONOMOUS_CHANNELS_WECOM_REASONING_CHANNEL_ID"` } type WeComAppConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_CHANNELS_WECOM_APP_ENABLED"` - CorpID string `json:"corp_id" env:"PICOCLAW_CHANNELS_WECOM_APP_CORP_ID"` - CorpSecret string `json:"corp_secret" env:"PICOCLAW_CHANNELS_WECOM_APP_CORP_SECRET"` - AgentID int64 `json:"agent_id" env:"PICOCLAW_CHANNELS_WECOM_APP_AGENT_ID"` - Token string `json:"token" env:"PICOCLAW_CHANNELS_WECOM_APP_TOKEN"` - EncodingAESKey string `json:"encoding_aes_key" env:"PICOCLAW_CHANNELS_WECOM_APP_ENCODING_AES_KEY"` - WebhookHost string `json:"webhook_host" env:"PICOCLAW_CHANNELS_WECOM_APP_WEBHOOK_HOST"` - WebhookPort int `json:"webhook_port" env:"PICOCLAW_CHANNELS_WECOM_APP_WEBHOOK_PORT"` - WebhookPath string `json:"webhook_path" env:"PICOCLAW_CHANNELS_WECOM_APP_WEBHOOK_PATH"` - AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICOCLAW_CHANNELS_WECOM_APP_ALLOW_FROM"` - ReplyTimeout int `json:"reply_timeout" env:"PICOCLAW_CHANNELS_WECOM_APP_REPLY_TIMEOUT"` + Enabled bool `json:"enabled" env:"PICONOMOUS_CHANNELS_WECOM_APP_ENABLED"` + CorpID string `json:"corp_id" env:"PICONOMOUS_CHANNELS_WECOM_APP_CORP_ID"` + CorpSecret string `json:"corp_secret" env:"PICONOMOUS_CHANNELS_WECOM_APP_CORP_SECRET"` + AgentID int64 `json:"agent_id" env:"PICONOMOUS_CHANNELS_WECOM_APP_AGENT_ID"` + Token string `json:"token" env:"PICONOMOUS_CHANNELS_WECOM_APP_TOKEN"` + EncodingAESKey string `json:"encoding_aes_key" env:"PICONOMOUS_CHANNELS_WECOM_APP_ENCODING_AES_KEY"` + WebhookHost string `json:"webhook_host" env:"PICONOMOUS_CHANNELS_WECOM_APP_WEBHOOK_HOST"` + WebhookPort int `json:"webhook_port" env:"PICONOMOUS_CHANNELS_WECOM_APP_WEBHOOK_PORT"` + WebhookPath string `json:"webhook_path" env:"PICONOMOUS_CHANNELS_WECOM_APP_WEBHOOK_PATH"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICONOMOUS_CHANNELS_WECOM_APP_ALLOW_FROM"` + ReplyTimeout int `json:"reply_timeout" env:"PICONOMOUS_CHANNELS_WECOM_APP_REPLY_TIMEOUT"` GroupTrigger GroupTriggerConfig `json:"group_trigger,omitempty"` - ReasoningChannelID string `json:"reasoning_channel_id" env:"PICOCLAW_CHANNELS_WECOM_APP_REASONING_CHANNEL_ID"` + ReasoningChannelID string `json:"reasoning_channel_id" env:"PICONOMOUS_CHANNELS_WECOM_APP_REASONING_CHANNEL_ID"` } type WeComAIBotConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_CHANNELS_WECOM_AIBOT_ENABLED"` - BotID string `json:"bot_id,omitempty" env:"PICOCLAW_CHANNELS_WECOM_AIBOT_BOT_ID"` - Secret string `json:"secret,omitempty" env:"PICOCLAW_CHANNELS_WECOM_AIBOT_SECRET"` - Token string `json:"token,omitempty" env:"PICOCLAW_CHANNELS_WECOM_AIBOT_TOKEN"` - EncodingAESKey string `json:"encoding_aes_key,omitempty" env:"PICOCLAW_CHANNELS_WECOM_AIBOT_ENCODING_AES_KEY"` - WebhookPath string `json:"webhook_path,omitempty" env:"PICOCLAW_CHANNELS_WECOM_AIBOT_WEBHOOK_PATH"` - AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICOCLAW_CHANNELS_WECOM_AIBOT_ALLOW_FROM"` - ReplyTimeout int `json:"reply_timeout" env:"PICOCLAW_CHANNELS_WECOM_AIBOT_REPLY_TIMEOUT"` - MaxSteps int `json:"max_steps" env:"PICOCLAW_CHANNELS_WECOM_AIBOT_MAX_STEPS"` // Maximum streaming steps - WelcomeMessage string `json:"welcome_message" env:"PICOCLAW_CHANNELS_WECOM_AIBOT_WELCOME_MESSAGE"` // Sent on enter_chat event; empty = no welcome - ProcessingMessage string `json:"processing_message,omitempty" env:"PICOCLAW_CHANNELS_WECOM_AIBOT_PROCESSING_MESSAGE"` - ReasoningChannelID string `json:"reasoning_channel_id" env:"PICOCLAW_CHANNELS_WECOM_AIBOT_REASONING_CHANNEL_ID"` + Enabled bool `json:"enabled" env:"PICONOMOUS_CHANNELS_WECOM_AIBOT_ENABLED"` + BotID string `json:"bot_id,omitempty" env:"PICONOMOUS_CHANNELS_WECOM_AIBOT_BOT_ID"` + Secret string `json:"secret,omitempty" env:"PICONOMOUS_CHANNELS_WECOM_AIBOT_SECRET"` + Token string `json:"token,omitempty" env:"PICONOMOUS_CHANNELS_WECOM_AIBOT_TOKEN"` + EncodingAESKey string `json:"encoding_aes_key,omitempty" env:"PICONOMOUS_CHANNELS_WECOM_AIBOT_ENCODING_AES_KEY"` + WebhookPath string `json:"webhook_path,omitempty" env:"PICONOMOUS_CHANNELS_WECOM_AIBOT_WEBHOOK_PATH"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICONOMOUS_CHANNELS_WECOM_AIBOT_ALLOW_FROM"` + ReplyTimeout int `json:"reply_timeout" env:"PICONOMOUS_CHANNELS_WECOM_AIBOT_REPLY_TIMEOUT"` + MaxSteps int `json:"max_steps" env:"PICONOMOUS_CHANNELS_WECOM_AIBOT_MAX_STEPS"` // Maximum streaming steps + WelcomeMessage string `json:"welcome_message" env:"PICONOMOUS_CHANNELS_WECOM_AIBOT_WELCOME_MESSAGE"` // Sent on enter_chat event; empty = no welcome + ProcessingMessage string `json:"processing_message,omitempty" env:"PICONOMOUS_CHANNELS_WECOM_AIBOT_PROCESSING_MESSAGE"` + ReasoningChannelID string `json:"reasoning_channel_id" env:"PICONOMOUS_CHANNELS_WECOM_AIBOT_REASONING_CHANNEL_ID"` } type PicoConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_CHANNELS_PICO_ENABLED"` - Token string `json:"token" env:"PICOCLAW_CHANNELS_PICO_TOKEN"` + Enabled bool `json:"enabled" env:"PICONOMOUS_CHANNELS_PICO_ENABLED"` + Token string `json:"token" env:"PICONOMOUS_CHANNELS_PICO_TOKEN"` AllowTokenQuery bool `json:"allow_token_query,omitempty"` AllowOrigins []string `json:"allow_origins,omitempty"` PingInterval int `json:"ping_interval,omitempty"` ReadTimeout int `json:"read_timeout,omitempty"` WriteTimeout int `json:"write_timeout,omitempty"` MaxConnections int `json:"max_connections,omitempty"` - AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICOCLAW_CHANNELS_PICO_ALLOW_FROM"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICONOMOUS_CHANNELS_PICO_ALLOW_FROM"` Placeholder PlaceholderConfig `json:"placeholder,omitempty"` } type PicoClientConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_CHANNELS_PICO_CLIENT_ENABLED"` - URL string `json:"url" env:"PICOCLAW_CHANNELS_PICO_CLIENT_URL"` - Token string `json:"token" env:"PICOCLAW_CHANNELS_PICO_CLIENT_TOKEN"` + Enabled bool `json:"enabled" env:"PICONOMOUS_CHANNELS_PICO_CLIENT_ENABLED"` + URL string `json:"url" env:"PICONOMOUS_CHANNELS_PICO_CLIENT_URL"` + Token string `json:"token" env:"PICONOMOUS_CHANNELS_PICO_CLIENT_TOKEN"` SessionID string `json:"session_id,omitempty"` PingInterval int `json:"ping_interval,omitempty"` ReadTimeout int `json:"read_timeout,omitempty"` - AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICOCLAW_CHANNELS_PICO_CLIENT_ALLOW_FROM"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICONOMOUS_CHANNELS_PICO_CLIENT_ALLOW_FROM"` } type IRCConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_CHANNELS_IRC_ENABLED"` - Server string `json:"server" env:"PICOCLAW_CHANNELS_IRC_SERVER"` - TLS bool `json:"tls" env:"PICOCLAW_CHANNELS_IRC_TLS"` - Nick string `json:"nick" env:"PICOCLAW_CHANNELS_IRC_NICK"` - User string `json:"user,omitempty" env:"PICOCLAW_CHANNELS_IRC_USER"` - RealName string `json:"real_name,omitempty" env:"PICOCLAW_CHANNELS_IRC_REAL_NAME"` - Password string `json:"password" env:"PICOCLAW_CHANNELS_IRC_PASSWORD"` - NickServPassword string `json:"nickserv_password" env:"PICOCLAW_CHANNELS_IRC_NICKSERV_PASSWORD"` - SASLUser string `json:"sasl_user" env:"PICOCLAW_CHANNELS_IRC_SASL_USER"` - SASLPassword string `json:"sasl_password" env:"PICOCLAW_CHANNELS_IRC_SASL_PASSWORD"` - Channels FlexibleStringSlice `json:"channels" env:"PICOCLAW_CHANNELS_IRC_CHANNELS"` - RequestCaps FlexibleStringSlice `json:"request_caps,omitempty" env:"PICOCLAW_CHANNELS_IRC_REQUEST_CAPS"` - AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICOCLAW_CHANNELS_IRC_ALLOW_FROM"` + Enabled bool `json:"enabled" env:"PICONOMOUS_CHANNELS_IRC_ENABLED"` + Server string `json:"server" env:"PICONOMOUS_CHANNELS_IRC_SERVER"` + TLS bool `json:"tls" env:"PICONOMOUS_CHANNELS_IRC_TLS"` + Nick string `json:"nick" env:"PICONOMOUS_CHANNELS_IRC_NICK"` + User string `json:"user,omitempty" env:"PICONOMOUS_CHANNELS_IRC_USER"` + RealName string `json:"real_name,omitempty" env:"PICONOMOUS_CHANNELS_IRC_REAL_NAME"` + Password string `json:"password" env:"PICONOMOUS_CHANNELS_IRC_PASSWORD"` + NickServPassword string `json:"nickserv_password" env:"PICONOMOUS_CHANNELS_IRC_NICKSERV_PASSWORD"` + SASLUser string `json:"sasl_user" env:"PICONOMOUS_CHANNELS_IRC_SASL_USER"` + SASLPassword string `json:"sasl_password" env:"PICONOMOUS_CHANNELS_IRC_SASL_PASSWORD"` + Channels FlexibleStringSlice `json:"channels" env:"PICONOMOUS_CHANNELS_IRC_CHANNELS"` + RequestCaps FlexibleStringSlice `json:"request_caps,omitempty" env:"PICONOMOUS_CHANNELS_IRC_REQUEST_CAPS"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICONOMOUS_CHANNELS_IRC_ALLOW_FROM"` GroupTrigger GroupTriggerConfig `json:"group_trigger,omitempty"` Typing TypingConfig `json:"typing,omitempty"` - ReasoningChannelID string `json:"reasoning_channel_id" env:"PICOCLAW_CHANNELS_IRC_REASONING_CHANNEL_ID"` + ReasoningChannelID string `json:"reasoning_channel_id" env:"PICONOMOUS_CHANNELS_IRC_REASONING_CHANNEL_ID"` } type HeartbeatConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_HEARTBEAT_ENABLED"` - Interval int `json:"interval" env:"PICOCLAW_HEARTBEAT_INTERVAL"` // minutes, min 5 + Enabled bool `json:"enabled" env:"PICONOMOUS_HEARTBEAT_ENABLED"` + Interval int `json:"interval" env:"PICONOMOUS_HEARTBEAT_INTERVAL"` // minutes, min 5 +} + +// AutonomousConfig enables fully autonomous operation where the agent proactively +// pursues goals, self-schedules tasks, and operates without human prompting. +type AutonomousConfig struct { + // Enabled activates autonomous mode. When true, the agent runs a goal-driven + // loop: it reads GOALS.md from the workspace on every heartbeat, makes progress + // on outstanding goals, and self-schedules follow-up tasks via the cron tool. + Enabled bool `json:"enabled" env:"PICONOMOUS_AUTONOMOUS_ENABLED"` + + // IntervalMinutes controls how often (in minutes) the autonomous heartbeat fires. + // Defaults to 5 minutes when autonomous mode is enabled. Minimum is 1 minute. + IntervalMinutes int `json:"interval_minutes" env:"PICONOMOUS_AUTONOMOUS_INTERVAL_MINUTES"` + + // AllowSelfSchedule lets the agent create cron jobs targeting its own internal + // channels without requiring explicit command_confirm=true. This allows the agent + // to plan and schedule its own work end-to-end. + AllowSelfSchedule bool `json:"allow_self_schedule" env:"PICONOMOUS_AUTONOMOUS_ALLOW_SELF_SCHEDULE"` + + // MaxGoals is the maximum number of active goals the agent tracks at once. + // When the limit is reached, the agent must complete or drop a goal before + // adding a new one. 0 means unlimited. + MaxGoals int `json:"max_goals" env:"PICONOMOUS_AUTONOMOUS_MAX_GOALS"` +} + +// IsEnabled returns true when autonomous mode is active. +func (a *AutonomousConfig) IsEnabled() bool { + return a.Enabled +} + +// GetIntervalMinutes returns the effective heartbeat interval for autonomous mode. +// Falls back to 5 minutes if not configured. +func (a *AutonomousConfig) GetIntervalMinutes() int { + if a.IntervalMinutes > 0 { + return a.IntervalMinutes + } + return 5 } type DevicesConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_DEVICES_ENABLED"` - MonitorUSB bool `json:"monitor_usb" env:"PICOCLAW_DEVICES_MONITOR_USB"` + Enabled bool `json:"enabled" env:"PICONOMOUS_DEVICES_ENABLED"` + MonitorUSB bool `json:"monitor_usb" env:"PICONOMOUS_DEVICES_MONITOR_USB"` } type VoiceConfig struct { - EchoTranscription bool `json:"echo_transcription" env:"PICOCLAW_VOICE_ECHO_TRANSCRIPTION"` + EchoTranscription bool `json:"echo_transcription" env:"PICONOMOUS_VOICE_ECHO_TRANSCRIPTION"` } type ProvidersConfig struct { @@ -624,17 +662,17 @@ func (p ProvidersConfig) MarshalJSON() ([]byte, error) { } type ProviderConfig struct { - APIKey string `json:"api_key" env:"PICOCLAW_PROVIDERS_{{.Name}}_API_KEY"` - APIBase string `json:"api_base" env:"PICOCLAW_PROVIDERS_{{.Name}}_API_BASE"` - Proxy string `json:"proxy,omitempty" env:"PICOCLAW_PROVIDERS_{{.Name}}_PROXY"` - RequestTimeout int `json:"request_timeout,omitempty" env:"PICOCLAW_PROVIDERS_{{.Name}}_REQUEST_TIMEOUT"` - AuthMethod string `json:"auth_method,omitempty" env:"PICOCLAW_PROVIDERS_{{.Name}}_AUTH_METHOD"` - ConnectMode string `json:"connect_mode,omitempty" env:"PICOCLAW_PROVIDERS_{{.Name}}_CONNECT_MODE"` // only for Github Copilot, `stdio` or `grpc` + APIKey string `json:"api_key" env:"PICONOMOUS_PROVIDERS_{{.Name}}_API_KEY"` + APIBase string `json:"api_base" env:"PICONOMOUS_PROVIDERS_{{.Name}}_API_BASE"` + Proxy string `json:"proxy,omitempty" env:"PICONOMOUS_PROVIDERS_{{.Name}}_PROXY"` + RequestTimeout int `json:"request_timeout,omitempty" env:"PICONOMOUS_PROVIDERS_{{.Name}}_REQUEST_TIMEOUT"` + AuthMethod string `json:"auth_method,omitempty" env:"PICONOMOUS_PROVIDERS_{{.Name}}_AUTH_METHOD"` + ConnectMode string `json:"connect_mode,omitempty" env:"PICONOMOUS_PROVIDERS_{{.Name}}_CONNECT_MODE"` // only for Github Copilot, `stdio` or `grpc` } type OpenAIProviderConfig struct { ProviderConfig - WebSearch bool `json:"web_search" env:"PICOCLAW_PROVIDERS_OPENAI_WEB_SEARCH"` + WebSearch bool `json:"web_search" env:"PICONOMOUS_PROVIDERS_OPENAI_WEB_SEARCH"` } // ModelConfig represents a model-centric provider configuration. @@ -680,17 +718,17 @@ func (c *ModelConfig) Validate() error { } type GatewayConfig struct { - Host string `json:"host" env:"PICOCLAW_GATEWAY_HOST"` - Port int `json:"port" env:"PICOCLAW_GATEWAY_PORT"` - HotReload bool `json:"hot_reload" env:"PICOCLAW_GATEWAY_HOT_RELOAD"` + Host string `json:"host" env:"PICONOMOUS_GATEWAY_HOST"` + Port int `json:"port" env:"PICONOMOUS_GATEWAY_PORT"` + HotReload bool `json:"hot_reload" env:"PICONOMOUS_GATEWAY_HOT_RELOAD"` } type ToolDiscoveryConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_TOOLS_DISCOVERY_ENABLED"` - TTL int `json:"ttl" env:"PICOCLAW_TOOLS_DISCOVERY_TTL"` - MaxSearchResults int `json:"max_search_results" env:"PICOCLAW_MAX_SEARCH_RESULTS"` - UseBM25 bool `json:"use_bm25" env:"PICOCLAW_TOOLS_DISCOVERY_USE_BM25"` - UseRegex bool `json:"use_regex" env:"PICOCLAW_TOOLS_DISCOVERY_USE_REGEX"` + Enabled bool `json:"enabled" env:"PICONOMOUS_TOOLS_DISCOVERY_ENABLED"` + TTL int `json:"ttl" env:"PICONOMOUS_TOOLS_DISCOVERY_TTL"` + MaxSearchResults int `json:"max_search_results" env:"PICONOMOUS_MAX_SEARCH_RESULTS"` + UseBM25 bool `json:"use_bm25" env:"PICONOMOUS_TOOLS_DISCOVERY_USE_BM25"` + UseRegex bool `json:"use_regex" env:"PICONOMOUS_TOOLS_DISCOVERY_USE_REGEX"` } type ToolConfig struct { @@ -698,50 +736,50 @@ type ToolConfig struct { } type BraveConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_TOOLS_WEB_BRAVE_ENABLED"` - APIKey string `json:"api_key" env:"PICOCLAW_TOOLS_WEB_BRAVE_API_KEY"` - APIKeys []string `json:"api_keys" env:"PICOCLAW_TOOLS_WEB_BRAVE_API_KEYS"` - MaxResults int `json:"max_results" env:"PICOCLAW_TOOLS_WEB_BRAVE_MAX_RESULTS"` + Enabled bool `json:"enabled" env:"PICONOMOUS_TOOLS_WEB_BRAVE_ENABLED"` + APIKey string `json:"api_key" env:"PICONOMOUS_TOOLS_WEB_BRAVE_API_KEY"` + APIKeys []string `json:"api_keys" env:"PICONOMOUS_TOOLS_WEB_BRAVE_API_KEYS"` + MaxResults int `json:"max_results" env:"PICONOMOUS_TOOLS_WEB_BRAVE_MAX_RESULTS"` } type TavilyConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_TOOLS_WEB_TAVILY_ENABLED"` - APIKey string `json:"api_key" env:"PICOCLAW_TOOLS_WEB_TAVILY_API_KEY"` - APIKeys []string `json:"api_keys" env:"PICOCLAW_TOOLS_WEB_TAVILY_API_KEYS"` - BaseURL string `json:"base_url" env:"PICOCLAW_TOOLS_WEB_TAVILY_BASE_URL"` - MaxResults int `json:"max_results" env:"PICOCLAW_TOOLS_WEB_TAVILY_MAX_RESULTS"` + Enabled bool `json:"enabled" env:"PICONOMOUS_TOOLS_WEB_TAVILY_ENABLED"` + APIKey string `json:"api_key" env:"PICONOMOUS_TOOLS_WEB_TAVILY_API_KEY"` + APIKeys []string `json:"api_keys" env:"PICONOMOUS_TOOLS_WEB_TAVILY_API_KEYS"` + BaseURL string `json:"base_url" env:"PICONOMOUS_TOOLS_WEB_TAVILY_BASE_URL"` + MaxResults int `json:"max_results" env:"PICONOMOUS_TOOLS_WEB_TAVILY_MAX_RESULTS"` } type DuckDuckGoConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_TOOLS_WEB_DUCKDUCKGO_ENABLED"` - MaxResults int `json:"max_results" env:"PICOCLAW_TOOLS_WEB_DUCKDUCKGO_MAX_RESULTS"` + Enabled bool `json:"enabled" env:"PICONOMOUS_TOOLS_WEB_DUCKDUCKGO_ENABLED"` + MaxResults int `json:"max_results" env:"PICONOMOUS_TOOLS_WEB_DUCKDUCKGO_MAX_RESULTS"` } type PerplexityConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_TOOLS_WEB_PERPLEXITY_ENABLED"` - APIKey string `json:"api_key" env:"PICOCLAW_TOOLS_WEB_PERPLEXITY_API_KEY"` - APIKeys []string `json:"api_keys" env:"PICOCLAW_TOOLS_WEB_PERPLEXITY_API_KEYS"` - MaxResults int `json:"max_results" env:"PICOCLAW_TOOLS_WEB_PERPLEXITY_MAX_RESULTS"` + Enabled bool `json:"enabled" env:"PICONOMOUS_TOOLS_WEB_PERPLEXITY_ENABLED"` + APIKey string `json:"api_key" env:"PICONOMOUS_TOOLS_WEB_PERPLEXITY_API_KEY"` + APIKeys []string `json:"api_keys" env:"PICONOMOUS_TOOLS_WEB_PERPLEXITY_API_KEYS"` + MaxResults int `json:"max_results" env:"PICONOMOUS_TOOLS_WEB_PERPLEXITY_MAX_RESULTS"` } type SearXNGConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_TOOLS_WEB_SEARXNG_ENABLED"` - BaseURL string `json:"base_url" env:"PICOCLAW_TOOLS_WEB_SEARXNG_BASE_URL"` - MaxResults int `json:"max_results" env:"PICOCLAW_TOOLS_WEB_SEARXNG_MAX_RESULTS"` + Enabled bool `json:"enabled" env:"PICONOMOUS_TOOLS_WEB_SEARXNG_ENABLED"` + BaseURL string `json:"base_url" env:"PICONOMOUS_TOOLS_WEB_SEARXNG_BASE_URL"` + MaxResults int `json:"max_results" env:"PICONOMOUS_TOOLS_WEB_SEARXNG_MAX_RESULTS"` } type GLMSearchConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_TOOLS_WEB_GLM_ENABLED"` - APIKey string `json:"api_key" env:"PICOCLAW_TOOLS_WEB_GLM_API_KEY"` - BaseURL string `json:"base_url" env:"PICOCLAW_TOOLS_WEB_GLM_BASE_URL"` + Enabled bool `json:"enabled" env:"PICONOMOUS_TOOLS_WEB_GLM_ENABLED"` + APIKey string `json:"api_key" env:"PICONOMOUS_TOOLS_WEB_GLM_API_KEY"` + BaseURL string `json:"base_url" env:"PICONOMOUS_TOOLS_WEB_GLM_BASE_URL"` // SearchEngine specifies the search backend: "search_std" (default), // "search_pro", "search_pro_sogou", or "search_pro_quark". - SearchEngine string `json:"search_engine" env:"PICOCLAW_TOOLS_WEB_GLM_SEARCH_ENGINE"` - MaxResults int `json:"max_results" env:"PICOCLAW_TOOLS_WEB_GLM_MAX_RESULTS"` + SearchEngine string `json:"search_engine" env:"PICONOMOUS_TOOLS_WEB_GLM_SEARCH_ENGINE"` + MaxResults int `json:"max_results" env:"PICONOMOUS_TOOLS_WEB_GLM_MAX_RESULTS"` } type WebToolsConfig struct { - ToolConfig ` envPrefix:"PICOCLAW_TOOLS_WEB_"` + ToolConfig ` envPrefix:"PICONOMOUS_TOOLS_WEB_"` Brave BraveConfig ` json:"brave"` Tavily TavilyConfig ` json:"tavily"` DuckDuckGo DuckDuckGoConfig ` json:"duckduckgo"` @@ -753,42 +791,42 @@ type WebToolsConfig struct { // the client-side web_search tool is hidden to avoid duplicate search surfaces, // and the provider's built-in search is used instead. Falls back to client-side // search when the provider does not support native search. - PreferNative bool `json:"prefer_native" env:"PICOCLAW_TOOLS_WEB_PREFER_NATIVE"` + PreferNative bool `json:"prefer_native" env:"PICONOMOUS_TOOLS_WEB_PREFER_NATIVE"` // Proxy is an optional proxy URL for web tools (http/https/socks5/socks5h). // For authenticated proxies, prefer HTTP_PROXY/HTTPS_PROXY env vars instead of embedding credentials in config. - Proxy string `json:"proxy,omitempty" env:"PICOCLAW_TOOLS_WEB_PROXY"` - FetchLimitBytes int64 `json:"fetch_limit_bytes,omitempty" env:"PICOCLAW_TOOLS_WEB_FETCH_LIMIT_BYTES"` - Format string `json:"format,omitempty" env:"PICOCLAW_TOOLS_WEB_FORMAT"` - PrivateHostWhitelist FlexibleStringSlice `json:"private_host_whitelist,omitempty" env:"PICOCLAW_TOOLS_WEB_PRIVATE_HOST_WHITELIST"` + Proxy string `json:"proxy,omitempty" env:"PICONOMOUS_TOOLS_WEB_PROXY"` + FetchLimitBytes int64 `json:"fetch_limit_bytes,omitempty" env:"PICONOMOUS_TOOLS_WEB_FETCH_LIMIT_BYTES"` + Format string `json:"format,omitempty" env:"PICONOMOUS_TOOLS_WEB_FORMAT"` + PrivateHostWhitelist FlexibleStringSlice `json:"private_host_whitelist,omitempty" env:"PICONOMOUS_TOOLS_WEB_PRIVATE_HOST_WHITELIST"` } type CronToolsConfig struct { - ToolConfig ` envPrefix:"PICOCLAW_TOOLS_CRON_"` - ExecTimeoutMinutes int ` env:"PICOCLAW_TOOLS_CRON_EXEC_TIMEOUT_MINUTES" json:"exec_timeout_minutes"` // 0 means no timeout - AllowCommand bool ` env:"PICOCLAW_TOOLS_CRON_ALLOW_COMMAND" json:"allow_command"` + ToolConfig ` envPrefix:"PICONOMOUS_TOOLS_CRON_"` + ExecTimeoutMinutes int ` env:"PICONOMOUS_TOOLS_CRON_EXEC_TIMEOUT_MINUTES" json:"exec_timeout_minutes"` // 0 means no timeout + AllowCommand bool ` env:"PICONOMOUS_TOOLS_CRON_ALLOW_COMMAND" json:"allow_command"` } type ExecConfig struct { - ToolConfig ` envPrefix:"PICOCLAW_TOOLS_EXEC_"` - EnableDenyPatterns bool ` env:"PICOCLAW_TOOLS_EXEC_ENABLE_DENY_PATTERNS" json:"enable_deny_patterns"` - AllowRemote bool ` env:"PICOCLAW_TOOLS_EXEC_ALLOW_REMOTE" json:"allow_remote"` - CustomDenyPatterns []string ` env:"PICOCLAW_TOOLS_EXEC_CUSTOM_DENY_PATTERNS" json:"custom_deny_patterns"` - CustomAllowPatterns []string ` env:"PICOCLAW_TOOLS_EXEC_CUSTOM_ALLOW_PATTERNS" json:"custom_allow_patterns"` - TimeoutSeconds int ` env:"PICOCLAW_TOOLS_EXEC_TIMEOUT_SECONDS" json:"timeout_seconds"` // 0 means use default (60s) + ToolConfig ` envPrefix:"PICONOMOUS_TOOLS_EXEC_"` + EnableDenyPatterns bool ` env:"PICONOMOUS_TOOLS_EXEC_ENABLE_DENY_PATTERNS" json:"enable_deny_patterns"` + AllowRemote bool ` env:"PICONOMOUS_TOOLS_EXEC_ALLOW_REMOTE" json:"allow_remote"` + CustomDenyPatterns []string ` env:"PICONOMOUS_TOOLS_EXEC_CUSTOM_DENY_PATTERNS" json:"custom_deny_patterns"` + CustomAllowPatterns []string ` env:"PICONOMOUS_TOOLS_EXEC_CUSTOM_ALLOW_PATTERNS" json:"custom_allow_patterns"` + TimeoutSeconds int ` env:"PICONOMOUS_TOOLS_EXEC_TIMEOUT_SECONDS" json:"timeout_seconds"` // 0 means use default (60s) } type SkillsToolsConfig struct { - ToolConfig ` envPrefix:"PICOCLAW_TOOLS_SKILLS_"` + ToolConfig ` envPrefix:"PICONOMOUS_TOOLS_SKILLS_"` Registries SkillsRegistriesConfig ` json:"registries"` Github SkillsGithubConfig ` json:"github"` - MaxConcurrentSearches int ` json:"max_concurrent_searches" env:"PICOCLAW_TOOLS_SKILLS_MAX_CONCURRENT_SEARCHES"` + MaxConcurrentSearches int ` json:"max_concurrent_searches" env:"PICONOMOUS_TOOLS_SKILLS_MAX_CONCURRENT_SEARCHES"` SearchCache SearchCacheConfig ` json:"search_cache"` } type MediaCleanupConfig struct { - ToolConfig ` envPrefix:"PICOCLAW_MEDIA_CLEANUP_"` - MaxAge int ` env:"PICOCLAW_MEDIA_CLEANUP_MAX_AGE" json:"max_age_minutes"` - Interval int ` env:"PICOCLAW_MEDIA_CLEANUP_INTERVAL" json:"interval_minutes"` + ToolConfig ` envPrefix:"PICONOMOUS_MEDIA_CLEANUP_"` + MaxAge int ` env:"PICONOMOUS_MEDIA_CLEANUP_MAX_AGE" json:"max_age_minutes"` + Interval int ` env:"PICONOMOUS_MEDIA_CLEANUP_INTERVAL" json:"interval_minutes"` } type ReadFileToolConfig struct { @@ -797,34 +835,35 @@ type ReadFileToolConfig struct { } type ToolsConfig struct { - AllowReadPaths []string `json:"allow_read_paths" env:"PICOCLAW_TOOLS_ALLOW_READ_PATHS"` - AllowWritePaths []string `json:"allow_write_paths" env:"PICOCLAW_TOOLS_ALLOW_WRITE_PATHS"` + AllowReadPaths []string `json:"allow_read_paths" env:"PICONOMOUS_TOOLS_ALLOW_READ_PATHS"` + AllowWritePaths []string `json:"allow_write_paths" env:"PICONOMOUS_TOOLS_ALLOW_WRITE_PATHS"` Web WebToolsConfig `json:"web"` Cron CronToolsConfig `json:"cron"` Exec ExecConfig `json:"exec"` Skills SkillsToolsConfig `json:"skills"` MediaCleanup MediaCleanupConfig `json:"media_cleanup"` MCP MCPConfig `json:"mcp"` - AppendFile ToolConfig `json:"append_file" envPrefix:"PICOCLAW_TOOLS_APPEND_FILE_"` - EditFile ToolConfig `json:"edit_file" envPrefix:"PICOCLAW_TOOLS_EDIT_FILE_"` - FindSkills ToolConfig `json:"find_skills" envPrefix:"PICOCLAW_TOOLS_FIND_SKILLS_"` - I2C ToolConfig `json:"i2c" envPrefix:"PICOCLAW_TOOLS_I2C_"` - InstallSkill ToolConfig `json:"install_skill" envPrefix:"PICOCLAW_TOOLS_INSTALL_SKILL_"` - ListDir ToolConfig `json:"list_dir" envPrefix:"PICOCLAW_TOOLS_LIST_DIR_"` - Message ToolConfig `json:"message" envPrefix:"PICOCLAW_TOOLS_MESSAGE_"` - ReadFile ReadFileToolConfig `json:"read_file" envPrefix:"PICOCLAW_TOOLS_READ_FILE_"` - SendFile ToolConfig `json:"send_file" envPrefix:"PICOCLAW_TOOLS_SEND_FILE_"` - Spawn ToolConfig `json:"spawn" envPrefix:"PICOCLAW_TOOLS_SPAWN_"` - SpawnStatus ToolConfig `json:"spawn_status" envPrefix:"PICOCLAW_TOOLS_SPAWN_STATUS_"` - SPI ToolConfig `json:"spi" envPrefix:"PICOCLAW_TOOLS_SPI_"` - Subagent ToolConfig `json:"subagent" envPrefix:"PICOCLAW_TOOLS_SUBAGENT_"` - WebFetch ToolConfig `json:"web_fetch" envPrefix:"PICOCLAW_TOOLS_WEB_FETCH_"` - WriteFile ToolConfig `json:"write_file" envPrefix:"PICOCLAW_TOOLS_WRITE_FILE_"` + AppendFile ToolConfig `json:"append_file" envPrefix:"PICONOMOUS_TOOLS_APPEND_FILE_"` + EditFile ToolConfig `json:"edit_file" envPrefix:"PICONOMOUS_TOOLS_EDIT_FILE_"` + FindSkills ToolConfig `json:"find_skills" envPrefix:"PICONOMOUS_TOOLS_FIND_SKILLS_"` + I2C ToolConfig `json:"i2c" envPrefix:"PICONOMOUS_TOOLS_I2C_"` + InstallSkill ToolConfig `json:"install_skill" envPrefix:"PICONOMOUS_TOOLS_INSTALL_SKILL_"` + ListDir ToolConfig `json:"list_dir" envPrefix:"PICONOMOUS_TOOLS_LIST_DIR_"` + Message ToolConfig `json:"message" envPrefix:"PICONOMOUS_TOOLS_MESSAGE_"` + ReadFile ReadFileToolConfig `json:"read_file" envPrefix:"PICONOMOUS_TOOLS_READ_FILE_"` + SendFile ToolConfig `json:"send_file" envPrefix:"PICONOMOUS_TOOLS_SEND_FILE_"` + Spawn ToolConfig `json:"spawn" envPrefix:"PICONOMOUS_TOOLS_SPAWN_"` + SpawnStatus ToolConfig `json:"spawn_status" envPrefix:"PICONOMOUS_TOOLS_SPAWN_STATUS_"` + SPI ToolConfig `json:"spi" envPrefix:"PICONOMOUS_TOOLS_SPI_"` + Subagent ToolConfig `json:"subagent" envPrefix:"PICONOMOUS_TOOLS_SUBAGENT_"` + WebFetch ToolConfig `json:"web_fetch" envPrefix:"PICONOMOUS_TOOLS_WEB_FETCH_"` + WriteFile ToolConfig `json:"write_file" envPrefix:"PICONOMOUS_TOOLS_WRITE_FILE_"` + Goal ToolConfig `json:"goal" envPrefix:"PICONOMOUS_TOOLS_GOAL_"` } type SearchCacheConfig struct { - MaxSize int `json:"max_size" env:"PICOCLAW_SKILLS_SEARCH_CACHE_MAX_SIZE"` - TTLSeconds int `json:"ttl_seconds" env:"PICOCLAW_SKILLS_SEARCH_CACHE_TTL_SECONDS"` + MaxSize int `json:"max_size" env:"PICONOMOUS_SKILLS_SEARCH_CACHE_MAX_SIZE"` + TTLSeconds int `json:"ttl_seconds" env:"PICONOMOUS_SKILLS_SEARCH_CACHE_TTL_SECONDS"` } type SkillsRegistriesConfig struct { @@ -832,20 +871,20 @@ type SkillsRegistriesConfig struct { } type SkillsGithubConfig struct { - Token string `json:"token,omitempty" env:"PICOCLAW_TOOLS_SKILLS_GITHUB_AUTH_TOKEN"` - Proxy string `json:"proxy,omitempty" env:"PICOCLAW_TOOLS_SKILLS_GITHUB_PROXY"` + Token string `json:"token,omitempty" env:"PICONOMOUS_TOOLS_SKILLS_GITHUB_AUTH_TOKEN"` + Proxy string `json:"proxy,omitempty" env:"PICONOMOUS_TOOLS_SKILLS_GITHUB_PROXY"` } type ClawHubRegistryConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_SKILLS_REGISTRIES_CLAWHUB_ENABLED"` - BaseURL string `json:"base_url" env:"PICOCLAW_SKILLS_REGISTRIES_CLAWHUB_BASE_URL"` - AuthToken string `json:"auth_token" env:"PICOCLAW_SKILLS_REGISTRIES_CLAWHUB_AUTH_TOKEN"` - SearchPath string `json:"search_path" env:"PICOCLAW_SKILLS_REGISTRIES_CLAWHUB_SEARCH_PATH"` - SkillsPath string `json:"skills_path" env:"PICOCLAW_SKILLS_REGISTRIES_CLAWHUB_SKILLS_PATH"` - DownloadPath string `json:"download_path" env:"PICOCLAW_SKILLS_REGISTRIES_CLAWHUB_DOWNLOAD_PATH"` - Timeout int `json:"timeout" env:"PICOCLAW_SKILLS_REGISTRIES_CLAWHUB_TIMEOUT"` - MaxZipSize int `json:"max_zip_size" env:"PICOCLAW_SKILLS_REGISTRIES_CLAWHUB_MAX_ZIP_SIZE"` - MaxResponseSize int `json:"max_response_size" env:"PICOCLAW_SKILLS_REGISTRIES_CLAWHUB_MAX_RESPONSE_SIZE"` + Enabled bool `json:"enabled" env:"PICONOMOUS_SKILLS_REGISTRIES_CLAWHUB_ENABLED"` + BaseURL string `json:"base_url" env:"PICONOMOUS_SKILLS_REGISTRIES_CLAWHUB_BASE_URL"` + AuthToken string `json:"auth_token" env:"PICONOMOUS_SKILLS_REGISTRIES_CLAWHUB_AUTH_TOKEN"` + SearchPath string `json:"search_path" env:"PICONOMOUS_SKILLS_REGISTRIES_CLAWHUB_SEARCH_PATH"` + SkillsPath string `json:"skills_path" env:"PICONOMOUS_SKILLS_REGISTRIES_CLAWHUB_SKILLS_PATH"` + DownloadPath string `json:"download_path" env:"PICONOMOUS_SKILLS_REGISTRIES_CLAWHUB_DOWNLOAD_PATH"` + Timeout int `json:"timeout" env:"PICONOMOUS_SKILLS_REGISTRIES_CLAWHUB_TIMEOUT"` + MaxZipSize int `json:"max_zip_size" env:"PICONOMOUS_SKILLS_REGISTRIES_CLAWHUB_MAX_ZIP_SIZE"` + MaxResponseSize int `json:"max_response_size" env:"PICONOMOUS_SKILLS_REGISTRIES_CLAWHUB_MAX_RESPONSE_SIZE"` } // MCPServerConfig defines configuration for a single MCP server @@ -874,7 +913,7 @@ type MCPServerConfig struct { // MCPConfig defines configuration for all MCP servers type MCPConfig struct { - ToolConfig ` envPrefix:"PICOCLAW_TOOLS_MCP_"` + ToolConfig ` envPrefix:"PICONOMOUS_TOOLS_MCP_"` Discovery ToolDiscoveryConfig ` json:"discovery"` // Servers is a map of server name to server configuration Servers map[string]MCPServerConfig `json:"servers,omitempty"` @@ -913,7 +952,7 @@ func LoadConfig(path string) (*Config, error) { for _, m := range cfg.ModelList { if m.APIKey != "" && !strings.HasPrefix(m.APIKey, "enc://") && !strings.HasPrefix(m.APIKey, "file://") { fmt.Fprintf(os.Stderr, - "picoclaw: warning: model %q has a plaintext api_key; call SaveConfig to encrypt it\n", + "piconomous: warning: model %q has a plaintext api_key; call SaveConfig to encrypt it\n", m.ModelName) } } diff --git a/pkg/config/config_test.go b/pkg/config/config_test.go index 588c04645..b3d4514fd 100644 --- a/pkg/config/config_test.go +++ b/pkg/config/config_test.go @@ -8,19 +8,19 @@ import ( "strings" "testing" - "github.com/sipeed/picoclaw/pkg/credential" + "github.com/sipeed/piconomous/pkg/credential" ) // mustSetupSSHKey generates a temporary Ed25519 SSH key in t.TempDir() and sets -// PICOCLAW_SSH_KEY_PATH to its path for the duration of the test. This is required +// PICONOMOUS_SSH_KEY_PATH to its path for the duration of the test. This is required // whenever a test exercises encryption/decryption via credential.Encrypt or SaveConfig. func mustSetupSSHKey(t *testing.T) { t.Helper() - keyPath := filepath.Join(t.TempDir(), "picoclaw_ed25519.key") + keyPath := filepath.Join(t.TempDir(), "piconomous_ed25519.key") if err := credential.GenerateSSHKey(keyPath); err != nil { t.Fatalf("mustSetupSSHKey: %v", err) } - t.Setenv("PICOCLAW_SSH_KEY_PATH", keyPath) + t.Setenv("PICONOMOUS_SSH_KEY_PATH", keyPath) } func TestAgentModelConfig_UnmarshalString(t *testing.T) { @@ -97,7 +97,7 @@ func TestAgentConfig_FullParse(t *testing.T) { jsonData := `{ "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "model": "glm-4.7", "max_tokens": 8192, "max_tool_iterations": 20 @@ -198,7 +198,7 @@ func TestConfig_BackwardCompat_NoAgentsList(t *testing.T) { jsonData := `{ "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "model": "glm-4.7", "max_tokens": 8192, "max_tool_iterations": 20 @@ -577,7 +577,7 @@ func TestDefaultConfig_DMScope(t *testing.T) { } func TestDefaultConfig_WorkspacePath_Default(t *testing.T) { - t.Setenv("PICOCLAW_HOME", "") + t.Setenv("PICONOMOUS_HOME", "") var fakeHome string if runtime.GOOS == "windows" { @@ -589,7 +589,7 @@ func TestDefaultConfig_WorkspacePath_Default(t *testing.T) { } cfg := DefaultConfig() - want := filepath.Join(fakeHome, ".picoclaw", "workspace") + want := filepath.Join(fakeHome, ".piconomous", "workspace") if cfg.Agents.Defaults.Workspace != want { t.Errorf("Default workspace path = %q, want %q", cfg.Agents.Defaults.Workspace, want) @@ -597,13 +597,13 @@ func TestDefaultConfig_WorkspacePath_Default(t *testing.T) { } func TestDefaultConfig_WorkspacePath_WithPicoclawHome(t *testing.T) { - t.Setenv("PICOCLAW_HOME", "/custom/picoclaw/home") + t.Setenv("PICONOMOUS_HOME", "/custom/piconomous/home") cfg := DefaultConfig() - want := filepath.Join("/custom/picoclaw/home", "workspace") + want := filepath.Join("/custom/piconomous/home", "workspace") if cfg.Agents.Defaults.Workspace != want { - t.Errorf("Workspace path with PICOCLAW_HOME = %q, want %q", cfg.Agents.Defaults.Workspace, want) + t.Errorf("Workspace path with PICONOMOUS_HOME = %q, want %q", cfg.Agents.Defaults.Workspace, want) } } @@ -734,8 +734,8 @@ func TestLoadConfig_WarnsForPlaintextAPIKey(t *testing.T) { t.Fatalf("setup: %v", err) } - t.Setenv("PICOCLAW_KEY_PASSPHRASE", "test-passphrase") - t.Setenv("PICOCLAW_SSH_KEY_PATH", "") + t.Setenv("PICONOMOUS_KEY_PASSPHRASE", "test-passphrase") + t.Setenv("PICONOMOUS_SSH_KEY_PATH", "") cfg, err := LoadConfig(cfgPath) if err != nil { @@ -758,7 +758,7 @@ func TestSaveConfig_EncryptsPlaintextAPIKey(t *testing.T) { dir := t.TempDir() cfgPath := filepath.Join(dir, "config.json") - t.Setenv("PICOCLAW_KEY_PASSPHRASE", "test-passphrase") + t.Setenv("PICONOMOUS_KEY_PASSPHRASE", "test-passphrase") mustSetupSSHKey(t) cfg := DefaultConfig() @@ -789,7 +789,7 @@ func TestSaveConfig_EncryptsPlaintextAPIKey(t *testing.T) { } // TestLoadConfig_NoSealWithoutPassphrase verifies that api_key values are left -// unchanged when PICOCLAW_KEY_PASSPHRASE is not set. +// unchanged when PICONOMOUS_KEY_PASSPHRASE is not set. func TestLoadConfig_NoSealWithoutPassphrase(t *testing.T) { dir := t.TempDir() cfgPath := filepath.Join(dir, "config.json") @@ -798,8 +798,8 @@ func TestLoadConfig_NoSealWithoutPassphrase(t *testing.T) { t.Fatalf("setup: %v", err) } - t.Setenv("PICOCLAW_KEY_PASSPHRASE", "") - t.Setenv("PICOCLAW_SSH_KEY_PATH", "") + t.Setenv("PICONOMOUS_KEY_PASSPHRASE", "") + t.Setenv("PICONOMOUS_SSH_KEY_PATH", "") if _, err := LoadConfig(cfgPath); err != nil { t.Fatalf("LoadConfig: %v", err) @@ -825,8 +825,8 @@ func TestLoadConfig_FileRefNotSealed(t *testing.T) { t.Fatalf("setup: %v", err) } - t.Setenv("PICOCLAW_KEY_PASSPHRASE", "test-passphrase") - t.Setenv("PICOCLAW_SSH_KEY_PATH", "") + t.Setenv("PICONOMOUS_KEY_PASSPHRASE", "test-passphrase") + t.Setenv("PICONOMOUS_SSH_KEY_PATH", "") if _, err := LoadConfig(cfgPath); err != nil { t.Fatalf("LoadConfig: %v", err) @@ -847,7 +847,7 @@ func TestSaveConfig_MixedKeys(t *testing.T) { dir := t.TempDir() cfgPath := filepath.Join(dir, "config.json") - t.Setenv("PICOCLAW_KEY_PASSPHRASE", "test-passphrase") + t.Setenv("PICONOMOUS_KEY_PASSPHRASE", "test-passphrase") mustSetupSSHKey(t) // Pre-encrypt one key so we have a genuine enc:// value to put in the config. @@ -928,7 +928,7 @@ func TestSaveConfig_MixedKeys(t *testing.T) { } } -// TestLoadConfig_MixedKeys_NoPassphrase verifies that when PICOCLAW_KEY_PASSPHRASE +// TestLoadConfig_MixedKeys_NoPassphrase verifies that when PICONOMOUS_KEY_PASSPHRASE // is not set, enc:// entries cause LoadConfig to return an error, while plaintext // and file:// entries in the same config are not affected. func TestLoadConfig_MixedKeys_NoPassphrase(t *testing.T) { @@ -936,7 +936,7 @@ func TestLoadConfig_MixedKeys_NoPassphrase(t *testing.T) { cfgPath := filepath.Join(dir, "config.json") // First encrypt a key so we have a real enc:// value. - t.Setenv("PICOCLAW_KEY_PASSPHRASE", "test-passphrase") + t.Setenv("PICONOMOUS_KEY_PASSPHRASE", "test-passphrase") mustSetupSSHKey(t) if err := SaveConfig(cfgPath, &Config{ ModelList: []ModelConfig{ @@ -973,7 +973,7 @@ func TestLoadConfig_MixedKeys_NoPassphrase(t *testing.T) { } // Now clear the passphrase — LoadConfig must fail because enc:// cannot be decrypted. - t.Setenv("PICOCLAW_KEY_PASSPHRASE", "") + t.Setenv("PICONOMOUS_KEY_PASSPHRASE", "") _, err := LoadConfig(cfgPath) if err == nil { @@ -993,7 +993,7 @@ func TestSaveConfig_UsesPassphraseProvider(t *testing.T) { cfgPath := filepath.Join(dir, "config.json") // Ensure the env var is empty — passphrase must come from PassphraseProvider only. - t.Setenv("PICOCLAW_KEY_PASSPHRASE", "") + t.Setenv("PICONOMOUS_KEY_PASSPHRASE", "") mustSetupSSHKey(t) // Replace PassphraseProvider with an in-memory function (simulating SecureStore). @@ -1023,7 +1023,7 @@ func TestLoadConfig_UsesPassphraseProvider(t *testing.T) { cfgPath := filepath.Join(dir, "config.json") // Ensure the env var is empty throughout. - t.Setenv("PICOCLAW_KEY_PASSPHRASE", "") + t.Setenv("PICONOMOUS_KEY_PASSPHRASE", "") mustSetupSSHKey(t) const testPassphrase = "provider-passphrase" diff --git a/pkg/config/defaults.go b/pkg/config/defaults.go index 0d2141ae1..b96ac58ca 100644 --- a/pkg/config/defaults.go +++ b/pkg/config/defaults.go @@ -1,7 +1,7 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package config @@ -10,16 +10,16 @@ import ( "path/filepath" ) -// DefaultConfig returns the default configuration for PicoClaw. +// DefaultConfig returns the default configuration for Piconomous. func DefaultConfig() *Config { // Determine the base path for the workspace. - // Priority: $PICOCLAW_HOME > ~/.picoclaw + // Priority: $PICONOMOUS_HOME > ~/.piconomous var homePath string - if picoclawHome := os.Getenv(EnvHome); picoclawHome != "" { - homePath = picoclawHome + if piconomousHome := os.Getenv(EnvHome); piconomousHome != "" { + homePath = piconomousHome } else { userHome, _ := os.UserHomeDir() - homePath = filepath.Join(userHome, ".picoclaw") + homePath = filepath.Join(userHome, ".piconomous") } workspacePath := filepath.Join(homePath, "workspace") @@ -553,6 +553,12 @@ func DefaultConfig() *Config { Enabled: true, Interval: 30, }, + Autonomous: AutonomousConfig{ + Enabled: false, + IntervalMinutes: 5, + AllowSelfSchedule: true, + MaxGoals: 20, + }, Devices: DevicesConfig{ Enabled: false, MonitorUSB: true, diff --git a/pkg/config/envkeys.go b/pkg/config/envkeys.go index b04ff19f5..d25bd6fcb 100644 --- a/pkg/config/envkeys.go +++ b/pkg/config/envkeys.go @@ -1,37 +1,42 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package config -// Runtime environment variable keys for the picoclaw process. +// Runtime environment variable keys for the piconomous process. // These control the location of files and binaries at runtime and are read -// directly via os.Getenv / os.LookupEnv. All picoclaw-specific keys use the -// PICOCLAW_ prefix. Reference these constants instead of inline string +// directly via os.Getenv / os.LookupEnv. All piconomous-specific keys use the +// PICONOMOUS_ prefix. Reference these constants instead of inline string // literals to keep all supported knobs visible in one place and to prevent // typos. const ( - // EnvHome overrides the base directory for all picoclaw data + // EnvHome overrides the base directory for all piconomous data // (config, workspace, skills, auth store, …). - // Default: ~/.picoclaw - EnvHome = "PICOCLAW_HOME" + // Default: ~/.piconomous + EnvHome = "PICONOMOUS_HOME" // EnvConfig overrides the full path to the JSON config file. - // Default: $PICOCLAW_HOME/config.json - EnvConfig = "PICOCLAW_CONFIG" + // Default: $PICONOMOUS_HOME/config.json + EnvConfig = "PICONOMOUS_CONFIG" // EnvBuiltinSkills overrides the directory from which built-in // skills are loaded. // Default: /skills - EnvBuiltinSkills = "PICOCLAW_BUILTIN_SKILLS" + EnvBuiltinSkills = "PICONOMOUS_BUILTIN_SKILLS" - // EnvBinary overrides the path to the picoclaw executable. + // EnvBinary overrides the path to the piconomous executable. // Used by the web launcher when spawning the gateway subprocess. // Default: resolved from the same directory as the current executable. - EnvBinary = "PICOCLAW_BINARY" + EnvBinary = "PICONOMOUS_BINARY" // EnvGatewayHost overrides the host address for the gateway server. // Default: "127.0.0.1" - EnvGatewayHost = "PICOCLAW_GATEWAY_HOST" + EnvGatewayHost = "PICONOMOUS_GATEWAY_HOST" + + // EnvAutonomousEnabled enables fully autonomous goal-driven operation. + // When set to "true", the agent proactively pursues goals without human prompting. + // Default: "false" + EnvAutonomousEnabled = "PICONOMOUS_AUTONOMOUS_ENABLED" ) diff --git a/pkg/config/migration.go b/pkg/config/migration.go index 832d8bf17..835e51708 100644 --- a/pkg/config/migration.go +++ b/pkg/config/migration.go @@ -1,7 +1,7 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package config diff --git a/pkg/config/migration_test.go b/pkg/config/migration_test.go index bea5b9034..461b68a8c 100644 --- a/pkg/config/migration_test.go +++ b/pkg/config/migration_test.go @@ -1,7 +1,7 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package config diff --git a/pkg/config/model_config_test.go b/pkg/config/model_config_test.go index 9bc600ed9..9c7b2e49d 100644 --- a/pkg/config/model_config_test.go +++ b/pkg/config/model_config_test.go @@ -1,7 +1,7 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package config @@ -216,7 +216,7 @@ func TestFullConfig_JSON_BackwardCompat(t *testing.T) { oldFormat := `{ "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "model": "gpt4", "max_tokens": 4096 } @@ -233,7 +233,7 @@ func TestFullConfig_JSON_BackwardCompat(t *testing.T) { newFormat := `{ "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.piconomous/workspace", "model_name": "gpt4", "max_tokens": 4096 } diff --git a/pkg/config/version.go b/pkg/config/version.go index b65d3cf33..dd59c253d 100644 --- a/pkg/config/version.go +++ b/pkg/config/version.go @@ -8,10 +8,10 @@ import ( // Build-time variables injected via ldflags during build process. // These are set by the Makefile or .goreleaser.yaml using the -X flag: // -// -X github.com/sipeed/picoclaw/pkg/config.Version= -// -X github.com/sipeed/picoclaw/pkg/config.GitCommit= -// -X github.com/sipeed/picoclaw/pkg/config.BuildTime= -// -X github.com/sipeed/picoclaw/pkg/config.GoVersion= +// -X github.com/sipeed/piconomous/pkg/config.Version= +// -X github.com/sipeed/piconomous/pkg/config.GitCommit= +// -X github.com/sipeed/piconomous/pkg/config.BuildTime= +// -X github.com/sipeed/piconomous/pkg/config.GoVersion= var ( Version = "dev" // Default value when not built with ldflags GitCommit string // Git commit SHA (short) diff --git a/pkg/credential/credential.go b/pkg/credential/credential.go index b65c19446..f083484a7 100644 --- a/pkg/credential/credential.go +++ b/pkg/credential/credential.go @@ -8,7 +8,7 @@ // // - Plaintext: "sk-abc123" → returned as-is // - File ref: "file://filename.key" → content read from configDir/filename.key -// - Encrypted: "enc://" → AES-256-GCM decrypt via PICOCLAW_KEY_PASSPHRASE +// - Encrypted: "enc://" → AES-256-GCM decrypt via PICONOMOUS_KEY_PASSPHRASE // - Empty: "" → returned as-is (auth_method=oauth etc.) // // Encryption uses AES-256-GCM with HKDF-SHA256 key derivation (< 1ms, safe for embedded Linux). @@ -20,8 +20,8 @@ // SSH key path resolution priority: // // 1. sshKeyPath argument to Encrypt (explicit) -// 2. PICOCLAW_SSH_KEY_PATH env var -// 3. ~/.ssh/picoclaw_ed25519.key (os.UserHomeDir is cross-platform) +// 2. PICONOMOUS_SSH_KEY_PATH env var +// 3. ~/.ssh/piconomous_ed25519.key (os.UserHomeDir is cross-platform) package credential import ( @@ -42,10 +42,10 @@ import ( // PassphraseEnvVar is the environment variable that holds the encryption passphrase. // Other packages (e.g. config) reference this constant to avoid duplicating the string. -const PassphraseEnvVar = "PICOCLAW_KEY_PASSPHRASE" +const PassphraseEnvVar = "PICONOMOUS_KEY_PASSPHRASE" // PassphraseProvider is the function used to retrieve the passphrase for enc:// -// credential decryption. It defaults to reading PICOCLAW_KEY_PASSPHRASE from the +// credential decryption. It defaults to reading PICONOMOUS_KEY_PASSPHRASE from the // process environment. Replace it at startup to use a different source, such as // an in-memory SecureStore, so that all LoadConfig() calls everywhere share the // same passphrase source without needing os.Environ. @@ -68,16 +68,16 @@ var ErrDecryptionFailed = errors.New("credential: enc:// decryption failed (wron // SSHKeyPathEnvVar is the environment variable that specifies the path to the // SSH private key used for enc:// credential encryption and decryption. -const SSHKeyPathEnvVar = "PICOCLAW_SSH_KEY_PATH" +const SSHKeyPathEnvVar = "PICONOMOUS_SSH_KEY_PATH" -// picoclawHome is a package-local copy of config.EnvHome. It is kept here to +// piconomousHome is a package-local copy of config.EnvHome. It is kept here to // avoid a circular import between pkg/credential and pkg/config. -const picoclawHome = "PICOCLAW_HOME" +const piconomousHome = "PICONOMOUS_HOME" const ( fileScheme = "file://" encScheme = "enc://" - hkdfInfo = "picoclaw-credential-v1" + hkdfInfo = "piconomous-credential-v1" saltLen = 16 nonceLen = 12 keyLen = 32 @@ -196,9 +196,9 @@ func resolveEncrypted(raw string) (string, error) { // Encrypt encrypts plaintext and returns an enc:// credential string. // -// passphrase is required (PICOCLAW_KEY_PASSPHRASE value). +// passphrase is required (PICONOMOUS_KEY_PASSPHRASE value). // sshKeyPath is the SSH private key file to use; pass "" to auto-detect via -// PICOCLAW_SSH_KEY_PATH env var or ~/.ssh/picoclaw_ed25519.key. +// PICONOMOUS_SSH_KEY_PATH env var or ~/.ssh/piconomous_ed25519.key. // An SSH private key must be resolvable or Encrypt returns an error. func Encrypt(passphrase, sshKeyPath, plaintext string) (string, error) { if passphrase == "" { @@ -245,8 +245,8 @@ func isWithinDir(path, dir string) bool { } // allowedSSHKeyPath reports whether path is in a permitted location for SSH key files: -// - exact match with PICOCLAW_SSH_KEY_PATH env var -// - within the PICOCLAW_HOME env var directory +// - exact match with PICONOMOUS_SSH_KEY_PATH env var +// - within the PICONOMOUS_HOME env var directory // - within ~/.ssh/ func allowedSSHKeyPath(path string) bool { if path == "" { @@ -254,15 +254,15 @@ func allowedSSHKeyPath(path string) bool { } clean := filepath.Clean(path) - // Exact match with PICOCLAW_SSH_KEY_PATH. + // Exact match with PICONOMOUS_SSH_KEY_PATH. if envPath, ok := os.LookupEnv(SSHKeyPathEnvVar); ok && envPath != "" { if clean == filepath.Clean(envPath) { return true } } - // Within PICOCLAW_HOME. - if picoHome := os.Getenv(picoclawHome); picoHome != "" { + // Within PICONOMOUS_HOME. + if picoHome := os.Getenv(piconomousHome); picoHome != "" { if isWithinDir(clean, picoHome) { return true } @@ -281,17 +281,17 @@ func allowedSSHKeyPath(path string) bool { // deriveKey derives a 32-byte AES-256 key from passphrase and SSH private key. // // ikm = HMAC-SHA256(key=SHA256(sshKeyBytes), msg=passphrase) -// Final key: HKDF-SHA256(ikm, salt, info="picoclaw-credential-v1", 32 bytes) +// Final key: HKDF-SHA256(ikm, salt, info="piconomous-credential-v1", 32 bytes) // sshKeyPath must be non-empty; returns an error otherwise. func deriveKey(passphrase, sshKeyPath string, salt []byte) ([]byte, error) { if sshKeyPath == "" { return nil, fmt.Errorf( "credential: SSH private key is required but not found" + - " (set PICOCLAW_SSH_KEY_PATH or place key at ~/.ssh/picoclaw_ed25519.key)") + " (set PICONOMOUS_SSH_KEY_PATH or place key at ~/.ssh/piconomous_ed25519.key)") } if !allowedSSHKeyPath(sshKeyPath) { return nil, fmt.Errorf( - "credential: SSH key path %q is not in an allowed location (PICOCLAW_SSH_KEY_PATH, PICOCLAW_HOME, or ~/.ssh/)", + "credential: SSH key path %q is not in an allowed location (PICONOMOUS_SSH_KEY_PATH, PICONOMOUS_HOME, or ~/.ssh/)", sshKeyPath, ) } @@ -315,8 +315,8 @@ func deriveKey(passphrase, sshKeyPath string, salt []byte) ([]byte, error) { // // Priority: // 1. override (non-empty explicit argument) -// 2. PICOCLAW_SSH_KEY_PATH env var -// 3. ~/.ssh/picoclaw_ed25519.key (auto-detection) +// 2. PICONOMOUS_SSH_KEY_PATH env var +// 3. ~/.ssh/piconomous_ed25519.key (auto-detection) // // Returns "" when no key is found; deriveKey will return an error in that case. func pickSSHKeyPath(override string) string { @@ -329,7 +329,7 @@ func pickSSHKeyPath(override string) string { return findDefaultSSHKey() } -// findDefaultSSHKey returns the picoclaw-specific SSH key path if it exists. +// findDefaultSSHKey returns the piconomous-specific SSH key path if it exists. func findDefaultSSHKey() string { p, err := DefaultSSHKeyPath() if err != nil { diff --git a/pkg/credential/credential_test.go b/pkg/credential/credential_test.go index 138af3134..f2bcfc940 100644 --- a/pkg/credential/credential_test.go +++ b/pkg/credential/credential_test.go @@ -5,7 +5,7 @@ import ( "path/filepath" "testing" - "github.com/sipeed/picoclaw/pkg/credential" + "github.com/sipeed/piconomous/pkg/credential" ) func TestResolve_PlainKey(t *testing.T) { @@ -61,7 +61,7 @@ func TestResolve_FileKey_Empty(t *testing.T) { // TestResolve_EncKey_RoundTrip tests basic encryption/decryption round-trip with an SSH key. func TestResolve_EncKey_RoundTrip(t *testing.T) { dir := t.TempDir() - sshKeyPath := filepath.Join(dir, "picoclaw_ed25519.key") + sshKeyPath := filepath.Join(dir, "piconomous_ed25519.key") if err := os.WriteFile(sshKeyPath, []byte("fake-ssh-key-material\n"), 0o600); err != nil { t.Fatalf("setup: %v", err) } @@ -69,14 +69,14 @@ func TestResolve_EncKey_RoundTrip(t *testing.T) { const passphrase = "test-passphrase-32bytes-long-ok!" const plaintext = "sk-encrypted-secret" - t.Setenv("PICOCLAW_SSH_KEY_PATH", sshKeyPath) + t.Setenv("PICONOMOUS_SSH_KEY_PATH", sshKeyPath) enc, err := credential.Encrypt(passphrase, "", plaintext) if err != nil { t.Fatalf("Encrypt: %v", err) } - t.Setenv("PICOCLAW_KEY_PASSPHRASE", passphrase) + t.Setenv("PICONOMOUS_KEY_PASSPHRASE", passphrase) r := credential.NewResolver(t.TempDir()) got, err := r.Resolve(enc) @@ -91,7 +91,7 @@ func TestResolve_EncKey_RoundTrip(t *testing.T) { // TestResolve_EncKey_WithSSHKey tests that the SSH key file is incorporated into key derivation. func TestResolve_EncKey_WithSSHKey(t *testing.T) { dir := t.TempDir() - sshKeyPath := filepath.Join(dir, "picoclaw_ed25519.key") + sshKeyPath := filepath.Join(dir, "piconomous_ed25519.key") if err := os.WriteFile(sshKeyPath, []byte("fake-ssh-private-key-material\n"), 0o600); err != nil { t.Fatalf("setup: %v", err) } @@ -99,9 +99,9 @@ func TestResolve_EncKey_WithSSHKey(t *testing.T) { const passphrase = "test-passphrase" const plaintext = "sk-ssh-protected-secret" - // Set PICOCLAW_SSH_KEY_PATH before Encrypt so the path passes allowedSSHKeyPath validation. - t.Setenv("PICOCLAW_KEY_PASSPHRASE", passphrase) - t.Setenv("PICOCLAW_SSH_KEY_PATH", sshKeyPath) + // Set PICONOMOUS_SSH_KEY_PATH before Encrypt so the path passes allowedSSHKeyPath validation. + t.Setenv("PICONOMOUS_KEY_PASSPHRASE", passphrase) + t.Setenv("PICONOMOUS_SSH_KEY_PATH", sshKeyPath) enc, err := credential.Encrypt(passphrase, sshKeyPath, plaintext) if err != nil { @@ -120,29 +120,29 @@ func TestResolve_EncKey_WithSSHKey(t *testing.T) { func TestResolve_EncKey_NoPassphrase(t *testing.T) { dir := t.TempDir() - sshKeyPath := filepath.Join(dir, "picoclaw_ed25519.key") + sshKeyPath := filepath.Join(dir, "piconomous_ed25519.key") if err := os.WriteFile(sshKeyPath, []byte("fake-ssh-key\n"), 0o600); err != nil { t.Fatalf("setup: %v", err) } - t.Setenv("PICOCLAW_SSH_KEY_PATH", sshKeyPath) + t.Setenv("PICONOMOUS_SSH_KEY_PATH", sshKeyPath) enc, err := credential.Encrypt("some-passphrase", "", "sk-secret") if err != nil { t.Fatalf("Encrypt: %v", err) } - t.Setenv("PICOCLAW_KEY_PASSPHRASE", "") + t.Setenv("PICONOMOUS_KEY_PASSPHRASE", "") r := credential.NewResolver(t.TempDir()) _, err = r.Resolve(enc) if err == nil { - t.Fatal("expected error when PICOCLAW_KEY_PASSPHRASE is unset, got nil") + t.Fatal("expected error when PICONOMOUS_KEY_PASSPHRASE is unset, got nil") } } func TestResolve_EncKey_BadCiphertext(t *testing.T) { - t.Setenv("PICOCLAW_KEY_PASSPHRASE", "some-passphrase") - t.Setenv("PICOCLAW_SSH_KEY_PATH", "") + t.Setenv("PICONOMOUS_KEY_PASSPHRASE", "some-passphrase") + t.Setenv("PICONOMOUS_SSH_KEY_PATH", "") r := credential.NewResolver(t.TempDir()) _, err := r.Resolve("enc://!!not-valid-base64!!") @@ -152,8 +152,8 @@ func TestResolve_EncKey_BadCiphertext(t *testing.T) { } func TestResolve_EncKey_PayloadTooShort(t *testing.T) { - t.Setenv("PICOCLAW_KEY_PASSPHRASE", "some-passphrase") - t.Setenv("PICOCLAW_SSH_KEY_PATH", "") + t.Setenv("PICONOMOUS_KEY_PASSPHRASE", "some-passphrase") + t.Setenv("PICONOMOUS_SSH_KEY_PATH", "") // Valid base64 but fewer bytes than salt(16)+nonce(12)+1 minimum. import64 := "dG9vc2hvcnQ=" // "tooshort" = 8 bytes @@ -166,18 +166,18 @@ func TestResolve_EncKey_PayloadTooShort(t *testing.T) { func TestResolve_EncKey_WrongPassphrase(t *testing.T) { dir := t.TempDir() - sshKeyPath := filepath.Join(dir, "picoclaw_ed25519.key") + sshKeyPath := filepath.Join(dir, "piconomous_ed25519.key") if err := os.WriteFile(sshKeyPath, []byte("fake-ssh-key\n"), 0o600); err != nil { t.Fatalf("setup: %v", err) } - t.Setenv("PICOCLAW_SSH_KEY_PATH", sshKeyPath) + t.Setenv("PICONOMOUS_SSH_KEY_PATH", sshKeyPath) enc, err := credential.Encrypt("correct-passphrase", "", "sk-secret") if err != nil { t.Fatalf("Encrypt: %v", err) } - t.Setenv("PICOCLAW_KEY_PASSPHRASE", "wrong-passphrase") + t.Setenv("PICONOMOUS_KEY_PASSPHRASE", "wrong-passphrase") r := credential.NewResolver(t.TempDir()) _, err = r.Resolve(enc) @@ -196,13 +196,13 @@ func TestEncrypt_EmptyPassphrase(t *testing.T) { func TestDeriveKey_SSHKeyNotFound(t *testing.T) { // Encrypt with a real SSH key path, then try to decrypt with a missing path. dir := t.TempDir() - sshKeyPath := filepath.Join(dir, "picoclaw_ed25519.key") + sshKeyPath := filepath.Join(dir, "piconomous_ed25519.key") if err := os.WriteFile(sshKeyPath, []byte("fake-key\n"), 0o600); err != nil { t.Fatalf("setup: %v", err) } // Register the real key path so allowedSSHKeyPath validation passes for Encrypt. - t.Setenv("PICOCLAW_SSH_KEY_PATH", sshKeyPath) + t.Setenv("PICONOMOUS_SSH_KEY_PATH", sshKeyPath) enc, err := credential.Encrypt("passphrase", sshKeyPath, "sk-secret") if err != nil { @@ -211,8 +211,8 @@ func TestDeriveKey_SSHKeyNotFound(t *testing.T) { // Point to a non-existent SSH key so deriveKey's ReadFile fails. // The path is still under the same dir, so allowedSSHKeyPath passes (exact env match). - t.Setenv("PICOCLAW_KEY_PASSPHRASE", "passphrase") - t.Setenv("PICOCLAW_SSH_KEY_PATH", filepath.Join(dir, "nonexistent_key")) + t.Setenv("PICONOMOUS_KEY_PASSPHRASE", "passphrase") + t.Setenv("PICONOMOUS_SSH_KEY_PATH", filepath.Join(dir, "nonexistent_key")) r := credential.NewResolver(t.TempDir()) _, err = r.Resolve(enc) @@ -264,17 +264,17 @@ func TestResolve_FileRef_withinConfigDir(t *testing.T) { } // TestEncrypt_SSHKeyOutsideAllowedDirs verifies that Encrypt rejects SSH key paths -// that are not under PICOCLAW_SSH_KEY_PATH, PICOCLAW_HOME, or ~/.ssh/. +// that are not under PICONOMOUS_SSH_KEY_PATH, PICONOMOUS_HOME, or ~/.ssh/. func TestEncrypt_SSHKeyOutsideAllowedDirs(t *testing.T) { dir := t.TempDir() - sshKeyPath := filepath.Join(dir, "picoclaw_ed25519.key") + sshKeyPath := filepath.Join(dir, "piconomous_ed25519.key") if err := os.WriteFile(sshKeyPath, []byte("fake-key\n"), 0o600); err != nil { t.Fatalf("setup: %v", err) } // Make sure none of the allowed env vars point here. - t.Setenv("PICOCLAW_SSH_KEY_PATH", "") - t.Setenv("PICOCLAW_HOME", "") + t.Setenv("PICONOMOUS_SSH_KEY_PATH", "") + t.Setenv("PICONOMOUS_HOME", "") _, err := credential.Encrypt("passphrase", sshKeyPath, "sk-secret") if err == nil { diff --git a/pkg/credential/keygen.go b/pkg/credential/keygen.go index c57564a76..67d761a44 100644 --- a/pkg/credential/keygen.go +++ b/pkg/credential/keygen.go @@ -11,14 +11,14 @@ import ( "golang.org/x/crypto/ssh" ) -// DefaultSSHKeyPath returns the canonical path for the picoclaw-specific SSH key. -// The path is always ~/.ssh/picoclaw_ed25519.key (os.UserHomeDir is cross-platform). +// DefaultSSHKeyPath returns the canonical path for the piconomous-specific SSH key. +// The path is always ~/.ssh/piconomous_ed25519.key (os.UserHomeDir is cross-platform). func DefaultSSHKeyPath() (string, error) { home, err := os.UserHomeDir() if err != nil { return "", fmt.Errorf("credential: cannot determine home directory: %w", err) } - return filepath.Join(home, ".ssh", "picoclaw_ed25519.key"), nil + return filepath.Join(home, ".ssh", "piconomous_ed25519.key"), nil } // GenerateSSHKey generates an Ed25519 SSH key pair and writes the private key diff --git a/pkg/credential/keygen_test.go b/pkg/credential/keygen_test.go index 1e21ea0b9..fc416f8a6 100644 --- a/pkg/credential/keygen_test.go +++ b/pkg/credential/keygen_test.go @@ -103,7 +103,7 @@ func TestGenerateSSHKey_OverwritesExisting(t *testing.T) { func TestGenerateSSHKey_CreatesDirectory(t *testing.T) { dir := t.TempDir() // Nested directory that does not yet exist. - keyPath := filepath.Join(dir, "subdir", ".ssh", "picoclaw_ed25519.key") + keyPath := filepath.Join(dir, "subdir", ".ssh", "piconomous_ed25519.key") if err := GenerateSSHKey(keyPath); err != nil { t.Fatalf("GenerateSSHKey() error = %v", err) diff --git a/pkg/cron/service.go b/pkg/cron/service.go index 77a413133..a96d63773 100644 --- a/pkg/cron/service.go +++ b/pkg/cron/service.go @@ -12,7 +12,7 @@ import ( "github.com/adhocore/gronx" - "github.com/sipeed/picoclaw/pkg/fileutil" + "github.com/sipeed/piconomous/pkg/fileutil" ) type CronSchedule struct { diff --git a/pkg/devices/service.go b/pkg/devices/service.go index 1bafe6085..b8687d176 100644 --- a/pkg/devices/service.go +++ b/pkg/devices/service.go @@ -6,12 +6,12 @@ import ( "sync" "time" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/constants" - "github.com/sipeed/picoclaw/pkg/devices/events" - "github.com/sipeed/picoclaw/pkg/devices/sources" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/state" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/constants" + "github.com/sipeed/piconomous/pkg/devices/events" + "github.com/sipeed/piconomous/pkg/devices/sources" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/state" ) type Service struct { diff --git a/pkg/devices/source.go b/pkg/devices/source.go index cbf0a7d88..ee0896cc7 100644 --- a/pkg/devices/source.go +++ b/pkg/devices/source.go @@ -1,5 +1,5 @@ package devices -import "github.com/sipeed/picoclaw/pkg/devices/events" +import "github.com/sipeed/piconomous/pkg/devices/events" type EventSource = events.EventSource diff --git a/pkg/devices/sources/usb_linux.go b/pkg/devices/sources/usb_linux.go index 2bb38941f..bc7fa00fe 100644 --- a/pkg/devices/sources/usb_linux.go +++ b/pkg/devices/sources/usb_linux.go @@ -10,8 +10,8 @@ import ( "strings" "sync" - "github.com/sipeed/picoclaw/pkg/devices/events" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/piconomous/pkg/devices/events" + "github.com/sipeed/piconomous/pkg/logger" ) var usbClassToCapability = map[string]string{ diff --git a/pkg/devices/sources/usb_stub.go b/pkg/devices/sources/usb_stub.go index f08c2d406..df70b78ca 100644 --- a/pkg/devices/sources/usb_stub.go +++ b/pkg/devices/sources/usb_stub.go @@ -5,7 +5,7 @@ package sources import ( "context" - "github.com/sipeed/picoclaw/pkg/devices/events" + "github.com/sipeed/piconomous/pkg/devices/events" ) type USBMonitor struct{} diff --git a/pkg/fileutil/file.go b/pkg/fileutil/file.go index 7ca872374..e418d17fc 100644 --- a/pkg/fileutil/file.go +++ b/pkg/fileutil/file.go @@ -1,8 +1,8 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // Inspired by and based on nanobot: https://github.com/HKUDS/nanobot // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors // Package fileutil provides file manipulation utilities. package fileutil diff --git a/pkg/gateway/gateway.go b/pkg/gateway/gateway.go index 9a2706b3b..e4be811ce 100644 --- a/pkg/gateway/gateway.go +++ b/pkg/gateway/gateway.go @@ -11,35 +11,35 @@ import ( "syscall" "time" - "github.com/sipeed/picoclaw/pkg/agent" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - _ "github.com/sipeed/picoclaw/pkg/channels/dingtalk" - _ "github.com/sipeed/picoclaw/pkg/channels/discord" - _ "github.com/sipeed/picoclaw/pkg/channels/feishu" - _ "github.com/sipeed/picoclaw/pkg/channels/irc" - _ "github.com/sipeed/picoclaw/pkg/channels/line" - _ "github.com/sipeed/picoclaw/pkg/channels/maixcam" - _ "github.com/sipeed/picoclaw/pkg/channels/matrix" - _ "github.com/sipeed/picoclaw/pkg/channels/onebot" - _ "github.com/sipeed/picoclaw/pkg/channels/pico" - _ "github.com/sipeed/picoclaw/pkg/channels/qq" - _ "github.com/sipeed/picoclaw/pkg/channels/slack" - _ "github.com/sipeed/picoclaw/pkg/channels/telegram" - _ "github.com/sipeed/picoclaw/pkg/channels/wecom" - _ "github.com/sipeed/picoclaw/pkg/channels/whatsapp" - _ "github.com/sipeed/picoclaw/pkg/channels/whatsapp_native" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/cron" - "github.com/sipeed/picoclaw/pkg/devices" - "github.com/sipeed/picoclaw/pkg/health" - "github.com/sipeed/picoclaw/pkg/heartbeat" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/media" - "github.com/sipeed/picoclaw/pkg/providers" - "github.com/sipeed/picoclaw/pkg/state" - "github.com/sipeed/picoclaw/pkg/tools" - "github.com/sipeed/picoclaw/pkg/voice" + "github.com/sipeed/piconomous/pkg/agent" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/channels" + _ "github.com/sipeed/piconomous/pkg/channels/dingtalk" + _ "github.com/sipeed/piconomous/pkg/channels/discord" + _ "github.com/sipeed/piconomous/pkg/channels/feishu" + _ "github.com/sipeed/piconomous/pkg/channels/irc" + _ "github.com/sipeed/piconomous/pkg/channels/line" + _ "github.com/sipeed/piconomous/pkg/channels/maixcam" + _ "github.com/sipeed/piconomous/pkg/channels/matrix" + _ "github.com/sipeed/piconomous/pkg/channels/onebot" + _ "github.com/sipeed/piconomous/pkg/channels/pico" + _ "github.com/sipeed/piconomous/pkg/channels/qq" + _ "github.com/sipeed/piconomous/pkg/channels/slack" + _ "github.com/sipeed/piconomous/pkg/channels/telegram" + _ "github.com/sipeed/piconomous/pkg/channels/wecom" + _ "github.com/sipeed/piconomous/pkg/channels/whatsapp" + _ "github.com/sipeed/piconomous/pkg/channels/whatsapp_native" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/cron" + "github.com/sipeed/piconomous/pkg/devices" + "github.com/sipeed/piconomous/pkg/health" + "github.com/sipeed/piconomous/pkg/heartbeat" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/media" + "github.com/sipeed/piconomous/pkg/providers" + "github.com/sipeed/piconomous/pkg/state" + "github.com/sipeed/piconomous/pkg/tools" + "github.com/sipeed/piconomous/pkg/voice" ) const ( @@ -251,17 +251,32 @@ func setupAndStartServices( } fmt.Println("✓ Cron service started") + // When autonomous mode is enabled, use its interval (default 5 min) so the + // goal-pursuit loop fires frequently enough to be useful. + hbInterval := cfg.Heartbeat.Interval + hbEnabled := cfg.Heartbeat.Enabled + if cfg.Autonomous.Enabled { + hbEnabled = true + if cfg.Autonomous.GetIntervalMinutes() < hbInterval || hbInterval == 0 { + hbInterval = cfg.Autonomous.GetIntervalMinutes() + } + } runningServices.HeartbeatService = heartbeat.NewHeartbeatService( cfg.WorkspacePath(), - cfg.Heartbeat.Interval, - cfg.Heartbeat.Enabled, + hbInterval, + hbEnabled, ) runningServices.HeartbeatService.SetBus(msgBus) runningServices.HeartbeatService.SetHandler(createHeartbeatHandler(agentLoop)) + runningServices.HeartbeatService.SetAutonomous(cfg.Autonomous.Enabled) if err = runningServices.HeartbeatService.Start(); err != nil { return nil, fmt.Errorf("error starting heartbeat service: %w", err) } - fmt.Println("✓ Heartbeat service started") + if cfg.Autonomous.Enabled { + fmt.Println("✓ Heartbeat service started (autonomous mode, interval:", hbInterval, "min)") + } else { + fmt.Println("✓ Heartbeat service started") + } runningServices.MediaStore = media.NewFileMediaStoreWithCleanup(media.MediaCleanerConfig{ Enabled: cfg.Tools.MediaCleanup.Enabled, @@ -453,13 +468,22 @@ func restartServices( } fmt.Println(" ✓ Cron service restarted") + hbIntervalReload := cfg.Heartbeat.Interval + hbEnabledReload := cfg.Heartbeat.Enabled + if cfg.Autonomous.Enabled { + hbEnabledReload = true + if cfg.Autonomous.GetIntervalMinutes() < hbIntervalReload || hbIntervalReload == 0 { + hbIntervalReload = cfg.Autonomous.GetIntervalMinutes() + } + } runningServices.HeartbeatService = heartbeat.NewHeartbeatService( cfg.WorkspacePath(), - cfg.Heartbeat.Interval, - cfg.Heartbeat.Enabled, + hbIntervalReload, + hbEnabledReload, ) runningServices.HeartbeatService.SetBus(msgBus) runningServices.HeartbeatService.SetHandler(createHeartbeatHandler(al)) + runningServices.HeartbeatService.SetAutonomous(cfg.Autonomous.Enabled) if err = runningServices.HeartbeatService.Start(); err != nil { return fmt.Errorf("error restarting heartbeat service: %w", err) } diff --git a/pkg/heartbeat/service.go b/pkg/heartbeat/service.go index 09c93fc6b..ee7ceb354 100644 --- a/pkg/heartbeat/service.go +++ b/pkg/heartbeat/service.go @@ -1,8 +1,8 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // Inspired by and based on nanobot: https://github.com/HKUDS/nanobot // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package heartbeat @@ -15,12 +15,12 @@ import ( "sync" "time" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/constants" - "github.com/sipeed/picoclaw/pkg/fileutil" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/state" - "github.com/sipeed/picoclaw/pkg/tools" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/constants" + "github.com/sipeed/piconomous/pkg/fileutil" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/state" + "github.com/sipeed/piconomous/pkg/tools" ) const ( @@ -35,14 +35,15 @@ type HeartbeatHandler func(prompt, channel, chatID string) *tools.ToolResult // HeartbeatService manages periodic heartbeat checks type HeartbeatService struct { - workspace string - bus *bus.MessageBus - state *state.Manager - handler HeartbeatHandler - interval time.Duration - enabled bool - mu sync.RWMutex - stopChan chan struct{} + workspace string + bus *bus.MessageBus + state *state.Manager + handler HeartbeatHandler + interval time.Duration + enabled bool + autonomousEnabled bool // when true, heartbeat drives goal-pursuit loop + mu sync.RWMutex + stopChan chan struct{} } // NewHeartbeatService creates a new heartbeat service @@ -78,6 +79,16 @@ func (hs *HeartbeatService) SetHandler(handler HeartbeatHandler) { hs.handler = handler } +// SetAutonomous activates the fully autonomous goal-driven operating mode. +// When enabled, each heartbeat cycle reads GOALS.md and builds a richer prompt +// that instructs the agent to make concrete progress toward its active goals, +// create follow-up cron tasks for itself, and write new goals as it discovers work. +func (hs *HeartbeatService) SetAutonomous(enabled bool) { + hs.mu.Lock() + defer hs.mu.Unlock() + hs.autonomousEnabled = enabled +} + // Start begins the heartbeat service func (hs *HeartbeatService) Start() error { hs.mu.Lock() @@ -217,26 +228,38 @@ func (hs *HeartbeatService) executeHeartbeat() { hs.logInfof("Heartbeat completed: %s", result.ForLLM) } -// buildPrompt builds the heartbeat prompt from HEARTBEAT.md +// buildPrompt builds the heartbeat prompt from HEARTBEAT.md and optionally GOALS.md. +// When autonomous mode is enabled, a richer goal-pursuit prompt is included. func (hs *HeartbeatService) buildPrompt() string { - heartbeatPath := filepath.Join(hs.workspace, "HEARTBEAT.md") + hs.mu.RLock() + autonomous := hs.autonomousEnabled + hs.mu.RUnlock() + heartbeatPath := filepath.Join(hs.workspace, "HEARTBEAT.md") data, err := os.ReadFile(heartbeatPath) if err != nil { if os.IsNotExist(err) { hs.createDefaultHeartbeatTemplate() + } else { + hs.logErrorf("Error reading HEARTBEAT.md: %v", err) + } + // In autonomous mode, still produce a prompt even without HEARTBEAT.md + if !autonomous { return "" } - hs.logErrorf("Error reading HEARTBEAT.md: %v", err) - return "" + data = nil + } + + now := time.Now().Format("2006-01-02 15:04:05") + + if autonomous { + return hs.buildAutonomousPrompt(now, string(data)) } content := string(data) if len(content) == 0 { return "" } - - now := time.Now().Format("2006-01-02 15:04:05") return fmt.Sprintf(`# Heartbeat Check Current time: %s @@ -249,6 +272,112 @@ If there is nothing that requires attention, respond ONLY with: HEARTBEAT_OK `, now, content) } +// buildAutonomousPrompt constructs a goal-driven autonomous operation prompt. +// It includes active goals from GOALS.md so the agent can make measurable progress +// toward them, self-schedule next steps, and update goal status. +func (hs *HeartbeatService) buildAutonomousPrompt(now, heartbeatContent string) string { + goalsPath := filepath.Join(hs.workspace, "GOALS.md") + goalsData, err := os.ReadFile(goalsPath) + if err != nil { + if os.IsNotExist(err) { + hs.createDefaultGoalsTemplate() + } else { + hs.logErrorf("Error reading GOALS.md: %v", err) + } + } + goalsContent := strings.TrimSpace(string(goalsData)) + heartbeatSection := strings.TrimSpace(heartbeatContent) + + var extras string + if heartbeatSection != "" { + extras = fmt.Sprintf("\n## Periodic Tasks (HEARTBEAT.md)\n\n%s\n", heartbeatSection) + } + if goalsContent == "" { + goalsContent = "*No active goals. Use the `goal` tool with action='set' to define goals.*" + } + + return fmt.Sprintf(`# Autonomous Operation Cycle + +Current time: %s + +You are operating in **fully autonomous mode**. No human is present — act independently and continuously. + +## Your Active Goals (GOALS.md) + +%s +%s +## Autonomous Operating Instructions + +You are a fully autonomous software agent. Follow the complete development lifecycle without waiting for human input: + +### Every Cycle — Do ALL of the following: + +1. **Review active goals**: Pick the highest-priority active goal. Determine the single most impactful action you can take toward it RIGHT NOW. + +2. **Execute immediately**: Use available tools to make concrete, measurable progress: + - Write/edit code files (write_file, edit_file, append_file) + - Run tests and checks (exec) + - Search documentation or web (web_fetch, web_search) + - Manage project structure (list_dir, read_file) + +3. **Project development lifecycle** — when working on software projects: + - **Feature development**: Write clean, working code. Add new features incrementally. + - **Testing**: After writing code, always run tests (exec: go test, pytest, npm test, etc.). Fix any failures before proceeding. + - **Code quality**: After tests pass, check for obvious inefficiencies. Refactor only when it improves correctness or maintainability. + - **Do not break working code**: Read existing code before changing it. Make changes incrementally and verify each step with tests. + - **Commit progress**: Use exec to git commit when a meaningful increment is complete. + +4. **Self-schedule next steps**: Use the `cron` tool to schedule follow-up actions: + - After writing code → schedule a test run + - After tests pass → schedule code review/optimization + - For recurring checks → schedule at an appropriate interval + +5. **Update goals**: + - Use `goal` with action='complete' when a goal is fully done (tested and working). + - Use `goal` with action='update' to add progress notes to a goal. + - Use `goal` with action='set' to capture newly discovered work. + - Use `goal` with action='drop' only if a goal is truly no longer relevant. + +6. **Report only when needed**: Send a message to the user ONLY if: + - A major milestone was completed (feature shipped, tests all passing) + - You are blocked and need human input + - Something went wrong that requires attention + - Otherwise respond ONLY with: HEARTBEAT_OK + +### Key Principles: +- **Never idle**: There is always something useful to do. If current goals are done, create new improvement goals. +- **Test before claiming done**: A goal is complete only when its implementation is tested and verified. +- **Incremental progress**: Small, safe changes with verification at each step. +- **Continuity**: Each cycle builds on the last. Read your own previous work before adding to it. + +Think step-by-step. Be decisive. Make progress every cycle. +`, now, goalsContent, extras) +} + +// createDefaultGoalsTemplate writes an initial GOALS.md so the agent has a starting point. +func (hs *HeartbeatService) createDefaultGoalsTemplate() { + goalsPath := filepath.Join(hs.workspace, "GOALS.md") + defaultContent := "# Goals\n\n" + + "*Managed automatically by Piconomous in autonomous mode.*\n" + + "*Use the `goal` tool (action: set/list/complete/update/drop) to manage goals.*\n\n" + + "## How Autonomous Mode Works\n\n" + + "The agent checks this file every heartbeat cycle and:\n" + + "1. Picks the highest-priority active goal\n" + + "2. Takes immediate action toward it (writes code, runs tests, commits progress)\n" + + "3. Schedules follow-up steps with the cron tool\n" + + "4. Marks goals complete only when tested and working\n" + + "5. Creates new improvement goals when current ones are done\n\n" + + "## Active Goals\n\n" + + "*No active goals yet. Add goals with: goal(action='set', title='...', description='...', priority=1-5)*\n\n" + + "## Completed Goals\n\n" + + "## Dropped Goals\n" + if err := fileutil.WriteFileAtomic(goalsPath, []byte(defaultContent), 0o644); err != nil { + hs.logErrorf("Failed to create default GOALS.md: %v", err) + } else { + hs.logInfof("Created default GOALS.md template") + } +} + // createDefaultHeartbeatTemplate creates the default HEARTBEAT.md file func (hs *HeartbeatService) createDefaultHeartbeatTemplate() { heartbeatPath := filepath.Join(hs.workspace, "HEARTBEAT.md") diff --git a/pkg/heartbeat/service_test.go b/pkg/heartbeat/service_test.go index 3b7eeeefb..31cfa3fb4 100644 --- a/pkg/heartbeat/service_test.go +++ b/pkg/heartbeat/service_test.go @@ -6,7 +6,7 @@ import ( "testing" "time" - "github.com/sipeed/picoclaw/pkg/tools" + "github.com/sipeed/piconomous/pkg/tools" ) func TestExecuteHeartbeat_Async(t *testing.T) { diff --git a/pkg/identity/identity.go b/pkg/identity/identity.go index 372bbe38b..2348427ce 100644 --- a/pkg/identity/identity.go +++ b/pkg/identity/identity.go @@ -1,4 +1,4 @@ -// Package identity provides unified user identity utilities for PicoClaw. +// Package identity provides unified user identity utilities for Piconomous. // It introduces a canonical "platform:id" format and matching logic // that is backward-compatible with all legacy allow-list formats. package identity @@ -6,7 +6,7 @@ package identity import ( "strings" - "github.com/sipeed/picoclaw/pkg/bus" + "github.com/sipeed/piconomous/pkg/bus" ) // BuildCanonicalID constructs a canonical "platform:id" identifier. diff --git a/pkg/identity/identity_test.go b/pkg/identity/identity_test.go index a588f1484..6d3049fc8 100644 --- a/pkg/identity/identity_test.go +++ b/pkg/identity/identity_test.go @@ -3,7 +3,7 @@ package identity import ( "testing" - "github.com/sipeed/picoclaw/pkg/bus" + "github.com/sipeed/piconomous/pkg/bus" ) func TestBuildCanonicalID(t *testing.T) { diff --git a/pkg/logger/logger_3rd_party.go b/pkg/logger/logger_3rd_party.go index d0cb178c5..e622f2fc9 100644 --- a/pkg/logger/logger_3rd_party.go +++ b/pkg/logger/logger_3rd_party.go @@ -1,4 +1,4 @@ -// this file is for compatible with 3rd party loggers, should not be called in PicoClaw project +// this file is for compatible with 3rd party loggers, should not be called in Piconomous project package logger diff --git a/pkg/mcp/manager.go b/pkg/mcp/manager.go index 7b63cc979..52bc63dcf 100644 --- a/pkg/mcp/manager.go +++ b/pkg/mcp/manager.go @@ -15,8 +15,8 @@ import ( "github.com/modelcontextprotocol/go-sdk/mcp" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/logger" ) // headerTransport is an http.RoundTripper that adds custom headers to requests @@ -251,7 +251,7 @@ func (m *Manager) ConnectServer( // Create client client := mcp.NewClient(&mcp.Implementation{ - Name: "picoclaw", + Name: "piconomous", Version: "1.0.0", }, nil) diff --git a/pkg/mcp/manager_test.go b/pkg/mcp/manager_test.go index f353942ab..d3eed652b 100644 --- a/pkg/mcp/manager_test.go +++ b/pkg/mcp/manager_test.go @@ -9,7 +9,7 @@ import ( sdkmcp "github.com/modelcontextprotocol/go-sdk/mcp" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/config" ) func TestLoadEnvFile(t *testing.T) { diff --git a/pkg/media/store.go b/pkg/media/store.go index 30220986c..a677da4de 100644 --- a/pkg/media/store.go +++ b/pkg/media/store.go @@ -8,7 +8,7 @@ import ( "github.com/google/uuid" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/piconomous/pkg/logger" ) // MediaMeta holds metadata about a stored media file. @@ -51,7 +51,7 @@ type MediaCleanerConfig struct { } // FileMediaStore is a pure in-memory implementation of MediaStore. -// Files are expected to already exist on disk (e.g. in /tmp/picoclaw_media/). +// Files are expected to already exist on disk (e.g. in /tmp/piconomous_media/). type FileMediaStore struct { mu sync.RWMutex refs map[string]mediaEntry diff --git a/pkg/media/tempdir.go b/pkg/media/tempdir.go index 45942b34f..54c8abde4 100644 --- a/pkg/media/tempdir.go +++ b/pkg/media/tempdir.go @@ -5,7 +5,7 @@ import ( "path/filepath" ) -const TempDirName = "picoclaw_media" +const TempDirName = "piconomous_media" // TempDir returns the shared temporary directory used for downloaded media. func TempDir() string { diff --git a/pkg/memory/jsonl.go b/pkg/memory/jsonl.go index afe374166..ee0094263 100644 --- a/pkg/memory/jsonl.go +++ b/pkg/memory/jsonl.go @@ -14,8 +14,8 @@ import ( "sync" "time" - "github.com/sipeed/picoclaw/pkg/fileutil" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/sipeed/piconomous/pkg/fileutil" + "github.com/sipeed/piconomous/pkg/providers" ) const ( diff --git a/pkg/memory/jsonl_test.go b/pkg/memory/jsonl_test.go index 356ff14ff..b33b991c9 100644 --- a/pkg/memory/jsonl_test.go +++ b/pkg/memory/jsonl_test.go @@ -7,7 +7,7 @@ import ( "sync" "testing" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/sipeed/piconomous/pkg/providers" ) func newTestStore(t *testing.T) *JSONLStore { diff --git a/pkg/memory/migration.go b/pkg/memory/migration.go index b64c62a9f..bcd57c8de 100644 --- a/pkg/memory/migration.go +++ b/pkg/memory/migration.go @@ -10,7 +10,7 @@ import ( "strings" "time" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/sipeed/piconomous/pkg/providers" ) // jsonSession mirrors pkg/session.Session for migration purposes. diff --git a/pkg/memory/migration_test.go b/pkg/memory/migration_test.go index 4466c96f9..ba80ada66 100644 --- a/pkg/memory/migration_test.go +++ b/pkg/memory/migration_test.go @@ -8,7 +8,7 @@ import ( "testing" "time" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/sipeed/piconomous/pkg/providers" ) func writeJSONSession( diff --git a/pkg/memory/store.go b/pkg/memory/store.go index b6e11707d..44336a06a 100644 --- a/pkg/memory/store.go +++ b/pkg/memory/store.go @@ -3,7 +3,7 @@ package memory import ( "context" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/sipeed/piconomous/pkg/providers" ) // Store defines an interface for persistent session storage. diff --git a/pkg/migrate/internal/common.go b/pkg/migrate/internal/common.go index 75aef5dc2..bee533ae6 100644 --- a/pkg/migrate/internal/common.go +++ b/pkg/migrate/internal/common.go @@ -6,7 +6,7 @@ import ( "os" "path/filepath" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/config" ) func ResolveTargetHome(override string) (string, error) { @@ -20,7 +20,7 @@ func ResolveTargetHome(override string) (string, error) { if err != nil { return "", fmt.Errorf("resolving home directory: %w", err) } - return filepath.Join(home, ".picoclaw"), nil + return filepath.Join(home, ".piconomous"), nil } func ExpandHome(path string) string { diff --git a/pkg/migrate/internal/common_test.go b/pkg/migrate/internal/common_test.go index a67293c19..ee0a15ec1 100644 --- a/pkg/migrate/internal/common_test.go +++ b/pkg/migrate/internal/common_test.go @@ -37,12 +37,12 @@ func TestExpandHomeWithTilde(t *testing.T) { } func TestResolveWorkspace(t *testing.T) { - result := ResolveWorkspace("/home/user/.picoclaw") - assert.Equal(t, "/home/user/.picoclaw/workspace", result) + result := ResolveWorkspace("/home/user/.piconomous") + assert.Equal(t, "/home/user/.piconomous/workspace", result) } func TestRelPath(t *testing.T) { - result := RelPath("/home/user/.picoclaw/workspace/file.txt", "/home/user/.picoclaw") + result := RelPath("/home/user/.piconomous/workspace/file.txt", "/home/user/.piconomous") assert.Equal(t, "workspace/file.txt", result) } @@ -57,7 +57,7 @@ func TestResolveTargetHome(t *testing.T) { result, err := ResolveTargetHome("") require.NoError(t, err) - assert.Equal(t, filepath.Join(home, ".picoclaw"), result) + assert.Equal(t, filepath.Join(home, ".piconomous"), result) } func TestResolveTargetHomeWithOverride(t *testing.T) { diff --git a/pkg/migrate/migrate.go b/pkg/migrate/migrate.go index 51fecf438..463ed74ef 100644 --- a/pkg/migrate/migrate.go +++ b/pkg/migrate/migrate.go @@ -6,8 +6,8 @@ import ( "path/filepath" "strings" - "github.com/sipeed/picoclaw/pkg/migrate/internal" - "github.com/sipeed/picoclaw/pkg/migrate/sources/openclaw" + "github.com/sipeed/piconomous/pkg/migrate/internal" + "github.com/sipeed/piconomous/pkg/migrate/sources/openclaw" ) type ( @@ -96,7 +96,7 @@ func (m *MigrateInstance) Run(opts Options) (*Result, error) { return nil, err } - fmt.Println("Migrating from Source to PicoClaw") + fmt.Println("Migrating from Source to Piconomous") fmt.Printf(" Source: %s\n", sourceHome) fmt.Printf(" Target: %s\n", targetHome) fmt.Println() @@ -142,7 +142,7 @@ func (m *MigrateInstance) Plan(opts Options, sourceHome, targetHome string) ([]A Type: ActionConvertConfig, Source: configPath, Target: filepath.Join(targetHome, "config.json"), - Description: "convert Source config to PicoClaw format", + Description: "convert Source config to Piconomous format", }) } } diff --git a/pkg/migrate/sources/openclaw/openclaw_config.go b/pkg/migrate/sources/openclaw/openclaw_config.go index 317bd3e84..49dc078b9 100644 --- a/pkg/migrate/sources/openclaw/openclaw_config.go +++ b/pkg/migrate/sources/openclaw/openclaw_config.go @@ -7,7 +7,7 @@ import ( "path/filepath" "strings" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/config" ) type OpenClawConfig struct { @@ -476,8 +476,8 @@ func (c *OpenClawConfig) HasAuthProfiles() bool { return c.Auth != nil && c.Auth.Profiles != nil && len(c.Auth.Profiles) > 0 } -func (c *OpenClawConfig) ConvertToPicoClaw(sourceHome string) (*PicoClawConfig, []string, error) { - cfg := &PicoClawConfig{} +func (c *OpenClawConfig) ConvertToPiconomous(sourceHome string) (*PiconomousConfig, []string, error) { + cfg := &PiconomousConfig{} var warnings []string provider, modelName := c.GetDefaultModel() @@ -528,25 +528,25 @@ func (c *OpenClawConfig) ConvertToPicoClaw(sourceHome string) (*PicoClawConfig, warnings = append( warnings, fmt.Sprintf( - "Skills (%d entries) not automatically migrated - reinstall via picoclaw CLI", + "Skills (%d entries) not automatically migrated - reinstall via piconomous CLI", len(c.Skills.Entries), ), ) } if c.HasMemory() { - warnings = append(warnings, "Memory backend config not migrated - PicoClaw uses SQLite with vector embeddings") + warnings = append(warnings, "Memory backend config not migrated - Piconomous uses SQLite with vector embeddings") } if c.HasCron() { warnings = append( warnings, - "Cron job scheduling not supported in PicoClaw - consider using external schedulers", + "Cron job scheduling not supported in Piconomous - consider using external schedulers", ) } if c.HasHooks() { - warnings = append(warnings, "Webhook hooks not supported in PicoClaw - use event system instead") + warnings = append(warnings, "Webhook hooks not supported in Piconomous - use event system instead") } if c.HasSession() { - warnings = append(warnings, "Session scope config differs - PicoClaw uses per-agent sessions by default") + warnings = append(warnings, "Session scope config differs - Piconomous uses per-agent sessions by default") } if c.HasAuthProfiles() { warnings = append( @@ -566,7 +566,7 @@ type ModelConfig struct { Proxy string `json:"proxy,omitempty"` } -type PicoClawConfig struct { +type PiconomousConfig struct { Agents AgentsConfig `json:"agents"` Bindings []AgentBinding `json:"bindings,omitempty"` Channels ChannelsConfig `json:"channels"` @@ -903,13 +903,13 @@ func (c *OpenClawConfig) convertChannels(warnings *[]string) ChannelsConfig { } if c.Channels.Signal != nil { - *warnings = append(*warnings, "Channel 'signal': No PicoClaw adapter available") + *warnings = append(*warnings, "Channel 'signal': No Piconomous adapter available") } if c.Channels.IRC != nil { - *warnings = append(*warnings, "Channel 'irc': No PicoClaw adapter available") + *warnings = append(*warnings, "Channel 'irc': No Piconomous adapter available") } if c.Channels.Mattermost != nil { - *warnings = append(*warnings, "Channel 'mattermost': No PicoClaw adapter available") + *warnings = append(*warnings, "Channel 'mattermost': No Piconomous adapter available") } if c.Channels.IMessage != nil { *warnings = append(*warnings, "Channel 'imessage': macOS-only channel - requires manual setup") @@ -917,7 +917,7 @@ func (c *OpenClawConfig) convertChannels(warnings *[]string) ChannelsConfig { if c.Channels.BlueBubbles != nil { *warnings = append( *warnings, - "Channel 'bluebubbles': No PicoClaw adapter available - consider iMessage instead", + "Channel 'bluebubbles': No Piconomous adapter available - consider iMessage instead", ) } @@ -972,7 +972,7 @@ func (c *OpenClawConfig) convertAgents(warnings *[]string) []AgentConfig { return agents } -func (c *PicoClawConfig) ToStandardConfig() *config.Config { +func (c *PiconomousConfig) ToStandardConfig() *config.Config { cfg := config.DefaultConfig() cfg.Agents.Defaults.Workspace = c.Agents.Defaults.Workspace diff --git a/pkg/migrate/sources/openclaw/openclaw_config_test.go b/pkg/migrate/sources/openclaw/openclaw_config_test.go index 802693825..00779ac94 100644 --- a/pkg/migrate/sources/openclaw/openclaw_config_test.go +++ b/pkg/migrate/sources/openclaw/openclaw_config_test.go @@ -82,8 +82,8 @@ func TestLoadOpenClawConfig(t *testing.T) { } workspace := cfg.GetDefaultWorkspace() - if workspace != "~/.picoclaw/workspace" { - t.Errorf("expected workspace '~/.picoclaw/workspace', got '%s'", workspace) + if workspace != "~/.piconomous/workspace" { + t.Errorf("expected workspace '~/.piconomous/workspace', got '%s'", workspace) } agents := cfg.GetAgents() @@ -160,7 +160,7 @@ func TestGetProviderConfig(t *testing.T) { } } -func TestConvertToPicoClaw(t *testing.T) { +func TestConvertToPiconomous(t *testing.T) { tmpDir := t.TempDir() configPath := filepath.Join(tmpDir, "openclaw.json") @@ -237,7 +237,7 @@ func TestConvertToPicoClaw(t *testing.T) { t.Fatalf("failed to load config: %v", err) } - picoCfg, warnings, err := cfg.ConvertToPicoClaw("") + picoCfg, warnings, err := cfg.ConvertToPiconomous("") if err != nil { t.Fatalf("failed to convert config: %v", err) } @@ -245,8 +245,8 @@ func TestConvertToPicoClaw(t *testing.T) { if picoCfg.Agents.Defaults.ModelName != "claude-sonnet-4-20250514" { t.Errorf("expected model 'claude-sonnet-4-20250514', got '%s'", picoCfg.Agents.Defaults.ModelName) } - if picoCfg.Agents.Defaults.Workspace != "~/.picoclaw/workspace" { - t.Errorf("expected workspace '~/.picoclaw/workspace', got '%s'", picoCfg.Agents.Defaults.Workspace) + if picoCfg.Agents.Defaults.Workspace != "~/.piconomous/workspace" { + t.Errorf("expected workspace '~/.piconomous/workspace', got '%s'", picoCfg.Agents.Defaults.Workspace) } if len(picoCfg.Agents.List) != 2 { @@ -291,7 +291,7 @@ func TestConvertToPicoClaw(t *testing.T) { } func TestToStandardConfig_ExecAllowRemoteDefaultsTrue(t *testing.T) { - cfg := (&PicoClawConfig{ + cfg := (&PiconomousConfig{ Tools: ToolsConfig{ Exec: ExecConfig{ EnableDenyPatterns: true, @@ -304,7 +304,7 @@ func TestToStandardConfig_ExecAllowRemoteDefaultsTrue(t *testing.T) { } } -func TestConvertToPicoClawWithQQAndDingTalk(t *testing.T) { +func TestConvertToPiconomousWithQQAndDingTalk(t *testing.T) { tmpDir := t.TempDir() configPath := filepath.Join(tmpDir, "openclaw.json") @@ -350,7 +350,7 @@ func TestConvertToPicoClawWithQQAndDingTalk(t *testing.T) { t.Fatalf("failed to load config: %v", err) } - picoCfg, _, err := cfg.ConvertToPicoClaw("") + picoCfg, _, err := cfg.ConvertToPiconomous("") if err != nil { t.Fatalf("failed to convert config: %v", err) } @@ -390,7 +390,7 @@ func TestConvertToPicoClawWithQQAndDingTalk(t *testing.T) { } } -func TestConvertToPicoClawWithMatrix(t *testing.T) { +func TestConvertToPiconomousWithMatrix(t *testing.T) { tmpDir := t.TempDir() configPath := filepath.Join(tmpDir, "openclaw.json") @@ -416,7 +416,7 @@ func TestConvertToPicoClawWithMatrix(t *testing.T) { t.Fatalf("failed to load config: %v", err) } - picoCfg, warnings, err := cfg.ConvertToPicoClaw("") + picoCfg, warnings, err := cfg.ConvertToPiconomous("") if err != nil { t.Fatalf("failed to convert config: %v", err) } @@ -445,7 +445,7 @@ func TestConvertToPicoClawWithMatrix(t *testing.T) { } } -func TestConvertToPicoClawWithMatrixDisabled(t *testing.T) { +func TestConvertToPiconomousWithMatrixDisabled(t *testing.T) { tmpDir := t.TempDir() configPath := filepath.Join(tmpDir, "openclaw.json") @@ -470,7 +470,7 @@ func TestConvertToPicoClawWithMatrixDisabled(t *testing.T) { t.Fatalf("failed to load config: %v", err) } - picoCfg, _, err := cfg.ConvertToPicoClaw("") + picoCfg, _, err := cfg.ConvertToPiconomous("") if err != nil { t.Fatalf("failed to convert config: %v", err) } @@ -634,12 +634,12 @@ func TestLoadOpenClawConfigFromDir(t *testing.T) { } func TestToStandardConfig(t *testing.T) { - picoCfg := &PicoClawConfig{ + picoCfg := &PiconomousConfig{ Agents: AgentsConfig{ Defaults: AgentDefaults{ Provider: "anthropic", ModelName: "claude-sonnet-4-20250514", - Workspace: "~/.picoclaw/workspace", + Workspace: "~/.piconomous/workspace", }, List: []AgentConfig{ { @@ -681,8 +681,8 @@ func TestToStandardConfig(t *testing.T) { if stdCfg.Agents.Defaults.ModelName != "claude-sonnet-4-20250514" { t.Errorf("expected model name 'claude-sonnet-4-20250514', got '%s'", stdCfg.Agents.Defaults.ModelName) } - if stdCfg.Agents.Defaults.Workspace != "~/.picoclaw/workspace" { - t.Errorf("expected workspace '~/.picoclaw/workspace', got '%s'", stdCfg.Agents.Defaults.Workspace) + if stdCfg.Agents.Defaults.Workspace != "~/.piconomous/workspace" { + t.Errorf("expected workspace '~/.piconomous/workspace', got '%s'", stdCfg.Agents.Defaults.Workspace) } if len(stdCfg.Agents.List) != 1 { diff --git a/pkg/migrate/sources/openclaw/openclaw_handler.go b/pkg/migrate/sources/openclaw/openclaw_handler.go index 5e5241268..6d40d00a8 100644 --- a/pkg/migrate/sources/openclaw/openclaw_handler.go +++ b/pkg/migrate/sources/openclaw/openclaw_handler.go @@ -6,12 +6,12 @@ import ( "path/filepath" "strings" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/migrate/internal" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/migrate/internal" ) // OpenclawHomeEnvVar is the environment variable that overrides the source -// openclaw home directory when migrating from openclaw to picoclaw. +// openclaw home directory when migrating from openclaw to piconomous. // Default: ~/.openclaw const OpenclawHomeEnvVar = "OPENCLAW_HOME" @@ -96,7 +96,7 @@ func (o *OpenclawHandler) ExecuteConfigMigration(srcConfigPath, dstConfigPath st return err } - picoCfg, warnings, err := openclawCfg.ConvertToPicoClaw(o.opts.SourceHome) + picoCfg, warnings, err := openclawCfg.ConvertToPiconomous(o.opts.SourceHome) if err != nil { return err } @@ -141,7 +141,7 @@ func findSourceConfig(sourceHome string) (string, error) { } func rewriteWorkspacePath(path string) string { - path = strings.Replace(path, ".openclaw", ".picoclaw", 1) + path = strings.Replace(path, ".openclaw", ".piconomous", 1) return path } diff --git a/pkg/migrate/sources/openclaw/openclaw_handler_test.go b/pkg/migrate/sources/openclaw/openclaw_handler_test.go index 35bd09be0..3f6a40d31 100644 --- a/pkg/migrate/sources/openclaw/openclaw_handler_test.go +++ b/pkg/migrate/sources/openclaw/openclaw_handler_test.go @@ -234,8 +234,8 @@ func TestRewriteWorkspacePath(t *testing.T) { input string expected string }{ - {"~/.openclaw/workspace", "~/.picoclaw/workspace"}, - {"/home/user/.openclaw/workspace", "/home/user/.picoclaw/workspace"}, + {"~/.openclaw/workspace", "~/.piconomous/workspace"}, + {"/home/user/.openclaw/workspace", "/home/user/.piconomous/workspace"}, {"/path/without/openclaw/change", "/path/without/openclaw/change"}, {"", ""}, } diff --git a/pkg/providers/anthropic/provider.go b/pkg/providers/anthropic/provider.go index d4ceaab2c..531d7a95b 100644 --- a/pkg/providers/anthropic/provider.go +++ b/pkg/providers/anthropic/provider.go @@ -10,7 +10,7 @@ import ( "github.com/anthropics/anthropic-sdk-go" "github.com/anthropics/anthropic-sdk-go/option" - "github.com/sipeed/picoclaw/pkg/providers/protocoltypes" + "github.com/sipeed/piconomous/pkg/providers/protocoltypes" ) type ( diff --git a/pkg/providers/anthropic_messages/provider.go b/pkg/providers/anthropic_messages/provider.go index 2b19e941a..5c9dc63e1 100644 --- a/pkg/providers/anthropic_messages/provider.go +++ b/pkg/providers/anthropic_messages/provider.go @@ -1,7 +1,7 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package anthropicmessages @@ -16,7 +16,7 @@ import ( "strings" "time" - "github.com/sipeed/picoclaw/pkg/providers/protocoltypes" + "github.com/sipeed/piconomous/pkg/providers/protocoltypes" ) type ( diff --git a/pkg/providers/anthropic_messages/provider_test.go b/pkg/providers/anthropic_messages/provider_test.go index 8eabc15fa..f18f0a237 100644 --- a/pkg/providers/anthropic_messages/provider_test.go +++ b/pkg/providers/anthropic_messages/provider_test.go @@ -1,7 +1,7 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package anthropicmessages diff --git a/pkg/providers/antigravity_provider.go b/pkg/providers/antigravity_provider.go index 8a1890212..9e22a36e0 100644 --- a/pkg/providers/antigravity_provider.go +++ b/pkg/providers/antigravity_provider.go @@ -12,8 +12,8 @@ import ( "strings" "time" - "github.com/sipeed/picoclaw/pkg/auth" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/piconomous/pkg/auth" + "github.com/sipeed/piconomous/pkg/logger" ) const ( @@ -567,7 +567,7 @@ func createAntigravityTokenSource() func() (string, string, error) { } if cred == nil { return "", "", fmt.Errorf( - "no credentials for google-antigravity. Run: picoclaw auth login --provider google-antigravity", + "no credentials for google-antigravity. Run: piconomous auth login --provider google-antigravity", ) } @@ -590,7 +590,7 @@ func createAntigravityTokenSource() func() (string, string, error) { if cred.IsExpired() { return "", "", fmt.Errorf( - "antigravity credentials expired. Run: picoclaw auth login --provider google-antigravity", + "antigravity credentials expired. Run: piconomous auth login --provider google-antigravity", ) } diff --git a/pkg/providers/azure/provider.go b/pkg/providers/azure/provider.go index e0ddbbde4..002cfefe1 100644 --- a/pkg/providers/azure/provider.go +++ b/pkg/providers/azure/provider.go @@ -10,8 +10,8 @@ import ( "strings" "time" - "github.com/sipeed/picoclaw/pkg/providers/common" - "github.com/sipeed/picoclaw/pkg/providers/protocoltypes" + "github.com/sipeed/piconomous/pkg/providers/common" + "github.com/sipeed/piconomous/pkg/providers/protocoltypes" ) type ( diff --git a/pkg/providers/claude_cli_provider_test.go b/pkg/providers/claude_cli_provider_test.go index d4d648f5a..9b9beb4d7 100644 --- a/pkg/providers/claude_cli_provider_test.go +++ b/pkg/providers/claude_cli_provider_test.go @@ -10,7 +10,7 @@ import ( "testing" "time" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/config" ) // --- Compile-time interface check --- diff --git a/pkg/providers/claude_provider.go b/pkg/providers/claude_provider.go index 60639ca18..72e426d31 100644 --- a/pkg/providers/claude_provider.go +++ b/pkg/providers/claude_provider.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - anthropicprovider "github.com/sipeed/picoclaw/pkg/providers/anthropic" + anthropicprovider "github.com/sipeed/piconomous/pkg/providers/anthropic" ) type ClaudeProvider struct { @@ -62,7 +62,7 @@ func createClaudeTokenSource() func() (string, error) { return "", fmt.Errorf("loading auth credentials: %w", err) } if cred == nil { - return "", fmt.Errorf("no credentials for anthropic. Run: picoclaw auth login --provider anthropic") + return "", fmt.Errorf("no credentials for anthropic. Run: piconomous auth login --provider anthropic") } return cred.AccessToken, nil } diff --git a/pkg/providers/claude_provider_test.go b/pkg/providers/claude_provider_test.go index 98e07bb80..ac235eca5 100644 --- a/pkg/providers/claude_provider_test.go +++ b/pkg/providers/claude_provider_test.go @@ -9,7 +9,7 @@ import ( "github.com/anthropics/anthropic-sdk-go" anthropicoption "github.com/anthropics/anthropic-sdk-go/option" - anthropicprovider "github.com/sipeed/picoclaw/pkg/providers/anthropic" + anthropicprovider "github.com/sipeed/piconomous/pkg/providers/anthropic" ) func TestClaudeProvider_ChatRoundTrip(t *testing.T) { diff --git a/pkg/providers/codex_cli_provider_test.go b/pkg/providers/codex_cli_provider_test.go index 0f66e25f4..02628c6d7 100644 --- a/pkg/providers/codex_cli_provider_test.go +++ b/pkg/providers/codex_cli_provider_test.go @@ -554,8 +554,8 @@ func TestCodexCliProvider_EmptyCommand(t *testing.T) { // --- Integration Test (requires real codex CLI with valid auth) --- func TestCodexCliProvider_Integration(t *testing.T) { - if os.Getenv("PICOCLAW_INTEGRATION_TESTS") == "" { - t.Skip("skipping integration test (set PICOCLAW_INTEGRATION_TESTS=1 to enable)") + if os.Getenv("PICONOMOUS_INTEGRATION_TESTS") == "" { + t.Skip("skipping integration test (set PICONOMOUS_INTEGRATION_TESTS=1 to enable)") } // Verify codex is available diff --git a/pkg/providers/codex_provider.go b/pkg/providers/codex_provider.go index 4a6d61a4b..8dc292dd5 100644 --- a/pkg/providers/codex_provider.go +++ b/pkg/providers/codex_provider.go @@ -11,8 +11,8 @@ import ( "github.com/openai/openai-go/v3/option" "github.com/openai/openai-go/v3/responses" - "github.com/sipeed/picoclaw/pkg/auth" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/piconomous/pkg/auth" + "github.com/sipeed/piconomous/pkg/logger" ) const ( @@ -425,7 +425,7 @@ func createCodexTokenSource() func() (string, string, error) { return "", "", fmt.Errorf("loading auth credentials: %w", err) } if cred == nil { - return "", "", fmt.Errorf("no credentials for openai. Run: picoclaw auth login --provider openai") + return "", "", fmt.Errorf("no credentials for openai. Run: piconomous auth login --provider openai") } if cred.AuthMethod == "oauth" && cred.NeedsRefresh() && cred.RefreshToken != "" { diff --git a/pkg/providers/common/common.go b/pkg/providers/common/common.go index 23680a1bf..3593cb158 100644 --- a/pkg/providers/common/common.go +++ b/pkg/providers/common/common.go @@ -1,7 +1,7 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors // Package common provides shared utilities used by multiple LLM provider // implementations (openai_compat, azure, etc.). @@ -19,7 +19,7 @@ import ( "strings" "time" - "github.com/sipeed/picoclaw/pkg/providers/protocoltypes" + "github.com/sipeed/piconomous/pkg/providers/protocoltypes" ) // Re-export protocol types used across providers. diff --git a/pkg/providers/common/common_test.go b/pkg/providers/common/common_test.go index bb7e7434d..a162cf71b 100644 --- a/pkg/providers/common/common_test.go +++ b/pkg/providers/common/common_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - "github.com/sipeed/picoclaw/pkg/providers/protocoltypes" + "github.com/sipeed/piconomous/pkg/providers/protocoltypes" ) // --- NewHTTPClient tests --- diff --git a/pkg/providers/factory.go b/pkg/providers/factory.go index d2afe2943..53ffdcd63 100644 --- a/pkg/providers/factory.go +++ b/pkg/providers/factory.go @@ -4,8 +4,8 @@ import ( "fmt" "strings" - "github.com/sipeed/picoclaw/pkg/auth" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/auth" + "github.com/sipeed/piconomous/pkg/config" ) const defaultAnthropicAPIBase = "https://api.anthropic.com/v1" diff --git a/pkg/providers/factory_provider.go b/pkg/providers/factory_provider.go index a7fef8f5b..84c4a3d57 100644 --- a/pkg/providers/factory_provider.go +++ b/pkg/providers/factory_provider.go @@ -1,7 +1,7 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package providers @@ -9,9 +9,9 @@ import ( "fmt" "strings" - "github.com/sipeed/picoclaw/pkg/config" - anthropicmessages "github.com/sipeed/picoclaw/pkg/providers/anthropic_messages" - "github.com/sipeed/picoclaw/pkg/providers/azure" + "github.com/sipeed/piconomous/pkg/config" + anthropicmessages "github.com/sipeed/piconomous/pkg/providers/anthropic_messages" + "github.com/sipeed/piconomous/pkg/providers/azure" ) // createClaudeAuthProvider creates a Claude provider using OAuth credentials from auth store. @@ -21,7 +21,7 @@ func createClaudeAuthProvider() (LLMProvider, error) { return nil, fmt.Errorf("loading auth credentials: %w", err) } if cred == nil { - return nil, fmt.Errorf("no credentials for anthropic. Run: picoclaw auth login --provider anthropic") + return nil, fmt.Errorf("no credentials for anthropic. Run: piconomous auth login --provider anthropic") } return NewClaudeProviderWithTokenSource(cred.AccessToken, createClaudeTokenSource()), nil } @@ -33,7 +33,7 @@ func createCodexAuthProvider() (LLMProvider, error) { return nil, fmt.Errorf("loading auth credentials: %w", err) } if cred == nil { - return nil, fmt.Errorf("no credentials for openai. Run: picoclaw auth login --provider openai") + return nil, fmt.Errorf("no credentials for openai. Run: piconomous auth login --provider openai") } return NewCodexProviderWithTokenSource(cred.AccessToken, cred.AccountID, createCodexTokenSource()), nil } diff --git a/pkg/providers/factory_provider_test.go b/pkg/providers/factory_provider_test.go index 8b9ddeecd..f69933407 100644 --- a/pkg/providers/factory_provider_test.go +++ b/pkg/providers/factory_provider_test.go @@ -1,7 +1,7 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package providers @@ -12,7 +12,7 @@ import ( "testing" "time" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/config" ) func TestExtractProtocol(t *testing.T) { diff --git a/pkg/providers/factory_test.go b/pkg/providers/factory_test.go index 91469f25b..70a1a86f7 100644 --- a/pkg/providers/factory_test.go +++ b/pkg/providers/factory_test.go @@ -4,8 +4,8 @@ import ( "strings" "testing" - "github.com/sipeed/picoclaw/pkg/auth" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/auth" + "github.com/sipeed/piconomous/pkg/config" ) func TestResolveProviderSelection(t *testing.T) { diff --git a/pkg/providers/http_provider.go b/pkg/providers/http_provider.go index 803165edb..01eeddafb 100644 --- a/pkg/providers/http_provider.go +++ b/pkg/providers/http_provider.go @@ -1,8 +1,8 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // Inspired by and based on nanobot: https://github.com/HKUDS/nanobot // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package providers @@ -10,7 +10,7 @@ import ( "context" "time" - "github.com/sipeed/picoclaw/pkg/providers/openai_compat" + "github.com/sipeed/piconomous/pkg/providers/openai_compat" ) type HTTPProvider struct { diff --git a/pkg/providers/legacy_provider.go b/pkg/providers/legacy_provider.go index 26905159f..d735ad0c3 100644 --- a/pkg/providers/legacy_provider.go +++ b/pkg/providers/legacy_provider.go @@ -1,14 +1,14 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package providers import ( "fmt" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/config" ) // CreateProvider creates a provider based on the configuration. diff --git a/pkg/providers/openai_compat/provider.go b/pkg/providers/openai_compat/provider.go index 938e4ea8b..eb46f6cef 100644 --- a/pkg/providers/openai_compat/provider.go +++ b/pkg/providers/openai_compat/provider.go @@ -13,8 +13,8 @@ import ( "strings" "time" - "github.com/sipeed/picoclaw/pkg/providers/common" - "github.com/sipeed/picoclaw/pkg/providers/protocoltypes" + "github.com/sipeed/piconomous/pkg/providers/common" + "github.com/sipeed/piconomous/pkg/providers/protocoltypes" ) type ( diff --git a/pkg/providers/openai_compat/provider_test.go b/pkg/providers/openai_compat/provider_test.go index efb03ccb8..7fa74531f 100644 --- a/pkg/providers/openai_compat/provider_test.go +++ b/pkg/providers/openai_compat/provider_test.go @@ -12,8 +12,8 @@ import ( "testing" "time" - "github.com/sipeed/picoclaw/pkg/providers/common" - "github.com/sipeed/picoclaw/pkg/providers/protocoltypes" + "github.com/sipeed/piconomous/pkg/providers/common" + "github.com/sipeed/piconomous/pkg/providers/protocoltypes" ) func TestProviderChat_UsesMaxCompletionTokensForGLM(t *testing.T) { diff --git a/pkg/providers/toolcall_utils.go b/pkg/providers/toolcall_utils.go index a33e1eb5c..ff5732077 100644 --- a/pkg/providers/toolcall_utils.go +++ b/pkg/providers/toolcall_utils.go @@ -1,7 +1,7 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package providers diff --git a/pkg/providers/types.go b/pkg/providers/types.go index 9a4d126a7..68854d4ba 100644 --- a/pkg/providers/types.go +++ b/pkg/providers/types.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - "github.com/sipeed/picoclaw/pkg/providers/protocoltypes" + "github.com/sipeed/piconomous/pkg/providers/protocoltypes" ) type ( diff --git a/pkg/routing/features.go b/pkg/routing/features.go index c371e21aa..d9c87ee52 100644 --- a/pkg/routing/features.go +++ b/pkg/routing/features.go @@ -4,7 +4,7 @@ import ( "strings" "unicode/utf8" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/sipeed/piconomous/pkg/providers" ) // lookbackWindow is the number of recent history entries scanned for tool calls. diff --git a/pkg/routing/route.go b/pkg/routing/route.go index 9eb060c53..9962195ea 100644 --- a/pkg/routing/route.go +++ b/pkg/routing/route.go @@ -3,7 +3,7 @@ package routing import ( "strings" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/config" ) // RouteInput contains the routing context from an inbound message. diff --git a/pkg/routing/route_test.go b/pkg/routing/route_test.go index 8255db5f9..215e5a44f 100644 --- a/pkg/routing/route_test.go +++ b/pkg/routing/route_test.go @@ -3,14 +3,14 @@ package routing import ( "testing" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/config" ) func testConfig(agents []config.AgentConfig, bindings []config.AgentBinding) *config.Config { return &config.Config{ Agents: config.AgentsConfig{ Defaults: config.AgentDefaults{ - Workspace: "/tmp/picoclaw-test", + Workspace: "/tmp/piconomous-test", Model: "gpt-4", }, List: agents, diff --git a/pkg/routing/router.go b/pkg/routing/router.go index b1fa347e9..eb60742e9 100644 --- a/pkg/routing/router.go +++ b/pkg/routing/router.go @@ -1,7 +1,7 @@ package routing import ( - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/sipeed/piconomous/pkg/providers" ) // defaultThreshold is used when the config threshold is zero or negative. diff --git a/pkg/routing/router_test.go b/pkg/routing/router_test.go index 2824d10ab..14a924fc6 100644 --- a/pkg/routing/router_test.go +++ b/pkg/routing/router_test.go @@ -4,7 +4,7 @@ import ( "strings" "testing" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/sipeed/piconomous/pkg/providers" ) // ── ExtractFeatures ────────────────────────────────────────────────────────── diff --git a/pkg/session/jsonl_backend.go b/pkg/session/jsonl_backend.go index 7f470de15..e3bb7bca8 100644 --- a/pkg/session/jsonl_backend.go +++ b/pkg/session/jsonl_backend.go @@ -4,8 +4,8 @@ import ( "context" "log" - "github.com/sipeed/picoclaw/pkg/memory" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/sipeed/piconomous/pkg/memory" + "github.com/sipeed/piconomous/pkg/providers" ) // JSONLBackend adapts a memory.Store into the SessionStore interface. diff --git a/pkg/session/jsonl_backend_test.go b/pkg/session/jsonl_backend_test.go index 40fa019cb..7dad9f469 100644 --- a/pkg/session/jsonl_backend_test.go +++ b/pkg/session/jsonl_backend_test.go @@ -4,9 +4,9 @@ import ( "fmt" "testing" - "github.com/sipeed/picoclaw/pkg/memory" - "github.com/sipeed/picoclaw/pkg/providers" - "github.com/sipeed/picoclaw/pkg/session" + "github.com/sipeed/piconomous/pkg/memory" + "github.com/sipeed/piconomous/pkg/providers" + "github.com/sipeed/piconomous/pkg/session" ) // Compile-time interface satisfaction checks. diff --git a/pkg/session/manager.go b/pkg/session/manager.go index ef720b7c5..9668c3ee0 100644 --- a/pkg/session/manager.go +++ b/pkg/session/manager.go @@ -8,7 +8,7 @@ import ( "sync" "time" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/sipeed/piconomous/pkg/providers" ) type Session struct { diff --git a/pkg/session/session_store.go b/pkg/session/session_store.go index 1d1a2f967..d2e446e71 100644 --- a/pkg/session/session_store.go +++ b/pkg/session/session_store.go @@ -1,6 +1,6 @@ package session -import "github.com/sipeed/picoclaw/pkg/providers" +import "github.com/sipeed/piconomous/pkg/providers" // SessionStore defines the persistence operations used by the agent loop. // Both SessionManager (legacy JSON backend) and JSONLBackend satisfy this diff --git a/pkg/skills/clawhub_registry.go b/pkg/skills/clawhub_registry.go index bd4bed8fb..eee3722b6 100644 --- a/pkg/skills/clawhub_registry.go +++ b/pkg/skills/clawhub_registry.go @@ -10,7 +10,7 @@ import ( "os" "time" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/pkg/utils" ) const ( @@ -330,7 +330,7 @@ func (c *ClawHubRegistry) downloadToTempFileWithRetry(ctx context.Context, urlSt return "", fmt.Errorf("HTTP %d: %s", resp.StatusCode, string(errBody[:n])) } - tmpFile, err := os.CreateTemp("", "picoclaw-dl-*") + tmpFile, err := os.CreateTemp("", "piconomous-dl-*") if err != nil { return "", fmt.Errorf("failed to create temp file: %w", err) } diff --git a/pkg/skills/clawhub_registry_test.go b/pkg/skills/clawhub_registry_test.go index 055da22dc..d78ebbcf0 100644 --- a/pkg/skills/clawhub_registry_test.go +++ b/pkg/skills/clawhub_registry_test.go @@ -14,7 +14,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/pkg/utils" ) func newTestRegistry(serverURL, authToken string) *ClawHubRegistry { diff --git a/pkg/skills/installer.go b/pkg/skills/installer.go index f6cdee3a6..b602a9bce 100644 --- a/pkg/skills/installer.go +++ b/pkg/skills/installer.go @@ -12,7 +12,7 @@ import ( "strings" "time" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/pkg/utils" ) // GitHubContent represents a file or directory in GitHub API response diff --git a/pkg/skills/installer_test.go b/pkg/skills/installer_test.go index 759cfc489..2836f9ee1 100644 --- a/pkg/skills/installer_test.go +++ b/pkg/skills/installer_test.go @@ -25,41 +25,41 @@ func TestParseGitHubRef(t *testing.T) { }{ { name: "simple owner/repo", - repo: "sipeed/picoclaw", + repo: "sipeed/piconomous", wantOwner: "sipeed", - wantRepoName: "picoclaw", + wantRepoName: "piconomous", wantRef: "main", wantSubPath: "", }, { name: "owner/repo with subpath", - repo: "sipeed/picoclaw/skills/test", + repo: "sipeed/piconomous/skills/test", wantOwner: "sipeed", - wantRepoName: "picoclaw", + wantRepoName: "piconomous", wantRef: "main", wantSubPath: "skills/test", }, { name: "full URL with tree", - repo: "https://github.com/sipeed/picoclaw/tree/dev/skills/test", + repo: "https://github.com/sipeed/piconomous/tree/dev/skills/test", wantOwner: "sipeed", - wantRepoName: "picoclaw", + wantRepoName: "piconomous", wantRef: "dev", wantSubPath: "skills/test", }, { name: "full URL with blob", - repo: "https://github.com/sipeed/picoclaw/blob/main/README.md", + repo: "https://github.com/sipeed/piconomous/blob/main/README.md", wantOwner: "sipeed", - wantRepoName: "picoclaw", + wantRepoName: "piconomous", wantRef: "main", wantSubPath: "README.md", }, { name: "full URL without ref", - repo: "https://github.com/sipeed/picoclaw", + repo: "https://github.com/sipeed/piconomous", wantOwner: "sipeed", - wantRepoName: "picoclaw", + wantRepoName: "piconomous", wantRef: "main", wantSubPath: "", }, @@ -83,9 +83,9 @@ func TestParseGitHubRef(t *testing.T) { }, { name: "with whitespace", - repo: " sipeed/picoclaw ", + repo: " sipeed/piconomous ", wantOwner: "sipeed", - wantRepoName: "picoclaw", + wantRepoName: "piconomous", wantRef: "main", wantSubPath: "", }, @@ -431,12 +431,12 @@ func TestSkillInstaller_InstallFromGitHub_SkillAlreadyExists(t *testing.T) { } // Create an existing skill directory - existingSkill := filepath.Join(skillsDir, "picoclaw") + existingSkill := filepath.Join(skillsDir, "piconomous") os.MkdirAll(existingSkill, 0o755) os.WriteFile(filepath.Join(existingSkill, "SKILL.md"), []byte("existing"), 0o644) // Try to install the same skill - should fail - err = installer.InstallFromGitHub(context.Background(), "sipeed/picoclaw") + err = installer.InstallFromGitHub(context.Background(), "sipeed/piconomous") if err == nil { t.Error("InstallFromGitHub() expected error for existing skill, got nil") } diff --git a/pkg/skills/loader.go b/pkg/skills/loader.go index f5985a662..b38a34438 100644 --- a/pkg/skills/loader.go +++ b/pkg/skills/loader.go @@ -15,7 +15,7 @@ import ( "github.com/gomarkdown/markdown/parser" "gopkg.in/yaml.v3" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/piconomous/pkg/logger" ) var namePattern = regexp.MustCompile(`^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$`) @@ -61,7 +61,7 @@ func (info SkillInfo) validate() error { type SkillsLoader struct { workspace string workspaceSkills string // workspace skills (project-level) - globalSkills string // global skills (~/.picoclaw/skills) + globalSkills string // global skills (~/.piconomous/skills) builtinSkills string // builtin skills } @@ -92,7 +92,7 @@ func NewSkillsLoader(workspace string, globalSkills string, builtinSkills string return &SkillsLoader{ workspace: workspace, workspaceSkills: filepath.Join(workspace, "skills"), - globalSkills: globalSkills, // ~/.picoclaw/skills + globalSkills: globalSkills, // ~/.piconomous/skills builtinSkills: builtinSkills, } } @@ -156,7 +156,7 @@ func (sl *SkillsLoader) LoadSkill(name string) (string, bool) { } } - // 2. then load from global skills (~/.picoclaw/skills) + // 2. then load from global skills (~/.piconomous/skills) if sl.globalSkills != "" { skillFile := filepath.Join(sl.globalSkills, name, "SKILL.md") if content, err := os.ReadFile(skillFile); err == nil { diff --git a/pkg/skills/registry_test.go b/pkg/skills/registry_test.go index a4694bd43..672719c27 100644 --- a/pkg/skills/registry_test.go +++ b/pkg/skills/registry_test.go @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/assert" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/pkg/utils" ) // mockRegistry is a test double implementing SkillRegistry. diff --git a/pkg/state/state.go b/pkg/state/state.go index 5da7bbde1..563bb28e8 100644 --- a/pkg/state/state.go +++ b/pkg/state/state.go @@ -9,7 +9,7 @@ import ( "sync" "time" - "github.com/sipeed/picoclaw/pkg/fileutil" + "github.com/sipeed/piconomous/pkg/fileutil" ) // State represents the persistent state for a workspace. diff --git a/pkg/tools/cron.go b/pkg/tools/cron.go index 154ec75f0..fb7a3141f 100644 --- a/pkg/tools/cron.go +++ b/pkg/tools/cron.go @@ -6,11 +6,11 @@ import ( "strings" "time" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/constants" - "github.com/sipeed/picoclaw/pkg/cron" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/constants" + "github.com/sipeed/piconomous/pkg/cron" + "github.com/sipeed/piconomous/pkg/utils" ) // JobExecutor is the interface for executing cron jobs through the agent @@ -20,12 +20,13 @@ type JobExecutor interface { // CronTool provides scheduling capabilities for the agent type CronTool struct { - cronService *cron.CronService - executor JobExecutor - msgBus *bus.MessageBus - execTool *ExecTool - allowCommand bool - execEnabled bool + cronService *cron.CronService + executor JobExecutor + msgBus *bus.MessageBus + execTool *ExecTool + allowCommand bool + execEnabled bool + autonomousMode bool // when true, self-scheduling without command_confirm is allowed } // NewCronTool creates a new CronTool @@ -36,9 +37,11 @@ func NewCronTool( ) (*CronTool, error) { allowCommand := true execEnabled := true + autonomousMode := false if config != nil { allowCommand = config.Tools.Cron.AllowCommand execEnabled = config.Tools.Exec.Enabled + autonomousMode = config.Autonomous.Enabled } var execTool *ExecTool @@ -54,12 +57,13 @@ func NewCronTool( execTool.SetTimeout(execTimeout) } return &CronTool{ - cronService: cronService, - executor: executor, - msgBus: msgBus, - execTool: execTool, - allowCommand: allowCommand, - execEnabled: execEnabled, + cronService: cronService, + executor: executor, + msgBus: msgBus, + execTool: execTool, + allowCommand: allowCommand, + execEnabled: execEnabled, + autonomousMode: autonomousMode, }, nil } @@ -200,6 +204,9 @@ func (t *CronTool) addJob(ctx context.Context, args map[string]any) *ToolResult // GHSA-pv8c-p6jf-3fpp: command scheduling requires internal channel. When // allow_command is disabled, explicit confirmation is required as an override. // Non-command reminders remain open to all channels. + // In autonomous mode the agent is permitted to self-schedule on its own + // internal channels without requiring command_confirm, since the entire + // execution context is already an autonomous/internal invocation. command, _ := args["command"].(string) commandConfirm, _ := args["command_confirm"].(bool) if command != "" { @@ -209,7 +216,7 @@ func (t *CronTool) addJob(ctx context.Context, args map[string]any) *ToolResult if !constants.IsInternalChannel(channel) { return ErrorResult("scheduling command execution is restricted to internal channels") } - if !t.allowCommand && !commandConfirm { + if !t.allowCommand && !commandConfirm && !t.autonomousMode { return ErrorResult("command_confirm=true is required when allow_command is disabled") } deliver = false diff --git a/pkg/tools/cron_test.go b/pkg/tools/cron_test.go index cd7d39860..686da0f38 100644 --- a/pkg/tools/cron_test.go +++ b/pkg/tools/cron_test.go @@ -7,9 +7,9 @@ import ( "testing" "time" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/cron" + "github.com/sipeed/piconomous/pkg/bus" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/cron" ) func newTestCronToolWithConfig(t *testing.T, cfg *config.Config) *CronTool { diff --git a/pkg/tools/filesystem.go b/pkg/tools/filesystem.go index 39d45013d..881d76542 100644 --- a/pkg/tools/filesystem.go +++ b/pkg/tools/filesystem.go @@ -14,8 +14,8 @@ import ( "strings" "time" - "github.com/sipeed/picoclaw/pkg/fileutil" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/piconomous/pkg/fileutil" + "github.com/sipeed/piconomous/pkg/logger" ) const MaxReadFileSize = 64 * 1024 // 64KB limit to avoid context overflow diff --git a/pkg/tools/goal.go b/pkg/tools/goal.go new file mode 100644 index 000000000..38ce8adec --- /dev/null +++ b/pkg/tools/goal.go @@ -0,0 +1,372 @@ +// Piconomous - Ultra-lightweight personal AI agent +// License: MIT +// +// Copyright (c) 2026 Piconomous contributors + +package tools + +import ( + "context" + "encoding/json" + "fmt" + "os" + "path/filepath" + "strings" + "time" + + "github.com/google/uuid" + "github.com/sipeed/piconomous/pkg/fileutil" +) + +// GoalStatus represents the lifecycle state of a goal. +type GoalStatus string + +const ( + GoalStatusActive GoalStatus = "active" + GoalStatusCompleted GoalStatus = "completed" + GoalStatusDropped GoalStatus = "dropped" +) + +// Goal represents a single autonomous goal the agent is pursuing. +type Goal struct { + ID string `json:"id"` + Title string `json:"title"` + Description string `json:"description,omitempty"` + Priority int `json:"priority"` // 1=highest, 5=lowest + Status GoalStatus `json:"status"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +// GoalStore persists goals as a JSON file alongside a human-readable GOALS.md. +type GoalStore struct { + workspace string + maxGoals int +} + +func newGoalStore(workspace string, maxGoals int) *GoalStore { + return &GoalStore{workspace: workspace, maxGoals: maxGoals} +} + +func (gs *GoalStore) goalsJSONPath() string { + return filepath.Join(gs.workspace, "goals.json") +} + +func (gs *GoalStore) goalsMDPath() string { + return filepath.Join(gs.workspace, "GOALS.md") +} + +func (gs *GoalStore) load() ([]Goal, error) { + data, err := os.ReadFile(gs.goalsJSONPath()) + if os.IsNotExist(err) { + return []Goal{}, nil + } + if err != nil { + return nil, err + } + var goals []Goal + if err := json.Unmarshal(data, &goals); err != nil { + return nil, err + } + return goals, nil +} + +func (gs *GoalStore) save(goals []Goal) error { + data, err := json.MarshalIndent(goals, "", " ") + if err != nil { + return err + } + if err := fileutil.WriteFileAtomic(gs.goalsJSONPath(), data, 0o644); err != nil { + return err + } + return gs.writeMD(goals) +} + +func (gs *GoalStore) writeMD(goals []Goal) error { + var sb strings.Builder + sb.WriteString("# Goals\n\n") + sb.WriteString("*Managed by the autonomous goal system. Edit goals.json directly or use the `goal` tool.*\n\n") + + active := filterGoals(goals, GoalStatusActive) + completed := filterGoals(goals, GoalStatusCompleted) + dropped := filterGoals(goals, GoalStatusDropped) + + if len(active) == 0 { + sb.WriteString("## Active Goals\n\n*No active goals.*\n\n") + } else { + sb.WriteString("## Active Goals\n\n") + for _, g := range active { + sb.WriteString(fmt.Sprintf("### [P%d] %s (id: %s)\n", g.Priority, g.Title, g.ID)) + if g.Description != "" { + sb.WriteString(g.Description + "\n") + } + sb.WriteString(fmt.Sprintf("*Created: %s | Updated: %s*\n\n", + g.CreatedAt.Format("2006-01-02 15:04"), + g.UpdatedAt.Format("2006-01-02 15:04"), + )) + } + } + + if len(completed) > 0 { + sb.WriteString("## Completed Goals\n\n") + for _, g := range completed { + sb.WriteString(fmt.Sprintf("- ~~%s~~ (id: %s, completed: %s)\n", + g.Title, g.ID, g.UpdatedAt.Format("2006-01-02 15:04"))) + } + sb.WriteString("\n") + } + + if len(dropped) > 0 { + sb.WriteString("## Dropped Goals\n\n") + for _, g := range dropped { + sb.WriteString(fmt.Sprintf("- ~~%s~~ (id: %s)\n", g.Title, g.ID)) + } + sb.WriteString("\n") + } + + return fileutil.WriteFileAtomic(gs.goalsMDPath(), []byte(sb.String()), 0o644) +} + +func filterGoals(goals []Goal, status GoalStatus) []Goal { + var out []Goal + for _, g := range goals { + if g.Status == status { + out = append(out, g) + } + } + return out +} + +// GoalTool provides goal management for fully autonomous operation. +// The agent uses this tool to set, track, and complete long-running goals +// that persist across heartbeat cycles. +type GoalTool struct { + store *GoalStore +} + +// NewGoalTool creates a GoalTool backed by the given workspace directory. +// maxGoals=0 means unlimited. +func NewGoalTool(workspace string, maxGoals int) *GoalTool { + return &GoalTool{store: newGoalStore(workspace, maxGoals)} +} + +func (t *GoalTool) Name() string { return "goal" } + +func (t *GoalTool) Description() string { + return "Manage autonomous goals. Use 'set' to create a new goal, 'list' to see all goals, " + + "'complete' to mark a goal done, 'update' to change a goal's description or priority, " + + "and 'drop' to abandon a goal. Goals persist across heartbeat cycles so you can work " + + "toward them over time without human prompting." +} + +func (t *GoalTool) Parameters() map[string]any { + return map[string]any{ + "type": "object", + "properties": map[string]any{ + "action": map[string]any{ + "type": "string", + "enum": []string{"set", "list", "complete", "update", "drop"}, + "description": "Action: 'set' adds a goal, 'list' shows all goals, 'complete'/'drop' closes a goal by id, 'update' modifies a goal.", + }, + "title": map[string]any{ + "type": "string", + "description": "Short title of the goal (required for 'set').", + }, + "description": map[string]any{ + "type": "string", + "description": "Detailed description of the goal and how to achieve it (used with 'set' and 'update').", + }, + "priority": map[string]any{ + "type": "integer", + "description": "Priority 1-5 where 1 is highest urgency (default: 3). Used with 'set' and 'update'.", + }, + "id": map[string]any{ + "type": "string", + "description": "Goal ID (required for 'complete', 'drop', and 'update').", + }, + }, + "required": []string{"action"}, + } +} + +func (t *GoalTool) Execute(_ context.Context, args map[string]any) *ToolResult { + action, ok := args["action"].(string) + if !ok { + return ErrorResult("action is required") + } + switch action { + case "set": + return t.setGoal(args) + case "list": + return t.listGoals() + case "complete": + return t.closeGoal(args, GoalStatusCompleted) + case "drop": + return t.closeGoal(args, GoalStatusDropped) + case "update": + return t.updateGoal(args) + default: + return ErrorResult(fmt.Sprintf("unknown action: %s", action)) + } +} + +func (t *GoalTool) setGoal(args map[string]any) *ToolResult { + title, _ := args["title"].(string) + if title == "" { + return ErrorResult("title is required for action 'set'") + } + + goals, err := t.store.load() + if err != nil { + return ErrorResult(fmt.Sprintf("loading goals: %v", err)) + } + + maxGoals := t.store.maxGoals + if maxGoals > 0 { + active := filterGoals(goals, GoalStatusActive) + if len(active) >= maxGoals { + return ErrorResult(fmt.Sprintf( + "goal limit reached (%d active goals). Complete or drop a goal before adding a new one.", maxGoals)) + } + } + + priority := 3 + if p, ok := args["priority"].(float64); ok && p >= 1 && p <= 5 { + priority = int(p) + } + description, _ := args["description"].(string) + + now := time.Now() + goal := Goal{ + ID: uuid.New().String()[:8], + Title: title, + Description: description, + Priority: priority, + Status: GoalStatusActive, + CreatedAt: now, + UpdatedAt: now, + } + + goals = append(goals, goal) + if err := t.store.save(goals); err != nil { + return ErrorResult(fmt.Sprintf("saving goal: %v", err)) + } + + return SilentResult(fmt.Sprintf("Goal set: [%s] %s (id: %s)", priorityLabel(priority), title, goal.ID)) +} + +func (t *GoalTool) listGoals() *ToolResult { + goals, err := t.store.load() + if err != nil { + return ErrorResult(fmt.Sprintf("loading goals: %v", err)) + } + + active := filterGoals(goals, GoalStatusActive) + if len(active) == 0 { + return SilentResult("No active goals.") + } + + var sb strings.Builder + sb.WriteString(fmt.Sprintf("Active goals (%d):\n", len(active))) + for _, g := range active { + sb.WriteString(fmt.Sprintf(" [%s] %s (id: %s)\n", priorityLabel(g.Priority), g.Title, g.ID)) + if g.Description != "" { + lines := strings.Split(g.Description, "\n") + for _, line := range lines { + sb.WriteString(" " + line + "\n") + } + } + } + return SilentResult(sb.String()) +} + +func (t *GoalTool) closeGoal(args map[string]any, status GoalStatus) *ToolResult { + id, _ := args["id"].(string) + if id == "" { + return ErrorResult("id is required") + } + + goals, err := t.store.load() + if err != nil { + return ErrorResult(fmt.Sprintf("loading goals: %v", err)) + } + + found := false + for i, g := range goals { + if g.ID == id { + goals[i].Status = status + goals[i].UpdatedAt = time.Now() + found = true + break + } + } + if !found { + return ErrorResult(fmt.Sprintf("goal not found: %s", id)) + } + + if err := t.store.save(goals); err != nil { + return ErrorResult(fmt.Sprintf("saving goals: %v", err)) + } + + verb := "completed" + if status == GoalStatusDropped { + verb = "dropped" + } + return SilentResult(fmt.Sprintf("Goal %s: %s", verb, id)) +} + +func (t *GoalTool) updateGoal(args map[string]any) *ToolResult { + id, _ := args["id"].(string) + if id == "" { + return ErrorResult("id is required for action 'update'") + } + + goals, err := t.store.load() + if err != nil { + return ErrorResult(fmt.Sprintf("loading goals: %v", err)) + } + + found := false + for i, g := range goals { + if g.ID == id { + if desc, ok := args["description"].(string); ok && desc != "" { + goals[i].Description = desc + } + if p, ok := args["priority"].(float64); ok && p >= 1 && p <= 5 { + goals[i].Priority = int(p) + } + if title, ok := args["title"].(string); ok && title != "" { + goals[i].Title = title + } + goals[i].UpdatedAt = time.Now() + found = true + break + } + } + if !found { + return ErrorResult(fmt.Sprintf("goal not found: %s", id)) + } + + if err := t.store.save(goals); err != nil { + return ErrorResult(fmt.Sprintf("saving goals: %v", err)) + } + + return SilentResult(fmt.Sprintf("Goal updated: %s", id)) +} + +func priorityLabel(p int) string { + switch p { + case 1: + return "P1-critical" + case 2: + return "P2-high" + case 3: + return "P3-normal" + case 4: + return "P4-low" + case 5: + return "P5-someday" + default: + return fmt.Sprintf("P%d", p) + } +} diff --git a/pkg/tools/registry.go b/pkg/tools/registry.go index 0b0f51cc1..89295537c 100644 --- a/pkg/tools/registry.go +++ b/pkg/tools/registry.go @@ -8,8 +8,8 @@ import ( "sync/atomic" "time" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/providers" ) type ToolEntry struct { diff --git a/pkg/tools/registry_test.go b/pkg/tools/registry_test.go index 967758dfa..5ac3a3226 100644 --- a/pkg/tools/registry_test.go +++ b/pkg/tools/registry_test.go @@ -7,7 +7,7 @@ import ( "sync" "testing" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/sipeed/piconomous/pkg/providers" ) // --- mock types --- diff --git a/pkg/tools/search_tool.go b/pkg/tools/search_tool.go index f41c80d90..1ddd573dd 100644 --- a/pkg/tools/search_tool.go +++ b/pkg/tools/search_tool.go @@ -8,8 +8,8 @@ import ( "strings" "sync" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/utils" ) const ( diff --git a/pkg/tools/send_file.go b/pkg/tools/send_file.go index a67bd4210..e25167615 100644 --- a/pkg/tools/send_file.go +++ b/pkg/tools/send_file.go @@ -11,8 +11,8 @@ import ( "github.com/h2non/filetype" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/media" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/media" ) // SendFileTool allows the LLM to send a local file (image, document, etc.) diff --git a/pkg/tools/send_file_test.go b/pkg/tools/send_file_test.go index 6daaab31c..2370b69d4 100644 --- a/pkg/tools/send_file_test.go +++ b/pkg/tools/send_file_test.go @@ -8,8 +8,8 @@ import ( "strings" "testing" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/media" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/media" ) func TestSendFileTool_MissingPath(t *testing.T) { diff --git a/pkg/tools/shell.go b/pkg/tools/shell.go index 78ad2b26d..3010fb71f 100644 --- a/pkg/tools/shell.go +++ b/pkg/tools/shell.go @@ -13,8 +13,8 @@ import ( "strings" "time" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/constants" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/constants" ) type ExecTool struct { diff --git a/pkg/tools/shell_test.go b/pkg/tools/shell_test.go index f8f83ea74..7fcd0ad99 100644 --- a/pkg/tools/shell_test.go +++ b/pkg/tools/shell_test.go @@ -8,7 +8,7 @@ import ( "testing" "time" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/config" ) // TestShellTool_Success verifies successful command execution @@ -604,7 +604,7 @@ func TestShellTool_URLsNotBlocked(t *testing.T) { "wget http://example.com/file", "browser open https://github.com/user/repo", "fetch ftp://ftp.example.com/file.txt", - "git clone https://github.com/sipeed/picoclaw.git", + "git clone https://github.com/sipeed/piconomous.git", } for _, cmd := range commands { diff --git a/pkg/tools/skills_install.go b/pkg/tools/skills_install.go index 71bfe730b..9c6c774d5 100644 --- a/pkg/tools/skills_install.go +++ b/pkg/tools/skills_install.go @@ -9,10 +9,10 @@ import ( "sync" "time" - "github.com/sipeed/picoclaw/pkg/fileutil" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/skills" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/pkg/fileutil" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/skills" + "github.com/sipeed/piconomous/pkg/utils" ) // InstallSkillTool allows the LLM agent to install skills from registries. diff --git a/pkg/tools/skills_install_test.go b/pkg/tools/skills_install_test.go index 676fcecc0..9dfcef9c6 100644 --- a/pkg/tools/skills_install_test.go +++ b/pkg/tools/skills_install_test.go @@ -9,7 +9,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/sipeed/picoclaw/pkg/skills" + "github.com/sipeed/piconomous/pkg/skills" ) func TestInstallSkillToolName(t *testing.T) { diff --git a/pkg/tools/skills_search.go b/pkg/tools/skills_search.go index 2b6cffd38..9a02766dc 100644 --- a/pkg/tools/skills_search.go +++ b/pkg/tools/skills_search.go @@ -5,7 +5,7 @@ import ( "fmt" "strings" - "github.com/sipeed/picoclaw/pkg/skills" + "github.com/sipeed/piconomous/pkg/skills" ) // FindSkillsTool allows the LLM agent to search for installable skills from registries. diff --git a/pkg/tools/skills_search_test.go b/pkg/tools/skills_search_test.go index 0e5387cf5..0ea4e108b 100644 --- a/pkg/tools/skills_search_test.go +++ b/pkg/tools/skills_search_test.go @@ -6,7 +6,7 @@ import ( "github.com/stretchr/testify/assert" - "github.com/sipeed/picoclaw/pkg/skills" + "github.com/sipeed/piconomous/pkg/skills" ) func TestFindSkillsToolName(t *testing.T) { diff --git a/pkg/tools/subagent.go b/pkg/tools/subagent.go index c37a5ee0f..b08bf45c2 100644 --- a/pkg/tools/subagent.go +++ b/pkg/tools/subagent.go @@ -6,7 +6,7 @@ import ( "sync" "time" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/sipeed/piconomous/pkg/providers" ) type SubagentTask struct { diff --git a/pkg/tools/subagent_tool_test.go b/pkg/tools/subagent_tool_test.go index 4b6f130a5..607eefc43 100644 --- a/pkg/tools/subagent_tool_test.go +++ b/pkg/tools/subagent_tool_test.go @@ -5,7 +5,7 @@ import ( "strings" "testing" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/sipeed/piconomous/pkg/providers" ) // MockLLMProvider is a test implementation of LLMProvider diff --git a/pkg/tools/toolloop.go b/pkg/tools/toolloop.go index 244f0d4a2..09b99ceee 100644 --- a/pkg/tools/toolloop.go +++ b/pkg/tools/toolloop.go @@ -1,8 +1,8 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// Piconomous - Ultra-lightweight personal AI agent // Inspired by and based on nanobot: https://github.com/HKUDS/nanobot // License: MIT // -// Copyright (c) 2026 PicoClaw contributors +// Copyright (c) 2026 Piconomous contributors package tools @@ -12,9 +12,9 @@ import ( "fmt" "sync" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/providers" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/providers" + "github.com/sipeed/piconomous/pkg/utils" ) // ToolLoopConfig configures the tool execution loop. diff --git a/pkg/tools/web.go b/pkg/tools/web.go index 42cf79578..4f8761622 100644 --- a/pkg/tools/web.go +++ b/pkg/tools/web.go @@ -16,14 +16,14 @@ import ( "sync/atomic" "time" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/utils" ) const ( userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" - userAgentHonest = "picoclaw/%s (+https://github.com/sipeed/picoclaw; AI assistant bot)" + userAgentHonest = "piconomous/%s (+https://github.com/sipeed/piconomous; AI assistant bot)" // HTTP client timeouts for web tool providers. searchTimeout = 10 * time.Second // Brave, Tavily, DuckDuckGo @@ -517,7 +517,7 @@ func (p *SearXNGSearchProvider) Search(ctx context.Context, query string, count result.Results = result.Results[:count] } - // Format results in standard PicoClaw format + // Format results in standard Piconomous format var b strings.Builder b.WriteString(fmt.Sprintf("Results for: %s (via SearXNG)\n", query)) for i, r := range result.Results { @@ -945,7 +945,7 @@ func (t *WebFetchTool) Execute(ctx context.Context, args map[string]any) *ToolRe } // Cloudflare (and similar WAFs) signal bot challenges with 403 + cf-mitigated: challenge. - // Retry once with an honest User-Agent that identifies picoclaw, which some + // Retry once with an honest User-Agent that identifies piconomous, which some // operators explicitly allow-list for AI assistants. if resp.StatusCode == http.StatusForbidden && resp.Header.Get("Cf-Mitigated") == "challenge" { logger.DebugCF("tool", "Cloudflare challenge detected, retrying with honest User-Agent", diff --git a/pkg/tools/web_test.go b/pkg/tools/web_test.go index 98c763193..9967ae5d1 100644 --- a/pkg/tools/web_test.go +++ b/pkg/tools/web_test.go @@ -12,7 +12,7 @@ import ( "testing" "time" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/piconomous/pkg/logger" ) const ( @@ -1070,7 +1070,7 @@ func TestWebTool_TavilySearch_Success(t *testing.T) { } // TestWebFetchTool_CloudflareChallenge_RetryWithHonestUA verifies that a 403 response -// with cf-mitigated: challenge triggers a retry using the honest picoclaw User-Agent, +// with cf-mitigated: challenge triggers a retry using the honest piconomous User-Agent, // and that the retry response is returned when it succeeds. func TestWebFetchTool_CloudflareChallenge_RetryWithHonestUA(t *testing.T) { withPrivateWebFetchHostsAllowed(t) @@ -1118,9 +1118,9 @@ func TestWebFetchTool_CloudflareChallenge_RetryWithHonestUA(t *testing.T) { if receivedUAs[0] != userAgent { t.Errorf("first request UA = %q, want %q", receivedUAs[0], userAgent) } - // Second request must use the honest picoclaw user agent - if !strings.Contains(receivedUAs[1], "picoclaw") { - t.Errorf("retry request UA = %q, want it to contain 'picoclaw'", receivedUAs[1]) + // Second request must use the honest piconomous user agent + if !strings.Contains(receivedUAs[1], "piconomous") { + t.Errorf("retry request UA = %q, want it to contain 'piconomous'", receivedUAs[1]) } } diff --git a/pkg/utils/download.go b/pkg/utils/download.go index 5d9a13a30..96970a20c 100644 --- a/pkg/utils/download.go +++ b/pkg/utils/download.go @@ -7,7 +7,7 @@ import ( "net/http" "os" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/piconomous/pkg/logger" ) // DownloadToFile streams an HTTP response body to a temporary file in small @@ -46,7 +46,7 @@ func DownloadToFile(ctx context.Context, client *http.Client, req *http.Request, } // Create temp file. - tmpFile, err := os.CreateTemp("", "picoclaw-dl-*") + tmpFile, err := os.CreateTemp("", "piconomous-dl-*") if err != nil { return "", fmt.Errorf("failed to create temp file: %w", err) } diff --git a/pkg/utils/markdown_test.go b/pkg/utils/markdown_test.go index 72277fb91..e52852c43 100644 --- a/pkg/utils/markdown_test.go +++ b/pkg/utils/markdown_test.go @@ -3,7 +3,7 @@ package utils import ( "testing" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/piconomous/pkg/logger" ) func TestHtmlToMarkdown(t *testing.T) { diff --git a/pkg/utils/media.go b/pkg/utils/media.go index 82e9f5f45..dd66f1609 100644 --- a/pkg/utils/media.go +++ b/pkg/utils/media.go @@ -11,8 +11,8 @@ import ( "github.com/google/uuid" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/media" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/media" ) // IsAudioFile checks if a file is an audio file based on its filename extension and content type. diff --git a/pkg/utils/zip.go b/pkg/utils/zip.go index 919ce5a20..fccde7314 100644 --- a/pkg/utils/zip.go +++ b/pkg/utils/zip.go @@ -8,7 +8,7 @@ import ( "path/filepath" "strings" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/piconomous/pkg/logger" ) // ExtractZipFile extracts a ZIP archive from disk to targetDir. diff --git a/pkg/voice/transcriber.go b/pkg/voice/transcriber.go index e949d7a22..bf2e577db 100644 --- a/pkg/voice/transcriber.go +++ b/pkg/voice/transcriber.go @@ -13,9 +13,9 @@ import ( "strings" "time" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/utils" ) type Transcriber interface { diff --git a/pkg/voice/transcriber_test.go b/pkg/voice/transcriber_test.go index 9b6add333..761beb549 100644 --- a/pkg/voice/transcriber_test.go +++ b/pkg/voice/transcriber_test.go @@ -9,7 +9,7 @@ import ( "path/filepath" "testing" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/config" ) // Ensure GroqTranscriber satisfies the Transcriber interface at compile time. diff --git a/scripts/build-macos-app.sh b/scripts/build-macos-app.sh index 76cc72938..34fc90a38 100755 --- a/scripts/build-macos-app.sh +++ b/scripts/build-macos-app.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Build macOS .app bundle for PicoClaw Launcher +# Build macOS .app bundle for Piconomous Launcher set -e @@ -12,12 +12,12 @@ fi echo "executable: $EXECUTABLE" -APP_NAME="PicoClaw Launcher" +APP_NAME="Piconomous Launcher" APP_PATH="./build/${APP_NAME}.app" APP_CONTENTS="${APP_PATH}/Contents" APP_MACOS="${APP_CONTENTS}/MacOS" APP_RESOURCES="${APP_CONTENTS}/Resources" -APP_EXECUTABLE="picoclaw-launcher" +APP_EXECUTABLE="piconomous-launcher" ICON_SOURCE="./scripts/icon.icns" # Clean up existing .app @@ -40,10 +40,10 @@ else echo "Run: make build in web dir" exit 1 fi -if [ -f "./build/picoclaw" ]; then - cp "./build/picoclaw" "${APP_MACOS}/" +if [ -f "./build/piconomous" ]; then + cp "./build/piconomous" "${APP_MACOS}/" else - echo "Error: ./build/picoclaw not found. Please build the main file first." + echo "Error: ./build/piconomous not found. Please build the main file first." echo "Run: make build" exit 1 fi @@ -57,13 +57,13 @@ cat > "${APP_CONTENTS}/Info.plist" << 'EOF' CFBundleExecutable - picoclaw-launcher + piconomous-launcher CFBundleIdentifier - com.picoclaw.launcher + com.piconomous.launcher CFBundleName - PicoClaw Launcher + Piconomous Launcher CFBundleDisplayName - PicoClaw Launcher + Piconomous Launcher CFBundleIconFile icon.icns CFBundlePackageType @@ -98,7 +98,7 @@ echo "==========================================" echo "Successfully created: ${APP_PATH}" echo "==========================================" echo "" -echo "To launch PicoClaw:" +echo "To launch Piconomous:" echo " 1. Double-click ${APP_NAME}.app in Finder" echo " 2. Or use: open ${APP_PATH}" echo "" diff --git a/scripts/test-docker-mcp.sh b/scripts/test-docker-mcp.sh index 9d582ffa0..e142edb32 100755 --- a/scripts/test-docker-mcp.sh +++ b/scripts/test-docker-mcp.sh @@ -4,7 +4,7 @@ set -e COMPOSE_FILE="docker/docker-compose.full.yml" -SERVICE="picoclaw-agent" +SERVICE="piconomous-agent" echo "🧪 Testing MCP tools in Docker container (full-featured image)..." echo "" diff --git a/scripts/test-irc.sh b/scripts/test-irc.sh index 40db01756..10857220b 100755 --- a/scripts/test-irc.sh +++ b/scripts/test-irc.sh @@ -6,7 +6,7 @@ set -e -CONTAINER_NAME="picoclaw-test-ergo" +CONTAINER_NAME="piconomous-test-ergo" IRC_PORT=6667 # Clean up any previous instance @@ -32,7 +32,7 @@ done echo "" echo "IRC server ready on localhost:$IRC_PORT" echo "" -echo "Add this to your ~/.picoclaw/config.json under \"channels\":" +echo "Add this to your ~/.piconomous/config.json under \"channels\":" echo "" echo ' "irc": {' echo ' "enabled": true,' @@ -44,8 +44,8 @@ echo ' "allow_from": [],' echo ' "group_trigger": { "mention_only": true }' echo ' }' echo "" -echo "Then run picoclaw:" -echo " cd packages/picoclaw && go run ./cmd/picoclaw gateway" +echo "Then run piconomous:" +echo " cd packages/piconomous && go run ./cmd/piconomous gateway" echo "" echo "Connect with an IRC client:" echo " irssi: /connect localhost $IRC_PORT" diff --git a/web/Makefile b/web/Makefile index 06717f2b9..7c4e286b8 100644 --- a/web/Makefile +++ b/web/Makefile @@ -13,7 +13,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 $(WEB_GO) version | awk '{print $$3}') -CONFIG_PKG=github.com/sipeed/picoclaw/pkg/config +CONFIG_PKG=github.com/sipeed/piconomous/pkg/config 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 @@ -60,7 +60,7 @@ endif # Run both frontend and backend dev servers dev: - @if [ ! -f $(BUILD_DIR)/picoclaw-launcher ] || [ ! -d backend/dist ]; then \ + @if [ ! -f $(BUILD_DIR)/piconomous-launcher ] || [ ! -d backend/dist ]; then \ echo "Build artifacts not found, building..."; \ $(MAKE) build; \ fi @@ -78,7 +78,7 @@ dev-backend: # Build frontend and embed into Go binary build: cd frontend && pnpm build:backend - ${WEB_GO} build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(BUILD_DIR)/picoclaw-launcher ./backend/ + ${WEB_GO} build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(BUILD_DIR)/piconomous-launcher ./backend/ # Run all tests test: diff --git a/web/README.md b/web/README.md index 6ec247bae..fc90f9941 100644 --- a/web/README.md +++ b/web/README.md @@ -1,13 +1,13 @@ # Picoclaw Web -This directory contains the standalone web service for `picoclaw`. -It provides a complete unified web interface, acting as a dashboard, configuration center, and interactive console (channel client) for the core `picoclaw` engine. +This directory contains the standalone web service for `piconomous`. +It provides a complete unified web interface, acting as a dashboard, configuration center, and interactive console (channel client) for the core `piconomous` engine. ## Architecture The service is structured as a monorepo containing both the backend and frontend code to ensure high cohesion and simplify deployment. -* **`backend/`**: The Go-based web server. It provides RESTful APIs, manages WebSocket connections for chat, and handles the lifecycle of the `picoclaw` process. It eventually embeds the compiled frontend assets into a single executable. +* **`backend/`**: The Go-based web server. It provides RESTful APIs, manages WebSocket connections for chat, and handles the lifecycle of the `piconomous` process. It eventually embeds the compiled frontend assets into a single executable. * **`frontend/`**: The Vite + React + TanStack Router single-page application (SPA). It provides the interactive user interface. ## Getting Started @@ -40,7 +40,7 @@ Build the frontend and embed it into a single Go binary: make build ``` -The output binary is `backend/picoclaw-web`. +The output binary is `backend/piconomous-web`. ### Other Commands diff --git a/web/backend/api/config.go b/web/backend/api/config.go index a7d5b3c5d..f65f10d61 100644 --- a/web/backend/api/config.go +++ b/web/backend/api/config.go @@ -7,7 +7,7 @@ import ( "net/http" "regexp" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/config" ) // registerConfigRoutes binds configuration management endpoints to the ServeMux. diff --git a/web/backend/api/config_test.go b/web/backend/api/config_test.go index 54ec8e857..5e0333f1d 100644 --- a/web/backend/api/config_test.go +++ b/web/backend/api/config_test.go @@ -6,7 +6,7 @@ import ( "net/http/httptest" "testing" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/config" ) func TestHandleUpdateConfig_PreservesExecAllowRemoteDefaultWhenOmitted(t *testing.T) { @@ -20,7 +20,7 @@ func TestHandleUpdateConfig_PreservesExecAllowRemoteDefaultWhenOmitted(t *testin req := httptest.NewRequest(http.MethodPut, "/api/config", bytes.NewBufferString(`{ "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace" + "workspace": "~/.piconomous/workspace" } }, "model_list": [ @@ -59,7 +59,7 @@ func TestHandleUpdateConfig_DoesNotInheritDefaultModelFields(t *testing.T) { req := httptest.NewRequest(http.MethodPut, "/api/config", bytes.NewBufferString(`{ "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace" + "workspace": "~/.piconomous/workspace" } }, "model_list": [ diff --git a/web/backend/api/gateway.go b/web/backend/api/gateway.go index d5ccd6e29..5396a2665 100644 --- a/web/backend/api/gateway.go +++ b/web/backend/api/gateway.go @@ -17,10 +17,10 @@ import ( "syscall" "time" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/health" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/web/backend/utils" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/health" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/web/backend/utils" ) // gateway holds the state for the managed gateway process. @@ -378,7 +378,7 @@ func (h *Handler) startGatewayLocked(initialStatus string, existingPid int) (int } // Start new process - // Locate the picoclaw executable + // Locate the piconomous executable execPath := utils.FindPicoclawBinary() cmd = exec.Command(execPath, "gateway", "-E") @@ -421,7 +421,7 @@ func (h *Handler) startGatewayLocked(initialStatus string, existingPid int) (int gateway.bootDefaultModel = defaultModelName setGatewayRuntimeStatusLocked(initialStatus) pid = cmd.Process.Pid - logger.InfoC("gateway", fmt.Sprintf("Started picoclaw gateway (PID: %d) from %s", pid, execPath)) + logger.InfoC("gateway", fmt.Sprintf("Started piconomous gateway (PID: %d) from %s", pid, execPath)) // Capture stdout/stderr in background go scanPipe(stdoutPipe, gateway.logs) @@ -476,7 +476,7 @@ func (h *Handler) startGatewayLocked(initialStatus string, existingPid int) (int return pid, nil } -// handleGatewayStart starts the picoclaw gateway subprocess. +// handleGatewayStart starts the piconomous gateway subprocess. // // POST /api/gateway/start func (h *Handler) handleGatewayStart(w http.ResponseWriter, r *http.Request) { diff --git a/web/backend/api/gateway_host.go b/web/backend/api/gateway_host.go index 592571a28..3e535f166 100644 --- a/web/backend/api/gateway_host.go +++ b/web/backend/api/gateway_host.go @@ -7,7 +7,7 @@ import ( "strconv" "strings" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/config" ) func (h *Handler) effectiveLauncherPublic() bool { diff --git a/web/backend/api/gateway_host_test.go b/web/backend/api/gateway_host_test.go index ae3434862..639939ebc 100644 --- a/web/backend/api/gateway_host_test.go +++ b/web/backend/api/gateway_host_test.go @@ -9,8 +9,8 @@ import ( "testing" "time" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/web/backend/launcherconfig" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/web/backend/launcherconfig" ) func TestGatewayHostOverrideUsesExplicitRuntimePublic(t *testing.T) { diff --git a/web/backend/api/gateway_test.go b/web/backend/api/gateway_test.go index 5c94f0b89..ac9a95e30 100644 --- a/web/backend/api/gateway_test.go +++ b/web/backend/api/gateway_test.go @@ -15,9 +15,9 @@ import ( "testing" "time" - "github.com/sipeed/picoclaw/pkg/auth" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/web/backend/utils" + "github.com/sipeed/piconomous/pkg/auth" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/web/backend/utils" ) func startLongRunningProcess(t *testing.T) *exec.Cmd { @@ -746,11 +746,11 @@ func TestGatewayRestartReturnsErrorStatusWhenReplacementFailsToStart(t *testing. t.Fatalf("SaveConfig() error = %v", err) } - invalidBinaryPath := filepath.Join(t.TempDir(), "fake-picoclaw") + invalidBinaryPath := filepath.Join(t.TempDir(), "fake-piconomous") if err := os.WriteFile(invalidBinaryPath, []byte("#!/bin/sh\n"), 0o644); err != nil { t.Fatalf("WriteFile() error = %v", err) } - t.Setenv("PICOCLAW_BINARY", invalidBinaryPath) + t.Setenv("PICONOMOUS_BINARY", invalidBinaryPath) h := NewHandler(configPath) mux := http.NewServeMux() @@ -926,12 +926,12 @@ func TestGatewayClearLogsResetsBufferedHistory(t *testing.T) { func TestFindPicoclawBinary_EnvOverride(t *testing.T) { // Create a temporary file to act as the mock binary tmpDir := t.TempDir() - mockBinary := filepath.Join(tmpDir, "picoclaw-mock") + mockBinary := filepath.Join(tmpDir, "piconomous-mock") if err := os.WriteFile(mockBinary, []byte("mock"), 0o755); err != nil { t.Fatalf("WriteFile() error = %v", err) } - t.Setenv("PICOCLAW_BINARY", mockBinary) + t.Setenv("PICONOMOUS_BINARY", mockBinary) got := utils.FindPicoclawBinary() if got != mockBinary { @@ -940,12 +940,12 @@ func TestFindPicoclawBinary_EnvOverride(t *testing.T) { } func TestFindPicoclawBinary_EnvOverride_InvalidPath(t *testing.T) { - // When PICOCLAW_BINARY points to a non-existent path, fall through to next strategy - t.Setenv("PICOCLAW_BINARY", "/nonexistent/picoclaw-binary") + // When PICONOMOUS_BINARY points to a non-existent path, fall through to next strategy + t.Setenv("PICONOMOUS_BINARY", "/nonexistent/piconomous-binary") got := utils.FindPicoclawBinary() - // Should not return the invalid path; falls back to "picoclaw" or another found path - if got == "/nonexistent/picoclaw-binary" { + // Should not return the invalid path; falls back to "piconomous" or another found path + if got == "/nonexistent/piconomous-binary" { t.Errorf("FindPicoclawBinary() returned invalid env path %q, expected fallback", got) } } diff --git a/web/backend/api/launcher_config.go b/web/backend/api/launcher_config.go index e149d5671..a843f45bb 100644 --- a/web/backend/api/launcher_config.go +++ b/web/backend/api/launcher_config.go @@ -5,7 +5,7 @@ import ( "fmt" "net/http" - "github.com/sipeed/picoclaw/web/backend/launcherconfig" + "github.com/sipeed/piconomous/web/backend/launcherconfig" ) type launcherConfigPayload struct { diff --git a/web/backend/api/launcher_config_test.go b/web/backend/api/launcher_config_test.go index 0d6af823c..65f60c92e 100644 --- a/web/backend/api/launcher_config_test.go +++ b/web/backend/api/launcher_config_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - "github.com/sipeed/picoclaw/web/backend/launcherconfig" + "github.com/sipeed/piconomous/web/backend/launcherconfig" ) func TestGetLauncherConfigUsesRuntimeFallback(t *testing.T) { diff --git a/web/backend/api/model_status.go b/web/backend/api/model_status.go index 22bf5c15b..f0b35e665 100644 --- a/web/backend/api/model_status.go +++ b/web/backend/api/model_status.go @@ -9,7 +9,7 @@ import ( "strings" "time" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/config" ) const modelProbeTimeout = 800 * time.Millisecond diff --git a/web/backend/api/models.go b/web/backend/api/models.go index 7f3d29c77..9a1132f2e 100644 --- a/web/backend/api/models.go +++ b/web/backend/api/models.go @@ -8,7 +8,7 @@ import ( "strconv" "sync" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/config" ) // registerModelRoutes binds model list management endpoints to the ServeMux. diff --git a/web/backend/api/models_test.go b/web/backend/api/models_test.go index 2377b5b66..1045ee86b 100644 --- a/web/backend/api/models_test.go +++ b/web/backend/api/models_test.go @@ -8,8 +8,8 @@ import ( "testing" "time" - "github.com/sipeed/picoclaw/pkg/auth" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/auth" + "github.com/sipeed/piconomous/pkg/config" ) func resetModelProbeHooks(t *testing.T) { diff --git a/web/backend/api/oauth.go b/web/backend/api/oauth.go index 4edabb9ab..0b140867a 100644 --- a/web/backend/api/oauth.go +++ b/web/backend/api/oauth.go @@ -11,10 +11,10 @@ import ( "strings" "time" - "github.com/sipeed/picoclaw/pkg/auth" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/sipeed/piconomous/pkg/auth" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/pkg/providers" ) const ( @@ -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": "piconomous-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.

", + "Piconomous OAuth

%s

%s

You can close this window.

", string(payloadJSON), html.EscapeString(title), html.EscapeString(message), diff --git a/web/backend/api/oauth_test.go b/web/backend/api/oauth_test.go index 7d63abbd4..1ed45c8b5 100644 --- a/web/backend/api/oauth_test.go +++ b/web/backend/api/oauth_test.go @@ -11,8 +11,8 @@ import ( "testing" "time" - "github.com/sipeed/picoclaw/pkg/auth" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/auth" + "github.com/sipeed/piconomous/pkg/config" ) func TestOAuthLoginRejectsUnsupportedMethod(t *testing.T) { @@ -223,13 +223,13 @@ func setupOAuthTestEnv(t *testing.T) (string, func()) { tmp := t.TempDir() oldHome := os.Getenv("HOME") - oldPicoHome := os.Getenv("PICOCLAW_HOME") + oldPicoHome := os.Getenv("PICONOMOUS_HOME") if err := os.Setenv("HOME", tmp); err != nil { t.Fatalf("set HOME: %v", err) } - if err := os.Setenv("PICOCLAW_HOME", filepath.Join(tmp, ".picoclaw")); err != nil { - t.Fatalf("set PICOCLAW_HOME: %v", err) + if err := os.Setenv("PICONOMOUS_HOME", filepath.Join(tmp, ".piconomous")); err != nil { + t.Fatalf("set PICONOMOUS_HOME: %v", err) } cfg := config.DefaultConfig() @@ -248,9 +248,9 @@ func setupOAuthTestEnv(t *testing.T) (string, func()) { cleanup := func() { _ = os.Setenv("HOME", oldHome) if oldPicoHome == "" { - _ = os.Unsetenv("PICOCLAW_HOME") + _ = os.Unsetenv("PICONOMOUS_HOME") } else { - _ = os.Setenv("PICOCLAW_HOME", oldPicoHome) + _ = os.Setenv("PICONOMOUS_HOME", oldPicoHome) } } return configPath, cleanup diff --git a/web/backend/api/pico.go b/web/backend/api/pico.go index a880f2f0c..429aadbfa 100644 --- a/web/backend/api/pico.go +++ b/web/backend/api/pico.go @@ -9,7 +9,7 @@ import ( "net/http/httputil" "time" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/config" ) // registerPicoRoutes binds Pico Channel management endpoints to the ServeMux. diff --git a/web/backend/api/pico_test.go b/web/backend/api/pico_test.go index 075da4ddc..1d1db2e7c 100644 --- a/web/backend/api/pico_test.go +++ b/web/backend/api/pico_test.go @@ -10,7 +10,7 @@ import ( "strconv" "testing" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/config" ) func TestEnsurePicoChannel_FreshConfig(t *testing.T) { diff --git a/web/backend/api/router.go b/web/backend/api/router.go index e4df86ed9..f99ce3a6e 100644 --- a/web/backend/api/router.go +++ b/web/backend/api/router.go @@ -4,7 +4,7 @@ import ( "net/http" "sync" - "github.com/sipeed/picoclaw/web/backend/launcherconfig" + "github.com/sipeed/piconomous/web/backend/launcherconfig" ) // Handler serves HTTP API requests. diff --git a/web/backend/api/session.go b/web/backend/api/session.go index 42d451a05..f7660591e 100644 --- a/web/backend/api/session.go +++ b/web/backend/api/session.go @@ -12,8 +12,8 @@ import ( "strings" "time" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/providers" ) // registerSessionRoutes binds session list and detail endpoints to the ServeMux. @@ -248,7 +248,7 @@ func truncateRunes(s string, maxLen int) string { } // sessionsDir resolves the path to the gateway's session storage directory. -// It reads the workspace from config, falling back to ~/.picoclaw/workspace. +// It reads the workspace from config, falling back to ~/.piconomous/workspace. func (h *Handler) sessionsDir() (string, error) { cfg, err := config.LoadConfig(h.configPath) if err != nil { @@ -258,7 +258,7 @@ func (h *Handler) sessionsDir() (string, error) { workspace := cfg.Agents.Defaults.Workspace if workspace == "" { home, _ := os.UserHomeDir() - workspace = filepath.Join(home, ".picoclaw", "workspace") + workspace = filepath.Join(home, ".piconomous", "workspace") } // Expand ~ prefix diff --git a/web/backend/api/session_test.go b/web/backend/api/session_test.go index 21ef5b5b8..876152407 100644 --- a/web/backend/api/session_test.go +++ b/web/backend/api/session_test.go @@ -8,10 +8,10 @@ import ( "path/filepath" "testing" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/memory" - "github.com/sipeed/picoclaw/pkg/providers" - "github.com/sipeed/picoclaw/pkg/session" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/memory" + "github.com/sipeed/piconomous/pkg/providers" + "github.com/sipeed/piconomous/pkg/session" ) func sessionsTestDir(t *testing.T, configPath string) string { diff --git a/web/backend/api/skills.go b/web/backend/api/skills.go index 3c2fb57dd..4244ba520 100644 --- a/web/backend/api/skills.go +++ b/web/backend/api/skills.go @@ -10,8 +10,8 @@ import ( "regexp" "strings" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/skills" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/skills" ) type skillSupportResponse struct { @@ -316,7 +316,7 @@ func globalConfigDir() string { if err != nil { return "" } - return filepath.Join(home, ".picoclaw") + return filepath.Join(home, ".piconomous") } func builtinSkillsDir() string { diff --git a/web/backend/api/skills_test.go b/web/backend/api/skills_test.go index 3289d5b33..7f71077b2 100644 --- a/web/backend/api/skills_test.go +++ b/web/backend/api/skills_test.go @@ -11,7 +11,7 @@ import ( "path/filepath" "testing" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/config" ) func TestHandleListSkills(t *testing.T) { @@ -54,15 +54,15 @@ func TestHandleListSkills(t *testing.T) { } builtinRoot := filepath.Join(t.TempDir(), "builtin-skills") - oldBuiltin := os.Getenv("PICOCLAW_BUILTIN_SKILLS") - if err := os.Setenv("PICOCLAW_BUILTIN_SKILLS", builtinRoot); err != nil { - t.Fatalf("Setenv(PICOCLAW_BUILTIN_SKILLS) error = %v", err) + oldBuiltin := os.Getenv("PICONOMOUS_BUILTIN_SKILLS") + if err := os.Setenv("PICONOMOUS_BUILTIN_SKILLS", builtinRoot); err != nil { + t.Fatalf("Setenv(PICONOMOUS_BUILTIN_SKILLS) error = %v", err) } defer func() { if oldBuiltin == "" { - _ = os.Unsetenv("PICOCLAW_BUILTIN_SKILLS") + _ = os.Unsetenv("PICONOMOUS_BUILTIN_SKILLS") } else { - _ = os.Setenv("PICOCLAW_BUILTIN_SKILLS", oldBuiltin) + _ = os.Setenv("PICONOMOUS_BUILTIN_SKILLS", oldBuiltin) } }() diff --git a/web/backend/api/startup.go b/web/backend/api/startup.go index 1c685bc90..51897a872 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 = "PiconomousLauncher" + launchAgentLabel = "io.piconomous.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", "piconomous-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=Piconomous Web", + "Comment=Start Piconomous Web on login", "Exec=" + buildLinuxExecLine(exePath, args), "Terminal=false", "X-GNOME-Autostart-enabled=true", diff --git a/web/backend/api/startup_test.go b/web/backend/api/startup_test.go index cfa9b4c53..7ea6069a3 100644 --- a/web/backend/api/startup_test.go +++ b/web/backend/api/startup_test.go @@ -5,7 +5,7 @@ import ( "strings" "testing" - "github.com/sipeed/picoclaw/web/backend/launcherconfig" + "github.com/sipeed/piconomous/web/backend/launcherconfig" ) func TestResolveLaunchCommandUsesConfigFileDefaults(t *testing.T) { @@ -46,7 +46,7 @@ func TestResolveLaunchCommandUsesConfigFileDefaults(t *testing.T) { } func TestBuildDarwinPlistIncludesRunAtLoad(t *testing.T) { - plist := buildDarwinPlist("/tmp/picoclaw-web", []string{"-no-browser", "/tmp/config.json"}) + plist := buildDarwinPlist("/tmp/piconomous-web", []string{"-no-browser", "/tmp/config.json"}) if !strings.Contains(plist, "RunAtLoad") { t.Fatalf("plist missing RunAtLoad key:\n%s", plist) } diff --git a/web/backend/api/tools.go b/web/backend/api/tools.go index 9df4a7091..fce74fddf 100644 --- a/web/backend/api/tools.go +++ b/web/backend/api/tools.go @@ -6,7 +6,7 @@ import ( "net/http" "runtime" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/config" ) type toolCatalogEntry struct { diff --git a/web/backend/api/tools_test.go b/web/backend/api/tools_test.go index 646cefbe2..9ab910403 100644 --- a/web/backend/api/tools_test.go +++ b/web/backend/api/tools_test.go @@ -8,7 +8,7 @@ import ( "runtime" "testing" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/config" ) func TestHandleListTools(t *testing.T) { diff --git a/web/backend/app_runtime.go b/web/backend/app_runtime.go index e3a9ec64f..62ad89d2a 100644 --- a/web/backend/app_runtime.go +++ b/web/backend/app_runtime.go @@ -6,8 +6,8 @@ import ( "fmt" "time" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/web/backend/utils" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/web/backend/utils" ) const ( diff --git a/web/backend/embed.go b/web/backend/embed.go index cf0c76bce..2c8044775 100644 --- a/web/backend/embed.go +++ b/web/backend/embed.go @@ -9,7 +9,7 @@ import ( "path" "strings" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/piconomous/pkg/logger" ) //go:embed all:dist diff --git a/web/backend/i18n.go b/web/backend/i18n.go index 9cda9e5d5..a7956433c 100644 --- a/web/backend/i18n.go +++ b/web/backend/i18n.go @@ -46,9 +46,9 @@ var translations = map[Language]map[TranslationKey]string{ LanguageEnglish: { AppTooltip: "%s - Web Console", MenuOpen: "Open Console", - MenuOpenTooltip: "Open PicoClaw console in browser", + MenuOpenTooltip: "Open Piconomous console in browser", MenuAbout: "About", - MenuAboutTooltip: "About PicoClaw", + MenuAboutTooltip: "About Piconomous", MenuVersion: "Version: %s", MenuVersionTooltip: "Current version number", MenuGitHub: "GitHub", @@ -56,16 +56,16 @@ var translations = map[Language]map[TranslationKey]string{ MenuRestart: "Restart Service", MenuRestartTooltip: "Restart Gateway service", MenuQuit: "Quit", - MenuQuitTooltip: "Exit PicoClaw", - Exiting: "Exiting PicoClaw...", - DocUrl: "https://docs.picoclaw.io/docs/", + MenuQuitTooltip: "Exit Piconomous", + Exiting: "Exiting Piconomous...", + DocUrl: "https://docs.piconomous.io/docs/", }, LanguageChinese: { AppTooltip: "%s - Web Console", MenuOpen: "打开控制台", - MenuOpenTooltip: "在浏览器中打开 PicoClaw 控制台", + MenuOpenTooltip: "在浏览器中打开 Piconomous 控制台", MenuAbout: "关于", - MenuAboutTooltip: "关于 PicoClaw", + MenuAboutTooltip: "关于 Piconomous", MenuVersion: "版本: %s", MenuVersionTooltip: "当前版本号", MenuGitHub: "GitHub", @@ -73,9 +73,9 @@ var translations = map[Language]map[TranslationKey]string{ MenuRestart: "重启服务", MenuRestartTooltip: "重启核心服务", MenuQuit: "退出", - MenuQuitTooltip: "退出 PicoClaw", - Exiting: "正在退出 PicoClaw...", - DocUrl: "https://docs.picoclaw.io/zh-Hans/docs/", + MenuQuitTooltip: "退出 Piconomous", + Exiting: "正在退出 Piconomous...", + DocUrl: "https://docs.piconomous.io/zh-Hans/docs/", }, } diff --git a/web/backend/main.go b/web/backend/main.go index b1db3c57a..4053156a7 100644 --- a/web/backend/main.go +++ b/web/backend/main.go @@ -1,13 +1,13 @@ -// PicoClaw Web Console - Web-based chat and management interface +// Piconomous Web Console - Web-based chat and management interface // -// Provides a web UI for chatting with PicoClaw via the Pico Channel WebSocket, +// Provides a web UI for chatting with Piconomous via the Pico Channel WebSocket, // with configuration management and gateway process control. // // Usage: // -// go build -o picoclaw-web ./web/backend/ -// ./picoclaw-web [config.json] -// ./picoclaw-web -public config.json +// go build -o piconomous-web ./web/backend/ +// ./piconomous-web [config.json] +// ./piconomous-web -public config.json package main @@ -23,16 +23,16 @@ import ( "syscall" "time" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/web/backend/api" - "github.com/sipeed/picoclaw/web/backend/launcherconfig" - "github.com/sipeed/picoclaw/web/backend/middleware" - "github.com/sipeed/picoclaw/web/backend/utils" + "github.com/sipeed/piconomous/pkg/config" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/web/backend/api" + "github.com/sipeed/piconomous/web/backend/launcherconfig" + "github.com/sipeed/piconomous/web/backend/middleware" + "github.com/sipeed/piconomous/web/backend/utils" ) const ( - appName = "PicoClaw" + appName = "Piconomous" ) var ( @@ -53,10 +53,10 @@ func main() { console := flag.Bool("console", false, "Console mode, no GUI") flag.Usage = func() { - fmt.Fprintf(os.Stderr, "PicoClaw Launcher - A web-based configuration editor\n\n") + fmt.Fprintf(os.Stderr, "Piconomous Launcher - A web-based configuration editor\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] [config.json]\n\n", os.Args[0]) fmt.Fprintf(os.Stderr, "Arguments:\n") - fmt.Fprintf(os.Stderr, " config.json Path to the configuration file (default: ~/.picoclaw/config.json)\n\n") + fmt.Fprintf(os.Stderr, " config.json Path to the configuration file (default: ~/.piconomous/config.json)\n\n") fmt.Fprintf(os.Stderr, "Options:\n") flag.PrintDefaults() fmt.Fprintf(os.Stderr, "\nExamples:\n") @@ -81,15 +81,15 @@ func main() { logPath := filepath.Join(picoHome, "logs", "web.log") if err := logger.EnableFileLogging(logPath); err != nil { - // FIXME: https://github.com/sipeed/picoclaw/issues/1734 + // FIXME: https://github.com/sipeed/piconomous/issues/1734 fmt.Fprintf(os.Stderr, "Failed to initialize logger: %v\n", err) os.Exit(1) } defer logger.DisableFileLogging() } - logger.InfoC("web", "PicoClaw Launcher starting...") - logger.InfoC("web", fmt.Sprintf("PicoClaw Home: %s", picoHome)) + logger.InfoC("web", "Piconomous Launcher starting...") + logger.InfoC("web", fmt.Sprintf("Piconomous Home: %s", picoHome)) // Set language from command line or auto-detect if *lang != "" { @@ -108,7 +108,7 @@ func main() { } err = utils.EnsureOnboarded(absPath) if err != nil { - logger.Errorf("Warning: Failed to initialize PicoClaw config automatically: %v", err) + logger.Errorf("Warning: Failed to initialize Piconomous config automatically: %v", err) } var explicitPort bool diff --git a/web/backend/middleware/middleware.go b/web/backend/middleware/middleware.go index 5e0dfeb90..3d09baebf 100644 --- a/web/backend/middleware/middleware.go +++ b/web/backend/middleware/middleware.go @@ -6,7 +6,7 @@ import ( "runtime/debug" "time" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/piconomous/pkg/logger" ) // JSONContentType sets the Content-Type header to application/json for diff --git a/web/backend/systray.go b/web/backend/systray.go index fde2e115e..4526763b1 100644 --- a/web/backend/systray.go +++ b/web/backend/systray.go @@ -8,8 +8,8 @@ import ( "fyne.io/systray" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/web/backend/utils" + "github.com/sipeed/piconomous/pkg/logger" + "github.com/sipeed/piconomous/web/backend/utils" ) func runTray() { @@ -55,7 +55,7 @@ func onReady() { // Version info - do nothing, just shows current version case <-mRepo.ClickedCh: - if err := utils.OpenBrowser("https://github.com/sipeed/picoclaw"); err != nil { + if err := utils.OpenBrowser("https://github.com/sipeed/piconomous"); err != nil { logger.Errorf("Failed to open GitHub: %v", err) } diff --git a/web/backend/tray_stub_nocgo.go b/web/backend/tray_stub_nocgo.go index 13ecfd2cb..b6a27f3a7 100644 --- a/web/backend/tray_stub_nocgo.go +++ b/web/backend/tray_stub_nocgo.go @@ -10,7 +10,7 @@ import ( "syscall" "time" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/piconomous/pkg/logger" ) func runTray() { diff --git a/web/backend/utils/onboard.go b/web/backend/utils/onboard.go index 81475ac80..9fca0e2ce 100644 --- a/web/backend/utils/onboard.go +++ b/web/backend/utils/onboard.go @@ -6,7 +6,7 @@ import ( "os/exec" "strings" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/config" ) var execCommand = exec.Command diff --git a/web/backend/utils/onboard_test.go b/web/backend/utils/onboard_test.go index 06f967e76..2e5130aa8 100644 --- a/web/backend/utils/onboard_test.go +++ b/web/backend/utils/onboard_test.go @@ -46,9 +46,9 @@ func TestEnsureOnboardedRunsOnboardWhenConfigMissing(t *testing.T) { return exec.Command( "sh", "-c", - `test "$PICOCLAW_CONFIG" = "$EXPECTED_CONFIG_PATH" && -mkdir -p "$(dirname "$PICOCLAW_CONFIG")" && -printf '{}' > "$PICOCLAW_CONFIG"`, + `test "$PICONOMOUS_CONFIG" = "$EXPECTED_CONFIG_PATH" && +mkdir -p "$(dirname "$PICONOMOUS_CONFIG")" && +printf '{}' > "$PICONOMOUS_CONFIG"`, ) } diff --git a/web/backend/utils/runtime.go b/web/backend/utils/runtime.go index 772cd7ec0..ed81bd976 100644 --- a/web/backend/utils/runtime.go +++ b/web/backend/utils/runtime.go @@ -8,20 +8,20 @@ import ( "path/filepath" "runtime" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/piconomous/pkg/config" ) -// GetPicoclawHome returns the picoclaw home directory. -// Priority: $PICOCLAW_HOME > ~/.picoclaw +// GetPicoclawHome returns the piconomous home directory. +// Priority: $PICONOMOUS_HOME > ~/.piconomous func GetPicoclawHome() string { if home := os.Getenv(config.EnvHome); home != "" { return home } home, _ := os.UserHomeDir() - return filepath.Join(home, ".picoclaw") + return filepath.Join(home, ".piconomous") } -// GetDefaultConfigPath returns the default path to the picoclaw config file. +// GetDefaultConfigPath returns the default path to the piconomous config file. func GetDefaultConfigPath() string { if configPath := os.Getenv(config.EnvConfig); configPath != "" { return configPath @@ -29,15 +29,15 @@ func GetDefaultConfigPath() string { return filepath.Join(GetPicoclawHome(), "config.json") } -// FindPicoclawBinary locates the picoclaw executable. +// FindPicoclawBinary locates the piconomous executable. // Search order: -// 1. PICOCLAW_BINARY environment variable (explicit override) +// 1. PICONOMOUS_BINARY environment variable (explicit override) // 2. Same directory as the current executable -// 3. Falls back to "picoclaw" and relies on $PATH +// 3. Falls back to "piconomous" and relies on $PATH func FindPicoclawBinary() string { - binaryName := "picoclaw" + binaryName := "piconomous" if runtime.GOOS == "windows" { - binaryName = "picoclaw.exe" + binaryName = "piconomous.exe" } if p := os.Getenv(config.EnvBinary); p != "" { @@ -53,7 +53,7 @@ func FindPicoclawBinary() string { } } - return "picoclaw" + return "piconomous" } // GetLocalIP returns the local IP address of the machine. diff --git a/web/backend/winres/winres.json b/web/backend/winres/winres.json index 01ea7364c..714d1ba3e 100644 --- a/web/backend/winres/winres.json +++ b/web/backend/winres/winres.json @@ -8,10 +8,10 @@ "#1": { "0409": { "identity": { - "name": "PicoClaw Launcher", + "name": "Piconomous Launcher", "version": "0.0.0.0" }, - "description": "PicoClaw Launcher - Web-based configuration editor", + "description": "Piconomous Launcher - Web-based configuration editor", "minimum-os": "win7", "execution-level": "asInvoker", "dpi-awareness": "system", diff --git a/web/frontend/index.html b/web/frontend/index.html index d3bdd90f8..3a24ae01e 100644 --- a/web/frontend/index.html +++ b/web/frontend/index.html @@ -8,7 +8,7 @@ - PicoClaw + Piconomous diff --git a/web/frontend/package.json b/web/frontend/package.json index b1cc09b7b..52f83252d 100644 --- a/web/frontend/package.json +++ b/web/frontend/package.json @@ -1,5 +1,5 @@ { - "name": "picoclaw-web", + "name": "piconomous-web", "private": true, "version": "0.0.0", "type": "module", diff --git a/web/frontend/src/components/app-header.tsx b/web/frontend/src/components/app-header.tsx index 4f0688008..a0fce2748 100644 --- a/web/frontend/src/components/app-header.tsx +++ b/web/frontend/src/components/app-header.tsx @@ -210,7 +210,7 @@ export function AppHeader() { {/* Docs Link */} diff --git a/web/frontend/src/components/channels/channel-config-page.tsx b/web/frontend/src/components/channels/channel-config-page.tsx index b19d11e6a..90da21484 100644 --- a/web/frontend/src/components/channels/channel-config-page.tsx +++ b/web/frontend/src/components/channels/channel-config-page.tsx @@ -321,8 +321,8 @@ export function ChannelConfigPage({ channelName }: ChannelConfigPageProps) { "" ).toLowerCase() const base = language.startsWith("zh") - ? "https://docs.picoclaw.io/zh-Hans/docs/channels" - : "https://docs.picoclaw.io/docs/channels" + ? "https://docs.piconomous.io/zh-Hans/docs/channels" + : "https://docs.piconomous.io/docs/channels" return `${base}/${getChannelDocSlug(channel.name)}` }, [channel, i18n.language, i18n.resolvedLanguage]) diff --git a/web/frontend/src/components/chat/assistant-message.tsx b/web/frontend/src/components/chat/assistant-message.tsx index 150f2f87d..485e574c9 100644 --- a/web/frontend/src/components/chat/assistant-message.tsx +++ b/web/frontend/src/components/chat/assistant-message.tsx @@ -30,7 +30,7 @@ export function AssistantMessage({
- PicoClaw + Piconomous {formattedTimestamp && ( <> diff --git a/web/frontend/src/components/chat/typing-indicator.tsx b/web/frontend/src/components/chat/typing-indicator.tsx index 98580963d..582bfbe32 100644 --- a/web/frontend/src/components/chat/typing-indicator.tsx +++ b/web/frontend/src/components/chat/typing-indicator.tsx @@ -22,7 +22,7 @@ export function TypingIndicator() { return (
- PicoClaw + Piconomous
diff --git a/web/frontend/src/components/config/config-sections.tsx b/web/frontend/src/components/config/config-sections.tsx index 517185eda..fe0042572 100644 --- a/web/frontend/src/components/config/config-sections.tsx +++ b/web/frontend/src/components/config/config-sections.tsx @@ -79,7 +79,7 @@ export function AgentDefaultsSection({ onFieldChange("workspace", e.target.value)} - placeholder="~/.picoclaw/workspace" + placeholder="~/.piconomous/workspace" /> diff --git a/web/frontend/src/features/chat/state.ts b/web/frontend/src/features/chat/state.ts index 5b7d6c6cd..bc0bac934 100644 --- a/web/frontend/src/features/chat/state.ts +++ b/web/frontend/src/features/chat/state.ts @@ -1,4 +1,4 @@ -const LAST_SESSION_STORAGE_KEY = "picoclaw:last-session-id" +const LAST_SESSION_STORAGE_KEY = "piconomous:last-session-id" const UNIX_MS_THRESHOLD = 1e12 function readStorageValue() { diff --git a/web/frontend/src/hooks/use-credentials-page.ts b/web/frontend/src/hooks/use-credentials-page.ts index 354065b23..bb52bfe23 100644 --- a/web/frontend/src/hooks/use-credentials-page.ts +++ b/web/frontend/src/hooks/use-credentials-page.ts @@ -145,7 +145,7 @@ export function useCredentialsPage() { const data = event.data as | { type?: string; flowId?: string; status?: string } | undefined - if (!data || data.type !== "picoclaw-oauth-result" || !data.flowId) { + if (!data || data.type !== "piconomous-oauth-result" || !data.flowId) { return } diff --git a/web/frontend/src/i18n/locales/en.json b/web/frontend/src/i18n/locales/en.json index 7b3ad0911..5e80abd48 100644 --- a/web/frontend/src/i18n/locales/en.json +++ b/web/frontend/src/i18n/locales/en.json @@ -339,7 +339,7 @@ "agent": { "load_error": "Failed to load agent support information.", "skills": { - "description": "Skills are loaded from the workspace, global PicoClaw home, and builtin directories.", + "description": "Skills are loaded from the workspace, global Piconomous home, and builtin directories.", "empty": "No skills are currently available.", "import": "Import Skill", "import_success": "Skill imported.", @@ -440,11 +440,11 @@ "monitor_usb": "Monitor USB", "monitor_usb_hint": "Watch USB plug/unplug events when devices are enabled.", "autostart_label": "Launch at Login", - "autostart_hint": "Start PicoClaw Web automatically when you log in.", + "autostart_hint": "Start Piconomous Web automatically when you log in.", "autostart_unsupported": "Launch at login is not supported on this platform.", "autostart_load_error": "Failed to load launch-at-login status.", "server_port": "Service Port", - "server_port_hint": "HTTP port used by PicoClaw Web.", + "server_port_hint": "HTTP port used by Piconomous Web.", "lan_access": "Enable LAN Access", "lan_access_hint": "Allow access from other devices on your local network.", "allowed_cidrs": "Allowed Network CIDRs", diff --git a/web/frontend/src/i18n/locales/zh.json b/web/frontend/src/i18n/locales/zh.json index d1ffa1ac9..d17319149 100644 --- a/web/frontend/src/i18n/locales/zh.json +++ b/web/frontend/src/i18n/locales/zh.json @@ -339,7 +339,7 @@ "agent": { "load_error": "加载 Agent 支持信息失败。", "skills": { - "description": "技能会从工作区、PicoClaw 全局目录和内置目录中加载。", + "description": "技能会从工作区、Piconomous 全局目录和内置目录中加载。", "empty": "当前没有可用技能。", "import": "导入技能", "import_success": "技能导入成功。", @@ -440,11 +440,11 @@ "monitor_usb": "监听 USB", "monitor_usb_hint": "在启用设备功能时,监听 USB 插拔事件。", "autostart_label": "开机自启", - "autostart_hint": "登录系统后自动启动 PicoClaw Web。", + "autostart_hint": "登录系统后自动启动 Piconomous Web。", "autostart_unsupported": "当前平台不支持开机自启。", "autostart_load_error": "加载开机自启状态失败。", "server_port": "服务端口", - "server_port_hint": "PicoClaw Web 的 HTTP 监听端口。", + "server_port_hint": "Piconomous Web 的 HTTP 监听端口。", "lan_access": "启用局域网访问", "lan_access_hint": "允许局域网中的其他设备访问当前服务。", "allowed_cidrs": "允许访问网段", diff --git a/web/picoclaw-launcher.desktop b/web/picoclaw-launcher.desktop deleted file mode 100644 index 7e1f7b4d0..000000000 --- a/web/picoclaw-launcher.desktop +++ /dev/null @@ -1,9 +0,0 @@ -[Desktop Entry] -Name=PicoClaw Launcher -Comment=Web-based configuration and management UI for PicoClaw -Exec=picoclaw-launcher -Icon=picoclaw-launcher -Terminal=true -Type=Application -Categories=Utility;Network; -Keywords=picoclaw;ai;agent;bot; diff --git a/web/piconomous-launcher.desktop b/web/piconomous-launcher.desktop new file mode 100644 index 000000000..2a20e4a9b --- /dev/null +++ b/web/piconomous-launcher.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Piconomous Launcher +Comment=Web-based configuration and management UI for Piconomous +Exec=piconomous-launcher +Icon=piconomous-launcher +Terminal=true +Type=Application +Categories=Utility;Network; +Keywords=piconomous;ai;agent;bot; diff --git a/web/picoclaw-launcher.png b/web/piconomous-launcher.png similarity index 100% rename from web/picoclaw-launcher.png rename to web/piconomous-launcher.png diff --git a/workspace/IDENTITY.md b/workspace/IDENTITY.md index 20e3e49fa..7fc13ddb2 100644 --- a/workspace/IDENTITY.md +++ b/workspace/IDENTITY.md @@ -1,7 +1,7 @@ # Identity ## Name -PicoClaw 🦞 +Piconomous 🦞 ## Description Ultra-lightweight personal AI assistant written in Go, inspired by nanobot. @@ -41,11 +41,11 @@ Ultra-lightweight personal AI assistant written in Go, inspired by nanobot. MIT License - Free and open source ## Repository -https://github.com/sipeed/picoclaw +https://github.com/sipeed/piconomous ## Contact -Issues: https://github.com/sipeed/picoclaw/issues -Discussions: https://github.com/sipeed/picoclaw/discussions +Issues: https://github.com/sipeed/piconomous/issues +Discussions: https://github.com/sipeed/piconomous/discussions --- diff --git a/workspace/SOUL.md b/workspace/SOUL.md index 0be8834f5..e9b0cd4d2 100644 --- a/workspace/SOUL.md +++ b/workspace/SOUL.md @@ -1,6 +1,6 @@ # Soul -I am picoclaw, a lightweight AI assistant powered by AI. +I am piconomous, a lightweight AI assistant powered by AI. ## Personality diff --git a/workspace/skills/hardware/references/board-pinout.md b/workspace/skills/hardware/references/board-pinout.md index 827dd0613..50fc1a65b 100644 --- a/workspace/skills/hardware/references/board-pinout.md +++ b/workspace/skills/hardware/references/board-pinout.md @@ -126,6 +126,6 @@ I2C adapter numbers can change between boots depending on driver load order. Alw ### Permissions `/dev/i2c-*` and `/dev/spidev*` typically require root access. Options: -- Run picoclaw as root +- Run piconomous as root - Add user to `i2c` and `spi` groups - Create udev rules: `SUBSYSTEM=="i2c-dev", MODE="0666"`