@mobileaidev/ai-app-bridge 0.3.4 → 0.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -3
- package/bin/android-permissions.js +39 -5
- package/bin/command-discovery.js +8 -2
- package/bin/command-registry.js +26 -9
- package/bin/device-provider.js +11 -2
- package/bin/execution-host.js +18 -0
- package/bin/executors/android-host.js +201 -0
- package/bin/executors/android-port.js +114 -0
- package/bin/executors/automation-owner.js +42 -0
- package/bin/executors/command-schema.js +102 -0
- package/bin/executors/flutter-host.js +123 -0
- package/bin/executors/managed-runtime.js +85 -0
- package/bin/executors/playwright-host.js +146 -0
- package/bin/executors/playwright-worker.js +307 -0
- package/bin/executors/receipt-journal.js +56 -0
- package/bin/feedback-probe.js +27 -1
- package/bin/ios-device-outcome.js +17 -0
- package/bin/ios-execution.js +13 -1
- package/bin/ios-provider.js +74 -24
- package/bin/ios-runtime-binding.js +1 -1
- package/bin/ios-wda-startup.js +68 -0
- package/bin/runtime-directory.js +1 -1
- package/bin/shared-kernel/device-ownership-recovery.js +13 -0
- package/bin/shared-kernel/native-target.js +11 -8
- package/bin/shared-kernel/uia-protocol.js +1 -1
- package/bin/shared-kernel/uia-runtime-port.js +38 -2
- package/bin/ui-observation.js +29 -0
- package/bin/web-provider.js +6 -1
- package/docs/COMMAND_CONTRACT.md +73 -2
- package/docs/INTENT_FOREGROUND.md +1 -1
- package/docs/OPTIONAL_EXECUTORS.md +182 -0
- package/docs/RELEASE.md +36 -14
- package/docs/SCRIPT_AUTHORING.md +7 -0
- package/package.json +6 -1
- package/runtime/executors/playwright/package-lock.json +45 -0
- package/runtime/executors/playwright/package.json +8 -0
- package/runtime/uia/ai-app-bridge-uia.jar +0 -0
- package/runtime/uia/manifest.json +9 -8
package/docs/RELEASE.md
CHANGED
|
@@ -1,11 +1,29 @@
|
|
|
1
|
-
# 0.3.
|
|
1
|
+
# 0.3.6 发行与接入交接
|
|
2
2
|
|
|
3
3
|
本文件记录正式版的依赖关系和出仓库交付入口。封版要求是同一提交的源码、发行包与公开接入合同一致;单个样本的测试进度不改变包版本或发布状态。推送 Git、创建远端标签及发布 npm/pub 包由维护者执行。
|
|
4
4
|
|
|
5
|
-
## 0.3.
|
|
5
|
+
## 0.3.6 新增
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
-
|
|
7
|
+
- Android、iOS、Flutter、Web 与内嵌 H5 的持续 UI 观察默认关闭;仅按需开启 100–5000 ms 的观察窗口,期限到达、主动停止或相应生命周期退出时清理观察任务。新增三个平台观察控制命令,公开命令共 121 个。
|
|
8
|
+
- Flutter 当前树改为显式读取 `/v1/flutter/snapshot`,状态请求不再触发树遍历;CLI/MCP 与 App 内 SDK 需要配套升级。Android 指纹编码减少 JNI 调用与临时分配。实测证据及边界见仓库中的 UI 观察性能评估记录。
|
|
9
|
+
|
|
10
|
+
- 可选 Android Instrumentation 会话,复用业务 androidTest;UI Automator、Espresso、Espresso-Web 和 Compose 可在同一会话内选择。
|
|
11
|
+
- 可选 Flutter integration_test/WidgetTester 测试入口,以及 Host 管理的 Playwright 1.63.0 浏览器执行器。
|
|
12
|
+
- 公开 capabilities + run、Python/JS Script 的 app.test 权限、观测身份、原始回执、取消和设备占用接线。
|
|
13
|
+
- Compose 主包/测试包版本检查;按测试配置隔离依赖,不自动升级业务 AGP/Kotlin/Compose。
|
|
14
|
+
- Android 7 权限输出的零 flags 省略及空格分隔格式支持,来源为实际 API-25 环境和 AOSP Settings 输出实现。
|
|
15
|
+
- 本地交付和外部发布分开记录;这份源码不表示 npm/JitPack/pub.dev 已发布 0.3.6。
|
|
16
|
+
|
|
17
|
+
接入合同、具体依赖和实测性能见 [OPTIONAL_EXECUTORS.md](OPTIONAL_EXECUTORS.md)。
|
|
18
|
+
|
|
19
|
+
## 随本版包含的 0.3.5 修复
|
|
20
|
+
|
|
21
|
+
- 修正 UIA nodeRef 原回执对账,正常重启和死进程后的显式启动可完成原 session 审计;未知回执和失效引用仍受保护。
|
|
22
|
+
- UIA node runtime 支持 Android API 25+,保留 POSIX 原子重命名、fsync、进程锁与原始 Binder 回调;不使用 dump 或坐标回退。Android 7 权限观察支持未初始化的权限状态以及旧 ActivityManager 的身份字段。
|
|
23
|
+
- iOS 对未就绪的 list 快照先执行所选设备的 details 探测;原始 4016 使用断言拒绝可按精确调用公开对账,不删除占用记录。
|
|
24
|
+
- WDA 启动前持久保存 XCTest 调用身份。原始启用自动化超时能结算;旧 ios-setup 记录用原公开响应、Host action 与 XCTest 结果公开对账,未知结果继续保留。
|
|
25
|
+
- 没有待处理安装时,cancel-install 明确返回 install_action_not_pending,不把空操作报告成安装取消成功。
|
|
26
|
+
- 各 SDK 同步版本;原生 SDK 设备执行逻辑沿用 0.3.4。真实业务验收与渠道发布状态单独记录。
|
|
9
27
|
|
|
10
28
|
## 随本版包含的 0.3.3 修复
|
|
11
29
|
|
|
@@ -16,16 +34,20 @@
|
|
|
16
34
|
- CLI `--version`、录制目录、错误字段、Script 起步权限及 Reader UIA 只读重试修正;明确 freeze 与 MCP 重连语义。
|
|
17
35
|
- Android Gradle 无实现的历史开关发出弃用提示,旧 DSL 仍可构建;各端统一版本。
|
|
18
36
|
|
|
37
|
+
## 新增可选分发物
|
|
38
|
+
|
|
39
|
+
Android `ai-app-bridge-test-core`、`ai-app-bridge-test-uia`、`ai-app-bridge-test-espresso`、`ai-app-bridge-test-instrumentation`、`ai-app-bridge-test-espresso-web`、`ai-app-bridge-test-compose` 均使用 0.3.6,通过 androidTestImplementation 消费。Gradle 插件增加 `io.github.mobileaidev.aiappbridge.test` 依赖校验入口。新 Flutter 包 `ai_app_bridge_test` 使用 0.3.6,只作为 dev_dependency;它的发布不依赖 Android SDK 的 JitPack 坐标。
|
|
40
|
+
|
|
19
41
|
## 版本与消费方式
|
|
20
42
|
|
|
21
43
|
| 交付物 | 发行版本 | 独立消费入口 | 发布依赖 |
|
|
22
44
|
| --- | --- | --- | --- |
|
|
23
|
-
| Android SDK | `0.3.
|
|
24
|
-
| Android Gradle 插件 | `0.3.
|
|
25
|
-
| 原生 iOS SDK | Git tag `0.3.
|
|
26
|
-
| Flutter 插件 | `0.3.
|
|
27
|
-
| Desktop CLI/MCP | `0.3.
|
|
28
|
-
| Web SDK | `0.3.
|
|
45
|
+
| Android SDK | `0.3.6` | JitPack `com.github.mobileAiDev.ai-app-bridge:ai-app-bridge-android:0.3.6` | 同名 Git tag,JitPack 对该提交成功构建 |
|
|
46
|
+
| Android Gradle 插件 | `0.3.6` | JitPack `ai-app-bridge-gradle-plugin` 模块及插件 ID `io.github.mobileaidev.aiappbridge.android` | 与 SDK 相同的 Git tag;不再使用旧默认 `0.2.8` |
|
|
47
|
+
| 原生 iOS SDK | Git tag `0.3.6` | Git URL 的仓库根 `Package.swift`,产品 `AiAppBridgeIOS` | 根清单包含 Swift runtime、C adapter 和 segmented C store,无外部 C 包路径 |
|
|
48
|
+
| Flutter 插件 | `0.3.6` | pub `ai_app_bridge_flutter` | Android 固定依赖上述 SDK;iOS Swift/C 源码随插件分发 |
|
|
49
|
+
| Desktop CLI/MCP | `0.3.6` | npm `@mobileaidev/ai-app-bridge` | 包含 UIA bundle、WDA 模板和 native store 源码;WDA 上游固定 `14.1.1` |
|
|
50
|
+
| Web SDK | `0.3.6` | npm `@mobileaidev/ai-app-bridge-web` | 独立浏览器源码包,无 npm 对 CLI 的安装依赖 |
|
|
29
51
|
| Native store | `0.1.0` | 随 CLI 的 bundled dependency 安装 | 不要求另行发布到 npm;`file:../../native/segmented-fact-store` 是工作区构建入口,最终 tarball 必须包含该依赖源码 |
|
|
30
52
|
|
|
31
53
|
Flutter 的 podspec 是随 pub 插件消费的本地 podspec,不是独立 CocoaPods trunk 发布包;原生 iOS 使用根 Swift package。Flutter SwiftPM 的 `../FlutterFramework` 由 Flutter 的集成生成,不能当作本仓库的外部私有依赖,也不应将本机 Flutter framework 打包进插件。
|
|
@@ -34,11 +56,11 @@ Host 支持范围声明为 Node `>=26.3.0 <27`,本轮实际验证基线是 **2
|
|
|
34
56
|
|
|
35
57
|
## 发布顺序
|
|
36
58
|
|
|
37
|
-
1. 完成源码审阅并冻结一个提交,核对以下命令的产物确实来自它;包含当前 untracked 的实际源码、测试和文档,排除本机生成目录。所有对外发行版本使用同一个 `0.3.
|
|
38
|
-
2. 维护者推送提交与 `0.3.
|
|
59
|
+
1. 完成源码审阅并冻结一个提交,核对以下命令的产物确实来自它;包含当前 untracked 的实际源码、测试和文档,排除本机生成目录。所有对外发行版本使用同一个 `0.3.6`,若需要改版本,先同时更新上表涉及的 manifest 与固定依赖。
|
|
60
|
+
2. 维护者推送提交与 `0.3.6` 标签,让 JitPack 构建 Android SDK/插件。确认两条公开坐标可解析后,再发布依赖它们的 Flutter 包。本地 Gradle project/path/AAR 替换不能证明 JitPack 坐标可消费。
|
|
39
61
|
3. 原生 iOS 消费相同 Git tag 的根 package;完成根 package 的 iOS 构建,不仅构建 `ios/ai-app-bridge-ios/Package.swift`。Flutter iOS 则检查实际 pub 包内 Swift/C 源码与声明相符。
|
|
40
62
|
4. CLI 与 Web SDK 可分别发布到 npm 的 `latest` dist-tag。CLI 的 native store 已打包随行,不等待一个不存在的单独 registry 依赖。Flutter 包发布以第 2 步完成为前提。
|
|
41
|
-
5. 同步 npm `next` 指向 `0.3.
|
|
63
|
+
5. 同步 npm `next` 指向 `0.3.6`,让已有候选入口也使用本次正式版。将 GitHub `main` 与发行提交同步,并创建非预发布的 GitHub Release。
|
|
42
64
|
6. 从 registry/tag 安装刚发布的确切版本,读取 `capabilities` 和版本,核对来源及支持范围,确认默认安装入口指向本次发行版本。正式发布不自动等于全平台生产验收完成。
|
|
43
65
|
|
|
44
66
|
正式发布命令需在对应目录由维护者执行,例如 npm 使用 `npm publish --tag latest`;pub 使用 `flutter pub publish`。这些命令属于发布动作,不能混入本地验证脚本。
|
|
@@ -79,7 +101,7 @@ npm 升级不会替换已连接的 MCP 进程。用 `ai-app-bridge --version`
|
|
|
79
101
|
已有工作结束后显式停止旧 Runtime,并在 Cursor 等客户端重连 MCP,核对 initialize
|
|
80
102
|
中的 `serverInfo.version`。工具描述仍有旧 `batch`/`smoke` 时刷新客户端缓存。
|
|
81
103
|
|
|
82
|
-
实际发布状态与验证边界见仓库 `docs/
|
|
104
|
+
实际发布状态与验证边界见仓库 `docs/EXECUTOR_DELIVERY_0.3.6.md`。
|
|
83
105
|
Android Gradle 插件的 `webSocketCaptureEnabled`、`logInstrumentationEnabled`、
|
|
84
106
|
`webViewDebuggingEnabled` 没有对应插桩实现,现明确弃用并在显式设置时输出提示;
|
|
85
107
|
旧配置仍可构建。当前有效开关是 `enabled`、`okHttpCaptureEnabled`,以及可选
|
package/docs/SCRIPT_AUTHORING.md
CHANGED
|
@@ -298,6 +298,13 @@ as `status` and `keyboard-state` whose `evidenceRefs` can be empty. References
|
|
|
298
298
|
are preserved unchanged; these metadata fields do not create a capture ref or
|
|
299
299
|
make incomplete or missing evidence valid for a device assertion.
|
|
300
300
|
|
|
301
|
+
Python uses `ctx.assert_({...})` with one dictionary argument; `assert` is a
|
|
302
|
+
Python keyword. JavaScript uses `ctx.assert({...})`. Both return a verdict that
|
|
303
|
+
the script must check. A `status` response alone supplies no UI tree evidence,
|
|
304
|
+
and `capture_page_limit` means that capture is incomplete. Drain the documented
|
|
305
|
+
capture cursor before making a completeness assertion; do not relabel a partial
|
|
306
|
+
capture as passed.
|
|
307
|
+
|
|
301
308
|
`ctx.assert` returns `{verdict, name, scope, reason?}`. Verdict is `passed`,
|
|
302
309
|
`failed`, or `inconclusive`; it does not throw or stop the program. Code must
|
|
303
310
|
check the verdict and implement the intended stopping behavior. `throw` alone
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mobileaidev/ai-app-bridge",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.6",
|
|
4
4
|
"description": "Desktop CLI and MCP server for AI App Bridge across Android, iOS, Flutter, WebView, and Web targets.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
"bin/fact-recorder.js",
|
|
27
27
|
"bin/fact-store.js",
|
|
28
28
|
"bin/feedback-probe.js",
|
|
29
|
+
"bin/ui-observation.js",
|
|
29
30
|
"bin/android-uia-xml.js",
|
|
30
31
|
"bin/android-permissions.js",
|
|
31
32
|
"bin/mmap-scan-index.js",
|
|
@@ -44,6 +45,8 @@
|
|
|
44
45
|
"bin/script",
|
|
45
46
|
"bin/intent",
|
|
46
47
|
"bin/shared-kernel",
|
|
48
|
+
"bin/executors",
|
|
49
|
+
"runtime/executors",
|
|
47
50
|
"runtime/uia",
|
|
48
51
|
"bin/observation-collector.js",
|
|
49
52
|
"bin/ios-provider.js",
|
|
@@ -63,9 +66,11 @@
|
|
|
63
66
|
"!bin/script/p9-*.js",
|
|
64
67
|
"!bin/intent/intent-device-adapter.js",
|
|
65
68
|
"docs/COMMAND_CONTRACT.md",
|
|
69
|
+
"docs/OPTIONAL_EXECUTORS.md",
|
|
66
70
|
"bin/ios-wda-port.js",
|
|
67
71
|
"bin/ios-wda-project.js",
|
|
68
72
|
"bin/ios-wda-execution.js",
|
|
73
|
+
"bin/ios-wda-startup.js",
|
|
69
74
|
"runtime/ios-wda",
|
|
70
75
|
"LICENSE",
|
|
71
76
|
"NOTICE",
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ai-app-bridge-playwright-runtime",
|
|
3
|
+
"version": "0.3.6",
|
|
4
|
+
"lockfileVersion": 3,
|
|
5
|
+
"requires": true,
|
|
6
|
+
"packages": {
|
|
7
|
+
"": {
|
|
8
|
+
"name": "ai-app-bridge-playwright-runtime",
|
|
9
|
+
"version": "0.3.6",
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"playwright": "1.63.0"
|
|
12
|
+
},
|
|
13
|
+
"engines": {
|
|
14
|
+
"node": ">=26.3.0 <27"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"node_modules/playwright": {
|
|
18
|
+
"version": "1.63.0",
|
|
19
|
+
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.63.0.tgz",
|
|
20
|
+
"integrity": "sha512-+7ziBLidS4NaNCdt57SUDT+wYmmd5fmiQejUic/kb+YsYSCPyOOE9sebzMjNmQrsnNpDJqd4WHvV/8lfKfUDUg==",
|
|
21
|
+
"license": "Apache-2.0",
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"playwright-core": "1.63.0"
|
|
24
|
+
},
|
|
25
|
+
"bin": {
|
|
26
|
+
"playwright": "cli.js"
|
|
27
|
+
},
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=20"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"node_modules/playwright-core": {
|
|
33
|
+
"version": "1.63.0",
|
|
34
|
+
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.63.0.tgz",
|
|
35
|
+
"integrity": "sha512-rYCsBF/M5HjUch52bbtVONEFjv6Xu8sm8h72dNlR5bzIE1fvC/bxgspzkjSfU+MweEMmPM8KJebG6nnyxo5mCg==",
|
|
36
|
+
"license": "Apache-2.0",
|
|
37
|
+
"bin": {
|
|
38
|
+
"playwright-core": "cli.js"
|
|
39
|
+
},
|
|
40
|
+
"engines": {
|
|
41
|
+
"node": ">=20"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
Binary file
|
|
@@ -2,21 +2,22 @@
|
|
|
2
2
|
"schemaVersion": "aab.uia.bundle.v1",
|
|
3
3
|
"mainClass": "io.github.mobileaidev.aiappbridge.uia.UiaRuntime",
|
|
4
4
|
"artifact": "ai-app-bridge-uia.jar",
|
|
5
|
-
"sha256": "
|
|
6
|
-
"minApi":
|
|
5
|
+
"sha256": "54a78985b47adf05e2db95a1c4deb25a093bbf3f2b158c75d1fb96aaaddd2c80",
|
|
6
|
+
"minApi": 25,
|
|
7
7
|
"compileApi": 35,
|
|
8
8
|
"buildTools": "36.0.0",
|
|
9
9
|
"androidJarSha256": "4566663c3876e022b4fa4ced8c8697c4ab1688267f090114fd92d027b32e619b",
|
|
10
10
|
"d8JarSha256": "4097ff9c46c185c6e7214da7fe9b1befb5adeea5cc9ca349270e0249904f9240",
|
|
11
11
|
"sources": {
|
|
12
|
-
"android/ai-app-bridge-uia/build.gradle.kts": "
|
|
13
|
-
"android/ai-app-bridge-uia/src/main/java/io/github/mobileaidev/aiappbridge/uia/
|
|
12
|
+
"android/ai-app-bridge-uia/build.gradle.kts": "f43bc522ff813c1aa47619aab10310cdebb3388db40b344855966084bd7cc4b6",
|
|
13
|
+
"android/ai-app-bridge-uia/src/main/java/io/github/mobileaidev/aiappbridge/uia/AndroidPosix.java": "d1bf8163108ef2948b298831fc7e26a244822d122c07d47160ca182dbed609c6",
|
|
14
|
+
"android/ai-app-bridge-uia/src/main/java/io/github/mobileaidev/aiappbridge/uia/DurableFiles.java": "481723be04b95a94d3b71b86f155dae4e964f750e479d64541eaf12326d4dea2",
|
|
14
15
|
"android/ai-app-bridge-uia/src/main/java/io/github/mobileaidev/aiappbridge/uia/UiaActionEngine.java": "e7cb3ba5b58d87a1024d6c0dd9eff24f07e74ca90fb716f898441255977c3e6f",
|
|
15
|
-
"android/ai-app-bridge-uia/src/main/java/io/github/mobileaidev/aiappbridge/uia/UiaConnection.java": "
|
|
16
|
+
"android/ai-app-bridge-uia/src/main/java/io/github/mobileaidev/aiappbridge/uia/UiaConnection.java": "907bc9b3439078766bff03b669cd6d0338d2b309e32403371583b03f60e5eea3",
|
|
16
17
|
"android/ai-app-bridge-uia/src/main/java/io/github/mobileaidev/aiappbridge/uia/UiaHttp.java": "43447130a1829354e50c4df4dac2a66afea3ef7d9f8fa5732d773f526fc6e72a",
|
|
17
|
-
"android/ai-app-bridge-uia/src/main/java/io/github/mobileaidev/aiappbridge/uia/UiaJournal.java": "
|
|
18
|
-
"android/ai-app-bridge-uia/src/main/java/io/github/mobileaidev/aiappbridge/uia/UiaNodes.java": "
|
|
19
|
-
"android/ai-app-bridge-uia/src/main/java/io/github/mobileaidev/aiappbridge/uia/UiaRuntime.java": "
|
|
18
|
+
"android/ai-app-bridge-uia/src/main/java/io/github/mobileaidev/aiappbridge/uia/UiaJournal.java": "718a367429c68b16f56418e36d6f73f9147508b85e424c15a8d81c061a82a892",
|
|
19
|
+
"android/ai-app-bridge-uia/src/main/java/io/github/mobileaidev/aiappbridge/uia/UiaNodes.java": "afd426091f98ff9114ac9947c1c124a1167f566cc875e2063f171c9e42a298cf",
|
|
20
|
+
"android/ai-app-bridge-uia/src/main/java/io/github/mobileaidev/aiappbridge/uia/UiaRuntime.java": "bfeb921d91977350e1ced62bbac850fcd12ee527e3d837904b4536c5ab9516a4",
|
|
20
21
|
"android/ai-app-bridge-uia/src/main/java/io/github/mobileaidev/aiappbridge/uia/Wire.java": "d54e79c5e064abf5c7b36d2ab43205b7d47cca001ec37bf9b82ab01e33cf816c"
|
|
21
22
|
}
|
|
22
23
|
}
|