跳到主要内容

AI 接入

ViewCompose 把机器可读 API Reference、15 个本地 MCP 工具和 8 个 Agent Skill 作为一个 由不可变 GitHub Release 支持的精确版本 npm Package 发布。开发者只需一条命令,就能让 Codex、 Claude Code 或 Cursor 接入全新或已有 Android Project。即使要执行 Kotlin 编译和生成页面的 Preview 证据,也不要求全局安装、ViewCompose Checkout、本地构建 Package、Provider Key 或 手动编辑 MCP 配置。

Coding Client 仍然负责模型、Credential、对话和用户授权的源码修改。ViewCompose 只提供确定性的 框架事实、生成工具与明确的验证证据,既不内置也不连接模型 Provider。

安装前:先检查必需命令​

一行安装命令由 npx 启动;完整的 Node.js 安装会同时提供 npm 与 npx。 仅有可用的 node 命令还不够:某些 IDE 或 Agent 内置 Runtime 只携带 Node Executable,却没有 Package Manager 命令。

打开一个新 Terminal,依次执行三项检查:

node --version
npm --version
npx --version

只有当三条命令全部成功,且 Node 版本为 v24.19.0 或更高时才继续。如果 node、npm 或 npx 缺失:

  1. 从官方 Node.js 下载页 安装完整的 Node.js 24.19.0 或更高版本。Windows 与 macOS 可使用自带 npm 的官方 Installer;Linux 请遵循官方安装说明,或使用用户级 Version Manager。
  2. 关闭并重新打开 Terminal,让 PATH 刷新,然后重新执行上述三项检查。
  3. 如果 node 可用但 npm 或 npx 不可用,请用完整安装替换不完整或应用内置的 Node Runtime。不要让 ViewCompose 指向临时解压的 Node 目录,因为生成的 MCP 配置必须保留一条在 Cache 清理和重启后仍然存在的 Node 路径。

不要为下面的 ViewCompose 命令使用 sudo,也不要全局安装 @viewcompose/ai-tooling。精确的 npx 命令会自行管理已验证的 Project-bound Cache。

一条命令完成安装​

Release 0.7.0 已经公开。请使用它的精确 Selector,确保安装的工具、Skill、Knowledge Pack 与框架 Profile 始终属于同一个已验证版本;不要改用浮动 Selector。

在 Android Project 的物理根目录执行以下任意一条命令:

npx --yes @viewcompose/ai-tooling@0.7.0 init --client codex
npx --yes @viewcompose/ai-tooling@0.7.0 init --client claude-code
npx --yes @viewcompose/ai-tooling@0.7.0 init --client cursor

init 会解析当前物理目录,在任何写入前检测精确 ViewCompose Dependency Vector,把已验证 Package 物化到 Content-addressed 用户 Cache,并让 MCP 只指向该持久副本而不是 npm 的临时 npx 目录;随后 执行与 doctor 相同的 Readiness 检查。它会保留无关设置,对精确内容重复执行时保持幂等;遇到无效 JSON、相对或符号链接路径、不兼容框架版本,以及配置或 Skill 冲突时,不会留下部分接入状态。自动化 仍可显式传入 --project-root <physical-absolute-path>。

客户端Project MCP 配置Skill 根目录
Codex.codex/config.toml.agents/skills
Claude Code.mcp.json.claude/skills
Cursor.cursor/mcp.json.agents/skills

安装后运行 git status。生成的 MCP 配置会绑定 Project 的物理绝对路径,因此属于本机配置; 如果团队没有明确约定,不要提交该文件,也不要覆盖共享的 Client 配置。根据项目策略,可把 Client 配置路径加入本机或 Repository Ignore Rule。规范 Skill 副本不含本机路径;只有当团队明确 希望所有 Clone 都使用同一组冻结 Workflow 时才提交它们。请分别 Review 这两类文件,不要一次性 提交所有生成文件。

API 查询、生成、静态验证和 Project 分析只要求 Node.js 24.19.0 或更高版本。若要取得编译、 渲染和比对证据,还需要 JDK 17 或 21,以及 Android SDK Platform 36。Release 已携带 Gradle 9.3.1 Wrapper 与固定 Build Harness,用户无需安装 Gradle,也无需让现有 Project 的 AGP/Kotlin 版本与工具链对齐。Bootstrap 只写入 Project 接入面与操作系统用户 Cache;不要为此使用 sudo。

请明确检查 Java 前置条件;版本越新不代表一定兼容:

java -version

第一段版本号必须是 17 或 21。JDK 25 不在当前 AI Compiler Lane 内。Windows 或 macOS 用户可从可信 Vendor 安装 JDK 21 Package,然后重新打开 Terminal。Linux 用户可参考下面的用户级 安装示例;它使用官方 Amazon Corretto 21 固定下载与 SHA-256 链接, 不会修改系统 Java:

mkdir -p "$HOME/Downloads/viewcompose-jdk" "$HOME/.jdks/corretto-21"
curl -fL -o "$HOME/Downloads/viewcompose-jdk/corretto-21.tar.gz" \
https://corretto.aws/downloads/latest/amazon-corretto-21-x64-linux-jdk.tar.gz
curl -fL -o "$HOME/Downloads/viewcompose-jdk/corretto-21.sha256" \
https://corretto.aws/downloads/latest_sha256/amazon-corretto-21-x64-linux-jdk.tar.gz
cd "$HOME/Downloads/viewcompose-jdk"
printf '%s %s\n' "$(cat corretto-21.sha256)" corretto-21.tar.gz | sha256sum --check --strict
tar -xzf corretto-21.tar.gz -C "$HOME/.jdks/corretto-21" --strip-components=1
export JAVA_HOME="$HOME/.jdks/corretto-21"
export PATH="$JAVA_HOME/bin:$PATH"
java -version

如果 Checksum 命令没有输出 OK,请立即停止。export 只影响当前 Terminal;只有最后一条 java -version 确认是 JDK 21 后,才应把它们加入 Shell Profile。Android Studio 还有独立的 Gradle JDK 设置;Project Build 也要使用该版本时,请选择同一个持久目录。上述下载 URL 仅适合 Linux x64;ARM 设备应从官方表格选择匹配的 Architecture,不要直接照用。

现有 Android Application 还有一套独立的 Java/Gradle 兼容要求。第一次构建基线前,请在 Application 根目录运行:

java -version
./gradlew --version

Android Studio 配置的 Gradle JDK 可能与 Terminal JDK 不同;随 Android Studio 更新的 JBR 也可能新到旧版 Gradle Wrapper 无法加载。如果构建报告 Unsupported class file major version, 请改用该 Project 文档指定或其 Gradle/AGP 版本支持的 JDK,再重新运行以上两条命令。例如,兼容 JDK 位于 /path/to/jdk-17 时,Terminal Session 可执行 export JAVA_HOME=/path/to/jdk-17;在 Android Studio 中构建时,也要在 Gradle 设置中选择同一个 JDK。不要一开始就通过升级旧 Application 的 Gradle、AGP 或 Source Code 来掩盖环境不匹配。

