Repository navigation
PI 0.1.4(pi 1.3.0)· 设备桥 v2
引擎:@earendil-works/pi-coding-agent 1.3.0(与上一包相同,不含引擎升级)。
从 v0.1.3(313309f)到这里共 17 笔提交。这一版的主线是设备桥重做——工具面从 26 个砍到 7 个,四组能力被删掉,动作开始自带反馈。
设备桥 v2:26 个工具 → 7 个
原来那份工具面的问题很具体:26 个工具的描述合计 1.2 万字(≈4k token/轮),而其中大半是同一个能力的别名——ui / ui_dump / tap / swipe / input / key / screenshot 七个工具讲的是同一块屏幕,io / fs / files / files_list / download 五个讲的是同一批文件。
现在是一个工具一个闭集 action:
| 工具 | action |
|---|---|
android_status |
(无,常驻) |
android_screen |
look / tap / type / swipe / key / wait / shot / steps |
android_app |
list / launch / stop |
android_files |
dirs / list / read / write / download / import / export |
android_shell |
(无) |
android_comm |
clipboard / notify / toast / vibrate / share / open / tts |
android_device |
battery / torch / location / sensors / sensor |
省下来的正是每轮都要付的那份钱:以前每个别名都各带一份 description + promptSnippet + promptGuidelines + 完整参数 schema,现在一个端点只付一次。合并丢掉的参数精校由每个 action 自己的 [BAD_PARAM] 补回来。
结果是提示词大幅变短,而能力一点没少。
动作即反馈:点一下就告诉你变了没有
这是这一版真正的加强点。以前「点一下输入框再打字」要三次工具调用(tap → dump → input),模型在两次调用之间看不到任何反馈,点错了也不知道。
现在 tap / type / swipe / key 执行后立刻做一次界面 diff,同一份结果里给出:
{
"changed": true,
"screen": "com.tencent.mm",
"added": ["发送"], "removed": [], "updated": ["输入框"],
"text": "1 个节点出现:发送"
}- 界面真变了 → 列出新增/消失/变化的节点;
- 界面没变 →
changed: false,并明说「界面没变,可能没点中」,模型可以直接重试,而不是接着往下错; - 没有上一屏可比 →
changed: null,如实说「还没有上一屏可对比」,不编一个结论。
steps:一次调用连做八步
{ "action": "steps", "steps": [
{ "action": "tap", "text": "搜索框" },
{ "action": "type", "text": "天气" },
{ "action": "key", "key": "enter" }
] }每一步先校验 action 再动手,逐步带自己的 diff,遇错即停并说清停在第几步。上限 8 步。这样一段确定的操作序列不用再来回四次。
删掉四组能力
VPN / 输入法 / 投屏 / 自动化规则 —— 整组删除,连同它们的服务类、清单项、提示词段落、技能正文与文档条目一起清干净:
PiVpnService.kt、PiInputMethodService.kt、PiCaptureService.kt、PiScreenCapture.kt、PiAutomation.kt全部移除pi_input_method.xml移除- 最后两处
allows/android_say残留清掉
升级后这四项不可用,是设计决定,不是回归。
设备能力屏:1303 行 → 148 行
用户原话是「说明文字太多了」。现在收成四个状态点 + 三行开关 + 一个高级折叠,删掉 allows 字段。整个文件的净变化是 −1147 行。
权限闸门
danger.ts的级别表对齐 7 个工具- 「按调用才危险」的两处改由新的
approvalRuleFor判:android_shell的 7 条不可逆命令,以及android_app(action="stop") - 记住的粒度是规则 id,不是工具名
ShellPolicyMirrorCheck的两条集合判据仍成立(工具名 7 = 7,硬黑名单两侧都是空)
模型可见文字统一英文
- description 每条 ≤60 字符,只写「是什么 + action 列表」
- promptSnippet ≤20 字符,不与 description 重复
- promptGuidelines 只留 3 条安全规则(
stop会丢未保存内容、shell受策略守卫、不可逆动作会二次确认) - 工具返回的正文仍是中文——那是给工具卡上的人看的
技能按能力组裁剪
SKILL.md(23 行)+ references/ui.md + references/env.md,正文合计 52 行。只开 basic 时不写 ui.md、索引里也没有屏幕那一行;全关时不写并删目录。上一版写过、这一版不再有的附件在写新文件前主动 rm——pi 只按目录扫盘。
diff 卡:折叠态对齐工具卡
- 删掉折叠态的第二行(「新增 N 行 · 删除 M 行」+ 一个不可点的"展开/收起"死标签)——前者把头行的
+N/−M用中文复述一遍,零新信息 - 去掉描边:工具卡早就不带描边了,diff 卡留着就成了并排时的唯一异类
- 圆角 10 → 8(复用
TOOL_CARD_SHAPE),内边距改为工具卡同一套(横 10 / 纵 7),工具名加粗与头行一致
折叠态现在只有一行:工具名 + 路径 + +N + −M + chevron。
文档与 CI
- 新增
docs/device-bridge-v2.md:v2 工具面与屏幕重构的设计契约(工具表、动作即反馈的返回形状、技能裁剪规则) - 工具表、技能表格、包列表、模型提示里的旧工具名全部同步到 v2 的 7 个
- CI 触发收紧:纯 markdown / 截图 / 标志图改动不再触发完整构建(两个 targetSdk 变体 + ~65 MB 运行时装配)
构建信息
| 引擎 | @earendil-works/pi-coding-agent 1.3.0(未变) |
| 变体 | sideload28(targetSdk 28,默认选这个) |
| 架构 | arm64 |
| 安装包 | 142,126,674 字节(135.5 MiB) |
| sha256 | 281a16dfe897487ff4ff185556599b08fad6e3e6a217373f7452a8fa289773d4 |
| 来源 | CI run #427,commit 005dea49 |
同一密钥签名,可以覆盖安装,升级不丢数据。
注意:这一版删除了 VPN / 输入法 / 投屏 / 自动化规则四组能力,升级后不可恢复(回退需装回旧包)。