一个用于 Jetpack Compose UI 设计、实现、重构、迁移和审查的 AI 技能。它把组件、布局、状态和项目集成规范,与源码复查、Android Lint / detekt 检查组织到同一套工作流程中。
例如,为现有页面增加一个编辑弹窗,需要考虑页面状态是否保留、草稿何时重置、提交事件是否连接业务操作,以及窗口和布局边界。这个技能会引导 Agent 检查这些关系,并在实现任务中默认执行静态检查、修复和重新验证。
这份 README 面向使用者,介绍技能的用途和使用方式。Agent 的执行入口是 SKILL.md;规范和操作细节在 references/ 中按需读取。
| 任务 | 主要内容 |
|---|---|
| 设计与规划 | 根据需求和已有项目确定组件边界、尺寸分配、状态归属、事件和宿主关系 |
| 实现与重构 | 连接真实输入、生产组件和业务操作,复用项目已有能力,并复查最终调用链 |
| View 向 Compose 迁移 | 检查原有行为、资源、状态和生命周期,在任务范围内替换实现并清理残留 |
| 源码审查 | 检查组件 API、布局关系、状态和事件链路;审查模式保留被评估源码 |
| 静态验证 | 使用原生 Android Lint 和 detekt,收集诊断、执行证据和覆盖范围 |
| 评分与比较 | 根据有效的静态证据,分别计算 Lint、detekt 分数 |
| Preview | 为重要页面和组件提供代表性样例;明确请求时进行渲染或导出 |
将整个 agent-compose-coder 目录放到所用 Agent 支持的技能发现目录中,保留其中的文档、脚本和规则资源。只复制 SKILL.md 会缺少引用内容和执行工具。
技能被发现后,可以使用 $agent-compose-coder 明确调用,并给出目标项目、生产入口、需求或设计参考,以及允许修改的范围。
实现需求:
使用 $agent-compose-coder,为个人资料页实现编辑昵称弹窗。
复用项目已有的输入框和按钮;关闭弹窗后保留页面滚动状态。
只做设计:
使用 $agent-compose-coder,分析这个 Compose 页面应如何划分组件和状态。
先给出设计建议,暂不修改代码。
只做静态验证:
使用 $agent-compose-coder,验证当前分支相对 origin/main 的 Compose 改动。
不要修改源码,报告 Lint 和 detekt 的诊断、证据路径及未覆盖部分。
请求评分:
使用 $agent-compose-coder,对这份实现进行静态验证和评分。
分别给出 Lint、detekt 分数,以及证据不足而无法评分的部分。
实现、重构和迁移任务默认包含以下流程;明确的任务范围限制优先。
理解需求与项目契约
→ 选择相关 spec
→ 实现生产路径
→ 复查源码和调用链
→ Lint / detekt 静态验证
→ 修复范围内的有效问题
→ 重新验证最终源码
源码复查关注参数是否真正消费、事件是否到达操作所有者、状态转换是否完整,以及布局和宿主约束是否匹配。静态检查负责识别所选规则能够检测的问题,两者覆盖的内容不同。
以下能力有单独的执行条件:
| 能力 | 执行条件 |
|---|---|
| Lint / detekt 验证与修复 | 实现任务默认包含;缺少真实分析输入时报告未完成 |
| 数值评分或候选比较 | 请求评分或比较时执行,普通实现任务不会自动计算分数 |
| Preview 样例代码 | 项目支持、页面或组件有代表性且任务未排除时提供或更新 |
| Preview 渲染、导出 | 明确请求时执行;样例声明不等于成功渲染 |
| 编译与运行验收 | 按目标项目和任务要求执行;静态扫描本身不会编译应用 |
| 设备操作 | 实现请求本身不包含设备操作授权 |
技能文档约定这些行为,脚本负责具体检测和证据校验。仓库没有一个自动调度器强制 Agent 完成全部步骤,因此交付时仍需查看实际执行结果和未完成项。
内置规范覆盖七个方面:
- 组件:职责、参数、Modifier、共享样式、事件和最终消费者。
- 布局:流式、重叠和锚定关系,父子尺寸归属、剩余空间和溢出策略。
- 状态:权威来源、草稿、派生值、写权限、异步操作和 Effect 生命周期。
- 集成:项目惯例、生产组件复用、窗口和 View / SDK 生命周期、迁移清理。
- 图片:真实加载 API,以及头像、背景、内容、动作和装饰的不同职责。
- 性能:工作执行位置、观察范围、缓存失效、列表身份和注解承诺。
- Preview:调用生产组件、确定性输入和有意义的状态及尺寸覆盖。
这些规范包含仓库维护的工程约定,以及部分明确引用的 Compose 官方文档。当前尚未建立完整的逐条来源记录,不能把所有条款视作官方要求,也不能用存在相似检测规则证明其原始出处。规范索引见 spec。
目标项目的固定接口、兼容性要求和真实能力会影响规范的适用方式。检测器与合法项目设计冲突时,需要保留原始诊断并提供具体证据。
| 工具或规则包 | 当前版本与范围 |
|---|---|
| Android Lint | 独立运行库 32.4.0,CLI 显示版本 9.4.0 |
| Slack Compose Lint | 1.6.1;维护 24 个 issue ID 的映射,包含默认关闭项和信息建议 |
| AndroidX 官方 Compose Lint | 随目标项目实际解析的依赖和可用 registry 变化 |
| detekt | 2.0.0-alpha.6,选用 8 条原生规则 |
| maintained Compose Rules | 0.6.8,启用 38 条 |
| 自定义 Composer Rules | 1.4.1,启用 19 条 |
detekt 固定配置共启用 65 条规则,其中包含信息建议。启用规则、实际执行规则和没有发现问题是不同状态;有效覆盖需要执行证据。
增量检查分析声明的编译上下文,再将定位起始行在 Git 新增或修改行内的诊断纳入增量门禁,同时保留历史行、无法定位和执行错误等结果。
评分分别输出 Lint 和 detekt 的 100 分制分数:max(0, 100 − 违规规则扣分之和)。建议扣 1 分、警告扣 2 分、错误扣 3 分;同一规则多处违规只扣一次。实现验证与评分共用内置规则策略:Lint 开启完整原生注册规则(包括默认关闭规则),detekt 使用内置配置全部启用规则,项目不能自行更改开关或严重性。警告和错误必须修复;建议由 AI 结合代码决定,保留时说明理由,仍扣 1 分。规则清单、配置或执行证据不一致时不发布受影响分数。分别展示扣分、违规规则数、诊断数及严重性,不计算跨工具总分;静态分数不代表 UI 或业务验收。
静态检查通过不能证明业务正确、视觉还原、运行性能或设备行为已通过验收。
静态工具的安装支持 macOS / Linux,需要 Python 3.9+ 和 JDK 17+。首次未缓存安装需要访问 Google Maven 和 Maven Central。
扫描需要目标模块和 variant 的真实源码、完整依赖 classpath、编译设置,以及适用的 Android SDK、资源、Manifest 和生成声明。工具不会猜测依赖,也不会退化成语法扫描后声称完成完整分析。
分析器通过独立 CLI 执行,安装和扫描不应用 AGP / detekt Gradle 插件,也不修改目标项目的构建检查。项目本身需要的编译仍遵循其原有流程。
仓库提供分析器安装脚本,以及可选的 compose-quality 增量验证和评分命令。需要柱状对比图时,可用 compose-quality chart 按指标分组导出 PNG / SVG,具体方案名和顺序可配置,详见图表说明。安装位置、参数、输入格式和证据说明见 CLI.md。
agent-compose-coder/
├── README.md 使用者介绍
├── SKILL.md 唯一技能入口
├── agents/openai.yaml 技能展示信息
├── references/
│ ├── spec.md、spec/ 设计与实现规范
│ ├── realization.md 实现与调用链复查
│ ├── verification-loop.md 修复和重新验证
│ ├── verify.md、verify/ 验证流程、规则映射与证据要求
│ └── score.md、score/ 评分流程、策略与示例数据
├── scripts/
│ ├── compose_quality.py CLI 入口
│ ├── verify/ 分析器适配、规则资源及安装打包工具
│ └── score/ 评分和比较工具
├── install-analyzers.sh
├── install-cli.sh
└── CLI.md 静态工具使用说明
spec、verify 和 score 是同一技能内按需引用的内容,不需要分别安装。