0.7.0 的精确框架版本绑定​

init 不会执行 Project Gradle Logic,而是读取 Project 中独立版本化的 com.viewcompose Coordinate。它接受精确 Literal、默认 libs.versions.toml 中实际使用的 Entry,以及 Dependency Lock Record;只选择 Artifact-version Profile 与所有已检测 Dependency 匹配的 Released Knowledge Pack;并在安装 Skill 前把 Content-addressed Profile ID 写入 MCP Environment。后续检索、验证、 编译与 Generated Preview 都加载同一 Bundle。

不含 ViewCompose Dependency 的 Project 属于新项目,会选择该 Release 最新稳定 Profile。Dynamic、 互相冲突、不支持或其他无法解析的版本——包括存在 ViewCompose Import 却没有 Dependency Identity—— 都会在任何 Project 写入前失败。工具不会静默修改框架 Dependency。0.7.0 Profile 表示当前 已发布 Artifact Vector;旧版本 Vector 只有在某个 Release 明确携带匹配 Profile 后才会升级。

确认安装状态​

init 已经返回 Readiness 结果。以后需要重复诊断时,在 Project 根目录使用相同精确 Package 版本与客户端选项:

npx --yes @viewcompose/ai-tooling@0.7.0 doctor --client <codex|claude-code|cursor>

project-bound-ready 表示 MCP Entry 与全部 Skill 都和已安装 Release 一致,物理 Project 根目录 已绑定,已满足深层证据所需的 JDK/Android SDK 前提;如果选择的是 Codex,还表示 Codex 已将 这个精确 Project 根目录标记为可信。只信任它的上级目录并不够。报告会分别列出 knowledgeAndGeneration、compilationPreviewAndLayout 和 Host 前提,因此不会把不可用的证据 Lane 误报为成功。Package 只诊断 Codex Trust,不会替用户授予 Trust,也不会编辑用户的全局 Codex 配置。

继续完成客户端侧连接检查:

  • **Codex CLI:**先在 Codex 中打开精确的 Android Project,并在出现提示时批准 Project Trust。 然后在同一个物理 Project 根目录运行 codex mcp list,再检查 /mcp 与 /skills;首次调用 使用 $viewcompose-api-reference。
  • **Codex Desktop:**把精确的 Android Project 添加或打开为 Codex Project,并在出现提示时批准 Trust。在该 Project 根目录执行 init,然后从同一个 Project 创建新 Task。绑定到其他 Project 的 Task 不会加载目标 Project 的 .codex/config.toml,已经运行中的 Task 也不能证明新写入的配置 已被发现。检查应用内的 MCP 与 Skill 界面,确认存在 viewcompose,再首次调用 $viewcompose-api-reference。如果缺失,先确认 Task 所属 Project,再重新执行 doctor;直接启动 MCP Server 只能证明 Server 健康,不能证明 Desktop 已发现它。独立的 codex Shell 命令可以 缺失,选择 Codex Desktop 时不要求安装该命令。官方资料: MCP与 Agent Skills。
  • **Claude Code:**如有提示,批准 Project .mcp.json,运行 claude mcp list 与 claude mcp get viewcompose,再检查 /mcp;首次调用使用 /viewcompose-api-reference。官方资料:MCP与 Skills。
  • **Cursor:**打开 Cursor Settings > Tools & MCP,确认 viewcompose,检查 Agent > Available Tools,再首次调用 /viewcompose-api-reference。官方资料: MCP与 Skills。

CI 会在全新 Linux、macOS 和 Windows Project 上验证真实 Package Bootstrap,覆盖带空格和非 ASCII 字符的路径、3 个客户端、集成诊断、幂等重复执行、清理 npx Cache 后的持久 MCP 启动、精确 Skill 字节、MCP 握手和卸载。它不会自动控制或登录专有客户端 Binary,因此上述检查仍是明确的用户步骤。 未发布的 0.8.0 Candidate 会在写入 Project 配置前,把 MCP Command 解析为临时目录和 npm 短期 npx Cache 之外的规范 Executable。如果只有临时或已缺失的 Node Runtime,init 会在写入 Project 前停止,doctor 会返回可执行的修复说明,不再保存会随 Launcher Cache 消失的路径。 临时目录的别名与物理路径都会被检查。尤其在 macOS 上,把可执行文件从 /var 解析到 /private/var 后,它仍被识别为临时运行时。2026-09-08 的 macOS/Node 24.19 回归运行通过 全部 18 项客户端集成测试;修复前已有的 doctor 用例失败,新增别名用例覆盖两种可执行路径。 结论为临时运行时识别能力 improved,不代表性能提升;Windows 主机执行仍由平台矩阵验证。 MCP 的 serverInfo.version 现在也与打包后的 0.8.0 工具身份一致。

无需 ViewCompose 源码即可使用的能力​

安装后的 Project-bound Mode 支持:

  • 精确 API、Component、Sample 与排序后的 Capability 检索;
  • Kotlin 静态验证与基于已发布 Artifact 的编译验证,以及有界、只读的 Android Project 分析;
  • 从粘贴的 XML 或显式限定的 Project Resource 生成 ViewCompose;
  • 对 XML 生成页面执行编译、Preview 渲染、语义/几何比对与结构化布局诊断;
  • Screenshot 预处理、Inference 验证与类型化 Resolution,以及 ViewCompose Kotlin 生成;
  • 对 Screenshot 生成页面执行编译、Preview 渲染、语义比对,以及符合条件时的精确 Pixel 比对;
  • 离线 Figma Export 检查、确定性 ViewCompose Kotlin 与可再分发 PNG 生成、编译、Preview 渲染,以及有界的结构、语义、几何和 Asset 比较;
  • 为一个精确 Generated Kotlin Literal 准备人工授权 Screenshot 修复,并由独立 Terminal-only Host 执行 Apply、Recovery 与 Rollback;
  • API 查询、页面创建、XML 转换、Figma Import、Screenshot Repair、Review、验证和布局调试共 8 个 Workflow;每个 Workflow 只保留实际取得的证据等级。

对于已有 Screen,未发布 0.8.0 Candidate 中的 create-screen、convert-xml 与 review Skill 还会要求下文同一套 Variant、配对 APK、Device State、Fixture Identity、动态流程、无广告、真实广告 以及 Crash/ANR Evidence。输入缺失或变化时必须明确标记为未验证,不能从编译或单张 Screenshot 推断。

证据等级依次为 knowledge、static、compiled、rendered 和 compared。静态结果不证明 编译通过,生成 Kotlin 也不证明页面已渲染或达到视觉一致。

