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.
- package/LICENSE +21 -0
- package/README.md +631 -0
- package/build/bridge/adb-bridge.d.ts +65 -0
- package/build/bridge/adb-bridge.d.ts.map +1 -0
- package/build/bridge/adb-bridge.js +164 -0
- package/build/bridge/adb-bridge.js.map +1 -0
- package/build/bridge/device-manager.d.ts +41 -0
- package/build/bridge/device-manager.d.ts.map +1 -0
- package/build/bridge/device-manager.js +109 -0
- package/build/bridge/device-manager.js.map +1 -0
- package/build/bridge/local-bridge.d.ts +92 -0
- package/build/bridge/local-bridge.d.ts.map +1 -0
- package/build/bridge/local-bridge.js +345 -0
- package/build/bridge/local-bridge.js.map +1 -0
- package/build/config/config.d.ts +39 -0
- package/build/config/config.d.ts.map +1 -0
- package/build/config/config.js +84 -0
- package/build/config/config.js.map +1 -0
- package/build/graphql-api.d.ts +36 -0
- package/build/graphql-api.d.ts.map +1 -0
- package/build/graphql-api.js +296 -0
- package/build/graphql-api.js.map +1 -0
- package/build/http-transport.d.ts +26 -0
- package/build/http-transport.d.ts.map +1 -0
- package/build/http-transport.js +105 -0
- package/build/http-transport.js.map +1 -0
- package/build/index.d.ts +14 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +66 -0
- package/build/index.js.map +1 -0
- package/build/middleware/chipset.d.ts +29 -0
- package/build/middleware/chipset.d.ts.map +1 -0
- package/build/middleware/chipset.js +123 -0
- package/build/middleware/chipset.js.map +1 -0
- package/build/middleware/cleanup.d.ts +24 -0
- package/build/middleware/cleanup.d.ts.map +1 -0
- package/build/middleware/cleanup.js +53 -0
- package/build/middleware/cleanup.js.map +1 -0
- package/build/middleware/fetch-utils.d.ts +19 -0
- package/build/middleware/fetch-utils.d.ts.map +1 -0
- package/build/middleware/fetch-utils.js +64 -0
- package/build/middleware/fetch-utils.js.map +1 -0
- package/build/middleware/logger.d.ts +17 -0
- package/build/middleware/logger.d.ts.map +1 -0
- package/build/middleware/logger.js +38 -0
- package/build/middleware/logger.js.map +1 -0
- package/build/middleware/output-processor.d.ts +57 -0
- package/build/middleware/output-processor.d.ts.map +1 -0
- package/build/middleware/output-processor.js +162 -0
- package/build/middleware/output-processor.js.map +1 -0
- package/build/middleware/sanitize.d.ts +30 -0
- package/build/middleware/sanitize.d.ts.map +1 -0
- package/build/middleware/sanitize.js +46 -0
- package/build/middleware/sanitize.js.map +1 -0
- package/build/middleware/security.d.ts +52 -0
- package/build/middleware/security.d.ts.map +1 -0
- package/build/middleware/security.js +123 -0
- package/build/middleware/security.js.map +1 -0
- package/build/middleware/ui-dump.d.ts +23 -0
- package/build/middleware/ui-dump.d.ts.map +1 -0
- package/build/middleware/ui-dump.js +59 -0
- package/build/middleware/ui-dump.js.map +1 -0
- package/build/server.d.ts +18 -0
- package/build/server.d.ts.map +1 -0
- package/build/server.js +133 -0
- package/build/server.js.map +1 -0
- package/build/tool-context.d.ts +22 -0
- package/build/tool-context.d.ts.map +1 -0
- package/build/tool-context.js +9 -0
- package/build/tool-context.js.map +1 -0
- package/build/tools/accessibility.d.ts +10 -0
- package/build/tools/accessibility.d.ts.map +1 -0
- package/build/tools/accessibility.js +259 -0
- package/build/tools/accessibility.js.map +1 -0
- package/build/tools/at-commands.d.ts +20 -0
- package/build/tools/at-commands.d.ts.map +1 -0
- package/build/tools/at-commands.js +378 -0
- package/build/tools/at-commands.js.map +1 -0
- package/build/tools/baseband.d.ts +15 -0
- package/build/tools/baseband.d.ts.map +1 -0
- package/build/tools/baseband.js +323 -0
- package/build/tools/baseband.js.map +1 -0
- package/build/tools/build.d.ts +6 -0
- package/build/tools/build.d.ts.map +1 -0
- package/build/tools/build.js +80 -0
- package/build/tools/build.js.map +1 -0
- package/build/tools/ci.d.ts +9 -0
- package/build/tools/ci.d.ts.map +1 -0
- package/build/tools/ci.js +163 -0
- package/build/tools/ci.js.map +1 -0
- package/build/tools/control.d.ts +10 -0
- package/build/tools/control.d.ts.map +1 -0
- package/build/tools/control.js +197 -0
- package/build/tools/control.js.map +1 -0
- package/build/tools/device-farm.d.ts +10 -0
- package/build/tools/device-farm.d.ts.map +1 -0
- package/build/tools/device-farm.js +140 -0
- package/build/tools/device-farm.js.map +1 -0
- package/build/tools/device-profiles.d.ts +16 -0
- package/build/tools/device-profiles.d.ts.map +1 -0
- package/build/tools/device-profiles.js +272 -0
- package/build/tools/device-profiles.js.map +1 -0
- package/build/tools/device.d.ts +6 -0
- package/build/tools/device.d.ts.map +1 -0
- package/build/tools/device.js +72 -0
- package/build/tools/device.js.map +1 -0
- package/build/tools/diagnostics.d.ts +7 -0
- package/build/tools/diagnostics.d.ts.map +1 -0
- package/build/tools/diagnostics.js +153 -0
- package/build/tools/diagnostics.js.map +1 -0
- package/build/tools/emulator.d.ts +9 -0
- package/build/tools/emulator.d.ts.map +1 -0
- package/build/tools/emulator.js +223 -0
- package/build/tools/emulator.js.map +1 -0
- package/build/tools/files.d.ts +6 -0
- package/build/tools/files.d.ts.map +1 -0
- package/build/tools/files.js +78 -0
- package/build/tools/files.js.map +1 -0
- package/build/tools/firmware-analysis.d.ts +24 -0
- package/build/tools/firmware-analysis.d.ts.map +1 -0
- package/build/tools/firmware-analysis.js +623 -0
- package/build/tools/firmware-analysis.js.map +1 -0
- package/build/tools/forwarding.d.ts +7 -0
- package/build/tools/forwarding.d.ts.map +1 -0
- package/build/tools/forwarding.js +64 -0
- package/build/tools/forwarding.js.map +1 -0
- package/build/tools/health.d.ts +7 -0
- package/build/tools/health.d.ts.map +1 -0
- package/build/tools/health.js +112 -0
- package/build/tools/health.js.map +1 -0
- package/build/tools/logcat-watch.d.ts +11 -0
- package/build/tools/logcat-watch.d.ts.map +1 -0
- package/build/tools/logcat-watch.js +209 -0
- package/build/tools/logcat-watch.js.map +1 -0
- package/build/tools/logs.d.ts +6 -0
- package/build/tools/logs.d.ts.map +1 -0
- package/build/tools/logs.js +83 -0
- package/build/tools/logs.js.map +1 -0
- package/build/tools/mirroring.d.ts +14 -0
- package/build/tools/mirroring.d.ts.map +1 -0
- package/build/tools/mirroring.js +243 -0
- package/build/tools/mirroring.js.map +1 -0
- package/build/tools/multi-device.d.ts +9 -0
- package/build/tools/multi-device.d.ts.map +1 -0
- package/build/tools/multi-device.js +138 -0
- package/build/tools/multi-device.js.map +1 -0
- package/build/tools/network-capture.d.ts +10 -0
- package/build/tools/network-capture.d.ts.map +1 -0
- package/build/tools/network-capture.js +143 -0
- package/build/tools/network-capture.js.map +1 -0
- package/build/tools/network-discovery.d.ts +21 -0
- package/build/tools/network-discovery.d.ts.map +1 -0
- package/build/tools/network-discovery.js +284 -0
- package/build/tools/network-discovery.js.map +1 -0
- package/build/tools/ota-monitor.d.ts +16 -0
- package/build/tools/ota-monitor.d.ts.map +1 -0
- package/build/tools/ota-monitor.js +211 -0
- package/build/tools/ota-monitor.js.map +1 -0
- package/build/tools/packages.d.ts +6 -0
- package/build/tools/packages.d.ts.map +1 -0
- package/build/tools/packages.js +237 -0
- package/build/tools/packages.js.map +1 -0
- package/build/tools/plugins.d.ts +22 -0
- package/build/tools/plugins.d.ts.map +1 -0
- package/build/tools/plugins.js +118 -0
- package/build/tools/plugins.js.map +1 -0
- package/build/tools/prompts.d.ts +9 -0
- package/build/tools/prompts.d.ts.map +1 -0
- package/build/tools/prompts.js +94 -0
- package/build/tools/prompts.js.map +1 -0
- package/build/tools/qemu.d.ts +18 -0
- package/build/tools/qemu.d.ts.map +1 -0
- package/build/tools/qemu.js +791 -0
- package/build/tools/qemu.js.map +1 -0
- package/build/tools/registry.d.ts +13 -0
- package/build/tools/registry.d.ts.map +1 -0
- package/build/tools/registry.js +221 -0
- package/build/tools/registry.js.map +1 -0
- package/build/tools/regression.d.ts +10 -0
- package/build/tools/regression.d.ts.map +1 -0
- package/build/tools/regression.js +215 -0
- package/build/tools/regression.js.map +1 -0
- package/build/tools/resources.d.ts +10 -0
- package/build/tools/resources.d.ts.map +1 -0
- package/build/tools/resources.js +77 -0
- package/build/tools/resources.js.map +1 -0
- package/build/tools/ril-intercept.d.ts +24 -0
- package/build/tools/ril-intercept.d.ts.map +1 -0
- package/build/tools/ril-intercept.js +273 -0
- package/build/tools/ril-intercept.js.map +1 -0
- package/build/tools/screen-record.d.ts +9 -0
- package/build/tools/screen-record.d.ts.map +1 -0
- package/build/tools/screen-record.js +95 -0
- package/build/tools/screen-record.js.map +1 -0
- package/build/tools/screenshot-diff.d.ts +13 -0
- package/build/tools/screenshot-diff.d.ts.map +1 -0
- package/build/tools/screenshot-diff.js +370 -0
- package/build/tools/screenshot-diff.js.map +1 -0
- package/build/tools/selinux-audit.d.ts +17 -0
- package/build/tools/selinux-audit.d.ts.map +1 -0
- package/build/tools/selinux-audit.js +301 -0
- package/build/tools/selinux-audit.js.map +1 -0
- package/build/tools/shell.d.ts +6 -0
- package/build/tools/shell.d.ts.map +1 -0
- package/build/tools/shell.js +63 -0
- package/build/tools/shell.js.map +1 -0
- package/build/tools/snapshot.d.ts +9 -0
- package/build/tools/snapshot.d.ts.map +1 -0
- package/build/tools/snapshot.js +192 -0
- package/build/tools/snapshot.js.map +1 -0
- package/build/tools/split-apk.d.ts +13 -0
- package/build/tools/split-apk.d.ts.map +1 -0
- package/build/tools/split-apk.js +229 -0
- package/build/tools/split-apk.js.map +1 -0
- package/build/tools/test-gen.d.ts +14 -0
- package/build/tools/test-gen.d.ts.map +1 -0
- package/build/tools/test-gen.js +252 -0
- package/build/tools/test-gen.js.map +1 -0
- package/build/tools/testing.d.ts +9 -0
- package/build/tools/testing.d.ts.map +1 -0
- package/build/tools/testing.js +144 -0
- package/build/tools/testing.js.map +1 -0
- package/build/tools/thermal-power.d.ts +19 -0
- package/build/tools/thermal-power.d.ts.map +1 -0
- package/build/tools/thermal-power.js +330 -0
- package/build/tools/thermal-power.js.map +1 -0
- package/build/tools/ui.d.ts +6 -0
- package/build/tools/ui.d.ts.map +1 -0
- package/build/tools/ui.js +266 -0
- package/build/tools/ui.js.map +1 -0
- package/build/tools/wireless.d.ts +7 -0
- package/build/tools/wireless.d.ts.map +1 -0
- package/build/tools/wireless.js +78 -0
- package/build/tools/wireless.js.map +1 -0
- package/build/tools/workflow-market.d.ts +17 -0
- package/build/tools/workflow-market.d.ts.map +1 -0
- package/build/tools/workflow-market.js +237 -0
- package/build/tools/workflow-market.js.map +1 -0
- package/build/tools/workflow.d.ts +32 -0
- package/build/tools/workflow.d.ts.map +1 -0
- package/build/tools/workflow.js +374 -0
- package/build/tools/workflow.js.map +1 -0
- package/build/ws-transport.d.ts +30 -0
- package/build/ws-transport.d.ts.map +1 -0
- package/build/ws-transport.js +133 -0
- package/build/ws-transport.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Input Sanitization — Shell injection prevention for ADB command construction.
|
|
3
|
+
*
|
|
4
|
+
* Tools that interpolate user-supplied parameters into shell command strings
|
|
5
|
+
* must validate those parameters before passing them to bridge.shell().
|
|
6
|
+
* This module provides validation for common parameter types.
|
|
7
|
+
*/
|
|
8
|
+
/** Characters that are dangerous in shell command interpolation. */
|
|
9
|
+
const SHELL_METACHARACTERS = /[;|&$`(){}<>!\n\r\\'"]/;
|
|
10
|
+
/**
|
|
11
|
+
* Validate that a string is safe to interpolate into a shell command.
|
|
12
|
+
* Rejects strings containing shell metacharacters that could enable injection.
|
|
13
|
+
*
|
|
14
|
+
* Use for: package names, property keys, service names, setting keys,
|
|
15
|
+
* test class names, runner names, interface names — any identifier that
|
|
16
|
+
* should never contain shell operators.
|
|
17
|
+
*
|
|
18
|
+
* Returns null if safe, or an error message string if unsafe.
|
|
19
|
+
*/
|
|
20
|
+
export function validateShellArg(value, paramName) {
|
|
21
|
+
if (SHELL_METACHARACTERS.test(value)) {
|
|
22
|
+
return `Invalid ${paramName}: contains shell metacharacters. Value must not include: ; | & $ \` ( ) { } < > ! \\ ' "`;
|
|
23
|
+
}
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Escape a string for safe use inside single-quoted shell arguments.
|
|
28
|
+
* Handles the only character that can break single-quote context: the quote itself.
|
|
29
|
+
* Use for file paths, grep patterns, and any value interpolated into shell commands
|
|
30
|
+
* within single quotes.
|
|
31
|
+
*/
|
|
32
|
+
export function shellEscape(str) {
|
|
33
|
+
return str.replace(/'/g, "'\\''");
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Validate multiple arguments at once. Returns the first error found, or null if all pass.
|
|
37
|
+
*/
|
|
38
|
+
export function validateShellArgs(args) {
|
|
39
|
+
for (const [value, paramName] of args) {
|
|
40
|
+
const error = validateShellArg(value, paramName);
|
|
41
|
+
if (error)
|
|
42
|
+
return error;
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=sanitize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../../src/middleware/sanitize.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,oEAAoE;AACpE,MAAM,oBAAoB,GAAG,wBAAwB,CAAC;AAEtD;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,SAAiB;IAC/D,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,WAAW,SAAS,0FAA0F,CAAC;IACxH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAA6B;IAC7D,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACjD,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;IAC1B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security Middleware — Command filtering, rate limiting, and audit logging.
|
|
3
|
+
*
|
|
4
|
+
* Provides configurable security controls for DeepADB.
|
|
5
|
+
* Currently opt-in: tools and the bridge can consult this middleware
|
|
6
|
+
* before executing commands. Can be tightened for production deployments.
|
|
7
|
+
*
|
|
8
|
+
* Enable via environment variable: DA_SECURITY=true
|
|
9
|
+
*/
|
|
10
|
+
import { Logger } from "./logger.js";
|
|
11
|
+
export interface SecurityConfig {
|
|
12
|
+
/** Enable security enforcement (default: false in dev, true recommended for shared use) */
|
|
13
|
+
enabled: boolean;
|
|
14
|
+
/** Shell commands that are always blocked (substring match) */
|
|
15
|
+
blockedCommands: string[];
|
|
16
|
+
/** If set, only these shell commands are allowed (substring match). Empty = allow all. */
|
|
17
|
+
allowedCommands: string[];
|
|
18
|
+
/** Maximum commands per minute (0 = unlimited) */
|
|
19
|
+
rateLimit: number;
|
|
20
|
+
/** Enable audit logging of all commands */
|
|
21
|
+
auditLog: boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare class SecurityMiddleware {
|
|
24
|
+
private config;
|
|
25
|
+
private logger;
|
|
26
|
+
private rateBucket;
|
|
27
|
+
constructor(logger: Logger);
|
|
28
|
+
private parseList;
|
|
29
|
+
/**
|
|
30
|
+
* Check if a shell command is allowed to execute.
|
|
31
|
+
* Returns null if allowed, or an error message if blocked.
|
|
32
|
+
*/
|
|
33
|
+
checkCommand(command: string, device?: string): string | null;
|
|
34
|
+
/**
|
|
35
|
+
* Log a completed command for audit trail.
|
|
36
|
+
*/
|
|
37
|
+
logResult(command: string, success: boolean, device?: string): void;
|
|
38
|
+
/** Whether security enforcement is active. */
|
|
39
|
+
get isEnabled(): boolean;
|
|
40
|
+
/** Get current rate limit status. */
|
|
41
|
+
getRateStatus(): {
|
|
42
|
+
count: number;
|
|
43
|
+
limit: number;
|
|
44
|
+
windowRemaining: number;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Redact potentially sensitive content from commands before logging.
|
|
48
|
+
* Truncates long commands and masks common credential patterns.
|
|
49
|
+
*/
|
|
50
|
+
private redactForLog;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=security.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/middleware/security.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,WAAW,cAAc;IAC7B,2FAA2F;IAC3F,OAAO,EAAE,OAAO,CAAC;IACjB,+DAA+D;IAC/D,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,0FAA0F;IAC1F,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,QAAQ,EAAE,OAAO,CAAC;CACnB;AAOD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAqD;gBAE3D,MAAM,EAAE,MAAM;IAwB1B,OAAO,CAAC,SAAS;IAKjB;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA8C7D;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAOnE,8CAA8C;IAC9C,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,qCAAqC;IACrC,aAAa,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE;IAS1E;;;OAGG;IACH,OAAO,CAAC,YAAY;CAarB"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security Middleware — Command filtering, rate limiting, and audit logging.
|
|
3
|
+
*
|
|
4
|
+
* Provides configurable security controls for DeepADB.
|
|
5
|
+
* Currently opt-in: tools and the bridge can consult this middleware
|
|
6
|
+
* before executing commands. Can be tightened for production deployments.
|
|
7
|
+
*
|
|
8
|
+
* Enable via environment variable: DA_SECURITY=true
|
|
9
|
+
*/
|
|
10
|
+
export class SecurityMiddleware {
|
|
11
|
+
config;
|
|
12
|
+
logger;
|
|
13
|
+
rateBucket = { count: 0, windowStart: Date.now() };
|
|
14
|
+
constructor(logger) {
|
|
15
|
+
this.logger = logger;
|
|
16
|
+
this.config = {
|
|
17
|
+
enabled: process.env.DA_SECURITY === "true",
|
|
18
|
+
blockedCommands: this.parseList(process.env.DA_BLOCKED_COMMANDS),
|
|
19
|
+
allowedCommands: this.parseList(process.env.DA_ALLOWED_COMMANDS),
|
|
20
|
+
rateLimit: parseInt(process.env.DA_RATE_LIMIT ?? "0", 10) || 0,
|
|
21
|
+
auditLog: process.env.DA_AUDIT_LOG === "true",
|
|
22
|
+
};
|
|
23
|
+
if (this.config.enabled) {
|
|
24
|
+
logger.info("Security middleware enabled");
|
|
25
|
+
if (this.config.blockedCommands.length > 0) {
|
|
26
|
+
logger.info(`Blocked commands: ${this.config.blockedCommands.join(", ")}`);
|
|
27
|
+
}
|
|
28
|
+
if (this.config.allowedCommands.length > 0) {
|
|
29
|
+
logger.info(`Allowlist active: ${this.config.allowedCommands.length} patterns`);
|
|
30
|
+
}
|
|
31
|
+
if (this.config.rateLimit > 0) {
|
|
32
|
+
logger.info(`Rate limit: ${this.config.rateLimit} commands/minute`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
parseList(value) {
|
|
37
|
+
if (!value)
|
|
38
|
+
return [];
|
|
39
|
+
return value.split(",").map((s) => s.trim()).filter((s) => s.length > 0);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Check if a shell command is allowed to execute.
|
|
43
|
+
* Returns null if allowed, or an error message if blocked.
|
|
44
|
+
*/
|
|
45
|
+
checkCommand(command, device) {
|
|
46
|
+
// Audit log regardless of enforcement
|
|
47
|
+
if (this.config.auditLog) {
|
|
48
|
+
const deviceLabel = device ? ` [${device}]` : "";
|
|
49
|
+
this.logger.info(`[AUDIT]${deviceLabel} ${this.redactForLog(command)}`);
|
|
50
|
+
}
|
|
51
|
+
if (!this.config.enabled)
|
|
52
|
+
return null;
|
|
53
|
+
// Rate limiting
|
|
54
|
+
if (this.config.rateLimit > 0) {
|
|
55
|
+
const now = Date.now();
|
|
56
|
+
const windowMs = 60_000;
|
|
57
|
+
if (now - this.rateBucket.windowStart > windowMs) {
|
|
58
|
+
this.rateBucket = { count: 0, windowStart: now };
|
|
59
|
+
}
|
|
60
|
+
this.rateBucket.count++;
|
|
61
|
+
if (this.rateBucket.count > this.config.rateLimit) {
|
|
62
|
+
this.logger.warn(`Rate limit exceeded: ${this.rateBucket.count}/${this.config.rateLimit} per minute`);
|
|
63
|
+
return `Rate limit exceeded (${this.config.rateLimit} commands/minute). Wait before retrying.`;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Blocklist check
|
|
67
|
+
const cmdLower = command.toLowerCase();
|
|
68
|
+
for (const blocked of this.config.blockedCommands) {
|
|
69
|
+
if (cmdLower.includes(blocked.toLowerCase())) {
|
|
70
|
+
this.logger.warn(`Blocked command: ${command} (matched: ${blocked})`);
|
|
71
|
+
return `Command blocked by security policy (matched: "${blocked}").`;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Allowlist check (only if allowlist is non-empty)
|
|
75
|
+
if (this.config.allowedCommands.length > 0) {
|
|
76
|
+
const allowed = this.config.allowedCommands.some((pattern) => cmdLower.includes(pattern.toLowerCase()));
|
|
77
|
+
if (!allowed) {
|
|
78
|
+
this.logger.warn(`Command not in allowlist: ${command}`);
|
|
79
|
+
return "Command not in security allowlist.";
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Log a completed command for audit trail.
|
|
86
|
+
*/
|
|
87
|
+
logResult(command, success, device) {
|
|
88
|
+
if (!this.config.auditLog)
|
|
89
|
+
return;
|
|
90
|
+
const status = success ? "OK" : "FAIL";
|
|
91
|
+
const deviceLabel = device ? ` [${device}]` : "";
|
|
92
|
+
this.logger.info(`[AUDIT]${deviceLabel} ${status}: ${this.redactForLog(command)}`);
|
|
93
|
+
}
|
|
94
|
+
/** Whether security enforcement is active. */
|
|
95
|
+
get isEnabled() {
|
|
96
|
+
return this.config.enabled;
|
|
97
|
+
}
|
|
98
|
+
/** Get current rate limit status. */
|
|
99
|
+
getRateStatus() {
|
|
100
|
+
const elapsed = Date.now() - this.rateBucket.windowStart;
|
|
101
|
+
return {
|
|
102
|
+
count: this.rateBucket.count,
|
|
103
|
+
limit: this.config.rateLimit,
|
|
104
|
+
windowRemaining: Math.max(0, 60_000 - elapsed),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Redact potentially sensitive content from commands before logging.
|
|
109
|
+
* Truncates long commands and masks common credential patterns.
|
|
110
|
+
*/
|
|
111
|
+
redactForLog(command) {
|
|
112
|
+
const MAX_LOG_LENGTH = 200;
|
|
113
|
+
// Mask common credential patterns
|
|
114
|
+
let redacted = command
|
|
115
|
+
.replace(/(?:password|passwd|token|secret|key|auth)([\s=:]+)\S+/gi, (_, sep) => `***${sep}***REDACTED***`)
|
|
116
|
+
.replace(/echo\s+["'].*?["']\s*>\s*/g, "echo '***' > ");
|
|
117
|
+
if (redacted.length > MAX_LOG_LENGTH) {
|
|
118
|
+
redacted = redacted.substring(0, MAX_LOG_LENGTH) + `... (${command.length} chars total)`;
|
|
119
|
+
}
|
|
120
|
+
return redacted;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=security.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/middleware/security.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Dump Utilities — Shared uiautomator XML capture and attribute parsing.
|
|
3
|
+
*
|
|
4
|
+
* Used by ui.ts, accessibility.ts, and test-gen.ts to avoid duplicating
|
|
5
|
+
* the dump→cat→rm pattern and regex-based attribute extraction.
|
|
6
|
+
*/
|
|
7
|
+
import { AdbBridge } from "../bridge/adb-bridge.js";
|
|
8
|
+
/**
|
|
9
|
+
* Pre-compiled regexes for uiautomator XML attribute extraction.
|
|
10
|
+
* Avoids creating new RegExp objects inside hot parsing loops.
|
|
11
|
+
*/
|
|
12
|
+
export declare const UI_ATTR_REGEXES: Record<string, RegExp>;
|
|
13
|
+
/** Extract an attribute value from a uiautomator node attributes string. */
|
|
14
|
+
export declare function getAttr(attrs: string, name: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Capture the UI hierarchy XML from the device.
|
|
17
|
+
* Handles the dump → cat → cleanup sequence in one place.
|
|
18
|
+
* Uses a unique dump path per call to avoid collisions across concurrent tool invocations.
|
|
19
|
+
* Cleanup runs in a finally block to prevent device file leaks on errors.
|
|
20
|
+
* Returns the XML string, or null if the dump failed.
|
|
21
|
+
*/
|
|
22
|
+
export declare function captureUiDump(bridge: AdbBridge, serial: string, dumpPath?: string): Promise<string | null>;
|
|
23
|
+
//# sourceMappingURL=ui-dump.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-dump.d.ts","sourceRoot":"","sources":["../../src/middleware/ui-dump.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAIpD;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAUlD,CAAC;AAEF,4EAA4E;AAC5E,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAK3D;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBxB"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Dump Utilities — Shared uiautomator XML capture and attribute parsing.
|
|
3
|
+
*
|
|
4
|
+
* Used by ui.ts, accessibility.ts, and test-gen.ts to avoid duplicating
|
|
5
|
+
* the dump→cat→rm pattern and regex-based attribute extraction.
|
|
6
|
+
*/
|
|
7
|
+
import { isOnDevice } from "../config/config.js";
|
|
8
|
+
import { shellEscape } from "./sanitize.js";
|
|
9
|
+
/**
|
|
10
|
+
* Pre-compiled regexes for uiautomator XML attribute extraction.
|
|
11
|
+
* Avoids creating new RegExp objects inside hot parsing loops.
|
|
12
|
+
*/
|
|
13
|
+
export const UI_ATTR_REGEXES = {
|
|
14
|
+
"resource-id": /resource-id="([^"]*)"/,
|
|
15
|
+
"text": /\btext="([^"]*)"/,
|
|
16
|
+
"content-desc": /content-desc="([^"]*)"/,
|
|
17
|
+
"class": /\bclass="([^"]*)"/,
|
|
18
|
+
"clickable": /clickable="([^"]*)"/,
|
|
19
|
+
"scrollable": /scrollable="([^"]*)"/,
|
|
20
|
+
"focusable": /focusable="([^"]*)"/,
|
|
21
|
+
"enabled": /enabled="([^"]*)"/,
|
|
22
|
+
"bounds": /bounds="([^"]*)"/,
|
|
23
|
+
};
|
|
24
|
+
/** Extract an attribute value from a uiautomator node attributes string. */
|
|
25
|
+
export function getAttr(attrs, name) {
|
|
26
|
+
const regex = UI_ATTR_REGEXES[name];
|
|
27
|
+
if (!regex)
|
|
28
|
+
return "";
|
|
29
|
+
const m = attrs.match(regex);
|
|
30
|
+
return m ? m[1] : "";
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Capture the UI hierarchy XML from the device.
|
|
34
|
+
* Handles the dump → cat → cleanup sequence in one place.
|
|
35
|
+
* Uses a unique dump path per call to avoid collisions across concurrent tool invocations.
|
|
36
|
+
* Cleanup runs in a finally block to prevent device file leaks on errors.
|
|
37
|
+
* Returns the XML string, or null if the dump failed.
|
|
38
|
+
*/
|
|
39
|
+
export async function captureUiDump(bridge, serial, dumpPath) {
|
|
40
|
+
// On-device: use /data/local/tmp/ which is world-readable/writable — avoids
|
|
41
|
+
// scoped storage issues with /sdcard/ on Android 16+.
|
|
42
|
+
// ADB mode: use /sdcard/ which is the standard ADB scratch location.
|
|
43
|
+
const defaultDir = isOnDevice() ? "/data/local/tmp" : "/sdcard";
|
|
44
|
+
const path = dumpPath ?? `${defaultDir}/DA_uidump_${Date.now()}.xml`;
|
|
45
|
+
try {
|
|
46
|
+
await bridge.shell(`uiautomator dump '${shellEscape(path)}'`, { device: serial, timeout: 15000 });
|
|
47
|
+
const catResult = await bridge.shell(`cat '${shellEscape(path)}'`, { device: serial });
|
|
48
|
+
const xml = catResult.stdout;
|
|
49
|
+
if (!xml || xml.includes("ERROR") || !xml.includes("<hierarchy")) {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
return xml;
|
|
53
|
+
}
|
|
54
|
+
finally {
|
|
55
|
+
// Always clean up the device-side dump file, even if cat/dump throws
|
|
56
|
+
await bridge.shell(`rm '${shellEscape(path)}'`, { device: serial, ignoreExitCode: true }).catch(() => { });
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=ui-dump.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-dump.js","sourceRoot":"","sources":["../../src/middleware/ui-dump.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAA2B;IACrD,aAAa,EAAE,uBAAuB;IACtC,MAAM,EAAE,kBAAkB;IAC1B,cAAc,EAAE,wBAAwB;IACxC,OAAO,EAAE,mBAAmB;IAC5B,WAAW,EAAE,qBAAqB;IAClC,YAAY,EAAE,sBAAsB;IACpC,WAAW,EAAE,qBAAqB;IAClC,SAAS,EAAE,mBAAmB;IAC9B,QAAQ,EAAE,kBAAkB;CAC7B,CAAC;AAEF,4EAA4E;AAC5E,MAAM,UAAU,OAAO,CAAC,KAAa,EAAE,IAAY;IACjD,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACvB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAiB,EACjB,MAAc,EACd,QAAiB;IAEjB,4EAA4E;IAC5E,sDAAsD;IACtD,qEAAqE;IACrE,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,MAAM,IAAI,GAAG,QAAQ,IAAI,GAAG,UAAU,cAAc,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;IACrE,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC,qBAAqB,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAClG,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAEvF,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACjE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;YAAS,CAAC;QACT,qEAAqE;QACrE,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC5G,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DeepADB MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Wires together the ADB bridge, device manager, middleware,
|
|
5
|
+
* and all tool/resource/prompt modules into a single MCP server instance.
|
|
6
|
+
*/
|
|
7
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
8
|
+
import { AdbBridge } from "./bridge/adb-bridge.js";
|
|
9
|
+
import { DeviceManager } from "./bridge/device-manager.js";
|
|
10
|
+
import { Logger } from "./middleware/logger.js";
|
|
11
|
+
export interface CreateServerResult {
|
|
12
|
+
server: McpServer;
|
|
13
|
+
logger: Logger;
|
|
14
|
+
bridge: AdbBridge;
|
|
15
|
+
deviceManager: DeviceManager;
|
|
16
|
+
}
|
|
17
|
+
export declare function createServer(): Promise<CreateServerResult>;
|
|
18
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAoDhD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;IAClB,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAoFhE"}
|
package/build/server.js
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DeepADB MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Wires together the ADB bridge, device manager, middleware,
|
|
5
|
+
* and all tool/resource/prompt modules into a single MCP server instance.
|
|
6
|
+
*/
|
|
7
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
8
|
+
import { mkdirSync, existsSync } from "fs";
|
|
9
|
+
import { AdbBridge } from "./bridge/adb-bridge.js";
|
|
10
|
+
import { LocalBridge } from "./bridge/local-bridge.js";
|
|
11
|
+
import { DeviceManager } from "./bridge/device-manager.js";
|
|
12
|
+
import { Logger } from "./middleware/logger.js";
|
|
13
|
+
import { SecurityMiddleware } from "./middleware/security.js";
|
|
14
|
+
import { config, validateConfig, isOnDevice } from "./config/config.js";
|
|
15
|
+
// Tool module registrations
|
|
16
|
+
import { registerDeviceTools } from "./tools/device.js";
|
|
17
|
+
import { registerShellTools } from "./tools/shell.js";
|
|
18
|
+
import { registerPackageTools } from "./tools/packages.js";
|
|
19
|
+
import { registerFileTools } from "./tools/files.js";
|
|
20
|
+
import { registerLogTools } from "./tools/logs.js";
|
|
21
|
+
import { registerDiagnosticTools } from "./tools/diagnostics.js";
|
|
22
|
+
import { registerUiTools } from "./tools/ui.js";
|
|
23
|
+
import { registerBuildTools } from "./tools/build.js";
|
|
24
|
+
import { registerHealthTools } from "./tools/health.js";
|
|
25
|
+
import { registerWirelessTools } from "./tools/wireless.js";
|
|
26
|
+
import { registerControlTools } from "./tools/control.js";
|
|
27
|
+
import { registerLogcatWatchTools } from "./tools/logcat-watch.js";
|
|
28
|
+
import { registerForwardingTools } from "./tools/forwarding.js";
|
|
29
|
+
import { registerScreenRecordTools } from "./tools/screen-record.js";
|
|
30
|
+
import { registerEmulatorTools } from "./tools/emulator.js";
|
|
31
|
+
import { registerQemuTools } from "./tools/qemu.js";
|
|
32
|
+
import { registerTestingTools } from "./tools/testing.js";
|
|
33
|
+
import { registerMultiDeviceTools } from "./tools/multi-device.js";
|
|
34
|
+
import { registerSnapshotTools } from "./tools/snapshot.js";
|
|
35
|
+
import { registerNetworkCaptureTools } from "./tools/network-capture.js";
|
|
36
|
+
import { registerCiTools } from "./tools/ci.js";
|
|
37
|
+
import { registerPluginTools, loadPlugins } from "./tools/plugins.js";
|
|
38
|
+
import { registerBasebandTools } from "./tools/baseband.js";
|
|
39
|
+
import { registerAccessibilityTools } from "./tools/accessibility.js";
|
|
40
|
+
import { registerRegressionTools } from "./tools/regression.js";
|
|
41
|
+
import { registerDeviceFarmTools } from "./tools/device-farm.js";
|
|
42
|
+
import { registerRegistryTools } from "./tools/registry.js";
|
|
43
|
+
import { registerAtCommandTools } from "./tools/at-commands.js";
|
|
44
|
+
import { registerScreenshotDiffTools } from "./tools/screenshot-diff.js";
|
|
45
|
+
import { registerWorkflowTools } from "./tools/workflow.js";
|
|
46
|
+
import { registerSplitApkTools } from "./tools/split-apk.js";
|
|
47
|
+
import { registerMirroringTools } from "./tools/mirroring.js";
|
|
48
|
+
import { registerTestGenTools } from "./tools/test-gen.js";
|
|
49
|
+
import { registerOtaMonitorTools } from "./tools/ota-monitor.js";
|
|
50
|
+
import { registerRilInterceptTools } from "./tools/ril-intercept.js";
|
|
51
|
+
import { registerDeviceProfileTools } from "./tools/device-profiles.js";
|
|
52
|
+
import { registerFirmwareAnalysisTools } from "./tools/firmware-analysis.js";
|
|
53
|
+
import { registerWorkflowMarketTools } from "./tools/workflow-market.js";
|
|
54
|
+
import { registerSelinuxAuditTools } from "./tools/selinux-audit.js";
|
|
55
|
+
import { registerThermalPowerTools } from "./tools/thermal-power.js";
|
|
56
|
+
import { registerNetworkDiscoveryTools } from "./tools/network-discovery.js";
|
|
57
|
+
// Resource and prompt registrations
|
|
58
|
+
import { registerResources } from "./tools/resources.js";
|
|
59
|
+
import { registerPrompts } from "./tools/prompts.js";
|
|
60
|
+
export async function createServer() {
|
|
61
|
+
const logger = new Logger(process.env.DA_LOG_LEVEL ?? "info");
|
|
62
|
+
// Validate configuration at startup
|
|
63
|
+
const warnings = validateConfig();
|
|
64
|
+
for (const warning of warnings) {
|
|
65
|
+
logger.warn(warning);
|
|
66
|
+
}
|
|
67
|
+
// Ensure temp directory exists once, before any tool module registration
|
|
68
|
+
if (!existsSync(config.tempDir)) {
|
|
69
|
+
mkdirSync(config.tempDir, { recursive: true });
|
|
70
|
+
}
|
|
71
|
+
const bridge = isOnDevice() ? new LocalBridge(logger) : new AdbBridge(logger);
|
|
72
|
+
if (bridge instanceof LocalBridge) {
|
|
73
|
+
logger.info("On-device mode detected — using LocalBridge (direct execution, no ADB)");
|
|
74
|
+
}
|
|
75
|
+
const deviceManager = new DeviceManager(bridge);
|
|
76
|
+
const security = new SecurityMiddleware(logger);
|
|
77
|
+
const server = new McpServer({
|
|
78
|
+
name: "deepadb",
|
|
79
|
+
version: "1.0.0",
|
|
80
|
+
});
|
|
81
|
+
// Build unified tool context
|
|
82
|
+
const ctx = { server, bridge, deviceManager, logger, security, config };
|
|
83
|
+
// Register all tool modules (41 modules)
|
|
84
|
+
registerDeviceTools(ctx);
|
|
85
|
+
registerShellTools(ctx);
|
|
86
|
+
registerPackageTools(ctx);
|
|
87
|
+
registerFileTools(ctx);
|
|
88
|
+
registerLogTools(ctx);
|
|
89
|
+
registerDiagnosticTools(ctx);
|
|
90
|
+
registerUiTools(ctx);
|
|
91
|
+
registerBuildTools(ctx);
|
|
92
|
+
registerHealthTools(ctx);
|
|
93
|
+
registerWirelessTools(ctx);
|
|
94
|
+
registerControlTools(ctx);
|
|
95
|
+
registerLogcatWatchTools(ctx);
|
|
96
|
+
registerForwardingTools(ctx);
|
|
97
|
+
registerScreenRecordTools(ctx);
|
|
98
|
+
registerEmulatorTools(ctx);
|
|
99
|
+
registerQemuTools(ctx);
|
|
100
|
+
registerTestingTools(ctx);
|
|
101
|
+
registerMultiDeviceTools(ctx);
|
|
102
|
+
registerSnapshotTools(ctx);
|
|
103
|
+
registerNetworkCaptureTools(ctx);
|
|
104
|
+
registerCiTools(ctx);
|
|
105
|
+
registerPluginTools(ctx);
|
|
106
|
+
registerBasebandTools(ctx);
|
|
107
|
+
registerAccessibilityTools(ctx);
|
|
108
|
+
registerRegressionTools(ctx);
|
|
109
|
+
registerDeviceFarmTools(ctx);
|
|
110
|
+
registerRegistryTools(ctx);
|
|
111
|
+
registerAtCommandTools(ctx);
|
|
112
|
+
registerScreenshotDiffTools(ctx);
|
|
113
|
+
registerWorkflowTools(ctx);
|
|
114
|
+
registerSplitApkTools(ctx);
|
|
115
|
+
registerMirroringTools(ctx);
|
|
116
|
+
registerTestGenTools(ctx);
|
|
117
|
+
registerOtaMonitorTools(ctx);
|
|
118
|
+
registerRilInterceptTools(ctx);
|
|
119
|
+
registerDeviceProfileTools(ctx);
|
|
120
|
+
registerFirmwareAnalysisTools(ctx);
|
|
121
|
+
registerWorkflowMarketTools(ctx);
|
|
122
|
+
registerSelinuxAuditTools(ctx);
|
|
123
|
+
registerThermalPowerTools(ctx);
|
|
124
|
+
registerNetworkDiscoveryTools(ctx);
|
|
125
|
+
// Register MCP resources and prompts
|
|
126
|
+
registerResources(ctx);
|
|
127
|
+
registerPrompts(ctx);
|
|
128
|
+
// Load external plugins (async — scans plugin directory)
|
|
129
|
+
await loadPlugins(ctx);
|
|
130
|
+
logger.info("DeepADB MCP server initialized — 41 tool modules, 4 resources, 4 prompts. Ready.");
|
|
131
|
+
return { server, logger, bridge, deviceManager };
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ToolContext — Unified dependency bundle for all tool modules.
|
|
3
|
+
*
|
|
4
|
+
* Instead of passing (server, bridge, deviceManager) to every module,
|
|
5
|
+
* we pass a single context object. This makes adding new cross-cutting
|
|
6
|
+
* dependencies non-breaking.
|
|
7
|
+
*/
|
|
8
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
9
|
+
import { AdbBridge } from "./bridge/adb-bridge.js";
|
|
10
|
+
import { DeviceManager } from "./bridge/device-manager.js";
|
|
11
|
+
import { Logger } from "./middleware/logger.js";
|
|
12
|
+
import { SecurityMiddleware } from "./middleware/security.js";
|
|
13
|
+
import { DeepADBConfig } from "./config/config.js";
|
|
14
|
+
export interface ToolContext {
|
|
15
|
+
server: McpServer;
|
|
16
|
+
bridge: AdbBridge;
|
|
17
|
+
deviceManager: DeviceManager;
|
|
18
|
+
logger: Logger;
|
|
19
|
+
security: SecurityMiddleware;
|
|
20
|
+
config: DeepADBConfig;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=tool-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-context.d.ts","sourceRoot":"","sources":["../src/tool-context.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,SAAS,CAAC;IAClB,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,MAAM,EAAE,aAAa,CAAC;CACvB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ToolContext — Unified dependency bundle for all tool modules.
|
|
3
|
+
*
|
|
4
|
+
* Instead of passing (server, bridge, deviceManager) to every module,
|
|
5
|
+
* we pass a single context object. This makes adding new cross-cutting
|
|
6
|
+
* dependencies non-breaking.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=tool-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-context.js","sourceRoot":"","sources":["../src/tool-context.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,10 @@
|
|
|
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 { ToolContext } from "../tool-context.js";
|
|
9
|
+
export declare function registerAccessibilityTools(ctx: ToolContext): void;
|
|
10
|
+
//# sourceMappingURL=accessibility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accessibility.d.ts","sourceRoot":"","sources":["../../src/tools/accessibility.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAoJjD,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAqKjE"}
|