deepadb 1.0.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 (247) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +631 -0
  3. package/build/bridge/adb-bridge.d.ts +65 -0
  4. package/build/bridge/adb-bridge.d.ts.map +1 -0
  5. package/build/bridge/adb-bridge.js +164 -0
  6. package/build/bridge/adb-bridge.js.map +1 -0
  7. package/build/bridge/device-manager.d.ts +41 -0
  8. package/build/bridge/device-manager.d.ts.map +1 -0
  9. package/build/bridge/device-manager.js +109 -0
  10. package/build/bridge/device-manager.js.map +1 -0
  11. package/build/bridge/local-bridge.d.ts +92 -0
  12. package/build/bridge/local-bridge.d.ts.map +1 -0
  13. package/build/bridge/local-bridge.js +345 -0
  14. package/build/bridge/local-bridge.js.map +1 -0
  15. package/build/config/config.d.ts +39 -0
  16. package/build/config/config.d.ts.map +1 -0
  17. package/build/config/config.js +84 -0
  18. package/build/config/config.js.map +1 -0
  19. package/build/graphql-api.d.ts +36 -0
  20. package/build/graphql-api.d.ts.map +1 -0
  21. package/build/graphql-api.js +296 -0
  22. package/build/graphql-api.js.map +1 -0
  23. package/build/http-transport.d.ts +26 -0
  24. package/build/http-transport.d.ts.map +1 -0
  25. package/build/http-transport.js +105 -0
  26. package/build/http-transport.js.map +1 -0
  27. package/build/index.d.ts +14 -0
  28. package/build/index.d.ts.map +1 -0
  29. package/build/index.js +66 -0
  30. package/build/index.js.map +1 -0
  31. package/build/middleware/chipset.d.ts +29 -0
  32. package/build/middleware/chipset.d.ts.map +1 -0
  33. package/build/middleware/chipset.js +123 -0
  34. package/build/middleware/chipset.js.map +1 -0
  35. package/build/middleware/cleanup.d.ts +24 -0
  36. package/build/middleware/cleanup.d.ts.map +1 -0
  37. package/build/middleware/cleanup.js +53 -0
  38. package/build/middleware/cleanup.js.map +1 -0
  39. package/build/middleware/fetch-utils.d.ts +19 -0
  40. package/build/middleware/fetch-utils.d.ts.map +1 -0
  41. package/build/middleware/fetch-utils.js +64 -0
  42. package/build/middleware/fetch-utils.js.map +1 -0
  43. package/build/middleware/logger.d.ts +17 -0
  44. package/build/middleware/logger.d.ts.map +1 -0
  45. package/build/middleware/logger.js +38 -0
  46. package/build/middleware/logger.js.map +1 -0
  47. package/build/middleware/output-processor.d.ts +57 -0
  48. package/build/middleware/output-processor.d.ts.map +1 -0
  49. package/build/middleware/output-processor.js +162 -0
  50. package/build/middleware/output-processor.js.map +1 -0
  51. package/build/middleware/sanitize.d.ts +30 -0
  52. package/build/middleware/sanitize.d.ts.map +1 -0
  53. package/build/middleware/sanitize.js +46 -0
  54. package/build/middleware/sanitize.js.map +1 -0
  55. package/build/middleware/security.d.ts +52 -0
  56. package/build/middleware/security.d.ts.map +1 -0
  57. package/build/middleware/security.js +123 -0
  58. package/build/middleware/security.js.map +1 -0
  59. package/build/middleware/ui-dump.d.ts +23 -0
  60. package/build/middleware/ui-dump.d.ts.map +1 -0
  61. package/build/middleware/ui-dump.js +59 -0
  62. package/build/middleware/ui-dump.js.map +1 -0
  63. package/build/server.d.ts +18 -0
  64. package/build/server.d.ts.map +1 -0
  65. package/build/server.js +133 -0
  66. package/build/server.js.map +1 -0
  67. package/build/tool-context.d.ts +22 -0
  68. package/build/tool-context.d.ts.map +1 -0
  69. package/build/tool-context.js +9 -0
  70. package/build/tool-context.js.map +1 -0
  71. package/build/tools/accessibility.d.ts +10 -0
  72. package/build/tools/accessibility.d.ts.map +1 -0
  73. package/build/tools/accessibility.js +259 -0
  74. package/build/tools/accessibility.js.map +1 -0
  75. package/build/tools/at-commands.d.ts +20 -0
  76. package/build/tools/at-commands.d.ts.map +1 -0
  77. package/build/tools/at-commands.js +378 -0
  78. package/build/tools/at-commands.js.map +1 -0
  79. package/build/tools/baseband.d.ts +15 -0
  80. package/build/tools/baseband.d.ts.map +1 -0
  81. package/build/tools/baseband.js +323 -0
  82. package/build/tools/baseband.js.map +1 -0
  83. package/build/tools/build.d.ts +6 -0
  84. package/build/tools/build.d.ts.map +1 -0
  85. package/build/tools/build.js +80 -0
  86. package/build/tools/build.js.map +1 -0
  87. package/build/tools/ci.d.ts +9 -0
  88. package/build/tools/ci.d.ts.map +1 -0
  89. package/build/tools/ci.js +163 -0
  90. package/build/tools/ci.js.map +1 -0
  91. package/build/tools/control.d.ts +10 -0
  92. package/build/tools/control.d.ts.map +1 -0
  93. package/build/tools/control.js +197 -0
  94. package/build/tools/control.js.map +1 -0
  95. package/build/tools/device-farm.d.ts +10 -0
  96. package/build/tools/device-farm.d.ts.map +1 -0
  97. package/build/tools/device-farm.js +140 -0
  98. package/build/tools/device-farm.js.map +1 -0
  99. package/build/tools/device-profiles.d.ts +16 -0
  100. package/build/tools/device-profiles.d.ts.map +1 -0
  101. package/build/tools/device-profiles.js +272 -0
  102. package/build/tools/device-profiles.js.map +1 -0
  103. package/build/tools/device.d.ts +6 -0
  104. package/build/tools/device.d.ts.map +1 -0
  105. package/build/tools/device.js +72 -0
  106. package/build/tools/device.js.map +1 -0
  107. package/build/tools/diagnostics.d.ts +7 -0
  108. package/build/tools/diagnostics.d.ts.map +1 -0
  109. package/build/tools/diagnostics.js +153 -0
  110. package/build/tools/diagnostics.js.map +1 -0
  111. package/build/tools/emulator.d.ts +9 -0
  112. package/build/tools/emulator.d.ts.map +1 -0
  113. package/build/tools/emulator.js +223 -0
  114. package/build/tools/emulator.js.map +1 -0
  115. package/build/tools/files.d.ts +6 -0
  116. package/build/tools/files.d.ts.map +1 -0
  117. package/build/tools/files.js +78 -0
  118. package/build/tools/files.js.map +1 -0
  119. package/build/tools/firmware-analysis.d.ts +24 -0
  120. package/build/tools/firmware-analysis.d.ts.map +1 -0
  121. package/build/tools/firmware-analysis.js +623 -0
  122. package/build/tools/firmware-analysis.js.map +1 -0
  123. package/build/tools/forwarding.d.ts +7 -0
  124. package/build/tools/forwarding.d.ts.map +1 -0
  125. package/build/tools/forwarding.js +64 -0
  126. package/build/tools/forwarding.js.map +1 -0
  127. package/build/tools/health.d.ts +7 -0
  128. package/build/tools/health.d.ts.map +1 -0
  129. package/build/tools/health.js +112 -0
  130. package/build/tools/health.js.map +1 -0
  131. package/build/tools/logcat-watch.d.ts +11 -0
  132. package/build/tools/logcat-watch.d.ts.map +1 -0
  133. package/build/tools/logcat-watch.js +209 -0
  134. package/build/tools/logcat-watch.js.map +1 -0
  135. package/build/tools/logs.d.ts +6 -0
  136. package/build/tools/logs.d.ts.map +1 -0
  137. package/build/tools/logs.js +83 -0
  138. package/build/tools/logs.js.map +1 -0
  139. package/build/tools/mirroring.d.ts +14 -0
  140. package/build/tools/mirroring.d.ts.map +1 -0
  141. package/build/tools/mirroring.js +243 -0
  142. package/build/tools/mirroring.js.map +1 -0
  143. package/build/tools/multi-device.d.ts +9 -0
  144. package/build/tools/multi-device.d.ts.map +1 -0
  145. package/build/tools/multi-device.js +138 -0
  146. package/build/tools/multi-device.js.map +1 -0
  147. package/build/tools/network-capture.d.ts +10 -0
  148. package/build/tools/network-capture.d.ts.map +1 -0
  149. package/build/tools/network-capture.js +143 -0
  150. package/build/tools/network-capture.js.map +1 -0
  151. package/build/tools/network-discovery.d.ts +21 -0
  152. package/build/tools/network-discovery.d.ts.map +1 -0
  153. package/build/tools/network-discovery.js +284 -0
  154. package/build/tools/network-discovery.js.map +1 -0
  155. package/build/tools/ota-monitor.d.ts +16 -0
  156. package/build/tools/ota-monitor.d.ts.map +1 -0
  157. package/build/tools/ota-monitor.js +211 -0
  158. package/build/tools/ota-monitor.js.map +1 -0
  159. package/build/tools/packages.d.ts +6 -0
  160. package/build/tools/packages.d.ts.map +1 -0
  161. package/build/tools/packages.js +237 -0
  162. package/build/tools/packages.js.map +1 -0
  163. package/build/tools/plugins.d.ts +22 -0
  164. package/build/tools/plugins.d.ts.map +1 -0
  165. package/build/tools/plugins.js +118 -0
  166. package/build/tools/plugins.js.map +1 -0
  167. package/build/tools/prompts.d.ts +9 -0
  168. package/build/tools/prompts.d.ts.map +1 -0
  169. package/build/tools/prompts.js +94 -0
  170. package/build/tools/prompts.js.map +1 -0
  171. package/build/tools/qemu.d.ts +18 -0
  172. package/build/tools/qemu.d.ts.map +1 -0
  173. package/build/tools/qemu.js +791 -0
  174. package/build/tools/qemu.js.map +1 -0
  175. package/build/tools/registry.d.ts +13 -0
  176. package/build/tools/registry.d.ts.map +1 -0
  177. package/build/tools/registry.js +221 -0
  178. package/build/tools/registry.js.map +1 -0
  179. package/build/tools/regression.d.ts +10 -0
  180. package/build/tools/regression.d.ts.map +1 -0
  181. package/build/tools/regression.js +215 -0
  182. package/build/tools/regression.js.map +1 -0
  183. package/build/tools/resources.d.ts +10 -0
  184. package/build/tools/resources.d.ts.map +1 -0
  185. package/build/tools/resources.js +77 -0
  186. package/build/tools/resources.js.map +1 -0
  187. package/build/tools/ril-intercept.d.ts +24 -0
  188. package/build/tools/ril-intercept.d.ts.map +1 -0
  189. package/build/tools/ril-intercept.js +273 -0
  190. package/build/tools/ril-intercept.js.map +1 -0
  191. package/build/tools/screen-record.d.ts +9 -0
  192. package/build/tools/screen-record.d.ts.map +1 -0
  193. package/build/tools/screen-record.js +95 -0
  194. package/build/tools/screen-record.js.map +1 -0
  195. package/build/tools/screenshot-diff.d.ts +13 -0
  196. package/build/tools/screenshot-diff.d.ts.map +1 -0
  197. package/build/tools/screenshot-diff.js +370 -0
  198. package/build/tools/screenshot-diff.js.map +1 -0
  199. package/build/tools/selinux-audit.d.ts +17 -0
  200. package/build/tools/selinux-audit.d.ts.map +1 -0
  201. package/build/tools/selinux-audit.js +301 -0
  202. package/build/tools/selinux-audit.js.map +1 -0
  203. package/build/tools/shell.d.ts +6 -0
  204. package/build/tools/shell.d.ts.map +1 -0
  205. package/build/tools/shell.js +63 -0
  206. package/build/tools/shell.js.map +1 -0
  207. package/build/tools/snapshot.d.ts +9 -0
  208. package/build/tools/snapshot.d.ts.map +1 -0
  209. package/build/tools/snapshot.js +192 -0
  210. package/build/tools/snapshot.js.map +1 -0
  211. package/build/tools/split-apk.d.ts +13 -0
  212. package/build/tools/split-apk.d.ts.map +1 -0
  213. package/build/tools/split-apk.js +229 -0
  214. package/build/tools/split-apk.js.map +1 -0
  215. package/build/tools/test-gen.d.ts +14 -0
  216. package/build/tools/test-gen.d.ts.map +1 -0
  217. package/build/tools/test-gen.js +252 -0
  218. package/build/tools/test-gen.js.map +1 -0
  219. package/build/tools/testing.d.ts +9 -0
  220. package/build/tools/testing.d.ts.map +1 -0
  221. package/build/tools/testing.js +144 -0
  222. package/build/tools/testing.js.map +1 -0
  223. package/build/tools/thermal-power.d.ts +19 -0
  224. package/build/tools/thermal-power.d.ts.map +1 -0
  225. package/build/tools/thermal-power.js +330 -0
  226. package/build/tools/thermal-power.js.map +1 -0
  227. package/build/tools/ui.d.ts +6 -0
  228. package/build/tools/ui.d.ts.map +1 -0
  229. package/build/tools/ui.js +266 -0
  230. package/build/tools/ui.js.map +1 -0
  231. package/build/tools/wireless.d.ts +7 -0
  232. package/build/tools/wireless.d.ts.map +1 -0
  233. package/build/tools/wireless.js +78 -0
  234. package/build/tools/wireless.js.map +1 -0
  235. package/build/tools/workflow-market.d.ts +17 -0
  236. package/build/tools/workflow-market.d.ts.map +1 -0
  237. package/build/tools/workflow-market.js +237 -0
  238. package/build/tools/workflow-market.js.map +1 -0
  239. package/build/tools/workflow.d.ts +32 -0
  240. package/build/tools/workflow.d.ts.map +1 -0
  241. package/build/tools/workflow.js +374 -0
  242. package/build/tools/workflow.js.map +1 -0
  243. package/build/ws-transport.d.ts +30 -0
  244. package/build/ws-transport.d.ts.map +1 -0
  245. package/build/ws-transport.js +133 -0
  246. package/build/ws-transport.js.map +1 -0
  247. package/package.json +37 -0
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Accessibility Auditing Tools — Automated a11y checks on the UI hierarchy.
3
+ *
4
+ * Extends the uiautomator dump analysis to flag common accessibility issues:
5
+ * missing content-descriptions, undersized touch targets, duplicate descriptions,
6
+ * and elements missing focusability. Generates structured audit reports.
7
+ */
8
+ import { z } from "zod";
9
+ import { OutputProcessor } from "../middleware/output-processor.js";
10
+ import { captureUiDump, UI_ATTR_REGEXES } from "../middleware/ui-dump.js";
11
+ /** Minimum touch target size in dp (WCAG / Material Design guideline). */
12
+ const MIN_TOUCH_TARGET_DP = 48;
13
+ /** Default screen density for dp conversion (mdpi baseline). */
14
+ const DEFAULT_DENSITY = 160;
15
+ const ATTR_REGEXES = UI_ATTR_REGEXES;
16
+ function parseElements(xml) {
17
+ const elements = [];
18
+ const nodeRegex = /<node\s+([^>]+)\/?>/g;
19
+ let match;
20
+ while ((match = nodeRegex.exec(xml)) !== null) {
21
+ const attrs = match[1];
22
+ const get = (name) => {
23
+ const regex = ATTR_REGEXES[name];
24
+ if (!regex)
25
+ return "";
26
+ const m = attrs.match(regex);
27
+ return m ? m[1] : "";
28
+ };
29
+ const boundsStr = get("bounds");
30
+ const boundsMatch = boundsStr.match(/\[(\d+),(\d+)\]\[(\d+),(\d+)\]/);
31
+ if (!boundsMatch)
32
+ continue;
33
+ const left = parseInt(boundsMatch[1], 10);
34
+ const top = parseInt(boundsMatch[2], 10);
35
+ const right = parseInt(boundsMatch[3], 10);
36
+ const bottom = parseInt(boundsMatch[4], 10);
37
+ elements.push({
38
+ className: get("class").replace("android.widget.", "").replace("android.view.", ""),
39
+ text: get("text"),
40
+ contentDesc: get("content-desc"),
41
+ resourceId: get("resource-id"),
42
+ clickable: get("clickable") === "true",
43
+ focusable: get("focusable") === "true",
44
+ enabled: get("enabled") !== "false",
45
+ bounds: { left, top, right, bottom },
46
+ widthPx: right - left,
47
+ heightPx: bottom - top,
48
+ });
49
+ }
50
+ return elements;
51
+ }
52
+ function elementLabel(el) {
53
+ const parts = [el.className];
54
+ if (el.resourceId)
55
+ parts.push(`id:${el.resourceId}`);
56
+ if (el.text)
57
+ parts.push(`"${el.text.substring(0, 30)}"`);
58
+ return parts.join(" ");
59
+ }
60
+ function runAudit(elements, density) {
61
+ const issues = [];
62
+ const dpScale = density / DEFAULT_DENSITY;
63
+ const descriptionsSeen = new Map();
64
+ for (const el of elements) {
65
+ const label = elementLabel(el);
66
+ // Rule 1: Interactive elements must have a label (text or content-desc)
67
+ if (el.clickable && !el.text && !el.contentDesc) {
68
+ issues.push({
69
+ severity: "error",
70
+ rule: "missing-label",
71
+ message: "Clickable element has no text or content-description. Screen readers cannot announce this element.",
72
+ element: label,
73
+ });
74
+ }
75
+ // Rule 2: ImageView/ImageButton should have content-desc
76
+ if ((el.className.includes("Image") || el.className.includes("Icon")) && !el.contentDesc && !el.text) {
77
+ issues.push({
78
+ severity: "warning",
79
+ rule: "image-no-desc",
80
+ message: "Image element has no content-description. Decorative images should be marked not-important-for-accessibility.",
81
+ element: label,
82
+ });
83
+ }
84
+ // Rule 3: Touch target size check
85
+ if (el.clickable && el.widthPx > 0 && el.heightPx > 0) {
86
+ const widthDp = el.widthPx / dpScale;
87
+ const heightDp = el.heightPx / dpScale;
88
+ if (widthDp < MIN_TOUCH_TARGET_DP || heightDp < MIN_TOUCH_TARGET_DP) {
89
+ issues.push({
90
+ severity: "warning",
91
+ rule: "small-touch-target",
92
+ message: `Touch target is ${widthDp.toFixed(0)}x${heightDp.toFixed(0)}dp (minimum ${MIN_TOUCH_TARGET_DP}x${MIN_TOUCH_TARGET_DP}dp).`,
93
+ element: label,
94
+ });
95
+ }
96
+ }
97
+ // Rule 4: Clickable elements should be focusable
98
+ if (el.clickable && !el.focusable) {
99
+ issues.push({
100
+ severity: "warning",
101
+ rule: "clickable-not-focusable",
102
+ message: "Element is clickable but not focusable. Keyboard and switch navigation may not reach it.",
103
+ element: label,
104
+ });
105
+ }
106
+ // Rule 5: Duplicate content-descriptions
107
+ if (el.contentDesc) {
108
+ const count = (descriptionsSeen.get(el.contentDesc) ?? 0) + 1;
109
+ descriptionsSeen.set(el.contentDesc, count);
110
+ if (count === 2) {
111
+ issues.push({
112
+ severity: "warning",
113
+ rule: "duplicate-desc",
114
+ message: `Content-description "${el.contentDesc.substring(0, 40)}" is used by multiple elements. Screen reader users cannot distinguish them.`,
115
+ element: label,
116
+ });
117
+ }
118
+ }
119
+ }
120
+ return issues;
121
+ }
122
+ export function registerAccessibilityTools(ctx) {
123
+ ctx.server.tool("adb_a11y_audit", "Run an automated accessibility audit on the current screen. Checks for: missing labels on interactive elements, undersized touch targets (<48dp), images without content-descriptions, clickable elements missing focusability, and duplicate descriptions. Returns a structured report with severity and rule violations.", {
124
+ device: z.string().optional().describe("Device serial"),
125
+ }, async ({ device }) => {
126
+ try {
127
+ const resolved = await ctx.deviceManager.resolveDevice(device);
128
+ const serial = resolved.serial;
129
+ const xml = await captureUiDump(ctx.bridge, serial);
130
+ if (!xml) {
131
+ return { content: [{ type: "text", text: "Failed to capture UI hierarchy for accessibility audit." }], isError: true };
132
+ }
133
+ // Get screen density for dp conversion
134
+ const densityResult = await ctx.bridge.shell("wm density", { device: serial, ignoreExitCode: true });
135
+ const densityMatch = densityResult.stdout.match(/(\d+)/);
136
+ const density = densityMatch ? parseInt(densityMatch[1], 10) : DEFAULT_DENSITY;
137
+ const elements = parseElements(xml);
138
+ const clickable = elements.filter((el) => el.clickable);
139
+ const issues = runAudit(elements, density);
140
+ const errors = issues.filter((i) => i.severity === "error");
141
+ const warnings = issues.filter((i) => i.severity === "warning");
142
+ const sections = [];
143
+ sections.push(`Accessibility Audit — ${elements.length} elements, ${clickable.length} interactive`);
144
+ sections.push(`Screen density: ${density}dpi (min touch target: ${MIN_TOUCH_TARGET_DP}dp = ${Math.round(MIN_TOUCH_TARGET_DP * density / DEFAULT_DENSITY)}px)`);
145
+ sections.push(`Result: ${errors.length} error(s), ${warnings.length} warning(s)\n`);
146
+ if (issues.length === 0) {
147
+ sections.push("No accessibility issues detected on this screen.");
148
+ }
149
+ else {
150
+ if (errors.length > 0) {
151
+ sections.push("=== Errors ===");
152
+ for (const issue of errors) {
153
+ sections.push(`✗ [${issue.rule}] ${issue.element}\n ${issue.message}`);
154
+ }
155
+ }
156
+ if (warnings.length > 0) {
157
+ sections.push("\n=== Warnings ===");
158
+ for (const issue of warnings) {
159
+ sections.push(`○ [${issue.rule}] ${issue.element}\n ${issue.message}`);
160
+ }
161
+ }
162
+ }
163
+ return { content: [{ type: "text", text: OutputProcessor.process(sections.join("\n")) }] };
164
+ }
165
+ catch (error) {
166
+ return { content: [{ type: "text", text: OutputProcessor.formatError(error) }], isError: true };
167
+ }
168
+ });
169
+ ctx.server.tool("adb_a11y_touch_targets", "List all interactive elements with their touch target dimensions in dp. Highlights elements below the 48dp minimum. Useful for quickly identifying cramped UI layouts.", {
170
+ belowMinOnly: z.boolean().optional().default(false).describe("Only show elements below the 48dp minimum"),
171
+ device: z.string().optional().describe("Device serial"),
172
+ }, async ({ belowMinOnly, device }) => {
173
+ try {
174
+ const resolved = await ctx.deviceManager.resolveDevice(device);
175
+ const serial = resolved.serial;
176
+ const xml = await captureUiDump(ctx.bridge, serial);
177
+ if (!xml) {
178
+ return { content: [{ type: "text", text: "Failed to capture UI hierarchy." }], isError: true };
179
+ }
180
+ const densityResult = await ctx.bridge.shell("wm density", { device: serial, ignoreExitCode: true });
181
+ const densityMatch = densityResult.stdout.match(/(\d+)/);
182
+ const density = densityMatch ? parseInt(densityMatch[1], 10) : DEFAULT_DENSITY;
183
+ const dpScale = density / DEFAULT_DENSITY;
184
+ const elements = parseElements(xml);
185
+ const clickable = elements.filter((el) => el.clickable && el.widthPx > 0 && el.heightPx > 0);
186
+ const rows = clickable
187
+ .map((el) => {
188
+ const wDp = el.widthPx / dpScale;
189
+ const hDp = el.heightPx / dpScale;
190
+ const ok = wDp >= MIN_TOUCH_TARGET_DP && hDp >= MIN_TOUCH_TARGET_DP;
191
+ if (belowMinOnly && ok)
192
+ return null;
193
+ const flag = ok ? "✓" : "✗";
194
+ return `${flag} ${wDp.toFixed(0)}x${hDp.toFixed(0)}dp | ${elementLabel(el)}`;
195
+ })
196
+ .filter(Boolean);
197
+ if (rows.length === 0) {
198
+ return { content: [{ type: "text", text: belowMinOnly ? "All interactive elements meet the 48dp minimum touch target size." : "No interactive elements found on screen." }] };
199
+ }
200
+ const header = `Touch targets (${rows.length} elements, density: ${density}dpi, min: ${MIN_TOUCH_TARGET_DP}dp):\n`;
201
+ return { content: [{ type: "text", text: header + rows.join("\n") }] };
202
+ }
203
+ catch (error) {
204
+ return { content: [{ type: "text", text: OutputProcessor.formatError(error) }], isError: true };
205
+ }
206
+ });
207
+ ctx.server.tool("adb_a11y_tree", "Dump the accessibility-focused view of the UI hierarchy. Shows only elements relevant to screen readers: their roles, labels, states, and navigation order. Filters out decorative/layout containers.", {
208
+ device: z.string().optional().describe("Device serial"),
209
+ }, async ({ device }) => {
210
+ try {
211
+ const resolved = await ctx.deviceManager.resolveDevice(device);
212
+ const serial = resolved.serial;
213
+ const xml = await captureUiDump(ctx.bridge, serial);
214
+ if (!xml) {
215
+ return { content: [{ type: "text", text: "Failed to capture UI hierarchy." }], isError: true };
216
+ }
217
+ const elements = parseElements(xml);
218
+ // Filter to elements that are relevant to accessibility:
219
+ // interactive, have labels, or are images
220
+ const a11yRelevant = elements.filter((el) => el.clickable || el.focusable || el.text || el.contentDesc ||
221
+ el.className.includes("Image") || el.className.includes("Button") ||
222
+ el.className.includes("EditText") || el.className.includes("Switch") ||
223
+ el.className.includes("CheckBox") || el.className.includes("Radio"));
224
+ if (a11yRelevant.length === 0) {
225
+ return { content: [{ type: "text", text: "No accessibility-relevant elements found on screen." }] };
226
+ }
227
+ const lines = a11yRelevant.map((el, i) => {
228
+ const parts = [`[${i}] ${el.className}`];
229
+ const label = el.contentDesc || el.text;
230
+ if (label)
231
+ parts.push(`label: "${label.substring(0, 50)}"`);
232
+ else
233
+ parts.push("(no label)");
234
+ const states = [];
235
+ if (el.clickable)
236
+ states.push("clickable");
237
+ if (el.focusable)
238
+ states.push("focusable");
239
+ if (!el.enabled)
240
+ states.push("disabled");
241
+ if (states.length)
242
+ parts.push(`[${states.join(", ")}]`);
243
+ if (el.resourceId)
244
+ parts.push(`id: ${el.resourceId}`);
245
+ return parts.join(" | ");
246
+ });
247
+ return {
248
+ content: [{
249
+ type: "text",
250
+ text: `Accessibility tree — ${a11yRelevant.length} elements (of ${elements.length} total):\n\n${OutputProcessor.process(lines.join("\n"))}`,
251
+ }],
252
+ };
253
+ }
254
+ catch (error) {
255
+ return { content: [{ type: "text", text: OutputProcessor.formatError(error) }], isError: true };
256
+ }
257
+ });
258
+ }
259
+ //# sourceMappingURL=accessibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accessibility.js","sourceRoot":"","sources":["../../src/tools/accessibility.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * AT Command Interface — Raw modem AT command passthrough via root access.
3
+ *
4
+ * Enables direct modem interrogation beyond what the Android telephony
5
+ * framework exposes. Useful for advanced baseband research, cellular
6
+ * protocol analysis, and low-level radio diagnostics.
7
+ *
8
+ * Multi-device support: auto-detects modem device node by chipset family
9
+ * (Shannon/Exynos, Qualcomm, MediaTek, Unisoc, generic USB modems).
10
+ * Manual port override available for unknown hardware.
11
+ *
12
+ * Root access required — AT commands go through /dev/ serial device nodes.
13
+ *
14
+ * SAFETY: Certain AT commands can disable the radio (AT+CFUN=0), factory
15
+ * reset the modem, or alter NVRAM. A blocklist prevents accidental execution
16
+ * of the most dangerous commands. Use `force: true` to bypass.
17
+ */
18
+ import { ToolContext } from "../tool-context.js";
19
+ export declare function registerAtCommandTools(ctx: ToolContext): void;
20
+ //# sourceMappingURL=at-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"at-commands.d.ts","sourceRoot":"","sources":["../../src/tools/at-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA2GjD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CA+T7D"}