未发布的 0.8.0 Source Candidate 在 Knowledge Pack 中新增精确的 Public Import Catalog。 Component Record 会把 Signature 中所有可解析的 ViewCompose Support Type 链接到限定名和所属 Artifact;get_api_reference 因此可以按精确名称或无歧义的 Simple Name 查询 Support Type,并返回 关联的 Capability 与 Compiled Sample。静态验证会拒绝不在同一 Catalog 中的每个精确 com.viewcompose Import。这样既能发现猜错 Package,也能发现把 Modifier.weight 这类 Receiver Member 当作 Top-level Function 导入的问题,同时继续严格区分 Static 与 Compiled Evidence。

XML Conversion 采用 Fail-closed 策略。已发布的 0.7.0 Converter 可能会把常见 Android XML, 例如带 ID 或 Constraint 的 <include>、Style、仅 Preview 使用的 tools: Attribute、Gravity、 Margin 和 Text Color 报告为 Unsupported,而不是进行近似转换。未发布的 0.8.0 现场验证后 Source Candidate 已经支持普通 Included Root 上的限定名 Override、忽略 tools: Preview Fact, 并转换非负 dp Margin 与可精确映射的 LinearLayout Cross-axis Gravity;在受保护的 Release 发布并 完成独立复现前,这还不属于 Installed Package Capability。Style、Text Color、ConstraintLayout Relation、Merge Root 的 Include Override,以及含糊的 Gravity 或 Margin 组合仍然 Fail-closed。缩小所选 Subtree 前,必须 检查完整 Unsupported List。不要为了得到 Generated Kotlin 而静默删除这些 Attribute;应手动保留 它们,或让受影响 Surface 继续使用 Android View,直到其行为与视觉 Contract 得到验证。

修改现有 Activity 或 Fragment 前,先把迁移意图声明为 capability-probe、subtree 或 whole-screen。Subtree 必须命名所属 Container 与保留的 Native Sibling。Whole-screen 必须覆盖 Root、Chrome、Scrolling、Overlay、Advertising 或其他 Native SDK Boundary、State、Navigation、 Animation 与 Included Layout;遇到 Unsupported Conversion 时必须停止,或显式重新协商范围,不能 静默缩小。Inventory 还必须包含在 Screen Host 安装 Content 前查询或修改 Root 的 Application-level Activity Lifecycle Callback。交付时提供 Coverage Ledger,分别列出 Migrated、Native-boundary、Retained、Blocked 与 Unverified 的区域和行为。仍隐藏保留完整 Legacy 页面时,不能证明 Whole-screen 已完成。

状态 Ownership 也必须在该声明中完成选型。UI-local 临时状态使用 ViewCompose remember 与 mutableStateOf。标准 Android setUiContent Host 下已有 ViewModel 所拥有的业务状态,应通过 ViewCompose viewModel() 解析,并使用 collectAsStateWithLifecycle() 观察;不要把结果复制进第二个 可写 State Holder。只有显式 Embedded Subtree 或已证明的 Owner Constraint,才可以继续由 Activity 或 Fragment 外部收集并手动调用 RenderSession.render(),且理由必须记录在 Coverage Ledger 中。

如果通过底层 renderInto API 把 ViewCompose 嵌入现有 Android View Hierarchy,请用 AndroidResourceEnvironment(context = container.context) 在 Render Tree 外安装能感知 Configuration 变化的 Android UI Environment,并由所属 Lifecycle 释放返回的 Render Session。 处理由调用方拥有的动态 State 时,修改代码前先盘点初始值、更新频率、Throttle、完成状态与错误 行为。保留一个 Session,保存最新的不可变 Snapshot,并在每次接受新状态后从 Android 主线程调用 RenderSession.render();不要为每次 Emission 创建 Session。Native Sibling、Animation、 Advertising、Navigation、Analytics 与其他 Side Effect 应继续由所选 Container 之外的原 Owner 管理,并在 Dispose 前停止更新。验证必须覆盖初始状态、至少一个后续状态以及完成或 Navigation 行为。固定的 UiEnvironment(AndroidEnvironmentBridge.fromContext(container.context)) Snapshot 虽能 建立初始 Density,却不会跟随后续 Configuration 变化。底层 Host 不会自行从 Container 推断 Android Density、Font Scale、Locale 或其他 Environment Value。适合整页时优先使用标准 Android Content Host。仅编译无法发现 Environment 缺失:在高 Density Device 上,通过编译的 Tree 仍可能 以错误的物理尺寸渲染。

修改现有应用前​

project-bound-ready 描述的是 ViewCompose 工具链 Lane,并不表示 Consumer Application 可以构建、Emulator 已就绪,或原有用户流程已经通过。接受任何迁移修改前,先建立改造前基线:

  1. 记录 Source Commit、精确 Application Variant、Device 或 AVD 名称、API Level、屏幕尺寸与 Density、Locale、Light/Dark Theme、Font Scale、Permission、App Data State 和确定性的 Media Fixture。迁移后的 Candidate 必须使用完全相同的取值。删除一次性 Device User 或 Fixture Directory 前,应保留精确的非个人 Fixture Byte,或保留带版本的确定性 Generator,并同时保存 SHA-256 Manifest。Screenshot 或“Hash 曾经一致”的描述无法重新生成 Comparison Input。
  2. 运行 ./gradlew :app:tasks --all,选择完整且包含 Variant 的 Assemble、Unit-test、 Android-test Assembly 与 Connected-test Task。不要猜测缩写 Task Name;带多个 Flavor Dimension 的 Project 可能让缩写产生歧义。
  3. 等待 Device 前,先构建 Application、运行 JVM Test,并组装 Android-test APK。如果改过 Production Test Seam 或 Instrumentation Runner,请把 Application APK 与 Android-test APK 作为一组匹配产物重新构建并安装;只运行 Android-test Assembly Task 可能让磁盘上仍保留旧的 Application APK。修复或明确分类原本就存在的 Test-harness Failure;它们不是迁移 Regression, 也不能作为通过的 Baseline Evidence。
  4. 在 Android Studio 中打开 Tools > Device Manager,启动已有 AVD,或连接测试 Device。 adb devices 必须显示 device,不能是 offline; adb shell getprop sys.boot_completed 必须返回 1。Linux 用户还应运行 SDK Emulator 的 -accel-check;如果缺少 /dev/kvm,请在管理员协助下启用 CPU Virtualization,并按所用 Distribution 安装或加载 KVM 支持,然后重启 AVD。永远没有完成启动的软件模拟实例不能作为 Test Evidence。使用真机时,请保持屏幕解锁并确认 USB 安装提示;部分 OEM 系统还要求在 Developer Option 中显式开启 USB 安装。如果结果是 INSTALL_FAILED_USER_RESTRICTED,且 启动了 0 个测试,它属于 Device Policy/Setup Failure,不是 Application Test Result;不要为 绕过它而关闭无关的系统安全检查。如果 Linux 在连接或切换 Device User 后报告 no permissions,请安装所用 Distribution 的 Android udev Rule,确认当前用户属于所需的 Device-access Group,重新插拔线缆并重启 ADB Server。修改单个 /dev/bus/usb Node 的 Mode 只能用于临时诊断,因为重新连接可能创建另一个 Node。 某些 OEM 系统即使已经安装两个 APK,也会在 Instrumentation Package 第一次启动 Target Application 时再次弹出授权对话框。只应在专用测试 Device 上确认屏幕明确显示的 Test/Target Package Pair。如果 OEM Security Application 仍位于前台,应把该次运行归类为 Setup,且 Application Assertion 数为 0;完成授权后重跑完全相同的 Test,不要把被拦截的尝试报告成 Application Failure。 adb install -g 成功只代表安装结果。测试受 Permission 保护的 Action 前,请通过 Platform Package/Permission State 验证 Application 所需的 Runtime 或 Special Permission;也可以走完 Application 的正常 Permission Screen,并确认返回后的 Destination。如果该 Action 正确打开 Permission Continuation,应把缺少授权归类为 Device Setup,而不是 Navigation Regression。 只有在明确获准的专用测试 Device 上才能使用 Root-assisted Grant;重跑前还必须验证精确的 Device User 与最终 Permission State。
  5. 在已完成启动的 Device 上运行精确 Connected-test Task,并走查 Project 的关键用户流程。 为启动、Navigation/Back Stack、Permission 申请与返回、Loading/Empty/Error State、Selection 与 Count 一致性,以及范围内每个删除或恢复操作保存稳定 Checkpoint Screenshot 与 Semantic Assertion。如果使用一次性 Android User 隔离 Media,请记录 adb shell am get-current-user,并在启动前验证 Fixture 明确位于 /storage/emulated/<user-id>/...。不要假设 ADB Shell 的 /sdcard Alias 会随前台 User 切换;授予存储权限前还要确认 User 0 中不存在该 Fixture。 如果 Advertisement 或其他 Remote Surface 遮挡人工视觉检查,只能使用 Project 已有的 Test Seam 或 Debug Configuration。记录该排除项,重新构建精确 Candidate,并让所有临时 Source Toggle 保持未提交、与 Migration Diff 分离。No-ad Run 验证的是确定性 Application UI,不能 代表包含真实广告的首次使用。
  6. 每完成一个有界迁移 Slice,就在相同 Device State 上重跑同一脚本。任何无法解释的视觉差异、 Destination 或 Back Stack 变化、Crash 或 ANR、Count Drift、Permission Continuation 丢失, 或已有 Assertion 失败,都会阻断该 Slice。

