# Antcode -APP **Repository Path**: lizhanglan/antcode--app ## Basic Information - **Project Name**: Antcode -APP - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-14 - **Last Updated**: 2026-07-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Antcode Android Client Antcode 沙箱平台的 Android 原生客户端。通过 antcode 服务器管理 AI 编程沙箱容器,连接沙箱内运行的 OpenCode agent 进行对话、查看代码改动、管理 Skills。 ## 功能 - **Sandbox 容器**:在 antcode 工作区下创建 / 启动 / 暂停 / 恢复 / 删除 AI 编程沙箱,自动轮询容器状态(`creating` → `running`),选中当前激活沙箱 - **Chat**:与沙箱内 OpenCode agent 对话,支持切换模型、查看工具调用与 Patch diff、Markdown 渲染、Todo 列表、权限请求确认、问题回复 - **Files**:沙箱内文件树浏览、git 状态标记、代码与 Markdown 预览 - **Skills**:管理沙箱可用的 Skills —— 查看 marketplace 技能列表、启用 / 停用、编辑、删除、导入 `.zip` 包或 `SKILL.md` 单文件 - **Settings**: - Antcode 登录(服务器 URL + Email + 密码,登录后写入加密存储的 Bearer token) - 工作区选择 - 主题(浅色 / 深色 / 跟随系统) - 语言(English / 中文 / 跟随系统) ## 运行环境 - Android 8.0+(API 26) - 运行中的 [antcode](https://gitee.com/lizhanglan/antcode) 服务器 - JDK 17+(推荐 Amazon Corretto 21 或 Android Studio 自带 JBR) ## 构建 ```bash export JAVA_HOME="" # 例:G:/lizhanglan/amazon-corretto export ANDROID_HOME="" # 例:G:/lizhanglan/android-sdk # Debug APK ./gradlew :app:assembleDebug # → app/build/outputs/apk/debug/app-debug.apk # 单元测试 ./gradlew :app:testDebugUnitTest # 测试覆盖率(Kover) ./gradlew :app:koverHtmlReport # → app/build/reports/kover/html/index.html ``` ## 配置 1. 打开 App → Settings → "Antcode 登录" 2. 填入 antcode 服务器地址(如 `http://192.168.x.x:180`)+ Email + 密码 3. 点击"登录",成功后自动写入加密存储的 Bearer token,App 进入 ANTCODE 模式 4. 在"工作区"下拉选择一个 workspace 5. 在"容器"区域点击 `+` 创建一个 sandbox;等待状态从 `creating` 跳到 `running`(App 自动轮询) 6. 切到 Chat / Files 标签即可使用 ## 项目结构 ``` app/src/main/java/com/yage/opencode_client/ ├── data/ │ ├── antcode/ # antcode 后端 API(Retrofit interface、Skill / Sandbox 数据模型) │ ├── opencode/ # OpenCode agent API(SSE / REST) │ └── repository/ # 仓库层 ├── di/ # Hilt 模块 ├── ui/ │ ├── chat/ # Chat 页面(输入栏、消息渲染、工具卡片) │ ├── files/ # Files 页面 │ ├── sandbox/ # 容器管理(SandboxListViewModel + 状态轮询) │ ├── session/ # Session 列表 │ ├── settings/ # Settings 页面 + 各 Section composable │ ├── skills/ # Skills 管理(SkillsViewModel + SkillsSection + SkillEditSheet) │ └── theme/ # 颜色 / 字体 / 排版 ├── util/ # SettingsManager、状态映射等 └── MainActivity.kt # 入口 + Navigation Compose 路由 ``` ## 技术栈 - Kotlin 2.2 + Jetpack Compose + Material 3 - Hilt(依赖注入) - ViewModel + StateFlow + Coroutines - Retrofit 2 + OkHttp + kotlinx.serialization(JSON over HTTP) - `kotlinx-coroutines-test` + mockK(单元测试) - Kover(覆盖率) - Navigation Compose - DataStore + EncryptedSharedPreferences(token / 设置持久化) ## 测试约定 - 每个 ViewModel 配一个 `*ViewModelTest`(`runTest` + `TestCoroutineScheduler`),mockK 替 API / 设置层 - I18nParityTest 强制 `values/strings.xml` 与 `values-zh/strings.xml` 同 key 集合 - AntcodeApiTest 用 MockWebServer 跑 Retrofit 反序列化(包含 wire-shape 的回归测试,例如 `setSkillEnabled` 接受 `{"skill": ..., "synced": ...}` 包装响应) ## 贡献 详见 [`AGENTS.md`](AGENTS.md): - 不要在真机上跑 `connectedDebugAndroidTest` 或装 debug APK,除非明确要求 - 不要 push 远程,除非明确要求;本地分支足够 - 用 `superpowers:systematic-debugging` 4 阶段流程排查 bug - 用 TDD:先写失败测试,再修实现,再验证不破坏其他测试 ## License 仅供个人 / 内部使用。