@beeos-ai/device-agent 0.4.3 → 0.5.0

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.
Files changed (180) hide show
  1. package/.pi/extensions/android-tools.ts +146 -15
  2. package/dist/adapters/agent-gateway-client.d.ts +37 -0
  3. package/dist/adapters/agent-gateway-client.js +45 -0
  4. package/dist/adapters/agent-gateway-client.js.map +1 -1
  5. package/dist/adapters/agentcore-pi.d.ts +22 -0
  6. package/dist/adapters/agentcore-pi.js +48 -0
  7. package/dist/adapters/agentcore-pi.js.map +1 -1
  8. package/dist/adapters/device-android-adb.d.ts +47 -0
  9. package/dist/adapters/device-android-adb.js +50 -0
  10. package/dist/adapters/device-android-adb.js.map +1 -1
  11. package/dist/adapters/device-desktop.d.ts +12 -0
  12. package/dist/adapters/device-desktop.js +31 -0
  13. package/dist/adapters/device-desktop.js.map +1 -1
  14. package/dist/agent-runtime/adapters/base.d.ts +20 -0
  15. package/dist/agent-runtime/adapters/base.js.map +1 -1
  16. package/dist/agent-runtime/agent-runner.d.ts +4 -2
  17. package/dist/agent-runtime/agent-runner.js.map +1 -1
  18. package/dist/agent-runtime/core.d.ts +60 -0
  19. package/dist/agent-runtime/core.js +190 -9
  20. package/dist/agent-runtime/core.js.map +1 -1
  21. package/dist/agent-runtime/feedback.d.ts +56 -0
  22. package/dist/agent-runtime/feedback.js +54 -0
  23. package/dist/agent-runtime/feedback.js.map +1 -0
  24. package/dist/agent-runtime/index.d.ts +1 -0
  25. package/dist/agent-runtime/index.js +1 -0
  26. package/dist/agent-runtime/index.js.map +1 -1
  27. package/dist/agent-runtime/plan-executor.js +24 -0
  28. package/dist/agent-runtime/plan-executor.js.map +1 -1
  29. package/dist/agent-runtime/planner/base.d.ts +10 -0
  30. package/dist/agent-runtime/planner/base.js.map +1 -1
  31. package/dist/agent-runtime/planner/llm-planner.js +1 -0
  32. package/dist/agent-runtime/planner/llm-planner.js.map +1 -1
  33. package/dist/agent-runtime/planner/prompts.d.ts +3 -0
  34. package/dist/agent-runtime/planner/prompts.js +12 -0
  35. package/dist/agent-runtime/planner/prompts.js.map +1 -1
  36. package/dist/agent-runtime/reflection.d.ts +25 -6
  37. package/dist/agent-runtime/reflection.js +64 -22
  38. package/dist/agent-runtime/reflection.js.map +1 -1
  39. package/dist/agent-runtime/reflectors/policy.d.ts +10 -4
  40. package/dist/agent-runtime/reflectors/policy.js +19 -6
  41. package/dist/agent-runtime/reflectors/policy.js.map +1 -1
  42. package/dist/agent-runtime/shortcuts/fs-store.d.ts +41 -0
  43. package/dist/agent-runtime/shortcuts/fs-store.js +122 -0
  44. package/dist/agent-runtime/shortcuts/fs-store.js.map +1 -0
  45. package/dist/agent-runtime/shortcuts/in-memory-store.d.ts +20 -0
  46. package/dist/agent-runtime/shortcuts/in-memory-store.js +64 -0
  47. package/dist/agent-runtime/shortcuts/in-memory-store.js.map +1 -0
  48. package/dist/agent-runtime/shortcuts/index.d.ts +10 -0
  49. package/dist/agent-runtime/shortcuts/index.js +10 -0
  50. package/dist/agent-runtime/shortcuts/index.js.map +1 -0
  51. package/dist/agent-runtime/shortcuts/types.d.ts +69 -0
  52. package/dist/agent-runtime/shortcuts/types.js +17 -0
  53. package/dist/agent-runtime/shortcuts/types.js.map +1 -0
  54. package/dist/app/agent-host.d.ts +83 -0
  55. package/dist/app/agent-host.js +345 -32
  56. package/dist/app/agent-host.js.map +1 -1
  57. package/dist/app/session-manager.d.ts +33 -4
  58. package/dist/app/session-manager.js +27 -5
  59. package/dist/app/session-manager.js.map +1 -1
  60. package/dist/bootstrap.js +187 -3
  61. package/dist/bootstrap.js.map +1 -1
  62. package/dist/config/loader.js +22 -0
  63. package/dist/config/loader.js.map +1 -1
  64. package/dist/config/schema.d.ts +18 -0
  65. package/dist/config/schema.js +118 -0
  66. package/dist/config/schema.js.map +1 -1
  67. package/dist/inbound/acp/handlers/session.js.map +1 -1
  68. package/dist/mcp-client/client.d.ts +6 -0
  69. package/dist/mcp-client/client.js +11 -0
  70. package/dist/mcp-client/client.js.map +1 -1
  71. package/dist/mcp-client/runtime.d.ts +13 -0
  72. package/dist/orchestrator-system-prompt.d.ts +26 -0
  73. package/dist/orchestrator-system-prompt.js +118 -2
  74. package/dist/orchestrator-system-prompt.js.map +1 -1
  75. package/dist/pi-context.d.ts +50 -0
  76. package/dist/pi-context.js.map +1 -1
  77. package/dist/ports/device.d.ts +18 -0
  78. package/dist/resources/augmenter.d.ts +48 -0
  79. package/dist/resources/augmenter.js +126 -0
  80. package/dist/resources/augmenter.js.map +1 -0
  81. package/dist/resources/cache.d.ts +57 -0
  82. package/dist/resources/cache.js +107 -0
  83. package/dist/resources/cache.js.map +1 -0
  84. package/dist/resources/index.d.ts +17 -0
  85. package/dist/resources/index.js +15 -0
  86. package/dist/resources/index.js.map +1 -0
  87. package/dist/resources/lifecycle/disk-pressure.d.ts +75 -0
  88. package/dist/resources/lifecycle/disk-pressure.js +148 -0
  89. package/dist/resources/lifecycle/disk-pressure.js.map +1 -0
  90. package/dist/resources/lifecycle/index.d.ts +7 -0
  91. package/dist/resources/lifecycle/index.js +7 -0
  92. package/dist/resources/lifecycle/index.js.map +1 -0
  93. package/dist/resources/lifecycle/manager.d.ts +38 -0
  94. package/dist/resources/lifecycle/manager.js +205 -0
  95. package/dist/resources/lifecycle/manager.js.map +1 -0
  96. package/dist/resources/lifecycle/sweeper.d.ts +36 -0
  97. package/dist/resources/lifecycle/sweeper.js +179 -0
  98. package/dist/resources/lifecycle/sweeper.js.map +1 -0
  99. package/dist/resources/lifecycle/types.d.ts +180 -0
  100. package/dist/resources/lifecycle/types.js +46 -0
  101. package/dist/resources/lifecycle/types.js.map +1 -0
  102. package/dist/resources/parsers.d.ts +28 -0
  103. package/dist/resources/parsers.js +88 -0
  104. package/dist/resources/parsers.js.map +1 -0
  105. package/dist/resources/registry.d.ts +47 -0
  106. package/dist/resources/registry.js +107 -0
  107. package/dist/resources/registry.js.map +1 -0
  108. package/dist/resources/resolvers/beeos-file-resolver.d.ts +62 -0
  109. package/dist/resources/resolvers/beeos-file-resolver.js +109 -0
  110. package/dist/resources/resolvers/beeos-file-resolver.js.map +1 -0
  111. package/dist/resources/resolvers/errors.d.ts +11 -0
  112. package/dist/resources/resolvers/errors.js +23 -0
  113. package/dist/resources/resolvers/errors.js.map +1 -0
  114. package/dist/resources/resolvers/mime-table.d.ts +41 -0
  115. package/dist/resources/resolvers/mime-table.js +92 -0
  116. package/dist/resources/resolvers/mime-table.js.map +1 -0
  117. package/dist/resources/resolvers/url-resolver.d.ts +85 -0
  118. package/dist/resources/resolvers/url-resolver.js +495 -0
  119. package/dist/resources/resolvers/url-resolver.js.map +1 -0
  120. package/dist/resources/shortcut-facade.d.ts +51 -0
  121. package/dist/resources/shortcut-facade.js +72 -0
  122. package/dist/resources/shortcut-facade.js.map +1 -0
  123. package/dist/resources/telemetry.d.ts +52 -0
  124. package/dist/resources/telemetry.js +59 -0
  125. package/dist/resources/telemetry.js.map +1 -0
  126. package/dist/resources/types.d.ts +249 -0
  127. package/dist/resources/types.js +29 -0
  128. package/dist/resources/types.js.map +1 -0
  129. package/dist/shortcuts/builtins/download-to-device.d.ts +83 -0
  130. package/dist/shortcuts/builtins/download-to-device.js +125 -0
  131. package/dist/shortcuts/builtins/download-to-device.js.map +1 -0
  132. package/dist/shortcuts/builtins/find-app-package.d.ts +79 -0
  133. package/dist/shortcuts/builtins/find-app-package.js +168 -0
  134. package/dist/shortcuts/builtins/find-app-package.js.map +1 -0
  135. package/dist/shortcuts/builtins/index.d.ts +32 -0
  136. package/dist/shortcuts/builtins/index.js +37 -0
  137. package/dist/shortcuts/builtins/index.js.map +1 -0
  138. package/dist/shortcuts/builtins/open-deeplink.d.ts +68 -0
  139. package/dist/shortcuts/builtins/open-deeplink.js +142 -0
  140. package/dist/shortcuts/builtins/open-deeplink.js.map +1 -0
  141. package/dist/shortcuts/builtins/set-clipboard.d.ts +65 -0
  142. package/dist/shortcuts/builtins/set-clipboard.js +112 -0
  143. package/dist/shortcuts/builtins/set-clipboard.js.map +1 -0
  144. package/dist/shortcuts/index.d.ts +11 -0
  145. package/dist/shortcuts/index.js +11 -0
  146. package/dist/shortcuts/index.js.map +1 -0
  147. package/dist/shortcuts/registry.d.ts +56 -0
  148. package/dist/shortcuts/registry.js +70 -0
  149. package/dist/shortcuts/registry.js.map +1 -0
  150. package/dist/shortcuts/router.d.ts +91 -0
  151. package/dist/shortcuts/router.js +158 -0
  152. package/dist/shortcuts/router.js.map +1 -0
  153. package/dist/shortcuts/types.d.ts +219 -0
  154. package/dist/shortcuts/types.js +46 -0
  155. package/dist/shortcuts/types.js.map +1 -0
  156. package/package.json +3 -3
  157. package/dist/agent-runtime/skills/sqlite-store.d.ts +0 -60
  158. package/dist/agent-runtime/skills/sqlite-store.js +0 -234
  159. package/dist/agent-runtime/skills/sqlite-store.js.map +0 -1
  160. package/dist/test-lan-autoglm.d.ts +0 -7
  161. package/dist/test-lan-autoglm.js +0 -46
  162. package/dist/test-lan-autoglm.js.map +0 -1
  163. package/dist/test-mem-breakdown.d.ts +0 -1
  164. package/dist/test-mem-breakdown.js +0 -103
  165. package/dist/test-mem-breakdown.js.map +0 -1
  166. package/dist/test-mem.d.ts +0 -1
  167. package/dist/test-mem.js +0 -60
  168. package/dist/test-mem.js.map +0 -1
  169. package/dist/test-mobile-use.d.ts +0 -1
  170. package/dist/test-mobile-use.js +0 -18
  171. package/dist/test-mobile-use.js.map +0 -1
  172. package/dist/test-screenshot-loop.d.ts +0 -1
  173. package/dist/test-screenshot-loop.js +0 -43
  174. package/dist/test-screenshot-loop.js.map +0 -1
  175. package/dist/test-screenshot.d.ts +0 -1
  176. package/dist/test-screenshot.js +0 -10
  177. package/dist/test-screenshot.js.map +0 -1
  178. package/dist/test-ui-xml-dump.d.ts +0 -15
  179. package/dist/test-ui-xml-dump.js +0 -49
  180. package/dist/test-ui-xml-dump.js.map +0 -1