Generated Preview Comparison 对迁移后的 ViewCompose Surface 仍然有用,但不能替代应用级 Device 验证。Release 0.7.0 不会操作任意 Consumer Emulator,也不会认证现有 Application Flow;所选 Coding Agent 与 Project Test Harness 必须如实收集并报告这些证据。

人工授权 Screenshot 修复​

Release 0.7.0 新增 prepare_screenshot_repair、 viewcompose-repair-screenshot Skill 与独立的 viewcompose-repair Executable。Agent 通过 MCP 复现 Baseline/Current 的六道 Gate 证据、导出一个严格改善的 Rollback Proposal,并存储一份 内容寻址的惰性 Request;MCP 不写 Project 源码。

首个公开 Edit 子集只修改一个 Generated Kotlin Literal text 或 hint Property。Whole-file Replacement、Raw Patch、Import、Declaration、Callback、任意源码、多文件,以及 Profile、Root、 Symlink、Hard Link、Preimage、Span、Candidate 或 Diff Drift 都会 Fail closed。准备 Request 前, Proposal Candidate 必须通过 Safety、Compilation、Preview、Semantic、Structure 与符合条件的 Exact-pixel Gate。

让 Agent 使用 $viewcompose-repair-screenshot。它会返回 Request Fingerprint 与 Review 命令:

viewcompose-repair show <request-fingerprint> --pretty

检查完整 Diff 与证据后,在同一物理 Project 根目录执行:

viewcompose-repair apply <request-fingerprint> --pretty

命令要求用户在 Controlling Terminal 输入屏幕显示的精确 Suffix。不存在 --yes、stdin、 Environment Variable、Token、Reusable Grant 或 MCP 确认路径。Recovery Byte 与 Hash-chained Journal 位于 Project 外、只有 Owner 可读写的操作系统 User-state 目录。Host 使用 No-follow、 Beneath-root、Directory-handle Relative 的 Atomic Replace,持久同步并重新读取已提交 Byte,随后 针对该 Byte 重跑五类 Post-apply Evidence。

如果 Process 中断,执行 viewcompose-repair recover <request-fingerprint> --pretty。Recovery 不会猜测或静默回滚:只会报告未变化的 Preimage、协调精确 Candidate,或在 Conflict 时停止。 Post-apply Validation 失败后 Candidate 会保留,避免覆盖随后发生的用户 Edit。只有用户再次确认 viewcompose-repair rollback <request-fingerprint> --pretty,才允许恢复 Recovery Copy;若当前 文件已不再精确等于 Candidate,Rollback 会拒绝执行。

当前人工授权 Host 需要 POSIX Controlling Terminal、JDK 17 或 21,以及能够证明安全 Directory-handle Relative Atomic Replace 与持久目录同步语义的 File System。不支持的 Host 会在 源码写入前失败。该能力不会 Commit、Push、创建 Pull Request、修复任意 Kotlin,也不能防御已经 控制用户 OS Account 与 Terminal 的攻击者。

离线 Figma 转 ViewCompose​

Release 0.6.0 新增公开工具 convert_figma_to_viewcompose 和 Skill viewcompose-import-figma。工具只接收调用方提供的一份自包含 viewcompose-figma-export/1 JSON 文档。ViewCompose 不登录 Figma、不接收 Access Token、 不抓取 URL、不执行 Plugin Data,也不联系模型或 Provider。首个 Release 有意不包含 Figma Plugin、Figma REST Client 或 .fig Parser:需要生成这种标准化 Export 的组织,应使用经过 单独 Review 的离线 Adapter,再把得到的 JSON 提供给 Agent。

Figma 官方 Design Context 流程​

未发布的 0.8.0 Candidate 为已打包的 viewcompose-import-figma Skill 新增一条人工介入分支, 供只有 Figma Link、没有 viewcompose-figma-export/1 文档的用户使用。Coding Client 可以调用 已经获得授权的 Figma 官方 Design Context 能力,但该调用、登录和临时下载都位于 ViewCompose 之外。返回内容是 Reference Code、Pixel 与 Asset,并不是确定性 Converter 所要求的完整结构化 Design Tree。

对于这种输入,请向 Agent 提出:

使用 $viewcompose-import-figma 的官方 Design Context 路径。在临时 Link 失效前,把精确的 已选 Node Screenshot 和所有引用 Asset 冻结到本机,保留 Hash 与 License Decision;使用 Screenshot Evidence Tool 进行有人工介入的 ViewCompose 适配,并验证真实 Project Build 与 Device Flow,不要声称 Direct Conversion 或 Visual Parity。

