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,237 @@
1
+ /**
2
+ * Package Tools — App installation, management, and permissions.
3
+ */
4
+ import { z } from "zod";
5
+ import { OutputProcessor } from "../middleware/output-processor.js";
6
+ import { validateShellArg, validateShellArgs } from "../middleware/sanitize.js";
7
+ export function registerPackageTools(ctx) {
8
+ ctx.server.tool("adb_install", "Install an APK on the device. Provide the full local path to the APK file.", {
9
+ apkPath: z.string().describe("Local filesystem path to the APK file"),
10
+ device: z.string().optional().describe("Device serial"),
11
+ replace: z.boolean().optional().default(true).describe("Replace existing app (-r flag)"),
12
+ downgrade: z.boolean().optional().default(false).describe("Allow version downgrade (-d flag)"),
13
+ }, async ({ apkPath, device, replace, downgrade }) => {
14
+ try {
15
+ const resolved = await ctx.deviceManager.resolveDevice(device);
16
+ const args = ["install"];
17
+ if (replace)
18
+ args.push("-r");
19
+ if (downgrade)
20
+ args.push("-d");
21
+ args.push(apkPath);
22
+ const result = await ctx.bridge.exec(args, { device: resolved.serial, timeout: 120000 });
23
+ return { content: [{ type: "text", text: OutputProcessor.process(result.stdout) }] };
24
+ }
25
+ catch (error) {
26
+ return { content: [{ type: "text", text: OutputProcessor.formatError(error) }], isError: true };
27
+ }
28
+ });
29
+ ctx.server.tool("adb_uninstall", "Uninstall a package from the device", {
30
+ packageName: z.string().describe("Package name (e.g., 'com.example.app')"),
31
+ device: z.string().optional().describe("Device serial"),
32
+ keepData: z.boolean().optional().default(false).describe("Keep app data and cache (-k flag)"),
33
+ }, async ({ packageName, device, keepData }) => {
34
+ try {
35
+ const pkgErr = validateShellArg(packageName, "packageName");
36
+ if (pkgErr)
37
+ return { content: [{ type: "text", text: pkgErr }], isError: true };
38
+ const resolved = await ctx.deviceManager.resolveDevice(device);
39
+ const args = ["uninstall"];
40
+ if (keepData)
41
+ args.push("-k");
42
+ args.push(packageName);
43
+ const result = await ctx.bridge.exec(args, { device: resolved.serial });
44
+ return { content: [{ type: "text", text: result.stdout.trim() || "Success" }] };
45
+ }
46
+ catch (error) {
47
+ return { content: [{ type: "text", text: OutputProcessor.formatError(error) }], isError: true };
48
+ }
49
+ });
50
+ ctx.server.tool("adb_list_packages", "List installed packages. Supports filtering by name.", {
51
+ filter: z.string().optional().describe("Filter packages containing this string"),
52
+ device: z.string().optional().describe("Device serial"),
53
+ type: z.enum(["all", "system", "third-party"]).optional().default("all")
54
+ .describe("Show all, system-only, or third-party-only packages"),
55
+ }, async ({ filter, device, type }) => {
56
+ try {
57
+ const resolved = await ctx.deviceManager.resolveDevice(device);
58
+ let cmd = "pm list packages";
59
+ if (type === "system")
60
+ cmd += " -s";
61
+ else if (type === "third-party")
62
+ cmd += " -3";
63
+ if (filter) {
64
+ const err = validateShellArg(filter, "filter");
65
+ if (err)
66
+ return { content: [{ type: "text", text: err }], isError: true };
67
+ cmd += ` ${filter}`;
68
+ }
69
+ const result = await ctx.bridge.shell(cmd, { device: resolved.serial });
70
+ const packages = result.stdout
71
+ .split("\n")
72
+ .map((l) => l.replace("package:", "").trim())
73
+ .filter((l) => l.length > 0)
74
+ .sort();
75
+ return {
76
+ content: [{ type: "text", text: `${packages.length} packages:\n${packages.join("\n")}` }],
77
+ };
78
+ }
79
+ catch (error) {
80
+ return { content: [{ type: "text", text: OutputProcessor.formatError(error) }], isError: true };
81
+ }
82
+ });
83
+ ctx.server.tool("adb_package_info", "Get detailed info about an installed package (version, permissions, paths)", {
84
+ packageName: z.string().describe("Package name"),
85
+ device: z.string().optional().describe("Device serial"),
86
+ }, async ({ packageName, device }) => {
87
+ try {
88
+ const pkgErr = validateShellArg(packageName, "packageName");
89
+ if (pkgErr)
90
+ return { content: [{ type: "text", text: pkgErr }], isError: true };
91
+ const resolved = await ctx.deviceManager.resolveDevice(device);
92
+ const result = await ctx.bridge.shell(`dumpsys package ${packageName}`, { device: resolved.serial });
93
+ return { content: [{ type: "text", text: OutputProcessor.process(result.stdout) }] };
94
+ }
95
+ catch (error) {
96
+ return { content: [{ type: "text", text: OutputProcessor.formatError(error) }], isError: true };
97
+ }
98
+ });
99
+ ctx.server.tool("adb_clear_data", "Clear all data for a package (equivalent to clearing storage in settings)", {
100
+ packageName: z.string().describe("Package name"),
101
+ device: z.string().optional().describe("Device serial"),
102
+ }, async ({ packageName, device }) => {
103
+ try {
104
+ const pkgErr = validateShellArg(packageName, "packageName");
105
+ if (pkgErr)
106
+ return { content: [{ type: "text", text: pkgErr }], isError: true };
107
+ const resolved = await ctx.deviceManager.resolveDevice(device);
108
+ const result = await ctx.bridge.shell(`pm clear ${packageName}`, { device: resolved.serial });
109
+ return { content: [{ type: "text", text: result.stdout.trim() }] };
110
+ }
111
+ catch (error) {
112
+ return { content: [{ type: "text", text: OutputProcessor.formatError(error) }], isError: true };
113
+ }
114
+ });
115
+ ctx.server.tool("adb_grant_permission", "Grant a runtime permission to a package", {
116
+ packageName: z.string().describe("Package name"),
117
+ permission: z.string().describe("Full permission string (e.g., 'android.permission.READ_PHONE_STATE')"),
118
+ device: z.string().optional().describe("Device serial"),
119
+ }, async ({ packageName, permission, device }) => {
120
+ try {
121
+ const argErr = validateShellArgs([[packageName, "packageName"], [permission, "permission"]]);
122
+ if (argErr)
123
+ return { content: [{ type: "text", text: argErr }], isError: true };
124
+ const resolved = await ctx.deviceManager.resolveDevice(device);
125
+ const result = await ctx.bridge.shell(`pm grant ${packageName} ${permission}`, { device: resolved.serial, ignoreExitCode: true });
126
+ const output = result.stdout.trim() || "Permission granted.";
127
+ return { content: [{ type: "text", text: output }] };
128
+ }
129
+ catch (error) {
130
+ return { content: [{ type: "text", text: OutputProcessor.formatError(error) }], isError: true };
131
+ }
132
+ });
133
+ ctx.server.tool("adb_force_stop", "Force-stop an app immediately. The most common debugging action.", {
134
+ packageName: z.string().describe("Package name (e.g., 'com.example.app')"),
135
+ device: z.string().optional().describe("Device serial"),
136
+ }, async ({ packageName, device }) => {
137
+ try {
138
+ const pkgErr = validateShellArg(packageName, "packageName");
139
+ if (pkgErr)
140
+ return { content: [{ type: "text", text: pkgErr }], isError: true };
141
+ const resolved = await ctx.deviceManager.resolveDevice(device);
142
+ await ctx.bridge.shell(`am force-stop ${packageName}`, { device: resolved.serial });
143
+ return { content: [{ type: "text", text: `Force-stopped: ${packageName}` }] };
144
+ }
145
+ catch (error) {
146
+ return { content: [{ type: "text", text: OutputProcessor.formatError(error) }], isError: true };
147
+ }
148
+ });
149
+ ctx.server.tool("adb_start_app", "Launch an app by package name (resolves and starts the default launcher activity)", {
150
+ packageName: z.string().describe("Package name (e.g., 'com.example.app')"),
151
+ device: z.string().optional().describe("Device serial"),
152
+ }, async ({ packageName, device }) => {
153
+ try {
154
+ const pkgErr = validateShellArg(packageName, "packageName");
155
+ if (pkgErr)
156
+ return { content: [{ type: "text", text: pkgErr }], isError: true };
157
+ const resolved = await ctx.deviceManager.resolveDevice(device);
158
+ const result = await ctx.bridge.shell(`monkey -p ${packageName} -c android.intent.category.LAUNCHER 1`, { device: resolved.serial, ignoreExitCode: true });
159
+ const output = result.stdout.trim();
160
+ if (output.includes("No activities found")) {
161
+ return { content: [{ type: "text", text: `No launcher activity found for ${packageName}` }], isError: true };
162
+ }
163
+ return { content: [{ type: "text", text: `Launched: ${packageName}` }] };
164
+ }
165
+ catch (error) {
166
+ return { content: [{ type: "text", text: OutputProcessor.formatError(error) }], isError: true };
167
+ }
168
+ });
169
+ ctx.server.tool("adb_restart_app", "Force-stop then re-launch an app. The most frequent debugging workflow in a single call.", {
170
+ packageName: z.string().describe("Package name (e.g., 'com.example.app')"),
171
+ device: z.string().optional().describe("Device serial"),
172
+ delayMs: z.number().min(0).max(10000).optional().default(500).describe("Delay between stop and start in ms (0-10000, default 500)"),
173
+ }, async ({ packageName, device, delayMs }) => {
174
+ try {
175
+ const pkgErr = validateShellArg(packageName, "packageName");
176
+ if (pkgErr)
177
+ return { content: [{ type: "text", text: pkgErr }], isError: true };
178
+ const resolved = await ctx.deviceManager.resolveDevice(device);
179
+ const serial = resolved.serial;
180
+ // Force stop
181
+ await ctx.bridge.shell(`am force-stop ${packageName}`, { device: serial });
182
+ // Brief settle
183
+ await new Promise((r) => setTimeout(r, delayMs));
184
+ // Re-launch
185
+ const result = await ctx.bridge.shell(`monkey -p ${packageName} -c android.intent.category.LAUNCHER 1`, { device: serial, ignoreExitCode: true });
186
+ if (result.stdout.includes("No activities found")) {
187
+ return { content: [{ type: "text", text: `Stopped ${packageName} but no launcher activity found to restart.` }], isError: true };
188
+ }
189
+ return { content: [{ type: "text", text: `Restarted: ${packageName}` }] };
190
+ }
191
+ catch (error) {
192
+ return { content: [{ type: "text", text: OutputProcessor.formatError(error) }], isError: true };
193
+ }
194
+ });
195
+ ctx.server.tool("adb_resolve_intents", "Discover all activities, services, and receivers registered by a package with their intent filters", {
196
+ packageName: z.string().describe("Package name to query"),
197
+ device: z.string().optional().describe("Device serial"),
198
+ }, async ({ packageName, device }) => {
199
+ try {
200
+ const pkgErr = validateShellArg(packageName, "packageName");
201
+ if (pkgErr)
202
+ return { content: [{ type: "text", text: pkgErr }], isError: true };
203
+ const resolved = await ctx.deviceManager.resolveDevice(device);
204
+ // Get the full package dump and extract resolver sections
205
+ const result = await ctx.bridge.shell(`dumpsys package ${packageName}`, {
206
+ device: resolved.serial, timeout: 15000,
207
+ });
208
+ const dump = result.stdout;
209
+ // Extract Activity, Service, and Receiver resolver entries
210
+ const sections = [];
211
+ for (const sectionName of ["Activity Resolver Table", "Service Resolver Table", "Receiver Resolver Table"]) {
212
+ const startIdx = dump.indexOf(sectionName);
213
+ if (startIdx === -1)
214
+ continue;
215
+ // Find next resolver table or end of relevant section
216
+ const endMarkers = ["Resolver Table", "Permissions:", "Registered ContentProviders:", "ContentProvider Authorities:"];
217
+ let endIdx = dump.length;
218
+ for (const marker of endMarkers) {
219
+ const idx = dump.indexOf(marker, startIdx + sectionName.length + 1);
220
+ if (idx !== -1 && idx < endIdx)
221
+ endIdx = idx;
222
+ }
223
+ const section = dump.substring(startIdx, endIdx).trim();
224
+ if (section)
225
+ sections.push(section);
226
+ }
227
+ if (sections.length === 0) {
228
+ return { content: [{ type: "text", text: `No resolver entries found for ${packageName}` }] };
229
+ }
230
+ return { content: [{ type: "text", text: OutputProcessor.process(sections.join("\n\n")) }] };
231
+ }
232
+ catch (error) {
233
+ return { content: [{ type: "text", text: OutputProcessor.formatError(error) }], isError: true };
234
+ }
235
+ });
236
+ }
237
+ //# sourceMappingURL=packages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packages.js","sourceRoot":"","sources":["../../src/tools/packages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Plugin Architecture — Dynamic tool module loading.
3
+ *
4
+ * Allows external tool modules to be loaded at runtime from a plugins directory.
5
+ * Each plugin is a JavaScript module that exports a register function accepting ToolContext.
6
+ *
7
+ * Plugin directory: DA_PLUGIN_DIR env var, or {tempDir}/plugins
8
+ *
9
+ * Plugin format:
10
+ * // my-plugin.js
11
+ * export function register(ctx) {
12
+ * ctx.server.tool("my_custom_tool", "description", { ... }, async (args) => { ... });
13
+ * }
14
+ */
15
+ import { ToolContext } from "../tool-context.js";
16
+ /**
17
+ * Scan the plugins directory and load any .js modules that export a register function.
18
+ * Called once at startup.
19
+ */
20
+ export declare function loadPlugins(ctx: ToolContext): Promise<void>;
21
+ export declare function registerPluginTools(ctx: ToolContext): void;
22
+ //# sourceMappingURL=plugins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/tools/plugins.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAYjD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCjE;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAoE1D"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Plugin Architecture — Dynamic tool module loading.
3
+ *
4
+ * Allows external tool modules to be loaded at runtime from a plugins directory.
5
+ * Each plugin is a JavaScript module that exports a register function accepting ToolContext.
6
+ *
7
+ * Plugin directory: DA_PLUGIN_DIR env var, or {tempDir}/plugins
8
+ *
9
+ * Plugin format:
10
+ * // my-plugin.js
11
+ * export function register(ctx) {
12
+ * ctx.server.tool("my_custom_tool", "description", { ... }, async (args) => { ... });
13
+ * }
14
+ */
15
+ import { join } from "path";
16
+ import { readdirSync, existsSync } from "fs";
17
+ import { pathToFileURL } from "url";
18
+ import { OutputProcessor } from "../middleware/output-processor.js";
19
+ /** Track loaded plugins */
20
+ const loadedPlugins = [];
21
+ /**
22
+ * Scan the plugins directory and load any .js modules that export a register function.
23
+ * Called once at startup.
24
+ */
25
+ export async function loadPlugins(ctx) {
26
+ const pluginDir = process.env.DA_PLUGIN_DIR ?? join(ctx.config.tempDir, "plugins");
27
+ if (!existsSync(pluginDir)) {
28
+ ctx.logger.debug(`Plugin directory not found: ${pluginDir} (no plugins to load)`);
29
+ return;
30
+ }
31
+ const files = readdirSync(pluginDir).filter((f) => f.endsWith(".js"));
32
+ if (files.length === 0) {
33
+ ctx.logger.debug("Plugin directory exists but contains no .js files.");
34
+ return;
35
+ }
36
+ for (const file of files) {
37
+ const pluginPath = join(pluginDir, file);
38
+ try {
39
+ const moduleUrl = pathToFileURL(pluginPath).href;
40
+ const mod = await import(moduleUrl);
41
+ if (typeof mod.register === "function") {
42
+ mod.register(ctx);
43
+ loadedPlugins.push({
44
+ name: file.replace(/\.js$/, ""),
45
+ path: pluginPath,
46
+ loadedAt: Date.now(),
47
+ });
48
+ ctx.logger.info(`Plugin loaded: ${file}`);
49
+ }
50
+ else {
51
+ ctx.logger.warn(`Plugin ${file} has no register() export — skipped.`);
52
+ }
53
+ }
54
+ catch (error) {
55
+ ctx.logger.error(`Failed to load plugin ${file}: ${error instanceof Error ? error.message : error}`);
56
+ }
57
+ }
58
+ if (loadedPlugins.length > 0) {
59
+ ctx.logger.info(`${loadedPlugins.length} plugin(s) loaded from ${pluginDir}`);
60
+ }
61
+ }
62
+ export function registerPluginTools(ctx) {
63
+ ctx.server.tool("adb_plugin_list", "List all loaded plugins and the plugin directory path.", {}, async () => {
64
+ try {
65
+ const pluginDir = process.env.DA_PLUGIN_DIR ?? join(ctx.config.tempDir, "plugins");
66
+ if (loadedPlugins.length === 0) {
67
+ return {
68
+ content: [{
69
+ type: "text",
70
+ text: `No plugins loaded.\nPlugin directory: ${pluginDir}\n\nTo create a plugin, add a .js file to the plugin directory that exports a register(ctx) function.`,
71
+ }],
72
+ };
73
+ }
74
+ const output = loadedPlugins.map((p) => {
75
+ const ago = ((Date.now() - p.loadedAt) / 1000).toFixed(0);
76
+ return `${p.name} — loaded ${ago}s ago\n Path: ${p.path}`;
77
+ }).join("\n\n");
78
+ return {
79
+ content: [{
80
+ type: "text",
81
+ text: `${loadedPlugins.length} plugin(s) loaded:\n\n${output}\n\nPlugin directory: ${pluginDir}`,
82
+ }],
83
+ };
84
+ }
85
+ catch (error) {
86
+ return { content: [{ type: "text", text: OutputProcessor.formatError(error) }], isError: true };
87
+ }
88
+ });
89
+ ctx.server.tool("adb_plugin_info", "Show information about the plugin system: directory, how to create plugins, and loaded plugin count.", {}, async () => {
90
+ try {
91
+ const pluginDir = process.env.DA_PLUGIN_DIR ?? join(ctx.config.tempDir, "plugins");
92
+ const info = [
93
+ `Plugin System — DeepADB`,
94
+ ``,
95
+ `Directory: ${pluginDir}`,
96
+ `Loaded: ${loadedPlugins.length} plugin(s)`,
97
+ ``,
98
+ `Creating a plugin:`,
99
+ `1. Create a .js file in the plugin directory`,
100
+ `2. Export a register(ctx) function that receives ToolContext`,
101
+ `3. Use ctx.server.tool() to register custom tools`,
102
+ `4. Restart DeepADB to load the plugin`,
103
+ ``,
104
+ `Example (my-plugin.js):`,
105
+ ` export function register(ctx) {`,
106
+ ` ctx.server.tool("my_tool", "My custom tool", {}, async () => {`,
107
+ ` return { content: [{ type: "text", text: "Hello from plugin!" }] };`,
108
+ ` });`,
109
+ ` }`,
110
+ ];
111
+ return { content: [{ type: "text", text: info.join("\n") }] };
112
+ }
113
+ catch (error) {
114
+ return { content: [{ type: "text", text: OutputProcessor.formatError(error) }], isError: true };
115
+ }
116
+ });
117
+ }
118
+ //# sourceMappingURL=plugins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/tools/plugins.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * MCP Prompts — Pre-built workflow templates for common Android debugging tasks.
3
+ *
4
+ * Prompts are exposed to MCP clients as reusable, parameterized templates
5
+ * that guide multi-step tool usage sequences.
6
+ */
7
+ import { ToolContext } from "../tool-context.js";
8
+ export declare function registerPrompts(ctx: ToolContext): void;
9
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/tools/prompts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,wBAAgB,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CA6GtD"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * MCP Prompts — Pre-built workflow templates for common Android debugging tasks.
3
+ *
4
+ * Prompts are exposed to MCP clients as reusable, parameterized templates
5
+ * that guide multi-step tool usage sequences.
6
+ */
7
+ import { z } from "zod";
8
+ export function registerPrompts(ctx) {
9
+ ctx.server.prompt("debug-crash", "Guided workflow: Capture crash information for debugging. Clears logcat, waits for reproduction, then captures crash buffer and device state.", { packageName: z.string().describe("Package name to monitor for crashes") }, ({ packageName }) => ({
10
+ messages: [{
11
+ role: "user",
12
+ content: {
13
+ type: "text",
14
+ text: [
15
+ `I need to debug a crash in ${packageName}. Please follow this workflow:`,
16
+ ``,
17
+ `1. Clear the logcat buffers using adb_logcat_clear`,
18
+ `2. Force-stop and restart ${packageName} using adb_restart_app`,
19
+ `3. Ask me to reproduce the crash, then wait for my confirmation`,
20
+ `4. After I confirm, capture the crash buffer using adb_logcat_crash with 200 lines`,
21
+ `5. Capture the main logcat filtered to ${packageName} using adb_logcat with tag="${packageName}" and 300 lines`,
22
+ `6. Get the device info using adb_device_info for context`,
23
+ `7. Analyze the crash logs and provide a diagnosis`,
24
+ ].join("\n"),
25
+ },
26
+ }],
27
+ }));
28
+ ctx.server.prompt("deploy-and-test", "Guided workflow: Build, install, launch, and start monitoring an app in one sequence.", {
29
+ projectPath: z.string().describe("Path to the Android project root"),
30
+ packageName: z.string().describe("Package name of the app"),
31
+ }, ({ projectPath, packageName }) => ({
32
+ messages: [{
33
+ role: "user",
34
+ content: {
35
+ type: "text",
36
+ text: [
37
+ `Deploy and test ${packageName} from ${projectPath}. Follow this workflow:`,
38
+ ``,
39
+ `1. Build and install the debug APK using adb_build_and_install with projectPath="${projectPath}"`,
40
+ `2. Clear logcat buffers using adb_logcat_clear`,
41
+ `3. Start a background logcat watcher using adb_logcat_start with tag="${packageName}"`,
42
+ `4. Launch the app using adb_start_app with packageName="${packageName}"`,
43
+ `5. Wait 3 seconds, then take a screenshot using adb_screencap`,
44
+ `6. Poll the logcat watcher using adb_logcat_poll to show initial log output`,
45
+ `7. Report the deployment status and any startup issues found in the logs`,
46
+ ].join("\n"),
47
+ },
48
+ }],
49
+ }));
50
+ ctx.server.prompt("telephony-snapshot", "Guided workflow: Capture comprehensive telephony and cellular state for radio diagnostics.", {}, () => ({
51
+ messages: [{
52
+ role: "user",
53
+ content: {
54
+ type: "text",
55
+ text: [
56
+ `Capture a comprehensive telephony snapshot for cellular security analysis:`,
57
+ ``,
58
+ `1. Get full telephony state using adb_telephony`,
59
+ `2. Get network connectivity info using adb_network`,
60
+ `3. Read the SIM operator using adb_getprop with key="gsm.sim.operator.alpha"`,
61
+ `4. Read the network operator using adb_getprop with key="gsm.operator.alpha"`,
62
+ `5. Read the network type using adb_getprop with key="gsm.network.type"`,
63
+ `6. Summarize the cellular state: operator, registration, signal strength, cell IDs, and any anomalies`,
64
+ ].join("\n"),
65
+ },
66
+ }],
67
+ }));
68
+ ctx.server.prompt("airplane-cycle-test", "Guided workflow: Test cellular re-registration by cycling airplane mode while monitoring logs.", {
69
+ packageName: z.string().optional().describe("Optional package to monitor during the test"),
70
+ }, ({ packageName }) => {
71
+ const tagFilter = packageName ? ` with tag="${packageName}"` : "";
72
+ return {
73
+ messages: [{
74
+ role: "user",
75
+ content: {
76
+ type: "text",
77
+ text: [
78
+ `Test cellular re-registration with airplane mode cycling:`,
79
+ ``,
80
+ `1. Start a background logcat watcher using adb_logcat_start${tagFilter}`,
81
+ `2. Get baseline telephony state using adb_telephony`,
82
+ `3. Cycle airplane mode using adb_airplane_cycle with delaySeconds=5`,
83
+ `4. Wait 10 seconds for cellular re-registration`,
84
+ `5. Get post-cycle telephony state using adb_telephony`,
85
+ `6. Poll the logcat watcher using adb_logcat_poll`,
86
+ `7. Compare pre and post telephony state — report any changes in cell ID, operator, signal strength, or registration status`,
87
+ `8. Stop the logcat watcher using adb_logcat_stop`,
88
+ ].join("\n"),
89
+ },
90
+ }],
91
+ };
92
+ });
93
+ }
94
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/tools/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * QEMU/KVM Tools — On-device virtual machine management.
3
+ *
4
+ * Provides QEMU VM lifecycle management for on-device mode (Termux).
5
+ * Uses KVM hardware acceleration when available (/dev/kvm) for near-native
6
+ * performance. Manages disk images, VM boot/shutdown, and ADB port forwarding
7
+ * to guest VMs.
8
+ *
9
+ * These tools complement the existing AVD emulator tools:
10
+ * - AVD tools (emulator.ts): manage Android SDK emulators on desktop
11
+ * - QEMU tools (this file): manage hardware-accelerated VMs on-device
12
+ *
13
+ * Images are stored in {tempDir}/qemu-images/.
14
+ * QEMU must be installed via Termux: pkg install qemu-system-aarch64-headless
15
+ */
16
+ import { ToolContext } from "../tool-context.js";
17
+ export declare function registerQemuTools(ctx: ToolContext): void;
18
+ //# sourceMappingURL=qemu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qemu.d.ts","sourceRoot":"","sources":["../../src/tools/qemu.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAiNjD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAyqBxD"}