@@ -1,103 +0,0 @@
1
- import "dotenv/config";
2
- // Memory diagnostic: peel back each layer to see where the 200MB goes.
3
- // Run with: npx tsx --expose-gc src/test-mem-breakdown.ts
4
- function mb(n) { return (n / 1024 / 1024).toFixed(1); }
5
- function rss() { return process.memoryUsage().rss; }
6
- function heap() { return process.memoryUsage().heapUsed; }
7
- function ext() { return process.memoryUsage().external; }
8
- function snap(label, baseline) {
9
- const m = process.memoryUsage();
10
- const delta = baseline !== undefined ? ` (Δrss=${mb(m.rss - baseline)}MB)` : "";
11
- console.log(`[${label.padEnd(28)}] rss=${mb(m.rss)}MB heap=${mb(m.heapUsed)}MB ext=${mb(m.external)}MB${delta}`);
12
- return m.rss;
13
- }
14
- async function waitGc() {
15
- if (global.gc) {
16
- global.gc();
17
- global.gc();
18
- }
19
- await new Promise(r => setTimeout(r, 50));
20
- }
21
- console.log("=".repeat(78));
22
- console.log("Memory Breakdown Diagnostic");
23
- console.log("=".repeat(78));
24
- // ── Layer 0: bare node ──────────────────────────────────────────────────────
25
- const bare = snap("0. bare node (tsx loader)");
26
- // ── Layer 1: dotenv + types (already loaded at top, but measure current) ────
27
- const l1 = snap("1. + dotenv", bare);
28
- // ── Layer 2: load openai SDK ────────────────────────────────────────────────
29
- await import("openai");
30
- const l2 = snap("2. + openai sdk", l1);
31
- // ── Layer 3: load sharp (triggers libvips mmap) ─────────────────────────────
32
- const sharpMod = await import("sharp");
33
- const l3 = snap("3. + sharp (libvips mmap)", l2);
34
- // ── Layer 4: load our Device layer ──────────────────────────────────────────
35
- const { AndroidDevice } = await import("./device/android.js");
36
- const l4 = snap("4. + device/android", l3);
37
- // ── Layer 5: instantiate device + check adb exists ──────────────────────────
38
- const dev = new AndroidDevice(process.env.GUI_AGENT_DEVICE_ID);
39
- const l5 = snap("5. + new AndroidDevice()", l4);
40
- // ── Layer 6: load agent + model adapters ────────────────────────────────────
41
- const { Agent } = await import("./agent.js");
42
- const { OpenAIClient } = await import("./model/client.js");
43
- await import("./model/adapters/index.js");
44
- const l6 = snap("6. + agent + all adapters", l5);
45
- // ── Layer 7: instantiate model client (openai client w/ keep-alive) ─────────
46
- const client = new OpenAIClient({ adapter: process.env.GUI_AGENT_ADAPTER });
47
- const l7 = snap("7. + new OpenAIClient()", l6);
48
- // ── Layer 8: take one screenshot (triggers sharp pipeline + buffer) ─────────
49
- await dev.takeScreenshot();
50
- await waitGc();
51
- const l8 = snap("8. + 1 screenshot (post-gc)", l7);
52
- // ── Layer 9: take 5 screenshots back-to-back ────────────────────────────────
53
- let peak9 = l8;
54
- for (let i = 0; i < 5; i++) {
55
- await dev.takeScreenshot();
56
- peak9 = Math.max(peak9, rss());
57
- }
58
- await waitGc();
59
- const l9 = snap("9. + 5 screenshots (post-gc)", l8);
60
- console.log(` └─ intra-loop peak rss=${mb(peak9)}MB`);
61
- // ── Layer 10: instantiate agent ─────────────────────────────────────────────
62
- const agent = new Agent(client, dev, { maxSteps: 3, verbose: false });
63
- const l10 = snap("10. + new Agent()", l9);
64
- // ── Layer 11: run 1 full agent step (includes API call if connected) ────────
65
- let peak11 = l10;
66
- const before = rss();
67
- try {
68
- await agent.run("打开系统设置");
69
- peak11 = Math.max(peak11, rss());
70
- }
71
- catch (e) {
72
- // ignore — we just want memory delta
73
- }
74
- await waitGc();
75
- const l11 = snap("11. + agent.run() (post-gc)", l10);
76
- console.log(` └─ intra-run peak rss=${mb(peak11)}MB (Δ from pre-run=${mb(peak11 - before)}MB)`);
77
- // ── Summary ─────────────────────────────────────────────────────────────────
78
- console.log("=".repeat(78));
79
- console.log("Component Breakdown (incremental RSS additions, MB)");
80
- console.log("=".repeat(78));
81
- const rows = [
82
- ["Node.js + tsx loader baseline", bare],
83
- ["+ dotenv", l1 - bare],
84
- ["+ openai SDK", l2 - l1],
85
- ["+ sharp (libvips native mmap)", l3 - l2],
86
- ["+ device layer (adb client)", l4 - l3],
87
- ["+ AndroidDevice instance", l5 - l4],
88
- ["+ agent + all model adapters", l6 - l5],
89
- ["+ OpenAI client (keep-alive pool)", l7 - l6],
90
- ["+ first screenshot (warm cache)", l8 - l7],
91
- ["+ 4 more screenshots", l9 - l8],
92
- ["+ Agent instance", l10 - l9],
93
- ["+ agent.run() full cycle", l11 - l10],
94
- ];
95
- for (const [label, delta] of rows) {
96
- console.log(` ${label.padEnd(42)} ${(delta / 1024 / 1024).toFixed(1).padStart(6)} MB`);
97
- }
98
- console.log("-".repeat(78));
99
- console.log(` TOTAL steady-state RSS: ${mb(l11).padStart(6)} MB`);
100
- console.log(` Peak RSS during run: ${mb(peak11).padStart(6)} MB (transient request buffer)`);
101
- console.log("=".repeat(78));
102
- process.exit(0);
103
- //# sourceMappingURL=test-mem-breakdown.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-mem-breakdown.js","sourceRoot":"","sources":["../src/test-mem-breakdown.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- import "dotenv/config";
package/dist/test-mem.js DELETED
@@ -1,60 +0,0 @@
1
- import "dotenv/config";
2
- import { mobileUse } from "./api.js";
3
- const task = process.env.TASK ?? "打开系统设置,告诉我 Android 版本号";
4
- const samples = [];
5
- const start = Date.now();
6
- function snap() {
7
- const m = process.memoryUsage();
8
- return {
9
- t: Date.now() - start,
10
- rss: m.rss,
11
- heapUsed: m.heapUsed,
12
- heapTotal: m.heapTotal,
13
- external: m.external,
14
- arrayBuffers: m.arrayBuffers,
15
- };
16
- }
17
- function fmt(n) { return (n / 1024 / 1024).toFixed(1); }
18
- function logSample(label, s) {
19
- console.log(`[mem t=${(s.t / 1000).toFixed(1)}s ${label.padEnd(12)}] ` +
20
- `rss=${fmt(s.rss)}MB heapUsed=${fmt(s.heapUsed)}MB heapTotal=${fmt(s.heapTotal)}MB ` +
21
- `ext=${fmt(s.external)}MB arrBuf=${fmt(s.arrayBuffers)}MB`);
22
- }
23
- const initial = snap();
24
- logSample("init", initial);
25
- // 200ms sampling loop in background
26
- const interval = setInterval(() => samples.push(snap()), 200);
27
- interval.unref();
28
- console.log(`[test-mobile-use] task = ${task}`);
29
- console.log("=".repeat(70));
30
- mobileUse(task)
31
- .then((result) => {
32
- const done = snap();
33
- console.log("=".repeat(70));
34
- logSample("done", done);
35
- // Stats
36
- if (global.gc) {
37
- global.gc();
38
- }
39
- const afterGc = snap();
40
- if (global.gc)
41
- logSample("post-gc", afterGc);
42
- const peakRss = samples.reduce((m, s) => Math.max(m, s.rss), initial.rss);
43
- const peakHeap = samples.reduce((m, s) => Math.max(m, s.heapUsed), initial.heapUsed);
44
- const peakExt = samples.reduce((m, s) => Math.max(m, s.external), initial.external);
45
- console.log("-".repeat(70));
46
- console.log(`[summary] samples=${samples.length} over ${(done.t / 1000).toFixed(1)}s`);
47
- console.log(`[summary] peak rss = ${fmt(peakRss)} MB`);
48
- console.log(`[summary] peak heapUsed = ${fmt(peakHeap)} MB`);
49
- console.log(`[summary] peak external = ${fmt(peakExt)} MB (sharp native buffers live here)`);
50
- console.log(`[summary] growth: rss ${fmt(done.rss - initial.rss)} MB, heapUsed ${fmt(done.heapUsed - initial.heapUsed)} MB`);
51
- console.log("\n[result]", result);
52
- process.exit(0);
53
- })
54
- .catch((e) => {
55
- const done = snap();
56
- logSample("error", done);
57
- console.error("[test-mobile-use] error:", e);
58
- process.exit(1);
59
- });
60
- //# sourceMappingURL=test-mem.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-mem.js","sourceRoot":"","sources":["../src/test-mem.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- import "dotenv/config";
@@ -1,18 +0,0 @@
1
- import "dotenv/config";
2
- import { mobileUse } from "./api.js";
3
- const task = process.env.TASK ?? "打开系统设置,然后告诉我 Android 版本号是多少";
4
- const maxSteps = parseInt(process.env.GUI_AGENT_MAX_STEPS ?? "30", 10);
5
- console.log(`[test-mobile-use] task = ${task}`);
6
- console.log("=".repeat(60));
7
- mobileUse(task, maxSteps)
8
- .then((result) => {
9
- console.log("=".repeat(60));
10
- console.log("[test-mobile-use] result:", result);
11
- process.exit(0);
12
- })
13
- .catch((e) => {
14
- console.error("=".repeat(60));
15
- console.error("[test-mobile-use] error:", e);
16
- process.exit(1);
17
- });
18
- //# sourceMappingURL=test-mobile-use.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-mobile-use.js","sourceRoot":"","sources":["../src/test-mobile-use.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,6BAA6B,CAAC;AAC/D,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;AAEvE,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;AAChD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AAE5B,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC;KACtB,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;IACf,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC;IACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;KACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IACX,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- import "dotenv/config";
@@ -1,43 +0,0 @@
1
- import "dotenv/config";
2
- import { AndroidDevice } from "./device/android.js";
3
- const ITER = parseInt(process.env.ITER ?? "100", 10);
4
- const dev = new AndroidDevice(process.env.GUI_AGENT_DEVICE_ID);
5
- function fmt(n) { return (n / 1024 / 1024).toFixed(1); }
6
- function snap(label, extra = "") {
7
- const m = process.memoryUsage();
8
- console.log(`[${label.padEnd(20)}] rss=${fmt(m.rss)}MB heap=${fmt(m.heapUsed)}/${fmt(m.heapTotal)}MB ` +
9
- `ext=${fmt(m.external)}MB arrBuf=${fmt(m.arrayBuffers)}MB ${extra}`);
10
- }
11
- snap("boot");
12
- // Prime sharp / adb
13
- await dev.takeScreenshot();
14
- snap("after 1 ss");
15
- let totalB64 = 0;
16
- let maxRss = 0;
17
- const t0 = Date.now();
18
- for (let i = 0; i < ITER; i++) {
19
- const ss = await dev.takeScreenshot();
20
- totalB64 += ss.base64Data.length;
21
- const rss = process.memoryUsage().rss;
22
- if (rss > maxRss)
23
- maxRss = rss;
24
- if (i % 10 === 9) {
25
- snap(`iter ${i + 1}`, `avg b64=${Math.round(totalB64 / (i + 1) / 1024)}KB`);
26
- }
27
- }
28
- const dur = (Date.now() - t0) / 1000;
29
- console.log("-".repeat(70));
30
- console.log(`[result] iterations=${ITER}, total ${dur.toFixed(1)}s, avg ${(dur * 1000 / ITER).toFixed(0)}ms/screenshot`);
31
- console.log(`[result] avg base64 length = ${Math.round(totalB64 / ITER / 1024)} KB`);
32
- console.log(`[result] peak RSS observed = ${fmt(maxRss)} MB`);
33
- snap("before gc");
34
- if (global.gc) {
35
- global.gc();
36
- global.gc();
37
- }
38
- snap("after gc");
39
- // Wait a bit for native to release
40
- await new Promise((r) => setTimeout(r, 1000));
41
- snap("after +1s wait");
42
- process.exit(0);
43
- //# sourceMappingURL=test-screenshot-loop.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-screenshot-loop.js","sourceRoot":"","sources":["../src/test-screenshot-loop.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- import "dotenv/config";
@@ -1,10 +0,0 @@
1
- import "dotenv/config";
2
- import { AndroidDevice } from "./device/android.js";
3
- const dev = new AndroidDevice(process.env.GUI_AGENT_DEVICE_ID);
4
- const t0 = Date.now();
5
- const ss = await dev.takeScreenshot();
6
- const t1 = Date.now();
7
- console.log(`screen w=${ss.width} h=${ss.height}`);
8
- console.log(`base64 length=${ss.base64Data.length} (~${Math.round(ss.base64Data.length * 3 / 4 / 1024)} KB binary)`);
9
- console.log(`elapsed=${t1 - t0}ms`);
10
- //# sourceMappingURL=test-screenshot.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-screenshot.js","sourceRoot":"","sources":["../src/test-screenshot.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,GAAG,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AAC/D,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACtB,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,cAAc,EAAE,CAAC;AACtC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACtB,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;AACnD,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,UAAU,CAAC,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;AACrH,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC"}
@@ -1,15 +0,0 @@
1
- /**
2
- * Dump current-screen UI XML for debugging `ui_xml` parsing.
3
- *
4
- * Writes under `.debug/ui-xml-dumps/` (override with UI_XML_DUMP_DIR):
5
- * - `<stamp>-raw.xml` — full uiautomator dump (no truncation)
6
- * - `<stamp>-tool.txt` — exact string `ui_xml` would return (same truncation / JSON rules)
7
- * - `<stamp>-parsed.json` — `{ query, nodes }` from {@link searchUiXmlNodes}
8
- *
9
- * Usage:
10
- * npx tsx src/test-ui-xml-dump.ts # query = "" → parsed.json lists all nodes (can be large)
11
- * npx tsx src/test-ui-xml-dump.ts 设置 # filter substring
12
- *
13
- * Requires adb + device (GUI_AGENT_DEVICE_ID if multiple).
14
- */
15
- import "dotenv/config";
@@ -1,49 +0,0 @@
1
- /**
2
- * Dump current-screen UI XML for debugging `ui_xml` parsing.
3
- *
4
- * Writes under `.debug/ui-xml-dumps/` (override with UI_XML_DUMP_DIR):
5
- * - `<stamp>-raw.xml` — full uiautomator dump (no truncation)
6
- * - `<stamp>-tool.txt` — exact string `ui_xml` would return (same truncation / JSON rules)
7
- * - `<stamp>-parsed.json` — `{ query, nodes }` from {@link searchUiXmlNodes}
8
- *
9
- * Usage:
10
- * npx tsx src/test-ui-xml-dump.ts # query = "" → parsed.json lists all nodes (can be large)
11
- * npx tsx src/test-ui-xml-dump.ts 设置 # filter substring
12
- *
13
- * Requires adb + device (GUI_AGENT_DEVICE_ID if multiple).
14
- */
15
- import "dotenv/config";
16
- import { mkdirSync, writeFileSync } from "node:fs";
17
- import { join } from "node:path";
18
- import { AndroidDevice } from "./device/android.js";
19
- import { formatUiXmlToolOutput, searchUiXmlNodes } from "./device/ui-xml.js";
20
- const OUT_DIR = process.env.UI_XML_DUMP_DIR ?? join(process.cwd(), ".debug", "ui-xml-dumps");
21
- function stamp() {
22
- return new Date().toISOString().replace(/[:.]/g, "-");
23
- }
24
- async function main() {
25
- const query = process.argv.slice(2).join(" ").trim();
26
- const device = new AndroidDevice(process.env.GUI_AGENT_DEVICE_ID ?? undefined);
27
- const xml = await device.getUiXml();
28
- if (!xml) {
29
- console.error("Failed to read UI XML (adb / uiautomator). Check device connection.");
30
- process.exit(1);
31
- }
32
- mkdirSync(OUT_DIR, { recursive: true });
33
- const id = stamp();
34
- const base = join(OUT_DIR, id);
35
- writeFileSync(`${base}-raw.xml`, xml, "utf-8");
36
- const toolText = formatUiXmlToolOutput(xml, query || undefined);
37
- writeFileSync(`${base}-tool.txt`, toolText, "utf-8");
38
- const nodes = searchUiXmlNodes(xml, query);
39
- writeFileSync(`${base}-parsed.json`, `${JSON.stringify({ query: query || null, nodeCount: nodes.length, nodes }, null, 2)}\n`, "utf-8");
40
- console.log(`Wrote:
41
- ${base}-raw.xml (${xml.length} chars)
42
- ${base}-tool.txt (${toolText.length} chars, same as ui_xml tool output)
43
- ${base}-parsed.json (${nodes.length} nodes${query ? `, query=${JSON.stringify(query)}` : ", query=null (all nodes)"})`);
44
- }
45
- main().catch((e) => {
46
- console.error(e);
47
- process.exit(1);
48
- });
49
- //# sourceMappingURL=test-ui-xml-dump.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-ui-xml-dump.js","sourceRoot":"","sources":["../src/test-ui-xml-dump.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE7E,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;AAE7F,SAAS,KAAK;IACZ,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACxD,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACrD,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,SAAS,CAAC,CAAC;IAC/E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;IACpC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAE/B,aAAa,CAAC,GAAG,IAAI,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAE/C,MAAM,QAAQ,GAAG,qBAAqB,CAAC,GAAG,EAAE,KAAK,IAAI,SAAS,CAAC,CAAC;IAChE,aAAa,CAAC,GAAG,IAAI,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAErD,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC3C,aAAa,CACX,GAAG,IAAI,cAAc,EACrB,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EACxF,OAAO,CACR,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC;IACV,IAAI,eAAe,GAAG,CAAC,MAAM;IAC7B,IAAI,eAAe,QAAQ,CAAC,MAAM;IAClC,IAAI,iBAAiB,KAAK,CAAC,MAAM,SAAS,KAAK,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,0BAA0B,GAAG,CAAC,CAAC;AAC1H,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}