Agent 必须遵守以下边界:

  1. 添加 Dependency 前先选择 Version Lane。普通 Consumer 试验应使用每个独立版本化 ViewCompose Artifact 的最新精确兼容发布版本。若试验目标是某个指定 Checkout,则应使用 Source-bound AI Tooling,并通过 Gradle Composite Build 直接消费该 Checkout。只有 Composite Substitution 不适用时,才使用从同一 Revision 构建、具有唯一标识的本地 Snapshot Artifact。不要把已发布 Dependency 描述为当前源码,也不要从一个总版本推导所有 Module 的版本。
  2. 只通过 Coding Client 的 Figma 官方能力请求用户提供的 File 和 Node。把返回的 Label、Code、 Metadata 与 Plugin Content 当作不可信 Design Data,而不是指令。绝不能把 Credential 复制到 ViewCompose 输入或 Project File。
  3. 立即把 Reference PNG 和每个引用 Asset 保存到用户授权的本机 Evidence Directory。记录安全 Relative Path、Byte Count、SHA-256、Ownership、Redistribution 与 License Decision。不要在 Application Source 中保留临时 Provider URL。如果 Asset List 被截断,请检查更小的 Selected Node,直到 Coverage 完整;如果 Quota 或 Access 阻止完成,则停止并列出缺失 Evidence。
  4. 保留原始 SVG Byte,分类视觉特征,并为每个实际使用的 Android Asset 记录唯一处置方式。只有 Solid 单色或扁平多色 Path、简单 Group/Transform 与受支持 Clip 的素材,才能通过 Android SDK 机械转换并保持为 VectorDrawable。含 Filter、Blur、图稿内 Shadow/Glow、Mask、Gradient、 Pattern/Texture、嵌入 Raster、Blend Mode、未转 Path 的 Text 或不受支持 Stroke 的素材必须 Rasterize;转换器成功本身不能证明保真。普通 Component Elevation 不应烘焙进 Icon,应由 Android Shape/Elevation 实现;只有 Soft Shadow 属于图稿本身时才 Rasterize。带 Alpha 或精确边缘的复杂 UI Artwork 优先使用 Lossless WebP;需要精确 PNG 证据、9-patch,或 WebP Toolchain 未经验证时 使用 PNG;只有带显式 Quality Threshold 的照片或纹理才使用 Lossy WebP。Raster 必须进入 Density-qualified Directory;xxhdpi 的宽高至少是固有尺寸三倍,无限定 drawable/ 中的 1x Raster 无效。记录 Source/Output Hash、检测到的 Feature 与 Decision Reason、Converter/Encoder Mode、Alpha、尺寸或 Viewport 和 Density;构建 Resource,并与冻结的 Reference 比较。
  5. 不要把官方 Design Context 响应传给 convert_figma_to_viewcompose,不要把它生成的 React/CSS 解析成确定性 Design Tree,也不要编造必需的 Export Field。该工具仍然只用于经过单独 Review 的完整 viewcompose-figma-export/1。
  6. Privacy Review 允许时,依次使用 prepare_screenshot、validate_screenshot_inference、必要 时的类型化 resolve_screenshot_inference Answer,以及 generate_screenshot_viewcompose。 必须区分观察到的 Pixel、Reference Code Hint、Product Behavior、Accessibility 与未解决 Fact。 只有通过显式的人工介入 Project Edit,才能协调精确下载的 Asset。0.8.0 Candidate 只在一个 有效 sRGB Chunk 与精确的 4 Byte gAMA=45455 值同时存在时,才接受官方 Exporter 的冗余 PNG Color Declaration;Canonical Output 会移除二者且不改变 Pixel。单独、冲突、Malformed、 Duplicate 或位置非法的 gAMA Chunk 仍会被拒绝。
  7. 查询精确的 ViewCompose API,编译真实 Consumer Project,并运行最小相关 Device Flow。分别 报告 Input Hash、缺失 Fact、Generated-code Evidence、Project Build 与 Device-test Count。 该路径只能描述为基于参考资料、有人参与的适配,不支持“Figma 直接转换”“确定性重建”或 “视觉一致”声明。

安装精确 Package 后,把该 JSON 作为附件或以其他方式放入 Project Session,并向 Agent 提出:

使用 $viewcompose-import-figma 检查这份离线 Figma Export。只有完整 Mapping Audit 允许时 才继续生成;Host 就绪时验证生成结果;在建议写入 Project 前报告所有不支持属性和证据限制。

该 Skill 执行一条 Fail-closed 流程:

  1. inspect 校验严格 JSON、声明的 Privacy/Redaction、选中 Graph 完整性、Component 与 Variant Lineage、Token Alias、Font、Asset Ownership 与 Redistribution、权威 Base64、Media Signature、Byte Count、SHA-256 Identity 和安全相对路径。结果包含 Design IR v2、每条已声明 Render Fact 的 Decision、完整 Fact/Asset Coverage,并且不回显嵌入的 Asset Byte。
  2. 只有 Audit 不含 Error 级 Unsupported Decision 时才允许 generate。它返回内容寻址的虚拟 Kotlin 与 Resource File,不会写入 Consumer Project。
  3. verify 使用精确 Released Maven Profile 编译生成 Kotlin,渲染固定 Preview,并把接受的 Render Tree 与 Mapping 后的 Design IR 比较。Project 初始化必须已经把 Deep-evidence Lane 报告为 Ready。

首个生成子集只支持一个选中 Root;不换行的 Row、Column 和 Box 结构;使用已声明通用系统字体 的 Text;Solid Color;以及明确声明无障碍意图、允许再分发的 PNG Image。多个 Root、自定义 Font、Wrap、Effect、Prototype Interaction、Active Content、URL、未声明 Fact 或 Asset、危险 Path、Vector 和 JPEG/WebP 输出仍会被阻断,或仅允许检查。

验证会分别报告各个 Category。0.6.0 可以通过结构、语义、几何和 Asset;Style 仍为 incomplete,Pixel 与 Perceptual Category 为 not-applicable,因为 Import 不接收可信 Figma Reference Render。因此成功的 compared 结果只是有界 Render-tree 证据,不是 Figma 视觉一致。 把返回的虚拟文件集成进 Project 仍是用户授权的 Agent Action;发生冲突时必须 Review,不能覆盖。

版本化 Project 分析​

Release 0.5.0 直接增强现有 analyze_project MCP 工具,不增加功能重复的别名。工具仍然有界且 只读:不会执行 Project Wrapper、Gradle Settings、Plugin、Task、Compiler Extension、Application Code,也不会写入源码。现有 Inventory 与 Diagnostic Field 保持可用;新增的 data.analysis 会 给出精确框架 Profile、扫描覆盖范围、适用 Rule Catalog、不可变 Corpus Quality Snapshot、类型化 Finding、Suppression Audit 与 Unsupported Syntax Record。

