From 83afa23b8c3e3efe52312be4ba9deb16056ac0c9 Mon Sep 17 00:00:00 2001 From: KoheiYamashita Date: Tue, 24 Feb 2026 00:50:37 +0900 Subject: [PATCH] refactor: rename PicoClaw to ClawDroid MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Android package: io.picoclaw.android → io.clawdroid - Go module: github.com/sipeed/picoclaw → github.com/KarakuriAgent/clawdroid - Binary: picoclaw → clawdroid - Home dir: ~/.picoclaw/ → ~/.clawdroid/ - Env vars: PICOCLAW_* → CLAWDROID_* - DB: picoclaw.db → clawdroid.db - SharedPrefs: picoclaw → clawdroid - Docker services, CI/CD, assets, docs updated accordingly Co-Authored-By: Claude Opus 4.6 --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- .github/workflows/android-build.yml | 2 +- .github/workflows/docker-build.yml | 2 +- .github/workflows/release.yml | 4 +- .gitignore | 12 +- .goreleaser.yaml | 12 +- Dockerfile | 10 +- Dockerfile.goreleaser | 4 +- Makefile | 26 +-- README.ja.md | 104 +++++------ README.md | 130 +++++++------- README.zh.md | 118 ++++++------ ROADMAP.md | 30 ++-- android/app/build.gradle.kts | 4 +- android/app/proguard-rules.pro | 10 +- android/app/src/main/AndroidManifest.xml | 10 +- .../ClawDroidApp.kt} | 10 +- .../android => clawdroid}/MainActivity.kt | 12 +- .../PermissionRequestActivity.kt | 4 +- .../AccessibilityScreenshotSource.kt | 4 +- .../assistant/AssistantActivity.kt | 2 +- .../assistant/AssistantService.kt | 36 ++-- .../ClawDroidAccessibilityService.kt} | 4 +- .../assistant/DeviceController.kt | 2 +- .../assistant/ToolRequestHandler.kt | 8 +- .../android => clawdroid}/di/AppModule.kt | 58 +++--- .../navigation/NavRoutes.kt | 2 +- .../receiver/AgentMessageReceiver.kt | 10 +- .../receiver/NotificationHelper.kt | 10 +- android/app/src/main/res/values/strings.xml | 4 +- android/app/src/main/res/values/themes.xml | 2 +- android/core/data/build.gradle.kts | 2 +- .../core/data/local/AppDatabase.kt | 8 +- .../core/data/local/ImageFileStorage.kt | 4 +- .../core/data/local/converter/Converters.kt | 2 +- .../core/data/local/dao/MessageDao.kt | 4 +- .../core/data/local/entity/MessageEntity.kt | 2 +- .../core/data/mapper/MessageMapper.kt | 16 +- .../core/data/remote/WebSocketClient.kt | 8 +- .../core/data/remote/dto/ToolRequest.kt | 2 +- .../core/data/remote/dto/ToolResponse.kt | 2 +- .../core/data/remote/dto/WsIncoming.kt | 2 +- .../core/data/remote/dto/WsOutgoing.kt | 2 +- .../repository/AssistantConnectionImpl.kt | 14 +- .../data/repository/ChatRepositoryImpl.kt | 24 +-- .../repository/TtsCatalogRepositoryImpl.kt | 10 +- .../repository/TtsSettingsRepositoryImpl.kt | 6 +- android/core/domain/build.gradle.kts | 2 +- .../core/domain/model/AssistantMessage.kt | 2 +- .../core/domain/model/ChatMessage.kt | 2 +- .../core/domain/model/ConnectionState.kt | 2 +- .../core/domain/model/ImageAttachment.kt | 2 +- .../core/domain/model/ImageData.kt | 2 +- .../core/domain/model/TtsConfig.kt | 2 +- .../core/domain/model/TtsEngineInfo.kt | 2 +- .../core/domain/model/TtsVoiceInfo.kt | 2 +- .../core/domain/model/VoicePhase.kt | 2 +- .../domain/repository/AssistantConnection.kt | 6 +- .../core/domain/repository/ChatRepository.kt | 8 +- .../domain/repository/TtsCatalogRepository.kt | 6 +- .../repository/TtsSettingsRepository.kt | 4 +- .../core/domain/usecase/ConnectChatUseCase.kt | 4 +- .../domain/usecase/DisconnectChatUseCase.kt | 4 +- .../domain/usecase/LoadMoreMessagesUseCase.kt | 4 +- .../usecase/ObserveConnectionUseCase.kt | 6 +- .../domain/usecase/ObserveMessagesUseCase.kt | 6 +- .../domain/usecase/ObserveStatusUseCase.kt | 4 +- .../core/domain/usecase/SendMessageUseCase.kt | 6 +- android/core/ui/build.gradle.kts | 2 +- .../core/ui/theme/Color.kt | 2 +- .../core/ui/theme/Theme.kt | 4 +- .../core/ui/theme/Type.kt | 2 +- android/feature/chat/build.gradle.kts | 2 +- .../feature/chat/ChatEvent.kt | 4 +- .../feature/chat/ChatUiState.kt | 10 +- .../feature/chat/ChatViewModel.kt | 18 +- .../feature/chat/SettingsUiState.kt | 8 +- .../feature/chat/SettingsViewModel.kt | 8 +- .../chat/assistant/AssistantManager.kt | 22 +-- .../chat/assistant/AssistantPillBar.kt | 16 +- .../chat/component/ConnectionBanner.kt | 8 +- .../feature/chat/component/ImagePreview.kt | 8 +- .../feature/chat/component/MessageBubble.kt | 16 +- .../feature/chat/component/MessageInput.kt | 16 +- .../feature/chat/component/MessageList.kt | 4 +- .../feature/chat/component/StatusIndicator.kt | 6 +- .../feature/chat/screen/ChatScreen.kt | 34 ++-- .../feature/chat/screen/SettingsScreen.kt | 24 +-- .../chat/voice/CameraCaptureManager.kt | 4 +- .../chat/voice/ScreenCaptureManager.kt | 4 +- .../feature/chat/voice/ScreenshotSource.kt | 2 +- .../chat/voice/SpeechRecognizerWrapper.kt | 2 +- .../feature/chat/voice/TextToSpeechWrapper.kt | 4 +- .../feature/chat/voice/VoiceModeManager.kt | 14 +- .../feature/chat/voice/VoiceModeOverlay.kt | 14 +- .../feature/chat/voice/VoiceModeState.kt | 4 +- .../feature/chat/voice/VoiceOrb.kt | 4 +- android/settings.gradle.kts | 2 +- .../{picoclaw_code.gif => clawdroid_code.gif} | Bin ...person.mp4 => clawdroid_detect_person.mp4} | Bin .../{picoclaw_mem.gif => clawdroid_mem.gif} | Bin ...coclaw_memory.gif => clawdroid_memory.gif} | Bin ...claw_scedule.gif => clawdroid_scedule.gif} | Bin ...coclaw_search.gif => clawdroid_search.gif} | Bin cmd/{picoclaw => clawdroid}/main.go | 114 ++++++------ config/config.example.json | 4 +- doc/android-apk-plan.md | 24 +-- doc/picoclaw_community_roadmap_260216.md | 26 +-- docker-compose.yml | 28 +-- go.mod | 2 +- pkg/agent/context.go | 12 +- pkg/agent/loop.go | 26 +-- pkg/agent/loop_test.go | 8 +- pkg/agent/media.go | 4 +- pkg/agent/memory.go | 4 +- pkg/auth/oauth.go | 4 +- pkg/auth/store.go | 2 +- pkg/auth/store_test.go | 2 +- pkg/broadcast/broadcast.go | 6 +- pkg/channels/base.go | 2 +- pkg/channels/dingtalk.go | 12 +- pkg/channels/discord.go | 10 +- pkg/channels/feishu_32.go | 4 +- pkg/channels/feishu_64.go | 10 +- pkg/channels/line.go | 8 +- pkg/channels/maixcam.go | 6 +- pkg/channels/manager.go | 12 +- pkg/channels/onebot.go | 6 +- pkg/channels/qq.go | 6 +- pkg/channels/slack.go | 10 +- pkg/channels/slack_test.go | 4 +- pkg/channels/telegram.go | 10 +- pkg/channels/telegram_commands.go | 4 +- pkg/channels/websocket.go | 14 +- pkg/channels/whatsapp.go | 6 +- pkg/config/config.go | 168 +++++++++--------- pkg/config/config_test.go | 6 +- pkg/devices/service.go | 12 +- pkg/devices/source.go | 2 +- pkg/devices/sources/usb_linux.go | 4 +- pkg/devices/sources/usb_stub.go | 2 +- pkg/heartbeat/service.go | 14 +- pkg/heartbeat/service_test.go | 2 +- pkg/mcp/manager.go | 6 +- pkg/migrate/config.go | 8 +- pkg/migrate/migrate.go | 36 ++-- pkg/migrate/migrate_test.go | 70 ++++---- pkg/providers/claude_cli_provider_test.go | 2 +- pkg/providers/claude_provider.go | 4 +- pkg/providers/codex_cli_provider_test.go | 4 +- pkg/providers/codex_provider.go | 6 +- pkg/providers/http_provider.go | 12 +- pkg/session/manager.go | 2 +- pkg/skills/loader.go | 8 +- pkg/tools/cron.go | 6 +- pkg/tools/mcp.go | 2 +- pkg/tools/registry.go | 4 +- pkg/tools/skills.go | 2 +- pkg/tools/skills_test.go | 2 +- pkg/tools/subagent.go | 4 +- pkg/tools/subagent_tool_test.go | 4 +- pkg/tools/toolloop.go | 10 +- pkg/utils/media.go | 4 +- pkg/voice/transcriber.go | 4 +- workspace/IDENTITY.md | 10 +- workspace/SOUL.md | 2 +- .../hardware/references/board-pinout.md | 2 +- 167 files changed, 958 insertions(+), 958 deletions(-) rename android/app/src/main/java/io/{picoclaw/android/PicoClawApp.kt => clawdroid/ClawDroidApp.kt} (59%) rename android/app/src/main/java/io/{picoclaw/android => clawdroid}/MainActivity.kt (87%) rename android/app/src/main/java/io/{picoclaw/android => clawdroid}/PermissionRequestActivity.kt (94%) rename android/app/src/main/java/io/{picoclaw/android => clawdroid}/assistant/AccessibilityScreenshotSource.kt (94%) rename android/app/src/main/java/io/{picoclaw/android => clawdroid}/assistant/AssistantActivity.kt (97%) rename android/app/src/main/java/io/{picoclaw/android => clawdroid}/assistant/AssistantService.kt (93%) rename android/app/src/main/java/io/{picoclaw/android/assistant/PicoClawAccessibilityService.kt => clawdroid/assistant/ClawDroidAccessibilityService.kt} (88%) rename android/app/src/main/java/io/{picoclaw/android => clawdroid}/assistant/DeviceController.kt (98%) rename android/app/src/main/java/io/{picoclaw/android => clawdroid}/assistant/ToolRequestHandler.kt (98%) rename android/app/src/main/java/io/{picoclaw/android => clawdroid}/di/AppModule.kt (63%) rename android/app/src/main/java/io/{picoclaw/android => clawdroid}/navigation/NavRoutes.kt (68%) rename android/app/src/main/java/io/{picoclaw/android => clawdroid}/receiver/AgentMessageReceiver.kt (87%) rename android/app/src/main/java/io/{picoclaw/android => clawdroid}/receiver/NotificationHelper.kt (89%) rename android/core/data/src/main/java/io/{picoclaw/android => clawdroid}/core/data/local/AppDatabase.kt (57%) rename android/core/data/src/main/java/io/{picoclaw/android => clawdroid}/core/data/local/ImageFileStorage.kt (92%) rename android/core/data/src/main/java/io/{picoclaw/android => clawdroid}/core/data/local/converter/Converters.kt (88%) rename android/core/data/src/main/java/io/{picoclaw/android => clawdroid}/core/data/local/dao/MessageDao.kt (86%) rename android/core/data/src/main/java/io/{picoclaw/android => clawdroid}/core/data/local/entity/MessageEntity.kt (86%) rename android/core/data/src/main/java/io/{picoclaw/android => clawdroid}/core/data/mapper/MessageMapper.kt (83%) rename android/core/data/src/main/java/io/{picoclaw/android => clawdroid}/core/data/remote/WebSocketClient.kt (94%) rename android/core/data/src/main/java/io/{picoclaw/android => clawdroid}/core/data/remote/dto/ToolRequest.kt (85%) rename android/core/data/src/main/java/io/{picoclaw/android => clawdroid}/core/data/remote/dto/ToolResponse.kt (84%) rename android/core/data/src/main/java/io/{picoclaw/android => clawdroid}/core/data/remote/dto/WsIncoming.kt (88%) rename android/core/data/src/main/java/io/{picoclaw/android => clawdroid}/core/data/remote/dto/WsOutgoing.kt (73%) rename android/core/data/src/main/java/io/{picoclaw/android => clawdroid}/core/data/repository/AssistantConnectionImpl.kt (89%) rename android/core/data/src/main/java/io/{picoclaw/android => clawdroid}/core/data/repository/ChatRepositoryImpl.kt (84%) rename android/core/data/src/main/java/io/{picoclaw/android => clawdroid}/core/data/repository/TtsCatalogRepositoryImpl.kt (91%) rename android/core/data/src/main/java/io/{picoclaw/android => clawdroid}/core/data/repository/TtsSettingsRepositoryImpl.kt (92%) rename android/core/domain/src/main/java/io/{picoclaw/android => clawdroid}/core/domain/model/AssistantMessage.kt (65%) rename android/core/domain/src/main/java/io/{picoclaw/android => clawdroid}/core/domain/model/ChatMessage.kt (88%) rename android/core/domain/src/main/java/io/{picoclaw/android => clawdroid}/core/domain/model/ConnectionState.kt (65%) rename android/core/domain/src/main/java/io/{picoclaw/android => clawdroid}/core/domain/model/ImageAttachment.kt (66%) rename android/core/domain/src/main/java/io/{picoclaw/android => clawdroid}/core/domain/model/ImageData.kt (65%) rename android/core/domain/src/main/java/io/{picoclaw/android => clawdroid}/core/domain/model/TtsConfig.kt (78%) rename android/core/domain/src/main/java/io/{picoclaw/android => clawdroid}/core/domain/model/TtsEngineInfo.kt (63%) rename android/core/domain/src/main/java/io/{picoclaw/android => clawdroid}/core/domain/model/TtsVoiceInfo.kt (69%) rename android/core/domain/src/main/java/io/{picoclaw/android => clawdroid}/core/domain/model/VoicePhase.kt (64%) rename android/core/domain/src/main/java/io/{picoclaw/android => clawdroid}/core/domain/repository/AssistantConnection.kt (70%) rename android/core/domain/src/main/java/io/{picoclaw/android => clawdroid}/core/domain/repository/ChatRepository.kt (62%) rename android/core/domain/src/main/java/io/{picoclaw/android => clawdroid}/core/domain/repository/TtsCatalogRepository.kt (53%) rename android/core/domain/src/main/java/io/{picoclaw/android => clawdroid}/core/domain/repository/TtsSettingsRepository.kt (73%) rename android/core/domain/src/main/java/io/{picoclaw/android => clawdroid}/core/domain/usecase/ConnectChatUseCase.kt (54%) rename android/core/domain/src/main/java/io/{picoclaw/android => clawdroid}/core/domain/usecase/DisconnectChatUseCase.kt (55%) rename android/core/domain/src/main/java/io/{picoclaw/android => clawdroid}/core/domain/usecase/LoadMoreMessagesUseCase.kt (55%) rename android/core/domain/src/main/java/io/{picoclaw/android => clawdroid}/core/domain/usecase/ObserveConnectionUseCase.kt (53%) rename android/core/domain/src/main/java/io/{picoclaw/android => clawdroid}/core/domain/usecase/ObserveMessagesUseCase.kt (53%) rename android/core/domain/src/main/java/io/{picoclaw/android => clawdroid}/core/domain/usecase/ObserveStatusUseCase.kt (62%) rename android/core/domain/src/main/java/io/{picoclaw/android => clawdroid}/core/domain/usecase/SendMessageUseCase.kt (59%) rename android/core/ui/src/main/java/io/{picoclaw/android => clawdroid}/core/ui/theme/Color.kt (97%) rename android/core/ui/src/main/java/io/{picoclaw/android => clawdroid}/core/ui/theme/Theme.kt (95%) rename android/core/ui/src/main/java/io/{picoclaw/android => clawdroid}/core/ui/theme/Type.kt (97%) rename android/feature/chat/src/main/java/io/{picoclaw/android => clawdroid}/feature/chat/ChatEvent.kt (85%) rename android/feature/chat/src/main/java/io/{picoclaw/android => clawdroid}/feature/chat/ChatUiState.kt (61%) rename android/feature/chat/src/main/java/io/{picoclaw/android => clawdroid}/feature/chat/ChatViewModel.kt (87%) rename android/feature/chat/src/main/java/io/{picoclaw/android => clawdroid}/feature/chat/SettingsUiState.kt (52%) rename android/feature/chat/src/main/java/io/{picoclaw/android => clawdroid}/feature/chat/SettingsViewModel.kt (88%) rename android/feature/chat/src/main/java/io/{picoclaw/android => clawdroid}/feature/chat/assistant/AssistantManager.kt (94%) rename android/feature/chat/src/main/java/io/{picoclaw/android => clawdroid}/feature/chat/assistant/AssistantPillBar.kt (97%) rename android/feature/chat/src/main/java/io/{picoclaw/android => clawdroid}/feature/chat/component/ConnectionBanner.kt (89%) rename android/feature/chat/src/main/java/io/{picoclaw/android => clawdroid}/feature/chat/component/ImagePreview.kt (91%) rename android/feature/chat/src/main/java/io/{picoclaw/android => clawdroid}/feature/chat/component/MessageBubble.kt (90%) rename android/feature/chat/src/main/java/io/{picoclaw/android => clawdroid}/feature/chat/component/MessageInput.kt (90%) rename android/feature/chat/src/main/java/io/{picoclaw/android => clawdroid}/feature/chat/component/MessageList.kt (93%) rename android/feature/chat/src/main/java/io/{picoclaw/android => clawdroid}/feature/chat/component/StatusIndicator.kt (90%) rename android/feature/chat/src/main/java/io/{picoclaw/android => clawdroid}/feature/chat/screen/ChatScreen.kt (91%) rename android/feature/chat/src/main/java/io/{picoclaw/android => clawdroid}/feature/chat/screen/SettingsScreen.kt (94%) rename android/feature/chat/src/main/java/io/{picoclaw/android => clawdroid}/feature/chat/voice/CameraCaptureManager.kt (96%) rename android/feature/chat/src/main/java/io/{picoclaw/android => clawdroid}/feature/chat/voice/ScreenCaptureManager.kt (94%) rename android/feature/chat/src/main/java/io/{picoclaw/android => clawdroid}/feature/chat/voice/ScreenshotSource.kt (74%) rename android/feature/chat/src/main/java/io/{picoclaw/android => clawdroid}/feature/chat/voice/SpeechRecognizerWrapper.kt (98%) rename android/feature/chat/src/main/java/io/{picoclaw/android => clawdroid}/feature/chat/voice/TextToSpeechWrapper.kt (97%) rename android/feature/chat/src/main/java/io/{picoclaw/android => clawdroid}/feature/chat/voice/VoiceModeManager.kt (95%) rename android/feature/chat/src/main/java/io/{picoclaw/android => clawdroid}/feature/chat/voice/VoiceModeOverlay.kt (95%) rename android/feature/chat/src/main/java/io/{picoclaw/android => clawdroid}/feature/chat/voice/VoiceModeState.kt (82%) rename android/feature/chat/src/main/java/io/{picoclaw/android => clawdroid}/feature/chat/voice/VoiceOrb.kt (98%) rename assets/{picoclaw_code.gif => clawdroid_code.gif} (100%) rename assets/{picoclaw_detect_person.mp4 => clawdroid_detect_person.mp4} (100%) rename assets/{picoclaw_mem.gif => clawdroid_mem.gif} (100%) rename assets/{picoclaw_memory.gif => clawdroid_memory.gif} (100%) rename assets/{picoclaw_scedule.gif => clawdroid_scedule.gif} (100%) rename assets/{picoclaw_search.gif => clawdroid_search.gif} (100%) rename cmd/{picoclaw => clawdroid}/main.go (91%) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 4be385b22..7cc3b0ea6 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) +- **ClawDroid 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/android-build.yml b/.github/workflows/android-build.yml index 2b7783b16..c58d271c2 100644 --- a/.github/workflows/android-build.yml +++ b/.github/workflows/android-build.yml @@ -52,5 +52,5 @@ jobs: - name: Upload APK uses: actions/upload-artifact@v4 with: - name: picoclaw-release-apk + name: clawdroid-release-apk path: android/app/build/outputs/apk/release/*.apk diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 2d1aa9ffc..daea2654b 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 }}/clawdroid DOCKERHUB_REGISTRY: docker.io DOCKERHUB_IMAGE_NAME: ${{ vars.DOCKERHUB_REPOSITORY }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6443af01d..8d68ae416 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -147,11 +147,11 @@ jobs: - name: Rename APK with version run: | mv app/build/outputs/apk/release/app-release.apk \ - app/build/outputs/apk/release/picoclaw-${{ inputs.tag }}.apk + app/build/outputs/apk/release/clawdroid-${{ inputs.tag }}.apk - name: Upload APK to release env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | gh release upload "${{ inputs.tag }}" \ - app/build/outputs/apk/release/picoclaw-${{ inputs.tag }}.apk + app/build/outputs/apk/release/clawdroid-${{ inputs.tag }}.apk diff --git a/.gitignore b/.gitignore index 08783ba40..35c0fd75f 100644 --- a/.gitignore +++ b/.gitignore @@ -8,14 +8,14 @@ build/ *.dylib *.test *.out -/picoclaw -/picoclaw-test -cmd/picoclaw/workspace +/clawdroid +/clawdroid-test +cmd/clawdroid/workspace -# Picoclaw specific +# ClawDroid specific -# PicoClaw -.picoclaw/ +# ClawDroid +.clawdroid/ config.json sessions/ build/ diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 368a0f06b..8d8812204 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -5,10 +5,10 @@ version: 2 before: hooks: - go mod tidy - - go generate ./cmd/picoclaw + - go generate ./cmd/clawdroid builds: - - id: picoclaw + - id: clawdroid env: - CGO_ENABLED=0 goos: @@ -23,18 +23,18 @@ builds: - s390x - mips64 - arm - main: ./cmd/picoclaw + main: ./cmd/clawdroid ignore: - goos: windows goarch: arm dockers_v2: - - id: picoclaw + - id: clawdroid dockerfile: Dockerfile.goreleaser ids: - - picoclaw + - clawdroid images: - - "ghcr.io/{{ .Env.GITHUB_REPOSITORY_OWNER }}/picoclaw" + - "ghcr.io/{{ .Env.GITHUB_REPOSITORY_OWNER }}/clawdroid" - "docker.io/{{ .Env.DOCKERHUB_IMAGE_NAME }}" tags: - "{{ .Tag }}" diff --git a/Dockerfile b/Dockerfile index dd98ec0bd..bb1f55454 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # ============================================================ -# Stage 1: Build the picoclaw binary +# Stage 1: Build the clawdroid binary # ============================================================ FROM golang:1.26.0-alpine AS builder @@ -27,10 +27,10 @@ HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD wget -q --spider http://localhost:18790/health || exit 1 # Copy binary -COPY --from=builder /src/build/picoclaw /usr/local/bin/picoclaw +COPY --from=builder /src/build/clawdroid /usr/local/bin/clawdroid -# Create picoclaw home directory -RUN /usr/local/bin/picoclaw onboard +# Create clawdroid home directory +RUN /usr/local/bin/clawdroid onboard -ENTRYPOINT ["picoclaw"] +ENTRYPOINT ["clawdroid"] CMD ["gateway"] diff --git a/Dockerfile.goreleaser b/Dockerfile.goreleaser index 0cdc8c6bd..bcc1c4e82 100644 --- a/Dockerfile.goreleaser +++ b/Dockerfile.goreleaser @@ -4,7 +4,7 @@ ARG TARGETPLATFORM RUN apk add --no-cache ca-certificates tzdata -COPY $TARGETPLATFORM/picoclaw /usr/local/bin/picoclaw +COPY $TARGETPLATFORM/clawdroid /usr/local/bin/clawdroid -ENTRYPOINT ["picoclaw"] +ENTRYPOINT ["clawdroid"] CMD ["gateway"] diff --git a/Makefile b/Makefile index ebc252ae6..09e0823d4 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ .PHONY: all build install uninstall clean help test # Build variables -BINARY_NAME=picoclaw +BINARY_NAME=clawdroid BUILD_DIR=build CMD_DIR=cmd/$(BINARY_NAME) MAIN_GO=$(CMD_DIR)/main.go @@ -24,8 +24,8 @@ INSTALL_BIN_DIR=$(INSTALL_PREFIX)/bin INSTALL_MAN_DIR=$(INSTALL_PREFIX)/share/man/man1 # Workspace and Skills -PICOCLAW_HOME?=$(HOME)/.picoclaw -WORKSPACE_DIR?=$(PICOCLAW_HOME)/workspace +CLAWDROID_HOME?=$(HOME)/.clawdroid +WORKSPACE_DIR?=$(CLAWDROID_HOME)/workspace WORKSPACE_SKILLS_DIR=$(WORKSPACE_DIR)/skills BUILTIN_SKILLS_DIR=$(CURDIR)/skills @@ -71,7 +71,7 @@ generate: @$(GO) generate ./... @echo "Run generate complete" -## build: Build the picoclaw binary for current platform +## build: Build the clawdroid binary for current platform build: generate @echo "Building $(BINARY_NAME) for $(PLATFORM)/$(ARCH)..." @mkdir -p $(BUILD_DIR) @@ -79,7 +79,7 @@ build: generate @echo "Build complete: $(BINARY_PATH)" @ln -sf $(BINARY_NAME)-$(PLATFORM)-$(ARCH) $(BUILD_DIR)/$(BINARY_NAME) -## build-all: Build picoclaw for all platforms +## build-all: Build clawdroid for all platforms build-all: generate @echo "Building for multiple platforms..." @mkdir -p $(BUILD_DIR) @@ -90,7 +90,7 @@ build-all: generate GOOS=windows GOARCH=amd64 $(GO) build $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-windows-amd64.exe ./$(CMD_DIR) @echo "All builds complete" -## install: Install picoclaw to system and copy builtin skills +## install: Install clawdroid to system and copy builtin skills install: build @echo "Installing $(BINARY_NAME)..." @mkdir -p $(INSTALL_BIN_DIR) @@ -99,7 +99,7 @@ install: build @echo "Installed binary to $(INSTALL_BIN_DIR)/$(BINARY_NAME)" @echo "Installation complete!" -## uninstall: Remove picoclaw from system +## uninstall: Remove clawdroid from system uninstall: @echo "Uninstalling $(BINARY_NAME)..." @rm -f $(INSTALL_BIN_DIR)/$(BINARY_NAME) @@ -107,11 +107,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 clawdroid and all data uninstall-all: @echo "Removing workspace and skills..." - @rm -rf $(PICOCLAW_HOME) - @echo "Removed workspace: $(PICOCLAW_HOME)" + @rm -rf $(CLAWDROID_HOME) + @echo "Removed workspace: $(CLAWDROID_HOME)" @echo "Complete uninstallation done!" ## clean: Remove build artifacts @@ -145,13 +145,13 @@ update-deps: ## check: Run vet, fmt, and verify dependencies check: deps fmt vet test -## run: Build and run picoclaw +## run: Build and run clawdroid run: build @$(BUILD_DIR)/$(BINARY_NAME) $(ARGS) ## help: Show this help message help: - @echo "picoclaw Makefile" + @echo "clawdroid Makefile" @echo "" @echo "Usage:" @echo " make [target]" @@ -167,7 +167,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: ~/.clawdroid/workspace)" @echo " VERSION # Version string (default: git describe)" @echo "" @echo "Current Configuration:" diff --git a/README.ja.md b/README.ja.md index e33b312f9..e4245cf96 100644 --- a/README.ja.md +++ b/README.ja.md @@ -1,7 +1,7 @@
-PicoClaw +ClawDroid -

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

+

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

$10 ハードウェア · 10MB RAM · 1秒起動 · 皮皮虾,我们走!

@@ -19,7 +19,7 @@ --- -🦐 PicoClaw は [nanobot](https://github.com/HKUDS/nanobot) にインスパイアされた超軽量パーソナル AI アシスタントです。Go でゼロからリファクタリングされ、AI エージェント自身がアーキテクチャの移行とコード最適化を推進するセルフブートストラッピングプロセスで構築されました。 +🦐 ClawDroid は [nanobot](https://github.com/HKUDS/nanobot) にインスパイアされた超軽量パーソナル AI アシスタントです。Go でゼロからリファクタリングされ、AI エージェント自身がアーキテクチャの移行とコード最適化を推進するセルフブートストラッピングプロセスで構築されました。 ⚡️ $10 のハードウェアで 10MB 未満の RAM で動作:OpenClaw より 99% 少ないメモリ、Mac mini より 98% 安い! @@ -27,7 +27,7 @@

- +

@@ -39,7 +39,7 @@ ## 📢 ニュース -2026-02-09 🎉 PicoClaw リリース!$10 ハードウェアで 10MB 未満の RAM で動く AI エージェントを 1 日で構築。🦐 皮皮虾,我们走! +2026-02-09 🎉 ClawDroid リリース!$10 ハードウェアで 10MB 未満の RAM で動く AI エージェントを 1 日で構築。🦐 皮皮虾,我们走! ## ✨ 特徴 @@ -53,13 +53,13 @@ 🤖 **AI ブートストラップ**: 自律的な Go ネイティブ実装 — コアの 95% が AI 生成、人間によるレビュー付き。 -| | OpenClaw | NanoBot | **PicoClaw** | +| | OpenClaw | NanoBot | **ClawDroid** | | --- | --- | --- |--- | | **言語** | TypeScript | Python | **Go** | | **RAM** | >1GB |>100MB| **< 10MB** | | **起動時間**
(0.8GHz コア) | >500秒 | >30秒 | **<1秒** | | **コスト** | Mac Mini 599$ | 大半の Linux SBC
~50$ |**あらゆる Linux ボード**
**最安 10$** | -PicoClaw +ClawDroid ## 🦾 デモンストレーション @@ -71,9 +71,9 @@

🔎 Web 検索&学習

-

-

-

+

+

+

開発 · デプロイ · スケール @@ -83,7 +83,7 @@ ### 🐜 革新的な省フットプリントデプロイ -PicoClaw はほぼすべての Linux デバイスにデプロイできます! +ClawDroid はほぼすべての 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) サーバー自動メンテナンスに @@ -97,14 +97,14 @@ https://private-user-images.githubusercontent.com/83055338/547056448-e7b031ff-d6 ### コンパイル済みバイナリでインストール -[リリースページ](https://github.com/sipeed/picoclaw/releases) からお使いのプラットフォーム用のファームウェアをダウンロードしてください。 +[リリースページ](https://github.com/KarakuriAgent/clawdroid/releases) からお使いのプラットフォーム用のファームウェアをダウンロードしてください。 ### ソースからインストール(最新機能、開発向け推奨) ```bash -git clone https://github.com/sipeed/picoclaw.git +git clone https://github.com/KarakuriAgent/clawdroid.git -cd picoclaw +cd clawdroid make deps # ビルド(インストール不要) @@ -119,12 +119,12 @@ make install ## 🐳 Docker Compose -Docker Compose を使えば、ローカルにインストールせずに PicoClaw を実行できます。 +Docker Compose を使えば、ローカルにインストールせずに ClawDroid を実行できます。 ```bash # 1. リポジトリをクローン -git clone https://github.com/sipeed/picoclaw.git -cd picoclaw +git clone https://github.com/KarakuriAgent/clawdroid.git +cd clawdroid # 2. API キーを設定 cp config/config.example.json config/config.json @@ -134,7 +134,7 @@ vim config/config.json # DISCORD_BOT_TOKEN, プロバイダーの API キ docker compose --profile gateway up -d # 4. ログ確認 -docker compose logs -f picoclaw-gateway +docker compose logs -f clawdroid-gateway # 5. 停止 docker compose --profile gateway down @@ -144,10 +144,10 @@ docker compose --profile gateway down ```bash # 質問を投げる -docker compose run --rm picoclaw-agent -m "What is 2+2?" +docker compose run --rm clawdroid-agent -m "What is 2+2?" # インタラクティブモード -docker compose run --rm picoclaw-agent +docker compose run --rm clawdroid-agent ``` ### リビルド @@ -160,23 +160,23 @@ docker compose --profile gateway up -d ### 🚀 クイックスタート(ネイティブ) > [!TIP] -> `~/.picoclaw/config.json` に API キーを設定してください。 +> `~/.clawdroid/config.json` に API キーを設定してください。 > API キーの取得先: [OpenRouter](https://openrouter.ai/keys) (LLM) · [Zhipu](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys) (LLM) > Web 検索は **任意** です - 無料の [Brave Search API](https://brave.com/search/api) (月 2000 クエリ無料) **1. 初期化** ```bash -picoclaw onboard +clawdroid onboard ``` -**2. 設定** (`~/.picoclaw/config.json`) +**2. 設定** (`~/.clawdroid/config.json`) ```json { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.clawdroid/workspace", "model": "glm-4.7", "max_tokens": 8192, "temperature": 0.7, @@ -214,7 +214,7 @@ picoclaw onboard **3. チャット** ```bash -picoclaw agent -m "What is 2+2?" +clawdroid agent -m "What is 2+2?" ``` これだけです!2 分で AI アシスタントが動きます。 @@ -223,7 +223,7 @@ picoclaw agent -m "What is 2+2?" ## 💬 チャットアプリ -Telegram、Discord、QQ、DingTalk、LINE で PicoClaw と会話できます +Telegram、Discord、QQ、DingTalk、LINE で ClawDroid と会話できます | チャネル | セットアップ | |---------|------------| @@ -261,7 +261,7 @@ Telegram、Discord、QQ、DingTalk、LINE で PicoClaw と会話できます **3. 起動** ```bash -picoclaw gateway +clawdroid gateway ``` @@ -305,7 +305,7 @@ picoclaw gateway **6. 起動** ```bash -picoclaw gateway +clawdroid gateway ``` @@ -338,7 +338,7 @@ picoclaw gateway **3. 起動** ```bash -picoclaw gateway +clawdroid gateway ``` @@ -372,7 +372,7 @@ picoclaw gateway **3. 起動** ```bash -picoclaw gateway +clawdroid gateway ``` @@ -418,25 +418,25 @@ LINE Developers Console で Webhook URL を `https://あなたのドメイン/we **4. 起動** ```bash -picoclaw gateway +clawdroid gateway ``` > グループチャットでは @メンション時のみ応答します。返信は元メッセージを引用する形式です。 -> **Docker Compose**: `picoclaw-gateway` サービスに `ports: ["18791:18791"]` を追加して Webhook ポートを公開してください。 +> **Docker Compose**: `clawdroid-gateway` サービスに `ports: ["18791:18791"]` を追加して Webhook ポートを公開してください。 ## ⚙️ 設定 -設定ファイル: `~/.picoclaw/config.json` +設定ファイル: `~/.clawdroid/config.json` ### ワークスペース構成 -PicoClaw は設定されたワークスペース(デフォルト: `~/.picoclaw/workspace`)にデータを保存します: +ClawDroid は設定されたワークスペース(デフォルト: `~/.clawdroid/workspace`)にデータを保存します: ``` -~/.picoclaw/workspace/ +~/.clawdroid/workspace/ ├── sessions/ # 会話セッションと履歴 ├── memory/ # 長期メモリ(MEMORY.md) ├── state/ # 永続状態(最後のチャネルなど) @@ -452,7 +452,7 @@ PicoClaw は設定されたワークスペース(デフォルト: `~/.picoclaw ### 🔒 セキュリティサンドボックス -PicoClaw はデフォルトでサンドボックス環境で実行されます。エージェントは設定されたワークスペース内のファイルにのみアクセスし、コマンドを実行できます。 +ClawDroid はデフォルトでサンドボックス環境で実行されます。エージェントは設定されたワークスペース内のファイルにのみアクセスし、コマンドを実行できます。 #### デフォルト設定 @@ -460,7 +460,7 @@ PicoClaw はデフォルトでサンドボックス環境で実行されます { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.clawdroid/workspace", "restrict_to_workspace": true } } @@ -469,7 +469,7 @@ PicoClaw はデフォルトでサンドボックス環境で実行されます | オプション | デフォルト | 説明 | |-----------|-----------|------| -| `workspace` | `~/.picoclaw/workspace` | エージェントの作業ディレクトリ | +| `workspace` | `~/.clawdroid/workspace` | エージェントの作業ディレクトリ | | `restrict_to_workspace` | `true` | ファイル/コマンドアクセスをワークスペースに制限 | #### 保護対象ツール @@ -525,7 +525,7 @@ PicoClaw はデフォルトでサンドボックス環境で実行されます **方法2: 環境変数** ```bash -export PICOCLAW_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACE=false +export CLAWDROID_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACE=false ``` > ⚠️ **警告**: この制限を無効にすると、エージェントはシステム上の任意のパスにアクセスできるようになります。制御された環境でのみ慎重に使用してください。 @@ -544,7 +544,7 @@ export PICOCLAW_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACE=false ### ハートビート(定期タスク) -PicoClaw は自動的に定期タスクを実行できます。ワークスペースに `HEARTBEAT.md` ファイルを作成します: +ClawDroid は自動的に定期タスクを実行できます。ワークスペースに `HEARTBEAT.md` ファイルを作成します: ```markdown # 定期タスク @@ -615,8 +615,8 @@ HEARTBEAT_OK 応答 ユーザーが直接結果を受け取る | `interval` | `30` | チェック間隔(分)、最小5分 | **環境変数:** -- `PICOCLAW_HEARTBEAT_ENABLED=false` で無効化 -- `PICOCLAW_HEARTBEAT_INTERVAL=60` で間隔変更 +- `CLAWDROID_HEARTBEAT_ENABLED=false` で無効化 +- `CLAWDROID_HEARTBEAT_INTERVAL=60` で間隔変更 ### 基本設定 @@ -647,7 +647,7 @@ HEARTBEAT_OK 応答 ユーザーが直接結果を受け取る 3. **実行** ```bash - picoclaw agent -m "Hello" + clawdroid agent -m "Hello" ``` @@ -712,11 +712,11 @@ HEARTBEAT_OK 応答 ユーザーが直接結果を受け取る | コマンド | 説明 | |---------|------| -| `picoclaw onboard` | 設定&ワークスペースの初期化 | -| `picoclaw agent -m "..."` | エージェントとチャット | -| `picoclaw agent` | インタラクティブチャットモード | -| `picoclaw gateway` | ゲートウェイを起動 | -| `picoclaw status` | ステータスを表示 | +| `clawdroid onboard` | 設定&ワークスペースの初期化 | +| `clawdroid agent -m "..."` | エージェントとチャット | +| `clawdroid agent` | インタラクティブチャットモード | +| `clawdroid gateway` | ゲートウェイを起動 | +| `clawdroid status` | ステータスを表示 | ## 🤝 コントリビュート&ロードマップ @@ -724,18 +724,18 @@ PR 歓迎!コードベースは意図的に小さく読みやすくしてい Discord: https://discord.gg/V4sAZ9XWpN -PicoClaw +ClawDroid ## 🐛 トラブルシューティング ### Web 検索で「API 配置问题」と表示される -検索 API キーをまだ設定していない場合、これは正常です。PicoClaw は手動検索用の便利なリンクを提供します。 +検索 API キーをまだ設定していない場合、これは正常です。ClawDroid は手動検索用の便利なリンクを提供します。 Web 検索を有効にするには: 1. [https://brave.com/search/api](https://brave.com/search/api) で無料の API キーを取得(月 2000 クエリ無料) -2. `~/.picoclaw/config.json` に追加: +2. `~/.clawdroid/config.json` に追加: ```json { "tools": { @@ -755,7 +755,7 @@ Web 検索を有効にするには: ### Telegram Bot で「Conflict: terminated by other getUpdates」と表示される -別のインスタンスが実行中の場合に発生します。`picoclaw gateway` が 1 つだけ実行されていることを確認してください。 +別のインスタンスが実行中の場合に発生します。`clawdroid gateway` が 1 つだけ実行されていることを確認してください。 --- diff --git a/README.md b/README.md index 0a9dacce6..897cc8f79 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@
- PicoClaw + ClawDroid -

PicoClaw: Ultra-Efficient AI Assistant in Go

+

ClawDroid: Ultra-Efficient AI Assistant in Go

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

@@ -10,7 +10,7 @@ Hardware License
- Website + Website Twitter

@@ -19,7 +19,7 @@ --- -🦐 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. +🦐 ClawDroid 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! @@ -27,7 +27,7 @@

- +

@@ -41,20 +41,20 @@ > [!CAUTION] > **🚨 SECURITY & OFFICIAL CHANNELS / 安全声明** > -> * **NO CRYPTO:** PicoClaw 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)** +> * **NO CRYPTO:** ClawDroid has **NO** official token/coin. All claims on `pump.fun` or other trading platforms are **SCAMS**. +> * **OFFICIAL DOMAIN:** The **ONLY** official website is **[clawdroid.io](https://clawdroid.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:** clawdroid is in early development now and may have unresolved network security issues. Do not deploy to production environments before the v1.0 release. +> * **Note:** clawdroid 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-02-16 🎉 PicoClaw hit 12K stars in one week! Thank you all for your support! PicoClaw is growing faster than we ever imagined. Given the high volume of PRs, we urgently need community maintainers. Our volunteer roles and roadmap are officially posted [here](doc/picoclaw_community_roadmap_260216.md) —we can’t wait to have you on board! +2026-02-16 🎉 ClawDroid hit 12K stars in one week! Thank you all for your support! ClawDroid is growing faster than we ever imagined. Given the high volume of PRs, we urgently need community maintainers. Our volunteer roles and roadmap are officially posted [here](doc/clawdroid_community_roadmap_260216.md) —we can’t wait to have you on board! -2026-02-13 🎉 PicoClaw hit 5000 stars in 4days! Thank you for the community! There are so many PRs&issues come in (during Chinese New Year holidays), we are finalizing the Project Roadmap and setting up the Developer Group to accelerate PicoClaw's development. +2026-02-13 🎉 ClawDroid hit 5000 stars in 4days! Thank you for the community! There are so many PRs&issues come in (during Chinese New Year holidays), we are finalizing the Project Roadmap and setting up the Developer Group to accelerate ClawDroid's development. 🚀 Call to Action: Please submit your feature requests in GitHub Discussions. We will review and prioritize them during our upcoming weekly meeting. -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 🎉 ClawDroid Launched! Built in 1 day to bring AI Agents to $10 hardware with <10MB RAM. 🦐 ClawDroid,Let's Go! ## ✨ Features @@ -68,14 +68,14 @@ 🤖 **AI-Bootstrapped**: Autonomous Go-native implementation — 95% Agent-generated core with human-in-the-loop refinement. -| | OpenClaw | NanoBot | **PicoClaw** | +| | OpenClaw | NanoBot | **ClawDroid** | | ----------------------------- | ------------- | ------------------------ | ----------------------------------------- | | **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 +ClawDroid ## 🦾 Demonstration @@ -88,9 +88,9 @@

🔎 Web Search & Learning

-

-

-

+

+

+

Develop • Deploy • Scale @@ -101,7 +101,7 @@ ### 🐜 Innovative Low-Footprint Deploy -PicoClaw can be deployed on almost any Linux device! +ClawDroid 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 @@ -115,14 +115,14 @@ PicoClaw can be deployed on almost any Linux device! ### Install with precompiled binary -Download the firmware for your platform from the [release](https://github.com/sipeed/picoclaw/releases) page. +Download the firmware for your platform from the [release](https://github.com/KarakuriAgent/clawdroid/releases) page. ### Install from source (latest features, recommended for development) ```bash -git clone https://github.com/sipeed/picoclaw.git +git clone https://github.com/KarakuriAgent/clawdroid.git -cd picoclaw +cd clawdroid make deps # Build, no need to install @@ -137,12 +137,12 @@ make install ## 🐳 Docker Compose -You can also run PicoClaw using Docker Compose without installing anything locally. +You can also run ClawDroid 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/KarakuriAgent/clawdroid.git +cd clawdroid # 2. Set your API keys cp config/config.example.json config/config.json @@ -152,7 +152,7 @@ vim config/config.json # Set DISCORD_BOT_TOKEN, API keys, etc. docker compose --profile gateway up -d # 4. Check logs -docker compose logs -f picoclaw-gateway +docker compose logs -f clawdroid-gateway # 5. Stop docker compose --profile gateway down @@ -162,10 +162,10 @@ docker compose --profile gateway down ```bash # Ask a question -docker compose run --rm picoclaw-agent -m "What is 2+2?" +docker compose run --rm clawdroid-agent -m "What is 2+2?" # Interactive mode -docker compose run --rm picoclaw-agent +docker compose run --rm clawdroid-agent ``` ### Rebuild @@ -178,23 +178,23 @@ docker compose --profile gateway up -d ### 🚀 Quick Start > [!TIP] -> Set your API key in `~/.picoclaw/config.json`. +> Set your API key in `~/.clawdroid/config.json`. > Get API keys: [OpenRouter](https://openrouter.ai/keys) (LLM) · [Zhipu](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys) (LLM) > Web search is **optional** - get free [Brave Search API](https://brave.com/search/api) (2000 free queries/month) or use built-in auto fallback. **1. Initialize** ```bash -picoclaw onboard +clawdroid onboard ``` -**2. Configure** (`~/.picoclaw/config.json`) +**2. Configure** (`~/.clawdroid/config.json`) ```json { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.clawdroid/workspace", "model": "glm-4.7", "max_tokens": 8192, "temperature": 0.7, @@ -233,7 +233,7 @@ picoclaw onboard **4. Chat** ```bash -picoclaw agent -m "What is 2+2?" +clawdroid agent -m "What is 2+2?" ``` That's it! You have a working AI assistant in 2 minutes. @@ -242,7 +242,7 @@ That's it! You have a working AI assistant in 2 minutes. ## 💬 Chat Apps -Talk to your picoclaw through Telegram, Discord, DingTalk, or LINE +Talk to your clawdroid through Telegram, Discord, DingTalk, or LINE | Channel | Setup | | ------------ | ---------------------------------- | @@ -280,7 +280,7 @@ Talk to your picoclaw through Telegram, Discord, DingTalk, or LINE **3. Run** ```bash -picoclaw gateway +clawdroid gateway ``` @@ -328,7 +328,7 @@ picoclaw gateway **6. Run** ```bash -picoclaw gateway +clawdroid gateway ``` @@ -361,7 +361,7 @@ picoclaw gateway **3. Run** ```bash -picoclaw gateway +clawdroid gateway ``` @@ -395,7 +395,7 @@ picoclaw gateway **3. Run** ```bash -picoclaw gateway +clawdroid gateway ``` @@ -441,31 +441,31 @@ Then set the Webhook URL in LINE Developers Console to `https://your-domain/webh **4. Run** ```bash -picoclaw gateway +clawdroid gateway ``` > In group chats, the bot responds only when @mentioned. Replies quote the original message. -> **Docker Compose**: Add `ports: ["18791:18791"]` to the `picoclaw-gateway` service to expose the webhook port. +> **Docker Compose**: Add `ports: ["18791:18791"]` to the `clawdroid-gateway` service to expose the webhook port. ## ClawdChat Join the Agent Social Network -Connect Picoclaw to the Agent Social Network simply by sending a single message via the CLI or any integrated Chat App. +Connect Clawdroid to the Agent Social Network simply by sending a single message via the CLI or any integrated Chat App. **Read `https://clawdchat.ai/skill.md` and follow the instructions to join [ClawdChat.ai](https://clawdchat.ai)** ## ⚙️ Configuration -Config file: `~/.picoclaw/config.json` +Config file: `~/.clawdroid/config.json` ### Workspace Layout -PicoClaw stores data in your configured workspace (default: `~/.picoclaw/workspace`): +ClawDroid stores data in your configured workspace (default: `~/.clawdroid/workspace`): ``` -~/.picoclaw/workspace/ +~/.clawdroid/workspace/ ├── sessions/ # Conversation sessions and history ├── memory/ # Long-term memory (MEMORY.md) ├── state/ # Persistent state (last channel, etc.) @@ -481,7 +481,7 @@ PicoClaw stores data in your configured workspace (default: `~/.picoclaw/workspa ### 🔒 Security Sandbox -PicoClaw runs in a sandboxed environment by default. The agent can only access files and execute commands within the configured workspace. +ClawDroid runs in a sandboxed environment by default. The agent can only access files and execute commands within the configured workspace. #### Default Configuration @@ -489,7 +489,7 @@ PicoClaw runs in a sandboxed environment by default. The agent can only access f { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.clawdroid/workspace", "restrict_to_workspace": true } } @@ -498,7 +498,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` | `~/.clawdroid/workspace` | Working directory for the agent | | `restrict_to_workspace` | `true` | Restrict file/command access to workspace | #### Protected Tools @@ -556,7 +556,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 CLAWDROID_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. @@ -575,7 +575,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: +ClawDroid can perform periodic tasks automatically. Create a `HEARTBEAT.md` file in your workspace: ```markdown # Periodic Tasks @@ -647,8 +647,8 @@ 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 +* `CLAWDROID_HEARTBEAT_ENABLED=false` to disable +* `CLAWDROID_HEARTBEAT_INTERVAL=60` to change interval ### Providers @@ -678,7 +678,7 @@ The subagent has access to tools (message, web_search, etc.) and can communicate { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.clawdroid/workspace", "model": "glm-4.7", "max_tokens": 8192, "temperature": 0.7, @@ -697,7 +697,7 @@ The subagent has access to tools (message, web_search, etc.) and can communicate **3. Run** ```bash -picoclaw agent -m "Hello" +clawdroid agent -m "Hello" ``` @@ -775,23 +775,23 @@ picoclaw agent -m "Hello" | 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 cron list` | List all scheduled jobs | -| `picoclaw cron add ...` | Add a scheduled job | +| `clawdroid onboard` | Initialize config & workspace | +| `clawdroid agent -m "..."` | Chat with the agent | +| `clawdroid agent` | Interactive chat mode | +| `clawdroid gateway` | Start the gateway | +| `clawdroid status` | Show status | +| `clawdroid cron list` | List all scheduled jobs | +| `clawdroid cron add ...` | Add a scheduled job | ### Scheduled Tasks / Reminders -PicoClaw supports scheduled reminders and recurring tasks through the `cron` tool: +ClawDroid 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 * **Cron expressions**: "Remind me at 9am daily" → uses cron expression -Jobs are stored in `~/.picoclaw/workspace/cron/` and processed automatically. +Jobs are stored in `~/.clawdroid/workspace/cron/` and processed automatically. ## 🤝 Contribute & Roadmap @@ -805,20 +805,20 @@ User Groups: discord: -PicoClaw +ClawDroid ## 🐛 Troubleshooting ### Web search says "API 配置问题" -This is normal if you haven't configured a search API key yet. PicoClaw will provide helpful links for manual searching. +This is normal if you haven't configured a search API key yet. ClawDroid will provide helpful links for manual searching. To enable web search: 1. **Option 1 (Recommended)**: Get a free API key at [https://brave.com/search/api](https://brave.com/search/api) (2000 free queries/month) for the best results. 2. **Option 2 (No Credit Card)**: If you don't have a key, we automatically fall back to **DuckDuckGo** (no key required). -Add the key to `~/.picoclaw/config.json` if using Brave: +Add the key to `~/.clawdroid/config.json` if using Brave: ```json { @@ -844,7 +844,7 @@ Some providers (like Zhipu) have content filtering. Try rephrasing your query or ### Telegram bot says "Conflict: terminated by other getUpdates" -This happens when another instance of the bot is running. Make sure only one `picoclaw gateway` is running at a time. +This happens when another instance of the bot is running. Make sure only one `clawdroid gateway` is running at a time. --- diff --git a/README.zh.md b/README.zh.md index 2ca2987bb..62e27d417 100644 --- a/README.zh.md +++ b/README.zh.md @@ -1,7 +1,7 @@
-PicoClaw +ClawDroid -

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

+

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

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

@@ -10,7 +10,7 @@ Hardware License
- Website + Website Twitter

@@ -19,7 +19,7 @@ --- -🦐 **PicoClaw** 是一个受 [nanobot](https://github.com/HKUDS/nanobot) 启发的超轻量级个人 AI 助手。它采用 **Go 语言** 从零重构,经历了一个“自举”过程——即由 AI Agent 自身驱动了整个架构迁移和代码优化。 +🦐 **ClawDroid** 是一个受 [nanobot](https://github.com/HKUDS/nanobot) 启发的超轻量级个人 AI 助手。它采用 **Go 语言** 从零重构,经历了一个“自举”过程——即由 AI Agent 自身驱动了整个架构迁移和代码优化。 ⚡️ **极致轻量**:可在 **10 美元** 的硬件上运行,内存占用 **<10MB**。这意味着比 OpenClaw 节省 99% 的内存,比 Mac mini 便宜 98%! @@ -27,7 +27,7 @@

- +

@@ -42,20 +42,20 @@ > [!CAUTION] > **🚨 SECURITY & OFFICIAL CHANNELS / 安全声明** -> * **无加密货币 (NO CRYPTO):** PicoClaw **没有** 发行任何官方代币、Token 或虚拟货币。所有在 `pump.fun` 或其他交易平台上的相关声称均为 **诈骗**。 -> * **官方域名:** 唯一的官方网站是 **[picoclaw.io](https://picoclaw.io)**,公司官网是 **[sipeed.com](https://sipeed.com)**。 +> * **无加密货币 (NO CRYPTO):** ClawDroid **没有** 发行任何官方代币、Token 或虚拟货币。所有在 `pump.fun` 或其他交易平台上的相关声称均为 **诈骗**。 +> * **官方域名:** 唯一的官方网站是 **[clawdroid.io](https://clawdroid.io)**,公司官网是 **[sipeed.com](https://sipeed.com)**。 > * **警惕:** 许多 `.ai/.org/.com/.net/...` 后缀的域名被第三方抢注,请勿轻信。 -> * **注意:** picoclaw正在初期的快速功能开发阶段,可能有尚未修复的网络安全问题,在1.0正式版发布前,请不要将其部署到生产环境中 -> * **注意:** picoclaw最近合并了大量PRs,近期版本可能内存占用较大(10~20MB),我们将在功能较为收敛后进行资源占用优化. +> * **注意:** clawdroid正在初期的快速功能开发阶段,可能有尚未修复的网络安全问题,在1.0正式版发布前,请不要将其部署到生产环境中 +> * **注意:** clawdroid最近合并了大量PRs,近期版本可能内存占用较大(10~20MB),我们将在功能较为收敛后进行资源占用优化. ## 📢 新闻 (News) -2026-02-16 🎉 PicoClaw 在一周内突破了12K star! 感谢大家的关注!PicoClaw 的成长速度超乎我们预期. 由于PR数量的快速膨胀,我们亟需社区开发者参与维护. 我们需要的志愿者角色和roadmap已经发布到了[这里](doc/picoclaw_community_roadmap_260216.md), 期待你的参与! +2026-02-16 🎉 ClawDroid 在一周内突破了12K star! 感谢大家的关注!ClawDroid 的成长速度超乎我们预期. 由于PR数量的快速膨胀,我们亟需社区开发者参与维护. 我们需要的志愿者角色和roadmap已经发布到了[这里](doc/clawdroid_community_roadmap_260216.md), 期待你的参与! -2026-02-13 🎉 **PicoClaw 在 4 天内突破 5000 Stars!** 感谢社区的支持!由于正值中国春节假期,PR 和 Issue 涌入较多,我们正在利用这段时间敲定 **项目路线图 (Roadmap)** 并组建 **开发者群组**,以便加速 PicoClaw 的开发。 +2026-02-13 🎉 **ClawDroid 在 4 天内突破 5000 Stars!** 感谢社区的支持!由于正值中国春节假期,PR 和 Issue 涌入较多,我们正在利用这段时间敲定 **项目路线图 (Roadmap)** 并组建 **开发者群组**,以便加速 ClawDroid 的开发。 🚀 **行动号召:** 请在 GitHub Discussions 中提交您的功能请求 (Feature Requests)。我们将在接下来的周会上进行审查和优先级排序。 -2026-02-09 🎉 **PicoClaw 正式发布!** 仅用 1 天构建,旨在将 AI Agent 带入 10 美元硬件与 <10MB 内存的世界。🦐 PicoClaw(皮皮虾),我们走! +2026-02-09 🎉 **ClawDroid 正式发布!** 仅用 1 天构建,旨在将 AI Agent 带入 10 美元硬件与 <10MB 内存的世界。🦐 ClawDroid(皮皮虾),我们走! ## ✨ 特性 @@ -69,14 +69,14 @@ 🤖 **AI 自举**: 纯 Go 语言原生实现 — 95% 的核心代码由 Agent 生成,并经由“人机回环 (Human-in-the-loop)”微调。 -| | OpenClaw | NanoBot | **PicoClaw** | +| | OpenClaw | NanoBot | **ClawDroid** | | --- | --- | --- | --- | | **语言** | TypeScript | Python | **Go** | | **RAM** | >1GB | >100MB | **< 10MB** | | **启动时间**
(0.8GHz core) | >500s | >30s | **<1s** | | **成本** | Mac Mini $599 | 大多数 Linux 开发板 ~$50 | **任意 Linux 开发板**
**低至 $10** | -PicoClaw +ClawDroid ## 🦾 演示 @@ -89,9 +89,9 @@

🔎 网络搜索与学习

-

-

-

+

+

+

开发 • 部署 • 扩展 @@ -102,7 +102,7 @@ ### 🐜 创新的低占用部署 -PicoClaw 几乎可以部署在任何 Linux 设备上! +ClawDroid 几乎可以部署在任何 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),用于自动化服务器运维。 @@ -116,14 +116,14 @@ PicoClaw 几乎可以部署在任何 Linux 设备上! ### 使用预编译二进制文件安装 -从 [Release 页面](https://github.com/sipeed/picoclaw/releases) 下载适用于您平台的固件。 +从 [Release 页面](https://github.com/KarakuriAgent/clawdroid/releases) 下载适用于您平台的固件。 ### 从源码安装(获取最新特性,开发推荐) ```bash -git clone https://github.com/sipeed/picoclaw.git +git clone https://github.com/KarakuriAgent/clawdroid.git -cd picoclaw +cd clawdroid make deps # 构建(无需安装) @@ -139,12 +139,12 @@ make install ## 🐳 Docker Compose -您也可以使用 Docker Compose 运行 PicoClaw,无需在本地安装任何环境。 +您也可以使用 Docker Compose 运行 ClawDroid,无需在本地安装任何环境。 ```bash # 1. 克隆仓库 -git clone https://github.com/sipeed/picoclaw.git -cd picoclaw +git clone https://github.com/KarakuriAgent/clawdroid.git +cd clawdroid # 2. 设置 API Key cp config/config.example.json config/config.json @@ -154,7 +154,7 @@ vim config/config.json # 设置 DISCORD_BOT_TOKEN, API keys 等 docker compose --profile gateway up -d # 4. 查看日志 -docker compose logs -f picoclaw-gateway +docker compose logs -f clawdroid-gateway # 5. 停止 docker compose --profile gateway down @@ -165,10 +165,10 @@ docker compose --profile gateway down ```bash # 提问 -docker compose run --rm picoclaw-agent -m "2+2 等于几?" +docker compose run --rm clawdroid-agent -m "2+2 等于几?" # 交互模式 -docker compose run --rm picoclaw-agent +docker compose run --rm clawdroid-agent ``` @@ -183,24 +183,24 @@ docker compose --profile gateway up -d ### 🚀 快速开始 > [!TIP] -> 在 `~/.picoclaw/config.json` 中设置您的 API Key。 +> 在 `~/.clawdroid/config.json` 中设置您的 API Key。 > 获取 API Key: [OpenRouter](https://openrouter.ai/keys) (LLM) · [Zhipu (智谱)](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys) (LLM) > 网络搜索是 **可选的** - 获取免费的 [Brave Search API](https://brave.com/search/api) (每月 2000 次免费查询) **1. 初始化 (Initialize)** ```bash -picoclaw onboard +clawdroid onboard ``` -**2. 配置 (Configure)** (`~/.picoclaw/config.json`) +**2. 配置 (Configure)** (`~/.clawdroid/config.json`) ```json { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.clawdroid/workspace", "model": "glm-4.7", "max_tokens": 8192, "temperature": 0.7, @@ -235,7 +235,7 @@ picoclaw onboard **4. 对话 (Chat)** ```bash -picoclaw agent -m "2+2 等于几?" +clawdroid agent -m "2+2 等于几?" ``` @@ -245,7 +245,7 @@ picoclaw agent -m "2+2 等于几?" ## 💬 聊天应用集成 (Chat Apps) -通过 Telegram, Discord 或钉钉与您的 PicoClaw 对话。 +通过 Telegram, Discord 或钉钉与您的 ClawDroid 对话。 | 渠道 | 设置难度 | | --- | --- | @@ -283,7 +283,7 @@ picoclaw agent -m "2+2 等于几?" **3. 运行** ```bash -picoclaw gateway +clawdroid gateway ``` @@ -333,7 +333,7 @@ picoclaw gateway **6. 运行** ```bash -picoclaw gateway +clawdroid gateway ``` @@ -368,7 +368,7 @@ picoclaw gateway **3. 运行** ```bash -picoclaw gateway +clawdroid gateway ``` @@ -404,7 +404,7 @@ picoclaw gateway **3. 运行** ```bash -picoclaw gateway +clawdroid gateway ``` @@ -412,20 +412,20 @@ picoclaw gateway ## ClawdChat 加入 Agent 社交网络 -只需通过 CLI 或任何集成的聊天应用发送一条消息,即可将 PicoClaw 连接到 Agent 社交网络。 +只需通过 CLI 或任何集成的聊天应用发送一条消息,即可将 ClawDroid 连接到 Agent 社交网络。 **阅读 `https://clawdchat.ai/skill.md` 并按照说明加入 [ClawdChat.ai**](https://clawdchat.ai) ## ⚙️ 配置详解 -配置文件路径: `~/.picoclaw/config.json` +配置文件路径: `~/.clawdroid/config.json` ### 工作区布局 (Workspace Layout) -PicoClaw 将数据存储在您配置的工作区中(默认:`~/.picoclaw/workspace`): +ClawDroid 将数据存储在您配置的工作区中(默认:`~/.clawdroid/workspace`): ``` -~/.picoclaw/workspace/ +~/.clawdroid/workspace/ ├── sessions/ # 对话会话和历史 ├── memory/ # 长期记忆 (MEMORY.md) ├── state/ # 持久化状态 (最后一次频道等) @@ -442,7 +442,7 @@ PicoClaw 将数据存储在您配置的工作区中(默认:`~/.picoclaw/work ### 心跳 / 周期性任务 (Heartbeat) -PicoClaw 可以自动执行周期性任务。在工作区创建 `HEARTBEAT.md` 文件: +ClawDroid 可以自动执行周期性任务。在工作区创建 `HEARTBEAT.md` 文件: ```markdown # Periodic Tasks @@ -518,8 +518,8 @@ Agent 读取 HEARTBEAT.md **环境变量:** -* `PICOCLAW_HEARTBEAT_ENABLED=false` 禁用 -* `PICOCLAW_HEARTBEAT_INTERVAL=60` 更改间隔 +* `CLAWDROID_HEARTBEAT_ENABLED=false` 禁用 +* `CLAWDROID_HEARTBEAT_INTERVAL=60` 更改间隔 ### 提供商 (Providers) @@ -549,7 +549,7 @@ Agent 读取 HEARTBEAT.md { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", + "workspace": "~/.clawdroid/workspace", "model": "glm-4.7", "max_tokens": 8192, "temperature": 0.7, @@ -569,7 +569,7 @@ Agent 读取 HEARTBEAT.md **3. 运行** ```bash -picoclaw agent -m "你好" +clawdroid agent -m "你好" ``` @@ -643,23 +643,23 @@ picoclaw agent -m "你好" | 命令 | 描述 | | --- | --- | -| `picoclaw onboard` | 初始化配置和工作区 | -| `picoclaw agent -m "..."` | 与 Agent 对话 | -| `picoclaw agent` | 交互式聊天模式 | -| `picoclaw gateway` | 启动网关 (Gateway) | -| `picoclaw status` | 显示状态 | -| `picoclaw cron list` | 列出所有定时任务 | -| `picoclaw cron add ...` | 添加定时任务 | +| `clawdroid onboard` | 初始化配置和工作区 | +| `clawdroid agent -m "..."` | 与 Agent 对话 | +| `clawdroid agent` | 交互式聊天模式 | +| `clawdroid gateway` | 启动网关 (Gateway) | +| `clawdroid status` | 显示状态 | +| `clawdroid cron list` | 列出所有定时任务 | +| `clawdroid cron add ...` | 添加定时任务 | ### 定时任务 / 提醒 (Scheduled Tasks) -PicoClaw 通过 `cron` 工具支持定时提醒和重复任务: +ClawDroid 通过 `cron` 工具支持定时提醒和重复任务: * **一次性提醒**: "Remind me in 10 minutes" (10分钟后提醒我) → 10分钟后触发一次 * **重复任务**: "Remind me every 2 hours" (每2小时提醒我) → 每2小时触发 * **Cron 表达式**: "Remind me at 9am daily" (每天上午9点提醒我) → 使用 cron 表达式 -任务存储在 `~/.picoclaw/workspace/cron/` 中并自动处理。 +任务存储在 `~/.clawdroid/workspace/cron/` 中并自动处理。 ## 🤝 贡献与路线图 (Roadmap) @@ -673,18 +673,18 @@ PicoClaw 通过 `cron` 工具支持定时提醒和重复任务: Discord: [https://discord.gg/V4sAZ9XWpN](https://discord.gg/V4sAZ9XWpN) -PicoClaw +ClawDroid ## 🐛 疑难解答 (Troubleshooting) ### 网络搜索提示 "API 配置问题" -如果您尚未配置搜索 API Key,这是正常的。PicoClaw 会提供手动搜索的帮助链接。 +如果您尚未配置搜索 API Key,这是正常的。ClawDroid 会提供手动搜索的帮助链接。 启用网络搜索: 1. 在 [https://brave.com/search/api](https://brave.com/search/api) 获取免费 API Key (每月 2000 次免费查询) -2. 添加到 `~/.picoclaw/config.json`: +2. 添加到 `~/.clawdroid/config.json`: ```json { "tools": { @@ -707,7 +707,7 @@ Discord: [https://discord.gg/V4sAZ9XWpN](https://discord.gg/V4sAZ9XWpN) ### Telegram bot 提示 "Conflict: terminated by other getUpdates" -这表示有另一个机器人实例正在运行。请确保同一时间只有一个 `picoclaw gateway` 进程在运行。 +这表示有另一个机器人实例正在运行。请确保同一时间只有一个 `clawdroid gateway` 进程在运行。 --- diff --git a/ROADMAP.md b/ROADMAP.md index 8c5c0e252..4765374c9 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,5 +1,5 @@ -# 🦐 PicoClaw Roadmap +# 🦐 ClawDroid 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 ClawDroid runs smoothly on the smallest embedded devices.* -* [**Memory Footprint Reduction**](https://github.com/sipeed/picoclaw/issues/346) +* [**Memory Footprint Reduction**](https://github.com/KarakuriAgent/clawdroid/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/KarakuriAgent/clawdroid/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/KarakuriAgent/clawdroid/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/KarakuriAgent/clawdroid/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/KarakuriAgent/clawdroid/issues/290): Native support for the **Model Context Protocol (MCP)**. + * [**Browser Automation**](https://github.com/KarakuriAgent/clawdroid/issues/293): Headless browser control via CDP (Chrome DevTools Protocol) or ActionBook. + * [**Mobile Operation**](https://github.com/KarakuriAgent/clawdroid/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/KarakuriAgent/clawdroid/issues/294) implement + * [**Model Routing**](https://github.com/KarakuriAgent/clawdroid/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/KarakuriAgent/clawdroid/issues/284): Collaboration between multiple ClawDroid instances on the same network. + * [**AIEOS**](https://github.com/KarakuriAgent/clawdroid/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/KarakuriAgent/clawdroid/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/KarakuriAgent/clawdroid/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/android/app/build.gradle.kts b/android/app/build.gradle.kts index e1c79c035..ff754fdc5 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -14,11 +14,11 @@ val keystoreProperties = Properties().apply { } android { - namespace = "io.picoclaw.android" + namespace = "io.clawdroid" compileSdk = libs.versions.android.compileSdk.get().toInt() defaultConfig { - applicationId = "io.picoclaw.android" + applicationId = "io.clawdroid" minSdk = libs.versions.android.minSdk.get().toInt() targetSdk = libs.versions.android.targetSdk.get().toInt() versionCode = 1 diff --git a/android/app/proguard-rules.pro b/android/app/proguard-rules.pro index 715b8ab86..6f6485a31 100644 --- a/android/app/proguard-rules.pro +++ b/android/app/proguard-rules.pro @@ -12,24 +12,24 @@ *** INSTANCE; kotlinx.serialization.KSerializer serializer(...); } --keepclasseswithmembers class io.picoclaw.android.** { +-keepclasseswithmembers class io.clawdroid.** { kotlinx.serialization.KSerializer serializer(...); } # Keep generated $$serializer classes --keepclassmembers class io.picoclaw.android.**$$serializer { +-keepclassmembers class io.clawdroid.**$$serializer { *** INSTANCE; *; } # Keep private ImageEntry used via Json.decodeFromString in MessageMapper --keep class io.picoclaw.android.core.data.mapper.ImageEntry { *; } +-keep class io.clawdroid.core.data.mapper.ImageEntry { *; } # ======================== # Enums stored as strings in Room DB # ======================== --keepclassmembers enum io.picoclaw.android.core.domain.model.MessageSender { *; } --keepclassmembers enum io.picoclaw.android.core.domain.model.MessageStatus { *; } +-keepclassmembers enum io.clawdroid.core.domain.model.MessageSender { *; } +-keepclassmembers enum io.clawdroid.core.domain.model.MessageStatus { *; } # ======================== # Ktor diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index a08d0287f..532f88694 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -19,13 +19,13 @@ + android:theme="@style/Theme.ClawDroid"> + android:theme="@style/Theme.ClawDroid"> @@ -50,7 +50,7 @@ android:name=".receiver.AgentMessageReceiver" android:exported="true"> - + @@ -84,7 +84,7 @@ android:value="AI voice assistant overlay for real-time conversation" /> diff --git a/android/app/src/main/java/io/picoclaw/android/PicoClawApp.kt b/android/app/src/main/java/io/clawdroid/ClawDroidApp.kt similarity index 59% rename from android/app/src/main/java/io/picoclaw/android/PicoClawApp.kt rename to android/app/src/main/java/io/clawdroid/ClawDroidApp.kt index 410f02d2c..2f4a8c157 100644 --- a/android/app/src/main/java/io/picoclaw/android/PicoClawApp.kt +++ b/android/app/src/main/java/io/clawdroid/ClawDroidApp.kt @@ -1,16 +1,16 @@ -package io.picoclaw.android +package io.clawdroid import android.app.Application -import io.picoclaw.android.di.appModule -import io.picoclaw.android.receiver.NotificationHelper +import io.clawdroid.di.appModule +import io.clawdroid.receiver.NotificationHelper import org.koin.android.ext.koin.androidContext import org.koin.core.context.startKoin -class PicoClawApp : Application() { +class ClawDroidApp : Application() { override fun onCreate() { super.onCreate() startKoin { - androidContext(this@PicoClawApp) + androidContext(this@ClawDroidApp) modules(appModule) } NotificationHelper.createNotificationChannel(this) diff --git a/android/app/src/main/java/io/picoclaw/android/MainActivity.kt b/android/app/src/main/java/io/clawdroid/MainActivity.kt similarity index 87% rename from android/app/src/main/java/io/picoclaw/android/MainActivity.kt rename to android/app/src/main/java/io/clawdroid/MainActivity.kt index babec4acd..26a7519dc 100644 --- a/android/app/src/main/java/io/picoclaw/android/MainActivity.kt +++ b/android/app/src/main/java/io/clawdroid/MainActivity.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android +package io.clawdroid import android.Manifest import android.content.pm.PackageManager @@ -12,10 +12,10 @@ import androidx.core.content.ContextCompat import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController -import io.picoclaw.android.core.ui.theme.PicoClawTheme -import io.picoclaw.android.feature.chat.screen.ChatScreen -import io.picoclaw.android.feature.chat.screen.SettingsScreen -import io.picoclaw.android.navigation.NavRoutes +import io.clawdroid.core.ui.theme.ClawDroidTheme +import io.clawdroid.feature.chat.screen.ChatScreen +import io.clawdroid.feature.chat.screen.SettingsScreen +import io.clawdroid.navigation.NavRoutes class MainActivity : ComponentActivity() { @@ -28,7 +28,7 @@ class MainActivity : ComponentActivity() { requestNotificationPermissionIfNeeded() enableEdgeToEdge() setContent { - PicoClawTheme { + ClawDroidTheme { val navController = rememberNavController() NavHost(navController = navController, startDestination = NavRoutes.CHAT) { composable(NavRoutes.CHAT) { diff --git a/android/app/src/main/java/io/picoclaw/android/PermissionRequestActivity.kt b/android/app/src/main/java/io/clawdroid/PermissionRequestActivity.kt similarity index 94% rename from android/app/src/main/java/io/picoclaw/android/PermissionRequestActivity.kt rename to android/app/src/main/java/io/clawdroid/PermissionRequestActivity.kt index ad73ff02f..2dea9dcd1 100644 --- a/android/app/src/main/java/io/picoclaw/android/PermissionRequestActivity.kt +++ b/android/app/src/main/java/io/clawdroid/PermissionRequestActivity.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android +package io.clawdroid import android.content.Context import android.content.Intent @@ -49,7 +49,7 @@ class PermissionRequestActivity : ComponentActivity() { companion object { const val EXTRA_PERMISSION = "permission" const val EXTRA_GRANTED = "granted" - const val ACTION_RESULT = "io.picoclaw.android.PERMISSION_RESULT" + const val ACTION_RESULT = "io.clawdroid.PERMISSION_RESULT" fun intent(context: Context, permission: String): Intent = Intent(context, PermissionRequestActivity::class.java) diff --git a/android/app/src/main/java/io/picoclaw/android/assistant/AccessibilityScreenshotSource.kt b/android/app/src/main/java/io/clawdroid/assistant/AccessibilityScreenshotSource.kt similarity index 94% rename from android/app/src/main/java/io/picoclaw/android/assistant/AccessibilityScreenshotSource.kt rename to android/app/src/main/java/io/clawdroid/assistant/AccessibilityScreenshotSource.kt index 5beb9d329..7e6d095f7 100644 --- a/android/app/src/main/java/io/picoclaw/android/assistant/AccessibilityScreenshotSource.kt +++ b/android/app/src/main/java/io/clawdroid/assistant/AccessibilityScreenshotSource.kt @@ -1,10 +1,10 @@ -package io.picoclaw.android.assistant +package io.clawdroid.assistant import android.accessibilityservice.AccessibilityService import android.graphics.Bitmap import android.util.Log import android.view.Display -import io.picoclaw.android.feature.chat.voice.ScreenshotSource +import io.clawdroid.feature.chat.voice.ScreenshotSource import kotlinx.coroutines.suspendCancellableCoroutine import kotlin.coroutines.resume diff --git a/android/app/src/main/java/io/picoclaw/android/assistant/AssistantActivity.kt b/android/app/src/main/java/io/clawdroid/assistant/AssistantActivity.kt similarity index 97% rename from android/app/src/main/java/io/picoclaw/android/assistant/AssistantActivity.kt rename to android/app/src/main/java/io/clawdroid/assistant/AssistantActivity.kt index 5d7cbd2d6..8900b4615 100644 --- a/android/app/src/main/java/io/picoclaw/android/assistant/AssistantActivity.kt +++ b/android/app/src/main/java/io/clawdroid/assistant/AssistantActivity.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.assistant +package io.clawdroid.assistant import android.Manifest import android.content.Intent diff --git a/android/app/src/main/java/io/picoclaw/android/assistant/AssistantService.kt b/android/app/src/main/java/io/clawdroid/assistant/AssistantService.kt similarity index 93% rename from android/app/src/main/java/io/picoclaw/android/assistant/AssistantService.kt rename to android/app/src/main/java/io/clawdroid/assistant/AssistantService.kt index 645e8b255..38da4db18 100644 --- a/android/app/src/main/java/io/picoclaw/android/assistant/AssistantService.kt +++ b/android/app/src/main/java/io/clawdroid/assistant/AssistantService.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.assistant +package io.clawdroid.assistant import android.Manifest import android.app.Notification @@ -50,20 +50,20 @@ import androidx.savedstate.SavedStateRegistryController import androidx.savedstate.SavedStateRegistryOwner import androidx.savedstate.setViewTreeSavedStateRegistryOwner import io.ktor.client.HttpClient -import io.picoclaw.android.PermissionRequestActivity -import io.picoclaw.android.core.data.remote.WebSocketClient -import io.picoclaw.android.core.data.repository.AssistantConnectionImpl -import io.picoclaw.android.core.domain.repository.AssistantConnection -import io.picoclaw.android.core.domain.repository.TtsSettingsRepository -import io.picoclaw.android.core.ui.theme.PicoClawTheme -import io.picoclaw.android.feature.chat.assistant.AssistantManager -import io.picoclaw.android.feature.chat.assistant.AssistantPillBar -import io.picoclaw.android.feature.chat.voice.CameraCaptureManager -import io.picoclaw.android.feature.chat.voice.ScreenCaptureManager -import io.picoclaw.android.feature.chat.voice.ScreenshotSource -import io.picoclaw.android.feature.chat.voice.SpeechRecognizerWrapper -import io.picoclaw.android.feature.chat.voice.TextToSpeechWrapper -import io.picoclaw.android.receiver.NotificationHelper +import io.clawdroid.PermissionRequestActivity +import io.clawdroid.core.data.remote.WebSocketClient +import io.clawdroid.core.data.repository.AssistantConnectionImpl +import io.clawdroid.core.domain.repository.AssistantConnection +import io.clawdroid.core.domain.repository.TtsSettingsRepository +import io.clawdroid.core.ui.theme.ClawDroidTheme +import io.clawdroid.feature.chat.assistant.AssistantManager +import io.clawdroid.feature.chat.assistant.AssistantPillBar +import io.clawdroid.feature.chat.voice.CameraCaptureManager +import io.clawdroid.feature.chat.voice.ScreenCaptureManager +import io.clawdroid.feature.chat.voice.ScreenshotSource +import io.clawdroid.feature.chat.voice.SpeechRecognizerWrapper +import io.clawdroid.feature.chat.voice.TextToSpeechWrapper +import io.clawdroid.receiver.NotificationHelper import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob @@ -297,7 +297,7 @@ class AssistantService : LifecycleService(), SavedStateRegistryOwner { ComposeView(this).apply { setContent { - PicoClawTheme { + ClawDroidTheme { val state by assistantManager.state.collectAsState() Box( modifier = Modifier.fillMaxSize(), @@ -348,7 +348,7 @@ class AssistantService : LifecycleService(), SavedStateRegistryOwner { ) Text( text = "画面キャプチャを使用するには、ユーザー補助の設定で" + - " PicoClaw を有効にしてください。\n\n" + + " ClawDroid を有効にしてください。\n\n" + "有効にできない場合は、アプリ情報から" + "「制限付き設定を許可」を実行してから" + "再度お試しください。", @@ -410,7 +410,7 @@ class AssistantService : LifecycleService(), SavedStateRegistryOwner { private fun buildNotification(): Notification { return NotificationCompat.Builder(this, NotificationHelper.ASSISTANT_CHANNEL_ID) .setSmallIcon(android.R.drawable.ic_btn_speak_now) - .setContentTitle("PicoClaw Assistant") + .setContentTitle("ClawDroid Assistant") .setContentText("Listening...") .setPriority(NotificationCompat.PRIORITY_LOW) .setOngoing(true) diff --git a/android/app/src/main/java/io/picoclaw/android/assistant/PicoClawAccessibilityService.kt b/android/app/src/main/java/io/clawdroid/assistant/ClawDroidAccessibilityService.kt similarity index 88% rename from android/app/src/main/java/io/picoclaw/android/assistant/PicoClawAccessibilityService.kt rename to android/app/src/main/java/io/clawdroid/assistant/ClawDroidAccessibilityService.kt index 1e8149d5b..98ee40e92 100644 --- a/android/app/src/main/java/io/picoclaw/android/assistant/PicoClawAccessibilityService.kt +++ b/android/app/src/main/java/io/clawdroid/assistant/ClawDroidAccessibilityService.kt @@ -1,10 +1,10 @@ -package io.picoclaw.android.assistant +package io.clawdroid.assistant import android.accessibilityservice.AccessibilityService import android.view.accessibility.AccessibilityEvent import org.koin.android.ext.android.inject -class PicoClawAccessibilityService : AccessibilityService() { +class ClawDroidAccessibilityService : AccessibilityService() { private val screenshotSource: AccessibilityScreenshotSource by inject() private val deviceController: DeviceController by inject() diff --git a/android/app/src/main/java/io/picoclaw/android/assistant/DeviceController.kt b/android/app/src/main/java/io/clawdroid/assistant/DeviceController.kt similarity index 98% rename from android/app/src/main/java/io/picoclaw/android/assistant/DeviceController.kt rename to android/app/src/main/java/io/clawdroid/assistant/DeviceController.kt index 23efe872b..d9b31a585 100644 --- a/android/app/src/main/java/io/picoclaw/android/assistant/DeviceController.kt +++ b/android/app/src/main/java/io/clawdroid/assistant/DeviceController.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.assistant +package io.clawdroid.assistant import android.accessibilityservice.AccessibilityService import android.accessibilityservice.GestureDescription diff --git a/android/app/src/main/java/io/picoclaw/android/assistant/ToolRequestHandler.kt b/android/app/src/main/java/io/clawdroid/assistant/ToolRequestHandler.kt similarity index 98% rename from android/app/src/main/java/io/picoclaw/android/assistant/ToolRequestHandler.kt rename to android/app/src/main/java/io/clawdroid/assistant/ToolRequestHandler.kt index a9a578842..558a77d7b 100644 --- a/android/app/src/main/java/io/picoclaw/android/assistant/ToolRequestHandler.kt +++ b/android/app/src/main/java/io/clawdroid/assistant/ToolRequestHandler.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.assistant +package io.clawdroid.assistant import android.content.Context import android.content.Intent @@ -11,9 +11,9 @@ import android.os.Build import android.util.Base64 import android.util.Log import android.view.accessibility.AccessibilityNodeInfo -import io.picoclaw.android.core.data.remote.dto.ToolRequest -import io.picoclaw.android.core.data.remote.dto.ToolResponse -import io.picoclaw.android.feature.chat.voice.ScreenshotSource +import io.clawdroid.core.data.remote.dto.ToolRequest +import io.clawdroid.core.data.remote.dto.ToolResponse +import io.clawdroid.feature.chat.voice.ScreenshotSource import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.withContext diff --git a/android/app/src/main/java/io/picoclaw/android/di/AppModule.kt b/android/app/src/main/java/io/clawdroid/di/AppModule.kt similarity index 63% rename from android/app/src/main/java/io/picoclaw/android/di/AppModule.kt rename to android/app/src/main/java/io/clawdroid/di/AppModule.kt index 8ee267e2d..b3562cc21 100644 --- a/android/app/src/main/java/io/picoclaw/android/di/AppModule.kt +++ b/android/app/src/main/java/io/clawdroid/di/AppModule.kt @@ -1,35 +1,35 @@ -package io.picoclaw.android.di +package io.clawdroid.di import androidx.room.Room import io.ktor.client.HttpClient import io.ktor.client.engine.okhttp.OkHttp import io.ktor.client.plugins.websocket.WebSockets -import io.picoclaw.android.core.data.local.AppDatabase -import io.picoclaw.android.assistant.AccessibilityScreenshotSource -import io.picoclaw.android.assistant.DeviceController -import io.picoclaw.android.core.data.local.ImageFileStorage -import io.picoclaw.android.feature.chat.voice.ScreenshotSource -import io.picoclaw.android.core.data.remote.WebSocketClient -import io.picoclaw.android.assistant.ToolRequestHandler -import io.picoclaw.android.core.data.repository.ChatRepositoryImpl -import io.picoclaw.android.core.data.repository.TtsCatalogRepositoryImpl -import io.picoclaw.android.core.data.repository.TtsSettingsRepositoryImpl -import io.picoclaw.android.core.domain.repository.ChatRepository -import io.picoclaw.android.core.domain.repository.TtsCatalogRepository -import io.picoclaw.android.core.domain.repository.TtsSettingsRepository -import io.picoclaw.android.core.domain.usecase.ConnectChatUseCase -import io.picoclaw.android.core.domain.usecase.DisconnectChatUseCase -import io.picoclaw.android.core.domain.usecase.LoadMoreMessagesUseCase -import io.picoclaw.android.core.domain.usecase.ObserveConnectionUseCase -import io.picoclaw.android.core.domain.usecase.ObserveMessagesUseCase -import io.picoclaw.android.core.domain.usecase.ObserveStatusUseCase -import io.picoclaw.android.core.domain.usecase.SendMessageUseCase -import io.picoclaw.android.feature.chat.ChatViewModel -import io.picoclaw.android.feature.chat.SettingsViewModel -import io.picoclaw.android.feature.chat.voice.SpeechRecognizerWrapper -import io.picoclaw.android.feature.chat.voice.TextToSpeechWrapper -import io.picoclaw.android.feature.chat.voice.CameraCaptureManager -import io.picoclaw.android.feature.chat.voice.VoiceModeManager +import io.clawdroid.core.data.local.AppDatabase +import io.clawdroid.assistant.AccessibilityScreenshotSource +import io.clawdroid.assistant.DeviceController +import io.clawdroid.core.data.local.ImageFileStorage +import io.clawdroid.feature.chat.voice.ScreenshotSource +import io.clawdroid.core.data.remote.WebSocketClient +import io.clawdroid.assistant.ToolRequestHandler +import io.clawdroid.core.data.repository.ChatRepositoryImpl +import io.clawdroid.core.data.repository.TtsCatalogRepositoryImpl +import io.clawdroid.core.data.repository.TtsSettingsRepositoryImpl +import io.clawdroid.core.domain.repository.ChatRepository +import io.clawdroid.core.domain.repository.TtsCatalogRepository +import io.clawdroid.core.domain.repository.TtsSettingsRepository +import io.clawdroid.core.domain.usecase.ConnectChatUseCase +import io.clawdroid.core.domain.usecase.DisconnectChatUseCase +import io.clawdroid.core.domain.usecase.LoadMoreMessagesUseCase +import io.clawdroid.core.domain.usecase.ObserveConnectionUseCase +import io.clawdroid.core.domain.usecase.ObserveMessagesUseCase +import io.clawdroid.core.domain.usecase.ObserveStatusUseCase +import io.clawdroid.core.domain.usecase.SendMessageUseCase +import io.clawdroid.feature.chat.ChatViewModel +import io.clawdroid.feature.chat.SettingsViewModel +import io.clawdroid.feature.chat.voice.SpeechRecognizerWrapper +import io.clawdroid.feature.chat.voice.TextToSpeechWrapper +import io.clawdroid.feature.chat.voice.CameraCaptureManager +import io.clawdroid.feature.chat.voice.VoiceModeManager import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob @@ -49,7 +49,7 @@ val appModule = module { Room.databaseBuilder( androidContext(), AppDatabase::class.java, - "picoclaw.db" + "clawdroid.db" ).fallbackToDestructiveMigration(dropAllTables = true).build() } single { get().messageDao() } @@ -68,7 +68,7 @@ val appModule = module { // WebSocketClient single { - val prefs = androidContext().getSharedPreferences("picoclaw", android.content.Context.MODE_PRIVATE) + val prefs = androidContext().getSharedPreferences("clawdroid", android.content.Context.MODE_PRIVATE) val clientId = prefs.getString("client_id", null) ?: UUID.randomUUID().toString().also { prefs.edit().putString("client_id", it).apply() } diff --git a/android/app/src/main/java/io/picoclaw/android/navigation/NavRoutes.kt b/android/app/src/main/java/io/clawdroid/navigation/NavRoutes.kt similarity index 68% rename from android/app/src/main/java/io/picoclaw/android/navigation/NavRoutes.kt rename to android/app/src/main/java/io/clawdroid/navigation/NavRoutes.kt index 734ce76dc..bcc48c266 100644 --- a/android/app/src/main/java/io/picoclaw/android/navigation/NavRoutes.kt +++ b/android/app/src/main/java/io/clawdroid/navigation/NavRoutes.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.navigation +package io.clawdroid.navigation object NavRoutes { const val CHAT = "chat" diff --git a/android/app/src/main/java/io/picoclaw/android/receiver/AgentMessageReceiver.kt b/android/app/src/main/java/io/clawdroid/receiver/AgentMessageReceiver.kt similarity index 87% rename from android/app/src/main/java/io/picoclaw/android/receiver/AgentMessageReceiver.kt rename to android/app/src/main/java/io/clawdroid/receiver/AgentMessageReceiver.kt index 9da27fc50..2b8abe211 100644 --- a/android/app/src/main/java/io/picoclaw/android/receiver/AgentMessageReceiver.kt +++ b/android/app/src/main/java/io/clawdroid/receiver/AgentMessageReceiver.kt @@ -1,12 +1,12 @@ -package io.picoclaw.android.receiver +package io.clawdroid.receiver import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.util.Log -import io.picoclaw.android.core.data.local.dao.MessageDao -import io.picoclaw.android.core.data.mapper.MessageMapper -import io.picoclaw.android.core.data.remote.dto.WsOutgoing +import io.clawdroid.core.data.local.dao.MessageDao +import io.clawdroid.core.data.mapper.MessageMapper +import io.clawdroid.core.data.remote.dto.WsOutgoing import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import kotlinx.serialization.json.Json @@ -57,6 +57,6 @@ class AgentMessageReceiver : BroadcastReceiver(), KoinComponent { companion object { private const val TAG = "AgentMessageReceiver" - const val ACTION = "io.picoclaw.android.AGENT_MESSAGE" + const val ACTION = "io.clawdroid.AGENT_MESSAGE" } } diff --git a/android/app/src/main/java/io/picoclaw/android/receiver/NotificationHelper.kt b/android/app/src/main/java/io/clawdroid/receiver/NotificationHelper.kt similarity index 89% rename from android/app/src/main/java/io/picoclaw/android/receiver/NotificationHelper.kt rename to android/app/src/main/java/io/clawdroid/receiver/NotificationHelper.kt index 8a3952455..6d610528f 100644 --- a/android/app/src/main/java/io/picoclaw/android/receiver/NotificationHelper.kt +++ b/android/app/src/main/java/io/clawdroid/receiver/NotificationHelper.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.receiver +package io.clawdroid.receiver import android.app.NotificationChannel import android.app.NotificationManager @@ -8,11 +8,11 @@ import androidx.core.app.NotificationCompat object NotificationHelper { - private const val CHANNEL_ID = "picoclaw_messages" + private const val CHANNEL_ID = "clawdroid_messages" private const val CHANNEL_NAME = "Agent Messages" private const val NOTIFICATION_ID = 1001 - const val ASSISTANT_CHANNEL_ID = "picoclaw_assistant" + const val ASSISTANT_CHANNEL_ID = "clawdroid_assistant" private const val ASSISTANT_CHANNEL_NAME = "Assistant" fun createNotificationChannel(context: Context) { @@ -23,7 +23,7 @@ object NotificationHelper { CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT ).apply { - description = "Messages from PicoClaw agent" + description = "Messages from ClawDroid agent" } manager.createNotificationChannel(messageChannel) @@ -47,7 +47,7 @@ object NotificationHelper { val notification = NotificationCompat.Builder(context, CHANNEL_ID) .setSmallIcon(android.R.drawable.ic_dialog_info) - .setContentTitle("PicoClaw") + .setContentTitle("ClawDroid") .setContentText(content.take(200)) .setStyle(NotificationCompat.BigTextStyle().bigText(content.take(1000))) .setPriority(NotificationCompat.PRIORITY_DEFAULT) diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index ea06a70b3..a99e76581 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -1,4 +1,4 @@ - PicoClaw - Allows PicoClaw to capture screenshots during voice assistant conversations. + ClawDroid + Allows ClawDroid to capture screenshots during voice assistant conversations. diff --git a/android/app/src/main/res/values/themes.xml b/android/app/src/main/res/values/themes.xml index e390a99af..ef3c69d5e 100644 --- a/android/app/src/main/res/values/themes.xml +++ b/android/app/src/main/res/values/themes.xml @@ -1,6 +1,6 @@ - diff --git a/android/core/data/build.gradle.kts b/android/core/data/build.gradle.kts index 9cceec66f..6b05b5410 100644 --- a/android/core/data/build.gradle.kts +++ b/android/core/data/build.gradle.kts @@ -5,7 +5,7 @@ plugins { } android { - namespace = "io.picoclaw.android.core.data" + namespace = "io.clawdroid.core.data" compileSdk = libs.versions.android.compileSdk.get().toInt() defaultConfig { diff --git a/android/core/data/src/main/java/io/picoclaw/android/core/data/local/AppDatabase.kt b/android/core/data/src/main/java/io/clawdroid/core/data/local/AppDatabase.kt similarity index 57% rename from android/core/data/src/main/java/io/picoclaw/android/core/data/local/AppDatabase.kt rename to android/core/data/src/main/java/io/clawdroid/core/data/local/AppDatabase.kt index 2883e1064..042916e28 100644 --- a/android/core/data/src/main/java/io/picoclaw/android/core/data/local/AppDatabase.kt +++ b/android/core/data/src/main/java/io/clawdroid/core/data/local/AppDatabase.kt @@ -1,11 +1,11 @@ -package io.picoclaw.android.core.data.local +package io.clawdroid.core.data.local import androidx.room.Database import androidx.room.RoomDatabase import androidx.room.TypeConverters -import io.picoclaw.android.core.data.local.converter.Converters -import io.picoclaw.android.core.data.local.dao.MessageDao -import io.picoclaw.android.core.data.local.entity.MessageEntity +import io.clawdroid.core.data.local.converter.Converters +import io.clawdroid.core.data.local.dao.MessageDao +import io.clawdroid.core.data.local.entity.MessageEntity @Database(entities = [MessageEntity::class], version = 1, exportSchema = false) @TypeConverters(Converters::class) diff --git a/android/core/data/src/main/java/io/picoclaw/android/core/data/local/ImageFileStorage.kt b/android/core/data/src/main/java/io/clawdroid/core/data/local/ImageFileStorage.kt similarity index 92% rename from android/core/data/src/main/java/io/picoclaw/android/core/data/local/ImageFileStorage.kt rename to android/core/data/src/main/java/io/clawdroid/core/data/local/ImageFileStorage.kt index 504718efe..49d4ba33e 100644 --- a/android/core/data/src/main/java/io/picoclaw/android/core/data/local/ImageFileStorage.kt +++ b/android/core/data/src/main/java/io/clawdroid/core/data/local/ImageFileStorage.kt @@ -1,10 +1,10 @@ -package io.picoclaw.android.core.data.local +package io.clawdroid.core.data.local import android.content.Context import android.graphics.BitmapFactory import android.net.Uri import android.util.Base64 -import io.picoclaw.android.core.domain.model.ImageData +import io.clawdroid.core.domain.model.ImageData import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import java.io.File diff --git a/android/core/data/src/main/java/io/picoclaw/android/core/data/local/converter/Converters.kt b/android/core/data/src/main/java/io/clawdroid/core/data/local/converter/Converters.kt similarity index 88% rename from android/core/data/src/main/java/io/picoclaw/android/core/data/local/converter/Converters.kt rename to android/core/data/src/main/java/io/clawdroid/core/data/local/converter/Converters.kt index 39d0cda01..5f9275a37 100644 --- a/android/core/data/src/main/java/io/picoclaw/android/core/data/local/converter/Converters.kt +++ b/android/core/data/src/main/java/io/clawdroid/core/data/local/converter/Converters.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.core.data.local.converter +package io.clawdroid.core.data.local.converter import androidx.room.TypeConverter import kotlinx.serialization.encodeToString diff --git a/android/core/data/src/main/java/io/picoclaw/android/core/data/local/dao/MessageDao.kt b/android/core/data/src/main/java/io/clawdroid/core/data/local/dao/MessageDao.kt similarity index 86% rename from android/core/data/src/main/java/io/picoclaw/android/core/data/local/dao/MessageDao.kt rename to android/core/data/src/main/java/io/clawdroid/core/data/local/dao/MessageDao.kt index 3dd10288f..ed8ea2043 100644 --- a/android/core/data/src/main/java/io/picoclaw/android/core/data/local/dao/MessageDao.kt +++ b/android/core/data/src/main/java/io/clawdroid/core/data/local/dao/MessageDao.kt @@ -1,11 +1,11 @@ -package io.picoclaw.android.core.data.local.dao +package io.clawdroid.core.data.local.dao import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query import androidx.room.Update -import io.picoclaw.android.core.data.local.entity.MessageEntity +import io.clawdroid.core.data.local.entity.MessageEntity import kotlinx.coroutines.flow.Flow @Dao diff --git a/android/core/data/src/main/java/io/picoclaw/android/core/data/local/entity/MessageEntity.kt b/android/core/data/src/main/java/io/clawdroid/core/data/local/entity/MessageEntity.kt similarity index 86% rename from android/core/data/src/main/java/io/picoclaw/android/core/data/local/entity/MessageEntity.kt rename to android/core/data/src/main/java/io/clawdroid/core/data/local/entity/MessageEntity.kt index 61ba48928..a21a94be5 100644 --- a/android/core/data/src/main/java/io/picoclaw/android/core/data/local/entity/MessageEntity.kt +++ b/android/core/data/src/main/java/io/clawdroid/core/data/local/entity/MessageEntity.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.core.data.local.entity +package io.clawdroid.core.data.local.entity import androidx.room.Entity import androidx.room.PrimaryKey diff --git a/android/core/data/src/main/java/io/picoclaw/android/core/data/mapper/MessageMapper.kt b/android/core/data/src/main/java/io/clawdroid/core/data/mapper/MessageMapper.kt similarity index 83% rename from android/core/data/src/main/java/io/picoclaw/android/core/data/mapper/MessageMapper.kt rename to android/core/data/src/main/java/io/clawdroid/core/data/mapper/MessageMapper.kt index 2954b8422..ee9ff24af 100644 --- a/android/core/data/src/main/java/io/picoclaw/android/core/data/mapper/MessageMapper.kt +++ b/android/core/data/src/main/java/io/clawdroid/core/data/mapper/MessageMapper.kt @@ -1,13 +1,13 @@ -package io.picoclaw.android.core.data.mapper +package io.clawdroid.core.data.mapper import android.util.Log -import io.picoclaw.android.core.data.local.entity.MessageEntity -import io.picoclaw.android.core.data.remote.dto.WsIncoming -import io.picoclaw.android.core.data.remote.dto.WsOutgoing -import io.picoclaw.android.core.domain.model.ChatMessage -import io.picoclaw.android.core.domain.model.ImageData -import io.picoclaw.android.core.domain.model.MessageSender -import io.picoclaw.android.core.domain.model.MessageStatus +import io.clawdroid.core.data.local.entity.MessageEntity +import io.clawdroid.core.data.remote.dto.WsIncoming +import io.clawdroid.core.data.remote.dto.WsOutgoing +import io.clawdroid.core.domain.model.ChatMessage +import io.clawdroid.core.domain.model.ImageData +import io.clawdroid.core.domain.model.MessageSender +import io.clawdroid.core.domain.model.MessageStatus import kotlinx.serialization.Serializable import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json diff --git a/android/core/data/src/main/java/io/picoclaw/android/core/data/remote/WebSocketClient.kt b/android/core/data/src/main/java/io/clawdroid/core/data/remote/WebSocketClient.kt similarity index 94% rename from android/core/data/src/main/java/io/picoclaw/android/core/data/remote/WebSocketClient.kt rename to android/core/data/src/main/java/io/clawdroid/core/data/remote/WebSocketClient.kt index 693d428b2..d35b7d9c5 100644 --- a/android/core/data/src/main/java/io/picoclaw/android/core/data/remote/WebSocketClient.kt +++ b/android/core/data/src/main/java/io/clawdroid/core/data/remote/WebSocketClient.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.core.data.remote +package io.clawdroid.core.data.remote import android.util.Log import io.ktor.client.HttpClient @@ -6,9 +6,9 @@ import io.ktor.client.plugins.websocket.webSocket import io.ktor.websocket.Frame import io.ktor.websocket.WebSocketSession import io.ktor.websocket.readText -import io.picoclaw.android.core.data.remote.dto.WsIncoming -import io.picoclaw.android.core.data.remote.dto.WsOutgoing -import io.picoclaw.android.core.domain.model.ConnectionState +import io.clawdroid.core.data.remote.dto.WsIncoming +import io.clawdroid.core.data.remote.dto.WsOutgoing +import io.clawdroid.core.domain.model.ConnectionState import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job import kotlinx.coroutines.delay diff --git a/android/core/data/src/main/java/io/picoclaw/android/core/data/remote/dto/ToolRequest.kt b/android/core/data/src/main/java/io/clawdroid/core/data/remote/dto/ToolRequest.kt similarity index 85% rename from android/core/data/src/main/java/io/picoclaw/android/core/data/remote/dto/ToolRequest.kt rename to android/core/data/src/main/java/io/clawdroid/core/data/remote/dto/ToolRequest.kt index 779bc1887..fb21248ac 100644 --- a/android/core/data/src/main/java/io/picoclaw/android/core/data/remote/dto/ToolRequest.kt +++ b/android/core/data/src/main/java/io/clawdroid/core/data/remote/dto/ToolRequest.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.core.data.remote.dto +package io.clawdroid.core.data.remote.dto import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/android/core/data/src/main/java/io/picoclaw/android/core/data/remote/dto/ToolResponse.kt b/android/core/data/src/main/java/io/clawdroid/core/data/remote/dto/ToolResponse.kt similarity index 84% rename from android/core/data/src/main/java/io/picoclaw/android/core/data/remote/dto/ToolResponse.kt rename to android/core/data/src/main/java/io/clawdroid/core/data/remote/dto/ToolResponse.kt index e335a145d..ca3878861 100644 --- a/android/core/data/src/main/java/io/picoclaw/android/core/data/remote/dto/ToolResponse.kt +++ b/android/core/data/src/main/java/io/clawdroid/core/data/remote/dto/ToolResponse.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.core.data.remote.dto +package io.clawdroid.core.data.remote.dto import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/android/core/data/src/main/java/io/picoclaw/android/core/data/remote/dto/WsIncoming.kt b/android/core/data/src/main/java/io/clawdroid/core/data/remote/dto/WsIncoming.kt similarity index 88% rename from android/core/data/src/main/java/io/picoclaw/android/core/data/remote/dto/WsIncoming.kt rename to android/core/data/src/main/java/io/clawdroid/core/data/remote/dto/WsIncoming.kt index 4995da5e3..0f84d3263 100644 --- a/android/core/data/src/main/java/io/picoclaw/android/core/data/remote/dto/WsIncoming.kt +++ b/android/core/data/src/main/java/io/clawdroid/core/data/remote/dto/WsIncoming.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.core.data.remote.dto +package io.clawdroid.core.data.remote.dto import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/android/core/data/src/main/java/io/picoclaw/android/core/data/remote/dto/WsOutgoing.kt b/android/core/data/src/main/java/io/clawdroid/core/data/remote/dto/WsOutgoing.kt similarity index 73% rename from android/core/data/src/main/java/io/picoclaw/android/core/data/remote/dto/WsOutgoing.kt rename to android/core/data/src/main/java/io/clawdroid/core/data/remote/dto/WsOutgoing.kt index f2c873ca6..06d3db225 100644 --- a/android/core/data/src/main/java/io/picoclaw/android/core/data/remote/dto/WsOutgoing.kt +++ b/android/core/data/src/main/java/io/clawdroid/core/data/remote/dto/WsOutgoing.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.core.data.remote.dto +package io.clawdroid.core.data.remote.dto import kotlinx.serialization.Serializable diff --git a/android/core/data/src/main/java/io/picoclaw/android/core/data/repository/AssistantConnectionImpl.kt b/android/core/data/src/main/java/io/clawdroid/core/data/repository/AssistantConnectionImpl.kt similarity index 89% rename from android/core/data/src/main/java/io/picoclaw/android/core/data/repository/AssistantConnectionImpl.kt rename to android/core/data/src/main/java/io/clawdroid/core/data/repository/AssistantConnectionImpl.kt index c3322550e..cae5e0c7c 100644 --- a/android/core/data/src/main/java/io/picoclaw/android/core/data/repository/AssistantConnectionImpl.kt +++ b/android/core/data/src/main/java/io/clawdroid/core/data/repository/AssistantConnectionImpl.kt @@ -1,13 +1,13 @@ -package io.picoclaw.android.core.data.repository +package io.clawdroid.core.data.repository import android.util.Log import io.ktor.client.HttpClient -import io.picoclaw.android.core.data.remote.WebSocketClient -import io.picoclaw.android.core.data.remote.dto.ToolRequest -import io.picoclaw.android.core.data.remote.dto.WsIncoming -import io.picoclaw.android.core.domain.model.AssistantMessage -import io.picoclaw.android.core.domain.model.ConnectionState -import io.picoclaw.android.core.domain.repository.AssistantConnection +import io.clawdroid.core.data.remote.WebSocketClient +import io.clawdroid.core.data.remote.dto.ToolRequest +import io.clawdroid.core.data.remote.dto.WsIncoming +import io.clawdroid.core.domain.model.AssistantMessage +import io.clawdroid.core.domain.model.ConnectionState +import io.clawdroid.core.domain.repository.AssistantConnection import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob diff --git a/android/core/data/src/main/java/io/picoclaw/android/core/data/repository/ChatRepositoryImpl.kt b/android/core/data/src/main/java/io/clawdroid/core/data/repository/ChatRepositoryImpl.kt similarity index 84% rename from android/core/data/src/main/java/io/picoclaw/android/core/data/repository/ChatRepositoryImpl.kt rename to android/core/data/src/main/java/io/clawdroid/core/data/repository/ChatRepositoryImpl.kt index 1c26f6db2..a39c992cc 100644 --- a/android/core/data/src/main/java/io/picoclaw/android/core/data/repository/ChatRepositoryImpl.kt +++ b/android/core/data/src/main/java/io/clawdroid/core/data/repository/ChatRepositoryImpl.kt @@ -1,17 +1,17 @@ -package io.picoclaw.android.core.data.repository +package io.clawdroid.core.data.repository import android.util.Log -import io.picoclaw.android.core.data.local.ImageFileStorage -import io.picoclaw.android.core.data.local.dao.MessageDao -import io.picoclaw.android.core.data.mapper.MessageMapper -import io.picoclaw.android.core.data.remote.WebSocketClient -import io.picoclaw.android.core.data.remote.dto.ToolRequest -import io.picoclaw.android.core.data.remote.dto.WsIncoming -import io.picoclaw.android.core.domain.model.ChatMessage -import io.picoclaw.android.core.domain.model.ConnectionState -import io.picoclaw.android.core.domain.model.ImageAttachment -import io.picoclaw.android.core.domain.model.MessageStatus -import io.picoclaw.android.core.domain.repository.ChatRepository +import io.clawdroid.core.data.local.ImageFileStorage +import io.clawdroid.core.data.local.dao.MessageDao +import io.clawdroid.core.data.mapper.MessageMapper +import io.clawdroid.core.data.remote.WebSocketClient +import io.clawdroid.core.data.remote.dto.ToolRequest +import io.clawdroid.core.data.remote.dto.WsIncoming +import io.clawdroid.core.domain.model.ChatMessage +import io.clawdroid.core.domain.model.ConnectionState +import io.clawdroid.core.domain.model.ImageAttachment +import io.clawdroid.core.domain.model.MessageStatus +import io.clawdroid.core.domain.repository.ChatRepository import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted diff --git a/android/core/data/src/main/java/io/picoclaw/android/core/data/repository/TtsCatalogRepositoryImpl.kt b/android/core/data/src/main/java/io/clawdroid/core/data/repository/TtsCatalogRepositoryImpl.kt similarity index 91% rename from android/core/data/src/main/java/io/picoclaw/android/core/data/repository/TtsCatalogRepositoryImpl.kt rename to android/core/data/src/main/java/io/clawdroid/core/data/repository/TtsCatalogRepositoryImpl.kt index 7968d9460..0ad7f826c 100644 --- a/android/core/data/src/main/java/io/picoclaw/android/core/data/repository/TtsCatalogRepositoryImpl.kt +++ b/android/core/data/src/main/java/io/clawdroid/core/data/repository/TtsCatalogRepositoryImpl.kt @@ -1,11 +1,11 @@ -package io.picoclaw.android.core.data.repository +package io.clawdroid.core.data.repository import android.content.Context import android.speech.tts.TextToSpeech -import io.picoclaw.android.core.domain.model.TtsConfig -import io.picoclaw.android.core.domain.model.TtsEngineInfo -import io.picoclaw.android.core.domain.model.TtsVoiceInfo -import io.picoclaw.android.core.domain.repository.TtsCatalogRepository +import io.clawdroid.core.domain.model.TtsConfig +import io.clawdroid.core.domain.model.TtsEngineInfo +import io.clawdroid.core.domain.model.TtsVoiceInfo +import io.clawdroid.core.domain.repository.TtsCatalogRepository import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow diff --git a/android/core/data/src/main/java/io/picoclaw/android/core/data/repository/TtsSettingsRepositoryImpl.kt b/android/core/data/src/main/java/io/clawdroid/core/data/repository/TtsSettingsRepositoryImpl.kt similarity index 92% rename from android/core/data/src/main/java/io/picoclaw/android/core/data/repository/TtsSettingsRepositoryImpl.kt rename to android/core/data/src/main/java/io/clawdroid/core/data/repository/TtsSettingsRepositoryImpl.kt index 787643b67..b5cc3d137 100644 --- a/android/core/data/src/main/java/io/picoclaw/android/core/data/repository/TtsSettingsRepositoryImpl.kt +++ b/android/core/data/src/main/java/io/clawdroid/core/data/repository/TtsSettingsRepositoryImpl.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.core.data.repository +package io.clawdroid.core.data.repository import android.content.Context import androidx.datastore.core.DataStore @@ -7,8 +7,8 @@ import androidx.datastore.preferences.core.edit import androidx.datastore.preferences.core.floatPreferencesKey import androidx.datastore.preferences.core.stringPreferencesKey import androidx.datastore.preferences.preferencesDataStore -import io.picoclaw.android.core.domain.model.TtsConfig -import io.picoclaw.android.core.domain.repository.TtsSettingsRepository +import io.clawdroid.core.domain.model.TtsConfig +import io.clawdroid.core.domain.repository.TtsSettingsRepository import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map diff --git a/android/core/domain/build.gradle.kts b/android/core/domain/build.gradle.kts index 9a3157ee1..fd90ce135 100644 --- a/android/core/domain/build.gradle.kts +++ b/android/core/domain/build.gradle.kts @@ -3,7 +3,7 @@ plugins { } android { - namespace = "io.picoclaw.android.core.domain" + namespace = "io.clawdroid.core.domain" compileSdk = libs.versions.android.compileSdk.get().toInt() defaultConfig { diff --git a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/AssistantMessage.kt b/android/core/domain/src/main/java/io/clawdroid/core/domain/model/AssistantMessage.kt similarity index 65% rename from android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/AssistantMessage.kt rename to android/core/domain/src/main/java/io/clawdroid/core/domain/model/AssistantMessage.kt index df1a8c473..463364432 100644 --- a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/AssistantMessage.kt +++ b/android/core/domain/src/main/java/io/clawdroid/core/domain/model/AssistantMessage.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.core.domain.model +package io.clawdroid.core.domain.model data class AssistantMessage( val content: String, diff --git a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/ChatMessage.kt b/android/core/domain/src/main/java/io/clawdroid/core/domain/model/ChatMessage.kt similarity index 88% rename from android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/ChatMessage.kt rename to android/core/domain/src/main/java/io/clawdroid/core/domain/model/ChatMessage.kt index 59716f7d3..855bd3d5b 100644 --- a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/ChatMessage.kt +++ b/android/core/domain/src/main/java/io/clawdroid/core/domain/model/ChatMessage.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.core.domain.model +package io.clawdroid.core.domain.model data class ChatMessage( val id: String, diff --git a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/ConnectionState.kt b/android/core/domain/src/main/java/io/clawdroid/core/domain/model/ConnectionState.kt similarity index 65% rename from android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/ConnectionState.kt rename to android/core/domain/src/main/java/io/clawdroid/core/domain/model/ConnectionState.kt index eecc14cac..bd365a1ab 100644 --- a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/ConnectionState.kt +++ b/android/core/domain/src/main/java/io/clawdroid/core/domain/model/ConnectionState.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.core.domain.model +package io.clawdroid.core.domain.model enum class ConnectionState { DISCONNECTED, CONNECTING, CONNECTED, RECONNECTING diff --git a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/ImageAttachment.kt b/android/core/domain/src/main/java/io/clawdroid/core/domain/model/ImageAttachment.kt similarity index 66% rename from android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/ImageAttachment.kt rename to android/core/domain/src/main/java/io/clawdroid/core/domain/model/ImageAttachment.kt index 39b577f5c..d4b5a79bc 100644 --- a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/ImageAttachment.kt +++ b/android/core/domain/src/main/java/io/clawdroid/core/domain/model/ImageAttachment.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.core.domain.model +package io.clawdroid.core.domain.model data class ImageAttachment( val uri: String, diff --git a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/ImageData.kt b/android/core/domain/src/main/java/io/clawdroid/core/domain/model/ImageData.kt similarity index 65% rename from android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/ImageData.kt rename to android/core/domain/src/main/java/io/clawdroid/core/domain/model/ImageData.kt index ab7abe70d..ca70789cf 100644 --- a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/ImageData.kt +++ b/android/core/domain/src/main/java/io/clawdroid/core/domain/model/ImageData.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.core.domain.model +package io.clawdroid.core.domain.model data class ImageData( val path: String, diff --git a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/TtsConfig.kt b/android/core/domain/src/main/java/io/clawdroid/core/domain/model/TtsConfig.kt similarity index 78% rename from android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/TtsConfig.kt rename to android/core/domain/src/main/java/io/clawdroid/core/domain/model/TtsConfig.kt index 498b11abd..34084e0fd 100644 --- a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/TtsConfig.kt +++ b/android/core/domain/src/main/java/io/clawdroid/core/domain/model/TtsConfig.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.core.domain.model +package io.clawdroid.core.domain.model data class TtsConfig( val enginePackageName: String? = null, diff --git a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/TtsEngineInfo.kt b/android/core/domain/src/main/java/io/clawdroid/core/domain/model/TtsEngineInfo.kt similarity index 63% rename from android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/TtsEngineInfo.kt rename to android/core/domain/src/main/java/io/clawdroid/core/domain/model/TtsEngineInfo.kt index 60d6ae66d..a0e25d73f 100644 --- a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/TtsEngineInfo.kt +++ b/android/core/domain/src/main/java/io/clawdroid/core/domain/model/TtsEngineInfo.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.core.domain.model +package io.clawdroid.core.domain.model data class TtsEngineInfo( val packageName: String, diff --git a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/TtsVoiceInfo.kt b/android/core/domain/src/main/java/io/clawdroid/core/domain/model/TtsVoiceInfo.kt similarity index 69% rename from android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/TtsVoiceInfo.kt rename to android/core/domain/src/main/java/io/clawdroid/core/domain/model/TtsVoiceInfo.kt index 916ffd9a5..d197a081a 100644 --- a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/TtsVoiceInfo.kt +++ b/android/core/domain/src/main/java/io/clawdroid/core/domain/model/TtsVoiceInfo.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.core.domain.model +package io.clawdroid.core.domain.model data class TtsVoiceInfo( val name: String, diff --git a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/VoicePhase.kt b/android/core/domain/src/main/java/io/clawdroid/core/domain/model/VoicePhase.kt similarity index 64% rename from android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/VoicePhase.kt rename to android/core/domain/src/main/java/io/clawdroid/core/domain/model/VoicePhase.kt index 787993396..8ee8dc2f3 100644 --- a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/model/VoicePhase.kt +++ b/android/core/domain/src/main/java/io/clawdroid/core/domain/model/VoicePhase.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.core.domain.model +package io.clawdroid.core.domain.model enum class VoicePhase { IDLE, LISTENING, SENDING, THINKING, SPEAKING, ERROR diff --git a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/repository/AssistantConnection.kt b/android/core/domain/src/main/java/io/clawdroid/core/domain/repository/AssistantConnection.kt similarity index 70% rename from android/core/domain/src/main/java/io/picoclaw/android/core/domain/repository/AssistantConnection.kt rename to android/core/domain/src/main/java/io/clawdroid/core/domain/repository/AssistantConnection.kt index db84d3164..dedcb304d 100644 --- a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/repository/AssistantConnection.kt +++ b/android/core/domain/src/main/java/io/clawdroid/core/domain/repository/AssistantConnection.kt @@ -1,7 +1,7 @@ -package io.picoclaw.android.core.domain.repository +package io.clawdroid.core.domain.repository -import io.picoclaw.android.core.domain.model.AssistantMessage -import io.picoclaw.android.core.domain.model.ConnectionState +import io.clawdroid.core.domain.model.AssistantMessage +import io.clawdroid.core.domain.model.ConnectionState import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.StateFlow diff --git a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/repository/ChatRepository.kt b/android/core/domain/src/main/java/io/clawdroid/core/domain/repository/ChatRepository.kt similarity index 62% rename from android/core/domain/src/main/java/io/picoclaw/android/core/domain/repository/ChatRepository.kt rename to android/core/domain/src/main/java/io/clawdroid/core/domain/repository/ChatRepository.kt index ddcc02b8f..90d43e247 100644 --- a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/repository/ChatRepository.kt +++ b/android/core/domain/src/main/java/io/clawdroid/core/domain/repository/ChatRepository.kt @@ -1,8 +1,8 @@ -package io.picoclaw.android.core.domain.repository +package io.clawdroid.core.domain.repository -import io.picoclaw.android.core.domain.model.ChatMessage -import io.picoclaw.android.core.domain.model.ConnectionState -import io.picoclaw.android.core.domain.model.ImageAttachment +import io.clawdroid.core.domain.model.ChatMessage +import io.clawdroid.core.domain.model.ConnectionState +import io.clawdroid.core.domain.model.ImageAttachment import kotlinx.coroutines.flow.StateFlow interface ChatRepository { diff --git a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/repository/TtsCatalogRepository.kt b/android/core/domain/src/main/java/io/clawdroid/core/domain/repository/TtsCatalogRepository.kt similarity index 53% rename from android/core/domain/src/main/java/io/picoclaw/android/core/domain/repository/TtsCatalogRepository.kt rename to android/core/domain/src/main/java/io/clawdroid/core/domain/repository/TtsCatalogRepository.kt index fe7c67f9d..f2cc56085 100644 --- a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/repository/TtsCatalogRepository.kt +++ b/android/core/domain/src/main/java/io/clawdroid/core/domain/repository/TtsCatalogRepository.kt @@ -1,7 +1,7 @@ -package io.picoclaw.android.core.domain.repository +package io.clawdroid.core.domain.repository -import io.picoclaw.android.core.domain.model.TtsEngineInfo -import io.picoclaw.android.core.domain.model.TtsVoiceInfo +import io.clawdroid.core.domain.model.TtsEngineInfo +import io.clawdroid.core.domain.model.TtsVoiceInfo import kotlinx.coroutines.flow.StateFlow interface TtsCatalogRepository { diff --git a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/repository/TtsSettingsRepository.kt b/android/core/domain/src/main/java/io/clawdroid/core/domain/repository/TtsSettingsRepository.kt similarity index 73% rename from android/core/domain/src/main/java/io/picoclaw/android/core/domain/repository/TtsSettingsRepository.kt rename to android/core/domain/src/main/java/io/clawdroid/core/domain/repository/TtsSettingsRepository.kt index 7f86b97eb..83860a21e 100644 --- a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/repository/TtsSettingsRepository.kt +++ b/android/core/domain/src/main/java/io/clawdroid/core/domain/repository/TtsSettingsRepository.kt @@ -1,6 +1,6 @@ -package io.picoclaw.android.core.domain.repository +package io.clawdroid.core.domain.repository -import io.picoclaw.android.core.domain.model.TtsConfig +import io.clawdroid.core.domain.model.TtsConfig import kotlinx.coroutines.flow.Flow interface TtsSettingsRepository { diff --git a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/usecase/ConnectChatUseCase.kt b/android/core/domain/src/main/java/io/clawdroid/core/domain/usecase/ConnectChatUseCase.kt similarity index 54% rename from android/core/domain/src/main/java/io/picoclaw/android/core/domain/usecase/ConnectChatUseCase.kt rename to android/core/domain/src/main/java/io/clawdroid/core/domain/usecase/ConnectChatUseCase.kt index 3ee56693d..0d1165b6b 100644 --- a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/usecase/ConnectChatUseCase.kt +++ b/android/core/domain/src/main/java/io/clawdroid/core/domain/usecase/ConnectChatUseCase.kt @@ -1,6 +1,6 @@ -package io.picoclaw.android.core.domain.usecase +package io.clawdroid.core.domain.usecase -import io.picoclaw.android.core.domain.repository.ChatRepository +import io.clawdroid.core.domain.repository.ChatRepository class ConnectChatUseCase(private val repository: ChatRepository) { operator fun invoke() { diff --git a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/usecase/DisconnectChatUseCase.kt b/android/core/domain/src/main/java/io/clawdroid/core/domain/usecase/DisconnectChatUseCase.kt similarity index 55% rename from android/core/domain/src/main/java/io/picoclaw/android/core/domain/usecase/DisconnectChatUseCase.kt rename to android/core/domain/src/main/java/io/clawdroid/core/domain/usecase/DisconnectChatUseCase.kt index 91488bf7c..4be2b1930 100644 --- a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/usecase/DisconnectChatUseCase.kt +++ b/android/core/domain/src/main/java/io/clawdroid/core/domain/usecase/DisconnectChatUseCase.kt @@ -1,6 +1,6 @@ -package io.picoclaw.android.core.domain.usecase +package io.clawdroid.core.domain.usecase -import io.picoclaw.android.core.domain.repository.ChatRepository +import io.clawdroid.core.domain.repository.ChatRepository class DisconnectChatUseCase(private val repository: ChatRepository) { operator fun invoke() { diff --git a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/usecase/LoadMoreMessagesUseCase.kt b/android/core/domain/src/main/java/io/clawdroid/core/domain/usecase/LoadMoreMessagesUseCase.kt similarity index 55% rename from android/core/domain/src/main/java/io/picoclaw/android/core/domain/usecase/LoadMoreMessagesUseCase.kt rename to android/core/domain/src/main/java/io/clawdroid/core/domain/usecase/LoadMoreMessagesUseCase.kt index 4f9caa4f7..b5770a250 100644 --- a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/usecase/LoadMoreMessagesUseCase.kt +++ b/android/core/domain/src/main/java/io/clawdroid/core/domain/usecase/LoadMoreMessagesUseCase.kt @@ -1,6 +1,6 @@ -package io.picoclaw.android.core.domain.usecase +package io.clawdroid.core.domain.usecase -import io.picoclaw.android.core.domain.repository.ChatRepository +import io.clawdroid.core.domain.repository.ChatRepository class LoadMoreMessagesUseCase(private val repository: ChatRepository) { operator fun invoke() { diff --git a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/usecase/ObserveConnectionUseCase.kt b/android/core/domain/src/main/java/io/clawdroid/core/domain/usecase/ObserveConnectionUseCase.kt similarity index 53% rename from android/core/domain/src/main/java/io/picoclaw/android/core/domain/usecase/ObserveConnectionUseCase.kt rename to android/core/domain/src/main/java/io/clawdroid/core/domain/usecase/ObserveConnectionUseCase.kt index 45d18d21d..b52895e0e 100644 --- a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/usecase/ObserveConnectionUseCase.kt +++ b/android/core/domain/src/main/java/io/clawdroid/core/domain/usecase/ObserveConnectionUseCase.kt @@ -1,7 +1,7 @@ -package io.picoclaw.android.core.domain.usecase +package io.clawdroid.core.domain.usecase -import io.picoclaw.android.core.domain.model.ConnectionState -import io.picoclaw.android.core.domain.repository.ChatRepository +import io.clawdroid.core.domain.model.ConnectionState +import io.clawdroid.core.domain.repository.ChatRepository import kotlinx.coroutines.flow.StateFlow class ObserveConnectionUseCase(private val repository: ChatRepository) { diff --git a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/usecase/ObserveMessagesUseCase.kt b/android/core/domain/src/main/java/io/clawdroid/core/domain/usecase/ObserveMessagesUseCase.kt similarity index 53% rename from android/core/domain/src/main/java/io/picoclaw/android/core/domain/usecase/ObserveMessagesUseCase.kt rename to android/core/domain/src/main/java/io/clawdroid/core/domain/usecase/ObserveMessagesUseCase.kt index aba4e27e0..0ece67c03 100644 --- a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/usecase/ObserveMessagesUseCase.kt +++ b/android/core/domain/src/main/java/io/clawdroid/core/domain/usecase/ObserveMessagesUseCase.kt @@ -1,7 +1,7 @@ -package io.picoclaw.android.core.domain.usecase +package io.clawdroid.core.domain.usecase -import io.picoclaw.android.core.domain.model.ChatMessage -import io.picoclaw.android.core.domain.repository.ChatRepository +import io.clawdroid.core.domain.model.ChatMessage +import io.clawdroid.core.domain.repository.ChatRepository import kotlinx.coroutines.flow.StateFlow class ObserveMessagesUseCase(private val repository: ChatRepository) { diff --git a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/usecase/ObserveStatusUseCase.kt b/android/core/domain/src/main/java/io/clawdroid/core/domain/usecase/ObserveStatusUseCase.kt similarity index 62% rename from android/core/domain/src/main/java/io/picoclaw/android/core/domain/usecase/ObserveStatusUseCase.kt rename to android/core/domain/src/main/java/io/clawdroid/core/domain/usecase/ObserveStatusUseCase.kt index a4fd0ae19..1ed2d3888 100644 --- a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/usecase/ObserveStatusUseCase.kt +++ b/android/core/domain/src/main/java/io/clawdroid/core/domain/usecase/ObserveStatusUseCase.kt @@ -1,6 +1,6 @@ -package io.picoclaw.android.core.domain.usecase +package io.clawdroid.core.domain.usecase -import io.picoclaw.android.core.domain.repository.ChatRepository +import io.clawdroid.core.domain.repository.ChatRepository import kotlinx.coroutines.flow.StateFlow class ObserveStatusUseCase(private val repository: ChatRepository) { diff --git a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/usecase/SendMessageUseCase.kt b/android/core/domain/src/main/java/io/clawdroid/core/domain/usecase/SendMessageUseCase.kt similarity index 59% rename from android/core/domain/src/main/java/io/picoclaw/android/core/domain/usecase/SendMessageUseCase.kt rename to android/core/domain/src/main/java/io/clawdroid/core/domain/usecase/SendMessageUseCase.kt index ea81a56e2..351d6c328 100644 --- a/android/core/domain/src/main/java/io/picoclaw/android/core/domain/usecase/SendMessageUseCase.kt +++ b/android/core/domain/src/main/java/io/clawdroid/core/domain/usecase/SendMessageUseCase.kt @@ -1,7 +1,7 @@ -package io.picoclaw.android.core.domain.usecase +package io.clawdroid.core.domain.usecase -import io.picoclaw.android.core.domain.model.ImageAttachment -import io.picoclaw.android.core.domain.repository.ChatRepository +import io.clawdroid.core.domain.model.ImageAttachment +import io.clawdroid.core.domain.repository.ChatRepository class SendMessageUseCase(private val repository: ChatRepository) { suspend operator fun invoke(text: String, images: List = emptyList(), inputMode: String? = null) { diff --git a/android/core/ui/build.gradle.kts b/android/core/ui/build.gradle.kts index cd432d6f8..a3f0c1fbe 100644 --- a/android/core/ui/build.gradle.kts +++ b/android/core/ui/build.gradle.kts @@ -4,7 +4,7 @@ plugins { } android { - namespace = "io.picoclaw.android.core.ui" + namespace = "io.clawdroid.core.ui" compileSdk = libs.versions.android.compileSdk.get().toInt() defaultConfig { diff --git a/android/core/ui/src/main/java/io/picoclaw/android/core/ui/theme/Color.kt b/android/core/ui/src/main/java/io/clawdroid/core/ui/theme/Color.kt similarity index 97% rename from android/core/ui/src/main/java/io/picoclaw/android/core/ui/theme/Color.kt rename to android/core/ui/src/main/java/io/clawdroid/core/ui/theme/Color.kt index c542acdc7..4e08a410b 100644 --- a/android/core/ui/src/main/java/io/picoclaw/android/core/ui/theme/Color.kt +++ b/android/core/ui/src/main/java/io/clawdroid/core/ui/theme/Color.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.core.ui.theme +package io.clawdroid.core.ui.theme import androidx.compose.ui.graphics.Color diff --git a/android/core/ui/src/main/java/io/picoclaw/android/core/ui/theme/Theme.kt b/android/core/ui/src/main/java/io/clawdroid/core/ui/theme/Theme.kt similarity index 95% rename from android/core/ui/src/main/java/io/picoclaw/android/core/ui/theme/Theme.kt rename to android/core/ui/src/main/java/io/clawdroid/core/ui/theme/Theme.kt index e0fb58320..d9733770e 100644 --- a/android/core/ui/src/main/java/io/picoclaw/android/core/ui/theme/Theme.kt +++ b/android/core/ui/src/main/java/io/clawdroid/core/ui/theme/Theme.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.core.ui.theme +package io.clawdroid.core.ui.theme import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.MaterialTheme @@ -38,7 +38,7 @@ private val FuturisticShapes = Shapes( ) @Composable -fun PicoClawTheme( +fun ClawDroidTheme( content: @Composable () -> Unit ) { MaterialTheme( diff --git a/android/core/ui/src/main/java/io/picoclaw/android/core/ui/theme/Type.kt b/android/core/ui/src/main/java/io/clawdroid/core/ui/theme/Type.kt similarity index 97% rename from android/core/ui/src/main/java/io/picoclaw/android/core/ui/theme/Type.kt rename to android/core/ui/src/main/java/io/clawdroid/core/ui/theme/Type.kt index c926c4620..69b8adb85 100644 --- a/android/core/ui/src/main/java/io/picoclaw/android/core/ui/theme/Type.kt +++ b/android/core/ui/src/main/java/io/clawdroid/core/ui/theme/Type.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.core.ui.theme +package io.clawdroid.core.ui.theme import androidx.compose.material3.Typography import androidx.compose.ui.text.TextStyle diff --git a/android/feature/chat/build.gradle.kts b/android/feature/chat/build.gradle.kts index 6d6bb5c65..d9b5b4f44 100644 --- a/android/feature/chat/build.gradle.kts +++ b/android/feature/chat/build.gradle.kts @@ -4,7 +4,7 @@ plugins { } android { - namespace = "io.picoclaw.android.feature.chat" + namespace = "io.clawdroid.feature.chat" compileSdk = libs.versions.android.compileSdk.get().toInt() defaultConfig { diff --git a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/ChatEvent.kt b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/ChatEvent.kt similarity index 85% rename from android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/ChatEvent.kt rename to android/feature/chat/src/main/java/io/clawdroid/feature/chat/ChatEvent.kt index 897f71c24..564135d75 100644 --- a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/ChatEvent.kt +++ b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/ChatEvent.kt @@ -1,6 +1,6 @@ -package io.picoclaw.android.feature.chat +package io.clawdroid.feature.chat -import io.picoclaw.android.core.domain.model.ImageAttachment +import io.clawdroid.core.domain.model.ImageAttachment sealed interface ChatEvent { data class OnInputChanged(val text: String) : ChatEvent diff --git a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/ChatUiState.kt b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/ChatUiState.kt similarity index 61% rename from android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/ChatUiState.kt rename to android/feature/chat/src/main/java/io/clawdroid/feature/chat/ChatUiState.kt index 1ff4b957e..87a08e5f9 100644 --- a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/ChatUiState.kt +++ b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/ChatUiState.kt @@ -1,9 +1,9 @@ -package io.picoclaw.android.feature.chat +package io.clawdroid.feature.chat -import io.picoclaw.android.core.domain.model.ChatMessage -import io.picoclaw.android.core.domain.model.ConnectionState -import io.picoclaw.android.core.domain.model.ImageAttachment -import io.picoclaw.android.feature.chat.voice.VoiceModeState +import io.clawdroid.core.domain.model.ChatMessage +import io.clawdroid.core.domain.model.ConnectionState +import io.clawdroid.core.domain.model.ImageAttachment +import io.clawdroid.feature.chat.voice.VoiceModeState data class ChatUiState( val messages: List = emptyList(), diff --git a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/ChatViewModel.kt b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/ChatViewModel.kt similarity index 87% rename from android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/ChatViewModel.kt rename to android/feature/chat/src/main/java/io/clawdroid/feature/chat/ChatViewModel.kt index 13d85c83f..fc35fd274 100644 --- a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/ChatViewModel.kt +++ b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/ChatViewModel.kt @@ -1,15 +1,15 @@ -package io.picoclaw.android.feature.chat +package io.clawdroid.feature.chat import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import io.picoclaw.android.core.domain.usecase.ConnectChatUseCase -import io.picoclaw.android.core.domain.usecase.DisconnectChatUseCase -import io.picoclaw.android.core.domain.usecase.LoadMoreMessagesUseCase -import io.picoclaw.android.core.domain.usecase.ObserveConnectionUseCase -import io.picoclaw.android.core.domain.usecase.ObserveMessagesUseCase -import io.picoclaw.android.core.domain.usecase.ObserveStatusUseCase -import io.picoclaw.android.core.domain.usecase.SendMessageUseCase -import io.picoclaw.android.feature.chat.voice.VoiceModeManager +import io.clawdroid.core.domain.usecase.ConnectChatUseCase +import io.clawdroid.core.domain.usecase.DisconnectChatUseCase +import io.clawdroid.core.domain.usecase.LoadMoreMessagesUseCase +import io.clawdroid.core.domain.usecase.ObserveConnectionUseCase +import io.clawdroid.core.domain.usecase.ObserveMessagesUseCase +import io.clawdroid.core.domain.usecase.ObserveStatusUseCase +import io.clawdroid.core.domain.usecase.SendMessageUseCase +import io.clawdroid.feature.chat.voice.VoiceModeManager import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow diff --git a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/SettingsUiState.kt b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/SettingsUiState.kt similarity index 52% rename from android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/SettingsUiState.kt rename to android/feature/chat/src/main/java/io/clawdroid/feature/chat/SettingsUiState.kt index a5f20700f..0f61da159 100644 --- a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/SettingsUiState.kt +++ b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/SettingsUiState.kt @@ -1,8 +1,8 @@ -package io.picoclaw.android.feature.chat +package io.clawdroid.feature.chat -import io.picoclaw.android.core.domain.model.TtsConfig -import io.picoclaw.android.core.domain.model.TtsEngineInfo -import io.picoclaw.android.core.domain.model.TtsVoiceInfo +import io.clawdroid.core.domain.model.TtsConfig +import io.clawdroid.core.domain.model.TtsEngineInfo +import io.clawdroid.core.domain.model.TtsVoiceInfo data class SettingsUiState( val ttsConfig: TtsConfig = TtsConfig(), diff --git a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/SettingsViewModel.kt b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/SettingsViewModel.kt similarity index 88% rename from android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/SettingsViewModel.kt rename to android/feature/chat/src/main/java/io/clawdroid/feature/chat/SettingsViewModel.kt index 02ade5cab..2cb94cec4 100644 --- a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/SettingsViewModel.kt +++ b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/SettingsViewModel.kt @@ -1,10 +1,10 @@ -package io.picoclaw.android.feature.chat +package io.clawdroid.feature.chat import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import io.picoclaw.android.core.domain.repository.TtsCatalogRepository -import io.picoclaw.android.core.domain.repository.TtsSettingsRepository -import io.picoclaw.android.feature.chat.voice.TextToSpeechWrapper +import io.clawdroid.core.domain.repository.TtsCatalogRepository +import io.clawdroid.core.domain.repository.TtsSettingsRepository +import io.clawdroid.feature.chat.voice.TextToSpeechWrapper import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow diff --git a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/assistant/AssistantManager.kt b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/assistant/AssistantManager.kt similarity index 94% rename from android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/assistant/AssistantManager.kt rename to android/feature/chat/src/main/java/io/clawdroid/feature/chat/assistant/AssistantManager.kt index 26921e7fe..eca9bc63c 100644 --- a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/assistant/AssistantManager.kt +++ b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/assistant/AssistantManager.kt @@ -1,19 +1,19 @@ -package io.picoclaw.android.feature.chat.assistant +package io.clawdroid.feature.chat.assistant import android.content.ContentResolver import android.speech.SpeechRecognizer import android.util.Base64 import android.util.Log -import io.picoclaw.android.core.domain.model.AssistantMessage -import io.picoclaw.android.core.domain.model.VoicePhase -import io.picoclaw.android.core.domain.repository.AssistantConnection -import io.picoclaw.android.feature.chat.voice.CameraCaptureManager -import io.picoclaw.android.feature.chat.voice.ScreenCaptureManager -import io.picoclaw.android.feature.chat.voice.SpeechRecognizerWrapper -import io.picoclaw.android.feature.chat.voice.SttResult -import io.picoclaw.android.feature.chat.voice.TextToSpeechWrapper -import io.picoclaw.android.feature.chat.voice.ChatTurn -import io.picoclaw.android.feature.chat.voice.VoiceModeState +import io.clawdroid.core.domain.model.AssistantMessage +import io.clawdroid.core.domain.model.VoicePhase +import io.clawdroid.core.domain.repository.AssistantConnection +import io.clawdroid.feature.chat.voice.CameraCaptureManager +import io.clawdroid.feature.chat.voice.ScreenCaptureManager +import io.clawdroid.feature.chat.voice.SpeechRecognizerWrapper +import io.clawdroid.feature.chat.voice.SttResult +import io.clawdroid.feature.chat.voice.TextToSpeechWrapper +import io.clawdroid.feature.chat.voice.ChatTurn +import io.clawdroid.feature.chat.voice.VoiceModeState import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.Job diff --git a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/assistant/AssistantPillBar.kt b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/assistant/AssistantPillBar.kt similarity index 97% rename from android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/assistant/AssistantPillBar.kt rename to android/feature/chat/src/main/java/io/clawdroid/feature/chat/assistant/AssistantPillBar.kt index c5ba990df..2a6f2d510 100644 --- a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/assistant/AssistantPillBar.kt +++ b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/assistant/AssistantPillBar.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.feature.chat.assistant +package io.clawdroid.feature.chat.assistant import androidx.camera.view.PreviewView import androidx.camera.view.PreviewView.ImplementationMode @@ -53,13 +53,13 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView import androidx.lifecycle.compose.LocalLifecycleOwner -import io.picoclaw.android.core.domain.model.VoicePhase -import io.picoclaw.android.core.ui.theme.GradientCyan -import io.picoclaw.android.core.ui.theme.TextPrimary -import io.picoclaw.android.core.ui.theme.TextSecondary -import io.picoclaw.android.feature.chat.voice.CameraCaptureManager -import io.picoclaw.android.feature.chat.voice.ChatTurn -import io.picoclaw.android.feature.chat.voice.VoiceModeState +import io.clawdroid.core.domain.model.VoicePhase +import io.clawdroid.core.ui.theme.GradientCyan +import io.clawdroid.core.ui.theme.TextPrimary +import io.clawdroid.core.ui.theme.TextSecondary +import io.clawdroid.feature.chat.voice.CameraCaptureManager +import io.clawdroid.feature.chat.voice.ChatTurn +import io.clawdroid.feature.chat.voice.VoiceModeState import com.composables.icons.lucide.R as LucideR import kotlin.math.PI import kotlin.math.sin diff --git a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/component/ConnectionBanner.kt b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/component/ConnectionBanner.kt similarity index 89% rename from android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/component/ConnectionBanner.kt rename to android/feature/chat/src/main/java/io/clawdroid/feature/chat/component/ConnectionBanner.kt index bf5a8bb91..a41505132 100644 --- a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/component/ConnectionBanner.kt +++ b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/component/ConnectionBanner.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.feature.chat.component +package io.clawdroid.feature.chat.component import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.background @@ -14,9 +14,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import io.picoclaw.android.core.domain.model.ConnectionState -import io.picoclaw.android.core.ui.theme.DisconnectedRed -import io.picoclaw.android.core.ui.theme.ReconnectingYellow +import io.clawdroid.core.domain.model.ConnectionState +import io.clawdroid.core.ui.theme.DisconnectedRed +import io.clawdroid.core.ui.theme.ReconnectingYellow @Composable fun ConnectionBanner( diff --git a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/component/ImagePreview.kt b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/component/ImagePreview.kt similarity index 91% rename from android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/component/ImagePreview.kt rename to android/feature/chat/src/main/java/io/clawdroid/feature/chat/component/ImagePreview.kt index dd3c13ec0..6fca18815 100644 --- a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/component/ImagePreview.kt +++ b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/component/ImagePreview.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.feature.chat.component +package io.clawdroid.feature.chat.component import android.net.Uri import androidx.compose.foundation.border @@ -19,9 +19,9 @@ import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp import coil3.compose.AsyncImage -import io.picoclaw.android.core.domain.model.ImageAttachment -import io.picoclaw.android.core.ui.theme.GlassBorder -import io.picoclaw.android.core.ui.theme.TextSecondary +import io.clawdroid.core.domain.model.ImageAttachment +import io.clawdroid.core.ui.theme.GlassBorder +import io.clawdroid.core.ui.theme.TextSecondary import com.composables.icons.lucide.R as LucideR @Composable diff --git a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/component/MessageBubble.kt b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/component/MessageBubble.kt similarity index 90% rename from android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/component/MessageBubble.kt rename to android/feature/chat/src/main/java/io/clawdroid/feature/chat/component/MessageBubble.kt index 6169ad542..58a0a1558 100644 --- a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/component/MessageBubble.kt +++ b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/component/MessageBubble.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.feature.chat.component +package io.clawdroid.feature.chat.component import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.layout.Box @@ -23,13 +23,13 @@ import coil3.compose.AsyncImage import com.mikepenz.markdown.m3.Markdown import com.mikepenz.markdown.m3.markdownColor import com.mikepenz.markdown.m3.markdownTypography -import io.picoclaw.android.core.domain.model.ChatMessage -import io.picoclaw.android.core.domain.model.MessageSender -import io.picoclaw.android.core.ui.theme.AgentBubble -import io.picoclaw.android.core.ui.theme.AgentBubbleBorder -import io.picoclaw.android.core.ui.theme.TextPrimary -import io.picoclaw.android.core.ui.theme.UserBubble -import io.picoclaw.android.core.ui.theme.UserBubbleBorder +import io.clawdroid.core.domain.model.ChatMessage +import io.clawdroid.core.domain.model.MessageSender +import io.clawdroid.core.ui.theme.AgentBubble +import io.clawdroid.core.ui.theme.AgentBubbleBorder +import io.clawdroid.core.ui.theme.TextPrimary +import io.clawdroid.core.ui.theme.UserBubble +import io.clawdroid.core.ui.theme.UserBubbleBorder import java.io.File @Composable diff --git a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/component/MessageInput.kt b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/component/MessageInput.kt similarity index 90% rename from android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/component/MessageInput.kt rename to android/feature/chat/src/main/java/io/clawdroid/feature/chat/component/MessageInput.kt index c4f2fa35b..a5eead431 100644 --- a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/component/MessageInput.kt +++ b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/component/MessageInput.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.feature.chat.component +package io.clawdroid.feature.chat.component import androidx.compose.foundation.background import androidx.compose.foundation.border @@ -22,13 +22,13 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp -import io.picoclaw.android.core.ui.theme.DeepBlack -import io.picoclaw.android.core.ui.theme.GlassBorder -import io.picoclaw.android.core.ui.theme.GlassWhite -import io.picoclaw.android.core.ui.theme.NeonCyan -import io.picoclaw.android.core.ui.theme.TextPrimary -import io.picoclaw.android.core.ui.theme.TextSecondary -import io.picoclaw.android.core.ui.theme.TextTertiary +import io.clawdroid.core.ui.theme.DeepBlack +import io.clawdroid.core.ui.theme.GlassBorder +import io.clawdroid.core.ui.theme.GlassWhite +import io.clawdroid.core.ui.theme.NeonCyan +import io.clawdroid.core.ui.theme.TextPrimary +import io.clawdroid.core.ui.theme.TextSecondary +import io.clawdroid.core.ui.theme.TextTertiary import com.composables.icons.lucide.R as LucideR @Composable diff --git a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/component/MessageList.kt b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/component/MessageList.kt similarity index 93% rename from android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/component/MessageList.kt rename to android/feature/chat/src/main/java/io/clawdroid/feature/chat/component/MessageList.kt index 4ecbd7baa..8bdaa0340 100644 --- a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/component/MessageList.kt +++ b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/component/MessageList.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.feature.chat.component +package io.clawdroid.feature.chat.component import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues @@ -13,7 +13,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import io.picoclaw.android.core.domain.model.ChatMessage +import io.clawdroid.core.domain.model.ChatMessage @Composable fun MessageList( diff --git a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/component/StatusIndicator.kt b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/component/StatusIndicator.kt similarity index 90% rename from android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/component/StatusIndicator.kt rename to android/feature/chat/src/main/java/io/clawdroid/feature/chat/component/StatusIndicator.kt index 016eabfb4..b515e2a10 100644 --- a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/component/StatusIndicator.kt +++ b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/component/StatusIndicator.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.feature.chat.component +package io.clawdroid.feature.chat.component import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.fadeIn @@ -16,8 +16,8 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import io.picoclaw.android.core.ui.theme.NeonCyan -import io.picoclaw.android.core.ui.theme.TextSecondary +import io.clawdroid.core.ui.theme.NeonCyan +import io.clawdroid.core.ui.theme.TextSecondary @Composable fun StatusIndicator( diff --git a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/screen/ChatScreen.kt b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/screen/ChatScreen.kt similarity index 91% rename from android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/screen/ChatScreen.kt rename to android/feature/chat/src/main/java/io/clawdroid/feature/chat/screen/ChatScreen.kt index 48cf7b156..41dffd6dd 100644 --- a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/screen/ChatScreen.kt +++ b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/screen/ChatScreen.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.feature.chat.screen +package io.clawdroid.feature.chat.screen import android.Manifest import android.content.pm.PackageManager @@ -36,22 +36,22 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.core.content.FileProvider -import io.picoclaw.android.core.domain.model.ImageAttachment -import io.picoclaw.android.core.ui.theme.DeepBlack -import io.picoclaw.android.core.ui.theme.GradientCyan -import io.picoclaw.android.core.ui.theme.GradientPink -import io.picoclaw.android.core.ui.theme.GradientPurple -import io.picoclaw.android.core.ui.theme.TextSecondary -import io.picoclaw.android.feature.chat.ChatEvent -import io.picoclaw.android.feature.chat.ChatViewModel +import io.clawdroid.core.domain.model.ImageAttachment +import io.clawdroid.core.ui.theme.DeepBlack +import io.clawdroid.core.ui.theme.GradientCyan +import io.clawdroid.core.ui.theme.GradientPink +import io.clawdroid.core.ui.theme.GradientPurple +import io.clawdroid.core.ui.theme.TextSecondary +import io.clawdroid.feature.chat.ChatEvent +import io.clawdroid.feature.chat.ChatViewModel import com.composables.icons.lucide.R as LucideR -import io.picoclaw.android.feature.chat.component.ConnectionBanner -import io.picoclaw.android.feature.chat.component.ImagePreviewRow -import io.picoclaw.android.feature.chat.component.MessageInput -import io.picoclaw.android.feature.chat.component.MessageList -import io.picoclaw.android.feature.chat.component.StatusIndicator -import io.picoclaw.android.feature.chat.voice.CameraCaptureManager -import io.picoclaw.android.feature.chat.voice.VoiceModeOverlay +import io.clawdroid.feature.chat.component.ConnectionBanner +import io.clawdroid.feature.chat.component.ImagePreviewRow +import io.clawdroid.feature.chat.component.MessageInput +import io.clawdroid.feature.chat.component.MessageList +import io.clawdroid.feature.chat.component.StatusIndicator +import io.clawdroid.feature.chat.voice.CameraCaptureManager +import io.clawdroid.feature.chat.voice.VoiceModeOverlay import org.koin.androidx.compose.koinViewModel import org.koin.compose.koinInject import java.io.File @@ -227,7 +227,7 @@ fun ChatScreen( containerColor = Color.Transparent, topBar = { TopAppBar( - title = { Text("PicoClaw") }, + title = { Text("ClawDroid") }, colors = TopAppBarDefaults.topAppBarColors( containerColor = Color.Transparent ), diff --git a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/screen/SettingsScreen.kt b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/screen/SettingsScreen.kt similarity index 94% rename from android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/screen/SettingsScreen.kt rename to android/feature/chat/src/main/java/io/clawdroid/feature/chat/screen/SettingsScreen.kt index 98474d537..c5b5afeeb 100644 --- a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/screen/SettingsScreen.kt +++ b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/screen/SettingsScreen.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.feature.chat.screen +package io.clawdroid.feature.chat.screen import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement @@ -41,18 +41,18 @@ import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp -import io.picoclaw.android.core.domain.model.TtsEngineInfo -import io.picoclaw.android.core.domain.model.TtsVoiceInfo -import io.picoclaw.android.core.ui.theme.DeepBlack -import io.picoclaw.android.core.ui.theme.GlassBorder -import io.picoclaw.android.core.ui.theme.GlassWhite -import io.picoclaw.android.core.ui.theme.GradientCyan -import io.picoclaw.android.core.ui.theme.GradientPurple -import io.picoclaw.android.core.ui.theme.NeonCyan -import io.picoclaw.android.core.ui.theme.TextPrimary -import io.picoclaw.android.core.ui.theme.TextSecondary +import io.clawdroid.core.domain.model.TtsEngineInfo +import io.clawdroid.core.domain.model.TtsVoiceInfo +import io.clawdroid.core.ui.theme.DeepBlack +import io.clawdroid.core.ui.theme.GlassBorder +import io.clawdroid.core.ui.theme.GlassWhite +import io.clawdroid.core.ui.theme.GradientCyan +import io.clawdroid.core.ui.theme.GradientPurple +import io.clawdroid.core.ui.theme.NeonCyan +import io.clawdroid.core.ui.theme.TextPrimary +import io.clawdroid.core.ui.theme.TextSecondary import com.composables.icons.lucide.R as LucideR -import io.picoclaw.android.feature.chat.SettingsViewModel +import io.clawdroid.feature.chat.SettingsViewModel import org.koin.androidx.compose.koinViewModel @OptIn(ExperimentalMaterial3Api::class) diff --git a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/CameraCaptureManager.kt b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/CameraCaptureManager.kt similarity index 96% rename from android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/CameraCaptureManager.kt rename to android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/CameraCaptureManager.kt index 861fca74b..c061a5d1f 100644 --- a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/CameraCaptureManager.kt +++ b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/CameraCaptureManager.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.feature.chat.voice +package io.clawdroid.feature.chat.voice import android.content.Context import android.graphics.Bitmap @@ -9,7 +9,7 @@ import androidx.camera.lifecycle.ProcessCameraProvider import androidx.camera.view.PreviewView import androidx.core.content.ContextCompat import androidx.lifecycle.LifecycleOwner -import io.picoclaw.android.core.domain.model.ImageAttachment +import io.clawdroid.core.domain.model.ImageAttachment import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import java.io.File diff --git a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/ScreenCaptureManager.kt b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/ScreenCaptureManager.kt similarity index 94% rename from android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/ScreenCaptureManager.kt rename to android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/ScreenCaptureManager.kt index 895b33b3d..ea3bef69d 100644 --- a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/ScreenCaptureManager.kt +++ b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/ScreenCaptureManager.kt @@ -1,9 +1,9 @@ -package io.picoclaw.android.feature.chat.voice +package io.clawdroid.feature.chat.voice import android.content.Context import android.graphics.Bitmap import android.util.Log -import io.picoclaw.android.core.domain.model.ImageAttachment +import io.clawdroid.core.domain.model.ImageAttachment import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.withContext diff --git a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/ScreenshotSource.kt b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/ScreenshotSource.kt similarity index 74% rename from android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/ScreenshotSource.kt rename to android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/ScreenshotSource.kt index 668f729ea..64795e18a 100644 --- a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/ScreenshotSource.kt +++ b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/ScreenshotSource.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.feature.chat.voice +package io.clawdroid.feature.chat.voice import android.graphics.Bitmap diff --git a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/SpeechRecognizerWrapper.kt b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/SpeechRecognizerWrapper.kt similarity index 98% rename from android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/SpeechRecognizerWrapper.kt rename to android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/SpeechRecognizerWrapper.kt index 8bf3e6d78..386ac1c59 100644 --- a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/SpeechRecognizerWrapper.kt +++ b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/SpeechRecognizerWrapper.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.feature.chat.voice +package io.clawdroid.feature.chat.voice import android.content.Context import android.content.Intent diff --git a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/TextToSpeechWrapper.kt b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/TextToSpeechWrapper.kt similarity index 97% rename from android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/TextToSpeechWrapper.kt rename to android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/TextToSpeechWrapper.kt index cf22b5fa1..9baeadb79 100644 --- a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/TextToSpeechWrapper.kt +++ b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/TextToSpeechWrapper.kt @@ -1,9 +1,9 @@ -package io.picoclaw.android.feature.chat.voice +package io.clawdroid.feature.chat.voice import android.content.Context import android.speech.tts.TextToSpeech import android.speech.tts.UtteranceProgressListener -import io.picoclaw.android.core.domain.model.TtsConfig +import io.clawdroid.core.domain.model.TtsConfig import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob diff --git a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/VoiceModeManager.kt b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/VoiceModeManager.kt similarity index 95% rename from android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/VoiceModeManager.kt rename to android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/VoiceModeManager.kt index b0ccf6674..a0f87c547 100644 --- a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/VoiceModeManager.kt +++ b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/VoiceModeManager.kt @@ -1,12 +1,12 @@ -package io.picoclaw.android.feature.chat.voice +package io.clawdroid.feature.chat.voice import android.speech.SpeechRecognizer -import io.picoclaw.android.core.domain.model.MessageSender -import io.picoclaw.android.core.domain.model.MessageStatus -import io.picoclaw.android.core.domain.model.VoicePhase -import io.picoclaw.android.core.domain.usecase.ObserveMessagesUseCase -import io.picoclaw.android.core.domain.usecase.ObserveStatusUseCase -import io.picoclaw.android.core.domain.usecase.SendMessageUseCase +import io.clawdroid.core.domain.model.MessageSender +import io.clawdroid.core.domain.model.MessageStatus +import io.clawdroid.core.domain.model.VoicePhase +import io.clawdroid.core.domain.usecase.ObserveMessagesUseCase +import io.clawdroid.core.domain.usecase.ObserveStatusUseCase +import io.clawdroid.core.domain.usecase.SendMessageUseCase import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.Job diff --git a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/VoiceModeOverlay.kt b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/VoiceModeOverlay.kt similarity index 95% rename from android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/VoiceModeOverlay.kt rename to android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/VoiceModeOverlay.kt index 0a8a35bda..e9078d0e3 100644 --- a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/VoiceModeOverlay.kt +++ b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/VoiceModeOverlay.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.feature.chat.voice +package io.clawdroid.feature.chat.voice import androidx.camera.view.PreviewView import androidx.camera.view.PreviewView.ImplementationMode @@ -39,12 +39,12 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView -import io.picoclaw.android.core.domain.model.VoicePhase -import io.picoclaw.android.core.ui.theme.DeepBlack -import io.picoclaw.android.core.ui.theme.GradientCyan -import io.picoclaw.android.core.ui.theme.GradientPurple -import io.picoclaw.android.core.ui.theme.TextPrimary -import io.picoclaw.android.core.ui.theme.TextSecondary +import io.clawdroid.core.domain.model.VoicePhase +import io.clawdroid.core.ui.theme.DeepBlack +import io.clawdroid.core.ui.theme.GradientCyan +import io.clawdroid.core.ui.theme.GradientPurple +import io.clawdroid.core.ui.theme.TextPrimary +import io.clawdroid.core.ui.theme.TextSecondary import com.composables.icons.lucide.R as LucideR @Composable diff --git a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/VoiceModeState.kt b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/VoiceModeState.kt similarity index 82% rename from android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/VoiceModeState.kt rename to android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/VoiceModeState.kt index d633ce746..39a5f7609 100644 --- a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/VoiceModeState.kt +++ b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/VoiceModeState.kt @@ -1,6 +1,6 @@ -package io.picoclaw.android.feature.chat.voice +package io.clawdroid.feature.chat.voice -import io.picoclaw.android.core.domain.model.VoicePhase +import io.clawdroid.core.domain.model.VoicePhase data class ChatTurn(val role: String, val text: String) diff --git a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/VoiceOrb.kt b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/VoiceOrb.kt similarity index 98% rename from android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/VoiceOrb.kt rename to android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/VoiceOrb.kt index f2b9877f8..4ae5acab7 100644 --- a/android/feature/chat/src/main/java/io/picoclaw/android/feature/chat/voice/VoiceOrb.kt +++ b/android/feature/chat/src/main/java/io/clawdroid/feature/chat/voice/VoiceOrb.kt @@ -1,4 +1,4 @@ -package io.picoclaw.android.feature.chat.voice +package io.clawdroid.feature.chat.voice import androidx.compose.animation.core.LinearEasing import androidx.compose.animation.core.RepeatMode @@ -17,7 +17,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.drawscope.DrawScope import androidx.compose.ui.graphics.drawscope.Stroke import androidx.compose.ui.unit.dp -import io.picoclaw.android.core.domain.model.VoicePhase +import io.clawdroid.core.domain.model.VoicePhase import kotlin.math.PI import kotlin.math.cos import kotlin.math.sin diff --git a/android/settings.gradle.kts b/android/settings.gradle.kts index 7a8097661..533b4eb99 100644 --- a/android/settings.gradle.kts +++ b/android/settings.gradle.kts @@ -12,7 +12,7 @@ dependencyResolutionManagement { mavenCentral() } } -rootProject.name = "PicoClaw" +rootProject.name = "ClawDroid" include(":app") include(":feature:chat") include(":core:domain") diff --git a/assets/picoclaw_code.gif b/assets/clawdroid_code.gif similarity index 100% rename from assets/picoclaw_code.gif rename to assets/clawdroid_code.gif diff --git a/assets/picoclaw_detect_person.mp4 b/assets/clawdroid_detect_person.mp4 similarity index 100% rename from assets/picoclaw_detect_person.mp4 rename to assets/clawdroid_detect_person.mp4 diff --git a/assets/picoclaw_mem.gif b/assets/clawdroid_mem.gif similarity index 100% rename from assets/picoclaw_mem.gif rename to assets/clawdroid_mem.gif diff --git a/assets/picoclaw_memory.gif b/assets/clawdroid_memory.gif similarity index 100% rename from assets/picoclaw_memory.gif rename to assets/clawdroid_memory.gif diff --git a/assets/picoclaw_scedule.gif b/assets/clawdroid_scedule.gif similarity index 100% rename from assets/picoclaw_scedule.gif rename to assets/clawdroid_scedule.gif diff --git a/assets/picoclaw_search.gif b/assets/clawdroid_search.gif similarity index 100% rename from assets/picoclaw_search.gif rename to assets/clawdroid_search.gif diff --git a/cmd/picoclaw/main.go b/cmd/clawdroid/main.go similarity index 91% rename from cmd/picoclaw/main.go rename to cmd/clawdroid/main.go index a48cdc49d..8947b79e4 100644 --- a/cmd/picoclaw/main.go +++ b/cmd/clawdroid/main.go @@ -1,8 +1,8 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// ClawDroid - 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 ClawDroid contributors package main @@ -22,22 +22,22 @@ import ( "time" "github.com/chzyer/readline" - "github.com/sipeed/picoclaw/pkg/agent" - "github.com/sipeed/picoclaw/pkg/auth" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "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/migrate" - "github.com/sipeed/picoclaw/pkg/providers" - "github.com/sipeed/picoclaw/pkg/skills" - "github.com/sipeed/picoclaw/pkg/state" - "github.com/sipeed/picoclaw/pkg/tools" - "github.com/sipeed/picoclaw/pkg/voice" + "github.com/KarakuriAgent/clawdroid/pkg/agent" + "github.com/KarakuriAgent/clawdroid/pkg/auth" + "github.com/KarakuriAgent/clawdroid/pkg/bus" + "github.com/KarakuriAgent/clawdroid/pkg/channels" + "github.com/KarakuriAgent/clawdroid/pkg/config" + "github.com/KarakuriAgent/clawdroid/pkg/cron" + "github.com/KarakuriAgent/clawdroid/pkg/devices" + "github.com/KarakuriAgent/clawdroid/pkg/health" + "github.com/KarakuriAgent/clawdroid/pkg/heartbeat" + "github.com/KarakuriAgent/clawdroid/pkg/logger" + "github.com/KarakuriAgent/clawdroid/pkg/migrate" + "github.com/KarakuriAgent/clawdroid/pkg/providers" + "github.com/KarakuriAgent/clawdroid/pkg/skills" + "github.com/KarakuriAgent/clawdroid/pkg/state" + "github.com/KarakuriAgent/clawdroid/pkg/tools" + "github.com/KarakuriAgent/clawdroid/pkg/voice" ) //go:generate cp -r ../../workspace . @@ -75,7 +75,7 @@ func formatBuildInfo() (build string, goVer string) { } func printVersion() { - fmt.Printf("%s picoclaw %s\n", logo, formatVersion()) + fmt.Printf("%s clawdroid %s\n", logo, formatVersion()) build, goVer := formatBuildInfo() if build != "" { fmt.Printf(" Build: %s\n", build) @@ -160,7 +160,7 @@ func main() { // 获取全局配置目录和内置 skills 目录 globalDir := filepath.Dir(getConfigPath()) globalSkillsDir := filepath.Join(globalDir, "skills") - builtinSkillsDir := filepath.Join(globalDir, "picoclaw", "skills") + builtinSkillsDir := filepath.Join(globalDir, "clawdroid", "skills") skillsLoader := skills.NewSkillsLoader(dataDir, globalSkillsDir, builtinSkillsDir) switch subcommand { @@ -168,7 +168,7 @@ func main() { skillsListCmd(skillsLoader) case "remove", "uninstall": if len(os.Args) < 4 { - fmt.Println("Usage: picoclaw skills remove ") + fmt.Println("Usage: clawdroid skills remove ") return } skillsRemoveCmd(dataDir, os.Args[3]) @@ -178,7 +178,7 @@ func main() { skillsListBuiltinCmd() case "show": if len(os.Args) < 4 { - fmt.Println("Usage: picoclaw skills show ") + fmt.Println("Usage: clawdroid skills show ") return } skillsShowCmd(skillsLoader, os.Args[3]) @@ -196,17 +196,17 @@ func main() { } func printHelp() { - fmt.Printf("%s picoclaw - Personal AI Assistant v%s\n\n", logo, version) - fmt.Println("Usage: picoclaw ") + fmt.Printf("%s clawdroid - Personal AI Assistant v%s\n\n", logo, version) + fmt.Println("Usage: clawdroid ") fmt.Println() fmt.Println("Commands:") - fmt.Println(" onboard Initialize picoclaw configuration and workspace") + fmt.Println(" onboard Initialize clawdroid configuration and workspace") fmt.Println(" agent Interact with the agent directly") fmt.Println(" auth Manage authentication (login, logout, status)") - fmt.Println(" gateway Start picoclaw gateway") - fmt.Println(" status Show picoclaw status") + fmt.Println(" gateway Start clawdroid gateway") + fmt.Println(" status Show clawdroid status") fmt.Println(" cron Manage scheduled tasks") - fmt.Println(" migrate Migrate from OpenClaw to PicoClaw") + fmt.Println(" migrate Migrate from OpenClaw to ClawDroid") fmt.Println(" skills Manage skills (install, list, remove)") fmt.Println(" version Show version information") } @@ -236,11 +236,11 @@ func onboard() { os.MkdirAll(workspace, 0755) createWorkspaceTemplates(dataDir) - fmt.Printf("%s picoclaw is ready!\n", logo) + fmt.Printf("%s clawdroid is ready!\n", logo) fmt.Println("\nNext steps:") fmt.Println(" 1. Add your API key to", configPath) fmt.Println(" Get one at: https://openrouter.ai/keys") - fmt.Println(" 2. Chat: picoclaw agent -m \"Hello!\"") + fmt.Println(" 2. Chat: clawdroid agent -m \"Hello!\"") } func copyEmbeddedToTarget(targetDir string) error { @@ -323,9 +323,9 @@ func migrateCmd() { opts.OpenClawHome = args[i+1] i++ } - case "--picoclaw-home": + case "--clawdroid-home": if i+1 < len(args) { - opts.PicoClawHome = args[i+1] + opts.ClawDroidHome = args[i+1] i++ } default: @@ -347,9 +347,9 @@ func migrateCmd() { } func migrateHelp() { - fmt.Println("\nMigrate from OpenClaw to PicoClaw") + fmt.Println("\nMigrate from OpenClaw to ClawDroid") fmt.Println() - fmt.Println("Usage: picoclaw migrate [options]") + fmt.Println("Usage: clawdroid migrate [options]") fmt.Println() fmt.Println("Options:") fmt.Println(" --dry-run Show what would be migrated without making changes") @@ -358,13 +358,13 @@ func migrateHelp() { fmt.Println(" --workspace-only Only migrate workspace files, skip config") fmt.Println(" --force Skip confirmation prompts") fmt.Println(" --openclaw-home Override OpenClaw home directory (default: ~/.openclaw)") - fmt.Println(" --picoclaw-home Override PicoClaw home directory (default: ~/.picoclaw)") + fmt.Println(" --clawdroid-home Override ClawDroid home directory (default: ~/.clawdroid)") fmt.Println() fmt.Println("Examples:") - fmt.Println(" picoclaw migrate Detect and migrate from OpenClaw") - fmt.Println(" picoclaw migrate --dry-run Show what would be migrated") - fmt.Println(" picoclaw migrate --refresh Re-sync workspace files") - fmt.Println(" picoclaw migrate --force Migrate without confirmation") + fmt.Println(" clawdroid migrate Detect and migrate from OpenClaw") + fmt.Println(" clawdroid migrate --dry-run Show what would be migrated") + fmt.Println(" clawdroid migrate --refresh Re-sync workspace files") + fmt.Println(" clawdroid migrate --force Migrate without confirmation") } func agentCmd() { @@ -433,7 +433,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(), ".clawdroid_history"), HistoryLimit: 100, InterruptPrompt: "^C", EOFPrompt: "exit", @@ -696,7 +696,7 @@ func statusCmd() { configPath := getConfigPath() - fmt.Printf("%s picoclaw Status\n", logo) + fmt.Printf("%s clawdroid Status\n", logo) fmt.Printf("Version: %s\n", formatVersion()) build, _ := formatBuildInfo() if build != "" { @@ -792,11 +792,11 @@ func authHelp() { fmt.Println(" --device-code Use device code flow (for headless environments)") fmt.Println() fmt.Println("Examples:") - fmt.Println(" picoclaw auth login --provider openai") - fmt.Println(" picoclaw auth login --provider openai --device-code") - fmt.Println(" picoclaw auth login --provider anthropic") - fmt.Println(" picoclaw auth logout --provider openai") - fmt.Println(" picoclaw auth status") + fmt.Println(" clawdroid auth login --provider openai") + fmt.Println(" clawdroid auth login --provider openai --device-code") + fmt.Println(" clawdroid auth login --provider anthropic") + fmt.Println(" clawdroid auth logout --provider openai") + fmt.Println(" clawdroid auth status") } func authLoginCmd() { @@ -955,7 +955,7 @@ func authStatusCmd() { if len(store.Credentials) == 0 { fmt.Println("No authenticated providers.") - fmt.Println("Run: picoclaw auth login --provider ") + fmt.Println("Run: clawdroid auth login --provider ") return } @@ -983,7 +983,7 @@ func authStatusCmd() { func getConfigPath() string { home, _ := os.UserHomeDir() - return filepath.Join(home, ".picoclaw", "config.json") + return filepath.Join(home, ".clawdroid", "config.json") } func setupCronTool(agentLoop *agent.AgentLoop, msgBus *bus.MessageBus, workspace string, dataDir string, restrict bool, execEnabled bool) *cron.CronService { @@ -1033,7 +1033,7 @@ func cronCmd() { cronAddCmd(cronStorePath) case "remove": if len(os.Args) < 4 { - fmt.Println("Usage: picoclaw cron remove ") + fmt.Println("Usage: clawdroid cron remove ") return } cronRemoveCmd(cronStorePath, os.Args[3]) @@ -1203,7 +1203,7 @@ func cronRemoveCmd(storePath, jobID string) { func cronEnableCmd(storePath string, disable bool) { if len(os.Args) < 4 { - fmt.Println("Usage: picoclaw cron enable/disable ") + fmt.Println("Usage: clawdroid cron enable/disable ") return } @@ -1232,13 +1232,13 @@ func skillsHelp() { fmt.Println(" show Show skill details") fmt.Println() fmt.Println("To install custom skills, place SKILL.md files manually in:") - fmt.Println(" ~/.picoclaw/data/skills//SKILL.md") + fmt.Println(" ~/.clawdroid/data/skills//SKILL.md") fmt.Println() fmt.Println("Examples:") - fmt.Println(" picoclaw skills list") - fmt.Println(" picoclaw skills install-builtin") - fmt.Println(" picoclaw skills list-builtin") - fmt.Println(" picoclaw skills remove weather") + fmt.Println(" clawdroid skills list") + fmt.Println(" clawdroid skills install-builtin") + fmt.Println(" clawdroid skills list-builtin") + fmt.Println(" clawdroid skills remove weather") } func skillsListCmd(loader *skills.SkillsLoader) { @@ -1277,7 +1277,7 @@ func skillsRemoveCmd(dataDir string, skillName string) { } func skillsInstallBuiltinCmd(dataDir string) { - builtinSkillsDir := "./picoclaw/skills" + builtinSkillsDir := "./clawdroid/skills" skillsDir := filepath.Join(dataDir, "skills") fmt.Printf("Copying builtin skills to workspace...\n") @@ -1318,7 +1318,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()), "clawdroid", "skills") fmt.Println("\nAvailable Builtin Skills:") fmt.Println("-----------------------") diff --git a/config/config.example.json b/config/config.example.json index 3f2e3811c..f938a138f 100644 --- a/config/config.example.json +++ b/config/config.example.json @@ -1,8 +1,8 @@ { "agents": { "defaults": { - "workspace": "~/.picoclaw/workspace", - "data_dir": "~/.picoclaw/data", + "workspace": "~/.clawdroid/workspace", + "data_dir": "~/.clawdroid/data", "restrict_to_workspace": true, "model": "glm-4.7", "max_tokens": 8192, diff --git a/doc/android-apk-plan.md b/doc/android-apk-plan.md index d4ae6c778..8fe34597a 100644 --- a/doc/android-apk-plan.md +++ b/doc/android-apk-plan.md @@ -1,8 +1,8 @@ -# PicoClaw Android APK - チャットUI設計プラン +# ClawDroid Android APK - チャットUI設計プラン ## Context -PicoClawはTermux上で動作するGo製AIエージェント。WebSocketサーバーチャネル(`pkg/channels/websocket.go`)を通じて外部クライアントと通信可能。このWSサーバーに接続するAndroid APKを作成する。初期リリースはテキスト+画像チャットUI、将来的にボイスUI(Googleアシスタント風)を追加予定。 +ClawDroidはTermux上で動作するGo製AIエージェント。WebSocketサーバーチャネル(`pkg/channels/websocket.go`)を通じて外部クライアントと通信可能。このWSサーバーに接続するAndroid APKを作成する。初期リリースはテキスト+画像チャットUI、将来的にボイスUI(Googleアシスタント風)を追加予定。 ## WSプロトコル(確認済み) @@ -81,8 +81,8 @@ android/ │ │ ├── values/strings.xml │ │ ├── values/colors.xml │ │ └── values/themes.xml -│ └── java/io/picoclaw/android/ -│ ├── PicoClawApp.kt # Application(Koin初期化) +│ └── java/io/clawdroid/android/ +│ ├── ClawDroidApp.kt # Application(Koin初期化) │ ├── MainActivity.kt # Single Activity + Navigation │ └── di/ │ └── AppModule.kt # Koin全体module定義 @@ -90,7 +90,7 @@ android/ ├── feature/ │ └── chat/ # === :feature:chat モジュール === │ ├── build.gradle.kts -│ └── src/main/java/io/picoclaw/android/feature/chat/ +│ └── src/main/java/io/clawdroid/android/feature/chat/ │ ├── ChatViewModel.kt │ ├── ChatUiState.kt │ ├── ChatEvent.kt @@ -106,7 +106,7 @@ android/ ├── core/ │ ├── domain/ # === :core:domain モジュール === │ │ ├── build.gradle.kts -│ │ └── src/main/java/io/picoclaw/android/core/domain/ +│ │ └── src/main/java/io/clawdroid/android/core/domain/ │ │ ├── model/ │ │ │ ├── ChatMessage.kt │ │ │ ├── ConnectionState.kt @@ -121,7 +121,7 @@ android/ │ │ │ ├── data/ # === :core:data モジュール === │ │ ├── build.gradle.kts -│ │ └── src/main/java/io/picoclaw/android/core/data/ +│ │ └── src/main/java/io/clawdroid/android/core/data/ │ │ ├── remote/ │ │ │ ├── WebSocketClient.kt # Ktor WS + auto-reconnect │ │ │ └── dto/ @@ -142,7 +142,7 @@ android/ │ │ │ └── ui/ # === :core:ui モジュール === │ ├── build.gradle.kts -│ └── src/main/java/io/picoclaw/android/core/ui/ +│ └── src/main/java/io/clawdroid/android/core/ui/ │ └── theme/ │ ├── Theme.kt │ ├── Color.kt @@ -368,7 +368,7 @@ LaunchedEffect(shouldLoadMore) { val appModule = module { // Room single { - Room.databaseBuilder(androidContext(), AppDatabase::class.java, "picoclaw.db").build() + Room.databaseBuilder(androidContext(), AppDatabase::class.java, "clawdroid.db").build() } single { get().messageDao() } @@ -414,7 +414,7 @@ dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google(); mavenCentral() } } -rootProject.name = "PicoClaw" +rootProject.name = "ClawDroid" include(":app") include(":feature:chat") include(":core:domain") @@ -541,14 +541,14 @@ KSPは`:core:data`モジュールのみで使用(Room compiler)。 ### Phase 7: :app 22. `AppModule.kt`(Koin全体module) -23. `PicoClawApp.kt` +23. `ClawDroidApp.kt` 24. `MainActivity.kt` --- ## 検証方法 -1. Termuxでpicoclaw起動(WSサーバーが`127.0.0.1:18793`でリスン) +1. Termuxでclawdroid起動(WSサーバーが`127.0.0.1:18793`でリスン) 2. APKをビルド・インストール(`./gradlew assembleDebug`) 3. アプリ起動 → ConnectionBannerが「Connected」表示を確認 4. テキスト送信 → エージェントからの応答がチャットに表示されることを確認 diff --git a/doc/picoclaw_community_roadmap_260216.md b/doc/picoclaw_community_roadmap_260216.md index cfcc30f17..53f4034d8 100644 --- a/doc/picoclaw_community_roadmap_260216.md +++ b/doc/picoclaw_community_roadmap_260216.md @@ -1,10 +1,10 @@ -## 🚀 Join the PicoClaw Journey: Call for Community Volunteers & Roadmap Reveal +## 🚀 Join the ClawDroid Journey: Call for Community Volunteers & Roadmap Reveal -**Hello, PicoClaw Community!** +**Hello, ClawDroid Community!** -First, a massive thank you to everyone for your enthusiasm and PR contributions. It is because of you that PicoClaw continues to iterate and evolve so rapidly. Thanks to the simplicity and accessibility of the **Go language**, we’ve seen a non-stop stream of high-quality PRs! +First, a massive thank you to everyone for your enthusiasm and PR contributions. It is because of you that ClawDroid continues to iterate and evolve so rapidly. Thanks to the simplicity and accessibility of the **Go language**, we’ve seen a non-stop stream of high-quality PRs! -PicoClaw is growing much faster than we anticipated. As we are currently in the midst of the **Chinese New Year holiday**, we are looking to recruit community volunteers to help us maintain this incredible momentum. +ClawDroid is growing much faster than we anticipated. As we are currently in the midst of the **Chinese New Year holiday**, we are looking to recruit community volunteers to help us maintain this incredible momentum. This document outlines the specific volunteer roles we need right now and provides a look at our upcoming **Roadmap**. @@ -17,9 +17,9 @@ To show our appreciation, developers who officially join our community operation ### 🎥 Calling All Content Creators! -Not a developer? You can still help! We welcome users to post **PicoClaw reviews or tutorials**. +Not a developer? You can still help! We welcome users to post **ClawDroid reviews or tutorials**. -* **Twitter:** Use the tag **#picoclaw** and mention **@SipeedIO**. +* **Twitter:** Use the tag **#clawdroid** and mention **@SipeedIO**. * **Bilibili:** Mention **@Sipeed矽速科技** or send us a DM. We will be rewarding high-quality content creators with the same perks as our community developers! @@ -35,7 +35,7 @@ We are looking for experts in the following areas: 2. **Resource Optimization Experts** -* **The Mission:** Rapid growth has introduced dependencies that are making PicoClaw a bit "heavy." We want to keep it lean. +* **The Mission:** Rapid growth has introduced dependencies that are making ClawDroid a bit "heavy." We want to keep it lean. * **Focus:** Analyzing resource growth between releases and trimming redundancy. * **Priority:** **RAM usage optimization** > Binary size reduction. @@ -51,10 +51,10 @@ We are looking for experts in the following areas: 5. **AI-Powered CI/CD Optimization** -* **The Mission:** PicoClaw started as a "vibe coding" experiment; now we want to use AI to manage it. +* **The Mission:** ClawDroid started as a "vibe coding" experiment; now we want to use AI to manage it. * **Focus:** Automating builds with AI and exploring AI-driven issue resolution. -**How to Apply:** > If you are interested in any of the roles above, please send an email to support@sipeed.com with the subject line: [Apply: PicoClaw Expert Volunteer] + Your Desired Role. +**How to Apply:** > If you are interested in any of the roles above, please send an email to support@sipeed.com with the subject line: [Apply: ClawDroid Expert Volunteer] + Your Desired Role. Please include a brief introduction and any relevant experience or portfolio links. We will review all applications and grant project permissions to selected contributors! --- @@ -98,15 +98,15 @@ If you would like to claim a task, please feel free to start a conversation by c **Everything is open to your creativity!** If you have a wild idea, just PR it. -1. **The Fast Track:** Once you have at least **one merged PR**, you are eligible to join our **Developer Discord** to help plan the future of PicoClaw. +1. **The Fast Track:** Once you have at least **one merged PR**, you are eligible to join our **Developer Discord** to help plan the future of ClawDroid. 2. **The Application Track:** If you haven’t submitted a PR yet but want to dive in, email **support@sipeed.com** with the subject: -> `[Apply Join PicoClaw Dev Group] + Your GitHub Account` +> `[Apply Join ClawDroid Dev Group] + Your GitHub Account` > Include the role you're interested in and any evidence of your development experience. ### Looking Ahead -Powered by PicoClaw, we are crafting a Swarm AI Assistant to transform your environment into a seamless network of personal stewards. By automating the friction of daily life, we empower you to transcend the ordinary and freely explore your creative potential. +Powered by ClawDroid, we are crafting a Swarm AI Assistant to transform your environment into a seamless network of personal stewards. By automating the friction of daily life, we empower you to transcend the ordinary and freely explore your creative potential. -**Finally, Happy Chinese New Year to everyone!** May PicoClaw gallop forward in this **Year of the Horse!** 🐎 +**Finally, Happy Chinese New Year to everyone!** May ClawDroid gallop forward in this **Year of the Horse!** 🐎 diff --git a/docker-compose.yml b/docker-compose.yml index 48769627c..68df56e7e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,40 +1,40 @@ services: # ───────────────────────────────────────────── - # PicoClaw Agent (one-shot query) - # docker compose run --rm picoclaw-agent -m "Hello" + # ClawDroid Agent (one-shot query) + # docker compose run --rm clawdroid-agent -m "Hello" # ───────────────────────────────────────────── - picoclaw-agent: + clawdroid-agent: build: context: . dockerfile: Dockerfile - container_name: picoclaw-agent + container_name: clawdroid-agent profiles: - agent volumes: - - ./config/config.json:/root/.picoclaw/config.json:ro - - picoclaw-workspace:/root/.picoclaw/workspace - entrypoint: ["picoclaw", "agent"] + - ./config/config.json:/root/.clawdroid/config.json:ro + - clawdroid-workspace:/root/.clawdroid/workspace + entrypoint: ["clawdroid", "agent"] stdin_open: true tty: true # ───────────────────────────────────────────── - # PicoClaw Gateway (Long-running Bot) - # docker compose up picoclaw-gateway + # ClawDroid Gateway (Long-running Bot) + # docker compose up clawdroid-gateway # ───────────────────────────────────────────── - picoclaw-gateway: + clawdroid-gateway: build: context: . dockerfile: Dockerfile - container_name: picoclaw-gateway + container_name: clawdroid-gateway restart: unless-stopped profiles: - gateway volumes: # Configuration file - - ./config/config.json:/root/.picoclaw/config.json:ro + - ./config/config.json:/root/.clawdroid/config.json:ro # Persistent workspace (sessions, memory, logs) - - picoclaw-workspace:/root/.picoclaw/workspace + - clawdroid-workspace:/root/.clawdroid/workspace command: ["gateway"] volumes: - picoclaw-workspace: + clawdroid-workspace: diff --git a/go.mod b/go.mod index d0a92b628..bc2e8a240 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/sipeed/picoclaw +module github.com/KarakuriAgent/clawdroid go 1.25.6 diff --git a/pkg/agent/context.go b/pkg/agent/context.go index d37cc224c..69acd5426 100644 --- a/pkg/agent/context.go +++ b/pkg/agent/context.go @@ -7,11 +7,11 @@ import ( "strings" "time" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/mcp" - "github.com/sipeed/picoclaw/pkg/providers" - "github.com/sipeed/picoclaw/pkg/skills" - "github.com/sipeed/picoclaw/pkg/tools" + "github.com/KarakuriAgent/clawdroid/pkg/logger" + "github.com/KarakuriAgent/clawdroid/pkg/mcp" + "github.com/KarakuriAgent/clawdroid/pkg/providers" + "github.com/KarakuriAgent/clawdroid/pkg/skills" + "github.com/KarakuriAgent/clawdroid/pkg/tools" ) // SilentReplyToken is the token the LLM emits when it has nothing to say. @@ -34,7 +34,7 @@ func getGlobalConfigDir() string { if err != nil { return "" } - return filepath.Join(home, ".picoclaw") + return filepath.Join(home, ".clawdroid") } func NewContextBuilder(workspace string, dataDir string) *ContextBuilder { diff --git a/pkg/agent/loop.go b/pkg/agent/loop.go index 1d27f019d..42c10228d 100644 --- a/pkg/agent/loop.go +++ b/pkg/agent/loop.go @@ -1,8 +1,8 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// ClawDroid - 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 ClawDroid contributors package agent @@ -18,17 +18,17 @@ import ( "time" "unicode/utf8" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/channels" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/constants" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/mcp" - "github.com/sipeed/picoclaw/pkg/providers" - "github.com/sipeed/picoclaw/pkg/session" - "github.com/sipeed/picoclaw/pkg/state" - "github.com/sipeed/picoclaw/pkg/tools" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/KarakuriAgent/clawdroid/pkg/bus" + "github.com/KarakuriAgent/clawdroid/pkg/channels" + "github.com/KarakuriAgent/clawdroid/pkg/config" + "github.com/KarakuriAgent/clawdroid/pkg/constants" + "github.com/KarakuriAgent/clawdroid/pkg/logger" + "github.com/KarakuriAgent/clawdroid/pkg/mcp" + "github.com/KarakuriAgent/clawdroid/pkg/providers" + "github.com/KarakuriAgent/clawdroid/pkg/session" + "github.com/KarakuriAgent/clawdroid/pkg/state" + "github.com/KarakuriAgent/clawdroid/pkg/tools" + "github.com/KarakuriAgent/clawdroid/pkg/utils" ) type AgentLoop struct { diff --git a/pkg/agent/loop_test.go b/pkg/agent/loop_test.go index dedbc313d..2c1947a7c 100644 --- a/pkg/agent/loop_test.go +++ b/pkg/agent/loop_test.go @@ -9,10 +9,10 @@ import ( "testing" "time" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/providers" - "github.com/sipeed/picoclaw/pkg/tools" + "github.com/KarakuriAgent/clawdroid/pkg/bus" + "github.com/KarakuriAgent/clawdroid/pkg/config" + "github.com/KarakuriAgent/clawdroid/pkg/providers" + "github.com/KarakuriAgent/clawdroid/pkg/tools" ) // mockProvider is a simple mock LLM provider for testing diff --git a/pkg/agent/media.go b/pkg/agent/media.go index 763a75c33..b5487e501 100644 --- a/pkg/agent/media.go +++ b/pkg/agent/media.go @@ -9,8 +9,8 @@ import ( "strings" "time" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/KarakuriAgent/clawdroid/pkg/logger" + "github.com/KarakuriAgent/clawdroid/pkg/providers" ) // PersistMedia saves base64 data URL images to the mediaDir as files. diff --git a/pkg/agent/memory.go b/pkg/agent/memory.go index ea3650d11..e06d598c8 100644 --- a/pkg/agent/memory.go +++ b/pkg/agent/memory.go @@ -1,8 +1,8 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// ClawDroid - 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 ClawDroid contributors package agent diff --git a/pkg/auth/oauth.go b/pkg/auth/oauth.go index dcd91bebd..f43032b3a 100644 --- a/pkg/auth/oauth.go +++ b/pkg/auth/oauth.go @@ -101,7 +101,7 @@ func LoginBrowser(cfg OAuthProviderConfig) (*AuthCredential, error) { fmt.Printf("Could not open browser automatically.\nPlease open this URL manually:\n\n%s\n\n", authURL) } - fmt.Println("If you're running in a headless environment, use: picoclaw auth login --provider openai --device-code") + fmt.Println("If you're running in a headless environment, use: clawdroid auth login --provider openai --device-code") fmt.Println("Waiting for authentication in browser...") select { @@ -311,7 +311,7 @@ func buildAuthorizeURL(cfg OAuthProviderConfig, pkce PKCECodes, state, redirectU "state": {state}, } if strings.Contains(strings.ToLower(cfg.Issuer), "auth.openai.com") { - params.Set("originator", "picoclaw") + params.Set("originator", "clawdroid") } if cfg.Originator != "" { params.Set("originator", cfg.Originator) diff --git a/pkg/auth/store.go b/pkg/auth/store.go index 20724929a..64fe92f5b 100644 --- a/pkg/auth/store.go +++ b/pkg/auth/store.go @@ -36,7 +36,7 @@ func (c *AuthCredential) NeedsRefresh() bool { func authFilePath() string { home, _ := os.UserHomeDir() - return filepath.Join(home, ".picoclaw", "auth.json") + return filepath.Join(home, ".clawdroid", "auth.json") } func LoadStore() (*AuthStore, error) { diff --git a/pkg/auth/store_test.go b/pkg/auth/store_test.go index d96b460a1..e2f935907 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, ".clawdroid", "auth.json") info, err := os.Stat(path) if err != nil { t.Fatalf("Stat() error: %v", err) diff --git a/pkg/broadcast/broadcast.go b/pkg/broadcast/broadcast.go index fdcee1634..79ed8847f 100644 --- a/pkg/broadcast/broadcast.go +++ b/pkg/broadcast/broadcast.go @@ -5,14 +5,14 @@ import ( "fmt" "os/exec" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/KarakuriAgent/clawdroid/pkg/logger" ) const ( // Action is the intent action the Android app listens for. - Action = "io.picoclaw.android.AGENT_MESSAGE" + Action = "io.clawdroid.AGENT_MESSAGE" // Package is the Android app package name. - Package = "io.picoclaw.android" + Package = "io.clawdroid" ) // Message represents a message to send via Android broadcast. diff --git a/pkg/channels/base.go b/pkg/channels/base.go index 8d2d9a65b..c25e36222 100644 --- a/pkg/channels/base.go +++ b/pkg/channels/base.go @@ -5,7 +5,7 @@ import ( "fmt" "strings" - "github.com/sipeed/picoclaw/pkg/bus" + "github.com/KarakuriAgent/clawdroid/pkg/bus" ) type Channel interface { diff --git a/pkg/channels/dingtalk.go b/pkg/channels/dingtalk.go index 263785c0c..4c7c0fa62 100644 --- a/pkg/channels/dingtalk.go +++ b/pkg/channels/dingtalk.go @@ -1,4 +1,4 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// ClawDroid - Ultra-lightweight personal AI agent // DingTalk channel implementation using Stream Mode package channels @@ -10,10 +10,10 @@ import ( "github.com/open-dingtalk/dingtalk-stream-sdk-go/chatbot" "github.com/open-dingtalk/dingtalk-stream-sdk-go/client" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/KarakuriAgent/clawdroid/pkg/bus" + "github.com/KarakuriAgent/clawdroid/pkg/config" + "github.com/KarakuriAgent/clawdroid/pkg/logger" + "github.com/KarakuriAgent/clawdroid/pkg/utils" ) // DingTalkChannel implements the Channel interface for DingTalk (钉钉) @@ -175,7 +175,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("ClawDroid") // Send markdown formatted reply err := replier.SimpleReplyMarkdown( diff --git a/pkg/channels/discord.go b/pkg/channels/discord.go index 3a97f9c33..348fb7275 100644 --- a/pkg/channels/discord.go +++ b/pkg/channels/discord.go @@ -8,11 +8,11 @@ import ( "time" "github.com/bwmarrin/discordgo" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/utils" - "github.com/sipeed/picoclaw/pkg/voice" + "github.com/KarakuriAgent/clawdroid/pkg/bus" + "github.com/KarakuriAgent/clawdroid/pkg/config" + "github.com/KarakuriAgent/clawdroid/pkg/logger" + "github.com/KarakuriAgent/clawdroid/pkg/utils" + "github.com/KarakuriAgent/clawdroid/pkg/voice" ) const ( diff --git a/pkg/channels/feishu_32.go b/pkg/channels/feishu_32.go index 4e60fbc11..e90b65269 100644 --- a/pkg/channels/feishu_32.go +++ b/pkg/channels/feishu_32.go @@ -6,8 +6,8 @@ import ( "context" "errors" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/KarakuriAgent/clawdroid/pkg/bus" + "github.com/KarakuriAgent/clawdroid/pkg/config" ) // FeishuChannel is a stub implementation for 32-bit architectures diff --git a/pkg/channels/feishu_64.go b/pkg/channels/feishu_64.go index 39dc40ac1..f9cb43fe6 100644 --- a/pkg/channels/feishu_64.go +++ b/pkg/channels/feishu_64.go @@ -14,10 +14,10 @@ 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/config" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/KarakuriAgent/clawdroid/pkg/bus" + "github.com/KarakuriAgent/clawdroid/pkg/config" + "github.com/KarakuriAgent/clawdroid/pkg/logger" + "github.com/KarakuriAgent/clawdroid/pkg/utils" ) type FeishuChannel struct { @@ -108,7 +108,7 @@ func (c *FeishuChannel) Send(ctx context.Context, msg bus.OutboundMessage) error ReceiveId(msg.ChatID). MsgType(larkim.MsgTypeText). Content(string(payload)). - Uuid(fmt.Sprintf("picoclaw-%d", time.Now().UnixNano())). + Uuid(fmt.Sprintf("clawdroid-%d", time.Now().UnixNano())). Build()). Build() diff --git a/pkg/channels/line.go b/pkg/channels/line.go index c708ded7c..40cdbee65 100644 --- a/pkg/channels/line.go +++ b/pkg/channels/line.go @@ -15,10 +15,10 @@ import ( "sync" "time" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/KarakuriAgent/clawdroid/pkg/bus" + "github.com/KarakuriAgent/clawdroid/pkg/config" + "github.com/KarakuriAgent/clawdroid/pkg/logger" + "github.com/KarakuriAgent/clawdroid/pkg/utils" ) const ( diff --git a/pkg/channels/maixcam.go b/pkg/channels/maixcam.go index 5fc19adbe..bf8a17e9d 100644 --- a/pkg/channels/maixcam.go +++ b/pkg/channels/maixcam.go @@ -7,9 +7,9 @@ import ( "net" "sync" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/KarakuriAgent/clawdroid/pkg/bus" + "github.com/KarakuriAgent/clawdroid/pkg/config" + "github.com/KarakuriAgent/clawdroid/pkg/logger" ) type MaixCamChannel struct { diff --git a/pkg/channels/manager.go b/pkg/channels/manager.go index 32791caf2..57e45f4d4 100644 --- a/pkg/channels/manager.go +++ b/pkg/channels/manager.go @@ -1,8 +1,8 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// ClawDroid - 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 ClawDroid contributors package channels @@ -11,10 +11,10 @@ import ( "fmt" "sync" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/constants" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/KarakuriAgent/clawdroid/pkg/bus" + "github.com/KarakuriAgent/clawdroid/pkg/config" + "github.com/KarakuriAgent/clawdroid/pkg/constants" + "github.com/KarakuriAgent/clawdroid/pkg/logger" ) type Manager struct { diff --git a/pkg/channels/onebot.go b/pkg/channels/onebot.go index 5d97fab9c..5699a4f63 100644 --- a/pkg/channels/onebot.go +++ b/pkg/channels/onebot.go @@ -11,9 +11,9 @@ import ( "github.com/gorilla/websocket" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/KarakuriAgent/clawdroid/pkg/bus" + "github.com/KarakuriAgent/clawdroid/pkg/config" + "github.com/KarakuriAgent/clawdroid/pkg/logger" ) type OneBotChannel struct { diff --git a/pkg/channels/qq.go b/pkg/channels/qq.go index 18b4ca0e0..062b0a773 100644 --- a/pkg/channels/qq.go +++ b/pkg/channels/qq.go @@ -13,9 +13,9 @@ import ( "github.com/tencent-connect/botgo/token" "golang.org/x/oauth2" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/KarakuriAgent/clawdroid/pkg/bus" + "github.com/KarakuriAgent/clawdroid/pkg/config" + "github.com/KarakuriAgent/clawdroid/pkg/logger" ) type QQChannel struct { diff --git a/pkg/channels/slack.go b/pkg/channels/slack.go index 1bf367bc4..6f45bf2e8 100644 --- a/pkg/channels/slack.go +++ b/pkg/channels/slack.go @@ -12,11 +12,11 @@ import ( "github.com/slack-go/slack/slackevents" "github.com/slack-go/slack/socketmode" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/utils" - "github.com/sipeed/picoclaw/pkg/voice" + "github.com/KarakuriAgent/clawdroid/pkg/bus" + "github.com/KarakuriAgent/clawdroid/pkg/config" + "github.com/KarakuriAgent/clawdroid/pkg/logger" + "github.com/KarakuriAgent/clawdroid/pkg/utils" + "github.com/KarakuriAgent/clawdroid/pkg/voice" ) type SlackChannel struct { diff --git a/pkg/channels/slack_test.go b/pkg/channels/slack_test.go index 3707c2703..4fa27f0ea 100644 --- a/pkg/channels/slack_test.go +++ b/pkg/channels/slack_test.go @@ -3,8 +3,8 @@ package channels import ( "testing" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/KarakuriAgent/clawdroid/pkg/bus" + "github.com/KarakuriAgent/clawdroid/pkg/config" ) func TestParseSlackChatID(t *testing.T) { diff --git a/pkg/channels/telegram.go b/pkg/channels/telegram.go index 7b43c5df2..24ec2e0b7 100644 --- a/pkg/channels/telegram.go +++ b/pkg/channels/telegram.go @@ -17,11 +17,11 @@ import ( "github.com/mymmrac/telego/telegohandler" tu "github.com/mymmrac/telego/telegoutil" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/utils" - "github.com/sipeed/picoclaw/pkg/voice" + "github.com/KarakuriAgent/clawdroid/pkg/bus" + "github.com/KarakuriAgent/clawdroid/pkg/config" + "github.com/KarakuriAgent/clawdroid/pkg/logger" + "github.com/KarakuriAgent/clawdroid/pkg/utils" + "github.com/KarakuriAgent/clawdroid/pkg/voice" ) type TelegramChannel struct { diff --git a/pkg/channels/telegram_commands.go b/pkg/channels/telegram_commands.go index df245e156..0acc2cdd3 100644 --- a/pkg/channels/telegram_commands.go +++ b/pkg/channels/telegram_commands.go @@ -6,7 +6,7 @@ import ( "strings" "github.com/mymmrac/telego" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/KarakuriAgent/clawdroid/pkg/config" ) type TelegramCommander interface { @@ -54,7 +54,7 @@ func (c *cmd) Help(ctx context.Context, message telego.Message) error { func (c *cmd) Start(ctx context.Context, message telego.Message) error { _, err := c.bot.SendMessage(ctx, &telego.SendMessageParams{ ChatID: telego.ChatID{ID: message.Chat.ID}, - Text: "Hello! I am PicoClaw 🦞", + Text: "Hello! I am ClawDroid 🦞", ReplyParameters: &telego.ReplyParameters{ MessageID: message.MessageID, }, diff --git a/pkg/channels/websocket.go b/pkg/channels/websocket.go index 0dc4bad6b..288aa6cac 100644 --- a/pkg/channels/websocket.go +++ b/pkg/channels/websocket.go @@ -9,14 +9,14 @@ import ( "github.com/google/uuid" "github.com/gorilla/websocket" - "github.com/sipeed/picoclaw/pkg/broadcast" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/tools" + "github.com/KarakuriAgent/clawdroid/pkg/broadcast" + "github.com/KarakuriAgent/clawdroid/pkg/bus" + "github.com/KarakuriAgent/clawdroid/pkg/config" + "github.com/KarakuriAgent/clawdroid/pkg/logger" + "github.com/KarakuriAgent/clawdroid/pkg/tools" ) -// wsIncoming is the JSON message sent from APK to picoclaw. +// wsIncoming is the JSON message sent from APK to clawdroid. type wsIncoming struct { Content string `json:"content"` SenderID string `json:"sender_id,omitempty"` @@ -26,7 +26,7 @@ type wsIncoming struct { RequestID string `json:"request_id,omitempty"` // correlates with tool_request } -// wsOutgoing is the JSON message sent from picoclaw to APK. +// wsOutgoing is the JSON message sent from clawdroid to APK. type wsOutgoing struct { Content string `json:"content"` Type string `json:"type,omitempty"` diff --git a/pkg/channels/whatsapp.go b/pkg/channels/whatsapp.go index c95e59578..c5179828a 100644 --- a/pkg/channels/whatsapp.go +++ b/pkg/channels/whatsapp.go @@ -10,9 +10,9 @@ import ( "github.com/gorilla/websocket" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/KarakuriAgent/clawdroid/pkg/bus" + "github.com/KarakuriAgent/clawdroid/pkg/config" + "github.com/KarakuriAgent/clawdroid/pkg/utils" ) type WhatsAppChannel struct { diff --git a/pkg/config/config.go b/pkg/config/config.go index e396a9982..f95f8a225 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -60,15 +60,15 @@ type AgentsConfig struct { } type AgentDefaults struct { - Workspace string `json:"workspace" env:"PICOCLAW_AGENTS_DEFAULTS_WORKSPACE"` - DataDir string `json:"data_dir" env:"PICOCLAW_AGENTS_DEFAULTS_DATA_DIR"` - RestrictToWorkspace bool `json:"restrict_to_workspace" env:"PICOCLAW_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACE"` - Provider string `json:"provider" env:"PICOCLAW_AGENTS_DEFAULTS_PROVIDER"` - Model string `json:"model" env:"PICOCLAW_AGENTS_DEFAULTS_MODEL"` - MaxTokens int `json:"max_tokens" env:"PICOCLAW_AGENTS_DEFAULTS_MAX_TOKENS"` - ContextWindow int `json:"context_window" env:"PICOCLAW_AGENTS_DEFAULTS_CONTEXT_WINDOW"` - Temperature float64 `json:"temperature" env:"PICOCLAW_AGENTS_DEFAULTS_TEMPERATURE"` - MaxToolIterations int `json:"max_tool_iterations" env:"PICOCLAW_AGENTS_DEFAULTS_MAX_TOOL_ITERATIONS"` + Workspace string `json:"workspace" env:"CLAWDROID_AGENTS_DEFAULTS_WORKSPACE"` + DataDir string `json:"data_dir" env:"CLAWDROID_AGENTS_DEFAULTS_DATA_DIR"` + RestrictToWorkspace bool `json:"restrict_to_workspace" env:"CLAWDROID_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACE"` + Provider string `json:"provider" env:"CLAWDROID_AGENTS_DEFAULTS_PROVIDER"` + Model string `json:"model" env:"CLAWDROID_AGENTS_DEFAULTS_MODEL"` + MaxTokens int `json:"max_tokens" env:"CLAWDROID_AGENTS_DEFAULTS_MAX_TOKENS"` + ContextWindow int `json:"context_window" env:"CLAWDROID_AGENTS_DEFAULTS_CONTEXT_WINDOW"` + Temperature float64 `json:"temperature" env:"CLAWDROID_AGENTS_DEFAULTS_TEMPERATURE"` + MaxToolIterations int `json:"max_tool_iterations" env:"CLAWDROID_AGENTS_DEFAULTS_MAX_TOOL_ITERATIONS"` } type ChannelsConfig struct { @@ -86,101 +86,101 @@ type ChannelsConfig struct { } type WhatsAppConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_CHANNELS_WHATSAPP_ENABLED"` - BridgeURL string `json:"bridge_url" env:"PICOCLAW_CHANNELS_WHATSAPP_BRIDGE_URL"` - AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICOCLAW_CHANNELS_WHATSAPP_ALLOW_FROM"` + Enabled bool `json:"enabled" env:"CLAWDROID_CHANNELS_WHATSAPP_ENABLED"` + BridgeURL string `json:"bridge_url" env:"CLAWDROID_CHANNELS_WHATSAPP_BRIDGE_URL"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"CLAWDROID_CHANNELS_WHATSAPP_ALLOW_FROM"` } type TelegramConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_CHANNELS_TELEGRAM_ENABLED"` - Token string `json:"token" env:"PICOCLAW_CHANNELS_TELEGRAM_TOKEN"` - 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:"CLAWDROID_CHANNELS_TELEGRAM_ENABLED"` + Token string `json:"token" env:"CLAWDROID_CHANNELS_TELEGRAM_TOKEN"` + Proxy string `json:"proxy" env:"CLAWDROID_CHANNELS_TELEGRAM_PROXY"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"CLAWDROID_CHANNELS_TELEGRAM_ALLOW_FROM"` } 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:"CLAWDROID_CHANNELS_FEISHU_ENABLED"` + AppID string `json:"app_id" env:"CLAWDROID_CHANNELS_FEISHU_APP_ID"` + AppSecret string `json:"app_secret" env:"CLAWDROID_CHANNELS_FEISHU_APP_SECRET"` + EncryptKey string `json:"encrypt_key" env:"CLAWDROID_CHANNELS_FEISHU_ENCRYPT_KEY"` + VerificationToken string `json:"verification_token" env:"CLAWDROID_CHANNELS_FEISHU_VERIFICATION_TOKEN"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"CLAWDROID_CHANNELS_FEISHU_ALLOW_FROM"` } type DiscordConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_CHANNELS_DISCORD_ENABLED"` - Token string `json:"token" env:"PICOCLAW_CHANNELS_DISCORD_TOKEN"` - AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICOCLAW_CHANNELS_DISCORD_ALLOW_FROM"` + Enabled bool `json:"enabled" env:"CLAWDROID_CHANNELS_DISCORD_ENABLED"` + Token string `json:"token" env:"CLAWDROID_CHANNELS_DISCORD_TOKEN"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"CLAWDROID_CHANNELS_DISCORD_ALLOW_FROM"` } 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"` + Enabled bool `json:"enabled" env:"CLAWDROID_CHANNELS_MAIXCAM_ENABLED"` + Host string `json:"host" env:"CLAWDROID_CHANNELS_MAIXCAM_HOST"` + Port int `json:"port" env:"CLAWDROID_CHANNELS_MAIXCAM_PORT"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"CLAWDROID_CHANNELS_MAIXCAM_ALLOW_FROM"` } 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:"CLAWDROID_CHANNELS_QQ_ENABLED"` + AppID string `json:"app_id" env:"CLAWDROID_CHANNELS_QQ_APP_ID"` + AppSecret string `json:"app_secret" env:"CLAWDROID_CHANNELS_QQ_APP_SECRET"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"CLAWDROID_CHANNELS_QQ_ALLOW_FROM"` } 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:"CLAWDROID_CHANNELS_DINGTALK_ENABLED"` + ClientID string `json:"client_id" env:"CLAWDROID_CHANNELS_DINGTALK_CLIENT_ID"` + ClientSecret string `json:"client_secret" env:"CLAWDROID_CHANNELS_DINGTALK_CLIENT_SECRET"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"CLAWDROID_CHANNELS_DINGTALK_ALLOW_FROM"` } 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:"CLAWDROID_CHANNELS_SLACK_ENABLED"` + BotToken string `json:"bot_token" env:"CLAWDROID_CHANNELS_SLACK_BOT_TOKEN"` + AppToken string `json:"app_token" env:"CLAWDROID_CHANNELS_SLACK_APP_TOKEN"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"CLAWDROID_CHANNELS_SLACK_ALLOW_FROM"` } 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:"CLAWDROID_CHANNELS_LINE_ENABLED"` + ChannelSecret string `json:"channel_secret" env:"CLAWDROID_CHANNELS_LINE_CHANNEL_SECRET"` + ChannelAccessToken string `json:"channel_access_token" env:"CLAWDROID_CHANNELS_LINE_CHANNEL_ACCESS_TOKEN"` + WebhookHost string `json:"webhook_host" env:"CLAWDROID_CHANNELS_LINE_WEBHOOK_HOST"` + WebhookPort int `json:"webhook_port" env:"CLAWDROID_CHANNELS_LINE_WEBHOOK_PORT"` + WebhookPath string `json:"webhook_path" env:"CLAWDROID_CHANNELS_LINE_WEBHOOK_PATH"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"CLAWDROID_CHANNELS_LINE_ALLOW_FROM"` } 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:"CLAWDROID_CHANNELS_ONEBOT_ENABLED"` + WSUrl string `json:"ws_url" env:"CLAWDROID_CHANNELS_ONEBOT_WS_URL"` + AccessToken string `json:"access_token" env:"CLAWDROID_CHANNELS_ONEBOT_ACCESS_TOKEN"` + ReconnectInterval int `json:"reconnect_interval" env:"CLAWDROID_CHANNELS_ONEBOT_RECONNECT_INTERVAL"` + GroupTriggerPrefix []string `json:"group_trigger_prefix" env:"CLAWDROID_CHANNELS_ONEBOT_GROUP_TRIGGER_PREFIX"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"CLAWDROID_CHANNELS_ONEBOT_ALLOW_FROM"` } type WebSocketConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_CHANNELS_WEBSOCKET_ENABLED"` - Host string `json:"host" env:"PICOCLAW_CHANNELS_WEBSOCKET_HOST"` - Port int `json:"port" env:"PICOCLAW_CHANNELS_WEBSOCKET_PORT"` - Path string `json:"path" env:"PICOCLAW_CHANNELS_WEBSOCKET_PATH"` - AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICOCLAW_CHANNELS_WEBSOCKET_ALLOW_FROM"` + Enabled bool `json:"enabled" env:"CLAWDROID_CHANNELS_WEBSOCKET_ENABLED"` + Host string `json:"host" env:"CLAWDROID_CHANNELS_WEBSOCKET_HOST"` + Port int `json:"port" env:"CLAWDROID_CHANNELS_WEBSOCKET_PORT"` + Path string `json:"path" env:"CLAWDROID_CHANNELS_WEBSOCKET_PATH"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"CLAWDROID_CHANNELS_WEBSOCKET_ALLOW_FROM"` } 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:"CLAWDROID_HEARTBEAT_ENABLED"` + Interval int `json:"interval" env:"CLAWDROID_HEARTBEAT_INTERVAL"` // minutes, min 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:"CLAWDROID_DEVICES_ENABLED"` + MonitorUSB bool `json:"monitor_usb" env:"CLAWDROID_DEVICES_MONITOR_USB"` } type RateLimitsConfig struct { - MaxToolCallsPerMinute int `json:"max_tool_calls_per_minute" env:"PICOCLAW_RATE_LIMITS_MAX_TOOL_CALLS_PER_MINUTE"` // 0 = unlimited - MaxRequestsPerMinute int `json:"max_requests_per_minute" env:"PICOCLAW_RATE_LIMITS_MAX_REQUESTS_PER_MINUTE"` // 0 = unlimited + MaxToolCallsPerMinute int `json:"max_tool_calls_per_minute" env:"CLAWDROID_RATE_LIMITS_MAX_TOOL_CALLS_PER_MINUTE"` // 0 = unlimited + MaxRequestsPerMinute int `json:"max_requests_per_minute" env:"CLAWDROID_RATE_LIMITS_MAX_REQUESTS_PER_MINUTE"` // 0 = unlimited } type ProvidersConfig struct { @@ -200,27 +200,27 @@ type ProvidersConfig struct { } 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"` - 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:"CLAWDROID_PROVIDERS_{{.Name}}_API_KEY"` + APIBase string `json:"api_base" env:"CLAWDROID_PROVIDERS_{{.Name}}_API_BASE"` + Proxy string `json:"proxy,omitempty" env:"CLAWDROID_PROVIDERS_{{.Name}}_PROXY"` + AuthMethod string `json:"auth_method,omitempty" env:"CLAWDROID_PROVIDERS_{{.Name}}_AUTH_METHOD"` + ConnectMode string `json:"connect_mode,omitempty" env:"CLAWDROID_PROVIDERS_{{.Name}}_CONNECT_MODE"` //only for Github Copilot, `stdio` or `grpc` } type GatewayConfig struct { - Host string `json:"host" env:"PICOCLAW_GATEWAY_HOST"` - Port int `json:"port" env:"PICOCLAW_GATEWAY_PORT"` + Host string `json:"host" env:"CLAWDROID_GATEWAY_HOST"` + Port int `json:"port" env:"CLAWDROID_GATEWAY_PORT"` } 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"` - MaxResults int `json:"max_results" env:"PICOCLAW_TOOLS_WEB_BRAVE_MAX_RESULTS"` + Enabled bool `json:"enabled" env:"CLAWDROID_TOOLS_WEB_BRAVE_ENABLED"` + APIKey string `json:"api_key" env:"CLAWDROID_TOOLS_WEB_BRAVE_API_KEY"` + MaxResults int `json:"max_results" env:"CLAWDROID_TOOLS_WEB_BRAVE_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:"CLAWDROID_TOOLS_WEB_DUCKDUCKGO_ENABLED"` + MaxResults int `json:"max_results" env:"CLAWDROID_TOOLS_WEB_DUCKDUCKGO_MAX_RESULTS"` } type WebToolsConfig struct { @@ -229,15 +229,15 @@ type WebToolsConfig struct { } type ExecToolsConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_TOOLS_EXEC_ENABLED"` + Enabled bool `json:"enabled" env:"CLAWDROID_TOOLS_EXEC_ENABLED"` } type I2CToolsConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_TOOLS_I2C_ENABLED"` + Enabled bool `json:"enabled" env:"CLAWDROID_TOOLS_I2C_ENABLED"` } type SPIToolsConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_TOOLS_SPI_ENABLED"` + Enabled bool `json:"enabled" env:"CLAWDROID_TOOLS_SPI_ENABLED"` } type MCPServerConfig struct { @@ -255,11 +255,11 @@ type MCPServerConfig struct { } type AndroidToolsConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_TOOLS_ANDROID_ENABLED"` + Enabled bool `json:"enabled" env:"CLAWDROID_TOOLS_ANDROID_ENABLED"` } type MemoryToolsConfig struct { - Enabled bool `json:"enabled" env:"PICOCLAW_TOOLS_MEMORY_ENABLED"` + Enabled bool `json:"enabled" env:"CLAWDROID_TOOLS_MEMORY_ENABLED"` } type ToolsConfig struct { @@ -276,8 +276,8 @@ func DefaultConfig() *Config { return &Config{ Agents: AgentsConfig{ Defaults: AgentDefaults{ - Workspace: "~/.picoclaw/workspace", - DataDir: "~/.picoclaw/data", + Workspace: "~/.clawdroid/workspace", + DataDir: "~/.clawdroid/data", RestrictToWorkspace: true, Provider: "", Model: "glm-4.7", diff --git a/pkg/config/config_test.go b/pkg/config/config_test.go index dd8b0a310..264bcc5ba 100644 --- a/pkg/config/config_test.go +++ b/pkg/config/config_test.go @@ -205,8 +205,8 @@ func TestDefaultConfig_DataDir(t *testing.T) { if cfg.Agents.Defaults.DataDir == "" { t.Error("DataDir should not be empty") } - if cfg.Agents.Defaults.DataDir != "~/.picoclaw/data" { - t.Errorf("DataDir should be '~/.picoclaw/data', got '%s'", cfg.Agents.Defaults.DataDir) + if cfg.Agents.Defaults.DataDir != "~/.clawdroid/data" { + t.Errorf("DataDir should be '~/.clawdroid/data', got '%s'", cfg.Agents.Defaults.DataDir) } } @@ -218,7 +218,7 @@ func TestConfig_DataPath(t *testing.T) { if path == "" { t.Error("DataPath should not be empty") } - if path == "~/.picoclaw/data" { + if path == "~/.clawdroid/data" { t.Error("DataPath should expand ~ to home directory") } if path[0] == '~' { diff --git a/pkg/devices/service.go b/pkg/devices/service.go index 05a254729..34553f49c 100644 --- a/pkg/devices/service.go +++ b/pkg/devices/service.go @@ -5,12 +5,12 @@ import ( "strings" "sync" - "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/KarakuriAgent/clawdroid/pkg/bus" + "github.com/KarakuriAgent/clawdroid/pkg/constants" + "github.com/KarakuriAgent/clawdroid/pkg/devices/events" + "github.com/KarakuriAgent/clawdroid/pkg/devices/sources" + "github.com/KarakuriAgent/clawdroid/pkg/logger" + "github.com/KarakuriAgent/clawdroid/pkg/state" ) type Service struct { diff --git a/pkg/devices/source.go b/pkg/devices/source.go index cbf0a7d88..a09986c92 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/KarakuriAgent/clawdroid/pkg/devices/events" type EventSource = events.EventSource diff --git a/pkg/devices/sources/usb_linux.go b/pkg/devices/sources/usb_linux.go index 1f6c068b3..c80b9fa07 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/KarakuriAgent/clawdroid/pkg/devices/events" + "github.com/KarakuriAgent/clawdroid/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..31e4464a0 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/KarakuriAgent/clawdroid/pkg/devices/events" ) type USBMonitor struct{} diff --git a/pkg/heartbeat/service.go b/pkg/heartbeat/service.go index 9eb671e1e..65a10c5d2 100644 --- a/pkg/heartbeat/service.go +++ b/pkg/heartbeat/service.go @@ -1,8 +1,8 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// ClawDroid - 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 ClawDroid contributors package heartbeat @@ -14,11 +14,11 @@ import ( "sync" "time" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/constants" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/state" - "github.com/sipeed/picoclaw/pkg/tools" + "github.com/KarakuriAgent/clawdroid/pkg/bus" + "github.com/KarakuriAgent/clawdroid/pkg/constants" + "github.com/KarakuriAgent/clawdroid/pkg/logger" + "github.com/KarakuriAgent/clawdroid/pkg/state" + "github.com/KarakuriAgent/clawdroid/pkg/tools" ) const ( diff --git a/pkg/heartbeat/service_test.go b/pkg/heartbeat/service_test.go index 41fc68f59..7b3a4d435 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/KarakuriAgent/clawdroid/pkg/tools" ) func TestExecuteHeartbeat_Async(t *testing.T) { diff --git a/pkg/mcp/manager.go b/pkg/mcp/manager.go index 937398506..198490a81 100644 --- a/pkg/mcp/manager.go +++ b/pkg/mcp/manager.go @@ -12,8 +12,8 @@ import ( "time" sdkmcp "github.com/modelcontextprotocol/go-sdk/mcp" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/KarakuriAgent/clawdroid/pkg/config" + "github.com/KarakuriAgent/clawdroid/pkg/logger" ) // ServerInstance manages a connected MCP server session. @@ -300,7 +300,7 @@ func (m *Manager) ensureRunning(ctx context.Context, serverName string) (*Server // Create SDK client client := sdkmcp.NewClient( - &sdkmcp.Implementation{Name: "picoclaw", Version: "1.0.0"}, + &sdkmcp.Implementation{Name: "clawdroid", Version: "1.0.0"}, nil, ) diff --git a/pkg/migrate/config.go b/pkg/migrate/config.go index 9c1e36359..0dbcdd8f4 100644 --- a/pkg/migrate/config.go +++ b/pkg/migrate/config.go @@ -8,7 +8,7 @@ import ( "strings" "unicode" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/KarakuriAgent/clawdroid/pkg/config" ) var supportedProviders = map[string]bool{ @@ -98,7 +98,7 @@ func ConvertConfig(data map[string]interface{}) (*config.Config, []string, error if !supportedProviders[name] { if apiKey != "" || apiBase != "" { - warnings = append(warnings, fmt.Sprintf("Provider '%s' not supported in PicoClaw, skipping", name)) + warnings = append(warnings, fmt.Sprintf("Provider '%s' not supported in ClawDroid, skipping", name)) } continue } @@ -130,7 +130,7 @@ func ConvertConfig(data map[string]interface{}) (*config.Config, []string, error continue } if !supportedChannels[name] { - warnings = append(warnings, fmt.Sprintf("Channel '%s' not supported in PicoClaw, skipping", name)) + warnings = append(warnings, fmt.Sprintf("Channel '%s' not supported in ClawDroid, skipping", name)) continue } enabled, _ := getBool(cMap, "enabled") @@ -323,7 +323,7 @@ func convertKeysToSnake(data interface{}) interface{} { } func rewriteWorkspacePath(path string) string { - path = strings.Replace(path, ".openclaw", ".picoclaw", 1) + path = strings.Replace(path, ".openclaw", ".clawdroid", 1) return path } diff --git a/pkg/migrate/migrate.go b/pkg/migrate/migrate.go index 921f821cb..34ca5ba7d 100644 --- a/pkg/migrate/migrate.go +++ b/pkg/migrate/migrate.go @@ -7,7 +7,7 @@ import ( "path/filepath" "strings" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/KarakuriAgent/clawdroid/pkg/config" ) type ActionType int @@ -28,7 +28,7 @@ type Options struct { Force bool Refresh bool OpenClawHome string - PicoClawHome string + ClawDroidHome string } type Action struct { @@ -62,7 +62,7 @@ func Run(opts Options) (*Result, error) { return nil, err } - picoClawHome, err := resolvePicoClawHome(opts.PicoClawHome) + clawDroidHome, err := resolveClawDroidHome(opts.ClawDroidHome) if err != nil { return nil, err } @@ -71,14 +71,14 @@ func Run(opts Options) (*Result, error) { return nil, fmt.Errorf("OpenClaw installation not found at %s", openclawHome) } - actions, warnings, err := Plan(opts, openclawHome, picoClawHome) + actions, warnings, err := Plan(opts, openclawHome, clawDroidHome) if err != nil { return nil, err } - fmt.Println("Migrating from OpenClaw to PicoClaw") + fmt.Println("Migrating from OpenClaw to ClawDroid") fmt.Printf(" Source: %s\n", openclawHome) - fmt.Printf(" Destination: %s\n", picoClawHome) + fmt.Printf(" Destination: %s\n", clawDroidHome) fmt.Println() if opts.DryRun { @@ -95,12 +95,12 @@ func Run(opts Options) (*Result, error) { fmt.Println() } - result := Execute(actions, openclawHome, picoClawHome) + result := Execute(actions, openclawHome, clawDroidHome) result.Warnings = warnings return result, nil } -func Plan(opts Options, openclawHome, picoClawHome string) ([]Action, []string, error) { +func Plan(opts Options, openclawHome, clawDroidHome string) ([]Action, []string, error) { var actions []Action var warnings []string @@ -117,8 +117,8 @@ func Plan(opts Options, openclawHome, picoClawHome string) ([]Action, []string, actions = append(actions, Action{ Type: ActionConvertConfig, Source: configPath, - Destination: filepath.Join(picoClawHome, "config.json"), - Description: "convert OpenClaw config to PicoClaw format", + Destination: filepath.Join(clawDroidHome, "config.json"), + Description: "convert OpenClaw config to ClawDroid format", }) data, err := LoadOpenClawConfig(configPath) @@ -131,7 +131,7 @@ func Plan(opts Options, openclawHome, picoClawHome string) ([]Action, []string, if !opts.ConfigOnly { srcWorkspace := resolveWorkspace(openclawHome) - dstWorkspace := resolveWorkspace(picoClawHome) + dstWorkspace := resolveWorkspace(clawDroidHome) if _, err := os.Stat(srcWorkspace); err == nil { wsActions, err := PlanWorkspaceMigration(srcWorkspace, dstWorkspace, force) @@ -147,13 +147,13 @@ func Plan(opts Options, openclawHome, picoClawHome string) ([]Action, []string, return actions, warnings, nil } -func Execute(actions []Action, openclawHome, picoClawHome string) *Result { +func Execute(actions []Action, openclawHome, clawDroidHome string) *Result { result := &Result{} for _, action := range actions { switch action.Type { case ActionConvertConfig: - if err := executeConfigMigration(action.Source, action.Destination, picoClawHome); err != nil { + if err := executeConfigMigration(action.Source, action.Destination, clawDroidHome); err != nil { result.Errors = append(result.Errors, fmt.Errorf("config migration: %w", err)) fmt.Printf(" ✗ Config migration failed: %v\n", err) } else { @@ -207,7 +207,7 @@ func Execute(actions []Action, openclawHome, picoClawHome string) *Result { return result } -func executeConfigMigration(srcConfigPath, dstConfigPath, picoClawHome string) error { +func executeConfigMigration(srcConfigPath, dstConfigPath, clawDroidHome string) error { data, err := LoadOpenClawConfig(srcConfigPath) if err != nil { return err @@ -221,7 +221,7 @@ func executeConfigMigration(srcConfigPath, dstConfigPath, picoClawHome string) e if _, err := os.Stat(dstConfigPath); err == nil { existing, err := config.LoadConfig(dstConfigPath) if err != nil { - return fmt.Errorf("loading existing PicoClaw config: %w", err) + return fmt.Errorf("loading existing ClawDroid config: %w", err) } incoming = MergeConfig(existing, incoming) } @@ -326,18 +326,18 @@ func resolveOpenClawHome(override string) (string, error) { return filepath.Join(home, ".openclaw"), nil } -func resolvePicoClawHome(override string) (string, error) { +func resolveClawDroidHome(override string) (string, error) { if override != "" { return expandHome(override), nil } - if envHome := os.Getenv("PICOCLAW_HOME"); envHome != "" { + if envHome := os.Getenv("CLAWDROID_HOME"); envHome != "" { return expandHome(envHome), nil } home, err := os.UserHomeDir() if err != nil { return "", fmt.Errorf("resolving home directory: %w", err) } - return filepath.Join(home, ".picoclaw"), nil + return filepath.Join(home, ".clawdroid"), nil } func resolveWorkspace(homeDir string) string { diff --git a/pkg/migrate/migrate_test.go b/pkg/migrate/migrate_test.go index be2360aac..bbb7d47fc 100644 --- a/pkg/migrate/migrate_test.go +++ b/pkg/migrate/migrate_test.go @@ -6,7 +6,7 @@ import ( "path/filepath" "testing" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/KarakuriAgent/clawdroid/pkg/config" ) func TestCamelToSnake(t *testing.T) { @@ -193,7 +193,7 @@ func TestConvertConfig(t *testing.T) { if len(warnings) != 1 { t.Fatalf("expected 1 warning, got %d", len(warnings)) } - if warnings[0] != "Provider 'deepseek' not supported in PicoClaw, skipping" { + if warnings[0] != "Provider 'deepseek' not supported in ClawDroid, skipping" { t.Errorf("unexpected warning: %s", warnings[0]) } }) @@ -247,7 +247,7 @@ func TestConvertConfig(t *testing.T) { if len(warnings) != 1 { t.Fatalf("expected 1 warning, got %d", len(warnings)) } - if warnings[0] != "Channel 'email' not supported in PicoClaw, skipping" { + if warnings[0] != "Channel 'email' not supported in ClawDroid, skipping" { t.Errorf("unexpected warning: %s", warnings[0]) } }) @@ -278,8 +278,8 @@ func TestConvertConfig(t *testing.T) { if cfg.Agents.Defaults.Temperature != 0.5 { t.Errorf("Temperature = %f, want %f", cfg.Agents.Defaults.Temperature, 0.5) } - if cfg.Agents.Defaults.Workspace != "~/.picoclaw/workspace" { - t.Errorf("Workspace = %q, want %q", cfg.Agents.Defaults.Workspace, "~/.picoclaw/workspace") + if cfg.Agents.Defaults.Workspace != "~/.clawdroid/workspace" { + t.Errorf("Workspace = %q, want %q", cfg.Agents.Defaults.Workspace, "~/.clawdroid/workspace") } }) @@ -553,7 +553,7 @@ func TestRewriteWorkspacePath(t *testing.T) { input string want string }{ - {"default path", "~/.openclaw/workspace", "~/.picoclaw/workspace"}, + {"default path", "~/.openclaw/workspace", "~/.clawdroid/workspace"}, {"custom path", "/custom/path", "/custom/path"}, {"empty", "", ""}, } @@ -569,7 +569,7 @@ func TestRewriteWorkspacePath(t *testing.T) { func TestRunDryRun(t *testing.T) { openclawHome := t.TempDir() - picoClawHome := t.TempDir() + clawDroidHome := t.TempDir() wsDir := filepath.Join(openclawHome, "workspace") os.MkdirAll(wsDir, 0755) @@ -589,7 +589,7 @@ func TestRunDryRun(t *testing.T) { opts := Options{ DryRun: true, OpenClawHome: openclawHome, - PicoClawHome: picoClawHome, + ClawDroidHome: clawDroidHome, } result, err := Run(opts) @@ -597,11 +597,11 @@ func TestRunDryRun(t *testing.T) { t.Fatalf("Run: %v", err) } - picoWs := filepath.Join(picoClawHome, "workspace") - if _, err := os.Stat(filepath.Join(picoWs, "SOUL.md")); !os.IsNotExist(err) { + clawWs := filepath.Join(clawDroidHome, "workspace") + if _, err := os.Stat(filepath.Join(clawWs, "SOUL.md")); !os.IsNotExist(err) { t.Error("dry run should not create files") } - if _, err := os.Stat(filepath.Join(picoClawHome, "config.json")); !os.IsNotExist(err) { + if _, err := os.Stat(filepath.Join(clawDroidHome, "config.json")); !os.IsNotExist(err) { t.Error("dry run should not create config") } @@ -610,7 +610,7 @@ func TestRunDryRun(t *testing.T) { func TestRunFullMigration(t *testing.T) { openclawHome := t.TempDir() - picoClawHome := t.TempDir() + clawDroidHome := t.TempDir() wsDir := filepath.Join(openclawHome, "workspace") os.MkdirAll(wsDir, 0755) @@ -644,7 +644,7 @@ func TestRunFullMigration(t *testing.T) { opts := Options{ Force: true, OpenClawHome: openclawHome, - PicoClawHome: picoClawHome, + ClawDroidHome: clawDroidHome, } result, err := Run(opts) @@ -652,9 +652,9 @@ func TestRunFullMigration(t *testing.T) { t.Fatalf("Run: %v", err) } - picoWs := filepath.Join(picoClawHome, "workspace") + clawWs := filepath.Join(clawDroidHome, "workspace") - soulData, err := os.ReadFile(filepath.Join(picoWs, "SOUL.md")) + soulData, err := os.ReadFile(filepath.Join(clawWs, "SOUL.md")) if err != nil { t.Fatalf("reading SOUL.md: %v", err) } @@ -662,7 +662,7 @@ func TestRunFullMigration(t *testing.T) { t.Errorf("SOUL.md content = %q, want %q", string(soulData), "# Soul from OpenClaw") } - agentsData, err := os.ReadFile(filepath.Join(picoWs, "AGENTS.md")) + agentsData, err := os.ReadFile(filepath.Join(clawWs, "AGENTS.md")) if err != nil { t.Fatalf("reading AGENTS.md: %v", err) } @@ -670,7 +670,7 @@ func TestRunFullMigration(t *testing.T) { t.Errorf("AGENTS.md content = %q", string(agentsData)) } - memData, err := os.ReadFile(filepath.Join(picoWs, "memory", "MEMORY.md")) + memData, err := os.ReadFile(filepath.Join(clawWs, "memory", "MEMORY.md")) if err != nil { t.Fatalf("reading memory/MEMORY.md: %v", err) } @@ -678,21 +678,21 @@ func TestRunFullMigration(t *testing.T) { t.Errorf("MEMORY.md content = %q", string(memData)) } - picoConfig, err := config.LoadConfig(filepath.Join(picoClawHome, "config.json")) + clawConfig, err := config.LoadConfig(filepath.Join(clawDroidHome, "config.json")) if err != nil { - t.Fatalf("loading PicoClaw config: %v", err) + t.Fatalf("loading ClawDroid config: %v", err) } - if picoConfig.Providers.Anthropic.APIKey != "sk-ant-migrate-test" { - t.Errorf("Anthropic.APIKey = %q, want %q", picoConfig.Providers.Anthropic.APIKey, "sk-ant-migrate-test") + if clawConfig.Providers.Anthropic.APIKey != "sk-ant-migrate-test" { + t.Errorf("Anthropic.APIKey = %q, want %q", clawConfig.Providers.Anthropic.APIKey, "sk-ant-migrate-test") } - if picoConfig.Providers.OpenRouter.APIKey != "sk-or-migrate-test" { - t.Errorf("OpenRouter.APIKey = %q, want %q", picoConfig.Providers.OpenRouter.APIKey, "sk-or-migrate-test") + if clawConfig.Providers.OpenRouter.APIKey != "sk-or-migrate-test" { + t.Errorf("OpenRouter.APIKey = %q, want %q", clawConfig.Providers.OpenRouter.APIKey, "sk-or-migrate-test") } - if !picoConfig.Channels.Telegram.Enabled { + if !clawConfig.Channels.Telegram.Enabled { t.Error("Telegram should be enabled") } - if picoConfig.Channels.Telegram.Token != "tg-migrate-test" { - t.Errorf("Telegram.Token = %q, want %q", picoConfig.Channels.Telegram.Token, "tg-migrate-test") + if clawConfig.Channels.Telegram.Token != "tg-migrate-test" { + t.Errorf("Telegram.Token = %q, want %q", clawConfig.Channels.Telegram.Token, "tg-migrate-test") } if result.FilesCopied < 3 { @@ -709,7 +709,7 @@ func TestRunFullMigration(t *testing.T) { func TestRunOpenClawNotFound(t *testing.T) { opts := Options{ OpenClawHome: "/nonexistent/path/to/openclaw", - PicoClawHome: t.TempDir(), + ClawDroidHome: t.TempDir(), } _, err := Run(opts) @@ -771,7 +771,7 @@ func TestCopyFile(t *testing.T) { func TestRunConfigOnly(t *testing.T) { openclawHome := t.TempDir() - picoClawHome := t.TempDir() + clawDroidHome := t.TempDir() wsDir := filepath.Join(openclawHome, "workspace") os.MkdirAll(wsDir, 0755) @@ -791,7 +791,7 @@ func TestRunConfigOnly(t *testing.T) { Force: true, ConfigOnly: true, OpenClawHome: openclawHome, - PicoClawHome: picoClawHome, + ClawDroidHome: clawDroidHome, } result, err := Run(opts) @@ -803,15 +803,15 @@ func TestRunConfigOnly(t *testing.T) { t.Error("config should have been migrated") } - picoWs := filepath.Join(picoClawHome, "workspace") - if _, err := os.Stat(filepath.Join(picoWs, "SOUL.md")); !os.IsNotExist(err) { + clawWs := filepath.Join(clawDroidHome, "workspace") + if _, err := os.Stat(filepath.Join(clawWs, "SOUL.md")); !os.IsNotExist(err) { t.Error("config-only should not copy workspace files") } } func TestRunWorkspaceOnly(t *testing.T) { openclawHome := t.TempDir() - picoClawHome := t.TempDir() + clawDroidHome := t.TempDir() wsDir := filepath.Join(openclawHome, "workspace") os.MkdirAll(wsDir, 0755) @@ -831,7 +831,7 @@ func TestRunWorkspaceOnly(t *testing.T) { Force: true, WorkspaceOnly: true, OpenClawHome: openclawHome, - PicoClawHome: picoClawHome, + ClawDroidHome: clawDroidHome, } result, err := Run(opts) @@ -843,8 +843,8 @@ func TestRunWorkspaceOnly(t *testing.T) { t.Error("workspace-only should not migrate config") } - picoWs := filepath.Join(picoClawHome, "workspace") - soulData, err := os.ReadFile(filepath.Join(picoWs, "SOUL.md")) + clawWs := filepath.Join(clawDroidHome, "workspace") + soulData, err := os.ReadFile(filepath.Join(clawWs, "SOUL.md")) if err != nil { t.Fatalf("reading SOUL.md: %v", err) } diff --git a/pkg/providers/claude_cli_provider_test.go b/pkg/providers/claude_cli_provider_test.go index 063530deb..33c05f38c 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/KarakuriAgent/clawdroid/pkg/config" ) // --- Compile-time interface check --- diff --git a/pkg/providers/claude_provider.go b/pkg/providers/claude_provider.go index ae6aca96d..c435e7b4b 100644 --- a/pkg/providers/claude_provider.go +++ b/pkg/providers/claude_provider.go @@ -7,7 +7,7 @@ import ( "github.com/anthropics/anthropic-sdk-go" "github.com/anthropics/anthropic-sdk-go/option" - "github.com/sipeed/picoclaw/pkg/auth" + "github.com/KarakuriAgent/clawdroid/pkg/auth" ) type ClaudeProvider struct { @@ -200,7 +200,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: clawdroid auth login --provider anthropic") } return cred.AccessToken, nil } diff --git a/pkg/providers/codex_cli_provider_test.go b/pkg/providers/codex_cli_provider_test.go index 7e4e1bc15..567597cd8 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("CLAWDROID_INTEGRATION_TESTS") == "" { + t.Skip("skipping integration test (set CLAWDROID_INTEGRATION_TESTS=1 to enable)") } // Verify codex is available diff --git a/pkg/providers/codex_provider.go b/pkg/providers/codex_provider.go index 6dff3a52e..c5e11e180 100644 --- a/pkg/providers/codex_provider.go +++ b/pkg/providers/codex_provider.go @@ -10,8 +10,8 @@ import ( "github.com/openai/openai-go/v3" "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/KarakuriAgent/clawdroid/pkg/auth" + "github.com/KarakuriAgent/clawdroid/pkg/logger" ) const codexDefaultModel = "gpt-5.2" @@ -344,7 +344,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: clawdroid auth login --provider openai") } if cred.AuthMethod == "oauth" && cred.NeedsRefresh() && cred.RefreshToken != "" { diff --git a/pkg/providers/http_provider.go b/pkg/providers/http_provider.go index d7c9c8b45..acca15538 100644 --- a/pkg/providers/http_provider.go +++ b/pkg/providers/http_provider.go @@ -1,8 +1,8 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// ClawDroid - 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 ClawDroid contributors package providers @@ -17,8 +17,8 @@ import ( "strings" "time" - "github.com/sipeed/picoclaw/pkg/auth" - "github.com/sipeed/picoclaw/pkg/config" + "github.com/KarakuriAgent/clawdroid/pkg/auth" + "github.com/KarakuriAgent/clawdroid/pkg/config" ) type HTTPProvider struct { @@ -249,7 +249,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: clawdroid auth login --provider anthropic") } return NewClaudeProviderWithTokenSource(cred.AccessToken, createClaudeTokenSource()), nil } @@ -260,7 +260,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: clawdroid auth login --provider openai") } return NewCodexProviderWithTokenSource(cred.AccessToken, cred.AccountID, createCodexTokenSource()), nil } diff --git a/pkg/session/manager.go b/pkg/session/manager.go index 12bf33df0..af1cc46d1 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/KarakuriAgent/clawdroid/pkg/providers" ) type Session struct { diff --git a/pkg/skills/loader.go b/pkg/skills/loader.go index 6615e93c4..066bc159e 100644 --- a/pkg/skills/loader.go +++ b/pkg/skills/loader.go @@ -54,7 +54,7 @@ func (info SkillInfo) validate() error { type SkillsLoader struct { dataDir string dataSkills string // data dir skills - globalSkills string // global skills (~/.picoclaw/skills) + globalSkills string // global skills (~/.clawdroid/skills) builtinSkills string // builtin skills } @@ -62,7 +62,7 @@ func NewSkillsLoader(dataDir string, globalSkills string, builtinSkills string) return &SkillsLoader{ dataDir: dataDir, dataSkills: filepath.Join(dataDir, "skills"), - globalSkills: globalSkills, // ~/.picoclaw/skills + globalSkills: globalSkills, // ~/.clawdroid/skills builtinSkills: builtinSkills, } } @@ -97,7 +97,7 @@ func (sl *SkillsLoader) ListSkills() []SkillInfo { } } - // 全局 skills (~/.picoclaw/skills) - 被 workspace skills 覆盖 + // 全局 skills (~/.clawdroid/skills) - 被 workspace skills 覆盖 if sl.globalSkills != "" { if dirs, err := os.ReadDir(sl.globalSkills); err == nil { for _, dir := range dirs { @@ -188,7 +188,7 @@ func (sl *SkillsLoader) LoadSkill(name string) (string, bool) { } } - // 2. 其次从全局 skills 加载 (~/.picoclaw/skills) + // 2. 其次从全局 skills 加载 (~/.clawdroid/skills) if sl.globalSkills != "" { skillFile := filepath.Join(sl.globalSkills, name, "SKILL.md") if content, err := os.ReadFile(skillFile); err == nil { diff --git a/pkg/tools/cron.go b/pkg/tools/cron.go index 8af18455d..72e2e0fbb 100644 --- a/pkg/tools/cron.go +++ b/pkg/tools/cron.go @@ -6,9 +6,9 @@ import ( "sync" "time" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/cron" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/KarakuriAgent/clawdroid/pkg/bus" + "github.com/KarakuriAgent/clawdroid/pkg/cron" + "github.com/KarakuriAgent/clawdroid/pkg/utils" ) // JobExecutor is the interface for executing cron jobs through the agent diff --git a/pkg/tools/mcp.go b/pkg/tools/mcp.go index 079eb73d2..2e6137ccf 100644 --- a/pkg/tools/mcp.go +++ b/pkg/tools/mcp.go @@ -6,7 +6,7 @@ import ( "fmt" "strings" - "github.com/sipeed/picoclaw/pkg/mcp" + "github.com/KarakuriAgent/clawdroid/pkg/mcp" ) // MCPBridgeTool exposes MCP servers to the LLM as a single tool with actions. diff --git a/pkg/tools/registry.go b/pkg/tools/registry.go index 2d5717256..667413b4b 100644 --- a/pkg/tools/registry.go +++ b/pkg/tools/registry.go @@ -6,8 +6,8 @@ import ( "sync" "time" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/KarakuriAgent/clawdroid/pkg/logger" + "github.com/KarakuriAgent/clawdroid/pkg/providers" ) type ToolRegistry struct { diff --git a/pkg/tools/skills.go b/pkg/tools/skills.go index 3d797c862..f6bf15b6f 100644 --- a/pkg/tools/skills.go +++ b/pkg/tools/skills.go @@ -5,7 +5,7 @@ import ( "fmt" "strings" - "github.com/sipeed/picoclaw/pkg/skills" + "github.com/KarakuriAgent/clawdroid/pkg/skills" ) type SkillTool struct { diff --git a/pkg/tools/skills_test.go b/pkg/tools/skills_test.go index 506b4b003..c4e15c373 100644 --- a/pkg/tools/skills_test.go +++ b/pkg/tools/skills_test.go @@ -6,7 +6,7 @@ import ( "path/filepath" "testing" - "github.com/sipeed/picoclaw/pkg/skills" + "github.com/KarakuriAgent/clawdroid/pkg/skills" ) func setupSkillFixture(t *testing.T) (string, *skills.SkillsLoader) { diff --git a/pkg/tools/subagent.go b/pkg/tools/subagent.go index efa1d33aa..effa87a34 100644 --- a/pkg/tools/subagent.go +++ b/pkg/tools/subagent.go @@ -6,8 +6,8 @@ import ( "sync" "time" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/KarakuriAgent/clawdroid/pkg/bus" + "github.com/KarakuriAgent/clawdroid/pkg/providers" ) type SubagentTask struct { diff --git a/pkg/tools/subagent_tool_test.go b/pkg/tools/subagent_tool_test.go index 8a7d22f24..45bcd44b4 100644 --- a/pkg/tools/subagent_tool_test.go +++ b/pkg/tools/subagent_tool_test.go @@ -5,8 +5,8 @@ import ( "strings" "testing" - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/providers" + "github.com/KarakuriAgent/clawdroid/pkg/bus" + "github.com/KarakuriAgent/clawdroid/pkg/providers" ) // MockLLMProvider is a test implementation of LLMProvider diff --git a/pkg/tools/toolloop.go b/pkg/tools/toolloop.go index 1302079b4..2f3838e67 100644 --- a/pkg/tools/toolloop.go +++ b/pkg/tools/toolloop.go @@ -1,8 +1,8 @@ -// PicoClaw - Ultra-lightweight personal AI agent +// ClawDroid - 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 ClawDroid contributors package tools @@ -11,9 +11,9 @@ import ( "encoding/json" "fmt" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/providers" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/KarakuriAgent/clawdroid/pkg/logger" + "github.com/KarakuriAgent/clawdroid/pkg/providers" + "github.com/KarakuriAgent/clawdroid/pkg/utils" ) // ToolLoopConfig configures the tool execution loop. diff --git a/pkg/utils/media.go b/pkg/utils/media.go index 0c77594b0..194ded38d 100644 --- a/pkg/utils/media.go +++ b/pkg/utils/media.go @@ -10,7 +10,7 @@ import ( "time" "github.com/google/uuid" - "github.com/sipeed/picoclaw/pkg/logger" + "github.com/KarakuriAgent/clawdroid/pkg/logger" ) const maxImageFileSize = 50 * 1024 * 1024 // 50MB @@ -120,7 +120,7 @@ func DownloadFile(url, filename string, opts DownloadOptions) string { opts.LoggerPrefix = "utils" } - mediaDir := filepath.Join(os.TempDir(), "picoclaw_media") + mediaDir := filepath.Join(os.TempDir(), "clawdroid_media") if err := os.MkdirAll(mediaDir, 0700); err != nil { logger.ErrorCF(opts.LoggerPrefix, "Failed to create media directory", map[string]interface{}{ "error": err.Error(), diff --git a/pkg/voice/transcriber.go b/pkg/voice/transcriber.go index 9af2ea6bb..f69a0000f 100644 --- a/pkg/voice/transcriber.go +++ b/pkg/voice/transcriber.go @@ -12,8 +12,8 @@ import ( "path/filepath" "time" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/utils" + "github.com/KarakuriAgent/clawdroid/pkg/logger" + "github.com/KarakuriAgent/clawdroid/pkg/utils" ) type GroqTranscriber struct { diff --git a/workspace/IDENTITY.md b/workspace/IDENTITY.md index d7a7550bc..dc875dd66 100644 --- a/workspace/IDENTITY.md +++ b/workspace/IDENTITY.md @@ -1,7 +1,7 @@ # Identity ## Name -PicoClaw +ClawDroid ## Description Ultra-lightweight personal AI assistant written in Go, inspired by nanobot. @@ -44,13 +44,13 @@ 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/KarakuriAgent/clawdroid ## Contact -Issues: https://github.com/sipeed/picoclaw/issues -Discussions: https://github.com/sipeed/picoclaw/discussions +Issues: https://github.com/KarakuriAgent/clawdroid/issues +Discussions: https://github.com/KarakuriAgent/clawdroid/discussions --- "Every bit helps, every bit matters." -- Picoclaw \ No newline at end of file +- Clawdroid \ No newline at end of file diff --git a/workspace/SOUL.md b/workspace/SOUL.md index 0be8834f5..f16826d51 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 clawdroid, 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..4ef688e56 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 clawdroid as root - Add user to `i2c` and `spi` groups - Create udev rules: `SUBSYSTEM=="i2c-dev", MODE="0666"`