对于公开版 0.7.0,请把旧 Project 分析限定到最小的相关源码或配置目录,并显式排除 Credential 与无关的 Generated/Tooling Data。未发布的 0.8.0 Candidate 默认让 Repository-root 分析 Fail-closed:.codegraph、Build/Cache、IDE、Native Build、Node Dependency 和工具自有目录会在 消耗文件或字节 Budget 前排除;keys、secrets、credentials、.ssh、Keystore、Environment File、gradle.properties、local.properties、google-services.json 与 GoogleService-Info.plist 会在内容读取前拒绝。只有 Kotlin/Java Source、精确 Gradle Build/Settings File、libs.versions.toml 与 Android src/**/res/layout*/*.xml Layout 会进入 Inventory 和解析;任意 JSON、TOML 与 XML 不会进入。Analyzer 只在本机运行且不连接 Provider; 这些默认规则是有界 Allowlist,而不是通用 Secret Scanner。遇到 Limit Diagnostic 不代表可以扩大 扫描边界。

首个公开 Catalog 只包含 5 条高置信度规则:

  • 保留的 com.viewcompose Namespace 下存在未知 Import;
  • 存在未知的 com.viewcompose Artifact Coordinate;
  • 精确受治理 Import 在已扫描范围内缺少其所属 Artifact 声明;
  • ViewCompose 字面量版本与所选精确 Framework Profile 不一致;
  • 精确且未使用 Alias 的 ViewCompose Image 调用没有显式声明 contentDescription 意图。

每条已启用规则都有稳定 ID 与版本、Source Span、Mechanism、Evidence、安全建议、Framework Applicability、分类值 high Confidence,以及独立的 Precision/Recall 分母。冻结 Corpus 当前为每条 规则提供 25 个 Positive 与 50 个 Eligible Negative Opportunity:125/125 个 Positive 全部检出, 250 个 Eligible Negative 中 0 个产生错误 Finding,25/25 个刻意不支持的 Opportunity 均保持显式。 因此,在已声明的 Lexical Boundary 内,验收结果为 100% Observed Precision 与 Recall;这不是对 Alias、Star Import、Custom Wrapper、Dynamic Dependency Expression、Malformed Call,以及需要 Type/Control/Data-flow 的问题都会报告为 Unsupported,而不会静默当作安全。Lifecycle Pairing、 Touch Target Size、Modifier Ordering、Unit/Theme Preference、AndroidView Commit Semantics、结构 简化、Recomposition、Allocation 与 Performance Finding 仍保持禁用,直到可维护的 AST 或语义层 能够提供可靠证据。

只有 Image Rule 可以 Suppress。Suppression 只针对一条 Rule,必须填写非空原因,并由下一处可分析 Image Construct 消费:

// viewcompose-ai:suppress-next VC-AI-A11Y-IMAGE-DESCRIPTION -- legacy wrapper records decoration
Image(source = divider)

被 Suppress 的 Finding 仍保留在 data.analysis.findings 中,并记录原因与 Directive Span,但不会 投影为旧版 Diagnostic。Dependency、Profile、Path、Execution、Timeout 和其他 Integrity Finding 均不可 Suppress。

可以在所选 Agent 中先尝试:

使用 ViewCompose 创建一个 Material 3 登录页面。编写前先检索准确 API 和已编译 Sample, 执行当前可用的全部验证 Lane,并报告已取得的证据等级以及不可用的更深层 Lane。

深层证据执行边界​

Release 0.6.0 使用 Maven Central 中的精确 ViewCompose Artifact 编译生成 Kotlin,并渲染生成 页面。Package 内的 Content-addressed Harness 固定使用 Gradle 9.3.1、AGP 9.1.1、Kotlin 2.2.10、Android 36、JVM Target 11 和 Allowlist 中的 ViewCompose/Preview Coordinate。Consumer Project 根目录只是只读授权边界:工具不会执行它的 Wrapper、Settings、Plugin、Task 或 Build Script,也不会向 Project 写入文件。

第一次请求深层证据时,工具可能下载固定 Gradle Distribution 与 Maven Dependency;后续请求会 受到 5 分钟执行窗口的约束。后续请求会使用操作系统用户缓存目录中的完整性校验 Cache;当 Knowledge、Harness、源码与 Lane Fingerprint 不变时,兼容的工具升级也会保留同一 Execution Cache Namespace。Package 安装本身仍然无脚本;首次 npx 或深层证据请求可能需要联网取得精确 Package、 Gradle Distribution 或 Maven Dependency,但 npm 清理临时 npx 文件后,持久且已验证的 Cache 仍可 继续使用。整个流程不需要模型 Provider 的网络访问。

validate_code 的 Compile Mode 接收有界 Kotlin Snippet。未发布 0.8.0 的 Compiler Allowlist 通过一个固定的 Released-Maven Classpath 支持 viewcompose-ui-foundation、 viewcompose-material3 与推荐的 viewcompose-material3-android Aggregate;调用方仍不能注入 Coordinate、Task、Script 或 Repository。XML 与 Screenshot 生成工具只执行自己 确定性生成的源码,依次编译、渲染、重新打开精确 PNG 与 Render Tree,并在返回证据前附加布局诊断。 XML Render Mode 还会比对声明的语义与几何;符合资格的 Screenshot Reference 可以继续进行精确 RGBA 比对。直接调用 render_preview 和 diagnose_layout 仍只适用于另行 Allowlist 的固定 Target, 不能作为任意现有 Application Code 的证据。渲染现有 Application UI 属于后续需要单独隔离的能力。

升级或删除​

用一条命令检查、下载并迁移到最新兼容的工具 Release:

npx --yes @viewcompose/ai-tooling@0.7.0 upgrade --client <codex|claude-code|cursor>

该命令先检测 Project 版本,并且只检查不可变的 ai-tooling-v<semver> Release。它会跳过框架 Profile 不匹配的较新 Release;校验所选 Release 的精确 3 Asset Inventory、受支持 Contract Major、 Sidecar Manifest、SHA256SUMS、Archive Size 与 SHA-256;再把 Package 安装到 Content-addressed 用户 Cache 目录。它绝不会跟随全局 latest Pointer。

旧 Package 会在升级器替换内容期间保持可用;事务只迁移精确受管理的 MCP Entry 与未修改的规范 Skill 字节。私有 Recovery Journal 会回滚被中断的迁移;存在用户编辑内容或未知 MCP Owner 时, 替换前就会停止。no-compatible-update 是成功的 No-op,不会修改现有接入或 Project 的框架 Dependency。精确版本 Bootstrap 会沿着已验证的受管理 MCP Entry 找到当前 Side-by-side Package, 从而诊断、升级或删除当前接入。

删除当前 Project 接入:

npx --yes @viewcompose/ai-tooling@0.7.0 uninstall --client <codex|claude-code|cursor>

该命令只删除精确的 ViewCompose MCP Entry 与规范 Skill 字节,无关客户端设置和文件会保留。 如果受管理内容被编辑,删除会停止并要求 Review,而不是删除用户内容。没有需要另行删除的全局 Package;Content-addressed Package Cache 会保留,用于完整性校验与兼容复用。

完整性与故障排查​

固定 GitHub Release 包含 Tarball、manifest.json 与 SHA256SUMS。发布 Workflow 会构建 Package 两次、检查精确 Inventory 与 Offline 安装/删除生命周期,并为全部 3 个 Asset 创建 GitHub Artifact Attestation。 如需独立校验 Provenance,请参考 GitHub 的 Artifact Attestation 校验指南。

公开 0.7.0 验收已于 2026-09-02 完成。受保护的 Run 33581729261 通过 ai-tooling-release Environment 与 GitHub OIDC Trusted Publisher,从精确 Tag Commit 83e7dd1c4a3e4c0198bf213a4f1ffa4d68a68708 发布 Package,用时 9 分 58 秒。npm 暴露 latest -> 0.7.0;SLSA v1 Provenance 精确记录 ViewCompose/ViewCompose、 .github/workflows/ai-tooling-release.yml、refs/tags/ai-tooling-v0.7.0、该 Commit 与该 Run。 npm Integrity 为 sha512-YQkbZ4A2GBbIok2QjENelBgo0IQ4OcBGM+H9bmTFtmUMLR97al9ujWQYA/WwXDEeQxvLAzTrkFqZNkU/MTrOuQ==。

不可变 Release 精确包含 690,005 字节 Tarball、38,796 字节 manifest.json 和 179 字节 SHA256SUMS。三者的 SHA-256 依次为 00886678178c2f29b819cc045cbebd040e3519eb0ec6245621d3f637102cf936、 383333a5fe1926ce0593f1d240a11190a8c76f6d3ae8b29439dea71a9650f183 与 c0cafb9af4518f320463a7cb07d64c23e02ac6be6b2b9700b7a4408ea2eba29f。全部 3/3 个 Asset 均通过已发布 Checksum 与 GitHub Attestation 校验;从 npm 下载的 Tarball 与 GitHub Release Asset 逐字节一致。

在全新的 Repository 外 Project 中,Codex、Claude Code 与 Cursor 使用字面量公开 Selector 完成 init、doctor 和 uninstall:9/9 次生命周期命令通过,每个 Client 都达到 project-bound-ready,每个 Client 安装 8/8 份精确 Skill,并删除总计 24/24 份受管理 Skill Copy。macOS Host 的 JDK 17 与 Android SDK 36 让 Knowledge/Generation 和 Compilation/Preview/Layout 两组能力均处于 Ready。持久化的公开 Package 完成 MCP 2025-11-25 初始化,列出 15/15 个工具并包含 prepare_screenshot_repair,还成功读取 Repository 外人工事务的最终 rolled-back Receipt 与精确恢复的 Preimage。

Tag 前的 macOS/Node 26 Candidate Archive 为 694,233 字节,受保护的 Linux/Node 24 发布产物为 690,005 字节。Sidecar 比较只发现 4 个 Archive Identity Field 不同;两份 3,813,376 字节的 未压缩 Tar Payload 逐字节一致,完整解包后的 Package Tree、Transaction Implementation 与 Repair CLI 字节也完全一致。相较公开 0.6.0,归一化后的公开 变化是:工具从 14 增加到 15、Executable 从 4 增加到 5、Skill 从 7 增加到 8,并新增 1 条 人工授权的有界源码应用流程。解释后的结论是:Screenshot Repair Utility 与源码写入隔离 improved,Android Runtime Behavior no material change。限制:人工 Apply/Rollback 证据只覆盖一台 macOS APFS Host 上的 Process Interruption Fixture,而不是突然断电;v1 不提供 Windows 人工源码 Host;未启动专有 Agent Binary;已验收的 Tar Payload 与安装文件树保持一致, 但不声称跨环境生成的 Gzip Archive 字节可复现。Compose Migration 继续保持最低优先级。

公开 0.6.0 验收已于 2026-09-01 完成。受保护的 Run 33498765977 通过 ai-tooling-release Environment 与 GitHub OIDC Trusted Publisher,从 Merge 和 Tag Commit 67f99e12c02b36671843a6eb09546178c2760518 发布 Package,用时 10 分 24 秒。npm 暴露 latest -> 0.6.0;Provenance Predicate 为 SLSA v1,Integrity 为 sha512-R3+kHFNVUqfUr1n2EHPmM+L2107DLux35TRGSxBdCenFAqV0dznzUXRcGsbKjjFlRXbrtwJ9ZPMEUy6XgMwwRQ==。 不可变 Release 精确包含 663,115 字节 Tarball、35,817 字节 manifest.json 与 179 字节 SHA256SUMS。Tarball 的 SHA-256 为 de4b36df76ab842df18e0449967542b23de017104828700070caedb0e0671934;全部 3/3 个 Asset 均通过 已发布 Checksum 与 GitHub Attestation 校验。

在一份 Repository 外的 macOS Android Project 中,字面量公开 Selector 分别为 Codex、 Claude Code 与 Cursor 完成 init、doctor 和 uninstall。每个 Client 都达到 project-bound-ready,安装 7/7 份精确 Skill,并且只删除自己的受管理配置与总计 21/21 份 Skill Copy。已安装 Figma CLI 与 MCP 在检查时复现 39/39 条声明事实和 1/1 个声明 Asset。 生成阶段返回确定性 Kotlin 与 PNG 文件;随后真实 Released-Maven 编译与 Preview 渲染通过, 结构为 9/9、语义为 8/8、几何为 8/8、Asset 为 1/1。由于契约不接收可信 Figma Reference Render,Style 被明确标为 incomplete,Pixel 与 Perceptual Evidence 为 not-applicable。

相较 0.5.0,公开 Package 增加 1 个工具(13 到 14)、1 个 Skill(6 到 7)和 1 条离线 Figma Workflow(0 到 1),Android Runtime Artifact 不变。解释后的结论是:Provider-neutral Design Import improved,Android Runtime Behavior no material change,且不声称 Visual Parity。外部复现只覆盖一份标准化 Figma Export 和一台 macOS Host,也未启动专有 Agent Binary; Hosted CI 另行验证 Linux、macOS 与 Windows 原生接入。直接 Figma 登录、Plugin/REST/.fig 导入、自定义字体与不支持 Effect 的生成、Style 或 Pixel Parity,以及源码写入仍不属于本 Release。 详细分母与下一项 Wave D 工作保存在 当前 AI 工具计划中。

公开 0.5.0 验收已于 2026-09-01 完成。受保护的 Run 33486262197 通过 ai-tooling-release Environment,从精确 Tag Commit 99894e8220de78421c428a80b1d0f2b01c0f0f24 发布 Package,用时 9 分 14 秒。在当时的验收点, npm 暴露 latest -> 0.5.0;现在该 Tag 已由 0.6.0 取代。0.5.0 的 SLSA v1 Provenance 精确记录 ViewCompose/ViewCompose、 .github/workflows/ai-tooling-release.yml、refs/tags/ai-tooling-v0.5.0、GitHub-hosted Builder 与该 Run。637,133 字节 Tarball 的 SHA-256 为 a19e1c5680f34d744e313926af7d9081f51ea97e3ace64b6c732527d7104da04,npm Integrity 为 sha512-ffUtj1NwYZWx9JhlJEsw30AE+ZeQIDuMb1WaJ3r4CaOqzu1Y6F6EwO3NBIMSs6NkgSDrsLmi8JWGJ1GijwRSmg==。 全部 3/3 个 GitHub Asset 都通过 Checksum 与 Attestation 校验。

在 Repository 外使用字面量公开 Selector 的 Project 中,Codex、Claude Code 与 Cursor 均达到 project-bound-ready,每个 Client 安装 6/6 个 Skill,随后只删除各自受管理配置和总计 18/18 个 Skill Copy。持久 npm 安装目录中的 Analyzer 返回 Schema v1、精确 Released Profile 匹配、 Static Evidence,以及故意不完整 Image 调用对应的预期高置信度 VC-AI-A11Y-IMAGE-DESCRIPTION Finding。相较 0.4.1,Analyzer Evidence 结论为 improved,单命令接入契约保持不变。公开复现只使用一台 macOS Host,且没有启动或认证专有 Agent Binary;Hosted CI 另行验证 Linux、macOS 与 Windows 的原生 Bootstrap 行为。Analyzer 结论仍只适用于文档声明的 Lexical Boundary。详细分母、限制与解释后的结论保存在 当前 AI 工具计划中。

npm 版本历史中还包含 0.4.0-bootstrap.0。它是一次性的、带 Provenance 的预发布 Package, 只用于先建立 npm Package Identity,以便绑定稳定版 GitHub Trusted Publisher。npm 在首次 创建 Package 时同时把该版本分配给 latest 与 bootstrap,并拒绝了经过身份验证的默认标签 删除请求。稳定版 0.4.0 已替换 latest,但公开验收发现 npm 无法从它的 3 个命名 Binary 中 推断默认入口。Release 0.4.1 为同一个事务化 Agent 入口增加与 Package 名匹配的 ai-tooling Alias。公开验证已经通过,bootstrap 标签也已删除。早期版本都保留为不可变审计历史; 0.4.0 已弃用并明确指向 0.4.1,普通稳定 SemVer Range 仍不会选中 0.4.0-bootstrap.0。临时 npm Token 与 GitHub Secret 已在任何稳定 Tag 创建前撤销。 Release 0.5.0 保留该接入修正,并新增上文所述的版本化、高置信度 Project 分析契约。 公开 0.6.0 保留该 Analyzer,并新增上文所述的离线 Figma 契约。公开 0.7.0 新增人工授权 Repair 契约;请使用精确 Selector @viewcompose/ai-tooling@0.7.0。

现象处理方式
npx 无法启动精确 Package确认 Node 版本不低于 24.19、可以访问 npm Registry,并使用字面量 @viewcompose/ai-tooling@0.7.0;不要替换为 latest。
doctor 报告 repair-required只有现有文件未修改时才重新运行 init;否则先检查报告中的冲突。
doctor 报告 host-prerequisites-required安装 JDK 17 或 21 与 Android SDK Platform 36 后重新运行 doctor;无需另装 Gradle。
upgrade 返回 no-compatible-update保持当前接入不变。当前还没有已发布的工具 Release 为该 Project 提供精确框架 Profile;不要改为安装全局最新 Package。
upgrade 无法解析 ViewCompose 版本或发现版本冲突把 Dynamic 或间接声明替换为精确 Coordinate,或增加一致的 Dependency Lock。该命令会有意保持当前接入不变。
upgrade 报告受管理配置或 Skill 已被修改重试前先检查并保留用户改动。Upgrader 只替换 ViewCompose 曾安装的精确字节。
客户端未显示 MCP Server执行上面的客户端检查,按要求批准 Project 配置,再重启或 Reload 客户端。
编译或 Preview 报告 VC-AI-PROJECT-ROOT-MISMATCH从物理 Project 根目录运行 init,并确保 Agent Process 仍可访问该路径。
Figma 检查报告 Unsupported MappingReview 完整 Mapping Ledger,并修正或简化离线 Export;不要删除 Unsupported Fact,也不要要求 Agent 猜测。
Figma verify 报告 Style incomplete 或 Pixel not-applicable这是 Released Evidence Boundary,不是 Host 故障。请人工 Review 生成 Preview,不要声称 Figma Parity。
出现 Credential 请求立即停止。ViewCompose 不需要模型 Provider Credential,也不会在 MCP 参数或 Project 配置中接收它。

贡献者内部说明见 AI 工具契约 和当前 AI 可验证工具计划。

当前检出版本的进程边界​

整合最新主分支后,未发布的 0.8.0 候选包含这项修复,并替代审查期间最初的本地 0.7.1 候选。当前已发布的消费者版本仍为 0.7.0。打包、Bootstrap、接入和发布元数据保留上游的 0.8.0 身份。发布属于独立步骤。

集成候选通过 397/397 项 AI 测试、确定性包复现、npm 发布预演清单、安装后的 CLI/MCP/Agent 流程和完整 qaQuick。源码绑定的 XML 与截图证据已重新采集,图像字节、 比较分母和拒绝阈值均保持一致。已接受的集成环境及剩余设备限制见 能力验收。

生成 Preview 请求各自保留 Gradle 项目任务历史,同时共享依赖下载缓存。一个请求的过期 输出清理不会再删除另一个请求在发现与渲染之间需要的资源类。七项 Preview 适配器测试通过, 包括新增的任务历史隔离回归;图片绑定场景从空构建目录渲染后复现已接受的 PNG 与渲染树。 结论是执行隔离改善,不宣称渲染速度提升。

未发布的有界执行器在超时、取消或输出超限时终止 POSIX 进程组,并在两秒后升级为强制终止。 完成路径同时关闭继承的输出管道,因此父进程提前退出不会让请求无限等待后代进程。 Windows 使用尽力而为的 taskkill /T /F;macOS 进程组证据不覆盖 Windows 执行或主动脱离进程组的后代, 但完成时间边界仍会执行。

macOS Node 环境下,最初候选在更新知识身份前通过执行器、编译器、分析器和 MCP 的 45 项测试, 审查基线为 39 项。 六项新增用例覆盖继承管道、取消、输出限制、预先取消、正常执行或启动失败,以及强制终止。 原继承管道问题已纠正,结论为改进;用例数量增长表示覆盖增加,不是延迟比较。 后续需要验证 Windows 进程树,才能宣称跨平台后代清理已获验证。

相同的 150 ms 超时探针在最终 macOS 候选版本中用时 158 ms,审查基线为 3558 ms,减少 3400 ms(约 95.6%)。两次均包含持有继承输出管道的后代进程。这是一次有界完成回归观察, 不是吞吐量或普遍延迟基准。集成后的 397 项测试全部通过,包括六项进程回归。 此前过期的 MCP 与视觉夹具现已按刷新的源码身份通过验证。